/* Copyright (C) 2011-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: DkWxFrame.cpt */ #line 113 "DkWxFrame.cpt" /** @file DkWxFrame.cpp Implementation of DkWxFrame. */ #include "dk3conf.h" #include "DkWxFrame.h" #line 122 "DkWxFrame.cpt" int DkWxFrame::iInstances = 0; wxChar const * const DkWxFrame::kwSizePos[] = { /* 0 */ wxT("window.x"), /* 1 */ wxT("window.y"), /* 2 */ wxT("window.w"), /* 3 */ wxT("window.h"), /* 4 */ wxT("window.maximized"), /* 5 */ wxT("window.iconized"), NULL }; dkChar const * const DkWxFrame::kwRestoreFeatures[] = { /* 0 */ dkT("/window/restore-maximized"), /* 1 */ dkT("/window/restore-iconized"), /* 2 */ dkT("/window/restore-size"), NULL }; DkWxFrame::DkWxFrame( wxChar const *applicationName, DkWxAppHelper *applicationHelper, DkWxHelpController *applicationHelp, int wxid ) : wxFrame(NULL, wxid, applicationName) { #line 158 "DkWxFrame.cpt" /* Initialize elements. */ pHelper = NULL; helpController = applicationHelp; /* Set elements. */ pHelper = applicationHelper; iInstances++; Connect(wxid, wxEVT_CLOSE_WINDOW, wxCloseEventHandler(DkWxFrame::OnClose)); #line 170 "DkWxFrame.cpt" } void DkWxFrame::OnClose(wxCloseEvent & event) { bool doClose = true; #line 178 "DkWxFrame.cpt" if(event.CanVeto()) { doClose = canClose(iInstances == 1); } else { canClose(iInstances == 1); } if(doClose) { #line 184 "DkWxFrame.cpt" /* For last instance save position. */ if(iInstances-- == 1) { #line 188 "DkWxFrame.cpt" savePosition(); } /* Process close event. */ event.Skip(); } else { #line 195 "DkWxFrame.cpt" /* Do not close the window. */ event.Veto(); } #line 200 "DkWxFrame.cpt" } void DkWxFrame::restorePosition() { int p[6]; /* Values retrieved from application helper */ wxSize scsz; /* Screen size */ int x; /* X position */ int y; /* Y position */ int w; /* Width */ int h; /* Height */ int rs; /* Flag: Attempt to restore size */ #line 215 "DkWxFrame.cpt" p[0] = p[1] = -1; p[2] = p[3] = p[4] = w = h = 0; pHelper->retrieveMultipleInts(kwSizePos, p); #line 219 "DkWxFrame.cpt" #line 220 "DkWxFrame.cpt" #line 221 "DkWxFrame.cpt" #line 222 "DkWxFrame.cpt" #line 223 "DkWxFrame.cpt" #line 224 "DkWxFrame.cpt" if ((0 > p[0]) || (0 > p[1])) { CentreOnScreen(); } else { scsz = wxGetDisplaySize(); x = p[0]; y = p[1]; GetSize(&w, &h); rs = 1; rs = dk3app_get_pref_bool(pHelper->getApp(), kwRestoreFeatures[2], rs); #line 234 "DkWxFrame.cpt" if (0 != rs) { #line 235 "DkWxFrame.cpt" if (p[2] > w) { w = p[2]; } if (p[3] > h) { h = p[3]; } } if ((x + w) >= scsz.GetWidth()) { x = scsz.GetWidth() - w; } if ((y + h) >= scsz.GetHeight()) { y = scsz.GetHeight() - h; } if (0 > x) { x = 0; } if (0 > y) { y = 0; } if (0 != rs) { #line 243 "DkWxFrame.cpt" SetSize(x, y, w, h); #if wxCHECK_VERSION(3,0,0) { #line 246 "DkWxFrame.cpt" int t1 = 0; int t2 = 0; GetSize(&t1, &t2); if ((t1 > w) || (t2 > h)) { #line 250 "DkWxFrame.cpt" if (t1 > w) { w = w - (t1 - w); #line 252 "DkWxFrame.cpt" } if (t2 > h) { h = h - (t2 - h); #line 255 "DkWxFrame.cpt" } SetSize(x, y, w, h); } } #endif } else { #line 261 "DkWxFrame.cpt" SetPosition(wxPoint(x, y)); } if (0 != dk3app_get_pref_bool(pHelper->getApp(), kwRestoreFeatures[0], 0)) { if (0 != p[4]) { Maximize(true); } } if (0 != dk3app_get_pref_bool(pHelper->getApp(), kwRestoreFeatures[1], 0)) { if (0 != p[5]) { Iconize(true); } } } #line 277 "DkWxFrame.cpt" } #if VERSION_BEFORE_20160902 void DkWxFrame::restorePosition() { #if 1 int p[6]; size_t num; int w, h; int restoreFeature; #line 291 "DkWxFrame.cpt" p[0] = p[1] = p[2] = p[3] p[4] = p[5] = w = h = 0; if((num = pHelper->retrieveMultipleInts(kwSizePos, p)) >= 4) { #line 294 "DkWxFrame.cpt" #line 295 "DkWxFrame.cpt" #line 296 "DkWxFrame.cpt" #line 297 "DkWxFrame.cpt" #line 298 "DkWxFrame.cpt" #line 299 "DkWxFrame.cpt" #line 300 "DkWxFrame.cpt" wxSize scsz = wxGetDisplaySize(); GetSize(&w, &h); #line 303 "DkWxFrame.cpt" #line 304 "DkWxFrame.cpt" #line 305 "DkWxFrame.cpt" if(w > p[2]) { p[2] = w; } if(h > p[3]) { p[3] = h; } #line 308 "DkWxFrame.cpt" #line 309 "DkWxFrame.cpt" #if wxCHECK_VERSION(3,0,0) { wxSize minSize = GetMinSize(); if (p[2] < minSize.x) { p[2] = minSize.x; } if (p[3] < minSize.y) { p[3] = minSize.y; } } #endif if((p[0] + p[2]) > scsz.GetWidth()) { p[0] = scsz.GetWidth() - p[2]; } if((p[1] + p[3]) > scsz.GetHeight()) { p[1] = scsz.GetHeight() - p[3]; } if(p[0] < 0) { p[0] = 0; } if(p[1] < 0) { p[1] = 0; } #line 321 "DkWxFrame.cpt" #line 322 "DkWxFrame.cpt" #line 323 "DkWxFrame.cpt" #line 324 "DkWxFrame.cpt" #line 325 "DkWxFrame.cpt" /* This variant allows to decrease the frame below the minimum size. */ #if wxCHECK_VERSION(3,0,0) SetPosition(wxPoint(p[0], p[1])); #else SetSize(p[0], p[1], p[2], p[3]); #endif restoreFeature = dk3app_get_pref_bool( pHelper->getApp(), kwRestoreFeatures[0], 0 ); if((restoreFeature) && (4 < num)) { if(0 != p[4]) { Maximize(true); } } restoreFeature = dk3app_get_pref_bool( pHelper->getApp(), kwRestoreFeatures[1], 0 ); if((restoreFeature) && (5 < num)) { if(0 != p[5]) { Iconize(true); } } } else { CentreOnScreen(); } #line 355 "DkWxFrame.cpt" #else int x = 0; int y = 0; int w = 0; int h = 0; wxSize scsz = wxGetDisplaySize(); GetPosition(&x, &y); GetSize(&w, &h); #endif } #endif /* VERSION_BEFORE_20160902 */ void DkWxFrame::savePosition() { int p[6]; #line 375 "DkWxFrame.cpt" p[4] = 0; p[5] = 0; if(IsIconized()) { p[5] = 1; Iconize(false); } if(IsMaximized()) { p[4] = 1; Maximize(false); } GetPosition(&(p[0]), &(p[1])); GetSize(&(p[2]), &(p[3])); if(pHelper) { #line 389 "DkWxFrame.cpt" #line 390 "DkWxFrame.cpt" #line 391 "DkWxFrame.cpt" #line 392 "DkWxFrame.cpt" pHelper->saveMultipleInts(kwSizePos, p); } #line 394 "DkWxFrame.cpt" } bool DkWxFrame::canClose(bool WXUNUSED(isLast)) { #line 402 "DkWxFrame.cpt" return true; } void DkWxFrame::openHelp() { #line 411 "DkWxFrame.cpt" if(helpController) { helpController->openHelp((wxFrame *)this); } #line 414 "DkWxFrame.cpt" } void DkWxFrame::openHelpSectionByName(wxString const & name) { #line 422 "DkWxFrame.cpt" if (helpController) { helpController->openHelpSectionByName((wxFrame *)this, name); } #line 426 "DkWxFrame.cpt" } void DkWxFrame::openHelpSectionByNumber(int number) { #line 434 "DkWxFrame.cpt" if (helpController) { helpController->openHelpSectionByNumber((wxFrame *)this, number); } #line 438 "DkWxFrame.cpt" }