mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	desktop: add trip selection dialog
A simple dialog to select a trip. Simply fill a QListWidget without the model/view rigmarole. So much less painful! Of course that means that the dialog has to be regenerated everytime it is used. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
		
							parent
							
								
									f4ee893424
								
							
						
					
					
						commit
						f5fe6839c7
					
				
					 4 changed files with 151 additions and 0 deletions
				
			
		|  | @ -43,6 +43,7 @@ set (SUBSURFACE_UI | |||
| 	shifttimes.ui | ||||
| 	tableview.ui | ||||
| 	templateedit.ui | ||||
| 	tripselectiodialog.ui | ||||
| 	urldialog.ui | ||||
| 	webservices.ui | ||||
| 	tab-widgets/maintab.ui | ||||
|  | @ -130,6 +131,8 @@ set(SUBSURFACE_INTERFACE | |||
| 	tagwidget.h | ||||
| 	textedit.cpp | ||||
| 	textedit.h | ||||
| 	tripselectiondialog.cpp | ||||
| 	tripselectiondialog.h | ||||
| 	updatemanager.cpp | ||||
| 	updatemanager.h | ||||
| ) | ||||
|  |  | |||
							
								
								
									
										47
									
								
								desktop-widgets/tripselectiondialog.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								desktop-widgets/tripselectiondialog.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | |||
| // SPDX-License-Identifier: GPL-2.0
 | ||||
| #include "tripselectiondialog.h" | ||||
| #include "core/trip.h" | ||||
| #include "core/qthelper.h" | ||||
| #include <QShortcut> | ||||
| #include <QPushButton> | ||||
| 
 | ||||
| TripSelectionDialog::TripSelectionDialog(QWidget *parent) : QDialog(parent) | ||||
| { | ||||
| 	ui.setupUi(this); | ||||
| 	connect(ui.trips, &QListWidget::itemSelectionChanged, this, &TripSelectionDialog::selectionChanged); | ||||
| 
 | ||||
| 	QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this); | ||||
| 	connect(close, &QShortcut::activated, this, &QDialog::close); | ||||
| 	QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this); | ||||
| 	connect(quit, &QShortcut::activated, parent, &QWidget::close); | ||||
| 
 | ||||
| 	// We could use a model, but it seems barely worth the hassle.
 | ||||
| 	QStringList list; | ||||
| 	list.reserve(trip_table.nr); | ||||
| 	for (int i = 0; i < trip_table.nr; ++i) | ||||
| 		list.push_back(get_trip_string(trip_table.trips[i])); | ||||
| 	ui.trips->addItems(list); | ||||
| } | ||||
| 
 | ||||
| void TripSelectionDialog::selectionChanged() | ||||
| { | ||||
| 	ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(selectedTrip() != nullptr); | ||||
| } | ||||
| 
 | ||||
| dive_trip *TripSelectionDialog::selectedTrip() const | ||||
| { | ||||
| 	// Accessing the selected index of a QListWidget is ridiculously cumbersome.
 | ||||
| 	// Note that "currentItem" is a different beast.
 | ||||
| 	QModelIndexList rows = ui.trips->selectionModel()->selectedRows(); | ||||
| 	if (rows.size() != 1) | ||||
| 		return nullptr; | ||||
| 	int idx = rows[0].row(); | ||||
| 	if (idx < 0 || idx >= trip_table.nr) | ||||
| 		return nullptr; | ||||
| 	return trip_table.trips[idx]; | ||||
| } | ||||
| 
 | ||||
| dive_trip *TripSelectionDialog::getTrip() | ||||
| { | ||||
| 	return exec() ? selectedTrip() : nullptr; | ||||
| } | ||||
							
								
								
									
										23
									
								
								desktop-widgets/tripselectiondialog.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								desktop-widgets/tripselectiondialog.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | |||
| // SPDX-License-Identifier: GPL-2.0
 | ||||
| #ifndef TRIPSELECTIONDIALOG_H | ||||
| #define TRIPSELECTIONDIALOG_H | ||||
| 
 | ||||
| #include <QDialog> | ||||
| #include "ui_tripselectiondialog.h" | ||||
| 
 | ||||
| struct dive_trip; | ||||
| 
 | ||||
| class TripSelectionDialog : public QDialog { | ||||
| 	Q_OBJECT | ||||
| private | ||||
| slots: | ||||
| 	void selectionChanged(); | ||||
| public: | ||||
| 	TripSelectionDialog(QWidget *parent); // Must pass in MainWindow for QShortcut hackery.
 | ||||
| 	dive_trip *getTrip(); // NULL if user canceled.
 | ||||
| private: | ||||
| 	dive_trip *selectedTrip() const; | ||||
| 	Ui::TripSelectionDialog ui; | ||||
| }; | ||||
| 
 | ||||
| #endif // TRIPSELECTIONDIALOG_H
 | ||||
							
								
								
									
										78
									
								
								desktop-widgets/tripselectiondialog.ui
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								desktop-widgets/tripselectiondialog.ui
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,78 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ui version="4.0"> | ||||
|  <class>TripSelectionDialog</class> | ||||
|  <widget class="QDialog" name="TripSelectionDialog"> | ||||
|   <property name="windowModality"> | ||||
|    <enum>Qt::WindowModal</enum> | ||||
|   </property> | ||||
|   <property name="geometry"> | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>560</width> | ||||
|     <height>300</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="windowTitle"> | ||||
|    <string>Select trip</string> | ||||
|   </property> | ||||
|   <property name="windowIcon"> | ||||
|    <iconset> | ||||
|     <normalon>:subsurface-icon</normalon> | ||||
|    </iconset> | ||||
|   </property> | ||||
|   <layout class="QVBoxLayout" name="verticalLayout"> | ||||
|    <item> | ||||
|     <widget class="QListWidget" name="trips"> | ||||
|     </widget> | ||||
|    </item> | ||||
|    <item> | ||||
|     <widget class="QDialogButtonBox" name="buttonBox"> | ||||
|      <property name="orientation"> | ||||
|       <enum>Qt::Horizontal</enum> | ||||
|      </property> | ||||
|      <property name="standardButtons"> | ||||
|       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> | ||||
|      </property> | ||||
|     </widget> | ||||
|    </item> | ||||
|   </layout> | ||||
|  </widget> | ||||
|  <resources> | ||||
|   <include location="../subsurface.qrc"/> | ||||
|  </resources> | ||||
|  <connections> | ||||
|   <connection> | ||||
|    <sender>buttonBox</sender> | ||||
|    <signal>accepted()</signal> | ||||
|    <receiver>TripSelectionDialog</receiver> | ||||
|    <slot>accept()</slot> | ||||
|    <hints> | ||||
|     <hint type="sourcelabel"> | ||||
|      <x>248</x> | ||||
|      <y>254</y> | ||||
|     </hint> | ||||
|     <hint type="destinationlabel"> | ||||
|      <x>157</x> | ||||
|      <y>274</y> | ||||
|     </hint> | ||||
|    </hints> | ||||
|   </connection> | ||||
|   <connection> | ||||
|    <sender>buttonBox</sender> | ||||
|    <signal>rejected()</signal> | ||||
|    <receiver>TripSelectionDialog</receiver> | ||||
|    <slot>reject()</slot> | ||||
|    <hints> | ||||
|     <hint type="sourcelabel"> | ||||
|      <x>316</x> | ||||
|      <y>260</y> | ||||
|     </hint> | ||||
|     <hint type="destinationlabel"> | ||||
|      <x>286</x> | ||||
|      <y>274</y> | ||||
|     </hint> | ||||
|    </hints> | ||||
|   </connection> | ||||
|  </connections> | ||||
| </ui> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue