1. corrected client data deletion in wxListBox (no more memory leaks in controls
sample) 2. added wxST_NO_AUTORESIZE style for wxGTK and wxMSW and added test for it to the controls sample git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4161 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1024,6 +1024,11 @@ enum wxStretch
|
|||||||
*/
|
*/
|
||||||
#define wxST_SIZEGRIP 0x0010
|
#define wxST_SIZEGRIP 0x0010
|
||||||
|
|
||||||
|
/*
|
||||||
|
* wxStaticText flags
|
||||||
|
*/
|
||||||
|
#define wxST_NO_AUTORESIZE 0x0001
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* wxStaticLine flags
|
* wxStaticLine flags
|
||||||
*/
|
*/
|
||||||
|
@@ -96,6 +96,7 @@ public:
|
|||||||
void OnPageChanged( wxNotebookEvent &event );
|
void OnPageChanged( wxNotebookEvent &event );
|
||||||
void OnPageChanging( wxNotebookEvent &event );
|
void OnPageChanging( wxNotebookEvent &event );
|
||||||
void OnSliderUpdate( wxCommandEvent &event );
|
void OnSliderUpdate( wxCommandEvent &event );
|
||||||
|
void OnUpdateLabel( wxCommandEvent &event );
|
||||||
#if wxUSE_SPINBUTTON
|
#if wxUSE_SPINBUTTON
|
||||||
void OnSpinUp( wxSpinEvent &event );
|
void OnSpinUp( wxSpinEvent &event );
|
||||||
void OnSpinDown( wxSpinEvent &event );
|
void OnSpinDown( wxSpinEvent &event );
|
||||||
@@ -130,6 +131,8 @@ public:
|
|||||||
wxTextCtrl *m_text;
|
wxTextCtrl *m_text;
|
||||||
wxNotebook *m_notebook;
|
wxNotebook *m_notebook;
|
||||||
|
|
||||||
|
wxStaticText *m_label;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
@@ -200,7 +203,7 @@ bool MyApp::OnInit()
|
|||||||
wxMenu *tooltip_menu = new wxMenu;
|
wxMenu *tooltip_menu = new wxMenu;
|
||||||
tooltip_menu->Append(MINIMAL_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D");
|
tooltip_menu->Append(MINIMAL_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D");
|
||||||
tooltip_menu->AppendSeparator();
|
tooltip_menu->AppendSeparator();
|
||||||
tooltip_menu->Append(MINIMAL_ENABLE_TOOLTIPS, "&Toggle tooltips\tCrtl-T",
|
tooltip_menu->Append(MINIMAL_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T",
|
||||||
"enable/disable tooltips", TRUE);
|
"enable/disable tooltips", TRUE);
|
||||||
tooltip_menu->Check(MINIMAL_ENABLE_TOOLTIPS, TRUE);
|
tooltip_menu->Check(MINIMAL_ENABLE_TOOLTIPS, TRUE);
|
||||||
menu_bar->Append(tooltip_menu, "&Tooltips");
|
menu_bar->Append(tooltip_menu, "&Tooltips");
|
||||||
@@ -267,6 +270,7 @@ const int ID_SLIDER = 181;
|
|||||||
|
|
||||||
const int ID_SPIN = 182;
|
const int ID_SPIN = 182;
|
||||||
const int ID_BTNPROGRESS = 183;
|
const int ID_BTNPROGRESS = 183;
|
||||||
|
const int ID_BUTTON_LABEL = 184;
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(MyPanel, wxPanel)
|
BEGIN_EVENT_TABLE(MyPanel, wxPanel)
|
||||||
EVT_SIZE ( MyPanel::OnSize)
|
EVT_SIZE ( MyPanel::OnSize)
|
||||||
@@ -313,6 +317,7 @@ EVT_SPIN_DOWN (ID_SPIN, MyPanel::OnSpinDown)
|
|||||||
EVT_UPDATE_UI (ID_BTNPROGRESS, MyPanel::OnUpdateShowProgress)
|
EVT_UPDATE_UI (ID_BTNPROGRESS, MyPanel::OnUpdateShowProgress)
|
||||||
EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress)
|
EVT_BUTTON (ID_BTNPROGRESS, MyPanel::OnShowProgress)
|
||||||
#endif
|
#endif
|
||||||
|
EVT_BUTTON (ID_BUTTON_LABEL, MyPanel::OnUpdateLabel)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
|
MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
|
||||||
@@ -539,16 +544,11 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
|
|||||||
dc.DrawText("Bitmap", 20, 20);
|
dc.DrawText("Bitmap", 20, 20);
|
||||||
dc.SelectObject( wxNullBitmap );
|
dc.SelectObject( wxNullBitmap );
|
||||||
|
|
||||||
wxBitmapButton *bmpBtn = new wxBitmapButton
|
(void)new wxBitmapButton(panel, -1, bitmap, wxPoint(100, 20));
|
||||||
(
|
(void)new wxButton(panel, ID_BUTTON_LABEL, "Toggle label", wxPoint(250, 20));
|
||||||
panel,
|
m_label = new wxStaticText(panel, -1, "Label with some long text",
|
||||||
-1,
|
wxPoint(250, 60), wxDefaultSize,
|
||||||
bitmap,
|
wxALIGN_RIGHT | wxST_NO_AUTORESIZE);
|
||||||
wxPoint(100, 20)
|
|
||||||
);
|
|
||||||
bmpBtn = NULL; // suppress warning
|
|
||||||
|
|
||||||
new wxButton(panel, -1, "Another button", wxPoint(250, 20));
|
|
||||||
|
|
||||||
m_notebook->AddPage(panel, "wxBitmapXXX");
|
m_notebook->AddPage(panel, "wxBitmapXXX");
|
||||||
|
|
||||||
@@ -586,11 +586,11 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
|
|||||||
panel->SetAutoLayout( true );
|
panel->SetAutoLayout( true );
|
||||||
|
|
||||||
wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL );
|
wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
sizer->Add( new wxButton(panel, -1, "Test Button" ), 3, wxALL, 10 );
|
sizer->Add( new wxButton(panel, -1, "Test Button" ), 3, wxALL, 10 );
|
||||||
sizer->Add( 20,20, 1 );
|
sizer->Add( 20,20, 1 );
|
||||||
sizer->Add( new wxButton(panel, -1, "Test Button 2" ), 3, wxGROW|wxALL, 10 );
|
sizer->Add( new wxButton(panel, -1, "Test Button 2" ), 3, wxGROW|wxALL, 10 );
|
||||||
|
|
||||||
panel->SetSizer( sizer );
|
panel->SetSizer( sizer );
|
||||||
|
|
||||||
m_notebook->AddPage(panel, "wxSizer");
|
m_notebook->AddPage(panel, "wxSizer");
|
||||||
@@ -892,6 +892,14 @@ void MyPanel::OnSetFont( wxCommandEvent &WXUNUSED(event) )
|
|||||||
m_text->SetFont( *wxITALIC_FONT );
|
m_text->SetFont( *wxITALIC_FONT );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyPanel::OnUpdateLabel( wxCommandEvent &WXUNUSED(event) )
|
||||||
|
{
|
||||||
|
static bool s_long = TRUE;
|
||||||
|
|
||||||
|
s_long = !s_long;
|
||||||
|
m_label->SetLabel(s_long ? "very very very long text" : "shorter text");
|
||||||
|
}
|
||||||
|
|
||||||
void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
|
void MyPanel::OnSliderUpdate( wxCommandEvent &WXUNUSED(event) )
|
||||||
{
|
{
|
||||||
m_gauge->SetValue( m_slider->GetValue() );
|
m_gauge->SetValue( m_slider->GetValue() );
|
||||||
|
@@ -52,7 +52,7 @@ bool wxStaticText::Create(wxWindow *parent,
|
|||||||
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
|
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxXX creation failed") );
|
wxFAIL_MSG( wxT("wxXX creation failed") );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// notice that we call the base class version which will just remove the
|
// notice that we call the base class version which will just remove the
|
||||||
@@ -74,7 +74,7 @@ bool wxStaticText::Create(wxWindow *parent,
|
|||||||
// GTK_JUSTIFY_LEFT is 0, RIGHT 1 and CENTER 2
|
// GTK_JUSTIFY_LEFT is 0, RIGHT 1 and CENTER 2
|
||||||
static const float labelAlignments[] = { 0.0, 1.0, 0.5 };
|
static const float labelAlignments[] = { 0.0, 1.0, 0.5 };
|
||||||
gtk_misc_set_alignment(GTK_MISC(m_widget), labelAlignments[justify], 0.0);
|
gtk_misc_set_alignment(GTK_MISC(m_widget), labelAlignments[justify], 0.0);
|
||||||
|
|
||||||
GtkRequisition req;
|
GtkRequisition req;
|
||||||
(* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
|
(* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
|
||||||
|
|
||||||
@@ -110,14 +110,15 @@ void wxStaticText::SetLabel( const wxString &label )
|
|||||||
|
|
||||||
gtk_label_set( GTK_LABEL(m_widget), m_label.mbc_str() );
|
gtk_label_set( GTK_LABEL(m_widget), m_label.mbc_str() );
|
||||||
|
|
||||||
// adjust the label size to the new label
|
// adjust the label size to the new label unless disabled
|
||||||
|
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
|
||||||
|
{
|
||||||
|
GtkRequisition req;
|
||||||
|
(* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request )
|
||||||
|
(m_widget, &req );
|
||||||
|
|
||||||
// TODO there should be a way to prevent SetLabel() from doing it (an
|
SetSize( req.width, req.height );
|
||||||
// additional parameter?)
|
}
|
||||||
GtkRequisition req;
|
|
||||||
(* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
|
|
||||||
|
|
||||||
SetSize( req.width, req.height );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxStaticText::ApplyWidgetStyle()
|
void wxStaticText::ApplyWidgetStyle()
|
||||||
|
@@ -52,7 +52,7 @@ bool wxStaticText::Create(wxWindow *parent,
|
|||||||
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
|
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxXX creation failed") );
|
wxFAIL_MSG( wxT("wxXX creation failed") );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// notice that we call the base class version which will just remove the
|
// notice that we call the base class version which will just remove the
|
||||||
@@ -74,7 +74,7 @@ bool wxStaticText::Create(wxWindow *parent,
|
|||||||
// GTK_JUSTIFY_LEFT is 0, RIGHT 1 and CENTER 2
|
// GTK_JUSTIFY_LEFT is 0, RIGHT 1 and CENTER 2
|
||||||
static const float labelAlignments[] = { 0.0, 1.0, 0.5 };
|
static const float labelAlignments[] = { 0.0, 1.0, 0.5 };
|
||||||
gtk_misc_set_alignment(GTK_MISC(m_widget), labelAlignments[justify], 0.0);
|
gtk_misc_set_alignment(GTK_MISC(m_widget), labelAlignments[justify], 0.0);
|
||||||
|
|
||||||
GtkRequisition req;
|
GtkRequisition req;
|
||||||
(* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
|
(* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
|
||||||
|
|
||||||
@@ -110,14 +110,15 @@ void wxStaticText::SetLabel( const wxString &label )
|
|||||||
|
|
||||||
gtk_label_set( GTK_LABEL(m_widget), m_label.mbc_str() );
|
gtk_label_set( GTK_LABEL(m_widget), m_label.mbc_str() );
|
||||||
|
|
||||||
// adjust the label size to the new label
|
// adjust the label size to the new label unless disabled
|
||||||
|
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
|
||||||
|
{
|
||||||
|
GtkRequisition req;
|
||||||
|
(* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request )
|
||||||
|
(m_widget, &req );
|
||||||
|
|
||||||
// TODO there should be a way to prevent SetLabel() from doing it (an
|
SetSize( req.width, req.height );
|
||||||
// additional parameter?)
|
}
|
||||||
GtkRequisition req;
|
|
||||||
(* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
|
|
||||||
|
|
||||||
SetSize( req.width, req.height );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxStaticText::ApplyWidgetStyle()
|
void wxStaticText::ApplyWidgetStyle()
|
||||||
|
@@ -359,13 +359,17 @@ void wxListBox::Clear()
|
|||||||
void wxListBox::Free()
|
void wxListBox::Free()
|
||||||
{
|
{
|
||||||
#if wxUSE_OWNER_DRAWN
|
#if wxUSE_OWNER_DRAWN
|
||||||
size_t uiCount = m_aItems.Count();
|
if ( m_windowStyle & wxLB_OWNERDRAW )
|
||||||
while ( uiCount-- != 0 ) {
|
{
|
||||||
delete m_aItems[uiCount];
|
size_t uiCount = m_aItems.Count();
|
||||||
}
|
while ( uiCount-- != 0 ) {
|
||||||
|
delete m_aItems[uiCount];
|
||||||
|
}
|
||||||
|
|
||||||
m_aItems.Clear();
|
m_aItems.Clear();
|
||||||
#else // !wxUSE_OWNER_DRAWN
|
}
|
||||||
|
else
|
||||||
|
#endif // wxUSE_OWNER_DRAWN
|
||||||
if ( HasClientObjectData() )
|
if ( HasClientObjectData() )
|
||||||
{
|
{
|
||||||
for ( size_t n = 0; n < (size_t)m_noItems; n++ )
|
for ( size_t n = 0; n < (size_t)m_noItems; n++ )
|
||||||
@@ -373,7 +377,6 @@ void wxListBox::Free()
|
|||||||
delete GetClientObject(n);
|
delete GetClientObject(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxListBox::SetSelection(int N, bool select)
|
void wxListBox::SetSelection(int N, bool select)
|
||||||
|
@@ -129,10 +129,12 @@ void wxStaticText::SetLabel(const wxString& label)
|
|||||||
{
|
{
|
||||||
SetWindowText(GetHwnd(), label);
|
SetWindowText(GetHwnd(), label);
|
||||||
|
|
||||||
// adjust the size of the window to fit to the label (this behaviour is
|
// adjust the size of the window to fit to the label unless autoresizing is
|
||||||
// backward compatible and generally makes sense but we might want to still
|
// disabled
|
||||||
// provide the user a way to disable it) (VZ)
|
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
|
||||||
DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
|
{
|
||||||
|
DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WXHBRUSH wxStaticText::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
|
WXHBRUSH wxStaticText::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
|
||||||
|
Reference in New Issue
Block a user