--- /dev/null
+#include <msp/gltk/dropdown.h>
+#include <msp/strings/format.h>
+#include "dropdowndemo.h"
+
+using namespace std;
+using namespace Msp;
+
+DropdownDemo::DropdownDemo()
+{
+ set_layout(new GLtk::Layout);
+
+ GLtk::Dropdown *drp = new GLtk::Dropdown(categories);
+ drp->signal_item_selected.connect(sigc::mem_fun(this, &DropdownDemo::category_selected));
+ add(*drp);
+
+ categories.append("Arabic numerals");
+ categories.append("Roman numerals");
+ categories.append("Lowercase letters");
+ categories.append("Uppercase letters");
+
+ GLtk::Widget *prev = drp;
+ drp = new GLtk::Dropdown(values);
+ add(*drp);
+
+ layout->add_constraint(*drp, GLtk::Layout::BELOW, *prev);
+ layout->add_constraint(*drp, GLtk::Layout::ALIGN_LEFT, *prev);
+ layout->add_constraint(*drp, GLtk::Layout::ALIGN_RIGHT, *prev);
+}
+
+void DropdownDemo::category_selected(unsigned i)
+{
+ values.clear();
+ if(i==0)
+ {
+ for(unsigned j=0; j<=26; ++j)
+ values.append(format("%d", j));
+ }
+ else if(i==1)
+ {
+ for(unsigned j=1; j<=26; ++j)
+ {
+ string r = string(j/10, 'X');
+ if(j%10==9)
+ r += "IX";
+ else if(j%10>=4)
+ {
+ if(j%10==4)
+ r += 'I';
+ r += 'V';
+ }
+
+ if(j%5<=3)
+ r += string(j%5, 'I');
+
+ values.append(r);
+ }
+ }
+ else if(i==2)
+ {
+ for(unsigned j=0; j<26; ++j)
+ values.append(string(1, 'a'+j));
+ }
+ else if(i==3)
+ {
+ for(unsigned j=0; j<26; ++j)
+ values.append(string(1, 'A'+j));
+ }
+}