QTfrontend/util/DataManager.cpp
author Simon McVittie <smcv@debian.org>
Mon, 12 Sep 2022 10:40:53 -0400
branch1.0.0
changeset 15859 7b1d6dfa3173
parent 15447 999f82643048
permissions -rw-r--r--
Remove FindSDL2 find-module, use sdl2-config.cmake instead This requires SDL >= 2.0.4. Since <https://bugzilla.libsdl.org/show_bug.cgi?id=2464> was fixed in SDL 2.0.4, SDL behaves as a CMake "config-file package", even if it was not itself built using CMake: it installs a sdl2-config.cmake file to ${libdir}/cmake/SDL2, which tells CMake where to find SDL's headers and library, analogous to a pkg-config .pc file. As a result, we no longer need to copy/paste a "find-module package" to be able to find a system copy of SDL >= 2.0.4 with find_package(SDL2). Find-module packages are now discouraged by the CMake developers, in favour of having upstream projects behave as config-file packages. This results in a small API change: FindSDL2 used to set SDL2_INCLUDE_DIR and SDL2_LIBRARY, but the standard behaviour for config-file packages is to set <name>_INCLUDE_DIRS and <name>_LIBRARIES. Use the CONFIG keyword to make sure we search in config-file package mode, and will not find a FindSDL2.cmake in some other directory that implements the old interface. In addition to deleting redundant code, this avoids some assumptions in FindSDL2 about the layout of a SDL installation. The current libsdl2-dev package in Debian breaks those assumptions; this is considered a bug and will hopefully be fixed soon, but it illustrates how fragile these assumptions can be. We can be more robust against different installation layouts by relying on SDL's own CMake integration. When linking to a copy of CMake in a non-standard location, users can now set the SDL2_DIR or CMAKE_PREFIX_PATH environment variable to point to it; previously, these users would have used the SDL2DIR environment variable. This continues to be unnecessary if using matching system-wide installations of CMake and SDL2, for example both from Debian.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
     1
/*
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
     2
 * Hedgewars, a free turn based strategy game
11046
47a8c19ecb60 more copyright fixes
sheepluva
parents: 10248
diff changeset
     3
 * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
     4
 *
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
     8
 *
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    12
 * GNU General Public License for more details.
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    13
 *
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
10108
c68cf030eded update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents: 9998
diff changeset
    16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    17
 */
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    18
6168
6f301dac12ff fix an include; fix/add comments
sheepluva
parents: 6167
diff changeset
    19
/**
6170
2b1748161278 fix multiplayer page layout, doc/comment fixes
sheepluva
parents: 6168
diff changeset
    20
 * @file
6930
d187ea93fc4f renaming HWDataManager -> DataManager
sheepluva
parents: 6700
diff changeset
    21
 * @brief DataManager class implementation
6168
6f301dac12ff fix an include; fix/add comments
sheepluva
parents: 6167
diff changeset
    22
 */
6f301dac12ff fix an include; fix/add comments
sheepluva
parents: 6167
diff changeset
    23
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: 6159
diff changeset
    24
#include <QMap>
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    25
#include <QStringList>
7258
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
    26
#include <QStandardItemModel>
6199
582e85254110 on file save: create parent directories if needed
sheepluva
parents: 6196
diff changeset
    27
#include <QFileInfo>
8918
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
    28
#include <QSettings>
8920
caa614af152d Store colors in human-readable form
unc0rr
parents: 8918
diff changeset
    29
#include <QColor>
6199
582e85254110 on file save: create parent directories if needed
sheepluva
parents: 6196
diff changeset
    30
15447
999f82643048 Use correct way of including SDL2 header
unc0rr
parents: 14874
diff changeset
    31
#include <SDL.h>
14848
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
    32
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    33
#include "hwconsts.h"
7260
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
    34
#include "HWApplication.h"
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
    35
#include "sdlkeys.h"
14848
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
    36
#include "KeyMap.h"
12295
ac57d564efce Add DLC filtering in DataManager.cpp and namegen.cpp
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    37
#include "physfs.h"
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    38
6930
d187ea93fc4f renaming HWDataManager -> DataManager
sheepluva
parents: 6700
diff changeset
    39
#include "DataManager.h"
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    40
7258
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
    41
