Re: Vincent_ GSOC2012: Dialog improvements_ Part 1

From: Martin Sevior <msevior_at_gmail.com>
Date: Sun Mar 25 2012 - 12:16:29 CEST

Hi Vincent,

Yes. This what you have to do in the backend.

Cheers

Martin

2012/3/24 vincent.abiword <vincent.abiword@gmail.com>:
> Hi,
> I am Vincent. About my interested idea: Dialog improvements. I would like to split this idea to two part:
> 1. Table Setting: including dimension setting and 'rotate-angle' setting
> 2. Frame expandable, makeing Frame expandable when users enter extra line of text, which has been discussed in last mail.
>
> I also have some opinions about the Table Setting (part 1). Correct me if I have something wrong.
> Same as Frame expandable, 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 need to add 'rotate-angle'.
>
> in AP_Dialog_FormatTable, we will correct all attribution values and store them in vector. (UT_PropVector m_vecProps;)
> Example: setBorderColor : background-color:
> m_vecProps.addOrReplaceProp ("background-color", bgcol.c_str ());
>
>
> Steps to implement:
> So that in order to add the priority of setting the width and height. We need to add width and height to the vector.
> 1. Add evoke function in AP_Dialog_FormatTable
> 2. In the evoke function, setting corresponding value to the UT_PropVector.
> 3. These two functions will render the attributions:
> bool pt_PieceTable::_realChangeStruxFmt
> bool pt_PieceTable::_fmtChangeFmtMark
>
>
>
> Add 'rotate-angle', we need to do:
> 1. Add attribution in static const char * AbiPropertyName[PP_PropertyMap::abi__count]
> 2. Init this attribution 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
> 3. the most important step:
> Add render function to rotate-angle (this relate with another GSOC topic, I also have some interesting to implement it)
> 4. Add evoke function in AP_Dialog_FormatTable
> 5. In the evoke function, setting corresponding value to the UT_PropVector.
> 6. These two functions will render the attributions:
> bool pt_PieceTable::_realChangeStruxFmt
> bool pt_PieceTable::_fmtChangeFmtMark
>
>
>
> Please Give me some suggestions and correct me if I have something wrong, thanks
>
>
> Vincent
>
>
>
>
>
>
>
>
>
>
>
> vincent.abiword
>
> 发件人: vincent vincent
> 发送时间: 2012-03-24 16:04
> 收件人: Martin Sevior; Xun Sun; Kathiravelu Pradeeban; larochelle.simon.1
> 抄送: abiword-dev; Hub Figuière
> 主题: Re: Vincent_ GSOC2012: Dialog improvements_ part 2: Frame
> 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 Sun Mar 25 12:16:39 2012

This archive was generated by hypermail 2.1.8 : Sun Mar 25 2012 - 12:16:39 CEST