Qt Virtual Chart Table (QVCT)
COverlayListView.cpp
Go to the documentation of this file.
1 // INDENTING (emacs/vi): -*- mode:c++; tab-width:2; c-basic-offset:2; intent-tabs-mode:nil; -*- ex: set tabstop=2 expandtab:
2 
3 /*
4  * Qt Virtual Chart Table (QVCT)
5  * Copyright (C) 2012 Cedric Dufour <http://cedric.dufour.name>
6  * Author: Cedric Dufour <http://cedric.dufour.name>
7  *
8  * The Qt Virtual Chart Table (QVCT) is free software:
9  * you can redistribute it and/or modify it under the terms of the GNU General
10  * Public License as published by the Free Software Foundation, Version 3.
11  *
12  * The Qt Virtual Chart Table (QVCT) is distributed in the hope
13  * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
14  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15  *
16  * See the GNU General Public License for more details.
17  */
18 
19 // QT
20 #include <QDockWidget>
21 #include <QVBoxLayout>
22 #include <QWidget>
23 
24 // QVCT
25 #include "QVCTRuntime.hpp"
27 
28 
29 //------------------------------------------------------------------------------
30 // CONSTRUCTORS / DESTRUCTOR
31 //------------------------------------------------------------------------------
32 
34  : QDockWidget( tr("Overlay List"), _pqParent )
35  , poPointerOverlay( 0 )
36  , pqTabWidget( 0 )
37 {
38  QDockWidget::setObjectName( "OverlayList" ); // required to save main window's state
39  QDockWidget::setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
41 
42  // Additional overlay (not visible as list)
43  // ... pointer
46 }
47 
49 {
51 }
52 
54 {
55  // Create layout
56  // NOTE: Merely a place-holder to insure the same margin appearance as the COverlayDetailView
57  QWidget* __pqWidget = new QWidget();
58  QVBoxLayout* __pqVBoxLayout = new QVBoxLayout();
59 
60  // Create tab widget
61  pqTabWidget = new QTabWidget();
62  __pqVBoxLayout->addWidget( pqTabWidget );
63  // ... style
64  pqTabWidget->setStyleSheet( ".QTabBar::tab { PADDING:4px 0px 0px 14px; HEIGHT:28px; }" );
65 
66  // Add overlay
67  int __iIndex = -1;
68 
69  // ... landmark (COverlayListView::LANDMARK)
70  __iIndex++;
71  CLandmarkOverlayListView* __poLandmarkOverlayListView = new CLandmarkOverlayListView();
72  QVCTRuntime::registerLandmarkOverlayListView( __poLandmarkOverlayListView );
73  pqTabWidget->addTab( __poLandmarkOverlayListView, QIcon( ":icons/16x16/landmark.png" ), "" );
74  pqTabWidget->setTabToolTip( __iIndex, tr("Landmarks") );
75 
76  // ... route (COverlayListView::ROUTE)
77  __iIndex++;
78  CRouteOverlayListView* __poRouteOverlayListView = new CRouteOverlayListView();
79  QVCTRuntime::registerRouteOverlayListView( __poRouteOverlayListView );
80  pqTabWidget->addTab( __poRouteOverlayListView, QIcon( ":icons/16x16/route.png" ), "" );
81  pqTabWidget->setTabToolTip( __iIndex, tr("Routes") );
82 
83  // ... track (COverlayListView::TRACK)
84  __iIndex++;
85  CTrackOverlayListView* __poTrackOverlayListView = new CTrackOverlayListView();
86  QVCTRuntime::registerTrackOverlayListView( __poTrackOverlayListView );
87  pqTabWidget->addTab( __poTrackOverlayListView, QIcon( ":icons/16x16/track.png" ), "" );
88  pqTabWidget->setTabToolTip( __iIndex, tr("Tracks") );
89 
90  // ... vessel (COverlayListView::VESSEL)
91  __iIndex++;
92  CVesselOverlayListView* __poVesselOverlayListView = new CVesselOverlayListView();
93  QVCTRuntime::registerVesselOverlayListView( __poVesselOverlayListView );
94  pqTabWidget->addTab( __poVesselOverlayListView, QIcon( ":icons/16x16/vessel.png" ), "" );
95  pqTabWidget->setTabToolTip( __iIndex, tr("Vessels") );
96 
97  // ... device (COverlayListView::DEVICE)
98  __iIndex++;
99  CDeviceOverlayListView* __poDeviceOverlayListView = new CDeviceOverlayListView();
100  QVCTRuntime::registerDeviceOverlayListView( __poDeviceOverlayListView );
101  pqTabWidget->addTab( __poDeviceOverlayListView, QIcon( ":icons/16x16/device.png" ), "" );
102  pqTabWidget->setTabToolTip( __iIndex, tr("Devices") );
103 
104  // ... [end]
105  connect( pqTabWidget, SIGNAL( currentChanged(int) ), this, SLOT( slotChangeTab(int) ) );
106 
107  // Finalize
108  __pqWidget->setLayout( __pqVBoxLayout );
109  QDockWidget::setWidget( __pqWidget );
110 }
111 
112 
113 //------------------------------------------------------------------------------
114 // METHODS
115 //------------------------------------------------------------------------------
116 
117 //
118 // SLOTS
119 //
120 
121 void COverlayListView::slotChangeTab( int _iTabIndex )
122 {
123  COverlayBaseTree* __poOverlayBaseTree;
124  switch( _iTabIndex )
125  {
126  case LANDMARK: __poOverlayBaseTree = QVCTRuntime::useLandmarkOverlay(); break;
127  case ROUTE: __poOverlayBaseTree = QVCTRuntime::useRouteOverlay(); break;
128  case TRACK: __poOverlayBaseTree = QVCTRuntime::useTrackOverlay(); break;
129  case VESSEL: __poOverlayBaseTree = QVCTRuntime::useVesselOverlay(); break;
130  case DEVICE: __poOverlayBaseTree = QVCTRuntime::useDeviceOverlay(); break;
131  default: return; // WHAT THE F*** !?!
132  }
133  __poOverlayBaseTree->showDetail( __poOverlayBaseTree->currentItem() );
134 }
135 
136 //
137 // OTHER
138 //
139 
141 {
142  pqTabWidget->setCurrentIndex( eView );
143 }
[UI] Device overlay's list view
[UI] Landmark overlay's list view
Generic overlay base (tree widget)
QTabWidget * pqTabWidget
Tab widget to present all viewable overlays.
virtual ~COverlayListView()
void slotChangeTab(int _iTabIndex)
Slot to handle tab change.
void constructLayout()
Constructs the layout of the user-interface.
CPointerOverlay * poPointerOverlay
Pointer overlay (which must not be viewed)
@ ROUTE
Route overlay.
@ LANDMARK
Landmark overlay.
@ DEVICE
Device overlay.
@ TRACK
Track overlay.
@ VESSEL
Vessel overlay.
void switchView(EView eView)
Displays the requested overlay (switching to the appropriate tab)
COverlayListView(QWidget *_pqParent=0)
virtual void showDetail(const QTreeWidgetItem *_pqTreeWidgetItem) const =0
Displays the given overlay object's details (in the appropriate widget/view)
[UI] Pointer overlay
[UI] Route overlay's list view
[UI] Track overlay's list view
[UI] Vessel overlay's list view
static void registerDeviceOverlayListView(CDeviceOverlayListView *_poDeviceOverlayListView)
static void registerTrackOverlayListView(CTrackOverlayListView *_poTrackOverlayListView)
static void registerVesselOverlayListView(CVesselOverlayListView *_poVesselOverlayListView)
static void registerLandmarkOverlayListView(CLandmarkOverlayListView *_poLandmarkOverlayListView)
static CVesselOverlay * useVesselOverlay()
static CDeviceOverlay * useDeviceOverlay()
static void registerPointerOverlay(CPointerOverlay *_poPointerOverlay)
static CRouteOverlay * useRouteOverlay()
static void registerRouteOverlayListView(CRouteOverlayListView *_poRouteOverlayListView)
static CLandmarkOverlay * useLandmarkOverlay()
static CTrackOverlay * useTrackOverlay()