From: Robert Roebling Date: Wed, 16 Dec 1998 12:17:14 +0000 (+0000) Subject: Added wxTolBar::etMargins X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1144d24d25ebf729407db27594dd51778f77cec4?ds=inline Added wxTolBar::etMargins Checklistbox update git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1209 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/gtk/tbargtk.h b/include/wx/gtk/tbargtk.h index dc4320d428..2b7ec30b31 100644 --- a/include/wx/gtk/tbargtk.h +++ b/include/wx/gtk/tbargtk.h @@ -113,7 +113,7 @@ class wxToolBar: public wxControl virtual void AddSeparator(void); virtual void ClearTools(void); - virtual void Realize(void); + virtual bool Realize(void); virtual void EnableTool(int toolIndex, bool enable); virtual void ToggleTool(int toolIndex, bool toggle); // toggle is TRUE if toggled on @@ -124,15 +124,30 @@ class wxToolBar: public wxControl virtual void SetMargins(int x, int y); void SetMargins(const wxSize& size) { SetMargins(size.x, size.y); }; + virtual wxSize GetToolMargins(void) { return wxSize(m_xMargin, m_yMargin); } + virtual void SetToolPacking(int packing); virtual void SetToolSeparation(int separation); + virtual int GetToolPacking(); + virtual int GetToolSeparation(); + + virtual wxString GetToolLongHelp(int toolIndex); + virtual wxString GetToolShortHelp(int toolIndex); + + virtual void SetToolLongHelp(int toolIndex, const wxString& helpString); + virtual void SetToolShortHelp(int toolIndex, const wxString& helpString); // implementation GtkToolbar *m_toolbar; + int m_separation; wxList m_tools; + GdkColor m_fg; GdkColor m_bg; + int m_xMargin; + int m_yMargin; + bool m_hasToolAlready; }; #endif diff --git a/include/wx/gtk1/tbargtk.h b/include/wx/gtk1/tbargtk.h index dc4320d428..2b7ec30b31 100644 --- a/include/wx/gtk1/tbargtk.h +++ b/include/wx/gtk1/tbargtk.h @@ -113,7 +113,7 @@ class wxToolBar: public wxControl virtual void AddSeparator(void); virtual void ClearTools(void); - virtual void Realize(void); + virtual bool Realize(void); virtual void EnableTool(int toolIndex, bool enable); virtual void ToggleTool(int toolIndex, bool toggle); // toggle is TRUE if toggled on @@ -124,15 +124,30 @@ class wxToolBar: public wxControl virtual void SetMargins(int x, int y); void SetMargins(const wxSize& size) { SetMargins(size.x, size.y); }; + virtual wxSize GetToolMargins(void) { return wxSize(m_xMargin, m_yMargin); } + virtual void SetToolPacking(int packing); virtual void SetToolSeparation(int separation); + virtual int GetToolPacking(); + virtual int GetToolSeparation(); + + virtual wxString GetToolLongHelp(int toolIndex); + virtual wxString GetToolShortHelp(int toolIndex); + + virtual void SetToolLongHelp(int toolIndex, const wxString& helpString); + virtual void SetToolShortHelp(int toolIndex, const wxString& helpString); // implementation GtkToolbar *m_toolbar; + int m_separation; wxList m_tools; + GdkColor m_fg; GdkColor m_bg; + int m_xMargin; + int m_yMargin; + bool m_hasToolAlready; }; #endif diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index 18b22ffe50..b74629851c 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -28,7 +28,6 @@ #include "wx/imaglist.h" #include "wx/spinbutt.h" #include "wx/clipbrd.h" -#include "wx/checklst.h" // XPM doesn't seem to work under Windows at present. Or, wxNotebook images // aren't working. @@ -209,8 +208,6 @@ const int ID_SLIDER = 181; const int ID_SPIN = 182; -const int ID_CHECKLIST = 190; - BEGIN_EVENT_TABLE(MyPanel, wxPanel) EVT_SIZE ( MyPanel::OnSize) @@ -410,14 +407,6 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) : m_spinbutton->SetRange(0,100); m_notebook->AddPage(panel, "wxGauge", FALSE, Image_Gauge); - - panel = new wxPanel(m_notebook); - panel->SetBackgroundColour("cadet blue"); - panel->SetForegroundColour("blue"); - m_listbox = new wxCheckListBox( panel, ID_CHECKLIST, wxPoint(10,10), wxSize(160,70), 5, choices ); - m_listbox->SetBackgroundColour("wheat"); - button = new wxButton( panel, ID_LISTBOX_FONT, "Set Italic font", wxPoint(340,130), wxSize(140,30) ); - m_notebook->AddPage(panel, "wxCheckListBox", FALSE, Image_List); } void MyPanel::OnPasteFromClipboard( wxCommandEvent &WXUNUSED(event) ) diff --git a/samples/toolbar/test.cpp b/samples/toolbar/test.cpp index 69bbfe4173..2403237fc0 100644 --- a/samples/toolbar/test.cpp +++ b/samples/toolbar/test.cpp @@ -71,6 +71,8 @@ bool MyApp::OnInit(void) // Create the toolbar frame->CreateToolBar(wxNO_BORDER|wxHORIZONTAL|wxTB_FLAT, ID_TOOLBAR); + + frame->GetToolBar()->SetMargins( 2, 2 ); InitToolbar(frame->GetToolBar()); diff --git a/src/gtk/checklst.cpp b/src/gtk/checklst.cpp index 252e216983..02df541f16 100644 --- a/src/gtk/checklst.cpp +++ b/src/gtk/checklst.cpp @@ -77,6 +77,11 @@ void wxCheckListBox::Check( int index, bool check ) gtk_label_set( label, str ); + wxCommandEvent event( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, GetId() ); + event.SetEventObject( this ); + event.SetInt( index ); + GetEventHandler()->ProcessEvent( event ); + return; } diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index 6570cb1c40..22d401bd8a 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -58,6 +58,28 @@ gtk_listbox_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, return FALSE; } +//----------------------------------------------------------------------------- +// "key_press_event" +//----------------------------------------------------------------------------- + +static gint +gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxListBox *listbox ) +{ + if (g_blockEventsOnDrag) return FALSE; + + if (!listbox->HasVMT()) return FALSE; + + if (gdk_event->keyval != ' ') return FALSE; + + int sel = listbox->GetIndex( widget ); + + wxCheckListBox *clb = (wxCheckListBox *)listbox; + + clb->Check( sel, !clb->IsChecked(sel) ); + + return FALSE; +} + //----------------------------------------------------------------------------- // "select" and "deselect" //----------------------------------------------------------------------------- @@ -173,6 +195,11 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, "button_press_event", (GtkSignalFunc)gtk_listbox_button_press_callback, (gpointer) this ); + + gtk_signal_connect( GTK_OBJECT(list_item), + "key_press_event", + (GtkSignalFunc)gtk_listbox_key_press_callback, + (gpointer)this ); } ConnectWidget( list_item ); @@ -235,6 +262,11 @@ void wxListBox::AppendCommon( const wxString &item ) "button_press_event", (GtkSignalFunc)gtk_listbox_button_press_callback, (gpointer) this ); + + gtk_signal_connect( GTK_OBJECT(list_item), + "key_press_event", + (GtkSignalFunc)gtk_listbox_key_press_callback, + (gpointer)this ); } gtk_widget_show( list_item ); diff --git a/src/gtk/tbargtk.cpp b/src/gtk/tbargtk.cpp index be712e3d01..671fa18e00 100644 --- a/src/gtk/tbargtk.cpp +++ b/src/gtk/tbargtk.cpp @@ -33,19 +33,19 @@ wxToolBarTool::wxToolBarTool( wxToolBar *owner, int theIndex, const wxString& longHelpString, GtkWidget *item ) { - m_owner = owner; - m_index = theIndex; - m_bitmap1 = bitmap1; - m_bitmap2 = bitmap2; - m_isToggle = toggle; - m_enabled = TRUE; - m_toggleState = FALSE; - m_shortHelpString = shortHelpString; - m_longHelpString = longHelpString; - m_isMenuCommand = TRUE; - m_clientData = clientData; - m_deleteSecondBitmap = FALSE; - m_item = item; + m_owner = owner; + m_index = theIndex; + m_bitmap1 = bitmap1; + m_bitmap2 = bitmap2; + m_isToggle = toggle; + m_enabled = TRUE; + m_toggleState = FALSE; + m_shortHelpString = shortHelpString; + m_longHelpString = longHelpString; + m_isMenuCommand = TRUE; + m_clientData = clientData; + m_deleteSecondBitmap = FALSE; + m_item = item; } wxToolBarTool::~wxToolBarTool() @@ -58,12 +58,12 @@ wxToolBarTool::~wxToolBarTool() static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget), wxToolBarTool *tool ) { - if (g_blockEventsOnDrag) return; - if (!tool->m_enabled) return; + if (g_blockEventsOnDrag) return; + if (!tool->m_enabled) return; - if (tool->m_isToggle) tool->m_toggleState = !tool->m_toggleState; + if (tool->m_isToggle) tool->m_toggleState = !tool->m_toggleState; - tool->m_owner->OnLeftClick( tool->m_index, tool->m_toggleState ); + tool->m_owner->OnLeftClick( tool->m_index, tool->m_toggleState ); } //----------------------------------------------------------------------------- @@ -73,11 +73,11 @@ static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget), wxToolBarTool *to static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget), GdkEventCrossing *WXUNUSED(gdk_event), wxToolBarTool *tool ) { - if (g_blockEventsOnDrag) return TRUE; + if (g_blockEventsOnDrag) return TRUE; - tool->m_owner->OnMouseEnter( tool->m_index ); + tool->m_owner->OnMouseEnter( tool->m_index ); - return FALSE; + return FALSE; } //----------------------------------------------------------------------------- @@ -94,7 +94,7 @@ wxToolBar::wxToolBar( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) { - Create( parent, id, pos, size, style, name ); + Create( parent, id, pos, size, style, name ); } wxToolBar::~wxToolBar() @@ -105,72 +105,77 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) { - m_needParent = TRUE; + m_needParent = TRUE; - PreCreation( parent, id, pos, size, style, name ); + PreCreation( parent, id, pos, size, style, name ); - m_tools.DeleteContents( TRUE ); + m_tools.DeleteContents( TRUE ); - m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( GTK_ORIENTATION_HORIZONTAL, - GTK_TOOLBAR_ICONS ) ); + m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( GTK_ORIENTATION_HORIZONTAL, + GTK_TOOLBAR_ICONS ) ); - m_widget = GTK_WIDGET(m_toolbar); + m_separation = 5; + gtk_toolbar_set_space_size( m_toolbar, m_separation ); + m_hasToolAlready = FALSE; + + m_widget = GTK_WIDGET(m_toolbar); - gtk_toolbar_set_tooltips( GTK_TOOLBAR(m_toolbar), TRUE ); + gtk_toolbar_set_tooltips( GTK_TOOLBAR(m_toolbar), TRUE ); - m_fg.red = 0; - m_fg.green = 0; - m_fg.blue = 0; - gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), &m_fg ); + m_fg.red = 0; + m_fg.green = 0; + m_fg.blue = 0; + gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), &m_fg ); - m_bg.red = 65535; - m_bg.green = 65535; - m_bg.blue = 50000; - gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), &m_bg ); + m_bg.red = 65535; + m_bg.green = 65535; + m_bg.blue = 50000; + gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), &m_bg ); - gtk_tooltips_set_colors( GTK_TOOLBAR(m_toolbar)->tooltips, &m_bg, &m_fg ); + gtk_tooltips_set_colors( GTK_TOOLBAR(m_toolbar)->tooltips, &m_bg, &m_fg ); - gtk_toolbar_append_space( m_toolbar ); - - m_parent->AddChild( this ); + m_xMargin = 0; + m_yMargin = 0; + + 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; } bool wxToolBar::OnLeftClick( int toolIndex, bool toggleDown ) { - wxCommandEvent event( wxEVT_COMMAND_TOOL_CLICKED, toolIndex ); - event.SetEventObject(this); - event.SetInt( toolIndex ); - event.SetExtraLong((long) toggleDown); + wxCommandEvent event( wxEVT_COMMAND_TOOL_CLICKED, toolIndex ); + event.SetEventObject(this); + event.SetInt( toolIndex ); + event.SetExtraLong((long) toggleDown); - GetEventHandler()->ProcessEvent(event); + GetEventHandler()->ProcessEvent(event); - return TRUE; + return TRUE; } void wxToolBar::OnRightClick( int toolIndex, float WXUNUSED(x), float WXUNUSED(y) ) { - wxCommandEvent event( wxEVT_COMMAND_TOOL_RCLICKED, toolIndex ); - event.SetEventObject( this ); - event.SetInt( toolIndex ); + wxCommandEvent event( wxEVT_COMMAND_TOOL_RCLICKED, toolIndex ); + event.SetEventObject( this ); + event.SetInt( toolIndex ); - GetEventHandler()->ProcessEvent(event); + GetEventHandler()->ProcessEvent(event); } void wxToolBar::OnMouseEnter( int toolIndex ) { - wxCommandEvent event( wxEVT_COMMAND_TOOL_ENTER, GetId() ); - event.SetEventObject(this); - event.SetInt( toolIndex ); + wxCommandEvent event( wxEVT_COMMAND_TOOL_ENTER, GetId() ); + event.SetEventObject(this); + event.SetInt( toolIndex ); - GetEventHandler()->ProcessEvent(event); + GetEventHandler()->ProcessEvent(event); } wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, @@ -178,23 +183,23 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, float WXUNUSED(xPos), float WXUNUSED(yPos), wxObject *clientData, const wxString& helpString1, const wxString& helpString2 ) { - wxCHECK_MSG( bitmap.Ok(), (wxToolBarTool *)NULL, - "invalid bitmap for wxToolBar icon" ); + m_hasToolAlready = TRUE; + + wxCHECK_MSG( bitmap.Ok(), (wxToolBarTool *)NULL, + "invalid bitmap for wxToolBar icon" ); - wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap, - toggle, clientData, - helpString1, helpString2 ); + wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap, + toggle, clientData, + helpString1, helpString2 ); - wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL, - "wxToolBar doesn't support GdkBitmap" ); + wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL, + "wxToolBar doesn't support GdkBitmap" ); - wxCHECK_MSG( bitmap.GetPixmap() != NULL, (wxToolBarTool *)NULL, - "wxToolBar::Add needs a wxBitmap" ); + wxCHECK_MSG( bitmap.GetPixmap() != NULL, (wxToolBarTool *)NULL, + "wxToolBar::Add needs a wxBitmap" ); - GtkWidget *tool_pixmap = (GtkWidget *)NULL; + GtkWidget *tool_pixmap = (GtkWidget *)NULL; - if (TRUE) // FIXME huh? - { GdkPixmap *pixmap = bitmap.GetPixmap(); GdkBitmap *mask = (GdkBitmap *)NULL; @@ -202,14 +207,13 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, mask = bitmap.GetMask()->GetBitmap(); tool_pixmap = gtk_pixmap_new( pixmap, mask ); - } - gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 ); + gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 ); - GtkToolbarChildType ctype = toggle ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON - : GTK_TOOLBAR_CHILD_BUTTON; + GtkToolbarChildType ctype = toggle ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON + : GTK_TOOLBAR_CHILD_BUTTON; - GtkWidget *item = gtk_toolbar_append_element + GtkWidget *item = gtk_toolbar_append_element ( GTK_TOOLBAR(m_toolbar), ctype, @@ -222,144 +226,237 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, (gpointer)tool ); - tool->m_item = item; + tool->m_item = item; - gtk_signal_connect( GTK_OBJECT(tool->m_item), - "enter_notify_event", - GTK_SIGNAL_FUNC(gtk_toolbar_enter_callback), - (gpointer)tool ); + gtk_signal_connect( GTK_OBJECT(tool->m_item), + "enter_notify_event", + GTK_SIGNAL_FUNC(gtk_toolbar_enter_callback), + (gpointer)tool ); - m_tools.Append( tool ); + m_tools.Append( tool ); - return tool; + return tool; } void wxToolBar::AddSeparator() { - gtk_toolbar_append_space( m_toolbar ); + gtk_toolbar_append_space( m_toolbar ); } void wxToolBar::ClearTools() { - wxFAIL_MSG( "wxToolBar::ClearTools not implemented" ); + wxFAIL_MSG( "wxToolBar::ClearTools not implemented" ); } -void wxToolBar::Realize() +bool wxToolBar::Realize() { - m_x = 0; - m_y = 0; - m_width = 100; - m_height = 0; + m_x = 0; + m_y = 0; + m_width = 100; + m_height = 0; - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_bitmap1.Ok()) + wxNode *node = m_tools.First(); + while (node) { - int tool_height = tool->m_bitmap1.GetHeight(); - if (tool_height > m_height) m_height = tool_height; - } + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_bitmap1.Ok()) + { + int tool_height = tool->m_bitmap1.GetHeight(); + if (tool_height > m_height) m_height = tool_height; + } - node = node->Next(); - } + node = node->Next(); + } - m_height += 12; + m_height += 5 + 2*m_yMargin; + + return TRUE; } void wxToolBar::EnableTool(int toolIndex, bool enable) { - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_index == toolIndex) - { - tool->m_enabled = enable; - return; + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + tool->m_enabled = enable; + return; + } + node = node->Next(); } - node = node->Next(); - } - wxFAIL_MSG( "wrong toolbar index" ); + wxFAIL_MSG( "wrong toolbar index" ); } void wxToolBar::ToggleTool( int toolIndex, bool toggle ) { - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_index == toolIndex) - { - tool->m_toggleState = toggle; - if ((tool->m_item) && (GTK_IS_TOGGLE_BUTTON(tool->m_item))) - gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(tool->m_item), toggle ); - return; + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + tool->m_toggleState = toggle; + if ((tool->m_item) && (GTK_IS_TOGGLE_BUTTON(tool->m_item))) + gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(tool->m_item), toggle ); + return; + } + node = node->Next(); } - node = node->Next(); - } - wxFAIL_MSG( "wrong toolbar index" ); + wxFAIL_MSG( "wrong toolbar index" ); } wxObject *wxToolBar::GetToolClientData( int index ) const { - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_index == index) return tool->m_clientData;; - node = node->Next(); - } + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == index) return tool->m_clientData;; + node = node->Next(); + } - wxFAIL_MSG( "wrong toolbar index" ); + wxFAIL_MSG( "wrong toolbar index" ); - return (wxObject*)NULL; + return (wxObject*)NULL; } bool wxToolBar::GetToolState(int toolIndex) const { - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_index == toolIndex) return tool->m_toggleState; - node = node->Next(); - } + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) return tool->m_toggleState; + node = node->Next(); + } - wxFAIL_MSG( "wrong toolbar index" ); + wxFAIL_MSG( "wrong toolbar index" ); - return FALSE; + return FALSE; } bool wxToolBar::GetToolEnabled(int toolIndex) const { - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_index == toolIndex) return tool->m_enabled; - node = node->Next(); - } + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) return tool->m_enabled; + node = node->Next(); + } - wxFAIL_MSG( "wrong toolbar index" ); + wxFAIL_MSG( "wrong toolbar index" ); - return FALSE; + return FALSE; } -void wxToolBar::SetMargins( int WXUNUSED(x), int WXUNUSED(y) ) +void wxToolBar::SetMargins( int x, int y ) { -// wxFAIL_MSG( "wxToolBar::SetMargins not implemented" ); + wxCHECK_RET( !m_hasToolAlready, "wxToolBar::SetMargins must be called before adding tool." ); + + if (x > 2) gtk_toolbar_append_space( m_toolbar ); // oh well + + m_xMargin = x; + m_yMargin = y; } void wxToolBar::SetToolPacking( int WXUNUSED(packing) ) { - wxFAIL_MSG( "wxToolBar::SetToolPacking not implemented" ); + wxFAIL_MSG( "wxToolBar::SetToolPacking not implemented" ); } void wxToolBar::SetToolSeparation( int separation ) { - gtk_toolbar_set_space_size( m_toolbar, separation ); + gtk_toolbar_set_space_size( m_toolbar, separation ); + m_separation = separation; +} + +int wxToolBar::GetToolPacking() +{ + return 0; +} + +int wxToolBar::GetToolSeparation() +{ + return m_separation; +} + +wxString wxToolBar::GetToolLongHelp(int toolIndex) +{ + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + return tool->m_longHelpString; + } + node = node->Next(); + } + + wxFAIL_MSG( "wrong toolbar index" ); + + return ""; +} + +wxString wxToolBar::GetToolShortHelp(int toolIndex) +{ + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + return tool->m_shortHelpString; + } + node = node->Next(); + } + + wxFAIL_MSG( "wrong toolbar index" ); + + return ""; } +void wxToolBar::SetToolLongHelp(int toolIndex, const wxString& helpString) +{ + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + tool->m_longHelpString = helpString; + return; + } + node = node->Next(); + } + + wxFAIL_MSG( "wrong toolbar index" ); + + return; +} + +void wxToolBar::SetToolShortHelp(int toolIndex, const wxString& helpString) +{ + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + tool->m_shortHelpString = helpString; + return; + } + node = node->Next(); + } + + wxFAIL_MSG( "wrong toolbar index" ); + + return; +} + + diff --git a/src/gtk1/checklst.cpp b/src/gtk1/checklst.cpp index 252e216983..02df541f16 100644 --- a/src/gtk1/checklst.cpp +++ b/src/gtk1/checklst.cpp @@ -77,6 +77,11 @@ void wxCheckListBox::Check( int index, bool check ) gtk_label_set( label, str ); + wxCommandEvent event( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, GetId() ); + event.SetEventObject( this ); + event.SetInt( index ); + GetEventHandler()->ProcessEvent( event ); + return; } diff --git a/src/gtk1/listbox.cpp b/src/gtk1/listbox.cpp index 6570cb1c40..22d401bd8a 100644 --- a/src/gtk1/listbox.cpp +++ b/src/gtk1/listbox.cpp @@ -58,6 +58,28 @@ gtk_listbox_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, return FALSE; } +//----------------------------------------------------------------------------- +// "key_press_event" +//----------------------------------------------------------------------------- + +static gint +gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxListBox *listbox ) +{ + if (g_blockEventsOnDrag) return FALSE; + + if (!listbox->HasVMT()) return FALSE; + + if (gdk_event->keyval != ' ') return FALSE; + + int sel = listbox->GetIndex( widget ); + + wxCheckListBox *clb = (wxCheckListBox *)listbox; + + clb->Check( sel, !clb->IsChecked(sel) ); + + return FALSE; +} + //----------------------------------------------------------------------------- // "select" and "deselect" //----------------------------------------------------------------------------- @@ -173,6 +195,11 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, "button_press_event", (GtkSignalFunc)gtk_listbox_button_press_callback, (gpointer) this ); + + gtk_signal_connect( GTK_OBJECT(list_item), + "key_press_event", + (GtkSignalFunc)gtk_listbox_key_press_callback, + (gpointer)this ); } ConnectWidget( list_item ); @@ -235,6 +262,11 @@ void wxListBox::AppendCommon( const wxString &item ) "button_press_event", (GtkSignalFunc)gtk_listbox_button_press_callback, (gpointer) this ); + + gtk_signal_connect( GTK_OBJECT(list_item), + "key_press_event", + (GtkSignalFunc)gtk_listbox_key_press_callback, + (gpointer)this ); } gtk_widget_show( list_item ); diff --git a/src/gtk1/tbargtk.cpp b/src/gtk1/tbargtk.cpp index be712e3d01..671fa18e00 100644 --- a/src/gtk1/tbargtk.cpp +++ b/src/gtk1/tbargtk.cpp @@ -33,19 +33,19 @@ wxToolBarTool::wxToolBarTool( wxToolBar *owner, int theIndex, const wxString& longHelpString, GtkWidget *item ) { - m_owner = owner; - m_index = theIndex; - m_bitmap1 = bitmap1; - m_bitmap2 = bitmap2; - m_isToggle = toggle; - m_enabled = TRUE; - m_toggleState = FALSE; - m_shortHelpString = shortHelpString; - m_longHelpString = longHelpString; - m_isMenuCommand = TRUE; - m_clientData = clientData; - m_deleteSecondBitmap = FALSE; - m_item = item; + m_owner = owner; + m_index = theIndex; + m_bitmap1 = bitmap1; + m_bitmap2 = bitmap2; + m_isToggle = toggle; + m_enabled = TRUE; + m_toggleState = FALSE; + m_shortHelpString = shortHelpString; + m_longHelpString = longHelpString; + m_isMenuCommand = TRUE; + m_clientData = clientData; + m_deleteSecondBitmap = FALSE; + m_item = item; } wxToolBarTool::~wxToolBarTool() @@ -58,12 +58,12 @@ wxToolBarTool::~wxToolBarTool() static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget), wxToolBarTool *tool ) { - if (g_blockEventsOnDrag) return; - if (!tool->m_enabled) return; + if (g_blockEventsOnDrag) return; + if (!tool->m_enabled) return; - if (tool->m_isToggle) tool->m_toggleState = !tool->m_toggleState; + if (tool->m_isToggle) tool->m_toggleState = !tool->m_toggleState; - tool->m_owner->OnLeftClick( tool->m_index, tool->m_toggleState ); + tool->m_owner->OnLeftClick( tool->m_index, tool->m_toggleState ); } //----------------------------------------------------------------------------- @@ -73,11 +73,11 @@ static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget), wxToolBarTool *to static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget), GdkEventCrossing *WXUNUSED(gdk_event), wxToolBarTool *tool ) { - if (g_blockEventsOnDrag) return TRUE; + if (g_blockEventsOnDrag) return TRUE; - tool->m_owner->OnMouseEnter( tool->m_index ); + tool->m_owner->OnMouseEnter( tool->m_index ); - return FALSE; + return FALSE; } //----------------------------------------------------------------------------- @@ -94,7 +94,7 @@ wxToolBar::wxToolBar( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) { - Create( parent, id, pos, size, style, name ); + Create( parent, id, pos, size, style, name ); } wxToolBar::~wxToolBar() @@ -105,72 +105,77 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) { - m_needParent = TRUE; + m_needParent = TRUE; - PreCreation( parent, id, pos, size, style, name ); + PreCreation( parent, id, pos, size, style, name ); - m_tools.DeleteContents( TRUE ); + m_tools.DeleteContents( TRUE ); - m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( GTK_ORIENTATION_HORIZONTAL, - GTK_TOOLBAR_ICONS ) ); + m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( GTK_ORIENTATION_HORIZONTAL, + GTK_TOOLBAR_ICONS ) ); - m_widget = GTK_WIDGET(m_toolbar); + m_separation = 5; + gtk_toolbar_set_space_size( m_toolbar, m_separation ); + m_hasToolAlready = FALSE; + + m_widget = GTK_WIDGET(m_toolbar); - gtk_toolbar_set_tooltips( GTK_TOOLBAR(m_toolbar), TRUE ); + gtk_toolbar_set_tooltips( GTK_TOOLBAR(m_toolbar), TRUE ); - m_fg.red = 0; - m_fg.green = 0; - m_fg.blue = 0; - gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), &m_fg ); + m_fg.red = 0; + m_fg.green = 0; + m_fg.blue = 0; + gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), &m_fg ); - m_bg.red = 65535; - m_bg.green = 65535; - m_bg.blue = 50000; - gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), &m_bg ); + m_bg.red = 65535; + m_bg.green = 65535; + m_bg.blue = 50000; + gdk_color_alloc( gtk_widget_get_colormap( GTK_WIDGET(m_toolbar) ), &m_bg ); - gtk_tooltips_set_colors( GTK_TOOLBAR(m_toolbar)->tooltips, &m_bg, &m_fg ); + gtk_tooltips_set_colors( GTK_TOOLBAR(m_toolbar)->tooltips, &m_bg, &m_fg ); - gtk_toolbar_append_space( m_toolbar ); - - m_parent->AddChild( this ); + m_xMargin = 0; + m_yMargin = 0; + + 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; } bool wxToolBar::OnLeftClick( int toolIndex, bool toggleDown ) { - wxCommandEvent event( wxEVT_COMMAND_TOOL_CLICKED, toolIndex ); - event.SetEventObject(this); - event.SetInt( toolIndex ); - event.SetExtraLong((long) toggleDown); + wxCommandEvent event( wxEVT_COMMAND_TOOL_CLICKED, toolIndex ); + event.SetEventObject(this); + event.SetInt( toolIndex ); + event.SetExtraLong((long) toggleDown); - GetEventHandler()->ProcessEvent(event); + GetEventHandler()->ProcessEvent(event); - return TRUE; + return TRUE; } void wxToolBar::OnRightClick( int toolIndex, float WXUNUSED(x), float WXUNUSED(y) ) { - wxCommandEvent event( wxEVT_COMMAND_TOOL_RCLICKED, toolIndex ); - event.SetEventObject( this ); - event.SetInt( toolIndex ); + wxCommandEvent event( wxEVT_COMMAND_TOOL_RCLICKED, toolIndex ); + event.SetEventObject( this ); + event.SetInt( toolIndex ); - GetEventHandler()->ProcessEvent(event); + GetEventHandler()->ProcessEvent(event); } void wxToolBar::OnMouseEnter( int toolIndex ) { - wxCommandEvent event( wxEVT_COMMAND_TOOL_ENTER, GetId() ); - event.SetEventObject(this); - event.SetInt( toolIndex ); + wxCommandEvent event( wxEVT_COMMAND_TOOL_ENTER, GetId() ); + event.SetEventObject(this); + event.SetInt( toolIndex ); - GetEventHandler()->ProcessEvent(event); + GetEventHandler()->ProcessEvent(event); } wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, @@ -178,23 +183,23 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, float WXUNUSED(xPos), float WXUNUSED(yPos), wxObject *clientData, const wxString& helpString1, const wxString& helpString2 ) { - wxCHECK_MSG( bitmap.Ok(), (wxToolBarTool *)NULL, - "invalid bitmap for wxToolBar icon" ); + m_hasToolAlready = TRUE; + + wxCHECK_MSG( bitmap.Ok(), (wxToolBarTool *)NULL, + "invalid bitmap for wxToolBar icon" ); - wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap, - toggle, clientData, - helpString1, helpString2 ); + wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap, + toggle, clientData, + helpString1, helpString2 ); - wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL, - "wxToolBar doesn't support GdkBitmap" ); + wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL, + "wxToolBar doesn't support GdkBitmap" ); - wxCHECK_MSG( bitmap.GetPixmap() != NULL, (wxToolBarTool *)NULL, - "wxToolBar::Add needs a wxBitmap" ); + wxCHECK_MSG( bitmap.GetPixmap() != NULL, (wxToolBarTool *)NULL, + "wxToolBar::Add needs a wxBitmap" ); - GtkWidget *tool_pixmap = (GtkWidget *)NULL; + GtkWidget *tool_pixmap = (GtkWidget *)NULL; - if (TRUE) // FIXME huh? - { GdkPixmap *pixmap = bitmap.GetPixmap(); GdkBitmap *mask = (GdkBitmap *)NULL; @@ -202,14 +207,13 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, mask = bitmap.GetMask()->GetBitmap(); tool_pixmap = gtk_pixmap_new( pixmap, mask ); - } - gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 ); + gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 ); - GtkToolbarChildType ctype = toggle ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON - : GTK_TOOLBAR_CHILD_BUTTON; + GtkToolbarChildType ctype = toggle ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON + : GTK_TOOLBAR_CHILD_BUTTON; - GtkWidget *item = gtk_toolbar_append_element + GtkWidget *item = gtk_toolbar_append_element ( GTK_TOOLBAR(m_toolbar), ctype, @@ -222,144 +226,237 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, (gpointer)tool ); - tool->m_item = item; + tool->m_item = item; - gtk_signal_connect( GTK_OBJECT(tool->m_item), - "enter_notify_event", - GTK_SIGNAL_FUNC(gtk_toolbar_enter_callback), - (gpointer)tool ); + gtk_signal_connect( GTK_OBJECT(tool->m_item), + "enter_notify_event", + GTK_SIGNAL_FUNC(gtk_toolbar_enter_callback), + (gpointer)tool ); - m_tools.Append( tool ); + m_tools.Append( tool ); - return tool; + return tool; } void wxToolBar::AddSeparator() { - gtk_toolbar_append_space( m_toolbar ); + gtk_toolbar_append_space( m_toolbar ); } void wxToolBar::ClearTools() { - wxFAIL_MSG( "wxToolBar::ClearTools not implemented" ); + wxFAIL_MSG( "wxToolBar::ClearTools not implemented" ); } -void wxToolBar::Realize() +bool wxToolBar::Realize() { - m_x = 0; - m_y = 0; - m_width = 100; - m_height = 0; + m_x = 0; + m_y = 0; + m_width = 100; + m_height = 0; - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_bitmap1.Ok()) + wxNode *node = m_tools.First(); + while (node) { - int tool_height = tool->m_bitmap1.GetHeight(); - if (tool_height > m_height) m_height = tool_height; - } + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_bitmap1.Ok()) + { + int tool_height = tool->m_bitmap1.GetHeight(); + if (tool_height > m_height) m_height = tool_height; + } - node = node->Next(); - } + node = node->Next(); + } - m_height += 12; + m_height += 5 + 2*m_yMargin; + + return TRUE; } void wxToolBar::EnableTool(int toolIndex, bool enable) { - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_index == toolIndex) - { - tool->m_enabled = enable; - return; + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + tool->m_enabled = enable; + return; + } + node = node->Next(); } - node = node->Next(); - } - wxFAIL_MSG( "wrong toolbar index" ); + wxFAIL_MSG( "wrong toolbar index" ); } void wxToolBar::ToggleTool( int toolIndex, bool toggle ) { - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_index == toolIndex) - { - tool->m_toggleState = toggle; - if ((tool->m_item) && (GTK_IS_TOGGLE_BUTTON(tool->m_item))) - gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(tool->m_item), toggle ); - return; + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + tool->m_toggleState = toggle; + if ((tool->m_item) && (GTK_IS_TOGGLE_BUTTON(tool->m_item))) + gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(tool->m_item), toggle ); + return; + } + node = node->Next(); } - node = node->Next(); - } - wxFAIL_MSG( "wrong toolbar index" ); + wxFAIL_MSG( "wrong toolbar index" ); } wxObject *wxToolBar::GetToolClientData( int index ) const { - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_index == index) return tool->m_clientData;; - node = node->Next(); - } + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == index) return tool->m_clientData;; + node = node->Next(); + } - wxFAIL_MSG( "wrong toolbar index" ); + wxFAIL_MSG( "wrong toolbar index" ); - return (wxObject*)NULL; + return (wxObject*)NULL; } bool wxToolBar::GetToolState(int toolIndex) const { - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_index == toolIndex) return tool->m_toggleState; - node = node->Next(); - } + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) return tool->m_toggleState; + node = node->Next(); + } - wxFAIL_MSG( "wrong toolbar index" ); + wxFAIL_MSG( "wrong toolbar index" ); - return FALSE; + return FALSE; } bool wxToolBar::GetToolEnabled(int toolIndex) const { - wxNode *node = m_tools.First(); - while (node) - { - wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (tool->m_index == toolIndex) return tool->m_enabled; - node = node->Next(); - } + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) return tool->m_enabled; + node = node->Next(); + } - wxFAIL_MSG( "wrong toolbar index" ); + wxFAIL_MSG( "wrong toolbar index" ); - return FALSE; + return FALSE; } -void wxToolBar::SetMargins( int WXUNUSED(x), int WXUNUSED(y) ) +void wxToolBar::SetMargins( int x, int y ) { -// wxFAIL_MSG( "wxToolBar::SetMargins not implemented" ); + wxCHECK_RET( !m_hasToolAlready, "wxToolBar::SetMargins must be called before adding tool." ); + + if (x > 2) gtk_toolbar_append_space( m_toolbar ); // oh well + + m_xMargin = x; + m_yMargin = y; } void wxToolBar::SetToolPacking( int WXUNUSED(packing) ) { - wxFAIL_MSG( "wxToolBar::SetToolPacking not implemented" ); + wxFAIL_MSG( "wxToolBar::SetToolPacking not implemented" ); } void wxToolBar::SetToolSeparation( int separation ) { - gtk_toolbar_set_space_size( m_toolbar, separation ); + gtk_toolbar_set_space_size( m_toolbar, separation ); + m_separation = separation; +} + +int wxToolBar::GetToolPacking() +{ + return 0; +} + +int wxToolBar::GetToolSeparation() +{ + return m_separation; +} + +wxString wxToolBar::GetToolLongHelp(int toolIndex) +{ + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + return tool->m_longHelpString; + } + node = node->Next(); + } + + wxFAIL_MSG( "wrong toolbar index" ); + + return ""; +} + +wxString wxToolBar::GetToolShortHelp(int toolIndex) +{ + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + return tool->m_shortHelpString; + } + node = node->Next(); + } + + wxFAIL_MSG( "wrong toolbar index" ); + + return ""; } +void wxToolBar::SetToolLongHelp(int toolIndex, const wxString& helpString) +{ + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + tool->m_longHelpString = helpString; + return; + } + node = node->Next(); + } + + wxFAIL_MSG( "wrong toolbar index" ); + + return; +} + +void wxToolBar::SetToolShortHelp(int toolIndex, const wxString& helpString) +{ + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + tool->m_shortHelpString = helpString; + return; + } + node = node->Next(); + } + + wxFAIL_MSG( "wrong toolbar index" ); + + return; +} + +