%% options copyright owner = Dirk Krause copyright year = 2019-xxxx SPDX-License-Identifier: BSD-3-Clause %% wx-gui type = dialog contents = sizerHorizontal [wxBoxSizer sizerHorizontal] proportion = 1 direction = horizontal contents = $space(10) contents = sizerVertical contents = $space(10) [wxBoxSizer sizerVertical] direction = vertical grow = yes proportion = 1 contents = $space(10) contents = lName centered-x contents = lValue centered-x contents = sValue centered-x contents = $space(10) contents = sizerButtons centered-x contents = $space(10) [wxStaticText lName] text = pLocTexts[429] [wxStaticText lValue] text = pLocTexts[430] [wxSlider sValue] id = WXD_ID_SVALUE direction = horizontal range = -20 20 value = 0 grow = yes tip = pLocTexts[428] [wxStdDialogButtonSizer sizerButtons] grow = yes contents = buttonOK contents = buttonCancel [wxButton buttonOK] id = wxID_OK text = pLocTexts[241] tip = pLocTexts[242] [wxButton buttonCancel] id = wxID_CANCEL text = pLocTexts[243] tip = pLocTexts[244] %% header start #ifndef WXDKDRAW_H_INCLUDED #include "wxdkdraw.h" #endif #ifndef WXDKDRAWFRAME_H_INCLUDED #include "WxdkdrawFrame.h" #endif %% class start /** Dialog to set s value for a point. */ class WxdkdrawDlgSplineValue : public wxDialog { private: #if wxCHECK_VERSION(3,0,0) wxDECLARE_EVENT_TABLE(); #else DECLARE_EVENT_TABLE() #endif protected: /** Parent frame (main window). */ WxdkdrawFrame *m_pParent; /** Control to refresh on changes. */ wxControl *m_pControl; /** Drawing. */ Wxd_drawing_t *m_pDrw; /** Address of s value variable. */ double *m_pDest; /** Original s value when dialog was started. */ double m_dOriginal; %% class end public: /** Window IDs. */ enum { WXD_ID_SVALUE = (wxID_HIGHEST + 1) /**< Slider for s value. */ }; /** Constructor. @param pParent Parent frame (main window). @param pControl Control to redraw on change. @param pDrw Drawing to modify. @param pLocTexts Localized text fragments. @param pDest Address of destination variable. */ WxdkdrawDlgSplineValue( WxdkdrawFrame *pParent, wxControl *pControl, Wxd_drawing_t *pDrw, wxChar const * const *pLocTexts, double *pDest ); /** OK button handler. @param event Event to process. */ void OnOK(wxCommandEvent & event); /** Cancel button handler. @param event Event to process. */ void OnCancel(wxCommandEvent & event); /** Slider handler @param event Event to process. */ void OnSlider(wxCommandEvent & event); }; /* vim: set ai sw=4 ts=4 : */ %% header end %% module start #ifndef WXDKDRAWDLGSPLINEVALUE_H_INCLUDED #include "WxdkdrawDlgSplineValue.h" #endif $!trace-include /** Assign methods to event IDs. */ #if wxCHECK_VERSION(3,0,0) wxBEGIN_EVENT_TABLE(WxdkdrawDlgSplineValue,wxDialog) #else BEGIN_EVENT_TABLE(WxdkdrawDlgSplineValue,wxDialog) #endif EVT_BUTTON(\ wxID_OK,\ WxdkdrawDlgSplineValue::OnOK\ ) EVT_BUTTON(\ wxID_CANCEL,\ WxdkdrawDlgSplineValue::OnCancel\ ) EVT_SLIDER(\ WxdkdrawDlgSplineValue::WXD_ID_SVALUE,\ WxdkdrawDlgSplineValue::OnSlider\ ) #if wxCHECK_VERSION(3,0,0) wxEND_EVENT_TABLE() #else END_EVENT_TABLE() #endif %% constructor start WxdkdrawDlgSplineValue::WxdkdrawDlgSplineValue( WxdkdrawFrame *pParent, wxControl *pControl, Wxd_drawing_t *pDrw, wxChar const * const *pLocTexts, double *pDest ) : wxDialog( pParent, wxID_ANY, pLocTexts[422], wxDefaultPosition, wxDefaultSize, ( (wxDEFAULT_DIALOG_STYLE) & (~(wxRESIZE_BORDER)) & (~(wxCLOSE_BOX)) & (~(wxSYSTEM_MENU)) ) ) { int iSliderPosition; wxString s; m_pParent = pParent; m_pControl = pControl; m_pDrw = pDrw; m_pDest = pDest; m_dOriginal = *pDest; %% constructor end if (dkctGUILayoutOK) { iSliderPosition = (int)(dk4ma_rint(20.0 * m_dOriginal)); if (-20 > iSliderPosition) { iSliderPosition = -20; } if ( 20 < iSliderPosition) { iSliderPosition = 20; } sValue->SetValue(iSliderPosition); s.Printf(wxT("%g"), (((double)iSliderPosition) / 20.0)); lValue->SetLabel(s); } } %% module end void WxdkdrawDlgSplineValue::OnOK(wxCommandEvent & WXUNUSED(event)) { $? "+ OnOK" if(IsModal()) { EndModal(wxID_OK); } else { SetReturnCode(wxID_OK); Show(false); } $? "- OnOK" } void WxdkdrawDlgSplineValue::OnCancel(wxCommandEvent & WXUNUSED(event)) { $? "+ OnCancel" *m_pDest = m_dOriginal; if(IsModal()) { EndModal(wxID_CANCEL); } else { SetReturnCode(wxID_CANCEL); Show(false); } $? "- OnCancel" } void WxdkdrawDlgSplineValue::OnSlider(wxCommandEvent & WXUNUSED(event)) { wxString s; double d; int i; $? "+ OnSlider" i = sValue->GetValue(); d = (double)i / 20.0; *m_pDest = d; s.Printf(wxT("%g"), d); lValue->SetLabel(s); lValue->Refresh(); Update(); wxdobj_drw_require_redraw(m_pDrw, WXD_REFRESH_DRAWING); m_pControl->Refresh(); m_pParent->Update(); $? "- OnSlider" } /* vim: set ai sw=4 ts=4 : */