From 5878f3e8c9a903fae6fdf33c39e1437db5af1e65 Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Fri, 8 Mar 2024 08:20:29 +0200
Subject: [PATCH 11/11] Ruledit: Add terrain native_to editing

See RM #298

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 tools/ruledit/edit_terrain.cpp | 28 +++++++++++++++++++++++++++-
 tools/ruledit/edit_terrain.h   |  3 +++
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/tools/ruledit/edit_terrain.cpp b/tools/ruledit/edit_terrain.cpp
index 8a275e4bb0..3a6f47200a 100644
--- a/tools/ruledit/edit_terrain.cpp
+++ b/tools/ruledit/edit_terrain.cpp
@@ -16,12 +16,14 @@
 #endif
 
 // Qt
+#include <QCheckBox>
 #include <QGridLayout>
 #include <QLineEdit>
 #include <QSpinBox>
 #include <QToolButton>
 
 // common
+#include "game.h"
 #include "terrain.h"
 
 // ruledit
@@ -36,7 +38,7 @@
 **************************************************************************/
 edit_terrain::edit_terrain(ruledit_gui *ui_in, struct terrain *ter_in) : QDialog()
 {
-  QVBoxLayout *main_layout = new QVBoxLayout(this);
+  QHBoxLayout *main_layout = new QHBoxLayout(this);
   QGridLayout *ter_layout = new QGridLayout();
   QLabel *label;
   int row = 0;
@@ -44,6 +46,8 @@ edit_terrain::edit_terrain(ruledit_gui *ui_in, struct terrain *ter_in) : QDialog
   ui = ui_in;
   ter = ter_in;
 
+  natives_layout = new QGridLayout();
+
   setWindowTitle(QString::fromUtf8(terrain_rule_name(ter)));
 
   label = new QLabel(QString::fromUtf8(R__("Move Cost")));
@@ -84,9 +88,22 @@ edit_terrain::edit_terrain(ruledit_gui *ui_in, struct terrain *ter_in) : QDialog
   ter_layout->addWidget(label, row, 0);
   ter_layout->addWidget(gfx_tag_alt, row++, 1);
 
+  label = new QLabel(QString::fromUtf8(R__("Native to")));
+  natives_layout->addWidget(label, 0, 0);
+  for (int i = 0; i < game.control.num_unit_classes; i++) {
+    QCheckBox *check = new QCheckBox();
+
+    label = new QLabel(uclass_rule_name(uclass_by_number(i)));
+    natives_layout->addWidget(label, i + 1, 0);
+
+    check->setChecked(BV_ISSET(ter->native_to, i));
+    natives_layout->addWidget(check, i + 1, 1);
+  }
+
   refresh();
 
   main_layout->addLayout(ter_layout);
+  main_layout->addLayout(natives_layout);
 
   setLayout(main_layout);
 }
@@ -100,6 +117,15 @@ void edit_terrain::closeEvent(QCloseEvent *cevent)
   gfx_tag_given();
   gfx_tag_alt_given();
 
+  BV_CLR_ALL(ter->native_to);
+  for (int i = 0; i < game.control.num_unit_classes; i++) {
+    QCheckBox *check = static_cast<QCheckBox *>(natives_layout->itemAtPosition(i + 1, 1)->widget());
+
+    if (check->isChecked()) {
+      BV_SET(ter->native_to, i);
+    }
+  }
+
   ter->ruledit_dlg = nullptr;
 }
 
diff --git a/tools/ruledit/edit_terrain.h b/tools/ruledit/edit_terrain.h
index 0093da3169..ab866a7854 100644
--- a/tools/ruledit/edit_terrain.h
+++ b/tools/ruledit/edit_terrain.h
@@ -21,6 +21,7 @@
 // Qt
 #include <QDialog>
 
+class QGridLayout;
 class QLineEdit;
 class QSpinBox;
 
@@ -42,6 +43,8 @@ class edit_terrain : public QDialog
     QLineEdit *gfx_tag;
     QLineEdit *gfx_tag_alt;
 
+    QGridLayout *natives_layout;
+
   protected:
     void closeEvent(QCloseEvent *cevent);
 
-- 
2.43.0

