Dropdown::Dropdown(const Resources &r):
Widget(r),
list(new List(res)),
+ dropped(false),
list_active(false)
{
list->signal_item_selected.connect(sigc::mem_fun(this, &Dropdown::list_item_selected));
list->append(item);
}
+void Dropdown::insert(unsigned i, const string &v)
+{
+ list->insert(i, v);
+}
+
+void Dropdown::remove(unsigned i)
+{
+ list->remove(i);
+}
+
+void Dropdown::clear()
+{
+ list->clear();
+}
+
+void Dropdown::set_selected_index(int i)
+{
+ list->set_selected_index(i);
+}
+
+const string &Dropdown::get_selected() const
+{
+ return list->get_selected();
+}
+
+int Dropdown::get_selected_index() const
+{
+ return list->get_selected_index();
+}
+
void Dropdown::button_press(int x, int y, unsigned btn)
{
if(list->get_geometry().is_inside(x, y))
list->button_press(x-lgeom.x, y-lgeom.y, btn);
list_active=true;
}
- else if(state==ACTIVE)
+ else if(dropped)
{
- state=HOVER;
+ dropped=false;
+ state&=~ACTIVE;
parent->ungrab_pointer(*this);
}
else if(btn==1)
{
- state=ACTIVE;
+ dropped=true;
+ state|=ACTIVE;
if(parent)
{
}
}
-void Dropdown::pointer_enter()
-{
- if(state==NORMAL)
- state=HOVER;
-}
-
-void Dropdown::pointer_leave()
-{
- if(state==HOVER)
- state=NORMAL;
-}
-
void Dropdown::render_special(const Part &part) const
{
if(part.get_name()=="text")
render_text(part, text);
- else if(part.get_name()=="list" && state==ACTIVE)
+ else if(part.get_name()=="list" && dropped)
list->render();
}
{
text=item;
- list_active=false;
- state=NORMAL;
- if(parent)
- parent->ungrab_pointer(*this);
+ if(dropped)
+ {
+ list_active=false;
+ dropped=false;
+ state&=~ACTIVE;
+ if(parent)
+ parent->ungrab_pointer(*this);
+ }
signal_item_selected.emit(index, item);
}