X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flistdata.h;h=00d2b9b65a154e587789b7ffaf18af1ad2334007;hb=83f553a382ce554951594de85e4fd7b854305463;hp=094b287b703545c294f71a644b33b5be0032af00;hpb=37fc7121c2bde0925e76a9af92c979d7c311315b;p=libs%2Fgltk.git diff --git a/source/listdata.h b/source/listdata.h index 094b287..00d2b9b 100644 --- a/source/listdata.h +++ b/source/listdata.h @@ -1,30 +1,37 @@ #ifndef MSP_GLTK_LISTDATA_H_ #define MSP_GLTK_LISTDATA_H_ +#include #include #include #include #include +#include "mspgltk_api.h" namespace Msp { namespace GLtk { -class ListData +class MSPGLTK_API ListData { public: sigc::signal signal_item_added; sigc::signal signal_item_removed; sigc::signal signal_cleared; - sigc::signal signal_refresh_strings; + sigc::signal signal_refresh_item; protected: - ListData() { } + ListData() = default; public: - virtual ~ListData() { } + virtual ~ListData() = default; virtual unsigned size() const = 0; virtual std::string get_string(unsigned) const = 0; - void refresh_strings() const { signal_refresh_strings.emit(); } + void refresh(unsigned i) const + { + if(i>=size()) + throw std::out_of_range("ListData::refresh"); + signal_refresh_item.emit(i); + } }; template @@ -33,12 +40,12 @@ class ListDataStore: public ListData protected: std::vector items; - ListDataStore() { } + ListDataStore() = default; public: void append(const T &v) { insert(items.size(), v); } - void insert(unsigned i, const T & v) + void insert(unsigned i, const T &v) { if(i>items.size()) throw std::out_of_range("ListDataStore::insert"); @@ -63,6 +70,14 @@ public: return -1; } + using ListData::refresh; + void refresh(const T &v) const + { + int i = find(v); + if(i>=0) + signal_refresh_item.emit(i); + } + void remove(unsigned i) { if(i>=items.size()) @@ -96,7 +111,7 @@ public: typedef std::string Func(const T &); private: - Func *func; + Func *func = 0; public: FunctionListData(Func f): func(f) { }