#include "GameStyleModel.h"
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
    42
#include "HatModel.h"
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
    43
#include "MapModel.h"
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
    44
#include "ThemeModel.h"
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    45
6930
d187ea93fc4f renaming HWDataManager -> DataManager
sheepluva
parents: 6700
diff changeset
    46
DataManager::DataManager()
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    47
{
6953
4c2dd25630a7 * make HatModel update automatically (also renamed class and files)
sheepluva
parents: 6952
diff changeset
    48
    m_hatModel = NULL;
8377
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
    49
    m_staticMapModel = NULL;
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
    50
    m_missionMapModel = NULL;
6937
7f77fa908a4e messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents: 6931
diff changeset
    51
    m_themeModel = NULL;
7258
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
    52
    m_colorsModel = NULL;
7260
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
    53
    m_bindsModel = NULL;
10248
7b9b44a051f8 Fix some of issues found by coverity
unc0rr
parents: 10108
diff changeset
    54
    m_gameStyleModel = NULL;
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    55
}
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    56
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    57
6930
d187ea93fc4f renaming HWDataManager -> DataManager
sheepluva
parents: 6700
diff changeset
    58
DataManager & DataManager::instance()
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    59
{
6930
d187ea93fc4f renaming HWDataManager -> DataManager
sheepluva
parents: 6700
diff changeset
    60
    static DataManager instance;
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    61
    return instance;
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    62
}
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    63
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    64
6930
d187ea93fc4f renaming HWDataManager -> DataManager
sheepluva
parents: 6700
diff changeset
    65
QStringList DataManager::entryList(
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6199
diff changeset
    66
    const QString & subDirectory,
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6199
diff changeset
    67
    QDir::Filters filters,
12295
ac57d564efce Add DLC filtering in DataManager.cpp and namegen.cpp
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    68
    const QStringList & nameFilters,
ac57d564efce Add DLC filtering in DataManager.cpp and namegen.cpp
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    69
    bool withDLC
6616
f77bb02b669f astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents: 6199
diff changeset
    70
) const
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    71
{
7774
27f9b9362f47 Simplify DataManager as physfs partially implements its functions
unc0rr
parents: 7681
diff changeset
    72
    QDir tmpDir(QString("physfs://%1").arg(subDirectory));
27f9b9362f47 Simplify DataManager as physfs partially implements its functions
unc0rr
parents: 7681
diff changeset
    73
    QStringList result = tmpDir.entryList(nameFilters, filters);
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    74
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: 6159
diff changeset
    75
    // sort case-insensitive
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: 6159
diff changeset
    76
    QMap<QString, QString> sortedFileNames;
12295
ac57d564efce Add DLC filtering in DataManager.cpp and namegen.cpp
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    77
    QString absolutePath = datadir->absolutePath().toLocal8Bit().data();
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: 6159
diff changeset
    78
    foreach ( QString fn, result)
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: 6159
diff changeset
    79
    {
12295
ac57d564efce Add DLC filtering in DataManager.cpp and namegen.cpp
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    80
        // Filter out DLC entries if desired
ac57d564efce Add DLC filtering in DataManager.cpp and namegen.cpp
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    81
        QString realDir = PHYSFS_getRealDir(QString(subDirectory + "/" + fn).toLocal8Bit().data());
ac57d564efce Add DLC filtering in DataManager.cpp and namegen.cpp
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    82
        if(withDLC || realDir == absolutePath)
ac57d564efce Add DLC filtering in DataManager.cpp and namegen.cpp
Wuzzy <almikes@aol.com>
parents: 11046
diff changeset
    83
            sortedFileNames.insert(fn.toLower(), fn);
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: 6159
diff changeset
    84
    }
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: 6159
diff changeset
    85
    result = sortedFileNames.values();
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: 6159
diff changeset
    86
6159
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    87
    return result;
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    88
}
c780b8cf4d75 introduce HWDataManager util for transparent access to [user-]data files
sheepluva
parents:
diff changeset
    89
6958
8230a516ba93 hello GameStyleModel
sheepluva
parents: 6953
diff changeset
    90
