mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	There were a handfull instances of the kind 1) gettextFromC::instance()->tr(...) 2) gettextFromC::instance()->trGettext(...) 1) is pointless, as tr is a static function. All instances of 2) were likewise pointless, because trGettext() returns a C-string, which was then immediately converted to a QString. Thus, replace both constructs by gettextFromC::tr(...). After this change there was only one user of gettextFromC::instance() left, viz. the C-interface funtion trGettext(). Therefore, remove gettextFromC::instance() and do all the caching / translating directly in the global trGettext(). Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
		
			
				
	
	
		
			200 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0
 | |
| #include "core/units.h"
 | |
| #include "qt-models/divelocationmodel.h"
 | |
| #include "core/qthelper.h"
 | |
| #include <QDebug>
 | |
| #include <QLineEdit>
 | |
| #include <QIcon>
 | |
| #include <core/gettextfromc.h>
 | |
| 
 | |
| static bool dive_site_less_than(dive_site *a, dive_site *b)
 | |
| {
 | |
| 	return QString(a->name) < QString(b->name);
 | |
| }
 | |
| 
 | |
| LocationInformationModel *LocationInformationModel::instance()
 | |
| {
 | |
| 	static LocationInformationModel *self = new LocationInformationModel();
 | |
| 	return self;
 | |
| }
 | |
| 
 | |
| LocationInformationModel::LocationInformationModel(QObject *obj) : QAbstractTableModel(obj),
 | |
| 	internalRowCount(0),
 | |
| 	textField(NULL)
 | |
| {
 | |
| }
 | |
| 
 | |
| int LocationInformationModel::columnCount(const QModelIndex&) const
 | |
| {
 | |
| 	return COLUMNS;
 | |
| }
 | |
| 
 | |
| int LocationInformationModel::rowCount(const QModelIndex&) const
 | |
| {
 | |
| 	return internalRowCount + 2;
 | |
| }
 | |
| 
 | |
| static struct dive_site *get_dive_site_name_start_which_str(const QString& str) {
 | |
| 	struct dive_site *ds;
 | |
| 	int i;
 | |
| 	for_each_dive_site(i,ds) {
 | |
| 		QString dsName(ds->name);
 | |
| 		if (dsName.startsWith(str)) {
 | |
| 			return ds;
 | |
| 		}
 | |
| 	}
 | |
| 	return NULL;
 | |
| }
 | |
| 
 | |
| QVariant LocationInformationModel::data(const QModelIndex &index, int role) const
 | |
