void wxButton::SetLabel( const wxString &lbl ) { wxCHECK_RET( m_widget != NULL, wxT("invalid button") ); wxString label(lbl); if (label.empty() && wxIsStockID(m_windowId)) label = wxGetStockLabel(m_windowId); wxControl::SetLabel(label); const wxString labelGTK = GTKConvertMnemonics(label); if (wxIsStockID(m_windowId) && wxIsStockLabel(m_windowId, label)) { const char *stock = wxGetStockGtkID(m_windowId); if (stock) { gtk_button_set_label(GTK_BUTTON(m_widget), stock); gtk_button_set_use_stock(GTK_BUTTON(m_widget), TRUE); return; } } gtk_button_set_label(GTK_BUTTON(m_widget), wxGTK_CONV(labelGTK)); gtk_button_set_use_stock(GTK_BUTTON(m_widget), FALSE); ApplyWidgetStyle( false ); }
void wxControl::GTKSetLabelForLabel(GtkLabel *w, const wxString& label) { // save the original label wxControlBase::SetLabel(label); const wxString labelGTK = GTKConvertMnemonics(label); gtk_label_set_text_with_mnemonic(w, wxGTK_CONV(labelGTK)); }
void wxStaticText::DoSetLabel(const wxString& str) { // this function looks like GTKSetLabelForLabel() but here we just want to modify // the GTK control without altering any internal wxStaticText variable const wxString labelGTK = GTKConvertMnemonics(str); gtk_label_set_text_with_mnemonic(GTK_LABEL(m_widget), wxGTK_CONV(labelGTK)); }
void wxCollapsiblePane::SetLabel(const wxString &str) { gtk_expander_set_label(GTK_EXPANDER(m_widget), wxGTK_CONV(GTKConvertMnemonics(str))); // FIXME: we need to update our collapsed width in some way but using GetBestSize() // we may get the size of the control with the pane size summed up if we are expanded! //m_szCollapsed.x = GetBestSize().x; }
void wxHyperlinkCtrl::SetLabel(const wxString &label) { if ( UseNative() ) { wxControl::SetLabel(label); const wxString labelGTK = GTKConvertMnemonics(label); gtk_button_set_label(GTK_BUTTON(m_widget), wxGTK_CONV(labelGTK)); } else wxGenericHyperlinkCtrl::SetLabel(label); }
GtkWidget* wxControl::GTKCreateFrame(const wxString& label) { const wxString labelGTK = GTKConvertMnemonics(label); GtkWidget* labelwidget = gtk_label_new_with_mnemonic(wxGTK_CONV(labelGTK)); gtk_widget_show(labelwidget); // without this it won't show... GtkWidget* framewidget = gtk_frame_new(NULL); gtk_frame_set_label_widget(GTK_FRAME(framewidget), labelwidget); return framewidget; // note that the label is already set so you'll // only need to call wxControl::SetLabel afterwards }
void wxToggleButton::SetLabel(const wxString& label) { wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button")); wxControl::SetLabel(label); const wxString labelGTK = GTKConvertMnemonics(label); gtk_button_set_label(GTK_BUTTON(m_widget), wxGTK_CONV(labelGTK)); GTKApplyWidgetStyle( false ); }
bool wxCollapsiblePane::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, const wxSize& size, long style, const wxValidator& val, const wxString& name) { if (gtk_check_version(2,4,0)) return wxGenericCollapsiblePane::Create(parent, id, label, pos, size, style, val, name); m_needParent = true; m_acceptsFocus = true; m_bIgnoreNextChange = false; if ( !PreCreation( parent, pos, size ) || !wxControl::CreateBase(parent, id, pos, size, style, val, name) ) { wxFAIL_MSG( wxT("wxCollapsiblePane creation failed") ); return false; } m_widget = gtk_expander_new_with_mnemonic(wxGTK_CONV(GTKConvertMnemonics(label))); // see the gtk_collapsiblepane_expanded_callback comments to understand why // we connect to the "notify::expanded" signal instead of the more common // "activate" one g_signal_connect(m_widget, "notify::expanded", G_CALLBACK(gtk_collapsiblepane_expanded_callback), this); // before creating m_pPane, we need to makesure our own insert callback // will be used m_insertCallback = gtk_collapsiblepane_insert_callback; // this the real "pane" m_pPane = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxNO_BORDER); gtk_widget_show( GTK_WIDGET(m_widget) ); m_parent->DoAddChild( this ); PostCreation(size); // remember the size of this control when it's collapsed m_szCollapsed = GetBestSize(); return true; }
bool wxCollapsiblePane::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, const wxSize& size, long style, const wxValidator& val, const wxString& name) { m_bIgnoreNextChange = false; if ( !PreCreation( parent, pos, size ) || !wxControl::CreateBase(parent, id, pos, size, style, val, name) ) { wxFAIL_MSG( wxT("wxCollapsiblePane creation failed") ); return false; } m_widget = gtk_expander_new_with_mnemonic(wxGTK_CONV(GTKConvertMnemonics(label))); g_object_ref(m_widget); g_signal_connect_after(m_widget, "notify::expanded", G_CALLBACK(gtk_collapsiblepane_expanded_callback), this); // this the real "pane" m_pPane = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxNO_BORDER, wxT("wxCollapsiblePanePane") ); gtk_widget_show(m_widget); m_parent->DoAddChild( this ); PostCreation(size); // remember the size of this control when it's collapsed GtkRequisition req; req.width = 2; req.height = 2; (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request ) (m_widget, &req ); m_szCollapsed = wxSize( req.width, req.height ); g_signal_connect (m_pPane->m_widget, "map_event", G_CALLBACK (gtk_collpane_map_unmap_callback), this); g_signal_connect (m_pPane->m_widget, "unmap_event", G_CALLBACK (gtk_collpane_map_unmap_callback), this); return true; }
bool wxCollapsiblePane::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, const wxSize& size, long style, const wxValidator& val, const wxString& name) { m_bIgnoreNextChange = false; if ( !PreCreation( parent, pos, size ) || !wxControl::CreateBase(parent, id, pos, size, style, val, name) ) { wxFAIL_MSG( wxT("wxCollapsiblePane creation failed") ); return false; } m_widget = gtk_expander_new_with_mnemonic(wxGTK_CONV(GTKConvertMnemonics(label))); g_object_ref(m_widget); // see the gtk_collapsiblepane_expanded_callback comments to understand why // we connect to the "notify::expanded" signal instead of the more common // "activate" one g_signal_connect(m_widget, "notify::expanded", G_CALLBACK(gtk_collapsiblepane_expanded_callback), this); // this the real "pane" m_pPane = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxNO_BORDER, wxS("wxCollapsiblePanePane")); gtk_widget_show(m_widget); m_parent->DoAddChild( this ); PostCreation(size); // we should blend into our parent background const wxColour bg = parent->GetBackgroundColour(); SetBackgroundColour(bg); m_pPane->SetBackgroundColour(bg); // remember the size of this control when it's collapsed m_szCollapsed = GetBestSize(); return true; }
GtkWidget *wxInfoBar::GTKAddButton(wxWindowID btnid, const wxString& label) { // as GTK+ lays out the buttons vertically, adding another button changes // our best size (at least in vertical direction) InvalidateBestSize(); GtkWidget *button = gtk_info_bar_add_button ( GTK_INFO_BAR(m_widget), (label.empty() ? GTKConvertMnemonics(wxGetStockGtkID(btnid)) : label).utf8_str(), btnid ); wxASSERT_MSG( button, "unexpectedly failed to add button to info bar" ); return button; }
void wxToggleButton::SetLabel(const wxString& label) { wxCHECK_RET(m_widget != NULL, wxT("invalid toggle button")); wxAnyButton::SetLabel(label); if ( HasFlag(wxBU_NOTEXT) ) { // Don't try to update the label for a button not showing it, this is // unnecessary and can also actually replace the image we show with the // label entirely breaking the button code, see #13693. return; } const wxString labelGTK = GTKConvertMnemonics(label); gtk_button_set_label(GTK_BUTTON(m_widget), wxGTK_CONV(labelGTK)); GTKApplyWidgetStyle( false ); }
void wxButton::SetLabel( const wxString &lbl ) { wxCHECK_RET( m_widget != NULL, wxT("invalid button") ); wxString label(lbl); if (label.empty() && wxIsStockID(m_windowId)) label = wxGetStockLabel(m_windowId); wxAnyButton::SetLabel(label); // don't use label if it was explicitly disabled if ( HasFlag(wxBU_NOTEXT) ) return; #if !defined(__WXGTK3__) || !GTK_CHECK_VERSION(3,10,0) if (wxIsStockID(m_windowId) && wxIsStockLabel(m_windowId, label)) { const char *stock = wxGetStockGtkID(m_windowId); if (stock) { gtk_button_set_label(GTK_BUTTON(m_widget), stock); gtk_button_set_use_stock(GTK_BUTTON(m_widget), TRUE); return; } } #endif // GTK < 3.10 // this call is necessary if the button had been initially created without // a (text) label -- then we didn't use gtk_button_new_with_mnemonic() and // so "use-underline" GtkButton property remained unset gtk_button_set_use_underline(GTK_BUTTON(m_widget), TRUE); const wxString labelGTK = GTKConvertMnemonics(label); gtk_button_set_label(GTK_BUTTON(m_widget), wxGTK_CONV(labelGTK)); #if !defined(__WXGTK3__) || !GTK_CHECK_VERSION(3,10,0) gtk_button_set_use_stock(GTK_BUTTON(m_widget), FALSE); #endif // GTK < 3.10 GTKApplyWidgetStyle( false ); }
/* static */ wxSize wxButtonBase::GetDefaultSize() { static wxSize size = wxDefaultSize; if (size == wxDefaultSize) { // NB: Default size of buttons should be same as size of stock // buttons as used in most GTK+ apps. Unfortunately it's a little // tricky to obtain this size: stock button's size may be smaller // than size of button in GtkButtonBox and vice versa, // GtkButtonBox's minimal button size may be smaller than stock // button's size. We have to retrieve both values and combine them. GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget *box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); #if defined(__WXGTK3__) && GTK_CHECK_VERSION(3,10,0) wxString labelGTK = GTKConvertMnemonics(wxGetStockLabel(wxID_CANCEL)); GtkWidget *btn = gtk_button_new_with_mnemonic(labelGTK.utf8_str()); #else GtkWidget *btn = gtk_button_new_from_stock(GTK_STOCK_CANCEL); #endif // GTK >= 3.10 / < 3.10 gtk_container_add(GTK_CONTAINER(box), btn); gtk_container_add(GTK_CONTAINER(wnd), box); GtkRequisition req; gtk_widget_get_preferred_size(btn, NULL, &req); gint minwidth, minheight; gtk_widget_style_get(box, "child-min-width", &minwidth, "child-min-height", &minheight, NULL); size.x = wxMax(minwidth, req.width); size.y = wxMax(minheight, req.height); gtk_widget_destroy(wnd); } return size; }
void wxControl::GTKSetLabelForLabel(GtkLabel *w, const wxString& label) { const wxString labelGTK = GTKConvertMnemonics(label); gtk_label_set_text_with_mnemonic(w, wxGTK_CONV(labelGTK)); }
bool wxStaticText::Create(wxWindow *parent, wxWindowID id, const wxString &label, const wxPoint &pos, const wxSize &size, long style, const wxString &name ) { m_needParent = TRUE; if (!PreCreation( parent, pos, size ) || !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name )) { wxFAIL_MSG( wxT("wxStaticText creation failed") ); return FALSE; } const wxString labelGTK = GTKConvertMnemonics(label); m_label = label; m_widget = gtk_label_new_with_mnemonic(wxGTK_CONV(labelGTK)); 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; if (GetLayoutDirection() == wxLayout_RightToLeft) { if (justify == GTK_JUSTIFY_RIGHT) justify = GTK_JUSTIFY_LEFT; if (justify == GTK_JUSTIFY_LEFT) justify = GTK_JUSTIFY_RIGHT; } gtk_label_set_justify(GTK_LABEL(m_widget), justify); // GTK_JUSTIFY_LEFT is 0, RIGHT 1 and CENTER 2 static const float labelAlignments[] = { 0.0, 1.0, 0.5 }; gtk_misc_set_alignment(GTK_MISC(m_widget), labelAlignments[justify], 0.0); gtk_label_set_line_wrap( GTK_LABEL(m_widget), TRUE ); m_parent->DoAddChild( this ); PostCreation(size); // the bug below only happens with GTK 2 if ( justify != GTK_JUSTIFY_LEFT ) { // if we let GTK call wxgtk_window_size_request_callback the label // always shrinks to its minimal size for some reason and so no // alignment except the default left doesn't work (in fact it does, // but you don't see it) g_signal_handlers_disconnect_by_func (m_widget, (gpointer) wxgtk_window_size_request_callback, this); } return TRUE; }