┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2007-06-12 21:45:22 +0000
committerPeter Penz <[email protected]>2007-06-12 21:45:22 +0000
commit6f5f07d391043175d955d62bd09c77af14164faf (patch)
tree0bb9d0872652f2d3ff5fe92f9e320b017c3f6fd7 /src
parent329aa0c5f7327f71f4727ab9c42d3e8d2005b4aa (diff)
* allow to toggle the content of split views by the context menu
* minor cleanups in DolphinMainWindow svn path=/trunk/KDE/kdebase/apps/; revision=674713
Diffstat (limited to 'src')
-rw-r--r--src/dolphincontextmenu.cpp14
-rw-r--r--src/dolphinmainwindow.cpp180
-rw-r--r--src/dolphinmainwindow.h76
3 files changed, 160 insertions, 110 deletions
diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp
index ce14c37ef..038902e6b 100644
--- a/src/dolphincontextmenu.cpp
+++ b/src/dolphincontextmenu.cpp
@@ -234,6 +234,12 @@ void DolphinContextMenu::openViewportContextMenu()
viewModeMenu->addAction(previewsMode);
popup->addMenu(viewModeMenu);
+
+ QAction* toggleViewsAction = 0;
+ if (m_mainWindow->isSplit()) {
+ toggleViewsAction = popup->addAction(i18n("Toggle Views"));
+ }
+
popup->addSeparator();
QAction* bookmarkAction = popup->addAction(KIcon("bookmark-folder"), i18n("Bookmark This Folder..."));
@@ -241,16 +247,18 @@ void DolphinContextMenu::openViewportContextMenu()
QAction* propertiesAction = popup->addAction(i18n("Properties"));
- QAction* activatedAction = popup->exec(QCursor::pos());
- if (activatedAction == propertiesAction) {
+ QAction* action = popup->exec(QCursor::pos());
+ if (action == propertiesAction) {
const KUrl& url = m_mainWindow->activeViewContainer()->url();
KPropertiesDialog dialog(url);
dialog.exec();
- } else if (activatedAction == bookmarkAction) {
+ } else if (action == bookmarkAction) {
const KUrl& url = m_mainWindow->activeViewContainer()->url();
if (url.isValid()) {
DolphinSettings::instance().placesModel()->addPlace(url.fileName(), url);
}
+ } else if ((toggleViewsAction != 0) && (action == toggleViewsAction)) {
+ m_mainWindow->toggleViews();
}
popup->deleteLater();
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 0dc26b63b..bb4ff90b7 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -83,8 +83,8 @@ DolphinMainWindow::DolphinMainWindow(int id) :
m_id(id)
{
setObjectName("Dolphin");
- m_viewContainer[PrimaryIdx] = 0;
- m_viewContainer[SecondaryIdx] = 0;
+ m_viewContainer[PrimaryView] = 0;
+ m_viewContainer[SecondaryView] = 0;
new MainWindowAdaptor(this);
QDBusConnection::sessionBus().registerObject(QString("/dolphin/MainWindow%1").arg(m_id), this);
@@ -106,25 +106,43 @@ DolphinMainWindow::~DolphinMainWindow()
DolphinApplication::app()->removeMainWindow(this);
}
-void DolphinMainWindow::setActiveView(DolphinViewContainer* view)
+void DolphinMainWindow::toggleViews()
{
- Q_ASSERT((view == m_viewContainer[PrimaryIdx]) || (view == m_viewContainer[SecondaryIdx]));
- if (m_activeViewContainer == view) {
+ if (m_viewContainer[SecondaryView] == 0) {
return;
}
- m_activeViewContainer->setActive(false);
- m_activeViewContainer = view;
- m_activeViewContainer->setActive(true);
+ // move secondary view from the last position of the splitter
+ // to the first position
+ m_splitter->insertWidget(0, m_viewContainer[SecondaryView]);
- updateHistory();
- updateEditActions();
- updateViewActions();
- updateGoActions();
+ DolphinViewContainer* container = m_viewContainer[PrimaryView];
+ m_viewContainer[PrimaryView] = m_viewContainer[SecondaryView];
+ m_viewContainer[SecondaryView] = container;
+}
- setCaption(m_activeViewContainer->url().fileName());
+void DolphinMainWindow::rename(const KUrl& oldUrl, const KUrl& newUrl)
+{
+ clearStatusBar();
+ KonqOperations::rename(this, oldUrl, newUrl);
+ m_undoCommandTypes.append(KonqUndoManager::RENAME);
+}
- emit activeViewChanged();
+void DolphinMainWindow::refreshViews()
+{
+ Q_ASSERT(m_viewContainer[PrimaryView] != 0);
+
+ // remember the current active view, as because of
+ // the refreshing the active view might change to
+ // the secondary view
+ DolphinViewContainer* activeViewContainer = m_activeViewContainer;
+
+ m_viewContainer[PrimaryView]->view()->refresh();
+ if (m_viewContainer[SecondaryView] != 0) {
+ m_viewContainer[SecondaryView]->view()->refresh();
+ }
+
+ setActiveViewContainer(activeViewContainer);
}
void DolphinMainWindow::dropUrls(const KUrl::List& urls,
@@ -201,30 +219,6 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls,
}
}
-void DolphinMainWindow::rename(const KUrl& oldUrl, const KUrl& newUrl)
-{
- clearStatusBar();
- KonqOperations::rename(this, oldUrl, newUrl);
- m_undoCommandTypes.append(KonqUndoManager::RENAME);
-}
-
-void DolphinMainWindow::refreshViews()
-{
- Q_ASSERT(m_viewContainer[PrimaryIdx] != 0);
-
- // remember the current active view, as because of
- // the refreshing the active view might change to
- // the secondary view
- DolphinViewContainer* activeViewContainer = m_activeViewContainer;
-
- m_viewContainer[PrimaryIdx]->view()->refresh();
- if (m_viewContainer[SecondaryIdx] != 0) {
- m_viewContainer[SecondaryIdx]->view()->refresh();
- }
-
- setActiveView(activeViewContainer);
-}
-
void DolphinMainWindow::changeUrl(const KUrl& url)
{
if (activeViewContainer() != 0) {
@@ -346,10 +340,10 @@ void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection)
{
updateEditActions();
- Q_ASSERT(m_viewContainer[PrimaryIdx] != 0);
- int selectedUrlsCount = m_viewContainer[PrimaryIdx]->view()->selectedUrls().count();
- if (m_viewContainer[SecondaryIdx] != 0) {
- selectedUrlsCount += m_viewContainer[SecondaryIdx]->view()->selectedUrls().count();
+ Q_ASSERT(m_viewContainer[PrimaryView] != 0);
+ int selectedUrlsCount = m_viewContainer[PrimaryView]->view()->selectedUrls().count();
+ if (m_viewContainer[SecondaryView] != 0) {
+ selectedUrlsCount += m_viewContainer[SecondaryView]->view()->selectedUrls().count();
}
QAction* compareFilesAction = actionCollection()->action("compare_files");
@@ -384,10 +378,10 @@ void DolphinMainWindow::openNewMainWindow()
void DolphinMainWindow::toggleActiveView()
{
- if (m_activeViewContainer == m_viewContainer[PrimaryIdx]) {
- setActiveView(m_viewContainer[SecondaryIdx]);
+ if (m_activeViewContainer == m_viewContainer[PrimaryView]) {
+ setActiveViewContainer(m_viewContainer[SecondaryView]);
} else {
- setActiveView(m_viewContainer[PrimaryIdx]);
+ setActiveViewContainer(m_viewContainer[PrimaryView]);
}
}
@@ -405,31 +399,31 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event)
void DolphinMainWindow::saveProperties(KConfig* config)
{
KConfigGroup primaryView = config->group("Primary view");
- primaryView.writeEntry("Url", m_viewContainer[PrimaryIdx]->url().url());
- primaryView.writeEntry("Editable Url", m_viewContainer[PrimaryIdx]->isUrlEditable());
- if (m_viewContainer[SecondaryIdx] != 0) {
+ primaryView.writeEntry("Url", m_viewContainer[PrimaryView]->url().url());
+ primaryView.writeEntry("Editable Url", m_viewContainer[PrimaryView]->isUrlEditable());
+ if (m_viewContainer[SecondaryView] != 0) {
KConfigGroup secondaryView = config->group("Secondary view");
- secondaryView.writeEntry("Url", m_viewContainer[SecondaryIdx]->url().url());
- secondaryView.writeEntry("Editable Url", m_viewContainer[SecondaryIdx]->isUrlEditable());
+ secondaryView.writeEntry("Url", m_viewContainer[SecondaryView]->url().url());
+ secondaryView.writeEntry("Editable Url", m_viewContainer[SecondaryView]->isUrlEditable());
}
}
void DolphinMainWindow::readProperties(KConfig* config)
{
const KConfigGroup primaryViewGroup = config->group("Primary view");
- m_viewContainer[PrimaryIdx]->setUrl(primaryViewGroup.readEntry("Url"));
+ m_viewContainer[PrimaryView]->setUrl(primaryViewGroup.readEntry("Url"));
bool editable = primaryViewGroup.readEntry("Editable Url", false);
- m_viewContainer[PrimaryIdx]->urlNavigator()->setUrlEditable(editable);
+ m_viewContainer[PrimaryView]->urlNavigator()->setUrlEditable(editable);
if (config->hasGroup("Secondary view")) {
const KConfigGroup secondaryViewGroup = config->group("Secondary view");
- if (m_viewContainer[PrimaryIdx] == 0) {
+ if (m_viewContainer[PrimaryView] == 0) {
toggleSplitView();
}
- m_viewContainer[PrimaryIdx]->setUrl(secondaryViewGroup.readEntry("Url"));
+ m_viewContainer[PrimaryView]->setUrl(secondaryViewGroup.readEntry("Url"));
editable = secondaryViewGroup.readEntry("Editable Url", false);
- m_viewContainer[PrimaryIdx]->urlNavigator()->setUrlEditable(editable);
- } else if (m_viewContainer[SecondaryIdx] != 0) {
+ m_viewContainer[PrimaryView]->urlNavigator()->setUrlEditable(editable);
+ } else if (m_viewContainer[SecondaryView] != 0) {
toggleSplitView();
}
}
@@ -758,29 +752,29 @@ void DolphinMainWindow::showDateInfo()
void DolphinMainWindow::toggleSplitView()
{
- if (m_viewContainer[SecondaryIdx] == 0) {
- const int newWidth = (m_viewContainer[PrimaryIdx]->width() - m_splitter->handleWidth()) / 2;
+ if (m_viewContainer[SecondaryView] == 0) {
+ const int newWidth = (m_viewContainer[PrimaryView]->width() - m_splitter->handleWidth()) / 2;
// create a secondary view
- const DolphinView* view = m_viewContainer[PrimaryIdx]->view();
- m_viewContainer[SecondaryIdx] = new DolphinViewContainer(this,
+ const DolphinView* view = m_viewContainer[PrimaryView]->view();
+ m_viewContainer[SecondaryView] = new DolphinViewContainer(this,
0,
view->rootUrl(),
view->mode(),
view->showHiddenFiles());
- connectViewSignals(SecondaryIdx);
- m_splitter->addWidget(m_viewContainer[SecondaryIdx]);
+ connectViewSignals(SecondaryView);
+ m_splitter->addWidget(m_viewContainer[SecondaryView]);
m_splitter->setSizes(QList<int>() << newWidth << newWidth);
- m_viewContainer[SecondaryIdx]->view()->reload();
- m_viewContainer[SecondaryIdx]->setActive(false);
- m_viewContainer[SecondaryIdx]->show();
+ m_viewContainer[SecondaryView]->view()->reload();
+ m_viewContainer[SecondaryView]->setActive(false);
+ m_viewContainer[SecondaryView]->show();
} else {
// remove secondary view
- m_viewContainer[SecondaryIdx]->close();
- m_viewContainer[SecondaryIdx]->deleteLater();
- m_viewContainer[SecondaryIdx] = 0;
+ m_viewContainer[SecondaryView]->close();
+ m_viewContainer[SecondaryView]->deleteLater();
+ m_viewContainer[SecondaryView] = 0;
}
- setActiveView(m_viewContainer[PrimaryIdx]);
+ setActiveViewContainer(m_viewContainer[PrimaryView]);
updateViewActions();
emit activeViewChanged();
}
@@ -792,7 +786,8 @@ void DolphinMainWindow::reloadView()
}
void DolphinMainWindow::stopLoading()
-{}
+{
+}
void DolphinMainWindow::togglePreview()
{
@@ -894,16 +889,16 @@ void DolphinMainWindow::compareFiles()
// - both in the secondary view
// - one in the primary view and the other in the secondary
// view
- Q_ASSERT(m_viewContainer[PrimaryIdx] != 0);
+ Q_ASSERT(m_viewContainer[PrimaryView] != 0);
KUrl urlA;
KUrl urlB;
- KUrl::List urls = m_viewContainer[PrimaryIdx]->view()->selectedUrls();
+ KUrl::List urls = m_viewContainer[PrimaryView]->view()->selectedUrls();
switch (urls.count()) {
case 0: {
- Q_ASSERT(m_viewContainer[SecondaryIdx] != 0);
- urls = m_viewContainer[SecondaryIdx]->view()->selectedUrls();
+ Q_ASSERT(m_viewContainer[SecondaryView] != 0);
+ urls = m_viewContainer[SecondaryView]->view()->selectedUrls();
Q_ASSERT(urls.count() == 2);
urlA = urls[0];
urlB = urls[1];
@@ -912,8 +907,8 @@ void DolphinMainWindow::compareFiles()
case 1: {
urlA = urls[0];
- Q_ASSERT(m_viewContainer[SecondaryIdx] != 0);
- urls = m_viewContainer[SecondaryIdx]->view()->selectedUrls();
+ Q_ASSERT(m_viewContainer[SecondaryView] != 0);
+ urls = m_viewContainer[SecondaryView]->view()->selectedUrls();
Q_ASSERT(urls.count() == 1);
urlB = urls[0];
break;
@@ -968,16 +963,16 @@ void DolphinMainWindow::init()
const KUrl& homeUrl = settings.generalSettings()->homeUrl();
setCaption(homeUrl.fileName());
ViewProperties props(homeUrl);
- m_viewContainer[PrimaryIdx] = new DolphinViewContainer(this,
+ m_viewContainer[PrimaryView] = new DolphinViewContainer(this,
m_splitter,
homeUrl,
props.viewMode(),
props.showHiddenFiles());
- m_activeViewContainer = m_viewContainer[PrimaryIdx];
- connectViewSignals(PrimaryIdx);
- m_viewContainer[PrimaryIdx]->view()->reload();
- m_viewContainer[PrimaryIdx]->show();
+ m_activeViewContainer = m_viewContainer[PrimaryView];
+ connectViewSignals(PrimaryView);
+ m_viewContainer[PrimaryView]->view()->reload();
+ m_viewContainer[PrimaryView]->show();
setCentralWidget(m_splitter);
setupDockWidgets();
@@ -1015,6 +1010,27 @@ void DolphinMainWindow::loadSettings()
updateViewActions();
}
+void DolphinMainWindow::setActiveViewContainer(DolphinViewContainer* view)
+{
+ Q_ASSERT((view == m_viewContainer[PrimaryView]) || (view == m_viewContainer[SecondaryView]));
+ if (m_activeViewContainer == view) {
+ return;
+ }
+
+ m_activeViewContainer->setActive(false);
+ m_activeViewContainer = view;
+ m_activeViewContainer->setActive(true);
+
+ updateHistory();
+ updateEditActions();
+ updateViewActions();
+ updateGoActions();
+
+ setCaption(m_activeViewContainer->url().fileName());
+
+ emit activeViewChanged();
+}
+
void DolphinMainWindow::setupActions()
{
// setup 'File' menu
@@ -1421,7 +1437,7 @@ void DolphinMainWindow::updateViewActions()
static_cast<KToggleAction*>(actionCollection()->action("show_hidden_files"));
showHiddenFilesAction->setChecked(view->showHiddenFiles());
- updateSplitAction(m_viewContainer[SecondaryIdx] != 0);
+ updateSplitAction(m_viewContainer[SecondaryView] != 0);
KToggleAction* editableLocactionAction =
static_cast<KToggleAction*>(actionCollection()->action("editable_location"));
diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h
index c4e303be3..a165573a1 100644
--- a/src/dolphinmainwindow.h
+++ b/src/dolphinmainwindow.h
@@ -53,21 +53,27 @@ public:
virtual ~DolphinMainWindow();
/**
- * Activates the given view, which means that
- * all menu actions are applied to this view. When
- * having a split view setup the nonactive view
+ * Returns the currently active view.
+ * All menu actions are applied to this view. When
+ * having a split view setup, the nonactive view
* is usually shown in darker colors.
*/
- void setActiveView(DolphinViewContainer* view);
+ inline DolphinViewContainer* activeViewContainer() const;
/**
- * Returns the currently active view. See
- * DolphinMainWindow::setActiveView() for more details.
+ * Returns true, if the main window contains two instances
+ * of a view container. The active view constainer can be
+ * accessed by DolphinMainWindow::activeViewContainer().
*/
- DolphinViewContainer* activeViewContainer() const
- {
- return m_activeViewContainer;
- }
+ inline bool isSplit() const;
+
+ /**
+ * If the main window contains two instances of a view container
+ * (DolphinMainWindow::isSplit() returns true), then the
+ * two views get toggled (the right view is on the left, the left
+ * view on the right).
+ */
+ void toggleViews();
/** Renames the item represented by \a oldUrl to \a newUrl. */
void rename(const KUrl& oldUrl, const KUrl& newUrl);
@@ -82,10 +88,7 @@ public:
* Returns the 'Create New...' sub menu which also can be shared
* with other menus (e. g. a context menu).
*/
- KNewMenu* newMenu() const
- {
- return m_newMenu;
- }
+ inline KNewMenu* newMenu() const;
public slots:
/**
@@ -105,10 +108,7 @@ public slots:
/**
* Returns the main window ID used through DBus.
*/
- int getId() const
- {
- return m_id;
- }
+ inline int getId() const;
/**
* Inform all affected dolphin components (sidebars, views) of an URL
@@ -415,7 +415,14 @@ private:
void init();
void loadSettings();
- void setupAccel();
+ /**
+ * Activates the given view, which means that
+ * all menu actions are applied to this view. When
+ * having a split view setup, the nonactive view
+ * is usually shown in darker colors.
+ */
+ void setActiveViewContainer(DolphinViewContainer* view);
+
void setupActions();
void setupDockWidgets();
void updateHistory();
@@ -445,13 +452,12 @@ private:
private:
/**
- * DolphinMainWindowsupports only one or two views, which
- * are handled internally as primary and secondary view.
+ * DolphinMainWindow supports up to two views beside each other.
*/
enum ViewIndex
{
- PrimaryIdx = 0,
- SecondaryIdx = 1
+ PrimaryView = 0, ///< View shown on the left side of the main window.
+ SecondaryView = 1 ///< View shown on the left side of the main window.
};
/**
@@ -459,7 +465,7 @@ private:
* assures that all errors are shown in the status bar of Dolphin
* instead as modal error dialog with an OK button.
*/
-class UndoUiInterface : public KonqUndoManager::UiInterface
+ class UndoUiInterface : public KonqUndoManager::UiInterface
{
public:
UndoUiInterface(DolphinMainWindow* mainWin);
@@ -475,11 +481,31 @@ class UndoUiInterface : public KonqUndoManager::UiInterface
DolphinViewContainer* m_activeViewContainer;
int m_id;
- DolphinViewContainer* m_viewContainer[SecondaryIdx + 1];
+ DolphinViewContainer* m_viewContainer[SecondaryView + 1];
/// remember pending undo operations until they are finished
QList<KonqUndoManager::CommandType> m_undoCommandTypes;
};
+DolphinViewContainer* DolphinMainWindow::activeViewContainer() const
+{
+ return m_activeViewContainer;
+}
+
+bool DolphinMainWindow::isSplit() const
+{
+ return m_viewContainer[SecondaryView] != 0;
+}
+
+KNewMenu* DolphinMainWindow::newMenu() const
+{
+ return m_newMenu;
+}
+
+int DolphinMainWindow::getId() const
+{
+ return m_id;
+}
+
#endif // DOLPHIN_MAINWINDOW_H