# HG changeset patch # User unc0rr # Date 1338147763 -14400 # Node ID fcab1fd02bc63d5b15b424dbe1205095d1fe316f # Parent 574b385ce7dfd1c8b5a9e3e1659ed1d31153c0c5 - Allow switching colors with mouse wheel - Use indices instead of color values - Introduce a model for colors - Some small fixes, .pro can be used to build again - Yay, tested it to work via network (and fixed a bug!) (TODO: pass colors to engine by index) diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/game.cpp --- a/QTfrontend/game.cpp Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/game.cpp Sun May 27 23:42:43 2012 +0400 @@ -124,7 +124,7 @@ HWTeam team1; team1.setDifficulty(0); - team1.setColor(QColor(colors[0])); + team1.setColor(0); team1.setNumHedgehogs(4); HWNamegen::teamRandomNames(team1,true); HWProto::addStringListToBuffer(teamscfg, @@ -132,7 +132,7 @@ HWTeam team2; team2.setDifficulty(4); - team2.setColor(QColor(colors[1])); + team2.setColor(1); team2.setNumHedgehogs(4); do HWNamegen::teamRandomNames(team2,true); diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/hwconsts.cpp.in --- a/QTfrontend/hwconsts.cpp.in Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/hwconsts.cpp.in Sun May 27 23:42:43 2012 +0400 @@ -16,6 +16,8 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ +#include + #include "hwconsts.h" QString * cProtoVer = new QString("${HEDGEWARS_PROTO_VER}"); @@ -70,3 +72,19 @@ int season = SEASON_NONE; int years_since_foundation = 0; + +QStandardItemModel * colorsModel; + +void hwConstsInit() +{ + colorsModel = new QStandardItemModel(); + + int i = 0; + while(colors[i]) + { + QStandardItem * item = new QStandardItem(); + item->setData(QColor(colors[i])); + colorsModel->appendRow(item); + ++i; + } +} diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/hwconsts.h --- a/QTfrontend/hwconsts.h Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/hwconsts.h Sun May 27 23:42:43 2012 +0400 @@ -38,13 +38,14 @@ extern int cMaxTeams; extern int cMinServerVersion; -class QStringListModel; +class QStandardItemModel; extern QString * cDefaultAmmoStore; extern int cAmmoNumber; extern QList< QPair > cDefaultAmmos; -extern unsigned int colors[]; +//extern unsigned int colors[]; +extern QStandardItemModel * colorsModel; extern QString * netHost; extern quint16 netPort; @@ -59,6 +60,8 @@ //Could be used to implement a text/graphic like "This is the xxth birthday of hedgewars" or similar extern int years_since_foundation; +void hwConstsInit(); + #endif #define HEDGEHOGS_PER_TEAM 8 diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/main.cpp --- a/QTfrontend/main.cpp Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/main.cpp Sun May 27 23:42:43 2012 +0400 @@ -103,6 +103,9 @@ int main(int argc, char *argv[]) { HWApplication app(argc, argv); + + hwConstsInit(); + app.setAttribute(Qt::AA_DontShowIconsInMenus,false); QStringList arguments = app.arguments(); diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/net/newnetclient.cpp --- a/QTfrontend/net/newnetclient.cpp Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/net/newnetclient.cpp Sun May 27 23:42:43 2012 +0400 @@ -106,7 +106,7 @@ { QString cmd = QString("ADD_TEAM") + delimeter + team.name() + delimeter + - team.color().name() + delimeter + + QString::number(team.color()) + delimeter + team.grave() + delimeter + team.fort() + delimeter + team.voicepack() + delimeter + @@ -613,7 +613,7 @@ return; } HWTeam tmptm(lst[1]); - tmptm.setColor(QColor(lst[2])); + tmptm.setColor(lst[2].toInt()); emit teamColorChanged(tmptm); return; } @@ -687,7 +687,7 @@ RawSendNet(QString("TEAM_COLOR%1%2%1%3") .arg(delimeter) .arg(team.name()) - .arg(team.color().name())); + .arg(team.color())); } void HWNewNet::onParamChanged(const QString & param, const QStringList & value) diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/team.cpp --- a/QTfrontend/team.cpp Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/team.cpp Sun May 27 23:42:43 2012 +0400 @@ -22,6 +22,7 @@ #include #include #include +#include #include "team.h" #include "hwform.h" @@ -248,10 +249,10 @@ QStringList sl; if (m_isNetTeam) { - sl.push_back(QString("eaddteam %3 %1 %2").arg(m_color.rgb() & 0xffffff).arg(m_name).arg(QString(QCryptographicHash::hash(m_owner.toLatin1(), QCryptographicHash::Md5).toHex()))); + sl.push_back(QString("eaddteam %3 %1 %2").arg(qcolor().rgb() & 0xffffff).arg(m_name).arg(QString(QCryptographicHash::hash(m_owner.toLatin1(), QCryptographicHash::Md5).toHex()))); sl.push_back("erdriven"); } - else sl.push_back(QString("eaddteam %3 %1 %2").arg(m_color.rgb() & 0xffffff).arg(m_name).arg(playerHash)); + else sl.push_back(QString("eaddteam %3 %1 %2").arg(qcolor().rgb() & 0xffffff).arg(m_name).arg(playerHash)); sl.push_back(QString("egrave " + m_grave)); sl.push_back(QString("efort " + m_fort)); @@ -334,11 +335,17 @@ } // color -QColor HWTeam::color() const +int HWTeam::color() const { return m_color; } -void HWTeam::setColor(const QColor & color) + +QColor HWTeam::qcolor() const +{ + return colorsModel->item(m_color)->data().value(); +} + +void HWTeam::setColor(int color) { m_color = color; } @@ -422,4 +429,3 @@ { m_wins++; } - diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/team.h --- a/QTfrontend/team.h Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/team.h Sun May 27 23:42:43 2012 +0400 @@ -63,7 +63,8 @@ // attribute getters unsigned int campaignProgress() const; - QColor color() const; + int color() const; + QColor qcolor() const; unsigned int difficulty() const; QString flag() const; QString fort() const; @@ -78,7 +79,6 @@ // attribute setters void bindKey(unsigned int idx, const QString & key); - void setColor(const QColor & color); void setDifficulty(unsigned int level); void setFlag(const QString & flag); void setFort(const QString & fort); @@ -100,6 +100,8 @@ bool operator < (const HWTeam& t1) const; HWTeam & operator = (const HWTeam & other); +public slots: + void setColor(int color); private: @@ -117,7 +119,7 @@ // class members that contain info for the current game setup quint8 m_numHedgehogs; - QColor m_color; + int m_color; bool m_isNetTeam; QString m_owner; diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/ui/page/pageplayrecord.cpp --- a/QTfrontend/ui/page/pageplayrecord.cpp Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/ui/page/pageplayrecord.cpp Sun May 27 23:42:43 2012 +0400 @@ -110,7 +110,7 @@ void PagePlayDemo::refresh() { - if (this->isVisible()); + if (this->isVisible()) FillFromDir(recType); } diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/ui/widget/colorwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/ui/widget/colorwidget.cpp Sun May 27 23:42:43 2012 +0400 @@ -0,0 +1,71 @@ +#include +#include +#include + +#include "colorwidget.h" +#include "hwconsts.h" + +ColorWidget::ColorWidget(QStandardItemModel *colorsModel, QWidget *parent) : + QWidget(parent) +{ + m_colorsModel = colorsModel; + + setColor(0); + setStyleSheet(""); + setAutoFillBackground(true); + + connect(m_colorsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(dataChanged(QModelIndex,QModelIndex))); +} + +ColorWidget::~ColorWidget() +{ + +} + +void ColorWidget::setColor(int color) +{ + Q_ASSERT_X(color >= 0 && color < m_colorsModel->rowCount(), "ColorWidget::setColor", "Color index out of range"); + + m_color = color; + + QStandardItem * item = m_colorsModel->item(m_color); + + QPalette p = palette(); + p.setColor(QPalette::Window, item->data().value()); + setPalette(p); + + emit colorChanged(m_color); +} + +int ColorWidget::getColor() +{ + return m_color; +} + +void ColorWidget::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) +{ + if(m_color >= topLeft.row() && m_color <= bottomRight.row()) + setColor(m_color); +} + +void ColorWidget::mousePressEvent(QMouseEvent * event) +{ + switch(event->button()) + { + case Qt::LeftButton: + setColor((m_color + 1) % m_colorsModel->rowCount()); + break; + case Qt::RightButton: + setColor((m_color + m_colorsModel->rowCount() - 1) % m_colorsModel->rowCount()); + break; + default:; + } +} + +void ColorWidget::wheelEvent(QWheelEvent *event) +{ + if(event->delta() > 0) + setColor((m_color + 1) % m_colorsModel->rowCount()); + else + setColor((m_color + m_colorsModel->rowCount() - 1) % m_colorsModel->rowCount()); +} diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/ui/widget/colorwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/ui/widget/colorwidget.h Sun May 27 23:42:43 2012 +0400 @@ -0,0 +1,40 @@ +#ifndef COLORWIDGET_H +#define COLORWIDGET_H + +#include +#include + +namespace Ui { +class ColorWidget; +} + +class QStandardItemModel; + +class ColorWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ColorWidget(QStandardItemModel *colorsModel, QWidget *parent = 0); + ~ColorWidget(); + + void setColors(QStandardItemModel * colorsModel); + void setColor(int color); + int getColor(); + +signals: + void colorChanged(int color); + +private: + int m_color; + QStandardItemModel * m_colorsModel; + +private slots: + void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); + +protected: + void mousePressEvent(QMouseEvent * event); + void wheelEvent(QWheelEvent * event); +}; + +#endif // COLORWIDGET_H diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/ui/widget/frameTeam.cpp --- a/QTfrontend/ui/widget/frameTeam.cpp Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/ui/widget/frameTeam.cpp Sun May 27 23:42:43 2012 +0400 @@ -20,6 +20,7 @@ #include #include #include +#include #include "frameTeam.h" #include "teamselhelper.h" @@ -36,10 +37,6 @@ mainLayout.setSpacing(1); mainLayout.setContentsMargins(4, 4, 4, 4); - int i = 0; - while(colors[i] != 0) - availableColors.push_back(QColor(colors[i++])); - resetColors(); this->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed); } @@ -57,19 +54,13 @@ void FrameTeams::resetColors() { - currentColor = availableColors.last(); // ensure next color is the first one + currentColor = colorsModel->rowCount() - 1; // ensure next color is the first one } -QColor FrameTeams::getNextColor() const +int FrameTeams::getNextColor() { - int idx = availableColors.indexOf(currentColor); - - idx++; - - if (idx >= availableColors.size()) - idx = 0; - - return availableColors.at(idx); + currentColor = (currentColor + 1) % colorsModel->rowCount(); + return currentColor; } void FrameTeams::addTeam(HWTeam team, bool willPlay) diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/ui/widget/frameTeam.h --- a/QTfrontend/ui/widget/frameTeam.h Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/ui/widget/frameTeam.h Sun May 27 23:42:43 2012 +0400 @@ -42,7 +42,7 @@ void setHHNum(const HWTeam& team); void setTeamColor(const HWTeam& team); void setInteractivity(bool interactive); - QColor getNextColor() const; + int getNextColor(); QSize sizeHint() const; signals: @@ -55,8 +55,7 @@ private: const int maxHedgehogsPerGame; int overallHedgehogs; - QList availableColors; - QColor currentColor; + int currentColor; void emitTeamColorChanged(const HWTeam& team); diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/ui/widget/teamselhelper.cpp --- a/QTfrontend/ui/widget/teamselhelper.cpp Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/ui/widget/teamselhelper.cpp Sun May 27 23:42:43 2012 +0400 @@ -26,6 +26,7 @@ #include "teamselhelper.h" #include "hwconsts.h" #include "frameTeam.h" +#include "colorwidget.h" void TeamLabel::teamButtonClicked() { @@ -34,7 +35,7 @@ TeamShowWidget::TeamShowWidget(HWTeam team, bool isPlaying, FrameTeams * parent) : QWidget(parent), mainLayout(this), m_team(team), m_isPlaying(isPlaying), phhoger(0), - colorButt(0) + colorWidget(0) { m_parentFrameTeams = parent; QPalette newPalette = palette(); @@ -67,17 +68,15 @@ if(m_isPlaying) { // team color - colorButt = new QPushButton(this); - colorButt->setMaximumWidth(26); - colorButt->setMinimumHeight(26); - colorButt->setGeometry(0, 0, 26, 26); - - incrementTeamColor(); - connect(colorButt, SIGNAL(clicked()), this, SLOT(incrementTeamColor())); - - colorButt->setContextMenuPolicy(Qt::CustomContextMenu); - connect(colorButt, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(decrementTeamColor())); - mainLayout.addWidget(colorButt); + colorWidget = new ColorWidget(colorsModel, this); + colorWidget->setMinimumWidth(26); + colorWidget->setMaximumWidth(26); + colorWidget->setMinimumHeight(26); + colorWidget->setMaximumHeight(26); + //colorWidget->setGeometry(0, 0, 26, 26); + connect(colorWidget, SIGNAL(colorChanged(int)), this, SLOT(onColorChanged(int))); + colorWidget->setColor(m_parentFrameTeams->getNextColor()); + mainLayout.addWidget(colorWidget); phhoger = new CHedgehogerWidget(QImage(":/res/hh25x25.png"), QImage(":/res/hh25x25grey.png"), this); connect(phhoger, SIGNAL(hedgehogsNumChanged()), this, SLOT(hhNumChanged())); @@ -99,7 +98,7 @@ butt->setEnabled(interactive); } - colorButt->setEnabled(interactive); + colorWidget->setEnabled(interactive); phhoger->setEnabled(interactive); } @@ -128,35 +127,16 @@ return params; }*/ -void TeamShowWidget::incrementTeamColor() -{ - changeTeamColor(m_parentFrameTeams->getNextColor()); -} -void TeamShowWidget::decrementTeamColor() + +void TeamShowWidget::changeTeamColor(int color) { - const QList & availColors = m_parentFrameTeams->availableColors; - int idx = availColors.indexOf(m_parentFrameTeams->currentColor); - - idx--; - - if (idx < 0) - idx = availColors.size() - 1; - - changeTeamColor(availColors.at(idx)); + colorWidget->setColor(color); } -void TeamShowWidget::changeTeamColor(QColor color) +void TeamShowWidget::onColorChanged(int color) { - QColor & curColor = m_parentFrameTeams->currentColor; - curColor = color; + m_team.setColor(color); - colorButt->setStyleSheet(QString("QPushButton{" - "background-color: %1;" - "border-width: 1px;" - "border-radius: 2px;" - "}").arg(curColor.name())); - - m_team.setColor(color); emit teamColorChanged(m_team); } diff -r 574b385ce7df -r fcab1fd02bc6 QTfrontend/ui/widget/teamselhelper.h --- a/QTfrontend/ui/widget/teamselhelper.h Sat May 26 16:50:51 2012 -0400 +++ b/QTfrontend/ui/widget/teamselhelper.h Sun May 27 23:42:43 2012 +0400 @@ -28,6 +28,8 @@ #include "teamselect.h" #include "hedgehogerWidget.h" +class ColorWidget; + class TeamLabel : public QLabel { Q_OBJECT @@ -48,13 +50,12 @@ Q_OBJECT public slots: - void incrementTeamColor(); - void decrementTeamColor(); - void changeTeamColor(QColor color=QColor()); + void changeTeamColor(int color = 0); void hhNumChanged(); private slots: void activateTeam(); + void onColorChanged(int color); public: TeamShowWidget(HWTeam team, bool isPlaying, FrameTeams * parent); @@ -69,10 +70,9 @@ HWTeam m_team; bool m_isPlaying; CHedgehogerWidget* phhoger; - QPushButton* colorButt; + ColorWidget* colorWidget; QPushButton* butt; FrameTeams * m_parentFrameTeams; -// QPushButton* bText; signals: void teamStatusChanged(HWTeam team); diff -r 574b385ce7df -r fcab1fd02bc6 project_files/hedgewars.pro --- a/project_files/hedgewars.pro Sat May 26 16:50:51 2012 -0400 +++ b/project_files/hedgewars.pro Sun May 27 23:42:43 2012 +0400 @@ -26,7 +26,6 @@ ../QTfrontend/model/MapModel.h \ ../QTfrontend/model/ammoSchemeModel.h \ ../QTfrontend/model/netserverslist.h \ - ../QTfrontend/model/hats.h \ ../QTfrontend/ui/page/pagedrawmap.h \ ../QTfrontend/ui/page/pagedata.h \ ../QTfrontend/ui/page/pagetraining.h \ @@ -102,12 +101,14 @@ ../QTfrontend/ui/widget/qpushbuttonwithsound.h \ ../QTfrontend/ui/page/pagefeedback.h \ ../QTfrontend/model/roomslistmodel.h \ - ../QTfrontend/ui/dialog/input_password.h + ../QTfrontend/ui/dialog/input_password.h \ + ../QTfrontend/ui/widget/colorwidget.h \ + ../QTfrontend/model/HatModel.h \ + ../QTfrontend/model/GameStyleModel.h SOURCES += ../QTfrontend/model/ammoSchemeModel.cpp \ ../QTfrontend/model/MapModel.cpp \ ../QTfrontend/model/ThemeModel.cpp \ - ../QTfrontend/model/hats.cpp \ ../QTfrontend/model/netserverslist.cpp \ ../QTfrontend/ui/qaspectratiolayout.cpp \ ../QTfrontend/ui/page/pagemain.cpp \ @@ -182,7 +183,10 @@ ../QTfrontend/ui/widget/qpushbuttonwithsound.cpp \ ../QTfrontend/ui/page/pagefeedback.cpp \ ../QTfrontend/model/roomslistmodel.cpp \ - ../QTfrontend/ui/dialog/input_password.cpp + ../QTfrontend/ui/dialog/input_password.cpp \ + ../QTfrontend/ui/widget/colorwidget.cpp \ + ../QTfrontend/model/HatModel.cpp \ + ../QTfrontend/model/GameStyleModel.cpp win32 { SOURCES += ../QTfrontend/xfire.cpp @@ -236,3 +240,5 @@ CONFIG += warn_on x86 #CONFIG += x86 ppc x86_64 ppc64 } + +FORMS +=