GameStyleModel * DataManager::gameStyleModel()
8230a516ba93 hello GameStyleModel
sheepluva
parents: 6953
diff changeset
    91
{
8230a516ba93 hello GameStyleModel
sheepluva
parents: 6953
diff changeset
    92
    if (m_gameStyleModel == NULL) {
8230a516ba93 hello GameStyleModel
sheepluva
parents: 6953
diff changeset
    93
        m_gameStyleModel = new GameStyleModel();
8230a516ba93 hello GameStyleModel
sheepluva
parents: 6953
diff changeset
    94
        m_gameStyleModel->loadGameStyles();
8230a516ba93 hello GameStyleModel
sheepluva
parents: 6953
diff changeset
    95
    }
8230a516ba93 hello GameStyleModel
sheepluva
parents: 6953
diff changeset
    96
    return m_gameStyleModel;
8230a516ba93 hello GameStyleModel
sheepluva
parents: 6953
diff changeset
    97
}
8230a516ba93 hello GameStyleModel
sheepluva
parents: 6953
diff changeset
    98
6953
4c2dd25630a7 * make HatModel update automatically (also renamed class and files)
sheepluva
parents: 6952
diff changeset
    99
HatModel * DataManager::hatModel()
4c2dd25630a7 * make HatModel update automatically (also renamed class and files)
sheepluva
parents: 6952
diff changeset
   100
{
4c2dd25630a7 * make HatModel update automatically (also renamed class and files)
sheepluva
parents: 6952
diff changeset
   101
    if (m_hatModel == NULL) {
4c2dd25630a7 * make HatModel update automatically (also renamed class and files)
sheepluva
parents: 6952
diff changeset
   102
        m_hatModel = new HatModel();
4c2dd25630a7 * make HatModel update automatically (also renamed class and files)
sheepluva
parents: 6952
diff changeset
   103
        m_hatModel->loadHats();
4c2dd25630a7 * make HatModel update automatically (also renamed class and files)
sheepluva
parents: 6952
diff changeset
   104
    }
4c2dd25630a7 * make HatModel update automatically (also renamed class and files)
sheepluva
parents: 6952
diff changeset
   105
    return m_hatModel;
4c2dd25630a7 * make HatModel update automatically (also renamed class and files)
sheepluva
parents: 6952
diff changeset
   106
}
4c2dd25630a7 * make HatModel update automatically (also renamed class and files)
sheepluva
parents: 6952
diff changeset
   107
8377
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
   108
MapModel * DataManager::staticMapModel()
6938
217ed62e872c MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents: 6937
diff changeset
   109
{
8377
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
   110
    if (m_staticMapModel == NULL) {
9744
1ee4842a9c86 Be lazy in loading maps list
unc0rr
parents: 9389
diff changeset
   111
        m_staticMapModel = new MapModel(MapModel::StaticMap, this);
6938
217ed62e872c MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents: 6937
diff changeset
   112
    }
8377
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
   113
    return m_staticMapModel;
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
   114
}
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
   115
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
   116
MapModel * DataManager::missionMapModel()
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
   117
{
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
   118
    if (m_missionMapModel == NULL) {
9744
1ee4842a9c86 Be lazy in loading maps list
unc0rr
parents: 9389
diff changeset
   119
        m_missionMapModel = new MapModel(MapModel::MissionMap, this);
8377
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
   120
    }
869f80966a77 GCI2012: Improve Game Configuration Widget
dag10
parents: 8346
diff changeset
   121
    return m_missionMapModel;
6938
217ed62e872c MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents: 6937
diff changeset
   122
}
217ed62e872c MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents: 6937
diff changeset
   123
6937
7f77fa908a4e messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents: 6931
diff changeset
   124
ThemeModel * DataManager::themeModel()
7f77fa908a4e messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents: 6931
diff changeset
   125
{
7f77fa908a4e messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents: 6931
diff changeset
   126
    if (m_themeModel == NULL) {
7f77fa908a4e messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents: 6931
diff changeset
   127
        m_themeModel = new ThemeModel();
7f77fa908a4e messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents: 6931
diff changeset
   128
    }
7f77fa908a4e messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents: 6931
diff changeset
   129
    return m_themeModel;
7f77fa908a4e messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents: 6931
diff changeset
   130
}
7f77fa908a4e messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents: 6931
diff changeset
   131
