Subject: Re: A warning before a major change.
From: Dom Lachowicz (cinamod@hotmail.com)
Date: Tue Feb 13 2001 - 23:31:32 CST
I hate to reply to myself, but my initial assert happens whenever I try to 
load a doc containing headers/footers and is  < 2 pages. Docs >= 2 pages 
don't trigger this first assert.
Dom
>From: "Dom Lachowicz" <cinamod@hotmail.com>
>Reply-To: cinamod@hotmail.com
>To: msevior@mccubbin.ph.unimelb.edu.au, abiword-dev@abisource.com
>Subject: Re: A warning before a major change.
>Date: Wed, 14 Feb 2001 00:25:30 -0500
>
>Martin,
>
>I get a crash when I try to print these documents, but I can insert and 
>edit
>text in the footers just fine, and save (& reload) these documents without
>problems. Screenshots and sample docs available upon request. I get an
>assert on loading:
>
>( 0 > _findShadow(pPage) at fl_SectionLayout.cpp:1689 **** )
>
>When I segv, I get a fault right here:
>
>#4  0x82859aa in FV_View::getPoint (this=0x0) at fv_View.h:108
>#5  0x8111b06 in fl_ShadowListener::populateStrux (this=0x84dba78,
>    sdh=0x85275c8, pcr=0x85210f8, psfh=0xbfffe984) at
>fl_SectionLayout.cpp:2389
>
>Maybe this will help? I can take a look at the code too, tomorrow.
>
>Dom
>
>>From: Martin Sevior <msevior@mccubbin.ph.unimelb.edu.au>
>>To: abiword-dev@abisource.com
>>Subject: A warning before a major change.
>>Date: Wed, 14 Feb 2001 16:12:46 +1100 (EST)
>>
>>HI everyone,
>>	    We have a problem with Abiword with page numbers. Right now
>>page numbers are contained in a section placed at the end of the document.
>>However the size of the document includes the page number sections. This
>>means that it is quite possible to to place the cursor at the end of the
>>text press "right arrow" and enter the page section. The cursor jumps into
>>the fister header/footer and then any text entered will crash Abiword.
>>
>>Now eventually this will be a cool feature (Entering text directly into
>>Abi headers/footers) but it will take some major reworking and in any case
>>you should not enter the header/footer sections unless you mean to.
>>
>>The best way to fix this is to have the code that calculates the size of
>>the document not include the the header/footer sections. I've made the
>>changes needed in fv_View to do this and have written a new method
>>in fv_View called
>>
>>// TODO find clever way to cache the size of the
>>// header/footer region so we can just subtract it off.
>>//
>>bool    FV_View::getEditableBounds(bool isEnd, PT_DocPosition &posEOD)
>>
>>
>>Now this code gets called on every cursor motion in abi so it is important
>>to realize that this code should be fast. Right now it adds a bit of extra
>>overhead to abi but I think I can come up with code to speed this up via
>>caching.  Anyway the full code is:
>>
>>
>>//
>>// This method keeps the insertion point out of the header/footer end of
>>// of the document.
>>// TODO find clever way to cache the size of the
>>// header/footer region so we can just subtract it off.
>>//
>>bool    FV_View::getEditableBounds(bool isEnd, PT_DocPosition &posEOD)
>>{
>>	bool res;
>>	if(!isEnd)
>>	{
>>	       res = m_pDoc->getBounds(isEnd,posEOD);
>>	       return res;
>>	}
>>	else
>>	{
>>	       fl_DocSectionLayout * pSL =  m_pLayout->getFirstSection();
>>	       UT_DEBUGMSG(("SEVIOR: Header = %x, Footer = %x
>>\n",pSL->getHeader(),pSL->getFooter()));
>>	       while(pSL != NULL && pSL->getHeader()== NULL  &&
>>pSL->getFooter()== NULL )
>>	       {
>>		      UT_DEBUGMSG(("SEVIOR: Header = %x, Footer = %x
>>\n",pSL->getHeader(),pSL->getFooter()));
>>
>>		      pSL  = pSL->getNextDocSection();
>>	       }
>>	       fl_BlockLayout * pBL;
>>	       if( pSL == NULL || ( pSL->getHeader()== NULL  &&
>>pSL->getFooter()== NULL ))
>>	       {
>>		      UT_DEBUGMSG(("SEVIOR: NO Header/Footer in doc!
>>\n"));
>>	              res = m_pDoc->getBounds(isEnd,posEOD);
>>		      return res;
>>	       }
>>	       if(pSL->getHeader() != NULL)
>>	       {
>>	              pBL = pSL->getHeader()->getFirstBlock();
>>	       }
>>	       else
>>	       {
>>	              pBL = pSL->getFooter()->getFirstBlock();
>>	       }
>>	       UT_DEBUGMSG(("SEVIOR: Header/Footer Exists \n"));
>>	       UT_DEBUGMSG(("SEVIOR: Block Section Type
>>\n",pBL->getSectionLayout()->getType()));
>>	       posEOD = pBL->getPosition( true);
>>	       pBL = _findBlockAtPosition(posEOD);
>>	       while(pBL->getSectionLayout()->getType() == FL_SECTION_HDRFTR)
>>	       {
>>		      posEOD--;
>>		      pBL = _findBlockAtPosition(posEOD);
>>	       UT_DEBUGMSG(("SEVIOR: Block Section Type
>>\n",pBL->getSectionLayout()->getType()));
>>	       }
>>	       posEOD--;
>>	       return res;
>>	}
>>}
>>
>>Cheers
>>
>>Martin
>>
>>
>>
>
>_________________________________________________________________
>Get your FREE download of MSN Explorer at http://explorer.msn.com
>
>
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com
This archive was generated by hypermail 2b25 : Tue Feb 13 2001 - 23:31:38 CST