#include <kpluginfactory.h>
#include <kpropertiesdialog.h>
#include <ktoggleaction.h>
+#include <kio/netaccess.h>
+#include <ktoolinvocation.h>
+#include <kauthorized.h>
+#include <knewmenu.h>
+#include <kmenu.h>
#include <QActionGroup>
#include <QApplication>
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)
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()));
createGoAction("go_autostart", "",
i18nc("@action:inmenu Go", "Autostart"), KGlobalSettings::autostartPath(),
goActionGroup);
+
+ // Tools menu
+ if (KAuthorized::authorizeKAction("shell_access")) {
+ KAction* action = actionCollection()->addAction("open_terminal");
+ action->setIcon(KIcon("utilities-terminal"));
+ action->setText(i18nc("@action:inmenu Tools", "Open &Terminal"));
+ connect(action, SIGNAL(triggered()), SLOT(slotOpenTerminal()));
+ action->setShortcut(Qt::Key_F4);
+ }
+
}
void DolphinPart::createGoAction(const char* name, const char* iconName,
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());
// 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;
}
-
+
if ( sMoving )
editActions.append(actionCollection()->action("rename"));
void DolphinPart::slotUrlChanged(const KUrl& url)
{
+ KParts::ReadOnlyPart::setUrl(url);
QString prettyUrl = url.pathOrUrl();
emit m_extension->setLocationBarUrl(prettyUrl);
}
// TODO save/restore name filter in saveState/restoreState like KonqDirPart did in kde3?
}
+void DolphinPart::slotOpenTerminal()
+{
+ QString dir(QDir::homePath());
+
+ KUrl u(url());
+
+ // If the given directory is not local, it can still be the URL of an
+ // ioslave using UDS_LOCAL_PATH which to be converted first.
+ u = KIO::NetAccess::mostLocalUrl(u, widget());
+
+ //If the URL is local after the above conversion, set the directory.
+ if (u.isLocalFile()) {
+ dir = u.path();
+ }
+
+ 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());
+}
+
#include "dolphinpart.moc"