7258
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   132
QStandardItemModel * DataManager::colorsModel()
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   133
{
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   134
    if(m_colorsModel == NULL)
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   135
    {
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   136
        m_colorsModel = new QStandardItemModel();
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   137
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   138
        int i = 0;
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   139
        while(colors[i])
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   140
        {
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   141
            QStandardItem * item = new QStandardItem();
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   142
            item->setData(QColor(colors[i]));
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   143
            m_colorsModel->appendRow(item);
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   144
            ++i;
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   145
        }
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   146
    }
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   147
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   148
    return m_colorsModel;
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   149
}
722e8a0d89dc - Move colorsModel to appropriate place
unc0rr
parents: 6959
diff changeset
   150
7260
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   151
QStandardItemModel * DataManager::bindsModel()
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   152
{
14848
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   153
    KeyMap km = KeyMap::instance();
7260
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   154
    if(m_bindsModel == NULL)
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   155
    {
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   156
        m_bindsModel = new QStandardItemModel();
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   157
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents: 8049
diff changeset
   158
        QStandardItem * firstItem = new QStandardItem();
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents: 8049
diff changeset
   159
        firstItem->setData(tr("Use Default"), Qt::DisplayRole);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents: 8049
diff changeset
   160
        firstItem->setData("default", Qt::UserRole + 1);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents: 8049
diff changeset
   161
        m_bindsModel->appendRow(firstItem);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents: 8049
diff changeset
   162
7260
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   163
        for(int j = 0; sdlkeys[j][1][0] != '\0'; j++)
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   164
        {
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   165
            QStandardItem * item = new QStandardItem();
14532
e1ae6d8e84b0 Allow to leave a control unused (no key binding)
Wuzzy <Wuzzy2@mail.ru>
parents: 13284
diff changeset
   166
            QString keyId = QString(sdlkeys[j][0]);
14848
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   167
            QString keyDisplay;
14867
8bba7492558d Frontend: Refactor detection of keyboard keys in sdlkeys[]
Wuzzy <Wuzzy2@mail.ru>
parents: 14850
diff changeset
   168
            bool isKeyboard = sdlkeys_iskeyboard[j] == true;
14848
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   169
            if (keyId == "none" || (!isKeyboard))
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   170
                keyDisplay = HWApplication::translate("binds (keys)", sdlkeys[j][1]);
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   171
            else
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   172
                // Get key name with respect to keyboard layout
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   173
                keyDisplay = QString(SDL_GetKeyName(SDL_GetKeyFromScancode(km.getScancodeFromKeyname(sdlkeys[j][0]))));
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   174
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   175
            bool kbFallback = keyDisplay.trimmed().isEmpty();
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   176
            if (kbFallback)
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   177
            {
14873
d17c1a28df17 Frontend controls: Don't show "QWERTY" for F13-F15
Wuzzy <Wuzzy2@mail.ru>
parents: 14867
diff changeset
   178
                keyDisplay = QString(sdlkeys[j][1]);
d17c1a28df17 Frontend controls: Don't show "QWERTY" for F13-F15
Wuzzy <Wuzzy2@mail.ru>
parents: 14867
diff changeset
   179
                if ((QString(sdlkeys[j][0]) != "f13") && (QString(sdlkeys[j][0]) != "f14") && (QString(sdlkeys[j][0]) != "f15"))
d17c1a28df17 Frontend controls: Don't show "QWERTY" for F13-F15
Wuzzy <Wuzzy2@mail.ru>
parents: 14867
diff changeset
   180
                {
d17c1a28df17 Frontend controls: Don't show "QWERTY" for F13-F15
Wuzzy <Wuzzy2@mail.ru>
parents: 14867
diff changeset
   181
                    // If SDL doesn't know a name, show fallback name and a warning
14874
9379ef4fac80 Frontend controls: Remove hash key
Wuzzy <Wuzzy2@mail.ru>
parents: 14873
diff changeset
   182
                    //: Name of QWERTY US keyboard layout
14873
d17c1a28df17 Frontend controls: Don't show "QWERTY" for F13-F15
Wuzzy <Wuzzy2@mail.ru>
parents: 14867
diff changeset
   183
                    keyDisplay = keyDisplay + QString(" ") + HWApplication::translate("binds (keys)", "(QWERTY)");
d17c1a28df17 Frontend controls: Don't show "QWERTY" for F13-F15
Wuzzy <Wuzzy2@mail.ru>
parents: 14867
diff changeset
   184
                }
14848
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   185
            }
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   186
            if (isKeyboard)
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   187
            {
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   188
                if (!kbFallback)
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   189
                    keyDisplay = HWApplication::translate("binds (keys)", keyDisplay.toUtf8().constData());
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   190
                keyDisplay = HWApplication::translate("binds (keys)", "Keyboard") + QString(": ") + keyDisplay;
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   191
            }
bb412d8e435f Frontend: Fix wrong keyboard key names being displayed with regard to keyboard layout
Wuzzy <Wuzzy2@mail.ru>
parents: 14532
diff changeset
   192
            item->setData(keyDisplay, Qt::DisplayRole);
7260
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   193
            item->setData(sdlkeys[j][0], Qt::UserRole + 1);
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   194
            m_bindsModel->appendRow(item);
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   195
        }
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   196
    }
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   197
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   198
    return m_bindsModel;
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   199
}
c3584a3ab730 BindsModel
unc0rr
parents: 7258
diff changeset
   200
