summaryrefslogtreecommitdiffstats
path: root/languages/cpp/app_templates/kapp
diff options
context:
space:
mode:
Diffstat (limited to 'languages/cpp/app_templates/kapp')
-rw-r--r--languages/cpp/app_templates/kapp/.kdev_ignore0
-rw-r--r--languages/cpp/app_templates/kapp/Makefile.am19
-rw-r--r--languages/cpp/app_templates/kapp/README81
-rw-r--r--languages/cpp/app_templates/kapp/app.cpp247
-rw-r--r--languages/cpp/app_templates/kapp/app.desktop44
-rw-r--r--languages/cpp/app_templates/kapp/app.h89
-rw-r--r--languages/cpp/app_templates/kapp/app.kdevelop168
-rw-r--r--languages/cpp/app_templates/kapp/app.kdevses13
-rw-r--r--languages/cpp/app_templates/kapp/app_client.cpp26
-rw-r--r--languages/cpp/app_templates/kapp/appiface.h17
-rw-r--r--languages/cpp/app_templates/kapp/appui.rc8
-rw-r--r--languages/cpp/app_templates/kapp/appview.cpp107
-rw-r--r--languages/cpp/app_templates/kapp/appview.h77
-rw-r--r--languages/cpp/app_templates/kapp/kapp.kdevtemplate253
-rw-r--r--languages/cpp/app_templates/kapp/kapp.pngbin0 -> 6320 bytes
-rw-r--r--languages/cpp/app_templates/kapp/main.cpp61
-rw-r--r--languages/cpp/app_templates/kapp/pref.cpp42
-rw-r--r--languages/cpp/app_templates/kapp/pref.h37
-rw-r--r--languages/cpp/app_templates/kapp/src-Makefile.am43
-rw-r--r--languages/cpp/app_templates/kapp/subdirs3
20 files changed, 1335 insertions, 0 deletions
diff --git a/languages/cpp/app_templates/kapp/.kdev_ignore b/languages/cpp/app_templates/kapp/.kdev_ignore
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/.kdev_ignore
diff --git a/languages/cpp/app_templates/kapp/Makefile.am b/languages/cpp/app_templates/kapp/Makefile.am
new file mode 100644
index 00000000..efe532d3
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/Makefile.am
@@ -0,0 +1,19 @@
+dataFiles = app.cpp app.h pref.cpp pref.h appview.cpp appview.h \
+ appiface.h app_client.cpp main.cpp appui.rc src-Makefile.am \
+ kapp.png app.kdevelop subdirs README
+
+templateName = kapp
+
+### no need to change below:
+template_DATA = $(templateName).kdevtemplate
+templatedir = ${appwizarddatadir}/templates
+
+appwizarddatadir = ${kde_datadir}/kdevappwizard
+$(templateName).tar.gz: ${dataFiles}
+ $(TAR) -cf $(templateName).tar -C $(srcdir) ${dataFiles}
+ $(GZIP_COMMAND) -f9 $(templateName).tar
+
+archivedir = ${appwizarddatadir}
+archive_DATA = $(templateName).tar.gz ${templateName}.png
+
+CLEANFILES = *.tar.gz \ No newline at end of file
diff --git a/languages/cpp/app_templates/kapp/README b/languages/cpp/app_templates/kapp/README
new file mode 100644
index 00000000..f04a5635
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/README
@@ -0,0 +1,81 @@
+-----------------------------------------------
+Kde application framework template quickstart
+Author: Thomas Nagy
+Date: 2004-03-22
+-----------------------------------------------
+
+This README file explains you basic things for starting with
+this application template.
+
+
+** Building and installing **
+
+* Build the configure script by "make -f Makefile.cvs"
+
+* To clean, use "make clean", and to clean everything
+(remove the makefiles, etc), use "make distclean"
+
+* To distribute your program, try "make dist".
+This will make a compact tarball archive of your release with the
+necessary scripts inside.
+
+* Modifying the auto-tools scripts
+for automake scripts there is an excellent tutorial there :
+http://developer.kde.org/documentation/other/makefile_am_howto.html
+
+* Simplify your life : install the project in your home directory for
+testing purposes.
+./configure --prefix=/home/user/dummyfolder/
+In the end when you finished the development you can
+rm -rf /home/user/dummyfolder/
+without fear.
+
+
+** Technologies **
+
+* Build the menus of your application easily
+kde applications now use an xml file (*ui.rc file) to build the menus.
+This allow a great customization of the application. However, when
+programming the menu is shown only after a "make install"
+
+For more details, consult :
+http://devel-home.kde.org/~larrosa/tutorial/p9.html
+http://developer.kde.org/documentation/tutorials/xmlui/preface.html
+
+* Use KConfig XT to create your configuration dialogs and make
+them more maintainable.
+
+For more details, consult :
+http://developer.kde.org/documentation/tutorials/kconfigxt/kconfigxt.html
+
+* With KParts, you can embed other kde components in your program, or make your program
+embeddable in other apps. For example, the kmplayer kpart can be called to play videos
+in your app.
+
+For more details, consult :
+http://www-106.ibm.com/developerworks/library/l-kparts/
+http://developer.kde.org/documentation/tutorials/dot/writing-plugins.html
+http://developer.kde.org/documentation/tutorials/developing-a-plugin-structure/index.html
+
+* With dcop, you can control your app from other applications
+Make sure to include K_DCOP and a kdcop: section in your .h file
+http://developer.kde.org/documentation/tutorials/dot/dcopiface/dcop-interface.html
+
+
+** Documentation **
+
+* For the translations :
+1. Download a patched gettext which can be found at:
+ http://public.kde.planetmirror.com/pub/kde/devel/gettext-kde/
+2. Install that gettext in ~/bin/
+3. cd ~/yourproject, export PATH=~/bin:$PATH, export
+KDEDIR=/where_your_KDE3_is
+4. make -f admin/Makefile.common package-messages
+5. make package-messages
+6. Translate the po files (not the pot!!) with kbabel or xemacs
+
+* Do not forget to write the documentation for your kde app
+edit the documentation template index.docbook in doc/
+
+
+
diff --git a/languages/cpp/app_templates/kapp/app.cpp b/languages/cpp/app_templates/kapp/app.cpp
new file mode 100644
index 00000000..5460bba9
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/app.cpp
@@ -0,0 +1,247 @@
+%{CPP_TEMPLATE}
+
+#include "%{APPNAMELC}.h"
+#include "pref.h"
+
+#include <qdragobject.h>
+#include <kprinter.h>
+#include <qpainter.h>
+#include <qpaintdevicemetrics.h>
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kdeversion.h>
+#include <kstatusbar.h>
+#include <kaccel.h>
+#include <kio/netaccess.h>
+#include <kfiledialog.h>
+#include <kconfig.h>
+#include <kurl.h>
+#include <kurldrag.h>
+#include <kurlrequesterdlg.h>
+
+#include <kstdaccel.h>
+#include <kaction.h>
+#include <kstdaction.h>
+
+%{APPNAME}::%{APPNAME}()
+ : KMainWindow( 0, "%{APPNAME}" ),
+ m_view(new %{APPNAME}View(this)),
+ m_printer(0)
+{
+ // accept dnd
+ setAcceptDrops(true);
+
+ // tell the KMainWindow that this is indeed the main widget
+ setCentralWidget(m_view);
+
+ // then, setup our actions
+ setupActions();
+
+ // and a status bar
+ statusBar()->show();
+
+ // Apply the create the main window and ask the mainwindow to
+ // automatically save settings if changed: window size, toolbar
+ // position, icon size, etc. Also to add actions for the statusbar
+ // toolbar, and keybindings if necessary.
+ setupGUI();
+
+ // allow the view to change the statusbar and caption
+ connect(m_view, SIGNAL(signalChangeStatusbar(const QString&)),
+ this, SLOT(changeStatusbar(const QString&)));
+ connect(m_view, SIGNAL(signalChangeCaption(const QString&)),
+ this, SLOT(changeCaption(const QString&)));
+
+}
+
+%{APPNAME}::~%{APPNAME}()
+{
+}
+
+void %{APPNAME}::load(const KURL& url)
+{
+ QString target;
+ // the below code is what you should normally do. in this
+ // example case, we want the url to our own. you probably
+ // want to use this code instead for your app
+
+ #if 0
+ // download the contents
+ if (KIO::NetAccess::download(url, target))
+ {
+ // set our caption
+ setCaption(url);
+
+ // load in the file (target is always local)
+ loadFile(target);
+
+ // and remove the temp file
+ KIO::NetAccess::removeTempFile(target);
+ }
+ #endif
+
+ setCaption(url.prettyURL());
+ m_view->openURL(url);
+}
+
+void %{APPNAME}::setupActions()
+{
+ KStdAction::openNew(this, SLOT(fileNew()), actionCollection());
+ KStdAction::open(this, SLOT(fileOpen()), actionCollection());
+ KStdAction::save(this, SLOT(fileSave()), actionCollection());
+ KStdAction::saveAs(this, SLOT(fileSaveAs()), actionCollection());
+ KStdAction::print(this, SLOT(filePrint()), actionCollection());
+ KStdAction::quit(kapp, SLOT(quit()), actionCollection());
+
+ KStdAction::preferences(this, SLOT(optionsPreferences()), actionCollection());
+
+ // this doesn't do anything useful. it's just here to illustrate
+ // how to insert a custom menu and menu item
+ KAction *custom = new KAction(i18n("Cus&tom Menuitem"), 0,
+ this, SLOT(optionsPreferences()),
+ actionCollection(), "custom_action");
+}
+
+void %{APPNAME}::saveProperties(KConfig *config)
+{
+ // the 'config' object points to the session managed
+ // config file. anything you write here will be available
+ // later when this app is restored
+
+ if (!m_view->currentURL().isEmpty()) {
+#if KDE_IS_VERSION(3,1,3)
+ config->writePathEntry("lastURL", m_view->currentURL());
+#else
+ config->writeEntry("lastURL", m_view->currentURL());
+#endif
+ }
+}
+
+void %{APPNAME}::readProperties(KConfig *config)
+{
+ // the 'config' object points to the session managed
+ // config file. this function is automatically called whenever
+ // the app is being restored. read in here whatever you wrote
+ // in 'saveProperties'
+
+ QString url = config->readPathEntry("lastURL");
+
+ if (!url.isEmpty())
+ m_view->openURL(KURL(url));
+}
+
+void %{APPNAME}::dragEnterEvent(QDragEnterEvent *event)
+{
+ // accept uri drops only
+ event->accept(KURLDrag::canDecode(event));
+}
+
+void %{APPNAME}::dropEvent(QDropEvent *event)
+{
+ // this is a very simplistic implementation of a drop event. we
+ // will only accept a dropped URL. the Qt dnd code can do *much*
+ // much more, so please read the docs there
+ KURL::List urls;
+
+ // see if we can decode a URI.. if not, just ignore it
+ if (KURLDrag::decode(event, urls) && !urls.isEmpty())
+ {
+ // okay, we have a URI.. process it
+ const KURL &url = urls.first();
+
+ // load in the file
+ load(url);
+ }
+}
+
+void %{APPNAME}::fileNew()
+{
+ // this slot is called whenever the File->New menu is selected,
+ // the New shortcut is pressed (usually CTRL+N) or the New toolbar
+ // button is clicked
+
+ // create a new window
+ (new %{APPNAME})->show();
+}
+
+void %{APPNAME}::fileOpen()
+{
+ // this slot is called whenever the File->Open menu is selected,
+ // the Open shortcut is pressed (usually CTRL+O) or the Open toolbar
+ // button is clicked
+/*
+ // this brings up the generic open dialog
+ KURL url = KURLRequesterDlg::getURL(QString::null, this, i18n("Open Location") );
+*/
+ // standard filedialog
+ KURL url = KFileDialog::getOpenURL(QString::null, QString::null, this, i18n("Open Location"));
+ if (!url.isEmpty())
+ m_view->openURL(url);
+}
+
+void %{APPNAME}::fileSave()
+{
+ // this slot is called whenever the File->Save menu is selected,
+ // the Save shortcut is pressed (usually CTRL+S) or the Save toolbar
+ // button is clicked
+
+ // save the current file
+}
+
+void %{APPNAME}::fileSaveAs()
+{
+ // this slot is called whenever the File->Save As menu is selected,
+ KURL file_url = KFileDialog::getSaveURL();
+ if (!file_url.isEmpty() && file_url.isValid())
+ {
+ // save your info, here
+ }
+}
+
+void %{APPNAME}::filePrint()
+{
+ // this slot is called whenever the File->Print menu is selected,
+ // the Print shortcut is pressed (usually CTRL+P) or the Print toolbar
+ // button is clicked
+ if (!m_printer) m_printer = new KPrinter;
+ if (m_printer->setup(this))
+ {
+ // setup the printer. with Qt, you always "print" to a
+ // QPainter.. whether the output medium is a pixmap, a screen,
+ // or paper
+ QPainter p;
+ p.begin(m_printer);
+
+ // we let our view do the actual printing
+ QPaintDeviceMetrics metrics(m_printer);
+ m_view->print(&p, metrics.height(), metrics.width());
+
+ // and send the result to the printer
+ p.end();
+ }
+}
+
+void %{APPNAME}::optionsPreferences()
+{
+ // popup some sort of preference dialog, here
+ %{APPNAME}Preferences dlg;
+ if (dlg.exec())
+ {
+ // redo your settings
+ }
+}
+
+void %{APPNAME}::changeStatusbar(const QString& text)
+{
+ // display the text on the statusbar
+ statusBar()->message(text);
+}
+
+void %{APPNAME}::changeCaption(const QString& text)
+{
+ // display the text on the caption
+ setCaption(text);
+}
+#include "%{APPNAMELC}.moc"
diff --git a/languages/cpp/app_templates/kapp/app.desktop b/languages/cpp/app_templates/kapp/app.desktop
new file mode 100644
index 00000000..7389904a
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/app.desktop
@@ -0,0 +1,44 @@
+[Desktop Entry]
+Name=%{APPNAME}
+Exec=%{APPNAMELC} %i -caption "%c"
+Icon=%{APPNAMELC}
+Type=Application
+X-DocPath=%{APPNAMELC}/%{APPNAMELC}.html
+Comment=A KDE KPart Application
+Comment[br]=Ur meziant Kpart evit KDE
+Comment[ca]=Una aplicació KPart per al KDE
+Comment[cy]=Cymhwysiad KPart KDE
+Comment[da]=Et KDE KPart-program
+Comment[de]=Eine auf der Komponententechnik KPart basierende KDE-Anwendung
+Comment[el]=Μια εφαρμογή KPart του KDE
+Comment[es]=Una aplicación KPart de KDE
+Comment[et]=KDE KPart rakendus
+Comment[eu]=KDE KPart aplikazio bat
+Comment[fa]=یک کاربرد KDE KPart
+Comment[fr]=Une application KPart pour KDE
+Comment[ga]=Feidhmchlár KPart KDE
+Comment[gl]=Unha aplicación KPart de KDE
+Comment[hi]=एक केडीई के-पार्ट अनुप्रयोग
+Comment[hu]=KPart-alapú KDE-alkalmazás
+Comment[is]=KDE KPart forrit
+Comment[it]=Applicazione KPart di KDE
+Comment[ja]=KDE KPart アプリケーション
+Comment[lt]=KDE KPart programa
+Comment[nds]=En KPart-Deelprogramm för KDE
+Comment[ne]=एउटा केडीई KPart अनुप्रयोग
+Comment[nl]=Een KDE KPart-toepassing
+Comment[pl]=Osadzalny element KPart KDE
+Comment[pt]=Uma Aplicação KPart do KDE
+Comment[pt_BR]=Um Aplicativo KPart do KDE
+Comment[ru]=Приложение KPart для KDE
+Comment[sk]=KDE KPart aplikácia
+Comment[sl]=Program KPart za KDE
+Comment[sr]=KDE KPart програм
+Comment[sr@Latn]=KDE KPart program
+Comment[sv]=Ett KDE Kpart-program
+Comment[ta]=கெடி கெபார்ட் பயன்பாடு
+Comment[tg]=Ба кор андохтани KPart барои KDE
+Comment[tr]=Bir KDE KPart Uygulaması
+Comment[zh_CN]=一个 KDE KPart 应用程序
+Comment[zh_TW]=KDE KPart 應用程式
+Terminal=false
diff --git a/languages/cpp/app_templates/kapp/app.h b/languages/cpp/app_templates/kapp/app.h
new file mode 100644
index 00000000..45c65f4b
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/app.h
@@ -0,0 +1,89 @@
+%{H_TEMPLATE}
+
+#ifndef _%{APPNAMEUC}_H_
+#define _%{APPNAMEUC}_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <kapplication.h>
+#include <kmainwindow.h>
+
+#include "%{APPNAMELC}view.h"
+
+class KPrinter;
+class KURL;
+
+/**
+ * This class serves as the main window for %{APPNAME}. It handles the
+ * menus, toolbars, and status bars.
+ *
+ * @short Main window class
+ * @author %{AUTHOR} <%{EMAIL}>
+ * @version %{VERSION}
+ */
+class %{APPNAME} : public KMainWindow
+{
+ Q_OBJECT
+public:
+ /**
+ * Default Constructor
+ */
+ %{APPNAME}();
+
+ /**
+ * Default Destructor
+ */
+ virtual ~%{APPNAME}();
+
+ /**
+ * Use this method to load whatever file/URL you have
+ */
+ void load(const KURL& url);
+
+protected:
+ /**
+ * Overridden virtuals for Qt drag 'n drop (XDND)
+ */
+ virtual void dragEnterEvent(QDragEnterEvent *event);
+ virtual void dropEvent(QDropEvent *event);
+
+protected:
+ /**
+ * This function is called when it is time for the app to save its
+ * properties for session management purposes.
+ */
+ void saveProperties(KConfig *);
+
+ /**
+ * This function is called when this app is restored. The KConfig
+ * object points to the session management config file that was saved
+ * with @ref saveProperties
+ */
+ void readProperties(KConfig *);
+
+
+private slots:
+ void fileNew();
+ void fileOpen();
+ void fileSave();
+ void fileSaveAs();
+ void filePrint();
+ void optionsPreferences();
+
+ void changeStatusbar(const QString& text);
+ void changeCaption(const QString& text);
+
+private:
+ void setupAccel();
+ void setupActions();
+
+private:
+ %{APPNAME}View *m_view;
+
+ KPrinter *m_printer;
+};
+
+#endif // _%{APPNAMEUC}_H_
+
diff --git a/languages/cpp/app_templates/kapp/app.kdevelop b/languages/cpp/app_templates/kapp/app.kdevelop
new file mode 100644
index 00000000..07cf3f0f
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/app.kdevelop
@@ -0,0 +1,168 @@
+<?xml version = '1.0'?>
+<kdevelop>
+ <general>
+ <author>%{AUTHOR}</author>
+ <email>%{EMAIL}</email>
+ <version>%{VERSION}</version>
+ <projectmanagement>KDevKDEAutoProject</projectmanagement>
+ <primarylanguage>C++</primarylanguage>
+ <keywords>
+ <keyword>C++</keyword>
+ <keyword>Code</keyword>
+ <keyword>Qt</keyword>
+ <keyword>KDE</keyword>
+ </keywords>
+ <projectdirectory>.</projectdirectory>
+ <absoluteprojectpath>false</absoluteprojectpath>
+ <description/>
+ <ignoreparts/>
+ </general>
+ <kdevcppsupport>
+ <qt>
+ <version>3</version>
+ <used>true</used>
+ <includestyle>3</includestyle>
+ <designerintegration>EmbeddedKDevDesigner</designerintegration>
+ </qt>
+ </kdevcppsupport>
+ <kdevautoproject>
+ <general>
+ <activetarget>src/%{APPNAMELC}</activetarget>
+ <useconfiguration>debug</useconfiguration>
+ </general>
+ <run>
+ <mainprogram>src/%{APPNAMELC}</mainprogram>
+ <terminal>false</terminal>
+ </run>
+ <make>
+ <envvars>
+ <envvar value="1" name="WANT_AUTOCONF_2_5" />
+ <envvar value="1" name="WANT_AUTOMAKE_1_6" />
+ </envvars>
+ <abortonerror>false</abortonerror>
+ <numberofjobs>1</numberofjobs>
+ <dontact>false</dontact>
+ <makebin/>
+ </make>
+ <configurations>
+ <optimized>
+ <builddir>optimized</builddir>
+ <ccompiler>kdevgccoptions</ccompiler>
+ <cxxcompiler>kdevgppoptions</cxxcompiler>
+ <f77compiler>kdevg77options</f77compiler>
+ <cxxflags>-O2 -g0</cxxflags>
+ </optimized>
+ <debug>
+ <configargs>--enable-debug=full</configargs>
+ <builddir>debug</builddir>
+ <ccompiler>kdevgccoptions</ccompiler>
+ <cxxcompiler>kdevgppoptions</cxxcompiler>
+ <f77compiler>kdevg77options</f77compiler>
+ <cxxflags>-O0 -g3</cxxflags>
+ </debug>
+ </configurations>
+ </kdevautoproject>
+ <kdevfileview>
+ <groups>
+ <group pattern="*.cpp;*.cxx;*.h" name="Sources" />
+ <group pattern="*.ui" name="User Interface" />
+ <group pattern="*.png" name="Icons" />
+ <group pattern="*.po;*.ts" name="Translations" />
+ <group pattern="*" name="Others" />
+ </groups>
+ <tree>
+ <hidenonprojectfiles>false</hidenonprojectfiles>
+ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
+ </tree>
+ </kdevfileview>
+ <kdevdoctreeview>
+ <ignoretocs>
+ <toc>ada</toc>
+ <toc>ada_bugs_gcc</toc>
+ <toc>bash</toc>
+ <toc>bash_bugs</toc>
+ <toc>clanlib</toc>
+ <toc>w3c-dom-level2-html</toc>
+ <toc>fortran_bugs_gcc</toc>
+ <toc>gnome1</toc>
+ <toc>gnustep</toc>
+ <toc>gtk</toc>
+ <toc>gtk_bugs</toc>
+ <toc>haskell</toc>
+ <toc>haskell_bugs_ghc</toc>
+ <toc>java_bugs_gcc</toc>
+ <toc>java_bugs_sun</toc>
+ <toc>pascal_bugs_fp</toc>
+ <toc>php</toc>
+ <toc>php_bugs</toc>
+ <toc>perl</toc>
+ <toc>perl_bugs</toc>
+ <toc>python</toc>
+ <toc>python_bugs</toc>
+ <toc>ruby</toc>
+ <toc>ruby_bugs</toc>
+ <toc>sdl</toc>
+ <toc>w3c-svg</toc>
+ <toc>sw</toc>
+ <toc>w3c-uaag10</toc>
+ <toc>wxwidgets_bugs</toc>
+ </ignoretocs>
+ <ignoreqt_xml>
+ <toc>qmake User Guide</toc>
+ </ignoreqt_xml>
+ </kdevdoctreeview>
+ <kdevdebugger>
+ <general>
+ <dbgshell>libtool</dbgshell>
+ <programargs/>
+ <gdbpath/>
+ <breakonloadinglibs>true</breakonloadinglibs>
+ <separatetty>false</separatetty>
+ <floatingtoolbar>false</floatingtoolbar>
+ <runappinappdirectory>true</runappinappdirectory>
+ </general>
+ <display>
+ <staticmembers>false</staticmembers>
+ <demanglenames>true</demanglenames>
+ </display>
+ </kdevdebugger>
+ <kdevfilecreate>
+ <filetypes/>
+ <useglobaltypes>
+ <type ext="ui" />
+ <type ext="cpp" />
+ <type ext="h" />
+ </useglobaltypes>
+ </kdevfilecreate>
+ <kdevcvs>
+ <cvsoptions>-f</cvsoptions>
+ <commitoptions/>
+ <updateoptions>-dP</updateoptions>
+ <addoptions/>
+ <removeoptions>-f</removeoptions>
+ <diffoptions>-u3 -p</diffoptions>
+ <logoptions/>
+ <rshoptions/>
+ </kdevcvs>
+ <cppsupportpart>
+ <codecompletion/>
+ <filetemplates>
+ <choosefiles>false</choosefiles>
+ <interfaceURL/>
+ <implementationURL/>
+ <interfacesuffix>.h</interfacesuffix>
+ <implementationsuffix>.cpp</implementationsuffix>
+ <lowercasefilenames>true</lowercasefilenames>
+ </filetemplates>
+ </cppsupportpart>
+ <kdevclassview>
+ <folderhierarchy>true</folderhierarchy>
+ <depthoffolders>2</depthoffolders>
+ </kdevclassview>
+ <kdevdocumentation>
+ <projectdoc>
+ <docsystem>Doxygen Documentation Collection</docsystem>
+ <docurl>%{APPNAMELC}.tag</docurl>
+ </projectdoc>
+ </kdevdocumentation>
+</kdevelop>
diff --git a/languages/cpp/app_templates/kapp/app.kdevses b/languages/cpp/app_templates/kapp/app.kdevses
new file mode 100644
index 00000000..dcd1c8c1
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/app.kdevses
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE KDevPrjSession>
+<KDevPrjSession>
+ <DocsAndViews NumberOfDocuments="0" />
+ <pluginList>
+ <kdevbookmarks>
+ <bookmarks/>
+ </kdevbookmarks>
+ <kdevdebugger>
+ <breakpointList/>
+ </kdevdebugger>
+ </pluginList>
+</KDevPrjSession>
diff --git a/languages/cpp/app_templates/kapp/app_client.cpp b/languages/cpp/app_templates/kapp/app_client.cpp
new file mode 100644
index 00000000..5c062077
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/app_client.cpp
@@ -0,0 +1,26 @@
+%{CPP_TEMPLATE}
+
+#include <kapplication.h>
+#include <dcopclient.h>
+#include <qdatastream.h>
+#include <qstring.h>
+
+int main(int argc, char **argv)
+{
+ KApplication app(argc, argv, "%{APPNAMELC}_client", false);
+
+ // get our DCOP client and attach so that we may use it
+ DCOPClient *client = app.dcopClient();
+ client->attach();
+
+ // do a 'send' for now
+ QByteArray data;
+ QDataStream ds(data, IO_WriteOnly);
+ if (argc > 1)
+ ds << QString(argv[1]);
+ else
+ ds << QString("http://www.kde.org");
+ client->send("%{APPNAMELC}", "%{APPNAME}Iface", "openURL(QString)", data);
+
+ return app.exec();
+}
diff --git a/languages/cpp/app_templates/kapp/appiface.h b/languages/cpp/app_templates/kapp/appiface.h
new file mode 100644
index 00000000..4a24ae7f
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/appiface.h
@@ -0,0 +1,17 @@
+%{H_TEMPLATE}
+
+#ifndef _%{APPNAMEUC}IFACE_H_
+#define _%{APPNAMEUC}IFACE_H_
+
+#include <dcopobject.h>
+
+class %{APPNAME}Iface : virtual public DCOPObject
+{
+ K_DCOP
+public:
+
+k_dcop:
+ virtual void openURL(QString url) = 0;
+};
+
+#endif // _%{APPNAMEUC}IFACE_H_
diff --git a/languages/cpp/app_templates/kapp/appui.rc b/languages/cpp/app_templates/kapp/appui.rc
new file mode 100644
index 00000000..ceb4f14e
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/appui.rc
@@ -0,0 +1,8 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui name="%{APPNAMELC}" version="1">
+<MenuBar>
+ <Menu name="custom"><text>C&amp;ustom</text>
+ <Action name="custom_action" />
+ </Menu>
+</MenuBar>
+</kpartgui>
diff --git a/languages/cpp/app_templates/kapp/appview.cpp b/languages/cpp/app_templates/kapp/appview.cpp
new file mode 100644
index 00000000..a57adbf3
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/appview.cpp
@@ -0,0 +1,107 @@
+%{CPP_TEMPLATE}
+
+#include "%{APPNAMELC}view.h"
+
+#include <qpainter.h>
+#include <qlayout.h>
+
+#include <kurl.h>
+
+#include <ktrader.h>
+#include <klibloader.h>
+#include <kmessagebox.h>
+#include <krun.h>
+#include <klocale.h>
+
+%{APPNAME}View::%{APPNAME}View(QWidget *parent)
+ : QWidget(parent),
+ DCOPObject("%{APPNAME}Iface")
+{
+ // setup our layout manager to automatically add our widgets
+ QHBoxLayout *top_layout = new QHBoxLayout(this);
+ top_layout->setAutoAdd(true);
+
+ // we want to look for all components that satisfy our needs. the
+ // trader will actually search through *all* registered KDE
+ // applications and components -- not just KParts. So we have to
+ // specify two things: a service type and a constraint
+ //
+ // the service type is like a mime type. we say that we want all
+ // applications and components that can handle HTML -- 'text/html'
+ //
+ // however, by itself, this will return such things as Netscape..
+ // not what we wanted. so we constrain it by saying that the
+ // string 'KParts/ReadOnlyPart' must be found in the ServiceTypes
+ // field. with this, only components of the type we want will be
+ // returned.
+ KTrader::OfferList offers = KTrader::self()->query("text/html", "'KParts/ReadOnlyPart' in ServiceTypes");
+
+ KLibFactory *factory = 0;
+ // in theory, we only care about the first one.. but let's try all
+ // offers just in case the first can't be loaded for some reason
+ KTrader::OfferList::Iterator it(offers.begin());
+ for( ; it != offers.end(); ++it)
+ {
+ KService::Ptr ptr = (*it);
+
+ // we now know that our offer can handle HTML and is a part.
+ // since it is a part, it must also have a library... let's try to
+ // load that now
+ factory = KLibLoader::self()->factory( ptr->library() );
+ if (factory)
+ {
+ m_html = static_cast<KParts::ReadOnlyPart *>(factory->create(this, ptr->name(), "KParts::ReadOnlyPart"));
+ break;
+ }
+ }
+
+ // if our factory is invalid, then we never found our component
+ // and we might as well just exit now
+ if (!factory)
+ {
+ KMessageBox::error(this, i18n("Could not find a suitable HTML component"));
+ return;
+ }
+
+ connect(m_html, SIGNAL(setWindowCaption(const QString&)),
+ this, SLOT(slotSetTitle(const QString&)));
+ connect(m_html, SIGNAL(setStatusBarText(const QString&)),
+ this, SLOT(slotOnURL(const QString&)));
+
+}
+
+%{APPNAME}View::~%{APPNAME}View()
+{
+}
+
+void %{APPNAME}View::print(QPainter *p, int height, int width)
+{
+ // do the actual printing, here
+ // p->drawText(etc..)
+}
+
+QString %{APPNAME}View::currentURL()
+{
+ return m_html->url().url();
+}
+
+void %{APPNAME}View::openURL(QString url)
+{
+ openURL(KURL(url));
+}
+
+void %{APPNAME}View::openURL(const KURL& url)
+{
+ m_html->openURL(url);
+}
+
+void %{APPNAME}View::slotOnURL(const QString& url)
+{
+ emit signalChangeStatusbar(url);
+}
+
+void %{APPNAME}View::slotSetTitle(const QString& title)
+{
+ emit signalChangeCaption(title);
+}
+#include "%{APPNAMELC}view.moc"
diff --git a/languages/cpp/app_templates/kapp/appview.h b/languages/cpp/app_templates/kapp/appview.h
new file mode 100644
index 00000000..ae0c6b6d
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/appview.h
@@ -0,0 +1,77 @@
+%{H_TEMPLATE}
+
+#ifndef _%{APPNAMEUC}VIEW_H_
+#define _%{APPNAMEUC}VIEW_H_
+
+#include <qwidget.h>
+#include <kparts/part.h>
+#include <%{APPNAMELC}iface.h>
+
+class QPainter;
+class KURL;
+
+/**
+ * This is the main view class for %{APPNAME}. Most of the non-menu,
+ * non-toolbar, and non-statusbar (e.g., non frame) GUI code should go
+ * here.
+ *
+ * This %{APPNAMELC} uses an HTML component as an example.
+ *
+ * @short Main view
+ * @author %{AUTHOR} <%{EMAIL}>
+ * @version %{VERSION}
+ */
+class %{APPNAME}View : public QWidget, public %{APPNAME}Iface
+{
+ Q_OBJECT
+public:
+ /**
+ * Default constructor
+ */
+ %{APPNAME}View(QWidget *parent);
+
+ /**
+ * Destructor
+ */
+ virtual ~%{APPNAME}View();
+
+ /**
+ * Random 'get' function
+ */
+ QString currentURL();
+
+ /**
+ * Random 'set' function accessed by DCOP
+ */
+ virtual void openURL(QString url);
+
+ /**
+ * Random 'set' function
+ */
+ virtual void openURL(const KURL& url);
+
+ /**
+ * Print this view to any medium -- paper or not
+ */
+ void print(QPainter *, int height, int width);
+
+signals:
+ /**
+ * Use this signal to change the content of the statusbar
+ */
+ void signalChangeStatusbar(const QString& text);
+
+ /**
+ * Use this signal to change the content of the caption
+ */
+ void signalChangeCaption(const QString& text);
+
+private slots:
+ void slotOnURL(const QString& url);
+ void slotSetTitle(const QString& title);
+
+private:
+ KParts::ReadOnlyPart *m_html;
+};
+
+#endif // _%{APPNAMEUC}VIEW_H_
diff --git a/languages/cpp/app_templates/kapp/kapp.kdevtemplate b/languages/cpp/app_templates/kapp/kapp.kdevtemplate
new file mode 100644
index 00000000..7865c973
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/kapp.kdevtemplate
@@ -0,0 +1,253 @@
+# KDE Config File
+[General]
+Name=Application framework
+Name[ca]=Infraestructura d'aplicacions
+Name[da]=Programskelet
+Name[de]=Anwendungsgrundgerüst
+Name[el]=Πλαίσιο εφαρμογής
+Name[es]=Infraestructura de aplicación
+Name[et]=Rakenduse raamistik
+Name[eu]=Aplikazioen lan-markoa
+Name[fa]=چارچوب کاربرد
+Name[fr]=Infrastructure d'application
+Name[ga]=Creatlach feidhmchláir
+Name[gl]=Entorno de traballo para aplicación
+Name[hu]=Alkalmazás-keretrendszer
+Name[it]=Infrastruttura applicativa
+Name[ja]=アプリケーションフレームワーク
+Name[nds]=Programmrahmenwark
+Name[ne]=अनुप्रयोग फ्रेमवर्क
+Name[nl]=Applicationframework
+Name[pl]=Szablon programu
+Name[pt]=Plataforma de aplicações
+Name[pt_BR]=Plataforma de aplicações
+Name[ru]=Приложение KDE
+Name[sk]=Aplikačný framework
+Name[sl]=Ogrodje programa
+Name[sr]=Радни оквир програма
+Name[sr@Latn]=Radni okvir programa
+Name[sv]=Programramverk
+Name[tr]=Uygulama Çatısı
+Name[zh_CN]=应用程序框架
+Name[zh_TW]=應用程式框架
+Icon=kapp.png
+Category=C++/KDE
+Comment=Generates a simple KDE application with one toplevel window, menus and toolbars. A DCOP interface is also provided, so that your application can provide a scripting interface
+Comment[ca]=Genera una simple aplicació per al KDE amb una finestra principal, menús i barres d'eines. També es proveeix la interfície DCOP, de manera que la vostra aplicació podrà proveir d'una interfície per a scripts
+Comment[da]=Genererer et simpelt KDE program med et vindue på topniveau, menuer og værktøjslinjer. Der sørges også for en DCOP-grænseflade, så dit program kan sørge for en script-grænseflade
+Comment[de]=Erstellt eine einfache KDE-Anwendung mit einem Toplevel-Fenster, Menüs und Werkzeugleisten. Dazu kommt eine DCOP-Schnittstelle, so dass Ihre Anwendung eine Schnittstelle für Skripte anbieten kann.
+Comment[el]=Δημιουργεί μια απλή εφαρμογή KDE με ένα ανώτερο παράθυρο, μενού και γραμμές εργαλείων. Μια διασύνδεση DCOP προσφέρεται επίσης, έτσι ώστε η εφαρμογή σας να προσφέρει ένα περιβάλλον γραφής σεναρίων
+Comment[es]=Genera una sencilla aplicación de KDE con una ventana de nivel superior, menús y barras de herramientas. También se proporciona una interfaz DCOP para que su aplicación pueda proporcionar una interfaz para guiones de órdenes.
+Comment[et]=Lihtsa KDE rakenduse loomine ühe tipptaseme akna, menüüde ja tööriistaribadega. Lisatakse ka DCOP-liides, mis võimaldab pakkuda rakenduses ka skriptikeelte tuge.
+Comment[eu]=KDE aplikazio sinple bat sortzen du menu eta tresna-barradun goi-mailako lehio batekin. DCOP interfaze bat ere eskeintzen zaio aplikazioari, zure aplikazioak script interfaze bat izan dezan
+Comment[fa]=یک کاربرد سادۀ KDE با یک پنجرۀ سطح بالا، گزینگان و میله ابزارها تولید می‌کند. همچنین یک واسط DCOP فراهم است. بنابراین، کاربرد شما یک واسط دست‌نوشته‌ای را می‌تواند فراهم کند
+Comment[fr]=Génère une application KDE simple comprenant une fenêtre de premier niveau, des menus et des barres d'outils. Une interface DCOP est également prévue, afin que votre application puisse offrir une interface de scriptage
+Comment[ga]=Cruthaíonn sé seo feidhmchlár simplí KDE le príomhfhuinneog amháin, roghchláir agus barraí uirlisí. Soláthraítear comhéadan DCOP freisin, d'fhonn is féidir comhéadan scriptithe a chur ar fáil
+Comment[gl]=Xera unha aplicación KDE sinxela cunha xanela principal, menús e barras de ferramentas. Tamén se proporciona unha interface DCOP de modo que a súa aplicación poida proveer unha interface de scripting.
+Comment[hu]=Létrehoz egy egyszerű KDE-alkalmazást egy főablakkal, menükkel és eszköztárakkal. DCOP-felület is létre lesz hozva, ezért az alkalmazás szkriptelési felületet is biztosíthat.
+Comment[it]=Genera una semplice applicazione KDE con una finestra toplevel, menu e barre degli strumenti. È anche fornita un'interfaccia DCOP così l'applicazione avrà un'interfaccia per lo scripting
+Comment[ja]=簡単な KDE アプリケーションを作成します。アプリケーションには、トップレベルのウィンドウ、メニュー、ツールバーがあります。スクリプト化をサポートするために DCOP のインターフェースも用意してあります。
+Comment[nds]=Stellt en eenfach KDE-Programm mit een böverst Finster, Menüs un Warktüüchbalkens op. Ok warrt noch en DCOP-Koppelsteed praatstellt, so dat Dien Programm en Skriptkoppelsteed anbeden kann
+Comment[ne]=एउटा उच्चतह सञ्झ्याल, मेनु र उपकरणपट्टीसँग साधारण केडीई अनुप्रयोग उत्पन्न गर्दछ । DCOP पनि प्रदान गरिन्छ, जसले गर्दा तपाईँको अनुप्रयोगले स्क्रिप्टिङ इन्टरफेस प्रदान गर्न सक्दछ
+Comment[nl]=Genereert een eenvoudige KDE-toepassing met één toplevel window, menu's en toolbars. Er wordt ook een DCOP-interface aangeleverd, zodat uw toepassing een scripting interface kan aanleveren.
+Comment[pl]=Generuje prosty program dla KDE z oknem, menu i paskami narzędzi. Dostępny jest także interfejs DCOP, więc Twoje programy mogą zawierać interfejs do skryptów
+Comment[pt]=Gera uma aplicação simples do KDE com uma janela de topo, menus e barras de ferramentas. Também é oferecida uma interface de DCOP, para que a sua aplicação possa fornecer uma interface de programação
+Comment[pt_BR]=Gera uma aplicação simples do KDE com uma janela de topo, menus e barras de ferramentas. Também é oferecida uma interface de DCOP, para que a sua aplicação possa fornecer uma interface de programação
+Comment[ru]=Создание простого приложения KDE с окном, меню и панелями инструментов. Кроме того, в нём содержится интерфейс DCOP для автоматизации работы с помощью пользовательских скриптов
+Comment[sk]=Vygenruje jednoduchú KDE aplikáciu s jedným oknom, menu apanelom nástrojov. Taktiež bude poskytnuté DCOP rozhranie, takže aj aplikáciamôže poskytnúť skriptovacie rozhranie
+Comment[sr]=Прави једноставан KDE програм, са једним прозором највишег нивоа, менијима и тракама са алатом. Дат је и DCOP интерфејс, тако да ваш програм може да омогући скриптовање
+Comment[sr@Latn]=Pravi jednostavan KDE program, sa jednim prozorom najvišeg nivoa, menijima i trakama sa alatom. Dat je i DCOP interfejs, tako da vaš program može da omogući skriptovanje
+Comment[sv]=Skapar ett enkelt KDE-program med ett toppnivåfönster, menyer och verktygsrader. Ett DCOP-gränssnitt tillhandahålls också, så att programmet kan tillhandahålla ett skriptgränssnitt.
+Comment[tr]=Bir üst seviye penceresi, menüleri ve araç çubukları olan basit bir KDE uygulaması yaratır. Bir DCOP arayüzü sağlanır, böylece uygulama bir betik arayüzü sağlayabilir.
+Comment[zh_CN]=生成一个带一个顶层窗口、菜单和工具栏的简单 KDE 应用程序。另外还提供了 DCOP 接口,这样您的应用也可同时提供脚本接口。
+Comment[zh_TW]=產生一個簡單的 KDE 應用程式,內含頂層視窗、選單與工具列。另外提供一個 DCOP 介面,讓您的應用程式可以提供文稿介面。
+FileTemplates=h,CStyle,cpp,CStyle
+ShowFilesAfterGeneration=%{dest}/src/%{APPNAMELC}view.cpp,%{dest}/src/README
+Archive=kapp.tar.gz
+
+[ADMIN]
+Type=include
+File=%{kdevelop}/template-common/admin.kdevtemplate
+
+[GNU]
+Type=include
+File=%{kdevelop}/template-common/gnu.kdevtemplate
+
+[MKDIR_DOCBOOK1]
+Type=mkdir
+Dir=%{dest}/doc
+
+[MKDIR_DOCBOOK2]
+Type=mkdir
+Dir=%{dest}/doc/en
+
+[FILE1]
+Type=install
+Source=%{kdevelop}/template-common/kde-doc-Makefile.am
+Dest=%{dest}/doc/Makefile.am
+
+[FILE2]
+Type=install
+Source=%{kdevelop}/template-common/kde-doc-en-Makefile.am
+Dest=%{dest}/doc/en/Makefile.am
+
+[FILE3]
+Type=install
+EscapeXML=true
+Source=%{kdevelop}/template-common/kde-index.docbook
+Dest=%{dest}/doc/en/index.docbook
+
+[FILE4]
+Type=install
+EscapeXML=true
+Source=%{src}/app.kdevelop
+Dest=%{dest}/%{APPNAMELC}.kdevelop
+
+[FILE5]
+Type=install
+Source=%{kdevelop}/template-common/kde-Makefile.am
+Dest=%{dest}/Makefile.am
+
+[FILE6]
+Type=install
+Source=%{kdevelop}/template-common/kde-Makefile.cvs
+Dest=%{dest}/Makefile.cvs
+
+[FILE7]
+Type=install
+Source=%{kdevelop}/template-common/kde-configure.in.in
+Dest=%{dest}/configure.in.in
+
+[MkDir3]
+Type=mkdir
+Dir=%{dest}/src
+
+[FILE8]
+Type=install
+Source=%{kdevelop}/template-common/kde-app.desktop
+Dest=%{dest}/src/%{APPNAMELC}.desktop
+
+[FILE9]
+Type=install
+Source=%{kdevelop}/template-common/kde-app.lsm
+Dest=%{dest}/src/%{APPNAMELC}.lsm
+
+[FILE10]
+Type=install
+Source=%{kdevelop}/template-common/hi16-app-app.png
+Dest=%{dest}/src/hi16-app-%{APPNAMELC}.png
+Process=false
+
+[FILE11]
+Type=install
+Source=%{kdevelop}/template-common/hi32-app-app.png
+Dest=%{dest}/src/hi32-app-%{APPNAMELC}.png
+Process=false
+
+[MkDir4]
+Type=mkdir
+Dir=%{dest}/po
+
+[FILE12]
+Type=install
+Source=%{kdevelop}/template-common/kde-po-Makefile.am
+Dest=%{dest}/po/Makefile.am
+
+[FILE13]
+Type=install
+Source=%{src}/subdirs
+Dest=%{dest}/subdirs
+
+[FILE14]
+Type=install
+Source=%{src}/src-Makefile.am
+Dest=%{dest}/src/Makefile.am
+
+[FILE15]
+Type=install
+Source=%{src}/app.cpp
+Dest=%{dest}/src/%{APPNAMELC}.cpp
+
+[FILE16]
+Type=install
+Source=%{src}/app.h
+Dest=%{dest}/src/%{APPNAMELC}.h
+
+[FILE17]
+Type=install
+Source=%{src}/appview.cpp
+Dest=%{dest}/src/%{APPNAMELC}view.cpp
+
+[FILE18]
+Type=install
+Source=%{src}/appview.h
+Dest=%{dest}/src/%{APPNAMELC}view.h
+
+[FILE19]
+Type=install
+Source=%{src}/appiface.h
+Dest=%{dest}/src/%{APPNAMELC}iface.h
+
+[FILE20]
+Type=install
+Source=%{src}/app_client.cpp
+Dest=%{dest}/src/%{APPNAMELC}_client.cpp
+
+[FILE21]
+Type=install
+Source=%{src}/pref.cpp
+Dest=%{dest}/src/pref.cpp
+
+[FILE22]
+Type=install
+Source=%{src}/pref.h
+Dest=%{dest}/src/pref.h
+
+[FILE23]
+Type=install
+Source=%{src}/main.cpp
+Dest=%{dest}/src/main.cpp
+
+[FILE24]
+Type=install
+EscapeXML=true
+Source=%{src}/appui.rc
+Dest=%{dest}/src/%{APPNAMELC}ui.rc
+
+[FILE25]
+Type=install
+Source=%{src}/README
+Dest=%{dest}/src/README
+
+[MSG]
+Type=message
+Comment=A KDE Application was created at %{dest}
+Comment[ca]=Una aplicació per al KDE ha estat creada a %{dest}
+Comment[da]=Et KDE program blev oprettet i %{dest}
+Comment[de]=Eine KDE-Anwendung wurde in %{dest} erstellt.
+Comment[el]=Μια εφαρμογή KDE δημιουργήθηκε στο %{dest}
+Comment[es]=Una aplicación de KDE ha sido creada en %{dest}
+Comment[et]=KDE rakendus loodi asukohta %{dest}
+Comment[eu]=A KDE aplikazio bat sortu da hemen: %{dest}
+Comment[fa]=یک کاربرد KDE در %{dest} فراهم شد
+Comment[fr]=Une application KDE a été créée dans %{dest}
+Comment[ga]=Cruthaíodh Feidhmchlár KDE ag %{dest}
+Comment[gl]=Creouse unha aplicación KDE en %{dest}
+Comment[hu]=Létrejött egy KDE-s alkalmazás itt: %{dest}
+Comment[it]=È stata creata un'applicazione KDE in %{dest}
+Comment[ja]=KDE アプリケーションを %{dest} に作成しました
+Comment[nds]=In %{dest} wöör en KDE-Programm opstellt
+Comment[ne]=KDE अनुप्रयोग %{dest} मा सिर्जना गरियो
+Comment[nl]=Een KDE-toepassing is aangemaakt in %{dest}
+Comment[pl]=Program dla KDE został utworzony w %{dest}
+Comment[pt]=Foi criada uma aplicação do KDE em %{dest}
+Comment[pt_BR]=Foi criada uma aplicação do KDE em %{dest}
+Comment[ru]=Приложение KDE создано в %{dest}
+Comment[sk]=KDE aplikácia bola vytvorená v %{dest}
+Comment[sl]=Program za KDE je bil ustvarjen v %{dest}
+Comment[sr]=KDE програм је направљен у %{dest}
+Comment[sr@Latn]=KDE program je napravljen u %{dest}
+Comment[sv]=Ett KDE-program skapades i %{dest}
+Comment[tr]=Bir KDE Uygulaması %{dest} içinde yaratıldı.
+Comment[zh_CN]=在 %{dest} 中创建了一个 KDE 应用程序
+Comment[zh_TW]=一個 KDE 應用程式已建立於 %{dest}
diff --git a/languages/cpp/app_templates/kapp/kapp.png b/languages/cpp/app_templates/kapp/kapp.png
new file mode 100644
index 00000000..a421a664
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/kapp.png
Binary files differ
diff --git a/languages/cpp/app_templates/kapp/main.cpp b/languages/cpp/app_templates/kapp/main.cpp
new file mode 100644
index 00000000..60c161e8
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/main.cpp
@@ -0,0 +1,61 @@
+%{CPP_TEMPLATE}
+
+#include "%{APPNAMELC}.h"
+#include <kapplication.h>
+#include <dcopclient.h>
+#include <kaboutdata.h>
+#include <kcmdlineargs.h>
+#include <klocale.h>
+
+static const char description[] =
+ I18N_NOOP("A KDE Application");
+
+static const char version[] = "%{VERSION}";
+
+static KCmdLineOptions options[] =
+{
+ { "+[URL]", I18N_NOOP( "Document to open" ), 0 },
+ KCmdLineLastOption
+};
+
+int main(int argc, char **argv)
+{
+ KAboutData about("%{APPNAMELC}", I18N_NOOP("%{APPNAME}"), version, description,
+ KAboutData::License_%{LICENSE}, "(C) %{YEAR} %{AUTHOR}", 0, 0, "%{EMAIL}");
+ about.addAuthor( "%{AUTHOR}", 0, "%{EMAIL}" );
+ KCmdLineArgs::init(argc, argv, &about);
+ KCmdLineArgs::addCmdLineOptions(options);
+ KApplication app;
+
+ // register ourselves as a dcop client
+ app.dcopClient()->registerAs(app.name(), false);
+
+ // see if we are starting with session management
+ if (app.isRestored())
+ {
+ RESTORE(%{APPNAME});
+ }
+ else
+ {
+ // no session.. just start up normally
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+ if (args->count() == 0)
+ {
+ %{APPNAME} *widget = new %{APPNAME};
+ widget->show();
+ }
+ else
+ {
+ int i = 0;
+ for (; i < args->count(); i++)
+ {
+ %{APPNAME} *widget = new %{APPNAME};
+ widget->show();
+ widget->load(args->url(i));
+ }
+ }
+ args->clear();
+ }
+
+ return app.exec();
+}
diff --git a/languages/cpp/app_templates/kapp/pref.cpp b/languages/cpp/app_templates/kapp/pref.cpp
new file mode 100644
index 00000000..ee647b1c
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/pref.cpp
@@ -0,0 +1,42 @@
+%{CPP_TEMPLATE}
+
+#include "pref.h"
+
+#include <klocale.h>
+
+#include <qlayout.h>
+#include <qlabel.h>
+
+%{APPNAME}Preferences::%{APPNAME}Preferences()
+ : KDialogBase(TreeList, i18n("%{APPNAME} Preferences"),
+ Help|Default|Ok|Apply|Cancel, Ok)
+{
+ // this is the base class for your preferences dialog. it is now
+ // a Treelist dialog.. but there are a number of other
+ // possibilities (including Tab, Swallow, and just Plain)
+ QFrame *frame;
+ frame = addPage(i18n("First Page"), i18n("Page One Options"));
+ m_pageOne = new %{APPNAME}PrefPageOne(frame);
+
+ frame = addPage(i18n("Second Page"), i18n("Page Two Options"));
+ m_pageTwo = new %{APPNAME}PrefPageTwo(frame);
+}
+
+%{APPNAME}PrefPageOne::%{APPNAME}PrefPageOne(QWidget *parent)
+ : QFrame(parent)
+{
+ QHBoxLayout *layout = new QHBoxLayout(this);
+ layout->setAutoAdd(true);
+
+ new QLabel(i18n("Add something here"), this);
+}
+
+%{APPNAME}PrefPageTwo::%{APPNAME}PrefPageTwo(QWidget *parent)
+ : QFrame(parent)
+{
+ QHBoxLayout *layout = new QHBoxLayout(this);
+ layout->setAutoAdd(true);
+
+ new QLabel(i18n("Add something here"), this);
+}
+#include "pref.moc"
diff --git a/languages/cpp/app_templates/kapp/pref.h b/languages/cpp/app_templates/kapp/pref.h
new file mode 100644
index 00000000..11aec821
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/pref.h
@@ -0,0 +1,37 @@
+%{H_TEMPLATE}
+
+#ifndef _%{APPNAMEUC}PREF_H_
+#define _%{APPNAMEUC}PREF_H_
+
+#include <kdialogbase.h>
+#include <qframe.h>
+
+class %{APPNAME}PrefPageOne;
+class %{APPNAME}PrefPageTwo;
+
+class %{APPNAME}Preferences : public KDialogBase
+{
+ Q_OBJECT
+public:
+ %{APPNAME}Preferences();
+
+private:
+ %{APPNAME}PrefPageOne *m_pageOne;
+ %{APPNAME}PrefPageTwo *m_pageTwo;
+};
+
+class %{APPNAME}PrefPageOne : public QFrame
+{
+ Q_OBJECT
+public:
+ %{APPNAME}PrefPageOne(QWidget *parent = 0);
+};
+
+class %{APPNAME}PrefPageTwo : public QFrame
+{
+ Q_OBJECT
+public:
+ %{APPNAME}PrefPageTwo(QWidget *parent = 0);
+};
+
+#endif // _%{APPNAMEUC}PREF_H_
diff --git a/languages/cpp/app_templates/kapp/src-Makefile.am b/languages/cpp/app_templates/kapp/src-Makefile.am
new file mode 100644
index 00000000..51cb1973
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/src-Makefile.am
@@ -0,0 +1,43 @@
+## Makefile.am for %{APPNAMELC}
+
+# this is the program that gets installed. it's name is used for all
+# of the other Makefile.am variables
+bin_PROGRAMS = %{APPNAMELC} %{APPNAMELC}_client
+
+# set the include path for X, qt and KDE
+INCLUDES = $(all_includes)
+
+# the library search path.
+%{APPNAMELC}_LDFLAGS = $(KDE_RPATH) $(all_libraries)
+
+# the libraries to link against.
+%{APPNAMELC}_LDADD = $(LIB_KFILE) $(LIB_KDEPRINT)
+
+# which sources should be compiled for %{APPNAMELC}
+%{APPNAMELC}_SOURCES = main.cpp %{APPNAMELC}.cpp %{APPNAMELC}view.cpp \
+ pref.cpp %{APPNAMELC}iface.skel
+
+# these are the headers for your project
+noinst_HEADERS = %{APPNAMELC}.h %{APPNAMELC}view.h pref.h
+
+# client stuff
+%{APPNAMELC}_client_LDFLAGS = $(KDE_RPATH) $(all_libraries)
+%{APPNAMELC}_client_LDADD = $(LIB_KDECORE)
+%{APPNAMELC}_client_SOURCES = %{APPNAMELC}_client.cpp
+
+# let automoc handle all of the meta source files (moc)
+METASOURCES = AUTO
+
+messages: rc.cpp
+ $(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/%{APPNAMELC}.pot
+
+KDE_ICON = AUTO
+
+# this is where the kdelnk file will go
+kdelnkdir = $(kde_appsdir)/Utilities
+kdelnk_DATA = %{APPNAMELC}.desktop
+
+# this is where the XML-GUI resource file goes
+rcdir = $(kde_datadir)/%{APPNAMELC}
+rc_DATA = %{APPNAMELC}ui.rc
diff --git a/languages/cpp/app_templates/kapp/subdirs b/languages/cpp/app_templates/kapp/subdirs
new file mode 100644
index 00000000..0e678106
--- /dev/null
+++ b/languages/cpp/app_templates/kapp/subdirs
@@ -0,0 +1,3 @@
+doc
+po
+src