Dialog improvements
Vincent (zuyin kang)
Short description: This idea wants to solve these two problems in Abiword: 1. Users can set table attributions(width, height, rotate-angle) preciously in table-setting dialog 2. Make Frame expandable when users enter extra line of text I would like to split this idea to two part: 1. Table Setting Dialog: including dimensions setting and 'rotate-angle' setting 2. Frame expandable, making Frame expandable when users enter extra line of text for the 'rotate-angle' setting issue, it is another GSOC topic, but if none deal with that, I can do this two topic together.
Additional info: http://farm8.staticflickr.com/7109/7021322817_6...
- Name: Vincent
- Email: Vincent.abiword@gmail.com
- Project Title: Dialog improvements
- Synopsis:
This idea wants to solve these two problems in Abiword:
1. Users can set table attributions(width, height, rotate-angle) preciously in table-setting dialog
2. Make Frame expandable when users enter extra line of text
I would like to split this idea to two part:
1. Table Setting: including dimension setting and 'rotate-angle' setting
2. Frame expandable, making Frame expandable when users enter extra line of text
For the 'rotate-angle' setting issue, it is another GSOC topic,
but if none deal with that, I can do this two topics together.
Main Contents:
- 1. Benefits to the AbiWord
- 2. Bug fixing in bugzilla
- 3. Deliverables
- 4. Project Details
- 4.1 Frame expandable
- 4.2 Table Setting
- 4.3 Rotate-angle
- 5. Project Schedule
- 6. Bio
- 7. Additional Requirements
- Benefits to the AbiWord (and/or other) project(s):
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 enter 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.
AbiWord's table and Frame dialogs do not expose all features available to users. In the case of tables, this includes the ability to precisely set cell widths and heights.
I think we also have some works in frontend(UI) side. We need to make this feature useable for all OS(Linux, Mac, Windows). so that we need to add it in abstract level firstly, and then implemented in all OS GUI.
- Bug fixing in Bugzilla
I have committed patches for these bugs:
http://bugzilla.abisource.com/show_bug.cgi?id=13284,
http://bugzilla.abisource.com/show_bug.cgi?id=13313
http://bugzilla.abisource.com/show_bug.cgi?id=13308
Still under investigation:
1. http://bugzilla.abisource.com/show_bug.cgi?id=13308
Frame format setting dialog can't remember user's thickness setting.
in fact, user can set Frame's top, left, right, bottom thickness. so which thickness should we display when user open Frame setting dialog?
a. first time open Frame setting dialog(no setting Frame thickness before) ==> we can display default thickness.
b. not first time =====>
if users set top, left, right, bottom thickness the same =======> we can display the same value
if users set top, left, right, bottom thickness seperately to not the same =====> what should we display?
right now, the behavior of setting top, left, right, bottom thicknes in Frame setting dialog is confusing. I think I need to confirm with you before fixing it. Can you have a try about it. thanks
2. http://bugzilla.abisource.com/show_bug.cgi?id=7976
top left conner of textbox - lines do not start from same point
I have invesigate a long about this bug. But I don't why this happens, since the left-top Coordinate is the same while drawline in
/*!
* Draw the frame boundaries
*/
void fp_FrameContainer::drawBoundaries(dg_DrawArgs * pDA)
{
..............
_drawLine(m_lineTop,iXlow,iYlow,iXhigh,iYlow,pDA->pG); // top
_drawLine(m_lineRight,iXhigh,iYlow,iXhigh,iYhigh,pDA->pG); // right
_drawLine(m_lineBottom,iXlow,iYhigh,iXhigh,iYhigh,pDA->pG); // bottom
_drawLine(m_lineLeft,iXlow,iYlow,iXlow,iYhigh,pDA->pG); // left
}
- Deliverables:
User will have a better experience to using abiword, in the following two issues:
1. User can set table’s widths and heights, rotate-text in UI
2. The frame dimensions automatically if the user enters an extra line of text.
- Project Details:
*1 Frame expandable:*
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;
2 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
- Project Schedule:
1. Today- Apr 23 : (four weeks) keep reading code and updating proposal, communicating with mentors and Abiword community. Prepare for fixing some bugs from abiword Bugzilla.
2. Apr 24 - May 10: (three weeks) Studying the spec and the code, and discussions with the mentor and community on its design and how it might best be implemented this topic. Make a simple design of class diagram and function diagram. including: SVN Branches build and code style learning.
3. May 11 - May 17: (one week) Make a clear design of class diagram and function diagram. The data communication must be clear.
4. May 18 - Jun 1: (two weeks) Implement: make Frame expandable.
5. Jun 1 - Jun 14: ( two weeks) Implement: Table setting dialog improvement.
6. Jun 15 - Jun 27: (one and half week) test the two implemented part and code refactor
7. Jun 28 - Jul 9: (one week) Prepare for Google Mid-term evaluations
8. Jul 10 - Jul 24: (two week) Implement: Rotate-text setting
9. Jul 24 - Aug 1 : (one week) Test and code refactor
10. Aug 1 - Aug 10 : (one week) Prepare some document that Google needed
- Bio: Who are you? What makes you the best person to work on this project?
- The project is a sub project of the national 973 project’ INTERACTVE TECHNOLOGY AND INTERFACE SUPPORT VIRTURAL REALITY MIXED ERVIRONMENT ’.Which is to use video instead of traditional keyboard/mouse interactive method.
- The technology involved in project include face tracking, combined with the convergence method of face skin color and characteristics, use AdaBoost face detection algorithm to detect face’s initial location, use Meanshift tracking algorithm to locate face’s position in each frame, calculate the direction of the movement and distance through the face offset displacement, send the command to the system instead of keyboard and mouse, this project can be applied to daily entertainment game.
- Development environment: C++, Open CV, Windows XP
- Responsibility 1: using detection and tracking at the same time to face tracking.
- 1.In order to accurately real-time tracking the target, using AdaBoost face detection algorithm and CamShift tracking algorithm at the same time, start tracking algorithm to locate the position of the face and calculates the displacement when detection algorithm failed; start detection algorithm in the sector when the target tracking failed.
- 2.Optimize AdaBoost face detection algorithm through introducing mechanism such as merging effective detecting windows and time impression window and so on, to get more accurate face location information and tracking scale information.
- Responsibility 2: revising Meanshift algorithm tracking window scale by Graph-cut theory.
- 1.The classical Mean Shift can’t change the scale of tracking window in real time while tracking target is changing in size. Graph cuts theory will separate out different characteristics of objects. according to this, graph cuts theory can be used to real-time separate out skin color piece to update tracking result scale.
- 2.The paper "Scale of Shift Based on Adaptation since a Graph keep "is published in the international conference and indexed by EI.
- This project is a sub project of national project 863 ‘MULTIMODAL INTERFACE INPUT FLOW FUSION AND DISPLAY TECHNOLOGY IN VIRTUAL ENVIRONMENT’.
- It aims to get the relative displacements between the phone and the user, which are then mapped to the user’s operations to the large screen. So the remote large screen can be controlled by the user.
- It extracts relative displacement information from the video based on different visual methods (motion estimation, and face tracking), and amends or accelerates the existing calculation with sensor data. It improves user experience with the phone’s touch screen.
- Development environment: C++, Open CV, Windows XP
- Responsibility: Extracting the relative displacement of smart phone.
- 1.Input preprocessing: convert the image captured from camera tor YCbCr_420_SP format, JPG Code word throttling, get throttling after format conversion and compression coding. Transmit to the server and unzip a Bitmap image.
- 2.Estimating the displacement of the camera by using a similar tracking motion estimation method: converting the extracted Bitmap image to gray image, introducing pyramid sampling mechanism, extracting the center of reference template as the core sub figure, with all the scope, computing the image displacement between the current frame and before the frame after sampling, and extending the scope of tracking extends to the image boundaries
- and smooth filtering the tracking result, thus get camera displacement estimation algorithm which is suitable for mobile phone big screen of interactive system.
- Job Description: our testing object is a lightweight browser based on the core chrome object on the phone, thin client mechanism can guarantee the mobile browser speed
- Job Responsibility: In the team, I am responsible for helping developers to unit test by using Google's open source c + + unit Test framework Google Test (GTest).According to different function to write the corresponding test cases and record failure log .
- Job Responsibility: I am responsible for the integration and maintenance of the department's service sites using IBM’s web development platform, and I update CDL service department web site and unit web page style.
- Proficient in C/C++, Experienced in Visual C++, MFC programming and the usage of OpenCV library.
- Familiar with data structure and algorithms, Experienced in Emgu、WPF.
- Experienced in programming in Linux and Experienced in gcc/gdb.
- Familiar with fundamental principles of OS. Familiar with Visual Studio、OpenCV
Additional Requirements
I will add the image attachment url here
