QTfrontend/model/hats.cpp
author Xeli
Sun, 22 Jan 2012 23:36:36 +0100
changeset 6589 2fa0a274a1e3
parent 6196 c16e84558f71
child 6616 f77bb02b669f
permissions -rw-r--r--
some tweaks to the build process, cmake now generates some vital files, fpc only compiles those files which have been changed since the last time, SDL still does not work
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1236
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
     1
/*
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
     2
 * Hedgewars, a free turn based strategy game
4976
088d40d8aba2 Happy 2011 :)
koda
parents: 4560
diff changeset
     3
 * Copyright (c) 2008-2011 Andrey Korotaev <unC0Rr@gmail.com>
1236
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
     4
 *
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
     8
 *
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    12
 * GNU General Public License for more details.
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    13
 *
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    17
 */
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    18
1239
4901abe4c3b0 - Finish hat selection widget
unc0rr
parents: 1238
diff changeset
    19
#include <QDir>
4901abe4c3b0 - Finish hat selection widget
unc0rr
parents: 1238
diff changeset
    20
#include <QPixmap>
1281
1f8456577a39 Draw a hedgehog under the hat in hats combobox
unc0rr
parents: 1239
diff changeset
    21
#include <QPainter>
1239
4901abe4c3b0 - Finish hat selection widget
unc0rr
parents: 1238
diff changeset
    22
#include "hwconsts.h"
2874
3c7c2bf1ba38 A simple hat reservation mechanism. Can be worked around with a little effort, but to make it useful, you'd have to get everyone you played with to work around it too. Quite a bit of effort for a small reward feature.
nemo
parents: 2377
diff changeset
    23
#include "hwform.h"
1237
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
    24
#include "hats.h"
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
    25
6160
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    26
#include "HWDataManager.h"
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    27
1236
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    28
HatsModel::HatsModel(QObject* parent) :
1239
4901abe4c3b0 - Finish hat selection widget
unc0rr
parents: 1238
diff changeset
    29
  QAbstractListModel(parent)
1236
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    30
{
6196
c16e84558f71 minor cleanups, mostly in own code
sheepluva
parents: 6167
diff changeset
    31
    HWDataManager & dataMgr = HWDataManager::instance();
c16e84558f71 minor cleanups, mostly in own code
sheepluva
parents: 6167
diff changeset
    32
6167
728cabee2c9f simplified some stuff I wrote
sheepluva
parents: 6160
diff changeset
    33
    QPixmap hhpix = QPixmap(
6196
c16e84558f71 minor cleanups, mostly in own code
sheepluva
parents: 6167
diff changeset
    34
        dataMgr.findFileForRead("Graphics/Hedgehog/Idle.png")
6167
728cabee2c9f simplified some stuff I wrote
sheepluva
parents: 6160
diff changeset
    35
    ).copy(0, 0, 32, 32);
6160
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    36
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    37
    // my reserved hats
6196
c16e84558f71 minor cleanups, mostly in own code
sheepluva
parents: 6167
diff changeset
    38
    QStringList hatsList = dataMgr.entryList(
6160
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    39
                                   "Graphics/Hats/Reserved",
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    40
                                   QDir::Files,
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    41
                                   QStringList(playerHash+"*.png")
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    42
                               );
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    43
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    44
    int nReserved = hatsList.size();
1281
1f8456577a39 Draw a hedgehog under the hat in hats combobox
unc0rr
parents: 1239
diff changeset
    45
6160
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    46
    // regular hats
6196
c16e84558f71 minor cleanups, mostly in own code
sheepluva
parents: 6167
diff changeset
    47
    hatsList.append(dataMgr.entryList(
6160
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    48
                                   "Graphics/Hats",
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    49
                                   QDir::Files,
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    50
                                   QStringList("*.png")
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    51
                               )
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    52
                   );
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    53
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    54
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    55
    int nHats = hatsList.size();
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    56
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    57
    for (int i = 0; i < nHats; i++)
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    58
    {
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    59
        bool isReserved = (i < nReserved);
1239
4901abe4c3b0 - Finish hat selection widget
unc0rr
parents: 1238
diff changeset
    60
6160
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    61
        QString str = hatsList.at(i);
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    62
        str = str.remove(QRegExp("\\.png$"));
6167
728cabee2c9f simplified some stuff I wrote
sheepluva
parents: 6160
diff changeset
    63
        QPixmap pix(
6196
c16e84558f71 minor cleanups, mostly in own code
sheepluva
parents: 6167
diff changeset
    64
            dataMgr.findFileForRead(
6167
728cabee2c9f simplified some stuff I wrote
sheepluva
parents: 6160
diff changeset
    65
                "Graphics/Hats/" + QString(isReserved?"Reserved/":"") + str + 
728cabee2c9f simplified some stuff I wrote
sheepluva
parents: 6160
diff changeset
    66
                ".png"
728cabee2c9f simplified some stuff I wrote
sheepluva
parents: 6160
diff changeset
    67
            )
728cabee2c9f simplified some stuff I wrote
sheepluva
parents: 6160
diff changeset
    68
        );
6160
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    69
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    70
        // rename properly
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    71
        if (isReserved)
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    72
            str = "Reserved "+str.remove(0,32);
5238
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    73
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    74
        QPixmap tmppix(32, 37);
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    75
        tmppix.fill(QColor(Qt::transparent));
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    76
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    77
        QPainter painter(&tmppix);
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    78
        painter.drawPixmap(QPoint(0, 5), hhpix);
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    79
        painter.drawPixmap(QPoint(0, 0), pix.copy(0, 0, 32, 32));
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    80
        if(pix.width() > 32)
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    81
            painter.drawPixmap(QPoint(0, 0), pix.copy(32, 0, 32, 32));
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    82
        painter.end();
46ddaf14509d Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents: 4976
diff changeset
    83
6160
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    84
        if (str == "NoHat")
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    85
            hats.prepend(qMakePair(str, QIcon(tmppix)));
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    86
        else
863d3edf5690 cleaning up some more, also adding a WIP file. changes: hats in the hat selection are now sorted like this: NoHat, Reserved hats (alphabetically), All other hats (alphabeticall)
sheepluva
parents: 6061
diff changeset
    87
            hats.append(qMakePair(str, QIcon(tmppix)));
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
    88
    }
1236
f9110fd03754 Add stubs for hats implementation
unc0rr
parents:
diff changeset
    89
}
1237
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
    90
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
    91
