From 10c5d5056691f0a03798c7e9439138126da30b8a Mon Sep 17 00:00:00 2001 From: madmaxoft Date: Mon, 22 Sep 2014 18:26:35 +0200 Subject: [PATCH] QtBiomeVisualiser: Moved the generator setup into a side-pane. --- ...neratorSetupDlg.cpp => GeneratorSetup.cpp} | 22 ++++-- .../{GeneratorSetupDlg.h => GeneratorSetup.h} | 16 +++-- Tools/QtBiomeVisualiser/MainWindow.cpp | 69 +++++++++++++------ Tools/QtBiomeVisualiser/MainWindow.h | 24 +++++-- Tools/QtBiomeVisualiser/QtBiomeVisualiser.pro | 4 +- 5 files changed, 96 insertions(+), 39 deletions(-) rename Tools/QtBiomeVisualiser/{GeneratorSetupDlg.cpp => GeneratorSetup.cpp} (81%) rename Tools/QtBiomeVisualiser/{GeneratorSetupDlg.h => GeneratorSetup.h} (59%) diff --git a/Tools/QtBiomeVisualiser/GeneratorSetupDlg.cpp b/Tools/QtBiomeVisualiser/GeneratorSetup.cpp similarity index 81% rename from Tools/QtBiomeVisualiser/GeneratorSetupDlg.cpp rename to Tools/QtBiomeVisualiser/GeneratorSetup.cpp index e6037fa9b..d512d2b90 100644 --- a/Tools/QtBiomeVisualiser/GeneratorSetupDlg.cpp +++ b/Tools/QtBiomeVisualiser/GeneratorSetup.cpp @@ -1,5 +1,5 @@ #include "Globals.h" -#include "GeneratorSetupDlg.h" +#include "GeneratorSetup.h" #include #include #include "Generating/BioGen.h" @@ -23,13 +23,13 @@ static const QString s_GeneratorNames[] = -GeneratorSetupDlg::GeneratorSetupDlg(const AString & a_IniFileName, QWidget * a_Parent) : +GeneratorSetup::GeneratorSetup(const AString & a_IniFileName, QWidget * a_Parent) : super(a_Parent), m_IniFile(new cIniFile()) { // The generator name is in a separate form layout at the top, always present: m_cbGenerator = new QComboBox(); - m_cbGenerator->setMinimumWidth(300); + m_cbGenerator->setMinimumWidth(120); for (size_t i = 0; i < ARRAYCOUNT(s_GeneratorNames); i++) { m_cbGenerator->addItem(s_GeneratorNames[i]); @@ -44,6 +44,7 @@ GeneratorSetupDlg::GeneratorSetupDlg(const AString & a_IniFileName, QWidget * a_ m_MainLayout = new QVBoxLayout(); m_MainLayout->addLayout(nameLayout); m_MainLayout->addLayout(m_FormLayout); + m_MainLayout->addStretch(); setLayout(m_MainLayout); // Load the INI file, if specified, otherwise set defaults: @@ -68,7 +69,7 @@ GeneratorSetupDlg::GeneratorSetupDlg(const AString & a_IniFileName, QWidget * a_ -void GeneratorSetupDlg::generatorChanged(const QString & a_NewName) +void GeneratorSetup::generatorChanged(const QString & a_NewName) { // Clear the current contents of the form layout by assigning it to a stack temporary: { @@ -78,7 +79,7 @@ void GeneratorSetupDlg::generatorChanged(const QString & a_NewName) // Re-create the layout: m_FormLayout = new QFormLayout(); - m_MainLayout->addLayout(m_FormLayout); + m_MainLayout->insertLayout(1, m_FormLayout); // Recreate the INI file: m_IniFile->Clear(); @@ -97,7 +98,7 @@ void GeneratorSetupDlg::generatorChanged(const QString & a_NewName) -void GeneratorSetupDlg::updateFromIni() +void GeneratorSetup::updateFromIni() { int keyID = m_IniFile->FindKey("Generator"); if (keyID <= -1) @@ -105,6 +106,8 @@ void GeneratorSetupDlg::updateFromIni() return; } int numItems = m_IniFile->GetNumValues(keyID); + AString generatorName = m_IniFile->GetValue("Generator", "BiomeGen"); + size_t generatorNameLen = generatorName.length(); for (int i = 0; i < numItems; i++) { AString itemName = m_IniFile->GetValueName(keyID, i); @@ -114,6 +117,13 @@ void GeneratorSetupDlg::updateFromIni() // These special cases are not to be added continue; } + + // Remove the generator name prefix from the item name, for clarity purposes: + if (NoCaseCompare(itemName.substr(0, generatorNameLen), generatorName) == 0) + { + itemName.erase(0, generatorNameLen); + } + QLineEdit * edit = new QLineEdit(); edit->setText(QString::fromStdString(itemValue)); m_FormLayout->addRow(new QLabel(QString::fromStdString(itemName)), edit); diff --git a/Tools/QtBiomeVisualiser/GeneratorSetupDlg.h b/Tools/QtBiomeVisualiser/GeneratorSetup.h similarity index 59% rename from Tools/QtBiomeVisualiser/GeneratorSetupDlg.h rename to Tools/QtBiomeVisualiser/GeneratorSetup.h index d7070e331..0594e1998 100644 --- a/Tools/QtBiomeVisualiser/GeneratorSetupDlg.h +++ b/Tools/QtBiomeVisualiser/GeneratorSetup.h @@ -11,21 +11,25 @@ class cIniFile; +typedef std::shared_ptr cIniFilePtr; -class GeneratorSetupDlg : - public QDialog +class GeneratorSetup : + public QWidget { - typedef QDialog super; + typedef QWidget super; Q_OBJECT public: - /** Creates the dialog and loads the contents of the INI file, if not empty. */ - explicit GeneratorSetupDlg(const std::string & a_IniFileName, QWidget * parent = nullptr); + /** Creates the widget and loads the contents of the INI file, if not empty. */ + explicit GeneratorSetup(const std::string & a_IniFileName, QWidget * parent = nullptr); + + /** Returns the cIniFile instance that is being edited by this widget. */ + cIniFilePtr getIniFile() { return m_IniFile; } signals: @@ -39,7 +43,7 @@ protected: QVBoxLayout * m_MainLayout; QFormLayout * m_FormLayout; - std::unique_ptr m_IniFile; + cIniFilePtr m_IniFile; int m_Seed; diff --git a/Tools/QtBiomeVisualiser/MainWindow.cpp b/Tools/QtBiomeVisualiser/MainWindow.cpp index d2c1ae2c1..f9915901d 100644 --- a/Tools/QtBiomeVisualiser/MainWindow.cpp +++ b/Tools/QtBiomeVisualiser/MainWindow.cpp @@ -12,19 +12,27 @@ #include "Generating/BioGen.h" #include "StringCompression.h" #include "WorldStorage/FastNBT.h" -#include "GeneratorSetupDlg.h" +#include "GeneratorSetup.h" MainWindow::MainWindow(QWidget * parent) : - QMainWindow(parent) + QMainWindow(parent), + m_GeneratorSetup(nullptr), + m_LineSeparator(nullptr) { initMinecraftPath(); - m_BiomeView = new BiomeView(this); - setCentralWidget(m_BiomeView); + m_BiomeView = new BiomeView(); + m_MainLayout = new QHBoxLayout(); + m_MainLayout->addWidget(m_BiomeView); + m_MainLayout->setMenuBar(menuBar()); + m_MainLayout->setMargin(0); + QWidget * central = new QWidget(); + central->setLayout(m_MainLayout); + setCentralWidget(central); createActions(); createMenus(); @@ -48,9 +56,7 @@ void MainWindow::newGenerator() // TODO // (Re-)open the generator setup dialog: - m_GeneratorSetupDlg.reset(new GeneratorSetupDlg("")); - m_GeneratorSetupDlg->show(); - m_GeneratorSetupDlg->raise(); + openGeneratorSetup(""); // TODO } @@ -69,9 +75,7 @@ void MainWindow::openGenerator() } // (Re-)open the generator setup dialog: - m_GeneratorSetupDlg.reset(new GeneratorSetupDlg(worldIni.toStdString())); - m_GeneratorSetupDlg->show(); - m_GeneratorSetupDlg->raise(); + openGeneratorSetup(worldIni.toStdString()); // Set the chunk source: m_BiomeView->setChunkSource(std::shared_ptr(new BioGenSource(worldIni))); @@ -92,11 +96,7 @@ void MainWindow::openWorld() } // Remove the generator setup dialog, if open: - if (m_GeneratorSetupDlg.get() != nullptr) - { - m_GeneratorSetupDlg->hide(); - m_GeneratorSetupDlg.reset(nullptr); - } + closeGeneratorSetup(); // Set the chunk source: m_BiomeView->setChunkSource(std::shared_ptr(new AnvilSource(regionFolder))); @@ -117,11 +117,7 @@ void MainWindow::openVanillaWorld() } // Remove the generator setup dialog, if open: - if (m_GeneratorSetupDlg.get() != nullptr) - { - m_GeneratorSetupDlg->hide(); - m_GeneratorSetupDlg.reset(nullptr); - } + closeGeneratorSetup(); // Set the chunk source: m_BiomeView->setChunkSource(std::shared_ptr(new AnvilSource(action->data().toString()))); @@ -276,3 +272,36 @@ QString MainWindow::getWorldName(const AString & a_Path) + +void MainWindow::openGeneratorSetup(const AString & a_IniFileName) +{ + // Close any previous editor: + closeGeneratorSetup(); + + // Open up a new editor: + m_GeneratorSetup = new GeneratorSetup(a_IniFileName); + m_LineSeparator = new QWidget(); + m_LineSeparator->setFixedWidth(2); + m_LineSeparator->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); + m_LineSeparator->setStyleSheet(QString("background-color: #c0c0c0;")); + m_MainLayout->addWidget(m_LineSeparator); + m_MainLayout->addWidget(m_GeneratorSetup); +} + + + + + +void MainWindow::closeGeneratorSetup() +{ + delete m_MainLayout->takeAt(2); + delete m_MainLayout->takeAt(1); + delete m_GeneratorSetup; + delete m_LineSeparator; + m_GeneratorSetup = nullptr; + m_LineSeparator = nullptr; +} + + + + diff --git a/Tools/QtBiomeVisualiser/MainWindow.h b/Tools/QtBiomeVisualiser/MainWindow.h index 840e01b0f..6490a937f 100644 --- a/Tools/QtBiomeVisualiser/MainWindow.h +++ b/Tools/QtBiomeVisualiser/MainWindow.h @@ -3,6 +3,7 @@ #include #include #include +#include #include "BiomeView.h" @@ -10,7 +11,7 @@ // fwd: -class GeneratorSetupDlg; +class GeneratorSetup; @@ -21,8 +22,6 @@ class MainWindow : { Q_OBJECT - BiomeView * m_BiomeView; - public: MainWindow(QWidget * parent = nullptr); ~MainWindow(); @@ -54,8 +53,17 @@ protected: /** Path to the vanilla folder. */ QString m_MinecraftPath; - /** The dialog for setting up the generator. */ - std::unique_ptr m_GeneratorSetupDlg; + /** The pane for setting up the generator, available when visualising a generator. */ + GeneratorSetup * m_GeneratorSetup; + + /** The main biome display widget. */ + BiomeView * m_BiomeView; + + /** The layout for the window. */ + QHBoxLayout * m_MainLayout; + + /** The separator line between biome view and generator setup. */ + QWidget * m_LineSeparator; /** Initializes the m_MinecraftPath based on the proper MC path */ @@ -73,6 +81,12 @@ protected: /** Returns the name of the vanilla world in the specified path. Reads the level.dat file for the name. Returns an empty string on failure. */ QString getWorldName(const AString & a_Path); + + /** Opens the generator setup pane, if not already open, and loads the specified INI file to it. */ + void openGeneratorSetup(const AString & a_IniFileName); + + /** Closes and destroys the generator setup pane, if there is one. */ + void closeGeneratorSetup(); }; diff --git a/Tools/QtBiomeVisualiser/QtBiomeVisualiser.pro b/Tools/QtBiomeVisualiser/QtBiomeVisualiser.pro index 7171562bb..2ed1be719 100644 --- a/Tools/QtBiomeVisualiser/QtBiomeVisualiser.pro +++ b/Tools/QtBiomeVisualiser/QtBiomeVisualiser.pro @@ -47,7 +47,7 @@ SOURCES += main.cpp\ ../../lib/zlib/trees.c \ ../../lib/zlib/uncompr.c \ ../../lib/zlib/zutil.c \ - GeneratorSetupDlg.cpp + GeneratorSetup.cpp HEADERS += MainWindow.h \ Globals.h \ @@ -80,7 +80,7 @@ HEADERS += MainWindow.h \ ../../lib/zlib/zconf.h \ ../../lib/zlib/zlib.h \ ../../lib/zlib/zutil.h \ - GeneratorSetupDlg.h + GeneratorSetup.h INCLUDEPATH += $$_PRO_FILE_PWD_ \ $$_PRO_FILE_PWD_/../../src \