summaryrefslogtreecommitdiffstats
path: root/languages/cpp/app_templates/kscons_kmdi/appkmdi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'languages/cpp/app_templates/kscons_kmdi/appkmdi.cpp')
-rw-r--r--languages/cpp/app_templates/kscons_kmdi/appkmdi.cpp394
1 files changed, 394 insertions, 0 deletions
diff --git a/languages/cpp/app_templates/kscons_kmdi/appkmdi.cpp b/languages/cpp/app_templates/kscons_kmdi/appkmdi.cpp
new file mode 100644
index 00000000..be5d8862
--- /dev/null
+++ b/languages/cpp/app_templates/kscons_kmdi/appkmdi.cpp
@@ -0,0 +1,394 @@
+%{CPP_TEMPLATE}
+
+#include <qdragobject.h>
+#include <qpainter.h>
+#include <qpaintdevicemetrics.h>
+#include <qdragobject.h>
+#include <qstatusbar.h>
+#include <qtoolbutton.h>
+
+#include <kdebug.h>
+#include <kglobal.h>
+#include <ktip.h>
+#include <kparts/part.h>
+#include <kparts/partmanager.h>
+
+#include <kio/netaccess.h>
+#include <kurl.h>
+#include <kurldrag.h>
+#include <kurlrequesterdlg.h>
+#include <kconfig.h>
+#include <kconfigdialog.h>
+#include <klibloader.h>
+#include <kaboutdata.h>
+#include <kfiledialog.h>
+#include <kactionclasses.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kdeversion.h>
+#include <kmenubar.h>
+#include <kstatusbar.h>
+#include <kkeydialog.h>
+#include <kmessagebox.h>
+#include <ktabwidget.h>
+#include <kedittoolbar.h>
+#include <kdeversion.h>
+#include <kstdaccel.h>
+#include <kaction.h>
+#include <kstdaction.h>
+
+#include "settings.h"
+#include "prefs.h"
+#include "%{APPNAMELC}kmdiView.h"
+#include "kmdikonsole.h"
+#include "%{APPNAMELC}kmdi.h"
+
+%{APPNAMELC}kmdi::%{APPNAMELC}kmdi(KMdi::MdiMode mode)
+ : KMdiMainFrm( 0, "%{APPNAMELC}", mode )
+{
+ resize( 800, 600 ); // start at 800x600 the first time
+
+ setManagedDockPositionModeEnabled(true);
+ setStandardMDIMenuEnabled(false);
+
+ m_manager = new KParts::PartManager(this);
+ connect(m_manager, SIGNAL(activePartChanged(KParts::Part*)),
+ this, SLOT(createGUI(KParts::Part*)) );
+
+#if KDE_IS_VERSION(3, 3, 0)
+ setToolviewStyle( KMdi::TextAndIcon );
+ tabWidget()->setHoverCloseButton( false );
+#endif
+
+ setMenuForSDIModeSysButtons( menuBar() );
+ setManagedDockPositionModeEnabled(true);
+
+ m_console = NULL;
+
+ // accept dnd
+ setAcceptDrops(true);
+
+ // then, setup our actions
+ setupActions();
+
+ //createShellGUI( true );
+
+ // and a status bar
+ statusBar()->show();
+
+ connect( this, SIGNAL( viewActivated( KMdiChildView * ) ), this, SLOT( currentChanged( KMdiChildView * ) ) );
+
+ m_console = new kmdikonsole(this, "konsole");
+ m_console->setIcon( SmallIcon("konsole") );
+ m_console->setCaption( i18n("Terminal") );
+ addToolWindow( m_console, KDockWidget::DockBottom, getMainDockWidget(), 20 );
+
+
+#if KDE_IS_VERSION(3, 3, 0)
+ if (Settings::showCloseTabsButton())
+ {
+ QToolButton *but = new QToolButton(tabWidget());
+ but->setIconSet(SmallIcon("tab_remove"));
+ but->adjustSize();
+ but->hide();
+ connect(but, SIGNAL(clicked()), actionCollection()->action( "file_close" ), SIGNAL(activated()));
+ tabWidget()->setCornerWidget(but, TopRight);
+ }
+#endif
+
+ // apply the saved mainwindow settings, if any, and ask the mainwindow
+ // to automatically save settings if changed: window size, toolbar
+ // position, icon size, etc.
+ setAutoSaveSettings();
+
+ // Read the dock config only if the app was started at least only once - kmdi is tricky
+ KConfig *cfg = new KConfig("%{APPNAMELC}_dockposrc");
+ if (cfg->readNumEntry("%{APPNAMELC}_main_dock_settings", 0) == 1) manager()->readConfig(cfg);
+ cfg->writeEntry("%{APPNAMELC}_main_dock_settings", 1);
+ delete cfg;
+
+ showTipOnStart();
+}
+
+%{APPNAMELC}kmdi::~%{APPNAMELC}kmdi()
+{
+ // Write the dock config on exit
+ KConfig *cfg = new KConfig("%{APPNAMELC}_dockposrc");
+ manager()->writeConfig(cfg);
+ delete cfg;
+ delete m_console;
+}
+
+void %{APPNAMELC}kmdi::setupActions()
+{
+ setXMLFile("%{APPNAMELC}_shell.rc");
+
+ KStdAction::openNew(this, SLOT(slotFileNew()), actionCollection());
+
+ KStdAction::tipOfDay( this, SLOT( showTip() ), actionCollection()
+ )->setWhatsThis(i18n("This shows useful tips on the use of this application."));
+
+ KStdAction::close(this, SLOT(slotFileClose()), actionCollection());
+ KStdAction::quit(this, SLOT(slotFileQuit()), actionCollection());
+
+ m_toolbarAction = KStdAction::showToolbar(this, SLOT(optionsShowToolbar()), actionCollection());
+ m_statusbarAction = KStdAction::showStatusbar(this, SLOT(optionsShowStatusbar()), actionCollection());
+
+ KStdAction::keyBindings(this, SLOT(optionsConfigureKeys()), actionCollection());
+ KStdAction::preferences(this, SLOT(optionsPreferences()), actionCollection());
+
+ KAction* action = KStdAction::configureToolbars(this,
+ SLOT(optionsConfigureToolbars()), actionCollection());
+
+ createGUI( NULL );
+}
+
+void %{APPNAMELC}kmdi::showTip()
+{
+ KTipDialog::showTip(this,QString::null,true);
+}
+
+void %{APPNAMELC}kmdi::showTipOnStart()
+{
+ KTipDialog::showTip(this);
+}
+
+void %{APPNAMELC}kmdi::slotFileNew()
+{
+ %{APPNAMELC}kmdiView *view = new %{APPNAMELC}kmdiView(this);
+ m_manager->addPart( view->part() );
+
+ addWindow( view );
+
+ // add the tree view to the widget stack
+ m_views += view;
+
+ currentChanged( view );
+}
+
+void %{APPNAMELC}kmdi::openURL(const KURL & url)
+{
+ // check if the url is not already opened first
+ QValueList<%{APPNAMELC}kmdiView*>::iterator it = m_views.begin();
+ QValueList<%{APPNAMELC}kmdiView*>::iterator end = m_views.end();
+ for (; it != end; ++it)
+ {
+ %{APPNAMELC}kmdiView *view = *it;
+ if (view->part()->url() == url)
+ {
+ activateView(view);
+ return;
+ }
+ }
+
+ %{APPNAMELC}kmdiView *view = new %{APPNAMELC}kmdiView(this);
+ m_manager->addPart( view->part() );
+
+ addWindow( view );
+
+ m_views += view;
+
+ view->part()->openURL(url);
+ currentChanged( view );
+}
+
+void %{APPNAMELC}kmdi::currentChanged( KMdiChildView *current )
+{
+ //kdWarning()<<"current view changed"<<endl;
+ if (!current)
+ {
+ m_manager->setActivePart(NULL);
+ //setCaption("()");
+ return;
+ }
+
+ // switch to the corresponding document
+ if ( m_views.contains( (%{APPNAMELC}kmdiView*) current ) )
+ {
+ %{APPNAMELC}kmdiView *view = (%{APPNAMELC}kmdiView*) current;
+ //view->updateCaption();
+ m_manager->setActivePart( view->part() );
+ }
+}
+
+void %{APPNAMELC}kmdi::slotFileClose()
+{
+ requestClose( activeWindow() );
+}
+
+bool %{APPNAMELC}kmdi::requestClose(KMdiChildView* v)
+{
+ // kdWarning()<<"closing view"<<v<<endl;
+ // if (view == NULL)
+ // return;
+
+ if (v == NULL)
+ {
+ if ( m_views.count() == 1)
+ {
+ %{APPNAMELC}kmdiView *view = m_views[0];
+ if (view->part()->queryClose())
+ {
+ m_manager->removePart( view->part() );
+
+ closeWindow( view );
+ m_views.clear();
+ setCaption("kdissert");
+ return true;
+ }
+ return false;
+ }
+ return true;
+ }
+
+ %{APPNAMELC}kmdiView *view = (%{APPNAMELC}kmdiView*) v;
+ if ( m_views.contains( view ) )
+ {
+ m_views.remove( view );
+ if ( view->part()->queryClose() )
+ {
+ m_manager->removePart( view->part() );
+
+ closeWindow( view );
+ return true;
+ }
+ return false;
+ }
+ return true;
+}
+
+void %{APPNAMELC}kmdi::slotFileQuit()
+{
+ close();
+}
+
+void %{APPNAMELC}kmdi::optionsShowToolbar()
+{
+ if (m_toolbarAction->isChecked())
+ toolBar()->show();
+ else
+ toolBar()->hide();
+}
+
+void %{APPNAMELC}kmdi::optionsShowStatusbar()
+{
+ if (m_statusbarAction->isChecked())
+ statusBar()->show();
+ else
+ statusBar()->hide();
+}
+
+void %{APPNAMELC}kmdi::optionsConfigureKeys()
+{
+ //KKeyDialog::configure(actionCollection());
+ KKeyDialog dlg( false, this );
+ QPtrList<KXMLGUIClient> clients = guiFactory()->clients();
+
+ for( QPtrListIterator<KXMLGUIClient> it( clients ); it.current(); ++it )
+ dlg.insert ( (*it)->actionCollection(), (*it)->instance()->aboutData()->programName() );
+
+ dlg.configure();
+
+ for (int i=0; i<m_views.count(); i++)
+ {
+ m_views[i]->part()->reloadXML();
+ }
+}
+
+void %{APPNAMELC}kmdi::optionsConfigureToolbars()
+{
+ //saveMainWindowSettings(KGlobal::config(), autoSaveGroup());
+}
+
+void %{APPNAMELC}kmdi::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 %{APPNAMELC}kmdi::optionsPreferences()
+{
+ // The preference dialog is derived from prefs-base.ui which is subclassed into Prefs
+ //
+ // compare the names of the widgets in the .ui file
+ // to the names of the variables in the .kcfg file
+ if (KConfigDialog::showDialog("settings"))
+ return;
+
+ KConfigDialog *dialog = new KConfigDialog(this, "settings", Settings::self(), KDialogBase::Swallow);
+ dialog->addPage(new prefs(), i18n("General"), "package_settings");
+ connect(dialog, SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
+ dialog->show();
+}
+
+void %{APPNAMELC}kmdi::settingsChanged()
+{
+ // propagate the changes to our views
+ /*QValueList<%{APPNAMELC}kmdiView*>::iterator it = m_views.begin();
+ QValueList<%{APPNAMELC}kmdiView*>::iterator end = m_views.end();
+ for (; it != end; ++it)
+ {
+ %{APPNAMELC}kmdiView *view = *it;
+ view->settingsChanged();
+ }*/
+}
+
+void %{APPNAMELC}kmdi::changeStatusbar(const QString& text)
+{
+ // display the text on the statusbar
+ statusBar()->message(text, 2000);
+}
+
+void %{APPNAMELC}kmdi::dragEnterEvent(QDragEnterEvent *event)
+{
+ // accept uri drops only
+ event->accept(KURLDrag::canDecode(event));
+}
+
+void %{APPNAMELC}kmdi::dropEvent(QDropEvent *event)
+{
+ 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
+ openURL(url);
+ }
+}
+
+bool %{APPNAMELC}kmdi::queryClose()
+{
+ QValueList<%{APPNAMELC}kmdiView*>::iterator it;
+
+ // check if we can close all documents
+ for (it = m_views.begin(); it != m_views.end(); ++it)
+ {
+ // kdWarning()<<"searching for the part"<<endl;
+ %{APPNAMELC}kmdiView *view = *it;
+ if (!view->part()->queryClose())
+ {
+ return false;
+ }
+ }
+
+ // and now close the documents
+ for (it = m_views.begin(); it != m_views.end(); ++it)
+ {
+ // now close all views
+ %{APPNAMELC}kmdiView *view = *it;
+
+ m_manager->removePart( view->part() );
+ closeWindow( view );
+ }
+
+ return true;
+}
+
+#include "%{APPNAMELC}kmdi.moc"