49#include <tqclipboard.h>
50#include <tqobjectlist.h>
51#include <tqpopupmenu.h>
54#include <tdemenubar.h>
55#include <tdeapplication.h>
57#include <tqtabwidget.h>
60#include <kiconloader.h>
61#include "dockcontainer.h"
62#include "mainwindow.moc"
65#include <tqtoolbutton.h>
69#include <tqvaluelist.h>
71#include "mainwindow.h"
72#include "dockcontainer.h"
73#include "toolviewaccessor_p.h"
79 class MainWindowPrivate {
82 for (
int i=0;i<4;i++) {
83 activeDockPriority[i]=0;
88 ~MainWindowPrivate() {}
89 KMDI::DockContainer* activeDockPriority[4];
99MainWindow::MainWindow(TQWidget* parentWidget,
const char* name)
100 : KParts::DockMainWindow( parentWidget, name)
101 , m_toolViews (new TQMap<TQWidget*,
KMDI::ToolViewAccessor*>)
102 , d(new KMDIPrivate::MainWindowPrivate())
115MainWindow::~MainWindow()
124void MainWindow::setupMainDock ()
127 KDockWidget *dw = createDockWidget(
"mdiAreaCover", TQPixmap(), 0L,
"mdi_area_cover");
128 dw->setDockWindowTransient(
this,
true);
129 dw->setEnableDocking(KDockWidget::DockNone);
130 dw->setDockSite(KDockWidget::DockCorner);
133 m_tabWidget =
new KMDI::TabWidget (dw);
134 dw->setWidget(m_tabWidget);
138 setMainDockWidget(dw);
141 connect(m_tabWidget,TQ_SIGNAL(focusInEvent()),
this,TQ_SIGNAL(collapseOverlapContainers()));
144void MainWindow::setupToolViews ()
146 m_leftContainer = createDockWidget(
"KMdiDock::leftDock",SmallIcon(
"misc"),0L,
"Left Dock");
147 m_rightContainer = createDockWidget(
"KMdiDock::rightDock",SmallIcon(
"misc"),0L,
"Right Dock");
148 m_topContainer = createDockWidget(
"KMdiDock::topDock",SmallIcon(
"misc"),0L,
"Top Dock");
149 m_bottomContainer = createDockWidget(
"KMdiDock::bottomDock",SmallIcon(
"misc"),0L,
"Bottom Dock");
151 KDockWidget *mainDock=getMainDockWidget();
152 KDockWidget *w=mainDock;
154 if (mainDock->parentDockTabGroup()) {
155 w=
static_cast<KDockWidget*
>(mainDock->parentDockTabGroup()->parent());
158 TQPtrList<KDockWidget> leftReparentWidgets;
159 TQPtrList<KDockWidget> rightReparentWidgets;
160 TQPtrList<KDockWidget> bottomReparentWidgets;
161 TQPtrList<KDockWidget> topReparentWidgets;
163 if (mainDock->parentDockTabGroup()) {
164 mainDock=
static_cast<KDockWidget*
>(mainDock->parentDockTabGroup()->parent());
167 findToolViewsDockedToMain(&leftReparentWidgets,KDockWidget::DockLeft);
168 findToolViewsDockedToMain(&rightReparentWidgets,KDockWidget::DockRight);
169 findToolViewsDockedToMain(&bottomReparentWidgets,KDockWidget::DockBottom);
170 findToolViewsDockedToMain(&topReparentWidgets,KDockWidget::DockTop);
172 mainDock->setEnableDocking(KDockWidget::DockNone);
173 mainDock->setDockSite(KDockWidget::DockCorner);
176 DockContainer *tmpDC;
177 m_leftContainer->setWidget(tmpDC=
new DockContainer(m_leftContainer,
this, KDockWidget::DockLeft, d->m_styleIDEAlMode));
178 m_leftContainer->setEnableDocking(KDockWidget::DockLeft);
179 m_leftContainer->manualDock(mainDock, KDockWidget::DockLeft,20);
182 connect (
this,TQ_SIGNAL(toggleLeft()),tmpDC,TQ_SLOT(toggle()));
183 connect(
this,TQ_SIGNAL(collapseOverlapContainers()),tmpDC,TQ_SLOT(collapseOverlapped()));
184 connect(tmpDC,TQ_SIGNAL(activated(DockContainer*)),
this,TQ_SLOT(setActiveToolDock(DockContainer*)));
185 connect(tmpDC,TQ_SIGNAL(deactivated(DockContainer*)),
this,TQ_SLOT(removeFromActiveDockList(DockContainer*)));
187 m_rightContainer->setWidget(tmpDC=
new DockContainer(m_rightContainer,
this, KDockWidget::DockRight, d->m_styleIDEAlMode));
188 m_rightContainer->setEnableDocking(KDockWidget::DockRight);
189 m_rightContainer->manualDock(mainDock, KDockWidget::DockRight,80);
192 connect (
this,TQ_SIGNAL(toggleRight()),tmpDC,TQ_SLOT(toggle()));
193 connect(
this,TQ_SIGNAL(collapseOverlapContainers()),tmpDC,TQ_SLOT(collapseOverlapped()));
194 connect(tmpDC,TQ_SIGNAL(activated(DockContainer*)),
this,TQ_SLOT(setActiveToolDock(DockContainer*)));
195 connect(tmpDC,TQ_SIGNAL(deactivated(DockContainer*)),
this,TQ_SLOT(removeFromActiveDockList(DockContainer*)));
197 m_topContainer->setWidget(tmpDC=
new DockContainer(m_topContainer,
this, KDockWidget::DockTop, d->m_styleIDEAlMode));
198 m_topContainer->setEnableDocking(KDockWidget::DockTop);
199 m_topContainer->manualDock(mainDock, KDockWidget::DockTop,20);
202 connect (
this,TQ_SIGNAL(toggleTop()),tmpDC,TQ_SLOT(toggle()));
203 connect(
this,TQ_SIGNAL(collapseOverlapContainers()),tmpDC,TQ_SLOT(collapseOverlapped()));
204 connect(tmpDC,TQ_SIGNAL(activated(DockContainer*)),
this,TQ_SLOT(setActiveToolDock(DockContainer*)));
205 connect(tmpDC,TQ_SIGNAL(deactivated(DockContainer*)),
this,TQ_SLOT(removeFromActiveDockList(DockContainer*)));
207 m_bottomContainer->setWidget(tmpDC=
new DockContainer(m_bottomContainer,
this, KDockWidget::DockBottom, d->m_styleIDEAlMode));
208 m_bottomContainer->setEnableDocking(KDockWidget::DockBottom);
209 m_bottomContainer->manualDock(mainDock, KDockWidget::DockBottom,80);
212 connect (
this,TQ_SIGNAL(toggleBottom()),tmpDC,TQ_SLOT(toggle()));
213 connect(
this,TQ_SIGNAL(collapseOverlapContainers()),tmpDC,TQ_SLOT(collapseOverlapped()));
214 connect(tmpDC,TQ_SIGNAL(activated(DockContainer*)),
this,TQ_SLOT(setActiveToolDock(DockContainer*)));
215 connect(tmpDC,TQ_SIGNAL(deactivated(DockContainer*)),
this,TQ_SLOT(removeFromActiveDockList(DockContainer*)));
217 m_leftContainer->setDockSite( KDockWidget::DockCenter );
218 m_rightContainer->setDockSite( KDockWidget::DockCenter );
219 m_topContainer->setDockSite( KDockWidget::DockCenter );
220 m_bottomContainer->setDockSite( KDockWidget::DockCenter );
222 dockToolViewsIntoContainers(leftReparentWidgets,m_leftContainer);
223 dockToolViewsIntoContainers(rightReparentWidgets,m_rightContainer);
224 dockToolViewsIntoContainers(bottomReparentWidgets,m_bottomContainer);
225 dockToolViewsIntoContainers(topReparentWidgets,m_topContainer);
227 dockManager->setSpecialLeftDockContainer(m_leftContainer);
228 dockManager->setSpecialRightDockContainer(m_rightContainer);
229 dockManager->setSpecialTopDockContainer(m_topContainer);
230 dockManager->setSpecialBottomDockContainer(m_bottomContainer);
232 ((DockContainer*) (m_leftContainer->getWidget()))->hideIfNeeded();
233 ((DockContainer*) (m_rightContainer->getWidget()))->hideIfNeeded();
234 ((DockContainer*) (m_topContainer->getWidget()))->hideIfNeeded();
235 ((DockContainer*) (m_bottomContainer->getWidget()))->hideIfNeeded();
238void MainWindow::setupGUIClient ()
240 m_guiClient =
new KMDIPrivate::GUIClient (
this);
242 connect(m_guiClient,TQ_SIGNAL(toggleTop()),
this,TQ_SIGNAL(toggleTop()));
243 connect(m_guiClient,TQ_SIGNAL(toggleLeft()),
this,TQ_SIGNAL(toggleLeft()));
244 connect(m_guiClient,TQ_SIGNAL(toggleRight()),
this,TQ_SIGNAL(toggleRight()));
245 connect(m_guiClient,TQ_SIGNAL(toggleBottom()),
this,TQ_SIGNAL(toggleBottom()));
248TabWidget *MainWindow::tabWidget ()
253ToolViewAccessor *MainWindow::createToolWindow()
255 return new KMDI::ToolViewAccessor(
this);
258KMDI::ToolViewAccessor *MainWindow::addToolWindow( TQWidget* pWnd, KDockWidget::DockPosition pos, TQWidget* pTargetWnd,
int percent,
const TQString& tabToolTip,
const TQString& tabCaption)
261 KDockWidget* pDW = dockManager->getDockWidgetFromName(pWnd->name());
264 pDW->setWidget(pWnd);
267 pDW->setPixmap(*pWnd->icon());
269 pDW->setTabPageLabel((tabCaption==0)?pWnd->caption():tabCaption);
270 pDW->setToolTipString(tabToolTip);
271 dockManager->removeFromAutoCreateList(pDW);
275 TQRect r=pWnd->geometry();
277 KMDI::ToolViewAccessor *mtva=
new KMDI::ToolViewAccessor(
this,pWnd,tabToolTip,(tabCaption==0)?pWnd->caption():tabCaption);
278 m_toolViews->insert(tvta,mtva);
280 if (pos == KDockWidget::DockNone) {
281 mtva->d->widgetContainer->setEnableDocking(KDockWidget::DockNone);
282 mtva->d->widgetContainer->reparent(
this, (WFlags)(WType_TopLevel | WType_Dialog), r.topLeft(), isVisible());
288 mtva->place(pos, pTargetWnd,percent);
294void MainWindow::deleteToolWindow( KMDI::ToolViewAccessor *accessor)
299void MainWindow::deleteToolWindow( TQWidget* pWnd)
304 if (m_toolViews->contains(pWnd)) {
305 deleteToolWindow((*m_toolViews)[pWnd]);
309void MainWindow::setToolViewStyle(
int flag)
311 d->m_styleIDEAlMode = flag;
313 DockContainer *tmpL=::tqt_cast<KMDI::DockContainer*>(m_leftContainer->getWidget());
314 if (tmpL) tmpL->setStyle(flag);
316 DockContainer *tmpR=::tqt_cast<KMDI::DockContainer*>(m_rightContainer->getWidget());
317 if (tmpR) tmpR->setStyle(flag);
319 DockContainer *tmpT=::tqt_cast<KMDI::DockContainer*>(m_topContainer->getWidget());
320 if (tmpT) tmpT->setStyle(flag);
322 DockContainer *tmpB=::tqt_cast<KMDI::DockContainer*>(m_bottomContainer->getWidget());
323 if (tmpB) tmpB->setStyle(flag);
325 d->m_toolviewStyle = flag;
326 bool toolviewExists =
false;
327 TQMap<TQWidget*,KMDI::ToolViewAccessor*>::Iterator it;
328 for (it = m_toolViews->begin(); it != m_toolViews->end(); ++it) {
329 KDockWidget *dockWidget =
dynamic_cast<KDockWidget*
>(it.data()->wrapperWidget());
333 dockWidget->setTabPageLabel(
" ");
334 dockWidget->setPixmap(*(it.data()->wrappedWidget()->icon()));
338 dockWidget->setPixmap();
339 dockWidget->setTabPageLabel(it.data()->wrappedWidget()->caption());
343 dockWidget->setPixmap(*(it.data()->wrappedWidget()->icon()));
344 dockWidget->setTabPageLabel(it.data()->wrappedWidget()->caption());
346 toolviewExists =
true;
364void MainWindow::dockToolViewsIntoContainers(TQPtrList<KDockWidget>& widgetsToReparent,KDockWidget *container) {
365 for ( KDockWidget *dw = widgetsToReparent.first(); dw;
366 dw=widgetsToReparent.next()){
367 dw->manualDock(container,KDockWidget::DockCenter,20);
368 dw->loseFormerBrotherDockWidget();
372void MainWindow::findToolViewsDockedToMain(TQPtrList<KDockWidget>* list,KDockWidget::DockPosition dprtmw) {
373 KDockWidget *mainDock=getMainDockWidget();
374 if (mainDock->parentDockTabGroup()) {
375 mainDock=
dynamic_cast<KDockWidget*
>(mainDock->parentDockTabGroup()->parent());
379 KDockWidget* widget=mainDock->findNearestDockWidget(dprtmw);
381 if (widget->parentDockTabGroup()) {
382 widget=
static_cast<KDockWidget*
>(widget->parentDockTabGroup()->parent());
386 KDockTabGroup *tg=
dynamic_cast<KDockTabGroup*
>(widget->
389 kdDebug(760)<<
"KDockTabGroup found"<<endl;
390 for (
int i=0;i<tg->count();i++)
391 list->append((KDockWidget*)
static_cast<KDockWidget*
>(
394 list->append((KDockWidget*)widget);
396 kdDebug(760)<<
"setupToolViewsForIDEALMode: no widget found"<<endl;
398 kdDebug(760)<<
"No main dock widget found"<<endl;
401void MainWindow::setActiveToolDock(DockContainer* td) {
402 if (td==d->activeDockPriority[0])
return;
403 if (d->activeDockPriority[0]==0) {
404 d->activeDockPriority[0]=td;
410 for (
int dst=3,src=2;src>=0;dst--,src--) {
411 if (d->activeDockPriority[src]==td) src--;
413 d->activeDockPriority[dst]=d->activeDockPriority[src];
415 d->activeDockPriority[0]=td;
418void MainWindow::removeFromActiveDockList(DockContainer* td) {
419 for (
int i=0;i<4;i++) {
420 if (d->activeDockPriority[i]==td) {
422 d->activeDockPriority[i]=d->activeDockPriority[i+1];
423 d->activeDockPriority[3]=0;
436void MainWindow::prevToolViewInDock() {
437 DockContainer* td=d->activeDockPriority[0];
442void MainWindow::nextToolViewInDock() {
443 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.