[PATCH] fix for fdo#30800: Option to display calc gridlines on colored cells

André Schnabel andre.schnabel at gmx.net
Wed Jun 29 11:02:47 PDT 2011


* change UI option for grid line display to tri-state drop down
* view option VOPT_GRID will take the information wheter to "Show"
  or "Hide" grid lines. New view option VOPT_GRID_ONTOP will take
  the information wheter to display grid lines on top of colored
  cells or not
* depending on VOPT_GRID_ONTOP grid lines will be drawn before or
  after drawing cell background in ScGridWindow::Draw
* store option as boolean property "GridOnColoredCells" (path:
  "/org.openoffice.Office.Calc/Layout/Line") in user config
* see
  http://wiki.documentfoundation.org/User:Andreschnabel/Spec_Calc_grid_lines_on_colored_background#UI_definitions
  for spec
---
 sc/inc/viewopti.hxx              |    1 +
 sc/source/core/tool/viewopti.cxx |   11 +++++++-
 sc/source/ui/inc/optdlg.hrc      |    3 +-
 sc/source/ui/inc/tpview.hxx      |    5 ++-
 sc/source/ui/optdlg/tpview.cxx   |   50 +++++++++++++++++++++++++-------------
 sc/source/ui/src/optdlg.src      |   21 +++++++++++++--
 sc/source/ui/view/gridwin4.cxx   |    2 +-
 7 files changed, 68 insertions(+), 25 deletions(-)

diff --git a/sc/inc/viewopti.hxx b/sc/inc/viewopti.hxx
index ad4641e..6ad4814 100644
--- a/sc/inc/viewopti.hxx
+++ b/sc/inc/viewopti.hxx
@@ -52,6 +52,7 @@ enum ScViewOption
     VOPT_OUTLINER,
     VOPT_HEADER,
     VOPT_GRID,
+    VOPT_GRID_ONTOP,
     VOPT_HELPLINES,
     VOPT_ANCHOR,
     VOPT_PAGEBREAKS,
diff --git a/sc/source/core/tool/viewopti.cxx b/sc/source/core/tool/viewopti.cxx
index 97139c6..85e6b0d 100644
--- a/sc/source/core/tool/viewopti.cxx
+++ b/sc/source/core/tool/viewopti.cxx
@@ -153,6 +153,7 @@ void ScViewOptions::SetDefaults()
     aOptArr[ VOPT_FORMULAS	  ] =
     aOptArr[ VOPT_SYNTAX	  ] =
     aOptArr[ VOPT_HELPLINES   ] =
+    aOptArr[ VOPT_GRID_ONTOP  ] =
     aOptArr[ VOPT_BIGHANDLES  ] = false;
     aOptArr[ VOPT_NOTES		  ] =
     aOptArr[ VOPT_NULLVALS	  ] =
@@ -308,7 +309,8 @@ SfxPoolItem* ScTpViewItem::Clone( SfxItemPool * ) const
 #define SCLAYOUTOPT_VERTSCROLL		8
 #define SCLAYOUTOPT_SHEETTAB		9
 #define SCLAYOUTOPT_OUTLINE			10
-#define SCLAYOUTOPT_COUNT			11
+#define SCLAYOUTOPT_GRID_ONCOLOR    11
+#define SCLAYOUTOPT_COUNT			12
 
 #define CFGPATH_DISPLAY		"Office.Calc/Content/Display"
 
@@ -343,6 +345,7 @@ Sequence<OUString> ScViewCfg::GetLayoutPropertyNames()
     static const char* aPropNames[] =
     {
         "Line/GridLine",			// SCLAYOUTOPT_GRIDLINES
+        "Line/GridOnColoredCells",  // SCLAYOUTOPT_GRID_ONCOLOR
         "Line/GridLineColor",		// SCLAYOUTOPT_GRIDCOLOR
         "Line/PageBreak",			// SCLAYOUTOPT_PAGEBREAK
         "Line/Guide",				// SCLAYOUTOPT_GUIDE
@@ -445,6 +448,9 @@ ScViewCfg::ScViewCfg() :
                     case SCLAYOUTOPT_GRIDLINES:
                         SetOption( VOPT_GRID, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
                         break;
+                    case SCLAYOUTOPT_GRID_ONCOLOR:
+                        SetOption( VOPT_GRID_ONTOP, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
+                        break;
                     case SCLAYOUTOPT_PAGEBREAK:
                         SetOption( VOPT_PAGEBREAKS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
                         break;
@@ -613,6 +619,9 @@ IMPL_LINK( ScViewCfg, LayoutCommitHdl, void *, EMPTYARG )
             case SCLAYOUTOPT_GRIDLINES:
                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_GRID ) );
                 break;
+            case SCLAYOUTOPT_GRID_ONCOLOR:
+                ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_GRID_ONTOP ) );
+                break;
             case SCLAYOUTOPT_PAGEBREAK:
                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_PAGEBREAKS ) );
                 break;
