Development/Tutorials/Writing kontact plugins: Difference between revisions

From KDE TechBase
Line 108: Line 108:
}
}
</code>
</code>
= Compiling your kPart =
To compile, link and run the code above, use
cmake . && make && ./kdepart


= Using your kPart =
= Using your kPart =

Revision as of 10:33, 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);

}

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