summaryrefslogtreecommitdiffstats
path: root/ktnef/gui/ktnefmain.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch)
tree67208f7c145782a7e90b123b982ca78d88cc2c87 /ktnef/gui/ktnefmain.cpp
downloadtdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz
tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'ktnef/gui/ktnefmain.cpp')
-rw-r--r--ktnef/gui/ktnefmain.cpp409
1 files changed, 409 insertions, 0 deletions
diff --git a/ktnef/gui/ktnefmain.cpp b/ktnef/gui/ktnefmain.cpp
new file mode 100644
index 000000000..a31d40161
--- /dev/null
+++ b/ktnef/gui/ktnefmain.cpp
@@ -0,0 +1,409 @@
+/*
+ ktnefmain.cpp
+
+ Copyright (C) 2002 Michael Goffioul <kdeprint@swing.be>
+
+ This file is part of KTNEF, the KDE TNEF support library/program.
+
+ 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.
+
+ 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 <kdebug.h>
+#include "ktnefmain.h"
+#include <ktnef/ktnefparser.h>
+#include "ktnefview.h"
+#include <ktnef/ktnefattach.h>
+#include <ktnef/ktnefproperty.h>
+#include <ktnef/ktnefmessage.h>
+#include "attachpropertydialog.h"
+#include "messagepropertydialog.h"
+
+#include <qpopupmenu.h>
+#include <klistview.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kiconloader.h>
+#include <qpixmap.h>
+#include <kstdaccel.h>
+#include <qmessagebox.h>
+#include <kfiledialog.h>
+#include <qdir.h>
+#include <kprocess.h>
+#include <kglobal.h>
+#include <kstandarddirs.h>
+#include <kaction.h>
+#include <kstdaction.h>
+#include <kdialogbase.h>
+#include <ktempfile.h>
+#include <kkeydialog.h>
+
+#ifdef KDE_NO_COMPAT
+#undef KDE_NO_COMPAT
+#endif
+
+#include <krun.h>
+#include <kopenwith.h>
+#include <kedittoolbar.h>
+#include <kstatusbar.h>
+#include <kurldrag.h>
+
+
+#define NOT_IMPLEMENTED QMessageBox::information(this, "ktnef", "Not implemented yet", QMessageBox::Ok|QMessageBox::Default, 0)
+
+KTNEFMain::KTNEFMain(QWidget *parent, const char *name)
+ : KMainWindow(parent, name)
+{
+ setupActions();
+ setupStatusbar();
+
+ setupTNEF();
+
+ KGlobal::config()->setGroup("Settings");
+ defaultdir_ = KGlobal::config()->readPathEntry("defaultdir", "/tmp/");
+ lastdir_ = defaultdir_;
+
+ // create personale temo extract dir
+ KStandardDirs::makeDir(KGlobal::dirs()->localkdedir() + "/share/apps/ktnef/tmp");
+
+ resize(430,350);
+ setAutoSaveSettings( "MainWindow" );
+}
+
+KTNEFMain::~KTNEFMain()
+{
+ delete parser_;
+ cleanup();
+}
+
+void KTNEFMain::setupActions()
+{
+ // File menu
+ KStdAction::open(this, SLOT(openFile()), actionCollection());
+ KStdAction::quit(kapp, SLOT(quit()), actionCollection());
+
+ // Action menu
+ new KAction(i18n("View"), QString("viewmag"), 0, this, SLOT(viewFile()), actionCollection(), "view_file");
+ new KAction(i18n("View With..."), QString("package_applications"), 0, this, SLOT(viewFileAs()), actionCollection(), "view_file_as");
+ new KAction(i18n("Extract"), 0, this, SLOT(extractFile()), actionCollection(), "extract_file");
+ new KAction(i18n("Extract To..."), QString("ktnef_extract_to"), 0, this, SLOT(extractFileTo()), actionCollection(), "extract_file_to");
+ new KAction(i18n("Extract All To..."), QString("ktnef_extract_all_to"), 0, this, SLOT(extractAllFiles()), actionCollection(), "extract_all_files");
+ new KAction( i18n( "Message Properties" ), "help", 0, this, SLOT( slotShowMessageProperties() ), actionCollection(), "msg_properties" );
+ new KAction(i18n("Properties"), QString("contents"), 0, this, SLOT(propertiesFile()), actionCollection(), "properties_file");
+ new KAction( i18n( "Show Message Text" ), "mail_generic", 0, this, SLOT( slotShowMessageText() ), actionCollection(), "msg_text" );
+ new KAction( i18n( "Save Message Text As..." ), "filesave", 0, this, SLOT( slotSaveMessageText() ), actionCollection(), "msg_save" );
+ actionCollection()->action("view_file")->setEnabled(false);
+ actionCollection()->action("view_file_as")->setEnabled(false);
+ actionCollection()->action("extract_file")->setEnabled(false);
+ actionCollection()->action("extract_file_to")->setEnabled(false);
+ actionCollection()->action("extract_all_files")->setEnabled(false);
+ actionCollection()->action("properties_file")->setEnabled(false);
+
+ // Option menu
+ new KAction(i18n("Default Folder..."), QString("folder_open"), 0, this, SLOT(optionDefaultDir()), actionCollection(), "options_default_dir");
+
+ createStandardStatusBarAction();
+ setStandardToolBarMenuEnabled(true);
+ KStdAction::configureToolbars(this, SLOT(slotEditToolbars()), actionCollection());
+ KStdAction::keyBindings( this, SLOT( slotConfigureKeys() ), actionCollection() );
+
+ createGUI();
+}
+
+void KTNEFMain::slotConfigureKeys()
+{
+ KKeyDialog::configure( actionCollection(), this );
+}
+
+
+void KTNEFMain::setupStatusbar()
+{
+ statusBar()->insertItem(i18n("100 attachments found"), 0);
+ statusBar()->changeItem(i18n("No file loaded"), 0);
+}
+
+void KTNEFMain::setupTNEF()
+{
+ view_ = new KTNEFView(this);
+ view_->setAllColumnsShowFocus( true );
+ parser_ = new KTNEFParser;
+
+ setCentralWidget(view_);
+ connect(view_, SIGNAL(selectionChanged()), SLOT(viewSelectionChanged()));
+ connect(view_, SIGNAL(rightButtonPressed(QListViewItem*,const QPoint&,int)), SLOT(viewRightButtonPressed(QListViewItem*,const QPoint&,int)));
+ connect(view_, SIGNAL(doubleClicked(QListViewItem*)), SLOT(viewDoubleClicked(QListViewItem*)));
+ connect(view_, SIGNAL(dragRequested(const QValueList<KTNEFAttach*>&)), SLOT(viewDragRequested(const QValueList<KTNEFAttach*>&)));
+}
+
+void KTNEFMain::loadFile(const QString& filename)
+{
+ filename_ = filename;
+ setCaption(filename_);
+ if (!parser_->openFile(filename))
+ {
+ QMessageBox::critical(this, i18n("Error"), i18n("Unable to open file."), QMessageBox::Ok|QMessageBox::Default, 0);
+ view_->setAttachments(0);
+ enableExtractAll(false);
+ }
+ else
+ {
+ QPtrList<KTNEFAttach> list = parser_->message()->attachmentList();
+ QString msg;
+ msg = i18n( "%n attachment found", "%n attachments found", list.count() );
+ statusBar()->changeItem(msg, 0);
+ view_->setAttachments(&list);
+ enableExtractAll((list.count() > 0));
+ enableSingleAction(false);
+ }
+}
+
+void KTNEFMain::openFile()
+{
+ QString filename = KFileDialog::getOpenFileName(0,0,this,0);
+ if (!filename.isEmpty()) loadFile(filename);
+}
+
+void KTNEFMain::viewFile()
+{
+ KTNEFAttach *attach = view_->getSelection()->first();
+ KURL url("file:"+extractTemp(attach));
+ QString mimename(attach->mimeTag());
+
+ if (mimename.isEmpty() || mimename == "application/octet-stream")
+ {
+ kdDebug() << "No mime type found in attachment object, trying to guess..." << endl;
+ mimename = KMimeType::findByURL(url, 0, true)->name();
+ kdDebug() << "Detected mime type: " << mimename << endl;
+ }
+ else
+ kdDebug() << "Mime type from attachment object: " << mimename << endl;
+
+ KRun::runURL(url, mimename);
+}
+
+QString KTNEFMain::extractTemp(KTNEFAttach *att)
+{
+ QString dir = KGlobal::dirs()->localkdedir() + "/share/apps/ktnef/tmp/";
+ parser_->extractFileTo(att->name(), dir);
+ dir.append(att->name());
+ return dir;
+}
+
+void KTNEFMain::viewFileAs()
+{
+ KURL::List list;
+ list.append(KURL::fromPathOrURL( extractTemp(view_->getSelection()->first()) ));
+
+ KRun::displayOpenWithDialog(list);
+}
+
+void KTNEFMain::extractFile()
+{
+ extractTo(defaultdir_);
+}
+
+void KTNEFMain::extractFileTo()
+{
+ QString dir = KFileDialog::getExistingDirectory(lastdir_, this);
+ if (!dir.isEmpty())
+ {
+ extractTo(dir);
+ lastdir_ = dir;
+ }
+}
+
+void KTNEFMain::extractAllFiles()
+{
+ QString dir = KFileDialog::getExistingDirectory(lastdir_, this);
+ if (!dir.isEmpty())
+ {
+ lastdir_ = dir;
+ dir.append("/");
+ QPtrList<KTNEFAttach> list = parser_->message()->attachmentList();
+ QPtrListIterator<KTNEFAttach> it(list);
+ for (;it.current();++it)
+ if (!parser_->extractFileTo(it.current()->name(), dir))
+ {
+ QString msg = i18n( "Unable to extract file \"%1\"" ).arg( it.current()->name() );
+ QMessageBox::critical(this,i18n("Error"),msg,QMessageBox::Ok|QMessageBox::Default,0);
+ return;
+ }
+ }
+}
+
+void KTNEFMain::propertiesFile()
+{
+ KTNEFAttach *attach = view_->getSelection()->first();
+ AttachPropertyDialog dlg(this);
+ dlg.setAttachment(attach);
+ dlg.exec();
+}
+
+void KTNEFMain::optionDefaultDir()
+{
+ QString dirname = KFileDialog::getExistingDirectory(defaultdir_, this);
+ if (!dirname.isEmpty())
+ {
+ defaultdir_ = dirname;
+ KGlobal::config()->setGroup("Settings");
+ KGlobal::config()->writePathEntry("defaultdir",defaultdir_);
+ }
+}
+
+void KTNEFMain::viewSelectionChanged()
+{
+ QPtrList<KTNEFAttach> *list = view_->getSelection();
+ bool on1 = (list->count() == 1u), on2 = (list->count() > 0u);
+ actionCollection()->action("view_file")->setEnabled(on1);
+ actionCollection()->action("view_file_as")->setEnabled(on1);
+ actionCollection()->action("properties_file")->setEnabled(on1);
+
+ actionCollection()->action("extract_file")->setEnabled(on2);
+ actionCollection()->action("extract_file_to")->setEnabled(on2);
+}
+
+void KTNEFMain::enableExtractAll(bool on)
+{
+ if (!on) enableSingleAction(false);
+ actionCollection()->action("extract_all_files")->setEnabled(on);
+}
+
+void KTNEFMain::enableSingleAction(bool on)
+{
+ actionCollection()->action("extract_file")->setEnabled(on);
+ actionCollection()->action("extract_file_to")->setEnabled(on);
+ actionCollection()->action("view_file")->setEnabled(on);
+ actionCollection()->action("view_file_as")->setEnabled(on);
+ actionCollection()->action("properties_file")->setEnabled(on);
+}
+
+void KTNEFMain::cleanup()
+{
+ QDir d(KGlobal::dirs()->localkdedir() + "/share/apps/ktnef/tmp/");
+ const QFileInfoList *list = d.entryInfoList(QDir::Files|QDir::Hidden,QDir::Unsorted);
+ QFileInfoListIterator it(*list);
+ for (;it.current();++it)
+ d.remove(it.current()->absFilePath());
+}
+
+void KTNEFMain::extractTo(const QString& dirname)
+{
+ QString dir = dirname;
+ if (dir.right(1) != "/") dir.append("/");
+ QPtrList<KTNEFAttach> *list = view_->getSelection();
+ QPtrListIterator<KTNEFAttach> it(*list);
+ for (;it.current();++it)
+ if (!parser_->extractFileTo(it.current()->name(), dir))
+ {
+ QString msg = i18n("Unable to extract file \"%1\"").arg( it.current()->name() );
+ QMessageBox::critical(this,i18n("Error"),msg,QMessageBox::Ok|QMessageBox::Default,0);
+ return;
+ }
+}
+
+/* This breaks the saveMainWindowSettings stuff....
+ void KTNEFMain::closeEvent(QCloseEvent *e)
+{
+ e->accept();
+}*/
+
+void KTNEFMain::viewRightButtonPressed(QListViewItem*, const QPoint& p, int)
+{
+ QPtrList<KTNEFAttach> *list = view_->getSelection();
+ QPopupMenu m;
+ if (list->count() > 0u)
+ {
+ if (list->count() == 1u)
+ {
+ m.insertItem(SmallIcon("viewmag"), i18n("View"), this, SLOT(viewFile()));
+ m.insertItem(SmallIcon("package_applications"), i18n("View With..."), this, SLOT(viewFileAs()));
+ m.insertSeparator();
+ }
+ m.insertItem(i18n("Extract"), this, SLOT(extractFile()));
+ m.insertItem(SmallIcon("ktnef_extract_to"), i18n("Extract To..."), this, SLOT(extractFileTo()));
+ if (list->count() == 1u)
+ {
+ m.insertSeparator();
+ m.insertItem(SmallIcon("contents"), i18n("Properties"), this, SLOT(propertiesFile()));
+ }
+ }
+ else if ( list->count() == 0 )
+ actionCollection()->action( "msg_properties" )->plug( &m );
+ m.exec( p );
+}
+
+void KTNEFMain::viewDoubleClicked(QListViewItem *item)
+{
+ if (item && item->isSelected())
+ viewFile();
+}
+
+void KTNEFMain::viewDragRequested( const QValueList<KTNEFAttach*>& list )
+{
+ KURL::List urlList;
+ for ( QValueList<KTNEFAttach*>::ConstIterator it=list.constBegin(); it!=list.constEnd(); ++it )
+ urlList << KURL( extractTemp( *it ) );
+ if ( !list.isEmpty() )
+ {
+ KURLDrag *urlDrag = new KURLDrag( urlList, this );
+ urlDrag->dragCopy();
+ }
+}
+
+void KTNEFMain::slotEditToolbars()
+{
+ saveMainWindowSettings( KGlobal::config(), QString::fromLatin1("MainWindow") );
+ KEditToolbar dlg(actionCollection());
+ connect(&dlg, SIGNAL( newToolbarConfig() ), this, SLOT( slotNewToolbarConfig() ));
+ dlg.exec();
+}
+
+void KTNEFMain::slotNewToolbarConfig()
+{
+ createGUI();
+ applyMainWindowSettings( KGlobal::config(), QString::fromLatin1("MainWindow") );
+}
+
+void KTNEFMain::slotShowMessageProperties()
+{
+ MessagePropertyDialog dlg( this, parser_->message() );
+ dlg.exec();
+}
+
+void KTNEFMain::slotShowMessageText()
+{
+ QString rtf = parser_->message()->rtfString();
+ qDebug( "%s", rtf.latin1() );
+ KTempFile tmpFile( KGlobal::dirs()->localkdedir() + "/share/apps/ktnef/tmp/", "rtf");
+ *( tmpFile.textStream() ) << rtf;
+ tmpFile.close();
+
+ KRun::runURL( KURL::fromPathOrURL( tmpFile.name() ), "text/rtf", true );
+}
+
+void KTNEFMain::slotSaveMessageText()
+{
+ QString rtf = parser_->message()->rtfString();
+ QString filename = KFileDialog::getSaveFileName( QString::null, QString::null, this );
+ if ( !filename.isEmpty() )
+ {
+ QFile f( filename );
+ if ( f.open( IO_WriteOnly ) )
+ {
+ QTextStream t( &f );
+ t << rtf;
+ }
+ else
+ QMessageBox::critical( this, i18n( "Error" ),
+ i18n( "Unable to open file for writing, check file permissions." ),
+ QMessageBox::Ok|QMessageBox::Default, 0);
+ }
+}
+
+#include "ktnefmain.moc"