Hello Tamás,

On Tue, 2013-05-28 at 18:16 +0200, Zolnai Tamás wrote:
>     As some of list members know I am not a beginner with LO. I have
> already done some work mostly with localization (kill sdf and refactor
> \clean l10ntools). Additionally I have added a little feature which is
> visible from the side of the users too (limitbox in Base).

It will be great to have you working on the characters borders!

>     On the summer, I will wrok with Writer, making possible using
> character borders. It sounds simple, but it has more sides. The first
> thing that comes to mind about character border is a simple four-sided
> border with the given color, width and style.

[...]

Well that is only the use case and it isn't that complex: if we can draw
the 4 borders, then any other case is pretty simple ;)

You should better see your task as the following steps:
  * Change the Character properties UI to add the existing "Borders"
page.
  * Write the borders definition into the SwFmt.
  * Change the layout to paint the borders. Borders will influence the
line height and spacing between characters. This part will probably be
the trickiest one. The code to paint borders is already implemented, but
changing the layout requires you to understand it first ;)
  * Persist the borders to the various filters. There is no
specification to do here as even ODF specifies these borders.

>    I added a bit detailed description of this feature, just to see
> what territories it touch. So if anybody has ideas\advices about
> painting lines\borders, adding new character attributes, extending
> filters or anything linked with them, than - as the phrase goes - feel
> free to write me.

I think Miklos planned to have a kick-starting session with you: we'll
be able to discuss the details there. I once had a patch for the first
step, you'll find it attached, although I'm not sure it's still useful.

--
Cedric

commit 932ff3d1703b2b21d1c544815867bc803b5b92b2
Merge: 4a111ea a36dd99
Author: Cédric Bosdonnat <cedric.bosdonnat....@free.fr>
Date:   Thu Aug 11 09:33:35 2011 +0200

    On master: WIP Character borders

