1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/gtk/control.h
3 // Purpose:
4 // Author:      Robert Roebling
5 // Copyright:   (c) 1998 Robert Roebling, Julian Smart
6 // Licence:     wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
8 
9 #ifndef _WX_GTK_CONTROL_H_
10 #define _WX_GTK_CONTROL_H_
11 
12 typedef struct _GtkLabel GtkLabel;
13 typedef struct _GtkFrame GtkFrame;
14 typedef struct _GtkEntry GtkEntry;
15 
16 //-----------------------------------------------------------------------------
17 // wxControl
18 //-----------------------------------------------------------------------------
19 
20 class WXDLLIMPEXP_CORE wxControl : public wxControlBase
21 {
22     typedef wxControlBase base_type;
23 public:
24     wxControl();
25     wxControl(wxWindow *parent, wxWindowID id,
26              const wxPoint& pos = wxDefaultPosition,
27              const wxSize& size = wxDefaultSize, long style = 0,
28              const wxValidator& validator = wxDefaultValidator,
29              const wxString& name = wxASCII_STR(wxControlNameStr))
30     {
31         Create(parent, id, pos, size, style, validator, name);
32     }
33 
34     bool Create(wxWindow *parent, wxWindowID id,
35             const wxPoint& pos = wxDefaultPosition,
36             const wxSize& size = wxDefaultSize, long style = 0,
37             const wxValidator& validator = wxDefaultValidator,
38             const wxString& name = wxASCII_STR(wxControlNameStr));
39 
40     virtual wxVisualAttributes GetDefaultAttributes() const wxOVERRIDE;
41 #ifdef __WXGTK3__
42     virtual bool SetFont(const wxFont& font) wxOVERRIDE;
43 #endif
44 
45 protected:
46     virtual wxSize DoGetBestSize() const wxOVERRIDE;
47     void PostCreation(const wxSize& size);
48 
49     // sets the label to the given string and also sets it for the given widget
50     void GTKSetLabelForLabel(GtkLabel *w, const wxString& label);
51 #if wxUSE_MARKUP
52     void GTKSetLabelWithMarkupForLabel(GtkLabel *w, const wxString& label);
53 #endif // wxUSE_MARKUP
54 
55     // GtkFrame helpers
56     GtkWidget* GTKCreateFrame(const wxString& label);
57     void GTKSetLabelForFrame(GtkFrame *w, const wxString& label);
58     void GTKFrameApplyWidgetStyle(GtkFrame* w, GtkRcStyle* rc);
59     void GTKFrameSetMnemonicWidget(GtkFrame* w, GtkWidget* widget);
60 
61     // remove mnemonics ("&"s) from the label
62     static wxString GTKRemoveMnemonics(const wxString& label);
63 
64     // converts wx label to GTK+ label, i.e. basically replace "&"s with "_"s
65     static wxString GTKConvertMnemonics(const wxString &label);
66 
67     // converts wx label to GTK+ labels preserving Pango markup
68     static wxString GTKConvertMnemonicsWithMarkup(const wxString& label);
69 
70     // These are used by GetDefaultAttributes
71     static wxVisualAttributes
72         GetDefaultAttributesFromGTKWidget(GtkWidget* widget,
73                                           bool useBase = false,
74                                           int state = 0);
75 
76     // Widgets that use the style->base colour for the BG colour should
77     // override this and return true.
UseGTKStyleBase()78     virtual bool UseGTKStyleBase() const { return false; }
79 
80     // Fix sensitivity due to bug in GTK+ < 2.14
81     void GTKFixSensitivity(bool onlyIfUnderMouse = true);
82 
83     // Ask GTK+ for preferred size. Use it after setting the font.
84     wxSize GTKGetPreferredSize(GtkWidget* widget) const;
85 
86     // Inner margins in a GtkEntry
87     wxSize GTKGetEntryMargins(GtkEntry* entry) const;
88 
89 private:
90     wxDECLARE_DYNAMIC_CLASS(wxControl);
91 };
92 
93 #endif // _WX_GTK_CONTROL_H_
94