toolviewaccessor.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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,
00057 widgetToWrap->caption(),
00058 finalTabCaption);
00059 d->widgetContainer->setWidget(widgetToWrap);
00060 if (tabToolTip!=0) {
00061 d->widgetContainer->setToolTipString(tabToolTip);
00062 }
00063 }
00064
00065
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,
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 {
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
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
00185
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
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204 pCover->manualDock( pTargetDock, pos, percent);
00205
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
|