diff --cc cui/source/tabpages/border.cxx
index 98aeae8,98aeae8..457b671
--- a/cui/source/tabpages/border.cxx
+++ b/cui/source/tabpages/border.cxx
@@@ -1134,7 -1134,7 +1134,7 @@@ IMPL_LINK( SvxBorderTabPage, LinesChang
          sal_uInt16 nValid = VALID_TOP|VALID_BOTTOM|VALID_LEFT|VALID_RIGHT;
  
          //fuer Rahmen und  Absatz wird das Edit disabled, wenn keine Border gesetzt ist
--        if(nSWMode & (SW_BORDER_MODE_FRAME|SW_BORDER_MODE_PARA))
++        if(nSWMode & (SW_BORDER_MODE_FRAME|SW_BORDER_MODE_PARA|SW_BORDER_MODE_CHAR))
          {
              if(bLineSet)
              {
diff --cc svx/inc/svx/flagsdef.hxx
index 2b1b30d,2b1b30d..2692e08
--- a/svx/inc/svx/flagsdef.hxx
+++ b/svx/inc/svx/flagsdef.hxx
@@@ -35,6 -35,6 +35,7 @@@
  #define SW_BORDER_MODE_PARA     0x01
  #define SW_BORDER_MODE_TABLE    0x02
  #define SW_BORDER_MODE_FRAME    0x04
++#define SW_BORDER_MODE_CHAR     0x08
  
  // flags for SvxBackgroundTabPage
  #define SVX_SHOW_SELECTOR       0x01
diff --cc sw/inc/hintids.hxx
index afd57f3,afd57f3..1eac3d1
--- a/sw/inc/hintids.hxx
+++ b/sw/inc/hintids.hxx
@@@ -96,8 -96,8 +96,9 @@@ RES_CHRATR_BEGIN = HINT_BEGIN
      RES_CHRATR_RELIEF,                      // 36
      RES_CHRATR_HIDDEN,                      // 37
      RES_CHRATR_OVERLINE,                    // 38
--    RES_CHRATR_DUMMY1,                      // 39
--    RES_CHRATR_DUMMY2,                      // 40
++    RES_CHRATR_BORDER,                      // 39
++    RES_CHRATR_DUMMY1,                      // 40
++    RES_CHRATR_DUMMY2,                      // 41
  RES_CHRATR_END
  };
  
@@@ -123,27 -123,27 +124,27 @@@ RES_TXTATR_BEGIN = RES_CHRATR_END
     - META and METAFIELD must precede CJK_RUBY and INETFMT
   */
  RES_TXTATR_WITHEND_BEGIN = RES_TXTATR_BEGIN ,
--    RES_TXTATR_REFMARK = RES_TXTATR_WITHEND_BEGIN,  // 41
--    RES_TXTATR_TOXMARK,                             // 42
--    RES_TXTATR_META,                                // 43
--    RES_TXTATR_METAFIELD,                           // 44
--    RES_TXTATR_AUTOFMT,                             // 45
--    RES_TXTATR_INETFMT,                             // 46
--    RES_TXTATR_CHARFMT,                             // 47
--    RES_TXTATR_CJK_RUBY,                            // 48
--    RES_TXTATR_UNKNOWN_CONTAINER,                   // 49
--    RES_TXTATR_DUMMY5,                              // 50
++    RES_TXTATR_REFMARK = RES_TXTATR_WITHEND_BEGIN,  // 42
++    RES_TXTATR_TOXMARK,                             // 43
++    RES_TXTATR_META,                                // 44
++    RES_TXTATR_METAFIELD,                           // 45
++    RES_TXTATR_AUTOFMT,                             // 46
++    RES_TXTATR_INETFMT,                             // 47
++    RES_TXTATR_CHARFMT,                             // 48
++    RES_TXTATR_CJK_RUBY,                            // 49
++    RES_TXTATR_UNKNOWN_CONTAINER,                   // 50
++    RES_TXTATR_DUMMY5,                              // 51
  RES_TXTATR_WITHEND_END,
  
  // all TextAttributes without an end
  RES_TXTATR_NOEND_BEGIN = RES_TXTATR_WITHEND_END,
--    RES_TXTATR_FIELD = RES_TXTATR_NOEND_BEGIN,      // 51
--    RES_TXTATR_FLYCNT,                              // 52
--    RES_TXTATR_FTN,                                 // 53
--    RES_TXTATR_DUMMY4,                              // 54
--    RES_TXTATR_DUMMY3,                              // 55
--    RES_TXTATR_DUMMY1,                              // 56
--    RES_TXTATR_DUMMY2,                              // 57
++    RES_TXTATR_FIELD = RES_TXTATR_NOEND_BEGIN,      // 52
++    RES_TXTATR_FLYCNT,                              // 53
++    RES_TXTATR_FTN,                                 // 54
++    RES_TXTATR_DUMMY4,                              // 55
++    RES_TXTATR_DUMMY3,                              // 56
++    RES_TXTATR_DUMMY1,                              // 57
++    RES_TXTATR_DUMMY2,                              // 58
  RES_TXTATR_NOEND_END,
  RES_TXTATR_END = RES_TXTATR_NOEND_END
  };
@@@ -151,23 -151,23 +152,23 @@@
  enum RES_PARATR
  {
  RES_PARATR_BEGIN = RES_TXTATR_END,
--    RES_PARATR_LINESPACING = RES_PARATR_BEGIN,      // 58
--    RES_PARATR_ADJUST,                              // 59
--    RES_PARATR_SPLIT,                               // 60
--    RES_PARATR_ORPHANS,                             // 61
--    RES_PARATR_WIDOWS,                              // 62
--    RES_PARATR_TABSTOP,                             // 63
--    RES_PARATR_HYPHENZONE,                          // 64
--    RES_PARATR_DROP,                                // 65
--    RES_PARATR_REGISTER,                            // 66
--    RES_PARATR_NUMRULE,                             // 67
--    RES_PARATR_SCRIPTSPACE,                         // 68
--    RES_PARATR_HANGINGPUNCTUATION,                  // 69
--    RES_PARATR_FORBIDDEN_RULES,                     // 70
--    RES_PARATR_VERTALIGN,                           // 71
--    RES_PARATR_SNAPTOGRID,                          // 72
--    RES_PARATR_CONNECT_BORDER,                      // 73
--    RES_PARATR_OUTLINELEVEL,                        // 74
++    RES_PARATR_LINESPACING = RES_PARATR_BEGIN,      // 59
++    RES_PARATR_ADJUST,                              // 60
++    RES_PARATR_SPLIT,                               // 61
++    RES_PARATR_ORPHANS,                             // 62
++    RES_PARATR_WIDOWS,                              // 63
++    RES_PARATR_TABSTOP,                             // 64
++    RES_PARATR_HYPHENZONE,                          // 65
++    RES_PARATR_DROP,                                // 66
++    RES_PARATR_REGISTER,                            // 67
++    RES_PARATR_NUMRULE,                             // 68
++    RES_PARATR_SCRIPTSPACE,                         // 69
++    RES_PARATR_HANGINGPUNCTUATION,                  // 70
++    RES_PARATR_FORBIDDEN_RULES,                     // 71
++    RES_PARATR_VERTALIGN,                           // 72
++    RES_PARATR_SNAPTOGRID,                          // 73
++    RES_PARATR_CONNECT_BORDER,                      // 74
++    RES_PARATR_OUTLINELEVEL,                        // 75
  RES_PARATR_END
  };
  
@@@ -176,99 -176,99 +177,99 @@@
  enum RES_PARATR_LIST
  {
  RES_PARATR_LIST_BEGIN = RES_PARATR_END,
--    RES_PARATR_LIST_ID = RES_PARATR_LIST_BEGIN,     // 75
--    RES_PARATR_LIST_LEVEL,                          // 76
--    RES_PARATR_LIST_ISRESTART,                      // 77
--    RES_PARATR_LIST_RESTARTVALUE,                   // 78
--    RES_PARATR_LIST_ISCOUNTED,                      // 79
++    RES_PARATR_LIST_ID = RES_PARATR_LIST_BEGIN,     // 76
++    RES_PARATR_LIST_LEVEL,                          // 77
++    RES_PARATR_LIST_ISRESTART,                      // 78
++    RES_PARATR_LIST_RESTARTVALUE,                   // 79
++    RES_PARATR_LIST_ISCOUNTED,                      // 80
  RES_PARATR_LIST_END
  };
  
  enum RES_FRMATR
  {
  RES_FRMATR_BEGIN = RES_PARATR_LIST_END,
--    RES_FILL_ORDER = RES_FRMATR_BEGIN,              // 80
--    RES_FRM_SIZE,                                   // 81
--    RES_PAPER_BIN,                                  // 82
--    RES_LR_SPACE,                                   // 83
--    RES_UL_SPACE,                                   // 84
--    RES_PAGEDESC,                                   // 85
--    RES_BREAK,                                      // 86
--    RES_CNTNT,                                      // 87
--    RES_HEADER,                                     // 88
--    RES_FOOTER,                                     // 89
--    RES_PRINT,                                      // 90
--    RES_OPAQUE,                                     // 91
--    RES_PROTECT,                                    // 92
--    RES_SURROUND,                                   // 93
--    RES_VERT_ORIENT,                                // 94
--    RES_HORI_ORIENT,                                // 95
--    RES_ANCHOR,                                     // 96
--    RES_BACKGROUND,                                 // 97
--    RES_BOX,                                        // 98
--    RES_SHADOW,                                     // 99
--    RES_FRMMACRO,                                   // 100
--    RES_COL,                                        // 101
--    RES_KEEP,                                       // 102
--    RES_URL,                                        // 103
--    RES_EDIT_IN_READONLY,                           // 104
--    RES_LAYOUT_SPLIT,                               // 105
--    RES_CHAIN,                                      // 106
--    RES_TEXTGRID,                                   // 107
--    RES_LINENUMBER  ,                               // 108
--    RES_FTN_AT_TXTEND,                              // 109
--    RES_END_AT_TXTEND,                              // 110
--    RES_COLUMNBALANCE,                              // 111
--    RES_FRAMEDIR,                                   // 112
--    RES_HEADER_FOOTER_EAT_SPACING,                  // 113
--    RES_ROW_SPLIT,                                  // 114
--    RES_FOLLOW_TEXT_FLOW,                           // 115
--    RES_COLLAPSING_BORDERS,                         // 116
--    RES_WRAP_INFLUENCE_ON_OBJPOS,                   // 117
--    RES_AUTO_STYLE,                                 // 118
--    RES_FRMATR_STYLE_NAME,                          // 119
--    RES_FRMATR_CONDITIONAL_STYLE_NAME,              // 120
++    RES_FILL_ORDER = RES_FRMATR_BEGIN,              // 81
++    RES_FRM_SIZE,                                   // 82
++    RES_PAPER_BIN,                                  // 83
++    RES_LR_SPACE,                                   // 84
++    RES_UL_SPACE,                                   // 85
++    RES_PAGEDESC,                                   // 86
++    RES_BREAK,                                      // 87
++    RES_CNTNT,                                      // 88
++    RES_HEADER,                                     // 89
++    RES_FOOTER,                                     // 90
++    RES_PRINT,                                      // 91
++    RES_OPAQUE,                                     // 92
++    RES_PROTECT,                                    // 93
++    RES_SURROUND,                                   // 94
++    RES_VERT_ORIENT,                                // 95
++    RES_HORI_ORIENT,                                // 96
++    RES_ANCHOR,                                     // 97
++    RES_BACKGROUND,                                 // 98
++    RES_BOX,                                        // 99
++    RES_SHADOW,                                     // 100
++    RES_FRMMACRO,                                   // 101
++    RES_COL,                                        // 102
++    RES_KEEP,                                       // 103
++    RES_URL,                                        // 104
++    RES_EDIT_IN_READONLY,                           // 105
++    RES_LAYOUT_SPLIT,                               // 106
++    RES_CHAIN,                                      // 107
++    RES_TEXTGRID,                                   // 108
++    RES_LINENUMBER  ,                               // 109
++    RES_FTN_AT_TXTEND,                              // 110
++    RES_END_AT_TXTEND,                              // 111
++    RES_COLUMNBALANCE,                              // 112
++    RES_FRAMEDIR,                                   // 113
++    RES_HEADER_FOOTER_EAT_SPACING,                  // 114
++    RES_ROW_SPLIT,                                  // 115
++    RES_FOLLOW_TEXT_FLOW,                           // 116
++    RES_COLLAPSING_BORDERS,                         // 117
++    RES_WRAP_INFLUENCE_ON_OBJPOS,                   // 118
++    RES_AUTO_STYLE,                                 // 119
++    RES_FRMATR_STYLE_NAME,                          // 120
++    RES_FRMATR_CONDITIONAL_STYLE_NAME,              // 121
  RES_FRMATR_END
  };
  
  enum RES_GRFATR
  {
  RES_GRFATR_BEGIN = RES_FRMATR_END,
--    RES_GRFATR_MIRRORGRF = RES_GRFATR_BEGIN,        // 121
--    RES_GRFATR_CROPGRF,                             // 122
++    RES_GRFATR_MIRRORGRF = RES_GRFATR_BEGIN,        // 122
++    RES_GRFATR_CROPGRF,                             // 123
  
--    RES_GRFATR_ROTATION,                            // 123
--    RES_GRFATR_LUMINANCE,                           // 124
--    RES_GRFATR_CONTRAST,                            // 125
--    RES_GRFATR_CHANNELR,                            // 126
--    RES_GRFATR_CHANNELG,                            // 127
--    RES_GRFATR_CHANNELB,                            // 128
--    RES_GRFATR_GAMMA,                               // 129
--    RES_GRFATR_INVERT,                              // 130
--    RES_GRFATR_TRANSPARENCY,                        // 131
--    RES_GRFATR_DRAWMODE,                            // 132
++    RES_GRFATR_ROTATION,                            // 124
++    RES_GRFATR_LUMINANCE,                           // 125
++    RES_GRFATR_CONTRAST,                            // 126
++    RES_GRFATR_CHANNELR,                            // 127
++    RES_GRFATR_CHANNELG,                            // 128
++    RES_GRFATR_CHANNELB,                            // 129
++    RES_GRFATR_GAMMA,                               // 130
++    RES_GRFATR_INVERT,                              // 131
++    RES_GRFATR_TRANSPARENCY,                        // 132
++    RES_GRFATR_DRAWMODE,                            // 133
  
--    RES_GRFATR_DUMMY1,                              // 133
--    RES_GRFATR_DUMMY2,                              // 134
--    RES_GRFATR_DUMMY3,                              // 135
--    RES_GRFATR_DUMMY4,                              // 136
--    RES_GRFATR_DUMMY5,                              // 137
++    RES_GRFATR_DUMMY1,                              // 134
++    RES_GRFATR_DUMMY2,                              // 135
++    RES_GRFATR_DUMMY3,                              // 136
++    RES_GRFATR_DUMMY4,                              // 137
++    RES_GRFATR_DUMMY5,                              // 138
  RES_GRFATR_END
  };
  
  enum RES_BOXATR
  {
  RES_BOXATR_BEGIN = RES_GRFATR_END,
--    RES_BOXATR_FORMAT = RES_BOXATR_BEGIN,           // 138
--    RES_BOXATR_FORMULA,                             // 139
--    RES_BOXATR_VALUE,                               // 140
++    RES_BOXATR_FORMAT = RES_BOXATR_BEGIN,           // 139
++    RES_BOXATR_FORMULA,                             // 140
++    RES_BOXATR_VALUE,                               // 141
  RES_BOXATR_END
  };
  
  enum RES_UNKNOWNATR
  {
  RES_UNKNOWNATR_BEGIN = RES_BOXATR_END,
--    RES_UNKNOWNATR_CONTAINER = RES_UNKNOWNATR_BEGIN,// 141
++    RES_UNKNOWNATR_CONTAINER = RES_UNKNOWNATR_BEGIN,// 142
  RES_UNKNOWNATR_END
  };
  
diff --cc sw/source/ui/chrdlg/chardlg.cxx
index fb5abe7,fb5abe7..5421828
--- a/sw/source/ui/chrdlg/chardlg.cxx
+++ b/sw/source/ui/chrdlg/chardlg.cxx
@@@ -99,6 -99,6 +99,8 @@@ SwCharDlg::SwCharDlg(Window* pParent, S
      AddTabPage(TP_CHAR_TWOLN, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_CHAR_TWOLINES ), 0 );
      AddTabPage(TP_CHAR_URL, SwCharURLPage::Create, 0);
      AddTabPage(TP_BACKGROUND, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BACKGROUND ), 0 );
