Linus, this set of patches will even fix the already saved HTML notes, so no much harm was done. :)
From 37b866c207082c5639d0a785e414187ab69b6c6b Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava <[email protected]> Date: Mon, 21 Jul 2014 18:13:56 -0300 Subject: [PATCH 1/9] Whitespace fixes.
Signed-off-by: Tomaz Canabrava <[email protected]> --- qt-ui/modeldelegates.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp index a2c61e2..87846d2 100644 --- a/qt-ui/modeldelegates.cpp +++ b/qt-ui/modeldelegates.cpp @@ -432,10 +432,10 @@ void HTMLDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, QSize HTMLDelegate::sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const { - QStyleOptionViewItemV4 options = option; - initStyleOption(&options, index); - QTextDocument doc; - doc.setHtml(options.text); - doc.setTextWidth(options.rect.width()); - return QSize(doc.idealWidth(), doc.size().height()); + QStyleOptionViewItemV4 options = option; + initStyleOption(&options, index); + QTextDocument doc; + doc.setHtml(options.text); + doc.setTextWidth(options.rect.width()); + return QSize(doc.idealWidth(), doc.size().height()); } \ No newline at end of file -- 2.0.2
From 177469ab057729d63ce173e2f0b893cd6af87fb5 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava <[email protected]> Date: Mon, 21 Jul 2014 18:22:44 -0300 Subject: [PATCH 2/9] Break really long line. Signed-off-by: Tomaz Canabrava <[email protected]> --- qt-ui/profile/profilewidget2.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index 84df3d2..67dff15 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -327,7 +327,9 @@ void ProfileWidget2::setupItemSizes() itemPos.dcLabel.off.setY(100); } -void ProfileWidget2::setupItem(AbstractProfilePolygonItem *item, DiveCartesianAxis *hAxis, DiveCartesianAxis *vAxis, DivePlotDataModel *model, int vData, int hData, int zValue) +void ProfileWidget2::setupItem(AbstractProfilePolygonItem *item, DiveCartesianAxis *hAxis, + DiveCartesianAxis *vAxis, DivePlotDataModel *model, + int vData, int hData, int zValue) { item->setHorizontalAxis(hAxis); item->setVerticalAxis(vAxis); -- 2.0.2
From 79e7a4ba34ada3fd16f83745b491886253219ad5 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava <[email protected]> Date: Mon, 21 Jul 2014 18:23:02 -0300 Subject: [PATCH 3/9] Set visibility in a saner way for some reason we did a if(true) setValue(true) else serValue(false) now we just use the value to set the value. =p Signed-off-by: Tomaz Canabrava <[email protected]> --- qt-ui/profile/profilewidget2.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index 67dff15..7157f53 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -486,10 +486,7 @@ void ProfileWidget2::plotDive(struct dive *d, bool force) cylinderPressureAxis->setMaximum(pInfo.maxpressure); rulerItem->setPlotInfo(pInfo); - if (prefs.show_average_depth) - meanDepth->setVisible(true); - else - meanDepth->setVisible(false); + meanDepth->setVisible(prefs.show_average_depth); meanDepth->setMeanDepth(pInfo.meandepth); meanDepth->setLine(0, 0, timeAxis->posAtValue(displayed_dive.duration.seconds), 0); Animations::moveTo(meanDepth,3, profileYAxis->posAtValue(pInfo.meandepth)); -- 2.0.2
From 7a95f997760cba131a8431b6ee27f5fa23786aad Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava <[email protected]> Date: Mon, 21 Jul 2014 18:54:28 -0300 Subject: [PATCH 4/9] Don't plot pictures in Print mode The pictures were being plotted in print mode, the main reason for this was that when we entered print mode and had already a picture plotten, the method would return before removing them from the screen, this fixes it. Signed-off-by: Tomaz Canabrava <[email protected]> --- qt-ui/profile/profilewidget2.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index 7157f53..c8aaaee 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -527,12 +527,15 @@ void ProfileWidget2::plotDive(struct dive *d, bool force) DivePlannerPointsModel *model = DivePlannerPointsModel::instance(); model->deleteTemporaryPlan(); } + plotPictures(); + // OK, how long did this take us? Anything above the second is way too long, // so if we are calculation TTS / NDL then let's force that off. if (measureDuration.elapsed() > 1000 && prefs.calcndltts) { MainWindow::instance()->turnOffNdlTts(); MainWindow::instance()->showError("Show NDL / TTS was disabled because of excessive processing time"); } + } void ProfileWidget2::settingsChanged() @@ -1356,11 +1359,12 @@ void ProfileWidget2::keyEscAction() void ProfileWidget2::plotPictures() { + qDeleteAll(pictures); + pictures.clear(); + if (printMode) return; - qDeleteAll(pictures); - pictures.clear(); double x, y, lastX = -1.0, lastY = -1.0; DivePictureModel *m = DivePictureModel::instance(); for (int i = 0; i < m->rowCount(); i++) { -- 2.0.2
From e3571d5db949f24fc40e08c02d514d840fbb7ca8 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava <[email protected]> Date: Mon, 21 Jul 2014 19:10:31 -0300 Subject: [PATCH 5/9] Animation speed was being treated as boolean. ups. This breaks compatibility with old preferences, but it's a single key and not that very important so I don't think it's a bigger issue I'v renamed prefs.animation to prefs.animation_speed to denote that it's a value, and not a state. also, fixed the places that were treating it as a state (on/off) to treat it like a correct value. Signed-off-by: Tomaz Canabrava <[email protected]> --- pref.h | 2 +- qt-ui/preferences.cpp | 4 ++-- qt-ui/printlayout.cpp | 6 +++--- qt-ui/profile/animationfunctions.cpp | 12 ++++++------ qt-ui/profile/profilewidget2.cpp | 11 +++++------ subsurfacestartup.c | 2 +- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/pref.h b/pref.h index bf153f5..7292f13 100644 --- a/pref.h +++ b/pref.h @@ -35,7 +35,7 @@ struct preferences { short calcndltts; short gflow; short gfhigh; - bool animation; + int animation_speed; bool gf_low_at_maxdepth; short display_invalid_dives; short unit_system; diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp index cc5cfef..6000f45 100644 --- a/qt-ui/preferences.cpp +++ b/qt-ui/preferences.cpp @@ -103,7 +103,7 @@ void PreferencesDialog::setUiFromPrefs() ui.show_average_depth->setChecked(prefs.show_average_depth); ui.vertical_speed_minutes->setChecked(prefs.units.vertical_speed_time == units::MINUTES); ui.vertical_speed_seconds->setChecked(prefs.units.vertical_speed_time == units::SECONDS); - ui.velocitySlider->setValue(prefs.animation); + ui.velocitySlider->setValue(prefs.animation_speed); QSortFilterProxyModel *filterModel = new QSortFilterProxyModel(); filterModel->setSourceModel(LanguageModel::instance()); @@ -344,7 +344,7 @@ void PreferencesDialog::loadSettings() s.endGroup(); s.beginGroup("Animations"); - GET_INT("animation_speed", animation); + GET_INT("animation_speed", animation_speed); s.endGroup(); s.beginGroup("Network"); diff --git a/qt-ui/printlayout.cpp b/qt-ui/printlayout.cpp index c8e1621..6aaff02 100644 --- a/qt-ui/printlayout.cpp +++ b/qt-ui/printlayout.cpp @@ -122,14 +122,14 @@ int PrintLayout::estimateTotalDives() const void PrintLayout::printProfileDives(int divesPerRow, int divesPerColumn) { int i, row = 0, col = 0, printed = 0, total = estimateTotalDives(); - bool animationOriginal = prefs.animation; + int animationOriginal = prefs.animation_speed; struct dive *dive; if (!total) return; // disable animations on the profile: - prefs.animation = false; + prefs.animation_speed = 0; // setup a painter QPainter painter; @@ -223,7 +223,7 @@ void PrintLayout::printProfileDives(int divesPerRow, int divesPerColumn) // we need to force a redraw of the profile so it switches back from print mode profile->plotDive(0, true); // re-enable animations - prefs.animation = animationOriginal; + prefs.animation_speed = animationOriginal; } /* we create a table that has a fixed height, but can stretch to fit certain width */ diff --git a/qt-ui/profile/animationfunctions.cpp b/qt-ui/profile/animationfunctions.cpp index 9f3aa83..dc46d7f 100644 --- a/qt-ui/profile/animationfunctions.cpp +++ b/qt-ui/profile/animationfunctions.cpp @@ -8,7 +8,7 @@ namespace Animations { void hide(QObject *obj) { - if (prefs.animation != 0) { + if (prefs.animation_speed != 0) { QPropertyAnimation *animation = new QPropertyAnimation(obj, "opacity"); animation->setStartValue(1); animation->setEndValue(0); @@ -20,7 +20,7 @@ namespace Animations { void animDelete(QObject *obj) { - if (prefs.animation != 0) { + if (prefs.animation_speed != 0) { QPropertyAnimation *animation = new QPropertyAnimation(obj, "opacity"); obj->connect(animation, SIGNAL(finished()), SLOT(deleteLater())); animation->setStartValue(1); @@ -33,9 +33,9 @@ namespace Animations { void moveTo(QObject *obj, qreal x, qreal y) { - if (prefs.animation != 0) { + if (prefs.animation_speed != 0) { QPropertyAnimation *animation = new QPropertyAnimation(obj, "pos"); - animation->setDuration(prefs.animation); + animation->setDuration(prefs.animation_speed); animation->setStartValue(obj->property("pos").toPointF()); animation->setEndValue(QPointF(x, y)); animation->start(QAbstractAnimation::DeleteWhenStopped); @@ -46,9 +46,9 @@ namespace Animations { void scaleTo(QObject *obj, qreal scale) { - if (prefs.animation != 0) { + if (prefs.animation_speed != 0) { QPropertyAnimation *animation = new QPropertyAnimation(obj, "scale"); - animation->setDuration(prefs.animation); + animation->setDuration(prefs.animation_speed); animation->setStartValue(obj->property("scale").toReal()); animation->setEndValue(QVariant::fromValue(scale)); animation->setEasingCurve(QEasingCurve::InCubic); diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index c8aaaee..a6b3564 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -386,10 +386,10 @@ void ProfileWidget2::plotDive(struct dive *d, bool force) } // special handling for the first time we display things - int animSpeedBackup = -1; + int animSpeedBackup = 0; if (firstCall && MainWindow::instance()->filesFromCommandLine()) { - animSpeedBackup = prefs.animation; - prefs.animation = 0; + animSpeedBackup = prefs.animation_speed; + prefs.animation_speed = 0; firstCall = false; } @@ -518,8 +518,8 @@ void ProfileWidget2::plotDive(struct dive *d, bool force) if ((nr = number_of_computers(&displayed_dive)) > 1) dcText += tr(" (#%1 of %2)").arg(dc_number + 1).arg(nr); diveComputerText->setText(dcText); - if (MainWindow::instance()->filesFromCommandLine() && animSpeedBackup != -1) { - prefs.animation = animSpeedBackup; + if (MainWindow::instance()->filesFromCommandLine() && animSpeedBackup != 0) { + prefs.animation_speed = animSpeedBackup; } if (currentState == ADD || currentState == PLAN) { // TODO: figure a way to move this from here. @@ -535,7 +535,6 @@ void ProfileWidget2::plotDive(struct dive *d, bool force) MainWindow::instance()->turnOffNdlTts(); MainWindow::instance()->showError("Show NDL / TTS was disabled because of excessive processing time"); } - } void ProfileWidget2::settingsChanged() diff --git a/subsurfacestartup.c b/subsurfacestartup.c index 3e6e928..b7b1b65 100644 --- a/subsurfacestartup.c +++ b/subsurfacestartup.c @@ -26,7 +26,7 @@ struct preferences default_prefs = { .calcndltts = false, .gflow = 30, .gfhigh = 75, - .animation = 500, + .animation_speed = 500, .gf_low_at_maxdepth = false, .font_size = -1, .display_invalid_dives = false, -- 2.0.2
From 615c8463713530d8ee17dd7b6e0b6c2f97bf026a Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava <[email protected]> Date: Mon, 21 Jul 2014 19:32:46 -0300 Subject: [PATCH 6/9] Code cleanup: HeartRate item was doing insane insanely things. this simplifies so much of the code that we were using to control the visibility of the HeartRate. now things are much saner. Signed-off-by: Tomaz Canabrava <[email protected]> --- qt-ui/profile/diveprofileitem.cpp | 17 ++--------------- qt-ui/profile/diveprofileitem.h | 4 ---- qt-ui/profile/profilewidget2.cpp | 18 +++++++----------- 3 files changed, 9 insertions(+), 30 deletions(-) diff --git a/qt-ui/profile/diveprofileitem.cpp b/qt-ui/profile/diveprofileitem.cpp index cb5cec5..c5321d7 100644 --- a/qt-ui/profile/diveprofileitem.cpp +++ b/qt-ui/profile/diveprofileitem.cpp @@ -254,7 +254,7 @@ DiveHeartrateItem::DiveHeartrateItem() pen.setCosmetic(true); pen.setWidth(1); setPen(pen); - visible = true; + settingsChanged(); } void DiveHeartrateItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) @@ -335,20 +335,7 @@ void DiveHeartrateItem::paint(QPainter *painter, const QStyleOptionGraphicsItem void DiveHeartrateItem::settingsChanged() { - QSettings s; - s.beginGroup("TecDetails"); - visible = s.value(visibilityKey).toBool(); - setVisible(visible); -} - -void DiveHeartrateItem::setVisibilitySettingsKey(const QString &key) -{ - visibilityKey = key; -} - -bool DiveHeartrateItem::isVisible() -{ - return visible == true; + setVisible(prefs.hrgraph); } DiveTemperatureItem::DiveTemperatureItem() diff --git a/qt-ui/profile/diveprofileitem.h b/qt-ui/profile/diveprofileitem.h index ddf8f51..f98af51 100644 --- a/qt-ui/profile/diveprofileitem.h +++ b/qt-ui/profile/diveprofileitem.h @@ -102,13 +102,9 @@ public: virtual void modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); virtual void settingsChanged(); - void setVisibilitySettingsKey(const QString &setVisibilitySettingsKey); - bool isVisible(); - private: void createTextItem(int seconds, int hr); QString visibilityKey; - bool visible; }; class DiveGasPressureItem : public AbstractProfilePolygonItem { diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index a6b3564..e683b67 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -222,8 +222,6 @@ void ProfileWidget2::setupItemOnScene() setupItem(gasPressureItem, timeAxis, cylinderPressureAxis, dataModel, DivePlotDataModel::TEMPERATURE, DivePlotDataModel::TIME, 1); setupItem(temperatureItem, timeAxis, temperatureAxis, dataModel, DivePlotDataModel::TEMPERATURE, DivePlotDataModel::TIME, 1); setupItem(heartBeatItem, timeAxis, heartBeatAxis, dataModel, DivePlotDataModel::HEARTBEAT, DivePlotDataModel::TIME, 1); - heartBeatItem->setVisibilitySettingsKey("hrgraph"); - heartBeatItem->settingsChanged(); setupItem(diveProfileItem, timeAxis, profileYAxis, dataModel, DivePlotDataModel::DEPTH, DivePlotDataModel::TIME, 0); #define CREATE_PP_GAS(ITEM, VERTICAL_COLUMN, COLOR, COLOR_ALERT, THRESHOULD_SETTINGS, VISIBILITY_SETTINGS) \ @@ -452,18 +450,16 @@ void ProfileWidget2::plotDive(struct dive *d, bool force) temperatureAxis->setMinimum(pInfo.mintemp); temperatureAxis->setMaximum(pInfo.maxtemp); - if (heartBeatItem->isVisible()) { - if (pInfo.maxhr) { - heartBeatAxis->setMinimum(pInfo.minhr); - heartBeatAxis->setMaximum(pInfo.maxhr); - heartBeatAxis->updateTicks(HR_AXIS); // this shows the ticks - heartBeatAxis->setVisible(true); - } else { - heartBeatAxis->setVisible(false); - } + + if (pInfo.maxhr) { + heartBeatAxis->setMinimum(pInfo.minhr); + heartBeatAxis->setMaximum(pInfo.maxhr); + heartBeatAxis->updateTicks(HR_AXIS); // this shows the ticks + heartBeatAxis->setVisible(true); } else { heartBeatAxis->setVisible(false); } + timeAxis->setMaximum(maxtime); int i, incr; static int increments[8] = { 10, 20, 30, 60, 5 * 60, 10 * 60, 15 * 60, 30 * 60 }; -- 2.0.2
From 7a3a9f0fabcf85b38abeef1ece1d32bd0eba4793 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava <[email protected]> Date: Mon, 21 Jul 2014 19:41:57 -0300 Subject: [PATCH 7/9] Add comments for dirk, Hi dirk \o/ this is not a joke commit, but most probably will not be integrated as it explains to dirk how to use a feature on qt. Signed-off-by: Tomaz Canabrava <[email protected]> --- qt-ui/profile/profilewidget2.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index e683b67..87d348f 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -146,6 +146,13 @@ void ProfileWidget2::addItemsToScene() // is the object I am looking for - my guess is there's a simple way in Qt to do that // but nothing I tried worked. // so instead this adds a special magic key/value pair to the object to mark it + // Edit: since I didn't understood what you talked about, here how you should do it: + // Q_FOREACH(QGraphicsItem *item = scene()->items(QPoint(x,y)){ + // if (item == the one I want){ + // break; + // } + //} + diveComputerText->setData(SUBSURFACE_OBJ_DATA, SUBSURFACE_OBJ_DC_TEXT); scene()->addItem(diveComputerText); scene()->addItem(diveCeiling); -- 2.0.2
From 710c8d1ce858eb6634328fac5037c193ef123626 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava <[email protected]> Date: Mon, 21 Jul 2014 20:34:15 -0300 Subject: [PATCH 8/9] Only use HTML if the text has a <table> The text we generate for the diveplan has a table inside, and we must use HTML only for the dive plan. so I treat all text as HTML, look for a table item, if it doesn't have, I treat it as Simple text and set it on the notes. Works and makes linus loves me again. Signed-off-by: Tomaz Canabrava <[email protected]> --- qt-ui/maintab.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 7c85825..c8eddb3 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -331,7 +331,7 @@ void MainTab::clearStats() #define UPDATE_TEXT(d, field) \ if (clear || !d.field) \ - ui.field->setText(""); \ + ui.field->setText(QString()); \ else \ ui.field->setText(d.field) @@ -370,6 +370,18 @@ void MainTab::updateDiveInfo(bool clear) process_all_dives(&displayed_dive, &prevd); divePictureModel->updateDivePictures(); + + ui.notes->setText(QString()); + if(!clear){ + QString tmp(displayed_dive.notes); + if(tmp.indexOf("<table") != -1){ + ui.notes->setHtml(tmp); + } else { + qDebug() << "Setando plain text" << tmp; + ui.notes->setPlainText(tmp); + } + } + UPDATE_TEXT(displayed_dive, notes); UPDATE_TEXT(displayed_dive, location); UPDATE_TEXT(displayed_dive, suit); @@ -1004,7 +1016,11 @@ void MainTab::on_notes_textChanged() if (editMode == IGNORE) return; free(displayed_dive.notes); - displayed_dive.notes = strdup(ui.notes->toHtml().toUtf8().data()); + if (ui.notes->toHtml().indexOf("<table") != -1){ + displayed_dive.notes = strdup(ui.notes->toHtml().toUtf8().data()); + }else{ + displayed_dive.notes = strdup(ui.notes->toPlainText().toUtf8().data()); + } markChangedWidget(ui.notes); } -- 2.0.2
From 496d181cd748c587d7c160240ebbf727d12cedfd Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava <[email protected]> Date: Mon, 21 Jul 2014 20:44:46 -0300 Subject: [PATCH 9/9] Only repopulate the dive info once ( we were repopulating 4 times ) This makes the screen repopulate itself after a dive change only one time instead of the old 4. we were repopulateing when we removed the actual selection to reset the old selection previously stored, sigh. Signed-off-by: Tomaz Canabrava <[email protected]> --- qt-ui/divelistview.cpp | 2 ++ qt-ui/maintab.cpp | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 5fde4c4..442ea1f 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -156,7 +156,9 @@ void DiveListView::restoreSelection() return; selectionSaved = false; + dontEmitDiveChangedSignal = true; unselectDives(); + dontEmitDiveChangedSignal = false; Q_FOREACH (dive_trip_t *trip, selectedDives.keys()) { QList<int> divesOnTrip = getDivesInTrip(trip); QList<int> selectedDivesOnTrip = selectedDives.values(trip); diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index c8eddb3..78fe190 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -763,10 +763,9 @@ void MainTab::acceptChanges() editMode = NONE; MainWindow::instance()->dive_list()->rememberSelection(); sort_table(&dive_table); - MainWindow::instance()->refreshDisplay(); + MainWindow::instance()->refreshDisplay(false); MainWindow::instance()->dive_list()->restoreSelection(); } - updateDiveInfo(); DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::NOTHING); MainWindow::instance()->dive_list()->verticalScrollBar()->setSliderPosition(scrolledBy); MainWindow::instance()->dive_list()->setFocus(); -- 2.0.2
_______________________________________________ subsurface mailing list [email protected] http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface
