Author: cazfi
Date: Thu Aug  4 21:56:27 2016
New Revision: 33459

URL: http://svn.gna.org/viewcvs/freeciv?rev=33459&view=rev
Log:
Added more implementation about req_edit dialog of ruledit.
- List requirements in a list instead of text area
- Add buttons for adding dummy requirement and deleting requirement

See patch #7540

Modified:
    trunk/common/requirements.c
    trunk/common/requirements.h
    trunk/tools/ruledit/req_edit.cpp
    trunk/tools/ruledit/req_edit.h

Modified: trunk/common/requirements.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.c?rev=33459&r1=33458&r2=33459&view=diff
==============================================================================
--- trunk/common/requirements.c (original)
+++ trunk/common/requirements.c Thu Aug  4 21:56:27 2016
@@ -1,4 +1,4 @@
-/**********************************************************************
+/***********************************************************************
  Freeciv - Copyright (C) 1996-2004 - The Freeciv Project
    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

Modified: trunk/common/requirements.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.h?rev=33459&r1=33458&r2=33459&view=diff
==============================================================================
--- trunk/common/requirements.h (original)
+++ trunk/common/requirements.h Thu Aug  4 21:56:27 2016
@@ -1,4 +1,4 @@
-/********************************************************************** 
+/***********************************************************************
  Freeciv - Copyright (C) 1996-2004 - The Freeciv Project
    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
@@ -78,15 +78,15 @@
 
 /* General requirement functions. */
 struct requirement req_from_str(const char *type, const char *range,
-                               bool survives, bool present, bool quiet,
-                               const char *value);
+                                bool survives, bool present, bool quiet,
+                                const char *value);
 const char *req_to_fstring(const struct requirement *req);
 
 void req_get_values(const struct requirement *req, int *type,
-                   int *range, bool *survives, bool *present, bool *quiet,
-                   int *value);
+                    int *range, bool *survives, bool *present, bool *quiet,
+                    int *value);
 struct requirement req_from_values(int type, int range,
-                                  bool survives, bool present, bool quiet,
+                                   bool survives, bool present, bool quiet,
                                    int value);
 
 bool are_requirements_equal(const struct requirement *req1,

Modified: trunk/tools/ruledit/req_edit.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/req_edit.cpp?rev=33459&r1=33458&r2=33459&view=diff
==============================================================================
--- trunk/tools/ruledit/req_edit.cpp    (original)
+++ trunk/tools/ruledit/req_edit.cpp    Thu Aug  4 21:56:27 2016
@@ -25,59 +25,73 @@
 // common
 #include "requirements.h"
 
+// ruledit
+#include "ruledit.h"
+
 #include "req_edit.h"
 
 /**************************************************************************
   Setup req_edit object
 **************************************************************************/
 req_edit::req_edit(ruledit_gui *ui_in, QString target,
-                   const struct requirement_vector *preqs) : QDialog()
+                   struct requirement_vector *preqs) : QDialog()
 {
-  QGridLayout *main_layout = new QGridLayout(this);
+  QVBoxLayout *main_layout = new QVBoxLayout(this);
+  QGridLayout *reqedit_layout = new QGridLayout();
   QPushButton *close_button;
-  int row = 0;
+  QPushButton *add_button;
+  QPushButton *delete_button;
 
   ui = ui_in;
+  selected = nullptr;
+  req_vector = preqs;
 
-  area = new QTextEdit();
-  area->setParent(this);
-  area->setReadOnly(true);
-  main_layout->addWidget(area, row++, 0);
+  req_list = new QListWidget(this);
+
+  connect(req_list, SIGNAL(itemSelectionChanged()), this, SLOT(select_req()));
+  main_layout->addWidget(req_list);
+
+  add_button = new QPushButton(QString::fromUtf8(R__("Add Requirement")), 
this);
+  connect(add_button, SIGNAL(pressed()), this, SLOT(add_now()));
+  reqedit_layout->addWidget(add_button, 0, 0);
+  show_experimental(add_button);
+
+  delete_button = new QPushButton(QString::fromUtf8(R__("Delete 
Requirement")), this);
+  connect(delete_button, SIGNAL(pressed()), this, SLOT(delete_now()));
+  reqedit_layout->addWidget(delete_button, 1, 0);
+  show_experimental(delete_button);
 
   close_button = new QPushButton(QString::fromUtf8(R__("Close")), this);
   connect(close_button, SIGNAL(pressed()), this, SLOT(close_now()));
-  main_layout->addWidget(close_button, row++, 0);
+  reqedit_layout->addWidget(close_button, 2, 0);
+
+  refresh();
+
+  main_layout->addLayout(reqedit_layout);
 
   setLayout(main_layout);
   setWindowTitle(target);
-
-  requirement_vector_iterate(preqs, preq) {
-    char buf[512];
-
-    if (!preq->present) {
-      continue;
-    }
-
-    universal_name_translation(&preq->source,
-                               buf, sizeof(buf));
-    add(buf);
-  } requirement_vector_iterate_end;
 }
 
 /**************************************************************************
-  Clear text area
+  Refresh the information.
 **************************************************************************/
-void req_edit::clear(const char *title)
+void req_edit::refresh()
 {
-  area->clear();
-}
+  int i = 0;
 
-/**************************************************************************
-  Add req entry
-**************************************************************************/
-void req_edit::add(const char *msg)
-{
-  area->append(QString::fromUtf8(msg));
+  req_list->clear();
+
+  requirement_vector_iterate(req_vector, preq) {
+    if (preq->present) {
+      char buf[512];
+      QListWidgetItem *item;
+
+      universal_name_translation(&preq->source, buf, sizeof(buf));
+      item = new QListWidgetItem(QString::fromUtf8(buf));
+      req_list->insertItem(i++, item);
+    }
+  } requirement_vector_iterate_end;
 }
 
 /**************************************************************************
@@ -87,3 +101,55 @@
 {
   done(0);
 }
+
+/**************************************************************************
+  User selected requirement from the list.
+**************************************************************************/
+void req_edit::select_req()
+{
+  int i = 0;
+
+  requirement_vector_iterate(req_vector, preq) {
+    if (req_list->item(i++)->isSelected()) {
+      selected = preq;
+      break;
+    }
+  } requirement_vector_iterate_end;
+}
+
+/**************************************************************************
+  User requested new requirement
+**************************************************************************/
+void req_edit::add_now()
+{
+  struct requirement new_req;
+
+  new_req = req_from_values(VUT_NONE, REQ_RANGE_LOCAL,
+                            false, true, false, 0);
+
+  requirement_vector_append(req_vector, new_req);
+
+  refresh();
+}
+
+/**************************************************************************
+  User requested requirement deletion 
+**************************************************************************/
+void req_edit::delete_now()
+{
+  if (selected != nullptr) {
+    int end = requirement_vector_size(req_vector) - 1;
+    struct requirement *last = requirement_vector_get(req_vector, end);
+
+    requirement_vector_iterate(req_vector, new_req) {
+      if (new_req == selected) {
+        *new_req = *last;
+        break;
+      }
+    } requirement_vector_iterate_end;
+
+    requirement_vector_reserve(req_vector, end);
+
+    refresh();
+  }
+}

Modified: trunk/tools/ruledit/req_edit.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruledit/req_edit.h?rev=33459&r1=33458&r2=33459&view=diff
==============================================================================
--- trunk/tools/ruledit/req_edit.h      (original)
+++ trunk/tools/ruledit/req_edit.h      Thu Aug  4 21:56:27 2016
@@ -20,7 +20,7 @@
 
 // Qt
 #include <QDialog>
-#include <QTextEdit>
+#include <QListWidget>
 
 class ruledit_gui;
 
@@ -29,19 +29,24 @@
   Q_OBJECT
 
   public:
-  explicit req_edit(ruledit_gui *ui_in, QString target,
-                    const struct requirement_vector *preqs);
-    void clear(const char *title);
+    explicit req_edit(ruledit_gui *ui_in, QString target,
+                      struct requirement_vector *preqs);
+    void refresh();
     void add(const char *msg);
 
   private:
     ruledit_gui *ui;
 
-    QTextEdit *area;
+    QListWidget *req_list;
+    struct requirement_vector *req_vector;
+
+    struct requirement *selected;
 
   private slots:
+    void select_req();
+    void add_now();
+    void delete_now();
     void close_now();
 };
 
-
 #endif // FC__REQ_EDIT_H


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to