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

List:       koffice
Subject:    Re: Can't remove parts?
From:       Thomas Zander <zander () planescape ! com>
Date:       2002-06-16 18:18:00
[Download RAW message or body]

[Attachment #2 (multipart/mixed)]


On Sun, Jun 16, 2002 at 06:54:59PM +0200, Nash Hoogwater wrote:
> On Sunday 16 June 2002 18:44, Thomas Zander wrote:
> > On Sun, Jun 16, 2002 at 03:27:47PM +0200, Nash Hoogwater wrote:
> > > Hi,
> > >
> > > When I insert a part (a chart for example), I'm not able to remove it
> > > from the KWord document. Although I can remove the frame, when I click
> > > next in the position of the (removed) part, the edit screen for the chart
> > > appears?? Am I missing the obvious?
...

> > Funnier (*ahem*) is that the place where the frame is found even if it is
> > invisible is still a mystery to me.
> >
> > /me still looking into this.
> 
> OK, I hope you can find the answer :-)

I found the 'answer'. I think.
In KoDocument a QPtrList<KoDocumentChild> is stored.  Apparently this
is used at least for saving, and probably somewhere for selecting as well.
In the saved XML the part is also created, and loaded later as well :}

I thought the selection went completely via framesets and frames, so my 
first thought was that isVisible() or isDeleted were ignored somewhere. I 
made a patch where I believe these were all incorrect. Please check if I 
did not break anything.

But I can't find why the part is selected.

The framesInPage code does not return it, I checked all usage of the
 m_doc->framesetsIterator() and they now all (well almost all) have the
 if(frameset->isDeleted()) continue; 
call.

Looking at it from the other side; the relavant kwframe and kwframeset methods 
are not called in relation to the selection of the part frame. (things like
isFrameAtPos, outerRect, contains etc)

So I am stuck, maybe its indeed done via the children()..

Plus, I read a whole lot of code, and I think the following methods need 
attention.  If nothing else, a whole lot of these can be merged. But that
is not something you do in a feature freeze :)
KWDocument::numberOfTextFrameSet
KWDocument::textFrameSetFromIndex
KWDocument::textFrameSet

Same for:
KWFrameSet::contains
KWFrameSet::frameAtPos

I also found this comment in the code;
    // Problem: in DTP mode ptLeftBorder() etc. seem to be 0,
    // so the headers and footers are at the edge of the page....
My simple answer to that 'question' is that in DTP mode things like headers
and footers are not suppost to be there in the first place!  If a user wants
those, he has to create them himself.

Could someone with some time on his hands please take a look at these? I'm
at my quota for a little while :)

-- 
Thomas Zander                                           zander@planescape.com
                                                 We are what we pretend to be

["deleted-frames.diff" (text/plain)]

