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

tdemdi/tdemdi

tabwidget.cpp

00001 /* This file is part of the KDE libraries
00002    Copyright (C) 2004 Christoph Cullmann <cullmann@kde.org>
00003    Copyright (C) 2002,2003 Joseph Wenninger <jowenn@kde.org>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018    Boston, MA 02110-1301, USA.
00019 
00020    Based on:
00021 
00022    //----------------------------------------------------------------------------
00023    //    Project              : KDE MDI extension
00024    //
00025    //    begin                : 07/1999       by Szymon Stefanek as part of kvirc
00026    //                                         (an IRC application)
00027    //    changes              : 09/1999       by Falk Brettschneider to create an
00028    //                           - 06/2000     stand-alone Qt extension set of
00029    //                                         classes and a Qt-based library
00030    //                         : 02/2000       by Massimo Morin (mmorin@schedsys.com)
00031    //                           2000-2003     maintained by the KDevelop project
00032    //    patches              : -/2000        by Lars Beikirch (Lars.Beikirch@gmx.net)
00033    //                         : 01/2003       by Jens Zurheide (jens.zurheide@gmx.de)
00034    //
00035    //    copyright            : (C) 1999-2003 by Falk Brettschneider
00036    //                                         and
00037    //                                         Szymon Stefanek (stefanek@tin.it)
00038    //    email                :  falkbr@kdevelop.org (Falk Brettschneider)
00039    //----------------------------------------------------------------------------
00040 */
00041 
00042 #include <ktabbar.h>
00043 #include <tdepopupmenu.h>
00044 #include <kdebug.h>
00045 
00046 #include <tqobjectlist.h>
00047 
00048 #include "tabwidget.h"
00049 #include "tabwidget.moc"
00050 
00051 namespace KMDIPrivate
00052 {
00053   class TabWidgetPrivate
00054   {
00055 
00056   };
00057 }
00058 
00059 namespace KMDI
00060 {
00061 
00062 TabWidget::TabWidget(TQWidget* parent, const char* name)
00063  : KTabWidget(parent,name)
00064  , m_visibility (KMDI::ShowWhenMoreThanOneTab)
00065  , d (new KMDIPrivate::TabWidgetPrivate())
00066 {
00067   installEventFilter (this);
00068 
00069   tabBar()->hide();
00070 
00071   setHoverCloseButton(true);
00072 
00073   connect(this, TQT_SIGNAL(closeRequest(TQWidget*)), this, TQT_SLOT(closeTab(TQWidget*)));
00074 }
00075 
00076 TabWidget::~TabWidget()
00077 {
00078   delete d;
00079   d = 0;
00080 }
00081 
00082 bool TabWidget::eventFilter(TQObject *obj, TQEvent *e )
00083 {
00084   if(e->type() == TQEvent::FocusIn)
00085   {
00086     emit focusInEvent ();
00087   }
00088   else if (e->type() == TQEvent::ChildRemoved)
00089   {
00090     // if we lost a child we uninstall ourself as event filter for the lost
00091     // child and its children
00092     TQObject* pLostChild = TQT_TQOBJECT(((TQChildEvent*)e)->child());
00093     if ((pLostChild != 0L) && (pLostChild->isWidgetType())) {
00094        TQObjectList *list = pLostChild->queryList( TQWIDGET_OBJECT_NAME_STRING );
00095        list->insert(0, pLostChild);        // add the lost child to the list too, just to save code
00096        TQObjectListIt it( *list );          // iterate over all lost child widgets
00097        TQObject * o;
00098        while ( (o=it.current()) != 0 ) { // for each found object...
00099           TQWidget* widg = (TQWidget*)o;
00100           ++it;
00101           widg->removeEventFilter(this);
00102        }
00103        delete list;                        // delete the list, not the objects
00104     }
00105   }
00106   else if (e->type() == TQEvent::ChildInserted)
00107   {
00108     // if we got a new child and we are attached to the MDI system we
00109     // install ourself as event filter for the new child and its children
00110     // (as we did when we were added to the MDI system).
00111     TQObject* pNewChild = TQT_TQOBJECT(((TQChildEvent*)e)->child());
00112     if ((pNewChild != 0L) && (pNewChild->isWidgetType()))
00113     {
00114        TQWidget* pNewWidget = (TQWidget*)pNewChild;
00115        if (pNewWidget->testWFlags((WFlags)(WType_Dialog | WShowModal)))
00116            return false;
00117        TQObjectList *list = pNewWidget->queryList( TQWIDGET_OBJECT_NAME_STRING );
00118        list->insert(0, pNewChild);         // add the new child to the list too, just to save code
00119        TQObjectListIt it( *list );          // iterate over all new child widgets
00120        TQObject * o;
00121        while ( (o=it.current()) != 0 ) { // for each found object...
00122           TQWidget* widg = (TQWidget*)o;
00123           ++it;
00124           widg->installEventFilter(this);
00125           connect(widg, TQT_SIGNAL(destroyed()), this, TQT_SLOT(childDestroyed()));
00126        }
00127        delete list;                        // delete the list, not the objects
00128     }
00129   }
00130 
00131   return KTabWidget::eventFilter (obj, e);
00132 }
00133 
00134 void TabWidget::childDestroyed()
00135 {
00136   // if we lost a child we uninstall ourself as event filter for the lost
00137   // child and its children
00138   const TQObject* pLostChild = TQT_TQOBJECT_CONST(sender());
00139   if ((pLostChild != 0L) && (pLostChild->isWidgetType()))
00140   {
00141      TQObjectList *list = ((TQObject*)(pLostChild))->queryList(TQWIDGET_OBJECT_NAME_STRING);
00142      list->insert(0, pLostChild);        // add the lost child to the list too, just to save code
00143      TQObjectListIt it( *list );          // iterate over all lost child widgets
00144      TQObject * obj;
00145      while ( (obj=it.current()) != 0 ) { // for each found object...
00146        TQWidget* widg = (TQWidget*)obj;
00147        ++it;
00148        widg->removeEventFilter(this);
00149      }
00150      delete list;                        // delete the list, not the objects
00151   }
00152 }
00153 
00154 void TabWidget::closeTab(TQWidget* w)
00155 {
00156   w->close();
00157 }
00158 
00159 void TabWidget::addTab ( TQWidget * child, const TQString & label )
00160 {
00161   KTabWidget::addTab(child,label);
00162   showPage(child);
00163   maybeShow();
00164 }
00165 
00166 void TabWidget::addTab ( TQWidget * child, const TQIconSet & iconset, const TQString & label )
00167 {
00168   KTabWidget::addTab(child,iconset,label);
00169   showPage(child);
00170   maybeShow();
00171 }
00172 
00173 void TabWidget::addTab ( TQWidget * child, TQTab * tab )
00174 {
00175   KTabWidget::addTab(child,tab);
00176   showPage(child);
00177   maybeShow();
00178 }
00179 
00180 void TabWidget::insertTab ( TQWidget * child, const TQString & label, int index)
00181 {
00182   KTabWidget::insertTab(child,label,index);
00183   showPage(child);
00184   maybeShow();
00185   tabBar()->repaint();
00186 }
00187 
00188 void TabWidget::insertTab ( TQWidget * child, const TQIconSet & iconset, const TQString & label, int index )
00189 {
00190   KTabWidget::insertTab(child,iconset,label,index);
00191   showPage(child);
00192   maybeShow();
00193   tabBar()->repaint();
00194 }
00195 
00196 void TabWidget::insertTab ( TQWidget * child, TQTab * tab, int index)
00197 {
00198   KTabWidget::insertTab(child,tab,index);
00199   showPage(child);
00200   maybeShow();
00201   tabBar()->repaint();
00202 }
00203 
00204 void TabWidget::removePage ( TQWidget * w )
00205 {
00206   KTabWidget::removePage(w);
00207   maybeShow();
00208 }
00209 
00210 void TabWidget::updateIconInView( TQWidget *w, TQPixmap icon )
00211 {
00212   changeTab(w,icon,tabLabel(w));
00213 }
00214 
00215 void TabWidget::updateCaptionInView( TQWidget *w, const TQString &caption )
00216 {
00217   changeTab(w, caption);
00218 }
00219 
00220 void TabWidget::maybeShow()
00221 {
00222   switch (m_visibility)
00223   {
00224     case KMDI::AlwaysShowTabs:
00225       tabBar()->show();
00226 
00227       // show/hide corner widgets
00228       if (count() == 0)
00229         setCornerWidgetVisibility(false);
00230       else
00231         setCornerWidgetVisibility(true);
00232 
00233       break;
00234 
00235     case KMDI::ShowWhenMoreThanOneTab:
00236       if (count()<2) tabBar()->hide();
00237       else tabBar()->show();
00238 
00239       // show/hide corner widgets
00240       if (count() < 2)
00241         setCornerWidgetVisibility(false);
00242       else
00243         setCornerWidgetVisibility(true);
00244 
00245       break;
00246 
00247     case KMDI::NeverShowTabs:
00248       tabBar()->hide();
00249       break;
00250   }
00251 }
00252 
00253 void TabWidget::setCornerWidgetVisibility(bool visible) {
00254   // there are two corner widgets: on TopLeft and on TopTight!
00255 
00256   if (cornerWidget(TQt::TopLeft) ) {
00257     if (visible)
00258       cornerWidget(TQt::TopLeft)->show();
00259     else
00260       cornerWidget(TQt::TopLeft)->hide();
00261   }
00262 
00263   if (cornerWidget(TQt::TopRight) ) {
00264     if (visible)
00265       cornerWidget(TQt::TopRight)->show();
00266     else
00267       cornerWidget(TQt::TopRight)->hide();
00268   }
00269 }
00270 
00271 void TabWidget::setTabWidgetVisibility( KMDI::TabWidgetVisibility visibility )
00272 {
00273   m_visibility = visibility;
00274   maybeShow();
00275 }
00276 
00277 KMDI::TabWidgetVisibility TabWidget::tabWidgetVisibility( ) const
00278 {
00279   return m_visibility;
00280 }
00281 
00282 }
00283 
00284 // kate: space-indent on; indent-width 2; replace-tabs on;

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.7.1
This website is maintained by Timothy Pearson.