m_menuWidget = (WXWidget) 0;
m_widgetList = (WXWidget*) 0;
m_formWidget = (WXWidget) 0;
- m_inSetValue = FALSE;
}
bool wxChoice::Create(wxWindow *parent, wxWindowID id,
{
SetName(name);
SetValidator(validator);
- m_noStrings = n;
+ m_noStrings = 0; // Starts off with none, incremented in Append
m_windowStyle = style;
m_buttonWidget = (WXWidget) 0;
m_menuWidget = (WXWidget) 0;
m_widgetList = (WXWidget*) 0;
m_formWidget = (WXWidget) 0;
- m_inSetValue = FALSE;
if (parent) parent->AddChild(this);
else
m_windowId = id;
+ m_backgroundColour = parent->GetBackgroundColour();
+ m_foregroundColour = parent->GetForegroundColour();
+ m_windowFont = parent->GetFont();
+
Widget parentWidget = (Widget) parent->GetClientWidget();
m_formWidget = (WXWidget) XtVaCreateManagedWidget ((char*) (const char*) name,
*/
m_menuWidget = (WXWidget) XmCreatePulldownMenu ((Widget) m_formWidget, "choiceMenu", NULL, 0);
- int i;
+// int i;
if (n > 0)
{
int i;
XtVaSetValues((Widget) m_formWidget, XmNresizePolicy, XmRESIZE_NONE, NULL);
+ ChangeFont(FALSE);
+
AttachWidget (parent, m_buttonWidget, m_formWidget, pos.x, pos.y, size.x, size.y);
- SetFont(* parent->GetFont());
- ChangeColour(m_mainWidget);
+ ChangeBackgroundColour();
return TRUE;
}
if (m_widgetList)
delete[] m_widgetList;
- DetachWidget(GetMainWidget()); // Removes event handlers
+ if (GetMainWidget())
+ {
+ DetachWidget(GetMainWidget()); // Removes event handlers
- XtDestroyWidget((Widget) m_formWidget);
- m_formWidget = (WXWidget) 0;
+ XtDestroyWidget((Widget) m_formWidget);
+ m_formWidget = (WXWidget) 0;
- // Presumably the other widgets have been deleted now, via the form
- m_mainWidget = (WXWidget) 0;
- m_buttonWidget = (WXWidget) 0;
+ // Presumably the other widgets have been deleted now, via the form
+ m_mainWidget = (WXWidget) 0;
+ m_buttonWidget = (WXWidget) 0;
+ }
}
void wxChoice::Append(const wxString& item)
#endif
NULL);
+ DoChangeBackgroundColour((WXWidget) w, m_backgroundColour);
+
if (m_windowFont.Ok())
XtVaSetValues (w,
XmNfontList, (XmFontList) m_windowFont.GetFontList(1.0, XtDisplay((Widget) m_formWidget)),
WXWidget *new_widgetList = new WXWidget[m_noStrings + 1];
int i;
- for (i = 0; i < m_noStrings; i++)
- new_widgetList[i] = m_widgetList[i];
+ if (m_widgetList)
+ for (i = 0; i < m_noStrings; i++)
+ new_widgetList[i] = m_widgetList[i];
+
new_widgetList[m_noStrings] = (WXWidget) w;
+
if (m_widgetList)
delete[] m_widgetList;
m_widgetList = new_widgetList;
m_noStrings ++;
}
-void wxChoice::Delete(int n)
+void wxChoice::Delete(int WXUNUSED(n))
{
wxFAIL_MSG( "Sorry, wxChoice::Delete isn't implemented yet. Maybe you'd like to volunteer? :-)" );
ProcessCommand (event);
}
-void wxChoiceCallback (Widget w, XtPointer clientData,
- XtPointer ptr)
+void wxChoiceCallback (Widget w, XtPointer clientData, XtPointer WXUNUSED(ptr))
{
wxChoice *item = (wxChoice *) clientData;
if (item)
{
- if (item->m_inSetValue)
+ if (item->InSetValue())
return;
char *s = NULL;
XtVaGetValues (w, XmNuserData, &s, NULL);
if (s)
{
- wxCommandEvent event (wxEVT_COMMAND_CHOICE_SELECTED);
+ wxCommandEvent event (wxEVT_COMMAND_CHOICE_SELECTED, item->GetId());
+ event.SetEventObject(item);
event.m_commandInt = item->FindString (s);
// event.m_commandString = s;
item->ProcessCommand (event);
}
}
+void wxChoice::ChangeFont(bool keepOriginalSize)
+{
+ // Note that this causes the widget to be resized back
+ // to its original size! We therefore have to set the size
+ // back again. TODO: a better way in Motif?
+ if (m_windowFont.Ok())
+ {
+ int width, height, width1, height1;
+ GetSize(& width, & height);
+
+ XmFontList fontList = (XmFontList) m_windowFont.GetFontList(1.0, XtDisplay((Widget) m_mainWidget));
+ XtVaSetValues ((Widget) m_mainWidget, XmNfontList, fontList, NULL);
+ XtVaSetValues ((Widget) m_buttonWidget, XmNfontList, fontList, NULL);
+
+ /* TODO: why does this cause a crash in XtWidgetToApplicationContext?
+ int i;
+ for (i = 0; i < m_noStrings; i++)
+ XtVaSetValues ((Widget) m_widgetList[i], XmNfontList, fontList, NULL);
+ */
+ GetSize(& width1, & height1);
+ if (keepOriginalSize && (width != width1 || height != height1))
+ {
+ SetSize(-1, -1, width, height);
+ }
+ }
+}
+
+void wxChoice::ChangeBackgroundColour()
+{
+ DoChangeBackgroundColour(m_formWidget, m_backgroundColour);
+ DoChangeBackgroundColour(m_buttonWidget, m_backgroundColour);
+ DoChangeBackgroundColour(m_menuWidget, m_backgroundColour);
+ int i;
+ for (i = 0; i < m_noStrings; i++)
+ DoChangeBackgroundColour(m_widgetList[i], m_backgroundColour);
+}
+
+void wxChoice::ChangeForegroundColour()
+{
+ DoChangeForegroundColour(m_formWidget, m_foregroundColour);
+ DoChangeForegroundColour(m_buttonWidget, m_foregroundColour);
+ DoChangeForegroundColour(m_menuWidget, m_foregroundColour);
+ int i;
+ for (i = 0; i < m_noStrings; i++)
+ DoChangeForegroundColour(m_widgetList[i], m_foregroundColour);
+}