Index: kwcanvas.cc
===================================================================
RCS file: /home/kde/koffice/kword/kwcanvas.cc,v
retrieving revision 1.389
diff -u -3 -p -b -r1.389 kwcanvas.cc
--- kwcanvas.cc	2002/06/15 17:46:11	1.389
+++ kwcanvas.cc	2002/06/16 17:59:59
@@ -254,6 +254,7 @@ void KWCanvas::drawDocument( QPainter *p
     for ( ; fit.current() ; ++fit )
     {
         KWFrameSet * frameset = fit.current();
+        if(! frameset->isVisible()) continue;
         drawFrameSet( frameset, painter, crect, false, true, viewMode );
     }
 
@@ -957,6 +958,7 @@ void KWCanvas::mmEditFrameMove( const QP
     for ( ; framesetIt.current(); ++framesetIt, bFirst=false )
     {
         KWFrameSet *frameset = framesetIt.current();
+        if(! frameset->isVisible()) continue;
         // Can't move main frameset of a WP document
         if ( m_doc->processingType() == KWDocument::WP && bFirst ||
              frameset->type() == FT_TEXT && frameset->frameSetInfo() != \
KWFrameSet::FI_BODY ) @@ -1711,6 +1713,7 @@ bool KWCanvas::selectAllFrames( bool sel
     for ( ; fit.current() ; ++fit )
     {
         KWFrameSet * fs = fit.current();
+        if(! fs->isVisible()) continue;
         QPtrListIterator<KWFrame> frameIt = fs->frameIterator();
         for ( ; frameIt.current(); ++frameIt )
         {
@@ -2107,6 +2110,7 @@ void KWCanvas::slotContentsMoving( int c
     QPtrListIterator<KWFrameSet> fit = m_doc->framesetsIterator();
     for ( ; fit.current() ; ++fit )
     {
+        if(! fit.current()->isVisible()) continue;
         KWTextFrameSet * fs = dynamic_cast<KWTextFrameSet *>(fit.current());
         if ( fs )
         {
Index: kwdoc.cc
===================================================================
RCS file: /home/kde/koffice/kword/kwdoc.cc,v
retrieving revision 1.486
diff -u -3 -p -b -r1.486 kwdoc.cc
--- kwdoc.cc	2002/06/15 15:04:37	1.486
+++ kwdoc.cc	2002/06/16 18:00:03
@@ -455,6 +455,7 @@ KWTextFrameSet * KWDocument::textFrameSe
     QPtrListIterator<KWFrameSet> fit = framesetsIterator();
     for ( ; fit.current() ; ++fit )
     {
+        if(fit.current()->isDeleted()) continue;
         if(fit.current()->type()==FT_TEXT)
         {
             if(i==_num)
@@ -889,6 +890,7 @@ void KWDocument::recalcFrames( int fromP
         // DTP mode: calculate the number of pages from the frames.
         double height=0;
         for (QPtrListIterator<KWFrameSet> fit = framesetsIterator(); fit.current() ; \
++fit ) { +            if(fit.current()->isDeleted()) continue;
             if(fit.current()->frameSetInfo()==KWFrameSet::FI_BODY && \
!fit.current()->isFloating()) {  KWFrameSet * fs = fit.current();
                 for (QPtrListIterator<KWFrame> f = fs->frameIterator(); f.current() \
; ++f ) { @@ -2265,7 +2267,7 @@ QDomDocument KWDocument::saveXML()
         for ( ; fit.current() ; ++fit )
         {
             KWFrameSet * fs = fit.current();
-            if ( fs->type() == FT_PART &&
+            if ( !fs->isDeleted() && fs->type() == FT_PART &&
                  dynamic_cast<KWPartFrameSet*>( fs )->getChild() == curr )
                 fs->save( settingsElem );
         }
@@ -3250,6 +3252,7 @@ void KWDocument::getPageLayout( KoPageLa
 
 void KWDocument::addFrameSet( KWFrameSet *f, bool finalize /*= true*/ )
 {
+    if(m_lstFrameSet.contains(f) > 0) return;
     m_lstFrameSet.append(f);
     if ( finalize )
         f->finalize();
@@ -3344,8 +3347,8 @@ void KWDocument::printDebug()
     {
         KWFrameSet * frameset = fit.current();
         kdDebug() << "Frameset " << iFrameset << ": '" <<
-            frameset->getName() << "' (" << frameset << ")" <<endl;
-        if ( frameset->isVisible() )
+            frameset->getName() << "' (" << frameset << ")" << \
(frameset->isDeleted()?" Deleted":"")<<endl; +        if ( frameset->isVisible())
             frameset->printDebug();
     }
 
@@ -3771,7 +3774,7 @@ KWTextFrameSet* KWDocument::nextTextFram
         KWFrameSet *frm=0L;
         for ( frm=m_lstFrameSet.at(pos); frm != 0; frm=m_lstFrameSet.next() ){
             KWTextFrameSet *newFrm = frm->nextTextObject( obj );
-            if(newFrm && newFrm->textObject()->needSpellCheck())
+            if(newFrm && !newFrm->isDeleted() && \
newFrm->textObject()->needSpellCheck())  {
                 bgFrameSpellChecked = frm;
                 return newFrm;
@@ -3783,7 +3786,7 @@ KWTextFrameSet* KWDocument::nextTextFram
         KWFrameSet *frm=0L;
         for ( frm=m_lstFrameSet.first(); frm != 0; frm=m_lstFrameSet.next() ){
             KWTextFrameSet *newFrm = frm->nextTextObject( obj );
-            if(newFrm && newFrm->textObject()->needSpellCheck())
+            if(newFrm && !newFrm->isDeleted() && \
newFrm->textObject()->needSpellCheck())  {
                 bgFrameSpellChecked = frm;
                 return newFrm;
@@ -3927,6 +3930,7 @@ int KWDocument::numberOfTextFrameSet( KW
     QPtrList<KWTextFrameSet> textFramesets;
     QPtrListIterator<KWFrameSet> fit = framesetsIterator();
     for ( ; fit.current() ; ++fit ) {
+        if(fit.current()->isDeleted()) continue;
         fit.current()->addTextFrameSets(textFramesets);
     }
     return textFramesets.findRef( static_cast<KWTextFrameSet*>(fs) );
@@ -3937,6 +3941,7 @@ KWFrameSet * KWDocument::textFrameSetFro
     QPtrList<KWTextFrameSet> textFramesets;
     QPtrListIterator<KWFrameSet> fit = framesetsIterator();
     for ( ; fit.current() ; ++fit ) {
+        if(fit.current()->isDeleted()) continue;
         fit.current()->addTextFrameSets(textFramesets);
     }
     return textFramesets.at( _num );
@@ -3990,9 +3995,9 @@ void KWDocument::setTabStopValue ( doubl
     m_tabStop = _tabStop;
     QPtrList<KWTextFrameSet> textFramesets;
     QPtrListIterator<KWFrameSet> fit = framesetsIterator();
-    for ( ; fit.current() ; ++fit ) {
+    for ( ; fit.current() ; ++fit )
         fit.current()->addTextFrameSets(textFramesets);
-    }
+
     KWTextFrameSet *frm;
     for ( frm=textFramesets.first(); frm != 0; frm=textFramesets.next() ){
         frm->textDocument()->setTabStops( ptToLayoutUnitPixX( _tabStop ));


[Attachment #6 (application/pgp-signature)]
____________________________________
koffice mailing list
koffice@mail.kde.org
To unsubscribe please visit:
http://mail.kde.org/mailman/listinfo/koffice

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

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