]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/listdata.h
Minor style fixes
[libs/gltk.git] / source / listdata.h
index 38706f8b1cc9ac64648c8b4a0202034b5e1475c3..9d1a45704fea947c33f1168787c2154b87039da3 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef MSP_GLTK_LISTDATA_H_
 #define MSP_GLTK_LISTDATA_H_
 
+#include <stdexcept>
 #include <string>
 #include <vector>
 #include <sigc++/signal.h>
@@ -15,7 +16,7 @@ public:
        sigc::signal<void, unsigned> signal_item_added;
        sigc::signal<void, unsigned> signal_item_removed;
        sigc::signal<void> signal_cleared;
-       sigc::signal<void> signal_refresh_strings;
+       sigc::signal<void, unsigned> signal_refresh_item;
 
 protected:
        ListData() { }
@@ -24,7 +25,12 @@ public:
 
        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<typename T>
@@ -38,7 +44,7 @@ protected:
 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");
@@ -55,6 +61,22 @@ public:
                return items[i];
        }
 
+       int find(const T &v) const
+       {
+               for(unsigned i=0; i<items.size(); ++i)
+                       if(items[i]==v)
+                               return i;
+               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())