QTfrontend/selectWeapon.cpp
changeset 2948 3f21a9dc93d0
parent 2860 13a53315ae18
child 3494 208c5671b202
equal deleted inserted replaced
2947:803b277e4894 2948:3f21a9dc93d0
    31 #include <QTabWidget>
    31 #include <QTabWidget>
    32 #include <math.h>
    32 #include <math.h>
    33 
    33 
    34 QImage getAmmoImage(int num)
    34 QImage getAmmoImage(int num)
    35 {
    35 {
    36 	static QImage ammo(":Ammos.png");
    36     static QImage ammo(":Ammos.png");
    37     int x = floor(num/(ammo.height()/32));
    37     int x = floor(num/(ammo.height()/32));
    38     int y = (num-((ammo.height()/32)*x))*32;
    38     int y = (num-((ammo.height()/32)*x))*32;
    39     x*=32;
    39     x*=32;
    40 	return ammo.copy(x, y, 32, 32);
    40     return ammo.copy(x, y, 32, 32);
    41 }
    41 }
    42 
    42 
    43 SelWeaponItem::SelWeaponItem(bool allowInfinite, int iconNum, int wNum, QImage image, QWidget* parent) :
    43 SelWeaponItem::SelWeaponItem(bool allowInfinite, int iconNum, int wNum, QImage image, QWidget* parent) :
    44 	QWidget(parent)
    44     QWidget(parent)
    45 {
    45 {
    46 	QHBoxLayout* hbLayout = new QHBoxLayout(this);
    46     QHBoxLayout* hbLayout = new QHBoxLayout(this);
    47 	hbLayout->setSpacing(1);
    47     hbLayout->setSpacing(1);
    48 	hbLayout->setMargin(1);
    48     hbLayout->setMargin(1);
    49 
    49 
    50 	QLabel* lbl = new QLabel(this);
    50     QLabel* lbl = new QLabel(this);
    51 	lbl->setPixmap(QPixmap::fromImage(getAmmoImage(iconNum)));
    51     lbl->setPixmap(QPixmap::fromImage(getAmmoImage(iconNum)));
    52 	lbl->setMaximumWidth(30);
    52     lbl->setMaximumWidth(30);
    53 	lbl->setGeometry(0, 0, 30, 30);
    53     lbl->setGeometry(0, 0, 30, 30);
    54 	hbLayout->addWidget(lbl);
    54     hbLayout->addWidget(lbl);
    55 
    55 
    56 	item = new WeaponItem(image, this);
    56     item = new WeaponItem(image, this);
    57 	item->setItemsNum(wNum);
    57     item->setItemsNum(wNum);
    58 	item->setInfinityState(allowInfinite);
    58     item->setInfinityState(allowInfinite);
    59 	hbLayout->addWidget(item);
    59     hbLayout->addWidget(item);
    60 
    60 
    61 	hbLayout->setStretchFactor(lbl, 1);
    61     hbLayout->setStretchFactor(lbl, 1);
    62 	hbLayout->setStretchFactor(item, 99);
    62     hbLayout->setStretchFactor(item, 99);
    63 	hbLayout->setAlignment(lbl, Qt::AlignLeft | Qt::AlignVCenter);
    63     hbLayout->setAlignment(lbl, Qt::AlignLeft | Qt::AlignVCenter);
    64 	hbLayout->setAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
    64     hbLayout->setAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
    65 }
    65 }
    66 
    66 
    67 void SelWeaponItem::setItemsNum(const unsigned char num)
    67 void SelWeaponItem::setItemsNum(const unsigned char num)
    68 {
    68 {
    69 	item->setItemsNum(num);
    69     item->setItemsNum(num);
    70 }
    70 }
    71 
    71 
    72 unsigned char SelWeaponItem::getItemsNum() const
    72 unsigned char SelWeaponItem::getItemsNum() const
    73 {
    73 {
    74 	return item->getItemsNum();
    74     return item->getItemsNum();
    75 }
    75 }
    76 
    76 
    77 SelWeaponWidget::SelWeaponWidget(int numItems, QWidget* parent) :
    77 SelWeaponWidget::SelWeaponWidget(int numItems, QWidget* parent) :
    78   QFrame(parent),
    78   QFrame(parent),
    79   m_numItems(numItems)
    79   m_numItems(numItems)
    80 {
    80 {
    81 	wconf = new QSettings(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat, this);
    81     wconf = new QSettings(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat, this);
    82 
    82 
    83 	for(int i = 0; i < cDefaultAmmos.size(); ++i)
    83     for(int i = 0; i < cDefaultAmmos.size(); ++i)
    84 		wconf->setValue(cDefaultAmmos[i].first, cDefaultAmmos[i].second);
    84         wconf->setValue(cDefaultAmmos[i].first, cDefaultAmmos[i].second);
    85 
    85 
    86 	QStringList keys = wconf->allKeys();
    86     QStringList keys = wconf->allKeys();
    87 	for(int i = 0; i < keys.size(); i++)
    87     for(int i = 0; i < keys.size(); i++)
    88 	{
    88     {
    89 		if (wconf->value(keys[i]).toString().size() != cDefaultAmmoStore->size())
    89         if (wconf->value(keys[i]).toString().size() != cDefaultAmmoStore->size())
    90 			wconf->remove(keys[i]);
    90             wconf->remove(keys[i]);
    91 	}
    91     }
    92 
    92 
    93 	QString currentState = *cDefaultAmmoStore;
    93     QString currentState = *cDefaultAmmoStore;
    94 
    94 
    95 	QTabWidget * tbw = new QTabWidget(this);
    95     QTabWidget * tbw = new QTabWidget(this);
    96 	QWidget * page1 = new QWidget(this);
    96     QWidget * page1 = new QWidget(this);
    97 	p1Layout = new QGridLayout(page1);
    97     p1Layout = new QGridLayout(page1);
    98 	p1Layout->setSpacing(1);
    98     p1Layout->setSpacing(1);
    99 	p1Layout->setMargin(1);
    99     p1Layout->setMargin(1);
   100 	QWidget * page2 = new QWidget(this);
   100     QWidget * page2 = new QWidget(this);
   101 	p2Layout = new QGridLayout(page2);
   101     p2Layout = new QGridLayout(page2);
   102 	p2Layout->setSpacing(1);
   102     p2Layout->setSpacing(1);
   103 	p2Layout->setMargin(1);
   103     p2Layout->setMargin(1);
   104 	QWidget * page3 = new QWidget(this);
   104     QWidget * page3 = new QWidget(this);
   105 	p3Layout = new QGridLayout(page3);
   105     p3Layout = new QGridLayout(page3);
   106 	p3Layout->setSpacing(1);
   106     p3Layout->setSpacing(1);
   107 	p3Layout->setMargin(1);
   107     p3Layout->setMargin(1);
   108 	QWidget * page4 = new QWidget(this);
   108     QWidget * page4 = new QWidget(this);
   109 	p4Layout = new QGridLayout(page4);
   109     p4Layout = new QGridLayout(page4);
   110 	p4Layout->setSpacing(1);
   110     p4Layout->setSpacing(1);
   111 	p4Layout->setMargin(1);
   111     p4Layout->setMargin(1);
   112 
   112 
   113 	tbw->addTab(page1, tr("Weapon set"));
   113     tbw->addTab(page1, tr("Weapon set"));
   114 	tbw->addTab(page2, tr("Probabilities"));
   114     tbw->addTab(page2, tr("Probabilities"));
   115 	tbw->addTab(page4, tr("Ammo in boxes"));
   115     tbw->addTab(page4, tr("Ammo in boxes"));
   116 	tbw->addTab(page3, tr("Delays"));
   116     tbw->addTab(page3, tr("Delays"));
   117 
   117 
   118 	QGridLayout * pageLayout = new QGridLayout(this);
   118     QGridLayout * pageLayout = new QGridLayout(this);
   119 	pageLayout->addWidget(tbw);
   119     pageLayout->addWidget(tbw);
   120 
   120 
   121 
   121 
   122 	int j = -1;
   122     int j = -1;
   123 	int i = 0, k = 0;
   123     int i = 0, k = 0;
   124 	for(; i < m_numItems; ++i) {
   124     for(; i < m_numItems; ++i) {
   125 		if (i == 6) continue;
   125         if (i == 6) continue;
   126 		if (k % 4 == 0) ++j;
   126         if (k % 4 == 0) ++j;
   127 		SelWeaponItem * swi = new SelWeaponItem(true, i, currentState[i].digitValue(), QImage(":/res/ammopic.png"), this);
   127         SelWeaponItem * swi = new SelWeaponItem(true, i, currentState[i].digitValue(), QImage(":/res/ammopic.png"), this);
   128 		weaponItems[i].append(swi);
   128         weaponItems[i].append(swi);
   129 		p1Layout->addWidget(swi, j, k % 4);
   129         p1Layout->addWidget(swi, j, k % 4);
   130 
   130 
   131 		SelWeaponItem * pwi = new SelWeaponItem(false, i, currentState[numItems + i].digitValue(), QImage(":/res/ammopicbox.png"), this);
   131         SelWeaponItem * pwi = new SelWeaponItem(false, i, currentState[numItems + i].digitValue(), QImage(":/res/ammopicbox.png"), this);
   132 		weaponItems[i].append(pwi);
   132         weaponItems[i].append(pwi);
   133 		p2Layout->addWidget(pwi, j, k % 4);
   133         p2Layout->addWidget(pwi, j, k % 4);
   134 		
   134         
   135 		SelWeaponItem * dwi = new SelWeaponItem(false, i, currentState[numItems*2 + i].digitValue(), QImage(":/res/ammopicdelay.png"), this);
   135         SelWeaponItem * dwi = new SelWeaponItem(false, i, currentState[numItems*2 + i].digitValue(), QImage(":/res/ammopicdelay.png"), this);
   136 		weaponItems[i].append(dwi);
   136         weaponItems[i].append(dwi);
   137 		p3Layout->addWidget(dwi, j, k % 4);
   137         p3Layout->addWidget(dwi, j, k % 4);
   138 		
   138         
   139 		SelWeaponItem * awi = new SelWeaponItem(false, i, currentState[numItems*3 + i].digitValue(), QImage(":/res/ammopic.png"), this);
   139         SelWeaponItem * awi = new SelWeaponItem(false, i, currentState[numItems*3 + i].digitValue(), QImage(":/res/ammopic.png"), this);
   140 		weaponItems[i].append(awi);
   140         weaponItems[i].append(awi);
   141 		p4Layout->addWidget(awi, j, k % 4);
   141         p4Layout->addWidget(awi, j, k % 4);
   142 
   142 
   143 		++k;
   143         ++k;
   144 	}
   144     }
   145 
   145 
   146 	//pLayout->setRowStretch(5, 100);
   146     //pLayout->setRowStretch(5, 100);
   147 	m_name = new QLineEdit(this);
   147     m_name = new QLineEdit(this);
   148 	pageLayout->addWidget(m_name, i, 0, 1, 5);
   148     pageLayout->addWidget(m_name, i, 0, 1, 5);
   149 }
   149 }
   150 
   150 
   151 void SelWeaponWidget::setWeapons(const QString& ammo)
   151 void SelWeaponWidget::setWeapons(const QString& ammo)
   152 {
   152 {
   153 	for(int i = 0; i < m_numItems; ++i) {
   153     for(int i = 0; i < m_numItems; ++i) {
   154 		twi::iterator it = weaponItems.find(i);
   154         twi::iterator it = weaponItems.find(i);
   155 		if (it == weaponItems.end()) continue;
   155         if (it == weaponItems.end()) continue;
   156 		it.value()[0]->setItemsNum(ammo[i].digitValue());
   156         it.value()[0]->setItemsNum(ammo[i].digitValue());
   157 		it.value()[1]->setItemsNum(ammo[m_numItems + i].digitValue());
   157         it.value()[1]->setItemsNum(ammo[m_numItems + i].digitValue());
   158 		it.value()[2]->setItemsNum(ammo[m_numItems*2 + i].digitValue());
   158         it.value()[2]->setItemsNum(ammo[m_numItems*2 + i].digitValue());
   159 		it.value()[3]->setItemsNum(ammo[m_numItems*3 + i].digitValue());
   159         it.value()[3]->setItemsNum(ammo[m_numItems*3 + i].digitValue());
   160 	}
   160     }
   161 	update();
   161     update();
   162 }
   162 }
   163 
   163 
   164 void SelWeaponWidget::setDefault()
   164 void SelWeaponWidget::setDefault()
   165 {
   165 {
   166 	setWeapons(*cDefaultAmmoStore);
   166     setWeapons(*cDefaultAmmoStore);
   167 }
   167 }
   168 
   168 
   169 void SelWeaponWidget::save()
   169 void SelWeaponWidget::save()
   170 {
   170 {
   171 	if (m_name->text() == "Default") {
   171     if (m_name->text() == "Default") {
   172 		QMessageBox impossible(QMessageBox::Warning, QMessageBox::tr("Weapons"), QMessageBox::tr("Can not edit default weapon set"));
   172         QMessageBox impossible(QMessageBox::Warning, QMessageBox::tr("Weapons"), QMessageBox::tr("Can not edit default weapon set"));
   173 		impossible.exec();
   173         impossible.exec();
   174 		return;
   174         return;
   175 	}
   175     }
   176 
   176 
   177 	if (m_name->text() == "") return;
   177     if (m_name->text() == "") return;
   178 
   178 
   179 	QString state1;
   179     QString state1;
   180 	QString state2;
   180     QString state2;
   181 	QString state3;
   181     QString state3;
   182 	QString state4;
   182     QString state4;
   183 
   183 
   184 	for(int i = 0; i < m_numItems; ++i) {
   184     for(int i = 0; i < m_numItems; ++i) {
   185 		twi::const_iterator it = weaponItems.find(i);
   185         twi::const_iterator it = weaponItems.find(i);
   186 		int num = it == weaponItems.end() ? 9 : it.value()[0]->getItemsNum(); // 9 is for 'skip turn'
   186         int num = it == weaponItems.end() ? 9 : it.value()[0]->getItemsNum(); // 9 is for 'skip turn'
   187 		state1.append(QString::number(num));
   187         state1.append(QString::number(num));
   188 		int prob = it == weaponItems.end() ? 0 : it.value()[1]->getItemsNum();
   188         int prob = it == weaponItems.end() ? 0 : it.value()[1]->getItemsNum();
   189 		state2.append(QString::number(prob));
   189         state2.append(QString::number(prob));
   190 		int del = it == weaponItems.end() ? 0 : it.value()[2]->getItemsNum();
   190         int del = it == weaponItems.end() ? 0 : it.value()[2]->getItemsNum();
   191 		state3.append(QString::number(del));
   191         state3.append(QString::number(del));
   192 		int am = it == weaponItems.end() ? 0 : it.value()[3]->getItemsNum();
   192         int am = it == weaponItems.end() ? 0 : it.value()[3]->getItemsNum();
   193 		state4.append(QString::number(am));
   193         state4.append(QString::number(am));
   194 	}
   194     }
   195 	if (curWeaponsName != "") {
   195     if (curWeaponsName != "") {
   196 		// remove old entry
   196         // remove old entry
   197 		wconf->remove(curWeaponsName);
   197         wconf->remove(curWeaponsName);
   198 	}
   198     }
   199 	wconf->setValue(m_name->text(), state1 + state2 + state3 + state4);
   199     wconf->setValue(m_name->text(), state1 + state2 + state3 + state4);
   200 	emit weaponsChanged();
   200     emit weaponsChanged();
   201 }
   201 }
   202 
   202 
   203 int SelWeaponWidget::operator [] (unsigned int weaponIndex) const
   203 int SelWeaponWidget::operator [] (unsigned int weaponIndex) const
   204 {
   204 {
   205 	twi::const_iterator it = weaponItems.find(weaponIndex);
   205     twi::const_iterator it = weaponItems.find(weaponIndex);
   206 	return it == weaponItems.end() ? 9 : it.value()[0]->getItemsNum();
   206     return it == weaponItems.end() ? 9 : it.value()[0]->getItemsNum();
   207 }
   207 }
   208 
   208 
   209 QString SelWeaponWidget::getWeaponsString(const QString& name) const
   209 QString SelWeaponWidget::getWeaponsString(const QString& name) const
   210 {
   210 {
   211 	return wconf->value(name).toString();
   211     return wconf->value(name).toString();
   212 }
   212 }
   213 
   213 
   214 void SelWeaponWidget::deleteWeaponsName()
   214 void SelWeaponWidget::deleteWeaponsName()
   215 {
   215 {
   216 	if (curWeaponsName == "") return;
   216     if (curWeaponsName == "") return;
   217 
   217 
   218 	if (curWeaponsName == "Default") {
   218     if (curWeaponsName == "Default") {
   219 		QMessageBox impossible(QMessageBox::Warning, QMessageBox::tr("Weapons"), QMessageBox::tr("Can not delete default weapon set"));
   219         QMessageBox impossible(QMessageBox::Warning, QMessageBox::tr("Weapons"), QMessageBox::tr("Can not delete default weapon set"));
   220 		impossible.exec();
   220         impossible.exec();
   221 		return;
   221         return;
   222 	}
   222     }
   223 
   223 
   224 	QMessageBox reallyDelete(QMessageBox::Question, QMessageBox::tr("Weapons"), QMessageBox::tr("Really delete this weapon set?"), QMessageBox::Ok | QMessageBox::Cancel);
   224     QMessageBox reallyDelete(QMessageBox::Question, QMessageBox::tr("Weapons"), QMessageBox::tr("Really delete this weapon set?"), QMessageBox::Ok | QMessageBox::Cancel);
   225 
   225 
   226 	if (reallyDelete.exec() == QMessageBox::Ok) {
   226     if (reallyDelete.exec() == QMessageBox::Ok) {
   227 		wconf->remove(curWeaponsName);
   227         wconf->remove(curWeaponsName);
   228 		emit weaponsDeleted();
   228         emit weaponsDeleted();
   229 	}
   229     }
   230 }
   230 }
   231 
   231 
   232 void SelWeaponWidget::setWeaponsName(const QString& name)
   232 void SelWeaponWidget::setWeaponsName(const QString& name)
   233 {
   233 {
   234 	if(name != "" && wconf->contains(name)) {
   234     if(name != "" && wconf->contains(name)) {
   235 		setWeapons(wconf->value(name).toString());
   235         setWeapons(wconf->value(name).toString());
   236 	}
   236     }
   237 
   237 
   238 	curWeaponsName = name;
   238     curWeaponsName = name;
   239 
   239 
   240 	m_name->setText(name);
   240     m_name->setText(name);
   241 }
   241 }
   242 
   242 
   243 QStringList SelWeaponWidget::getWeaponNames() const
   243 QStringList SelWeaponWidget::getWeaponNames() const
   244 {
   244 {
   245 	return wconf->allKeys();
   245     return wconf->allKeys();
   246 }
   246 }