diff --git a/app/arkui.rc b/app/arkui.rc index 6775c331..faabc94c 100644 --- a/app/arkui.rc +++ b/app/arkui.rc @@ -1,17 +1,14 @@ - + - - - - - - - + + + + + + + - - Main Toolbar - - + diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index 59efe785..335107f9 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -1,257 +1,254 @@ /* * ark -- archiver for the KDE project * * Copyright (C) 2002-2003: Georg Robbers * Copyright (C) 2003: Helio Chissini de Castro * Copyright (C) 2007 Henrique Pinto * Copyright (C) 2008 Harald Hvaal * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "mainwindow.h" #include "kerfuffle/archive.h" #include "part/interface.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static bool isValidArchiveDrag(const QMimeData *data) { return ((data->hasUrls()) && (data->urls().count() == 1)); } MainWindow::MainWindow(QWidget *) : KParts::MainWindow() { setXMLFile(QLatin1String( "arkui.rc" )); setupActions(); statusBar(); if (!initialGeometrySet()) { resize(640, 480); } setAutoSaveSettings(QLatin1String( "MainWindow" )); setAcceptDrops(true); } MainWindow::~MainWindow() { if (m_recentFilesAction) { m_recentFilesAction->saveEntries(KGlobal::config()->group("Recent Files")); } delete m_part; m_part = 0; } void MainWindow::dragEnterEvent(QDragEnterEvent * event) { kDebug() << event; Interface *iface = qobject_cast(m_part); if (iface->isBusy()) { return; } if ((event->source() == NULL) && (isValidArchiveDrag(event->mimeData()))) { event->acceptProposedAction(); } return; } void MainWindow::dropEvent(QDropEvent * event) { kDebug() << event; Interface *iface = qobject_cast(m_part); if (iface->isBusy()) { return; } if ((event->source() == NULL) && (isValidArchiveDrag(event->mimeData()))) { event->acceptProposedAction(); } //TODO: if this call provokes a message box the drag will still be going //while the box is onscreen. looks buggy, do something about it openUrl(event->mimeData()->urls().at(0)); } void MainWindow::dragMoveEvent(QDragMoveEvent * event) { kDebug() << event; Interface *iface = qobject_cast(m_part); if (iface->isBusy()) { return; } if ((event->source() == NULL) && (isValidArchiveDrag(event->mimeData()))) { event->acceptProposedAction(); } } bool MainWindow::loadPart() { KPluginFactory *factory = KPluginLoader(QLatin1String( "arkpart" )).factory(); if (factory) { m_part = static_cast(factory->create(this)); } if (!factory || !m_part) { KMessageBox::error(this, i18n("Unable to find Ark's KPart component, please check your installation.")); return false; } m_part->setObjectName( QLatin1String("ArkPart" )); setCentralWidget(m_part->widget()); createGUI(m_part); connect(m_part, SIGNAL(busy()), this, SLOT(updateActions())); connect(m_part, SIGNAL(ready()), this, SLOT(updateActions())); connect(m_part, SIGNAL(quit()), this, SLOT(quit())); return true; } void MainWindow::setupActions() { - m_newAction = KStandardAction::openNew(this, SLOT(newArchive()), actionCollection()); m_openAction = KStandardAction::open(this, SLOT(openArchive()), actionCollection()); KStandardAction::quit(this, SLOT(quit()), actionCollection()); m_recentFilesAction = KStandardAction::openRecent(this, SLOT(openUrl(KUrl)), actionCollection()); m_recentFilesAction->setToolBarMode(KRecentFilesAction::MenuMode); m_recentFilesAction->setToolButtonPopupMode(QToolButton::DelayedPopup); m_recentFilesAction->setIconText(i18nc("action, to open an archive", "Open")); m_recentFilesAction->setStatusTip(i18n("Click to open an archive, click and hold to open a recently-opened archive")); m_recentFilesAction->setToolTip(i18n("Open an archive")); m_recentFilesAction->loadEntries(KGlobal::config()->group("Recent Files")); - connect(m_recentFilesAction, SIGNAL(triggered()), - this, SLOT(openArchive())); + connect(m_recentFilesAction, SIGNAL(triggered()), this, SLOT(openArchive())); createStandardStatusBarAction(); KStandardAction::configureToolbars(this, SLOT(editToolbars()), actionCollection()); KStandardAction::keyBindings(this, SLOT(editKeyBindings()), actionCollection()); } void MainWindow::updateActions() { Interface *iface = qobject_cast(m_part); - m_newAction->setEnabled(!iface->isBusy()); m_openAction->setEnabled(!iface->isBusy()); m_recentFilesAction->setEnabled(!iface->isBusy()); } void MainWindow::editKeyBindings() { KShortcutsDialog dlg(KShortcutsEditor::AllActions, KShortcutsEditor::LetterShortcutsAllowed, this); dlg.addCollection(actionCollection()); dlg.addCollection(m_part->actionCollection()); dlg.configure(); } void MainWindow::editToolbars() { saveMainWindowSettings(KGlobal::config()->group(QLatin1String("MainWindow"))); QWeakPointer dlg = new KEditToolBar(factory(), this); dlg.data()->exec(); createGUI(m_part); applyMainWindowSettings(KGlobal::config()->group(QLatin1String("MainWindow"))); delete dlg.data(); } void MainWindow::openArchive() { Interface *iface = qobject_cast(m_part); Q_ASSERT(iface); const KUrl url = KFileDialog::getOpenUrl(KUrl("kfiledialog:///ArkOpenDir"), Kerfuffle::supportedMimeTypes().join( QLatin1String( " " )), this); openUrl(url); } void MainWindow::openUrl(const KUrl& url) { if (!url.isEmpty()) { m_part->setArguments(m_openArgs); if (m_part->openUrl(url)) { m_recentFilesAction->addUrl(url); } else { m_recentFilesAction->removeUrl(url); } } } void MainWindow::setShowExtractDialog(bool option) { if (option) { m_openArgs.metaData()[QLatin1String( "showExtractDialog" )] = QLatin1String( "true" ); } else { m_openArgs.metaData().remove(QLatin1String( "showExtractDialog" )); } } void MainWindow::quit() { close(); } void MainWindow::newArchive() { Interface *iface = qobject_cast(m_part); Q_ASSERT(iface); const QStringList mimeTypes = Kerfuffle::supportedWriteMimeTypes(); kDebug() << "Supported mimetypes are" << mimeTypes.join( QLatin1String( " " )); const KUrl saveFileUrl = KFileDialog::getSaveUrl(KUrl("kfiledialog:///ArkNewDir"), mimeTypes.join(QLatin1String(" "))); m_openArgs.metaData()[QLatin1String( "createNewArchive" )] = QLatin1String( "true" ); openUrl(saveFileUrl); m_openArgs.metaData().remove(QLatin1String( "showExtractDialog" )); m_openArgs.metaData().remove(QLatin1String( "createNewArchive" )); } diff --git a/app/mainwindow.h b/app/mainwindow.h index 5dd7fb82..41676b46 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -1,66 +1,65 @@ /* * ark -- archiver for the KDE project * * Copyright (C) 2007 Henrique Pinto * Copyright (C) 2008 Harald Hvaal * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include class KRecentFilesAction; class MainWindow: public KParts::MainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); bool loadPart(); void dragEnterEvent(class QDragEnterEvent * event); void dropEvent(class QDropEvent * event); void dragMoveEvent(class QDragMoveEvent * event); public slots: void openUrl(const KUrl& url); void setShowExtractDialog(bool); private slots: void updateActions(); void newArchive(); void openArchive(); void quit(); void editKeyBindings(); void editToolbars(); private: void setupActions(); KParts::ReadWritePart *m_part; KRecentFilesAction *m_recentFilesAction; QAction *m_openAction; - QAction *m_newAction; KParts::OpenUrlArguments m_openArgs; }; #endif // MAINWINDOW_H