LibreOffice Module svx (master)  1
xtabcolr.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <memory>
21 #include <XPropertyTable.hxx>
22 #include <unotools/configmgr.hxx>
23 #include <unotools/pathoptions.hxx>
24 
25 #include <svx/strings.hrc>
26 #include <svx/dialmgr.hxx>
27 #include <svx/xtable.hxx>
28 #include <svx/xpool.hxx>
29 
30 using namespace com::sun::star;
31 
33 {
37  SvtPathOptions().GetPalettePath() :
38  "", ""));
39 }
40 
42 {
43  XColorListRef aTable( CreateStdColorList() );
44  return aTable;
45 }
46 
47 void XColorList::Replace(long nIndex, std::unique_ptr<XColorEntry> pEntry)
48 {
49  XPropertyList::Replace(std::move(pEntry), nIndex);
50 }
51 XColorEntry* XColorList::GetColor(long nIndex) const
52 {
53  return static_cast<XColorEntry*>( XPropertyList::Get(nIndex) );
54 }
55 
56 uno::Reference< container::XNameContainer > XColorList::createInstance()
57 {
58  return uno::Reference< container::XNameContainer >(
60  uno::UNO_QUERY );
61 }
62 
64 {
65  sal_uInt32 a(0);
66  sal_uInt32 b(0);
67 
68  // <!-- Gray palette from white to black -->
69  const OUString aStrGrey( SvxResId( RID_SVXSTR_COLOR_GREY ) );
70 
71  Insert( std::make_unique<XColorEntry>( Color( 0xff, 0xff, 0xff ), SvxResId( RID_SVXSTR_COLOR_WHITE ) ) );
72  Insert( std::make_unique<XColorEntry>( Color( 0xee, 0xee, 0xee ), aStrGrey + " 1" ) );
73  Insert( std::make_unique<XColorEntry>( Color( 0xdd, 0xdd, 0xdd ), aStrGrey + " 2" ) );
74  Insert( std::make_unique<XColorEntry>( Color( 0xcc, 0xcc, 0xcc ), aStrGrey + " 3" ) );
75  Insert( std::make_unique<XColorEntry>( Color( 0xb2, 0xb2, 0xb2 ), aStrGrey + " 4" ) );
76  Insert( std::make_unique<XColorEntry>( Color( 0x99, 0x99, 0x99 ), aStrGrey + " 5" ) );
77  Insert( std::make_unique<XColorEntry>( Color( 0x80, 0x80, 0x80 ), aStrGrey + " 6" ) );
78  Insert( std::make_unique<XColorEntry>( Color( 0x66, 0x66, 0x66 ), aStrGrey + " 7" ) );
79  Insert( std::make_unique<XColorEntry>( Color( 0x33, 0x33, 0x33 ), aStrGrey + " 8" ) );
80  Insert( std::make_unique<XColorEntry>( Color( 0x1c, 0x1c, 0x1c ), aStrGrey + " 9" ) );
81  Insert( std::make_unique<XColorEntry>( Color( 0x11, 0x11, 0x11 ), aStrGrey + " 10") );
82  Insert( std::make_unique<XColorEntry>( Color( 0x00, 0x00, 0x00 ), SvxResId( RID_SVXSTR_COLOR_BLACK ) ) );
83 
84  // <!-- Base colors step 0 to 10 -->
85  const sal_uInt32 nNumColorsInGroup(12);
86  const sal_uInt32 nNumGroups(11);
87  const OUString aStrCol[nNumColorsInGroup] = {
88  SvxResId(RID_SVXSTR_COLOR_YELLOW),
89  SvxResId(RID_SVXSTR_COLOR_ORANGE),
90  SvxResId(RID_SVXSTR_COLOR_RED),
91  SvxResId(RID_SVXSTR_COLOR_PINK),
92  SvxResId(RID_SVXSTR_COLOR_MAGENTA),
93  SvxResId(RID_SVXSTR_COLOR_PURPLE),
94  SvxResId(RID_SVXSTR_COLOR_BLUE),
95  SvxResId(RID_SVXSTR_COLOR_SKYBLUE),
96  SvxResId(RID_SVXSTR_COLOR_CYAN),
97  SvxResId(RID_SVXSTR_COLOR_TURQUOISE),
98  SvxResId(RID_SVXSTR_COLOR_GREEN),
99  SvxResId(RID_SVXSTR_COLOR_YELLOWGREEN) };
100  static const sal_uInt32 aStdCol[nNumColorsInGroup * nNumGroups] = {
101  0xffff99, 0xff6600, 0xff3333, 0xff00cc, 0xff33ff, 0x9900ff, 0x6666ff, 0x00ccff, 0x66ffff, 0x33ff99, 0x99ff66, 0xccff00,
102  0xffff66, 0xffcc00, 0xff9999, 0xff66cc, 0xff99ff, 0xcc66ff, 0x9999ff, 0x9999ff, 0x99ffff, 0x66ff99, 0x99ff99, 0xccff66,
103  0xffff00, 0xff9900, 0xff6666, 0xff3399, 0xff66ff, 0x9933ff, 0x3333ff, 0x3399ff, 0x00ffff, 0x00ff66, 0x66ff66, 0x99ff33,
104  0xcc9900, 0xff3300, 0xff0000, 0xff0066, 0xff00ff, 0x6600ff, 0x0000ff, 0x0066ff, 0x00cccc, 0x00cc33, 0x00cc00, 0x66ff00,
105  0x996600, 0xcc3300, 0xcc0000, 0xcc0066, 0xcc00cc, 0x6600cc, 0x0000cc, 0x0066cc, 0x009999, 0x009933, 0x009900, 0x66cc00,
106  0x663300, 0x801900, 0x990000, 0x990066, 0x990099, 0x330099, 0x000099, 0x006699, 0x006666, 0x007826, 0x006600, 0x669900,
107  0x333300, 0x461900, 0x330000, 0x330033, 0x660066, 0x000033, 0x000066, 0x000080, 0x003333, 0x00331a, 0x003300, 0x193300,
108  0x666633, 0x661900, 0x663333, 0x660033, 0x663366, 0x330066, 0x333366, 0x003366, 0x336666, 0x006633, 0x336633, 0x336600,
109  0x999966, 0x996633, 0x996666, 0x993366, 0x996699, 0x663399, 0x666699, 0x336699, 0x669999, 0x339966, 0x669966, 0x669933,
110  0xcccc99, 0xcc9966, 0xcc9999, 0xcc6699, 0xcc99cc, 0x9966cc, 0x9999cc, 0x6699cc, 0x99cccc, 0x66cc99, 0x99cc99, 0x99cc66,
111  0xffffcc, 0xffcc99, 0xffcccc, 0xff99cc, 0xffccff, 0xcc99ff, 0xccccff, 0x99ccff, 0xccffff, 0x99ffcc, 0xccffcc, 0xccff99 };
112 
113  for(a = 0; a < nNumGroups; a++)
114  {
115  OUString aSuffix;
116  if (a > 0) aSuffix = OUString::number(a);
117 
118  const sal_uInt32 nOffset(a * nNumColorsInGroup);
119 
120  for(b = 0; b < nNumColorsInGroup; b++)
121  {
122  Insert( std::make_unique<XColorEntry>( Color(aStdCol[nOffset + b]), aStrCol[b] + aSuffix ) );
123  }
124  }
125 
126  // <!-- use some 'nice' colors from original palette -->
127  Insert( std::make_unique<XColorEntry>( Color( 0xe6, 0xe6, 0xff ), SvxResId( RID_SVXSTR_COLOR_BLUEGREY) ) );
128  Insert( std::make_unique<XColorEntry>( Color( 0xCF, 0xE7, 0xF5 ), SvxResId( RID_SVXSTR_COLOR_BLUE_CLASSIC ) ) );
129 
130  // <!-- add 'pale' colors from original palette -->
131  Insert( std::make_unique<XColorEntry>( Color( 0x99, 0x99, 0xff ), SvxResId( RID_SVXSTR_COLOR_VIOLET ) ) );
132  Insert( std::make_unique<XColorEntry>( Color( 0x99, 0x33, 0x66 ), SvxResId( RID_SVXSTR_COLOR_BORDEAUX ) ) );
133  Insert( std::make_unique<XColorEntry>( Color( 0xff, 0xff, 0xcc ), SvxResId( RID_SVXSTR_COLOR_PALE_YELLOW ) ) );
134  Insert( std::make_unique<XColorEntry>( Color( 0xcc, 0xff, 0xff ), SvxResId( RID_SVXSTR_COLOR_PALE_GREEN ) ) );
135  Insert( std::make_unique<XColorEntry>( Color( 0x66, 0x00, 0x66 ), SvxResId( RID_SVXSTR_COLOR_DARKVIOLET ) ) );
136  Insert( std::make_unique<XColorEntry>( Color( 0xff, 0x80, 0x80 ), SvxResId( RID_SVXSTR_COLOR_SALMON ) ) );
137  Insert( std::make_unique<XColorEntry>( Color( 0x00, 0x66, 0xcc ), SvxResId( RID_SVXSTR_COLOR_SEABLUE ) ) );
138 
139  // <!-- add Chart colors from original palette (also 12, coincidence?) -->
140  const OUString aStrChart( SvxResId( RID_SVXSTR_COLOR_CHART ) );
141  Insert( std::make_unique<XColorEntry>( Color( 0x00, 0x45, 0x86 ), aStrChart + " 1" ) );
142  Insert( std::make_unique<XColorEntry>( Color( 0xff, 0x42, 0x0e ), aStrChart + " 2" ) );
143  Insert( std::make_unique<XColorEntry>( Color( 0xff, 0xd3, 0x20 ), aStrChart + " 3" ) );
144  Insert( std::make_unique<XColorEntry>( Color( 0x57, 0x9d, 0x1c ), aStrChart + " 4" ) );
145  Insert( std::make_unique<XColorEntry>( Color( 0x7e, 0x00, 0x21 ), aStrChart + " 5" ) );
146  Insert( std::make_unique<XColorEntry>( Color( 0x83, 0xca, 0xff ), aStrChart + " 6" ) );
147  Insert( std::make_unique<XColorEntry>( Color( 0x31, 0x40, 0x04 ), aStrChart + " 7" ) );
148  Insert( std::make_unique<XColorEntry>( Color( 0xae, 0xcf, 0x00 ), aStrChart + " 8" ) );
149  Insert( std::make_unique<XColorEntry>( Color( 0x4b, 0x1f, 0x6f ), aStrChart + " 9" ) );
150  Insert( std::make_unique<XColorEntry>( Color( 0xff, 0x95, 0x0e ), aStrChart + " 10" ) );
151  Insert( std::make_unique<XColorEntry>( Color( 0xc5, 0x00, 0x0b ), aStrChart + " 11" ) );
152  Insert( std::make_unique<XColorEntry>( Color( 0x00, 0x84, 0xd1 ), aStrChart + " 12" ) );
153 
154  return(165 == Count());
155 }
156 
158 {
159  return BitmapEx();
160 }
161 
162 long XColorList::GetIndexOfColor( const Color& rColor ) const
163 {
164  for( long i = 0, n = maList.size(); i < n; ++i )
165  {
166  const Color aColor = static_cast<XColorEntry*>( maList[i].get() )->GetColor();
167 
168  if (aColor == rColor )
169  return i;
170  }
171 
172  return -1;
173 }
174 
175 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
XPropertyEntry * Get(long nIndex) const
Definition: xtable.cxx:135
static XColorListRef CreateStdColorList()
Definition: xtabcolr.cxx:32
sal_Int64 n
virtual bool Create() override
Definition: xtabcolr.cxx:63
void Replace(std::unique_ptr< XPropertyEntry > pEntry, long nIndex)
Definition: xtable.cxx:196
OUString SvxResId(const char *pId)
Definition: dialmgr.cxx:28
virtual BitmapEx CreateBitmapForUI(long nIndex) override
Definition: xtabcolr.cxx:157
static bool IsFuzzing()
static XColorListRef GetStdColorList()
Definition: xtabcolr.cxx:41
long GetIndexOfColor(const Color &rColor) const
Definition: xtabcolr.cxx:162
static XColorListRef AsColorList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:386
XColorEntry * GetColor(long nIndex) const
Definition: xtabcolr.cxx:51
uno_Any a
Count
int i
virtual css::uno::Reference< css::container::XNameContainer > createInstance() override
Definition: xtabcolr.cxx:56
static XPropertyListRef CreatePropertyList(XPropertyListType t, const OUString &rPath, const OUString &rReferer)
Definition: xtable.cxx:319
void Replace(long nIndex, std::unique_ptr< XColorEntry > pEntry)
Definition: xtabcolr.cxx:47
uno::Reference< uno::XInterface > SvxUnoXColorTable_createInstance(XPropertyList *pList)