kmdi Library API Documentation

kmditoolviewaccessor.cpp

00001 //----------------------------------------------------------------------------
00002 //    filename             : kmditoolviewaccessor.h
00003 //----------------------------------------------------------------------------
00004 //    Project              : KDE MDI extension
00005 //
00006 //    begin                : 08/2003       by Joseph Wenninger (jowenn@kde.org)
00007 //    changes              : ---
00008 //    patches              : ---
00009 //
00010 //    copyright            : (C) 2003 by Joseph Wenninger (jowenn@kde.org)
00011 //----------------------------------------------------------------------------
00012 //
00013 //----------------------------------------------------------------------------
00014 //
00015 //    This program is free software; you can redistribute it and/or modify
00016 //    it under the terms of the GNU Library General Public License as
00017 //    published by the Free Software Foundation; either version 2 of the
00018 //    License, or (at your option) any later version.
00019 //
00020 //----------------------------------------------------------------------------
00021 
00022 #ifndef NO_KDE
00023 # include <kdebug.h>
00024 #endif
00025 #include "kmditoolviewaccessor_p.h"
00026 #include "kmdiguiclient.h"
00027 #include "kmdimainfrm.h"
00028 
00029 #include "kmditoolviewaccessor.h"
00030 #include "kmditoolviewaccessor_p.h"
00031 
00032 KMdiToolViewAccessor::KMdiToolViewAccessor( KMdiMainFrm *parent, QWidget *widgetToWrap, const QString& tabToolTip, const QString& tabCaption)
00033 : QObject(parent) 
00034 {
00035     mdiMainFrm=parent;
00036     d=new KMdiToolViewAccessorPrivate();
00037     if (widgetToWrap->inherits("KDockWidget")) {
00038         d->widgetContainer=dynamic_cast<KDockWidget*>(widgetToWrap);
00039         d->widget=d->widgetContainer->getWidget();
00040     } else {
00041         d->widget=widgetToWrap;
00042         QString finalTabCaption;
00043         if (tabCaption == 0) {
00044             finalTabCaption = widgetToWrap->caption();
00045             if (finalTabCaption.isEmpty() && !widgetToWrap->icon()) {
00046                 finalTabCaption = widgetToWrap->name();
00047             }
00048         }
00049         else {
00050             finalTabCaption = tabCaption;
00051         }
00052         d->widgetContainer= parent->createDockWidget( widgetToWrap->name(),
00053                                               (widgetToWrap->icon()?(*(widgetToWrap->icon())):QPixmap()),
00054                                               0L,  // parent
00055                                               widgetToWrap->caption(),
00056                                               finalTabCaption);
00057         d->widgetContainer->setWidget(widgetToWrap);
00058         if (tabToolTip!=0) {
00059             d->widgetContainer->setToolTipString(tabToolTip);
00060         }
00061     }
00062     //mdiMainFrm->m_pToolViews->insert(d->widget,this);
00063     if (mdiMainFrm->m_mdiGUIClient)
00064         mdiMainFrm->m_mdiGUIClient->addToolView(this);
00065     else kdDebug(760)<<"mdiMainFrm->m_mdiGUIClient == 0 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"<<endl;
00066 
00067     d->widget->installEventFilter(this);
00068 }
00069 
00070 KMdiToolViewAccessor::KMdiToolViewAccessor( KMdiMainFrm *parent) {
00071     mdiMainFrm=parent;
00072     d=new KMdiToolViewAccessorPrivate();
00073 }
00074 
00075 KMdiToolViewAccessor::~KMdiToolViewAccessor() {
00076     if (mdiMainFrm->m_pToolViews)
00077         mdiMainFrm->m_pToolViews->remove(d->widget);
00078     delete d;
00079 
00080 }
00081 
00082 QWidget *KMdiToolViewAccessor::wrapperWidget() {
00083     if (!d->widgetContainer) {
00084         d->widgetContainer=mdiMainFrm->createDockWidget( "KMdiToolViewAccessor::null",QPixmap());
00085         connect(d->widgetContainer,SIGNAL(widgetSet(QWidget*)),this,SLOT(setWidgetToWrap(QWidget*)));
00086     }
00087     return d->widgetContainer;
00088 }
00089 
00090 QWidget *KMdiToolViewAccessor::wrappedWidget() {
00091     return d->widget;
00092 }
00093 
00094 
00095 void KMdiToolViewAccessor::setWidgetToWrap(QWidget *widgetToWrap, const QString& tabToolTip, const QString& tabCaption)
00096 {
00097     Q_ASSERT(!(d->widget));
00098     Q_ASSERT(!widgetToWrap->inherits("KDockWidget"));
00099     disconnect(d->widgetContainer,SIGNAL(widgetSet(QWidget*)),this,SLOT(setWidgetToWrap(QWidget*)));
00100     delete d->widget;
00101     d->widget=widgetToWrap;
00102     KDockWidget *tmp=d->widgetContainer;
00103 
00104     QString finalTabCaption;
00105     if (tabCaption == 0) {
00106         finalTabCaption = widgetToWrap->caption();
00107         if (finalTabCaption.isEmpty() && !widgetToWrap->icon()) {
00108             finalTabCaption = widgetToWrap->name();
00109         }
00110     }
00111     else {
00112         finalTabCaption = tabCaption;
00113     }
00114 
00115     if (!tmp) {
00116         tmp = mdiMainFrm->createDockWidget( widgetToWrap->name(),
00117                                     widgetToWrap->icon()?(*(widgetToWrap->icon())):QPixmap(),
00118                                     0L,  // parent
00119                                     widgetToWrap->caption(),
00120                                     finalTabCaption );
00121         d->widgetContainer= tmp;
00122         if (tabToolTip!=0) {
00123             d->widgetContainer->setToolTipString(tabToolTip);
00124         }
00125     } 
00126     else {
00127         tmp->setCaption(widgetToWrap->caption());
00128         tmp->setTabPageLabel(finalTabCaption);
00129         tmp->setPixmap(widgetToWrap->icon()?(*(widgetToWrap->icon())):QPixmap());
00130         tmp->setName(widgetToWrap->name());
00131         if (tabToolTip!=0) {
00132             d->widgetContainer->setToolTipString(tabToolTip);
00133         }
00134     }
00135     tmp->setWidget(widgetToWrap);
00136     mdiMainFrm->m_pToolViews->insert(widgetToWrap,this);
00137     if (mdiMainFrm->m_mdiGUIClient)
00138         mdiMainFrm->m_mdiGUIClient->addToolView(this);
00139     else kdDebug(760)<<"mdiMainFrm->m_mdiGUIClient == 0 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"<<endl;
00140 
00141     d->widget->installEventFilter(this);
00142 }
00143 
00144 
00145 bool KMdiToolViewAccessor::eventFilter(QObject *o, QEvent *e) {
00146     if (e->type()==QEvent::IconChange) {
00147         d->widgetContainer->setPixmap(d->widget->icon()?(*d->widget->icon()):QPixmap());
00148     }
00149     return false;
00150 }
00151 
00152 void KMdiToolViewAccessor::placeAndShow(KDockWidget::DockPosition pos, QWidget* pTargetWnd ,int percent)
00153 {
00154     place(pos,pTargetWnd,percent);
00155     show(); 
00156 }
00157 void KMdiToolViewAccessor::place(KDockWidget::DockPosition pos, QWidget* pTargetWnd ,int percent)
00158 {
00159     Q_ASSERT(d->widgetContainer);
00160     if (!d->widgetContainer) return;
00161     if (pos == KDockWidget::DockNone) {
00162         d->widgetContainer->setEnableDocking(KDockWidget::DockNone);
00163         d->widgetContainer->reparent(mdiMainFrm, Qt::WType_TopLevel | Qt::WType_Dialog, QPoint(0,0), true); //pToolView->isVisible());
00164     }
00165     else {   // add (and dock) the toolview as DockWidget view
00166         
00167         KDockWidget* pCover = d->widgetContainer;
00168         
00169         KDockWidget* pTargetDock = 0L;
00170         if (pTargetWnd->inherits("KDockWidget") || pTargetWnd->inherits("KDockWidget_Compat::KDockWidget")) {
00171             pTargetDock = (KDockWidget*) pTargetWnd;
00172         }
00173 
00174         // Should we dock to ourself?
00175         bool DockToOurself = false;
00176         if (mdiMainFrm->m_pDockbaseAreaOfDocumentViews) {
00177             if (pTargetWnd == mdiMainFrm->m_pDockbaseAreaOfDocumentViews->getWidget()) {
00178                 DockToOurself = true;
00179                 pTargetDock = mdiMainFrm->m_pDockbaseAreaOfDocumentViews;
00180             } 
00181             else if (pTargetWnd == mdiMainFrm->m_pDockbaseAreaOfDocumentViews) {
00182                 DockToOurself = true;
00183                 pTargetDock = mdiMainFrm->m_pDockbaseAreaOfDocumentViews;
00184             }
00185         }
00186         // this is not inheriting QWidget*, its plain impossible that this condition is true
00187         //if (pTargetWnd == this) DockToOurself = true;
00188         if (!DockToOurself) if(pTargetWnd != 0L) {
00189             pTargetDock = mdiMainFrm->dockManager->findWidgetParentDock( pTargetWnd);
00190             if (!pTargetDock) {
00191                 if (pTargetWnd->parentWidget()) {
00192                     pTargetDock = mdiMainFrm->dockManager->findWidgetParentDock( pTargetWnd->parentWidget());
00193                 }
00194             }
00195         }
00196         if (!pTargetDock || pTargetWnd == mdiMainFrm->getMainDockWidget()) {
00197             if (mdiMainFrm->m_managedDockPositionMode && (mdiMainFrm->m_pMdi || mdiMainFrm->m_documentTabWidget)) {
00198                 KDockWidget *dw1=pTargetDock->findNearestDockWidget(pos);
00199                 if (dw1)
00200                     pCover->manualDock(dw1,KDockWidget::DockCenter,percent);
00201                 else
00202                     pCover->manualDock ( pTargetDock, pos, 20 );
00203                 return;
00204             }
00205         }
00206         pCover->manualDock( pTargetDock, pos, percent);
00207 //check      pCover->show();
00208     }
00209 }
00210 
00211 void KMdiToolViewAccessor::hide() {
00212     Q_ASSERT(d->widgetContainer);
00213     if (!d->widgetContainer) return;
00214     d->widgetContainer->undock();
00215 }
00216 
00217 void KMdiToolViewAccessor::show() {
00218     Q_ASSERT(d->widgetContainer);
00219     if (!d->widgetContainer) return;
00220     d->widgetContainer->makeDockVisible();
00221 }
00222 
00223 
00224 #ifndef NO_INCLUDE_MOCFILES
00225 #include "kmditoolviewaccessor.moc"
00226 #endif
KDE Logo
This file is part of the documentation for kmdi Library Version 3.2.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Feb 4 12:36:52 2004 by doxygen 1.2.18 written by Dimitri van Heesch, © 1997-2003