Re: Vincent_ GSOC2012: Dialog improvements_ part 2: Frame

From: vincent vincent <vincent.abiword_at_gmail.com>
Date: Sat Mar 24 2012 - 09:04:43 CET

Hi,
I am Vincent. Thanks for your reply. I have looked into the code about
setting the Frame expandable.
Following is my opinions about this idea, Correct me if I have
something wrong, thanks

Presently, users can set the height and the width of a frame by
dragging and releasing the frame to a suitable dimension. Currently,
If users enters an extra line of text in an already full text frame,
the Frame will hide the text until the user changes the size of the
box. And in this idea, We would like to change the frame dimensions
automatically if the user enters an extra line of text. we call
'frame-expand-height' in Abiword.

In fact, abiword already has this feature but does not allow users to
define it or change it from within the abiword User Interface.

So my suggestions are:
1. expose 'frame-expand-height' to users when users use 'Frame' in
abiword, since I think 'frame-expand-height' is more friendly to
users.
2. in UI (Dialog : Format text box), users can turn it on or off
    on : enable frame-expand-height
        off: disable frame-expand-height
        
in code level:
in function: void FV_FrameEdit::mouseRelease(UT_sint32 x, UT_sint32 y)
we need return a valid value for "frame-expand-height",m_sExpandHeight.c_str(),

Steps to do this:
Firstly, all properities are defined in the array AbiPropertyName.
static const char * AbiPropertyName[PP_PropertyMap::abi__count] = {
        "frame-col-xpos",
        "frame-col-ypos",
        "frame-expand-height",
        "frame-height",
        "frame-horiz-align",
        "frame-min-height",
        "frame-page-xpos",
        "frame-page-ypos",
        "frame-pref-column",
        "frame-pref-page",
        "frame-rel-width",
        "frame-type",
        "frame-width",
}

and then in static PP_Property _props[], we init them to:
 * Property Nme: Initial Value: Can Inherit: Pointer to class : tPropLevel
 * tPropLevel should be set by or-ing the values defined in PP_Property.h
{"frame-expand-height", "0.0in", false, NULL, PP_LEVEL_FRAME},
{"frame-height", "0.0in", false, NULL, PP_LEVEL_FRAME},
{"frame-horiz-align", "left", false, NULL, PP_LEVEL_FRAME},
{"frame-min-height", "0.0in", false, NULL, PP_LEVEL_FRAME},
{"frame-page-xpos", "0.0in", false, NULL, PP_LEVEL_FRAME},

        
when user change the frame, presently they drag and release the frame,
the following action happens:
1. ap_EditMethods::releaseFrame(AV_View * pAV_View, EV_EditMethodCallData * )
2. void FV_View::releaseFrame
3. bool pt_PieceTable::_fmtChangeStruxWithNotify
4. fl_ContainerLayout::lookupProperties()
5. in the lookupProperties function:
            1, we get Frame Type: pSectionAP->getProperty("frame-type",pszFrameType))
                2, we get Position-to value:
pSectionAP->getProperty("position-to",pszPositionTo))
                3, also: wrap-mode wrap-mode
                4, ...
        
        the one about this idea:
        if(pSectionAP &&
pSectionAP->getProperty("frame-expand-height",pszExpandHeight))
        {
                m_iMinHeight = m_iHeight;
                m_bExpandHeight = true;
        }

at this time, Abiword can receive "frame-expand-height" after user
enter extra lines. and the two values will be used to refresh Frame's
dimensions:
                m_iMinHeight = m_iHeight;
                m_bExpandHeight = true;
                
                
Please Give me some suggestions and Correct me if I have something wrong, thanks

Vincent

