• 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 <tdeversion.h>
58#include <tqtabwidget.h>
59#include <tdelocale.h>
60
61#include <kiconloader.h>
62#include "dockcontainer.h"
63#include "mainwindow.moc"
64
65
66#include <tqtoolbutton.h>
67#include <tqlayout.h>
68#include <tqstring.h>
69#include <tqmap.h>
70#include <tqvaluelist.h>
71
72#include "mainwindow.h"
73#include "dockcontainer.h"
74#include "toolviewaccessor_p.h"
75
76#include "guiclient.h"
77
78namespace KMDIPrivate
79{
80 class MainWindowPrivate {
81 public:
82 MainWindowPrivate() {
83 for (int i=0;i<4;i++) {
84 activeDockPriority[i]=0;
85 m_styleIDEAlMode = 0;
86 m_toolviewStyle = 0;
87 }
88 }
89 ~MainWindowPrivate() {}
90 KMDI::DockContainer* activeDockPriority[4];
91 int m_styleIDEAlMode;
92 int m_toolviewStyle;
93 };
94}
95
96namespace KMDI
97{
98
99//============ constructor ============//
100MainWindow::MainWindow(TQWidget* parentWidget, const char* name)
101 : KParts::DockMainWindow( parentWidget, name)
102 , m_toolViews (new TQMap<TQWidget*,KMDI::ToolViewAccessor*>)
103 , d(new KMDIPrivate::MainWindowPrivate())
104{
105 // setup main dock stuff
106 setupMainDock ();
107
108 // setup the sidebar framework
109 setupToolViews ();
110
111 // setup all menu entries
112 setupGUIClient ();
113}
114
115//============ ~MainWindow ============//
116MainWindow::~MainWindow()
117{
118 delete m_toolViews;
119 m_toolViews=0;
120
121 delete d;
122 d=0;
123}
124
125void MainWindow::setupMainDock ()
126{
127 // cover KMdi's childarea by a dockwidget
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);
132
133 // setup tab widget
134 m_tabWidget = new KMDI::TabWidget (dw);
135 dw->setWidget(m_tabWidget);
136
137 // set this dock to main view
138 setView(dw);
139 setMainDockWidget(dw);
140
141 // connect signals to collapse sidebars
142 connect(m_tabWidget,TQ_SIGNAL(focusInEvent()),this,TQ_SIGNAL(collapseOverlapContainers()));
143}
144
145void MainWindow::setupToolViews ()
146{
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");
151
152 KDockWidget *mainDock=getMainDockWidget();
153 KDockWidget *w=mainDock;
154
155 if (mainDock->parentDockTabGroup()) {
156 w=static_cast<KDockWidget*>(mainDock->parentDockTabGroup()->parent());
157 }
158
159 TQPtrList<KDockWidget> leftReparentWidgets;
160 TQPtrList<KDockWidget> rightReparentWidgets;
161 TQPtrList<KDockWidget> bottomReparentWidgets;
162 TQPtrList<KDockWidget> topReparentWidgets;
163
164 if (mainDock->parentDockTabGroup()) {
165 mainDock=static_cast<KDockWidget*>(mainDock->parentDockTabGroup()->parent());
166 }
167
168 findToolViewsDockedToMain(&leftReparentWidgets,KDockWidget::DockLeft);
169 findToolViewsDockedToMain(&rightReparentWidgets,KDockWidget::DockRight);
170 findToolViewsDockedToMain(&bottomReparentWidgets,KDockWidget::DockBottom);
171 findToolViewsDockedToMain(&topReparentWidgets,KDockWidget::DockTop);
172
173 mainDock->setEnableDocking(KDockWidget::DockNone); //::DockCorner);
174 mainDock->setDockSite(KDockWidget::DockCorner);
175
176
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);
181 tmpDC->init();
182
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*)));
187
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);
191 tmpDC->init();
192
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*)));
197
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);
201 tmpDC->init();
202
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*)));
207
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);
211 tmpDC->init();
212
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*)));
217
218 m_leftContainer->setDockSite( KDockWidget::DockCenter );
219 m_rightContainer->setDockSite( KDockWidget::DockCenter );
220 m_topContainer->setDockSite( KDockWidget::DockCenter );
221 m_bottomContainer->setDockSite( KDockWidget::DockCenter );
222
223 dockToolViewsIntoContainers(leftReparentWidgets,m_leftContainer);
224 dockToolViewsIntoContainers(rightReparentWidgets,m_rightContainer);
225 dockToolViewsIntoContainers(bottomReparentWidgets,m_bottomContainer);
226 dockToolViewsIntoContainers(topReparentWidgets,m_topContainer);
227
228 dockManager->setSpecialLeftDockContainer(m_leftContainer);
229 dockManager->setSpecialRightDockContainer(m_rightContainer);
230 dockManager->setSpecialTopDockContainer(m_topContainer);
231 dockManager->setSpecialBottomDockContainer(m_bottomContainer);
232
233 ((DockContainer*) (m_leftContainer->getWidget()))->hideIfNeeded();
234 ((DockContainer*) (m_rightContainer->getWidget()))->hideIfNeeded();
235 ((DockContainer*) (m_topContainer->getWidget()))->hideIfNeeded();
236 ((DockContainer*) (m_bottomContainer->getWidget()))->hideIfNeeded();
237}
238
239void MainWindow::setupGUIClient ()
240{
241 m_guiClient = new KMDIPrivate::GUIClient (this);
242
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()));
247}
248
249TabWidget *MainWindow::tabWidget ()
250{
251 return m_tabWidget;
252}
253
254ToolViewAccessor *MainWindow::createToolWindow()
255{
256 return new KMDI::ToolViewAccessor(this);
257}
258
259KMDI::ToolViewAccessor *MainWindow::addToolWindow( TQWidget* pWnd, KDockWidget::DockPosition pos, TQWidget* pTargetWnd, int percent, const TQString& tabToolTip, const TQString& tabCaption)
260{
261 TQWidget *tvta=pWnd;
262 KDockWidget* pDW = dockManager->getDockWidgetFromName(pWnd->name());
263 if (pDW) {
264 // probably readDockConfig already created the widgetContainer, use that
265 pDW->setWidget(pWnd);
266
267 if (pWnd->icon()) {
268 pDW->setPixmap(*pWnd->icon());
269 }
270 pDW->setTabPageLabel((tabCaption==0)?pWnd->caption():tabCaption);
271 pDW->setToolTipString(tabToolTip);
272 dockManager->removeFromAutoCreateList(pDW);
273 pWnd=pDW;
274 }
275
276 TQRect r=pWnd->geometry();
277
278 KMDI::ToolViewAccessor *mtva=new KMDI::ToolViewAccessor(this,pWnd,tabToolTip,(tabCaption==0)?pWnd->caption():tabCaption);
279 m_toolViews->insert(tvta,mtva);
280
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());
284 } else { // add (and dock) the toolview as DockWidget view
285 //const TQPixmap& wndIcon = pWnd->icon() ? *(pWnd->icon()) : TQPixmap();
286
287 //KDockWidget *pCover=mtva->d->widgetContainer;
288
289 mtva->place(pos, pTargetWnd,percent);
290 }
291
292 return mtva;
293}
294
295void MainWindow::deleteToolWindow( KMDI::ToolViewAccessor *accessor)
296{
297 delete accessor;
298}
299
300void MainWindow::deleteToolWindow( TQWidget* pWnd)
301{
302 if (!pWnd)
303 return;
304
305 if (m_toolViews->contains(pWnd)) {
306 deleteToolWindow((*m_toolViews)[pWnd]);
307 }
308}
309
310void MainWindow::setToolViewStyle(int flag)
311{
312 d->m_styleIDEAlMode = flag; // see KMultiTabBar for the first 3 bits
313
314 DockContainer *tmpL=::tqt_cast<KMDI::DockContainer*>(m_leftContainer->getWidget());
315 if (tmpL) tmpL->setStyle(flag);
316
317 DockContainer *tmpR=::tqt_cast<KMDI::DockContainer*>(m_rightContainer->getWidget());
318 if (tmpR) tmpR->setStyle(flag);
319
320 DockContainer *tmpT=::tqt_cast<KMDI::DockContainer*>(m_topContainer->getWidget());
321 if (tmpT) tmpT->setStyle(flag);
322
323 DockContainer *tmpB=::tqt_cast<KMDI::DockContainer*>(m_bottomContainer->getWidget());
324 if (tmpB) tmpB->setStyle(flag);
325
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());
331 if (dockWidget) {
332 if (flag == KMDI::IconOnly)
333 {
334 dockWidget->setTabPageLabel(" ");
335 dockWidget->setPixmap(*(it.data()->wrappedWidget()->icon()));
336 } else
337 if (flag == KMDI::TextOnly)
338 {
339 dockWidget->setPixmap(); //FIXME: Does not hide the icon in the IDEAl mode.
340 dockWidget->setTabPageLabel(it.data()->wrappedWidget()->caption());
341 } else
342 if (flag == KMDI::TextAndIcon)
343 {
344 dockWidget->setPixmap(*(it.data()->wrappedWidget()->icon()));
345 dockWidget->setTabPageLabel(it.data()->wrappedWidget()->caption());
346 }
347 toolviewExists = true;
348 }
349 }
350 if (toolviewExists)
351 {
352 //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.
353 if (flag == KMDI::TextOnly)
354 {
355 /* MainWindow::switchToTabPageMode();
356 MainWindow::switchToIDEAlMode();*/ //TODO
357 } else
358 {
359 writeDockConfig();
360 readDockConfig();
361 }
362 }
363}
364
365void 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();
370 }
371}
372
373void MainWindow::findToolViewsDockedToMain(TQPtrList<KDockWidget>* list,KDockWidget::DockPosition dprtmw) {
374 KDockWidget *mainDock=getMainDockWidget();
375 if (mainDock->parentDockTabGroup()) {
376 mainDock=dynamic_cast<KDockWidget*>(mainDock->parentDockTabGroup()->parent());
377 // FIXME: will likely crash below due to unchecked cast
378 }
379
380 KDockWidget* widget=mainDock->findNearestDockWidget(dprtmw);
381 if (widget) {
382 if (widget->parentDockTabGroup()) {
383 widget=static_cast<KDockWidget*>(widget->parentDockTabGroup()->parent());
384 }
385
386 if (widget) {
387 KDockTabGroup *tg=dynamic_cast<KDockTabGroup*>(widget->
388 getWidget());
389 if (tg) {
390 kdDebug(760)<<"KDockTabGroup found"<<endl;
391 for (int i=0;i<tg->count();i++)
392 list->append((KDockWidget*)static_cast<KDockWidget*>(
393 tg->page(i)));
394 } else
395 list->append((KDockWidget*)widget);
396 } else
397 kdDebug(760)<<"setupToolViewsForIDEALMode: no widget found"<<endl;
398 } else
399 kdDebug(760)<<"No main dock widget found"<<endl;
400}
401
402void MainWindow::setActiveToolDock(DockContainer* td) {
403 if (td==d->activeDockPriority[0]) return;
404 if (d->activeDockPriority[0]==0) {
405 d->activeDockPriority[0]=td;
406 // d->focusList=new KMdiFocusList(this);
407 // if (m_pMdi) d->focusList->addWidgetTree(m_pMdi);
408 // if (m_documentTabWidget) d->focusList->addWidgetTree(m_documentTabWidget);
409 return;
410 }
411 for (int dst=3,src=2;src>=0;dst--,src--) {
412 if (d->activeDockPriority[src]==td) src--;
413 if (src<0) break;
414 d->activeDockPriority[dst]=d->activeDockPriority[src];
415 }
416 d->activeDockPriority[0]=td;
417}
418
419void MainWindow::removeFromActiveDockList(DockContainer* td) {
420 for (int i=0;i<4;i++) {
421 if (d->activeDockPriority[i]==td) {
422 for (;i<3;i++)
423 d->activeDockPriority[i]=d->activeDockPriority[i+1];
424 d->activeDockPriority[3]=0;
425 break;
426 }
427 }
428 /*
429 if (d->activeDockPriority[0]==0) {
430 if (d->focusList) d->focusList->restore();
431 delete d->focusList;
432 d->focusList=0;
433 }
434 */
435}
436
437void MainWindow::prevToolViewInDock() {
438 DockContainer* td=d->activeDockPriority[0];
439 if (!td) return;
440 td->prevToolView();
441}
442
443void MainWindow::nextToolViewInDock() {
444 DockContainer* td=d->activeDockPriority[0];
445 if (!td) return;
446 td->nextToolView();
447}
448
449}
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.4
This website is maintained by Timothy Pearson.