]>
git.saurik.com Git - wxWidgets.git/blob - src/gtk/statbox.cpp
   1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        gtk/statbox.cpp 
   4 // Author:      Robert Roebling 
   6 // Copyright:   (c) 1998 Robert Roebling 
   7 // Licence:     wxWindows licence 
   8 ///////////////////////////////////////////////////////////////////////////// 
  10 // For compilers that support precompilation, includes "wx.h". 
  11 #include "wx/wxprec.h" 
  15 #include "wx/statbox.h" 
  16 #include "wx/gtk/private/win_gtk.h"     // for wxPizza 
  20 // constants taken from GTK sources 
  22 #define LABEL_SIDE_PAD 2 
  24 //----------------------------------------------------------------------------- 
  25 // "size_allocate" from m_widget 
  26 //----------------------------------------------------------------------------- 
  29 static void size_allocate(GtkWidget
* widget
, GtkAllocation
* alloc
, void*) 
  31     // clip label as GTK >= 2.12 does 
  32     GtkWidget
* label_widget 
= gtk_frame_get_label_widget(GTK_FRAME(widget
)); 
  33     int w 
= alloc
->width 
- 
  34         2 * widget
->style
->xthickness 
- 2 * LABEL_PAD 
- 2 * LABEL_SIDE_PAD
; 
  38     if (label_widget
->allocation
.width 
> w
) 
  40         GtkAllocation alloc2 
= label_widget
->allocation
; 
  42         gtk_widget_size_allocate(label_widget
, &alloc2
); 
  47 //----------------------------------------------------------------------------- 
  49 //----------------------------------------------------------------------------- 
  51 IMPLEMENT_DYNAMIC_CLASS(wxStaticBox
, wxControl
) 
  53 wxStaticBox::wxStaticBox() 
  57 wxStaticBox::wxStaticBox( wxWindow 
*parent
, 
  59                           const wxString 
&label
, 
  63                           const wxString
& name 
) 
  65     Create( parent
, id
, label
, pos
, size
, style
, name 
); 
  68 bool wxStaticBox::Create( wxWindow 
*parent
, 
  70                           const wxString
& label
, 
  74                           const wxString
& name 
) 
  76     if (!PreCreation( parent
, pos
, size 
) || 
  77         !CreateBase( parent
, id
, pos
, size
, style
, wxDefaultValidator
, name 
)) 
  79         wxFAIL_MSG( wxT("wxStaticBox creation failed") ); 
  83     m_widget 
= GTKCreateFrame(label
); 
  84     g_object_ref(m_widget
); 
  86     // only base SetLabel needs to be called after GTKCreateFrame 
  87     wxControl::SetLabel(label
); 
  89     m_parent
->DoAddChild( this ); 
  93     // need to set non default alignment? 
  95     if ( style 
& wxALIGN_CENTER 
) 
  97     else if ( style 
& wxALIGN_RIGHT 
) 
 100     gtk_frame_set_label_align(GTK_FRAME(m_widget
), xalign
, 0.5); 
 102     if (gtk_check_version(2, 12, 0)) 
 104         // we connect this signal to perform label-clipping as GTK >= 2.12 does 
 105         g_signal_connect(m_widget
, "size_allocate", G_CALLBACK(size_allocate
), NULL
); 
 111 void wxStaticBox::AddChild( wxWindowBase 
*child 
) 
 115         // make this window a container of other wxWindows by instancing a wxPizza 
 116         // and packing it into the GtkFrame: 
 117         m_wxwindow 
= wxPizza::New(); 
 118         gtk_widget_show( m_wxwindow 
); 
 119         gtk_container_add( GTK_CONTAINER (m_widget
), m_wxwindow 
); 
 122     wxWindow::AddChild( child 
); 
 125 void wxStaticBox::SetLabel( const wxString
& label 
) 
 127     wxCHECK_RET( m_widget 
!= NULL
, wxT("invalid staticbox") ); 
 129     GTKSetLabelForFrame(GTK_FRAME(m_widget
), label
); 
 132 void wxStaticBox::DoApplyWidgetStyle(GtkRcStyle 
*style
) 
 134     GTKFrameApplyWidgetStyle(GTK_FRAME(m_widget
), style
); 
 137 bool wxStaticBox::GTKWidgetNeedsMnemonic() const 
 142 void wxStaticBox::GTKWidgetDoSetMnemonic(GtkWidget
* w
) 
 144     GTKFrameSetMnemonicWidget(GTK_FRAME(m_widget
), w
); 
 149 wxStaticBox::GetClassDefaultAttributes(wxWindowVariant 
WXUNUSED(variant
)) 
 151     return GetDefaultAttributesFromGTKWidget(gtk_frame_new
); 
 155 void wxStaticBox::GetBordersForSizer(int *borderTop
, int *borderOther
) const 
 157     const int BORDER 
= 5; // FIXME: hardcoded value 
 159     *borderTop 
= GetLabel().empty() ? 2*BORDER 
: GetCharHeight(); 
 160     *borderOther 
= BORDER
; 
 163 #endif // wxUSE_STATBOX