From e140703d34325344f503fc328c20643a8ea9249a Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Fri, 30 May 2014 15:16:00 -0300 Subject: Add a method to update the dive pictures on the model. Call that method from the mainWindow when the dive changes. The updateDivePictures walks around the events of the first dc (since all pictures are distributed allong all dive computers) to get the events of type '123' (I wonder if there's not a better way to save pictures on the dive, like an linked list of char* named pictures.) Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/divepicturewidget.cpp | 33 ++++++++++++++++++++++++++++++++- qt-ui/divepicturewidget.h | 6 ++++++ qt-ui/mainwindow.cpp | 4 +++- qt-ui/mainwindow.h | 1 + 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/qt-ui/divepicturewidget.cpp b/qt-ui/divepicturewidget.cpp index a74bba0e6..11849af5f 100644 --- a/qt-ui/divepicturewidget.cpp +++ b/qt-ui/divepicturewidget.cpp @@ -1,10 +1,41 @@ #include "divepicturewidget.h" +#include void DivePictureDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter, option, index); } +DivePictureModel::DivePictureModel(QObject *parent): QAbstractTableModel(parent) +{ + +} + +void DivePictureModel::updateDivePictures(int divenr) +{ + beginRemoveRows(QModelIndex(), 0, numberOfPictures-1); + numberOfPictures = 0; + endRemoveRows(); + + struct dive *d = get_dive(divenr); + if (!d) + return; + // All pictures are set in *all* divecomputers. ( waste of memory if > 100 pictures? ) + // so just get from the first one. + struct event *ev = d->dc.events; + while(ev){ + if(ev->type == 123){ // 123 means PICTURE. + numberOfPictures++; + } + ev = ev->next; + } + + if (numberOfPictures == 0) + return; + beginInsertRows(QModelIndex(), 0, numberOfPictures-1); + endInsertRows(); +} + int DivePictureModel::columnCount(const QModelIndex &parent) const { @@ -17,7 +48,7 @@ QVariant DivePictureModel::data(const QModelIndex &index, int role) const int DivePictureModel::rowCount(const QModelIndex &parent) const { - + return numberOfPictures; } DivePictureWidget::DivePictureWidget(QWidget *parent): QListView(parent) diff --git a/qt-ui/divepicturewidget.h b/qt-ui/divepicturewidget.h index 7761db32b..062e225d7 100644 --- a/qt-ui/divepicturewidget.h +++ b/qt-ui/divepicturewidget.h @@ -7,9 +7,15 @@ #include class DivePictureModel : QAbstractTableModel { +Q_OBJECT +public: + DivePictureModel(QObject *parent); virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + void updateDivePictures(int divenr); +private: + int numberOfPictures; }; class DivePictureDelegate : QStyledItemDelegate { diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index dad8e4706..964d2bbc2 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -59,7 +59,8 @@ MainWindow::MainWindow() : QMainWindow(), yearlyStatsModel(0), state(VIEWALL), updateManager(0), - fakeDiveId(0) + fakeDiveId(0), + divePictureModel(new DivePictureModel(this)) { Q_ASSERT_X(m_Instance == NULL, "MainWindow", "MainWindow recreated!"); m_Instance = this; @@ -165,6 +166,7 @@ void MainWindow::current_dive_changed(int divenr) */ ui.newProfile->plotDives(QList() << (current_dive)); ui.InfoWidget->updateDiveInfo(divenr); + divePictureModel->updateDivePictures(divenr); } void MainWindow::on_actionNew_triggered() diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h index 57c205ba4..c8c792ed4 100644 --- a/qt-ui/mainwindow.h +++ b/qt-ui/mainwindow.h @@ -180,6 +180,7 @@ private: bool plannerStateClean(); void createFakeDiveForAddAndPlan(); int fakeDiveId; + DivePictureModel *divePictureModel; }; #endif // MAINWINDOW_H -- cgit v1.2.3-70-g09d2