KDevelop API Documentation

openwithpart.cpp

Go to the documentation of this file.
00001 #include "openwithpart.h"
00002 
00003 #include <qfile.h>
00004 
00005 #include <kpopupmenu.h>
00006 #include <kdevgenericfactory.h>
00007 #include <kdebug.h>
00008 #include <kmimetype.h>
00009 #include <ktrader.h>
00010 #include <krun.h>
00011 #include <kaction.h>
00012 
00013 #include "kdevpartcontroller.h"
00014 #include "kdevcore.h"
00015 
00016 
00017 static const KAboutData data("kdevopenwith", I18N_NOOP("Open With"), "1.0");
00018 K_EXPORT_COMPONENT_FACTORY(libkdevopenwith, KDevGenericFactory<OpenWithPart>(&data))
00019 
00020 OpenWithPart::OpenWithPart(QObject *parent, const char *name, const QStringList &)
00021   : KDevPlugin("OpenWith", "openwith", parent, name ? name : "OpenWithPart")
00022 {
00023   connect(core(), SIGNAL(contextMenu(QPopupMenu*,const Context *)),
00024       this, SLOT(fillContextMenu(QPopupMenu*,const Context *)));
00025 }
00026 
00027 
00028 OpenWithPart::~OpenWithPart()
00029 {
00030 }
00031 
00032 
00033 void OpenWithPart::fillContextMenu(QPopupMenu *popup, const Context *context)
00034 {
00035   if (!context->hasType( Context::FileContext ))
00036     return;
00037 
00038   const FileContext *ctx = static_cast<const FileContext*>(context);
00039   if (ctx->isDirectory())
00040       return;
00041 
00042   popup->insertSeparator();
00043   m_url = KURL(ctx->fileName());
00044 
00045   KPopupMenu *sub = new KPopupMenu(popup);
00046 
00047   int id = sub->insertItem(i18n("Open as UTF-8"), this, SLOT(openAsEncoding(int)));
00048   sub->setWhatsThis(id, i18n("<b>Open as UTF-8</b><p>Open this file in KDevelop as UTF-8 encoded text."));
00049 
00050   QString mimeType = KMimeType::findByURL(m_url, 0, true, true)->name();
00051   KTrader::OfferList offers = KTrader::self()->query(mimeType, "Type == 'Application'");
00052 
00053   if (offers.count() > 0)
00054   {
00055 
00056     KTrader::OfferList::Iterator it;
00057     for (it = offers.begin(); it != offers.end(); ++it)
00058     {
00059       KAction *action = new KAction((*it)->name(), 0, 0, QFile::encodeName( (*it)->desktopEntryPath() ).data());
00060       connect(action, SIGNAL(activated()), this, SLOT(openWithService()));
00061       action->plug(sub);
00062     }
00063     sub->insertSeparator();
00064 
00065     id = popup->insertItem(i18n("Open With"), sub);
00066     popup->setWhatsThis(id, i18n("<b>Open With</b><p>Lists all applications that can be used to open the selected file."));
00067 
00068     // make sure the generic "Open with ..." entry gets appended to the submenu
00069     popup = sub;
00070   }
00071 
00072   id = popup->insertItem(i18n("Open With..."), this, SLOT(openWithDialog()));
00073   popup->setWhatsThis(id, i18n("<b>Open With...</b><p>Provides a dialog to choose the application to open the selected file."));
00074 }
00075 
00076 
00077 void OpenWithPart::openWithService()
00078 {
00079   KService::Ptr ptr = KService::serviceByDesktopPath(sender()->name());
00080   if (ptr)
00081   {
00082     KURL::List list;
00083     list << m_url;
00084 
00085     KRun::run(*ptr, list);
00086   }
00087 }
00088 
00089 
00090 void OpenWithPart::openWithDialog()
00091 {
00092   KURL::List list;
00093   list << m_url;
00094   KRun::displayOpenWithDialog(list);
00095 }
00096 
00097 
00098 void OpenWithPart::openAsEncoding(int /*id*/)
00099 {
00100   partController()->setEncoding("utf8");
00101   partController()->editDocument(m_url);
00102 }
00103 
00104 #include "openwithpart.moc"
KDE Logo
This file is part of the documentation for KDevelop Version 3.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Feb 22 09:22:41 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003