++    AddTabPage(TP_BORDER, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BORDER ),
++            pFact->GetTabPageRangesFunc( RID_SVXPAGE_BORDER ) );
  
      SvtCJKOptions aCJKOptions;
      if(bIsDrwTxtMode)
@@@ -106,6 -106,6 +108,7 @@@
          RemoveTabPage( TP_CHAR_URL );
          RemoveTabPage( TP_BACKGROUND );
          RemoveTabPage( TP_CHAR_TWOLN );
++        RemoveTabPage( TP_BORDER );
      }
      else if(!aCJKOptions.IsDoubleLinesEnabled())
          RemoveTabPage( TP_CHAR_TWOLN );
@@@ -152,6 -152,6 +155,10 @@@ void SwCharDlg::PageCreated( sal_uInt1
              aSet.Put (SfxUInt32Item(SID_FLAG_TYPE,SVX_PREVIEW_CHARACTER));
              rPage.PageCreated(aSet);
          break;
++        case TP_BORDER:
++            aSet.Put (SfxUInt16Item(SID_SWMODE_TYPE,SW_BORDER_MODE_CHAR));
++            rPage.PageCreated(aSet);
++            break;
      }
  }
  
diff --cc sw/source/ui/chrdlg/chardlg.src
index 2117a90,2117a90..3895d3d
--- a/sw/source/ui/chrdlg/chardlg.src
+++ b/sw/source/ui/chrdlg/chardlg.src
@@@ -72,6 -72,6 +72,12 @@@ TabDialog DLG_CHA
              };
              PageItem
              {
++                Identifier = TP_BORDER ;
++                Text [ en-US ] = "Borders" ;
++                PageResID = TP_BORDER ;
++            };
++            PageItem
++            {
                  Identifier = TP_BACKGROUND ;
                  Text [ en-US ] = "Background" ;
                  PageResID = TP_BACKGROUND ;
diff --cc sw/source/ui/fmtui/tmpdlg.cxx
index 55cf1cc,55cf1cc..175c0bb
--- a/sw/source/ui/fmtui/tmpdlg.cxx
+++ b/sw/source/ui/fmtui/tmpdlg.cxx
@@@ -139,6 -139,6 +139,10 @@@ SwTemplateDlg::SwTemplateDlg(Window
              OSL_ENSURE(pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BACKGROUND ), "GetTabPageCreatorFunc fail!");
              OSL_ENSURE(pFact->GetTabPageRangesFunc( RID_SVXPAGE_BACKGROUND ) , "GetTabPageRangesFunc fail!");
              AddTabPage(TP_BACKGROUND, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BACKGROUND ), pFact->GetTabPageRangesFunc( RID_SVXPAGE_BACKGROUND ) );
