/
stattext.cpp
164 lines (131 loc) · 4.67 KB
/
stattext.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/////////////////////////////////////////////////////////////////////////////
// Name: src/gtk1/stattext.cpp
// Purpose:
// Author: Robert Roebling
// Id: $Id$
// Copyright: (c) 1998 Robert Roebling
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_STATTEXT
#include "wx/stattext.h"
#include "wx/gtk1/private.h"
#include "gdk/gdk.h"
#include "gtk/gtk.h"
extern "C"
void wxgtk_window_size_request_callback(GtkWidget *widget,
GtkRequisition *requisition,
wxWindow *win);
//-----------------------------------------------------------------------------
// wxStaticText
//-----------------------------------------------------------------------------
wxStaticText::wxStaticText()
{
}
wxStaticText::wxStaticText(wxWindow *parent,
wxWindowID id,
const wxString &label,
const wxPoint &pos,
const wxSize &size,
long style,
const wxString &name)
{
Create( parent, id, label, pos, size, style, name );
}
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;
}
m_label = label;
m_widget = gtk_label_new( wxGTK_CONV( GTKRemoveMnemonics(label)) );
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;
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);
return TRUE;
}
wxString wxStaticText::GetLabel() const
{
GtkLabel *label = GTK_LABEL(m_widget);
wxString str = wxString( label->label );
return wxString(str);
}
void wxStaticText::SetLabel( const wxString &label )
{
wxCHECK_RET( m_widget != NULL, wxT("invalid static text") );
GTKSetLabelForLabel(GTK_LABEL(m_widget), label);
// adjust the label size to the new label unless disabled
if (!HasFlag(wxST_NO_AUTORESIZE))
SetSize( GetBestSize() );
}
bool wxStaticText::SetFont( const wxFont &font )
{
bool ret = wxControl::SetFont(font);
// adjust the label size to the new label unless disabled
if (!HasFlag(wxST_NO_AUTORESIZE))
{
InvalidateBestSize();
SetSize( GetBestSize() );
}
return ret;
}
void wxStaticText::DoSetSize(int x, int y,
int width, int height,
int sizeFlags )
{
wxControl::DoSetSize( x, y, width, height, sizeFlags );
}
wxSize wxStaticText::DoGetBestSize() const
{
// Do not return any arbitrary default value...
wxASSERT_MSG( m_widget, wxT("wxStaticText::DoGetBestSize called before creation") );
// This resets the internal GTK1 size calculation, which
// otherwise would be cashed (incorrectly)
gtk_label_set_pattern( GTK_LABEL(m_widget), NULL );
// GetBestSize is supposed to return unwrapped size
gtk_label_set_line_wrap( GTK_LABEL(m_widget), FALSE );
GtkRequisition req;
req.width = -1;
req.height = -1;
(* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request )
(m_widget, &req );
gtk_label_set_line_wrap( GTK_LABEL(m_widget), TRUE );
return wxSize (req.width, req.height);
}
bool wxStaticText::SetForegroundColour(const wxColour& colour)
{
// First, we call the base class member
wxControl::SetForegroundColour(colour);
// Then, to force the color change, we set the label with the current label
SetLabel(GetLabel());
return true;
}
// static
wxVisualAttributes
wxStaticText::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
{
return GetDefaultAttributesFromGTKWidget(gtk_label_new);
}
#endif // wxUSE_STATTEXT