%{CPP_TEMPLATE} #include "%{APPNAMELC}.h" #include "pref.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include %{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, 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 KAction *custom = new KAction(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"