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

Jump to: navigation, search
(clarifying article structure)
m (Writing a KPart)
Line 35: Line 35:
 
KDE4_ADD_EXECUTABLE(kdepart ${kdepartSources})
 
KDE4_ADD_EXECUTABLE(kdepart ${kdepartSources})
  
TARGET_LINK_LIBRARIES(kdepart ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS})
+
TARGET_LINK_LIBRARIES(kdepart ${KDE4_KDEUI_LIBS}  
 +
  ${KDE4_KPARTS_LIBS})
 
</pre>
 
</pre>
 
'''main.cpp'''
 
'''main.cpp'''
 
<code cpp>
 
<code cpp>
#include <QString>
 
#include <kapplication.h>
 
 
#include <kaboutdata.h>
 
#include <kaboutdata.h>
#include <kmessagebox.h>
+
#include <kapplication.h>
 +
#include <kcmdlineargs.h>
 
#include <klistwidget.h>
 
#include <klistwidget.h>
 +
#include <kmessagebox.h>
 
#include <kparts/mainwindow.h>
 
#include <kparts/mainwindow.h>
 
#include <kparts/part.h>
 
#include <kparts/part.h>
#include <ktextedit.h>
 
#include <kcmdlineargs.h>
 
#include <KMainWindow>
 
 
#include <KPushButton>
 
#include <KPushButton>
 +
#include <ktextedit.h>
 
#include "mypart.h"
 
#include "mypart.h"
 +
#include <QString>
  
 
int main (int argc, char *argv[])
 
int main (int argc, char *argv[])
Line 60: Line 60:
 
   KApplication khello;
 
   KApplication khello;
 
   mypartmainwindow* mw=new mypartmainwindow();
 
   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();
 
   mw->show();
 
   khello.exec();
 
   khello.exec();

Revision as of 12:58, 10 February 2008

Contents

Introduction

Kontact is a KDE PIM (personal information management) framework that allows embedding several pim applications like kmail and korganizer as plugins into one window. 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 <kaboutdata.h>
  2. include <kapplication.h>
  3. include <kcmdlineargs.h>
  4. include <klistwidget.h>
  5. include <kmessagebox.h>
  6. include <kparts/mainwindow.h>
  7. include <kparts/part.h>
  8. include <KPushButton>
  9. include <ktextedit.h>
  10. include "mypart.h"
  11. include <QString>

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();
 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);

}

Compiling your kPart

To compile, link and run the code above, use

cmake . && make && ./kdepart

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