在 2012年3月23日 上午4:24,Martin Sevior <msevior@gmail.com> 写道:
> Hi Vincent,
>
> Thanks very much for your interest in abiword and your screen shot.
> AbiWord presently has a feature in it's backend that allows the width
> of a textbox to specified but the height of the text box is then
> determined via the amount of text in the text box.
>
> The project would be to enable the user to actually USE this feature
> by exposing it in the UI. At present abiword successly imports
> textboxes from Open Office documents with this feature but does not
> allow users to define it or change it from within the abiword User
> Interface.
>
> If AbiWord sees that the the frame property "frame-expand-height"
> defined to be non-null it has behaviour.
>
> Cheers
>
> Martin
>
> On Wed, Mar 21, 2012 at 4:38 PM, vincent vincent
> <vincent.abiword@gmail.com> wrote:
>> HI,
>> I am Vincent from Beijing University of Aeronautics and Astronautics,
>> the Computer technology and sciences institution. This is the third
>> year of my university life. Just as last talking in abiword mail list
>> before, I have check-out the code and read about it carefully.
>>
>> My interested idea: Dialog improvements
>> I am quite interested about the idea: Dialog improvements. And I read
>> some codes about this idea.
>> Overall, Abiword is platform independent software. In Oder to achieve
>> this, we need a very abstract definition of interface and model, such
>> as PD_Document, pt_PieceTable. And all of this class will be override
>> in Windows, Linux, MAC OSX using OS-dependent GUI library. Using this
>> architecture, we can reuse code fully.
>>
>> I have tested in the released version and the debug version; users
>> can't precisely set the widths and heights. And the function of
>> setting the line width also has some bugs too.
>> All the attributions are stored in :
>> static const char * AbiPropertyName[PP_PropertyMap::abi__count] = {
>> "annotation-author",
>> "annotation-date",
>> "annotation-title",
>> "background-color",
>> "background-image",
>> ...........
>> };
>> including "table-width". we can also add 'rotate-angle'.
>>
>>
>> Take Windows for example:
>> The code is in : src\wp\ap\xp\ ap_Dialog_FormatTable.cpp
>>
>> The process of changing the attributes of TABLE:
>> 1 Evoke the command in User Interface
>> These two functions are upper level to change TABLE's border color
>> and border thickness.These two functions are used to set the
>> prosperity of Table.
>> void AP_Dialog_FormatTable::setBorderColor(UT_RGBColor clr)
>> void AP_Dialog_FormatTable::setBorderThickness(UT_UTF8String & sThick)
>> And all property of table is restored in a vector.
>> UT_PropVector m_vecProps;
>> Including: background-color left-color top-color bot-color
>> left-thickness right-thickness
>> background-color: m_vecProps.addOrReplaceProp ("background-color",
>> bgcol.c_str ());
>> So that in order to add the priority of setting the width and
>> height. We need width and height into add to the vector.
>>
>> 2 Call function 'applyChanges' to apply changes in FVView
>> case AP_RID_DIALOG_FORMATTABLE_BTN_APPLY: applyChanges();
>>
>> 3 Abstract level setCellFormat. This Function is plat-independent. We
>> copy the data from m_vecProps to propsArray which is acceptable by
>> FV_View
>> pView->setCellFormat(propsArray, m_ApplyTo,m_pGraphic,m_sImagePath);
>> Set cells in a table to a given format. The formatting of the
>> current selection, row, column or the whole table can be changed.
>>
>> 4. Do the actual change
>> m_pDoc->changeStruxFmt(PTC_AddFmt,posStart,posEnd,NULL,properties,PTX_SectionCell);
>> roperties,pts);
>> bool pt_PieceTable::_realChangeStruxFmt
>> bool pt_PieceTable::_fmtChangeFmtMark
>>
>> 5 So that class 'ABI_EXPORT pf_Frag_Strux : public pf_Frag' has a lot
>> of property but we don't expose to users.
>>
>>
>>> This project would also allow the Table and Frame dialogs to accept rotated text, which is the subject of another GSoC Project.
>> About this we need to add the property into the property vector. But
>> also need to be acceptable by abstract class PieceTable.
>>
>> My question:
>> About another part of this idea, what is the meaning of 'allow the
>> frame height or width to expand the capture all the text enteed into
>> the table'? Can someone give an example? Thanks
>>
>> I am looking forward to hearing from you, thanks
>>
>>
>> Regards~
>>
>> vincent
Received on Sat Mar 24 09:04:54 2012

This archive was generated by hypermail 2.1.8 : Sat Mar 24 2012 - 09:04:54 CET