From d4bf14fd77d24fbf1044badb5ed35ab3fb2cd51a Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sat, 5 Dec 2009 21:10:08 +0000 Subject: [PATCH] Remove FLTK dependency --- CMakeLists.txt | 1 - include/IWindow.hpp | 6 - include/ModelViewer.hpp | 45 ------ include/NewMapDialog.hpp | 30 ---- src/Editor.cpp | 176 +---------------------- src/FLTKWindow.cpp | 303 --------------------------------------- src/ModelViewer.cpp | 93 ------------ src/NewMapDialog.cpp | 66 --------- 8 files changed, 4 insertions(+), 716 deletions(-) delete mode 100644 include/ModelViewer.hpp delete mode 100644 include/NewMapDialog.hpp delete mode 100644 src/FLTKWindow.cpp delete mode 100644 src/ModelViewer.cpp delete mode 100644 src/NewMapDialog.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index ecedd35..9397480 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,6 @@ endif (NOT WIN32) find_package (FreeType REQUIRED) find_package (Xerces REQUIRED) -find_package (FLTK REQUIRED) include_directories (${CMAKE_SOURCE_DIR}/include) include_directories (${CMAKE_SOURCE_DIR}/src) diff --git a/include/IWindow.hpp b/include/IWindow.hpp index 47bffea..c50c383 100644 --- a/include/IWindow.hpp +++ b/include/IWindow.hpp @@ -32,17 +32,11 @@ public: virtual void takeScreenShot() = 0; virtual int width() const = 0; virtual int height() const = 0; - - // Ask the window to repaint the screen - // This is ignored by some implementations (e.g. SDL) - virtual void redrawHint() = 0; }; typedef shared_ptr IWindowPtr; // Implementors IWindowPtr makeSDLWindow(); -IWindowPtr makeFLTKWindow(const string& aTitle, - function addControls); #endif diff --git a/include/ModelViewer.hpp b/include/ModelViewer.hpp deleted file mode 100644 index 851e67e..0000000 --- a/include/ModelViewer.hpp +++ /dev/null @@ -1,45 +0,0 @@ -// -// Copyright (C) 2009 Nick Gasson -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// - -#ifndef INC_MODELVIEWER_HPP -#define INC_MODELVIEWER_HPP - -#include "Platform.hpp" -#include "IModel.hpp" - -#include -#include - -// FLTK widget for displaying models -class ModelViewer : public Fl_Gl_Window { -public: - ModelViewer(int x, int y, int w, int h); - ~ModelViewer(); - - void setModel(IModelPtr aModel); - void rotate(float anAngle); - float angle() const { return myRotation; } - - // Fl_Gl_Window interface - void draw(); - int handle(int anEvent); -private: - IModelPtr myModel; - float myRotation; -}; - -#endif diff --git a/include/NewMapDialog.hpp b/include/NewMapDialog.hpp deleted file mode 100644 index 9117350..0000000 --- a/include/NewMapDialog.hpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// Copyright (C) 2009 Nick Gasson -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// - -#ifndef INC_NEW_MAP_DIALOG_HPP -#define INC_NEW_MAP_DIALOG_HPP - -#include "Platform.hpp" -#include "IMap.hpp" - -enum NewMapDlgResult { OK, CANCEL }; - -typedef function NewMapDlgCallback; - -void showNewMapDialog(NewMapDlgCallback callback); - -#endif diff --git a/src/Editor.cpp b/src/Editor.cpp index 9979efd..41324f1 100644 --- a/src/Editor.cpp +++ b/src/Editor.cpp @@ -21,9 +21,7 @@ #include "IMap.hpp" #include "Maths.hpp" #include "ILight.hpp" -#include "ModelViewer.hpp" #include "IBuilding.hpp" -#include "NewMapDialog.hpp" #include "gui/ILayout.hpp" #include "IBuildingPicker.hpp" @@ -32,13 +30,6 @@ #include -#include -#include -#include -#include -#include -#include - // Concrete editor class class Editor : public IScreen { public: @@ -95,165 +86,12 @@ private: IBuildingPickerPtr buildingPicker; }; -// The FLTK toolbox -namespace { - void changeTool(Fl_Widget* aWidget, Editor::Tool aTool); - - Fl_Menu_Item theTools[] = { - { "Track", 0, (Fl_Callback*)changeTool, (void*)Editor::TRACK_TOOL }, - { "Raise", 0, (Fl_Callback*)changeTool, (void*)Editor::RAISE_TOOL }, - { "Lower", 0, (Fl_Callback*)changeTool, (void*)Editor::LOWER_TOOL }, - { "Level", 0, (Fl_Callback*)changeTool, (void*)Editor::LEVEL_TOOL }, - { "Delete", 0, (Fl_Callback*)changeTool, (void*)Editor::DELETE_TOOL }, - { "Start", 0, (Fl_Callback*)changeTool, (void*)Editor::START_TOOL }, - { "Station", 0, (Fl_Callback*)changeTool, (void*)Editor::STATION_TOOL }, - { "Building", 0, (Fl_Callback*)changeTool, (void*)Editor::BUILDING_TOOL }, - { 0 } - }; - - Fl_Menu_Button* theToolMenu; - Fl_Button* theSaveButton; - Fl_Button* theNewButton; - Fl_Button* theBldNextButton; - Fl_Button* theBldPrevButton; - Fl_Button* theBldRotateButton; - ModelViewer* theModelViewer; - - Editor* theEditor = NULL; - - // Data related to the building picking dialog - class BuildingPicker { - public: - BuildingPicker() - { - enumResources("buildings", myBuildingList); - - if (myBuildingList.empty()) - warn() << "No buildings found"; - else { - myBuildingIt = myBuildingList.begin(); - myActiveBuilding = loadBuilding((*myBuildingIt)->name()); - } - } - - void switchTo() - { - theModelViewer->setModel(myActiveBuilding->model()); - } - - void next() - { - if (++myBuildingIt == myBuildingList.end()) - myBuildingIt = myBuildingList.begin(); - - myActiveBuilding = loadBuilding((*myBuildingIt)->name()); - switchTo(); - } - - void prev() - { - if (myBuildingIt == myBuildingList.begin()) - myBuildingIt = myBuildingList.end(); - myBuildingIt--; - - myActiveBuilding = loadBuilding((*myBuildingIt)->name()); - switchTo(); - } - - IBuildingPtr active() - { - return myActiveBuilding; - } - - private: - ResourceList myBuildingList; - ResourceList::const_iterator myBuildingIt; - IBuildingPtr myActiveBuilding; - } *theBuildingPicker; - - void newMapDialogCallback(Editor* anEditor, IMapPtr aMap, - NewMapDlgResult aResult) - { - if (aResult == OK) - anEditor->setMap(aMap); - else if (!anEditor->getMap()) - throw runtime_error("No map to edit!"); - } - - void changeTool(Fl_Widget* aWidget, Editor::Tool aTool) - { - theToolMenu->label(theToolMenu->text()); - theEditor->setTool(aTool); - - if (aTool == Editor::BUILDING_TOOL) - theBuildingPicker->switchTo(); - } - - void onSaveClick(Fl_Widget* aWidget) - { - theEditor->getMap()->save(); - } - - void onNewClick(Fl_Widget* aWidget) - { - using namespace placeholders; - - showNewMapDialog(bind(&newMapDialogCallback, theEditor, _1, _2)); - } - - void onBldRotateClick(Fl_Widget* aWidget) - { - theModelViewer->rotate(90.0f); - } - - void onBldNextClick(Fl_Widget* aWidget) - { - theBuildingPicker->next(); - } - - void onBldPrevClick(Fl_Widget* aWidget) - { - theBuildingPicker->prev(); - } -} - -// Add the editor panel to the FLTK window -void addEditorGUI() -{ - const int panelW = 180; - - theToolMenu = new Fl_Menu_Button(0, 0, panelW, 32); - theToolMenu->copy(theTools); - theToolMenu->label("Track"); - - theModelViewer = new ModelViewer(0, 40, panelW, 200); - - theBldPrevButton = new Fl_Button(0, 240, 60, 25, "Prev"); - theBldPrevButton->callback(onBldPrevClick); - - theBldNextButton = new Fl_Button(60, 240, 60, 25, "Next"); - theBldNextButton->callback(onBldNextClick); - - theBldRotateButton = new Fl_Button(120, 240, 60, 25, "Rotate"); - theBldRotateButton->callback(onBldRotateClick); - - //theBuildingPicker = new BuildingPicker; - - theSaveButton = new Fl_Button(0, 273, panelW, 25, "Save"); - theSaveButton->callback(onSaveClick); - - theNewButton = new Fl_Button(0, 300, panelW, 25, "New"); - theNewButton->callback(onNewClick); -} - Editor::Editor(IMapPtr aMap) : map(aMap), myPosition(4.5, -17.5, -21.5), myTool(TRACK_TOOL), amScrolling(false), amDragging(false) { mySun = makeSunLight(); - theEditor = this; - buildGUI(); if (map) { @@ -623,8 +461,6 @@ void Editor::onMouseMove(IPickBufferPtr aPickBuffer, int x, int y, myPosition.x += yrel * speed; myPosition.z -= yrel * speed; } - - getGameWindow()->redrawHint(); } void Editor::onMouseClick(IPickBufferPtr aPickBuffer, int x, int y, @@ -660,8 +496,6 @@ void Editor::onMouseClick(IPickBufferPtr aPickBuffer, int x, int y, else if (aButton == MOUSE_WHEEL_DOWN) { myPosition.y += 0.5; } - - getGameWindow()->redrawHint(); } void Editor::onMouseRelease(IPickBufferPtr aPickBuffer, int x, int y, @@ -692,8 +526,8 @@ void Editor::onMouseRelease(IPickBufferPtr aPickBuffer, int x, int y, map->extendStation(dragBegin, dragEnd); break; case BUILDING_TOOL: - map->placeBuilding(dragBegin, theBuildingPicker->active(), - theModelViewer->angle()); + //map->placeBuilding(dragBegin, theBuildingPicker->active(), + // theModelViewer->angle()); break; } @@ -702,8 +536,6 @@ void Editor::onMouseRelease(IPickBufferPtr aPickBuffer, int x, int y, else if (amScrolling) { amScrolling = false; } - - getGameWindow()->redrawHint(); } void Editor::onKeyUp(SDLKey aKey) @@ -733,9 +565,9 @@ IScreenPtr makeEditorScreen(const string& aMapName) { using namespace placeholders; - Editor* editor = new Editor(IMapPtr()); + //Editor* editor = new Editor(IMapPtr()); - showNewMapDialog(bind(&newMapDialogCallback, editor, _1, _2)); + //showNewMapDialog(bind(&newMapDialogCallback, editor, _1, _2)); return IScreenPtr(); } diff --git a/src/FLTKWindow.cpp b/src/FLTKWindow.cpp deleted file mode 100644 index ea15960..0000000 --- a/src/FLTKWindow.cpp +++ /dev/null @@ -1,303 +0,0 @@ -// -// Copyright (C) 2009 Nick Gasson -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// - -#include "IWindow.hpp" -#include "ILogger.hpp" -#include "IPickBuffer.hpp" -#include "OpenGLHelper.hpp" - -#include -#include -#include -#include -#include -#include - -// An OpenGL window for the editor -class FLTKWindow : public IWindow, public IGraphics, - public Fl_Gl_Window, public IPickBuffer, - public enable_shared_from_this { -public: - FLTKWindow(int x, int y, int w, int h); - ~FLTKWindow(); - - // IWindow interface - void run(IScreenPtr aScreen); - void switchScreen(IScreenPtr aScreen); - void quit(); - void takeScreenShot(); - int width() const; - int height() const; - void redrawHint(); - - // IGraphics interface - bool cuboidInViewFrustum(float x, float y, float z, - float sizeX, float sizeY, float sizeZ); - bool cubeInViewFrustum(float x, float y, float z, float size); - bool pointInViewFrustum(float x, float y, float z); - void setCamera(const Vector& aPos, - const Vector& aRotation); - void lookAt(const Vector anEyePoint, - const Vector aTargetPoint); - - // Fl_Gl_Window interface - void draw(); - int handle(int anEvent); - - // IPickBuffer inteface - IGraphicsPtr beginPick(int x, int y); - unsigned endPick(); -private: - void checkValid(); - - IScreenPtr myScreen; - Frustum myViewFrustum; - - // Picking data - static const int SELECT_BUFFER_SZ = 128; - GLuint mySelectBuffer[SELECT_BUFFER_SZ]; -}; - -FLTKWindow::FLTKWindow(int x, int y, int w, int h) - : Fl_Gl_Window(x, y, w, h) -{ - -} - -FLTKWindow::~FLTKWindow() -{ - -} - -void FLTKWindow::redrawHint() -{ - redraw(); -} - -void FLTKWindow::checkValid() -{ - if (!valid()) { - initGL(); - resizeGLScene(shared_from_this()); - - valid(1); - } -} - -void FLTKWindow::draw() -{ - checkValid(); - - if (myScreen) - drawGLScene(shared_from_this(), shared_from_this(), myScreen); -} - -int FLTKWindow::handle(int anEvent) -{ - static int lastX = 0, lastY = 0; - - int dx = 0, dy = 0; - if (anEvent == FL_PUSH || FL_DRAG || FL_RELEASE || FL_MOVE) { - dx = Fl::event_x() - lastX; - dy = Fl::event_y() - lastY; - lastX = Fl::event_x(); - lastY = Fl::event_y(); - } - - MouseButton btn; - if (Fl::event_button1()) - btn = MOUSE_LEFT; - else if (Fl::event_button2()) - btn = MOUSE_MIDDLE; - else if (Fl::event_button3()) - btn = MOUSE_RIGHT; - else - btn = MOUSE_UNKNOWN; - - // Do not call any OpenGL drawing functions in here as the context - // won't be set up correctly - switch (anEvent) { - case FL_PUSH: - // Mouse down event - // Position in Fl::event_x() and Fl::event_y() - myScreen->onMouseClick(shared_from_this(), Fl::event_x(), - Fl::event_y(), btn); - return 1; - case FL_DRAG: - // Mouse moved while pressed down - myScreen->onMouseMove(shared_from_this(), lastX, lastY, dx, dy); - return 1; - case FL_RELEASE: - // Mouse up event - myScreen->onMouseRelease(shared_from_this(), Fl::event_x(), - Fl::event_y(), btn); - return 1; - case FL_ENTER: - redraw(); - return 1; - case FL_FOCUS: - case FL_UNFOCUS: - // Return 1 if we want keyboard events - return 1; - case FL_KEYBOARD: - // Key in Fl::event_key() and ASCII in Fl::event_text() - // Return 1 if we use this event - return 1; - case FL_SHORTCUT: - // Shortcut key pressed - return 1; - default: - // Do not handle this event - return Fl_Gl_Window::handle(anEvent); - } -} - -void FLTKWindow::run(IScreenPtr aScreen) -{ - switchScreen(aScreen); - - show(); - - Fl::run(); -} - -void FLTKWindow::switchScreen(IScreenPtr aScreen) -{ - myScreen = aScreen; -} - -void FLTKWindow::quit() -{ - error() << "FLTKWindow::quit not implemented"; -} - -void FLTKWindow::takeScreenShot() -{ - error() << "FLTKWindow::takeScreenShot not implemented"; -} - -int FLTKWindow::width() const -{ - return Fl_Gl_Window::w(); -} - -int FLTKWindow::height() const -{ - return Fl_Gl_Window::h(); -} - -// Set up OpenGL to pick out objects -IGraphicsPtr FLTKWindow::beginPick(int x, int y) -{ - ::beginPick(shared_from_this(), mySelectBuffer, x, y); - return shared_from_this(); -} - -// Finish picking and return the name of the clicked object or zero -// It's *very* important that this is called exactly once for every -// beginPick or things will get very messed up -unsigned FLTKWindow::endPick() -{ - return ::endPick(mySelectBuffer); -} - -// Called to set the camera position -void FLTKWindow::setCamera(const Vector& aPos, - const Vector& aRotation) -{ - glRotatef(aRotation.x, 1.0f, 0.0f, 0.0f); - glRotatef(aRotation.y, 0.0f, 1.0f, 0.0f); - glRotatef(aRotation.z, 0.0f, 0.0f, 1.0f); - glTranslatef(aPos.x, aPos.y, aPos.z); - - myViewFrustum = getViewFrustum(); -} - -// A wrapper around gluLookAt -void FLTKWindow::lookAt(const Vector anEyePoint, - const Vector aTargetPoint) -{ - gluLookAt(anEyePoint.x, anEyePoint.y, anEyePoint.z, - aTargetPoint.x, aTargetPoint.y, aTargetPoint.z, - 0, 1, 0); - - myViewFrustum = getViewFrustum(); -} - -// Intersect a cuboid with the current view frustum -bool FLTKWindow::cuboidInViewFrustum(float x, float y, float z, - float sizeX, float sizeY, float sizeZ) -{ - return myViewFrustum.cuboidInFrustum(x, y, z, sizeX, sizeY, sizeZ); -} - -// Intersect a cube with the current view frustum -bool FLTKWindow::cubeInViewFrustum(float x, float y, float z, float size) -{ - return myViewFrustum.cubeInFrustum(x, y, z, size); -} - -// True if the point is contained within the view frustum -bool FLTKWindow::pointInViewFrustum(float x, float y, float z) -{ - return myViewFrustum.pointInFrustum(x, y, z); -} - -// The main application window that contains the actual -// FLTKWindow and is hidden from the rest of the application -class FLTKAppWindow : public Fl_Window { -public: - FLTKAppWindow(const string& aTitle, function addControls); - - FLTKWindow* glWindow() const { return myGLWindow; } -private: - FLTKWindow* myGLWindow; - Fl_Window* myContainer; -}; - -FLTKAppWindow::FLTKAppWindow(const string& aTitle, - function addControls) - : Fl_Window(980, 600, aTitle.c_str()) -{ - size_range(300, 240); - resizable(this); - - const int panelW = 180; - myGLWindow = new FLTKWindow(0, 0, w()-panelW, h()); - myContainer = new Fl_Window(w()-panelW, 0, panelW, h()); - end(); - - myContainer->begin(); - addControls(); - myContainer->end(); - - // Bit of a hack to get into a state where we can use OpenGL - show(); - Fl::wait(); - - myGLWindow->make_current(); - - printGLVersion(); -} - -IWindowPtr makeFLTKWindow(const string& aTitle, - function addControls) -{ - FLTKAppWindow* appWindow = new FLTKAppWindow(aTitle, addControls); - - return IWindowPtr(appWindow->glWindow()); -} diff --git a/src/ModelViewer.cpp b/src/ModelViewer.cpp deleted file mode 100644 index fb9077c..0000000 --- a/src/ModelViewer.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// -// Copyright (C) 2009 Nick Gasson -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// - -#include "ModelViewer.hpp" -#include "ILight.hpp" - -#include - -#include - -#include -#include - -using namespace boost; - -ModelViewer::ModelViewer(int x, int y, int w, int h) - : Fl_Gl_Window(x, y, w, h), myRotation(0.0f) -{ - -} - -ModelViewer::~ModelViewer() -{ - -} - -void ModelViewer::rotate(float anAngle) -{ - myRotation += anAngle; - redraw(); -} - -void ModelViewer::draw() -{ - static ILightPtr sun = makeSunLight(); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - const GLfloat wf = static_cast(w()); - const GLfloat hf = static_cast(h()); - gluPerspective(45.0f, wf/hf, 0.1f, 50.0f); - - glMatrixMode(GL_MODELVIEW); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glLoadIdentity(); - - glEnable(GL_LIGHTING); - glEnable(GL_DEPTH_TEST); - - sun->apply(); - - if (myModel) { - glRotatef(45.0f, 1.0f, 0.0f, 0.0f); - glRotatef(45.0f, 0.0f, 1.0f, 0.0f); - glTranslatef(1.5f, -2.6f, -1.5f); - glColor3f(1.0f, 1.0f, 1.0f); - glRotatef(myRotation, 0.0f, 1.0f, 0.0f); - myModel->render(); - } - - GLenum error = glGetError(); - if (error != GL_NO_ERROR) { - throw runtime_error - ("OpenGL error: " + lexical_cast(gluErrorString(error))); - } -} - -int ModelViewer::handle(int anEvent) -{ - return Fl_Gl_Window::handle(anEvent); -} - -void ModelViewer::setModel(IModelPtr aModel) -{ - myModel = aModel; - - Fl_Gl_Window::redraw(); -} diff --git a/src/NewMapDialog.cpp b/src/NewMapDialog.cpp deleted file mode 100644 index 98bc30c..0000000 --- a/src/NewMapDialog.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// -// Copyright (C) 2009 Nick Gasson -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// - -#include "NewMapDialog.hpp" - -#include - -#include -#include -#include -#include - -namespace { - Fl_Window* theDlgWindow = NULL; - Fl_Button* theCancelBtn; - Fl_Button* theOKBtn; - Fl_Input* theNameInput; - - NewMapDlgCallback theCallback; - - void onCancelClick(Fl_Widget* aWidget) - { - theCallback(IMapPtr(), CANCEL); - } - - void onOKClick(Fl_Widget* aWidget) - { - theCallback(makeEmptyMap("yah", 64, 64), OK); - } -} - -void showNewMapDialog(NewMapDlgCallback aCallback) -{ - if (theDlgWindow == NULL) { - theDlgWindow = new Fl_Window(300, 150, "New Map"); - - theNameInput = new Fl_Input(50, 10, 100, 25, "Name"); - - theCancelBtn = new Fl_Button(10, 100, 100, 25, "Cancel"); - theCancelBtn->callback(onCancelClick); - - theOKBtn = new Fl_Button(120, 100, 50, 25, "OK"); - theOKBtn->callback(onOKClick); - - theDlgWindow->set_modal(); - } - - theCallback = aCallback; - - theDlgWindow->hotspot(theDlgWindow); - theDlgWindow->show(); -} -- 2.39.2