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.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun Oct 10 18:56:03 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003