28 #include <KPluginLoader>
29 #include <KPluginFactory>
30 #include <KMessageBox>
31 #include <KApplication>
33 #include <KActionCollection>
34 #include <KStandardAction>
35 #include <KFileDialog>
36 #include <KRecentFilesAction>
39 #include <KEditToolBar>
40 #include <KShortcutsDialog>
42 #include <QDragEnterEvent>
43 #include <QDragMoveEvent>
44 #include <QWeakPointer>
48 return ((data->hasUrls()) && (data->urls().count() == 1));
54 setXMLFile(QLatin1String(
"arkui.rc" ));
59 if (!initialGeometrySet()) {
62 setAutoSaveSettings(QLatin1String(
"MainWindow" ));
69 if (m_recentFilesAction) {
70 m_recentFilesAction->saveEntries(KGlobal::config()->group(
"Recent Files"));
85 if ((event->source() == NULL) &&
87 event->acceptProposedAction();
101 if ((event->source() == NULL) &&
103 event->acceptProposedAction();
108 openUrl(event->mimeData()->urls().at(0));
120 if ((event->source() == NULL) &&
122 event->acceptProposedAction();
128 KPluginFactory *factory = KPluginLoader(QLatin1String(
"arkpart" )).factory();
130 m_part =
static_cast<KParts::ReadWritePart*
>(factory->create<KParts::ReadWritePart>(
this));
132 if (!factory || !m_part) {
133 KMessageBox::error(
this, i18n(
"Unable to find Ark's KPart component, please check your installation."));
137 m_part->setObjectName( QLatin1String(
"ArkPart" ));
138 setCentralWidget(m_part->widget());
141 connect(m_part, SIGNAL(busy()),
this, SLOT(updateActions()));
142 connect(m_part, SIGNAL(ready()),
this, SLOT(updateActions()));
143 connect(m_part, SIGNAL(quit()),
this, SLOT(quit()));
148 void MainWindow::setupActions()
150 m_newAction = KStandardAction::openNew(
this, SLOT(newArchive()), actionCollection());
151 m_openAction = KStandardAction::open(
this, SLOT(openArchive()), actionCollection());
152 KStandardAction::quit(
this, SLOT(quit()), actionCollection());
154 m_recentFilesAction = KStandardAction::openRecent(
this, SLOT(
openUrl(KUrl)), actionCollection());
155 m_recentFilesAction->setToolBarMode(KRecentFilesAction::MenuMode);
156 m_recentFilesAction->setToolButtonPopupMode(QToolButton::DelayedPopup);
157 m_recentFilesAction->setIconText(i18nc(
"action, to open an archive",
"Open"));
158 m_recentFilesAction->setStatusTip(i18n(
"Click to open an archive, click and hold to open a recently-opened archive"));
159 m_recentFilesAction->setToolTip(i18n(
"Open an archive"));
160 m_recentFilesAction->loadEntries(KGlobal::config()->group(
"Recent Files"));
161 connect(m_recentFilesAction, SIGNAL(triggered()),
162 this, SLOT(openArchive()));
164 createStandardStatusBarAction();
166 KStandardAction::configureToolbars(
this, SLOT(editToolbars()), actionCollection());
167 KStandardAction::keyBindings(
this, SLOT(editKeyBindings()), actionCollection());
170 void MainWindow::updateActions()
173 m_newAction->setEnabled(!iface->
isBusy());
174 m_openAction->setEnabled(!iface->
isBusy());
175 m_recentFilesAction->setEnabled(!iface->
isBusy());
178 void MainWindow::editKeyBindings()
180 KShortcutsDialog dlg(KShortcutsEditor::AllActions, KShortcutsEditor::LetterShortcutsAllowed,
this);
181 dlg.addCollection(actionCollection());
182 dlg.addCollection(m_part->actionCollection());
187 void MainWindow::editToolbars()
189 saveMainWindowSettings(KGlobal::config()->group(QLatin1String(
"MainWindow")));
191 QWeakPointer<KEditToolBar> dlg =
new KEditToolBar(factory(),
this);
196 applyMainWindowSettings(KGlobal::config()->group(QLatin1String(
"MainWindow")));
201 void MainWindow::openArchive()
205 const KUrl url = KFileDialog::getOpenUrl(KUrl(
"kfiledialog:///ArkOpenDir"),
213 if (!url.isEmpty()) {
214 m_part->setArguments(m_openArgs);
216 if (m_part->openUrl(url)) {
217 m_recentFilesAction->addUrl(url);
219 m_recentFilesAction->removeUrl(url);
227 m_openArgs.metaData()[QLatin1String(
"showExtractDialog" )] = QLatin1String(
"true" );
229 m_openArgs.metaData().remove(QLatin1String(
"showExtractDialog" ));
233 void MainWindow::quit()
238 void MainWindow::newArchive()
245 kDebug() <<
"Supported mimetypes are" << mimeTypes.join( QLatin1String(
" " ));
247 const KUrl saveFileUrl =
248 KFileDialog::getSaveUrl(KUrl(
"kfiledialog:///ArkNewDir"),
249 mimeTypes.join(QLatin1String(
" ")));
251 m_openArgs.metaData()[QLatin1String(
"createNewArchive" )] = QLatin1String(
"true" );
255 m_openArgs.metaData().remove(QLatin1String(
"showExtractDialog" ));
256 m_openArgs.metaData().remove(QLatin1String(
"createNewArchive" ));
void dragEnterEvent(class QDragEnterEvent *event)
QStringList supportedWriteMimeTypes()
static bool isValidArchiveDrag(const QMimeData *data)
QStringList supportedMimeTypes()
MainWindow(QWidget *parent=0)
virtual bool isBusy() const =0
void setShowExtractDialog(bool)
void dragMoveEvent(class QDragMoveEvent *event)
void openUrl(const KUrl &url)
void dropEvent(class QDropEvent *event)