• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdemdi/tdemdi
 

tdemdi/tdemdi

  • tdemdi
  • tdemdi
mainwindow.cpp
1/* This file is part of the KDE libraries
2 Copyright (C) 2004 Christoph Cullmann <cullmann@kde.org>
3 Copyright (C) 2002,2003 Joseph Wenninger <jowenn@kde.org>
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19
20 Based on:
21
22 //----------------------------------------------------------------------------
23 // Project : KDE MDI extension
24 //
25 // begin : 07/1999 by Szymon Stefanek as part of kvirc
26 // (an IRC application)
27 // changes : 09/1999 by Falk Brettschneider to create an
28 // - 06/2000 stand-alone Qt extension set of
29 // classes and a Qt-based library
30 // : 02/2000 by Massimo Morin (mmorin@schedsys.com)
31 // 2000-2003 maintained by the KDevelop project
32 // patches : -/2000 by Lars Beikirch (Lars.Beikirch@gmx.net)
33 // : 01/2003 by Jens Zurheide (jens.zurheide@gmx.de)
34 //
35 // copyright : (C) 1999-2003 by Falk Brettschneider
36 // and
37 // Szymon Stefanek (stefanek@tin.it)
38 // email : falkbr@kdevelop.org (Falk Brettschneider)
39 //----------------------------------------------------------------------------
40*/
41
42#include "config.h"
43
44#include "tabwidget.h"
45
46#include <assert.h>
47
48#include <tqcursor.h>
49#include <tqclipboard.h>
50#include <tqobjectlist.h>
51#include <tqpopupmenu.h>
52#include <tqmenubar.h>
53
54#include <tdemenubar.h>
55#include <tdeapplication.h>
56#include <kdebug.h>
57#include <tqtabwidget.h>
58#include <tdelocale.h>
59
60#include <kiconloader.h>
61#include "dockcontainer.h"
62#include "mainwindow.moc"
63
64
65#include <tqtoolbutton.h>
66#include <tqlayout.h>
67#include <tqstring.h>
68#include <tqmap.h>
69#include <tqvaluelist.h>
70
71#include "mainwindow.h"
72#include "dockcontainer.h"
73#include "toolviewaccessor_p.h"
74
75#include "guiclient.h"
76
77namespace KMDIPrivate
78{
79 class MainWindowPrivate {
80 public:
81 MainWindowPrivate() {
82 for (int i=0;i<4;i++) {
83 activeDockPriority[i]=0;
84 m_styleIDEAlMode = 0;
85 m_toolviewStyle = 0;
86 }
87 }
88 ~MainWindowPrivate() {}
89 KMDI::DockContainer* activeDockPriority[4];
90 int m_styleIDEAlMode;
91 int m_toolviewStyle;
92 };
93}
94
95namespace KMDI
96{
97
98//============ constructor ============//
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())
103{
104 // setup main dock stuff
105 setupMainDock ();
106
107 // setup the sidebar framework
108 setupToolViews ();
109
110 // setup all menu entries
111 setupGUIClient ();
112}
113
114//============ ~MainWindow ============//
115MainWindow::~MainWindow()
116{
117 delete m_toolViews;
118 m_toolViews=0;
119
120 delete d;
121 d=0;
122}
123
124void MainWindow::setupMainDock ()
125{
126 // cover KMdi's childarea by a dockwidget
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);
131
132 // setup tab widget
133 m_tabWidget = new KMDI::TabWidget (dw);
134 dw->setWidget(m_tabWidget);
135
136 // set this dock to main view
137 setView(dw);
138 setMainDockWidget(dw);
139
140 // connect signals to collapse sidebars
141 connect(m_tabWidget,TQ_SIGNAL(focusInEvent()),this,TQ_SIGNAL(collapseOverlapContainers()));
142}
143
144void MainWindow::setupToolViews ()
145{
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");
150
151 KDockWidget *mainDock=getMainDockWidget();
152 KDockWidget *w=mainDock;
153
154 if (mainDock->parentDockTabGroup()) {
155 w=static_cast<KDockWidget*>(mainDock->parentDockTabGroup()->parent());
156 }
157
158 TQPtrList<KDockWidget> leftReparentWidgets;
159 TQPtrList<KDockWidget> rightReparentWidgets;
160 TQPtrList<KDockWidget> bottomReparentWidgets;
161 TQPtrList<KDockWidget> topReparentWidgets;
162
163 if (mainDock->parentDockTabGroup()) {
164 mainDock=static_cast<KDockWidget*>(mainDock->parentDockTabGroup()->parent());
165 }
166
167 findToolViewsDockedToMain(&leftReparentWidgets,KDockWidget::DockLeft);
168 findToolViewsDockedToMain(&rightReparentWidgets,KDockWidget::DockRight);
169 findToolViewsDockedToMain(&bottomReparentWidgets,KDockWidget::DockBottom);
170 findToolViewsDockedToMain(&topReparentWidgets,KDockWidget::DockTop);
171
172 mainDock->setEnableDocking(KDockWidget::DockNone); //::DockCorner);
173 mainDock->setDockSite(KDockWidget::DockCorner);
174
175
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);
180 tmpDC->init();
181
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*)));
186
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);
190 tmpDC->init();
191
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*)));
196
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);
200 tmpDC->init();
201
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*)));
206
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);
210 tmpDC->init();
211
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*)));
216
217 m_leftContainer->setDockSite( KDockWidget::DockCenter );
218 m_rightContainer->setDockSite( KDockWidget::DockCenter );
219 m_topContainer->setDockSite( KDockWidget::DockCenter );
220 m_bottomContainer->setDockSite( KDockWidget::DockCenter );
221
222 dockToolViewsIntoContainers(leftReparentWidgets,m_leftContainer);
223 dockToolViewsIntoContainers(rightReparentWidgets,m_rightContainer);
224 dockToolViewsIntoContainers(bottomReparentWidgets,m_bottomContainer);
225 dockToolViewsIntoContainers(topReparentWidgets,m_topContainer);
226
227 dockManager->setSpecialLeftDockContainer(m_leftContainer);
228 dockManager->setSpecialRightDockContainer(m_rightContainer);
229 dockManager->setSpecialTopDockContainer(m_topContainer);
230 dockManager->setSpecialBottomDockContainer(m_bottomContainer);
231
232 ((DockContainer*) (m_leftContainer->getWidget()))->hideIfNeeded();
233 ((DockContainer*) (m_rightContainer->getWidget()))->hideIfNeeded();
234 ((DockContainer*) (m_topContainer->getWidget()))->hideIfNeeded();
235 ((DockContainer*) (m_bottomContainer->getWidget()))->hideIfNeeded();
236}
237
238void MainWindow::setupGUIClient ()
239{
240 m_guiClient = new KMDIPrivate::GUIClient (this);
241
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()));
246}
247
248TabWidget *MainWindow::tabWidget ()
249{
250 return m_tabWidget;
251}
252
253ToolViewAccessor *MainWindow::createToolWindow()
254{
255 return new KMDI::ToolViewAccessor(this);
256}
257
258KMDI::ToolViewAccessor *MainWindow::addToolWindow( TQWidget* pWnd, KDockWidget::DockPosition pos, TQWidget* pTargetWnd, int percent, const TQString& tabToolTip, const TQString& tabCaption)
259{
260 TQWidget *tvta=pWnd;
261 KDockWidget* pDW = dockManager->getDockWidgetFromName(pWnd->name());
262 if (pDW) {
263 // probably readDockConfig already created the widgetContainer, use that
264 pDW->setWidget(pWnd);
265
266 if (pWnd->icon()) {
267 pDW->setPixmap(*pWnd->icon());
268 }
269 pDW->setTabPageLabel((tabCaption==0)?pWnd->caption():tabCaption);
270 pDW->setToolTipString(tabToolTip);
271 dockManager->removeFromAutoCreateList(pDW);
272 pWnd=pDW;
273 }
274
275 TQRect r=pWnd->geometry();
276
277 KMDI::ToolViewAccessor *mtva=new KMDI::ToolViewAccessor(this,pWnd,tabToolTip,(tabCaption==0)?pWnd->caption():tabCaption);
278 m_toolViews->insert(tvta,mtva);
279
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());
283 } else { // add (and dock) the toolview as DockWidget view
284 //const TQPixmap& wndIcon = pWnd->icon() ? *(pWnd->icon()) : TQPixmap();
285
286 //KDockWidget *pCover=mtva->d->widgetContainer;
287
288 mtva->place(pos, pTargetWnd,percent);
289 }
290
291 return mtva;
292}
293
294void MainWindow::deleteToolWindow( KMDI::ToolViewAccessor *accessor)
295{
296 delete accessor;
297}
298
299void MainWindow::deleteToolWindow( TQWidget* pWnd)
300{
301 if (!pWnd)
302 return;
303
304 if (m_toolViews->contains(pWnd)) {
305 deleteToolWindow((*m_toolViews)[pWnd]);
306 }
307}
308
309void MainWindow::setToolViewStyle(int flag)
310{
311 d->m_styleIDEAlMode = flag; // see KMultiTabBar for the first 3 bits
312
313 DockContainer *tmpL=::tqt_cast<KMDI::DockContainer*>(m_leftContainer->getWidget());
314 if (tmpL) tmpL->setStyle(flag);
315
316 DockContainer *tmpR=::tqt_cast<KMDI::DockContainer*>(m_rightContainer->getWidget());
317 if (tmpR) tmpR->setStyle(flag);
318
319 DockContainer *tmpT=::tqt_cast<KMDI::DockContainer*>(m_topContainer->getWidget());
320 if (tmpT) tmpT->setStyle(flag);
321
322 DockContainer *tmpB=::tqt_cast<KMDI::DockContainer*>(m_bottomContainer->getWidget());
323 if (tmpB) tmpB->setStyle(flag);
324
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());
330 if (dockWidget) {
331 if (flag == KMDI::IconOnly)
332 {
333 dockWidget->setTabPageLabel(" ");
334 dockWidget->setPixmap(*(it.data()->wrappedWidget()->icon()));
335 } else
336 if (flag == KMDI::TextOnly)
337 {
338 dockWidget->setPixmap(); //FIXME: Does not hide the icon in the IDEAl mode.
339 dockWidget->setTabPageLabel(it.data()->wrappedWidget()->caption());
340 } else
341 if (flag == KMDI::TextAndIcon)
342 {
343 dockWidget->setPixmap(*(it.data()->wrappedWidget()->icon()));
344 dockWidget->setTabPageLabel(it.data()->wrappedWidget()->caption());
345 }
346 toolviewExists = true;
347 }
348 }
349 if (toolviewExists)
350 {
351 //workaround for the above FIXME to make switching to TextOnly mode work in IDEAl as well. Be sure that this version of switch* is called.
352 if (flag == KMDI::TextOnly)
353 {
354 /* MainWindow::switchToTabPageMode();
355 MainWindow::switchToIDEAlMode();*/ //TODO
356 } else
357 {
358 writeDockConfig();
359 readDockConfig();
360 }
361 }
362}
363
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();
369 }
370}
371
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());
376 // FIXME: will likely crash below due to unchecked cast
377 }
378
379 KDockWidget* widget=mainDock->findNearestDockWidget(dprtmw);
380 if (widget) {
381 if (widget->parentDockTabGroup()) {
382 widget=static_cast<KDockWidget*>(widget->parentDockTabGroup()->parent());
383 }
384
385 if (widget) {
386 KDockTabGroup *tg=dynamic_cast<KDockTabGroup*>(widget->
387 getWidget());
388 if (tg) {
389 kdDebug(760)<<"KDockTabGroup found"<<endl;
390 for (int i=0;i<tg->count();i++)
391 list->append((KDockWidget*)static_cast<KDockWidget*>(
392 tg->page(i)));
393 } else
394 list->append((KDockWidget*)widget);
395 } else
396 kdDebug(760)<<"setupToolViewsForIDEALMode: no widget found"<<endl;
397 } else
398 kdDebug(760)<<"No main dock widget found"<<endl;
399}
400
401void MainWindow::setActiveToolDock(DockContainer* td) {
402 if (td==d->activeDockPriority[0]) return;
403 if (d->activeDockPriority[0]==0) {
404 d->activeDockPriority[0]=td;
405 // d->focusList=new KMdiFocusList(this);
406 // if (m_pMdi) d->focusList->addWidgetTree(m_pMdi);
407 // if (m_documentTabWidget) d->focusList->addWidgetTree(m_documentTabWidget);
408 return;
409 }
410 for (int dst=3,src=2;src>=0;dst--,src--) {
411 if (d->activeDockPriority[src]==td) src--;
412 if (src<0) break;
413 d->activeDockPriority[dst]=d->activeDockPriority[src];
414 }
415 d->activeDockPriority[0]=td;
416}
417
418void MainWindow::removeFromActiveDockList(DockContainer* td) {
419 for (int i=0;i<4;i++) {
420 if (d->activeDockPriority[i]==td) {
421 for (;i<3;i++)
422 d->activeDockPriority[i]=d->activeDockPriority[i+1];
423 d->activeDockPriority[3]=0;
424 break;
425 }
426 }
427 /*
428 if (d->activeDockPriority[0]==0) {
429 if (d->focusList) d->focusList->restore();
430 delete d->focusList;
431 d->focusList=0;
432 }
433 */
434}
435
436void MainWindow::prevToolViewInDock() {
437 DockContainer* td=d->activeDockPriority[0];
438 if (!td) return;
439 td->prevToolView();
440}
441
442void MainWindow::nextToolViewInDock() {
443 DockContainer* td=d->activeDockPriority[0];
444 if (!td) return;
445 td->nextToolView();
446}
447
448}
KMDI
A namespace for the KMDI library.
Definition dockcontainer.cpp:52
KMDI::TextAndIcon
@ TextAndIcon
Show both the icon and description on the toolview tabs.
Definition global.h:65
KMDI::IconOnly
@ IconOnly
Show only icons on the toolview tabs.
Definition global.h:61
KMDI::TextOnly
@ TextOnly
Show only the text description on the toolview tabs.
Definition global.h:63

tdemdi/tdemdi

Skip menu "tdemdi/tdemdi"
  • Main Page
  • Namespace List
  • File List
  • Namespace Members

tdemdi/tdemdi

Skip menu "tdemdi/tdemdi"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdemdi/tdemdi by doxygen 1.9.8
This website is maintained by Timothy Pearson.