Qt Virtual Chart Table (QVCT)
CVesselOverlayActionsView.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 <QFileInfo>
21 #include <QHBoxLayout>
22 #include <QPushButton>
23 
24 // QVCT
25 #include "QVCTRuntime.hpp"
28 
29 
30 //------------------------------------------------------------------------------
31 // CONSTRUCTORS / DESTRUCTOR
32 //------------------------------------------------------------------------------
33 
35 {
37 }
38 
40 {
41  // Create the buttons
42  // ... order invert
43  pqPushButtonOrderInvert = new QPushButton( QIcon( ":icons/32x32/order_invert.png" ), "" );
44  pqPushButtonOrderInvert->setToolTip( tr("[overlay/flotilla] Invert order") );
45  pqPushButtonOrderInvert->setMaximumSize( 36, 34 );
46  QWidget::connect( pqPushButtonOrderInvert, SIGNAL( clicked() ), this, SLOT( slotOrderInvert() ) );
47  // ... order ascending
48  pqPushButtonOrderAscending = new QPushButton( QIcon( ":icons/32x32/order_ascending.png" ), "" );
49  pqPushButtonOrderAscending->setToolTip( tr("[overlay/flotilla] Sort in ascending order") );
50  pqPushButtonOrderAscending->setMaximumSize( 36, 34 );
51  QWidget::connect( pqPushButtonOrderAscending, SIGNAL( clicked() ), this, SLOT( slotOrderAscending() ) );
52  // ... order descending
53  pqPushButtonOrderDescending = new QPushButton( QIcon( ":icons/32x32/order_descending.png" ), "" );
54  pqPushButtonOrderDescending->setToolTip( tr("[overlay/flotilla] Sort in descending order") );
55  pqPushButtonOrderDescending->setMaximumSize( 36, 34 );
56  QWidget::connect( pqPushButtonOrderDescending, SIGNAL( clicked() ), this, SLOT( slotOrderDescending() ) );
57  // ... save
58  pqPushButtonSave = new QPushButton( QIcon( ":icons/32x32/save_select.png" ), "" );
59  pqPushButtonSave->setToolTip( tr("Save selected vessels to disk") );
60  pqPushButtonSave->setMaximumSize( 36, 34 );
61  QWidget::connect( pqPushButtonSave, SIGNAL( clicked() ), this, SLOT( slotSave() ) );
62  // ... delete
63  pqPushButtonDelete = new QPushButton( QIcon( ":icons/32x32/delete_select.png" ), "" );
64  pqPushButtonDelete->setToolTip( tr("Delete selected vessels") );
65  pqPushButtonDelete->setMaximumSize( 36, 34 );
66  QWidget::connect( pqPushButtonDelete, SIGNAL( clicked() ), this, SLOT( slotDelete() ) );
67 
68  // Add buttons
69  QHBoxLayout* __pqHBoxLayoutButtons = new QHBoxLayout();
70  __pqHBoxLayoutButtons->addWidget( pqPushButtonOrderInvert, 0, Qt::AlignLeft );
71  __pqHBoxLayoutButtons->addWidget( pqPushButtonOrderAscending, 0, Qt::AlignLeft );
72  __pqHBoxLayoutButtons->addWidget( pqPushButtonOrderDescending, 0, Qt::AlignLeft );
73  __pqHBoxLayoutButtons->addWidget( pqPushButtonSave, 0, Qt::AlignLeft );
74  __pqHBoxLayoutButtons->addWidget( pqPushButtonDelete, 0, Qt::AlignLeft );
75 
76  // Set the layout
77  QDialog::setLayout( __pqHBoxLayoutButtons );
78 
79 }
80 
81 
82 //------------------------------------------------------------------------------
83 // METHODS
84 //------------------------------------------------------------------------------
85 
86 //
87 // SLOTS
88 //
89 
91 {
92  do // error-catching block
93  {
94  CVesselOverlay* __poVesselOverlay = QVCTRuntime::useVesselOverlay();
95  QTreeWidgetItem* __pqTreeWidgetItem_current = __poVesselOverlay->currentItem();
96  if( !__pqTreeWidgetItem_current ) break;
97  bool __bDynamic = false;
98  switch( __pqTreeWidgetItem_current->type() )
99  {
100 
102  __bDynamic = ((CVesselContainer*)__pqTreeWidgetItem_current)->isDynamic();
104  {
105  int __iHead = __bDynamic ? 1 : 0, __iTail = __pqTreeWidgetItem_current->childCount()-1;
106  while( __iTail > __iHead )
107  {
108  QTreeWidgetItem* __pqTreeWidgetItem_head = __pqTreeWidgetItem_current->child( __iHead );
109  QTreeWidgetItem* __pqTreeWidgetItem_tail = __pqTreeWidgetItem_current->child( __iTail );
110  __pqTreeWidgetItem_current->removeChild( __pqTreeWidgetItem_head );
111  __pqTreeWidgetItem_current->removeChild( __pqTreeWidgetItem_tail );
112  __pqTreeWidgetItem_current->insertChild( __iHead++, __pqTreeWidgetItem_tail );
113  __pqTreeWidgetItem_current->insertChild( __iTail--, __pqTreeWidgetItem_head );
114  }
116  }
117  break;
118 
119  default:;
120 
121  }
122  }
123  while( false ); // error-catching block
124  QDialog::accept();
125 }
126 
128 {
129  do // error-catching block
130  {
131  CVesselOverlay* __poVesselOverlay = QVCTRuntime::useVesselOverlay();
132  QTreeWidgetItem* __pqTreeWidgetItem_current = __poVesselOverlay->currentItem();
133  if( !__pqTreeWidgetItem_current ) break;
134  bool __bDynamic = false;
135  switch( __pqTreeWidgetItem_current->type() )
136  {
137 
139  __bDynamic = ((CVesselContainer*)__pqTreeWidgetItem_current)->isDynamic();
141  {
142  QTreeWidgetItem* __pqTreeWidgetItem_device = 0;
143  if( __bDynamic )
144  {
145  __pqTreeWidgetItem_device = __pqTreeWidgetItem_current->child( 0 );
146  __pqTreeWidgetItem_current->removeChild( __pqTreeWidgetItem_device );
147  }
148  __pqTreeWidgetItem_current->sortChildren( CVesselOverlay::NAME, Qt::AscendingOrder );
149  if( __bDynamic )
150  {
151  __pqTreeWidgetItem_current->insertChild( 0, __pqTreeWidgetItem_device );
152  }
154  }
155  break;
156 
157  default:;
158 
159  }
160  }
161  while( false ); // error-catching block
162  QDialog::accept();
163 }
164 
166 {
167  do // error-catching block
168  {
169  CVesselOverlay* __poVesselOverlay = QVCTRuntime::useVesselOverlay();
170  QTreeWidgetItem* __pqTreeWidgetItem_current = __poVesselOverlay->currentItem();
171  if( !__pqTreeWidgetItem_current ) break;
172  bool __bDynamic = false;
173  switch( __pqTreeWidgetItem_current->type() )
174  {
175 
177  __bDynamic = ((CVesselContainer*)__pqTreeWidgetItem_current)->isDynamic();
179  {
180  QTreeWidgetItem* __pqTreeWidgetItem_device = 0;
181  if( __bDynamic )
182  {
183  __pqTreeWidgetItem_device = __pqTreeWidgetItem_current->child( 0 );
184  __pqTreeWidgetItem_current->removeChild( __pqTreeWidgetItem_device );
185  }
186  __pqTreeWidgetItem_current->sortChildren( CVesselOverlay::NAME, Qt::DescendingOrder );
187  if( __bDynamic )
188  {
189  __pqTreeWidgetItem_current->insertChild( 0, __pqTreeWidgetItem_device );
190  }
192  }
193  break;
194 
195  default:;
196 
197  }
198  }
199  while( false ); // error-catching block
200  QDialog::accept();
201 }
202 
204 {
205  do // error-catching block
206  {
207  QString __qsFilename = QVCTRuntime::useMainWindow()->fileDialog( QVCT::SAVE, tr("Save Vessel"), tr("QVCT Files")+" (*.qvct)" );
208  if( __qsFilename.isEmpty() ) break;
209  QFileInfo __qFileInfo( __qsFilename );
210  if( __qFileInfo.suffix().isEmpty() ) __qsFilename += ".qvct";
211  QStringList __qsListExtensions; __qsListExtensions << "qvct";
212  if( !QVCTRuntime::useMainWindow()->fileCheck( QVCT::SAVE, __qsFilename, &__qsListExtensions ) ) break;
213  QVCTRuntime::useVesselOverlay()->save( __qsFilename, 0 ); // no container = save selection
214  }
215  while( false ); // error-catching block
216  QDialog::accept();
217 }
218 
220 {
221  do // error-catching block
222  {
223  if( !QVCTRuntime::useMainWindow()->deleteConfirm( tr("Selected vessel(s)") ) ) break;
224  QMutex* __pqMutexDataChange = QVCTRuntime::useMutexDataChange();
225  CVesselOverlay* __poVesselOverlay = QVCTRuntime::useVesselOverlay();
226  __pqMutexDataChange->lock();
227  bool __bModified = __poVesselOverlay->deleteSelection();
228  __pqMutexDataChange->unlock();
229  if( __bModified )
230  {
231  __poVesselOverlay->forceRedraw();
234  }
235  }
236  while( false ); // error-catching block
237  QDialog::accept();
238 }
void setProjectModified()
Sets the status of the project to modified (data have changed and need saving)
void updateChart()
Update the (current) chart content (on screen)
QString fileDialog(QVCT::EFileOperation _eFileOperation, const QString &_rqsTitle, const QString &_rqsFilter)
Displays a generic dialog to pick a file for the given operation (open/save)
@ CONTAINER
Container.
@ OVERLAY
(Base) overlay
void forceRedraw()
Forces this overlay's rendering (not matter its cache content)
Definition: COverlay.hpp:115
[UI] Vessel overlay container / flotilla
QPushButton * pqPushButtonOrderDescending
[UI:Button] Order descending
void slotSave()
[UI:Slot] Slot to save overlay's selected content to file
QPushButton * pqPushButtonDelete
[UI:Button] Delete
void slotOrderDescending()
[UI:Slot] Slot to order overlay's content in descending direction
void constructLayout()
Constructs the layout of the user-interface.
void slotOrderAscending()
[UI:Slot] Slot to order overlay's content in ascending direction
QPushButton * pqPushButtonOrderInvert
[UI:Button] Order invert
QPushButton * pqPushButtonSave
[UI:Button] Load
void slotOrderInvert()
[UI:Slot] Slot to invert overlay's content order
void slotDelete()
[UI:Slot] Slot to delete overlay's selected content
QPushButton * pqPushButtonOrderAscending
[UI:Button] Order ascending
[UI] Vessel overlay container
void save(const QString &_rqsFilename, CVesselContainer *_poVesselContainer=0) const
Save this object's content (container) to the given file (all selected items if no container is given...
int deleteSelection()
Deletes selected items within this overlay's containers.
@ NAME
Vessel name.
static CVesselOverlay * useVesselOverlay()
static QMutex * useMutexDataChange()
static CMainWindow * useMainWindow()
static CChartTable * useChartTable()
@ SAVE
Definition: QVCT.hpp:42