From atlantik-devel Sun Jun 09 07:18:48 2002 From: kde () office ! kde ! org Date: Sun, 09 Jun 2002 07:18:48 +0000 To: atlantik-devel Subject: [atlantik-devel] CVS: kdeaddons/atlantikdesigner/designer designer.cpp,1.35,1.36 designer.h,1.13,1.1 X-MARC-Message: https://marc.info/?l=atlantik-devel&m=102387565721943 Update of /home/kde/kdeaddons/atlantikdesigner/designer In directory office:/tmp/cvs-serv23234/designer Modified Files: designer.cpp designer.h editor.cpp editor.h group.cpp group.h Log Message: make it work perfectly, except no complex math stuff and no load/save. Index: designer.cpp =================================================================== RCS file: /home/kde/kdeaddons/atlantikdesigner/designer/designer.cpp,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- designer.cpp 2002/06/08 06:07:13 1.35 +++ designer.cpp 2002/06/09 07:18:46 1.36 @@ -35,10 +35,6 @@ AtlanticDesigner::AtlanticDesigner(QWidget *parent, const char *name) : KMainWindow(parent, name) { - groups.setAutoDelete(true); - chanceStack.setAutoDelete(true); - ccStack.setAutoDelete(true); - firstBoard = true; m_player = 0; @@ -75,16 +71,12 @@ // these MUST match up to the ones in editor.cpp! types.append("street"); - types.append("rr"); types.append("utility"); - types.append("cc"); - types.append("chance"); + types.append("cards"); types.append("freeparking"); types.append("tojail"); types.append("tax"); - types.append("airport"); types.append("jail"); - types.append("go"); types.append("TODO"); isMod = false; @@ -104,12 +96,7 @@ void AtlanticDesigner::initMembers() { estates.clear(); - chanceStack.setAutoDelete(true); - chanceStack.clear(); - chanceStack.setAutoDelete(false); - ccStack.setAutoDelete(true); - ccStack.clear(); - ccStack.setAutoDelete(false); + cards.clear(); boardInfo = BoardInfo(); } @@ -129,7 +116,7 @@ board = new AtlantikBoard(0, max, AtlantikBoard::Edit, this, "Board"); setCentralWidget(board); layout = new QVBoxLayout(board->centerWidget()); - editor = new EstateEdit(&estates, &chanceStack, &ccStack, board->centerWidget(), "Estate Editor"); + editor = new EstateEdit(&groups, &estates, &cards, board->centerWidget(), "Estate Editor"); layout->addWidget(editor); editor->setReady(false); @@ -173,7 +160,6 @@ estate->setColor(fg); estate->setBgColor(bg); estate->setPrice(100); - estate->setHousePrice(50); for (int j = 0; j < 6; ++j) estate->setRent(j, 10 * (j + 1)); estate->setChanged(false); @@ -236,13 +222,13 @@ void AtlanticDesigner::openFile(const QString &filename) { - enum ParseMode { Estates=0, Chance_Cards=1, CC_Cards=2, Other=3, Meta=4 }; + enum ParseMode { General, Board, Estates, Cards, Other, Meta }; QFile f(filename); if (!f.open(IO_ReadOnly)) return; initMembers(); - + QTextStream t(&f); QString s = t.readLine(); ParseMode parseMode = Other; @@ -251,7 +237,7 @@ for (i = 0; !t.atEnd();) { //if (i < 500) - //kdDebug() << "s is [" << s << "]" << endl; + //kdDebug() << "s is [" << s << "]" << endl; s = s.stripWhiteSpace(); if (s.isEmpty()) @@ -268,10 +254,8 @@ //kdDebug() << "setting parsemode for s [" << s << "]" << endl; if (s == "") parseMode = Estates; - else if (s == "") - parseMode = Chance_Cards; - else if (s == "") - parseMode = CC_Cards; + else if (s == "") + parseMode = Cards; else if (s == "") parseMode = Meta; else @@ -283,7 +267,7 @@ name = s.left(s.find("]")); name = name.right(name.length() - name.find("[") - 1); - + if (name.isEmpty()) name = i18n("No Name"); //kdDebug() << "name is " << name << endl; @@ -293,7 +277,6 @@ int type = 0; int group = -1; int price = -1; - int housePrice = -1; int rent[6] = {-1, -1, -1, -1, -1, -1}; int tax = -1; int taxPercentage = -1; @@ -301,6 +284,8 @@ QStringList keys; QValueList values; + CardStack *curCardStack = 0; + while (true) { if (t.atEnd()) @@ -327,67 +312,72 @@ //////////////////////////////// ESTATES if (parseMode == Estates) { - if (key == "type") - { - //kdDebug() << "its a type!\n"; - int j = 0; - for (QStringList::Iterator it = types.begin(); it != types.end(); ++it) + if (key == "type") { - //kdDebug() << (*it) << ", " << value << endl; - if ((*it) == value) + //kdDebug() << "its a type!\n"; + int j = 0; + for (QStringList::Iterator it = types.begin(); it != types.end(); ++it) { - type = j; - break; + //kdDebug() << (*it) << ", " << value << endl; + if ((*it) == value) + { + type = j; + break; + } + j++; } - j++; + //kdDebug() << "type is " << type << endl; } - //kdDebug() << "type is " << type << endl; - } - else if (key == "price") - { - price = value.toInt(); - } - else if (key == "houseprice") - { - housePrice = value.toInt(); - } - else if (key.left(4) == "rent") - { - int houses = key.right(1).toInt(); - if (houses < 0 || houses > 5) + else if (key == "price") { - continue; + price = value.toInt(); } - rent[houses] = value.toInt(); - } - else if (key == "tax") - { - tax = value.toInt(); - } - else if (key == "taxpercentage") - { - taxPercentage = value.toInt(); - } - else if (key == "group") - { - group = value.toInt(); - } - else if (key == "color") - { - color.setNamedColor(value); - //kdDebug() << "color is " << color.name() << endl; - } - else if (key == "bgcolor") - { - bgColor.setNamedColor(value); - //kdDebug() << "bgcolor is " << bgColor.name() << endl; - } + else if (key.left(4) == "rent") + { + int houses = key.right(1).toInt(); + if (houses < 0 || houses > 5) + { + continue; + } + rent[houses] = value.toInt(); + } + else if (key == "tax") + { + tax = value.toInt(); + } + else if (key == "taxpercentage") + { + taxPercentage = value.toInt(); + } + else if (key == "group") + { + group = value.toInt(); + } + else if (key == "color") + { + color.setNamedColor(value); + //kdDebug() << "color is " << color.name() << endl; + } + else if (key == "bgcolor") + { + bgColor.setNamedColor(value); + //kdDebug() << "bgcolor is " << bgColor.name() << endl; + } } ///////////////////////////// END ESTATES - ///////////////////////////// CARDS - else if (parseMode == Chance_Cards || parseMode == CC_Cards) + ///////////////////////////// CARDS + else if (parseMode == Cards) { //kdDebug() << "in card area\n"; + + if (key == "groupname") + for (QValueList::Iterator it = cards.begin(); it != cards.end(); ++it) + if ((*it).name() == value) + { + curCardStack = &(*it); + continue; + } + bool ok; int v = value.toInt(&ok); if (!ok) @@ -432,7 +422,7 @@ } } //else - //kdDebug() << "ignoring line, unknown parseMode" << endl; + //kdDebug() << "ignoring line, unknown parseMode" << endl; } if (parseMode == Estates) @@ -443,39 +433,37 @@ estate->setColor(color); estate->setBgColor(bgColor); estate->setType(type); - estate->setGroup(group); estate->setPrice(price); - estate->setHousePrice(housePrice); for (int j = 0; j < 6; j++) estate->setRent(j, rent[j]); estate->setTax(tax); estate->setTaxPercentage(taxPercentage); estate->setChanged(false); estates.append(estate); - + connect(estate, SIGNAL(LMBClicked(Estate *)), this, SLOT(changeEstate(Estate *))); connect(estate, SIGNAL(changed()), this, SLOT(modified())); - + //kdDebug() << "incrementing i\n"; i++; } - else if (parseMode == Chance_Cards || parseMode == CC_Cards) + else if (parseMode == Cards) { //kdDebug() << "making new card" << endl; - Card *card = new Card(); - card->name = name; - card->keys = keys; - card->values = values; - (parseMode == Chance_Cards ? chanceStack : ccStack).append(card); + Card card; + card.name = name; + card.keys = keys; + card.values = values; + curCardStack->append(card); } } if (i < 4) { - KMessageBox::detailedSorry(this, i18n("This board file is invalid; cannot open."), i18n("There are only %1 estates specified in this file.").arg(i)); - if (this->filename.isNull()) - close(); - return; + KMessageBox::detailedSorry(this, i18n("This board file is invalid; cannot open."), i18n("There are only %1 estates specified in this file.").arg(i)); + if (this->filename.isNull()) + close(); + return; } max = i; @@ -560,13 +548,8 @@ EstateType type = (EstateType)estate->type(); - t << QString("[%1]\ntype=%2\nbgcolor=%4\n").arg(estate->name()).arg(*types.at(estate->type())).arg(estate->bgColor().name()); - if (estate->color().isValid()) - t << "color=" << estate->color().name() << endl; - if (estate->group() >= 0 && type == Street) - t << "group=" << estate->group() << endl; - if (estate->housePrice() >= 0 && type == Street) - t << "houseprice=" << estate->housePrice() << endl; + t << QString("[%1]").arg(estate->name()) << endl; + if (estate->price() >= 0 && type == Street) t << "price=" << estate->price() << endl; if (estate->tax() >= 0 && type == Tax) @@ -586,26 +569,23 @@ // now do the cards + t << "" << endl << endl; + CardStack *stack = 0; - for (int i = 0; i < 2; i++) + for (QValueList::Iterator it = cards.begin(); it != cards.end(); ++it) { - if (i == 0) - { - t << endl << QString("") << endl; - stack = &chanceStack; - } - else if (i == 1) - { - t << endl << QString("") << endl; - stack = &ccStack; - } + stack = &(*it); + + t << "groupname=" << stack->name() << endl << endl; Card *card = 0; - for (card = stack->first(); card; card = stack->next()) + for (CardStack::Iterator cit = stack->begin(); cit != stack->end(); ++cit) { + card = &(*cit); + t << endl << "[" << card->name << "]" << endl; QValueList::Iterator vit = card->values.begin(); - for (QStringList::Iterator it = card->keys.begin(); it != card->keys.end(); ++it) + for (QStringList::Iterator it = card->keys.begin(); it != card->keys.end(); ++it, ++vit) { QString key = (*it); int value = (*vit); @@ -615,12 +595,12 @@ value *= -1; key = "pay"; } - if (key == "collecteach") + else if (key == "collecteach") { value *= -1; key = "payeach"; } - if (key == "goback") + else if (key == "goback") { value *= -1; key = "advance"; @@ -630,8 +610,6 @@ value = 1; t << key << "=" << value << endl; - - ++vit; } } } @@ -656,11 +634,9 @@ estate->setColor(copiedEstate->color()); estate->setBgColor(copiedEstate->bgColor()); estate->setType(copiedEstate->type()); - estate->setGroup(copiedEstate->group()); for (int i = 0; i < 6; i++) estate->setRent(i, copiedEstate->rent(i)); estate->setPrice(copiedEstate->price()); - estate->setHousePrice(copiedEstate->housePrice()); estate->setTax(copiedEstate->tax()); estate->setTaxPercentage(copiedEstate->taxPercentage()); @@ -695,7 +671,6 @@ if (!estate) return; - kdDebug() << "saving first time:\n"; (void) editor->saveEstate(); editor->setEstate(static_cast(estate)); @@ -800,6 +775,30 @@ groupEditor->raise(); connect(groupEditor, SIGNAL(changed()), this, SLOT(modified())); + connect(groupEditor, SIGNAL(update()), this, SLOT(groupsChanged())); + connect(groupEditor, SIGNAL(update()), editor, SLOT(groupsChanged())); +} + +void AtlanticDesigner::groupsChanged() +{ + ConfigEstate *curEstate = 0; + for (curEstate = estates.first(); curEstate; curEstate = estates.next()) + { + // skip estate currently being edited + if (curEstate == editor->theEstate()) + continue; + + for (ConfigEstateGroupList::Iterator it = groups.begin(); it != groups.end(); ++it) + { + if ((*it).name() == curEstate->group()) + { + curEstate->setBgColor((*it).bgColor()); + curEstate->setColor((*it).fgColor()); + curEstate->update(); + break; + } + } + } } void AtlanticDesigner::info() Index: designer.h =================================================================== RCS file: /home/kde/kdeaddons/atlantikdesigner/designer/designer.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- designer.h 2002/06/08 06:07:13 1.13 +++ designer.h 2002/06/09 07:18:46 1.14 @@ -48,6 +48,7 @@ void setPlayerAtBeginning(); void info(); void editGroups(); + void groupsChanged(); void up(); void down(); @@ -75,8 +76,7 @@ KListAction *estateAct; KRecentFilesAction *recentAct; - CardStack chanceStack; - CardStack ccStack; + QValueList cards; BoardInfo boardInfo; ConfigEstateGroupList groups; Index: editor.cpp =================================================================== RCS file: /home/kde/kdeaddons/atlantikdesigner/designer/editor.cpp,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- editor.cpp 2002/06/08 06:07:13 1.22 +++ editor.cpp 2002/06/09 07:18:46 1.23 @@ -1,21 +1,25 @@ -#include -#include +#include #include +#include +#include +#include +#include +#include #include #include -#include -#include +#include #include -#include -#include #include #include #include -#include #include +#include +#include #include +#include #include +#include #include @@ -25,7 +29,6 @@ { m_rent[0] = m_rent[1] = m_rent[2] = m_rent[3] = m_rent[4] = m_rent[5] = 0; m_type = 0; - m_group = -1; } void ConfigEstate::setChanged(bool b) @@ -51,7 +54,7 @@ } } -void ConfigEstate::setGroup(const int group) +void ConfigEstate::setGroup(const QString &group) { if (m_group != group) { @@ -69,15 +72,6 @@ } } -void ConfigEstate::setHousePrice(const int housePrice) -{ - if (m_housePrice != housePrice) - { - m_housePrice = housePrice; - m_changed = true; - } -} - void ConfigEstate::setRent(const int houses, const int rent) { if (m_rent[houses] != rent) @@ -105,12 +99,51 @@ } } +void ConfigEstate::setTakeCard(const QString &takeCard) +{ + if (m_takeCard != takeCard) + { + m_takeCard = takeCard; + m_changed = true; + } +} + +void ConfigEstate::setRentMath(const QString &rentMath) +{ + if (m_rentMath != rentMath) + { + m_rentMath = rentMath; + m_changed = true; + } +} + +void ConfigEstate::setRentVar(const QString &rentVar) +{ + if (m_rentVar != rentVar) + { + m_rentVar = rentVar; + m_changed = true; + } +} + +void ConfigEstate::setGo(const bool go) +{ + if (m_go != go) + { + m_go = go; + m_changed = true; + } +} + /////////////////////////// QStringList types; -EstateEdit::EstateEdit(EstateList *estates, CardStack *chanceStack, CardStack *ccStack, QWidget *parent, const char *name) : QWidget(parent, name) +EstateEdit::EstateEdit(ConfigEstateGroupList *newGroups, EstateList *estates, QValueList *cards, QWidget *parent, const char *name) + : QWidget(parent, name) { + groups = newGroups; + types.append("pay"); types.append("payeach"); types.append("collect"); @@ -125,55 +158,50 @@ types.append("payhouse"); types.append("payhotel"); - this->chanceStack = chanceStack; - this->ccStack = ccStack; + oldType = -1; + estate = 0; + this->cards = cards; this->estates = estates; ready = false; locked = false; connect(this, SIGNAL(somethingChanged()), this, SLOT(saveEstate())); - layout = new QGridLayout(this, 6, 1, 6, 3); + layout = new QGridLayout(this, 5, 1, KDialog::marginHint(), KDialog::spacingHint()); nameEdit = new QLineEdit(this, "Name Edit"); layout->addWidget(nameEdit, 0, 0); connect(nameEdit, SIGNAL(returnPressed()), this, SIGNAL(somethingChanged())); confDlg = 0; - oldConfDlg = 0; - reallyOldConfDlg = 0; - layout->addWidget(new QWidget(this), 2, 0); - layout->setRowStretch(2, 1); + layout->setRowStretch(2, 2); - QHBoxLayout *typeLayout = new QHBoxLayout(layout, 6); + QHBoxLayout *typeLayout = new QHBoxLayout(KDialog::spacingHint()); + layout->addLayout(typeLayout, 3, 0); + QLabel *typeLabel = new QLabel(i18n("Type"), this); - typeLayout->addWidget(typeLabel, 4, 0); + typeLayout->addWidget(typeLabel); typeCombo = new KComboBox(false, this, "Type Combo"); - typeLayout->addWidget(typeCombo, 5, 0); + typeLayout->addWidget(typeCombo); connect(typeCombo, SIGNAL(activated(int)), this, SIGNAL(somethingChanged())); - QStringList types(i18n("Street")); - types.append(i18n("Railroad")); - types.append(i18n("Utility")); - types.append(i18n("Community Chest")); - types.append(i18n("Chance")); - types.append(i18n("Free Parking")); - types.append(i18n("Go to jail")); - types.append(i18n("Tax")); - types.append(i18n("Airport")); - types.append(i18n("Jail")); - types.append(i18n("Go")); - types.append("TODO"); - typeCombo->insertStringList(types); + goCheck = new QCheckBox(i18n("This estate is a Go"), this); + connect(goCheck, SIGNAL(toggled(bool)), this, SIGNAL(somethingChanged())); + layout->addWidget(goCheck, 4, 0); + + QStringList estateTypes(i18n("Street")); + estateTypes.append(i18n("Utility")); + estateTypes.append(i18n("Cards")); + estateTypes.append(i18n("Free Parking")); + estateTypes.append(i18n("Go to jail")); + estateTypes.append(i18n("Tax")); + estateTypes.append(i18n("Jail")); + estateTypes.append("TODO"); + typeCombo->insertStringList(estateTypes); } void EstateEdit::aboutToDie() { - //kdDebug() << "aboutToDie()\n"; - delete reallyOldConfDlg; - reallyOldConfDlg = 0; - delete oldConfDlg; - oldConfDlg = 0; delete confDlg; confDlg = 0; } @@ -185,16 +213,20 @@ void EstateEdit::setEstate(ConfigEstate *_estate) { + if (!_estate) + return; + // wait for it to become unlocked while (1) if (!locked) break; - this->estate = _estate; + estate = _estate; ready = false; - nameEdit->setText(_estate->name()); - typeCombo->setCurrentItem(_estate->type()); + nameEdit->setText(estate->name()); + typeCombo->setCurrentItem(estate->type()); + goCheck->setChecked(estate->go()); ready = true; @@ -208,16 +240,15 @@ locked = true; - //kdDebug() << "saveEstate, saving " << estate->name() << endl; - EstateType curType = (EstateType)typeCombo->currentItem(); if (!superficial) { - emit saveDialogSettings(); + confDlg->slotOk(); estate->setType(curType); estate->setName(nameEdit->text()); + estate->setGo(goCheck->isChecked()); } if (curType != Street) @@ -238,44 +269,42 @@ { if (oldType == typeCombo->currentItem()) { - emit updateDialogSettings(estate); + confDlg->slotUpdate(estate); return; } - - if (reallyOldConfDlg) - { - delete reallyOldConfDlg; - } - reallyOldConfDlg = oldConfDlg; - oldConfDlg = confDlg; - confDlg = 0; + delete confDlg; - switch ((EstateType)typeCombo->currentItem()) + switch (estate->type()) { case Street: - confDlg = new StreetDlg(estate, this); - connect(this, SIGNAL(saveDialogSettings()), static_cast(confDlg), SLOT(slotOk())); - connect(this, SIGNAL(updateDialogSettings(ConfigEstate *)), static_cast(confDlg), SLOT(slotUpdate(ConfigEstate *))); + confDlg = new StreetDlg(groups, this); break; + case Tax: - confDlg = new TaxDlg(estate, this); - connect(this, SIGNAL(saveDialogSettings()), static_cast(confDlg), SLOT(slotOk())); - connect(this, SIGNAL(updateDialogSettings(ConfigEstate *)), static_cast(confDlg), SLOT(slotUpdate(ConfigEstate *))); - break; - case Chance: - confDlg = new CardView(estates, chanceStack, this); + confDlg = new TaxDlg(this); break; - case CommunityChest: - confDlg = new CardView(estates, ccStack, this); + + case Cards: + confDlg = new CardsDlg(estates, cards, this); break; + default: - confDlg = new QWidget(this); + confDlg = new EstateDlg(this); + break; } + + confDlg->slotUpdate(estate); + layout->addWidget(confDlg, 1, 0); confDlg->show(); - oldType = (EstateType)typeCombo->currentItem(); + oldType = typeCombo->currentItem(); +} + +void EstateEdit::groupsChanged() +{ + confDlg->groupsChanged(); } bool EstateEdit::upArrow() @@ -310,36 +339,112 @@ ///////////////////////////////// -TaxDlg::TaxDlg(ConfigEstate *estate, QWidget *parent, char *name) - : QWidget(parent, name) +TaxDlg::TaxDlg(QWidget *parent, char *name) + : EstateDlg(parent, name) { - QGridLayout *taxBox = new QGridLayout(this, 2, 2); + QGridLayout *taxBox = new QGridLayout(this, 2, 2, KDialog::marginHint(), KDialog::spacingHint()); taxBox->addWidget(new QLabel(i18n("Fixed tax"), this), 0, 0); taxBox->addWidget(tax = new QSpinBox(0, 3000, 1, this), 0, 1); tax->setSuffix("$"); taxBox->addWidget(new QLabel(i18n("Percentage tax"), this), 1, 0); taxBox->addWidget(taxPercentage = new QSpinBox(0, 100, 1, this), 1, 1); taxPercentage->setSuffix("%"); - - slotUpdate(estate); } -void TaxDlg::slotOk() +void TaxDlg::save() { estate->setTax(tax->value()); estate->setTaxPercentage(taxPercentage->value()); } -void TaxDlg::slotUpdate(ConfigEstate *estate) +void TaxDlg::update() { - this->estate = estate; tax->setValue(estate->tax()); - taxPercentage->setValue(estate->taxPercentage()); } ///////////////////////////////// +CardsDlg::CardsDlg(EstateList *newEstates, QValueList *newCards, QWidget *parent, char *name) + : EstateDlg(parent, name) +{ + estates = newEstates; + stacks = newCards; + + view = 0; + + vlayout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint()); + + QHBoxLayout *layout = new QHBoxLayout(vlayout, KDialog::spacingHint()); + + KPushButton *addB = new KPushButton(i18n("&New Stack"), this); + connect(addB, SIGNAL(clicked()), this, SLOT(addStack())); + layout->addWidget(addB); + layout->addStretch(); + + layout->addWidget(new QLabel(i18n("Cards from"), this)); + QStringList cardNames; + for (QValueList::Iterator it = stacks->begin(); it != stacks->end(); ++it) + cardNames.append((*it).name()); + + cards = new QComboBox(this); + cards->insertStringList(cardNames); + layout->addWidget(cards); + connect(cards, SIGNAL(activated(const QString &)), this, SLOT(updateView(const QString &))); + + vlayout->addWidget(new KSeparator(this)); +} + +void CardsDlg::addStack() +{ + bool ok; + QString name = KLineEditDlg::getText(i18n("Add Stack"), i18n("Enter the name of the new stack below."), QString::null, &ok, this); + if (ok) + { + for (QValueList::Iterator it = stacks->begin(); it != stacks->end(); ++it) + { + if ((*it).name() == name) + { + KMessageBox::information(this, i18n("That name is already on the list.")); + return; + } + } + + stacks->append(CardStack(name)); + cards->insertItem(name); + cards->setCurrentText(name); + updateView(name); + } +} + +void CardsDlg::updateView(const QString &curName) +{ + CardStack *curStack = 0; + for (QValueList::Iterator it = stacks->begin(); it != stacks->end(); ++it) + if ((*it).name() == curName) + curStack = &(*it); + + if (!curStack) + return; + + delete view; + view = new CardView(estates, curStack, this); + vlayout->addWidget(view); + view->show(); +} + +void CardsDlg::save() +{ + estate->setTakeCard(cards->currentText()); +} + +void CardsDlg::update() +{ + cards->setCurrentText(estate->takeCard()); +} + +///////////////////////////////// + ChooseWidget::ChooseWidget(EstateList *estates, int id, Card *card, QWidget *parent, char *name) : QWidget (parent, name) { @@ -389,7 +494,7 @@ { if (!estate) return; - //kdDebug() << "estateChanged, and changing\n"; + (*card->values.at(id)) = i; estate->setCurrentItem(i); } @@ -408,14 +513,11 @@ if (number) { - //kdDebug() << "initting number\n"; delete estate; estate = 0; - //kdDebug() << "estate deleted\n"; value = new QSpinBox(0, 1000, 1, this); - //kdDebug() << "adding widget\n"; hlayout->addWidget(value); connect(value, SIGNAL(valueChanged(int)), this, SLOT(valueChanged(int))); @@ -423,10 +525,8 @@ } else { - //kdDebug() << "deleting value\n"; delete value; value = 0; - //kdDebug() << "making combobox\n"; estate = new KComboBox(this); ConfigEstate *curestate = 0; QStringList estateStrings; @@ -435,7 +535,6 @@ estate->insertStringList(estateStrings); connect(estate, SIGNAL(activated(int)), this, SLOT(estateChanged(int))); - //kdDebug() << "adding estate\n"; hlayout->addWidget(estate); estate->show(); } @@ -481,7 +580,7 @@ layout = new QVBoxLayout(this, KDialog::spacingHint()); QHBoxLayout *hlayout = new QHBoxLayout(layout); - addButton = new KPushButton(i18n("&Add..."), this); + addButton = new KPushButton(i18n("&Add Card..."), this); connect(addButton, SIGNAL(clicked()), this, SLOT(add())); hlayout->addWidget(addButton); hlayout->addStretch(); @@ -493,9 +592,7 @@ connect(delButton, SIGNAL(clicked()), this, SLOT(del())); hlayout->addWidget(delButton); - List = new QListBox(this); - List->setMinimumHeight(50); // gets squashed vertically w/o - List->setMaximumHeight(80); // gets spreeaaaaad vertically w/o + List = new KListBox(this); layout->addWidget(List); connect(List, SIGNAL(highlighted(int)), this, SLOT(selected(int))); @@ -507,15 +604,9 @@ lessButton = new KPushButton(i18n("&Fewer Properties"), this); connect(lessButton, SIGNAL(clicked()), this, SLOT(less())); hlayout->addWidget(lessButton); - - //kdDebug() << "loading cards...\n"; - Card *card = 0; - for (card = stack->first(); card; card = stack->next()) - { - //kdDebug() << "adding to list: " << card->name << endl; - List->insertItem(card->name); - } + for (CardStack::Iterator it = stack->begin(); it != stack->end(); ++it) + List->insertItem((*it).name); updateButtonsEnabled(); } @@ -554,15 +645,13 @@ void CardView::add() { bool ok = false; - QString name = KLineEditDlg::getText(i18n("New card name:"), QString::null, &ok, this); + QString name = KLineEditDlg::getText(i18n("Add Card"), i18n("Enter the name of the new card below."), QString::null, &ok, this); if (ok) List->insertItem(name, 0); choosies.clear(); - Card *newCard = new Card; - newCard->name = name; - stack->prepend(newCard); + stack->prepend(Card(name)); List->setCurrentItem(0); @@ -578,10 +667,10 @@ return; bool ok = false;; - QString name = KLineEditDlg::getText(i18n("New card name:"), List->text(curItem), &ok, this); + QString name = KLineEditDlg::getText(i18n("Add Card"), i18n("Enter the name of the new card below."), QString::null, &ok, this); if (ok) { - stack->at(curItem)->name = name; + (*stack->at(curItem)).name = name; List->changeItem(name, curItem); } @@ -607,15 +696,12 @@ { choosies.clear(); - //kdDebug() << "selected (" << i << ")\n"; - card = stack->at(i); + card = &(*stack->at(i)); unsigned int num = card->keys.count(); - //kdDebug() << "num is " << num << endl; QValueList::Iterator vit = card->values.begin(); for (QStringList::Iterator it = card->keys.begin(); it != card->keys.end(); ++it) { - //kdDebug() << "creating a choser, id " << choosies.count() << endl; ChooseWidget *newChooseWidget = new ChooseWidget(estates, choosies.count(), card, this); choosies.append(newChooseWidget); @@ -627,14 +713,11 @@ newChooseWidget->valueChanged(*vit); newChooseWidget->estateChanged(*vit); - //kdDebug() << "chooser made\n"; - ++vit; } if (num == 0) { - //kdDebug() << "doing more\n"; card->values.clear(); more(); } @@ -654,34 +737,32 @@ ///////////////////////////////// -StreetDlg::StreetDlg(ConfigEstate *estate, QWidget *parent, char *name) - : QWidget(parent, name) +StreetDlg::StreetDlg(ConfigEstateGroupList *newGroups, QWidget *parent, char *name) + : EstateDlg(parent, name) { - QVBoxLayout *bigbox = new QVBoxLayout(this, KDialog::spacingHint()); + groups = newGroups; - QVGroupBox *RentPage = new QVGroupBox(i18n("&Rent by # of houses"), this); + QVBoxLayout *bigbox = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint()); + + QVGroupBox *RentPage = new QVGroupBox(i18n("&Rent By Number of Houses"), this); RentPage->setInsideSpacing(KDialog::spacingHint()); + RentPage->setInsideMargin(KDialog::marginHint()); bigbox->addWidget(RentPage); QWidget *topRent = new QWidget(RentPage); - QGridLayout *rentBox = new QGridLayout(topRent, 2, 7, KDialog::spacingHint()); + QGridLayout *rentBox = new QGridLayout(topRent, 3, 3, KDialog::spacingHint()); rentBox->addWidget(new QLabel(i18n("None"), topRent), 0, 0); rentBox->addWidget(new QLabel(i18n("One"), topRent), 0, 1); - rentBox->setColStretch(1, 1); rentBox->addWidget(new QLabel(i18n("Two"), topRent), 0, 2); - rentBox->setColStretch(2, 2); - rentBox->addWidget(new QLabel(i18n("Three"), topRent), 0, 3); - rentBox->setColStretch(3, 3); - rentBox->addWidget(new QLabel(i18n("Four"), topRent), 0, 4); - rentBox->setColStretch(4, 4); - rentBox->addWidget(new QLabel(i18n("Hotel"), topRent), 0, 5); - rentBox->setColStretch(5, 5); + rentBox->addWidget(new QLabel(i18n("Three"), topRent), 2, 0); + rentBox->addWidget(new QLabel(i18n("Four"), topRent), 2, 1); + rentBox->addWidget(new QLabel(i18n("Hotel"), topRent), 2, 2); rentBox->addWidget(houses0 = new QSpinBox(0, 3000, 1, topRent), 1, 0); rentBox->addWidget(houses1 = new QSpinBox(0, 3000, 1, topRent), 1, 1); rentBox->addWidget(houses2 = new QSpinBox(0, 3000, 1, topRent), 1, 2); - rentBox->addWidget(houses3 = new QSpinBox(0, 3000, 1, topRent), 1, 3); - rentBox->addWidget(houses4 = new QSpinBox(0, 3000, 1, topRent), 1, 4); - rentBox->addWidget(houses5 = new QSpinBox(0, 3000, 1, topRent), 1, 5); + rentBox->addWidget(houses3 = new QSpinBox(0, 3000, 1, topRent), 3, 0); + rentBox->addWidget(houses4 = new QSpinBox(0, 3000, 1, topRent), 3, 1); + rentBox->addWidget(houses5 = new QSpinBox(0, 3000, 1, topRent), 3, 2); houses0->setSuffix(i18n("$")); houses1->setSuffix(i18n("$")); houses2->setSuffix(i18n("$")); @@ -693,26 +774,51 @@ pricesBox->addWidget(new QLabel(i18n("Price"), this), 0, 0); pricesBox->addWidget(price = new QSpinBox(0, 3000, 25, this), 0, 1); price->setSuffix(i18n("$")); - pricesBox->addWidget(new QLabel(i18n("House price"), this), 1, 0); - pricesBox->addWidget(housePrice = new QSpinBox(0, 3000, 25, this), 1, 1); - housePrice->setSuffix(i18n("$")); - QHBoxLayout *groupLayout = new QHBoxLayout(bigbox, KDialog::spacingHint()); QLabel *groupLabel = new QLabel(i18n("Group"), this); - groupLayout->addWidget(groupLabel); - groupCombo = new KComboBox(false, this, "Group Combo"); - QStringList groups(i18n("None")); - for (int i = 0; i <= 20; i++) + pricesBox->addWidget(groupLabel, 1, 0); + groupCombo = new KComboBox(this, "Group Combo"); + groupUpdate(); + connect(groupCombo, SIGNAL(activated(const QString &)), this, SLOT(groupChanged(const QString &))); + + pricesBox->addWidget(groupCombo, 1, 1); +} + +void StreetDlg::groupChanged(const QString &groupName) +{ + for (ConfigEstateGroupList::Iterator it = groups->begin(); it != groups->end(); ++it) { - groups.append(QString::number(i)); + if ((*it).name() == groupName) + { + estate->setColor((*it).fgColor()); + estate->setBgColor((*it).bgColor()); + + estate->update(); + + break; + } } - groupCombo->insertStringList(groups); - groupLayout->addWidget(groupCombo); +} - slotUpdate(estate); +void StreetDlg::groupUpdate() +{ + QString curGroupName = groupCombo->currentText(); + + QStringList newGroups; + for (ConfigEstateGroupList::Iterator it = groups->begin(); it != groups->end(); ++it) + newGroups.append((*it).name()); + + groupCombo->clear(); + groupCombo->insertStringList(newGroups); + + if (!curGroupName.isNull()) + { + groupCombo->setCurrentText(curGroupName); + groupChanged(curGroupName); + } } -void StreetDlg::slotOk() +void StreetDlg::save() { estate->setRent(0, houses0->value()); estate->setRent(1, houses1->value()); @@ -721,14 +827,11 @@ estate->setRent(4, houses4->value()); estate->setRent(5, houses5->value()); estate->setPrice(price->value()); - estate->setHousePrice(housePrice->value()); - estate->setGroup(groupCombo->currentItem() - 1); + estate->setGroup(groupCombo->currentText()); } -void StreetDlg::slotUpdate(ConfigEstate *estate) +void StreetDlg::update() { - this->estate = estate; - houses0->setValue(estate->rent(0)); houses1->setValue(estate->rent(1)); houses2->setValue(estate->rent(2)); @@ -737,9 +840,11 @@ houses5->setValue(estate->rent(5)); price->setValue(estate->price()); - housePrice->setValue(estate->housePrice()); - groupCombo->setCurrentItem(estate->group() + 1); + if (estate->group().isNull()) + groupCombo->setCurrentItem(-1); + else + groupCombo->setCurrentText(estate->group()); } #include "editor.moc" Index: editor.h =================================================================== RCS file: /home/kde/kdeaddons/atlantikdesigner/designer/editor.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- editor.h 2002/06/08 06:07:13 1.17 +++ editor.h 2002/06/09 07:18:46 1.18 @@ -8,65 +8,106 @@ #include +#include "group.h" + class QCheckBox; class QGridLayout; class QLineEdit; class QSpinBox; class KComboBox; +class KListBox; class KPushButton; -// following enum taken from monopd/estate.h, and numbers all decreased by one -enum EstateType { Street=0, RR=1, Utility=2, CommunityChest=3, Chance=4, FreeParking=5, ToJail=6, Tax=7, Airport=8, Jail=9, Go=10, Other=11 }; +enum EstateType { Street = 0, Utility, Cards, FreeParking, ToJail, Tax, Jail, Other }; class ConfigEstate : public Estate { public: ConfigEstate(int estateId); void setEstateId(const int estateId); - int type() {return m_type; }; + int type() { return m_type; }; void setType(const int type); - int group() {return m_group; }; - void setGroup(const int group); + const QString &group() { return m_group; }; + void setGroup(const QString &group); int price() { return m_price; } void setPrice(int); - int housePrice() { return m_housePrice; } - void setHousePrice(const int); int rent(int _h) { return m_rent[_h]; } void setRent(const int, const int); int tax() { return m_tax; } void setTax(const int); - int taxPercentage() {return m_taxPercentage; } + int taxPercentage() { return m_taxPercentage; } void setTaxPercentage(const int); + const QString &takeCard() { return m_takeCard; } + void setTakeCard(const QString &); + const QString &rentMath() { return m_rentMath; } + void setRentMath(const QString &); + const QString &rentVar() { return m_rentVar; } + void setRentVar(const QString &); + bool go() { return m_go; } + void setGo(const bool); void setChanged(bool); private: int m_type; - int m_group; + QString m_group; int m_rent[6]; int m_price; - int m_housePrice; int m_tax; int m_taxPercentage; + QString m_takeCard; + QString m_rentMath; + QString m_rentVar; + bool m_go; }; typedef QPtrList EstateList; struct Card { - Card() { name = QString::null; } + Card() {} + Card(const QString &newName) { name = newName; } QString name; QStringList keys; QValueList values; }; -typedef QPtrList CardStack; +class CardStack : public QValueList +{ + public: + CardStack() {} + CardStack(const QString &newName) { setName(newName); } + const QString &name() { return m_name; } + void setName(const QString &newName) { m_name = newName; } + + private: + QString m_name; +}; + +class EstateDlg : public QWidget +{ + Q_OBJECT + + public: + EstateDlg(QWidget *parent = 0, char *name = 0) : QWidget(parent, name) { estate = 0; }; + public slots: + virtual void slotOk() { save(); } + void slotUpdate(ConfigEstate *newEstate) { estate = newEstate; if (estate) update(); } + void groupsChanged() { groupUpdate(); } + + protected: + virtual void update() {} + virtual void save() {} + virtual void groupUpdate() {}; + ConfigEstate *estate; +}; + class EstateEdit : public QWidget { Q_OBJECT public: - EstateEdit(EstateList *, CardStack *, CardStack *, QWidget *parent = 0, const char *name = 0); + EstateEdit(ConfigEstateGroupList *, EstateList *, QValueList *, QWidget *parent = 0, const char *name = 0); ConfigEstate *theEstate() { return estate; } bool upArrow(); bool downArrow(); @@ -78,12 +119,11 @@ public slots: void setEstate(ConfigEstate *); ConfigEstate *saveEstate(bool superficial = false); + void groupsChanged(); signals: void somethingChanged(); void modified(); - void saveDialogSettings(); - void updateDialogSettings(ConfigEstate *); private slots: void configure(); @@ -91,20 +131,19 @@ private: KComboBox *typeCombo; QLineEdit *nameEdit; + QCheckBox *goCheck; QWidget *centerWidget; QGridLayout *layout; EstateList *estates; + QValueList *cards; + ConfigEstateGroupList *groups; ConfigEstate *estate; - CardStack *chanceStack; - CardStack *ccStack; - QWidget *confDlg; - QWidget *oldConfDlg; - QWidget *reallyOldConfDlg; + EstateDlg *confDlg; - EstateType oldType; + int oldType; bool ready; bool locked; @@ -154,7 +193,7 @@ void updateButtonsEnabled(); private: - QListBox *List; + KListBox *List; KPushButton *addButton; KPushButton *renameButton; KPushButton *delButton; @@ -171,36 +210,62 @@ QPtrList choosies; }; -class TaxDlg : public QWidget +class TaxDlg : public EstateDlg { Q_OBJECT public: - TaxDlg(ConfigEstate *, QWidget *parent = 0, char *name = 0); + TaxDlg(QWidget *parent = 0, char *name = 0); - public slots: - void slotOk(); - void slotUpdate(ConfigEstate *); + protected: + virtual void save(); + virtual void update(); private: - ConfigEstate *estate; QSpinBox *tax; QSpinBox *taxPercentage; }; -class StreetDlg : public QWidget +class CardsDlg : public EstateDlg { Q_OBJECT public: - StreetDlg(ConfigEstate *, QWidget *parent = 0, char *name = 0); + CardsDlg(EstateList *, QValueList *, QWidget *parent = 0, char *name = 0); - public slots: - void slotOk(); - void slotUpdate(ConfigEstate *); + protected: + virtual void save(); + virtual void update(); + private slots: + void addStack(); + void updateView(const QString &); + private: - ConfigEstate *estate; + QValueList *stacks; + EstateList *estates; + + QComboBox *cards; + CardView *view; + QVBoxLayout *vlayout; +}; + +class StreetDlg : public EstateDlg +{ + Q_OBJECT + + public: + StreetDlg(ConfigEstateGroupList *, QWidget *parent = 0, char *name = 0); + + protected: + virtual void save(); + virtual void update(); + virtual void groupUpdate(); + + private slots: + void groupChanged(const QString &); + + private: QSpinBox *houses0; QSpinBox *houses1; QSpinBox *houses2; @@ -208,8 +273,11 @@ QSpinBox *houses4; QSpinBox *houses5; QSpinBox *price; - QSpinBox *housePrice; KComboBox *groupCombo; + + ConfigEstateGroupList *groups; + + ConfigEstateGroup *curGroup(); }; #endif Index: group.cpp =================================================================== RCS file: /home/kde/kdeaddons/atlantikdesigner/designer/group.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- group.cpp 2002/06/08 06:07:13 1.1 +++ group.cpp 2002/06/09 07:18:46 1.2 @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -12,11 +13,12 @@ #include #include #include +#include #include "group.h" GroupEditor::GroupEditor(ConfigEstateGroupList *newList) - : KDialogBase(KDialogBase::Plain, i18n("Group Editor"), Ok|Cancel, Ok, 0, "Group Editor", false, true), mylist(*newList) + : KDialogBase(KDialogBase::Plain, i18n("Group Editor"), Ok|Apply|Cancel, Ok, 0, "Group Editor", false, true), mylist(*newList) { setWFlags(WDestructiveClose); list = newList; @@ -28,9 +30,8 @@ hlayout->addWidget(groups); connect(groups, SIGNAL(executed(QListBoxItem *)), this, SLOT(updateSettings(QListBoxItem *))); QStringList newgroups; - ConfigEstateGroup *group = 0; - for (group = list->first(); group; group = list->next()) - newgroups.append(group->name()); + for (ConfigEstateGroupList::Iterator it = list->begin(); it != list->end(); ++it) + newgroups.append((*it).name()); groups->insertStringList(newgroups); connect(groups, SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); @@ -48,6 +49,18 @@ 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); + + QWidget *pricesDummy = new QWidget(pricesGroupBox); + QHBoxLayout *housePriceLayout = new QHBoxLayout(pricesDummy, spacingHint()); + housePriceLayout->addWidget(new QLabel(i18n("House price"), pricesDummy), 1, 0); + housePriceLayout->addWidget(housePrice = new QSpinBox(0, 3000, 25, pricesDummy)); + housePrice->setSuffix(i18n("$")); + connect(housePrice, SIGNAL(valueChanged(int)), this, SLOT(housePriceChanged(int))); + + //vlayout->addWidget(new KSeparator(page)); + QHBoxLayout *buttonlayout = new QHBoxLayout(vlayout, spacingHint()); removeB = new KPushButton(i18n("&Remove"), page); buttonlayout->addWidget(removeB); @@ -66,17 +79,16 @@ QString name = KLineEditDlg::getText(i18n("Add Group"), i18n("Enter the name of the new group below."), QString::null, &ok, this); if (ok) { - ConfigEstateGroup *group = 0; - for (group = mylist.first(); group; group = mylist.next()) + for (ConfigEstateGroupList::Iterator it = mylist.begin(); it != mylist.end(); ++it) { - if (group->name() == name) + if ((*it).name() == name) { KMessageBox::information(this, i18n("That group is already on the list.")); return; } } - mylist.append(new ConfigEstateGroup(name)); + mylist.append(ConfigEstateGroup(name)); groups->insertItem(name); emit changed(); @@ -89,6 +101,14 @@ 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(); } @@ -96,13 +116,16 @@ void GroupEditor::updateSettings(QListBoxItem *item) { - ConfigEstateGroup *group = 0; - for (group = mylist.first(); group; group = mylist.next()) - if (group->name() == item->text()) + 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()); break; - - fgButton->setColor(group->fgColor()); - bgButton->setColor(group->bgColor()); + } + } } ConfigEstateGroup *GroupEditor::currentGroup() @@ -111,10 +134,9 @@ if (!item) return 0; - ConfigEstateGroup *group = 0; - for (group = mylist.first(); group; group = mylist.next()) - if (group->name() == item->text()) - return group; + for (ConfigEstateGroupList::Iterator it = mylist.begin(); it != mylist.end(); ++it) + if ((*it).name() == item->text()) + return &(*it); return 0; } @@ -133,10 +155,26 @@ group->setBgColor(color); } -void GroupEditor::slotOk() +void GroupEditor::housePriceChanged(int newValue) +{ + ConfigEstateGroup *group = currentGroup(); + if (group) + group->setHousePrice(newValue); +} + +void GroupEditor::slotApply() { *list = mylist; + KDialogBase::slotApply(); + + emit update(); +} + +void GroupEditor::slotOk() +{ + slotApply(); + KDialogBase::slotOk(); } @@ -144,6 +182,7 @@ { bool issel = groups->currentItem() >= 0; colorGroupBox->setEnabled(issel); + pricesGroupBox->setEnabled(issel); removeB->setEnabled(issel); } Index: group.h =================================================================== RCS file: /home/kde/kdeaddons/atlantikdesigner/designer/group.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- group.h 2002/06/08 06:07:13 1.1 +++ group.h 2002/06/09 07:18:46 1.2 @@ -13,26 +13,33 @@ class KPushButton; class QListBoxItem; +class QSpinBox; class QVGroupBox; -class ConfigEstateGroup : public EstateGroup +class ConfigEstateGroup { - Q_OBJECT - public: - ConfigEstateGroup() : EstateGroup(QString::null) {} - ConfigEstateGroup(const QString &name) : EstateGroup(name) {} - void setFgColor(const QColor &color) { m_fgColor = color; } - void setBgColor(const QColor &color) { m_bgColor = color; } + ConfigEstateGroup() { init(); } + ConfigEstateGroup(const QString &name) { setName(name); init(); } + void init() { setHousePrice(0); } + + void setHousePrice(int newPrice) { m_housePrice = newPrice; } + int housePrice() { return m_housePrice; } + void setName(const QString &name) { m_name = name; } + const QString &name() { return m_name; } const QColor &fgColor() { return m_fgColor; } + void setFgColor(const QColor &color) { m_fgColor = color; } const QColor &bgColor() { return m_bgColor; } + void setBgColor(const QColor &color) { m_bgColor = color; } private: QColor m_fgColor; QColor m_bgColor; + int m_housePrice; + QString m_name; }; -typedef QPtrList ConfigEstateGroupList; +typedef QValueList ConfigEstateGroupList; class GroupEditor : public KDialogBase { @@ -43,14 +50,17 @@ signals: void changed(); + void update(); protected slots: virtual void slotOk(); + virtual void slotApply(); private slots: void updateSettings(QListBoxItem *item); void fgChanged(const QColor &); void bgChanged(const QColor &); + void housePriceChanged(int); void add(); void remove(); void selectionChanged(); @@ -59,7 +69,9 @@ KListBox *groups; KColorButton *fgButton; KColorButton *bgButton; + QSpinBox *housePrice; QVGroupBox *colorGroupBox; + QVGroupBox *pricesGroupBox; KPushButton *removeB; ConfigEstateGroupList *list; _______________________________________________ atlantik-devel mailing list atlantik-devel@mail.kde.org http://mail.kde.org/mailman/listinfo/atlantik-devel