Changeset 1fc4fba in subsurface


Ignore:
Timestamp:
Apr 6, 2017, 6:23:25 PM (3 weeks ago)
Author:
Dirk Hohndel <dirk@…>
Branches:
master
Children:
2f86cbdc
Parents:
8a71196
git-author:
Tomaz Canabrava <tcanabrava@…> (04/04/17 10:21:30)
git-committer:
Dirk Hohndel <dirk@…> (04/06/17 18:23:25)
Message:

Break down MainTab? into smaller classes

Maintab is one of our most complex classes, and it's
something I'm not actually proud of. But it currently
works and the idea of splitting it was in my head for
quite a while.

This is the third or fourth tentative of splitting it,
and this time I let the most complex part of it untouched,
the Notes and Equipment tab are way too complex to untangle
right now on my limited time.

A new class 'TabBase?' should be used for any new tab that
we may create, and added on the MainTab? (see the new lines
on the MainTab? constructor).

Also, Extra Info, Information, Photos and Statistics where
ported to this new way helping reduce the number of
lines and functions on the MainTab? quite a bit.

Overall this is a step in the right direction for the future.

Signed-off-by: Tomaz Canabrava <tcanabrava@…>
Signed-off-by: Dirk Hohndel <dirk@…>

Files:
14 added
6 edited
3 moved

Legend:

