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

tdemdi/tdemdi

  • tdemdi
  • tdemdi
dockcontainer.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2002, 2003 Joseph Wenninger <jowenn@kde.org>
3 Copyright (C) 2002, 2004 Christoph Cullmann <cullmann@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 version 2 as published by the Free Software Foundation.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18*/
19
20#include "mainwindow.h"
21#include "dockcontainer.h"
22
23#include "dockcontainer.moc"
24
25#include "kdockwidget_private.h"
26
27#include <tqwidgetstack.h>
28#include <tqlayout.h>
29#include <tqtimer.h>
30#include <tqtooltip.h>
31#include <tdemultitabbar.h>
32#include <tdeglobalsettings.h>
33
34#include <kdebug.h>
35#include <kiconloader.h>
36#include <tdeapplication.h>
37#include <tdeconfig.h>
38#include <tdelocale.h>
39
40//TODO: Well, this is already defined in tdeui/kdockwidget.cpp
41static const char* const tdemdi_not_close_xpm[]={
42"5 5 2 1",
43"# c black",
44". c None",
45"#####",
46"#...#",
47"#...#",
48"#...#",
49"#####"};
50
51namespace KMDI
52{
53
54
55DockContainer::DockContainer(TQWidget *parent, TQWidget *win, int position, int flags)
56: TQWidget(parent),KDockContainer()
57{
58 m_tabSwitching = false;
59 m_block=false;
60 m_inserted=-1;
61 m_mainWin = win;
62 oldtab=-1;
63 mTabCnt=0;
64 m_position = position;
65 m_previousTab=-1;
66 m_separatorPos = 18000;
67 m_movingState=NotMoving;
68 m_startEvent=0;
69 kdDebug(760)<<"DockContainer created"<<endl;
70
71 TQBoxLayout *l;
72 m_vertical=!((position==KDockWidget::DockTop) || (position==KDockWidget::DockBottom));
73
74 if (!m_vertical)
75 l=new TQVBoxLayout(this);
76 else
77 l=new TQHBoxLayout(this);
78
79 l->setAutoAdd(false);
80
81 m_tb=new KMultiTabBar(((position==KDockWidget::DockTop) || (position==KDockWidget::DockBottom))?
82 KMultiTabBar::Horizontal:KMultiTabBar::Vertical,this);
83
84 m_tb->setStyle(KMultiTabBar::KMultiTabBarStyle(flags));
85 m_tb->showActiveTabTexts(true);
86
87 m_tb->setPosition((position==KDockWidget::DockLeft)?KMultiTabBar::Left:
88 (position==KDockWidget::DockBottom)?KMultiTabBar::Bottom:
89 (position==KDockWidget::DockTop)?KMultiTabBar::Top:KMultiTabBar::Right);
90
91 m_ws=new TQWidgetStack(this);
92
93 m_ws->setSizePolicy(TQSizePolicy(TQSizePolicy::Expanding,TQSizePolicy::Expanding));
94
95 if ( (position==KDockWidget::DockLeft) || (position==KDockWidget::DockTop))
96 {
97 l->add(m_tb);
98 l->add(m_ws);
99 }
100 else
101 {
102 l->add(m_ws);
103 l->add(m_tb);
104 }
105
106 l->activate();
107 m_ws->hide();
108 m_tb->installEventFilter(this);
109}
110
111void DockContainer::setStyle(int style) {
112 if (m_tb) m_tb->setStyle(KMultiTabBar::KMultiTabBarStyle(style));
113}
114
115DockContainer::~DockContainer()
116{
117 TQMap<KDockWidget*,int>::iterator it;
118 while (m_map.count()) {
119 it = m_map.begin();
120 KDockWidget *w=it.key();
121 if (m_overlapButtons.contains(w)) {
122 (::tqt_cast<KDockWidgetHeader*>(w->getHeader()))->removeButton(m_overlapButtons[w]);
123 m_overlapButtons.remove(w);
124 }
125 m_map.remove(w);
126 w->undock();
127 }
128 deactivated(this);
129}
130
131
132void DockContainer::init()
133{
134 bool overlap = isOverlapMode();
135 if (m_vertical)
136 {
137 parentDockWidget()->setForcedFixedWidth(m_tb->width());
138 activateOverlapMode(m_tb->width());
139 }
140 else
141 {
142 parentDockWidget()->setForcedFixedHeight(m_tb->height());
143 activateOverlapMode(m_tb->height());
144 }
145
146 if (!overlap) deactivateOverlapMode();
147
148 // try to restore splitter size
149 if ( parentDockWidget() && parentDockWidget()->parent() )
150 {
151 KDockSplitter *sp= ::tqt_cast<KDockSplitter*>(parentDockWidget()->
152 parent());
153 if ( sp )
154 sp->setSeparatorPosX( m_separatorPos );
155 }
156}
157
158KDockWidget *DockContainer::parentDockWidget()
159{
160 return ((KDockWidget*)parent());
161}
162
163void DockContainer::insertWidget (KDockWidget *dwdg, TQPixmap pixmap, const TQString &text, int &)
164{
165 KDockWidget* w = (KDockWidget*) dwdg;
166 int tab;
167 bool alreadyThere=m_map.contains(w);
168
169 if (alreadyThere)
170 {
171 tab=m_map[w];
172 if (m_ws->addWidget(w,tab)!=tab) kdDebug(760)<<"ERROR COULDN'T READD WIDGET************"<<endl;
173 kdDebug(760)<<"READDED WIDGET***********************************"<<endl;
174/*JOWENN m_tb->setTab(tab,true);
175 tabClicked(tab);*/
176 }
177 else
178 {
179 tab=m_ws->addWidget(w);
180 m_map.insert(w,tab);
181 m_revMap.insert(tab,w);
182
183
184 if (((KDockWidget*)parentWidget())->mayBeShow())
185 ((KDockWidget*)parentWidget())->dockBack();
186
187 if (::tqt_cast<KDockWidgetHeader*>(w->getHeader()))
188 {
189 kdDebug(760)<<"*** KDockWidgetHeader has been found"<<endl;
190
191 KDockWidgetHeader *hdr=::tqt_cast<KDockWidgetHeader*>(w->getHeader());
192
193 KDockButton_Private *btn = new KDockButton_Private( hdr, "OverlapButton" );
194
195 TQToolTip::add( btn, i18n("Switch between overlap and side by side mode", "Overlap") );
196
197 btn->setToggleButton( true );
198 btn->setPixmap( const_cast< const char** >(tdemdi_not_close_xpm) );
199 hdr->addButton(btn);
200 m_overlapButtons.insert(w,btn);
201 btn->setOn(!isOverlapMode());
202
203 connect(btn,TQ_SIGNAL(clicked()),this,TQ_SLOT(changeOverlapMode()));
204 }
205
206 m_tb->appendTab(pixmap.isNull()?SmallIcon("misc"):pixmap,tab,w->tabPageLabel());
207 m_tb->tab(tab)->installEventFilter( this );
208 kdDebug(760)<<"NAMENAMENAMENAME:===========================:"<<w->tabPageLabel()<<endl;
209
210//FB m_tb->setTab(tab,true);
211
212 connect(m_tb->tab(tab),TQ_SIGNAL(clicked(int)),this,TQ_SLOT(tabClicked(int)));
213
214 kdDebug(760)<<"DockContainer::insertWidget()"<<endl;
215
216//FB m_tb->setTab(oldtab,false);
217
218 mTabCnt++;
219 m_inserted=tab;
220 int dummy=0;
221//FB tabClicked(tab);
222 KDockContainer::insertWidget(w,pixmap,text,dummy);
223 itemNames.append(w->name());
224 tabCaptions.insert(w->name(),w->tabPageLabel());
225 tabTooltips.insert(w->name(),w->toolTipString());
226
227
228 }
229
230//FB m_ws->raiseWidget(tab);
231}
232
233
234bool DockContainer::eventFilter( TQObject *obj, TQEvent *event )
235{
236 if (obj==m_tb) {
237 if ( (event->type()==TQEvent::Resize) && (m_ws->isHidden()) ) {
238 TQSize size=((TQResizeEvent*)event)->size();
239 if (m_vertical)
240 parentDockWidget()->setForcedFixedWidth(size.width());
241 else
242 parentDockWidget()->setForcedFixedHeight(size.height());
243 }
244 }
245 else
246 switch ( event->type() ){
247 case TQEvent::MouseButtonPress:
248 {
249 KDockWidget * w=m_revMap[dynamic_cast<KMultiTabBarTab*>(obj)->id()];
250 if (!w) {
251 kdDebug()<<"NoWidget"<<endl;
252 break;
253 }
254 if (!w->getHeader()) {
255 kdDebug()<<"NO HEADER"<<endl;
256 break;
257 }
258 KDockWidgetHeader *hdr=::tqt_cast<KDockWidgetHeader*>(w->getHeader());
259 if (!hdr) {
260 kdDebug()<<"Wrong header type in DockContainer::eventFilter"<<endl;
261 break;
262 }
263 m_dockManager=w->dockManager();
264 m_dragPanel=hdr->dragPanel();
265 if (m_dragPanel) m_movingState=WaitingForMoveStart;
266 delete m_startEvent;
267 m_startEvent=new TQMouseEvent(* ((TQMouseEvent*)event));
268 }
269 break;
270 case TQEvent::MouseButtonRelease:
271 if (m_movingState==Moving) {
272 m_movingState=NotMoving;
273 TQApplication::postEvent(m_dragPanel,new TQMouseEvent(* ( (TQMouseEvent*)event)));
274 delete m_startEvent;
275 m_startEvent=0;
276 }
277 break;
278 case TQEvent::MouseMove:
279 if (m_movingState==WaitingForMoveStart) {
280 TQPoint p( ((TQMouseEvent*)event)->pos() - m_startEvent->pos() );
281 if( p.manhattanLength() > TDEGlobalSettings::dndEventDelay()) {
282 m_dockManager->eventFilter(m_dragPanel,static_cast<TQEvent*>(m_startEvent));
283 m_dockManager->eventFilter(m_dragPanel,event);
284 m_movingState=Moving;
285 }
286 } else if (m_movingState==Moving) {
287 m_dockManager->eventFilter(m_dragPanel,event);
288 }
289 break;
290 default:
291 break;
292
293 }
294 return false;
295
296}
297
298void DockContainer::showWidget(KDockWidget *w) {
299 if (!m_map.contains(w)) return;
300
301 kdDebug()<<"KMDI::DockContainer::<showWidget"<<endl;
302 int id=m_map[w];
303 m_tb->setTab(id,true);
304 tabClicked(id);
305
306}
307
308void DockContainer::changeOverlapMode()
309{
310 const KDockButton_Private *btn=dynamic_cast<const KDockButton_Private*>(sender());
311
312 kdDebug(760)<<"DockContainer::changeOverlapMode: button=="<<btn<<endl;
313
314 if (!btn) return;
315
316 if (!btn->isOn()) {
317 kdDebug(760)<<"DockContainer::changeOverlapMode: activateOverlapMode"<<endl;
318 if (m_vertical) {
319 activateOverlapMode(m_tb->width());
320 }
321 else
322 {
323 activateOverlapMode(m_tb->height());
324 }
325 } else {
326 kdDebug(760)<<"DockContainer::changeOverlapMode: deactivateOverlapMode"<<endl;
327 deactivateOverlapMode();
328 }
329
330 for (TQMap<KDockWidget*,KDockButton_Private*>::iterator it=m_overlapButtons.begin();
331 it!=m_overlapButtons.end();++it)
332 it.data()->setOn(!isOverlapMode());
333}
334
335void DockContainer::hideIfNeeded() {
336 kdDebug(760)<<"************************* hideIfNeeded *************************"<<endl;
337 if (!itemNames.count())
338 ((KDockWidget*)parentWidget())->undock();
339}
340
341void DockContainer::removeWidget(KDockWidget* dwdg)
342{
343 KDockWidget* w = (KDockWidget*) dwdg;
344 if (!m_map.contains(w)) return;
345 int id=m_map[w];
346 if (m_tb->isTabRaised(id)) {
347 //why do we hide the tab if we're just going
348 //to remove it? - mattr 2004-10-26
349 m_tb->setTab(id,false);
350 m_tabSwitching = false;
351 tabClicked(id);
352 }
353 m_tb->removeTab(id);
354 m_ws->removeWidget(w);
355 m_map.remove(w);
356 m_revMap.remove(id);
357 if (m_overlapButtons.contains(w)) {
358 (::tqt_cast<KDockWidgetHeader*>(w->getHeader()))->removeButton(m_overlapButtons[w]);
359 m_overlapButtons.remove(w);
360 }
361 KDockContainer::removeWidget(w);
362 itemNames.remove(w->name());
363 tabCaptions.remove(w->name());
364 tabTooltips.remove(w->name());
365 if (!itemNames.count())
366 ((KDockWidget*)parentWidget())->undock();
367}
368
369void DockContainer::undockWidget(KDockWidget *dwdg)
370{
371 KDockWidget* w = (KDockWidget*) dwdg;
372
373 if (!m_map.contains(w))
374 return;
375
376 int id=m_map[w];
377 if (m_tb->isTabRaised(id)) {
378 kdDebug(760)<<"Wiget has been undocked, setting tab down"<<endl;
379 m_tb->setTab(id,false);
380 tabClicked(id);
381 }
382}
383
384void DockContainer::tabClicked(int t)
385{
386 kdDebug(760)<<"DockContainer::tabClicked()"<<endl;
387 bool call_makeVisible=!m_tabSwitching;
388 m_tabSwitching=true;
389 if ((t!=-1) && m_tb->isTabRaised(t))
390 {
391 if (m_ws->isHidden())
392 {
393 m_ws->show ();
394 parentDockWidget()->restoreFromForcedFixedSize();
395 }
396 if (!m_ws->widget(t))
397 {
398 m_revMap[t]->manualDock(parentDockWidget(),KDockWidget::DockCenter,20);
399 if (call_makeVisible) m_revMap[t]->makeDockVisible();//manualDock(parentDockWidget(),KDockWidget::DockCenter,20);
400 m_tabSwitching=false;
401 emit activated(this);
402 return;
403 }
404 m_ws->raiseWidget(t);
405 if (m_ws->widget(t)) {
406 KDockWidget *tmpDw=::tqt_cast<KDockWidget*>(m_ws->widget(t));
407 if (tmpDw) {
408 if (tmpDw->getWidget()) tmpDw->getWidget()->setFocus();
409 } else kdDebug(760)<<"Something really weird is going on"<<endl;
410 } else
411 kdDebug(760)<<"DockContainer::tabClicked(int): m_ws->widget(t)==0 "<<endl;
412
413 if (oldtab!=t) m_tb->setTab(oldtab,false);
414 m_tabSwitching=true;
415 oldtab=t;
416 emit activated(this);
417 }
418 else
419 {
420 // try save splitter position
421 if ( parentDockWidget() && parentDockWidget()->parent() )
422 {
423 KDockSplitter *sp= ::tqt_cast<KDockSplitter*>(parentDockWidget()->
424 parent());
425 if ( sp )
426 m_separatorPos = sp->separatorPos();
427 }
428 m_previousTab=t;
429// oldtab=-1;
430 if (m_block) return;
431 emit deactivated(this);
432 m_block=true;
433 if (m_ws->widget(t))
434 {
435// ((KDockWidget*)m_ws->widget(t))->undock();
436 }
437 m_block=false;
438 m_ws->hide ();
439
440
441 kdDebug(760)<<"Fixed Width:"<<m_tb->width()<<endl;
442 if (m_vertical)
443 parentDockWidget()->setForcedFixedWidth(m_tb->width()); // strange why it worked before at all
444 else
445 parentDockWidget()->setForcedFixedHeight(m_tb->height()); // strange why it worked before at all
446 }
447 m_tabSwitching=false;
448}
449
450void DockContainer::setToolTip (KDockWidget *, TQString &s)
451{
452 kdDebug(760)<<"***********************************Setting tooltip for a widget: "<<s<<endl;
453}
454
455void DockContainer::setPixmap(KDockWidget* widget ,const TQPixmap& pixmap)
456{
457 int id=m_ws->id(widget);
458 if (id==-1) return;
459 KMultiTabBarTab *tab=m_tb->tab(id);
460 tab->setIcon(pixmap.isNull()?SmallIcon("misc"):pixmap);
461}
462
463void DockContainer::save(TDEConfig* cfg,const TQString& group_or_prefix)
464{
465 // group name
466 TQString grp=cfg->group();
467 cfg->deleteGroup(group_or_prefix+TQString("::%1").arg(parent()->name()));
468 cfg->setGroup(group_or_prefix+TQString("::%1").arg(parent()->name()));
469
470 // save overlap mode
471 cfg->writeEntry("overlapMode",isOverlapMode());
472
473 // try to save the splitter position
474 if ( parentDockWidget() && parentDockWidget()->parent() )
475 {
476 KDockSplitter *sp= ::tqt_cast<KDockSplitter*>(parentDockWidget()->
477 parent());
478 if ( sp )
479 cfg->writeEntry( "separatorPosition", m_separatorPos );
480 }
481
482 TQPtrList<KMultiTabBarTab>* tl=m_tb->tabs();
483 TQPtrListIterator<KMultiTabBarTab> it(*tl);
484 TQStringList::Iterator it2=itemNames.begin();
485 int i=0;
486 for (;it.current()!=0;++it,++it2)
487 {
488// cfg->writeEntry(TQString("widget%1").arg(i),m_ws->widget(it.current()->id())->name());
489 cfg->writeEntry(TQString("widget%1").arg(i),(*it2));
490 TQString s=tabCaptions[*it2];
491 if (!s.isEmpty()) {
492 cfg->writeEntry(TQString("widget%1-tabCaption").arg(i),s);
493 }
494 s=tabTooltips[*it2];
495 if (!s.isEmpty()) {
496 cfg->writeEntry(TQString("widget%1-tabTooltip").arg(i),s);
497 }
498// kdDebug(760)<<"****************************************Saving: "<<m_ws->widget(it.current()->id())->name()<<endl;
499 if (m_tb->isTabRaised(it.current()->id()))
500 cfg->writeEntry(m_ws->widget(it.current()->id())->name(),true);
501 ++i;
502 }
503
504 cfg->setGroup(grp);
505}
506
507void DockContainer::load(TDEConfig* cfg,const TQString& group_or_prefix)
508{
509 TQString grp=cfg->group();
510 cfg->setGroup(group_or_prefix+TQString("::%1").arg(parent()->name()));
511
512 if (cfg->readBoolEntry("overlapMode"))
513 activateOverlapMode( m_vertical?m_tb->width():m_tb->height() );
514 else
515 deactivateOverlapMode();
516
517 m_separatorPos = cfg->readNumEntry( "separatorPosition", 18000 ); // = 18%
518
519 int i=0;
520 TQString raise;
521 while (true)
522 {
523 TQString dwn=cfg->readEntry(TQString("widget%1").arg(i));
524 if (dwn.isEmpty()) break;
525 kdDebug(760)<<"*************************************************************Configuring dockwidget :"<<dwn<<endl;
526 KDockWidget *dw=((KDockWidget*)parent())->dockManager()->getDockWidgetFromName(dwn);
527 if (dw)
528 {
529 TQString s=cfg->readEntry(TQString("widget%1-tabCaption").arg(i));
530 if (!s.isEmpty()) {
531 dw->setTabPageLabel(s);
532 }
533 s=cfg->readEntry(TQString("widget%1-tabTooltip").arg(i));
534 if (!s.isEmpty()) {
535 dw->setToolTipString(s);
536 }
537 dw->manualDock((KDockWidget*)parent(),KDockWidget::DockCenter);
538 }
539 if (cfg->readBoolEntry(dwn,false)) raise=dwn;
540 i++;
541
542 }
543
544 TQPtrList<KMultiTabBarTab>* tl=m_tb->tabs();
545 TQPtrListIterator<KMultiTabBarTab> it1(*tl);
546 m_ws->hide();
547 if (m_vertical)
548 parentDockWidget()->setForcedFixedWidth(m_tb->width());
549 else
550 parentDockWidget()->setForcedFixedHeight(m_tb->height());
551 for (;it1.current()!=0;++it1)
552 {
553 m_tb->setTab(it1.current()->id(),false);
554 }
555 tdeApp->syncX();
556 m_delayedRaise=-1;
557
558 for (TQMap<KDockWidget*,KDockButton_Private*>::iterator it=m_overlapButtons.begin();
559 it!=m_overlapButtons.end();++it)
560 it.data()->setOn(!isOverlapMode());
561
562 if (!raise.isEmpty())
563 {
564 for (TQMap<KDockWidget*,int>::iterator it=m_map.begin();it!=m_map.end();++it)
565 {
566 if (it.key()->name()==raise)
567 {
568/* tabClicked(it.data());
569 m_tb->setTab(it.data(),true);
570 tabClicked(it.data());
571 m_ws->raiseWidget(it.key());
572 tdeApp->sendPostedEvents();
573 tdeApp->syncX();*/
574
575 m_delayedRaise=it.data();
576 TQTimer::singleShot(0,this,TQ_SLOT(delayedRaise()));
577 kdDebug(760)<<"************** raising *******: "<<it.key()->name()<<endl;
578 break;
579 }
580 }
581
582 }
583 if (m_delayedRaise==-1) TQTimer::singleShot(0,this,TQ_SLOT(init()));
584 cfg->setGroup(grp);
585
586}
587
588void DockContainer::delayedRaise()
589{
590 m_tb->setTab(m_delayedRaise,true);
591 tabClicked(m_delayedRaise);
592}
593
594void DockContainer::collapseOverlapped()
595{
596 if (m_tabSwitching) return;
597 if (isOverlapMode()){
598 TQPtrList<KMultiTabBarTab>* tl=m_tb->tabs();
599 TQPtrListIterator<KMultiTabBarTab> it(*tl);
600 for(;it.current();++it) {
601 if (it.current()->isOn()) {
602 kdDebug(760)<<"Lowering TAB"<<endl;
603 it.current()->setState(false);
604 tabClicked(it.current()->id());
605 }
606 }
607 }
608}
609
610void DockContainer::toggle() {
611 kdDebug(760)<<"DockContainer:activate"<<endl;
612 if (m_tb->isTabRaised(oldtab)) {
613 m_tb->setTab(oldtab,false);
614 tabClicked(oldtab);
615 // KMDI::MainWindow *mainFrm = dynamic_cast<KMDI::MainWindow*>(m_mainWin);
616 // if (mainFrm && mainFrm->activeWindow() ) // TODO
617 // mainFrm->activeWindow()->setFocus();
618
619 } else {
620 kdDebug(760)<<"DockContainer::toggle(): raising tab"<<endl;
621 if (m_tb->tab(m_previousTab)==0) {
622 if (m_tb->tabs()->count()==0) return;
623 m_previousTab=m_tb->tabs()->getFirst()->id();
624 }
625 m_tb->setTab(m_previousTab,true);
626 tabClicked(m_previousTab);
627 }
628}
629
630void DockContainer::prevToolView() {
631 TQPtrList<KMultiTabBarTab>* tabs=m_tb->tabs();
632 int pos=tabs->findRef(m_tb->tab(oldtab));
633 if (pos==-1) return;
634 pos--;
635 if (pos<0) pos=tabs->count()-1;
636 KMultiTabBarTab *tab=tabs->at(pos);
637 if (!tab) return; //can never happen here, but who knows
638 m_tb->setTab(tab->id(),true);
639 tabClicked(tab->id());
640}
641
642void DockContainer::nextToolView() {
643 TQPtrList<KMultiTabBarTab>* tabs=m_tb->tabs();
644 int pos=tabs->findRef(m_tb->tab(oldtab));
645 if (pos==-1) return;
646 pos++;
647 if (pos>=(int)tabs->count()) pos=0;
648 KMultiTabBarTab *tab=tabs->at(pos);
649 if (!tab) return; //can never happen here, but who knows
650 m_tb->setTab(tab->id(),true);
651 tabClicked(tab->id());
652}
653
654}
KMDI
A namespace for the KMDI library.
Definition dockcontainer.cpp:52

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.