subsurface/qt-models/models.cpp
Berthold Stoeger d4282e2689 Icons: cache small edit icon
In analogy to the trash-icons, cache a small rendered version of
the edit icon. This will be used in the dive-site table. Rename
the icon alias from "duplicate-edit-icon" to "edit-icon", as
it actually is not a duplicated. The other "edit" icon is an
"undo" icon!

Move the accessor functions to cleanertablemode.cpp. This is not
the ideal place, but since the functions are declared in
cleanertablemodel.h it's certainly better than the old place
(models.cpp)!

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-04-12 18:19:07 +03:00

125 lines
3.1 KiB
C++

// SPDX-License-Identifier: GPL-2.0
/*
* models.cpp
*
* classes for the equipment models of Subsurface
*
*/
#include "qt-models/models.h"
#include "core/qthelper.h"
#include "core/gettextfromc.h"
#include <QLocale>
Qt::ItemFlags GasSelectionModel::flags(const QModelIndex&) const
{
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
GasSelectionModel *GasSelectionModel::instance()
{
static GasSelectionModel self;
return &self;
}
static QStringList getGasList()
{
QStringList list;
for (int i = 0; i < MAX_CYLINDERS; i++) {
cylinder_t *cyl = &displayed_dive.cylinder[i];
if (cylinder_nodata(cyl))
break;
/* Check if we have the same gasmix two or more times
* If yes return more verbose string */
int same_gas = same_gasmix_cylinder(cyl, i, &displayed_dive, true);
if (same_gas == -1)
list.push_back(get_gas_string(cyl->gasmix));
else
list.push_back(get_gas_string(cyl->gasmix) + QString(" (%1 %2 ").arg(GasSelectionModel::tr("cyl.")).arg(i + 1) +
cyl->type.description + ")");
}
return list;
}
void GasSelectionModel::repopulate()
{
setStringList(getGasList());
}
QVariant GasSelectionModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::FontRole) {
return defaultModelFont();
}
return QStringListModel::data(index, role);
}
// Dive Type Model for the divetype combo box
Qt::ItemFlags DiveTypeSelectionModel::flags(const QModelIndex&) const
{
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
DiveTypeSelectionModel *DiveTypeSelectionModel::instance()
{
static DiveTypeSelectionModel self;
return &self;
}
void DiveTypeSelectionModel::repopulate()
{
QStringList modes = QStringList();
for (int i = 0; i < FREEDIVE; i++)
modes.append(gettextFromC::tr(divemode_text_ui[i]));
setStringList(modes);
}
QVariant DiveTypeSelectionModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::FontRole) {
return defaultModelFont();
}
return QStringListModel::data(index, role);
}
// Language Model, The Model to populate the list of possible Languages.
LanguageModel *LanguageModel::instance()
{
static LanguageModel *self = new LanguageModel();
QLocale l;
return self;
}
LanguageModel::LanguageModel(QObject *parent) : QAbstractListModel(parent)
{
QDir d(getSubsurfaceDataPath("translations"));
Q_FOREACH (const QString &s, d.entryList()) {
if (s.startsWith("subsurface_") && s.endsWith(".qm")) {
languages.push_back((s == "subsurface_source.qm") ? "English" : s);
}
}
}
QVariant LanguageModel::data(const QModelIndex &index, int role) const
{
QLocale loc;
QString currentString = languages.at(index.row());
if (!index.isValid())
return QVariant();
switch (role) {
case Qt::DisplayRole: {
QLocale l(currentString.remove("subsurface_").remove(".qm"));
return currentString == "English" ? currentString : QString("%1 (%2)").arg(l.languageToString(l.language())).arg(l.countryToString(l.country()));
}
case Qt::UserRole:
return currentString == "English" ? "en_US" : currentString.remove("subsurface_").remove(".qm");
}
return QVariant();
}
int LanguageModel::rowCount(const QModelIndex&) const
{
return languages.count();
}