Unmodified
Added
Removed
  • desktop-widgets/CMakeLists.txt

    r131c5a2 r1fc4fba  
    3737        listfilter.ui
    3838        locationInformation.ui
    39         maintab.ui
    4039        mainwindow.ui
    4140        plannerDetails.ui
     
    5251        usersurvey.ui
    5352        webservices.ui
     53        tab-widgets/maintab.ui
     54        tab-widgets/TabDiveStatistics.ui
     55        tab-widgets/TabDiveInformation.ui
     56        tab-widgets/TabDivePhotos.ui
     57        tab-widgets/TabDiveExtraInfo.ui
    5458)
    5559
     
    6569        globe.cpp
    6670        kmessagewidget.cpp
    67         maintab.cpp
    6871        mainwindow.cpp
    6972        modeldelegates.cpp
     
    8386        locationinformation.cpp
    8487        qtwaitingspinner.cpp
     88        tab-widgets/TabDiveStatistics.cpp
     89        tab-widgets/TabDiveInformation.cpp
     90        tab-widgets/TabDivePhotos.cpp
     91        tab-widgets/TabDiveExtraInfo.cpp
     92        tab-widgets/maintab.cpp
     93        tab-widgets/TabBase.cpp
    8594)
    8695
  • desktop-widgets/globe.cpp

    r597539c r1fc4fba  
    44#include "core/helpers.h"
    55#include "desktop-widgets/divelistview.h"
    6 #include "desktop-widgets/maintab.h"
     6#include "desktop-widgets/tab-widgets/maintab.h"
    77#include "core/display.h"
    88
  • desktop-widgets/mainwindow.cpp

    r597539c r1fc4fba  
    2525#include "desktop-widgets/globe.h"
    2626#include "core/divecomputer.h"
    27 #include "desktop-widgets/maintab.h"
     27#include "desktop-widgets/tab-widgets/maintab.h"
    2828#include "desktop-widgets/diveplanner.h"
    2929#ifndef NO_PRINTING
     
    644644void MainWindow::cleanUpEmpty()
    645645{
    646         information()->clearStats();
    647         information()->clearInfo();
    648         information()->clearEquipment();
     646        information()->clearTabs();
    649647        information()->updateDiveInfo(true);
    650648        graphics()->setEmptyState();
  • desktop-widgets/subsurfacewebservices.cpp

    r4375a87 r1fc4fba  
    66#include "core/divelist.h"
    77#include "desktop-widgets/globe.h"
    8 #include "desktop-widgets/maintab.h"
     8#include "desktop-widgets/tab-widgets/maintab.h"
    99#include "core/display.h"
    1010#include "core/membuffer.h"
  • desktop-widgets/tab-widgets/maintab.cpp

    r597539c r1fc4fba  
    55 *
    66 */
    7 #include "desktop-widgets/maintab.h"
     7#include "desktop-widgets/tab-widgets/maintab.h"
    88#include "desktop-widgets/mainwindow.h"
    99#include "desktop-widgets/globe.h"
     
    1919#include "qt-models/cylindermodel.h"
    2020#include "qt-models/weightmodel.h"
    21 #include "qt-models/divepicturemodel.h"
    2221#include "qt-models/divecomputerextradatamodel.h"
    2322#include "qt-models/divelocationmodel.h"
    2423#include "core/divesite.h"
    2524#include "desktop-widgets/locationinformation.h"
     25
     26#include "TabDiveExtraInfo.h"
     27#include "TabDiveInformation.h"
     28#include "TabDivePhotos.h"
     29#include "TabDiveStatistics.h"
    2630
    2731#include <QCompleter>
     
    3640        weightModel(new WeightModel(this)),
    3741        cylindersModel(new CylindersModel(this)),
    38         extraDataModel(new ExtraDataModel(this)),
    3942        editMode(NONE),
    40         divePictureModel(DivePictureModel::instance()),
    4143        copyPaste(false),
    4244        currentTrip(0)
    4345{
    4446        ui.setupUi(this);
     47
     48        extraWidgets << new TabDiveExtraInfo(this);
     49        addTab(extraWidgets.last(), "Extra Info");
     50        extraWidgets << new TabDiveInformation(this);
     51        addTab(extraWidgets.last(), "Information");
     52        extraWidgets << new TabDiveStatistics(this);
     53        addTab(extraWidgets.last(), "Statistics");
     54        extraWidgets << new TabDivePhotos(this);
     55        addTab(extraWidgets.last(), "Photos");
     56
    4557        ui.dateEdit->setDisplayFormat(prefs.date_format);
    4658
     
    5062        ui.cylinders->setModel(cylindersModel);
    5163        ui.weights->setModel(weightModel);
    52         ui.photosView->setModel(divePictureModel);
    53         connect(ui.photosView, SIGNAL(photoDoubleClicked(QString)), this, SLOT(photoDoubleClicked(QString)));
    54         ui.extraData->setModel(extraDataModel);
    5564        closeMessage();
    5665
     
    8190        setEnabled(false);
    8291
    83         Q_FOREACH (QObject *obj, ui.statisticsTab->children()) {
    84                 QLabel *label = qobject_cast<QLabel *>(obj);
    85                 if (label)
    86                         label->setAlignment(Qt::AlignHCenter);
    87         }
    8892        ui.cylinders->setTitle(tr("Cylinders"));
    8993        ui.cylinders->setBtnToolTip(tr("Add cylinder"));
     
    119123        ui.diveNotesMessage->hide();
    120124        ui.diveEquipmentMessage->hide();
    121         ui.diveInfoMessage->hide();
    122         ui.diveStatisticsMessage->hide();
    123125        ui.depth->hide();
    124126        ui.depthLabel->hide();
     
    135137                ui.scrollArea->viewport()->setPalette(p);
    136138                ui.scrollArea_2->viewport()->setPalette(p);
    137                 ui.scrollArea_3->viewport()->setPalette(p);
    138                 ui.scrollArea_4->viewport()->setPalette(p);
    139139
    140140                // GroupBoxes in Gnome3 looks like I'v drawn them...
     
    205205
    206206        ui.diveTripLocation->hide();
    207         ui.photosView->setSelectionMode(QAbstractItemView::MultiSelection);
     207
     208
    208209}
    209210
     
    263264        ui.diveEquipmentMessage->addAction(action);
    264265        ui.diveNotesMessage->addAction(action);
    265         ui.diveInfoMessage->addAction(action);
    266         ui.diveStatisticsMessage->addAction(action);
    267266}
    268267
     
    271270        ui.diveNotesMessage->animatedHide();
    272271        ui.diveEquipmentMessage->animatedHide();
    273         ui.diveInfoMessage->animatedHide();
    274         ui.diveStatisticsMessage->animatedHide();
    275272        updateTextLabels(false);
    276273}
     
    281278        ui.diveNotesMessage->setCloseButtonVisible(false);
    282279        ui.diveEquipmentMessage->setCloseButtonVisible(false);
    283         ui.diveInfoMessage->setCloseButtonVisible(false);
    284         ui.diveStatisticsMessage->setCloseButtonVisible(false);
    285280}
    286281
     
    289284        ui.diveNotesMessage->setCloseButtonVisible(false);
    290285        ui.diveEquipmentMessage->setCloseButtonVisible(false);
    291         ui.diveInfoMessage->setCloseButtonVisible(false);
    292         ui.diveStatisticsMessage->setCloseButtonVisible(false);
    293286        ui.diveNotesMessage->setText(str);
    294287        ui.diveNotesMessage->animatedShow();
    295288        ui.diveEquipmentMessage->setText(str);
    296289        ui.diveEquipmentMessage->animatedShow();
    297         ui.diveInfoMessage->setText(str);
    298         ui.diveInfoMessage->animatedShow();
    299         ui.diveStatisticsMessage->setText(str);
    300         ui.diveStatisticsMessage->animatedShow();
    301290        updateTextLabels();
    302291}
     
    371360}
    372361
    373 void MainTab::clearInfo()
    374 {
    375         ui.sacText->clear();
    376         ui.otuText->clear();
    377         ui.maxcnsText->clear();
    378         ui.oxygenHeliumText->clear();
    379         ui.gasUsedText->clear();
    380         ui.dateText->clear();
    381         ui.diveTimeText->clear();
    382         ui.surfaceIntervalText->clear();
    383         ui.maximumDepthText->clear();
    384         ui.averageDepthText->clear();
    385         ui.waterTemperatureText->clear();
    386         ui.airTemperatureText->clear();
    387         ui.airPressureText->clear();
    388         ui.salinityText->clear();
    389         ui.tagWidget->clear();
    390 }
    391 
    392 void MainTab::clearStats()
    393 {
    394         ui.depthLimits->clear();
    395         ui.sacLimits->clear();
    396         ui.divesAllText->clear();
    397         ui.tempLimits->clear();
    398         ui.totalTimeAllText->clear();
    399         ui.timeLimits->clear();
    400 }
    401 
    402362#define UPDATE_TEXT(d, field)          \
    403363        if (clear || !d.field)         \
     
    460420        // for the trip in the Info tab, otherwise we show the info of the
    461421        // selected_dive
    462         temperature_t temp;
    463422        struct dive *prevd;
    464423        char buf[1024];
     
    467426        process_all_dives(&displayed_dive, &prevd);
    468427
    469         divePictureModel->updateDivePictures();
     428        for (auto widget : extraWidgets) {
     429                widget->updateData();
     430        }
    470431
    471432        ui.notes->setText(QString());
     
    591552                        cylindersModel->updateDive();
    592553                        weightModel->updateDive();
    593                         extraDataModel->updateDive();
    594554                        taglist_get_tagstring(displayed_dive.tag_list, buf, 1024);
    595555                        ui.tagWidget->setText(QString(buf));
     
    602562                ui.duration->setText(QDateTime::fromTime_t(displayed_dive.duration.seconds).toUTC().toString("h:mm"));
    603563                ui.depth->setText(get_depth_string(displayed_dive.maxdepth, true));
    604                 ui.maximumDepthText->setText(get_depth_string(displayed_dive.maxdepth, true));
    605                 ui.averageDepthText->setText(get_depth_string(displayed_dive.meandepth, true));
    606                 ui.maxcnsText->setText(QString("%1\%").arg(displayed_dive.maxcns));
    607                 ui.otuText->setText(QString("%1").arg(displayed_dive.otu));
    608                 ui.waterTemperatureText->setText(get_temperature_string(displayed_dive.watertemp, true));
    609                 ui.airTemperatureText->setText(get_temperature_string(displayed_dive.airtemp, true));
    610564                ui.DiveType->setCurrentIndex(get_dive_dc(&displayed_dive, dc_number)->divemode);
    611565
     
    615569                int mean[MAX_CYLINDERS], duration[MAX_CYLINDERS];
    616570                per_cylinder_mean_depth(&displayed_dive, select_dc(&displayed_dive), mean, duration);
    617                 volume_t sac;
    618                 QString gaslist, SACs, separator;
    619 
    620                 gaslist = ""; SACs = ""; volumes = ""; separator = "";
    621                 for (int i = 0; i < MAX_CYLINDERS; i++) {
    622                         if (!is_cylinder_used(&displayed_dive, i))
    623                                 continue;
    624                         gaslist.append(separator); volumes.append(separator); SACs.append(separator);
    625                         separator = "\n";
    626 
    627                         gaslist.append(gasname(&displayed_dive.cylinder[i].gasmix));
    628                         if (!gases[i].mliter)
    629                                 continue;
    630                         volumes.append(get_volume_string(gases[i], true));
    631                         if (duration[i]) {
    632                                 sac.mliter = lrint(gases[i].mliter / (depth_to_atm(mean[i], &displayed_dive) * duration[i] / 60));
    633                                 SACs.append(get_volume_string(sac, true).append(tr("/min")));
    634                         }
    635                 }
    636                 ui.gasUsedText->setText(volumes);
    637                 ui.oxygenHeliumText->setText(gaslist);
    638                 ui.dateText->setText(get_short_dive_date_string(displayed_dive.when));
    639                 if (displayed_dive.dc.divemode != FREEDIVE)
    640                                 ui.diveTimeText->setText(get_time_string_s(displayed_dive.duration.seconds + 30, 0, false));
    641                         else
    642                                 ui.diveTimeText->setText(get_time_string_s(displayed_dive.duration.seconds, 0, true));
    643                 if (prevd)
    644                         ui.surfaceIntervalText->setText(get_time_string_s(displayed_dive.when - (prevd->when + prevd->duration.seconds), 4,
    645                                                                           (displayed_dive.dc.divemode == FREEDIVE)));
    646                 else
    647                         ui.surfaceIntervalText->clear();
    648                 if (mean[0])
    649                         ui.sacText->setText(SACs);
    650                 else
    651                         ui.sacText->clear();
    652                 if (displayed_dive.surface_pressure.mbar)
    653                         /* this is ALWAYS displayed in mbar */
    654                         ui.airPressureText->setText(QString("%1mbar").arg(displayed_dive.surface_pressure.mbar));
    655                 else
    656                         ui.airPressureText->clear();
    657                 if (displayed_dive.salinity)
    658                         ui.salinityText->setText(QString("%1g/l").arg(displayed_dive.salinity / 10.0));
    659                 else
    660                         ui.salinityText->clear();
    661                 ui.depthLimits->setMaximum(get_depth_string(stats_selection.max_depth, true));
    662                 ui.depthLimits->setMinimum(get_depth_string(stats_selection.min_depth, true));
    663                 // the overall average depth is really confusing when listed between the
    664                 // deepest and shallowest dive - let's just not set it
    665                 // ui.depthLimits->setAverage(get_depth_string(stats_selection.avg_depth, true));
    666                 ui.depthLimits->overrideMaxToolTipText(tr("Deepest dive"));
    667                 ui.depthLimits->overrideMinToolTipText(tr("Shallowest dive"));
    668                 if (amount_selected > 1 && stats_selection.max_sac.mliter)
    669                         ui.sacLimits->setMaximum(get_volume_string(stats_selection.max_sac, true).append(tr("/min")));
    670                 else
    671                         ui.sacLimits->setMaximum("");
    672                 if (amount_selected > 1 && stats_selection.min_sac.mliter)
    673                         ui.sacLimits->setMinimum(get_volume_string(stats_selection.min_sac, true).append(tr("/min")));
    674                 else
    675                         ui.sacLimits->setMinimum("");
    676                 if (stats_selection.avg_sac.mliter)
    677                         ui.sacLimits->setAverage(get_volume_string(stats_selection.avg_sac, true).append(tr("/min")));
    678                 else
    679                         ui.sacLimits->setAverage("");
    680                 ui.sacLimits->overrideMaxToolTipText(tr("Highest total SAC of a dive"));
    681                 ui.sacLimits->overrideMinToolTipText(tr("Lowest total SAC of a dive"));
    682                 ui.sacLimits->overrideAvgToolTipText(tr("Average total SAC of all selected dives"));
    683                 ui.divesAllText->setText(QString::number(stats_selection.selection_size));
    684                 temp.mkelvin = stats_selection.max_temp;
    685                 ui.tempLimits->setMaximum(get_temperature_string(temp, true));
    686                 temp.mkelvin = stats_selection.min_temp;
    687                 ui.tempLimits->setMinimum(get_temperature_string(temp, true));
    688                 if (stats_selection.combined_temp && stats_selection.combined_count) {
    689                         const char *unit;
    690                         get_temp_units(0, &unit);
    691                         ui.tempLimits->setAverage(QString("%1%2").arg(stats_selection.combined_temp / stats_selection.combined_count, 0, 'f', 1).arg(unit));
    692                 }
    693                 ui.tempLimits->overrideMaxToolTipText(tr("Highest temperature"));
    694                 ui.tempLimits->overrideMinToolTipText(tr("Lowest temperature"));
    695                 ui.tempLimits->overrideAvgToolTipText(tr("Average temperature of all selected dives"));
    696                 ui.totalTimeAllText->setText(get_time_string_s(stats_selection.total_time.seconds, 0, (displayed_dive.dc.divemode == FREEDIVE)));
    697                 int seconds = stats_selection.total_time.seconds;
    698                 if (stats_selection.selection_size)
    699                         seconds /= stats_selection.selection_size;
    700                 ui.timeLimits->setAverage(get_time_string_s(seconds, 0,(displayed_dive.dc.divemode == FREEDIVE)));
    701                 if (amount_selected > 1) {
    702                         ui.timeLimits->setMaximum(get_time_string_s(stats_selection.longest_time.seconds, 0, (displayed_dive.dc.divemode == FREEDIVE)));
    703                         ui.timeLimits->setMinimum(get_time_string_s(stats_selection.shortest_time.seconds, 0, (displayed_dive.dc.divemode == FREEDIVE)));
    704                 } else {
    705                         ui.timeLimits->setMaximum("");
    706                         ui.timeLimits->setMinimum("");
    707                 }
    708                 ui.timeLimits->overrideMaxToolTipText(tr("Longest dive"));
    709                 ui.timeLimits->overrideMinToolTipText(tr("Shortest dive"));
    710                 ui.timeLimits->overrideAvgToolTipText(tr("Average length of all selected dives"));
     571
    711572                // now let's get some gas use statistics
    712573                QVector<QPair<QString, int> > gasUsed;
     
    727588                selected_dives_gas_parts(&o2_tot, &he_tot);
    728589
    729                 /* No need to show the gas mixing information if diving
    730                  * with pure air, and only display the he / O2 part when
    731                  * it is used.
    732                  */
    733                 if (he_tot.mliter || o2_tot.mliter) {
    734                         gasUsedString.append(tr("These gases could be\nmixed from Air and using:\n"));
    735                         if (he_tot.mliter)
    736                                 gasUsedString.append(QString("He: %1").arg(get_volume_string(he_tot, true)));
    737                         if (he_tot.mliter && o2_tot.mliter)
    738                                 gasUsedString.append(tr(" and "));
    739                         if (o2_tot.mliter)
    740                                 gasUsedString.append(QString("O₂: %2\n").arg(get_volume_string(o2_tot, true)));
    741                 }
    742                 ui.gasConsumption->setText(gasUsedString);
    743590                if(ui.locationTags->text().isEmpty())
    744591                        ui.locationTags->hide();
     
    751598        } else {
    752599                /* clear the fields */
    753                 clearInfo();
    754                 clearStats();
    755                 clearEquipment();
     600                clearTabs();
    756601                ui.rating->setCurrentStars(0);
    757602                ui.visibility->setCurrentStars(0);
     
    11871032                clear_dive(&displayed_dive);
    11881033        updateDiveInfo(selected_dive < 0);
    1189         DivePictureModel::instance()->updateDivePictures();
     1034
     1035        for (auto widget : extraWidgets) {
     1036                widget->updateData();
     1037        }
    11901038        // the user could have edited the location and then canceled the edit
    11911039        // let's get the correct location back in view
     
    12001048        cylindersModel->updateDive();
    12011049        weightModel->updateDive();
    1202         extraDataModel->updateDive();
    12031050        ui.editDiveSiteButton->setEnabled(true);
    12041051}
     
    16281475}
    16291476
    1630 void MainTab::photoDoubleClicked(const QString filePath)
    1631 {
    1632         QDesktopServices::openUrl(QUrl::fromLocalFile(filePath));
    1633 }
    1634 
    1635 void MainTab::removeSelectedPhotos()
    1636 {
    1637         bool last = false;
    1638         if (!ui.photosView->selectionModel()->hasSelection())
    1639                 return;
    1640         QModelIndexList indexes =  ui.photosView->selectionModel()->selectedRows();
    1641         if (indexes.count() == 0)
    1642                 indexes = ui.photosView->selectionModel()->selectedIndexes();
    1643         QModelIndex photo = indexes.first();
    1644         do {
    1645                 photo = indexes.first();
    1646                 last = indexes.count() == 1;
    1647                 if (photo.isValid()) {
    1648                         QString fileUrl = photo.data(Qt::DisplayPropertyRole).toString();
    1649                         if (fileUrl.length() > 0)
    1650                                 DivePictureModel::instance()->removePicture(fileUrl, last);
    1651                 }
    1652                 indexes.removeFirst();
    1653         } while(!indexes.isEmpty());
    1654 }
    1655 
    1656 void MainTab::removeAllPhotos()
    1657 {
    1658         if (QMessageBox::warning(this, tr("Deleting Images"), tr("Are you sure you want to delete all images?"), QMessageBox::Cancel | QMessageBox::Ok, QMessageBox::Cancel) != QMessageBox::Cancel ) {
    1659                 ui.photosView->selectAll();
    1660                 removeSelectedPhotos();
    1661         }
    1662 }
    1663 
    1664 void MainTab::addPhotosFromFile()
    1665 {
    1666         MainWindow::instance()->dive_list()->loadImages();
    1667 }
    1668 
    1669 void MainTab::addPhotosFromURL()
    1670 {
    1671         MainWindow::instance()->dive_list()->loadWebImages();
     1477void MainTab::clearTabs() {
     1478        for (auto widget : extraWidgets) {
     1479                widget->clear();
     1480        }
     1481        clearEquipment();
    16721482}
    16731483
     
    17111521        }
    17121522}
    1713 
    1714 void MainTab::contextMenuEvent(QContextMenuEvent *event)
    1715 {
    1716         QMenu popup(this);
    1717         popup.addAction(tr("Load image(s) from file(s)"), this, SLOT(addPhotosFromFile()));
    1718         popup.addAction(tr("Load image(s) from web"), this, SLOT(addPhotosFromURL()));
    1719         popup.addSeparator();
    1720         popup.addAction(tr("Delete selected images"), this, SLOT(removeSelectedPhotos()));
    1721         popup.addAction(tr("Delete all images"), this, SLOT(removeAllPhotos()));
    1722         popup.exec(event->globalPos());
    1723         event->accept();
    1724 }
  • desktop-widgets/tab-widgets/maintab.h

    rd36f056 r1fc4fba  
    3131};
    3232
     33class TabBase;
    3334class MainTab : public QTabWidget {
    3435        Q_OBJECT
     
    4546        MainTab(QWidget *parent = 0);
    4647        ~MainTab();
    47         void clearStats();
    48         void clearInfo();
     48        void clearTabs();
    4949        void clearEquipment();
    5050        void reload();
     
    5555        void nextInputField(QKeyEvent *event);
    5656        void showAndTriggerEditSelective(struct dive_components what);
    57         void contextMenuEvent(QContextMenuEvent *event);
    5857
    5958signals:
     
    9998        void updateTextLabels(bool showUnits = true);
    10099        void escDetected(void);
    101         void photoDoubleClicked(const QString filePath);
    102         void removeSelectedPhotos();
    103         void removeAllPhotos();
    104         void addPhotosFromFile();
    105         void addPhotosFromURL();
    106100        void showLocation();
    107101        void enableGeoLookupEdition();
     
    113107        WeightModel *weightModel;
    114108        CylindersModel *cylindersModel;
    115         ExtraDataModel *extraDataModel;
    116109        EditMode editMode;
    117110        BuddyCompletionModel buddyModel;
     
    119112        SuitCompletionModel suitModel;
    120113        TagCompletionModel tagModel;
    121         DivePictureModel *divePictureModel;
    122114        Completers completers;
    123115        bool modified;
     
    132124        bool acceptingEdit;
    133125        uint32_t updateDiveSite(uint32_t pickedUuid, int divenr);
     126        QList<TabBase*> extraWidgets;
    134127};
    135128
  • desktop-widgets/tab-widgets/maintab.ui

    r05b53d62 r1fc4fba  
    1212  </property>
    1313  <property name="currentIndex">
    14    <number>0</number>
     14   <number>1</number>
    1515  </property>
    1616  <widget class="QWidget" name="notesTab">
     
    238238              </property>
    239239              <property name="icon">
    240                <iconset resource="../subsurface.qrc">
     240               <iconset resource="../../subsurface.qrc">
    241241                <normaloff>:/geocode</normaloff>:/geocode</iconset>
    242242              </property>
     
    547547         <y>0</y>
    548548         <width>445</width>
    549          <height>754</height>
     549         <height>720</height>
    550550        </rect>
    551551       </property>
     
    602602   </layout>
    603603  </widget>
    604   <widget class="QWidget" name="infoTab">
    605    <attribute name="title">
    606     <string>Info</string>
    607    </attribute>
    608    <attribute name="toolTip">
    609     <string>Dive information</string>
    610    </attribute>
    611    <layout class="QGridLayout" name="diveInfoLayout">
    612     <property name="leftMargin">
    613      <number>5</number>
    614     </property>
    615     <property name="topMargin">
    616      <number>5</number>
    617     </property>
    618     <property name="rightMargin">
    619      <number>5</number>
    620     </property>
    621     <property name="bottomMargin">
    622      <number>5</number>
    623     </property>
    624     <item row="0" column="0">
    625      <widget class="KMessageWidget" name="diveInfoMessage"/>
    626     </item>
    627     <item row="1" column="0">
    628      <widget class="QScrollArea" name="scrollArea_3">
    629       <property name="frameShape">
    630        <enum>QFrame::NoFrame</enum>
    631       </property>
    632       <property name="frameShadow">
    633        <enum>QFrame::Plain</enum>
    634       </property>
    635       <property name="widgetResizable">
    636        <bool>true</bool>
    637       </property>
    638       <widget class="QWidget" name="scrollAreaWidgetContents_3">
    639        <property name="geometry">
    640         <rect>
    641          <x>0</x>
    642          <y>0</y>
    643          <width>287</width>
    644          <height>320</height>
    645         </rect>
    646        </property>
    647        <layout class="QGridLayout" name="diveInfoScrollAreaLayout">
    648         <property name="leftMargin">
    649          <number>0</number>
    650         </property>
    651         <property name="topMargin">
    652          <number>0</number>
    653         </property>
    654         <property name="rightMargin">
    655          <number>0</number>
    656         </property>
    657         <property name="bottomMargin">
    658          <number>0</number>
    659         </property>
    660         <property name="spacing">
    661          <number>2</number>
    662         </property>
    663         <item row="0" column="0">
    664          <widget class="QGroupBox" name="groupBox_5">
    665           <property name="title">
    666            <string>Date</string>
    667           </property>
    668           <layout class="QHBoxLayout" name="diveInfoDateLayout">
    669            <item>
    670             <widget class="QLabel" name="dateText">
    671              <property name="text">
    672               <string/>
    673              </property>
    674              <property name="alignment">
    675               <set>Qt::AlignCenter</set>
    676              </property>
    677             </widget>
    678            </item>
    679           </layout>
    680          </widget>
    681         </item>
    682         <item row="0" column="2">
    683          <widget class="QGroupBox" name="groupBox_12">
    684           <property name="title">
    685            <string>Interval</string>
    686           </property>
    687           <layout class="QHBoxLayout" name="diveInfoSurfintervallLayout">
    688            <item>
    689             <widget class="QLabel" name="surfaceIntervalText">
    690              <property name="text">
    691               <string/>
    692              </property>
    693              <property name="alignment">
    694               <set>Qt::AlignCenter</set>
    695              </property>
    696             </widget>
    697            </item>
    698           </layout>
    699          </widget>
    700         </item>
    701         <item row="1" column="0">
    702          <widget class="QGroupBox" name="groupBox_3">
    703           <property name="title">
    704            <string>Gases used</string>
    705           </property>
    706           <layout class="QHBoxLayout" name="diveInfoGasesUsedLayout">
    707            <item>
    708             <widget class="QLabel" name="oxygenHeliumText">
    709              <property name="text">
    710               <string/>
    711              </property>
    712              <property name="alignment">
    713               <set>Qt::AlignCenter</set>
    714              </property>
    715             </widget>
    716            </item>
    717           </layout>
    718          </widget>
    719         </item>
    720         <item row="1" column="1">
    721          <widget class="QGroupBox" name="groupBox_4">
    722           <property name="title">
    723            <string>Gas consumed</string>
    724           </property>
    725           <layout class="QHBoxLayout" name="diveInfoGasConsumedLayout">
    726            <item>
    727             <widget class="QLabel" name="gasUsedText">
    728              <property name="text">
    729               <string/>
    730              </property>
    731              <property name="alignment">
    732               <set>Qt::AlignCenter</set>
    733              </property>
    734             </widget>
    735            </item>
    736           </layout>
    737          </widget>
    738         </item>
    739         <item row="1" column="2">
    740          <widget class="QGroupBox" name="groupBox">
    741           <property name="title">
    742            <string>SAC</string>
    743           </property>
    744           <layout class="QHBoxLayout" name="diveInfoSacLayout">
    745            <item>
    746             <widget class="QLabel" name="sacText">
    747              <property name="text">
    748               <string/>
    749              </property>
    750              <property name="alignment">
    751               <set>Qt::AlignCenter</set>
    752              </property>
    753             </widget>
    754            </item>
    755           </layout>
    756          </widget>
    757         </item>
    758         <item row="2" column="0">
    759          <widget class="QGroupBox" name="groupBox_15">
    760           <property name="title">
    761            <string>CNS</string>
    762           </property>
    763           <layout class="QHBoxLayout" name="diveInfoCnsLayout">
    764            <item>
    765             <widget class="QLabel" name="maxcnsText">
    766              <property name="text">
    767               <string/>
    768              </property>
    769              <property name="alignment">
    770               <set>Qt::AlignCenter</set>
    771              </property>
    772             </widget>
    773            </item>
    774           </layout>
    775          </widget>
    776         </item>
    777         <item row="2" column="1">
    778          <widget class="QGroupBox" name="groupBox_2">
    779           <property name="title">
    780            <string>OTU</string>
    781           </property>
    782           <layout class="QHBoxLayout" name="diveInfoOtuLayout">
    783            <item>
    784             <widget class="QLabel" name="otuText">
    785              <property name="text">
    786               <string/>
    787              </property>
    788              <property name="alignment">
    789               <set>Qt::AlignCenter</set>
    790              </property>
    791             </widget>
    792            </item>
    793           </layout>
    794          </widget>
    795         </item>
    796         <item row="3" column="1">
    797          <widget class="QGroupBox" name="groupBox_6">
    798           <property name="title">
    799            <string>Max. depth</string>
    800           </property>
    801           <layout class="QHBoxLayout" name="diveInfoMaxDepthLayout">
    802            <item>
    803             <widget class="QLabel" name="maximumDepthText">
    804              <property name="text">
    805               <string/>
    806              </property>
    807              <property name="alignment">
    808               <set>Qt::AlignCenter</set>
    809              </property>
    810             </widget>
    811            </item>
    812           </layout>
    813          </widget>
    814         </item>
    815         <item row="3" column="0">
    816          <widget class="QGroupBox" name="groupBox_7">
    817           <property name="title">
    818            <string>Avg. depth</string>
    819           </property>
    820           <layout class="QHBoxLayout" name="diveInfoAvgDepthLayout">
    821            <item>
    822             <widget class="QLabel" name="averageDepthText">
    823              <property name="text">
    824               <string/>
    825              </property>
    826              <property name="alignment">
    827               <set>Qt::AlignCenter</set>
    828              </property>
    829             </widget>
    830            </item>
    831           </layout>
    832          </widget>
    833         </item>
    834         <item row="2" column="2">
    835          <widget class="QGroupBox" name="groupBox_10">
    836           <property name="title">
    837            <string>Air pressure</string>
    838           </property>
    839           <layout class="QHBoxLayout" name="diveInfoAirPressureLayout">
    840            <item>
    841             <widget class="QLabel" name="airPressureText">
    842              <property name="text">
    843               <string/>
    844              </property>
    845              <property name="alignment">
    846               <set>Qt::AlignCenter</set>
    847              </property>
    848             </widget>
    849            </item>
    850           </layout>
    851          </widget>
    852         </item>
    853         <item row="3" column="2">
    854          <widget class="QGroupBox" name="groupBox_9">
    855           <property name="title">
    856            <string>Air temp.</string>
    857           </property>
    858           <layout class="QHBoxLayout" name="diveInfoAirTempLayout">
    859            <item>
    860             <widget class="QLabel" name="airTemperatureText">
    861              <property name="text">
    862               <string/>
    863              </property>
    864              <property name="alignment">
    865               <set>Qt::AlignCenter</set>
    866              </property>
    867             </widget>
    868            </item>
    869           </layout>
    870          </widget>
    871         </item>
    872         <item row="4" column="0">
    873          <widget class="QGroupBox" name="groupBox_8">
    874           <property name="title">
    875            <string>Water temp.</string>
    876           </property>
    877           <layout class="QHBoxLayout" name="diveInfoWaterTempLayout">
    878            <item>
    879             <widget class="QLabel" name="waterTemperatureText">
    880              <property name="text">
    881               <string/>
    882              </property>
    883              <property name="alignment">
    884               <set>Qt::AlignCenter</set>
    885              </property>
    886             </widget>
    887            </item>
    888           </layout>
    889          </widget>
    890         </item>
    891         <item row="0" column="1">
    892          <widget class="QGroupBox" name="groupBox_11">
    893           <property name="title">
    894            <string>Dive time</string>
    895           </property>
    896           <layout class="QHBoxLayout" name="diveInfoDiveTimeLayout">
    897            <item>
    898             <widget class="QLabel" name="diveTimeText">
    899              <property name="text">
    900               <string/>
    901              </property>
    902              <property name="alignment">
    903               <set>Qt::AlignCenter</set>
    904              </property>
    905             </widget>
    906            </item>
    907           </layout>
    908          </widget>
    909         </item>
    910         <item row="4" column="1">
    911          <widget class="QGroupBox" name="groupBox_1">
    912           <property name="title">
    913            <string>Salinity</string>
    914           </property>
    915           <layout class="QHBoxLayout" name="diveInfoSalinityLayout">
    916            <item>
    917             <widget class="QLabel" name="salinityText">
    918              <property name="alignment">
    919               <set>Qt::AlignCenter</set>
    920              </property>
    921             </widget>
    922            </item>
    923           </layout>
    924          </widget>
    925         </item>
    926         <item row="5" column="0">
    927          <spacer>
    928           <property name="orientation">
    929            <enum>Qt::Vertical</enum>
    930           </property>
    931           <property name="sizeType">
    932            <enum>QSizePolicy::Expanding</enum>
    933           </property>
    934           <property name="sizeHint" stdset="0">
    935            <size>
    936             <width>20</width>
    937             <height>20</height>
    938            </size>
    939           </property>
    940          </spacer>
    941         </item>
    942        </layout>
    943       </widget>
    944      </widget>
    945     </item>
    946    </layout>
    947   </widget>
    948   <widget class="QWidget" name="statisticsTab">
    949    <attribute name="title">
    950     <string>Stats</string>
    951    </attribute>
    952    <attribute name="toolTip">
    953     <string>Simple statistics about the selection</string>
    954    </attribute>
    955    <layout class="QGridLayout" name="statsLayout">
    956     <property name="leftMargin">
    957      <number>5</number>
    958     </property>
    959     <property name="topMargin">
    960      <number>5</number>
    961     </property>
    962     <property name="rightMargin">
    963      <number>5</number>
    964     </property>
    965     <property name="bottomMargin">
    966      <number>5</number>
    967     </property>
    968     <item row="1" column="1">
    969      <widget class="QScrollArea" name="scrollArea_4">
    970       <property name="frameShape">
    971        <enum>QFrame::NoFrame</enum>
    972       </property>
    973       <property name="frameShadow">
    974        <enum>QFrame::Plain</enum>
    975       </property>
    976       <property name="widgetResizable">
    977        <bool>true</bool>
    978       </property>
    979       <widget class="QWidget" name="scrollAreaWidgetContents_4">
    980        <property name="geometry">
    981         <rect>
    982          <x>0</x>
    983          <y>0</y>
    984          <width>297</width>
    985          <height>187</height>
    986         </rect>
    987        </property>
    988        <layout class="QHBoxLayout" name="horizontalLayout">
    989         <property name="leftMargin">
    990          <number>0</number>
    991         </property>
    992         <property name="topMargin">
    993          <number>0</number>
    994         </property>
    995         <property name="rightMargin">
    996          <number>0</number>
    997         </property>
    998         <property name="bottomMargin">
    999          <number>0</number>
    1000         </property>
    1001         <item>
    1002          <layout class="QVBoxLayout" name="verticalLayout_5">
    1003           <item>
    1004            <widget class="QGroupBox" name="groupBoxb">
    1005             <property name="title">
    1006              <string>Depth</string>
    1007             </property>
    1008             <layout class="QHBoxLayout" name="statsDepthLayout">
    1009              <item>
    1010               <widget class="MinMaxAvgWidget" name="depthLimits" native="true"/>
    1011              </item>
    1012             </layout>
    1013            </widget>
    1014           </item>
    1015           <item>
    1016            <widget class="QGroupBox" name="groupBox_14">
    1017             <property name="title">
    1018              <string>Duration</string>
    1019             </property>
    1020             <layout class="QHBoxLayout" name="statsDurationLayout">
    1021              <item>
    1022               <widget class="MinMaxAvgWidget" name="timeLimits" native="true"/>
    1023              </item>
    1024             </layout>
    1025            </widget>
    1026           </item>
    1027           <item>
    1028            <spacer name="verticalSpacer_2">
    1029             <property name="orientation">
    1030              <enum>Qt::Vertical</enum>
    1031             </property>
    1032             <property name="sizeHint" stdset="0">
    1033              <size>
    1034               <width>20</width>
    1035               <height>40</height>
    1036              </size>
    1037             </property>
    1038            </spacer>
    1039           </item>
    1040          </layout>
    1041         </item>
    1042         <item>
    1043          <layout class="QVBoxLayout" name="verticalLayout_6">
    1044           <item>
    1045            <widget class="QGroupBox" name="groupBox_8b">
    1046             <property name="title">
    1047              <string>Temperature</string>
    1048             </property>
    1049             <layout class="QHBoxLayout" name="statsTempLayout">
    1050              <item>
    1051               <widget class="MinMaxAvgWidget" name="tempLimits" native="true"/>
    1052              </item>
    1053             </layout>
    1054            </widget>
    1055           </item>
    1056           <item>
    1057            <widget class="QGroupBox" name="groupBox_11b">
    1058             <property name="title">
    1059              <string>Total time</string>
    1060             </property>
    1061             <layout class="QHBoxLayout" name="statsTotalTimeLayout">
    1062              <item>
    1063               <widget class="QLabel" name="totalTimeAllText">
    1064                <property name="text">
    1065                 <string/>
    1066                </property>
    1067                <property name="alignment">
    1068                 <set>Qt::AlignCenter</set>
    1069                </property>
    1070               </widget>
    1071              </item>
    1072             </layout>
    1073            </widget>
    1074           </item>
    1075           <item>
    1076            <widget class="QGroupBox" name="groupBox_7b">
    1077             <property name="title">
    1078              <string>Dives</string>
    1079             </property>
    1080             <layout class="QHBoxLayout" name="statsDivesLayout">
    1081              <item>
    1082               <widget class="QLabel" name="divesAllText">
    1083                <property name="text">
    1084                 <string/>
    1085                </property>
    1086                <property name="alignment">
    1087                 <set>Qt::AlignCenter</set>
    1088                </property>
    1089               </widget>
    1090              </item>
    1091             </layout>
    1092            </widget>
    1093           </item>
    1094           <item>
    1095            <spacer name="verticalSpacer_3">
    1096             <property name="orientation">
    1097              <enum>Qt::Vertical</enum>
    1098             </property>
    1099             <property name="sizeHint" stdset="0">
    1100              <size>
    1101               <width>20</width>
    1102               <height>40</height>
    1103              </size>
    1104             </property>
    1105            </spacer>
    1106           </item>
    1107          </layout>
    1108         </item>
    1109         <item>
    1110          <layout class="QVBoxLayout" name="verticalLayout_7">
    1111           <item>
    1112            <widget class="QGroupBox" name="groupBox_4b">
    1113             <property name="title">
    1114              <string>SAC</string>
    1115             </property>
    1116             <layout class="QHBoxLayout" name="statsSacLayout">
    1117              <item>
    1118               <widget class="MinMaxAvgWidget" name="sacLimits" native="true"/>
    1119              </item>
    1120             </layout>
    1121            </widget>
    1122           </item>
    1123           <item>
    1124            <widget class="QGroupBox" name="groupBox_13">
    1125             <property name="title">
    1126              <string>Gas consumption</string>
    1127             </property>
    1128             <layout class="QHBoxLayout" name="statsGasConsumptionLayout">
    1129              <item>
    1130               <widget class="QLabel" name="gasConsumption">
    1131                <property name="text">
    1132                 <string/>
    1133                </property>
    1134                <property name="alignment">
    1135                 <set>Qt::AlignCenter</set>
    1136                </property>
    1137               </widget>
    1138              </item>
    1139             </layout>
    1140            </widget>
    1141           </item>
    1142           <item>
    1143            <spacer name="verticalSpacer_4">
    1144             <property name="orientation">
    1145              <enum>Qt::Vertical</enum>
    1146             </property>
    1147             <property name="sizeHint" stdset="0">
    1148              <size>
    1149               <width>20</width>
    1150               <height>40</height>
    1151              </size>
    1152             </property>
    1153            </spacer>
    1154           </item>
    1155          </layout>
    1156         </item>
    1157        </layout>
    1158       </widget>
    1159      </widget>
    1160     </item>
    1161     <item row="0" column="1">
    1162      <widget class="KMessageWidget" name="diveStatisticsMessage"/>
    1163     </item>
    1164    </layout>
    1165   </widget>
    1166   <widget class="QWidget" name="tab">
    1167    <attribute name="title">
    1168     <string>Photos</string>
    1169    </attribute>
    1170    <attribute name="toolTip">
    1171     <string>All photos from the current selection</string>
    1172    </attribute>
    1173    <layout class="QVBoxLayout" name="photosLayout">
    1174     <property name="leftMargin">
    1175      <number>5</number>
    1176     </property>
    1177     <property name="topMargin">
    1178      <number>5</number>
    1179     </property>
    1180     <property name="rightMargin">
    1181      <number>5</number>
    1182     </property>
    1183     <property name="bottomMargin">
    1184      <number>5</number>
    1185     </property>
    1186     <item>
    1187      <widget class="DivePictureWidget" name="photosView">
    1188       <property name="viewMode">
    1189        <enum>QListView::IconMode</enum>
    1190       </property>
    1191      </widget>
    1192     </item>
    1193    </layout>
    1194   </widget>
    1195   <widget class="QWidget" name="tab_2">
    1196    <attribute name="title">
    1197     <string>Extra data</string>
    1198    </attribute>
    1199    <attribute name="toolTip">
    1200     <string>Adittional data from the dive computer</string>
    1201    </attribute>
    1202    <layout class="QVBoxLayout" name="verticalLayout_4">
    1203     <property name="spacing">
    1204      <number>0</number>
    1205     </property>
    1206     <property name="leftMargin">
    1207      <number>5</number>
    1208     </property>
    1209     <property name="topMargin">
    1210      <number>5</number>
    1211     </property>
    1212     <property name="rightMargin">
    1213      <number>5</number>
    1214     </property>
    1215     <property name="bottomMargin">
    1216      <number>5</number>
    1217     </property>
    1218     <item>
    1219      <widget class="QTableView" name="extraData"/>
    1220     </item>
    1221    </layout>
    1222   </widget>
    1223604 </widget>
    1224605 <customwidgets>
     
    1236617  </customwidget>
    1237618  <customwidget>
    1238    <class>MinMaxAvgWidget</class>
    1239    <extends>QWidget</extends>
    1240    <header>desktop-widgets/simplewidgets.h</header>
    1241    <container>1</container>
    1242   </customwidget>
    1243   <customwidget>
    1244619   <class>TableView</class>
    1245620   <extends>QWidget</extends>
     
    1251626   <extends>QPlainTextEdit</extends>
    1252627   <header>desktop-widgets/tagwidget.h</header>
    1253   </customwidget>
    1254   <customwidget>
    1255    <class>DivePictureWidget</class>
    1256    <extends>QListView</extends>
    1257    <header>desktop-widgets/divepicturewidget.h</header>
    1258628  </customwidget>
    1259629  <customwidget>
     
    1282652 </tabstops>
    1283653 <resources>
    1284   <include location="../subsurface.qrc"/>
     654  <include location="../../subsurface.qrc"/>
    1285655 </resources>
    1286656 <connections/>
  • desktop-widgets/tagwidget.cpp

    re49d621 r1fc4fba  
    11#include "tagwidget.h"
    22#include "mainwindow.h"
    3 #include "maintab.h"
     3#include "tab-widgets/maintab.h"
    44#include <QCompleter>
    55
  • subsurface-desktop-main.cpp

    r4a894e0 r1fc4fba  
    1010#include "core/subsurfacestartup.h"
    1111#include "desktop-widgets/mainwindow.h"
    12 #include "desktop-widgets/maintab.h"
     12#include "desktop-widgets/tab-widgets/maintab.h"
    1313#include "profile-widget/profilewidget2.h"
    1414#include "desktop-widgets/preferences/preferencesdialog.h"
Note: See TracChangeset for help on using the changeset viewer.