/* WARNING: This file was generated by dkct. 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 */ /* Copyright (C) 2011-2017, Dirk Krause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above opyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #line 113 "DkWxFrame.cpt" /** @file DkWxFrame.cpp Implementation of DkWxFrame. */ #include "DkWxFrame.h" #line 121 "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 157 "DkWxFrame.cpt" /* Initialize elements. */ pHelper = NULL; helpController = applicationHelp; /* Set elements. */ pHelper = applicationHelper; iInstances++; Connect(wxid, wxEVT_CLOSE_WINDOW, wxCloseEventHandler(DkWxFrame::OnClose)); #line 169 "DkWxFrame.cpt" } void DkWxFrame::OnClose(wxCloseEvent & event) { bool doClose = true; #line 177 "DkWxFrame.cpt" if(event.CanVeto()) { doClose = canClose(iInstances == 1); } else { canClose(iInstances == 1); } if(doClose) { #line 183 "DkWxFrame.cpt" /* For last instance save position. */ if(iInstances-- == 1) { #line 187 "DkWxFrame.cpt" savePosition(); } /* Process close event. */ event.Skip(); } else { #line 194 "DkWxFrame.cpt" /* Do not close the window. */ event.Veto(); } #line 199 "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 */ p[0] = p[1] = -1; p[2] = p[3] = p[4] = w = h = 0; pHelper->retrieveMultipleInts(kwSizePos, p); if ((0 > p[0]) || (0 > p[1])) { CentreOnScreen(); } else { scsz = wxGetDisplaySize(); x = p[0]; y = p[1]; GetSize(&w, &h); #if wxCHECK_VERSION(3,0,0) rs = 0; #else rs = 1; #endif rs = dk3app_get_pref_bool(pHelper->getApp(), kwRestoreFeatures[2], rs); if (0 != rs) { 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) { SetSize(x, y, w, h); } else { 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); } } } } #if VERSION_BEFORE_20160902 void DkWxFrame::restorePosition() { #if 1 int p[6]; size_t num; int w, h; int restoreFeature; #line 269 "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 272 "DkWxFrame.cpt" #line 273 "DkWxFrame.cpt" #line 274 "DkWxFrame.cpt" #line 275 "DkWxFrame.cpt" #line 276 "DkWxFrame.cpt" #line 277 "DkWxFrame.cpt" #line 278 "DkWxFrame.cpt" wxSize scsz = wxGetDisplaySize(); GetSize(&w, &h); #line 281 "DkWxFrame.cpt" #line 282 "DkWxFrame.cpt" #line 283 "DkWxFrame.cpt" if(w > p[2]) { p[2] = w; } if(h > p[3]) { p[3] = h; } #line 286 "DkWxFrame.cpt" #line 287 "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 299 "DkWxFrame.cpt" #line 300 "DkWxFrame.cpt" #line 301 "DkWxFrame.cpt" #line 302 "DkWxFrame.cpt" #line 303 "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 333 "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 353 "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 367 "DkWxFrame.cpt" #line 368 "DkWxFrame.cpt" #line 369 "DkWxFrame.cpt" #line 370 "DkWxFrame.cpt" pHelper->saveMultipleInts(kwSizePos, p); } #line 372 "DkWxFrame.cpt" } bool DkWxFrame::canClose(bool isLast) { #line 380 "DkWxFrame.cpt" return true; } void DkWxFrame::openHelp() { #line 389 "DkWxFrame.cpt" if(helpController) { helpController->openHelp((wxFrame *)this); } #line 392 "DkWxFrame.cpt" } void DkWxFrame::openHelpSectionByName(wxString const & name) { #line 400 "DkWxFrame.cpt" if (helpController) { helpController->openHelpSectionByName((wxFrame *)this, name); } #line 404 "DkWxFrame.cpt" } void DkWxFrame::openHelpSectionByNumber(int number) { #line 412 "DkWxFrame.cpt" if (helpController) { helpController->openHelpSectionByNumber((wxFrame *)this, number); } #line 416 "DkWxFrame.cpt" }