From a93109d5926130130a73cb77272887dad4814521 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Sat, 19 Dec 1998 08:16:45 +0000 Subject: [PATCH] Added more keyboard handling to wxTreeCtrl Fixed HitText wrt to items with an image changed size calculation in wxStatText git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1243 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/controls/controls.cpp | 6 +- src/generic/treectrl.cpp | 51 ++++++++++++++--- src/gtk/statbmp.cpp | 60 +++++++++---------- src/gtk/stattext.cpp | 105 ++++++++++++---------------------- src/gtk1/statbmp.cpp | 60 +++++++++---------- src/gtk1/stattext.cpp | 105 ++++++++++++---------------------- 6 files changed, 183 insertions(+), 204 deletions(-) diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index 5e3e17192e..a8f5b70ac9 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -400,7 +400,11 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) : "\n" "This is also supposed to demonstrate how\n" "to use static controls.\n", - wxPoint(208,25), wxSize(200, 100) ); + wxPoint(208,25) +#ifdef __WXMSW__ + ,wxSize(210, 110) +#endif + ); m_spintext = new wxTextCtrl( panel, -1, "0", wxPoint(20,160), wxSize(80,-1) ); m_spintext->SetBackgroundColour("wheat"); m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(-1,-1) ); diff --git a/src/generic/treectrl.cpp b/src/generic/treectrl.cpp index 775eadb61c..052f03b240 100644 --- a/src/generic/treectrl.cpp +++ b/src/generic/treectrl.cpp @@ -285,8 +285,11 @@ wxGenericTreeItem *wxGenericTreeItem::HitTest( const wxPoint& point, onButton = TRUE; return this; } + + int w = m_width; + if (m_image != -1) w += 20; - if ((point.x > m_x) && (point.x < m_x+m_width)) + if ((point.x > m_x) && (point.x < m_x+w)) { onButton = FALSE; return this; @@ -883,6 +886,10 @@ void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item) int start_y = 0; ViewStart( &start_x, &start_y ); start_y *= 10; + + int client_h = 0; + int client_w = 0; + GetClientSize( &client_w, &client_h ); if (item_y < start_y+3) { @@ -891,22 +898,18 @@ void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item) m_anchor->GetSize( x, y ); y += 2*m_lineHeight; int x_pos = GetScrollPos( wxHORIZONTAL ); - SetScrollbars( 10, 10, x/10, y/10, x_pos, item_y/10 ); + SetScrollbars( 10, 10, x/10, y/10, x_pos, (item_y-client_h/2)/10 ); return; } - int w = 0; - int h = 0; - GetClientSize( &w, &h ); - - if (item_y > start_y+h-26) + if (item_y > start_y+client_h-16) { int x = 0; int y = 0; m_anchor->GetSize( x, y ); y += 2*m_lineHeight; int x_pos = GetScrollPos( wxHORIZONTAL ); - SetScrollbars( 10, 10, x/10, y/10, x_pos, (item_y-h+30)/10 ); + SetScrollbars( 10, 10, x/10, y/10, x_pos, (item_y-client_h/2)/10 ); return; } } @@ -1255,8 +1258,38 @@ void wxTreeCtrl::OnChar( wxKeyEvent &event ) } break; - case WXK_LEFT: case WXK_UP: + { + wxTreeItemId prev = GetPrevSibling( m_current ); + if (!prev) + { + prev = GetParent( m_current ); + long cockie = 0; + wxTreeItemId current = m_current; + if (current == GetFirstChild( prev, cockie )) + { + // otherwise we return to where we came from + SelectItem( prev ); + EnsureVisible( prev ); + break; + } + } + if (prev) + { + while (IsExpanded(prev)) + { + int c = (int)GetChildrenCount( prev, FALSE ); + long cockie = 0; + prev = GetFirstChild( prev, cockie ); + for (int i = 0; i < c-1; i++) + prev = GetNextSibling( prev ); + } + SelectItem( prev ); + EnsureVisible( prev ); + } + } + break; + case WXK_LEFT: { wxTreeItemId prev = GetPrevSibling( m_current ); if (prev != 0) diff --git a/src/gtk/statbmp.cpp b/src/gtk/statbmp.cpp index c51db3746f..69b6b571d6 100644 --- a/src/gtk/statbmp.cpp +++ b/src/gtk/statbmp.cpp @@ -27,55 +27,55 @@ wxStaticBitmap::wxStaticBitmap( wxWindow *parent, wxWindowID id, const wxBitmap const wxPoint &pos, const wxSize &size, long style, const wxString &name ) { - Create( parent, id, bitmap, pos, size, style, name ); + Create( parent, id, bitmap, pos, size, style, name ); } bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bitmap, const wxPoint &pos, const wxSize &size, long style, const wxString &name ) { - m_needParent = TRUE; + m_needParent = TRUE; - wxSize newSize = size; + wxSize newSize = size; - PreCreation( parent, id, pos, size, style, name ); + PreCreation( parent, id, pos, size, style, name ); - m_bitmap = bitmap; + m_bitmap = bitmap; - if (m_bitmap.Ok()) - { - GdkBitmap *mask = (GdkBitmap *) NULL; - if (m_bitmap.GetMask()) mask = m_bitmap.GetMask()->GetBitmap(); - m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask ); + if (m_bitmap.Ok()) + { + GdkBitmap *mask = (GdkBitmap *) NULL; + if (m_bitmap.GetMask()) mask = m_bitmap.GetMask()->GetBitmap(); + m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask ); - if (newSize.x == -1) newSize.x = m_bitmap.GetWidth(); - if (newSize.y == -1) newSize.y = m_bitmap.GetHeight(); - SetSize( newSize.x, newSize.y ); - } - else - { - m_widget = gtk_label_new( "Bitmap" ); - } + if (newSize.x == -1) newSize.x = m_bitmap.GetWidth(); + if (newSize.y == -1) newSize.y = m_bitmap.GetHeight(); + SetSize( newSize.x, newSize.y ); + } + else + { + m_widget = gtk_label_new( "Bitmap" ); + } - m_parent->AddChild( this ); + m_parent->AddChild( this ); - (m_parent->m_insertCallback)( m_parent, this ); + (m_parent->m_insertCallback)( m_parent, this ); - PostCreation(); + PostCreation(); - Show( TRUE ); + Show( TRUE ); - return TRUE; + return TRUE; } void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap ) { - m_bitmap = bitmap; + m_bitmap = bitmap; - if (m_bitmap.Ok()) - { - GdkBitmap *mask = (GdkBitmap *) NULL; - if (m_bitmap.GetMask()) mask = m_bitmap.GetMask()->GetBitmap(); - gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask ); - } + if (m_bitmap.Ok()) + { + GdkBitmap *mask = (GdkBitmap *) NULL; + if (m_bitmap.GetMask()) mask = m_bitmap.GetMask()->GetBitmap(); + gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask ); + } } diff --git a/src/gtk/stattext.cpp b/src/gtk/stattext.cpp index fd3c5ee83d..e7b40878d4 100644 --- a/src/gtk/stattext.cpp +++ b/src/gtk/stattext.cpp @@ -35,93 +35,64 @@ bool wxStaticText::Create( wxWindow *parent, wxWindowID id, const wxString &labe const wxPoint &pos, const wxSize &size, long style, const wxString &name ) { - m_needParent = TRUE; + m_needParent = TRUE; - wxSize newSize = size; + wxSize newSize = size; - PreCreation( parent, id, pos, size, style, name ); + PreCreation( parent, id, pos, size, style, name ); - wxControl::SetLabel(label); - m_widget = gtk_label_new( m_label ); - - GtkJustification justify; - if ( style & wxALIGN_CENTER ) - justify = GTK_JUSTIFY_CENTER; - else if ( style & wxALIGN_RIGHT ) - justify = GTK_JUSTIFY_RIGHT; - else // wxALIGN_LEFT is 0 - justify = GTK_JUSTIFY_LEFT; - gtk_label_set_justify(GTK_LABEL(m_widget), justify); - - int y = 1; - if (newSize.x == -1) - { - char *s = WXSTRINGCAST m_label; - char *nl = strchr(s, '\n'); - if (nl) - { - do - { - *nl = 0; - int x = gdk_string_measure( m_widget->style->font, s ) + 4; - if (x > newSize.x) newSize.x = x; - *nl++ = '\n'; - ++y; - if (! (nl = strchr(s = nl, '\n'))) - { - - int x = gdk_string_measure( m_widget->style->font, s ) + 4; - if (x > newSize.x) newSize.x = x; - } - } while (nl); - } - else - { - newSize.x = gdk_string_measure( m_widget->style->font, label ) + 4; - } - } - if (newSize.y == -1) - { - if (y == 1) - newSize.y = 26; - else - newSize.y = 4 + y * (m_widget->style->font->ascent + m_widget->style->font->descent + 2); - } - - SetSize( newSize.x, newSize.y ); + wxControl::SetLabel(label); + m_widget = gtk_label_new( m_label ); + + GtkJustification justify; + if ( style & wxALIGN_CENTER ) + justify = GTK_JUSTIFY_CENTER; + else if ( style & wxALIGN_RIGHT ) + justify = GTK_JUSTIFY_RIGHT; + else // wxALIGN_LEFT is 0 + justify = GTK_JUSTIFY_LEFT; + gtk_label_set_justify(GTK_LABEL(m_widget), justify); + + GtkRequisition req; + (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req ); + + if (newSize.x == -1) newSize.x = req.width; + if (newSize.y == -1) newSize.y = req.height; + + SetSize( newSize.x, newSize.y ); - m_parent->AddChild( this ); + m_parent->AddChild( this ); - (m_parent->m_insertCallback)( m_parent, this ); + (m_parent->m_insertCallback)( m_parent, this ); - PostCreation(); + PostCreation(); - SetBackgroundColour( parent->GetBackgroundColour() ); - SetForegroundColour( parent->GetForegroundColour() ); + SetBackgroundColour( parent->GetBackgroundColour() ); + SetForegroundColour( parent->GetForegroundColour() ); - Show( TRUE ); + Show( TRUE ); - return TRUE; + return TRUE; } wxString wxStaticText::GetLabel(void) const { - char *str = (char *) NULL; - gtk_label_get( GTK_LABEL(m_widget), &str ); - wxString tmp( str ); - return tmp; + char *str = (char *) NULL; + gtk_label_get( GTK_LABEL(m_widget), &str ); + wxString tmp( str ); + return tmp; } void wxStaticText::SetLabel( const wxString &label ) { - wxControl::SetLabel(label); + wxControl::SetLabel(label); - gtk_label_set( GTK_LABEL(m_widget), m_label ); -} + gtk_label_set( GTK_LABEL(m_widget), m_label ); +} void wxStaticText::ApplyWidgetStyle() { - SetWidgetStyle(); - gtk_widget_set_style( m_widget, m_widgetStyle ); + SetWidgetStyle(); + gtk_widget_set_style( m_widget, m_widgetStyle ); } diff --git a/src/gtk1/statbmp.cpp b/src/gtk1/statbmp.cpp index c51db3746f..69b6b571d6 100644 --- a/src/gtk1/statbmp.cpp +++ b/src/gtk1/statbmp.cpp @@ -27,55 +27,55 @@ wxStaticBitmap::wxStaticBitmap( wxWindow *parent, wxWindowID id, const wxBitmap const wxPoint &pos, const wxSize &size, long style, const wxString &name ) { - Create( parent, id, bitmap, pos, size, style, name ); + Create( parent, id, bitmap, pos, size, style, name ); } bool wxStaticBitmap::Create( wxWindow *parent, wxWindowID id, const wxBitmap &bitmap, const wxPoint &pos, const wxSize &size, long style, const wxString &name ) { - m_needParent = TRUE; + m_needParent = TRUE; - wxSize newSize = size; + wxSize newSize = size; - PreCreation( parent, id, pos, size, style, name ); + PreCreation( parent, id, pos, size, style, name ); - m_bitmap = bitmap; + m_bitmap = bitmap; - if (m_bitmap.Ok()) - { - GdkBitmap *mask = (GdkBitmap *) NULL; - if (m_bitmap.GetMask()) mask = m_bitmap.GetMask()->GetBitmap(); - m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask ); + if (m_bitmap.Ok()) + { + GdkBitmap *mask = (GdkBitmap *) NULL; + if (m_bitmap.GetMask()) mask = m_bitmap.GetMask()->GetBitmap(); + m_widget = gtk_pixmap_new( m_bitmap.GetPixmap(), mask ); - if (newSize.x == -1) newSize.x = m_bitmap.GetWidth(); - if (newSize.y == -1) newSize.y = m_bitmap.GetHeight(); - SetSize( newSize.x, newSize.y ); - } - else - { - m_widget = gtk_label_new( "Bitmap" ); - } + if (newSize.x == -1) newSize.x = m_bitmap.GetWidth(); + if (newSize.y == -1) newSize.y = m_bitmap.GetHeight(); + SetSize( newSize.x, newSize.y ); + } + else + { + m_widget = gtk_label_new( "Bitmap" ); + } - m_parent->AddChild( this ); + m_parent->AddChild( this ); - (m_parent->m_insertCallback)( m_parent, this ); + (m_parent->m_insertCallback)( m_parent, this ); - PostCreation(); + PostCreation(); - Show( TRUE ); + Show( TRUE ); - return TRUE; + return TRUE; } void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap ) { - m_bitmap = bitmap; + m_bitmap = bitmap; - if (m_bitmap.Ok()) - { - GdkBitmap *mask = (GdkBitmap *) NULL; - if (m_bitmap.GetMask()) mask = m_bitmap.GetMask()->GetBitmap(); - gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask ); - } + if (m_bitmap.Ok()) + { + GdkBitmap *mask = (GdkBitmap *) NULL; + if (m_bitmap.GetMask()) mask = m_bitmap.GetMask()->GetBitmap(); + gtk_pixmap_set( GTK_PIXMAP(m_widget), m_bitmap.GetPixmap(), mask ); + } } diff --git a/src/gtk1/stattext.cpp b/src/gtk1/stattext.cpp index fd3c5ee83d..e7b40878d4 100644 --- a/src/gtk1/stattext.cpp +++ b/src/gtk1/stattext.cpp @@ -35,93 +35,64 @@ bool wxStaticText::Create( wxWindow *parent, wxWindowID id, const wxString &labe const wxPoint &pos, const wxSize &size, long style, const wxString &name ) { - m_needParent = TRUE; + m_needParent = TRUE; - wxSize newSize = size; + wxSize newSize = size; - PreCreation( parent, id, pos, size, style, name ); + PreCreation( parent, id, pos, size, style, name ); - wxControl::SetLabel(label); - m_widget = gtk_label_new( m_label ); - - GtkJustification justify; - if ( style & wxALIGN_CENTER ) - justify = GTK_JUSTIFY_CENTER; - else if ( style & wxALIGN_RIGHT ) - justify = GTK_JUSTIFY_RIGHT; - else // wxALIGN_LEFT is 0 - justify = GTK_JUSTIFY_LEFT; - gtk_label_set_justify(GTK_LABEL(m_widget), justify); - - int y = 1; - if (newSize.x == -1) - { - char *s = WXSTRINGCAST m_label; - char *nl = strchr(s, '\n'); - if (nl) - { - do - { - *nl = 0; - int x = gdk_string_measure( m_widget->style->font, s ) + 4; - if (x > newSize.x) newSize.x = x; - *nl++ = '\n'; - ++y; - if (! (nl = strchr(s = nl, '\n'))) - { - - int x = gdk_string_measure( m_widget->style->font, s ) + 4; - if (x > newSize.x) newSize.x = x; - } - } while (nl); - } - else - { - newSize.x = gdk_string_measure( m_widget->style->font, label ) + 4; - } - } - if (newSize.y == -1) - { - if (y == 1) - newSize.y = 26; - else - newSize.y = 4 + y * (m_widget->style->font->ascent + m_widget->style->font->descent + 2); - } - - SetSize( newSize.x, newSize.y ); + wxControl::SetLabel(label); + m_widget = gtk_label_new( m_label ); + + GtkJustification justify; + if ( style & wxALIGN_CENTER ) + justify = GTK_JUSTIFY_CENTER; + else if ( style & wxALIGN_RIGHT ) + justify = GTK_JUSTIFY_RIGHT; + else // wxALIGN_LEFT is 0 + justify = GTK_JUSTIFY_LEFT; + gtk_label_set_justify(GTK_LABEL(m_widget), justify); + + GtkRequisition req; + (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req ); + + if (newSize.x == -1) newSize.x = req.width; + if (newSize.y == -1) newSize.y = req.height; + + SetSize( newSize.x, newSize.y ); - m_parent->AddChild( this ); + m_parent->AddChild( this ); - (m_parent->m_insertCallback)( m_parent, this ); + (m_parent->m_insertCallback)( m_parent, this ); - PostCreation(); + PostCreation(); - SetBackgroundColour( parent->GetBackgroundColour() ); - SetForegroundColour( parent->GetForegroundColour() ); + SetBackgroundColour( parent->GetBackgroundColour() ); + SetForegroundColour( parent->GetForegroundColour() ); - Show( TRUE ); + Show( TRUE ); - return TRUE; + return TRUE; } wxString wxStaticText::GetLabel(void) const { - char *str = (char *) NULL; - gtk_label_get( GTK_LABEL(m_widget), &str ); - wxString tmp( str ); - return tmp; + char *str = (char *) NULL; + gtk_label_get( GTK_LABEL(m_widget), &str ); + wxString tmp( str ); + return tmp; } void wxStaticText::SetLabel( const wxString &label ) { - wxControl::SetLabel(label); + wxControl::SetLabel(label); - gtk_label_set( GTK_LABEL(m_widget), m_label ); -} + gtk_label_set( GTK_LABEL(m_widget), m_label ); +} void wxStaticText::ApplyWidgetStyle() { - SetWidgetStyle(); - gtk_widget_set_style( m_widget, m_widgetStyle ); + SetWidgetStyle(); + gtk_widget_set_style( m_widget, m_widgetStyle ); } -- 2.47.2