diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2013-05-02 17:01:35 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-05-02 17:02:55 -0700 |
commit | ff2ce399702d3a487316bfcc4b1fff01dbb8d309 (patch) | |
tree | 709b497e1981873b5301c68c0a906b874b7dd635 | |
parent | 021ef8ad09295a0ad4b5a3450a651637eea8672d (diff) | |
parent | 696c9ccacd24392ea63477c5ec8a25d6649aedf7 (diff) | |
download | subsurface-ff2ce399702d3a487316bfcc4b1fff01dbb8d309.tar.gz |
Merge branch 'tomaz-css' into Qt
Tomaz' code does a much better job of shading the dive list!
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | dive.c | 9 | ||||
-rw-r--r-- | dive.h | 2 | ||||
-rw-r--r-- | qt-ui/divelistview.cpp | 2 | ||||
-rw-r--r-- | qt-ui/mainwindow.cpp | 12 | ||||
-rw-r--r-- | qt-ui/mainwindow.h | 3 | ||||
-rw-r--r-- | qt-ui/mainwindow.ui | 48 | ||||
-rw-r--r-- | qt-ui/modeldelegates.cpp | 18 | ||||
-rw-r--r-- | qt-ui/modeldelegates.h | 7 | ||||
-rw-r--r-- | qt-ui/models.cpp | 15 | ||||
-rw-r--r-- | qt-ui/models.h | 6 |
10 files changed, 106 insertions, 16 deletions
@@ -1810,6 +1810,15 @@ struct dive *merge_dives(struct dive *a, struct dive *b, int offset, gboolean pr return res; } +int get_index_for_dive(struct dive *dive) { + int i; + struct dive *d; + for_each_dive(i, d) + if (d == dive) + return i; + return -1; +} + struct dive *find_dive_including(timestamp_t when) { int i; @@ -350,6 +350,8 @@ struct dive { struct divecomputer dc; }; +extern int get_index_for_dive(struct dive *dive); + static inline int dive_has_gps_location(struct dive *dive) { return dive->latitude.udeg || dive->longitude.udeg; diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 45b6cf4d7..0bf0b35ba 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -7,6 +7,8 @@ #include "divelistview.h" #include "models.h" #include "modeldelegates.h" +#include <QApplication> +#include <QHeaderView> DiveListView::DiveListView(QWidget *parent) : QTreeView(parent) { diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index 8bf03531f..cdd33ff45 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -25,6 +25,7 @@ #include "../divelist.h" #include "../pref.h" #include "modeldelegates.h" +#include "models.h" MainWindow::MainWindow() : ui(new Ui::MainWindow()), model(new DiveTripModel(this)), @@ -33,6 +34,7 @@ MainWindow::MainWindow() : ui(new Ui::MainWindow()), ui->setupUi(this); sortModel->setSourceModel(model); ui->ListWidget->setModel(sortModel); + connect(ui->ListWidget, SIGNAL(activated(QModelIndex)), this, SLOT(diveSelected(QModelIndex))); /* figure out appropriate widths for the columns. The strings chosen * are somewhat random (but at least we're trying to allow them to be @@ -70,6 +72,16 @@ MainWindow::MainWindow() : ui(new Ui::MainWindow()), readSettings(); } +void MainWindow::diveSelected(const QModelIndex& index) +{ + struct dive *dive = (struct dive*) index.model()->data(index, TreeItemDT::DIVE_ROLE).value<void*>(); + + if (dive) + selected_dive = get_index_for_dive(dive); + + // Here should be the code to update the other widgets. +} + void MainWindow::on_actionNew_triggered() { qDebug("actionNew"); diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h index eece91ade..e94cb5b7c 100644 --- a/qt-ui/mainwindow.h +++ b/qt-ui/mainwindow.h @@ -8,6 +8,7 @@ #define MAINWINDOW_H #include <QMainWindow> +#include <QModelIndex> class QSortFilterProxyModel; class DiveTripModel; @@ -66,6 +67,8 @@ private Q_SLOTS: void on_actionAboutSubsurface_triggered(); void on_actionUserManual_triggered(); + void diveSelected(const QModelIndex& index); + protected: void closeEvent(QCloseEvent *); diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui index 073476918..fe97d98b4 100644 --- a/qt-ui/mainwindow.ui +++ b/qt-ui/mainwindow.ui @@ -28,9 +28,55 @@ <widget class="QGraphicsView" name="ProfileWidget"/> </widget> <widget class="DiveListView" name="ListWidget"> + <property name="styleSheet"> + <string notr="true"> QTreeView { + show-decoration-selected: 1; + } + + QTreeView::item { + border: 1px solid #d9d9d9; + border-top-color: transparent; + border-bottom-color: transparent; + padding: 2px; + } + + QTreeView::item:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1); + border: 1px solid #bfcde4; + } + + QTreeView::item:selected { + border: 1px solid #567dbc; + } + + QTreeView::item:selected:active{ + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc); + } + + QTreeView::item:selected:!active { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6b9be8, stop: 1 #577fbf); + } + +</string> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::ExtendedSelection</enum> + </property> + <property name="rootIsDecorated"> + <bool>true</bool> + </property> <property name="sortingEnabled"> <bool>true</bool> </property> + <property name="animated"> + <bool>true</bool> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> </widget> </widget> </item> @@ -42,7 +88,7 @@ <x>0</x> <y>0</y> <width>763</width> - <height>20</height> + <height>19</height> </rect> </property> <widget class="QMenu" name="menuFile"> diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp index 2adaaebc7..be47198e2 100644 --- a/qt-ui/modeldelegates.cpp +++ b/qt-ui/modeldelegates.cpp @@ -7,18 +7,24 @@ #include <QtDebug> #include <QPainter> #include <QSortFilterProxyModel> +#include <QStyle> +#include <QStyleOption> + +StarWidgetsDelegate::StarWidgetsDelegate(QWidget* parent): + QStyledItemDelegate(parent), + parentWidget(parent) +{ + +} void StarWidgetsDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { + QStyledItemDelegate::paint(painter, option, index); + if (!index.isValid()) return; - QVariant value = index.model()->data(index, Qt::DisplayRole); - - if(option.state & QStyle::State_Selected) - painter->fillRect(option.rect, option.palette.highlight()); - else - painter->fillRect(option.rect, index.model()->data(index, Qt::BackgroundRole).value<QBrush>()); + QVariant value = index.model()->data(index, TreeItemDT::STAR_ROLE); if (!value.isValid()) return; diff --git a/qt-ui/modeldelegates.h b/qt-ui/modeldelegates.h index eacbb5a1e..5f90a3061 100644 --- a/qt-ui/modeldelegates.h +++ b/qt-ui/modeldelegates.h @@ -1,12 +1,15 @@ #ifndef MODELDELEGATES_H #define MODELDELEGATES_H -#include <QAbstractItemDelegate> +#include <QStyledItemDelegate> -class StarWidgetsDelegate : public QAbstractItemDelegate { +class StarWidgetsDelegate : public QStyledItemDelegate { Q_OBJECT public: + explicit StarWidgetsDelegate(QWidget* parent = 0); virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; +private: + QWidget *parentWidget; }; #endif diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 373770404..eb4d8974b 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -490,12 +490,18 @@ QVariant DiveItem::data(int column, int role) const case LOCATION: retVal = QString(dive->location); break; - case RATING: - retVal = dive->rating; - break; } break; } + + if(role == STAR_ROLE){ + retVal = dive->rating; + } + + if(role == DIVE_ROLE){ + retVal = QVariant::fromValue<void*>(dive); + } + return retVal; } @@ -601,9 +607,6 @@ QVariant DiveTripModel::data(const QModelIndex& index, int role) const if (!index.isValid()) return QVariant(); - if (role == Qt::BackgroundRole) - return QBrush(QColor(index.row() % 2 ? Qt::white : QColor(Qt::lightGray).lighter(120))); - TreeItemDT* item = static_cast<TreeItemDT*>(index.internalPointer()); return item->data(index.column(), role); diff --git a/qt-ui/models.h b/qt-ui/models.h index d063874d3..307cdf5c3 100644 --- a/qt-ui/models.h +++ b/qt-ui/models.h @@ -82,7 +82,11 @@ private: struct TreeItemDT { Q_DECLARE_TR_FUNCTIONS ( TreeItemDT ); public: - enum Column {NR, DATE, RATING, DEPTH, DURATION, TEMPERATURE, TOTALWEIGHT, SUIT, CYLINDER, NITROX, SAC, OTU, MAXCNS, LOCATION, COLUMNS }; + enum Column {NR, DATE, RATING, DEPTH, DURATION, TEMPERATURE, TOTALWEIGHT, + SUIT, CYLINDER, NITROX, SAC, OTU, MAXCNS, LOCATION, DIVE, COLUMNS }; + + enum ExtraRoles{STAR_ROLE = Qt::UserRole + 1, DIVE_ROLE}; + virtual ~TreeItemDT(); int columnCount() const { return COLUMNS; |