mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	This avoids confusion and namespace collisions. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
		
			
				
	
	
		
			123 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "divelocationmodel.h"
 | |
| #include "dive.h"
 | |
| #include <QDebug>
 | |
| 
 | |
| 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)
 | |
| {
 | |
| }
 | |
| 
 | |
| int LocationInformationModel::columnCount(const QModelIndex &parent) const
 | |
| {
 | |
| 	return COLUMNS;
 | |
| }
 | |
| 
 | |
| int LocationInformationModel::rowCount(const QModelIndex &parent) const
 | |
| {
 | |
| 	Q_UNUSED(parent);
 | |
| 	return internalRowCount;
 | |
| }
 | |
| 
 | |
| QVariant LocationInformationModel::data(const QModelIndex &index, int role) const
 | |
| {
 | |
| 	if (!index.isValid())
 | |
| 		return QVariant();
 | |
| 	struct dive_site *ds = get_dive_site(index.row());
 | |
| 
 | |
| 	if (!ds)
 | |
| 		return QVariant();
 | |
| 
 | |
| 	switch(role) {
 | |
| 	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;
 | |
| 	}
 | |
| 
 | |
| 	return QVariant();
 | |
| }
 | |
| 
 | |
| 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);
 | |
| 	endResetModel();
 | |
| }
 | |
| 
 | |
| int32_t LocationInformationModel::addDiveSite(const QString& name, int lon, int lat)
 | |
| {
 | |
| 	degrees_t latitude, longitude;
 | |
| 	latitude.udeg = lat;
 | |
| 	longitude.udeg = lon;
 | |
| 
 | |
| 	beginInsertRows(QModelIndex(), dive_site_table.nr, dive_site_table.nr);
 | |
| 	uint32_t uuid = create_dive_site_with_gps(name.toUtf8().data(), latitude, longitude);
 | |
| 	qSort(dive_site_table.dive_sites, dive_site_table.dive_sites + dive_site_table.nr, dive_site_less_than);
 | |
| 	internalRowCount = dive_site_table.nr;
 | |
| 	endInsertRows();
 | |
| 	return uuid;
 | |
| }
 | |
| 
 | |
| bool LocationInformationModel::setData(const QModelIndex &index, const QVariant &value, int role)
 | |
| {
 | |
| 	if (!index.isValid())
 | |
| 		return false;
 | |
| 
 | |
| 	if (role != Qt::EditRole)
 | |
| 		return false;
 | |
| 
 | |
| 	struct dive_site *ds = get_dive_site(index.row());
 | |
| 	free(ds->name);
 | |
| 	ds->name = copy_string(qPrintable(value.toString()));
 | |
| 	emit dataChanged(index, index);
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| bool LocationInformationModel::removeRows(int row, int count, const QModelIndex & parent)
 | |
| {
 | |
| 	if(row >= rowCount())
 | |
| 		return false;
 | |
| 
 | |
| 	beginRemoveRows(QModelIndex(), row, row);
 | |
| 	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 << taxonomy_category_names[i];
 | |
| 	setStringList(list);
 | |
| }
 |