#include "dolphinmainwindow.h"
#include "dolphinviewactionhandler.h"
+#include "dolphinremoteencoding.h"
#include <config-nepomuk.h>
#include <kmenu.h>
#include <kmenubar.h>
#include <kmessagebox.h>
-#include <konq_fileitemcapabilities.h>
+#include <kfileitemlistproperties.h>
#include <konqmimedata.h>
#include <kprotocolinfo.h>
#include <krun.h>
m_tabIndex(0),
m_viewTab(),
m_actionHandler(0),
+ m_remoteEncoding(0),
m_settingsDialog(0)
{
setObjectName("Dolphin#");
ViewTab viewTab;
viewTab.splitter = new QSplitter(this);
+ viewTab.splitter->setChildrenCollapsible(false);
viewTab.primaryView = new DolphinViewContainer(this, viewTab.splitter, url);
viewTab.primaryView->setActive(false);
connectViewSignals(viewTab.primaryView);
void DolphinMainWindow::saveProperties(KConfigGroup& group)
{
- // TODO: remember tabs
- DolphinViewContainer* cont = m_viewTab[m_tabIndex].primaryView;
- group.writeEntry("Primary Url", cont->url().url());
- group.writeEntry("Primary Editable Url", cont->isUrlEditable());
+ const int tabCount = m_viewTab.count();
+ group.writeEntry("Tab Count", tabCount);
+ group.writeEntry("Active Tab Index", m_tabBar->currentIndex());
- cont = m_viewTab[m_tabIndex].secondaryView;
- if (cont != 0) {
- group.writeEntry("Secondary Url", cont->url().url());
- group.writeEntry("Secondary Editable Url", cont->isUrlEditable());
+ for (int i = 0; i < tabCount; ++i) {
+ const DolphinViewContainer* cont = m_viewTab[i].primaryView;
+ group.writeEntry(tabProperty("Primary URL", i), cont->url().url());
+ group.writeEntry(tabProperty("Primary Editable", i), cont->isUrlEditable());
+
+ cont = m_viewTab[i].secondaryView;
+ if (cont != 0) {
+ group.writeEntry(tabProperty("Secondary URL", i), cont->url().url());
+ group.writeEntry(tabProperty("Secondary Editable", i), cont->isUrlEditable());
+ }
}
}
void DolphinMainWindow::readProperties(const KConfigGroup& group)
{
- // TODO: read tabs
- DolphinViewContainer* cont = m_viewTab[m_tabIndex].primaryView;
+ const int tabCount = group.readEntry("Tab Count", 1);
+ for (int i = 0; i < tabCount; ++i) {
+ DolphinViewContainer* cont = m_viewTab[i].primaryView;
- cont->setUrl(group.readEntry("Primary Url"));
- bool editable = group.readEntry("Primary Editable Url", false);
- cont->urlNavigator()->setUrlEditable(editable);
+ cont->setUrl(group.readEntry(tabProperty("Primary URL", i)));
+ const bool editable = group.readEntry(tabProperty("Primary Editable", i), false);
+ cont->urlNavigator()->setUrlEditable(editable);
- cont = m_viewTab[m_tabIndex].secondaryView;
- const QString secondaryUrl = group.readEntry("Secondary Url");
- if (!secondaryUrl.isEmpty()) {
- if (cont == 0) {
- // a secondary view should be shown, but no one is available
- // currently -> create a new view
+ cont = m_viewTab[i].secondaryView;
+ const QString secondaryUrl = group.readEntry(tabProperty("Secondary URL", i));
+ if (!secondaryUrl.isEmpty()) {
+ if (cont == 0) {
+ // a secondary view should be shown, but no one is available
+ // currently -> create a new view
+ toggleSplitView();
+ cont = m_viewTab[i].secondaryView;
+ Q_ASSERT(cont != 0);
+ }
+
+ cont->setUrl(secondaryUrl);
+ const bool editable = group.readEntry(tabProperty("Secondary Editable", i), false);
+ cont->urlNavigator()->setUrlEditable(editable);
+ } else if (cont != 0) {
+ // no secondary view should be shown, but the default setting shows
+ // one already -> close the view
toggleSplitView();
- cont = m_viewTab[m_tabIndex].secondaryView;
- Q_ASSERT(cont != 0);
}
- cont->setUrl(secondaryUrl);
- bool editable = group.readEntry("Secondary Editable Url", false);
- cont->urlNavigator()->setUrlEditable(editable);
- } else if (cont != 0) {
- // no secondary view should be shown, but the default setting shows
- // one already -> close the view
- toggleSplitView();
+ // openNewTab() needs to be called only tabCount - 1 times
+ if (i != tabCount - 1) {
+ openNewTab();
+ }
}
+
+ const int index = group.readEntry("Active Tab Index", 0);
+ m_tabBar->setCurrentIndex(index);
}
void DolphinMainWindow::updateNewMenu()
m_newMenu->setPopupFiles(activeViewContainer()->url());
}
+void DolphinMainWindow::createDirectory()
+{
+ m_newMenu->setPopupFiles(activeViewContainer()->url());
+ m_newMenu->createDirectory();
+}
+
void DolphinMainWindow::quit()
{
close();
m_activeViewContainer->setUrl(url);
}
+void DolphinMainWindow::slotTabMoved(int from, int to)
+{
+ m_viewTab.move(from, to);
+ m_tabIndex = m_tabBar->currentIndex();
+}
+
void DolphinMainWindow::init()
{
DolphinSettings& settings = DolphinSettings::instance();
setAcceptDrops(true);
m_viewTab[m_tabIndex].splitter = new QSplitter(this);
+ m_viewTab[m_tabIndex].splitter->setChildrenCollapsible(false);
setupActions();
setCaption(homeUrl.fileName());
m_actionHandler = new DolphinViewActionHandler(actionCollection(), this);
connect(m_actionHandler, SIGNAL(actionBeingHandled()), SLOT(clearStatusBar()));
+ connect(m_actionHandler, SIGNAL(createDirectory()), SLOT(createDirectory()));
ViewProperties props(homeUrl);
m_viewTab[m_tabIndex].primaryView = new DolphinViewContainer(this,
m_viewTab[m_tabIndex].splitter,
m_activeViewContainer->show();
m_actionHandler->setCurrentView(view);
+ m_remoteEncoding = new DolphinRemoteEncoding(this, m_actionHandler);
+ connect(this, SIGNAL(urlChanged(const KUrl&)),
+ m_remoteEncoding, SLOT(slotAboutToOpenUrl()));
+
m_tabBar = new KTabBar(this);
m_tabBar->setMovable(true);
m_tabBar->setTabsClosable(true);
this, SLOT(slotWheelMoved(int)));
connect(m_tabBar, SIGNAL(mouseMiddleClick(int)),
this, SLOT(closeTab(int)));
+ connect(m_tabBar, SIGNAL(tabMoved(int, int)),
+ this, SLOT(slotTabMoved(int, int)));
m_tabBar->blockSignals(true); // signals get unblocked after at least 2 tabs are open
QAction* cutAction = col->action(KStandardAction::name(KStandardAction::Cut));
QAction* deleteWithTrashShortcut = col->action("delete_shortcut"); // see DolphinViewActionHandler
- KonqFileItemCapabilities capabilities(list);
+ KFileItemListProperties capabilities(list);
const bool enableMoveToTrash = capabilities.isLocal() && capabilities.supportsMoving();
renameAction->setEnabled(capabilities.supportsMoving());
m_viewTab[tabIndex].secondaryView->show();
}
+QString DolphinMainWindow::tabProperty(const QString& property, int tabIndex) const
+{
+ return "Tab " + QString::number(tabIndex) + ' ' + property;
+}
+
DolphinMainWindow::UndoUiInterface::UndoUiInterface() :
KIO::FileUndoManager::UiInterface()
{