From 2e8c4c4ec0e80bb8dba25e610aa4598129890a00 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 16 Apr 2014 23:10:45 +0000 Subject: [PATCH] Improved free text macro functionality. The macro edit page in the settings dialog now allows multiple items to be selected in an extended selection. The macro items can be rearranged by drag and drop of single items or whole selections. The delete button and context menu item will now delete all the selected items. The free text macro drop down combo boxes on the main screen now automatically insert new macros into the macros list (at the end) if the ENTER key is pressed while the combobox has focus. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@4038 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- Configuration.cpp | 60 +++++++- Configuration.ui | 26 +++- mainwindow.ui | 338 ++++++++++++++++++++++++---------------------- 3 files changed, 249 insertions(+), 175 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index 83531fdd6..76be13ffe 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -148,6 +148,23 @@ private: QLineEdit description_; }; +class RearrangableMacrosModel + : public QStringListModel +{ +public: + Qt::ItemFlags flags (QModelIndex const& index) const override + { + auto flags = QStringListModel::flags (index); + if (index.isValid ()) + { + // disallow drop onto existing items + flags &= ~Qt::ItemIsDropEnabled; + } + return flags; + } +}; + + // Fields that are transceiver related. // // These are aggregated in a structure to enable a non-equivalence to @@ -268,6 +285,7 @@ private: Q_SLOT void on_add_macro_line_edit_editingFinished (); Q_SLOT void delete_macro (); + void delete_selected_macros (QModelIndexList); Q_SLOT void on_save_path_select_push_button_clicked (bool); @@ -318,7 +336,7 @@ private: float jt9w_max_dt_; QStringListModel macros_; - QStringListModel next_macros_; + RearrangableMacrosModel next_macros_; QAction * macro_delete_action_; Bands bands_; @@ -1222,6 +1240,9 @@ bool Configuration::impl::validate () int Configuration::impl::exec () { + // macros can be modified in the main window + next_macros_.setStringList (macros_.stringList ()); + ptt_state_ = false; have_rig_ = rig_active_; // record that we started with a rig open @@ -1596,17 +1617,44 @@ void Configuration::impl::on_add_macro_line_edit_editingFinished () void Configuration::impl::on_delete_macro_push_button_clicked (bool /* checked */) { - auto index = ui_->macros_list_view->selectionModel ()->currentIndex (); - if (index.isValid ()) + auto selection_model = ui_->macros_list_view->selectionModel (); + if (selection_model->hasSelection ()) { - next_macros_.removeRow (index.row ()); + // delete all selected items + delete_selected_macros (selection_model->selectedRows ()); } } void Configuration::impl::delete_macro () { - auto index = ui_->macros_list_view->currentIndex (); - if (index.isValid ()) + auto selection_model = ui_->macros_list_view->selectionModel (); + if (!selection_model->hasSelection ()) + { + // delete item under cursor if any + auto index = selection_model->currentIndex (); + if (index.isValid ()) + { + next_macros_.removeRow (index.row ()); + } + } + else + { + // delete the whole selection + delete_selected_macros (selection_model->selectedRows ()); + } +} + +void Configuration::impl::delete_selected_macros (QModelIndexList selected_rows) +{ + // sort in reverse row order so that we can delete without changing + // indices underneath us + qSort (selected_rows.begin (), selected_rows.end (), [] (QModelIndex const& lhs, QModelIndex const& rhs) + { + return rhs.row () < lhs.row (); // reverse row ordering + }); + + // now delete them + Q_FOREACH (auto index, selected_rows) { next_macros_.removeRow (index.row ()); } diff --git a/Configuration.ui b/Configuration.ui index 5c3883a13..6b315acf1 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -6,8 +6,8 @@ 0 0 - 508 - 471 + 586 + 550 @@ -1390,6 +1390,11 @@ both here. Qt::ActionsContextMenu + + Drag and drop items to rearrange order +Right click for item specific actions +Click, SHIFT+Click and, CRTL+Click to select items + QListView { show-decoration-selected: 1; /* make the selection span the entire width of the view */ @@ -1418,8 +1423,17 @@ QListView::item:hover { stop: 0 #FAFBFE, stop: 1 #DCDEF1); } + + QAbstractItemView::InternalMove + + + Qt::MoveAction + + + true + - QAbstractItemView::SingleSelection + QAbstractItemView::ExtendedSelection true @@ -1801,12 +1815,12 @@ soundcard changes + + + - - - diff --git a/mainwindow.ui b/mainwindow.ui index 87cc35fe0..9a216ad6d 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -591,6 +591,46 @@ p, li { white-space: pre-wrap; } + + + + + 0 + 0 + + + + + 113 + 0 + + + + + 105 + 16777215 + + + + Audio Tx frequency + + + Hz + + + Tx + + + 200 + + + 5000 + + + 1500 + + + @@ -876,46 +916,6 @@ p, li { white-space: pre-wrap; } - - - - - 0 - 0 - - - - - 113 - 0 - - - - - 105 - 16777215 - - - - Audio Tx frequency - - - Hz - - - Tx - - - 200 - - - 5000 - - - 1500 - - - @@ -985,6 +985,28 @@ p, li { white-space: pre-wrap; } + + + + + 105 + 23 + + + + + 105 + 16777215 + + + + Check to Tx in even minutes, uncheck for odd minutes + + + Tx even + + + @@ -1077,74 +1099,6 @@ p, li { white-space: pre-wrap; } - - - - - 0 - 0 - - - - - 0 - 160 - - - - - 20 - 160 - - - - Digital gain for audio input - - - -50 - - - 50 - - - 20 - - - Qt::Vertical - - - false - - - false - - - QSlider::TicksBelow - - - - - - - - 105 - 23 - - - - - 105 - 16777215 - - - - Check to Tx in even minutes, uncheck for odd minutes - - - Tx even - - - @@ -1158,6 +1112,16 @@ p, li { white-space: pre-wrap; } + + + + Add 2 kHz to requested dial frequency + + + +2 kHz + + + @@ -1203,13 +1167,19 @@ p, li { white-space: pre-wrap; } - - + + + + + 15 + 15 + + - Add 2 kHz to requested dial frequency + <html><head/><body><p>If orange, click to read dial frequency</p></body></html> - +2 kHz + @@ -1273,7 +1243,7 @@ p, li { white-space: pre-wrap; } QTabWidget::Triangular - 0 + 1 @@ -1778,11 +1748,17 @@ p, li { white-space: pre-wrap; } 16777215 + + Enter a free text message (maximum 13 characters) +or select a predefined macro from the dropdown list. +Press ENTER to add the current text to the predefined +list. The list can be maintained in Settings (F2). + true - QComboBox::NoInsert + QComboBox::InsertAtBottom @@ -1990,11 +1966,17 @@ p, li { white-space: pre-wrap; } 0 + + Enter a free text message (maximum 13 characters) +or select a predefined macro from the dropdown list. +Press ENTER to add the current text to the predefined +list. The list can be maintained in Settings (F2). + true - QComboBox::NoInsert + QComboBox::InsertAtBottom @@ -2031,19 +2013,10 @@ p, li { white-space: pre-wrap; } - - - - - 15 - 15 - - - - <html><head/><body><p>If orange, click to read dial frequency</p></body></html> - + + - + Pwr @@ -2063,6 +2036,34 @@ p, li { white-space: pre-wrap; } + + + + Adjust Tx audio level + + + 300 + + + 0 + + + Qt::Vertical + + + true + + + true + + + QSlider::TicksBelow + + + 10 + + + @@ -2094,41 +2095,6 @@ p, li { white-space: pre-wrap; } - - - - Pwr - - - - - - - Adjust Tx audio level - - - 300 - - - 0 - - - Qt::Vertical - - - true - - - true - - - QSlider::TicksBelow - - - 10 - - - @@ -2237,6 +2203,52 @@ p, li { white-space: pre-wrap; } + + + + + 0 + 0 + + + + + 0 + 160 + + + + + 20 + 160 + + + + Digital gain for audio input + + + -50 + + + 50 + + + 20 + + + Qt::Vertical + + + false + + + false + + + QSlider::TicksBelow + + + @@ -2247,7 +2259,7 @@ p, li { white-space: pre-wrap; } 0 0 780 - 21 + 20