X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b2ff89d648e5b73172dc2f4aa84d2aadbdc063ec..677dc0ed1a3ff68af15f6246d6d0708d5264b07a:/src/gtk1/control.cpp diff --git a/src/gtk1/control.cpp b/src/gtk1/control.cpp index 735fdd924f..4e0db419e6 100644 --- a/src/gtk1/control.cpp +++ b/src/gtk1/control.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: control.cpp -// Purpose: +// Name: src/gtk1/control.cpp +// Purpose: wxControl implementation for wxGTK // Author: Robert Roebling // Id: $Id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Vadim Zeitlin @@ -10,24 +10,31 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#include "wx/defs.h" - #if wxUSE_CONTROLS #include "wx/control.h" + +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/settings.h" +#endif + #include "wx/fontutil.h" -#include "wx/settings.h" -#include "wx/gtk/private.h" +#include "wx/gtk1/private.h" -//----------------------------------------------------------------------------- -// wxControl -//----------------------------------------------------------------------------- +// ============================================================================ +// wxControl implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// wxControl creation +// ---------------------------------------------------------------------------- IMPLEMENT_DYNAMIC_CLASS(wxControl, wxWindow) wxControl::wxControl() { - m_needParent = TRUE; + m_needParent = true; } bool wxControl::Create( wxWindow *parent, @@ -76,7 +83,7 @@ void wxControl::PostCreation(const wxSize& size) gtk_widget_ensure_style(m_widget); ApplyWidgetStyle(); - SetInitialBestSize(size); + SetInitialSize(size); } // ---------------------------------------------------------------------------- @@ -102,38 +109,23 @@ void wxControl::GTKSetLabelForLabel(GtkLabel *w, const wxString& label) // don't call the virtual function which might call this one back again wxControl::SetLabel(label); - const wxString labelGTK = GTKConvertMnemonics(label); + const wxString labelGTK = GTKRemoveMnemonics(label); -#ifdef __WXGTK20__ - gtk_label_set_text_with_mnemonic(w, wxGTK_CONV(labelGTK)); -#else gtk_label_set(w, wxGTK_CONV(labelGTK)); -#endif } void wxControl::GTKSetLabelForFrame(GtkFrame *w, const wxString& label) { wxControl::SetLabel(label); - // frames don't support mnemonics even under GTK+ 2 const wxString labelGTK = GTKRemoveMnemonics(label); - gtk_frame_set_label(w, labelGTK.empty() ? (char *)NULL + gtk_frame_set_label(w, labelGTK.empty() ? (const char *)NULL : wxGTK_CONV(labelGTK)); } -// worker function implementing both GTKConvert/RemoveMnemonics() -// -// notice that under GTK+ 1 we only really need to support MNEMONICS_REMOVE as -// it doesn't support mnemonics anyhow but this would make the code so ugly -// that we do the same thing for GKT+ 1 and 2 -enum MnemonicsFlag -{ - MNEMONICS_REMOVE, - MNEMONICS_CONVERT -}; - -static wxString GTKProcessMnemonics(const wxString& label, MnemonicsFlag flag) +/* static */ +wxString wxControl::GTKRemoveMnemonics(const wxString& label) { const size_t len = label.length(); wxString labelGTK; @@ -142,72 +134,31 @@ static wxString GTKProcessMnemonics(const wxString& label, MnemonicsFlag flag) { wxChar ch = label[i]; - switch ( ch ) + if ( ch == _T('&') ) { - case wxT('&'): - if ( i == len - 1 ) - { - // "&" at the end of string is an error - wxLogDebug(wxT("Invalid label \"%s\"."), label.c_str()); - break; - } - - ch = label[++i]; // skip '&' itself - switch ( ch ) - { - case wxT('&'): - // special case: "&&" is not a mnemonic at all but just - // an escaped "&" - labelGTK += wxT('&'); - break; - - case wxT('_'): - if ( flag == MNEMONICS_CONVERT ) - { - // '_' can't be a GTK mnemonic apparently so - // replace it with something similar - labelGTK += wxT("_-"); - break; - } - //else: fall through - - default: - if ( flag == MNEMONICS_CONVERT ) - labelGTK += wxT('_'); - labelGTK += ch; - } + if ( i == len - 1 ) + { + // "&" at the end of string is an error + wxLogDebug(wxT("Invalid label \"%s\"."), label.c_str()); break; - - case wxT('_'): - if ( flag == MNEMONICS_CONVERT ) - { - // escape any existing underlines in the string so that - // they don't become mnemonics accidentally - labelGTK += wxT("__"); - break; - } - //else: fall through - - default: - labelGTK += ch; + } + + ch = label[++i]; // skip '&' itself + if ( ch == _T('&') ) + { + // special case: "&&" is not a mnemonic at all but just an + // escaped "&" + labelGTK += wxT('&'); + continue; + } } + + labelGTK += ch; } return labelGTK; } -/* static */ -wxString wxControl::GTKRemoveMnemonics(const wxString& label) -{ - return GTKProcessMnemonics(label, MNEMONICS_REMOVE); -} - -/* static */ -wxString wxControl::GTKConvertMnemonics(const wxString& label) -{ - return GTKProcessMnemonics(label, MNEMONICS_CONVERT); -} - // ---------------------------------------------------------------------------- // wxControl styles (a.k.a. attributes) // ---------------------------------------------------------------------------- @@ -256,33 +207,8 @@ wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* widget, style->bg[state].blue >> SHIFT); // get the style's font -#ifdef __WXGTK20__ - if ( !style->font_desc ) - style = gtk_widget_get_default_style(); - if ( style && style->font_desc ) - { - wxNativeFontInfo info; - info.description = pango_font_description_copy(style->font_desc); - attr.font = wxFont(info); - } - else - { - GtkSettings *settings = gtk_settings_get_default(); - gchar *font_name = NULL; - g_object_get ( settings, - "gtk-font-name", - &font_name, - NULL); - if (!font_name) - attr.font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ); - else - attr.font = wxFont(wxString::FromAscii(font_name)); - g_free (font_name); - } -#else // TODO: isn't there a way to get a standard gtk 1.2 font? attr.font = wxFont( 12, wxSWISS, wxNORMAL, wxNORMAL ); -#endif return attr; } @@ -338,4 +264,3 @@ wxControl::GetDefaultAttributesFromGTKWidget(wxGtkWidgetNewFromAdj_t widget_new, } #endif // wxUSE_CONTROLS -