00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "KoViewChild.h"
00021
00022 #include <QRect>
00023
00024 #include <KoView.h>
00025 #include <KoFrame.h>
00026 #include <KoDocumentChild.h>
00027 #include <KoDocument.h>
00028
00029 class KoViewChild::KoViewChildPrivate
00030 {
00031 public:
00032 KoViewChildPrivate()
00033 {
00034 }
00035 ~KoViewChildPrivate()
00036 {
00037 }
00038 };
00039
00040 KoViewChild::KoViewChild( KoDocumentChild *child, KoView *_parentView )
00041 {
00042 d = new KoViewChildPrivate;
00043 m_parentView = _parentView;
00044 m_child = child;
00045
00046 m_frame = new KoFrame( parentView()->canvas() );
00047 KoView *view = child->document()->createView( m_frame );
00048 view->setXMLGUIBuildDocument( child->document()->viewBuildDocument( view ) );
00049
00050 view->setPartManager( parentView()->partManager() );
00051
00052
00053 view->setZoom( parentView()->zoom() * qMax(child->xScaling(), child->yScaling()) );
00054
00055 m_frame->setView( view );
00056 m_frame->show();
00057 m_frame->raise();
00058
00059 parentView()->canvasAddChild( this );
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 connect( view, SIGNAL( activated( bool ) ),
00087 parentView(), SLOT( slotChildActivated( bool ) ) );
00088 }
00089
00090 KoViewChild::~KoViewChild()
00091 {
00092 if ( m_frame )
00093 {
00094 slotFrameGeometryChanged();
00095 delete static_cast<KoFrame *>( m_frame );
00096 }
00097 delete d;
00098 }
00099
00100 void KoViewChild::slotFrameGeometryChanged()
00101 {
00102
00103 QRect geom = m_frame->geometry();
00104 int b = m_frame->border();
00105 QRect borderRect( geom.x() + b + parentView()->canvasXOffset(),
00106 geom.y() + b + parentView()->canvasYOffset(),
00107 geom.width() - b * 2,
00108 geom.height() - b * 2 );
00109 setGeometry( borderRect );
00110
00111 if(m_child)
00112 {
00113
00114 QRect borderLessRect( geom.x() + m_frame->leftBorder() + parentView()->canvasXOffset(),
00115 geom.y() + m_frame->topBorder() + parentView()->canvasYOffset(),
00116 geom.width() - m_frame->leftBorder() - m_frame->rightBorder(),
00117 geom.height() - m_frame->topBorder() - m_frame->bottomBorder() );
00118
00119
00120 lock();
00121 QRect childGeom = parentView()->reverseViewTransformations( borderLessRect );
00122 kDebug() << "KoChild::slotFrameGeometryChanged child geometry "
00123 << ( geometry() == childGeom ? "already " : "set to " )
00124 << childGeom << endl;
00125 m_child->setGeometry( childGeom );
00126 unlock();
00127 }
00128 }
00129
00130 void KoViewChild::slotDocGeometryChanged()
00131 {
00132 if ( locked() )
00133 return;
00134
00135
00136 QRect geom = parentView()->applyViewTransformations( m_child->geometry() );
00137 QRect borderRect( geom.x() - m_frame->leftBorder() - parentView()->canvasXOffset(),
00138 geom.y() - m_frame->topBorder() - parentView()->canvasYOffset(),
00139 geom.width() + m_frame->leftBorder() + m_frame->rightBorder(),
00140 geom.height() + m_frame->topBorder() + m_frame->bottomBorder() );
00141 kDebug() << "KoViewChild::slotDocGeometryChanged frame geometry "
00142 << ( m_frame->geometry() == borderRect ? "already " : "set to " )
00143 << borderRect << endl;
00144
00145 m_frame->setGeometry( borderRect );
00146 }
00147
00148 void KoViewChild::setInitialFrameGeometry()
00149 {
00150 kDebug() << k_funcinfo << endl;
00151
00152
00153 connect( m_frame, SIGNAL( geometryChanged() ),
00154 this, SLOT( slotFrameGeometryChanged() ) );
00155 connect( m_child, SIGNAL( changed( KoChild * ) ),
00156 this, SLOT( slotDocGeometryChanged() ) );
00157
00158
00159 slotDocGeometryChanged();
00160
00161 slotFrameGeometryChanged();
00162 }
00163
00164 #include "KoViewChild.moc"