8918
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   201
QString DataManager::settingsFileName()
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   202
{
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   203
    if(m_settingsFileName.isEmpty())
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   204
    {
13284
b504131f7405 Fix team files and settings not saving properly, and remove FileEngine stuff from DLC
Wuzzy <Wuzzy2@mail.ru>
parents: 12295
diff changeset
   205
        QFile settingsFile(cfgdir->absoluteFilePath("settings.ini"));
8918
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   206
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   207
        if(!settingsFile.exists())
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   208
        {
13284
b504131f7405 Fix team files and settings not saving properly, and remove FileEngine stuff from DLC
Wuzzy <Wuzzy2@mail.ru>
parents: 12295
diff changeset
   209
            QFile oldSettingsFile(cfgdir->absoluteFilePath("hedgewars.ini"));
8918
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   210
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   211
            settingsFile.open(QFile::WriteOnly);
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   212
            settingsFile.close();
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   213
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   214
            if(oldSettingsFile.exists())
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   215
            {
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   216
                QSettings sOld(oldSettingsFile.fileName(), QSettings::IniFormat);
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   217
                QSettings sNew(settingsFile.fileName(), QSettings::IniFormat);
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   218
                sNew.setIniCodec("UTF-8");
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   219
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   220
                foreach(const QString & key, sOld.allKeys())
8920
caa614af152d Store colors in human-readable form
unc0rr
parents: 8918
diff changeset
   221
                {
caa614af152d Store colors in human-readable form
unc0rr
parents: 8918
diff changeset
   222
                    if(key.startsWith("colors/color"))
caa614af152d Store colors in human-readable form
unc0rr
parents: 8918
diff changeset
   223
                        sNew.setValue(key, sOld.value(key).value<QColor>().name());
caa614af152d Store colors in human-readable form
unc0rr
parents: 8918
diff changeset
   224
                    else
caa614af152d Store colors in human-readable form
unc0rr
parents: 8918
diff changeset
   225
                        sNew.setValue(key, sOld.value(key));
caa614af152d Store colors in human-readable form
unc0rr
parents: 8918
diff changeset
   226
                }
8918
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   227
            }
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   228
        }
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   229
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   230
        m_settingsFileName = settingsFile.fileName();
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   231
    }
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   232
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   233
    return m_settingsFileName;
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   234
}
512753ea4b1b Switch to 'settings.ini'. Copies old ini file if necessary on startup.
unc0rr
parents: 8508
diff changeset
   235
9389
3aae70f72126 Take care of issue #146
unc0rr
parents: 9080
diff changeset
   236
QString DataManager::safeFileName(QString fileName)
3aae70f72126 Take care of issue #146
unc0rr
parents: 9080
diff changeset
   237
{
3aae70f72126 Take care of issue #146
unc0rr
parents: 9080
diff changeset
   238
    fileName.replace('\\', '_');
3aae70f72126 Take care of issue #146
unc0rr
parents: 9080
diff changeset
   239
    fileName.replace('/', '_');
3aae70f72126 Take care of issue #146
unc0rr
parents: 9080
diff changeset
   240
    fileName.replace(':', '_');
3aae70f72126 Take care of issue #146
unc0rr
parents: 9080
diff changeset
   241
3aae70f72126 Take care of issue #146
unc0rr
parents: 9080
diff changeset
   242
    return fileName;
3aae70f72126 Take care of issue #146
unc0rr
parents: 9080
diff changeset
   243
}
3aae70f72126 Take care of issue #146
unc0rr
parents: 9080
diff changeset
   244
