# HG changeset patch # User dag10 # Date 1358059561 -14400 # Node ID 3a1708759c4f53b5b768f713ef6a8174af6b979f # Parent 3c193ec03e0943624602d068375de66fa963ac7e Hat selection reworked diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/hedgewars.qrc --- a/QTfrontend/hedgewars.qrc Sun Jan 13 01:02:08 2013 +0400 +++ b/QTfrontend/hedgewars.qrc Sun Jan 13 10:46:01 2013 +0400 @@ -103,6 +103,7 @@ res/iconRope.png res/dice.png res/Star.png + res/inverse-corner-bl.png res/Flake.png res/Egg.png res/Confetti.png diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/model/HatModel.cpp --- a/QTfrontend/model/HatModel.cpp Sun Jan 13 01:02:08 2013 +0400 +++ b/QTfrontend/model/HatModel.cpp Sun Jan 13 10:46:01 2013 +0400 @@ -26,26 +26,28 @@ #include #include #include +#include #include "hwform.h" // player hash #include "DataManager.h" HatModel::HatModel(QObject* parent) : - QAbstractListModel(parent) -{ - hats = QVector >(); -} + QStandardItemModel(parent) +{} void HatModel::loadHats() { // this method resets the contents of this model (important to know for views). - beginResetModel(); + QStandardItemModel::beginResetModel(); + QStandardItemModel::clear(); - // prepare hats Vector - hats.clear(); + // New hats to add to model + QList hats; + // we'll need the DataManager a few times, so let's get a reference to it DataManager & dataMgr = DataManager::instance(); + // Default hat icon QPixmap hhpix = QPixmap("physfs://Graphics/Hedgehog/Idle.png").copy(0, 0, 32, 32); // my reserved hats @@ -54,7 +56,6 @@ QDir::Files, QStringList(playerHash+"*.png") ); - int nReserved = hatsList.size(); // regular hats @@ -64,14 +65,15 @@ QStringList("*.png") ) ); - - int nHats = hatsList.size(); + // Add each hat for (int i = 0; i < nHats; i++) { bool isReserved = (i < nReserved); + if (isReserved) continue; // For some reason, reserved hats were added in 9.19-dev, so this will hide them. Uncomment to show them. + QString str = hatsList.at(i); str = str.remove(QRegExp("\\.png$")); QPixmap pix( @@ -94,51 +96,11 @@ painter.end(); if (str == "NoHat") - hats.prepend(qMakePair(str, QIcon(tmppix))); + hats.prepend(new QStandardItem(QIcon(tmppix), str)); else - hats.append(qMakePair(str, QIcon(tmppix))); + hats.append(new QStandardItem(QIcon(tmppix), str)); } - - endResetModel(); -} - -QVariant HatModel::headerData(int section, - Qt::Orientation orientation, int role) const -{ - Q_UNUSED(section); - Q_UNUSED(orientation); - Q_UNUSED(role); - - return QVariant(); -} - -int HatModel::rowCount(const QModelIndex &parent) const -{ - if (parent.isValid()) - return 0; - else - return hats.size(); -} - -/*int HatModel::columnCount(const QModelIndex & parent) const -{ - if (parent.isValid()) - return 0; - else - return 2; -} -*/ -QVariant HatModel::data(const QModelIndex &index, - int role) const -{ - if (!index.isValid() || index.row() < 0 - || index.row() >= hats.size() - || (role != Qt::DisplayRole && role != Qt::DecorationRole)) - return QVariant(); - - if (role == Qt::DisplayRole) - return hats.at(index.row()).first; - else // role == Qt::DecorationRole - return hats.at(index.row()).second; -} + QStandardItemModel::appendColumn(hats); + QStandardItemModel::endResetModel(); +} \ No newline at end of file diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/model/HatModel.h --- a/QTfrontend/model/HatModel.h Sun Jan 13 01:02:08 2013 +0400 +++ b/QTfrontend/model/HatModel.h Sun Jan 13 10:46:01 2013 +0400 @@ -24,30 +24,22 @@ #ifndef HEDGEWARS_HATMODEL_H #define HEDGEWARS_HATMODEL_H -#include +#include #include #include #include #include -class HatModel : public QAbstractListModel +class HatModel : public QStandardItemModel { Q_OBJECT public: HatModel(QObject *parent = 0); - QVariant headerData(int section, Qt::Orientation orientation, int role) const; - int rowCount(const QModelIndex & parent) const; - //int columnCount(const QModelIndex & parent) const; - public slots: /// Reloads hats using the DataManager. void loadHats(); - - QVariant data(const QModelIndex &index, int role) const; - protected: - QVector > hats; }; #endif // HEDGEWARS_HATMODEL_H diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/res/css/qt.css --- a/QTfrontend/res/css/qt.css Sun Jan 13 01:02:08 2013 +0400 +++ b/QTfrontend/res/css/qt.css Sun Jan 13 10:46:01 2013 +0400 @@ -246,3 +246,42 @@ width: 8px; } +HatButton { +text-align: left; +} + +#hatList, #hatList:hover { +border-color: #F6CB1C; +} + +#hatList QScrollBar { +background-color: #130F2A; +border-top-right-radius: 10px; +border-bottom-right-radius: 10px; +} + +#hatList { +border-color: #F6CB1C; +border-width: 3px; +border-style: solid; +border-radius: 10px; +border-top-left-radius: 0px; +} + +#hatList::item { +background-color: #11084A; +padding: 4px; +border-radius: 10px; +color: #ffcc00 !important; +font: 8px; +border-width: 2px; +border-color: #11084A; +} + +#hatList::item:hover { +background-color: #150A61; +} + +#hatList::item:selected { +background-color: #150A61; +} \ No newline at end of file diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/res/inverse-corner-bl.png Binary file QTfrontend/res/inverse-corner-bl.png has changed diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/ui/page/pageeditteam.cpp --- a/QTfrontend/ui/page/pageeditteam.cpp Sun Jan 13 01:02:08 2013 +0400 +++ b/QTfrontend/ui/page/pageeditteam.cpp Sun Jan 13 10:46:01 2013 +0400 @@ -33,7 +33,7 @@ #include "keybinder.h" #include "DataManager.h" -#include "HatModel.h" +#include "hatbutton.h" #include "pageeditteam.h" @@ -64,25 +64,32 @@ HatModel * hatModel = DataManager::instance().hatModel(); + GBHLayout->addWidget(new QLabel(tr("Hat")), 0, 0); + GBHLayout->addWidget(new QLabel(tr("Name")), 0, 1); + for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++) { - HHHats[i] = new QComboBox(GBoxHedgehogs); - HHHats[i]->setModel(hatModel); - HHHats[i]->setIconSize(QSize(32, 37)); - //HHHats[i]->setSizeAdjustPolicy(QComboBox::AdjustToContents); - //HHHats[i]->setModelColumn(1); - //HHHats[i]->setMinimumWidth(132); - GBHLayout->addWidget(HHHats[i], i, 0); + HHHats[i] = new HatButton(GBoxHedgehogs); + GBHLayout->addWidget(HHHats[i], i + 1, 0); HHNameEdit[i] = new QLineEdit(GBoxHedgehogs); HHNameEdit[i]->setMaxLength(64); HHNameEdit[i]->setMinimumWidth(120); - GBHLayout->addWidget(HHNameEdit[i], i, 1); + HHNameEdit[i]->setFixedHeight(36); + HHNameEdit[i]->setWhatsThis(tr("This hedgehog's name")); + HHNameEdit[i]->setStyleSheet("padding: 6px;"); + GBHLayout->addWidget(HHNameEdit[i], i + 1, 1); - btnRandomHogName[i] = addButton(":/res/dice.png", GBHLayout, i, 3, 1, 1, true); + btnRandomHogName[i] = addButton(":/res/dice.png", GBHLayout, i + 1, 3, 1, 1, true); + btnRandomHogName[i]->setFixedHeight(HHNameEdit[i]->height()); + btnRandomHogName[i]->setWhatsThis(tr("Randomize this hedgehog's name")); } - btnRandomTeam = addButton(QPushButton::tr("Random Team"), GBHLayout, 9, 0); + btnRandomTeam = new QPushButton(); + btnRandomTeam->setText(tr("Random Team")); + btnRandomTeam->setStyleSheet("padding: 6px 10px;"); + GBHLayout->addWidget(btnRandomTeam, 9, 0, 1, 4, Qt::AlignCenter); + btnRandomTeam->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); vbox1->addWidget(GBoxHedgehogs); @@ -377,7 +384,7 @@ if (hh.Hat.startsWith("Reserved")) hh.Hat = "Reserved "+hh.Hat.remove(0,40); - HHHats[i]->setCurrentIndex(HHHats[i]->findData(hh.Hat, Qt::DisplayRole)); + HHHats[i]->setCurrentHat(hh.Hat); } CBGrave->setCurrentIndex(CBGrave->findText(team.grave())); @@ -409,7 +416,7 @@ { HWHog hh; hh.Name = HHNameEdit[i]->text(); - hh.Hat = HHHats[i]->currentText(); + hh.Hat = HHHats[i]->currentHat(); if (hh.Hat.startsWith("Reserved")) hh.Hat = "Reserved"+m_playerHash+hh.Hat.remove(0,9); diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/ui/page/pageeditteam.h --- a/QTfrontend/ui/page/pageeditteam.h Sun Jan 13 01:02:08 2013 +0400 +++ b/QTfrontend/ui/page/pageeditteam.h Sun Jan 13 10:46:01 2013 +0400 @@ -29,6 +29,7 @@ class SquareLabel; class KeyBinder; +class HatButton; class PageEditTeam : public AbstractPage { @@ -61,7 +62,7 @@ QToolBox *BindsBox; QLineEdit * TeamNameEdit; QLineEdit * HHNameEdit[HEDGEHOGS_PER_TEAM]; - QComboBox * HHHats[HEDGEHOGS_PER_TEAM]; + HatButton * HHHats[HEDGEHOGS_PER_TEAM]; HWTeam data(); QString m_playerHash; KeyBinder * binder; diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/ui/widget/hatbutton.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/ui/widget/hatbutton.cpp Sun Jan 13 10:46:01 2013 +0400 @@ -0,0 +1,72 @@ +/* + * Hedgewars, a free turn based strategy game + * Copyright (c) 2004-2012 Andrey Korotaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include + +#include "hatprompt.h" +#include "DataManager.h" +#include "hatmodel.h" +#include "hatbutton.h" + +HatButton::HatButton(QWidget* parent) : QPushButton(parent) +{ + setIconSize(QSize(32, 37)); + setFixedSize(44, 44); + + m_hatModel = DataManager::instance().hatModel(); + connect(this, SIGNAL(clicked()), this, SLOT(showPrompt())); + + setCurrentIndex(0); +} + +void HatButton::setCurrentIndex(int index) +{ + m_hat = m_hatModel->index(index, 0); + setWhatsThis(QString(tr("Change hat (%1)")).arg(m_hat.data(Qt::DisplayRole).toString())); + setToolTip(m_hat.data(Qt::DisplayRole).toString()); + setIcon(m_hat.data(Qt::DecorationRole).value()); +} + +int HatButton::currentIndex() +{ + return m_hat.row(); +} + +void HatButton::setCurrentHat(const QString & name) +{ + QList hats = m_hatModel->findItems(name); + + if (hats.count() > 0) + setCurrentIndex(hats[0]->row()); +} + +QString HatButton::currentHat() const +{ + return m_hat.data(Qt::DisplayRole).toString(); +} + +void HatButton::showPrompt() +{ + HatPrompt prompt(currentIndex(), this); + int hatID = prompt.exec() - 1; // Since 0 means canceled, so all indexes are +1'd + if (hatID < 0) return; + + setCurrentIndex(hatID); + emit currentIndexChanged(hatID); + emit currentHatChanged(currentHat()); +} \ No newline at end of file diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/ui/widget/hatbutton.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/ui/widget/hatbutton.h Sun Jan 13 10:46:01 2013 +0400 @@ -0,0 +1,55 @@ +/* + * Hedgewars, a free turn based strategy game + * Copyright (c) 2004-2012 Andrey Korotaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifndef HATBUTTON_H +#define HATBUTTON_H + +#include +#include +#include + +class HatModel; + +class HatButton : public QPushButton +{ + Q_OBJECT + Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex) + Q_PROPERTY(QString currentHat READ currentHat WRITE setCurrentHat) + + public: + HatButton(QWidget* parent); + int currentIndex(); + QString currentHat() const; + + private: + QModelIndex m_hat; + HatModel * m_hatModel; + + signals: + void currentIndexChanged(int); + void currentHatChanged(const QString &); + + public slots: + void setCurrentIndex(int index); + void setCurrentHat(const QString & name); + + private slots: + void showPrompt(); +}; + +#endif // HATBUTTON_H diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/ui/widget/hatprompt.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/ui/widget/hatprompt.cpp Sun Jan 13 10:46:01 2013 +0400 @@ -0,0 +1,169 @@ +/* + * Hedgewars, a free turn based strategy game + * Copyright (c) 2004-2012 Andrey Korotaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "datamanager.h" +#include "lineeditcursor.h" +#include "hatmodel.h" +#include "hatprompt.h" + +HatPrompt::HatPrompt(int currentIndex, QWidget* parent) : QDialog(parent) +{ + setModal(true); + setWindowFlags(Qt::Sheet); + setWindowModality(Qt::WindowModal); + setMinimumSize(550, 430); + resize(550, 430); + setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + + setStyleSheet("QPushButton { padding: 5px; margin-top: 10px; }"); + + // Hat model, and a model for setting a filter + HatModel * hatModel = DataManager::instance().hatModel(); + filterModel = new QSortFilterProxyModel(); + filterModel->setSourceModel(hatModel); + filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); + + // Grid + QGridLayout * dialogLayout = new QGridLayout(this); + dialogLayout->setSpacing(0); + dialogLayout->setColumnStretch(1, 1); + + QHBoxLayout * topLayout = new QHBoxLayout(); + + // Help/prompt message at top + QLabel * lblDesc = new QLabel(tr("Select a hat")); + lblDesc->setObjectName("lblDesc"); + lblDesc->setStyleSheet("#lblDesc { color: #130F2A; background: #F6CB1C; border: solid 4px #F6CB1C; border-top-left-radius: 10px; padding: 4px 10px;}"); + lblDesc->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + lblDesc->setFixedHeight(24); + lblDesc->setMinimumWidth(0); + + // Filter text box + QWidget * filterContainer = new QWidget(); + filterContainer->setFixedHeight(24); + filterContainer->setObjectName("filterContainer"); + filterContainer->setStyleSheet("#filterContainer { background: #F6CB1C; border-top-right-radius: 10px; padding: 3px; }"); + filterContainer->setFixedWidth(250); + txtFilter = new LineEditCursor(filterContainer); + txtFilter->setFixedWidth(250); + txtFilter->setFocus(); + txtFilter->setFixedHeight(22); + connect(txtFilter, SIGNAL(textChanged(const QString &)), this, SLOT(filterChanged(const QString &))); + connect(txtFilter, SIGNAL(moveUp()), this, SLOT(moveUp())); + connect(txtFilter, SIGNAL(moveDown()), this, SLOT(moveDown())); + connect(txtFilter, SIGNAL(moveLeft()), this, SLOT(moveLeft())); + connect(txtFilter, SIGNAL(moveRight()), this, SLOT(moveRight())); + + // Filter label + QLabel * lblFilter = new QLabel(tr("Filter: "), txtFilter); + lblFilter->setStyleSheet(QString("background: none; margin-left: -%1px; margin-top: 4px;").arg(lblFilter->width() / 2 - 3)); + txtFilter->setStyleSheet(QString("border-width: 0px; background-color: rgb(13, 5, 68); border-radius: 6px; margin-top: 3px; margin-right: 3px; padding-left: %1px; padding-bottom: 2px;").arg(lblFilter->width() / 2)); + + // Corner widget + QLabel * corner = new QLabel(); + corner->setPixmap(QPixmap(QString::fromUtf8(":/res/inverse-corner-bl.png"))); + corner->setFixedSize(10, 10); + + // Add widgets to top layout + topLayout->addWidget(lblDesc); + topLayout->addWidget(filterContainer); + topLayout->addWidget(corner, 0, Qt::AlignBottom); + topLayout->addStretch(1); + + // Cancel button (closes dialog) + QPushButton * btnCancel = new QPushButton(tr("Cancel")); + connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject())); + + // Select button + QPushButton * btnSelect = new QPushButton(tr("Use selected hat")); + btnSelect->setDefault(true); + connect(btnSelect, SIGNAL(clicked()), this, SLOT(onAccepted())); + + // Add hats + list = new HatListView(); + list->setModel(filterModel); + list->setViewMode(QListView::IconMode); + list->setResizeMode(QListView::Adjust); + list->setMovement(QListView::Static); + list->setEditTriggers(QAbstractItemView::NoEditTriggers); + list->setSpacing(8); + list->setWordWrap(true); + list->setSelectionMode(QAbstractItemView::SingleSelection); + list->setObjectName("hatList"); + list->setCurrentIndex(filterModel->index(currentIndex, 0)); + connect(list, SIGNAL(activated(const QModelIndex &)), this, SLOT(hatChosen(const QModelIndex &))); + connect(list, SIGNAL(clicked(const QModelIndex &)), this, SLOT(hatChosen(const QModelIndex &))); + + // Add elements to layouts + dialogLayout->addLayout(topLayout, 0, 0, 1, 3); + dialogLayout->addWidget(list, 1, 0, 1, 3); + dialogLayout->addWidget(btnCancel, 2, 0, 1, 1, Qt::AlignLeft); + dialogLayout->addWidget(btnSelect, 2, 2, 1, 1, Qt::AlignRight); +} + +void HatPrompt::moveUp() +{ + list->setCurrentIndex(list->moveCursor(QAbstractItemView::MoveUp, Qt::NoModifier)); +} + +void HatPrompt::moveDown() +{ + list->setCurrentIndex(list->moveCursor(QAbstractItemView::MoveDown, Qt::NoModifier)); +} + +void HatPrompt::moveLeft() +{ + list->setCurrentIndex(list->moveCursor(QAbstractItemView::MoveLeft, Qt::NoModifier)); +} + +void HatPrompt::moveRight() +{ + list->setCurrentIndex(list->moveCursor(QAbstractItemView::MoveRight, Qt::NoModifier)); +} + +void HatPrompt::onAccepted() +{ + hatChosen(list->currentIndex()); +} + +// When a hat is selected +void HatPrompt::hatChosen(const QModelIndex & index) +{ + done(filterModel->mapToSource(index).row() + 1); // Since returning 0 means canceled +} + +// When the text in the filter text box is changed +void HatPrompt::filterChanged(const QString & text) +{ + filterModel->setFilterFixedString(text); + list->setCurrentIndex(filterModel->index(0, 0)); +} \ No newline at end of file diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/ui/widget/hatprompt.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/ui/widget/hatprompt.h Sun Jan 13 10:46:01 2013 +0400 @@ -0,0 +1,61 @@ +/* + * Hedgewars, a free turn based strategy game + * Copyright (c) 2004-2012 Andrey Korotaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifndef HATPROMPT_H +#define HATPROMPT_H + +#include +#include +#include + +class QLineEdit; +class QModelIndex; +class QSortFilterProxyModel; +class LineEditCursor; + +class HatListView : public QListView +{ + friend class HatPrompt; + + public: + HatListView(QWidget* parent = 0) {}; +}; + +class HatPrompt : public QDialog +{ + Q_OBJECT + + public: + HatPrompt(int currentIndex = 0, QWidget* parent = 0); + + private: + LineEditCursor * txtFilter; + HatListView * list; + QSortFilterProxyModel * filterModel; + + private slots: + void onAccepted(); + void hatChosen(const QModelIndex & index); + void filterChanged(const QString & text); + void moveUp(); + void moveDown(); + void moveLeft(); + void moveRight(); +}; + +#endif // HATPROMPT_H diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/ui/widget/lineeditcursor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/ui/widget/lineeditcursor.cpp Sun Jan 13 10:46:01 2013 +0400 @@ -0,0 +1,35 @@ +/* + * Hedgewars, a free turn based strategy game + * Copyright (c) 2004-2012 Andrey Korotaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include + +#include "lineeditcursor.h" + +void LineEditCursor::keyPressEvent(QKeyEvent * event) +{ + if (event->key() == Qt::Key_Up) + emit moveUp(); + else if (event->key() == Qt::Key_Down) + emit moveDown(); + else if (event->key() == Qt::Key_Left) + emit moveLeft(); + else if (event->key() == Qt::Key_Right) + emit moveRight(); + else + QLineEdit::keyPressEvent(event); +} \ No newline at end of file diff -r 3c193ec03e09 -r 3a1708759c4f QTfrontend/ui/widget/lineeditcursor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/ui/widget/lineeditcursor.h Sun Jan 13 10:46:01 2013 +0400 @@ -0,0 +1,41 @@ +/* + * Hedgewars, a free turn based strategy game + * Copyright (c) 2004-2012 Andrey Korotaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifndef LINEEDITCURSOR_H +#define LINEEDITCURSOR_H + +#include + +class LineEditCursor : public QLineEdit +{ + Q_OBJECT + + public: + LineEditCursor(QWidget* parent = 0) : QLineEdit(parent) {}; + + signals: + void moveUp(); + void moveDown(); + void moveLeft(); + void moveRight(); + + private: + void keyPressEvent(QKeyEvent * event); +}; + +#endif // LINEEDITCURSOR_H \ No newline at end of file diff -r 3c193ec03e09 -r 3a1708759c4f project_files/hedgewars.pro --- a/project_files/hedgewars.pro Sun Jan 13 01:02:08 2013 +0400 +++ b/project_files/hedgewars.pro Sun Jan 13 10:46:01 2013 +0400 @@ -189,6 +189,8 @@ ../QTfrontend/model/roomslistmodel.cpp \ ../QTfrontend/ui/dialog/input_password.cpp \ ../QTfrontend/ui/widget/colorwidget.cpp \ + ../QTfrontend/ui/widget/hatbutton.cpp \ + ../QTfrontend/ui/widget/hatprompt.cpp \ ../QTfrontend/model/HatModel.cpp \ ../QTfrontend/model/GameStyleModel.cpp \ ../QTfrontend/ui/page/pagevideos.cpp \