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