Use wxChoice instead of wxComboBox throughout. Fixes dcp content type hanging over...
[dcpomatic.git] / src / wx / wx_util.cc
index d3bfa2702edb12607a7ae19143166c597d40ca0f..413071ea6989e0e395a5b5b64b23d2212f57dace 100644 (file)
@@ -33,7 +33,7 @@ using namespace boost;
  *  @param s Sizer to add to.
  *  @param p Parent window for the wxStaticText.
  *  @param t Text for the wxStaticText.
- *  @param prop Properties to pass when calling Add() on the wxSizer.
+ *  @param prop Proportion to pass when calling Add() on the wxSizer.
  */
 wxStaticText *
 add_label_to_sizer (wxSizer* s, wxWindow* p, string t, int prop)
@@ -109,10 +109,22 @@ ThreadedStaticText::thread_finished (wxCommandEvent& ev)
        SetLabel (ev.GetString ());
 }
 
+string
+string_client_data (wxClientData* o)
+{
+       return wx_to_std (dynamic_cast<wxStringClientData*>(o)->GetData());
+}
+
 void
 checked_set (wxFilePickerCtrl* widget, string value)
 {
        if (widget->GetPath() != std_to_wx (value)) {
+               if (value.empty()) {
+                       /* Hack to make wxWidgets clear the control when we are passed
+                          an empty value.
+                       */
+                       value = " ";
+               }
                widget->SetPath (std_to_wx (value));
        }
 }
@@ -126,13 +138,30 @@ checked_set (wxSpinCtrl* widget, int value)
 }
 
 void
-checked_set (wxComboBox* widget, int value)
+checked_set (wxChoice* widget, int value)
 {
        if (widget->GetSelection() != value) {
                widget->SetSelection (value);
        }
 }
 
+void
+checked_set (wxChoice* widget, string value)
+{
+       wxClientData* o = 0;
+       if (widget->GetSelection() != -1) {
+               o = widget->GetClientObject (widget->GetSelection ());
+       }
+       
+       if (!o || string_client_data(o) != value) {
+               for (unsigned int i = 0; i < widget->GetCount(); ++i) {
+                       if (string_client_data (widget->GetClientObject (i)) == value) {
+                               widget->SetSelection (i);
+                       }
+               }
+       }
+}
+
 void
 checked_set (wxTextCtrl* widget, string value)
 {