summaryrefslogtreecommitdiffstats
path: root/atlantikdesigner/designer/group.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'atlantikdesigner/designer/group.cpp')
-rw-r--r--atlantikdesigner/designer/group.cpp242
1 files changed, 242 insertions, 0 deletions
diff --git a/atlantikdesigner/designer/group.cpp b/atlantikdesigner/designer/group.cpp
new file mode 100644
index 0000000..41f7c6f
--- /dev/null
+++ b/atlantikdesigner/designer/group.cpp
@@ -0,0 +1,242 @@
+#include <qcombobox.h>
+#include <qframe.h>
+#include <qvgroupbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qspinbox.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+#include <kcolorbutton.h>
+#include <kdebug.h>
+#include <klineedit.h>
+#include <klineeditdlg.h>
+#include <klistbox.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kpushbutton.h>
+#include <kseparator.h>
+
+#include "group.h"
+
+GroupEditor::GroupEditor(ConfigEstateGroupList *newList, QWidget *parent)
+ : KDialogBase(KDialogBase::Plain, i18n("Group Editor"), Ok|Apply|Cancel, Ok, parent, "Group Editor", false, true), mylist(*newList)
+{
+ setWFlags(WDestructiveClose);
+ list = newList;
+
+ QFrame *page = plainPage();
+ QHBoxLayout *hlayout = new QHBoxLayout(page, marginHint(), spacingHint());
+
+ groups = new KListBox(page);
+ hlayout->addWidget(groups);
+ connect(groups, SIGNAL(highlighted(QListBoxItem *)), this, SLOT(updateSettings(QListBoxItem *)));
+ QStringList newgroups;
+ for (ConfigEstateGroupList::Iterator it = list->begin(); it != list->end(); ++it)
+ newgroups.append((*it).name());
+ groups->insertStringList(newgroups);
+ connect(groups, SIGNAL(selectionChanged()), this, SLOT(selectionChanged()));
+
+ QVBoxLayout *vlayout = new QVBoxLayout(hlayout, spacingHint());
+ colorGroupBox = new QVGroupBox(i18n("&Colors"), page);
+ vlayout->addWidget(colorGroupBox);
+
+ (void) new QLabel(i18n("Foreground:"), colorGroupBox);
+ fgButton = new KColorButton(colorGroupBox, "Foreground Button");
+ connect(fgButton, SIGNAL(changed(const QColor &)), this, SLOT(fgChanged(const QColor &)));
+ connect(fgButton, SIGNAL(changed(const QColor &)), this, SIGNAL(changed()));
+
+ (void) new QLabel(i18n("Background:"), colorGroupBox);
+ bgButton = new KColorButton(colorGroupBox, "Background Button");
+ connect(bgButton, SIGNAL(changed(const QColor &)), this, SLOT(bgChanged(const QColor &)));
+ connect(bgButton, SIGNAL(changed(const QColor &)), this, SIGNAL(changed()));
+
+ pricesGroupBox = new QVGroupBox(i18n("&Prices"), page);
+ vlayout->addWidget(pricesGroupBox);
+
+ pricesWidget = new QWidget(pricesGroupBox);
+ QGridLayout *pricesLayout = new QGridLayout(pricesWidget, 2, 2, 0, spacingHint());
+ pricesLayout->addWidget(new QLabel(i18n("House price:"), pricesWidget), 0, 0);
+ pricesLayout->addWidget(housePrice = new QSpinBox(0, 3000, 25, pricesWidget), 0, 1);
+ housePrice->setSpecialValueText(i18n("None"));
+ housePrice->setSuffix(i18n("$"));
+ connect(housePrice, SIGNAL(valueChanged(int)), this, SLOT(housePriceChanged(int)));
+
+ pricesLayout->addWidget(new QLabel(i18n("Global price:"), pricesWidget), 1, 0);
+ pricesLayout->addWidget(globalPrice = new QSpinBox(0, 3000, 25, pricesWidget), 1, 1);
+ globalPrice->setSpecialValueText(i18n("None"));
+ globalPrice->setSuffix(i18n("$"));
+ connect(globalPrice, SIGNAL(valueChanged(int)), this, SLOT(globalPriceChanged(int)));
+
+ dynamicGroupBox = new QVGroupBox(i18n("&Dynamic Rent"), page);
+ vlayout->addWidget(dynamicGroupBox);
+
+ mathWidget = new QWidget(dynamicGroupBox);
+ QGridLayout *mathLayout = new QGridLayout(mathWidget, 2, 2, 0, spacingHint());
+ mathLayout->addWidget(new QLabel(i18n("Add rent variable:"), mathWidget), 0, 0);
+ mathLayout->addWidget(new QLabel(i18n("Expression:"), mathWidget), 1, 0);
+
+ QComboBox *rentVarCombo = new QComboBox(mathWidget);
+ QStringList vars;
+ vars << "DICE";
+ vars << "HOUSES";
+ vars << "GROUPOWNED";
+ rentVarCombo->insertStringList(vars);
+ mathLayout->addWidget(rentVarCombo, 0, 1);
+
+ rentMathEdit = new KLineEdit(mathWidget);
+ connect(rentMathEdit, SIGNAL(textChanged(const QString &)), this, SLOT(rentMathChanged(const QString &)));
+ connect(rentVarCombo, SIGNAL(activated(const QString &)), rentMathEdit, SLOT(insert(const QString &)));
+ mathLayout->addWidget(rentMathEdit, 1, 1);
+
+ QHBoxLayout *buttonlayout = new QHBoxLayout(vlayout, spacingHint());
+ KPushButton *addB = new KPushButton(i18n("&Add..."), page);
+ buttonlayout->addWidget(addB);
+ connect(addB, SIGNAL(clicked()), this, SLOT(add()));
+
+ removeB = new KPushButton(i18n("&Remove"), page);
+ buttonlayout->addWidget(removeB);
+ connect(removeB, SIGNAL(clicked()), this, SLOT(remove()));
+
+ selectionChanged();
+}
+
+void GroupEditor::add()
+{
+ bool ok;
+ QString name = KLineEditDlg::getText(i18n("Add Group"), i18n("Enter the name of the new group:"), QString::null, &ok, this);
+ if (ok)
+ {
+ for (ConfigEstateGroupList::Iterator it = mylist.begin(); it != mylist.end(); ++it)
+ {
+ if ((*it).name() == name)
+ {
+ KMessageBox::information(this, i18n("That group is already on the list."));
+ return;
+ }
+ }
+
+ mylist.append(ConfigEstateGroup(name));
+ groups->insertItem(name);
+
+ emit changed();
+ }
+}
+
+void GroupEditor::remove()
+{
+ QString curText = groups->currentText();
+ if (!curText.isNull())
+ {
+ groups->removeItem(groups->currentItem());
+ for (ConfigEstateGroupList::Iterator it = mylist.begin(); it != mylist.end(); ++it)
+ {
+ if ((*it).name() == curText)
+ {
+ mylist.remove(it);
+ break;
+ }
+ }
+
+ emit changed();
+ }
+}
+
+void GroupEditor::updateSettings(QListBoxItem *item)
+{
+ if (!mylist.size())
+ return;
+
+ if (!item)
+ return;
+
+ for (ConfigEstateGroupList::Iterator it = mylist.begin(); it != mylist.end() ; ++it)
+ {
+ if ((*it).name() == item->text())
+ {
+ fgButton->setColor((*it).fgColor());
+ bgButton->setColor((*it).bgColor());
+ housePrice->setValue((*it).housePrice());
+ globalPrice->setValue((*it).globalPrice());
+ rentMathEdit->setText((*it).rentMath());
+ break;
+ }
+ }
+}
+
+ConfigEstateGroup *GroupEditor::currentGroup()
+{
+ QListBoxItem *item = groups->item(groups->currentItem());
+ if (!item)
+ return 0;
+
+ for (ConfigEstateGroupList::Iterator it = mylist.begin(); it != mylist.end(); ++it)
+ if ((*it).name() == item->text())
+ return &(*it);
+
+ return 0;
+}
+
+void GroupEditor::fgChanged(const QColor &color)
+{
+ ConfigEstateGroup *group = currentGroup();
+ if (group)
+ group->setFgColor(color);
+}
+
+void GroupEditor::bgChanged(const QColor &color)
+{
+ ConfigEstateGroup *group = currentGroup();
+ if (group)
+ group->setBgColor(color);
+}
+
+void GroupEditor::housePriceChanged(int newValue)
+{
+ ConfigEstateGroup *group = currentGroup();
+ if (group)
+ group->setHousePrice(newValue);
+}
+
+void GroupEditor::globalPriceChanged(int newValue)
+{
+ ConfigEstateGroup *group = currentGroup();
+ if (group)
+ group->setGlobalPrice(newValue);
+}
+
+void GroupEditor::rentMathChanged(const QString &newValue)
+{
+ ConfigEstateGroup *group = currentGroup();
+ if (group)
+ {
+ group->setRentMath(newValue);
+ }
+}
+
+void GroupEditor::slotApply()
+{
+ *list = mylist;
+
+ KDialogBase::slotApply();
+
+ emit update();
+}
+
+void GroupEditor::slotOk()
+{
+ slotApply();
+
+ KDialogBase::slotOk();
+}
+
+void GroupEditor::selectionChanged()
+{
+ bool issel = groups->currentItem() >= 0;
+ colorGroupBox->setEnabled(issel);
+ pricesGroupBox->setEnabled(issel);
+ dynamicGroupBox->setEnabled(issel);
+ removeB->setEnabled(issel);
+}
+
+#include "group.moc"