• 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 
78 namespace 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 
96 namespace KMDI
97 {
98 
99 //============ constructor ============//
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())
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 ============//
116 MainWindow::~MainWindow()
117 {
118  delete m_toolViews;
119  m_toolViews=0;
120 
121  delete d;
122  d=0;
123 }
124 
125 void 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,TQT_SIGNAL(focusInEvent()),this,TQT_SIGNAL(collapseOverlapContainers()));
143 }
144 
145 void 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*>(TQT_TQWIDGET(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*>(TQT_TQWIDGET(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,TQT_SIGNAL(toggleLeft()),tmpDC,TQT_SLOT(toggle()));
184  connect(this,TQT_SIGNAL(collapseOverlapContainers()),tmpDC,TQT_SLOT(collapseOverlapped()));
185  connect(tmpDC,TQT_SIGNAL(activated(DockContainer*)),this,TQT_SLOT(setActiveToolDock(DockContainer*)));
186  connect(tmpDC,TQT_SIGNAL(deactivated(DockContainer*)),this,TQT_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,TQT_SIGNAL(toggleRight()),tmpDC,TQT_SLOT(toggle()));
194  connect(this,TQT_SIGNAL(collapseOverlapContainers()),tmpDC,TQT_SLOT(collapseOverlapped()));
195  connect(tmpDC,TQT_SIGNAL(activated(DockContainer*)),this,TQT_SLOT(setActiveToolDock(DockContainer*)));
196  connect(tmpDC,TQT_SIGNAL(deactivated(DockContainer*)),this,TQT_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,TQT_SIGNAL(toggleTop()),tmpDC,TQT_SLOT(toggle()));
204  connect(this,TQT_SIGNAL(collapseOverlapContainers()),tmpDC,TQT_SLOT(collapseOverlapped()));
205  connect(tmpDC,TQT_SIGNAL(activated(DockContainer*)),this,TQT_SLOT(setActiveToolDock(DockContainer*)));
206  connect(tmpDC,TQT_SIGNAL(deactivated(DockContainer*)),this,TQT_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,TQT_SIGNAL(toggleBottom()),tmpDC,TQT_SLOT(toggle()));
214  connect(this,TQT_SIGNAL(collapseOverlapContainers()),tmpDC,TQT_SLOT(collapseOverlapped()));
215  connect(tmpDC,TQT_SIGNAL(activated(DockContainer*)),this,TQT_SLOT(setActiveToolDock(DockContainer*)));
216  connect(tmpDC,TQT_SIGNAL(deactivated(DockContainer*)),this,TQT_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 
239 void MainWindow::setupGUIClient ()
240 {
241  m_guiClient = new KMDIPrivate::GUIClient (this);
242 
243  connect(m_guiClient,TQT_SIGNAL(toggleTop()),this,TQT_SIGNAL(toggleTop()));
244  connect(m_guiClient,TQT_SIGNAL(toggleLeft()),this,TQT_SIGNAL(toggleLeft()));
245  connect(m_guiClient,TQT_SIGNAL(toggleRight()),this,TQT_SIGNAL(toggleRight()));
246  connect(m_guiClient,TQT_SIGNAL(toggleBottom()),this,TQT_SIGNAL(toggleBottom()));
247 }
248 
249 TabWidget *MainWindow::tabWidget ()
250 {
251  return m_tabWidget;
252 }
253 
254 ToolViewAccessor *MainWindow::createToolWindow()
255 {
256  return new KMDI::ToolViewAccessor(this);
257 }
258 
259 KMDI::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 
295 void MainWindow::deleteToolWindow( KMDI::ToolViewAccessor *accessor)
296 {
297  delete accessor;
298 }
299 
300 void 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 
310 void MainWindow::setToolViewStyle(int flag)
311 {
312  d->m_styleIDEAlMode = flag; // see KMultiTabBar for the first 3 bits
313 
314  DockContainer *tmpL=::tqqt_cast<KMDI::DockContainer*>(m_leftContainer->getWidget());
315  if (tmpL) tmpL->setStyle(flag);
316 
317  DockContainer *tmpR=::tqqt_cast<KMDI::DockContainer*>(m_rightContainer->getWidget());
318  if (tmpR) tmpR->setStyle(flag);
319 
320  DockContainer *tmpT=::tqqt_cast<KMDI::DockContainer*>(m_topContainer->getWidget());
321  if (tmpT) tmpT->setStyle(flag);
322 
323  DockContainer *tmpB=::tqqt_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 = tqt_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 
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();
370  }
371 }
372 
373 void MainWindow::findToolViewsDockedToMain(TQPtrList<KDockWidget>* list,KDockWidget::DockPosition dprtmw) {
374  KDockWidget *mainDock=getMainDockWidget();
375  if (mainDock->parentDockTabGroup()) {
376  mainDock=tqt_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*>(TQT_TQWIDGET(widget->parentDockTabGroup()->parent()));
384  }
385 
386  if (widget) {
387  KDockTabGroup *tg=tqt_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 
402 void 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 
419 void 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 
437 void MainWindow::prevToolViewInDock() {
438  DockContainer* td=d->activeDockPriority[0];
439  if (!td) return;
440  td->prevToolView();
441 }
442 
443 void MainWindow::nextToolViewInDock() {
444  DockContainer* td=d->activeDockPriority[0];
445  if (!td) return;
446  td->nextToolView();
447 }
448 
449 }
KMDIPrivate
Definition: guiclient.cpp:51
KMDI::TextAndIcon
Show both the icon and description on the toolview tabs.
Definition: global.h:65
KMDI::IconOnly
Show only icons on the toolview tabs.
Definition: global.h:61
KMDI
A namespace for the KMDI library.
Definition: dockcontainer.cpp:51
KMDI::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
  •     tdecore
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  • tdeioslave
  •   http
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdemdi/tdemdi by doxygen 1.8.8
This website is maintained by Timothy Pearson.