20 #include "simplemainwindow.h" 22 #include <tqtextedit.h> 24 #include <tdeaction.h> 25 #include <kstdaction.h> 26 #include <tdeparts/part.h> 27 #include <tdepopupmenu.h> 28 #include <tdemenubar.h> 29 #include <tdemessagebox.h> 30 #include <tdelocale.h> 31 #include <kiconloader.h> 32 #include <kedittoolbar.h> 33 #include <tdetexteditor/view.h> 34 #include <tdetexteditor/document.h> 35 #include <tdeapplication.h> 37 #include <tdeconfig.h> 39 #include <ddockwindow.h> 40 #include <dtabwidget.h> 42 #include <profileengine.h> 44 #include <kdevproject.h> 49 #include "plugincontroller.h" 50 #include "mainwindowshare.h" 51 #include "shellextension.h" 52 #include "partcontroller.h" 53 #include "statusbar.h" 54 #include "documentationpart.h" 56 #include "projectmanager.h" 57 #include "editorproxy.h" 58 #include "multibuffer.h" 60 SimpleMainWindow::SimpleMainWindow(TQWidget* parent,
const char *name)
61 :DMainWindow(parent, name)
66 connect(m_bottomDock, TQT_SIGNAL(hidden()), TQT_TQOBJECT(
this), TQT_SLOT(raiseEditor()));
67 connect(m_leftDock, TQT_SIGNAL(hidden()), TQT_TQOBJECT(
this), TQT_SLOT(raiseEditor()));
68 connect(m_rightDock, TQT_SIGNAL(hidden()), TQT_TQOBJECT(
this), TQT_SLOT(raiseEditor()));
71 SimpleMainWindow::~ SimpleMainWindow( )
76 void SimpleMainWindow::init()
78 actionCollection()->setHighlightingEnabled(
true );
79 setStandardToolBarMenuEnabled(
true );
90 m_mainWindowShare->init();
94 TQMenuBar *mbar = menuBar();
95 TDEPopupMenu *help_menu =
dynamic_cast<TDEPopupMenu*
> 96 (menuBar()->findItem(mbar->idAt(mbar->count()-1))->popup());
99 help_menu->insertItem(SmallIconSet(
"contents"), i18n(
"TDevelop &Programming Handbook"),
100 TQT_TQOBJECT(
this), TQT_SLOT(slotProgrammingHandbook()), 0, -1, 1);
103 menuBar()->setEnabled(
false );
107 if ( PluginController::getInstance()->engine().allOffers(ProfileEngine::Global).isEmpty() )
109 KMessageBox::sorry(
this, i18n(
"Unable to find plugins, TDevelop will not work" 110 " properly.\nPlease make sure " 111 "that TDevelop is installed in your TDE directory; otherwise, you have " 112 "to add TDevelop's installation " 113 "path to the environment variable TDEDIRS and run tdebuildsycoca. Restart " 114 "TDevelop afterwards.\n" 115 "Example for BASH users:\nexport TDEDIRS=/path/to/tdevelop:$TDEDIRS && tdebuildsycoca"),
116 i18n(
"Could Not Find Plugins") );
119 connect(Core::getInstance(), TQT_SIGNAL(coreInitialized()), TQT_TQOBJECT(
this), TQT_SLOT(slotCoreInitialized()));
120 connect(Core::getInstance(), TQT_SIGNAL(projectOpened()), TQT_TQOBJECT(
this), TQT_SLOT(projectOpened()));
121 connect(Core::getInstance(), TQT_SIGNAL(projectClosed()), TQT_TQOBJECT(
this), TQT_SLOT(projectClosed()));
122 connect(Core::getInstance(), TQT_SIGNAL(contextMenu(TQPopupMenu *,
const Context *)),
123 TQT_TQOBJECT(
this), TQT_SLOT(contextMenu(TQPopupMenu *,
const Context *)));
124 connect(PartController::getInstance(), TQT_SIGNAL(partURLChanged(KParts::ReadOnlyPart *)),
125 TQT_TQOBJECT(
this), TQT_SLOT(slotPartURLChanged(KParts::ReadOnlyPart * )));
126 connect(PartController::getInstance(), TQT_SIGNAL(activePartChanged(KParts::Part*)),
127 TQT_TQOBJECT(
this), TQT_SLOT(activePartChanged(KParts::Part*)));
129 connect(PartController::getInstance(),
130 TQT_SIGNAL(documentChangedState(
const KURL &, DocumentState)),
131 TQT_TQOBJECT(
this), TQT_SLOT(documentChangedState(
const KURL&, DocumentState)));
136 void SimpleMainWindow::dragEnterEvent( TQDragEnterEvent *event )
138 event->accept(KURLDrag::canDecode(event));
141 void SimpleMainWindow::dropEvent( TQDropEvent *event )
143 slotDropEvent(event);
146 void SimpleMainWindow::slotDropEvent( TQDropEvent *event )
149 if ( !KURLDrag::decode( event, list ) )
return;
151 KURL::List::Iterator it = list.begin();
152 while( it != list.end() )
154 kdDebug(9000) <<
"drop url:" << *it << endl;
155 PartController::getInstance()->editDocument( *it );
160 void SimpleMainWindow::contextMenu(TQPopupMenu *popupMenu,
const Context *context)
162 int cont = context->type();
164 if (cont == Context::EditorContext)
166 KURL url =
static_cast<const EditorContext*
>(context)->url();
167 TQWidget *w = widgetForURL(url);
168 if (w && m_widgetTabs[w] && m_widgetTabs[w]->count() > 1)
170 m_splitURLs.append(url);
171 m_splitHor1->plug(popupMenu);
172 m_splitVer1->plug(popupMenu);
173 popupMenu->insertSeparator();
176 else if (cont == Context::FileContext)
178 if (PartController::getInstance()->openURLs().count() > 0)
180 KURL::List urls =
static_cast<const FileContext*
>(context)->urls();
181 KURL::List::ConstIterator it = urls.begin();
182 while ( it != urls.end() )
184 if ( !URLUtil::isDirectory( *it ) )
186 m_splitURLs.append( *it );
191 if ( m_splitURLs.isEmpty() )
return;
194 for (KURL::List::const_iterator it = m_splitURLs.begin(); it != m_splitURLs.end(); ++it)
196 if (!PartController::getInstance()->openURLs().contains(*it) && (*it).isValid())
203 if ( (isOpen && PartController::getInstance()->openURLs().count() == 1) ||
204 (m_splitURLs.count() == 1 && !(*m_splitURLs.begin()).isValid() ) )
209 popupMenu->insertSeparator();
212 m_splitHor1->plug(popupMenu);
213 m_splitVer1->plug(popupMenu);
217 m_splitHor2->plug(popupMenu);
218 m_splitVer2->plug(popupMenu);
224 void SimpleMainWindow::embedPartView(TQWidget *view,
const TQString &title,
const TQString &)
226 kdDebug() <<
"SimpleMainWindow::embedPartView: " << view << endl;
230 TQString shortName = title;
231 shortName = shortName.right( shortName.length() - (shortName.findRev(
'/') +1));
233 addWidget(view, title);
237 void SimpleMainWindow::embedSelectView(TQWidget *view,
const TQString &title,
const TQString &)
239 embedView( DDockWindow::Left, view, title );
242 void SimpleMainWindow::embedOutputView(TQWidget *view,
const TQString &title,
const TQString &)
244 embedView( DDockWindow::Bottom, view, title );
247 void SimpleMainWindow::embedSelectViewRight(TQWidget *view,
const TQString &title,
const TQString &)
249 embedView( DDockWindow::Right, view, title );
252 void SimpleMainWindow::embedView( DDockWindow::Position pos, TQWidget * view,
const TQString & title )
254 if ( !hasDockWidget( view ) )
256 DDockWindow::Position position = recallToolViewPosition( view->name(), pos );
257 addDockWidget(position, view, title);
261 DDockWindow::Position SimpleMainWindow::recallToolViewPosition(
const TQString & name, DDockWindow::Position defaultPos )
263 TDEConfig * config = kapp->config();
264 config->setGroup(
"DToolDockPosition" );
266 TQString position = config->readEntry( name );
268 if ( name ==
"unknown" )
270 kdDebug() << name << endl;
273 if ( position ==
"DockLeft" )
return DDockWindow::Left;
274 if ( position ==
"DockRight" )
return DDockWindow::Right;
275 if ( position ==
"DockBottom" )
return DDockWindow::Bottom;
280 void SimpleMainWindow::rememberToolViewPosition(
const TQString & name, DDockWindow::Position pos )
282 TDEConfig * config = kapp->config();
283 config->setGroup(
"DToolDockPosition" );
285 TQString position =
"unknown";
289 case DDockWindow::Left:
290 position =
"DockLeft";
292 case DDockWindow::Right:
293 position =
"DockRight";
295 case DDockWindow::Bottom:
296 position =
"DockBottom";
301 config->writeEntry( name, position );
305 void SimpleMainWindow::removeView(TQWidget *view)
312 if (hasDockWidget(view))
314 rememberToolViewPosition( view->name(), dockWidgetPosition(view) );
315 removeDockWidget(view);
321 void SimpleMainWindow::setViewAvailable(TQWidget *pView,
bool bEnabled)
324 if (hasDockWidget(pView))
325 dock = toolWindow(dockWidgetPosition(pView));
329 bEnabled ? dock->showWidget(pView) : dock->hideWidget(pView);
332 void SimpleMainWindow::raiseView(TQWidget *view)
339 kdDebug() << view->parent()->className() << endl;
340 if (view->parent() && (view->parent()->isA(
"EditorWrapper") || view->parent()->isA(
"MultiBuffer")))
344 view = (TQWidget*)view->parent();
347 if (hasDockWidget(view))
349 DDockWindow *dock = toolWindow(dockWidgetPosition(view));
350 dock->raiseWidget(view);
352 else if (m_widgets.contains(view) && m_widgetTabs.contains(view))
353 m_widgetTabs[view]->showPage(view);
356 void SimpleMainWindow::lowerView(TQWidget * view)
358 if (!hasDockWidget(view))
361 DDockWindow *dock = toolWindow(dockWidgetPosition(view));
362 dock->lowerWidget(view);
365 void SimpleMainWindow::loadSettings()
367 TDEConfig *config = kapp->config();
369 ProjectManager::getInstance()->loadSettings();
370 applyMainWindowSettings(config,
"SimpleMainWindow");
375 void SimpleMainWindow::saveSettings( )
377 TDEConfig *config = kapp->config();
379 ProjectManager::getInstance()->saveSettings();
380 saveMainWindowSettings(config,
"SimpleMainWindow");
382 TQMap<TQWidget*, DDockWindow::Position>::iterator it = m_docks.begin();
383 while ( it != m_docks.end() )
385 if ( !strcmp(it.key()->name(),
"unnamed") )
387 kdError() <<
"Toolviews must have a name : " << it.key() << endl;
390 rememberToolViewPosition( it.key()->name(), it.data() );
394 DMainWindow::saveSettings();
397 void SimpleMainWindow::setCurrentDocumentCaption(
const TQString &caption )
399 if( !PartController::getInstance()->activePart() )
return;
401 if (TQWidget *widget = EditorProxy::getInstance()->topWidgetForPart(PartController::getInstance()->activePart()))
403 widget->setCaption(caption);
407 TDEMainWindow *SimpleMainWindow::main()
412 void SimpleMainWindow::createFramework()
414 PartController::createInstance(
this );
416 connect(PartController::getInstance(), TQT_SIGNAL(activePartChanged(KParts::Part*)),
417 TQT_TQOBJECT(
this), TQT_SLOT(createGUI(KParts::Part*)));
420 void SimpleMainWindow::createActions()
422 m_raiseEditor =
new TDEAction(i18n(
"Raise &Editor"), ALT+Key_C,
423 TQT_TQOBJECT(
this), TQT_SLOT(raiseEditor()), actionCollection(),
"raise_editor");
424 m_raiseEditor->setToolTip(i18n(
"Raise editor"));
425 m_raiseEditor->setWhatsThis(i18n(
"<b>Raise editor</b><p>Focuses the editor."));
427 m_lowerAllDocks =
new TDEAction(i18n(
"Lower All Docks"), CTRL+SHIFT+Key_C,
428 TQT_TQOBJECT(
this), TQT_SLOT(lowerAllDocks()), actionCollection(),
"lower_all_docks");
430 new TDEAction(i18n(
"Switch to next TabWidget"), 0, TQT_TQOBJECT(
this),
431 TQT_SLOT(switchToNextTabWidget()), actionCollection(),
"switch_to_next_tabwidget" );
433 m_splitHor =
new TDEAction(i18n(
"Split &Horizontal"), CTRL+SHIFT+Key_T,
434 TQT_TQOBJECT(
this), TQT_SLOT(slotSplitHorizontalBase()), actionCollection(),
"split_h");
435 m_splitHor->setIcon(
"view_top_bottom");
437 m_splitVer =
new TDEAction(i18n(
"Split &Vertical"), CTRL+SHIFT+Key_L,
438 TQT_TQOBJECT(
this), TQT_SLOT(slotSplitVerticalBase()), actionCollection(),
"split_v");
439 m_splitVer->setIcon(
"view_left_right");
441 m_splitHor1 =
new TDEAction(i18n(
"Split &Horizontal"), 0,
442 TQT_TQOBJECT(
this), TQT_SLOT(slotSplitHorizontal()), actionCollection(),
"split_h1");
443 m_splitHor1->setIcon(
"view_top_bottom");
445 m_splitVer1 =
new TDEAction(i18n(
"Split &Vertical"), 0,
446 TQT_TQOBJECT(
this), TQT_SLOT(slotSplitVertical()), actionCollection(),
"split_v1");
447 m_splitVer1->setIcon(
"view_left_right");
449 m_splitHor2 =
new TDEAction(i18n(
"Split &Horizontal and Open"), 0,
450 TQT_TQOBJECT(
this), TQT_SLOT(slotSplitHorizontal()), actionCollection(),
"split_h2");
451 m_splitHor2->setIcon(
"view_top_bottom");
453 m_splitVer2 =
new TDEAction(i18n(
"Split &Vertical and Open"), 0,
454 TQT_TQOBJECT(
this), TQT_SLOT(slotSplitVertical()), actionCollection(),
"split_v2");
455 m_splitVer2->setIcon(
"view_left_right");
457 m_raiseLeftDock =
new TDEAction(i18n(
"Switch Left Dock"), CTRL+SHIFT+ALT+Key_L,
458 TQT_TQOBJECT(
this), TQT_SLOT(raiseLeftDock()), actionCollection(),
"switch_left_dock");
460 m_raiseRightDock =
new TDEAction(i18n(
"Switch Right Dock"), CTRL+SHIFT+ALT+Key_R,
461 TQT_TQOBJECT(
this), TQT_SLOT(raiseRightDock()), actionCollection(),
"switch_right_dock");
463 m_raiseBottomDock =
new TDEAction(i18n(
"Switch Bottom Dock"), CTRL+SHIFT+ALT+Key_B,
464 TQT_TQOBJECT(
this), TQT_SLOT(raiseBottomDock()), actionCollection(),
"switch_bottom_dock");
466 KStdAction::configureToolbars(TQT_TQOBJECT(
this), TQT_SLOT(configureToolbars()),
467 actionCollection(),
"set_configure_toolbars");
469 m_mainWindowShare->createActions();
471 connect(m_mainWindowShare, TQT_SIGNAL(gotoNextWindow()), TQT_TQOBJECT(
this), TQT_SLOT(gotoNextWindow()));
472 connect(m_mainWindowShare, TQT_SIGNAL(gotoPreviousWindow()), TQT_TQOBJECT(
this), TQT_SLOT(gotoPreviousWindow()));
473 connect(m_mainWindowShare, TQT_SIGNAL(gotoFirstWindow()), TQT_TQOBJECT(
this), TQT_SLOT(gotoFirstWindow()));
474 connect(m_mainWindowShare, TQT_SIGNAL(gotoLastWindow()), TQT_TQOBJECT(
this), TQT_SLOT(gotoLastWindow()));
477 void SimpleMainWindow::raiseEditor()
479 kdDebug() <<
"SimpleMainWindow::raiseEditor" << endl;
480 KDevPartController *partcontroller = API::getInstance()->partController();
481 if (partcontroller->activePart() && partcontroller->activePart()->widget())
482 partcontroller->activePart()->widget()->setFocus();
485 void SimpleMainWindow::gotoNextWindow()
487 if (m_bottomDock->isActive())
488 m_bottomDock->selectNextWidget();
489 else if (m_rightDock->isActive())
490 m_rightDock->selectNextWidget();
491 else if (m_leftDock->isActive())
492 m_leftDock->selectNextWidget();
495 if ((m_activeTabWidget->currentPageIndex() + 1) < m_activeTabWidget->count())
496 m_activeTabWidget->setCurrentPage(m_activeTabWidget->currentPageIndex() + 1);
498 m_activeTabWidget->setCurrentPage(0);
502 void SimpleMainWindow::gotoPreviousWindow()
504 if (m_bottomDock->isActive())
505 m_bottomDock->selectPrevWidget();
506 else if (m_rightDock->isActive())
507 m_rightDock->selectPrevWidget();
508 else if (m_leftDock->isActive())
509 m_leftDock->selectPrevWidget();
512 if ((m_activeTabWidget->currentPageIndex() - 1) >= 0)
513 m_activeTabWidget->setCurrentPage(m_activeTabWidget->currentPageIndex() - 1);
515 m_activeTabWidget->setCurrentPage(m_activeTabWidget->count() - 1);
519 void SimpleMainWindow::gotoFirstWindow()
524 void SimpleMainWindow::gotoLastWindow()
529 void SimpleMainWindow::slotCoreInitialized()
531 menuBar()->setEnabled(
true);
534 void SimpleMainWindow::projectOpened()
536 setCaption(TQString());
539 void SimpleMainWindow::slotPartURLChanged(KParts::ReadOnlyPart *part)
541 if (TQWidget *widget = EditorProxy::getInstance()->topWidgetForPart(part))
543 kdDebug() <<
"new caption for widget: " << part->url().fileName() << endl;
544 widget->setCaption(part->url().fileName());
549 void SimpleMainWindow::documentChangedState(
const KURL &url, DocumentState state)
551 TQWidget * widget = EditorProxy::getInstance()->topWidgetForPart(
552 PartController::getInstance()->partForURL(url));
553 kdDebug() <<
"SimpleMainWindow::documentChangedState: " << widget << endl;
559 if (m_activeTabWidget && !m_showIconsOnTabs)
561 isize = m_activeTabWidget->fontMetrics().height() - 1;
562 isize = isize > 16 ? 16 : isize;
569 if (m_showIconsOnTabs)
570 widget->setIcon(SmallIcon(
"tdevelop", isize));
572 widget->setIcon(TQPixmap());
575 widget->setIcon(SmallIcon(
"document-save", isize));
578 widget->setIcon(SmallIcon(
"document-revert", isize));
580 case DirtyAndModified:
581 widget->setIcon(SmallIcon(
"process-stop", isize));
585 setCaption(url.url());
588 void SimpleMainWindow::closeTab()
591 if (TQT_TQOBJECT(const_cast<TQT_BASE_OBJECT_NAME*>(sender()))->isA(TQTOOLBUTTON_OBJECT_NAME_STRING) && TQT_TQOBJECT(const_cast<TQT_BASE_OBJECT_NAME*>(sender()))->parent()->isA(
"DTabWidget"))
593 DTabWidget *tab = (DTabWidget*)TQT_TQWIDGET(const_cast<TQT_BASE_OBJECT_NAME*>(sender()))->parent();
594 if (tab && tab->currentPage())
595 closeTab(tab->currentPage());
599 void SimpleMainWindow::tabContext(TQWidget *w,
const TQPoint &p)
601 DTabWidget *tabWidget =
static_cast<DTabWidget*
>(TQT_TQWIDGET(const_cast<TQT_BASE_OBJECT_NAME*>(sender())));
605 TDEPopupMenu tabMenu;
606 tabMenu.insertTitle(tabWidget->tabLabel(w));
609 m_currentTabURL = TQString();
610 TQPtrListIterator<KParts::Part> it(*PartController::getInstance()->parts());
611 while (KParts::Part* part = it.current())
613 TQWidget *top_widget = EditorProxy::getInstance()->topWidgetForPart(part);
616 if (KParts::ReadOnlyPart *ro_part = dynamic_cast<KParts::ReadOnlyPart*>(part))
618 m_currentTabURL = ro_part->url();
619 tabMenu.insertItem(i18n(
"Close"), 0);
621 if (PartController::getInstance()->parts()->count() > 1)
622 tabMenu.insertItem(i18n(
"Close All Others"), 4);
624 if( KParts::ReadWritePart * rw_part = dynamic_cast<KParts::ReadWritePart*>( ro_part ) )
626 if( rw_part->isModified() ) tabMenu.insertItem( i18n(
"Save"),1);
627 tabMenu.insertItem( i18n(
"Reload"),2);
630 if (dynamic_cast<HTMLDocumentationPart*>(ro_part))
632 tabMenu.insertItem(i18n(
"Duplicate"), 3);
638 list << m_currentTabURL;
639 FileContext context( list );
640 Core::getInstance()->fillContextMenu(&tabMenu, &context);
647 connect(&tabMenu, TQT_SIGNAL(activated(
int)), TQT_TQOBJECT(
this), TQT_SLOT(tabContextActivated(
int)));
651 void SimpleMainWindow::tabContextActivated(
int id)
653 if(m_currentTabURL.isEmpty())
659 PartController::getInstance()->closeFile(m_currentTabURL);
662 PartController::getInstance()->saveFile(m_currentTabURL);
665 PartController::getInstance()->reloadFile(m_currentTabURL);
668 PartController::getInstance()->showDocument(m_currentTabURL,
true);
671 PartController::getInstance()->closeAllOthers(m_currentTabURL);
678 void SimpleMainWindow::configureToolbars()
680 saveMainWindowSettings(TDEGlobal::config(),
"SimpleMainWindow");
681 KEditToolbar dlg(factory());
682 connect(&dlg, TQT_SIGNAL(newToolbarConfig()), TQT_TQOBJECT(
this), TQT_SLOT(slotNewToolbarConfig()));
686 void SimpleMainWindow::slotNewToolbarConfig()
689 m_mainWindowShare->slotGUICreated(PartController::getInstance()->activePart());
690 applyMainWindowSettings(TDEGlobal::config(),
"SimpleMainWindow");
693 bool SimpleMainWindow::queryClose()
696 return Core::getInstance()->queryClose();
699 bool SimpleMainWindow::queryExit()
704 void SimpleMainWindow::setupWindowMenu()
707 m_windowMenu =
static_cast<TQPopupMenu*
>(TQT_TQWIDGET(main()->child(
"window",
"TDEPopupMenu")));
711 kdDebug(9000) <<
"Couldn't find the XMLGUI window menu. Creating new." << endl;
713 m_windowMenu =
new TQPopupMenu(main(),
"window");
714 menuBar()->insertItem(i18n(
"&Window"), m_windowMenu);
717 actionCollection()->action(
"file_close")->plug(m_windowMenu);
718 actionCollection()->action(
"file_close_all")->plug(m_windowMenu);
719 actionCollection()->action(
"file_closeother")->plug(m_windowMenu);
721 TQObject::connect(m_windowMenu, TQT_SIGNAL(activated(
int)), TQT_TQOBJECT(
this), TQT_SLOT(openURL(
int)));
722 TQObject::connect(m_windowMenu, TQT_SIGNAL(aboutToShow()), TQT_TQOBJECT(
this), TQT_SLOT(fillWindowMenu()));
725 void SimpleMainWindow::openURL(
int w)
727 TQValueList<TQPair<int, KURL> >::ConstIterator it = m_windowList.begin();
728 while (it != m_windowList.end())
730 if ((*it).first == w)
732 KURL url((*it).second);
735 PartController::getInstance()->editDocument(url);
743 void SimpleMainWindow::fillWindowMenu()
746 TQValueList< TQPair< int, KURL > >::ConstIterator it = m_windowList.begin();
747 while (it != m_windowList.end())
749 m_windowMenu->removeItem( (*it).first );
755 TQMap<TQString, KURL> map;
756 TQStringList string_list;
757 KURL::List list = PartController::getInstance()->openURLs();
758 KURL::List::Iterator itt = list.begin();
759 while (itt != list.end())
761 map[(*itt).fileName()] = *itt;
762 string_list.append((*itt).fileName());
768 for(uint i = 0; i != string_list.size(); ++i)
769 list.append(map[string_list[i]]);
774 if (list.count() > 0)
775 m_windowList << tqMakePair(m_windowMenu->insertSeparator(), KURL());
777 while (itt != list.end())
779 temp = m_windowMenu->insertItem( i < 10 ? TQString(
"&%1 %2").arg(i).arg((*itt).fileName()) : (*itt).fileName() );
780 m_windowList << tqMakePair(temp, *itt);
786 void SimpleMainWindow::slotSplitVertical()
788 DTabWidget *tab = splitVertical();
789 openDocumentsAfterSplit(tab);
792 void SimpleMainWindow::slotSplitHorizontal()
794 DTabWidget *tab = splitHorizontal();
795 openDocumentsAfterSplit(tab);
798 void SimpleMainWindow::slotSplitVerticalBase()
800 if (KParts::ReadOnlyPart *ro_part = activePartForSplitting())
802 m_splitURLs << ro_part->url();
807 KParts::ReadOnlyPart *SimpleMainWindow::activePartForSplitting()
809 if (PartController::getInstance()->openURLs().count() < 2)
812 KParts::ReadOnlyPart *ro_part =
813 dynamic_cast<KParts::ReadOnlyPart*
>(PartController::getInstance()->activePart());
817 void SimpleMainWindow::slotSplitHorizontalBase()
819 if (KParts::ReadOnlyPart *ro_part = activePartForSplitting())
821 m_splitURLs << ro_part->url();
822 slotSplitHorizontal();
826 void SimpleMainWindow::openDocumentsAfterSplit(DTabWidget *tab)
828 if (m_splitURLs.count() > 0)
830 for (KURL::List::const_iterator it = m_splitURLs.begin(); it != m_splitURLs.end(); ++it)
832 KParts::ReadOnlyPart *part = PartController::getInstance()->partForURL(*it);
834 PartController::getInstance()->editDocument(*it);
837 PartController::getInstance()->activatePart( part );
838 TQWidget *inTab = widgetForURL(*it);
841 DTabWidget *oldTab = m_widgetTabs[inTab];
842 TQString title = oldTab->tabLabel(inTab);
844 addWidget(tab, inTab, title);
852 TQWidget *SimpleMainWindow::widgetForURL(KURL url)
854 KParts::ReadOnlyPart *part = PartController::getInstance()->partForURL(url);
855 return widgetInTab( part ? part->widget() : 0 );
858 TQWidget *SimpleMainWindow::widgetInTab(TQWidget *w)
861 if (w && w->parent() && w->parent()->isA(
"EditorProxy"))
862 inTab = (TQWidget*)w->parent();
863 else if (w && w->parent() && w->parent()->isA(
"MultiBuffer")
864 && w->parent()->parent() && w->parent()->parent()->isA(
"EditorProxy"))
865 inTab = (TQWidget*)w->parent()->parent();
866 else if (w && w->parent() && w->parent()->isA(
"MultiBuffer"))
867 inTab = (TQWidget*)w->parent();
873 void SimpleMainWindow::closeTab(TQWidget *w)
875 const TQPtrList<KParts::Part> *partlist = PartController::getInstance()->parts();
876 TQPtrListIterator<KParts::Part> it(*partlist);
877 while (KParts::Part* part = it.current())
879 TQWidget *widget = EditorProxy::getInstance()->topWidgetForPart(part);
880 if (widget && widget == w)
884 if (MultiBuffer * mb = dynamic_cast<MultiBuffer*>( widget ) )
886 PartController::getInstance()->closePart( mb->activeBuffer() );
890 PartController::getInstance()->closePart(part);
898 void SimpleMainWindow::activePartChanged(KParts::Part *part)
902 TQWidget *w = part->widget();
903 kdDebug() <<
"active part widget is : " << w << endl;
904 TQWidget *inTab = widgetInTab(w);
905 if (m_widgetTabs[inTab] != 0)
907 kdDebug() <<
" setting m_activeTabWidget " << endl;
908 m_activeTabWidget = m_widgetTabs[inTab];
912 void SimpleMainWindow::createGUI(KParts::Part *part) {
914 setCaption( TQString() );
915 DMainWindow::createGUI(part);
917 m_mainWindowShare->slotGUICreated( part );
920 void SimpleMainWindow::raiseBottomDock()
922 raiseDock(m_bottomDock);
925 void SimpleMainWindow::raiseLeftDock()
927 raiseDock(m_leftDock);
930 void SimpleMainWindow::raiseRightDock()
932 raiseDock(m_rightDock);
935 void SimpleMainWindow::raiseDock(DDockWindow *dock)
937 dock->selectLastWidget();
940 void SimpleMainWindow::lowerAllDocks()
942 m_bottomDock->lowerWidget( m_bottomDock->currentWidget() );
943 m_leftDock->lowerWidget( m_leftDock->currentWidget() );
944 m_rightDock->lowerWidget( m_rightDock->currentWidget() );
947 void SimpleMainWindow::switchToNextTabWidget()
949 TQValueList<DTabWidget*> tabWidgets = m_widgetTabs.values();
951 if ( tabWidgets.count() < 2 )
return;
953 TQValueList<DTabWidget*> reduced;
954 TQValueList<DTabWidget*>::iterator it = tabWidgets.begin();
955 while ( it != tabWidgets.end() )
957 if ( !reduced.contains( *it ) )
964 it = reduced.begin();
965 while ( it != reduced.end() )
967 if ( *it == m_activeTabWidget )
969 if ( ++it != reduced.end() )
971 if ( (*it)->currentPage() )
972 (*it)->currentPage()->setFocus();
976 if ( (*reduced.begin())->currentPage() )
977 (*reduced.begin())->currentPage()->setFocus();
985 void SimpleMainWindow::setCaption(
const TQString &caption)
987 kdDebug(9000) << k_funcinfo << endl;
989 bool modified =
false;
990 if ( !caption.isEmpty() )
993 DocumentState
const state = PartController::getInstance()->documentState( url );
994 modified = ( state == Modified || state == DirtyAndModified );
997 KDevProject *project = API::getInstance()->project();
1000 TQString projectname = project->projectName();
1002 TQString suffix(
".kdevelop");
1003 if (projectname.endsWith(suffix))
1004 projectname.truncate(projectname.length() - suffix.length());
1006 if (!caption.isEmpty())
1007 DMainWindow::setCaption(projectname +
" - " + caption, modified);
1009 DMainWindow::setCaption(projectname, modified);
1012 DMainWindow::setCaption(caption, modified);
1015 void SimpleMainWindow::projectClosed()
1017 DMainWindow::setCaption(TQString());
1020 void SimpleMainWindow::slotProgrammingHandbook()
1022 kapp->invokeHelp(TQString::null,
"tde_app_devel");
1025 #include "simplemainwindow.moc" Shared main window functionality.
static void invalidateInstance(KDevMainWindow *instance)
Signal that the object has been (or is about to be) destroyed.
static void setupShourtcutTips(KXMLGUIClient *client=0)
Setup shourtcut tips.
virtual TQString xmlFile()=0
Reimplement to return the name of KXMLGUI resource file for an application.
static ShellExtension * getInstance()
Returns an instance of a shell.