#ifndef MSP_GLTK_LISTDATA_H_
#define MSP_GLTK_LISTDATA_H_
+#include <stdexcept>
#include <string>
#include <vector>
#include <sigc++/signal.h>
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() { }
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>
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())