Skip to content

Commit

Permalink
add support for more tabColor options and split RGB qax-os#1283
Browse files Browse the repository at this point in the history
This commit renames `TabColor` into `TabColorRGB` (but keeps an alias
for backwards compatibility), as well as adds support for more tab color
  options (Theme, Indexed and Tint).

Signed-off-by: Thomas Charbonnel <[email protected]>
  • Loading branch information
Thomas Charbonnel committed Jul 25, 2022
1 parent ebea684 commit 82276b9
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 14 deletions.
95 changes: 90 additions & 5 deletions sheetpr.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,42 @@ type (
Published bool
// FitToPage is a SheetPrOption
FitToPage bool
// TabColor is a SheetPrOption
TabColor string
// TabColorIndexed is a TabColor option, within SheetPrOption
TabColorIndexed int
// TabColorRGB is a TabColor option, within SheetPrOption
TabColorRGB string
// TabColorTheme is a TabColor option, within SheetPrOption
TabColorTheme int
// TabColorTint is a TabColor option, within SheetPrOption
TabColorTint float64
// Equivalent to TabColorRGB, alias added for backwards compatibility
TabColor = TabColorRGB
// AutoPageBreaks is a SheetPrOption
AutoPageBreaks bool
// OutlineSummaryBelow is an outlinePr, within SheetPr option
OutlineSummaryBelow bool
)

const (
TabColorThemeUnset int = iota - 1
TabColorThemeLight1 // Inverted compared to the spec because that's how Excel maps them
TabColorThemeDark1
TabColorThemeLight2
TabColorThemeDark2
TabColorThemeAccent1
TabColorThemeAccent2
TabColorThemeAccent3
TabColorThemeAccent4
TabColorThemeAccent5
TabColorThemeAccent6
TabColorThemeHyperlink
TabColorThemeFollowedHyperlink

TabColorIndexedUnset int = -1

TabColorTintUnset float64 = -2.0
)

