%{CPP_TEMPLATE} #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "settings.h" #include "prefs.h" #include "%{APPNAMELC}tdemdiView.h" #include "tdemdikonsole.h" #include "%{APPNAMELC}tdemdi.h" %{APPNAMELC}tdemdi::%{APPNAMELC}tdemdi(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, TQT_SIGNAL(activePartChanged(KParts::Part*)), this, TQT_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, TQT_SIGNAL( viewActivated( KMdiChildView * ) ), this, TQT_SLOT( currentChanged( KMdiChildView * ) ) ); m_console = new tdemdikonsole(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()) { TQToolButton *but = new TQToolButton(tabWidget()); but->setIconSet(SmallIcon("tab_remove")); but->adjustSize(); but->hide(); connect(but, TQT_SIGNAL(clicked()), actionCollection()->action( "file_close" ), TQT_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 - tdemdi is tricky TDEConfig *cfg = new TDEConfig("%{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}tdemdi::~%{APPNAMELC}tdemdi() { // Write the dock config on exit TDEConfig *cfg = new TDEConfig("%{APPNAMELC}_dockposrc"); manager()->writeConfig(cfg); delete cfg; delete m_console; } void %{APPNAMELC}tdemdi::setupActions() { setXMLFile("%{APPNAMELC}_shell.rc"); KStdAction::openNew(this, TQT_SLOT(slotFileNew()), actionCollection()); KStdAction::tipOfDay( this, TQT_SLOT( showTip() ), actionCollection() )->setWhatsThis(i18n("This shows useful tips on the use of this application.")); KStdAction::close(this, TQT_SLOT(slotFileClose()), actionCollection()); KStdAction::quit(this, TQT_SLOT(slotFileQuit()), actionCollection()); m_toolbarAction = KStdAction::showToolbar(this, TQT_SLOT(optionsShowToolbar()), actionCollection()); m_statusbarAction = KStdAction::showStatusbar(this, TQT_SLOT(optionsShowStatusbar()), actionCollection()); KStdAction::keyBindings(this, TQT_SLOT(optionsConfigureKeys()), actionCollection()); KStdAction::preferences(this, TQT_SLOT(optionsPreferences()), actionCollection()); TDEAction* action = KStdAction::configureToolbars(this, TQT_SLOT(optionsConfigureToolbars()), actionCollection()); createGUI( NULL ); } void %{APPNAMELC}tdemdi::showTip() { KTipDialog::showTip(this,TQString(),true); } void %{APPNAMELC}tdemdi::showTipOnStart() { KTipDialog::showTip(this); } void %{APPNAMELC}tdemdi::slotFileNew() { %{APPNAMELC}tdemdiView *view = new %{APPNAMELC}tdemdiView(this); m_manager->addPart( view->part() ); addWindow( view ); // add the tree view to the widget stack m_views += view; currentChanged( view ); } void %{APPNAMELC}tdemdi::openURL(const KURL & url) { // check if the url is not already opened first TQValueList<%{APPNAMELC}tdemdiView*>::iterator it = m_views.begin(); TQValueList<%{APPNAMELC}tdemdiView*>::iterator end = m_views.end(); for (; it != end; ++it) { %{APPNAMELC}tdemdiView *view = *it; if (view->part()->url() == url) { activateView(view); return; } } %{APPNAMELC}tdemdiView *view = new %{APPNAMELC}tdemdiView(this); m_manager->addPart( view->part() ); addWindow( view ); m_views += view; view->part()->openURL(url); currentChanged( view ); } void %{APPNAMELC}tdemdi::currentChanged( KMdiChildView *current ) { //kdWarning()<<"current view changed"<setActivePart(NULL); //setCaption("()"); return; } // switch to the corresponding document if ( m_views.contains( (%{APPNAMELC}tdemdiView*) current ) ) { %{APPNAMELC}tdemdiView *view = (%{APPNAMELC}tdemdiView*) current; //view->updateCaption(); m_manager->setActivePart( view->part() ); } } void %{APPNAMELC}tdemdi::slotFileClose() { requestClose( activeWindow() ); } bool %{APPNAMELC}tdemdi::requestClose(KMdiChildView* v) { // kdWarning()<<"closing view"<part()->queryClose()) { m_manager->removePart( view->part() ); closeWindow( view ); m_views.clear(); setCaption("kdissert"); return true; } return false; } return true; } %{APPNAMELC}tdemdiView *view = (%{APPNAMELC}tdemdiView*) 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}tdemdi::slotFileQuit() { close(); } void %{APPNAMELC}tdemdi::optionsShowToolbar() { if (m_toolbarAction->isChecked()) toolBar()->show(); else toolBar()->hide(); } void %{APPNAMELC}tdemdi::optionsShowStatusbar() { if (m_statusbarAction->isChecked()) statusBar()->show(); else statusBar()->hide(); } void %{APPNAMELC}tdemdi::optionsConfigureKeys() { //KKeyDialog::configure(actionCollection()); KKeyDialog dlg( false, this ); TQPtrList clients = guiFactory()->clients(); for( TQPtrListIterator it( clients ); it.current(); ++it ) dlg.insert ( (*it)->actionCollection(), (*it)->instance()->aboutData()->programName() ); dlg.configure(); for (int i=0; ipart()->reloadXML(); } } void %{APPNAMELC}tdemdi::optionsConfigureToolbars() { //saveMainWindowSettings(TDEGlobal::config(), autoSaveGroup()); } void %{APPNAMELC}tdemdi::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(TDEGlobal::config(), autoSaveGroup()); } void %{APPNAMELC}tdemdi::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 (TDEConfigDialog::showDialog("settings")) return; TDEConfigDialog *dialog = new TDEConfigDialog(this, "settings", Settings::self(), KDialogBase::Swallow); dialog->addPage(new prefs(), i18n("General"), "package_settings"); connect(dialog, TQT_SIGNAL(settingsChanged()), this, TQT_SLOT(settingsChanged())); dialog->show(); } void %{APPNAMELC}tdemdi::settingsChanged() { // propagate the changes to our views /*TQValueList<%{APPNAMELC}tdemdiView*>::iterator it = m_views.begin(); TQValueList<%{APPNAMELC}tdemdiView*>::iterator end = m_views.end(); for (; it != end; ++it) { %{APPNAMELC}tdemdiView *view = *it; view->settingsChanged(); }*/ } void %{APPNAMELC}tdemdi::changeStatusbar(const TQString& text) { // display the text on the statusbar statusBar()->message(text, 2000); } void %{APPNAMELC}tdemdi::dragEnterEvent(TQDragEnterEvent *event) { // accept uri drops only event->accept(KURLDrag::canDecode(event)); } void %{APPNAMELC}tdemdi::dropEvent(TQDropEvent *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}tdemdi::queryClose() { TQValueList<%{APPNAMELC}tdemdiView*>::iterator it; // check if we can close all documents for (it = m_views.begin(); it != m_views.end(); ++it) { // kdWarning()<<"searching for the part"<part()->queryClose()) { return false; } } // and now close the documents for (it = m_views.begin(); it != m_views.end(); ++it) { // now close all views %{APPNAMELC}tdemdiView *view = *it; m_manager->removePart( view->part() ); closeWindow( view ); } return true; } #include "%{APPNAMELC}tdemdi.moc"