diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 987c99c..f3467aa 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -1432,3 +1432,12 @@ void MainWindow::setCurrentDeviceByName(const QString& name) xi18nc("@title:window", "Error While Importing Partition Table")); } } + +void MainWindow::setCurrentPartitionByName(const QString& partitionName) +{ + if (!pmWidget().setCurrentPartitionByName(partitionName)) { + KMessageBox::error(this, + xi18nc("@info device should be inside of /dev", "Unrecognized partition \"%1\" ", partitionName), + xi18nc("@title:window", "Error opening partition")); + } +} diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index df43bed..960a4fb 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -48,6 +48,8 @@ public: // for instance `/dev/sda` void setCurrentDeviceByName(const QString& name); + void setCurrentPartitionByName(const QString& partitionNumber); + Q_SIGNALS: void settingsChanged(); void scanFinished(); diff --git a/src/gui/partitionmanagerwidget.cpp b/src/gui/partitionmanagerwidget.cpp index b085eec..9033bbe 100644 --- a/src/gui/partitionmanagerwidget.cpp +++ b/src/gui/partitionmanagerwidget.cpp @@ -282,6 +282,25 @@ void PartitionManagerWidget::on_m_TreePartitions_currentItemChanged(QTreeWidgetI partTableWidget().setActiveWidget(nullptr); } +bool PartitionManagerWidget::setCurrentPartitionByName(const QString& name) +{ + auto rootNode = treePartitions().invisibleRootItem(); + for (int i = 0; i < rootNode->childCount(); i++) { + auto driveNode = rootNode->child(i); + for (int e = 0; e < driveNode->childCount(); e++) { + auto partitionNode = driveNode->child(e); + const QString text = partitionNode->data(0, Qt::DisplayRole).toString(); + if (text.endsWith(name)) { + partitionNode->setSelected(true); + treePartitions().setCurrentItem(partitionNode); + return true; + } + } + } + + return false; +} + void PartitionManagerWidget::on_m_TreePartitions_itemDoubleClicked(QTreeWidgetItem* item, int) { if (item == treePartitions().topLevelItem(0)) { diff --git a/src/gui/partitionmanagerwidget.h b/src/gui/partitionmanagerwidget.h index c1abc3f..fc94a71 100644 --- a/src/gui/partitionmanagerwidget.h +++ b/src/gui/partitionmanagerwidget.h @@ -94,6 +94,9 @@ public: void updatePartitions(); + // here we expect the full "sda1" or "nvme1n1p1" + bool setCurrentPartitionByName(const QString& partitionName); + protected: OperationStack& operationStack() { return *m_OperationStack; @@ -125,6 +128,7 @@ protected: return *m_TreePartitions; } + void onHeaderContextMenu(const QPoint& p); protected Q_SLOTS: diff --git a/src/main.cpp b/src/main.cpp index 823859d..67d0dea 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -113,13 +113,18 @@ int Q_DECL_IMPORT main(int argc, char* argv[]) if (!loadBackend()) return 0; + // device is the selected device minus the partition number. + // we need all of them to select properly the things on screen. const QString selectedDevice = parser.value(deviceOption); auto [device, partitionNr] = parseDevice(selectedDevice); MainWindow* mainWindow = new MainWindow(); - QObject::connect(mainWindow, &MainWindow::scanFinished, mainWindow, [mainWindow, selectedDevice] { - if (selectedDevice.length()) { - mainWindow->setCurrentDeviceByName(selectedDevice); + QObject::connect(mainWindow, &MainWindow::scanFinished, mainWindow, [mainWindow, device, selectedDevice, partitionNr] { + if (device.length()) { + mainWindow->setCurrentDeviceByName(device); + if (partitionNr.length()) { + mainWindow->setCurrentPartitionByName(selectedDevice); + } } });