6931
86c951cd0f3f make DataManager a QObject with reload() slot that emits signal updated()
sheepluva
parents: 6930
diff changeset
   245
void DataManager::reload()
86c951cd0f3f make DataManager a QObject with reload() slot that emits signal updated()
sheepluva
parents: 6930
diff changeset
   246
{
7824
3df73ec7fcf2 disable F5 key and data refresh
sheepluva
parents: 7681
diff changeset
   247
    // removed for now (also code was a bit unclean, could lead to segfault if
3df73ec7fcf2 disable F5 key and data refresh
sheepluva
parents: 7681
diff changeset
   248
    // reload() is called before all members are initialized - because currently
3df73ec7fcf2 disable F5 key and data refresh
sheepluva
parents: 7681
diff changeset
   249
    // they are initialized in the getter methods rather than the constructor)
6931
86c951cd0f3f make DataManager a QObject with reload() slot that emits signal updated()
sheepluva
parents: 6930
diff changeset
   250
}
7681
26978d581070 Reset to default colors button
unc0rr
parents: 7260
diff changeset
   251
26978d581070 Reset to default colors button
unc0rr
parents: 7260
diff changeset
   252
void DataManager::resetColors()
26978d581070 Reset to default colors button
unc0rr
parents: 7260
diff changeset
   253
{
26978d581070 Reset to default colors button
unc0rr
parents: 7260
diff changeset
   254
    for(int i = colorsModel()->rowCount() - 1; i >= 0; --i)
26978d581070 Reset to default colors button
unc0rr
parents: 7260
diff changeset
   255
    {
26978d581070 Reset to default colors button
unc0rr
parents: 7260
diff changeset
   256
        m_colorsModel->item(i)->setData(QColor(colors[i]));
26978d581070 Reset to default colors button
unc0rr
parents: 7260
diff changeset
   257
    }
26978d581070 Reset to default colors button
unc0rr
parents: 7260
diff changeset
   258
}
8508
f849b7b3af1d - Ensure that team file exists before saving into it (same fix as for hedgewars.ini, due to bug in Qt)
unc0rr
parents: 8377
diff changeset
   259
f849b7b3af1d - Ensure that team file exists before saving into it (same fix as for hedgewars.ini, due to bug in Qt)
unc0rr
parents: 8377
diff changeset
   260
bool DataManager::ensureFileExists(const QString &fileName)
f849b7b3af1d - Ensure that team file exists before saving into it (same fix as for hedgewars.ini, due to bug in Qt)
unc0rr
parents: 8377
diff changeset
   261
{
f849b7b3af1d - Ensure that team file exists before saving into it (same fix as for hedgewars.ini, due to bug in Qt)
unc0rr
parents: 8377
diff changeset
   262
    QFile tmpfile(fileName);
f849b7b3af1d - Ensure that team file exists before saving into it (same fix as for hedgewars.ini, due to bug in Qt)
unc0rr
parents: 8377
diff changeset
   263
    if (!tmpfile.exists())
f849b7b3af1d - Ensure that team file exists before saving into it (same fix as for hedgewars.ini, due to bug in Qt)
unc0rr
parents: 8377
diff changeset
   264
        return tmpfile.open(QFile::WriteOnly);
f849b7b3af1d - Ensure that team file exists before saving into it (same fix as for hedgewars.ini, due to bug in Qt)
unc0rr
parents: 8377
diff changeset
   265
    else
f849b7b3af1d - Ensure that team file exists before saving into it (same fix as for hedgewars.ini, due to bug in Qt)
unc0rr
parents: 8377
diff changeset
   266
        return true;
f849b7b3af1d - Ensure that team file exists before saving into it (same fix as for hedgewars.ini, due to bug in Qt)
unc0rr
parents: 8377
diff changeset
   267
}