[prev in list] [next in list] [prev in thread] [next in thread] 

List:       koffice
Subject:    kword: fix of parts handling in scrolled view
From:       Vojtech Bubnik <bubnikv () suse ! cz>
Date:       2000-08-23 17:03:58
[Download RAW message or body]

Hi, 

well, this is my first 2c.

I fixed handling of parts embedded into KWord document. 

There were two problems:

1) part was put directly into KWordPaper (inherited from QScrollView).
   Should be put into KWordPaper.viewport()

2) Because of 1), there is inconsistency between real coordinates of 
   frames and so on, against widget coordinates. Therefore KoView needs
   to know his offset in the parent scrolled widget.

3) One typo in KoDocument.

I moved a bit of code between classes in case 2). I did it because of the 
changes of KoViewChild interface change. Feel free to move it back :-)

Who is responsible for koffice parts? Could You give a comment on this patch?
Could someone apply this patch? Feel free to modify it, although I hope it is 
correct.

And finally: I am payed by SuSE for working on koffice 20 hours per week.
Expect therefore more patches after I will learn more about structure of 
koffice / kword :-)

-- 

Regards, 

Vojtech Bubnik
developer
---------------------------------------------------------------------
SuSE CR, s.r.o.                               e-mail: bubnikv@suse.cz
Pod Pekarnami 338/12                          tel:+420 2 6603 2619
190 00 Praha 9 - Vysocany                     fax:+420 2 6603 2620
Czech Republic                                http://www.suse.cz


["parts.dif" (text/plain)]

