00001
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