diff options
Diffstat (limited to 'languages/cpp/app_templates/kapp/app.cpp')
-rw-r--r-- | languages/cpp/app_templates/kapp/app.cpp | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/languages/cpp/app_templates/kapp/app.cpp b/languages/cpp/app_templates/kapp/app.cpp new file mode 100644 index 00000000..774efe8e --- /dev/null +++ b/languages/cpp/app_templates/kapp/app.cpp @@ -0,0 +1,247 @@ +%{CPP_TEMPLATE} + +#include "%{APPNAMELC}.h" +#include "pref.h" + +#include <tqdragobject.h> +#include <kprinter.h> +#include <tqpainter.h> +#include <tqpaintdevicemetrics.h> + +#include <tdeglobal.h> +#include <tdelocale.h> +#include <kiconloader.h> +#include <tdeversion.h> +#include <kstatusbar.h> +#include <tdeaccel.h> +#include <tdeio/netaccess.h> +#include <tdefiledialog.h> +#include <tdeconfig.h> +#include <kurl.h> +#include <kurldrag.h> +#include <kurlrequesterdlg.h> + +#include <tdestdaccel.h> +#include <tdeaction.h> +#include <kstdaction.h> + +%{APPNAME}::%{APPNAME}() + : TDEMainWindow( 0, "%{APPNAME}" ), + m_view(new %{APPNAME}View(this)), + m_printer(0) +{ + // accept dnd + setAcceptDrops(true); + + // tell the TDEMainWindow 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, TQT_SIGNAL(signalChangeStatusbar(const TQString&)), + this, TQT_SLOT(changeStatusbar(const TQString&))); + connect(m_view, TQT_SIGNAL(signalChangeCaption(const TQString&)), + this, TQT_SLOT(changeCaption(const TQString&))); + +} + +%{APPNAME}::~%{APPNAME}() +{ +} + +void %{APPNAME}::load(const KURL& url) +{ + TQString 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 (TDEIO::NetAccess::download(url, target)) + { + // set our caption + setCaption(url); + + // load in the file (target is always local) + loadFile(target); + + // and remove the temp file + TDEIO::NetAccess::removeTempFile(target); + } + #endif + + setCaption(url.prettyURL()); + m_view->openURL(url); +} + +void %{APPNAME}::setupActions() +{ + KStdAction::openNew(this, TQT_SLOT(fileNew()), actionCollection()); + KStdAction::open(this, TQT_SLOT(fileOpen()), actionCollection()); + KStdAction::save(this, TQT_SLOT(fileSave()), actionCollection()); + KStdAction::saveAs(this, TQT_SLOT(fileSaveAs()), actionCollection()); + KStdAction::print(this, TQT_SLOT(filePrint()), actionCollection()); + KStdAction::quit(kapp, TQT_SLOT(quit()), actionCollection()); + + KStdAction::preferences(this, TQT_SLOT(optionsPreferences()), actionCollection()); + + // this doesn't do anything useful. it's just here to illustrate + // how to insert a custom menu and menu item + TDEAction *custom = new TDEAction(i18n("Cus&tom Menuitem"), 0, + this, TQT_SLOT(optionsPreferences()), + actionCollection(), "custom_action"); +} + +void %{APPNAME}::saveProperties(TDEConfig *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(TDEConfig *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' + + TQString url = config->readPathEntry("lastURL"); + + if (!url.isEmpty()) + m_view->openURL(KURL(url)); +} + +void %{APPNAME}::dragEnterEvent(TQDragEnterEvent *event) +{ + // accept uri drops only + event->accept(KURLDrag::canDecode(event)); +} + +void %{APPNAME}::dropEvent(TQDropEvent *event) +{ + // this is a very simplistic implementation of a drop event. we + // will only accept a dropped URL. the TQt 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(TQString(), this, i18n("Open Location") ); +*/ + // standard filedialog + KURL url = KFileDialog::getOpenURL(TQString(), TQString(), 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 TQt, you always "print" to a + // TQPainter.. whether the output medium is a pixmap, a screen, + // or paper + TQPainter p; + p.begin(m_printer); + + // we let our view do the actual printing + TQPaintDeviceMetrics 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 TQString& text) +{ + // display the text on the statusbar + statusBar()->message(text); +} + +void %{APPNAME}::changeCaption(const TQString& text) +{ + // display the text on the caption + setCaption(text); +} +#include "%{APPNAMELC}.moc" |