X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/38beff1a4b291b479a067e556ad7a4dd3e52cf8e..148282e2d856b47ceb191eeef4c834118c8cdffd:/src/dolphinpart.cpp diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index 686dde5b8..05bc2216a 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -29,27 +29,25 @@ #include #include #include -#include #include #include #include #include #include #include -#include #include #include +#include #include -#include +#include +#include #include #include #include K_PLUGIN_FACTORY(DolphinPartFactory, registerPlugin();) -// The componentdata name must be dolphinpart so that dolphinpart.rc is found -// Alternatively we would have to install it as dolphin/dolphinpart.rc -K_EXPORT_PLUGIN(DolphinPartFactory("dolphinpart")) +K_EXPORT_PLUGIN(DolphinPartFactory("dolphinpart", "dolphin")) DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantList& args) : KParts::ReadOnlyPart(parent) @@ -69,6 +67,7 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL //connect(m_dirLister, SIGNAL(started(KUrl)), this, SLOT(slotStarted())); connect(m_dirLister, SIGNAL(completed(KUrl)), this, SLOT(slotCompleted(KUrl))); connect(m_dirLister, SIGNAL(canceled(KUrl)), this, SLOT(slotCanceled(KUrl))); + connect(m_dirLister, SIGNAL(percent(int)), this, SLOT(updateProgress(int))); m_dolphinModel = new DolphinModel(this); m_dolphinModel->setDirLister(m_dirLister); @@ -109,6 +108,14 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL connect(m_view, SIGNAL(modeChanged()), this, SIGNAL(viewModeChanged())); // relay signal + // Watch for changes that should result in updates to the + // status bar text. + connect(m_dirLister, SIGNAL(deleteItem(const KFileItem&)), + this, SLOT(updateStatusBar())); + connect(m_dirLister, SIGNAL(clear()), + this, SLOT(updateStatusBar())); + + m_actionHandler = new DolphinViewActionHandler(actionCollection(), this); m_actionHandler->setCurrentView(m_view); @@ -120,8 +127,6 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL m_actionHandler->updateViewActions(); slotSelectionChanged(KFileItemList()); // initially disable selection-dependent actions - // TODO sort_by_* actions - // TODO there was a "always open a new window" (when clicking on a directory) setting in konqueror // (sort of spacial navigation) @@ -135,15 +140,16 @@ DolphinPart::~DolphinPart() void DolphinPart::createActions() { + // Edit menu + + m_newMenu = new KNewMenu(actionCollection(), widget(), "new_menu"); + connect(m_newMenu->menu(), SIGNAL(aboutToShow()), + this, SLOT(updateNewMenu())); + KAction *editMimeTypeAction = actionCollection()->addAction( "editMimeType" ); editMimeTypeAction->setText( i18nc("@action:inmenu Edit", "&Edit File Type..." ) ); connect(editMimeTypeAction, SIGNAL(triggered()), SLOT(slotEditMimeType())); - KAction *propertiesAction = actionCollection()->addAction( "properties" ); - propertiesAction->setText( i18nc("@action:inmenu Edit", "Properties") ); - propertiesAction->setShortcut(Qt::ALT+Qt::Key_Return); - connect(propertiesAction, SIGNAL(triggered()), SLOT(slotProperties())); - // View menu: all done by DolphinViewActionHandler // Go menu @@ -205,26 +211,27 @@ void DolphinPart::slotSelectionChanged(const KFileItemList& selection) QAction* deleteAction = actionCollection()->action("delete"); QAction* editMimeTypeAction = actionCollection()->action("editMimeType"); QAction* propertiesAction = actionCollection()->action("properties"); + QAction* deleteWithTrashShortcut = actionCollection()->action("delete_shortcut"); // see DolphinViewActionHandler if (!hasSelection) { stateChanged("has_no_selection"); emit m_extension->enableAction("cut", false); emit m_extension->enableAction("copy", false); - renameAction->setEnabled(false); - moveToTrashAction->setEnabled(false); - deleteAction->setEnabled(false); + deleteWithTrashShortcut->setEnabled(false); editMimeTypeAction->setEnabled(false); - propertiesAction->setEnabled(false); } else { stateChanged("has_selection"); + // TODO share this code with DolphinMainWindow::updateEditActions (and the desktop code) + // in libkonq KonqFileItemCapabilities capabilities(selection); const bool enableMoveToTrash = capabilities.isLocal() && capabilities.supportsMoving(); renameAction->setEnabled(capabilities.supportsMoving()); moveToTrashAction->setEnabled(enableMoveToTrash); deleteAction->setEnabled(capabilities.supportsDeleting()); + deleteWithTrashShortcut->setEnabled(capabilities.supportsDeleting() && !enableMoveToTrash); editMimeTypeAction->setEnabled(true); propertiesAction->setEnabled(true); emit m_extension->enableAction("cut", capabilities.supportsMoving()); @@ -295,6 +302,11 @@ void DolphinPart::slotErrorMessage(const QString& msg) void DolphinPart::slotRequestItemInfo(const KFileItem& item) { emit m_extension->mouseOverInfo(item); + if (item.isNull()) { + updateStatusBar(); + } else { + ReadOnlyPart::setStatusBarText(item.getStatusBarInfo()); + } } void DolphinPart::slotItemTriggered(const KFileItem& item) @@ -344,7 +356,7 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&) // If the parent directory of the selected item is writable, moving // and deleting are possible. KFileItem parentDir = m_dirLister->rootItem(); - if (!parentDir.isWritable()) { + if (!parentDir.isNull() && !parentDir.isWritable()) { popupFlags |= KParts::BrowserExtension::NoDeletion; sDeleting = false; sMoving = false; @@ -369,8 +381,9 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&) addDel = true; } else { - KConfigGroup configGroup( KGlobal::config(), "KDE" ); - if ( configGroup.readEntry( "ShowDeleteCommand", false) ) + KSharedConfig::Ptr globalConfig = KSharedConfig::openConfig("kdeglobals", KConfig::IncludeGlobals); + KConfigGroup configGroup(globalConfig, "KDE"); + if ( configGroup.readEntry("ShowDeleteCommand", false) ) addDel = true; } } @@ -380,6 +393,13 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&) if (addDel) editActions.append(actionCollection()->action("delete")); actionGroups.insert("editactions", editActions); + + // Normally KonqPopupMenu only shows the "Create new" subdir in the current view + // since otherwise the created file would not be visible. + // But in treeview mode we should allow it. + if (m_view->itemsExpandable()) + popupFlags |= KParts::BrowserExtension::ShowCreateDirectory; + } // TODO: We should change the signature of the slots (and signals) for being able @@ -396,6 +416,7 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&) void DolphinPart::slotUrlChanged(const KUrl& url) { + KParts::ReadOnlyPart::setUrl(url); QString prettyUrl = url.pathOrUrl(); emit m_extension->setLocationBarUrl(prettyUrl); } @@ -442,15 +463,6 @@ void DolphinPart::slotEditMimeType() } } -void DolphinPart::slotProperties() -{ - const KFileItemList items = m_view->selectedItems(); - if (!items.isEmpty()) { - KPropertiesDialog dialog(items.first().url(), m_view); - dialog.exec(); - } -} - void DolphinPart::setCurrentViewMode(const QString& viewModeName) { QAction* action = actionCollection()->action(viewModeName); @@ -473,9 +485,6 @@ void DolphinPart::setNameFilter(const QString& nameFilter) void DolphinPart::slotOpenTerminal() { - KConfigGroup confGroup(KGlobal::config(), "General"); // set by componentchooser kcm - const QString preferredTerminal = confGroup.readPathEntry("TerminalApplication", "konsole"); - QString dir(QDir::homePath()); KUrl u(url()); @@ -489,17 +498,25 @@ void DolphinPart::slotOpenTerminal() dir = u.path(); } - // Compensate for terminal having arguments. - QStringList args = KShell::splitArgs(preferredTerminal); - if (args.isEmpty()) { - return; - } - const QString prog = args.takeFirst(); - if (prog == "konsole") { - args << "--workdir"; - args << dir; - } - QProcess::startDetached(prog, args); + KToolInvocation::invokeTerminal(QString(), dir); +} + +void DolphinPart::updateNewMenu() +{ + // As requested by KNewMenu : + m_newMenu->slotCheckUpToDate(); + // And set the files that the menu apply on : + m_newMenu->setPopupFiles(url()); +} + +void DolphinPart::updateStatusBar() +{ + emit ReadOnlyPart::setStatusBarText(m_view->statusBarText()); +} + +void DolphinPart::updateProgress(int percent) +{ + m_extension->loadingProgress(percent); } #include "dolphinpart.moc"