Difference between revisions of "Development/Tutorials/Writing kontact plugins"

Jump to: navigation, search
(Writing a KPart)
(Writing a KPart)
Line 35: Line 35:
 
TARGET_LINK_LIBRARIES(kdepart ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS})
 
TARGET_LINK_LIBRARIES(kdepart ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS})
 
</pre>
 
</pre>
 +
'''main.cpp'''
 +
<code cpp>
 +
#include <QString>
 +
#include <kapplication.h>
 +
#include <kaboutdata.h>
 +
#include <kmessagebox.h>
 +
#include <klistwidget.h>
 +
#include <kparts/mainwindow.h>
 +
#include <kparts/part.h>
 +
#include <ktextedit.h>
 +
#include <kcmdlineargs.h>
 +
#include <KMainWindow>
 +
#include <KPushButton>
 +
#include "mypart.h"
 +
 +
int main (int argc, char *argv[])
 +
{
 +
  const QByteArray& ba=QByteArray("test");
 +
  const KLocalizedString name=ki18n("myName");
 +
  KAboutData aboutData( ba, ba, name, ba, name);
 +
  KCmdLineArgs::init( argc, argv, &aboutData );
 +
  KApplication khello;
 +
  mypartmainwindow* mw=new mypartmainwindow();
 +
  //mypart* mypart1=new mypart(mw);
 +
  //KPushButton* button=new KPushButton("ha");
 +
  //mypart1->setMainWidget(button);
 +
  //mypart1->embed(mw);
 +
  //KListWidget* klv=new KListWidget(mywidget);
 +
  mw->show();
 +
  khello.exec();
 +
}
 +
</code>
 +
'''mypart.h'''
 +
<code cpp>
 +
#include <KParts/Part>
 +
#include <KParts/MainWindow>
 +
 +
class mypart:public KParts::Part
 +
{
 +
    Q_OBJECT
 +
public:
 +
  mypart(QObject *parent=0);
 +
};
 +
 +
class mypartmainwindow:public KParts::MainWindow
 +
{
 +
    Q_OBJECT
 +
public:
 +
  mypartmainwindow(QWidget* parent = 0, Qt::WindowFlags f = KDE_DEFAULT_WINDOWFLAGS);
 +
};
 +
</code>
 
'''mypart.cpp'''
 
'''mypart.cpp'''
 
<code cpp>
 
<code cpp>

Revision as of 11:29, 10 February 2008

Kontact plugins are KParts that get loaded at runtime. To integrate your KPart into kontact, you will need to have a .desktop file like this:

ls /home/kde-devel/kde/share/kde4/services/kontact/
akregatorplugin.desktop     knotesplugin.desktop
akregatorplugin3.2.desktop  korganizerplugin.desktop
journalplugin.desktop       newstickerplugin.desktop
kaddressbookplugin.desktop  plannerplugin.desktop
karmplugin.desktop          specialdatesplugin.desktop
kmailplugin.desktop         summaryplugin.desktop
kmobiletools.desktop        todoplugin.desktop
knodeplugin.desktop         weatherplugin.desktop

Writing a KPart

The following is what you do

  • write a subclass mypart of KParts::Part
    • because setWidget is protected
    • use a Widget in it and use setWidget to get your widget into the KPart
  • write a subclass mypartmainwindow of KParts::MainWindow
  • write main.cpp
    • use new mypart(mw) to get your part into your main window

CMakeLists.txt

PROJECT( kdepart )
FIND_PACKAGE(KDE4 REQUIRED)
INCLUDE_DIRECTORIES(${KDE4_INCLUDES} .)

SET(kdepartSources main.cpp mypart.cpp)

KDE4_ADD_EXECUTABLE(kdepart ${kdepartSources})

TARGET_LINK_LIBRARIES(kdepart ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS})

main.cpp

  1. include <QString>
  2. include <kapplication.h>
  3. include <kaboutdata.h>
  4. include <kmessagebox.h>
  5. include <klistwidget.h>
  6. include <kparts/mainwindow.h>
  7. include <kparts/part.h>
  8. include <ktextedit.h>
  9. include <kcmdlineargs.h>
  10. include <KMainWindow>
  11. include <KPushButton>
  12. include "mypart.h"

int main (int argc, char *argv[]) {

 const QByteArray& ba=QByteArray("test");
 const KLocalizedString name=ki18n("myName");
 KAboutData aboutData( ba, ba, name, ba, name);
 KCmdLineArgs::init( argc, argv, &aboutData );
 KApplication khello;
 mypartmainwindow* mw=new mypartmainwindow();
 //mypart* mypart1=new mypart(mw);
 //KPushButton* button=new KPushButton("ha");
 //mypart1->setMainWidget(button);
 //mypart1->embed(mw);
 //KListWidget* klv=new KListWidget(mywidget);
 mw->show();
 khello.exec();

} mypart.h

  1. include <KParts/Part>
  2. include <KParts/MainWindow>

class mypart:public KParts::Part {

   Q_OBJECT

public:

 mypart(QObject *parent=0);

};

class mypartmainwindow:public KParts::MainWindow {

   Q_OBJECT

public:

 mypartmainwindow(QWidget* parent = 0, Qt::WindowFlags f = KDE_DEFAULT_WINDOWFLAGS);

}; mypart.cpp

  1. include <kdebug.h>
  2. include <KPushButton>
  3. include "mypart.h"
  4. include <QWidget>

mypart::mypart(QObject* parent) {

 kDebug() << "Entering mypart";
 QWidget* mywidget=new QWidget();
 KPushButton* button=new KPushButton("ho",mywidget);
 setWidget(mywidget);

}

mypartmainwindow::mypartmainwindow(QWidget* parent, Qt::WindowFlags f) {

 kDebug() << "Entering mypartmainwindow";
 mypart* mypart1=new mypart(this);
 mypart1->embed(this);

}

Using your kPart

You can use konqueror to display your kpart: konqueror -> Settings -> Configure Konqueror -> Web browsing -> Plugins

See also


KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal