Qt Virtual Chart Table (QVCT)
CLandmarkOverlayActionsView.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"
27 
28 
29 //------------------------------------------------------------------------------
30 // CONSTRUCTORS / DESTRUCTOR
31 //------------------------------------------------------------------------------
32 
34 {
36 }
37 
39 {
40  // Create the buttons
41  // ... order invert
42  pqPushButtonOrderInvert = new QPushButton( QIcon( ":icons/32x32/order_invert.png" ), "" );
43  pqPushButtonOrderInvert->setToolTip( tr("[overlay/landmarks set] Invert order") );
44  pqPushButtonOrderInvert->setMaximumSize( 36, 34 );
45  QWidget::connect( pqPushButtonOrderInvert, SIGNAL( clicked() ), this, SLOT( slotOrderInvert() ) );
46  // ... order ascending
47  pqPushButtonOrderAscending = new QPushButton( QIcon( ":icons/32x32/order_ascending.png" ), "" );
48  pqPushButtonOrderAscending->setToolTip( tr("[overlay/landmarks set] Sort in ascending order") );
49  pqPushButtonOrderAscending->setMaximumSize( 36, 34 );
50  QWidget::connect( pqPushButtonOrderAscending, SIGNAL( clicked() ), this, SLOT( slotOrderAscending() ) );
51  // ... order descending
52  pqPushButtonOrderDescending = new QPushButton( QIcon( ":icons/32x32/order_descending.png" ), "" );
53  pqPushButtonOrderDescending->setToolTip( tr("[overlay/landmarks set] Sort in descending order") );
54  pqPushButtonOrderDescending->setMaximumSize( 36, 34 );
55  QWidget::connect( pqPushButtonOrderDescending, SIGNAL( clicked() ), this, SLOT( slotOrderDescending() ) );
56  // ... save
57  pqPushButtonSave = new QPushButton( QIcon( ":icons/32x32/save_select.png" ), "" );
58  pqPushButtonSave->setToolTip( tr("Save selected landmarks to disk") );
59  pqPushButtonSave->setMaximumSize( 36, 34 );
60  QWidget::connect( pqPushButtonSave, SIGNAL( clicked() ), this, SLOT( slotSave() ) );
61  // ... delete
62  pqPushButtonDelete = new QPushButton( QIcon( ":icons/32x32/delete_select.png" ), "" );
63  pqPushButtonDelete->setToolTip( tr("Delete selected landmarks") );
64  pqPushButtonDelete->setMaximumSize( 36, 34 );
65  QWidget::connect( pqPushButtonDelete, SIGNAL( clicked() ), this, SLOT( slotDelete() ) );
66 
67  // Add buttons
68  QHBoxLayout* __pqHBoxLayoutButtons = new QHBoxLayout();
69  __pqHBoxLayoutButtons->addWidget( pqPushButtonOrderInvert, 0, Qt::AlignLeft );
70  __pqHBoxLayoutButtons->addWidget( pqPushButtonOrderAscending, 0, Qt::AlignLeft );
71  __pqHBoxLayoutButtons->addWidget( pqPushButtonOrderDescending, 0, Qt::AlignLeft );
72  __pqHBoxLayoutButtons->addWidget( pqPushButtonSave, 0, Qt::AlignLeft );
73  __pqHBoxLayoutButtons->addWidget( pqPushButtonDelete, 0, Qt::AlignLeft );
74 
75  // Set the layout
76  QDialog::setLayout( __pqHBoxLayoutButtons );
77 
78 }
79 
80 
81 //------------------------------------------------------------------------------
82 // METHODS
83 //------------------------------------------------------------------------------
84 
85 //
86 // SLOTS
87 //
88 
90 {
91  do // error-catching block
92  {
93  CLandmarkOverlay* __poLandmarkOverlay = QVCTRuntime::useLandmarkOverlay();
94  QTreeWidgetItem* __pqTreeWidgetItem_current = __poLandmarkOverlay->currentItem();
95  if( !__pqTreeWidgetItem_current ) break;
96  switch( __pqTreeWidgetItem_current->type() )
97  {
98 
101  {
102  int __iHead = 0, __iTail = __pqTreeWidgetItem_current->childCount()-1;
103  while( __iTail > __iHead )
104  {
105  QTreeWidgetItem* __pqTreeWidgetItem_head = __pqTreeWidgetItem_current->child( __iHead );
106  QTreeWidgetItem* __pqTreeWidgetItem_tail = __pqTreeWidgetItem_current->child( __iTail );
107  __pqTreeWidgetItem_current->removeChild( __pqTreeWidgetItem_head );
108  __pqTreeWidgetItem_current->removeChild( __pqTreeWidgetItem_tail );
109  __pqTreeWidgetItem_current->insertChild( __iHead++, __pqTreeWidgetItem_tail );
110  __pqTreeWidgetItem_current->insertChild( __iTail--, __pqTreeWidgetItem_head );
111  }
113  }
114  break;
115 
116  default:;
117 
118  }
119  }
120  while( false ); // error-catching block
121  QDialog::accept();
122 }
123 
125 {
126  do // error-catching block
127  {
128  CLandmarkOverlay* __poLandmarkOverlay = QVCTRuntime::useLandmarkOverlay();
129  QTreeWidgetItem* __pqTreeWidgetItem_current = __poLandmarkOverlay->currentItem();
130  if( !__pqTreeWidgetItem_current ) break;
131  switch( __pqTreeWidgetItem_current->type() )
132  {
133 
136  __pqTreeWidgetItem_current->sortChildren( CLandmarkOverlay::NAME, Qt::AscendingOrder );
138  break;
139 
140  default:;
141 
142  }
143  }
144  while( false ); // error-catching block
145  QDialog::accept();
146 }
147 
149 {
150  do // error-catching block
151  {
152  CLandmarkOverlay* __poLandmarkOverlay = QVCTRuntime::useLandmarkOverlay();
153  QTreeWidgetItem* __pqTreeWidgetItem_current = __poLandmarkOverlay->currentItem();
154  if( !__pqTreeWidgetItem_current ) break;
155  switch( __pqTreeWidgetItem_current->type() )
156  {
157 
160  __pqTreeWidgetItem_current->sortChildren( CLandmarkOverlay::NAME, Qt::DescendingOrder );
162  break;
163 
164  default:;
165 
166  }
167  }
168  while( false ); // error-catching block
169  QDialog::accept();
170 }
171 
173 {
174  do // error-catching block
175  {
176  QString __qsFilename = QVCTRuntime::useMainWindow()->fileDialog( QVCT::SAVE, tr("Save Landmarks"), tr("GPX Files")+" (*.gpx);;"+tr("QVCT Files")+" (*.qvct)" );
177  if( __qsFilename.isEmpty() ) break;
178  QFileInfo __qFileInfo( __qsFilename );
179  if( __qFileInfo.suffix().isEmpty() ) __qsFilename += ".qvct";
180  QStringList __qsListExtensions; __qsListExtensions << "qvct" << "gpx";
181  if( !QVCTRuntime::useMainWindow()->fileCheck( QVCT::SAVE, __qsFilename, &__qsListExtensions ) ) break;
182  QVCTRuntime::useLandmarkOverlay()->save( __qsFilename, 0 ); // no container = save selection
183  }
184  while( false ); // error-catching block
185  QDialog::accept();
186 }
187 
189 {
190  do // error-catching block
191  {
192  if( !QVCTRuntime::useMainWindow()->deleteConfirm( tr("Selected landmark(s)") ) ) break;
193  QMutex* __pqMutexDataChange = QVCTRuntime::useMutexDataChange();
194  CLandmarkOverlay* __poLandmarkOverlay = QVCTRuntime::useLandmarkOverlay();
195  __pqMutexDataChange->lock();
196  bool __bModified = __poLandmarkOverlay->deleteSelection();
197  __pqMutexDataChange->unlock();
198  if( __bModified )
199  {
200  __poLandmarkOverlay->forceRedraw();
203  };
204  }
205  while( false ); // error-catching block
206  QDialog::accept();
207 }
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)
QPushButton * pqPushButtonDelete
[UI:Button] Delete
QPushButton * pqPushButtonSave
[UI:Button] Load
void constructLayout()
Constructs the layout of the user-interface.
void slotDelete()
[UI:Slot] Slot to delete overlay's selected content
void slotOrderInvert()
[UI:Slot] Slot to invert overlay's content order
void slotOrderDescending()
[UI:Slot] Slot to order overlay's content in descending direction
QPushButton * pqPushButtonOrderAscending
[UI:Button] Order ascending
QPushButton * pqPushButtonOrderDescending
[UI:Button] Order descending
void slotOrderAscending()
[UI:Slot] Slot to order overlay's content in ascending direction
QPushButton * pqPushButtonOrderInvert
[UI:Button] Order invert
void slotSave()
[UI:Slot] Slot to save overlay's selected content to file
[UI] Landmark overlay container
void save(const QString &_rqsFilename, CLandmarkContainer *_poLandmarkContainer=0) const
Save this object's content (container) to the given file (all selected items if no container is given...
@ NAME
Landmark name.
int deleteSelection()
Deletes selected items within this overlay's containers.
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
static QMutex * useMutexDataChange()
static CMainWindow * useMainWindow()
static CChartTable * useChartTable()
static CLandmarkOverlay * useLandmarkOverlay()
@ SAVE
Definition: QVCT.hpp:42