44 #include "tabwidget.h"
49 #include <tqclipboard.h>
50 #include <tqobjectlist.h>
51 #include <tqpopupmenu.h>
52 #include <tqmenubar.h>
54 #include <tdemenubar.h>
55 #include <tdeapplication.h>
57 #include <tdeversion.h>
58 #include <tqtabwidget.h>
59 #include <tdelocale.h>
61 #include <kiconloader.h>
62 #include "dockcontainer.h"
63 #include "mainwindow.moc"
66 #include <tqtoolbutton.h>
70 #include <tqvaluelist.h>
72 #include "mainwindow.h"
73 #include "dockcontainer.h"
74 #include "toolviewaccessor_p.h"
76 #include "guiclient.h"
80 class MainWindowPrivate {
83 for (
int i=0;i<4;i++) {
84 activeDockPriority[i]=0;
89 ~MainWindowPrivate() {}
90 KMDI::DockContainer* activeDockPriority[4];
100 MainWindow::MainWindow(TQWidget* parentWidget,
const char* name)
101 : KParts::DockMainWindow( parentWidget, name)
102 , m_toolViews (new TQMap<TQWidget*,
KMDI::ToolViewAccessor*>)
103 , d(new KMDIPrivate::MainWindowPrivate())
116 MainWindow::~MainWindow()
125 void MainWindow::setupMainDock ()
128 KDockWidget *dw = createDockWidget(
"mdiAreaCover", TQPixmap(), 0L,
"mdi_area_cover");
129 dw->setDockWindowTransient(
this,
true);
130 dw->setEnableDocking(KDockWidget::DockNone);
131 dw->setDockSite(KDockWidget::DockCorner);
134 m_tabWidget =
new KMDI::TabWidget (dw);
135 dw->setWidget(m_tabWidget);
139 setMainDockWidget(dw);
142 connect(m_tabWidget,TQ_SIGNAL(focusInEvent()),
this,TQ_SIGNAL(collapseOverlapContainers()));
145 void MainWindow::setupToolViews ()
147 m_leftContainer = createDockWidget(
"KMdiDock::leftDock",SmallIcon(
"misc"),0L,
"Left Dock");
148 m_rightContainer = createDockWidget(
"KMdiDock::rightDock",SmallIcon(
"misc"),0L,
"Right Dock");
149 m_topContainer = createDockWidget(
"KMdiDock::topDock",SmallIcon(
"misc"),0L,
"Top Dock");
150 m_bottomContainer = createDockWidget(
"KMdiDock::bottomDock",SmallIcon(
"misc"),0L,
"Bottom Dock");
152 KDockWidget *mainDock=getMainDockWidget();
153 KDockWidget *w=mainDock;
155 if (mainDock->parentDockTabGroup()) {
156 w=
static_cast<KDockWidget*
>(mainDock->parentDockTabGroup()->parent());
159 TQPtrList<KDockWidget> leftReparentWidgets;
160 TQPtrList<KDockWidget> rightReparentWidgets;
161 TQPtrList<KDockWidget> bottomReparentWidgets;
162 TQPtrList<KDockWidget> topReparentWidgets;
164 if (mainDock->parentDockTabGroup()) {
165 mainDock=
static_cast<KDockWidget*
>(mainDock->parentDockTabGroup()->parent());
168 findToolViewsDockedToMain(&leftReparentWidgets,KDockWidget::DockLeft);
169 findToolViewsDockedToMain(&rightReparentWidgets,KDockWidget::DockRight);
170 findToolViewsDockedToMain(&bottomReparentWidgets,KDockWidget::DockBottom);
171 findToolViewsDockedToMain(&topReparentWidgets,KDockWidget::DockTop);
173 mainDock->setEnableDocking(KDockWidget::DockNone);
174 mainDock->setDockSite(KDockWidget::DockCorner);
177 DockContainer *tmpDC;
178 m_leftContainer->setWidget(tmpDC=
new DockContainer(m_leftContainer,
this, KDockWidget::DockLeft, d->m_styleIDEAlMode));
179 m_leftContainer->setEnableDocking(KDockWidget::DockLeft);
180 m_leftContainer->manualDock(mainDock, KDockWidget::DockLeft,20);
183 connect (
this,TQ_SIGNAL(toggleLeft()),tmpDC,TQ_SLOT(toggle()));
184 connect(
this,TQ_SIGNAL(collapseOverlapContainers()),tmpDC,TQ_SLOT(collapseOverlapped()));
185 connect(tmpDC,TQ_SIGNAL(activated(DockContainer*)),
this,TQ_SLOT(setActiveToolDock(DockContainer*)));
186 connect(tmpDC,TQ_SIGNAL(deactivated(DockContainer*)),
this,TQ_SLOT(removeFromActiveDockList(DockContainer*)));
188 m_rightContainer->setWidget(tmpDC=
new DockContainer(m_rightContainer,
this, KDockWidget::DockRight, d->m_styleIDEAlMode));
189 m_rightContainer->setEnableDocking(KDockWidget::DockRight);
190 m_rightContainer->manualDock(mainDock, KDockWidget::DockRight,80);
193 connect (
this,TQ_SIGNAL(toggleRight()),tmpDC,TQ_SLOT(toggle()));
194 connect(
this,TQ_SIGNAL(collapseOverlapContainers()),tmpDC,TQ_SLOT(collapseOverlapped()));
195 connect(tmpDC,TQ_SIGNAL(activated(DockContainer*)),
this,TQ_SLOT(setActiveToolDock(DockContainer*)));
196 connect(tmpDC,TQ_SIGNAL(deactivated(DockContainer*)),
this,TQ_SLOT(removeFromActiveDockList(DockContainer*)));
198 m_topContainer->setWidget(tmpDC=
new DockContainer(m_topContainer,
this, KDockWidget::DockTop, d->m_styleIDEAlMode));
199 m_topContainer->setEnableDocking(KDockWidget::DockTop);
200 m_topContainer->manualDock(mainDock, KDockWidget::DockTop,20);
203 connect (
this,TQ_SIGNAL(toggleTop()),tmpDC,TQ_SLOT(toggle()));
204 connect(
this,TQ_SIGNAL(collapseOverlapContainers()),tmpDC,TQ_SLOT(collapseOverlapped()));
205 connect(tmpDC,TQ_SIGNAL(activated(DockContainer*)),
this,TQ_SLOT(setActiveToolDock(DockContainer*)));
206 connect(tmpDC,TQ_SIGNAL(deactivated(DockContainer*)),
this,TQ_SLOT(removeFromActiveDockList(DockContainer*)));
208 m_bottomContainer->setWidget(tmpDC=
new DockContainer(m_bottomContainer,
this, KDockWidget::DockBottom, d->m_styleIDEAlMode));
209 m_bottomContainer->setEnableDocking(KDockWidget::DockBottom);
210 m_bottomContainer->manualDock(mainDock, KDockWidget::DockBottom,80);
213 connect (
this,TQ_SIGNAL(toggleBottom()),tmpDC,TQ_SLOT(toggle()));
214 connect(
this,TQ_SIGNAL(collapseOverlapContainers()),tmpDC,TQ_SLOT(collapseOverlapped()));
215 connect(tmpDC,TQ_SIGNAL(activated(DockContainer*)),
this,TQ_SLOT(setActiveToolDock(DockContainer*)));
216 connect(tmpDC,TQ_SIGNAL(deactivated(DockContainer*)),
this,TQ_SLOT(removeFromActiveDockList(DockContainer*)));
218 m_leftContainer->setDockSite( KDockWidget::DockCenter );
219 m_rightContainer->setDockSite( KDockWidget::DockCenter );
220 m_topContainer->setDockSite( KDockWidget::DockCenter );
221 m_bottomContainer->setDockSite( KDockWidget::DockCenter );
223 dockToolViewsIntoContainers(leftReparentWidgets,m_leftContainer);
224 dockToolViewsIntoContainers(rightReparentWidgets,m_rightContainer);
225 dockToolViewsIntoContainers(bottomReparentWidgets,m_bottomContainer);
226 dockToolViewsIntoContainers(topReparentWidgets,m_topContainer);
228 dockManager->setSpecialLeftDockContainer(m_leftContainer);
229 dockManager->setSpecialRightDockContainer(m_rightContainer);
230 dockManager->setSpecialTopDockContainer(m_topContainer);
231 dockManager->setSpecialBottomDockContainer(m_bottomContainer);
233 ((DockContainer*) (m_leftContainer->getWidget()))->hideIfNeeded();
234 ((DockContainer*) (m_rightContainer->getWidget()))->hideIfNeeded();
235 ((DockContainer*) (m_topContainer->getWidget()))->hideIfNeeded();
236 ((DockContainer*) (m_bottomContainer->getWidget()))->hideIfNeeded();
239 void MainWindow::setupGUIClient ()
241 m_guiClient =
new KMDIPrivate::GUIClient (
this);
243 connect(m_guiClient,TQ_SIGNAL(toggleTop()),
this,TQ_SIGNAL(toggleTop()));
244 connect(m_guiClient,TQ_SIGNAL(toggleLeft()),
this,TQ_SIGNAL(toggleLeft()));
245 connect(m_guiClient,TQ_SIGNAL(toggleRight()),
this,TQ_SIGNAL(toggleRight()));
246 connect(m_guiClient,TQ_SIGNAL(toggleBottom()),
this,TQ_SIGNAL(toggleBottom()));
249 TabWidget *MainWindow::tabWidget ()
254 ToolViewAccessor *MainWindow::createToolWindow()
256 return new KMDI::ToolViewAccessor(
this);
259 KMDI::ToolViewAccessor *MainWindow::addToolWindow( TQWidget* pWnd, KDockWidget::DockPosition pos, TQWidget* pTargetWnd,
int percent,
const TQString& tabToolTip,
const TQString& tabCaption)
262 KDockWidget* pDW = dockManager->getDockWidgetFromName(pWnd->name());
265 pDW->setWidget(pWnd);
268 pDW->setPixmap(*pWnd->icon());
270 pDW->setTabPageLabel((tabCaption==0)?pWnd->caption():tabCaption);
271 pDW->setToolTipString(tabToolTip);
272 dockManager->removeFromAutoCreateList(pDW);
276 TQRect r=pWnd->geometry();
278 KMDI::ToolViewAccessor *mtva=
new KMDI::ToolViewAccessor(
this,pWnd,tabToolTip,(tabCaption==0)?pWnd->caption():tabCaption);
279 m_toolViews->insert(tvta,mtva);
281 if (pos == KDockWidget::DockNone) {
282 mtva->d->widgetContainer->setEnableDocking(KDockWidget::DockNone);
283 mtva->d->widgetContainer->reparent(
this, (WFlags)(WType_TopLevel | WType_Dialog), r.topLeft(), isVisible());
289 mtva->place(pos, pTargetWnd,percent);
295 void MainWindow::deleteToolWindow( KMDI::ToolViewAccessor *accessor)
300 void MainWindow::deleteToolWindow( TQWidget* pWnd)
305 if (m_toolViews->contains(pWnd)) {
306 deleteToolWindow((*m_toolViews)[pWnd]);
310 void MainWindow::setToolViewStyle(
int flag)
312 d->m_styleIDEAlMode = flag;
314 DockContainer *tmpL=::tqt_cast<KMDI::DockContainer*>(m_leftContainer->getWidget());
315 if (tmpL) tmpL->setStyle(flag);
317 DockContainer *tmpR=::tqt_cast<KMDI::DockContainer*>(m_rightContainer->getWidget());
318 if (tmpR) tmpR->setStyle(flag);
320 DockContainer *tmpT=::tqt_cast<KMDI::DockContainer*>(m_topContainer->getWidget());
321 if (tmpT) tmpT->setStyle(flag);
323 DockContainer *tmpB=::tqt_cast<KMDI::DockContainer*>(m_bottomContainer->getWidget());
324 if (tmpB) tmpB->setStyle(flag);
326 d->m_toolviewStyle = flag;
327 bool toolviewExists =
false;
328 TQMap<TQWidget*,KMDI::ToolViewAccessor*>::Iterator it;
329 for (it = m_toolViews->begin(); it != m_toolViews->end(); ++it) {
330 KDockWidget *dockWidget =
dynamic_cast<KDockWidget*
>(it.data()->wrapperWidget());
334 dockWidget->setTabPageLabel(
" ");
335 dockWidget->setPixmap(*(it.data()->wrappedWidget()->icon()));
339 dockWidget->setPixmap();
340 dockWidget->setTabPageLabel(it.data()->wrappedWidget()->caption());
344 dockWidget->setPixmap(*(it.data()->wrappedWidget()->icon()));
345 dockWidget->setTabPageLabel(it.data()->wrappedWidget()->caption());
347 toolviewExists =
true;
365 void MainWindow::dockToolViewsIntoContainers(TQPtrList<KDockWidget>& widgetsToReparent,KDockWidget *container) {
366 for ( KDockWidget *dw = widgetsToReparent.first(); dw;
367 dw=widgetsToReparent.next()){
368 dw->manualDock(container,KDockWidget::DockCenter,20);
369 dw->loseFormerBrotherDockWidget();
373 void MainWindow::findToolViewsDockedToMain(TQPtrList<KDockWidget>* list,KDockWidget::DockPosition dprtmw) {
374 KDockWidget *mainDock=getMainDockWidget();
375 if (mainDock->parentDockTabGroup()) {
376 mainDock=
dynamic_cast<KDockWidget*
>(mainDock->parentDockTabGroup()->parent());
380 KDockWidget* widget=mainDock->findNearestDockWidget(dprtmw);
382 if (widget->parentDockTabGroup()) {
383 widget=
static_cast<KDockWidget*
>(widget->parentDockTabGroup()->parent());
387 KDockTabGroup *tg=
dynamic_cast<KDockTabGroup*
>(widget->
390 kdDebug(760)<<
"KDockTabGroup found"<<endl;
391 for (
int i=0;i<tg->count();i++)
392 list->append((KDockWidget*)
static_cast<KDockWidget*
>(
395 list->append((KDockWidget*)widget);
397 kdDebug(760)<<
"setupToolViewsForIDEALMode: no widget found"<<endl;
399 kdDebug(760)<<
"No main dock widget found"<<endl;
402 void MainWindow::setActiveToolDock(DockContainer* td) {
403 if (td==d->activeDockPriority[0])
return;
404 if (d->activeDockPriority[0]==0) {
405 d->activeDockPriority[0]=td;
411 for (
int dst=3,src=2;src>=0;dst--,src--) {
412 if (d->activeDockPriority[src]==td) src--;
414 d->activeDockPriority[dst]=d->activeDockPriority[src];
416 d->activeDockPriority[0]=td;
419 void MainWindow::removeFromActiveDockList(DockContainer* td) {
420 for (
int i=0;i<4;i++) {
421 if (d->activeDockPriority[i]==td) {
423 d->activeDockPriority[i]=d->activeDockPriority[i+1];
424 d->activeDockPriority[3]=0;
437 void MainWindow::prevToolViewInDock() {
438 DockContainer* td=d->activeDockPriority[0];
443 void MainWindow::nextToolViewInDock() {
444 DockContainer* td=d->activeDockPriority[0];
A namespace for the KMDI library.
@ TextAndIcon
Show both the icon and description on the toolview tabs.
@ IconOnly
Show only icons on the toolview tabs.
@ TextOnly
Show only the text description on the toolview tabs.