Line data Source code
1 : /****************************************************************************/ 2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo 3 : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others. 4 : // This program and the accompanying materials are made available under the 5 : // terms of the Eclipse Public License 2.0 which is available at 6 : // https://www.eclipse.org/legal/epl-2.0/ 7 : // This Source Code may also be made available under the following Secondary 8 : // Licenses when the conditions for such availability set forth in the Eclipse 9 : // Public License 2.0 are satisfied: GNU General Public License, version 2 10 : // or later which is available at 11 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html 12 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later 13 : /****************************************************************************/ 14 : /// @file GUIPersistentWindowPos.cpp 15 : /// @author Daniel Krajzewicz 16 : /// @author Jakob Erdmann 17 : /// @author Michael Behrisch 18 : /// @date Thu, 11.03.2004 19 : /// 20 : // Editor for the list of chosen objects 21 : /****************************************************************************/ 22 : #include <config.h> 23 : 24 : #include <string> 25 : #include <vector> 26 : #include <iostream> 27 : #include <fstream> 28 : #include <utils/common/MsgHandler.h> 29 : #include <utils/gui/windows/GUIAppEnum.h> 30 : #include <utils/gui/globjects/GUIGlObject.h> 31 : #include <utils/foxtools/MFXUtils.h> 32 : #include "GUIPersistentWindowPos.h" 33 : #include <utils/gui/div/GUIGlobalSelection.h> 34 : #include <utils/gui/globjects/GUIGlObjectStorage.h> 35 : #include <utils/gui/div/GUIIOGlobals.h> 36 : #include <utils/gui/div/GUIDesigns.h> 37 : #include <utils/gui/windows/GUIMainWindow.h> 38 : #include <utils/gui/images/GUIIconSubSys.h> 39 : 40 : 41 : 42 : // =========================================================================== 43 : // method definitions 44 : // =========================================================================== 45 : 46 0 : GUIPersistentWindowPos::GUIPersistentWindowPos(FXWindow* parent, const std::string& name, bool storeSize, 47 : int x, int y, 48 : int width, int height, 49 0 : int minSize, int minTitlebarHeight) : 50 0 : myParent(parent), 51 0 : myWindowName(name), 52 0 : myStoreSize(storeSize), 53 0 : myDefaultX(x), 54 0 : myDefaultY(y), 55 0 : myDefaultWidth(width), 56 0 : myDefaultHeight(height), 57 0 : myMinSize(minSize), 58 0 : myMinTitlebarHeight(minTitlebarHeight) 59 0 : {} 60 : 61 0 : GUIPersistentWindowPos::GUIPersistentWindowPos() : 62 0 : myParent(nullptr) 63 0 : { } 64 : 65 0 : GUIPersistentWindowPos::~GUIPersistentWindowPos() { 66 0 : saveWindowPos(); 67 0 : } 68 : 69 : 70 : void 71 0 : GUIPersistentWindowPos::saveWindowPos() { 72 0 : if (myParent != nullptr) { 73 : FXRegistry& reg = myParent->getApp()->reg(); 74 0 : reg.writeIntEntry(myWindowName.c_str(), "x", myParent->getX()); 75 0 : reg.writeIntEntry(myWindowName.c_str(), "y", myParent->getY()); 76 0 : if (myStoreSize) { 77 0 : reg.writeIntEntry(myWindowName.c_str(), "width", myParent->getWidth()); 78 0 : reg.writeIntEntry(myWindowName.c_str(), "height", myParent->getHeight()); 79 : } 80 : } 81 0 : } 82 : 83 : void 84 0 : GUIPersistentWindowPos::loadWindowPos() { 85 0 : if (myParent != nullptr) { 86 : FXRegistry& reg = myParent->getApp()->reg(); 87 : // ensure window is visible after switching screen resolutions 88 0 : myParent->setX(MAX2(0, MIN2(reg.readIntEntry(myWindowName.c_str(), "x", myDefaultX), 89 0 : myParent->getApp()->getRootWindow()->getWidth() - myMinSize))); 90 0 : myParent->setY(MAX2(myMinTitlebarHeight, 91 : MIN2(reg.readIntEntry(myWindowName.c_str(), "y", myDefaultY), 92 0 : myParent->getApp()->getRootWindow()->getHeight() - myMinSize))); 93 0 : if (myStoreSize) { 94 0 : myParent->setWidth(MAX2(reg.readIntEntry(myWindowName.c_str(), "width", myDefaultWidth), myMinSize)); 95 0 : myParent->setHeight(MAX2(reg.readIntEntry(myWindowName.c_str(), "height", myDefaultHeight), myMinSize)); 96 : } 97 : } 98 0 : } 99 : 100 : /****************************************************************************/