toolviewaccessor.cpp

00001 /* This file is part of the KDE libraries
00002    Copyright (C) 2003 Joseph Wenninger <jowenn@kde.org>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License as published by the Free Software Foundation; either
00007    version 2 of the License, or (at your option) any later version.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #include <kdebug.h>
00021 
00022 #include "toolviewaccessor_p.h"
00023 #include "guiclient.h"
00024 #include "mainwindow.h"
00025 
00026 #include "toolviewaccessor.h"
00027 #include "toolviewaccessor.moc"
00028 
00029 #include "toolviewaccessor_p.h"
00030 
00031 namespace KMDI
00032 {
00033 
00034 ToolViewAccessor::ToolViewAccessor( KMDI::MainWindow *parent, QWidget *widgetToWrap, const QString& tabToolTip, const QString& tabCaption)
00035 : QObject(parent)
00036 {
00037     mdiMainFrm=parent;
00038     d=new KMDIPrivate::ToolViewAccessorPrivate();
00039     if (widgetToWrap->inherits("KDockWidget")) {
00040         d->widgetContainer=dynamic_cast<KDockWidget*>(widgetToWrap);
00041         d->widget=d->widgetContainer->getWidget();
00042     } else {
00043         d->widget=widgetToWrap;
00044         QString finalTabCaption;
00045         if (tabCaption == 0) {
00046             finalTabCaption = widgetToWrap->caption();
00047             if (finalTabCaption.isEmpty() && !widgetToWrap->icon()) {
00048                 finalTabCaption = widgetToWrap->name();
00049             }
00050         }
00051         else {
00052             finalTabCaption = tabCaption;
00053         }
00054         d->widgetContainer= parent->createDockWidget( widgetToWrap->name(),
00055                                               (widgetToWrap->icon()?(*(widgetToWrap->icon())):QPixmap()),
00056                                               0L,  // parent
00057                                               widgetToWrap->caption(),
00058                                               finalTabCaption);
00059         d->widgetContainer->setWidget(widgetToWrap);
00060         if (tabToolTip!=0) {
00061             d->widgetContainer->setToolTipString(tabToolTip);
00062         }
00063     }
00064 
00065   //mdiMainFrm->m_toolViews.insert(d->widget,this);
00066     mdiMainFrm->m_guiClient->addToolView(this);
00067     d->widget->installEventFilter(this);
00068 }
00069 
00070 ToolViewAccessor::ToolViewAccessor( KMDI::MainWindow *parent) : QObject(parent) {
00071     mdiMainFrm=parent;
00072     d=new KMDIPrivate::ToolViewAccessorPrivate();
00073 }
00074 
00075 ToolViewAccessor::~ToolViewAccessor() {
00076   if (mdiMainFrm->m_toolViews)
00077   mdiMainFrm->m_toolViews->remove(d->widget);
00078     delete d;
00079 
00080 }
00081 
00082 QWidget *ToolViewAccessor::wrapperWidget() {
00083     if (!d->widgetContainer) {
00084         d->widgetContainer=mdiMainFrm->createDockWidget( "ToolViewAccessor::null",QPixmap());
00085         connect(d->widgetContainer,SIGNAL(widgetSet(QWidget*)),this,SLOT(setWidgetToWrap(QWidget*)));
00086     }
00087     return d->widgetContainer;
00088 }
00089 
00090 QWidget *ToolViewAccessor::wrappedWidget() {
00091     return d->widget;
00092 }
00093 
00094 
00095 void ToolViewAccessor::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_toolViews->insert(widgetToWrap,this);
00137     mdiMainFrm->m_guiClient->addToolView(this);
00138 
00139     d->widget->installEventFilter(this);
00140 }
00141 
00142 
00143 bool ToolViewAccessor::eventFilter(QObject *o, QEvent *e) {
00144     if (e->type()==QEvent::IconChange) {
00145         d->widgetContainer->setPixmap(d->widget->icon()?(*d->widget->icon()):QPixmap());
00146     }
00147     return false;
00148 }
00149 
00150 void ToolViewAccessor::placeAndShow(KDockWidget::DockPosition pos, QWidget* pTargetWnd ,int percent)
00151 {
00152     place(pos,pTargetWnd,percent);
00153     show();
00154 }
00155 void ToolViewAccessor::place(KDockWidget::DockPosition pos, QWidget* pTargetWnd ,int percent)
00156 {
00157     Q_ASSERT(d->widgetContainer);
00158     if (!d->widgetContainer) return;
00159     if (pos == KDockWidget::DockNone) {
00160         d->widgetContainer->setEnableDocking(KDockWidget::DockNone);
00161         d->widgetContainer->reparent(mdiMainFrm, Qt::WType_TopLevel | Qt::WType_Dialog, QPoint(0,0), mdiMainFrm->isVisible());
00162     }
00163     else {   // add (and dock) the toolview as DockWidget view
00164 
00165         KDockWidget* pCover = d->widgetContainer;
00166 
00167         KDockWidget* pTargetDock = 0L;
00168         if (pTargetWnd->inherits("KDockWidget") || pTargetWnd->inherits("KDockWidget_Compat::KDockWidget")) {
00169             pTargetDock = (KDockWidget*) pTargetWnd;
00170         }
00171 
00172         // Should we dock to ourself?
00173         bool DockToOurself = false;
00174         if (mdiMainFrm->getMainDockWidget()) {
00175             if (pTargetWnd == mdiMainFrm->getMainDockWidget()->getWidget()) {
00176                 DockToOurself = true;
00177                 pTargetDock = mdiMainFrm->getMainDockWidget();
00178             }
00179             else if (pTargetWnd == mdiMainFrm->getMainDockWidget()) {
00180                 DockToOurself = true;
00181                 pTargetDock = mdiMainFrm->getMainDockWidget();
00182             }
00183         }
00184         // this is not inheriting QWidget*, its plain impossible that this condition is true
00185         //if (pTargetWnd == this) DockToOurself = true;
00186         if (!DockToOurself) if(pTargetWnd != 0L) {
00187             pTargetDock = mdiMainFrm->dockManager->findWidgetParentDock( pTargetWnd);
00188             if (!pTargetDock) {
00189                 if (pTargetWnd->parentWidget()) {
00190                     pTargetDock = mdiMainFrm->dockManager->findWidgetParentDock( pTargetWnd->parentWidget());
00191                 }
00192             }
00193         }
00194       /*  if (!pTargetDock || pTargetWnd == mdiMainFrm->getMainDockWidget()) {
00195             if (mdiMainFrm->m_managedDockPositionMode && (mdiMainFrm->m_pMdi || mdiMainFrm->m_documentTabWidget)) {
00196                 KDockWidget *dw1=pTargetDock->findNearestDockWidget(pos);
00197                 if (dw1)
00198                     pCover->manualDock(dw1,KDockWidget::DockCenter,percent);
00199                 else
00200                     pCover->manualDock ( pTargetDock, pos, 20 );
00201                 return;
00202             }
00203     }*/ //TODO
00204         pCover->manualDock( pTargetDock, pos, percent);
00205 //check      pCover->show();
00206     }
00207 }
00208 
00209 void ToolViewAccessor::hide() {
00210     Q_ASSERT(d->widgetContainer);
00211     if (!d->widgetContainer) return;
00212     d->widgetContainer->undock();
00213 }
00214 
00215 void ToolViewAccessor::show() {
00216     Q_ASSERT(d->widgetContainer);
00217     if (!d->widgetContainer) return;
00218     d->widgetContainer->makeDockVisible();
00219 }
00220 
00221 }
00222 
00223 // kate: space-indent on; indent-width 2; replace-tabs on;
KDE Home | KDE Accessibility Home | Description of Access Keys