+ return (WXWidget) XtParent( (Widget) m_mainWidget );
+}
+
+void wxListBox::ChangeFont(bool keepOriginalSize)
+{
+ wxWindow::ChangeFont(keepOriginalSize);
+}
+
+void wxListBox::ChangeBackgroundColour()
+{
+ wxWindow::ChangeBackgroundColour();
+
+ Widget parent = XtParent ((Widget) m_mainWidget);
+ Widget hsb, vsb;
+
+ XtVaGetValues (parent,
+ XmNhorizontalScrollBar, &hsb,
+ XmNverticalScrollBar, &vsb,
+ NULL);
+
+ /* TODO: should scrollbars be affected? Should probably have separate
+ * function to change them (by default, taken from wxSystemSettings)
+ */
+ wxColour backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
+ DoChangeBackgroundColour((WXWidget) hsb, backgroundColour, TRUE);
+ DoChangeBackgroundColour((WXWidget) vsb, backgroundColour, TRUE);
+
+ XtVaSetValues (hsb,
+ XmNtroughColor, backgroundColour.AllocColour(XtDisplay(hsb)),
+ NULL);
+ XtVaSetValues (vsb,
+ XmNtroughColor, backgroundColour.AllocColour(XtDisplay(vsb)),
+ NULL);
+
+ DoChangeBackgroundColour((WXWidget) parent, m_backgroundColour, TRUE);
+}
+
+void wxListBox::ChangeForegroundColour()
+{
+ wxWindow::ChangeForegroundColour();
+
+ Widget parent = XtParent ((Widget) m_mainWidget);
+ Widget hsb, vsb;
+
+ XtVaGetValues(parent,
+ XmNhorizontalScrollBar, &hsb,
+ XmNverticalScrollBar, &vsb,
+ NULL);
+
+ /* TODO: should scrollbars be affected? Should probably have separate
+ function to change them (by default, taken from wxSystemSettings)
+
+ DoChangeForegroundColour((WXWidget) hsb, m_foregroundColour);
+ DoChangeForegroundColour((WXWidget) vsb, m_foregroundColour);
+ DoChangeForegroundColour((WXWidget) parent, m_foregroundColour);
+ */
+}
+
+// These implement functions needed by wxControlWithItems.
+// Unfortunately, they're not all implemented yet.
+
+int wxListBox::GetCount() const
+{
+ return Number();
+}
+
+int wxListBox::DoAppend(const wxString& item)
+{
+ Append(item, (void*) NULL);
+ return GetCount() - 1;
+}
+
+// Just appends, doesn't yet insert
+void wxListBox::DoInsertItems(const wxArrayString& items, int WXUNUSED(pos))
+{
+ size_t nItems = items.GetCount();
+
+ for ( size_t n = 0; n < nItems; n++ )
+ {
+ Append( items[n], (void*) NULL);
+ }
+}
+
+void wxListBox::DoSetItems(const wxArrayString& items, void **clientData)
+{
+ size_t nItems = items.GetCount();
+ wxString* strings = new wxString[nItems];
+
+ for ( size_t n = 0; n < nItems; n++ )
+ {
+ strings[n] = items[n];
+ }
+ Set(nItems, strings, clientData);
+
+ delete[] strings;
+}
+
+void wxListBox::DoSetFirstItem(int WXUNUSED(n))
+{
+ wxFAIL_MSG( wxT("wxListBox::DoSetFirstItem not implemented") );
+}
+
+void wxListBox::DoSetItemClientData(int n, void* clientData)
+{
+ SetClientData(n, clientData);
+}
+
+void* wxListBox::DoGetItemClientData(int n) const
+{
+ return GetClientData(n);
+}
+
+void wxListBox::DoSetItemClientObject(int n, wxClientData* clientData)
+{
+ DoSetItemClientData(n, (void*) clientData);
+}
+
+wxClientData* wxListBox::DoGetItemClientObject(int n) const
+{
+ return (wxClientData*) DoGetItemClientData(n);
+}
+
+void wxListBox::Select(int n)
+{
+ SetSelection(n, TRUE);