[PATCH] Use subsurface integer units for DiveItem

amit.k.chaudhuri at gmail.com amit.k.chaudhuri at gmail.com
Tue Apr 23 01:10:23 PDT 2013


From: Amit Chaudhuri <amit.k.chaudhuri at gmail.com>

Change DiveItem to use integers for storing depth and duration. Use
subsurface helpers to make DiveItem aware of user preferences for depth.

Tweak alignment and display precision of columns for depth and duration.

{revert Qtr_ to tr}

Signed-off-by: Amit Chaudhuri <amit.k.chaudhuri at gmail.com>
---
 qt-ui/divetripmodel.cpp |   37 ++++++++++++++++++++++++++-----------
 qt-ui/divetripmodel.h   |   14 ++++++++------
 qt-ui/mainwindow.cpp    |    5 ++---
 3 files changed, 36 insertions(+), 20 deletions(-)

diff --git a/qt-ui/divetripmodel.cpp b/qt-ui/divetripmodel.cpp
index 5082494..2905365 100644
--- a/qt-ui/divetripmodel.cpp
+++ b/qt-ui/divetripmodel.cpp
@@ -4,15 +4,25 @@
  * classes for the dive trip list in Subsurface
  */
 #include "divetripmodel.h"
+#include "../dive.h"
 
 
-DiveItem::DiveItem(int num, QString dt, float dur, float dep, QString loc, DiveItem *p):
-		   number(num), dateTime(dt), duration(dur), depth(dep), location(loc), parentItem(p)
+DiveItem::DiveItem(int num, QString dt, int dur, int dep, QString loc, DiveItem *p):
+		   number(num), dateTime(dt), seconds(dur), mm(dep), location(loc), parentItem(p)
 {
 	if (parentItem)
 		parentItem->addChild(this);
 }
 
+float DiveItem::diveDepth() const
+{
+	if (get_units()->length == units::METERS){
+		return mm / 1000.0f;
+	} else if (get_units()->length == units::FEET){
+		return mm_to_feet(mm);
+	} else
+		return 0.0f;
+}
 
 DiveTripModel::DiveTripModel(const QString &filename, QObject *parent) : QAbstractItemModel(parent), filename(filename)
 {
@@ -35,6 +45,11 @@ QVariant DiveTripModel::data(const QModelIndex &index, int role) const
 	if (!index.isValid())
 		return QVariant();
 
+	if (role == Qt::TextAlignmentRole && (index.column() == DIVE_DURATION ||
+		index.column() == DIVE_DEPTH)) {
+		return Qt::AlignRight;
+	}
+
 	if (role != Qt::DisplayRole)
 		return QVariant();
 
@@ -49,12 +64,11 @@ QVariant DiveTripModel::data(const QModelIndex &index, int role) const
 		retVal = QVariant(item->diveDateTime());
 		break;
 	case DIVE_DURATION:
-		retVal = QVariant(item->diveDuration());
+		retVal = QVariant(QString::number(item->diveDurationMinutes(),'f',1));
 		break;
 	case DIVE_DEPTH:
-		retVal = QVariant(item->diveDepth());
-		break;
-	case DIVE_LOCATION:
+		retVal = QVariant(QString::number(item->diveDepth(),'f',1));
+		break;	case DIVE_LOCATION:
 		retVal = QVariant(item->diveLocation());
 		break;
 	default:
@@ -72,14 +86,15 @@ QVariant DiveTripModel::headerData(int section, Qt::Orientation orientation, int
 		} else if (section == DIVE_DATE_TIME) {
 			return tr("Date");
 		} else if (section == DIVE_DURATION) {
-			return tr("Duration");
-		} else if (section == DIVE_DEPTH) {
-			return tr("Depth");
+			return tr("Duration (mins)");
+		} else if (section == DIVE_DEPTH && get_units()->length == units::METERS) {
+			return tr("Depth (m)");
+		} else if (section == DIVE_DEPTH && get_units()->length == units::FEET) {
+			return tr("Depth (ft)");
 		} else if (section == DIVE_LOCATION) {
 			return tr("Location");
 		}
-	}
-	return QVariant();
+	}	return QVariant();
 }
 
 int DiveTripModel::rowCount(const QModelIndex &parent) const
diff --git a/qt-ui/divetripmodel.h b/qt-ui/divetripmodel.h
index ad18157..8b7e4a5 100644
--- a/qt-ui/divetripmodel.h
+++ b/qt-ui/divetripmodel.h
@@ -19,14 +19,16 @@
 class DiveItem
 {
 public:
-	explicit DiveItem(): number(0), dateTime(QString()), duration(0.0), depth(0.0), location(QString()) {parentItem = 0;}
-	explicit DiveItem(int num, QString dt, float, float, QString loc, DiveItem *parent = 0);
+	explicit DiveItem(): number(0), dateTime(QString()), seconds(0.0), mm(0.0), location(QString()) {parentItem = 0;}
+	explicit DiveItem(int num, QString dt, int, int, QString loc, DiveItem *parent = 0);
 	~DiveItem() { qDeleteAll(childlist); }
 
 	int diveNumber() const { return number; }
 	QString diveDateTime() const { return dateTime; }
-	float diveDuration() const { return duration; }
-	float diveDepth() const { return depth; }
+	int diveDurationSeconds() const { return seconds; }
+	float diveDurationMinutes() const { return seconds/60.0f;}
+	int diveDepthMM() const { return mm; }
+	float diveDepth() const;
 	QString diveLocation() const { return location; }
 
 	DiveItem *parent() const { return parentItem; }
@@ -42,8 +44,8 @@ private:
 
 	int number;
 	QString dateTime;
-	float duration;
-	float depth;
+	int seconds;
+	int mm;
 	QString location;
 
 	DiveItem *parentItem;
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 551c28f..6513880 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -45,7 +45,6 @@ MainWindow::MainWindow() : ui(new Ui::MainWindow())
 		Q_UNUSED(dive)
 
 		struct dive *d;
-		qDebug("address of dive_table %p", &dive_table);
 		for_each_dive(i, d) {
 			struct tm tm;
 			char *buffer;
@@ -53,8 +52,8 @@ MainWindow::MainWindow() : ui(new Ui::MainWindow())
 			buffer = get_dive_date_string(&tm);
 			dive = new DiveItem(d->number,
 					buffer,
-					(float)d->duration.seconds/60,
-					(float)d->maxdepth.mm/1000 ,
+					d->duration.seconds,
+					d->maxdepth.mm,
 					d->location,
 					root);
 			free(buffer);
-- 
1.7.10.4



More information about the subsurface mailing list