QTfrontend/selectWeapon.cpp
author displacer
Wed, 09 Jan 2008 20:26:31 +0000
changeset 695 34a93d123712
parent 694 436045756181
child 696 d6f32ed6edc8
permissions -rw-r--r--
update weapons combo fixed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
612
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
     1
/*
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
     2
 * Hedgewars, a worms-like game
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
     3
 * Copyright (c) 2006, 2007 Ulyanov Igor <iulyanov@gmail.com>
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
     4
 *
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
     8
 *
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    12
 * GNU General Public License for more details.
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    13
 *
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    14
 * You should have received a copy of the GNU General Public License
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    15
 * along with this program; if not, write to the Free Software
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    17
 */
624
e7673b036db5 weaponItem added
displacer
parents: 612
diff changeset
    18
 
e7673b036db5 weaponItem added
displacer
parents: 612
diff changeset
    19
#include "selectWeapon.h"
629
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    20
#include "weaponItem.h"
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    21
#include "hwconsts.h"
612
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    22
624
e7673b036db5 weaponItem added
displacer
parents: 612
diff changeset
    23
#include <QPushButton>
e7673b036db5 weaponItem added
displacer
parents: 612
diff changeset
    24
#include <QGridLayout>
629
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    25
#include <QHBoxLayout>
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    26
#include <QLabel>
630
38338573e09a mask applied
displacer
parents: 629
diff changeset
    27
#include <QBitmap>
694
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    28
#include <QLineEdit>
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    29
#include <QSettings>
624
e7673b036db5 weaponItem added
displacer
parents: 612
diff changeset
    30
629
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    31
QImage getAmmoImage(int num)
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    32
{
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    33
  static QImage ammo(":Ammos.png");
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    34
  return ammo.copy(0, num*32, 32, 32);
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    35
}
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    36
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    37
SelWeaponItem::SelWeaponItem(int iconNum, int wNum, QWidget* parent) :
629
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    38
  QWidget(parent)
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    39
{
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    40
  QHBoxLayout* hbLayout = new QHBoxLayout(this);
644
45454744f240 some more layout tune
displacer
parents: 643
diff changeset
    41
  hbLayout->setSpacing(1);
45454744f240 some more layout tune
displacer
parents: 643
diff changeset
    42
  hbLayout->setMargin(1);
629
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    43
  
639
69d7ff3ab6f0 some layout tune
displacer
parents: 631
diff changeset
    44
  QLabel* lbl = new QLabel(this);
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    45
  lbl->setPixmap(QPixmap::fromImage(getAmmoImage(iconNum)));
639
69d7ff3ab6f0 some layout tune
displacer
parents: 631
diff changeset
    46
  lbl->setMaximumWidth(30);
69d7ff3ab6f0 some layout tune
displacer
parents: 631
diff changeset
    47
  lbl->setGeometry(0, 0, 30, 30);
629
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    48
  hbLayout->addWidget(lbl);
639
69d7ff3ab6f0 some layout tune
displacer
parents: 631
diff changeset
    49
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    50
  item=new WeaponItem(QImage(":/res/hh25x25.png"), this);
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    51
  item->setItemsNum(wNum);
640
e69b651bb336 first buggy infinity state for weapons
displacer
parents: 639
diff changeset
    52
  item->setInfinityState(true);
629
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    53
  hbLayout->addWidget(item);
639
69d7ff3ab6f0 some layout tune
displacer
parents: 631
diff changeset
    54
69d7ff3ab6f0 some layout tune
displacer
parents: 631
diff changeset
    55
  hbLayout->setStretchFactor(lbl, 1);
69d7ff3ab6f0 some layout tune
displacer
parents: 631
diff changeset
    56
  hbLayout->setStretchFactor(item, 99);
644
45454744f240 some more layout tune
displacer
parents: 643
diff changeset
    57
  hbLayout->setAlignment(lbl, Qt::AlignLeft | Qt::AlignVCenter);
45454744f240 some more layout tune
displacer
parents: 643
diff changeset
    58
  hbLayout->setAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
629
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    59
}
612
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    60
683
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    61
void SelWeaponItem::setItemsNum(const unsigned char num)
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    62
{
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    63
  item->setItemsNum(num);
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    64
}
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    65
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    66
unsigned char SelWeaponItem::getItemsNum() const
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    67
{
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    68
  return item->getItemsNum();
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    69
}
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    70
683
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    71
SelWeaponWidget::SelWeaponWidget(int numItems, QWidget* parent) :
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    72
  m_numItems(numItems),
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    73
  QWidget(parent)
