public:
wxSTCListBox(wxWindow* parent, wxWindowID id)
: wxListBox(parent, id, wxDefaultPosition, wxDefaultSize,
- 0, NULL, wxLB_SINGLE | wxLB_SORT | wxSIMPLE_BORDER)
+ 0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER) // | wxLB_SORT )
{}
void OnFocus(wxFocusEvent& event) {
event.Skip();
}
-#ifdef __WXGTK__
- void DoSetFirstItem(int n);
-#endif
-
private:
DECLARE_EVENT_TABLE()
};
END_EVENT_TABLE()
-
-
-#ifdef __WXGTK__
- // This can be removed after 2.2.2 I think
-void wxSTCListBox::DoSetFirstItem( int n )
-{
- wxCHECK_RET( m_list, wxT("invalid listbox") );
-
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (m_list))
- return;
-
- // terribly efficient
- const gchar *vadjustment_key = "gtk-vadjustment";
- guint vadjustment_key_id = g_quark_from_static_string (vadjustment_key);
-
- GtkAdjustment *adjustment =
- (GtkAdjustment*) gtk_object_get_data_by_id (GTK_OBJECT (m_list), vadjustment_key_id);
- wxCHECK_RET( adjustment, wxT("invalid listbox code") );
-
- GList *target = g_list_nth( m_list->children, n );
- wxCHECK_RET( target, wxT("invalid listbox index") );
-
- GtkWidget *item = GTK_WIDGET(target->data);
- wxCHECK_RET( item, wxT("invalid listbox code") );
-
- // find the last item before this one which is already realized
- size_t nItemsBefore;
- for ( nItemsBefore = 0; item && (item->allocation.y == -1); nItemsBefore++ )
- {
- target = target->prev;
- if ( !target )
- {
- // nothing we can do if there are no allocated items yet
- return;
- }
-
- item = GTK_WIDGET(target->data);
- }
-
- gtk_adjustment_set_value(adjustment,
- item->allocation.y +
- nItemsBefore*item->allocation.height);
-}
-#endif
-
-
ListBox::ListBox() {
}
void ListBox::Create(Window &parent, int ctrlID) {
id = new wxSTCListBox(parent.id, ctrlID);
-// id = new wxListBox(parent.id, ctrlID, wxDefaultPosition, wxDefaultSize,
-// 0, NULL, wxLB_SINGLE | wxLB_SORT | wxSIMPLE_BORDER);
+}
+
+void ListBox::SetVisibleRows(int rows) {
+ desiredVisibleRows = rows;
}
PRectangle ListBox::GetDesiredRect() {
PRectangle rc;
rc.top = 0;
rc.left = 0;
- if (sz.x > 150) // TODO: A better way to determine these max sizes
- sz.x = 150;
- if (sz.y > 100)
- sz.y = 100;
+ if (sz.x > 400)
+ sz.x = 400;
+ if (sz.y > 160) // TODO: Use desiredVisibleRows??
+ sz.y = 160;
rc.right = sz.x;
rc.bottom = sz.y;
-
return rc;
}
}
int ListBox::Find(const char *prefix) {
- if (prefix) {
- for (int x=0; x < ((wxListBox*)id)->GetCount(); x++) {
- wxString text = ((wxListBox*)id)->GetString(x);
- if (text.StartsWith(prefix))
- return x;
- }
- }
+ // No longer used
return -1;
}