]> git.saurik.com Git - wxWidgets.git/blame - src/motif/statbox.cpp
use GetFont() instead of (possibly not initialized) m_font in GetCharWidth/Height()
[wxWidgets.git] / src / motif / statbox.cpp
CommitLineData
4bb6408c
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: statbox.cpp
3// Purpose: wxStaticBox
4// Author: Julian Smart
5// Modified by:
6// Created: 17/09/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart
31528cd3 9// Licence: wxWindows licence
4bb6408c
JS
10/////////////////////////////////////////////////////////////////////////////
11
14f355c2 12#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
4bb6408c
JS
13#pragma implementation "statbox.h"
14#endif
15
bcd055ae
JJ
16#ifdef __VMS
17#define XtDisplay XTDISPLAY
18#endif
19
f6045f99
GD
20#include "wx/defs.h"
21
4bb6408c 22#include "wx/statbox.h"
47bc1060
JS
23#include "wx/utils.h"
24
338dd992
JJ
25#ifdef __VMS__
26#pragma message disable nosimpint
27#endif
47bc1060 28#include <Xm/Frame.h>
47bc1060 29#include <Xm/Label.h>
338dd992
JJ
30#ifdef __VMS__
31#pragma message enable nosimpint
32#endif
47bc1060 33
3096bd2f 34#include "wx/motif/private.h"
4bb6408c 35
4bb6408c
JS
36IMPLEMENT_DYNAMIC_CLASS(wxStaticBox, wxControl)
37
38BEGIN_EVENT_TABLE(wxStaticBox, wxControl)
31528cd3 39//EVT_ERASE_BACKGROUND(wxStaticBox::OnEraseBackground)
4bb6408c
JS
40END_EVENT_TABLE()
41
483561c5
MB
42// ----------------------------------------------------------------------------
43// wxXmSizeKeeper
44// ----------------------------------------------------------------------------
45
46// helper class to reduce code duplication
47class wxXmSizeKeeper
48{
49 Dimension m_x, m_y;
50 Widget m_widget;
51public:
52 wxXmSizeKeeper( Widget w )
53 : m_widget( w )
54 {
55 XtVaGetValues( m_widget,
56 XmNwidth, &m_x,
57 XmNheight, &m_y,
58 NULL );
59 }
60
61 void Restore()
62 {
63 int x, y;
64
65 XtVaGetValues( m_widget,
66 XmNwidth, &x,
67 XmNheight, &y,
68 NULL );
69 if( x != m_x || y != m_y )
70 XtVaSetValues( m_widget,
71 XmNwidth, m_x,
72 XmNheight, m_y,
73 NULL );
74 }
75};
4bb6408c
JS
76
77/*
78 * Static box
79 */
31528cd3 80
47bc1060
JS
81wxStaticBox::wxStaticBox()
82{
47bc1060
JS
83 m_labelWidget = (WXWidget) 0;
84}
85
4bb6408c
JS
86bool wxStaticBox::Create(wxWindow *parent, wxWindowID id,
87 const wxString& label,
88 const wxPoint& pos,
89 const wxSize& size,
90 long style,
91 const wxString& name)
92{
483561c5
MB
93 if( !CreateControl( parent, id, pos, size, style,
94 wxDefaultValidator, name ) )
95 return false;
4bb6408c 96
47bc1060
JS
97 Widget parentWidget = (Widget) parent->GetClientWidget();
98
2b5f62a0
VZ
99 m_mainWidget = XtVaCreateManagedWidget ("staticboxframe",
100 xmFrameWidgetClass, parentWidget,
483561c5
MB
101 // MBN: why override default?
102 // XmNshadowType, XmSHADOW_IN,
31528cd3 103 NULL);
47bc1060 104
2b5f62a0 105 bool hasLabel = (!label.IsNull() && !label.IsEmpty()) ;
47bc1060
JS
106 if (hasLabel)
107 {
da494b40 108 WXFontType fontType = m_font.GetFontType( XtDisplay( parentWidget ) );
47bc1060 109 wxString label1(wxStripMenuCodes(label));
2b5f62a0 110 wxXmString text(label1);
483561c5
MB
111
112 m_labelWidget = (WXWidget) XtVaCreateManagedWidget ("staticboxlabel",
2b5f62a0 113 xmLabelWidgetClass, (Widget)m_mainWidget,
da494b40 114 wxFont::GetFontTag(), fontType,
2b5f62a0 115 XmNlabelString, text(),
483561c5 116#if wxCHECK_MOTIF_VERSION( 2, 0 )
2b5f62a0
VZ
117 XmNframeChildType, XmFRAME_TITLE_CHILD,
118#else
119 XmNchildType, XmFRAME_TITLE_CHILD,
120#endif
31528cd3 121 NULL);
47bc1060 122 }
2b5f62a0 123
2b5f62a0 124 AttachWidget (parent, m_mainWidget, NULL, pos.x, pos.y, size.x, size.y);
0d57be45 125 ChangeBackgroundColour();
47bc1060
JS
126
127 return TRUE;
4bb6408c
JS
128}
129
b412f9be
JS
130wxStaticBox::~wxStaticBox()
131{
15d5ab67
JS
132 DetachWidget(m_mainWidget);
133 XtDestroyWidget((Widget) m_mainWidget);
15d5ab67
JS
134
135 m_mainWidget = (WXWidget) 0;
136 m_labelWidget = (WXWidget) 0;
b412f9be
JS
137}
138
483561c5 139void wxStaticBox::SetLabel( const wxString& label )
47bc1060 140{
483561c5 141 wxXmSizeKeeper sk( (Widget)GetMainWidget() );
47bc1060 142
483561c5 143 wxStaticBoxBase::SetLabel( label );
47bc1060 144
483561c5 145 sk.Restore();
0d57be45 146}