|
|
|
echo "Creating $LOCATION_ROOT/${APP_NAME_LC}/${APP_NAME_LC}.cpp...";
|
|
|
|
cat << EOF > $LOCATION_ROOT/${APP_NAME_LC}/${APP_NAME_LC}.cpp
|
|
|
|
/*
|
|
|
|
* ${APP_NAME_LC}.cpp
|
|
|
|
*
|
|
|
|
* Copyright (C) 2004 $AUTHOR <$EMAIL>
|
|
|
|
*/
|
|
|
|
#include "${APP_NAME_LC}.h"
|
|
|
|
|
|
|
|
#include "${APP_NAME_LC}pref.h"
|
|
|
|
|
|
|
|
#include <kprinter.h>
|
|
|
|
#include <tqpainter.h>
|
|
|
|
#include <tqpaintdevicemetrics.h>
|
|
|
|
|
|
|
|
#include <tdeversion.h>
|
|
|
|
#include <kglobal.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <kiconloader.h>
|
|
|
|
#include <kmenubar.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 <kedittoolbar.h>
|
|
|
|
|
|
|
|
#include <kstdaccel.h>
|
|
|
|
#include <kaction.h>
|
|
|
|
#include <kstdaction.h>
|
|
|
|
|
|
|
|
${APP_NAME}::${APP_NAME}()
|
|
|
|
: KMainWindow( 0, "${APP_NAME}" ),
|
|
|
|
m_view(new ${APP_NAME}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();
|
|
|
|
|
|
|
|
// Add typical actions and save size/toolbars/statusbar
|
|
|
|
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&)));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
${APP_NAME}::~${APP_NAME}()
|
|
|
|
{
|
|
|
|
delete m_printer;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ${APP_NAME}::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 (KIO::NetAccess::download(url, target))
|
|
|
|
{
|
|
|
|
// set our caption
|
|
|
|
setCaption(url.prettyURL());
|
|
|
|
|
|
|
|
// 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 ${APP_NAME}::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 ${APP_NAME}::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().isNull()) {
|
|
|
|
#if KDE_IS_VERSION(3,1,3)
|
|
|
|
config->writePathEntry("lastURL", m_view->currentURL());
|
|
|
|
#else
|
|
|
|
config->writeEntry("lastURL", m_view->currentURL());
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void ${APP_NAME}::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'
|
|
|
|
|
|
|
|
TQString url = config->readPathEntry("lastURL");
|
|
|
|
|
|
|
|
if (!url.isEmpty())
|
|
|
|
m_view->openURL(KURL::fromPathOrURL(url));
|
|
|
|
}
|
|
|
|
|
|
|
|
void ${APP_NAME}::dragEnterEvent(TQDragEnterEvent *event)
|
|
|
|
{
|
|
|
|
// accept uri drops only
|
|
|
|
event->accept(KURLDrag::canDecode(event));
|
|
|
|
}
|
|
|
|
|
|
|
|
void ${APP_NAME}::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 ${APP_NAME}::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 ${APP_NAME})->show();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ${APP_NAME}::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
|
|
|
|
KURL url = KURLRequesterDlg::getURL(TQString(), this, i18n("Open Location") );
|
|
|
|
if (!url.isEmpty())
|
|
|
|
m_view->openURL(url);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ${APP_NAME}::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 ${APP_NAME}::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 ${APP_NAME}::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 ${APP_NAME}::optionsConfigureToolbars()
|
|
|
|
{
|
|
|
|
// use the standard toolbar editor
|
|
|
|
saveMainWindowSettings( KGlobal::config(), autoSaveGroup() );
|
|
|
|
KEditToolbar dlg(actionCollection());
|
|
|
|
connect(&dlg, TQT_SIGNAL(newToolbarConfig()), this, TQT_SLOT(newToolbarConfig()));
|
|
|
|
dlg.exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
void ${APP_NAME}::newToolbarConfig()
|
|
|
|
{
|
|
|
|
// this slot is called when user clicks "Ok" or "Apply" in the toolbar editor.
|
|
|
|
// recreate our GUI, and re-apply the settings (e.g. "text under icons", etc.)
|
|
|
|
createGUI();
|
|
|
|
applyMainWindowSettings( KGlobal::config(), autoSaveGroup() );
|
|
|
|
}
|
|
|
|
|
|
|
|
void ${APP_NAME}::optionsPreferences()
|
|
|
|
{
|
|
|
|
// popup some sort of preference dialog, here
|
|
|
|
${APP_NAME}Preferences dlg;
|
|
|
|
if (dlg.exec())
|
|
|
|
{
|
|
|
|
// redo your settings
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void ${APP_NAME}::changeStatusbar(const TQString& text)
|
|
|
|
{
|
|
|
|
// display the text on the statusbar
|
|
|
|
statusBar()->message(text);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ${APP_NAME}::changeCaption(const TQString& text)
|
|
|
|
{
|
|
|
|
// display the text on the caption
|
|
|
|
setCaption(text);
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "${APP_NAME_LC}.moc"
|