// setSheetPrOption implements the SheetPrOption interface.
func (o OutlineSummaryBelow) setSheetPrOption(pr *xlsxSheetPr) {
if pr.OutlinePr == nil {
Expand Down Expand Up @@ -129,9 +157,28 @@ func (o *FitToPage) getSheetPrOption(pr *xlsxSheetPr) {
*o = FitToPage(pr.PageSetUpPr.FitToPage)
}

// setSheetPrOption implements the SheetPrOption interface and sets the
// TabColor Indexed.
func (o TabColorIndexed) setSheetPrOption(pr *xlsxSheetPr) {
if pr.TabColor == nil {
pr.TabColor = new(xlsxTabColor)
}
pr.TabColor.Indexed = int(o)
}

// getSheetPrOption implements the SheetPrOptionPtr interface and gets the
// TabColor Indexed. Defaults to -1 if no theme has been set.
func (o *TabColorIndexed) getSheetPrOption(pr *xlsxSheetPr) {
if pr == nil || pr.TabColor == nil {
*o = TabColorIndexed(TabColorIndexedUnset)
return
}
*o = TabColorIndexed(pr.TabColor.Indexed)
}

// setSheetPrOption implements the SheetPrOption interface and specifies a
// stable name of the sheet.
func (o TabColor) setSheetPrOption(pr *xlsxSheetPr) {
func (o TabColorRGB) setSheetPrOption(pr *xlsxSheetPr) {
if pr.TabColor == nil {
if string(o) == "" {
return
Expand All @@ -143,12 +190,50 @@ func (o TabColor) setSheetPrOption(pr *xlsxSheetPr) {

// getSheetPrOption implements the SheetPrOptionPtr interface and get the
// stable name of the sheet.
func (o *TabColor) getSheetPrOption(pr *xlsxSheetPr) {
func (o *TabColorRGB) getSheetPrOption(pr *xlsxSheetPr) {
if pr == nil || pr.TabColor == nil {
*o = ""
return
}
*o = TabColor(strings.TrimPrefix(pr.TabColor.RGB, "FF"))
*o = TabColorRGB(strings.TrimPrefix(pr.TabColor.RGB, "FF"))
}

// setSheetPrOption implements the SheetPrOption interface and sets the
// TabColor Theme. Warning: it does not create a clrScheme!
func (o TabColorTheme) setSheetPrOption(pr *xlsxSheetPr) {
if pr.TabColor == nil {
pr.TabColor = new(xlsxTabColor)
}
pr.TabColor.Theme = int(o)
}

// getSheetPrOption implements the SheetPrOptionPtr interface and gets the
// TabColor Theme. Defaults to -1 if no theme has been set.
func (o *TabColorTheme) getSheetPrOption(pr *xlsxSheetPr) {
if pr == nil || pr.TabColor == nil {
*o = TabColorTheme(TabColorThemeUnset)
return
}
*o = TabColorTheme(pr.TabColor.Theme)
}

// setSheetPrOption implements the SheetPrOption interface and sets the
// TabColor Tint.
func (o TabColorTint) setSheetPrOption(pr *xlsxSheetPr) {
if pr.TabColor == nil {
pr.TabColor = new(xlsxTabColor)
}
pr.TabColor.Tint = float64(o)
}

// getSheetPrOption implements the SheetPrOptionPtr interface and gets the
// TabColor Tint. Defaults to -2.0 if no theme has been set.
func (o *TabColorTint) getSheetPrOption(pr *xlsxSheetPr) {
if pr == nil || pr.TabColor == nil {
*o = TabColorTint(TabColorTintUnset)
return
}
*o = TabColorTint(pr.TabColor.Tint)
}

// setSheetPrOption implements the SheetPrOption interface.
Expand Down
42 changes: 33 additions & 9 deletions sheetpr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ var _ = []SheetPrOption{
EnableFormatConditionsCalculation(false),
Published(false),
FitToPage(true),
TabColor("#FFFF00"),
TabColorIndexed(42),
TabColorRGB("#FFFF00"),
TabColorTheme(TabColorThemeLight2),
TabColorTint(0.5),
AutoPageBreaks(true),
OutlineSummaryBelow(true),
}
Expand All @@ -23,7 +26,10 @@ var _ = []SheetPrOptionPtr{
(*EnableFormatConditionsCalculation)(nil),
(*Published)(nil),
(*FitToPage)(nil),
(*TabColor)(nil),
(*TabColorIndexed)(nil),
(*TabColorRGB)(nil),
(*TabColorTheme)(nil),
(*TabColorTint)(nil),
(*AutoPageBreaks)(nil),
(*OutlineSummaryBelow)(nil),
}
Expand All @@ -37,7 +43,10 @@ func ExampleFile_SetSheetPrOptions() {
EnableFormatConditionsCalculation(false),
Published(false),
FitToPage(true),
TabColor("#FFFF00"),
TabColorIndexed(42),
TabColorRGB("#FFFF00"),
TabColorTheme(TabColorThemeLight2),
TabColorTint(0.5),
AutoPageBreaks(true),
OutlineSummaryBelow(false),
); err != nil {
Expand All @@ -55,7 +64,10 @@ func ExampleFile_GetSheetPrOptions() {
enableFormatConditionsCalculation EnableFormatConditionsCalculation
published Published
fitToPage FitToPage
tabColor TabColor
tabColorIndexed TabColorIndexed
tabColorRGB TabColorRGB
tabColorTheme TabColorTheme
tabColorTint TabColorTint
autoPageBreaks AutoPageBreaks
outlineSummaryBelow OutlineSummaryBelow
)
Expand All @@ -65,7 +77,10 @@ func ExampleFile_GetSheetPrOptions() {
&enableFormatConditionsCalculation,
&published,
&fitToPage,
&tabColor,
&tabColorIndexed,
&tabColorRGB,
&tabColorTheme,
&tabColorTint,
&autoPageBreaks,
&outlineSummaryBelow,
); err != nil {
Expand All @@ -76,7 +91,10 @@ func ExampleFile_GetSheetPrOptions() {
fmt.Println("- enableFormatConditionsCalculation:", enableFormatConditionsCalculation)
fmt.Println("- published:", published)
fmt.Println("- fitToPage:", fitToPage)
fmt.Printf("- tabColor: %q\n", tabColor)
fmt.Printf("- tabColorIndexed: %d\n", tabColorIndexed)
fmt.Printf("- tabColorRGB: %q\n", tabColorRGB)
fmt.Printf("- tabColorTheme: %d\n", tabColorTheme)
fmt.Printf("- tabColorTint: %f\n", tabColorTint)
fmt.Println("- autoPageBreaks:", autoPageBreaks)
fmt.Println("- outlineSummaryBelow:", outlineSummaryBelow)
// Output:
Expand All @@ -85,7 +103,10 @@ func ExampleFile_GetSheetPrOptions() {
// - enableFormatConditionsCalculation: true
// - published: true
// - fitToPage: false
// - tabColor: ""
// - tabColorIndexed: -1
// - tabColorRGB: ""
// - tabColorTheme: -1
// - tabColorTint: -2.000000
// - autoPageBreaks: false
// - outlineSummaryBelow: true
}
Expand All @@ -101,7 +122,10 @@ func TestSheetPrOptions(t *testing.T) {
{new(EnableFormatConditionsCalculation), EnableFormatConditionsCalculation(false)},
{new(Published), Published(false)},
{new(FitToPage), FitToPage(true)},
{new(TabColor), TabColor("FFFF00")},
{new(TabColorIndexed), TabColorIndexed(42)},
{new(TabColorRGB), TabColorRGB("FFFF00")},
{new(TabColorTheme), TabColorTheme(TabColorThemeLight2)},
{new(TabColorTint), TabColorTint(0.5)},
{new(AutoPageBreaks), AutoPageBreaks(true)},
{new(OutlineSummaryBelow), OutlineSummaryBelow(false)},
}
Expand Down Expand Up @@ -154,7 +178,7 @@ func TestSheetPrOptions(t *testing.T) {

func TestSetSheetPrOptions(t *testing.T) {
f := NewFile()
assert.NoError(t, f.SetSheetPrOptions("Sheet1", TabColor("")))
assert.NoError(t, f.SetSheetPrOptions("Sheet1", TabColorRGB("")))
// Test SetSheetPrOptions on not exists worksheet.
assert.EqualError(t, f.SetSheetPrOptions("SheetN"), "sheet SheetN is not exist")
}
Expand Down

0 comments on commit 82276b9

Please sign in to comment.