2
0
Laserlicht 4 сар өмнө
parent
commit
ef2227251c

+ 3 - 0
mapeditor/CMakeLists.txt

@@ -60,6 +60,7 @@ if(ENABLE_TEMPLATE_EDITOR)
 		templateeditor/terrainselector.cpp
 		templateeditor/factionselector.cpp
 		templateeditor/mineselector.cpp
+		templateeditor/treasureselector.cpp
 	)
 endif()
 
@@ -126,6 +127,7 @@ if(ENABLE_TEMPLATE_EDITOR)
 		templateeditor/terrainselector.h
 		templateeditor/factionselector.h
 		templateeditor/mineselector.h
+		templateeditor/treasureselector.h
 	)
 endif()
 
@@ -170,6 +172,7 @@ if(ENABLE_TEMPLATE_EDITOR)
 		templateeditor/terrainselector.ui
 		templateeditor/factionselector.ui
 		templateeditor/mineselector.ui
+		templateeditor/treasureselector.ui
 	)
 endif()
 

+ 2 - 2
mapeditor/templateeditor/templateeditor.cpp

@@ -15,6 +15,7 @@
 #include "terrainselector.h"
 #include "factionselector.h"
 #include "mineselector.h"
+#include "treasureselector.h"
 #include "GeometryAlgorithm.h"
 
 #include "../helper.h"
@@ -1047,8 +1048,7 @@ void TemplateEditor::on_pushButtonBannedMonsters_clicked()
 
 void TemplateEditor::on_pushButtonTreasure_clicked()
 {
-	//TODO: Implement dialog
-	QMessageBox::critical(this, tr("Error"), tr("Not implemented yet!"));
+	TreasureSelector::showTreasureSelector(templates[selectedTemplate]->getZones().at(selectedZone)->treasureInfo);
 }
 
 void TemplateEditor::on_pushButtonMines_clicked()

+ 102 - 0
mapeditor/templateeditor/treasureselector.cpp

