eflxx/eflxx_examples/src/elementaryxx/full/test_genlist.cpp

1268 lines
38 KiB
C++

#include "test.h"
typedef struct _TestItem
{
GenListItem *item;
int mode;
int onoff;
} TestItem;
class GenListColumnConstructor1 : public GenListColumnConstructor
{
public:
GenListColumnConstructor1 () :
mItemNum (0)
{}
void setItemNum (int num) {mItemNum = num;}
int getItemNum () const {return mItemNum;}
private:
int mItemNum;
};
class GenListDataModel1 : public GenListDataModel
{
public:
GenListDataModel1 (const std::string &style) :
GenListDataModel (style) {}
~GenListDataModel1 () {}
std::string getLabel (GenListColumnConstructor *construction, Evasxx::Object &obj, const std::string &part) const
{
GenListColumnConstructor1 *construct1 = static_cast <GenListColumnConstructor1*> (construction);
cout << "GenListDataModel::getLabel" << endl;
return "Item " + toString <int> (construct1->getItemNum ());
}
Elmxx::Object *getIcon (GenListColumnConstructor *construction, Evasxx::Object &obj, const std::string &part)
{
Window *win = static_cast <Window*> (&obj);
Icon *ic = Icon::factory (*win);
ic->setFile (searchPixmapFile ("elementaryxx/logo_small.png"));
ic->setAspectHintSize (EVAS_ASPECT_CONTROL_VERTICAL, Eflxx::Size (1, 1));
//part: elm.swallow.icon
//part: elm.swallow.end
return ic;
}
bool getState (GenListColumnConstructor *construction, Evasxx::Object &obj, const std::string &part)
{
return false;
}
};
class GenListColumnSelector1 : public GenListColumnSelector
{
public:
void setItemNum (int num) {mItemNum = num;}
int getItemNum () const {return mItemNum;}
private:
int mItemNum;
};
static GenListDataModel1 model ("default");
static GenListDataModel1 model2 ("default");
/*
* Hint: 'constructList1' isn't cleaned up at exit. Normal applications should do this.
* This could be done at the GenList or Window destructor. For this example it's ok...
*/
std::vector <GenListColumnConstructor1*> constructList1;
/*
* Hint: 'selectList1' isn't cleaned up at exit. Normal applications should do this.
* This could be done at the GenList or Window destructor. For this example it's ok...
*/
std::vector <GenListColumnSelector1*> selectList1;
void glSelected (GenListColumnSelector &selection, const Evasxx::Object &obj, void *event_info)
{
GenListColumnSelector1 *selection1 = static_cast <GenListColumnSelector1*> (&selection);
cout << "glSelected: " << selection1->getItemNum () << endl;
}
void _move (const Evasxx::MouseMoveEvent &ev, GenList *gl)
{
int where = 0;
Eflxx::Point pos (ev.data->cur.canvas.x, ev.data->cur.canvas.y);
GenListItem *gli = gl->getItemAtXY (pos, where);
if (gli)
{
printf("over item where %i\n", where);
}
else
{
printf("over none, where %i\n", where);
}
}
static void _bt50_cb (Evasxx::Object &obj, void *event_info, GenListItem *gli)
{
gli->bringIn ();
}
static void _bt1500_cb (Evasxx::Object &obj, void *event_info, GenListItem *gli)
{
gli->bringInMiddle ();
}
static void _gl_selected (Evasxx::Object &obj, void *event_info)
{
printf("selected: %p\n", event_info);
}
static void _gl_clicked (Evasxx::Object &obj, void *event_info)
{
printf("clicked: %p\n", event_info);
}
static void _gl_longpress (Evasxx::Object &obj, void *event_info)
{
printf("longpress %p\n", event_info);
}
void test_genlist (void *data, Evas_Object *obj, void *event_info)
{
Window *win = Window::factory ("genlist", ELM_WIN_BASIC);
win->setTitle ("GenList");
win->setAutoDel (true);
Background *bg = Background::factory (*win);
win->addObjectResize (*bg);
bg->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
bg->show ();
Box *bx = Box::factory (*win);
bx->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
win->addObjectResize (*bx);
bx->show ();
GenList *gl = GenList::factory (*win);
gl->getEventSignal ("selected")->connect (sigc::ptr_fun (&_gl_selected));
gl->getEventSignal ("clicked")->connect (sigc::ptr_fun (&_gl_clicked));
gl->getEventSignal ("longpressed")->connect (sigc::ptr_fun (&_gl_longpress));
// FIXME: This causes genlist to resize the horiz axis very slowly :(
// Reenable this and resize the window horizontally, then try to resize it back
//gl->setHorizontalMode (ELM_LIST_LIMIT);
gl->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
gl->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bx->packEnd (*gl);
gl->show ();
Eflxx::CountedPtr <Evasxx::Canvas> canvas (win->getEvas ());
Evasxx::Rectangle *over = new Evasxx::Rectangle (*canvas);
over->setColor (Eflxx::Color (0, 0, 0, 0));
over->signalHandleMouseMove.connect (sigc::bind (sigc::ptr_fun (&_move), gl));
over->setEventsRepeat (true);
over->show ();
over->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
win->addObjectResize (*over);
Button *bt_50 = Button::factory (*win);
bt_50->setLabel ("Go to 50");
bx->packEnd (*bt_50);
bt_50->show ();
Button *bt_1500 = Button::factory (*win);
bt_1500->setLabel ("Go to 1500");
bx->packEnd (*bt_1500);
bt_1500->show ();
gl->setDataModel (model);
gl->signalSelect.connect (sigc::ptr_fun (&glSelected));
for (int i = 0; i < 2000; i++)
{
GenListColumnConstructor1 *construct1 = new GenListColumnConstructor1 ();
construct1->setItemNum (i);
GenListColumnSelector1 *select1 = new GenListColumnSelector1 ();
select1->setItemNum (i * 10);
GenListItem *gli = gl->append (construct1, NULL, ELM_GENLIST_ITEM_NONE, select1);
constructList1.push_back (construct1);
selectList1.push_back (select1);
if (i == 50)
{
bt_50->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&_bt50_cb), gli));
}
else if (i == 1500)
{
bt_1500->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&_bt1500_cb), gli));
}
}
win->resize (Size (480, 800));
win->show ();
}
/*************/
static void my_gl_clear (Evasxx::Object &obj, void *event_info, GenList *gl)
{
gl->clear ();
}
static void my_gl_add (Evasxx::Object &obj, void *event_info, GenList *gl)
{
static int i = 0;
// FIXME: constructor/selector is never deleted...
GenListColumnConstructor1 *construct1 = new GenListColumnConstructor1 ();
construct1->setItemNum (i);
GenListColumnSelector1 *select1 = new GenListColumnSelector1 ();
select1->setItemNum (i*10);
GenListItem *gli = gl->append (construct1, NULL, ELM_GENLIST_ITEM_NONE, select1);
i++;
}
static void my_gl_insert_before (Evasxx::Object &obj, void *event_info, GenList *gl)
{
static int i = 0;
GenListItem *gliSel = gl->getItemSelected ();
if (!gliSel)
{
cout << "no item selected" << endl;
return;
}
// FIXME: constructor/selector is never deleted...
GenListColumnConstructor1 *construct1 = new GenListColumnConstructor1 ();
construct1->setItemNum (i);
GenListColumnSelector1 *select1 = new GenListColumnSelector1 ();
select1->setItemNum (i*10);
GenListItem *gli = gl->insertBefore (construct1, gliSel, ELM_GENLIST_ITEM_NONE, select1);
i++;
}
static void my_gl_insert_after (Evasxx::Object &obj, void *event_info, GenList *gl)
{
static int i = 0;
GenListItem *gliSel = gl->getItemSelected ();
if (!gliSel)
{
cout << "no item selected" << endl;
return;
}
// FIXME: constructor/selector is never deleted...
GenListColumnConstructor1 *construct1 = new GenListColumnConstructor1 ();
construct1->setItemNum (i);
GenListColumnSelector1 *select1 = new GenListColumnSelector1 ();
select1->setItemNum (i*10);
GenListItem *gli = gl->insertAfter (construct1, gliSel, ELM_GENLIST_ITEM_NONE, select1);
i++;
}
static void my_gl_del(Evasxx::Object &obj, void *event_info, GenList *gl)
{
GenListItem *gli = gl->getItemSelected ();
if (!gli)
{
cout << "no item selected" << endl;
return;
}
gl->del (*gli);
}
static void my_gl_disable (Evasxx::Object &obj, void *event_info, GenList *gl)
{
GenListItem *gli = gl->getItemSelected ();
if (!gli)
{
cout << "no item selected" << endl;
return;
}
gli->setDisabled (true);
gli->setSelected (false);
gli->update ();
}
static void my_gl_update_all (Evasxx::Object &obj, void *event_info, GenList *gl)
{
int i = 0;
GenListItem *it = gl->getItemFirst ();
// TODO: port to C++
/*while (it)
{
it->update ();
cout << i << endl;
i++;
//it = elm_genlist_item_next_get(it);
}*/
}
// FIXME: select "first" in a clean list results in a crash!
static void my_gl_first (Evasxx::Object &obj, void *event_info, GenList *gl)
{
GenListItem *gli = gl->getItemFirst ();
if (!gli)
return;
gli->show ();
gli->setSelected (true);
}
static void my_gl_last (Evasxx::Object &obj, void *event_info, GenList *gl)
{
GenListItem *gli = gl->getItemLast ();
if (!gli)
return;
gli->show ();
gli->setSelected (true);
}
static Eina_Bool my_gl_flush_delay (void *data)
{
Elmxx::Application::flushAll ();
return 0;
}
static void my_gl_flush (Evasxx::Object &obj, void *event_info)
{
ecore_timer_add (1.2, my_gl_flush_delay, NULL); // TODO: C++ port
}
void
test_genlist2(void *data, Evas_Object *obj, void *event_info)
{
GenListItem *gli[10];
Button *bt = NULL;
Box *bx2 = NULL;
Window *win = Window::factory ("genlist-2", ELM_WIN_BASIC);
win->setTitle ("GenList 2");
win->setAutoDel (true);
Background *bg = Background::factory (*win);
win->addObjectResize (*bg);
bg->setFile (searchPixmapFile ("elementaryxx/plant_01.jpg"));
bg->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
bg->show ();
Box *bx = Box::factory (*win);
bx->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
win->addObjectResize (*bx);
bx->show ();
GenList *gl = GenList::factory (*win);
gl->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
gl->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
gl->show ();
gl->setDataModel (model);
gl->signalSelect.connect (sigc::ptr_fun (&glSelected));
// FIXME: the constructor/selector is never deleted... (maybe CountedPrt?)
GenListColumnConstructor1 *construct1 = new GenListColumnConstructor1 ();
construct1->setItemNum (1001);
GenListColumnSelector1 *select1 = new GenListColumnSelector1 ();
select1->setItemNum (1001);
gli[0] = gl->append (construct1, NULL, ELM_GENLIST_ITEM_NONE, select1);
GenListColumnConstructor1 *construct2 = new GenListColumnConstructor1 ();
construct2->setItemNum (1002);
GenListColumnSelector1 *select2 = new GenListColumnSelector1 ();
select2->setItemNum (1002);
gli[1] = gl->append (construct2, NULL, ELM_GENLIST_ITEM_NONE, select2);
GenListColumnConstructor1 *construct3 = new GenListColumnConstructor1 ();
construct3->setItemNum (1003);
GenListColumnSelector1 *select3 = new GenListColumnSelector1 ();
select3->setItemNum (1003);
gli[2] = gl->append (construct3, NULL, ELM_GENLIST_ITEM_NONE, select3);
GenListColumnConstructor1 *construct4 = new GenListColumnConstructor1 ();
construct4->setItemNum (1004);
GenListColumnSelector1 *select4 = new GenListColumnSelector1 ();
select4->setItemNum (1004);
gli[3] = gl->append (construct4, NULL, ELM_GENLIST_ITEM_NONE, select4);
GenListColumnConstructor1 *construct5 = new GenListColumnConstructor1 ();
construct5->setItemNum (1005);
GenListColumnSelector1 *select5 = new GenListColumnSelector1 ();
select5->setItemNum (1005);
gli[4] = gl->append (construct5, NULL, ELM_GENLIST_ITEM_NONE, select5);
GenListColumnConstructor1 *construct6 = new GenListColumnConstructor1 ();
construct6->setItemNum (1006);
GenListColumnSelector1 *select6 = new GenListColumnSelector1 ();
select6->setItemNum (1006);
gli[5] = gl->append (construct6, gli[2], ELM_GENLIST_ITEM_NONE, select6);
GenListColumnConstructor1 *construct7 = new GenListColumnConstructor1 ();
construct7->setItemNum (1007);
GenListColumnSelector1 *select7 = new GenListColumnSelector1 ();
select7->setItemNum (1007);
gli[6] = gl->append (construct7, gli[2], ELM_GENLIST_ITEM_NONE, select7);
bx->packEnd (*gl);
bx2 = Box::factory (*win);
bx2->setOrientation (Box::Horizontal);
bx2->setHomogenous (true);
bx2->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bx2->show ();
bt = Button::factory (*win);
bt->setLabel ("/\\");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_first), gl));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("\\/");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_last), gl));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("#");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_disable), gl));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("U");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_update_all), gl));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);/*************/
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bx->packEnd (*bx2);
bx2->show ();
bx2 = Box::factory (*win);
bx2->setOrientation (Box::Horizontal);
bx2->setHomogenous (true);
bx2->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bx2->show ();
bt = Button::factory (*win);
bt->setLabel ("X");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_clear), gl));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("+");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_add), gl));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("-");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_del), gl));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bx->packEnd (*bx2);
bx2->show ();
Box *bx3 = Box::factory (*win);
bx3->setOrientation (Box::Horizontal);
bx3->setHomogenous (true);
bx3->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx3->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt = Button::factory (*win);
bt->setLabel ("+ before");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_insert_before), gl));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx3->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("+ after");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_insert_after), gl));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx3->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("Flush");
bt->getEventSignal ("clicked")->connect (sigc::ptr_fun (&my_gl_flush));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx3->packEnd (*bt);
bt->show ();
bx->packEnd (*bx3);
bx3->show ();
win->resize (size320x320);
win->show ();
}
#if 0
/*************/
void gl2_del(const void *data, Evas_Object *obj)
{
}
#endif
static void my_gl_update (Evasxx::Object &obj, void *event_info, TestItem *tit)
{
tit->mode++;
tit->item->update ();
}
class GenListColumnConstructor3 : public GenListColumnConstructor
{
public:
GenListColumnConstructor3 () :
mTestItem (NULL)
{}
void setTestItem (TestItem *testItem) {mTestItem = testItem;}
TestItem *getTestItem () const {return mTestItem;}
private:
TestItem *mTestItem;
};
class GenListColumnSelector3 : public GenListColumnSelector
{
public:
GenListColumnSelector3 () :
mTestItem (NULL)
{}
void setTestItem (TestItem *testItem) {mTestItem = testItem;}
TestItem *getTestItem () const {return mTestItem;}
private:
TestItem *mTestItem;
};
class GenListDataModel3 : public GenListDataModel
{
public:
GenListDataModel3 (const std::string &style) :
GenListDataModel (style) {}
~GenListDataModel3 () {}
std::string getLabel (GenListColumnConstructor *construction, Evasxx::Object &obj, const std::string &part) const
{
GenListColumnConstructor3 *construct1 = static_cast <GenListColumnConstructor3*> (construction);
cout << "GenListDataModel::getLabel" << endl;
return "Item mode " + toString <int> (construct1->getTestItem ()->mode);
}
Elmxx::Object *getIcon (GenListColumnConstructor *construction, Evasxx::Object &obj, const std::string &part)
{
GenListColumnConstructor3 *construct1 = static_cast <GenListColumnConstructor3*> (construction);
int mode = construct1->getTestItem ()->mode;
Window *win = static_cast <Window*> (&obj);
Icon *ic = Icon::factory (*win);
string iconName;
if (part == "elm.swallow.icon")
{
if ((mode & 0x3) == 0)
iconName = searchPixmapFile ("elementaryxx/logo_small.png");
else if ((mode & 0x3) == 1)
iconName = searchPixmapFile ("elementaryxx/logo.png");
else if ((mode & 0x3) == 2)
iconName = searchPixmapFile ("elementaryxx/panel_01.jpg");
else if ((mode & 0x3) == 3)
iconName = searchPixmapFile ("elementaryxx/rock_01.jpg");
ic->setFile (iconName);
}
else if (part == "elm.swallow.end")
{
if ((mode & 0x3) == 0)
iconName = searchPixmapFile ("elementaryxx/sky_01.jpg");
else if ((mode & 0x3) == 1)
iconName = searchPixmapFile ("elementaryxx/sky_02.jpg");
else if ((mode & 0x3) == 2)
iconName = searchPixmapFile ("elementaryxx/sky_03.jpg");
else if ((mode & 0x3) == 3)
iconName = searchPixmapFile ("elementaryxx/sky_04.jpg");
ic->setFile (iconName);
}
ic->setAspectHintSize (EVAS_ASPECT_CONTROL_VERTICAL, Eflxx::Size (1, 1));
return ic;
}
bool getState (GenListColumnConstructor *construction, Evasxx::Object &obj, const std::string &part)
{
return false;
}
};
void glSelected3 (GenListColumnSelector &selection, const Evasxx::Object &obj, void *event_info)
{
GenListColumnSelector3 *selection1 = static_cast <GenListColumnSelector3*> (&selection);
cout << "glSelected3 mode " << selection1->getTestItem ()->mode << endl;
}
static GenListDataModel3 model3 ("default");
void test_genlist3(void *data, Evas_Object *obj, void *event_info)
{
Button *bt = NULL;
Box *bx2 = NULL;
static TestItem tit[3];
Window *win = Window::factory ("genlist-3", ELM_WIN_BASIC);
win->setTitle ("GenList 2");
win->setAutoDel (true);
Background *bg = Background::factory (*win);
win->addObjectResize (*bg);
bg->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
bg->show ();
Box *bx = Box::factory (*win);
bx->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
win->addObjectResize (*bx);
bx->show ();
GenList *gl = GenList::factory (*win);
gl->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
gl->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
bx->packEnd (*gl);
gl->show ();
gl->setDataModel (model3);
gl->signalSelect.connect (sigc::ptr_fun (&glSelected3));
GenListColumnConstructor3 *construct1 = new GenListColumnConstructor3 ();
construct1->setTestItem (&(tit[0]));
GenListColumnSelector3 *select1 = new GenListColumnSelector3 ();
select1->setTestItem (&(tit[0]));
tit[0].mode = 0;
tit[0].item = gl->append (construct1, NULL, ELM_GENLIST_ITEM_NONE, select1);
GenListColumnConstructor3 *construct2 = new GenListColumnConstructor3 ();
construct2->setTestItem (&(tit[1]));
GenListColumnSelector3 *select2 = new GenListColumnSelector3 ();
select2->setTestItem (&(tit[1]));
tit[1].mode = 1;
tit[1].item = gl->append (construct2, NULL, ELM_GENLIST_ITEM_NONE, select2);
GenListColumnConstructor3 *construct3 = new GenListColumnConstructor3 ();
construct3->setTestItem (&(tit[2]));
GenListColumnSelector3 *select3 = new GenListColumnSelector3 ();
select3->setTestItem (&(tit[2]));
tit[2].mode = 2;
tit[2].item = gl->append (construct3, NULL, ELM_GENLIST_ITEM_NONE, select3);
bx2 = Box::factory (*win);
bx2->setOrientation (Box::Horizontal);
bx2->setHomogenous (true);
bx2->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt = Button::factory (*win);
bt->setLabel ("[1]");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_update), &(tit[0])));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("[2]");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_update), &(tit[1])));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("[3]");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_update), &(tit[2])));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bx->packEnd (*bx2);
bx2->show ();
win->resize (size320x320);
win->show ();
}
/*************/
static void my_gl_item_check_changed (Evasxx::Object &obj, void *event_info, TestItem *tit)
{
Check *check = static_cast <Check*> (&obj);
tit->onoff = check->getState ();
printf("item %p onoff = %i\n", tit, tit->onoff);
}
class GenListDataModel4 : public GenListDataModel
{
public:
GenListDataModel4 (const std::string &style) :
GenListDataModel (style) {}
~GenListDataModel4 () {}
std::string getLabel (GenListColumnConstructor *construction, Evasxx::Object &obj, const std::string &part) const
{
GenListColumnConstructor3 *construct1 = static_cast <GenListColumnConstructor3*> (construction);
cout << "GenListDataModel::getLabel" << endl;
return "Item mode " + toString <int> (construct1->getTestItem ()->mode);
}
Elmxx::Object *getIcon (GenListColumnConstructor *construction, Evasxx::Object &obj, const std::string &part)
{
GenListColumnConstructor3 *construct1 = static_cast <GenListColumnConstructor3*> (construction);
TestItem *tit = construct1->getTestItem ();
Window *win = static_cast <Window*> (&obj);
if (part == "elm.swallow.icon")
{
Label *lb = Label::factory (*win);
lb->setLineWrap (true);
lb->setWrapWidth (201);
lb->setLabel ("ashj ascjscjh n asjkl hcjlh ls hzshnn zjh sh zxjcjsnd h dfw sdv edev efe fwefvv vsd cvs ws wf fvwf wd fwe f we wef we wfe rfwewef wfv wswf wefg sdfws w wsdcfwcf wsc vdv sdsd sdcd cv wsc sdcv wsc d sdcdcsd sdcdsc wdvd sdcsd wscxcv wssvd sd");
lb->show ();
return lb;
}
else if (part == "elm.swallow.end")
{
Check *ck = Check::factory (*win);
ck->setEventsPropagate (false);
ck->setState (tit->onoff);
ck->getEventSignal ("changed")->connect (sigc::bind (sigc::ptr_fun (&my_gl_item_check_changed), tit));
//evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed, data);
ck->show ();
return ck;
}
// should never reach NULL!
return NULL;
}
bool getState (GenListColumnConstructor *construction, Evasxx::Object &obj, const std::string &part)
{
return false;
}
};
static GenListDataModel4 model4 ("default");
void test_genlist4 (void *data, Evas_Object *obj, void *event_info)
{
Button *bt = NULL;
Box *bx2 = NULL;
static TestItem tit[3];
Window *win = Window::factory ("genlist-4", ELM_WIN_BASIC);
win->setTitle ("GenList 4");
win->setAutoDel (true);
Background *bg = Background::factory (*win);
win->addObjectResize (*bg);
bg->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
bg->show ();
Box *bx = Box::factory (*win);
bx->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
win->addObjectResize (*bx);
GenList *gl = GenList::factory (*win);
gl->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
gl->setWeightHintSize (EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
gl->show ();
gl->setDataModel (model4);
GenListColumnConstructor3 *construct1 = new GenListColumnConstructor3 ();
construct1->setTestItem (&(tit[0]));
tit[0].mode = 0;
tit[0].item = gl->append (construct1, NULL, ELM_GENLIST_ITEM_NONE, NULL);
GenListColumnConstructor3 *construct2 = new GenListColumnConstructor3 ();
construct2->setTestItem (&(tit[1]));
tit[1].mode = 1;
tit[1].item = gl->append (construct2, NULL, ELM_GENLIST_ITEM_NONE, NULL);
GenListColumnConstructor3 *construct3 = new GenListColumnConstructor3 ();
construct3->setTestItem (&(tit[2]));
tit[2].mode = 2;
tit[2].item = gl->append (construct3, NULL, ELM_GENLIST_ITEM_NONE, NULL);
bx->packEnd (*gl);
bx->show ();
bx2 = Box::factory (*win);
bx2->setOrientation (Box::Horizontal);
bx2->setHomogenous (true);
bx2->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt = Button::factory (*win);
bt->setLabel ("[1]");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_update), &(tit[0])));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("[2]");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_update), &(tit[1])));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bt = Button::factory (*win);
bt->setLabel ("[3]");
bt->getEventSignal ("clicked")->connect (sigc::bind (sigc::ptr_fun (&my_gl_update), &(tit[2])));
bt->setAlignHintSize (EVAS_HINT_FILL, EVAS_HINT_FILL);
bt->setWeightHintSize (EVAS_HINT_EXPAND, 0.0);
bx2->packEnd (*bt);
bt->show ();
bx->packEnd (*bx2);
bx2->show ();
win->resize (size320x320);
win->show ();
}
#if 0
/*************/
static void
my_gl_item_check_changed2(void *data, Evas_Object *obj, void *event_info)
{
Testitem *tit = data;
tit->onoff = elm_check_state_get(obj);
printf("item %p onoff = %i\n", tit, tit->onoff);
}
static Elm_Genlist_Item_Class itc5;
char *gl5_label_get(const void *data, Evas_Object *obj, const char *part)
{
const Testitem *tit = data;
char buf[256];
if (!strcmp(part, "elm.text"))
{
snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
}
else if (!strcmp(part, "elm.text.sub"))
{
snprintf(buf, sizeof(buf), "%i bottles on the wall", tit->mode);
}
return strdup(buf);
}
Evas_Object *gl5_icon_get(const void *data, Evas_Object *obj, const char *part)
{
const Testitem *tit = data;
char buf[PATH_MAX];
if (!strcmp(part, "elm.swallow.icon"))
{
Evas_Object *bx = elm_box_add(obj);
Evas_Object *ic;
elm_box_horizontal_set(bx, 1);
ic = elm_icon_add(obj);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
elm_icon_scale_set(ic, 0, 0);
evas_object_show(ic);
elm_box_pack_end(bx, ic);
ic = elm_icon_add(obj);
elm_icon_file_set(ic, buf, NULL);
elm_icon_scale_set(ic, 0, 0);
evas_object_show(ic);
elm_box_pack_end(bx, ic);
elm_box_horizontal_set(bx, 1);
evas_object_show(bx);
return bx;
}
else if (!strcmp(part, "elm.swallow.end"))
{
Evas_Object *ck;
ck = elm_check_add(obj);
evas_object_propagate_events_set(ck, 0);
elm_check_state_set(ck, tit->onoff);
evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed2, data);
evas_object_show(ck);
return ck;
}
return NULL;
}
Eina_Bool gl5_state_get(const void *data, Evas_Object *obj, const char *part)
{
return EINA_FALSE;
}
void gl5_del(const void *data, Evas_Object *obj)
{
}
static void
item_drag_up(void *data, Evas_Object *obj, void *event_info)
{
printf("drag up\n");
}
static void
item_drag_down(void *data, Evas_Object *obj, void *event_info)
{
printf("drag down\n");
}
static void
item_drag_left(void *data, Evas_Object *obj, void *event_info)
{
printf("drag left\n");
}
static void
item_drag_right(void *data, Evas_Object *obj, void *event_info)
{
printf("drag right\n");
}
static void
item_drag(void *data, Evas_Object *obj, void *event_info)
{
printf("drag\n");
}
static void
item_drag_stop(void *data, Evas_Object *obj, void *event_info)
{
printf("drag stop\n");
}
static void
item_longpress(void *data, Evas_Object *obj, void *event_info)
{
printf("longpress\n");
}
void
test_genlist5(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
static Testitem tit[3];
win = elm_win_add(NULL, "genlist-5", ELM_WIN_BASIC);
elm_win_title_set(win, "Genlist 5");
elm_win_autodel_set(win, 1);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
bx = elm_box_add(win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, bx);
evas_object_show(bx);
gl = elm_genlist_add(win);
elm_genlist_always_select_mode_set(gl, 1);
evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(gl);
itc5.item_style = "double_label";
itc5.func.label_get = gl5_label_get;
itc5.func.icon_get = gl5_icon_get;
itc5.func.state_get = gl5_state_get;
itc5.func.del = gl5_del;
tit[0].mode = 0;
tit[0].item = elm_genlist_item_append(gl, &itc5,
&(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
NULL/* func data */);
tit[1].mode = 1;
tit[1].item = elm_genlist_item_append(gl, &itc5,
&(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
NULL/* func data */);
tit[2].mode = 2;
tit[2].item = elm_genlist_item_append(gl, &itc5,
&(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
NULL/* func data */);
elm_box_pack_end(bx, gl);
evas_object_show(bx);
evas_object_smart_callback_add(gl, "drag,start,up", item_drag_up, NULL);
evas_object_smart_callback_add(gl, "drag,start,down", item_drag_down, NULL);
evas_object_smart_callback_add(gl, "drag,start,left", item_drag_left, NULL);
evas_object_smart_callback_add(gl, "drag,start,right", item_drag_right, NULL);
evas_object_smart_callback_add(gl, "drag", item_drag, NULL);
evas_object_smart_callback_add(gl, "drag,stop", item_drag_stop, NULL);
evas_object_smart_callback_add(gl, "longpressed", item_longpress, NULL);
bx2 = elm_box_add(win);
elm_box_horizontal_set(bx2, 1);
elm_box_homogenous_set(bx2, 1);
evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
bt = elm_button_add(win);
elm_button_label_set(bt, "[1]");
evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx2, bt);
evas_object_show(bt);
bt = elm_button_add(win);
elm_button_label_set(bt, "[2]");
evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx2, bt);
evas_object_show(bt);
bt = elm_button_add(win);
elm_button_label_set(bt, "[3]");
evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx2, bt);
evas_object_show(bt);
elm_box_pack_end(bx, bx2);
evas_object_show(bx2);
evas_object_resize(win, 320, 320);
evas_object_show(win);
}
/*************/
static Elm_Genlist_Item_Class itc4;
static void
gl4_sel(void *data, Evas_Object *obj, void *event_info)
{
}
static void
gl4_exp(void *data, Evas_Object *obj, void *event_info)
{
Elm_Genlist_Item *it = event_info;
Evas_Object *gl = elm_genlist_item_genlist_get(it);
int val = (int)elm_genlist_item_data_get(it);
val *= 10;
elm_genlist_item_append(gl, &itc4,
(void *)(val + 1)/* item data */, it/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
NULL/* func data */);
elm_genlist_item_append(gl, &itc4,
(void *)(val + 2)/* item data */, it/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
NULL/* func data */);
elm_genlist_item_append(gl, &itc4,
(void *)(val + 3)/* item data */, it/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
NULL/* func data */);
}
static void
gl4_con(void *data, Evas_Object *obj, void *event_info)
{
Elm_Genlist_Item *it = event_info;
elm_genlist_item_subitems_clear(it);
}
static void
gl4_exp_req(void *data, Evas_Object *obj, void *event_info)
{
Elm_Genlist_Item *it = event_info;
elm_genlist_item_expanded_set(it, 1);
}
static void
gl4_con_req(void *data, Evas_Object *obj, void *event_info)
{
Elm_Genlist_Item *it = event_info;
elm_genlist_item_expanded_set(it, 0);
}
char *gl4_label_get(const void *data, Evas_Object *obj, const char *part)
{
char buf[256];
snprintf(buf, sizeof(buf), "Item mode %i", (int)data);
return strdup(buf);
}
Evas_Object *gl4_icon_get(const void *data, Evas_Object *obj, const char *part)
{
char buf[PATH_MAX];
if (!strcmp(part, "elm.swallow.icon"))
{
Evas_Object *ic = elm_icon_add(obj);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
evas_object_show(ic);
return ic;
}
else if (!strcmp(part, "elm.swallow.end"))
{
Evas_Object *ck;
ck = elm_check_add(obj);
evas_object_show(ck);
return ck;
}
return NULL;
}
Eina_Bool gl4_state_get(const void *data, Evas_Object *obj, const char *part)
{
return EINA_FALSE;
}
void gl4_del(const void *data, Evas_Object *obj)
{
}
void
test_genlist6(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
win = elm_win_add(NULL, "genlist-tree", ELM_WIN_BASIC);
elm_win_title_set(win, "Genlist Tree");
elm_win_autodel_set(win, 1);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
bx = elm_box_add(win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, bx);
evas_object_show(bx);
gl = elm_genlist_add(win);
evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(gl);
itc4.item_style = "default";
itc4.func.label_get = gl4_label_get;
itc4.func.icon_get = gl4_icon_get;
itc4.func.state_get = gl4_state_get;
itc4.func.del = gl4_del;
elm_genlist_item_append(gl, &itc4,
(void *)1/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
NULL/* func data */);
elm_genlist_item_append(gl, &itc4,
(void *)2/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
NULL/* func data */);
elm_genlist_item_append(gl, &itc4,
(void *)3/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
NULL/* func data */);
evas_object_smart_callback_add(gl, "expand,request", gl4_exp_req, gl);
evas_object_smart_callback_add(gl, "contract,request", gl4_con_req, gl);
evas_object_smart_callback_add(gl, "expanded", gl4_exp, gl);
evas_object_smart_callback_add(gl, "contracted", gl4_con, gl);
elm_box_pack_end(bx, gl);
evas_object_show(bx);
bx2 = elm_box_add(win);
elm_box_horizontal_set(bx2, 1);
elm_box_homogenous_set(bx2, 1);
evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
bt = elm_button_add(win);
elm_button_label_set(bt, "[1]");
// evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx2, bt);
evas_object_show(bt);
bt = elm_button_add(win);
elm_button_label_set(bt, "[2]");
// evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx2, bt);
evas_object_show(bt);
bt = elm_button_add(win);
elm_button_label_set(bt, "[3]");
// evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx2, bt);
evas_object_show(bt);
elm_box_pack_end(bx, bx2);
evas_object_show(bx2);
evas_object_resize(win, 320, 320);
evas_object_show(win);
}
#endif // 0