From e153bb76544d83cb103f1ff318ed599fb6a0e558 Mon Sep 17 00:00:00 2001 From: John Michael Burke Date: Tue, 30 Nov 2021 19:00:10 -0800 Subject: [PATCH 01/10] Copy from table and log level default. --- console_backend/src/cli_options.rs | 4 ++-- console_backend/src/shared_state.rs | 2 +- .../AdvancedTabComponents/MetricsMonitor.qml | 6 +++-- .../AdvancedTabComponents/NetworkInfo.qml | 6 +++-- .../ThreadStateTable.qml | 6 +++-- .../BaselineTabComponents/BaselineTable.qml | 24 ++++--------------- resources/Constants/Globals.qml | 1 + resources/LogPanel.qml | 24 ++++--------------- .../SettingsTabComponents/SettingsTable.qml | 24 ++++--------------- .../SolutionTabComponents/SolutionTable.qml | 24 ++++--------------- resources/images/swiftLogoWide.svg | 2 +- resources/view.qml | 15 ++++++++++++ swiftnav_console/log_panel.py | 2 +- 13 files changed, 49 insertions(+), 91 deletions(-) diff --git a/console_backend/src/cli_options.rs b/console_backend/src/cli_options.rs index d52b23059..61ed1cab4 100644 --- a/console_backend/src/cli_options.rs +++ b/console_backend/src/cli_options.rs @@ -104,7 +104,7 @@ pub struct CliOptions { #[clap(long = "sbp-log")] pub sbp_log: Option, - /// Set Console Log Level Filter. Default: INFO. + /// Set Console Log Level Filter. Default: WARNING. #[clap(long = "log-level")] pub log_level: Option, @@ -305,7 +305,7 @@ pub fn handle_cli(opt: CliOptions, conn_manager: &ConnectionManager, shared_stat let log_level = if let Some(log_level_) = opt.log_level { (*log_level_).clone() } else { - LogLevel::INFO + LogLevel::WARNING }; shared_state.set_log_level(log_level); let mut shared_data = shared_state.lock(); diff --git a/console_backend/src/shared_state.rs b/console_backend/src/shared_state.rs index 46ee761dc..27c04da1c 100644 --- a/console_backend/src/shared_state.rs +++ b/console_backend/src/shared_state.rs @@ -442,7 +442,7 @@ pub struct LogPanelState { impl LogPanelState { fn new() -> LogPanelState { LogPanelState { - log_level: LogLevel::INFO, + log_level: LogLevel::WARNING, } } } diff --git a/resources/AdvancedTabComponents/MetricsMonitor.qml b/resources/AdvancedTabComponents/MetricsMonitor.qml index 8802ff7f0..73cf36885 100644 --- a/resources/AdvancedTabComponents/MetricsMonitor.qml +++ b/resources/AdvancedTabComponents/MetricsMonitor.qml @@ -150,10 +150,12 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) + if (selectedRow == row) { selectedRow = -1; - else + } else { selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRow)); + } } } diff --git a/resources/AdvancedTabComponents/NetworkInfo.qml b/resources/AdvancedTabComponents/NetworkInfo.qml index 070ed0359..c4e8f3e29 100644 --- a/resources/AdvancedTabComponents/NetworkInfo.qml +++ b/resources/AdvancedTabComponents/NetworkInfo.qml @@ -147,10 +147,12 @@ ColumnLayout { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) + if (selectedRow == row) { selectedRow = -1; - else + } else { selectedRow = row; + Globals.copyClipboard = JSON.stringify(table.model.getRow(selectedRow)); + } } } diff --git a/resources/AdvancedTabComponents/ThreadStateTable.qml b/resources/AdvancedTabComponents/ThreadStateTable.qml index 8642c6099..585414608 100644 --- a/resources/AdvancedTabComponents/ThreadStateTable.qml +++ b/resources/AdvancedTabComponents/ThreadStateTable.qml @@ -139,10 +139,12 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) + if (selectedRow == row) { selectedRow = -1; - else + } else { selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRow)); + } } } diff --git a/resources/BaselineTabComponents/BaselineTable.qml b/resources/BaselineTabComponents/BaselineTable.qml index bd64b3294..83650a826 100644 --- a/resources/BaselineTabComponents/BaselineTable.qml +++ b/resources/BaselineTabComponents/BaselineTable.qml @@ -102,24 +102,6 @@ Item { } - TextEdit { - id: textEdit - - visible: false - } - - Shortcut { - sequences: [StandardKey.Copy] - onActivated: { - if (selectedRow != -1) { - textEdit.text = JSON.stringify(tableView.model.getRow(selectedRow)); - textEdit.selectAll(); - textEdit.copy(); - selectedRow = -1; - } - } - } - TableView { id: tableView @@ -181,10 +163,12 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) + if (selectedRow == row) { selectedRow = -1; - else + } else { selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRow)); + } } } diff --git a/resources/Constants/Globals.qml b/resources/Constants/Globals.qml index b49017c42..0f3c6bc22 100644 --- a/resources/Constants/Globals.qml +++ b/resources/Constants/Globals.qml @@ -15,4 +15,5 @@ QtObject { property int minimumWidth: 1050 property string conn_state: Constants.connection.disconnected property bool connected_at_least_once: false + property string copyClipboard: "" } diff --git a/resources/LogPanel.qml b/resources/LogPanel.qml index 0c065a6f5..3ef911cdc 100644 --- a/resources/LogPanel.qml +++ b/resources/LogPanel.qml @@ -24,24 +24,6 @@ Item { Rectangle { anchors.fill: parent - TextEdit { - id: textEdit - - visible: false - } - - Shortcut { - sequences: [StandardKey.Copy] - onActivated: { - if (selectedRow != -1) { - textEdit.text = JSON.stringify(tableView.model.getRow(selectedRow)); - textEdit.selectAll(); - textEdit.copy(); - selectedRow = -1; - } - } - } - Item { anchors.fill: parent anchors.topMargin: Constants.genericTable.cellHeight @@ -292,10 +274,12 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) + if (selectedRow == row) { selectedRow = -1; - else + } else { selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRow)); + } } } diff --git a/resources/SettingsTabComponents/SettingsTable.qml b/resources/SettingsTabComponents/SettingsTable.qml index cdc6a1b1a..d4028f804 100644 --- a/resources/SettingsTabComponents/SettingsTable.qml +++ b/resources/SettingsTabComponents/SettingsTable.qml @@ -101,24 +101,6 @@ Item { } - TextEdit { - id: textEdit - - visible: false - } - - Shortcut { - sequences: [StandardKey.Copy] - onActivated: { - if (selectedRowIdx != -1) { - textEdit.text = JSON.stringify(tableView.model.getRow(selectedRowIdx)); - textEdit.selectAll(); - textEdit.copy(); - selectedRowIdx = -1; - } - } - } - TableView { id: tableView @@ -187,10 +169,12 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRowIdx == row) + if (selectedRowIdx == row) { selectedRowIdx = -1; - else + } else { selectedRowIdx = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRowIdx)); + } } } diff --git a/resources/SolutionTabComponents/SolutionTable.qml b/resources/SolutionTabComponents/SolutionTable.qml index 61ae30840..38d86c8e5 100644 --- a/resources/SolutionTabComponents/SolutionTable.qml +++ b/resources/SolutionTabComponents/SolutionTable.qml @@ -101,24 +101,6 @@ Item { } - TextEdit { - id: textEdit - - visible: false - } - - Shortcut { - sequences: [StandardKey.Copy] - onActivated: { - if (selectedRow != -1) { - textEdit.text = JSON.stringify(tableView.model.getRow(selectedRow)); - textEdit.selectAll(); - textEdit.copy(); - selectedRow = -1; - } - } - } - TableView { id: tableView @@ -180,10 +162,12 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) + if (selectedRow == row) { selectedRow = -1; - else + } else { selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRow)); + } } } diff --git a/resources/images/swiftLogoWide.svg b/resources/images/swiftLogoWide.svg index 0cddc1527..aaa495c9e 100644 --- a/resources/images/swiftLogoWide.svg +++ b/resources/images/swiftLogoWide.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/resources/view.qml b/resources/view.qml index a81b3c49e..9856f31f5 100644 --- a/resources/view.qml +++ b/resources/view.qml @@ -16,6 +16,21 @@ ApplicationWindow { font.pointSize: Constants.mediumPointSize visible: true + TextEdit { + id: textEdit + + visible: false + text: Globals.copyClipboard + } + + Shortcut { + sequences: [StandardKey.Copy] + onActivated: { + textEdit.selectAll(); + textEdit.copy(); + } + } + MainDialogView { id: dialogStack diff --git a/swiftnav_console/log_panel.py b/swiftnav_console/log_panel.py index 1b21d83cb..33331968f 100644 --- a/swiftnav_console/log_panel.py +++ b/swiftnav_console/log_panel.py @@ -13,7 +13,7 @@ LOG_PANEL: Dict[str, Any] = { Keys.ENTRIES: [], Keys.LOG_LEVEL_LABELS: [LogLevel.ERROR, LogLevel.WARNING, LogLevel.NOTICE, LogLevel.INFO, LogLevel.DEBUG], - Keys.LOG_LEVEL: LogLevel.INFO, + Keys.LOG_LEVEL: LogLevel.WARNING, } log_panel_lock = QMutex() From 923e9f0f91b9a13d391166f191e5e26c48bc012e Mon Sep 17 00:00:00 2001 From: John Michael Burke Date: Wed, 1 Dec 2021 14:53:50 -0800 Subject: [PATCH 02/10] Deselect all table rows selected on press or copy. --- .../AdvancedTabComponents/MetricsMonitor.qml | 18 ++++++---- .../AdvancedTabComponents/NetworkInfo.qml | 34 +++++++++++-------- .../ThreadStateTable.qml | 18 ++++++---- .../BaselineTabComponents/BaselineTable.qml | 18 ++++++---- resources/Constants/Globals.qml | 8 +++++ resources/LogPanel.qml | 22 +++++++----- .../InsSettingsPopup.qml | 20 +++++++---- .../SettingsTabComponents/SettingsTable.qml | 19 +++++++---- .../SolutionTabComponents/SolutionTable.qml | 18 ++++++---- resources/view.qml | 1 + 10 files changed, 118 insertions(+), 58 deletions(-) diff --git a/resources/AdvancedTabComponents/MetricsMonitor.qml b/resources/AdvancedTabComponents/MetricsMonitor.qml index 73cf36885..021b91df2 100644 --- a/resources/AdvancedTabComponents/MetricsMonitor.qml +++ b/resources/AdvancedTabComponents/MetricsMonitor.qml @@ -9,7 +9,6 @@ import SwiftConsole 1.0 Item { property variant columnWidths: [width / 2, width / 2] property real mouse_x: 0 - property int selectedRow: -1 property variant entries: [] property bool csacReceived: false @@ -96,6 +95,11 @@ Item { TableView { id: tableView + property int selectedRow: -1 + + Component.onCompleted: { + Globals.tablesWithHighlights.push(this); + } columnSpacing: -1 rowSpacing: -1 columnWidthProvider: function(column) { @@ -132,7 +136,7 @@ Item { implicitHeight: Constants.genericTable.cellHeight implicitWidth: tableView.columnWidthProvider(column) border.color: Constants.genericTable.borderColor - color: row == selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor + color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor Label { width: parent.width @@ -150,11 +154,13 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) { - selectedRow = -1; + Globals.clearHighlightedRows(); + tableView.focus = true; + if (tableView.selectedRow == row) { + tableView.selectedRow = -1; } else { - selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRow)); + tableView.selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); } } } diff --git a/resources/AdvancedTabComponents/NetworkInfo.qml b/resources/AdvancedTabComponents/NetworkInfo.qml index c4e8f3e29..d8d59d95b 100644 --- a/resources/AdvancedTabComponents/NetworkInfo.qml +++ b/resources/AdvancedTabComponents/NetworkInfo.qml @@ -9,7 +9,6 @@ ColumnLayout { property variant entries: [] property var columnWidths: [parent.width / 5, parent.width / 5, parent.width / 5, parent.width / 5, parent.width / 5] property real mouse_x: 0 - property int selectedRow: -1 spacing: Constants.networking.layoutSpacing @@ -19,7 +18,7 @@ ColumnLayout { Layout.fillWidth: true Layout.preferredHeight: Constants.genericTable.cellHeight interactive: false - syncView: table + syncView: tableView z: Constants.genericTable.headerZOffset delegate: Rectangle { @@ -32,7 +31,7 @@ ColumnLayout { anchors.centerIn: parent horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter - text: table.model.columns[index].display + text: tableView.model.columns[index].display elide: Text.ElideRight clip: true font.family: Constants.genericTable.fontFamily @@ -51,12 +50,12 @@ ColumnLayout { if (pressed) { var delta_x = (mouseX - mouse_x); var next_idx = (index + 1) % 5; - var min_width = table.width / 10; + var min_width = tableView.width / 10; if (columnWidths[index] + delta_x > min_width && columnWidths[next_idx] - delta_x > min_width) { columnWidths[index] += delta_x; columnWidths[next_idx] -= delta_x; } - table.forceLayout(); + tableView.forceLayout(); } } } @@ -79,8 +78,13 @@ ColumnLayout { } TableView { - id: table + id: tableView + property int selectedRow: -1 + + Component.onCompleted: { + Globals.tablesWithHighlights.push(this); + } columnSpacing: -1 rowSpacing: -1 columnWidthProvider: function(column) { @@ -91,7 +95,7 @@ ColumnLayout { Layout.fillWidth: true Layout.fillHeight: true onWidthChanged: { - table.forceLayout(); + tableView.forceLayout(); } ScrollBar.horizontal: ScrollBar { @@ -127,9 +131,9 @@ ColumnLayout { delegate: Rectangle { implicitHeight: Constants.genericTable.cellHeight - implicitWidth: table.columnWidthProvider(column) + implicitWidth: tableView.columnWidthProvider(column) border.color: Constants.genericTable.borderColor - color: row == selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor + color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor Label { width: parent.width @@ -147,11 +151,13 @@ ColumnLayout { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) { - selectedRow = -1; + Globals.clearHighlightedRows(); + tableView.focus = true; + if (tableView.selectedRow == row) { + tableView.selectedRow = -1; } else { - selectedRow = row; - Globals.copyClipboard = JSON.stringify(table.model.getRow(selectedRow)); + tableView.selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); } } } @@ -176,7 +182,7 @@ ColumnLayout { new_row[Constants.networking.columnHeaders[2]] = entries[idx][2]; new_row[Constants.networking.columnHeaders[3]] = entries[idx][3]; new_row[Constants.networking.columnHeaders[4]] = entries[idx][4]; - table.model.setRow(idx, new_row); + tableView.model.setRow(idx, new_row); } } } diff --git a/resources/AdvancedTabComponents/ThreadStateTable.qml b/resources/AdvancedTabComponents/ThreadStateTable.qml index 585414608..97dc87d5b 100644 --- a/resources/AdvancedTabComponents/ThreadStateTable.qml +++ b/resources/AdvancedTabComponents/ThreadStateTable.qml @@ -9,7 +9,6 @@ import SwiftConsole 1.0 Item { property variant columnWidths: [parent.width / 3, parent.width / 3, parent.width / 3] property real mouse_x: 0 - property int selectedRow: -1 property variant entries: [] HorizontalHeaderView { @@ -78,6 +77,11 @@ Item { TableView { id: tableView + property int selectedRow: -1 + + Component.onCompleted: { + Globals.tablesWithHighlights.push(this); + } columnSpacing: -1 rowSpacing: -1 columnWidthProvider: function(column) { @@ -121,7 +125,7 @@ Item { implicitHeight: Constants.genericTable.cellHeight implicitWidth: tableView.columnWidthProvider(column) border.color: Constants.genericTable.borderColor - color: row == selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor + color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor Label { width: parent.width @@ -139,11 +143,13 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) { - selectedRow = -1; + Globals.clearHighlightedRows(); + tableView.focus = true; + if (tableView.selectedRow == row) { + tableView.selectedRow = -1; } else { - selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRow)); + tableView.selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); } } } diff --git a/resources/BaselineTabComponents/BaselineTable.qml b/resources/BaselineTabComponents/BaselineTable.qml index 83650a826..ef904e25b 100644 --- a/resources/BaselineTabComponents/BaselineTable.qml +++ b/resources/BaselineTabComponents/BaselineTable.qml @@ -11,7 +11,6 @@ Item { property variant columnWidths: [Constants.baselineTable.defaultColumnWidth, Constants.baselineTable.defaultColumnWidth] property real mouse_x: 0 - property int selectedRow: -1 function syncColumnWidthsWithSplitView() { var oldcols = columnWidths.slice(); @@ -105,6 +104,11 @@ Item { TableView { id: tableView + property int selectedRow: -1 + + Component.onCompleted: { + Globals.tablesWithHighlights.push(this); + } onWidthChanged: syncColumnWidthsWithSplitView() columnSpacing: -1 rowSpacing: -1 @@ -145,7 +149,7 @@ Item { implicitHeight: Constants.genericTable.cellHeight implicitWidth: tableView.columnWidthProvider(column) border.color: Constants.genericTable.borderColor - color: row == selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor + color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor Label { width: parent.width @@ -163,11 +167,13 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) { - selectedRow = -1; + Globals.clearHighlightedRows(); + tableView.focus = true; + if (tableView.selectedRow == row) { + tableView.selectedRow = -1; } else { - selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRow)); + tableView.selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); } } } diff --git a/resources/Constants/Globals.qml b/resources/Constants/Globals.qml index 0f3c6bc22..5de788ecd 100644 --- a/resources/Constants/Globals.qml +++ b/resources/Constants/Globals.qml @@ -16,4 +16,12 @@ QtObject { property string conn_state: Constants.connection.disconnected property bool connected_at_least_once: false property string copyClipboard: "" + property var tablesWithHighlights: [] + + function clearHighlightedRows() { + for (var i in tablesWithHighlights) { + tablesWithHighlights[i].selectedRow = -1; + } + } + } diff --git a/resources/LogPanel.qml b/resources/LogPanel.qml index 3ef911cdc..395b7f198 100644 --- a/resources/LogPanel.qml +++ b/resources/LogPanel.qml @@ -8,7 +8,6 @@ Item { property var logEntries: [] property variant columnWidths: [parent.width * Constants.logPanel.defaultColumnWidthRatios[0], parent.width * Constants.logPanel.defaultColumnWidthRatios[1], parent.width * Constants.logPanel.defaultColumnWidthRatios[2]] property real mouse_x: 0 - property int selectedRow: -1 property bool forceLayoutLock: false property variant logLevelLabels: [] property int logLevelIndex: 3 @@ -206,6 +205,11 @@ Item { TableView { id: tableView + property int selectedRow: -1 + + Component.onCompleted: { + Globals.tablesWithHighlights.push(this); + } columnSpacing: -1 rowSpacing: -1 columnWidthProvider: function(column) { @@ -256,7 +260,7 @@ Item { delegate: Rectangle { implicitHeight: Constants.logPanel.cellHeight implicitWidth: tableView.columnWidthProvider(column) - color: row == selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor + color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor Label { width: parent.width @@ -274,11 +278,13 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) { - selectedRow = -1; + Globals.clearHighlightedRows(); + tableView.focus = true; + if (tableView.selectedRow == row) { + tableView.selectedRow = -1; } else { - selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRow)); + tableView.selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); } } } @@ -318,8 +324,8 @@ Item { for (var idx in logEntries) { tableView.model.setRow(idx, logEntries[idx]); } - if (logPanelData.entries.length && selectedRow != -1) - selectedRow += logPanelData.entries.length; + if (logPanelData.entries.length && tableView.selectedRow != -1) + tableView.selectedRow += logPanelData.entries.length; logPanelData.entries = []; } diff --git a/resources/SettingsTabComponents/InsSettingsPopup.qml b/resources/SettingsTabComponents/InsSettingsPopup.qml index 5f7329683..5a8499279 100644 --- a/resources/SettingsTabComponents/InsSettingsPopup.qml +++ b/resources/SettingsTabComponents/InsSettingsPopup.qml @@ -8,7 +8,6 @@ import SwiftConsole 1.0 Item { property variant columnWidths: [layout.width / 3, layout.width / 3, layout.width / 3] property real mouse_x: 0 - property int selectedRow: -1 property alias insPopup: dialog property variant settings: [] @@ -135,6 +134,11 @@ Item { TableView { id: tableView + property int selectedRow: -1 + + Component.onCompleted: { + Globals.tablesWithHighlights.push(this); + } columnSpacing: -1 rowSpacing: -1 columnWidthProvider: function(column) { @@ -174,7 +178,7 @@ Item { implicitHeight: Constants.genericTable.cellHeight implicitWidth: tableView.columnWidthProvider(column) border.color: Constants.genericTable.borderColor - color: row == selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor + color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor Label { width: parent.width @@ -192,10 +196,14 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) - selectedRow = -1; - else - selectedRow = row; + Globals.clearHighlightedRows(); + tableView.focus = true; + if (tableView.selectedRow == row) { + tableView.selectedRow = -1; + } else { + tableView.selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); + } } } diff --git a/resources/SettingsTabComponents/SettingsTable.qml b/resources/SettingsTabComponents/SettingsTable.qml index d4028f804..4eb9f1e63 100644 --- a/resources/SettingsTabComponents/SettingsTable.qml +++ b/resources/SettingsTabComponents/SettingsTable.qml @@ -8,7 +8,7 @@ import SwiftConsole 1.0 Item { property variant columnWidths: [Constants.settingsTable.maximumWidth * 0.4, Constants.settingsTable.maximumWidth * 0.6] - property int selectedRowIdx: -1 + property alias selectedRowIdx: tableView.selectedRow property var rowOffsets: ({ }) property bool showExpert: false @@ -104,6 +104,11 @@ Item { TableView { id: tableView + property int selectedRow: -1 + + Component.onCompleted: { + Globals.tablesWithHighlights.push(this); + } columnSpacing: -1 rowSpacing: -1 columnWidthProvider: function(column) { @@ -143,7 +148,7 @@ Item { if (item[Constants.settingsTable.tableRightColumnHeader] == "") return Constants.genericTable.borderColor; - if (selectedRowIdx == row) + if (tableView.selectedRow == row) return Constants.genericTable.cellHighlightedColor; return Constants.genericTable.cellColor; @@ -169,11 +174,13 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRowIdx == row) { - selectedRowIdx = -1; + Globals.clearHighlightedRows(); + tableView.focus = true; + if (tableView.selectedRow == row) { + tableView.selectedRow = -1; } else { - selectedRowIdx = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRowIdx)); + tableView.selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); } } } diff --git a/resources/SolutionTabComponents/SolutionTable.qml b/resources/SolutionTabComponents/SolutionTable.qml index 38d86c8e5..0d2168e6d 100644 --- a/resources/SolutionTabComponents/SolutionTable.qml +++ b/resources/SolutionTabComponents/SolutionTable.qml @@ -11,7 +11,6 @@ Item { property variant columnWidths: [Constants.solutionTable.defaultColumnWidth, Constants.solutionTable.defaultColumnWidth] property real mouse_x: 0 - property int selectedRow: -1 function syncColumnWidthsWithSplitView() { var oldcols = columnWidths.slice(); @@ -104,6 +103,11 @@ Item { TableView { id: tableView + property int selectedRow: -1 + + Component.onCompleted: { + Globals.tablesWithHighlights.push(this); + } onWidthChanged: syncColumnWidthsWithSplitView() columnSpacing: -1 rowSpacing: -1 @@ -144,7 +148,7 @@ Item { implicitHeight: Constants.genericTable.cellHeight implicitWidth: tableView.columnWidthProvider(column) border.color: Constants.genericTable.borderColor - color: row == selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor + color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor Label { width: parent.width @@ -162,11 +166,13 @@ Item { height: parent.height anchors.centerIn: parent onPressed: { - if (selectedRow == row) { - selectedRow = -1; + Globals.clearHighlightedRows(); + tableView.focus = true; + if (tableView.selectedRow == row) { + tableView.selectedRow = -1; } else { - selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(selectedRow)); + tableView.selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); } } } diff --git a/resources/view.qml b/resources/view.qml index 9856f31f5..a8fb42880 100644 --- a/resources/view.qml +++ b/resources/view.qml @@ -28,6 +28,7 @@ ApplicationWindow { onActivated: { textEdit.selectAll(); textEdit.copy(); + Globals.clearHighlightedRows(); } } From 959c9950e58035a56a77926af8bfa0e8df63933d Mon Sep 17 00:00:00 2001 From: Keith Kyzivat <90068932+keithel-qt@users.noreply.github.com> Date: Wed, 1 Dec 2021 20:29:27 -0500 Subject: [PATCH 03/10] Create SwiftTableView reusable component (#260) Create the SwiftTableView reusable component and use it in one location in the app as a sample - the ThreadStateTable. --- .../ThreadStateTable.qml | 65 ++---------------- resources/TableComponents/SwiftTableView.qml | 68 +++++++++++++++++++ resources/console_resources.qrc | 1 + 3 files changed, 75 insertions(+), 59 deletions(-) create mode 100644 resources/TableComponents/SwiftTableView.qml diff --git a/resources/AdvancedTabComponents/ThreadStateTable.qml b/resources/AdvancedTabComponents/ThreadStateTable.qml index 97dc87d5b..c5493f49b 100644 --- a/resources/AdvancedTabComponents/ThreadStateTable.qml +++ b/resources/AdvancedTabComponents/ThreadStateTable.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtCharts 2.2 import QtQuick 2.15 @@ -74,33 +75,14 @@ Item { } - TableView { + SwiftTableView { id: tableView - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height - onWidthChanged: { - tableView.forceLayout(); - } - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + columnWidths: parent.columnWidths model: TableModel { id: tableModel @@ -121,41 +103,6 @@ Item { } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - - } - } Timer { diff --git a/resources/TableComponents/SwiftTableView.qml b/resources/TableComponents/SwiftTableView.qml new file mode 100644 index 000000000..fad5ebaa2 --- /dev/null +++ b/resources/TableComponents/SwiftTableView.qml @@ -0,0 +1,68 @@ +import "../Constants" +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import SwiftConsole 1.0 + +TableView { + id: tableView + + property variant columnWidths: [] + property int selectedRow: -1 + + columnSpacing: -1 + rowSpacing: -1 + columnWidthProvider: function(column) { + return columnWidths[column]; + } + reuseItems: true + boundsBehavior: Flickable.StopAtBounds + Component.onCompleted: { + console.assert(columnWidths.length == model.columnCount, "length of columnWidths does not match column count."); + Globals.tablesWithHighlights.push(this); + } + onWidthChanged: { + tableView.forceLayout(); + } + + ScrollBar.horizontal: ScrollBar { + } + + ScrollBar.vertical: ScrollBar { + } + + delegate: Rectangle { + implicitHeight: Constants.genericTable.cellHeight + implicitWidth: tableView.columnWidthProvider(column) + border.color: Constants.genericTable.borderColor + color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor + + Label { + width: parent.width + horizontalAlignment: Text.AlignLeft + clip: true + font.family: Constants.genericTable.fontFamily + font.pointSize: Constants.largePointSize + text: model.display + elide: Text.ElideRight + padding: Constants.genericTable.padding + } + + MouseArea { + width: parent.width + height: parent.height + anchors.centerIn: parent + onPressed: { + Globals.clearHighlightedRows(); + tableView.focus = true; + if (tableView.selectedRow == row) { + tableView.selectedRow = -1; + } else { + tableView.selectedRow = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); + } + } + } + + } + +} diff --git a/resources/console_resources.qrc b/resources/console_resources.qrc index 786f7e94f..cf860610e 100644 --- a/resources/console_resources.qrc +++ b/resources/console_resources.qrc @@ -101,6 +101,7 @@ images/icon.ico TableComponents/SortableColumnHeading.qml TableComponents/TableCellDelegate.qml + TableComponents/SwiftTableView.qml BaseComponents/SmallCheckBox.qml BaseComponents/SwiftGroupBox.qml ChartLegend.qml From b15bbd8cb932987fd5d2cb9a874dc1d4e4dc34c7 Mon Sep 17 00:00:00 2001 From: John Michael Burke Date: Thu, 2 Dec 2021 13:21:16 -0800 Subject: [PATCH 04/10] Apply SwiftTableView all over. --- .../AdvancedTabComponents/MetricsMonitor.qml | 65 +------ .../AdvancedTabComponents/NetworkInfo.qml | 60 +----- .../BaselineTabComponents/BaselineTable.qml | 182 ++++++------------ resources/Constants/Constants.qml | 2 + resources/Constants/Globals.qml | 1 + resources/LogPanel.qml | 65 +------ .../InsSettingsPopup.qml | 64 +----- .../SettingsTabComponents/SettingsTable.qml | 166 +++++----------- .../SolutionTabComponents/SolutionTable.qml | 181 ++++++----------- resources/TableComponents/SwiftTableView.qml | 24 ++- resources/view.qml | 2 +- 11 files changed, 223 insertions(+), 589 deletions(-) diff --git a/resources/AdvancedTabComponents/MetricsMonitor.qml b/resources/AdvancedTabComponents/MetricsMonitor.qml index 021b91df2..1b6ae6578 100644 --- a/resources/AdvancedTabComponents/MetricsMonitor.qml +++ b/resources/AdvancedTabComponents/MetricsMonitor.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtCharts 2.2 import QtQuick 2.15 @@ -7,7 +8,6 @@ import QtQuick.Layouts 1.15 import SwiftConsole 1.0 Item { - property variant columnWidths: [width / 2, width / 2] property real mouse_x: 0 property variant entries: [] property bool csacReceived: false @@ -28,6 +28,8 @@ Item { } Rectangle { + property variant columnWidths: [width / 2, width / 2] + Layout.fillWidth: true Layout.fillHeight: true clip: true @@ -92,30 +94,14 @@ Item { } - TableView { + SwiftTableView { id: tableView - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + columnWidths: parent.columnWidths model: TableModel { id: tableModel @@ -132,41 +118,6 @@ Item { } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - - } - } Timer { diff --git a/resources/AdvancedTabComponents/NetworkInfo.qml b/resources/AdvancedTabComponents/NetworkInfo.qml index d8d59d95b..6de88604b 100644 --- a/resources/AdvancedTabComponents/NetworkInfo.qml +++ b/resources/AdvancedTabComponents/NetworkInfo.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtQuick 2.15 import QtQuick.Controls 2.15 @@ -77,32 +78,12 @@ ColumnLayout { } - TableView { + SwiftTableView { id: tableView - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds Layout.fillWidth: true Layout.fillHeight: true - onWidthChanged: { - tableView.forceLayout(); - } - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + columnWidths: parent.columnWidths model: TableModel { rows: [Constants.networking.defaultList] @@ -129,41 +110,6 @@ ColumnLayout { } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - - } - } Timer { diff --git a/resources/BaselineTabComponents/BaselineTable.qml b/resources/BaselineTabComponents/BaselineTable.qml index ef904e25b..7e49272ce 100644 --- a/resources/BaselineTabComponents/BaselineTable.qml +++ b/resources/BaselineTabComponents/BaselineTable.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtCharts 2.2 import QtQuick 2.15 @@ -39,145 +40,88 @@ Item { width: parent.width height: parent.height - Item { - Layout.fillHeight: true + HorizontalHeaderView { + id: horizontalHeader + Layout.fillWidth: true + Layout.preferredHeight: Constants.genericTable.cellHeight + interactive: false + syncView: tableView + + delegate: Rectangle { + implicitWidth: columnWidths[index] + implicitHeight: Constants.genericTable.cellHeight + border.color: Constants.genericTable.borderColor + clip: true + + Label { + width: parent.width + anchors.centerIn: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: tableView.model.columns[index].display + elide: Text.ElideRight + clip: true + font.family: Constants.genericTable.fontFamily + font.pointSize: Constants.largePointSize + } - HorizontalHeaderView { - id: horizontalHeader - - interactive: false - syncView: tableView - z: Constants.genericTable.headerZOffset - - delegate: Rectangle { - implicitWidth: columnWidths[index] - implicitHeight: Constants.genericTable.cellHeight - border.color: Constants.genericTable.borderColor - - Label { - width: parent.width - anchors.centerIn: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: tableView.model.columns[index].display - elide: Text.ElideRight - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize + MouseArea { + width: Constants.genericTable.mouseAreaResizeWidth + height: parent.height + anchors.right: parent.right + cursorShape: Qt.SizeHorCursor + onPressed: { + mouse_x = mouseX; } - - MouseArea { - width: Constants.genericTable.mouseAreaResizeWidth - height: parent.height - anchors.right: parent.right - cursorShape: Qt.SizeHorCursor - onPressed: { - mouse_x = mouseX; - } - onPositionChanged: { - if (pressed) { - var delta_x = (mouseX - mouse_x); - columnWidths[index] += delta_x; - syncColumnWidthsWithSplitView(); - } + onPositionChanged: { + if (pressed) { + var delta_x = (mouseX - mouse_x); + columnWidths[index] += delta_x; + syncColumnWidthsWithSplitView(); } } + } - gradient: Gradient { - GradientStop { - position: 0 - color: Constants.genericTable.cellColor - } - - GradientStop { - position: 1 - color: Constants.genericTable.gradientColor - } + gradient: Gradient { + GradientStop { + position: 0 + color: Constants.genericTable.cellColor + } + GradientStop { + position: 1 + color: Constants.genericTable.gradientColor } } } - TableView { - id: tableView - - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - onWidthChanged: syncColumnWidthsWithSplitView() - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds - anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + } - model: TableModel { - id: tableModel + SwiftTableView { + id: tableView - rows: [{ - "Item": "", - "Value": "" - }] + onWidthChanged: syncColumnWidthsWithSplitView() + Layout.fillWidth: true + Layout.fillHeight: true + columnWidths: parent.parent.columnWidths - TableModelColumn { - display: "Item" - } + model: TableModel { + id: tableModel - TableModelColumn { - display: "Value" - } + rows: [{ + "Item": "", + "Value": "" + }] + TableModelColumn { + display: "Item" } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - + TableModelColumn { + display: "Value" } } diff --git a/resources/Constants/Constants.qml b/resources/Constants/Constants.qml index 786540ca8..015f7370d 100644 --- a/resources/Constants/Constants.qml +++ b/resources/Constants/Constants.qml @@ -428,6 +428,7 @@ QtObject { readonly property int logLevelMenuHeight: 100 readonly property int dropdownButtonPadding: 0 readonly property int dropdownButtonWidth: 20 + readonly property int delegateBorderWidth: 0 } settingsTab: QtObject { @@ -442,6 +443,7 @@ QtObject { readonly property string tableLeftColumnHeader: "Name" readonly property string tableRightColumnHeader: "Value" readonly property int maximumWidth: 300 + readonly property int layoutSpacing: 0 } solutionTable: QtObject { diff --git a/resources/Constants/Globals.qml b/resources/Constants/Globals.qml index 5de788ecd..13040efdc 100644 --- a/resources/Constants/Globals.qml +++ b/resources/Constants/Globals.qml @@ -17,6 +17,7 @@ QtObject { property bool connected_at_least_once: false property string copyClipboard: "" property var tablesWithHighlights: [] + property var currentSelectedTable: null function clearHighlightedRows() { for (var i in tablesWithHighlights) { diff --git a/resources/LogPanel.qml b/resources/LogPanel.qml index 395b7f198..49412848e 100644 --- a/resources/LogPanel.qml +++ b/resources/LogPanel.qml @@ -1,4 +1,5 @@ import "./Constants" +import "./TableComponents" import Qt.labs.qmlmodels 1.0 import QtQuick 2.15 import QtQuick.Controls 2.15 @@ -202,33 +203,15 @@ Item { } - TableView { + SwiftTableView { id: tableView - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - onWidthChanged: { - tableView.forceLayout(); - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + columnWidths: parent.parent.columnWidths + delegateBorderWidth: Constants.logPanel.delegateBorderWidth model: TableModel { id: tableModel @@ -257,40 +240,6 @@ Item { } - delegate: Rectangle { - implicitHeight: Constants.logPanel.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - - } - } Timer { diff --git a/resources/SettingsTabComponents/InsSettingsPopup.qml b/resources/SettingsTabComponents/InsSettingsPopup.qml index 5a8499279..f730ce5e7 100644 --- a/resources/SettingsTabComponents/InsSettingsPopup.qml +++ b/resources/SettingsTabComponents/InsSettingsPopup.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtQuick 2.15 import QtQuick.Controls 2.15 @@ -6,7 +7,6 @@ import QtQuick.Layouts 1.15 import SwiftConsole 1.0 Item { - property variant columnWidths: [layout.width / 3, layout.width / 3, layout.width / 3] property real mouse_x: 0 property alias insPopup: dialog property variant settings: [] @@ -66,6 +66,8 @@ Item { } ColumnLayout { + property variant columnWidths: [layout.width / 3, layout.width / 3, layout.width / 3] + spacing: 0 width: parent.width height: Constants.insSettingsPopup.tableHeight @@ -131,29 +133,12 @@ Item { } - TableView { + SwiftTableView { id: tableView - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds - height: parent.height - horizontalHeader.height - width: parent.width - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + Layout.fillWidth: true + Layout.fillHeight: true + columnWidths: parent.columnWidths model: TableModel { id: tableModel @@ -174,41 +159,6 @@ Item { } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - - } - } } diff --git a/resources/SettingsTabComponents/SettingsTable.qml b/resources/SettingsTabComponents/SettingsTable.qml index 4eb9f1e63..0bb831a4e 100644 --- a/resources/SettingsTabComponents/SettingsTable.qml +++ b/resources/SettingsTabComponents/SettingsTable.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtCharts 2.2 import QtQuick 2.15 @@ -53,138 +54,77 @@ Item { } ColumnLayout { + // Item { + // Layout.fillHeight: true + // Layout.fillWidth: true + width: parent.width height: parent.height + spacing: Constants.settingsTable.layoutSpacing - Item { - Layout.fillHeight: true - Layout.fillWidth: true + HorizontalHeaderView { + // clip: true + // clip: true + // z: 100 - HorizontalHeaderView { - id: horizontalHeader - - interactive: false - syncView: tableView - z: Constants.genericTable.headerZOffset - - delegate: Rectangle { - implicitWidth: columnWidths[index] - implicitHeight: Constants.genericTable.cellHeight - border.color: Constants.genericTable.borderColor - - Label { - width: parent.width - anchors.centerIn: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: tableView.model.columns[index].display - elide: Text.ElideRight - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - } + id: horizontalHeader - gradient: Gradient { - GradientStop { - position: 0 - color: Constants.genericTable.cellColor - } + interactive: false + syncView: tableView + Layout.fillWidth: true + Layout.minimumHeight: Constants.genericTable.cellHeight + z: 100 + + delegate: Rectangle { + implicitWidth: columnWidths[index] + implicitHeight: Constants.genericTable.cellHeight + border.color: Constants.genericTable.borderColor + + Label { + width: parent.width + anchors.centerIn: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: tableView.model.columns[index].display + elide: Text.ElideRight + // clip: true + font.family: Constants.genericTable.fontFamily + font.pointSize: Constants.largePointSize + } - GradientStop { - position: 1 - color: Constants.genericTable.gradientColor - } + gradient: Gradient { + GradientStop { + position: 0 + color: Constants.genericTable.cellColor + } + GradientStop { + position: 1 + color: Constants.genericTable.gradientColor } } } - TableView { - id: tableView - - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds - anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + } - model: TableModel { - id: tableModel + SwiftTableView { + id: tableView - TableModelColumn { - display: "Name" - } + Layout.fillWidth: true + Layout.fillHeight: true + columnWidths: parent.parent.columnWidths - TableModelColumn { - display: "Value" - } + model: TableModel { + id: tableModel + TableModelColumn { + display: "Name" } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: { - var item = tableView.model.getRow(row); - if (item[Constants.settingsTable.tableRightColumnHeader] == "") - return Constants.genericTable.borderColor; - - if (tableView.selectedRow == row) - return Constants.genericTable.cellHighlightedColor; - - return Constants.genericTable.cellColor; - } - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - font.bold: { - var item = tableView.model.getRow(row); - return item[Constants.settingsTable.tableRightColumnHeader] == ""; - } - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - + TableModelColumn { + display: "Value" } } diff --git a/resources/SolutionTabComponents/SolutionTable.qml b/resources/SolutionTabComponents/SolutionTable.qml index 0d2168e6d..6bb97fa76 100644 --- a/resources/SolutionTabComponents/SolutionTable.qml +++ b/resources/SolutionTabComponents/SolutionTable.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtCharts 2.2 import QtQuick 2.15 @@ -38,145 +39,87 @@ Item { width: parent.width height: parent.height - Item { - Layout.fillHeight: true + HorizontalHeaderView { + id: horizontalHeader + + interactive: false + syncView: tableView Layout.fillWidth: true + Layout.preferredHeight: Constants.genericTable.cellHeight + + delegate: Rectangle { + implicitWidth: columnWidths[index] + implicitHeight: Constants.genericTable.cellHeight + border.color: Constants.genericTable.borderColor + + Label { + width: parent.width + anchors.centerIn: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: tableView.model.columns[index].display + elide: Text.ElideRight + clip: true + font.family: Constants.genericTable.fontFamily + font.pointSize: Constants.largePointSize + } - HorizontalHeaderView { - id: horizontalHeader - - interactive: false - syncView: tableView - z: Constants.genericTable.headerZOffset - - delegate: Rectangle { - implicitWidth: columnWidths[index] - implicitHeight: Constants.genericTable.cellHeight - border.color: Constants.genericTable.borderColor - - Label { - width: parent.width - anchors.centerIn: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: tableView.model.columns[index].display - elide: Text.ElideRight - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize + MouseArea { + width: Constants.genericTable.mouseAreaResizeWidth + height: parent.height + anchors.right: parent.right + cursorShape: Qt.SizeHorCursor + onPressed: { + mouse_x = mouseX; } - - MouseArea { - width: Constants.genericTable.mouseAreaResizeWidth - height: parent.height - anchors.right: parent.right - cursorShape: Qt.SizeHorCursor - onPressed: { - mouse_x = mouseX; - } - onPositionChanged: { - if (pressed) { - var delta_x = (mouseX - mouse_x); - columnWidths[index] += delta_x; - syncColumnWidthsWithSplitView(); - } + onPositionChanged: { + if (pressed) { + var delta_x = (mouseX - mouse_x); + columnWidths[index] += delta_x; + syncColumnWidthsWithSplitView(); } } + } - gradient: Gradient { - GradientStop { - position: 0 - color: Constants.genericTable.cellColor - } - - GradientStop { - position: 1 - color: Constants.genericTable.gradientColor - } + gradient: Gradient { + GradientStop { + position: 0 + color: Constants.genericTable.cellColor + } + GradientStop { + position: 1 + color: Constants.genericTable.gradientColor } } } - TableView { - id: tableView - - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - onWidthChanged: syncColumnWidthsWithSplitView() - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds - anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + } - model: TableModel { - id: tableModel + SwiftTableView { + id: tableView - rows: [{ - "Item": "", - "Value": "" - }] + Layout.fillWidth: true + Layout.fillHeight: true + columnWidths: parent.parent.columnWidths + onWidthChanged: syncColumnWidthsWithSplitView() - TableModelColumn { - display: "Item" - } + model: TableModel { + id: tableModel - TableModelColumn { - display: "Value" - } + rows: [{ + "Item": "", + "Value": "" + }] + TableModelColumn { + display: "Item" } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - + TableModelColumn { + display: "Value" } } diff --git a/resources/TableComponents/SwiftTableView.qml b/resources/TableComponents/SwiftTableView.qml index fad5ebaa2..d2a65a6f0 100644 --- a/resources/TableComponents/SwiftTableView.qml +++ b/resources/TableComponents/SwiftTableView.qml @@ -8,6 +8,10 @@ TableView { property variant columnWidths: [] property int selectedRow: -1 + property int _currentSelectedIndex: -1 + property int currentSelectedIndex: Globals.currentSelectedTable == this ? _currentSelectedIndex : -1 + property int delegateBorderWidth: Constants.genericTable.borderWidth + property color delegateBorderColor: Constants.genericTable.borderColor columnSpacing: -1 rowSpacing: -1 @@ -18,11 +22,13 @@ TableView { boundsBehavior: Flickable.StopAtBounds Component.onCompleted: { console.assert(columnWidths.length == model.columnCount, "length of columnWidths does not match column count."); - Globals.tablesWithHighlights.push(this); } onWidthChanged: { tableView.forceLayout(); } + onFocusChanged: { + _currentSelectedIndex = -1; + } ScrollBar.horizontal: ScrollBar { } @@ -33,8 +39,9 @@ TableView { delegate: Rectangle { implicitHeight: Constants.genericTable.cellHeight implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor + border.color: delegateBorderColor + border.width: delegateBorderWidth + color: row == currentSelectedIndex ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor Label { width: parent.width @@ -52,13 +59,14 @@ TableView { height: parent.height anchors.centerIn: parent onPressed: { - Globals.clearHighlightedRows(); tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; + if (_currentSelectedIndex == row) { + Globals.currentSelectedTable = null; + _currentSelectedIndex = -1; } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); + Globals.currentSelectedTable = tableView; + _currentSelectedIndex = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(_currentSelectedIndex)); } } } diff --git a/resources/view.qml b/resources/view.qml index a8fb42880..85573e643 100644 --- a/resources/view.qml +++ b/resources/view.qml @@ -28,7 +28,7 @@ ApplicationWindow { onActivated: { textEdit.selectAll(); textEdit.copy(); - Globals.clearHighlightedRows(); + Globals.currentSelectedTable = null; } } From 5153cc0809e95cc1d20a200594fc9e908bb58251 Mon Sep 17 00:00:00 2001 From: Keith Kyzivat Date: Thu, 2 Dec 2021 17:12:22 -0500 Subject: [PATCH 05/10] Prevent table rows from drawing over header Prevent the SolutionTable rows from drawing over the table header. They were drawing outside of the boundary of their item. The solution is to turn on clipping. Clipping is not enabled by default because it does incur some performance penalty, however in this case it is pretty negligible. I also removed clipping for the items in the table header, as there was no reason to clip those - they do not draw outside of their boundaries. --- resources/SolutionTabComponents/SolutionTable.qml | 1 - resources/TableComponents/SwiftTableView.qml | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/SolutionTabComponents/SolutionTable.qml b/resources/SolutionTabComponents/SolutionTable.qml index 6bb97fa76..30c210992 100644 --- a/resources/SolutionTabComponents/SolutionTable.qml +++ b/resources/SolutionTabComponents/SolutionTable.qml @@ -59,7 +59,6 @@ Item { verticalAlignment: Text.AlignVCenter text: tableView.model.columns[index].display elide: Text.ElideRight - clip: true font.family: Constants.genericTable.fontFamily font.pointSize: Constants.largePointSize } diff --git a/resources/TableComponents/SwiftTableView.qml b/resources/TableComponents/SwiftTableView.qml index d2a65a6f0..f0f8391bc 100644 --- a/resources/TableComponents/SwiftTableView.qml +++ b/resources/TableComponents/SwiftTableView.qml @@ -13,6 +13,7 @@ TableView { property int delegateBorderWidth: Constants.genericTable.borderWidth property color delegateBorderColor: Constants.genericTable.borderColor + clip: true columnSpacing: -1 rowSpacing: -1 columnWidthProvider: function(column) { From 83105259041ac3addcce647460050393692d6dfc Mon Sep 17 00:00:00 2001 From: Keith Kyzivat Date: Thu, 2 Dec 2021 17:16:51 -0500 Subject: [PATCH 06/10] Remove Layout.preferredHeight from table header * Remove Layout.preferredHeight from Solution table's HorizontalHeaderView, as it already defines it's own height to be that value. --- resources/SolutionTabComponents/SolutionTable.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/SolutionTabComponents/SolutionTable.qml b/resources/SolutionTabComponents/SolutionTable.qml index 30c210992..dd6d76bca 100644 --- a/resources/SolutionTabComponents/SolutionTable.qml +++ b/resources/SolutionTabComponents/SolutionTable.qml @@ -45,7 +45,6 @@ Item { interactive: false syncView: tableView Layout.fillWidth: true - Layout.preferredHeight: Constants.genericTable.cellHeight delegate: Rectangle { implicitWidth: columnWidths[index] From 1676a91133f37e457929cfee4719ab1ceb08d14d Mon Sep 17 00:00:00 2001 From: Keith Kyzivat Date: Thu, 2 Dec 2021 17:18:31 -0500 Subject: [PATCH 07/10] Use click instead of press for table row selection * Select table rows on a mouse click instead of a mouse press. This is so that one can flick scroll a table view without selecting a row. --- resources/TableComponents/SwiftTableView.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/TableComponents/SwiftTableView.qml b/resources/TableComponents/SwiftTableView.qml index f0f8391bc..03eee8028 100644 --- a/resources/TableComponents/SwiftTableView.qml +++ b/resources/TableComponents/SwiftTableView.qml @@ -59,7 +59,7 @@ TableView { width: parent.width height: parent.height anchors.centerIn: parent - onPressed: { + onClicked: { tableView.focus = true; if (_currentSelectedIndex == row) { Globals.currentSelectedTable = null; From 5e058cdea8e18315756421dc44fe54b28668a967 Mon Sep 17 00:00:00 2001 From: John Michael Burke Date: Thu, 2 Dec 2021 13:21:16 -0800 Subject: [PATCH 08/10] Apply SwiftTableView all over. --- .../AdvancedTabComponents/MetricsMonitor.qml | 65 +---- .../AdvancedTabComponents/NetworkInfo.qml | 63 +---- .../BaselineTabComponents/BaselineTable.qml | 181 +++++-------- resources/Constants/Constants.qml | 2 + resources/Constants/Globals.qml | 1 + resources/LogPanel.qml | 65 +---- resources/SettingsTab.qml | 22 +- .../InsSettingsPopup.qml | 65 +---- .../SettingsTabComponents/SettingsTable.qml | 249 ++++++++++-------- .../SolutionTabComponents/SolutionTable.qml | 181 +++++-------- resources/TableComponents/SwiftTableView.qml | 26 +- resources/view.qml | 2 +- 12 files changed, 324 insertions(+), 598 deletions(-) diff --git a/resources/AdvancedTabComponents/MetricsMonitor.qml b/resources/AdvancedTabComponents/MetricsMonitor.qml index 021b91df2..1b6ae6578 100644 --- a/resources/AdvancedTabComponents/MetricsMonitor.qml +++ b/resources/AdvancedTabComponents/MetricsMonitor.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtCharts 2.2 import QtQuick 2.15 @@ -7,7 +8,6 @@ import QtQuick.Layouts 1.15 import SwiftConsole 1.0 Item { - property variant columnWidths: [width / 2, width / 2] property real mouse_x: 0 property variant entries: [] property bool csacReceived: false @@ -28,6 +28,8 @@ Item { } Rectangle { + property variant columnWidths: [width / 2, width / 2] + Layout.fillWidth: true Layout.fillHeight: true clip: true @@ -92,30 +94,14 @@ Item { } - TableView { + SwiftTableView { id: tableView - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + columnWidths: parent.columnWidths model: TableModel { id: tableModel @@ -132,41 +118,6 @@ Item { } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - - } - } Timer { diff --git a/resources/AdvancedTabComponents/NetworkInfo.qml b/resources/AdvancedTabComponents/NetworkInfo.qml index d8d59d95b..6270e95fc 100644 --- a/resources/AdvancedTabComponents/NetworkInfo.qml +++ b/resources/AdvancedTabComponents/NetworkInfo.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtQuick 2.15 import QtQuick.Controls 2.15 @@ -15,11 +16,8 @@ ColumnLayout { HorizontalHeaderView { id: horizontalHeader - Layout.fillWidth: true - Layout.preferredHeight: Constants.genericTable.cellHeight interactive: false syncView: tableView - z: Constants.genericTable.headerZOffset delegate: Rectangle { implicitWidth: columnWidths[index] @@ -77,32 +75,12 @@ ColumnLayout { } - TableView { + SwiftTableView { id: tableView - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds Layout.fillWidth: true Layout.fillHeight: true - onWidthChanged: { - tableView.forceLayout(); - } - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + columnWidths: parent.columnWidths model: TableModel { rows: [Constants.networking.defaultList] @@ -129,41 +107,6 @@ ColumnLayout { } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - - } - } Timer { diff --git a/resources/BaselineTabComponents/BaselineTable.qml b/resources/BaselineTabComponents/BaselineTable.qml index ef904e25b..f9ea17376 100644 --- a/resources/BaselineTabComponents/BaselineTable.qml +++ b/resources/BaselineTabComponents/BaselineTable.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtCharts 2.2 import QtQuick 2.15 @@ -39,145 +40,85 @@ Item { width: parent.width height: parent.height - Item { - Layout.fillHeight: true - Layout.fillWidth: true + HorizontalHeaderView { + id: horizontalHeader + + interactive: false + syncView: tableView + + delegate: Rectangle { + implicitWidth: columnWidths[index] + implicitHeight: Constants.genericTable.cellHeight + border.color: Constants.genericTable.borderColor + + Label { + width: parent.width + anchors.centerIn: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: tableView.model.columns[index].display + elide: Text.ElideRight + clip: true + font.family: Constants.genericTable.fontFamily + font.pointSize: Constants.largePointSize + } - HorizontalHeaderView { - id: horizontalHeader - - interactive: false - syncView: tableView - z: Constants.genericTable.headerZOffset - - delegate: Rectangle { - implicitWidth: columnWidths[index] - implicitHeight: Constants.genericTable.cellHeight - border.color: Constants.genericTable.borderColor - - Label { - width: parent.width - anchors.centerIn: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: tableView.model.columns[index].display - elide: Text.ElideRight - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize + MouseArea { + width: Constants.genericTable.mouseAreaResizeWidth + height: parent.height + anchors.right: parent.right + cursorShape: Qt.SizeHorCursor + onPressed: { + mouse_x = mouseX; } - - MouseArea { - width: Constants.genericTable.mouseAreaResizeWidth - height: parent.height - anchors.right: parent.right - cursorShape: Qt.SizeHorCursor - onPressed: { - mouse_x = mouseX; - } - onPositionChanged: { - if (pressed) { - var delta_x = (mouseX - mouse_x); - columnWidths[index] += delta_x; - syncColumnWidthsWithSplitView(); - } + onPositionChanged: { + if (pressed) { + var delta_x = (mouseX - mouse_x); + columnWidths[index] += delta_x; + syncColumnWidthsWithSplitView(); } } + } - gradient: Gradient { - GradientStop { - position: 0 - color: Constants.genericTable.cellColor - } - - GradientStop { - position: 1 - color: Constants.genericTable.gradientColor - } + gradient: Gradient { + GradientStop { + position: 0 + color: Constants.genericTable.cellColor + } + GradientStop { + position: 1 + color: Constants.genericTable.gradientColor } } } - TableView { - id: tableView - - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - onWidthChanged: syncColumnWidthsWithSplitView() - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds - anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + } - model: TableModel { - id: tableModel + SwiftTableView { + id: tableView - rows: [{ - "Item": "", - "Value": "" - }] + onWidthChanged: syncColumnWidthsWithSplitView() + Layout.fillWidth: true + Layout.fillHeight: true + columnWidths: parent.parent.columnWidths - TableModelColumn { - display: "Item" - } + model: TableModel { + id: tableModel - TableModelColumn { - display: "Value" - } + rows: [{ + "Item": "", + "Value": "" + }] + TableModelColumn { + display: "Item" } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - + TableModelColumn { + display: "Value" } } diff --git a/resources/Constants/Constants.qml b/resources/Constants/Constants.qml index 786540ca8..015f7370d 100644 --- a/resources/Constants/Constants.qml +++ b/resources/Constants/Constants.qml @@ -428,6 +428,7 @@ QtObject { readonly property int logLevelMenuHeight: 100 readonly property int dropdownButtonPadding: 0 readonly property int dropdownButtonWidth: 20 + readonly property int delegateBorderWidth: 0 } settingsTab: QtObject { @@ -442,6 +443,7 @@ QtObject { readonly property string tableLeftColumnHeader: "Name" readonly property string tableRightColumnHeader: "Value" readonly property int maximumWidth: 300 + readonly property int layoutSpacing: 0 } solutionTable: QtObject { diff --git a/resources/Constants/Globals.qml b/resources/Constants/Globals.qml index 5de788ecd..13040efdc 100644 --- a/resources/Constants/Globals.qml +++ b/resources/Constants/Globals.qml @@ -17,6 +17,7 @@ QtObject { property bool connected_at_least_once: false property string copyClipboard: "" property var tablesWithHighlights: [] + property var currentSelectedTable: null function clearHighlightedRows() { for (var i in tablesWithHighlights) { diff --git a/resources/LogPanel.qml b/resources/LogPanel.qml index 395b7f198..49412848e 100644 --- a/resources/LogPanel.qml +++ b/resources/LogPanel.qml @@ -1,4 +1,5 @@ import "./Constants" +import "./TableComponents" import Qt.labs.qmlmodels 1.0 import QtQuick 2.15 import QtQuick.Controls 2.15 @@ -202,33 +203,15 @@ Item { } - TableView { + SwiftTableView { id: tableView - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - onWidthChanged: { - tableView.forceLayout(); - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + columnWidths: parent.parent.columnWidths + delegateBorderWidth: Constants.logPanel.delegateBorderWidth model: TableModel { id: tableModel @@ -257,40 +240,6 @@ Item { } - delegate: Rectangle { - implicitHeight: Constants.logPanel.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - - } - } Timer { diff --git a/resources/SettingsTab.qml b/resources/SettingsTab.qml index f1794bb47..ffdd01ebc 100644 --- a/resources/SettingsTab.qml +++ b/resources/SettingsTab.qml @@ -135,30 +135,36 @@ MainTab { standardButtons: StandardButton.Ok } - RowLayout { + SplitView { anchors.fill: parent + orientation: Qt.Horizontal + width: parent.width + height: parent.height Rectangle { - id: leftPanel - - width: settingsTable.width - Layout.fillHeight: true + SplitView.minimumWidth: Constants.settingsTable.maximumWidth + SplitView.fillHeight: true SettingsTabComponents.SettingsTable { id: settingsTable + anchors.fill: parent + // anchors.centerIn: parent + // width: parent.width + // height: parent.height + + onSelectedRowIdxChanged: { if (!!selectedRow()) settingsPane.selectedRow = selectedRow(); } } - } + ColumnLayout { - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - Layout.maximumWidth: parent.width - leftPanel.width + SplitView.fillWidth: true spacing: 3 RowLayout { diff --git a/resources/SettingsTabComponents/InsSettingsPopup.qml b/resources/SettingsTabComponents/InsSettingsPopup.qml index 5a8499279..117f74d55 100644 --- a/resources/SettingsTabComponents/InsSettingsPopup.qml +++ b/resources/SettingsTabComponents/InsSettingsPopup.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtQuick 2.15 import QtQuick.Controls 2.15 @@ -6,7 +7,6 @@ import QtQuick.Layouts 1.15 import SwiftConsole 1.0 Item { - property variant columnWidths: [layout.width / 3, layout.width / 3, layout.width / 3] property real mouse_x: 0 property alias insPopup: dialog property variant settings: [] @@ -66,6 +66,8 @@ Item { } ColumnLayout { + property variant columnWidths: [layout.width / 3, layout.width / 3, layout.width / 3] + spacing: 0 width: parent.width height: Constants.insSettingsPopup.tableHeight @@ -76,7 +78,6 @@ Item { interactive: false syncView: tableView - z: Constants.genericTable.headerZOffset delegate: Rectangle { implicitWidth: columnWidths[index] @@ -131,29 +132,12 @@ Item { } - TableView { + SwiftTableView { id: tableView - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds - height: parent.height - horizontalHeader.height - width: parent.width - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + Layout.fillWidth: true + Layout.fillHeight: true + columnWidths: parent.columnWidths model: TableModel { id: tableModel @@ -174,41 +158,6 @@ Item { } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - - } - } } diff --git a/resources/SettingsTabComponents/SettingsTable.qml b/resources/SettingsTabComponents/SettingsTable.qml index 4eb9f1e63..10695d930 100644 --- a/resources/SettingsTabComponents/SettingsTable.qml +++ b/resources/SettingsTabComponents/SettingsTable.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtCharts 2.2 import QtQuick 2.15 @@ -6,15 +7,17 @@ import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import SwiftConsole 1.0 -Item { - property variant columnWidths: [Constants.settingsTable.maximumWidth * 0.4, Constants.settingsTable.maximumWidth * 0.6] - property alias selectedRowIdx: tableView.selectedRow +Rectangle { + + property alias selectedRowIdx: tableView._currentSelectedIndex property var rowOffsets: ({ }) property bool showExpert: false property bool lastShowExpert: false property alias table: settingsTableEntries.entries + + function isHeader(entry) { return !entry.hasOwnProperty("name"); } @@ -45,146 +48,173 @@ Item { }; } - width: columnWidths[0] + columnWidths[1] + + + anchors.fill: parent + width: parent.width height: parent.height + SettingsTableEntries { id: settingsTableEntries } ColumnLayout { + + anchors.fill: parent width: parent.width height: parent.height - - Item { - Layout.fillHeight: true - Layout.fillWidth: true - - HorizontalHeaderView { - id: horizontalHeader - - interactive: false - syncView: tableView - z: Constants.genericTable.headerZOffset - - delegate: Rectangle { - implicitWidth: columnWidths[index] - implicitHeight: Constants.genericTable.cellHeight - border.color: Constants.genericTable.borderColor - - Label { - width: parent.width - anchors.centerIn: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: tableView.model.columns[index].display - elide: Text.ElideRight - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize + spacing: Constants.settingsTable.layoutSpacing + + HorizontalHeaderView { + + id: horizontalHeader + + interactive: false + syncView: tableView + + delegate: Rectangle { + implicitWidth: tableView.columnWidths[index] + implicitHeight: Constants.genericTable.cellHeight + border.color: Constants.genericTable.borderColor + + Label { + width: parent.width + anchors.centerIn: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: tableView.model.columns[index].display + elide: Text.ElideRight + clip: true + font.family: Constants.genericTable.fontFamily + font.pointSize: Constants.largePointSize + } + // MouseArea { + // width: Constants.genericTable.mouseAreaResizeWidth + // height: parent.height + // anchors.right: parent.right + // cursorShape: Qt.SizeHorCursor + // onPressed: { + // mouse_x = mouseX; + // } + // onPositionChanged: { + // if (pressed) { + // var delta_x = (mouseX - mouse_x); + // columnWidths[index] += delta_x; + // syncColumnWidthsWithSplitView(); + // } + // } + // } + + gradient: Gradient { + GradientStop { + position: 0 + color: Constants.genericTable.cellColor } - gradient: Gradient { - GradientStop { - position: 0 - color: Constants.genericTable.cellColor - } - - GradientStop { - position: 1 - color: Constants.genericTable.gradientColor - } - + GradientStop { + position: 1 + color: Constants.genericTable.gradientColor } } } - TableView { - id: tableView + } - property int selectedRow: -1 + SwiftTableView { + id: tableView + + // function syncColumnWidthsWithSplitView() { + // var oldcols = columnWidths.slice(); + // columnWidths[0] = Math.max(columnWidths[0], Constants.baselineTable.defaultColumnWidth); + // let column_width_sum = columnWidths[0] + columnWidths[1]; + // if (column_width_sum != tableView.width) { + // let final_column_diff = tableView.width - column_width_sum; + // columnWidths[1] += final_column_diff; + // } + // if (columnWidths != oldcols) + // tableView.forceLayout(); + + // } + onWidthChanged: { + print(this.x, this.y, this.width, this.height) + + print(parent.width) + columnWidths = [parent.width * 0.4, parent.width * 0.6] + } - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds - anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height + columnWidths: [parent.width * 0.4, parent.width * 0.6] - ScrollBar.horizontal: ScrollBar { + Layout.fillWidth: true + Layout.fillHeight: true + + model: TableModel { + id: tableModel + + rows: [{ + "Name": "", + "Value": "" + }] + + TableModelColumn { + display: "Name" } - ScrollBar.vertical: ScrollBar { + TableModelColumn { + display: "Value" } - model: TableModel { - id: tableModel + } - TableModelColumn { - display: "Name" - } + delegate: Rectangle { + implicitHeight: Constants.genericTable.cellHeight + implicitWidth: tableView.columnWidthProvider(column) + border.color: tableView.delegateBorderColor + border.width: tableView.delegateBorderWidth + color: { + var item = tableView.model.getRow(row); + if (item[Constants.settingsTable.tableRightColumnHeader] == "") + return Constants.genericTable.borderColor; - TableModelColumn { - display: "Value" - } + if (selectedRowIdx == row) + return Constants.genericTable.cellHighlightedColor; + return Constants.genericTable.cellColor; } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: { + Label { + width: parent.width + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + clip: true + font.family: Constants.genericTable.fontFamily + font.pointSize: Constants.largePointSize + font.bold: { var item = tableView.model.getRow(row); - if (item[Constants.settingsTable.tableRightColumnHeader] == "") - return Constants.genericTable.borderColor; - - if (tableView.selectedRow == row) - return Constants.genericTable.cellHighlightedColor; - - return Constants.genericTable.cellColor; - } - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - font.bold: { - var item = tableView.model.getRow(row); - return item[Constants.settingsTable.tableRightColumnHeader] == ""; - } - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding + return item[Constants.settingsTable.tableRightColumnHeader] == ""; } + text: model.display + elide: Text.ElideRight + padding: Constants.genericTable.padding + } - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } + MouseArea { + width: parent.width + height: parent.height + anchors.centerIn: parent + onPressed: { + tableView.focus = true; + if (tableView._currentSelectedIndex == row) { + Globals.currentSelectedTable = null; + tableView._currentSelectedIndex = -1; + } else { + Globals.currentSelectedTable = tableView; + tableView._currentSelectedIndex = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(_currentSelectedIndex)); } } - } } @@ -196,6 +226,7 @@ Item { running: true repeat: true onTriggered: { + // print(tableView.columnWidths) settings_table_model.fill_console_points(settingsTableEntries); var entries = settingsTableEntries.entries; if (!entries.length) { diff --git a/resources/SolutionTabComponents/SolutionTable.qml b/resources/SolutionTabComponents/SolutionTable.qml index 0d2168e6d..6bb97fa76 100644 --- a/resources/SolutionTabComponents/SolutionTable.qml +++ b/resources/SolutionTabComponents/SolutionTable.qml @@ -1,4 +1,5 @@ import "../Constants" +import "../TableComponents" import Qt.labs.qmlmodels 1.0 import QtCharts 2.2 import QtQuick 2.15 @@ -38,145 +39,87 @@ Item { width: parent.width height: parent.height - Item { - Layout.fillHeight: true + HorizontalHeaderView { + id: horizontalHeader + + interactive: false + syncView: tableView Layout.fillWidth: true + Layout.preferredHeight: Constants.genericTable.cellHeight + + delegate: Rectangle { + implicitWidth: columnWidths[index] + implicitHeight: Constants.genericTable.cellHeight + border.color: Constants.genericTable.borderColor + + Label { + width: parent.width + anchors.centerIn: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: tableView.model.columns[index].display + elide: Text.ElideRight + clip: true + font.family: Constants.genericTable.fontFamily + font.pointSize: Constants.largePointSize + } - HorizontalHeaderView { - id: horizontalHeader - - interactive: false - syncView: tableView - z: Constants.genericTable.headerZOffset - - delegate: Rectangle { - implicitWidth: columnWidths[index] - implicitHeight: Constants.genericTable.cellHeight - border.color: Constants.genericTable.borderColor - - Label { - width: parent.width - anchors.centerIn: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: tableView.model.columns[index].display - elide: Text.ElideRight - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize + MouseArea { + width: Constants.genericTable.mouseAreaResizeWidth + height: parent.height + anchors.right: parent.right + cursorShape: Qt.SizeHorCursor + onPressed: { + mouse_x = mouseX; } - - MouseArea { - width: Constants.genericTable.mouseAreaResizeWidth - height: parent.height - anchors.right: parent.right - cursorShape: Qt.SizeHorCursor - onPressed: { - mouse_x = mouseX; - } - onPositionChanged: { - if (pressed) { - var delta_x = (mouseX - mouse_x); - columnWidths[index] += delta_x; - syncColumnWidthsWithSplitView(); - } + onPositionChanged: { + if (pressed) { + var delta_x = (mouseX - mouse_x); + columnWidths[index] += delta_x; + syncColumnWidthsWithSplitView(); } } + } - gradient: Gradient { - GradientStop { - position: 0 - color: Constants.genericTable.cellColor - } - - GradientStop { - position: 1 - color: Constants.genericTable.gradientColor - } + gradient: Gradient { + GradientStop { + position: 0 + color: Constants.genericTable.cellColor + } + GradientStop { + position: 1 + color: Constants.genericTable.gradientColor } } } - TableView { - id: tableView - - property int selectedRow: -1 - - Component.onCompleted: { - Globals.tablesWithHighlights.push(this); - } - onWidthChanged: syncColumnWidthsWithSplitView() - columnSpacing: -1 - rowSpacing: -1 - columnWidthProvider: function(column) { - return columnWidths[column]; - } - reuseItems: true - boundsBehavior: Flickable.StopAtBounds - anchors.top: horizontalHeader.bottom - width: parent.width - height: parent.height - horizontalHeader.height - - ScrollBar.horizontal: ScrollBar { - } - - ScrollBar.vertical: ScrollBar { - } + } - model: TableModel { - id: tableModel + SwiftTableView { + id: tableView - rows: [{ - "Item": "", - "Value": "" - }] + Layout.fillWidth: true + Layout.fillHeight: true + columnWidths: parent.parent.columnWidths + onWidthChanged: syncColumnWidthsWithSplitView() - TableModelColumn { - display: "Item" - } + model: TableModel { + id: tableModel - TableModelColumn { - display: "Value" - } + rows: [{ + "Item": "", + "Value": "" + }] + TableModelColumn { + display: "Item" } - delegate: Rectangle { - implicitHeight: Constants.genericTable.cellHeight - implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor - - Label { - width: parent.width - horizontalAlignment: Text.AlignLeft - clip: true - font.family: Constants.genericTable.fontFamily - font.pointSize: Constants.largePointSize - text: model.display - elide: Text.ElideRight - padding: Constants.genericTable.padding - } - - MouseArea { - width: parent.width - height: parent.height - anchors.centerIn: parent - onPressed: { - Globals.clearHighlightedRows(); - tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; - } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); - } - } - } - + TableModelColumn { + display: "Value" } } diff --git a/resources/TableComponents/SwiftTableView.qml b/resources/TableComponents/SwiftTableView.qml index fad5ebaa2..3b6b58529 100644 --- a/resources/TableComponents/SwiftTableView.qml +++ b/resources/TableComponents/SwiftTableView.qml @@ -8,6 +8,10 @@ TableView { property variant columnWidths: [] property int selectedRow: -1 + property int _currentSelectedIndex: -1 + property int currentSelectedIndex: Globals.currentSelectedTable == this ? _currentSelectedIndex : -1 + property int delegateBorderWidth: Constants.genericTable.borderWidth + property color delegateBorderColor: Constants.genericTable.borderColor columnSpacing: -1 rowSpacing: -1 @@ -16,13 +20,16 @@ TableView { } reuseItems: true boundsBehavior: Flickable.StopAtBounds + clip: true Component.onCompleted: { console.assert(columnWidths.length == model.columnCount, "length of columnWidths does not match column count."); - Globals.tablesWithHighlights.push(this); } onWidthChanged: { tableView.forceLayout(); } + onFocusChanged: { + _currentSelectedIndex = -1; + } ScrollBar.horizontal: ScrollBar { } @@ -33,12 +40,14 @@ TableView { delegate: Rectangle { implicitHeight: Constants.genericTable.cellHeight implicitWidth: tableView.columnWidthProvider(column) - border.color: Constants.genericTable.borderColor - color: row == tableView.selectedRow ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor + border.color: delegateBorderColor + border.width: delegateBorderWidth + color: row == currentSelectedIndex ? Constants.genericTable.cellHighlightedColor : Constants.genericTable.cellColor Label { width: parent.width horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter clip: true font.family: Constants.genericTable.fontFamily font.pointSize: Constants.largePointSize @@ -52,13 +61,14 @@ TableView { height: parent.height anchors.centerIn: parent onPressed: { - Globals.clearHighlightedRows(); tableView.focus = true; - if (tableView.selectedRow == row) { - tableView.selectedRow = -1; + if (_currentSelectedIndex == row) { + Globals.currentSelectedTable = null; + _currentSelectedIndex = -1; } else { - tableView.selectedRow = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView.selectedRow)); + Globals.currentSelectedTable = tableView; + _currentSelectedIndex = row; + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(_currentSelectedIndex)); } } } diff --git a/resources/view.qml b/resources/view.qml index a8fb42880..85573e643 100644 --- a/resources/view.qml +++ b/resources/view.qml @@ -28,7 +28,7 @@ ApplicationWindow { onActivated: { textEdit.selectAll(); textEdit.copy(); - Globals.clearHighlightedRows(); + Globals.currentSelectedTable = null; } } From a1cdbc822b10d8c13c699b517d03575c5b4a8842 Mon Sep 17 00:00:00 2001 From: John Michael Burke Date: Fri, 3 Dec 2021 11:07:37 -0800 Subject: [PATCH 09/10] Clean up settings table. --- resources/SettingsTab.qml | 47 ++++++----- .../SettingsTabComponents/SettingsTable.qml | 82 ++++++++----------- 2 files changed, 57 insertions(+), 72 deletions(-) diff --git a/resources/SettingsTab.qml b/resources/SettingsTab.qml index ffdd01ebc..ccf59d1ff 100644 --- a/resources/SettingsTab.qml +++ b/resources/SettingsTab.qml @@ -141,41 +141,31 @@ MainTab { width: parent.width height: parent.height - Rectangle { - SplitView.minimumWidth: Constants.settingsTable.maximumWidth - SplitView.fillHeight: true - - SettingsTabComponents.SettingsTable { - id: settingsTable - - anchors.fill: parent - // anchors.centerIn: parent - // width: parent.width - // height: parent.height - + SettingsTabComponents.SettingsTable { + id: settingsTable - onSelectedRowIdxChanged: { - if (!!selectedRow()) - settingsPane.selectedRow = selectedRow(); + SplitView.minimumWidth: Constants.settingsTable.maximumWidth + onSelectedRowIdxChanged: { + if (!!selectedRow()) + settingsPane.selectedRow = selectedRow(); - } } } - ColumnLayout { SplitView.fillWidth: true spacing: 3 RowLayout { - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - Layout.preferredHeight: 50 + Layout.fillWidth: true Button { text: "Save to Device" icon.source: Constants.icons.savePath icon.width: Constants.settingsTab.buttonIconWidth icon.height: Constants.settingsTab.buttonIconHeight + display: AbstractButton.TextUnderIcon + flat: true onClicked: data_model.settings_save_request() } @@ -184,6 +174,8 @@ MainTab { icon.source: Constants.icons.exportPath icon.width: Constants.settingsTab.buttonIconWidth icon.height: Constants.settingsTab.buttonIconHeight + display: AbstractButton.TextUnderIcon + flat: true onClicked: exportDialog.visible = true } @@ -192,6 +184,8 @@ MainTab { icon.source: Constants.icons.importPath icon.width: Constants.settingsTab.buttonIconWidth icon.height: Constants.settingsTab.buttonIconHeight + display: AbstractButton.TextUnderIcon + flat: true onClicked: importDialog.visible = true } @@ -200,6 +194,8 @@ MainTab { icon.source: Constants.icons.warningPath icon.width: Constants.settingsTab.buttonIconWidth icon.height: Constants.settingsTab.buttonIconHeight + display: AbstractButton.TextUnderIcon + flat: true onClicked: resetDialog.visible = true } @@ -209,20 +205,23 @@ MainTab { icon.source: Constants.icons.centerOnButtonUrl icon.width: Constants.settingsTab.buttonIconWidth icon.height: Constants.settingsTab.buttonIconHeight + display: AbstractButton.TextUnderIcon + flat: true onClicked: autoSurveyDialog.visible = true } } RowLayout { - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - Layout.preferredHeight: 50 + Layout.fillWidth: true Button { text: "Refresh from device" icon.source: Constants.icons.refreshPath icon.width: Constants.settingsTab.buttonIconWidth icon.height: Constants.settingsTab.buttonIconHeight + display: AbstractButton.TextUnderIcon + flat: true onClicked: data_model.settings_refresh() } @@ -243,7 +242,6 @@ MainTab { RowLayout { Layout.alignment: Qt.AlignLeft | Qt.AlignTop - Layout.maximumWidth: parent.width visible: { var row = selectedRow(); if (row && row.hasOwnProperty("valueOnDevice")) @@ -258,6 +256,11 @@ MainTab { } + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + } } diff --git a/resources/SettingsTabComponents/SettingsTable.qml b/resources/SettingsTabComponents/SettingsTable.qml index 10695d930..a2a1f1b78 100644 --- a/resources/SettingsTabComponents/SettingsTable.qml +++ b/resources/SettingsTabComponents/SettingsTable.qml @@ -8,15 +8,13 @@ import QtQuick.Layouts 1.15 import SwiftConsole 1.0 Rectangle { - property alias selectedRowIdx: tableView._currentSelectedIndex property var rowOffsets: ({ }) property bool showExpert: false property bool lastShowExpert: false property alias table: settingsTableEntries.entries - - + property real mouse_x: 0 function isHeader(entry) { return !entry.hasOwnProperty("name"); @@ -48,26 +46,22 @@ Rectangle { }; } - - - anchors.fill: parent - width: parent.width - height: parent.height - + onWidthChanged: { + tableView.forceLayout(); + } SettingsTableEntries { id: settingsTableEntries } ColumnLayout { - - anchors.fill: parent + property variant columnWidths: [parent.width * 0.4, parent.width * 0.6] + width: parent.width height: parent.height spacing: Constants.settingsTable.layoutSpacing HorizontalHeaderView { - id: horizontalHeader interactive: false @@ -89,22 +83,28 @@ Rectangle { font.family: Constants.genericTable.fontFamily font.pointSize: Constants.largePointSize } - // MouseArea { - // width: Constants.genericTable.mouseAreaResizeWidth - // height: parent.height - // anchors.right: parent.right - // cursorShape: Qt.SizeHorCursor - // onPressed: { - // mouse_x = mouseX; - // } - // onPositionChanged: { - // if (pressed) { - // var delta_x = (mouseX - mouse_x); - // columnWidths[index] += delta_x; - // syncColumnWidthsWithSplitView(); - // } - // } - // } + + MouseArea { + width: Constants.genericTable.mouseAreaResizeWidth + height: parent.height + anchors.right: parent.right + cursorShape: Qt.SizeHorCursor + onPressed: { + mouse_x = mouseX; + } + onPositionChanged: { + if (pressed) { + var delta_x = (mouseX - mouse_x); + var next_idx = (index + 1) % 2; + var min_width = tableView.width / 4; + if (tableView.columnWidths[index] + delta_x > min_width && tableView.columnWidths[next_idx] - delta_x > min_width) { + tableView.columnWidths[index] += delta_x; + tableView.columnWidths[next_idx] -= delta_x; + } + tableView.forceLayout(); + } + } + } gradient: Gradient { GradientStop { @@ -126,27 +126,10 @@ Rectangle { SwiftTableView { id: tableView - // function syncColumnWidthsWithSplitView() { - // var oldcols = columnWidths.slice(); - // columnWidths[0] = Math.max(columnWidths[0], Constants.baselineTable.defaultColumnWidth); - // let column_width_sum = columnWidths[0] + columnWidths[1]; - // if (column_width_sum != tableView.width) { - // let final_column_diff = tableView.width - column_width_sum; - // columnWidths[1] += final_column_diff; - // } - // if (columnWidths != oldcols) - // tableView.forceLayout(); - - // } - onWidthChanged: { - print(this.x, this.y, this.width, this.height) - - print(parent.width) - columnWidths = [parent.width * 0.4, parent.width * 0.6] + onVisibleChanged: { + tableView.model.clear(); } - - columnWidths: [parent.width * 0.4, parent.width * 0.6] - + columnWidths: parent.columnWidths Layout.fillWidth: true Layout.fillHeight: true @@ -212,7 +195,7 @@ Rectangle { } else { Globals.currentSelectedTable = tableView; tableView._currentSelectedIndex = row; - Globals.copyClipboard = JSON.stringify(tableView.model.getRow(_currentSelectedIndex)); + Globals.copyClipboard = JSON.stringify(tableView.model.getRow(tableView._currentSelectedIndex)); } } } @@ -226,7 +209,6 @@ Rectangle { running: true repeat: true onTriggered: { - // print(tableView.columnWidths) settings_table_model.fill_console_points(settingsTableEntries); var entries = settingsTableEntries.entries; if (!entries.length) { From 56948e23096515c645363246f9e2e531c09efec9 Mon Sep 17 00:00:00 2001 From: John Michael Burke Date: Fri, 10 Dec 2021 14:24:06 -0800 Subject: [PATCH 10/10] Fix slideview for settings table. --- .../BaselineTabComponents/BaselineTable.qml | 20 +++++++---- resources/Constants/Constants.qml | 2 +- resources/SettingsTab.qml | 6 ++-- .../SettingsTabComponents/SettingsPane.qml | 1 + .../SettingsTabComponents/SettingsTable.qml | 8 ++--- .../SolutionTabComponents/SolutionTable.qml | 33 ++++++++----------- resources/TableComponents/SwiftTableView.qml | 7 ++-- 7 files changed, 41 insertions(+), 36 deletions(-) diff --git a/resources/BaselineTabComponents/BaselineTable.qml b/resources/BaselineTabComponents/BaselineTable.qml index f9ea17376..1518544c6 100644 --- a/resources/BaselineTabComponents/BaselineTable.qml +++ b/resources/BaselineTabComponents/BaselineTable.qml @@ -10,7 +10,6 @@ import SwiftConsole 1.0 Item { id: baselineTable - property variant columnWidths: [Constants.baselineTable.defaultColumnWidth, Constants.baselineTable.defaultColumnWidth] property real mouse_x: 0 function syncColumnWidthsWithSplitView() { @@ -36,6 +35,8 @@ Item { ColumnLayout { id: baselineTableRowLayout + property variant columnWidths: [parent.width * 0.4, parent.width * 0.6] + spacing: Constants.baselineTable.tableHeaderTableDataTableSpacing width: parent.width height: parent.height @@ -45,9 +46,10 @@ Item { interactive: false syncView: tableView + Layout.fillWidth: true delegate: Rectangle { - implicitWidth: columnWidths[index] + implicitWidth: tableView.columnWidths[index] implicitHeight: Constants.genericTable.cellHeight border.color: Constants.genericTable.borderColor @@ -68,14 +70,21 @@ Item { height: parent.height anchors.right: parent.right cursorShape: Qt.SizeHorCursor + enabled: index == 0 + visible: index == 0 onPressed: { mouse_x = mouseX; } onPositionChanged: { if (pressed) { var delta_x = (mouseX - mouse_x); - columnWidths[index] += delta_x; - syncColumnWidthsWithSplitView(); + var next_idx = (index + 1) % 2; + var min_width = tableView.width / 4; + if (tableView.columnWidths[index] + delta_x > min_width && tableView.columnWidths[next_idx] - delta_x > min_width) { + tableView.columnWidths[index] += delta_x; + tableView.columnWidths[next_idx] -= delta_x; + } + tableView.forceLayout(); } } } @@ -100,10 +109,9 @@ Item { SwiftTableView { id: tableView - onWidthChanged: syncColumnWidthsWithSplitView() Layout.fillWidth: true Layout.fillHeight: true - columnWidths: parent.parent.columnWidths + columnWidths: parent.columnWidths model: TableModel { id: tableModel diff --git a/resources/Constants/Constants.qml b/resources/Constants/Constants.qml index e89c81a94..93d4c7143 100644 --- a/resources/Constants/Constants.qml +++ b/resources/Constants/Constants.qml @@ -478,7 +478,7 @@ QtObject { settingsTable: QtObject { readonly property string tableLeftColumnHeader: "Name" readonly property string tableRightColumnHeader: "Value" - readonly property int maximumWidth: 300 + readonly property int minimumWidth: 300 readonly property int layoutSpacing: 0 } diff --git a/resources/SettingsTab.qml b/resources/SettingsTab.qml index ccf59d1ff..0e0cdb2d0 100644 --- a/resources/SettingsTab.qml +++ b/resources/SettingsTab.qml @@ -138,13 +138,11 @@ MainTab { SplitView { anchors.fill: parent orientation: Qt.Horizontal - width: parent.width - height: parent.height SettingsTabComponents.SettingsTable { id: settingsTable - SplitView.minimumWidth: Constants.settingsTable.maximumWidth + SplitView.minimumWidth: Constants.settingsTable.minimumWidth onSelectedRowIdxChanged: { if (!!selectedRow()) settingsPane.selectedRow = selectedRow(); @@ -154,6 +152,8 @@ MainTab { ColumnLayout { SplitView.fillWidth: true + SplitView.fillHeight: true + SplitView.minimumWidth: parent.width * 0.55 //Constants.settingsTable.minimumWidth spacing: 3 RowLayout { diff --git a/resources/SettingsTabComponents/SettingsPane.qml b/resources/SettingsTabComponents/SettingsPane.qml index ea9b7a419..b517760a0 100644 --- a/resources/SettingsTabComponents/SettingsPane.qml +++ b/resources/SettingsTabComponents/SettingsPane.qml @@ -215,6 +215,7 @@ Item { wrapMode: Text.Wrap font.family: Constants.genericTable.fontFamily font.pointSize: Constants.largePointSize + selectByMouse: true onEditingFinished: { data_model.settings_write_request(settingGroup, settingName, text); } diff --git a/resources/SettingsTabComponents/SettingsTable.qml b/resources/SettingsTabComponents/SettingsTable.qml index a2a1f1b78..11155145d 100644 --- a/resources/SettingsTabComponents/SettingsTable.qml +++ b/resources/SettingsTabComponents/SettingsTable.qml @@ -46,10 +46,6 @@ Rectangle { }; } - onWidthChanged: { - tableView.forceLayout(); - } - SettingsTableEntries { id: settingsTableEntries } @@ -66,6 +62,7 @@ Rectangle { interactive: false syncView: tableView + Layout.fillWidth: true delegate: Rectangle { implicitWidth: tableView.columnWidths[index] @@ -89,6 +86,8 @@ Rectangle { height: parent.height anchors.right: parent.right cursorShape: Qt.SizeHorCursor + enabled: index == 0 + visible: index == 0 onPressed: { mouse_x = mouseX; } @@ -132,6 +131,7 @@ Rectangle { columnWidths: parent.columnWidths Layout.fillWidth: true Layout.fillHeight: true + stayFocused: true model: TableModel { id: tableModel diff --git a/resources/SolutionTabComponents/SolutionTable.qml b/resources/SolutionTabComponents/SolutionTable.qml index 30c210992..f52870497 100644 --- a/resources/SolutionTabComponents/SolutionTable.qml +++ b/resources/SolutionTabComponents/SolutionTable.qml @@ -10,22 +10,8 @@ import SwiftConsole 1.0 Item { id: solutionTable - property variant columnWidths: [Constants.solutionTable.defaultColumnWidth, Constants.solutionTable.defaultColumnWidth] property real mouse_x: 0 - function syncColumnWidthsWithSplitView() { - var oldcols = columnWidths.slice(); - columnWidths[0] = Math.max(columnWidths[0], Constants.solutionTable.defaultColumnWidth); - let column_width_sum = columnWidths[0] + columnWidths[1]; - if (column_width_sum != tableView.width) { - let final_column_diff = tableView.width - column_width_sum; - columnWidths[1] += final_column_diff; - } - if (columnWidths != oldcols) - tableView.forceLayout(); - - } - implicitWidth: Constants.solutionTable.width SolutionTableEntries { @@ -35,6 +21,8 @@ Item { ColumnLayout { id: solutionTableRowLayout + property variant columnWidths: [parent.width * 0.4, parent.width * 0.6] + spacing: Constants.solutionTable.tableHeaderTableDataTableSpacing width: parent.width height: parent.height @@ -45,10 +33,9 @@ Item { interactive: false syncView: tableView Layout.fillWidth: true - Layout.preferredHeight: Constants.genericTable.cellHeight delegate: Rectangle { - implicitWidth: columnWidths[index] + implicitWidth: tableView.columnWidths[index] implicitHeight: Constants.genericTable.cellHeight border.color: Constants.genericTable.borderColor @@ -68,14 +55,21 @@ Item { height: parent.height anchors.right: parent.right cursorShape: Qt.SizeHorCursor + enabled: index == 0 + visible: index == 0 onPressed: { mouse_x = mouseX; } onPositionChanged: { if (pressed) { var delta_x = (mouseX - mouse_x); - columnWidths[index] += delta_x; - syncColumnWidthsWithSplitView(); + var next_idx = (index + 1) % 2; + var min_width = tableView.width / 4; + if (tableView.columnWidths[index] + delta_x > min_width && tableView.columnWidths[next_idx] - delta_x > min_width) { + tableView.columnWidths[index] += delta_x; + tableView.columnWidths[next_idx] -= delta_x; + } + tableView.forceLayout(); } } } @@ -102,8 +96,7 @@ Item { Layout.fillWidth: true Layout.fillHeight: true - columnWidths: parent.parent.columnWidths - onWidthChanged: syncColumnWidthsWithSplitView() + columnWidths: parent.columnWidths model: TableModel { id: tableModel diff --git a/resources/TableComponents/SwiftTableView.qml b/resources/TableComponents/SwiftTableView.qml index aa9dd2429..41172370d 100644 --- a/resources/TableComponents/SwiftTableView.qml +++ b/resources/TableComponents/SwiftTableView.qml @@ -9,7 +9,8 @@ TableView { property variant columnWidths: [] property int selectedRow: -1 property int _currentSelectedIndex: -1 - property int currentSelectedIndex: Globals.currentSelectedTable == this ? _currentSelectedIndex : -1 + property bool stayFocused: false + property int currentSelectedIndex: (!stayFocused && Globals.currentSelectedTable == this) ? _currentSelectedIndex : -1 property int delegateBorderWidth: Constants.genericTable.borderWidth property color delegateBorderColor: Constants.genericTable.borderColor @@ -28,7 +29,9 @@ TableView { tableView.forceLayout(); } onFocusChanged: { - _currentSelectedIndex = -1; + if (!stayFocused) + _currentSelectedIndex = -1; + } ScrollBar.horizontal: ScrollBar {