QVariant HatsModel::headerData(int section,
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
    92
            Qt::Orientation orientation, int role) const
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
    93
{
4560
5d6c7f88db73 - Some work on drawMap widget and scene to allow undo, clear, save and load operations
unc0rr
parents: 3445
diff changeset
    94
    Q_UNUSED(section);
5d6c7f88db73 - Some work on drawMap widget and scene to allow undo, clear, save and load operations
unc0rr
parents: 3445
diff changeset
    95
    Q_UNUSED(orientation);
5d6c7f88db73 - Some work on drawMap widget and scene to allow undo, clear, save and load operations
unc0rr
parents: 3445
diff changeset
    96
    Q_UNUSED(role);
5d6c7f88db73 - Some work on drawMap widget and scene to allow undo, clear, save and load operations
unc0rr
parents: 3445
diff changeset
    97
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
    98
    return QVariant();
1237
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
    99
}
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
   100
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
   101
int HatsModel::rowCount(const QModelIndex &parent) const
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
   102
{
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   103
    if (parent.isValid())
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   104
        return 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   105
    else
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   106
        return hats.size();
1237
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
   107
}
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
   108
1239
4901abe4c3b0 - Finish hat selection widget
unc0rr
parents: 1238
diff changeset
   109
/*int HatsModel::columnCount(const QModelIndex & parent) const
1237
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
   110
{
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   111
    if (parent.isValid())
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   112
        return 0;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   113
    else
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   114
        return 2;
1237
7f3105a15d5d Fix build
unc0rr
parents: 1236
diff changeset
   115
}
1239
4901abe4c3b0 - Finish hat selection widget
unc0rr
parents: 1238
diff changeset
   116
*/
1238
914bd2a9a249 Add hat selection control to team editing page (it's empty combobox yet)
unc0rr
parents: 1237
diff changeset
   117
QVariant HatsModel::data(const QModelIndex &index,
914bd2a9a249 Add hat selection control to team editing page (it's empty combobox yet)
unc0rr
parents: 1237
diff changeset
   118
                         int role) const
914bd2a9a249 Add hat selection control to team editing page (it's empty combobox yet)
unc0rr
parents: 1237
diff changeset
   119
{
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   120
    if (!index.isValid() || index.row() < 0
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   121
        || index.row() >= hats.size()
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   122
        || (role != Qt::DisplayRole && role != Qt::DecorationRole))
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   123
        return QVariant();
1238
914bd2a9a249 Add hat selection control to team editing page (it's empty combobox yet)
unc0rr
parents: 1237
diff changeset
   124
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   125
    if (role == Qt::DisplayRole)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   126
        return hats.at(index.row()).first;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   127
    else // role == Qt::DecorationRole
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2874
diff changeset
   128
        return hats.at(index.row()).second;
1238
914bd2a9a249 Add hat selection control to team editing page (it's empty combobox yet)
unc0rr
parents: 1237
diff changeset
   129
}