@@ -0,0 +1,102 @@
+/*
+ * treasureselector.cpp, part of VCMI engine
+ *
+ * Authors: listed in file AUTHORS in main folder
+ *
+ * License: GNU General Public License v2.0 or later
+ * Full text of license available in license.txt file, in main folder
+ *
+ */
+
+#include "StdInc.h"
+
+#include "treasureselector.h"
+#include "ui_treasureselector.h"
+
+#include "../../lib/GameLibrary.h"
+#include "../../lib/texts/CGeneralTextHandler.h"
+#include "../../lib/rmg/CRmgTemplate.h"
+
+TreasureSelector::TreasureSelector(std::vector<CTreasureInfo> & treasures) :
+	ui(new Ui::TreasureSelector),
+	treasures(treasures)
+{
+	ui->setupUi(this);
+
+	setWindowTitle(tr("Treasure Selector"));
+	
+	setWindowModality(Qt::ApplicationModal);
+
+	ui->tableWidgetTreasures->setColumnCount(4);
+	ui->tableWidgetTreasures->setRowCount(treasures.size() + 1);
+	ui->tableWidgetTreasures->setHorizontalHeaderLabels({tr("Min"), tr("Max"), tr("Density"), tr("Action")});
+
+	auto addRow = [this](int min, int max, int density, int row){
+		auto spinBoxMin = new QSpinBox();
+        spinBoxMin->setRange(0, 1000000);
+        spinBoxMin->setValue(min);
+		ui->tableWidgetTreasures->setCellWidget(row, 0, spinBoxMin);
+
+		auto spinBoxMax = new QSpinBox();
+        spinBoxMax->setRange(0, 1000000);
+        spinBoxMax->setValue(max);
+		ui->tableWidgetTreasures->setCellWidget(row, 1, spinBoxMax);
+
+		auto spinBoxDensity = new QSpinBox();
+        spinBoxDensity->setRange(0, 1000);
+        spinBoxDensity->setValue(density);
+		ui->tableWidgetTreasures->setCellWidget(row, 2, spinBoxDensity);
+
+		auto deleteButton = new QPushButton("Delete");
+		ui->tableWidgetTreasures->setCellWidget(row, 3, deleteButton);
+		connect(deleteButton, &QPushButton::clicked, this, [this, deleteButton]() {
+			for (int r = 0; r < ui->tableWidgetTreasures->rowCount(); ++r) {
+				if (ui->tableWidgetTreasures->cellWidget(r, 3) == deleteButton) {
+					ui->tableWidgetTreasures->removeRow(r);
+					break;
+				}
+			}
+		});
+	};
+
+	for (int row = 0; row < treasures.size(); ++row)
+		addRow(treasures[row].min, treasures[row].max, treasures[row].density, row);
+
+	auto addButton = new QPushButton("Add");
+	ui->tableWidgetTreasures->setCellWidget(ui->tableWidgetTreasures->rowCount() - 1, 3, addButton);
+	connect(addButton, &QPushButton::clicked, this, [this, addRow, treasures]() {
+		ui->tableWidgetTreasures->insertRow(ui->tableWidgetTreasures->rowCount() - 1);
+		addRow(0, 0, 0, ui->tableWidgetTreasures->rowCount() - 2);
+	});
+
+	ui->tableWidgetTreasures->resizeColumnsToContents();
+
+	show();
+}
+
+void TreasureSelector::showTreasureSelector(std::vector<CTreasureInfo> & treasures)
+{
+	auto * dialog = new TreasureSelector(treasures);
+	dialog->setAttribute(Qt::WA_DeleteOnClose);
+	dialog->exec();
+}
+
+void TreasureSelector::on_buttonBoxResult_accepted()
+{
+	treasures.clear();
+	for (int row = 0; row < ui->tableWidgetTreasures->rowCount() - 1; ++row)
+	{
+		CTreasureInfo info;
+		info.min = static_cast<QSpinBox *>(ui->tableWidgetTreasures->cellWidget(row, 0))->value();
+		info.max = static_cast<QSpinBox *>(ui->tableWidgetTreasures->cellWidget(row, 1))->value();
+		info.density = static_cast<QSpinBox *>(ui->tableWidgetTreasures->cellWidget(row, 2))->value();
+		treasures.push_back(info);
+	}
+
+    close();
+}
+
+void TreasureSelector::on_buttonBoxResult_rejected()
+{
+    close();
+}

+ 37 - 0
mapeditor/templateeditor/treasureselector.h

@@ -0,0 +1,37 @@
+/*
+ * treasureselector.h, part of VCMI engine
+ *
+ * Authors: listed in file AUTHORS in main folder
+ *
+ * License: GNU General Public License v2.0 or later
+ * Full text of license available in license.txt file, in main folder
+ *
+ */
+#pragma once
+#include <QWidget>
+
+#include "../StdInc.h"
+#include "../../lib/rmg/CRmgTemplate.h"
+
+namespace Ui {
+class TreasureSelector;
+}
+
+class TreasureSelector : public QDialog
+{
+	Q_OBJECT
+
+public:
+	explicit TreasureSelector(std::vector<CTreasureInfo> & treasures);
+
+	static void showTreasureSelector(std::vector<CTreasureInfo> & treasures);
+
+private slots:
+	void on_buttonBoxResult_accepted();
+    void on_buttonBoxResult_rejected();
+
+private:
+	Ui::TreasureSelector *ui;
+
+	std::vector<CTreasureInfo> & treasures;
+};

+ 38 - 0
mapeditor/templateeditor/treasureselector.ui

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TreasureSelector</class>
+ <widget class="QDialog" name="TreasureSelector">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>330</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Select Treasures</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="labelTreasure">
+     <property name="text">
+      <string>Select Treasures</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTableWidget" name="tableWidgetTreasures"/>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBoxResult">
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>