++            
++            OSL_ENSURE(pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BORDER ), "GetTabPageCreatorFunc fail!");
++            OSL_ENSURE(pFact->GetTabPageRangesFunc( RID_SVXPAGE_BORDER ), "GetTabPageRangesFunc fail!");
++            AddTabPage(TP_BORDER, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BORDER ), pFact->GetTabPageRangesFunc( RID_SVXPAGE_BORDER ) );
  
              SvtCJKOptions aCJKOptions;
              if(nHtmlMode & HTMLMODE_ON || !aCJKOptions.IsDoubleLinesEnabled())
@@@ -595,6 -595,6 +599,10 @@@ void SwTemplateDlg::PageCreated( sal_uI
              {
                  aSet.Put (SfxUInt16Item(SID_SWMODE_TYPE,SW_BORDER_MODE_FRAME));
              }
++            else if( SFX_STYLE_FAMILY_CHAR == nType )
++            {
++                aSet.Put (SfxUInt16Item(SID_SWMODE_TYPE,SW_BORDER_MODE_CHAR));
++            }
              rPage.PageCreated(aSet);
  
          break;
diff --cc sw/source/ui/fmtui/tmpdlg.src
index b9cde9c,b9cde9c..6812d27
--- a/sw/source/ui/fmtui/tmpdlg.src
+++ b/sw/source/ui/fmtui/tmpdlg.src
@@@ -72,6 -72,6 +72,12 @@@ TabDialog DLG_TEMPLATE_
                  Text [ en-US ] = "Background" ;
                  PageResID = TP_BACKGROUND ;
              };
++            PageItem
++            {
++                Identifier = TP_BORDER ;
++                Text [ en-US ] = "Borders" ;
++                PageResID = TP_BORDER ;
++            };
          };
      };
  };
diff --cc sw/source/ui/shells/textsh1.cxx
index a7ff278,a7ff278..5a9882d
--- a/sw/source/ui/shells/textsh1.cxx
+++ b/sw/source/ui/shells/textsh1.cxx
@@@ -137,6 -137,6 +137,7 @@@ void lcl_CharDialog( SwWrtShell &rWrtSh
      SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)));
      SfxItemSet aCoreSet( rWrtSh.GetView().GetPool(),
                          RES_CHRATR_BEGIN,      RES_CHRATR_END-1,
++                        SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
                          RES_TXTATR_INETFMT,    RES_TXTATR_INETFMT,
                          RES_BACKGROUND,        RES_BACKGROUND,
                          FN_PARAM_SELECTION,    FN_PARAM_SELECTION,
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to