diff -urb koffice/lib/kofficecore/koDocument.cc koffice-orig/lib/kofficecore/koDocument.cc
--- koffice/lib/kofficecore/koDocument.cc	Tue Aug 15 17:33:34 2000
+++ koffice-orig/lib/kofficecore/koDocument.cc	Wed Aug 23 18:31:04 2000
@@ -362,8 +362,8 @@
     if ( (QWidget *)it.current() == widget )
     {
       QPoint canvasPos( it.current()->canvas()->mapFromGlobal( globalPos ) );
-      canvasPos.rx() -= it.current()->canvasXOffset();
-      canvasPos.ry() -= it.current()->canvasYOffset();
+      canvasPos.rx() += it.current()->canvasXOffset();
+      canvasPos.ry() += it.current()->canvasYOffset();
 
       KParts::Part *part = it.current()->hitTest( canvasPos );
       if ( part )
diff -urb koffice/lib/kofficecore/koView.cc koffice-orig/lib/kofficecore/koView.cc
--- koffice/lib/kofficecore/koView.cc	Sat Jul 29 09:47:41 2000
+++ koffice-orig/lib/kofficecore/koView.cc	Thu Aug 17 15:41:12 2000
@@ -239,35 +239,9 @@
     {
       if ( child->isRectangle() && !child->isTransparent() )
       {
-        KoFrame *frame = new KoFrame( canvas() );
-        KoView *view = child->document()->createView( frame );
-        view->setXMLGUIBuildDocument( child->document()->viewBuildDocument( view ) );
-
-        view->setPartManager( partManager() );
-
-        // hack? (Werner)
-        view->setZoom( zoom() * QMAX(child->xScaling(), child->yScaling()) );
-
-        QRect geom = child->geometry();
-        frame->setGeometry( geom.x() * zoom(), geom.y() * zoom(),
-                            geom.width() * zoom(), geom.height() * zoom() );
-        frame->setView( view );
-        frame->show();
-        frame->raise();
-        KoViewChild *viewChild = new KoViewChild( child, frame );
-        /*
-        geom = frame->geometry();
-        viewChild->setGeometry( geom );*/
-        /*
-        viewChild->setGeometry( QRect( geom.x() - view->leftBorder(),
-                                       geom.y() - view->topBorder(),
-                                       geom.width() + view->rightBorder(),
-                                       geom.height() + view->bottomBorder() ) );
-        */
+        KoViewChild *viewChild = new KoViewChild( child, this );
         d->m_children.append( viewChild );
-        connect( view, SIGNAL( activated( bool ) ), this, SLOT( slotChildActivated( bool ) ) );
-
-        d->m_manager->setActivePart( child->document(), view );
+        d->m_manager->setActivePart( child->document(), viewChild->frame()->view() );
       }
       else
       {
@@ -460,17 +434,47 @@
   bool m_bLock;
 };
 
-KoViewChild::KoViewChild( KoDocumentChild *child, KoFrame *frame )
+KoViewChild::KoViewChild( KoDocumentChild *child, KoView *_parentView )
 {
   d = new KoViewChildPrivate;
   d->m_bLock = false;
+  m_parentView = _parentView;
   m_child = child;
-  m_frame = frame;
+  
+  m_frame = new KoFrame( parentView()->canvas() );
+  KoView *view = child->document()->createView( m_frame );
+  view->setXMLGUIBuildDocument( child->document()->viewBuildDocument( view ) );
+
+  view->setPartManager( parentView()->partManager() );
+
+  // hack? (Werner)
+  view->setZoom( parentView()->zoom() * QMAX(child->xScaling(), child->yScaling()) );
+
+  QRect geom = child->geometry();
+  m_frame->setGeometry( geom.x() * parentView()->zoom() - parentView()->canvasXOffset(), 
+                        geom.y() * parentView()->zoom() - parentView()->canvasYOffset(),
+                        geom.width() * parentView()->zoom(), 
+			geom.height() * parentView()->zoom() );
+  m_frame->setView( view );
+  m_frame->show();
+  m_frame->raise();
+  /*
+    geom = frame->geometry();
+    viewChild->setGeometry( geom );*/
+  /*
+    viewChild->setGeometry( QRect( geom.x() - view->leftBorder(),
+                                   geom.y() - view->topBorder(),
+                                   geom.width() + view->rightBorder(),
+                                   geom.height() + view->bottomBorder() ) );
+   */
+
   slotFrameGeometryChanged();
   connect( m_frame, SIGNAL( geometryChanged() ),
            this, SLOT( slotFrameGeometryChanged() ) );
   connect( m_child, SIGNAL( changed( KoChild * ) ),
            this, SLOT( slotDocGeometryChanged() ) );
+  connect( view, SIGNAL( activated( bool ) ), 
+  	   parentView(), SLOT( slotChildActivated( bool ) ) );
 }
 
 KoViewChild::~KoViewChild()
@@ -487,12 +491,12 @@
 {
   QRect geom = m_frame->geometry();
   int b = m_frame->border();
-  QRect borderRect( geom.x() + b,
-                    geom.y() + b,
+  QRect borderRect( geom.x() + b + parentView()->canvasXOffset(),
+                    geom.y() + b + parentView()->canvasYOffset(),
                     geom.width() - b * 2,
                     geom.height() - b * 2 );
-  QRect borderLessRect( geom.x() + m_frame->leftBorder(),
-                        geom.y() + m_frame->topBorder(),
+  QRect borderLessRect( geom.x() + m_frame->leftBorder() + parentView()->canvasXOffset(),
+                        geom.y() + m_frame->topBorder() + parentView()->canvasYOffset(),
                         geom.width() - m_frame->leftBorder() - m_frame->rightBorder(),
                         geom.height() - m_frame->topBorder() - m_frame->bottomBorder() );
   setGeometry( borderRect );
@@ -503,8 +507,8 @@
 void KoViewChild::slotDocGeometryChanged()
 {
   QRect geom = m_child->geometry();
-  QRect borderRect( geom.x() - m_frame->leftBorder(),
-                    geom.y() - m_frame->topBorder(),
+  QRect borderRect( geom.x() - m_frame->leftBorder() - parentView()->canvasXOffset(),
+                    geom.y() - m_frame->topBorder() - parentView()->canvasYOffset(),
                     geom.width() + m_frame->leftBorder() + m_frame->rightBorder(),
                     geom.height() + m_frame->topBorder() + m_frame->bottomBorder() );
   m_frame->setGeometry( borderRect );
diff -urb koffice/lib/kofficecore/koView.h koffice-orig/lib/kofficecore/koView.h
--- koffice/lib/kofficecore/koView.h	Sat Jul 29 09:47:41 2000
+++ koffice-orig/lib/kofficecore/koView.h	Thu Aug 17 15:36:52 2000
@@ -286,10 +286,11 @@
 {
   Q_OBJECT
 public:
-  KoViewChild( KoDocumentChild *child, KoFrame *frame );
+  KoViewChild( KoDocumentChild *child, KoView *_parentView );
   virtual ~KoViewChild();
 
   KoDocumentChild *documentChild() const { return m_child; }
+  KoView *parentView() const { return m_parentView; }
   KoFrame *frame() const { return m_frame; }
 
 private slots:
@@ -298,6 +299,7 @@
 private:
   QGuardedPtr<KoDocumentChild> m_child;
   QGuardedPtr<KoFrame> m_frame;
+  QGuardedPtr<KoView> m_parentView;
   class KoViewChildPrivate;
   KoViewChildPrivate *d;
 };
diff -urb koffice/kword/kword_view.cc koffice-orig/kword/kword_view.cc
--- koffice/kword/kword_view.cc	Tue Aug 15 13:45:38 2000
+++ koffice-orig/kword/kword_view.cc	Thu Aug 17 15:40:29 2000
@@ -2804,7 +2804,7 @@
 /*================================================================*/
 QWidget* KWordView::canvas()
 {
-    return gui->getPaperWidget();
+    return gui->getPaperWidget()->viewport();
 }
 
 /*================================================================*/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic