From 37a98417cd64008b63b95b80ecbedc84d487bd25 Mon Sep 17 00:00:00 2001 From: Felix Ernst Date: Fri, 26 Aug 2022 12:29:35 +0200 Subject: [PATCH] Add helper methods to tab widget for view containers This commit introduces the private getter DolphinTabWidget::viewContainerAt(ViewIndex) and another private method DolphinTabWidget::activateViewContainerAt(ViewIndex). Both methods return nullptr if there is no valid DolphinViewContainer at the specified ViewIndex. --- src/dolphintabwidget.cpp | 38 +++++++++++++++++++++++--------------- src/dolphintabwidget.h | 15 +++++++++++++++ 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp index 5a90070129..04653f33c8 100644 --- a/src/dolphintabwidget.cpp +++ b/src/dolphintabwidget.cpp @@ -210,13 +210,7 @@ void DolphinTabWidget::openDirectories(const QList& dirs, bool splitView) // activate it instead of opening a new tab if (alreadyOpenDirectory.has_value()) { somethingWasAlreadyOpen = true; - activateTab(alreadyOpenDirectory->tabIndex); - const auto tabPage = tabPageAt(alreadyOpenDirectory->tabIndex); - if (alreadyOpenDirectory->isInPrimaryView) { - tabPage->primaryViewContainer()->setActive(true); - } else { - tabPage->secondaryViewContainer()->setActive(true); - } + activateViewContainerAt(alreadyOpenDirectory.value()); } else if (splitView && (it != dirs.constEnd())) { const QUrl& secondaryUrl = *(it++); if (somethingWasAlreadyOpen) { @@ -252,14 +246,8 @@ void DolphinTabWidget::openFiles(const QList& files, bool splitView) // We also make sure the view will be activated. auto viewIndex = viewShowingItem(file); if (viewIndex.has_value()) { - activateTab(viewIndex->tabIndex); - if (viewIndex->isInPrimaryView) { - tabPageAt(viewIndex->tabIndex)->primaryViewContainer()->view()->clearSelection(); - tabPageAt(viewIndex->tabIndex)->primaryViewContainer()->setActive(true); - } else { - tabPageAt(viewIndex->tabIndex)->secondaryViewContainer()->view()->clearSelection(); - tabPageAt(viewIndex->tabIndex)->secondaryViewContainer()->setActive(true); - } + viewContainerAt(viewIndex.value())->view()->clearSelection(); + activateViewContainerAt(viewIndex.value()); dirsThatWereAlreadyOpen.append(dir); } else { dirsThatNeedToBeOpened.append(dir); @@ -514,6 +502,26 @@ QString DolphinTabWidget::tabName(DolphinTabPage* tabPage) const return name.replace('&', QLatin1String("&&")); } +DolphinViewContainer *DolphinTabWidget::viewContainerAt(DolphinTabWidget::ViewIndex viewIndex) const +{ + const auto tabPage = tabPageAt(viewIndex.tabIndex); + if (!tabPage) { + return nullptr; + } + return viewIndex.isInPrimaryView ? tabPage->primaryViewContainer() : tabPage->secondaryViewContainer(); +} + +DolphinViewContainer *DolphinTabWidget::activateViewContainerAt(DolphinTabWidget::ViewIndex viewIndex) +{ + activateTab(viewIndex.tabIndex); + auto viewContainer = viewContainerAt(viewIndex); + if (!viewContainer) { + return nullptr; + } + viewContainer->setActive(true); + return viewContainer; +} + const std::optional DolphinTabWidget::viewOpenAtDirectory(const QUrl& directory) const { int i = currentIndex(); diff --git a/src/dolphintabwidget.h b/src/dolphintabwidget.h index 8342d719d1..24d9e228b4 100644 --- a/src/dolphintabwidget.h +++ b/src/dolphintabwidget.h @@ -226,6 +226,21 @@ private: const int tabIndex; const bool isInPrimaryView; }; + + /** + * Getter for a view container. + * @param viewIndex specifies the tab and the view within that tab. + * @return the view container specified in @p viewIndex or nullptr if it doesn't exist. + */ + DolphinViewContainer *viewContainerAt(ViewIndex viewIndex) const; + + /** + * Makes the view container specified in @p viewIndex become the active view container within this tab widget. + * @param viewIndex Specifies the tab to activate and the view container within the tab to activate. + * @return the freshly activated view container or nullptr if there is no view container at @p viewIndex. + */ + DolphinViewContainer *activateViewContainerAt(ViewIndex viewIndex); + /** * Get the position of the view within this widget that is open at @p directory. * @param directory The URL of the directory we want to find.