Better disabling of toolbars and menubars
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1397 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -56,8 +56,8 @@ public:
|
|||||||
bool Checked( int id ) const;
|
bool Checked( int id ) const;
|
||||||
void Enable( int id, bool enable );
|
void Enable( int id, bool enable );
|
||||||
bool Enabled( int id ) const;
|
bool Enabled( int id ) const;
|
||||||
inline bool IsEnabled(int Id) const { return Enabled(Id); };
|
inline bool IsEnabled(int Id) const { return Enabled(Id); }
|
||||||
inline bool IsChecked(int Id) const { return Checked(Id); };
|
inline bool IsChecked(int Id) const { return Checked(Id); }
|
||||||
|
|
||||||
wxString GetLabel( int id ) const;
|
wxString GetLabel( int id ) const;
|
||||||
void SetLabel( int id, const wxString &label );
|
void SetLabel( int id, const wxString &label );
|
||||||
@@ -140,6 +140,7 @@ public:
|
|||||||
void *m_clientData;
|
void *m_clientData;
|
||||||
|
|
||||||
GtkWidget *m_menu; // GtkMenu
|
GtkWidget *m_menu; // GtkMenu
|
||||||
|
GtkWidget *m_owner;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __GTKMENUH__
|
#endif // __GTKMENUH__
|
||||||
|
@@ -56,8 +56,8 @@ public:
|
|||||||
bool Checked( int id ) const;
|
bool Checked( int id ) const;
|
||||||
void Enable( int id, bool enable );
|
void Enable( int id, bool enable );
|
||||||
bool Enabled( int id ) const;
|
bool Enabled( int id ) const;
|
||||||
inline bool IsEnabled(int Id) const { return Enabled(Id); };
|
inline bool IsEnabled(int Id) const { return Enabled(Id); }
|
||||||
inline bool IsChecked(int Id) const { return Checked(Id); };
|
inline bool IsChecked(int Id) const { return Checked(Id); }
|
||||||
|
|
||||||
wxString GetLabel( int id ) const;
|
wxString GetLabel( int id ) const;
|
||||||
void SetLabel( int id, const wxString &label );
|
void SetLabel( int id, const wxString &label );
|
||||||
@@ -140,6 +140,7 @@ public:
|
|||||||
void *m_clientData;
|
void *m_clientData;
|
||||||
|
|
||||||
GtkWidget *m_menu; // GtkMenu
|
GtkWidget *m_menu; // GtkMenu
|
||||||
|
GtkWidget *m_owner;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __GTKMENUH__
|
#endif // __GTKMENUH__
|
||||||
|
@@ -120,6 +120,8 @@ bool MyApp::InitToolbar(wxToolBar* toolBar)
|
|||||||
|
|
||||||
toolBar->Realize();
|
toolBar->Realize();
|
||||||
|
|
||||||
|
toolBar->EnableTool( wxID_HELP, FALSE );
|
||||||
|
|
||||||
// Can delete the bitmaps since they're reference counted
|
// Can delete the bitmaps since they're reference counted
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
|
@@ -491,11 +491,11 @@ bool wxPNGHandler::LoadFile( wxImage *image, wxInputStream& stream )
|
|||||||
{
|
{
|
||||||
// VZ: as this function uses setjmp() the only fool proof error handling
|
// VZ: as this function uses setjmp() the only fool proof error handling
|
||||||
// method is to use goto (setjmp is not really C++ dtors friendly...)
|
// method is to use goto (setjmp is not really C++ dtors friendly...)
|
||||||
image->Destroy();
|
|
||||||
|
|
||||||
unsigned int i;
|
unsigned char **lines = (unsigned char **) NULL;
|
||||||
unsigned char **lines = NULL;
|
png_infop info_ptr = (png_infop) NULL;
|
||||||
png_infop info_ptr = NULL;
|
|
||||||
|
image->Destroy();
|
||||||
|
|
||||||
png_structp png_ptr = png_create_read_struct( PNG_LIBPNG_VER_STRING,
|
png_structp png_ptr = png_create_read_struct( PNG_LIBPNG_VER_STRING,
|
||||||
(voidp) NULL,
|
(voidp) NULL,
|
||||||
@@ -540,7 +540,7 @@ bool wxPNGHandler::LoadFile( wxImage *image, wxInputStream& stream )
|
|||||||
if (lines == NULL)
|
if (lines == NULL)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
for (i = 0; i < height; i++)
|
for (unsigned int i = 0; i < height; i++)
|
||||||
{
|
{
|
||||||
if ((lines[i] = (unsigned char *)malloc(width * (sizeof(unsigned char) * 4))) == NULL)
|
if ((lines[i] = (unsigned char *)malloc(width * (sizeof(unsigned char) * 4))) == NULL)
|
||||||
{
|
{
|
||||||
|
@@ -55,12 +55,11 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
|||||||
if (pos != -1) menu->m_title.Remove( pos, 1 );
|
if (pos != -1) menu->m_title.Remove( pos, 1 );
|
||||||
} while (pos != -1);
|
} while (pos != -1);
|
||||||
|
|
||||||
GtkWidget *root_menu;
|
menu->m_owner = gtk_menu_item_new_with_label( WXSTRINGCAST(menu->m_title) );
|
||||||
root_menu = gtk_menu_item_new_with_label( WXSTRINGCAST(menu->m_title) );
|
gtk_widget_show( menu->m_owner );
|
||||||
gtk_widget_show( root_menu );
|
gtk_menu_item_set_submenu( GTK_MENU_ITEM(menu->m_owner), menu->m_menu );
|
||||||
gtk_menu_item_set_submenu( GTK_MENU_ITEM(root_menu), menu->m_menu );
|
|
||||||
|
|
||||||
gtk_menu_bar_append( GTK_MENU_BAR(m_menubar), root_menu );
|
gtk_menu_bar_append( GTK_MENU_BAR(m_menubar), menu->m_owner );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
|
static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
|
||||||
@@ -77,6 +76,7 @@ static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString
|
|||||||
wxMenuItem *item = (wxMenuItem*)node->Data();
|
wxMenuItem *item = (wxMenuItem*)node->Data();
|
||||||
if (item->IsSubMenu())
|
if (item->IsSubMenu())
|
||||||
return FindMenuItemRecursive(item->GetSubMenu(), menuString, itemString);
|
return FindMenuItemRecursive(item->GetSubMenu(), menuString, itemString);
|
||||||
|
|
||||||
node = node->Next();
|
node = node->Next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,27 +158,50 @@ bool wxMenuBar::Enabled( int id ) const
|
|||||||
wxString wxMenuBar::GetLabel( int id ) const
|
wxString wxMenuBar::GetLabel( int id ) const
|
||||||
{
|
{
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
wxMenuItem* item = FindMenuItemById( id );
|
||||||
|
|
||||||
if (item) return item->GetText();
|
if (item) return item->GetText();
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::SetLabel( int id, const wxString &label )
|
void wxMenuBar::SetLabel( int id, const wxString &label )
|
||||||
{
|
{
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
wxMenuItem* item = FindMenuItemById( id );
|
||||||
|
|
||||||
if (item) return item->SetText( label );
|
if (item) return item->SetText( label );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::EnableTop( int WXUNUSED(pos), bool WXUNUSED(flag) )
|
void wxMenuBar::EnableTop( int pos, bool flag )
|
||||||
{
|
{
|
||||||
|
wxNode *node = m_menus.Nth( pos );
|
||||||
|
|
||||||
|
wxCHECK_RET( node, "menu not found" );
|
||||||
|
|
||||||
|
wxMenu* menu = (wxMenu*)node->Data();
|
||||||
|
|
||||||
|
if (menu->m_owner) gtk_widget_set_sensitive( menu->m_owner, flag );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString wxMenuBar::GetLabelTop( int WXUNUSED(pos) ) const
|
wxString wxMenuBar::GetLabelTop( int pos ) const
|
||||||
{
|
{
|
||||||
return "menu";
|
wxNode *node = m_menus.Nth( pos );
|
||||||
|
|
||||||
|
wxCHECK_MSG( node, "invalid", "menu not found" );
|
||||||
|
|
||||||
|
wxMenu* menu = (wxMenu*)node->Data();
|
||||||
|
|
||||||
|
return menu->GetTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::SetLabelTop( int WXUNUSED(pos), const wxString& WXUNUSED(label) )
|
void wxMenuBar::SetLabelTop( int pos, const wxString& label )
|
||||||
{
|
{
|
||||||
|
wxNode *node = m_menus.Nth( pos );
|
||||||
|
|
||||||
|
wxCHECK_RET( node, "menu not found" );
|
||||||
|
|
||||||
|
wxMenu* menu = (wxMenu*)node->Data();
|
||||||
|
|
||||||
|
menu->SetTitle( label );
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -345,6 +368,8 @@ wxMenu::wxMenu( const wxString& title, const wxFunction func )
|
|||||||
Append(-2, m_title);
|
Append(-2, m_title);
|
||||||
AppendSeparator();
|
AppendSeparator();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_owner = (GtkWidget*) NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenu::SetTitle( const wxString& title )
|
void wxMenu::SetTitle( const wxString& title )
|
||||||
|
@@ -196,10 +196,6 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
|
|||||||
wxCHECK_MSG( bitmap.Ok(), (wxToolBarTool *)NULL,
|
wxCHECK_MSG( bitmap.Ok(), (wxToolBarTool *)NULL,
|
||||||
"invalid bitmap for wxToolBar icon" );
|
"invalid bitmap for wxToolBar icon" );
|
||||||
|
|
||||||
wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap,
|
|
||||||
toggle, clientData,
|
|
||||||
helpString1, helpString2 );
|
|
||||||
|
|
||||||
wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL,
|
wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL,
|
||||||
"wxToolBar doesn't support GdkBitmap" );
|
"wxToolBar doesn't support GdkBitmap" );
|
||||||
|
|
||||||
@@ -218,6 +214,11 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
|
|||||||
|
|
||||||
gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
|
gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
|
||||||
|
|
||||||
|
wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap,
|
||||||
|
toggle, clientData,
|
||||||
|
helpString1, helpString2,
|
||||||
|
tool_pixmap );
|
||||||
|
|
||||||
GtkToolbarChildType ctype = toggle ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON
|
GtkToolbarChildType ctype = toggle ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON
|
||||||
: GTK_TOOLBAR_CHILD_BUTTON;
|
: GTK_TOOLBAR_CHILD_BUTTON;
|
||||||
|
|
||||||
@@ -290,6 +291,10 @@ void wxToolBar::EnableTool(int toolIndex, bool enable)
|
|||||||
if (tool->m_index == toolIndex)
|
if (tool->m_index == toolIndex)
|
||||||
{
|
{
|
||||||
tool->m_enabled = enable;
|
tool->m_enabled = enable;
|
||||||
|
|
||||||
|
if (tool->m_item)
|
||||||
|
gtk_widget_set_sensitive( tool->m_item, enable );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
node = node->Next();
|
node = node->Next();
|
||||||
|
@@ -55,12 +55,11 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
|||||||
if (pos != -1) menu->m_title.Remove( pos, 1 );
|
if (pos != -1) menu->m_title.Remove( pos, 1 );
|
||||||
} while (pos != -1);
|
} while (pos != -1);
|
||||||
|
|
||||||
GtkWidget *root_menu;
|
menu->m_owner = gtk_menu_item_new_with_label( WXSTRINGCAST(menu->m_title) );
|
||||||
root_menu = gtk_menu_item_new_with_label( WXSTRINGCAST(menu->m_title) );
|
gtk_widget_show( menu->m_owner );
|
||||||
gtk_widget_show( root_menu );
|
gtk_menu_item_set_submenu( GTK_MENU_ITEM(menu->m_owner), menu->m_menu );
|
||||||
gtk_menu_item_set_submenu( GTK_MENU_ITEM(root_menu), menu->m_menu );
|
|
||||||
|
|
||||||
gtk_menu_bar_append( GTK_MENU_BAR(m_menubar), root_menu );
|
gtk_menu_bar_append( GTK_MENU_BAR(m_menubar), menu->m_owner );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
|
static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
|
||||||
@@ -77,6 +76,7 @@ static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString
|
|||||||
wxMenuItem *item = (wxMenuItem*)node->Data();
|
wxMenuItem *item = (wxMenuItem*)node->Data();
|
||||||
if (item->IsSubMenu())
|
if (item->IsSubMenu())
|
||||||
return FindMenuItemRecursive(item->GetSubMenu(), menuString, itemString);
|
return FindMenuItemRecursive(item->GetSubMenu(), menuString, itemString);
|
||||||
|
|
||||||
node = node->Next();
|
node = node->Next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,27 +158,50 @@ bool wxMenuBar::Enabled( int id ) const
|
|||||||
wxString wxMenuBar::GetLabel( int id ) const
|
wxString wxMenuBar::GetLabel( int id ) const
|
||||||
{
|
{
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
wxMenuItem* item = FindMenuItemById( id );
|
||||||
|
|
||||||
if (item) return item->GetText();
|
if (item) return item->GetText();
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::SetLabel( int id, const wxString &label )
|
void wxMenuBar::SetLabel( int id, const wxString &label )
|
||||||
{
|
{
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
wxMenuItem* item = FindMenuItemById( id );
|
||||||
|
|
||||||
if (item) return item->SetText( label );
|
if (item) return item->SetText( label );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::EnableTop( int WXUNUSED(pos), bool WXUNUSED(flag) )
|
void wxMenuBar::EnableTop( int pos, bool flag )
|
||||||
{
|
{
|
||||||
|
wxNode *node = m_menus.Nth( pos );
|
||||||
|
|
||||||
|
wxCHECK_RET( node, "menu not found" );
|
||||||
|
|
||||||
|
wxMenu* menu = (wxMenu*)node->Data();
|
||||||
|
|
||||||
|
if (menu->m_owner) gtk_widget_set_sensitive( menu->m_owner, flag );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString wxMenuBar::GetLabelTop( int WXUNUSED(pos) ) const
|
wxString wxMenuBar::GetLabelTop( int pos ) const
|
||||||
{
|
{
|
||||||
return "menu";
|
wxNode *node = m_menus.Nth( pos );
|
||||||
|
|
||||||
|
wxCHECK_MSG( node, "invalid", "menu not found" );
|
||||||
|
|
||||||
|
wxMenu* menu = (wxMenu*)node->Data();
|
||||||
|
|
||||||
|
return menu->GetTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::SetLabelTop( int WXUNUSED(pos), const wxString& WXUNUSED(label) )
|
void wxMenuBar::SetLabelTop( int pos, const wxString& label )
|
||||||
{
|
{
|
||||||
|
wxNode *node = m_menus.Nth( pos );
|
||||||
|
|
||||||
|
wxCHECK_RET( node, "menu not found" );
|
||||||
|
|
||||||
|
wxMenu* menu = (wxMenu*)node->Data();
|
||||||
|
|
||||||
|
menu->SetTitle( label );
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -345,6 +368,8 @@ wxMenu::wxMenu( const wxString& title, const wxFunction func )
|
|||||||
Append(-2, m_title);
|
Append(-2, m_title);
|
||||||
AppendSeparator();
|
AppendSeparator();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_owner = (GtkWidget*) NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenu::SetTitle( const wxString& title )
|
void wxMenu::SetTitle( const wxString& title )
|
||||||
|
@@ -196,10 +196,6 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
|
|||||||
wxCHECK_MSG( bitmap.Ok(), (wxToolBarTool *)NULL,
|
wxCHECK_MSG( bitmap.Ok(), (wxToolBarTool *)NULL,
|
||||||
"invalid bitmap for wxToolBar icon" );
|
"invalid bitmap for wxToolBar icon" );
|
||||||
|
|
||||||
wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap,
|
|
||||||
toggle, clientData,
|
|
||||||
helpString1, helpString2 );
|
|
||||||
|
|
||||||
wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL,
|
wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL,
|
||||||
"wxToolBar doesn't support GdkBitmap" );
|
"wxToolBar doesn't support GdkBitmap" );
|
||||||
|
|
||||||
@@ -218,6 +214,11 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap,
|
|||||||
|
|
||||||
gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
|
gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
|
||||||
|
|
||||||
|
wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap,
|
||||||
|
toggle, clientData,
|
||||||
|
helpString1, helpString2,
|
||||||
|
tool_pixmap );
|
||||||
|
|
||||||
GtkToolbarChildType ctype = toggle ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON
|
GtkToolbarChildType ctype = toggle ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON
|
||||||
: GTK_TOOLBAR_CHILD_BUTTON;
|
: GTK_TOOLBAR_CHILD_BUTTON;
|
||||||
|
|
||||||
@@ -290,6 +291,10 @@ void wxToolBar::EnableTool(int toolIndex, bool enable)
|
|||||||
if (tool->m_index == toolIndex)
|
if (tool->m_index == toolIndex)
|
||||||
{
|
{
|
||||||
tool->m_enabled = enable;
|
tool->m_enabled = enable;
|
||||||
|
|
||||||
|
if (tool->m_item)
|
||||||
|
gtk_widget_set_sensitive( tool->m_item, enable );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
node = node->Next();
|
node = node->Next();
|
||||||
|
Reference in New Issue
Block a user