1
0

QtBiomeVisualiser: Moved the generator setup into a side-pane.

This commit is contained in:
madmaxoft 2014-09-22 18:26:35 +02:00
parent 5f823fd18d
commit 10c5d50566
5 changed files with 96 additions and 39 deletions

View File

@ -1,5 +1,5 @@
#include "Globals.h"
#include "GeneratorSetupDlg.h"
#include "GeneratorSetup.h"
#include <QLabel>
#include <QLineEdit>
#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);

View File

@ -11,21 +11,25 @@
class cIniFile;
typedef std::shared_ptr<cIniFile> 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<cIniFile> m_IniFile;
cIniFilePtr m_IniFile;
int m_Seed;

View File

@ -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<BioGenSource>(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<AnvilSource>(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<AnvilSource>(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;
}

View File

@ -3,6 +3,7 @@
#include <memory>
#include <QList>
#include <QMainWindow>
#include <QHBoxLayout>
#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<GeneratorSetupDlg> 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();
};

View File

@ -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 \