Feature #1074 » 0062-Ruledit-Add-achievement-type-and-value-editing.patch
tools/ruledit/tab_achievement.cpp | ||
---|---|---|
#include <QListWidget>
|
||
#include <QMenu>
|
||
#include <QPushButton>
|
||
#include <QSpinBox>
|
||
#include <QToolButton>
|
||
// utility
|
||
... | ... | |
QPushButton *effects_button;
|
||
QPushButton *add_button;
|
||
QPushButton *delete_button;
|
||
int row = 0;
|
||
ui = ui_in;
|
||
selected = nullptr;
|
||
... | ... | |
rname = new QLineEdit(this);
|
||
rname->setText(R__("None"));
|
||
connect(rname, SIGNAL(returnPressed()), this, SLOT(name_given()));
|
||
ach_layout->addWidget(label, 0, 0);
|
||
ach_layout->addWidget(rname, 0, 2);
|
||
ach_layout->addWidget(label, row, 0);
|
||
ach_layout->addWidget(rname, row++, 2);
|
||
label = new QLabel(QString::fromUtf8(R__("Name")));
|
||
label->setParent(this);
|
||
... | ... | |
name = new QLineEdit(this);
|
||
name->setText(R__("None"));
|
||
connect(name, SIGNAL(returnPressed()), this, SLOT(name_given()));
|
||
ach_layout->addWidget(label, 1, 0);
|
||
ach_layout->addWidget(same_name, 1, 1);
|
||
ach_layout->addWidget(name, 1, 2);
|
||
ach_layout->addWidget(label, row, 0);
|
||
ach_layout->addWidget(same_name, row, 1);
|
||
ach_layout->addWidget(name, row++, 2);
|
||
label = new QLabel(QString::fromUtf8(R__("Type")));
|
||
label->setParent(this);
|
||
type_button = new QToolButton();
|
||
type_menu = new QMenu();
|
||
for (int ach = 0; ach < ACHIEVEMENT_COUNT; ach++) {
|
||
type_menu->addAction(achievement_type_name(static_cast<enum achievement_type>(ach)));
|
||
}
|
||
connect(type_menu, SIGNAL(triggered(QAction *)),
|
||
this, SLOT(edit_type(QAction *)));
|
||
type_button->setToolButtonStyle(Qt::ToolButtonTextOnly);
|
||
type_button->setPopupMode(QToolButton::MenuButtonPopup);
|
||
type_button->setMenu(type_menu);
|
||
type_button->setText(R__("None"));
|
||
ach_layout->addWidget(label, row, 0);
|
||
ach_layout->addWidget(type_button, row++, 2);
|
||
label = new QLabel(QString::fromUtf8(R__("Value")));
|
||
label->setParent(this);
|
||
value_box = new QSpinBox(this);
|
||
value_box->setRange(-1000, 1000);
|
||
connect(value_box, SIGNAL(valueChanged(int)), this, SLOT(set_value(int)));
|
||
ach_layout->addWidget(label, row, 0);
|
||
ach_layout->addWidget(value_box, row++, 2);
|
||
effects_button = new QPushButton(QString::fromUtf8(R__("Effects")), this);
|
||
connect(effects_button, SIGNAL(pressed()), this, SLOT(edit_effects()));
|
||
ach_layout->addWidget(effects_button, 3, 2);
|
||
ach_layout->addWidget(effects_button, row++, 2);
|
||
add_button = new QPushButton(QString::fromUtf8(R__("Add Achievement")), this);
|
||
connect(add_button, SIGNAL(pressed()), this, SLOT(add_now()));
|
||
ach_layout->addWidget(add_button, 4, 0);
|
||
ach_layout->addWidget(add_button, row, 0);
|
||
show_experimental(add_button);
|
||
delete_button = new QPushButton(QString::fromUtf8(R__("Remove this Achievement")),
|
||
this);
|
||
connect(delete_button, SIGNAL(pressed()), this, SLOT(delete_now()));
|
||
ach_layout->addWidget(delete_button, 4, 2);
|
||
ach_layout->addWidget(delete_button, row++, 2);
|
||
show_experimental(delete_button);
|
||
refresh();
|
||
... | ... | |
{
|
||
selected = pach;
|
||
if (selected != 0) {
|
||
if (selected != nullptr) {
|
||
QString dispn = QString::fromUtf8(untranslated_name(&(pach->name)));
|
||
QString rulen = QString::fromUtf8(achievement_rule_name(pach));
|
||
QString tname = QString::fromUtf8(achievement_type_name(pach->type));
|
||
name->setText(dispn);
|
||
rname->setText(rulen);
|
||
... | ... | |
same_name->setChecked(false);
|
||
name->setEnabled(true);
|
||
}
|
||
type_button->setText(tname);
|
||
value_box->setValue(pach->value);
|
||
} else {
|
||
name->setText(R__("None"));
|
||
rname->setText(R__("None"));
|
||
type_button->setText(R__("None"));
|
||
value_box->setValue(0);
|
||
same_name->setChecked(true);
|
||
name->setEnabled(false);
|
||
}
|
||
... | ... | |
&uni, EFMC_NORMAL);
|
||
}
|
||
}
|
||
/**********************************************************************//**
|
||
User selected achievement type
|
||
**************************************************************************/
|
||
void tab_achievement::edit_type(QAction *action)
|
||
{
|
||
enum achievement_type ach;
|
||
QByteArray an_bytes;
|
||
an_bytes = action->text().toUtf8();
|
||
ach = achievement_type_by_name(an_bytes.data(), fc_strcasecmp);
|
||
if (selected != nullptr && achievement_type_is_valid(ach)) {
|
||
selected->type = ach;
|
||
// Show the changes.
|
||
update_achievement_info(selected);
|
||
refresh();
|
||
}
|
||
}
|
||
/**********************************************************************//**
|
||
Read value from spinbox to achievement
|
||
**************************************************************************/
|
||
void tab_achievement::set_value(int value)
|
||
{
|
||
if (selected != nullptr) {
|
||
selected->value = value;
|
||
// Show the changes.
|
||
update_achievement_info(selected);
|
||
}
|
||
}
|
tools/ruledit/tab_achievement.h | ||
---|---|---|
class QCheckBox;
|
||
class QLineEdit;
|
||
class QListWidget;
|
||
class QSpinBox;
|
||
class QToolButton;
|
||
class ruledit_gui;
|
||
... | ... | |
QLineEdit *rname;
|
||
QListWidget *ach_list;
|
||
QCheckBox *same_name;
|
||
QToolButton *type_button;
|
||
QMenu *type_menu;
|
||
QSpinBox *value_box;
|
||
struct achievement *selected;
|
||
... | ... | |
void delete_now();
|
||
void same_name_toggle(bool checked);
|
||
void edit_effects();
|
||
void edit_type(QAction *action);
|
||
void set_value(int value);
|
||
};
|
||
#endif // FC__TAB_ACHIEVEMENT_H
|