From 4be77c8f634fafbba7f42b19aaed6776d2247341 Mon Sep 17 00:00:00 2001 From: Andreas Volz Date: Thu, 3 Jun 2010 22:18:34 +0000 Subject: [PATCH] del handler (but not working at all) SVN revision: 49422 --- .../include/elementaryxx/GenListDataModel.h | 2 +- .../include/elementaryxx/GenListItem.h | 9 ++++-- elementaryxx/src/GenList.cpp | 6 ++-- elementaryxx/src/GenListDataModel.cpp | 10 +++++-- elementaryxx/src/GenListItem.cpp | 29 +++++++++++++------ 5 files changed, 40 insertions(+), 16 deletions(-) diff --git a/elementaryxx/include/elementaryxx/GenListDataModel.h b/elementaryxx/include/elementaryxx/GenListDataModel.h index 32b165e..9a0c524 100644 --- a/elementaryxx/include/elementaryxx/GenListDataModel.h +++ b/elementaryxx/include/elementaryxx/GenListDataModel.h @@ -31,7 +31,7 @@ public: virtual bool getState (GenListColumnConstructor *construction, Evasxx::Object &obj, const std::string &part) = 0; - virtual void del (GenListColumnConstructor *construction, Evasxx::Object &obj) = 0; + sigc::signal signalDel; private: static char *gl_label_get (const void *data, Evas_Object *obj, const char *part); diff --git a/elementaryxx/include/elementaryxx/GenListItem.h b/elementaryxx/include/elementaryxx/GenListItem.h index b7cd609..8bcc05a 100644 --- a/elementaryxx/include/elementaryxx/GenListItem.h +++ b/elementaryxx/include/elementaryxx/GenListItem.h @@ -6,11 +6,13 @@ /* EFLxx */ #include +#include "GenListColumnConstructor.h" namespace Elmxx { /* forward declarations */ class GenList; +class GenListDataModel; class GenListItem { @@ -46,14 +48,17 @@ public: const Evasxx::Object *getEvasObject (); - static GenListItem *wrap (const Elm_Genlist_Item *item); + static GenListItem *wrap (Elm_Genlist_Item &item, GenListDataModel &model); static GenListItem *objectLink (const Elm_Genlist_Item *item); private: - GenListItem (const Elm_Genlist_Item *item); + GenListItem (Elm_Genlist_Item *item); + + void destroy (GenListColumnConstructor &construction, const Evasxx::Object &obj); Elm_Genlist_Item *mItem; + GenListDataModel *mDataModel; }; } // end namespace Elmxx diff --git a/elementaryxx/src/GenList.cpp b/elementaryxx/src/GenList.cpp index 327faa5..78fadd3 100644 --- a/elementaryxx/src/GenList.cpp +++ b/elementaryxx/src/GenList.cpp @@ -187,8 +187,10 @@ GenListItem *GenList::append (GenListColumnConstructor *construction, const GenL { mInternalSelList.push_back (selection); } - - return GenListItem::wrap (gli); + + GenListItem *item = GenListItem::wrap (*gli, *mModel); + + return item; } } // end namespace Elmxx diff --git a/elementaryxx/src/GenListDataModel.cpp b/elementaryxx/src/GenListDataModel.cpp index fb08705..157ded6 100644 --- a/elementaryxx/src/GenListDataModel.cpp +++ b/elementaryxx/src/GenListDataModel.cpp @@ -6,6 +6,7 @@ /* STD */ #include +#include using namespace std; @@ -70,8 +71,13 @@ void GenListDataModel::gl_del(const void *data, Evas_Object *obj) const_cast (data)); GenListDataModel *model = construction->mDataModel; Evasxx::Object *objWrap = Evasxx::Object::objectLink (obj); - - return model->del (construction, *objWrap); + assert (model); + assert (objWrap); + + cout << "+del" << endl; + // FIXME: for some reason emit isn't working. and never returns and emit() is called infinite?? + //model->signalDel.emit (*construction, *objWrap); + cout << "-del" << endl; } } // end namespace Elmxx diff --git a/elementaryxx/src/GenListItem.cpp b/elementaryxx/src/GenListItem.cpp index a82fdea..bf1a1bf 100644 --- a/elementaryxx/src/GenListItem.cpp +++ b/elementaryxx/src/GenListItem.cpp @@ -4,16 +4,19 @@ /* Project */ #include "../include/elementaryxx/GenListItem.h" +#include "../include/elementaryxx/GenListDataModel.h" /* STD */ #include +using namespace std; + namespace Elmxx { -GenListItem::GenListItem (const Elm_Genlist_Item *item) : - mItem (const_cast (item)) +GenListItem::GenListItem (Elm_Genlist_Item *item) : + mItem (item) { - elm_genlist_item_data_set (mItem, this); + //elm_genlist_item_data_set (mItem, this); } GenListItem::~GenListItem () @@ -24,7 +27,6 @@ GenListItem::~GenListItem () void GenListItem::clearSubItems () { elm_genlist_item_subitems_clear (mItem); - } void GenListItem::setSelected (bool selected) @@ -108,16 +110,25 @@ const Evasxx::Object *GenListItem::getEvasObject () return Evasxx::Object::objectLink (obj); } -GenListItem *GenListItem::wrap (const Elm_Genlist_Item *item) +GenListItem *GenListItem::wrap (Elm_Genlist_Item &item, GenListDataModel &model) { - return new GenListItem (item); + GenListItem *genItem = new GenListItem (&item); + genItem->mDataModel = &model; + model.signalDel.connect (sigc::mem_fun (genItem, &GenListItem::destroy)); + + return genItem; } GenListItem *GenListItem::objectLink (const Elm_Genlist_Item *item) { - GenListItem *item2 = static_cast (const_cast (elm_genlist_item_data_get(item))); - assert (item2); - return item2; + //GenListItem *item2 = static_cast (const_cast (elm_genlist_item_data_get(item))); + //assert (item2); + return NULL;//item2; +} + +void GenListItem::destroy (GenListColumnConstructor &construction, const Evasxx::Object &obj) +{ + cout << "destroy" << endl; } } // end namespace Elmxx