%% options copyright owner = Dirk Krause copyright year = 2019-xxxx SPDX-License-Identifier: BSD-3-Clause %% wx-gui type = dialog contents = sizerHorizontal [wxBoxSizer sizerHorizontal] direction = horizontal contents = $space(10) contents = sizerVertical contents = $space(10) [wxBoxSizer sizerVertical] direction = vertical contents = $space(10) contents = sizerContents centered-x contents = $space(10) contents = sizerButtons centered-x contents = $space(10) [wxGridBagSizer sizerContents] grid = 5 5 contents = labelLength 0 0 1 1 right centered-y contents = spinLength . +1 1 1 left centered-y contents = labelWidth +1 0 1 1 right centered-y contents = spinWidth . +1 1 1 left centered-y [wxStaticText labelLength] text = pTexts[255] [wxSpinCtrl spinLength] id = WXD_ID_AS_LENGTH tip = pTexts[257] range = 1 255 value = 1 [wxStaticText labelWidth] text = pTexts[256] [wxSpinCtrl spinWidth] id = WXD_ID_AS_WIDTH tip = pTexts[258] range = 1 255 value = 1 [wxStdDialogButtonSizer sizerButtons] contents = buttonOK contents = buttonCancel [wxButton buttonOK] id = wxID_OK text = pTexts[259] tip = pTexts[261] [wxButton buttonCancel] id = wxID_CANCEL text = pTexts[260] tip = pTexts[262] %% header start #ifndef WXDKDRAW_H_INCLUDED #include "wxdkdraw.h" #endif #ifndef WXDKDRAWFRAME_H_INCLUDED #include "WxdkdrawFrame.h" #endif %% class start /** The arrow size dialog asks the user to set arrow length and width in multiples of the line width. */ class WxdkdrawDlgArrowSize : public wxDialog { private: /** Events to handle. */ #if wxCHECK_VERSION(3,0,0) wxDECLARE_EVENT_TABLE(); #else DECLARE_EVENT_TABLE() #endif protected: /** Parent frame (the programs main window). */ WxdkdrawFrame *m_pParent; /** Graphics object the arrowhead is attached to. */ Wxd_object_t *m_pObject; /** Arrow length. */ uint8_t m_uLengthOriginal; /** Arrow width. */ uint8_t m_uWidthOriginal; /** Arrow length. */ uint8_t m_uLengthCurrent; /** Arrow width. */ uint8_t m_uWidthCurrent; /** Flag: Changing a real drawing element. */ bool m_bDrwElem; /** Flag: Changing backward arrow (false for forward arrow). */ bool m_bBackward; public: /** Window IDs. */ enum { WXD_ID_AS_LENGTH = (wxID_HIGHEST + 1), /**< Length spin ctrl. */ WXD_ID_AS_WIDTH /**< Width spin ctrl. */ }; /** Constructor. @param pParent Applications main frame. @param pObject Object to modify. @param pTexts Localized text fragments. @param bDrwElem Flag: Changing real drawing element. @param bBackward Flag: Changing backward arrow. */ WxdkdrawDlgArrowSize( WxdkdrawFrame *pParent, Wxd_object_t *pObject, wxChar const * const *pTexts, bool bDrwElem, bool bBackward ); /** OK button handler. @param event Event to process. */ void OnOK(wxCommandEvent & event); /** Cancel button handler. @param event Event to process. */ void OnCancel(wxCommandEvent & event); /** Length spin control handler. @param event Event to process. */ void OnLength(wxSpinEvent & event); /** Width spin control handler. @param event Event to process. */ void OnWidth(wxSpinEvent & event); #if 0 /** Retrieve arrow length. @return Arrow length. */ uint8_t GetArrowLength(void) const; /** Retrieve arrow width. @return Arrow width. */ uint8_t GetArrowWidth(void) const; #endif protected: void TransferLength(void); void TransferWidth(void); %% class end }; %% header end %% module start #ifndef WxdkdrawDlgArrowSize_H_INCLUDED #include "WxdkdrawDlgArrowSize.h" #endif $!trace-include /** Assign methods to event IDs. */ #if wxCHECK_VERSION(3,0,0) wxBEGIN_EVENT_TABLE(WxdkdrawDlgArrowSize,wxDialog) #else BEGIN_EVENT_TABLE(WxdkdrawDlgArrowSize,wxDialog) #endif EVT_BUTTON(\ wxID_OK,\ WxdkdrawDlgArrowSize::OnOK\ ) EVT_BUTTON(\ wxID_CANCEL,\ WxdkdrawDlgArrowSize::OnCancel\ ) EVT_SPINCTRL(\ WxdkdrawDlgArrowSize::WXD_ID_AS_LENGTH,\ WxdkdrawDlgArrowSize::OnLength\ ) EVT_SPINCTRL(\ WxdkdrawDlgArrowSize::WXD_ID_AS_WIDTH,\ WxdkdrawDlgArrowSize::OnWidth\ ) #if wxCHECK_VERSION(3,0,0) wxEND_EVENT_TABLE() #else END_EVENT_TABLE() #endif %% constructor start WxdkdrawDlgArrowSize::WxdkdrawDlgArrowSize( WxdkdrawFrame *pParent, Wxd_object_t *pObject, wxChar const * const *pTexts, bool bDrwElem, bool bBackward ) : wxDialog( pParent, wxID_ANY, pTexts[254], wxDefaultPosition, wxDefaultSize, ( (wxDEFAULT_DIALOG_STYLE) & (~(wxRESIZE_BORDER)) & (~(wxCLOSE_BOX)) & (~(wxSYSTEM_MENU)) ) ) { m_pParent = pParent; m_pObject = pObject; m_bDrwElem = bDrwElem; m_bBackward = bBackward; if (bBackward) { m_uLengthOriginal = pObject->abl; m_uWidthOriginal = pObject->abw; } else { m_uLengthOriginal = pObject->afl; m_uWidthOriginal = pObject->afw; } if (1U > m_uLengthOriginal) { m_uLengthOriginal = 1U; } if (1U > m_uWidthOriginal) { m_uWidthOriginal = 1U; } m_uLengthCurrent = m_uLengthOriginal; m_uWidthCurrent = m_uWidthOriginal; %% constructor end if (dkctGUILayoutOK) { spinLength->SetValue(m_uLengthOriginal); spinWidth->SetValue(m_uWidthOriginal); if (bBackward) { switch ( (int)(pObject->abt) ) { case 27: case 28: { spinWidth->Enable(false); } break; case 29: { spinLength->Enable(false); } break; } } else { switch ( (int)(pObject->aft) ) { case 27: case 28: { spinWidth->Enable(false); } break; case 29: { spinLength->Enable(false); } break; } } wxSize minsize = GetMinSize(); SetMaxSize(minsize); } } %% module end void WxdkdrawDlgArrowSize::TransferLength(void) { bool bDoRefresh = false; m_uLengthCurrent = spinLength->GetValue(); if (m_bBackward) { if (m_uLengthCurrent != m_pObject->abl) { if (m_bDrwElem) { bDoRefresh = true; } m_pObject->abl = m_uLengthCurrent; } } else { if (m_uLengthCurrent != m_pObject->afl) { if (m_bDrwElem) { bDoRefresh = true; } m_pObject->afl = m_uLengthCurrent; } } if (bDoRefresh) { m_pParent->RequireRedraw(WXD_REFRESH_DRAWING); } } void WxdkdrawDlgArrowSize::TransferWidth(void) { bool bDoRefresh = false; m_uWidthCurrent = spinWidth->GetValue(); if (m_bBackward) { if (m_uWidthCurrent != m_pObject->abw) { if (m_bDrwElem) { bDoRefresh = true; } m_pObject->abw = m_uWidthCurrent; } } else { if (m_uWidthCurrent != m_pObject->afw) { if (m_bDrwElem) { bDoRefresh = true; } m_pObject->afw = m_uWidthCurrent; } } if (bDoRefresh) { m_pParent->RequireRedraw(WXD_REFRESH_DRAWING); } } void WxdkdrawDlgArrowSize::OnOK(wxCommandEvent & WXUNUSED(event)) { $? "+ OnOK" TransferLength(); TransferWidth(); if(IsModal()) { EndModal(wxID_OK); } else { SetReturnCode(wxID_OK); Show(false); } $? "- OnOK" } void WxdkdrawDlgArrowSize::OnCancel(wxCommandEvent & WXUNUSED(event)) { bool bDoRefresh = false; $? "+ OnCancel" if (m_bBackward) { if (m_uLengthOriginal != m_pObject->abl) { m_pObject->abl = m_uLengthOriginal; if (m_bDrwElem) { bDoRefresh = true; } } if (m_uWidthOriginal != m_pObject->abw) { m_pObject->abw = m_uWidthOriginal; if (m_bDrwElem) { bDoRefresh = true; } } } else { if (m_uLengthOriginal != m_pObject->afl) { m_pObject->afl = m_uLengthOriginal; if (m_bDrwElem) { bDoRefresh = true; } } if (m_uWidthOriginal != m_pObject->afw) { m_pObject->afw = m_uWidthOriginal; if (m_bDrwElem) { bDoRefresh = true; } } } if (bDoRefresh) { m_pParent->RequireRedraw(WXD_REFRESH_DRAWING); } if(IsModal()) { EndModal(wxID_CANCEL); } else { SetReturnCode(wxID_CANCEL); Show(false); } $? "- OnCancel" } void WxdkdrawDlgArrowSize::OnLength(wxSpinEvent & WXUNUSED(event)) { $? "+ OnLength" TransferLength(); $? "- OnLength" } void WxdkdrawDlgArrowSize::OnWidth(wxSpinEvent & WXUNUSED(event)) { $? "+ OnWidth" TransferWidth(); $? "- OnWidth" } #if 0 uint8_t WxdkdrawDlgArrowSize::GetArrowLength(void) const { return m_uLengthCurrent; } uint8_t WxdkdrawDlgArrowSize::GetArrowWidth(void) const { return m_uWidthCurrent; } #endif /* vim: set ai sw=4 ts=4 : */