%% 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 grow = yes direction = horizontal contents = $space(10) contents = sizerVertical contents = $space(10) [wxBoxSizer sizerVertical] direction = vertical grow = yes proportion = 1 contents = $space(10) contents = sizerContents centered-x contents = $space(10) contents = sizerButtons centered-x contents = $space(10) [wxBoxSizer sizerContents] direction = vertical grow = yes proportion = 1 contents = labelExport left contents = textExport left contents = $space(10) contents = labelScreen left contents = textScreen left [wxStaticText labelExport] text = pLocTexts[396] [wxTextCtrl textExport] proportion = 1 grow = yes id = WXD_ID_EXPORT_TEXT tip = pLocTexts[398] text = pNlTexts[20] text style = enter [wxStaticText labelScreen] text = pLocTexts[397] [wxTextCtrl textScreen] proportion = 1 grow = yes id = WXD_ID_SCREEN_TEXT tip = pLocTexts[399] text = pNlTexts[20] text style = enter [wxStdDialogButtonSizer sizerButtons] contents = buttonOK contents = buttonCancel [wxButton buttonOK] id = wxID_OK text = pLocTexts[259] tip = pLocTexts[401] [wxButton buttonCancel] id = wxID_CANCEL text = pLocTexts[260] tip = pLocTexts[402] %% header start #ifndef WXDKDRAW_H_INCLUDED #include "wxdkdraw.h" #endif #ifndef WXDKDRAWFRAME_H_INCLUDED #include "WxdkdrawFrame.h" #endif %% class start /** Text input dialog to create or modify a text label. */ class WxdkdrawDlgTextInput : public wxDialog { private: /** Events to handle. */ #if wxCHECK_VERSION(3,0,0) wxDECLARE_EVENT_TABLE(); #else DECLARE_EVENT_TABLE() #endif protected: /** Red colour for label. */ wxColour m_cRed; /** Localized texts. */ wxChar const * const *m_pLocTexts; /** Parent frame (main window). */ WxdkdrawFrame *m_pParent; /** Address of export text pointer. */ wxChar **m_ppExport; /** Address of screen text pointer. */ wxChar **m_ppScreen; /** Error report for out of memory. */ dk4_er_t *m_pErrorReport; /** Text object is LaTeX special text. */ bool m_bLaTeX; public: /** Window IDs. */ enum { WXD_ID_EXPORT_TEXT = (wxID_HIGHEST + 1), /**< Export text. */ WXD_ID_SCREEN_TEXT /**< Screen text. */ }; %% class end public: /** Constructor. @param pParent Parent frame (main window). @param pLocTexts Localized text fragments. @param pNlTexts Not localized text fragments. @param ppExport Address of export text pointer. @param ppScreen Address of screen text pointer. @param bLaTeX Flag: LaTeX special text object. */ WxdkdrawDlgTextInput( WxdkdrawFrame *pParent, wxChar const * const *pLocTexts, wxChar const * const *pNlTexts, wxChar **ppExport, wxChar **ppScreen, bool bLaTeX, dk4_er_t *pErrorReport ); /** OK button handler. @param event Event to process. */ void OnOK(wxCommandEvent & event); /** Cancel button handler. @param event Event to process. */ void OnCancel(wxCommandEvent & event); /** Enter in export text handler. @param event Event to process. */ void OnExportText(wxCommandEvent & event); /** Enter in screen text handler. @param event Event to process. */ void OnScreenText(wxCommandEvent & event); protected: /** Check whether sufficient input available. @return True on success, false on error. */ bool CheckSufficientInput(void); /** Transfer data from text fields to the destination pointers. */ void TransferInputData(void); }; %% header end %% module start #ifndef WXDKDRAWDLGTEXTINPUT_H_INCLUDED #include "WxdkdrawDlgTextInput.h" #endif $!trace-include /** Assign methods to event IDs. */ #if wxCHECK_VERSION(3,0,0) wxBEGIN_EVENT_TABLE(WxdkdrawDlgTextInput,wxDialog) #else BEGIN_EVENT_TABLE(WxdkdrawDlgTextInput,wxDialog) #endif EVT_BUTTON(\ wxID_OK,\ WxdkdrawDlgTextInput::OnOK\ ) EVT_BUTTON(\ wxID_CANCEL,\ WxdkdrawDlgTextInput::OnCancel\ ) EVT_TEXT_ENTER(\ WXD_ID_EXPORT_TEXT,\ WxdkdrawDlgTextInput::OnExportText\ ) EVT_TEXT_ENTER(\ WXD_ID_SCREEN_TEXT,\ WxdkdrawDlgTextInput::OnScreenText\ ) #if wxCHECK_VERSION(3,0,0) wxEND_EVENT_TABLE() #else END_EVENT_TABLE() #endif %% constructor start WxdkdrawDlgTextInput::WxdkdrawDlgTextInput( WxdkdrawFrame *pParent, wxChar const * const *pLocTexts, wxChar const * const *pNlTexts, wxChar **ppExport, wxChar **ppScreen, bool bLaTeX, dk4_er_t *pErrorReport ) : wxDialog( pParent, wxID_ANY, pLocTexts[400], wxDefaultPosition, wxDefaultSize, ( ((wxDEFAULT_DIALOG_STYLE) | (wxRESIZE_BORDER)) #if 0 & (~(wxRESIZE_BORDER)) #endif & (~(wxCLOSE_BOX)) & (~(wxSYSTEM_MENU)) ) ), m_cRed(0x7F, 0, 0) { m_pParent = pParent; m_bLaTeX = bLaTeX; m_ppExport = ppExport; m_ppScreen = ppScreen; m_pLocTexts = pLocTexts; m_pErrorReport = pErrorReport; %% constructor end if (dkctGUILayoutOK) { if (NULL != *ppExport) { wxString str(*ppExport); { textExport->SetValue(str); } } else { textExport->SetValue(pNlTexts[19]); } if ((bLaTeX) && (NULL != *ppScreen)) { wxString str(*ppScreen); { textScreen->SetValue(str); } } else { textScreen->SetValue(pNlTexts[19]); } if (!(bLaTeX)) { textScreen->Enable(false); } #if 0 panelContents->Layout(); #endif Layout(); #if 0 wxSize minsize = GetMinSize(); SetMaxSize(minsize); #endif } } %% module end bool WxdkdrawDlgTextInput::CheckSufficientInput(void) { bool back = false; wxString exportString = textExport->GetValue(); { wxCStrData exportCstr = exportString.c_str(); { wxChar const *exportPtr = (wxChar const *)exportCstr; if (NULL != exportPtr) { if ((size_t)0U < dk4strx_len(exportPtr)) { back = true; } } } } return back; } void WxdkdrawDlgTextInput::TransferInputData(void) { bool successExport = false; wxString exportString = textExport->GetValue(); { wxCStrData exportCstr = exportString.c_str(); { wxChar const *exportPtr = (wxChar const *)exportCstr; if (NULL != exportPtr) { if ((size_t)0U < dk4strx_len(exportPtr)) { wxChar *exportNew = dk4strx_dup(exportPtr, NULL); if (NULL != exportNew) { if (NULL != *m_ppExport) { dk4mem_free(*m_ppExport); } *m_ppExport = exportNew; successExport = true; } else { /* ERROR: Memory */ dk4error_set_simple_error_code( m_pErrorReport, DK4_E_MEMORY_ALLOCATION_FAILED ); } } else { /* ERROR: No text entered */ labelExport->SetForegroundColour(m_cRed); labelExport->SetLabel(m_pLocTexts[642]); textExport->SetFocus(); Refresh(); Update(); } } else { /* ERROR: No text entered */ labelExport->SetForegroundColour(m_cRed); labelExport->SetLabel(m_pLocTexts[642]); textExport->SetFocus(); Refresh(); Update(); } } } if (successExport && m_bLaTeX) { wxString screenString = textScreen->GetValue(); { wxCStrData screenCstr = screenString.c_str(); { wxChar const *screenPtr = (wxChar const *)screenCstr; if (NULL != screenPtr) { if ((size_t)0U < dk4strx_len(screenPtr)) { wxChar *screenNew = dk4strx_dup(screenPtr, NULL); if (NULL != screenNew) { if (NULL != *m_ppScreen) { dk4mem_free(*m_ppScreen); } *m_ppScreen = screenNew; } else { /* ERROR: Memory */ dk4error_set_simple_error_code( m_pErrorReport, DK4_E_MEMORY_ALLOCATION_FAILED ); } } else { /* No text entered */ } } else { /* No text entered */ } } } } else { if (NULL != *m_ppScreen) { dk4mem_free(*m_ppScreen); *m_ppScreen = NULL; } } } void WxdkdrawDlgTextInput::OnOK(wxCommandEvent & WXUNUSED(event)) { if (CheckSufficientInput()) { TransferInputData(); if(IsModal()) { EndModal(wxID_OK); } else { SetReturnCode(wxID_OK); Show(false); } } else { /* TODO: Return to export text */ labelExport->SetForegroundColour(m_cRed); labelExport->SetLabel(m_pLocTexts[642]); textExport->SetFocus(); Refresh(); Update(); } } void WxdkdrawDlgTextInput::OnCancel(wxCommandEvent & WXUNUSED(event)) { if(IsModal()) { EndModal(wxID_CANCEL); } else { SetReturnCode(wxID_CANCEL); Show(false); } } void WxdkdrawDlgTextInput::OnExportText(wxCommandEvent & WXUNUSED(event)) { $? "+ OnExportText" if (m_bLaTeX) { textScreen->SetFocus(); } else { if (CheckSufficientInput()) { TransferInputData(); if(IsModal()) { EndModal(wxID_OK); } else { SetReturnCode(wxID_OK); Show(false); } } else { /* TODO: Return to export text */ labelExport->SetForegroundColour(m_cRed); labelExport->SetLabel(m_pLocTexts[642]); textExport->SetFocus(); Refresh(); Update(); } } $? "- OnExportText" } void WxdkdrawDlgTextInput::OnScreenText(wxCommandEvent & WXUNUSED(event)) { $? "+ OnScreenText" if (CheckSufficientInput()) { TransferInputData(); if(IsModal()) { EndModal(wxID_OK); } else { SetReturnCode(wxID_OK); Show(false); } } else { /* TODO: Return to export text */ labelExport->SetForegroundColour(m_cRed); labelExport->SetLabel(m_pLocTexts[642]); textExport->SetFocus(); Refresh(); Update(); } $? "- OnScreenText" } /* vim: set ai sw=4 ts=4 : */