diff --git a/sc/source/ui/inc/optdlg.hrc b/sc/source/ui/inc/optdlg.hrc
index 4cdb0a5..90c0db7 100644
--- a/sc/source/ui/inc/optdlg.hrc
+++ b/sc/source/ui/inc/optdlg.hrc
@@ -145,7 +145,6 @@
 #define CB_TBLREG		54
 #define CB_OUTLINE		55
 #define GB_LINES		56
-#define CB_GRID			57
 #define FT_COLOR		58
 #define LB_COLOR		59
 #define CB_GUIDELINE	60
@@ -162,6 +161,8 @@
 #define FL_SEPARATOR1   71
 #define FL_SEPARATOR2   72
 #define FL_SEPARATOR    73
+#define FT_GRID         74
+#define LB_GRID         75
 
 // TP_INPUT
 #define GB_OPTIONS		70
diff --git a/sc/source/ui/inc/tpview.hxx b/sc/source/ui/inc/tpview.hxx
index ff3cd11..338db98 100644
--- a/sc/source/ui/inc/tpview.hxx
+++ b/sc/source/ui/inc/tpview.hxx
@@ -47,7 +47,8 @@ class ScViewOptions;
 class ScTpContentOptions : public SfxTabPage
 {
     FixedLine       aLinesGB;
-    CheckBox		aGridCB;
+    FixedText       aGridFT;
+    ListBox         aGridLB;
     FixedText		aColorFT;
     ColorListBox	aColorLB;
     CheckBox		aBreakCB;
@@ -89,7 +90,7 @@ class ScTpContentOptions : public SfxTabPage
     ScViewOptions*  pLocalOptions;
 
     void    InitGridOpt();
-    DECL_LINK( GridHdl, CheckBox* );
+    DECL_LINK( GridHdl, ListBox* );
     DECL_LINK( SelLbObjHdl, ListBox* );
     DECL_LINK( CBHdl, CheckBox* );
 
diff --git a/sc/source/ui/optdlg/tpview.cxx b/sc/source/ui/optdlg/tpview.cxx
index ce555fe..197169e 100644
--- a/sc/source/ui/optdlg/tpview.cxx
+++ b/sc/source/ui/optdlg/tpview.cxx
@@ -62,7 +62,8 @@ ScTpContentOptions::ScTpContentOptions( Window*			pParent,
     SfxTabPage(pParent, ScResId( RID_SCPAGE_CONTENT ), rArgSet),
 
     aLinesGB( this,         ScResId(GB_LINES          )),
-    aGridCB( this, 			ScResId(CB_GRID			)),
+    aGridFT( this,         ScResId(FT_GRID            )),
+    aGridLB( this,         ScResId(LB_GRID            )),
     aColorFT( this, 		ScResId(FT_COLOR			)),
     aColorLB( this, 		ScResId(LB_COLOR			)),
     aBreakCB( this,			ScResId(CB_PAGEBREAKS		)),
@@ -108,6 +109,7 @@ ScTpContentOptions::ScTpContentOptions( Window*			pParent,
     aObjGrfLB.  SetSelectHdl(aSelObjHdl);
     aDiagramLB. SetSelectHdl(aSelObjHdl);
     aDrawLB.    SetSelectHdl(aSelObjHdl);
+    aGridLB.    SetSelectHdl( LINK( this, ScTpContentOptions, GridHdl ) );
 
     Link aCBHdl(LINK( this, ScTpContentOptions, CBHdl ) );
     aFormulaCB  .SetClickHdl(aCBHdl);
@@ -127,7 +129,6 @@ ScTpContentOptions::ScTpContentOptions( Window*			pParent,
     aBigHandleCB.SetClickHdl(aCBHdl);
     aRowColHeaderCB.SetClickHdl(aCBHdl);
 
-    aGridCB     .SetClickHdl( LINK( this, ScTpContentOptions, GridHdl ) );
 }
 
 ScTpContentOptions::~ScTpContentOptions()
@@ -153,7 +154,7 @@ sal_Bool	ScTpContentOptions::FillItemSet( SfxItemSet& rCoreSet )
         aObjGrfLB   .GetSavedValue() != aObjGrfLB  	.GetSelectEntryPos() ||
         aDiagramLB  .GetSavedValue() != aDiagramLB 	.GetSelectEntryPos() ||
         aDrawLB     .GetSavedValue() != aDrawLB     .GetSelectEntryPos() ||
-        aGridCB         .GetSavedValue() != aGridCB.IsChecked() ||
+        aGridLB         .GetSavedValue() != aGridLB .GetSelectEntryPos() ||
         aRowColHeaderCB	.GetSavedValue() != aRowColHeaderCB.IsChecked() ||
         aHScrollCB      .GetSavedValue() != aHScrollCB     .IsChecked() ||
         aVScrollCB      .GetSavedValue() != aVScrollCB     .IsChecked() ||
@@ -239,7 +240,7 @@ void	ScTpContentOptions::Reset( const SfxItemSet& rCoreSet )
     aVScrollCB      .SaveValue();
     aTblRegCB       .SaveValue();
     aOutlineCB      .SaveValue();
-    aGridCB         .SaveValue();
+    aGridLB         .SaveValue();
     aColorLB        .SaveValue();
     aBreakCB		.SaveValue();
     aGuideLineCB    .SaveValue();
@@ -310,19 +311,30 @@ IMPL_LINK( ScTpContentOptions, CBHdl, CheckBox*, pBtn )
 
 void ScTpContentOptions::InitGridOpt()
 {
-    sal_Bool bGrid = pLocalOptions->GetOption( VOPT_GRID );
-
-    aGridCB.Check( bGrid );
+    sal_Bool    bGrid = pLocalOptions->GetOption( VOPT_GRID );
+    sal_Bool    bGridOnTop = pLocalOptions->GetOption( VOPT_GRID_ONTOP );
+    sal_uInt16  nSelPos = 0;
 
     if ( bGrid )
+    {
         aColorFT.Enable(), aColorLB.Enable();
+        if ( !bGridOnTop )
+            nSelPos = 0;
+        else
+            nSelPos = 1;
+    }
     else
+    {
         aColorFT.Disable(), aColorLB.Disable();
+        nSelPos = 2;
+    }
+
+    aGridLB.SelectEntryPos (nSelPos);
 
     if ( aColorLB.GetEntryCount() == 0 )
     {
         SfxObjectShell*	pDocSh = SfxObjectShell::Current();
-        // hier koennte auch eine andere DocShell kommen!
+        // there might be another DocShell here
         pDocSh = PTR_CAST(ScDocShell, pDocSh);
 
         XColorTable* pColorTable = NULL;
@@ -344,7 +356,7 @@ void ScTpContentOptions::InitGridOpt()
 
         aColorLB.SetUpdateMode( false );
 
-        //	Eintraege aus der Colortable
+        // items from ColorTable
 
         long nCount = pColorTable->Count();
         for ( long n=0; n<nCount; n++ )
@@ -353,9 +365,9 @@ void ScTpContentOptions::InitGridOpt()
             aColorLB.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
         }
 
-        //	Standard-Gitterfarbe
+        // default GridColor
 
-        Color aStdCol( SC_STD_GRIDCOLOR );			// wie Default in ScViewOptions
+        Color aStdCol( SC_STD_GRIDCOLOR );          // same default as in ScViewOptions
         if ( LISTBOX_ENTRY_NOTFOUND ==
                 aColorLB.GetEntryPos( aStdCol ) )
             aColorLB.InsertEntry( aStdCol, ScGlobal::GetRscString( STR_GRIDCOLOR ) );
@@ -369,7 +381,7 @@ void ScTpContentOptions::InitGridOpt()
 
     String	aName;
     Color	aCol	= pLocalOptions->GetGridColor( &aName );
-    sal_uInt16	nSelPos	= aColorLB.GetEntryPos( aCol );
+    nSelPos	= aColorLB.GetEntryPos( aCol );
 
     if ( LISTBOX_ENTRY_NOTFOUND != nSelPos )
         aColorLB.SelectEntryPos( nSelPos );
@@ -377,12 +389,16 @@ void ScTpContentOptions::InitGridOpt()
         aColorLB.SelectEntryPos( aColorLB.InsertEntry( aCol, aName ) );
 }
 
-IMPL_LINK( ScTpContentOptions, GridHdl, CheckBox*, pBox )
+IMPL_LINK( ScTpContentOptions, GridHdl, ListBox*, pLb )
 {
-    sal_Bool bChecked = pBox->IsChecked();
-    aColorFT.Enable(bChecked);
-    aColorLB.Enable(bChecked);
-    pLocalOptions->SetOption( VOPT_GRID, bChecked );
+    sal_uInt16  nSelPos = pLb->GetSelectEntryPos();
+    sal_Bool    bGrid = ( nSelPos <= 1 );
+    sal_Bool    bGridOnTop = ( nSelPos == 1 );
+
+    aColorFT.Enable(bGridOnTop);
+    aColorLB.Enable(bGridOnTop);
+    pLocalOptions->SetOption( VOPT_GRID, bGrid );
+    pLocalOptions->SetOption( VOPT_GRID_ONTOP, bGridOnTop );
     return 0;
 }
 
diff --git a/sc/source/ui/src/optdlg.src b/sc/source/ui/src/optdlg.src
index b6f9fe3..b1a722c 100644
--- a/sc/source/ui/src/optdlg.src
+++ b/sc/source/ui/src/optdlg.src
@@ -446,13 +446,28 @@ TabPage RID_SCPAGE_CONTENT
         Size = MAP_APPFONT ( 121 , 8 ) ;
         Text [ en-US ] = "Visual aids";
     };
-    CheckBox CB_GRID
+    FixedText FT_GRID
     {
-        HelpID = "sc:CheckBox:RID_SCPAGE_CONTENT:CB_GRID";
+        HelpID = "sc:CheckBox:RID_SCPAGE_CONTENT:FT_GRID";
         Pos = MAP_APPFONT ( 12 , 14 ) ;
-        Size = MAP_APPFONT ( 112 , 10 ) ;
+        Size = MAP_APPFONT ( 40 , 8 ) ;
         Text [ en-US ] = "~Grid lines" ;
     };
+    ListBox LB_GRID
+    {
+        HelpID = "sc:ListBox:RID_SCPAGE_CONTENT:LB_GRID";
+        Pos = MAP_APPFONT ( 54 , 12 ) ;
+        Size = MAP_APPFONT ( 70 , 46 ) ;
+        Border = TRUE ;
+        DropDown = TRUE ;
+        StringList [ en-US ] =
+        {
+            < "Show" ; Default ; > ;
+            < "Show on colored cells" ; Default ; > ;
+            < "Hide" ; Default ; > ;
+        };
+
+    };
     FixedText FT_COLOR
     {
         Pos = MAP_APPFONT ( 21 , 28 ) ;
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index 5046c15..55563d5 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -399,7 +399,6 @@ void ScGridWindow::Draw( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, ScUpdateMod
 {
     ScModule* pScMod = SC_MOD();
     sal_Bool bTextWysiwyg = pScMod->GetInputOptions().GetTextWysiwyg();
-    sal_Bool bGridFirst = true;     //! entscheiden!!!
 
     if (pViewData->IsMinimized())
         return;
@@ -543,6 +542,7 @@ void ScGridWindow::Draw( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, ScUpdateMod
     aOutputData.SetViewShell( pViewData->GetViewShell() );
 
     sal_Bool bGrid = rOpts.GetOption( VOPT_GRID ) && pViewData->GetShowGrid();
+    sal_Bool bGridFirst = !rOpts.GetOption( VOPT_GRID_ONTOP );
 
     sal_Bool bPage = rOpts.GetOption( VOPT_PAGEBREAKS );
 
-- 
1.7.3.4


--------------090700030307090504080503
Content-Type: text/x-patch;
 name="0001-fix-for-fdo-30800-Option-to-display-grid-l.libs-core.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
 filename*0="0001-fix-for-fdo-30800-Option-to-display-grid-l.libs-core.pa";
 filename*1="tch"



More information about the LibreOffice mailing list