| {
 | |
| 	if (!index.isValid())
 | |
| 		return QVariant();
 | |
| 
 | |
| 	// Special case to handle the 'create dive site' with name.
 | |
| 	if (index.row() < 2) {
 | |
| 		if (index.column() == UUID)
 | |
| 			return RECENTLY_ADDED_DIVESITE;
 | |
| 		switch(role) {
 | |
| 			case Qt::DisplayRole : {
 | |
| 				if (index.row() == 1) {
 | |
| 					struct dive_site *ds = get_dive_site_name_start_which_str(textField->text());
 | |
| 					if(ds)
 | |
| 						return ds->name;
 | |
| 				}
 | |
| 				return textField->text();
 | |
| 			}
 | |
| 			case Qt::ToolTipRole : {
 | |
| 				return QString(tr("Create dive site with this name"));
 | |
| 			}
 | |
| 			case Qt::EditRole : {
 | |
| 				if (index.row() == 1) {
 | |
| 					struct dive_site *ds = get_dive_site_name_start_which_str(textField->text());
 | |
| 					if (!ds)
 | |
| 						return INVALID_DIVE_SITE_NAME;
 | |
| 					if (QString(ds->name) == textField->text())
 | |
| 						return INVALID_DIVE_SITE_NAME;
 | |
| 
 | |
| 				}
 | |
| 				return textField->text();
 | |
| 			}
 | |
| 			case Qt::DecorationRole : return QIcon(":list-add-icon");
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	// The dive sites are -2 because of the first two items.
 | |
| 	struct dive_site *ds = get_dive_site(index.row() - 2);
 | |
| 
 | |
| 	if (!ds)
 | |
| 		return QVariant();
 | |
| 
 | |
| 	switch(role) {
 | |
| 	case Qt::EditRole:
 | |
| 	case Qt::DisplayRole :
 | |
| 		switch(index.column()) {
 | |
| 		case UUID: return ds->uuid;
 | |
| 		case NAME: return ds->name;
 | |
| 		case LATITUDE: return ds->latitude.udeg;
 | |
| 		case LONGITUDE: return ds->longitude.udeg;
 | |
| 		case COORDS: return "TODO";
 | |
| 		case DESCRIPTION: return ds->description;
 | |
| 		case NOTES: return ds->name;
 | |
| 		case TAXONOMY_1: return "TODO";
 | |
| 		case TAXONOMY_2: return "TODO";
 | |
| 		case TAXONOMY_3: return "TODO";
 | |
| 		}
 | |
| 	break;
 | |
| 	case Qt::DecorationRole : {
 | |
| 		if (dive_site_has_gps_location(ds))
 | |
| 			return QIcon(":geotag-icon");
 | |
| 		else
 | |
| 			return QVariant();
 | |
| 	}
 | |
| 	case UUID_ROLE:
 | |
| 		return ds->uuid;
 | |
| 	}
 | |
| 	return QVariant();
 | |
| }
 | |
| 
 | |
| void LocationInformationModel::setFirstRowTextField(QLineEdit *t)
 | |
| {
 | |
| 	textField = t;
 | |
| }
 | |
| 
 | |
| void LocationInformationModel::update()
 | |
| {
 | |
| 	beginResetModel();
 | |
| 	internalRowCount = dive_site_table.nr;
 | |
| 	qSort(dive_site_table.dive_sites, dive_site_table.dive_sites + dive_site_table.nr, dive_site_less_than);
 | |
| 	locationNames.clear();
 | |
| 	for (int i = 0; i < internalRowCount; i++)
 | |
| 		locationNames << QString(dive_site_table.dive_sites[i]->name);
 | |
| 	endResetModel();
 | |
| }
 | |
| 
 | |
| QStringList LocationInformationModel::allSiteNames() const
 | |
| {
 | |
| 	return locationNames;
 | |
| }
 | |
| 
 | |
| bool LocationInformationModel::setData(const QModelIndex &index, const QVariant &value, int role)
 | |
| {
 | |
| 	if (!index.isValid() || index.row() < 2)
 | |
| 		return false;
 | |
| 
 | |
| 	if (role != Qt::EditRole)
 | |
| 		return false;
 | |
| 
 | |
| 	struct dive_site *ds = get_dive_site(index.row());
 | |
| 	free(ds->name);
 | |
| 	ds->name = copy_qstring(value.toString());
 | |
| 	emit dataChanged(index, index);
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| bool LocationInformationModel::removeRows(int row, int, const QModelIndex&)
 | |
| {
 | |
| 	if(row >= rowCount())
 | |
| 		return false;
 | |
| 
 | |
| 	beginRemoveRows(QModelIndex(), row + 2, row + 2);
 | |
| 	struct dive_site *ds = get_dive_site(row);
 | |
| 	if (ds)
 | |
| 		delete_dive_site(ds->uuid);
 | |
| 	internalRowCount = dive_site_table.nr;
 | |
| 	endRemoveRows();
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| GeoReferencingOptionsModel *GeoReferencingOptionsModel::instance() {
 | |
| 	static GeoReferencingOptionsModel *self = new GeoReferencingOptionsModel();
 | |
| 	return self;
 | |
| }
 | |
| 
 | |
| GeoReferencingOptionsModel::GeoReferencingOptionsModel(QObject *parent) : QStringListModel(parent)
 | |
| {
 | |
| 	QStringList list;
 | |
| 	int i;
 | |
| 	for (i = 0; i < TC_NR_CATEGORIES; i++)
 | |
| 		list << gettextFromC::tr(taxonomy_category_names[i]);
 | |
| 	setStringList(list);
 | |
| }
 | |
| 
 | |
| bool filter_same_gps_cb (QAbstractItemModel *model, int sourceRow, const QModelIndex& parent)
 | |
| {
 | |
| 	int ref_lat = displayed_dive_site.latitude.udeg;
 | |
| 	int ref_lon = displayed_dive_site.longitude.udeg;
 | |
| 	uint32_t ref_uuid = displayed_dive_site.uuid;
 | |
| 	QSortFilterProxyModel *self = (QSortFilterProxyModel*) model;
 | |
| 
 | |
| 	uint32_t ds_uuid = self->sourceModel()->index(sourceRow, LocationInformationModel::UUID, parent).data().toUInt();
 | |
| 	struct dive_site *ds = get_dive_site_by_uuid(ds_uuid);
 | |
| 
 | |
| 	if (!ds)
 | |
| 		return false;
 | |
| 
 | |
| 	if (ds->latitude.udeg == 0 || ds->longitude.udeg == 0)
 | |
| 		return false;
 | |
| 
 | |
| 	return ds->latitude.udeg == ref_lat && ds->longitude.udeg == ref_lon && ds->uuid != ref_uuid;
 | |
| }
 |