Applied patch [ 665806 ] Better slider test in widget sample
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18899 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -36,6 +36,10 @@
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if wxUSE_TOOLTIPS
 | 
			
		||||
    #include "wx/tooltip.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
@@ -53,15 +57,27 @@ enum
 | 
			
		||||
    SliderPage_SetValue,
 | 
			
		||||
    SliderPage_SetMinAndMax,
 | 
			
		||||
    SliderPage_SetTickFreq,
 | 
			
		||||
    SliderPage_SetThumbLen,
 | 
			
		||||
    SliderPage_CurValueText,
 | 
			
		||||
    SliderPage_ValueText,
 | 
			
		||||
    SliderPage_MinText,
 | 
			
		||||
    SliderPage_MaxText,
 | 
			
		||||
    SliderPage_TickFreqText,
 | 
			
		||||
    SliderPage_OtherSide,
 | 
			
		||||
    SliderPage_ThumbLenText,
 | 
			
		||||
    SliderPage_RadioSides,
 | 
			
		||||
    SliderPage_BothSides,
 | 
			
		||||
    SliderPage_Slider
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// sides radiobox values
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    StaticSides_Top,
 | 
			
		||||
    StaticSides_Bottom,
 | 
			
		||||
    StaticSides_Left,
 | 
			
		||||
    StaticSides_Right
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// SliderWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
@@ -79,15 +95,18 @@ protected:
 | 
			
		||||
    void OnButtonSetValue(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetMinAndMax(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetTickFreq(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetThumbLen(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnSlider(wxScrollEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIOtherSide(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIValueButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIMinMaxButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUITickFreq(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIThumbLen(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIRadioSides(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIBothSides(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIResetButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
@@ -102,6 +121,9 @@ protected:
 | 
			
		||||
    // set the tick frequency from the text field value
 | 
			
		||||
    void DoSetTickFreq();
 | 
			
		||||
 | 
			
		||||
    // set the thumb len from the text field value
 | 
			
		||||
    void DoSetThumbLen();
 | 
			
		||||
 | 
			
		||||
    // is this slider value in range?
 | 
			
		||||
    bool IsValidValue(int val) const
 | 
			
		||||
        { return (val >= m_min) && (val <= m_max); }
 | 
			
		||||
@@ -114,9 +136,11 @@ protected:
 | 
			
		||||
 | 
			
		||||
    // the check/radio boxes for styles
 | 
			
		||||
    wxCheckBox *m_chkLabels,
 | 
			
		||||
               *m_chkOtherSide,
 | 
			
		||||
               *m_chkVert,
 | 
			
		||||
               *m_chkTicks;
 | 
			
		||||
               *m_chkTicks,
 | 
			
		||||
               *m_chkBothSides;
 | 
			
		||||
 | 
			
		||||
    wxRadioBox *m_radioSides;
 | 
			
		||||
 | 
			
		||||
    // the slider itself and the sizer it is in
 | 
			
		||||
    wxSlider *m_slider;
 | 
			
		||||
@@ -126,7 +150,8 @@ protected:
 | 
			
		||||
    wxTextCtrl *m_textValue,
 | 
			
		||||
               *m_textMin,
 | 
			
		||||
               *m_textMax,
 | 
			
		||||
               *m_textTickFreq;
 | 
			
		||||
               *m_textTickFreq,
 | 
			
		||||
               *m_textThumbLen;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_EVENT_TABLE()
 | 
			
		||||
@@ -142,13 +167,15 @@ BEGIN_EVENT_TABLE(SliderWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_BUTTON(SliderPage_SetValue, SliderWidgetsPage::OnButtonSetValue)
 | 
			
		||||
    EVT_BUTTON(SliderPage_SetMinAndMax, SliderWidgetsPage::OnButtonSetMinAndMax)
 | 
			
		||||
    EVT_BUTTON(SliderPage_SetTickFreq, SliderWidgetsPage::OnButtonSetTickFreq)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_OtherSide, SliderWidgetsPage::OnUpdateUIOtherSide)
 | 
			
		||||
    EVT_BUTTON(SliderPage_SetThumbLen, SliderWidgetsPage::OnButtonSetThumbLen)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_SetValue, SliderWidgetsPage::OnUpdateUIValueButton)
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_SetMinAndMax, SliderWidgetsPage::OnUpdateUIMinMaxButton)
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_SetTickFreq, SliderWidgetsPage::OnUpdateUITickFreq)
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_SetThumbLen, SliderWidgetsPage::OnUpdateUIThumbLen)
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_TickFreqText, SliderWidgetsPage::OnUpdateUITickFreq)
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_RadioSides, SliderWidgetsPage::OnUpdateUIRadioSides)
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_BothSides, SliderWidgetsPage::OnUpdateUIBothSides)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_Reset, SliderWidgetsPage::OnUpdateUIResetButton)
 | 
			
		||||
 | 
			
		||||
@@ -179,7 +206,9 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
    m_chkVert =
 | 
			
		||||
    m_chkTicks =
 | 
			
		||||
    m_chkLabels =
 | 
			
		||||
    m_chkOtherSide = (wxCheckBox *)NULL;
 | 
			
		||||
    m_chkBothSides = (wxCheckBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_radioSides = (wxRadioBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_slider = (wxSlider *)NULL;
 | 
			
		||||
    m_sizerSlider = (wxSizer *)NULL;
 | 
			
		||||
@@ -193,12 +222,23 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
    m_chkVert = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Vertical"));
 | 
			
		||||
    m_chkTicks = CreateCheckBoxAndAddToSizer(sizerLeft, _T("Show &ticks"));
 | 
			
		||||
    m_chkLabels = CreateCheckBoxAndAddToSizer(sizerLeft, _T("Show &labels"));
 | 
			
		||||
    m_chkOtherSide = CreateCheckBoxAndAddToSizer
 | 
			
		||||
                     (
 | 
			
		||||
                        sizerLeft,
 | 
			
		||||
                        _T("On &other side"),
 | 
			
		||||
                        SliderPage_OtherSide
 | 
			
		||||
                     );
 | 
			
		||||
    static const wxString sides[] =
 | 
			
		||||
    {
 | 
			
		||||
        _T("top"),
 | 
			
		||||
        _T("bottom"),
 | 
			
		||||
        _T("left"),
 | 
			
		||||
        _T("right"),
 | 
			
		||||
    };
 | 
			
		||||
    m_radioSides = new wxRadioBox(this, SliderPage_RadioSides, _T("&Ticks/Labels"),
 | 
			
		||||
                                 wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                 WXSIZEOF(sides), sides,
 | 
			
		||||
                                 1, wxRA_SPECIFY_COLS);
 | 
			
		||||
    sizerLeft->Add(m_radioSides, 0, wxGROW | wxALL, 5);
 | 
			
		||||
    m_chkBothSides = CreateCheckBoxAndAddToSizer
 | 
			
		||||
                     (sizerLeft, _T("&Both sides"), SliderPage_BothSides);
 | 
			
		||||
#if wxUSE_TOOLTIPS
 | 
			
		||||
    m_chkBothSides->SetToolTip( _T("\"Both sides\" is only supported \nin Win95 and Universal") );
 | 
			
		||||
#endif // wxUSE_TOOLTIPS
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
 | 
			
		||||
@@ -245,9 +285,16 @@ SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(SliderPage_SetThumbLen,
 | 
			
		||||
                                            _T("Thumb &lenght"),
 | 
			
		||||
                                            SliderPage_ThumbLenText,
 | 
			
		||||
                                            &m_textThumbLen);
 | 
			
		||||
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    sizerRight->SetMinSize(150, 0);
 | 
			
		||||
    sizerRight->SetMinSize(150, 40);
 | 
			
		||||
    m_sizerSlider = sizerRight; // save it to modify it later
 | 
			
		||||
 | 
			
		||||
    Reset();
 | 
			
		||||
@@ -275,10 +322,12 @@ SliderWidgetsPage::~SliderWidgetsPage()
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_chkLabels->SetValue(TRUE);
 | 
			
		||||
    m_chkTicks->SetValue(FALSE);
 | 
			
		||||
    m_chkVert->SetValue(FALSE);
 | 
			
		||||
    m_chkOtherSide->SetValue(FALSE);
 | 
			
		||||
    m_chkTicks->SetValue(TRUE);
 | 
			
		||||
    m_chkLabels->SetValue(TRUE);
 | 
			
		||||
    m_chkBothSides->SetValue(FALSE);
 | 
			
		||||
 | 
			
		||||
    m_radioSides->SetSelection(StaticSides_Top);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::CreateSlider()
 | 
			
		||||
@@ -294,11 +343,6 @@ void SliderWidgetsPage::CreateSlider()
 | 
			
		||||
    if ( m_chkLabels->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        flags |= wxSL_LABELS;
 | 
			
		||||
 | 
			
		||||
        if ( m_chkOtherSide->GetValue() )
 | 
			
		||||
            flags |= isVert ? wxSL_RIGHT : wxSL_BOTTOM;
 | 
			
		||||
        else
 | 
			
		||||
            flags |= isVert ? wxSL_LEFT : wxSL_TOP;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_chkTicks->GetValue() )
 | 
			
		||||
@@ -306,6 +350,30 @@ void SliderWidgetsPage::CreateSlider()
 | 
			
		||||
        flags |= wxSL_AUTOTICKS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch ( m_radioSides->GetSelection() )
 | 
			
		||||
    {
 | 
			
		||||
        case StaticSides_Top:
 | 
			
		||||
            flags |= wxSL_TOP;
 | 
			
		||||
            break;
 | 
			
		||||
        case StaticSides_Left:
 | 
			
		||||
            flags |= wxSL_LEFT;
 | 
			
		||||
            break;
 | 
			
		||||
        case StaticSides_Bottom:
 | 
			
		||||
            flags |= wxSL_BOTTOM;
 | 
			
		||||
            break;
 | 
			
		||||
        case StaticSides_Right:
 | 
			
		||||
            flags |= wxSL_RIGHT;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG(_T("unexpected radiobox selection"));
 | 
			
		||||
            // fall through
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_chkBothSides->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        flags |= wxSL_BOTH;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    int val = m_min;
 | 
			
		||||
    if ( m_slider )
 | 
			
		||||
    {
 | 
			
		||||
@@ -364,6 +432,19 @@ void SliderWidgetsPage::DoSetTickFreq()
 | 
			
		||||
    m_slider->SetTickFreq(freq, 0 /* unused */);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::DoSetThumbLen()
 | 
			
		||||
{
 | 
			
		||||
    long len;
 | 
			
		||||
    if ( !m_textThumbLen->GetValue().ToLong(&len) )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogWarning(_T("Invalid slider thumb lenght"));
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_slider->SetThumbLength(len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
@@ -380,6 +461,11 @@ void SliderWidgetsPage::OnButtonSetTickFreq(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
    DoSetTickFreq();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnButtonSetThumbLen(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    DoSetThumbLen();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnButtonSetMinAndMax(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    long minNew,
 | 
			
		||||
@@ -426,6 +512,12 @@ void SliderWidgetsPage::OnUpdateUITickFreq(wxUpdateUIEvent& event)
 | 
			
		||||
                  (freq > 0) && (freq <= m_max - m_min) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUIThumbLen(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    long val;
 | 
			
		||||
    event.Enable( m_textThumbLen->GetValue().ToLong(&val));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUIMinMaxButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    long mn, mx;
 | 
			
		||||
@@ -437,9 +529,9 @@ void SliderWidgetsPage::OnUpdateUIMinMaxButton(wxUpdateUIEvent& event)
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( m_chkVert->GetValue() ||
 | 
			
		||||
                  !m_chkTicks->GetValue() ||
 | 
			
		||||
                  !m_chkLabels->GetValue() ||
 | 
			
		||||
                  m_chkOtherSide->GetValue() ||
 | 
			
		||||
                  m_chkTicks->GetValue() );
 | 
			
		||||
                  m_chkBothSides->GetValue() );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
@@ -452,9 +544,18 @@ void SliderWidgetsPage::OnUpdateUICurValueText(wxUpdateUIEvent& event)
 | 
			
		||||
    event.SetText( wxString::Format(_T("%d"), m_slider->GetValue()) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUIOtherSide(wxUpdateUIEvent& event)
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUIRadioSides(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( m_chkLabels->GetValue() );
 | 
			
		||||
    event.Enable( m_chkLabels->GetValue() || m_chkTicks->GetValue() );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUIBothSides(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
#if defined(__WIN95__) || defined(__WXUNIVERSAL__)
 | 
			
		||||
    event.Enable( m_chkTicks->GetValue() );
 | 
			
		||||
#else
 | 
			
		||||
    event.Enable( FALSE );
 | 
			
		||||
#endif // defined(__WIN95__) || defined(__WXUNIVERSAL__)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnSlider(wxScrollEvent& event)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user