Ok, habs mir schon gedacht dass das etwas unklar ist, also hier ein wenig Code:
Die abstrakte Klasse sieht so aus:
Code:
class AbstractData
{
public:
AbstractData();
AbstractData(const AbstractData& src);
virtual ~AbstractData() = 0;
AbstractData& operator=(const AbstractData& src);
virtual Glib::ustring get_name() = 0;
protected /* static */:
static mysqlpp::Query get_query();
protected:
void execute(mysqlpp::Query& query);
};
die wird von einigen anderen Klassen geerbt bzw. implementiert.
Code:
class DtSong : public AbstractData
{
public:
DtSong();
virtual ~DtSong();
DtSong(const DtSong& src);
DtSong operator=(const DtSong& src);
public:
// getters
guint get_id();
Glib::ustring get_name();
DtAudioCodec get_audiocodec();
DtLanguage get_language();
Glib::ustring get_description();
// setters
void set_id(guint id);
void set_name(Glib::ustring name);
void set_audiocodec(DtAudioCodec audiocodec);
void set_language(DtLanguage language);
void set_description(Glib::ustring description);
// database
void insert();
void update();
void remove();
public /* static */:
static DtSong select(guint id);
static std::list<DtSong> select();
protected:
DtSongMap convert2Map();
protected /* static */:
static DtSong convert2Dt(DtSongMap map);
protected:
guint dt_song_id;
Glib::ustring dt_song_name;
Glib::ustring dt_song_description;
DtAudioCodec dt_song_audiocodec;
DtLanguage dt_song_language;
private:
};
Die Methode
Code:
static std::list<DtSong> select();
wird von jeder von AbstractData erbenden Klassen implementiert.
Nun hab ich fuer ein Gtkmm-Combo Element folgendes Model erstellt:
Code:
class ComboModelColumns : public Gtk::TreeModel::ColumnRecord
{
public:
ComboModelColumns()
{ add(col_id); add(col_name); }
Gtk::TreeModelColumn<int> col_id;
Gtk::TreeModelColumn<Glib::ustring> col_name;
};
Hier soll nun noch ein Feld hinzukommen, mit dem man aben die Methode select() aufrufen kann.
Und zwar hol ich in einer Iterator-Schleife das gewaehlte element:
Code:
Gtk::TreeModel::Row row = *iter;
und moechte dann mit
Code:
std::list<AbstractData> datas = row[combobox_columns.col_data]::select();
oder aehnlich auf die select-Methode zugreifen.
Lesezeichen