612
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    74
{
694
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    75
  wconf = new QSettings(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat, this);
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    76
  if (wconf->allKeys().empty()) {
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    77
    wconf->setValue("Default", cDefaultAmmoStore->mid(10));
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    78
  }
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    79
683
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    80
  currentState=cDefaultAmmoStore->mid(10);
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    81
624
e7673b036db5 weaponItem added
displacer
parents: 612
diff changeset
    82
  pLayout=new QGridLayout(this);
644
45454744f240 some more layout tune
displacer
parents: 643
diff changeset
    83
  pLayout->setSpacing(1);
45454744f240 some more layout tune
displacer
parents: 643
diff changeset
    84
  pLayout->setMargin(1);
629
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    85
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    86
  int j=-1;
694
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    87
  int i=0, k=0;
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    88
  for(; i<m_numItems; ++i) {
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    89
    if(i==6) continue;
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    90
    if (k%4==0) ++j;
683
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
    91
    weaponItems[i]=new SelWeaponItem(i, currentState[i].digitValue(), this);
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    92
    pLayout->addWidget(weaponItems[i], j, k%4);
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    93
    ++k;
629
fb03a39a10ff more icons at weapon select
displacer
parents: 624
diff changeset
    94
  }
694
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    95
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    96
  m_name = new QLineEdit(this);
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
    97
  pLayout->addWidget(m_name, i, 0, 1, 4);
612
333d095319de abstract class for items container (hedgehogs num, bullets, etc.)
displacer
parents: 598
diff changeset
    98
}
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
    99
694
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   100
void SelWeaponWidget::setWeapons(const QString& ammo)
683
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   101
{
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   102
  for(int i=0; i<m_numItems; ++i) {
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   103
    twi::iterator it=weaponItems.find(i);
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   104
    if (it==weaponItems.end()) continue;
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   105
    it->second->setItemsNum(ammo[i].digitValue());
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   106
  }
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   107
  update();
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   108
}
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   109
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   110
void SelWeaponWidget::setDefault()
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   111
{
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   112
  setWeapons(cDefaultAmmoStore->mid(10));
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   113
}
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   114
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   115
void SelWeaponWidget::save()
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   116
{
694
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   117
  if (m_name->text()=="") return;
683
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   118
  currentState="";
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   119
  for(int i=0; i<m_numItems; ++i) {
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   120
    twi::const_iterator it=weaponItems.find(i);
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   121
    int num = it==weaponItems.end() ? 9 : (*this)[i];
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   122
    currentState = QString("%1%2").arg(currentState).arg(num);
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   123
  }
694
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   124
  wconf->setValue(m_name->text(), currentState);
695
34a93d123712 update weapons combo fixed
displacer
parents: 694
diff changeset
   125
  emit weaponsChanged();
683
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   126
}
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   127
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
   128
int SelWeaponWidget::operator [] (unsigned int weaponIndex) const
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
   129
{
683
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   130
  twi::const_iterator it=weaponItems.find(weaponIndex);
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
   131
  return it==weaponItems.end() ? 9 : it->second->getItemsNum();
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
   132
}
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
   133
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
   134
QString SelWeaponWidget::getWeaponsString() const
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
   135
{
683
57d624f71e65 select default and save weapons added
displacer
parents: 682
diff changeset
   136
  return currentState;
681
7a20c50988ec working weapons select
displacer
parents: 644
diff changeset
   137
}
694
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   138
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   139
void SelWeaponWidget::setWeaponsName(const QString& name)
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   140
{
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   141
  if(name!="" && wconf->contains(name)) {
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   142
    setWeapons(wconf->value(name).toString());
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   143
  }
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   144
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   145
  curWeaponsName=name;
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   146
  m_name->setText(name);
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   147
}
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   148
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   149
QStringList SelWeaponWidget::getWeaponNames() const
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   150
{
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   151
  return wconf->allKeys();
436045756181 working save weapons to file
displacer
parents: 683
diff changeset
   152
}