1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
21 #include <XPropertyTable.hxx>
22 #include <unotools/configmgr.hxx>
23 #include <unotools/pathoptions.hxx>
25 #include <svx/strings.hrc>
26 #include <svx/dialmgr.hxx>
27 #include <svx/xtable.hxx>
29 using namespace com::sun::star
;
31 XColorListRef
XColorList::CreateStdColorList()
33 return XPropertyList::AsColorList(
34 XPropertyList::CreatePropertyList(
35 XPropertyListType::Color
, !utl::ConfigManager::IsFuzzing() ?
36 SvtPathOptions().GetPalettePath() :
40 XColorListRef
XColorList::GetStdColorList()
42 XColorListRef
aTable( CreateStdColorList() );
46 void XColorList::Replace(tools::Long nIndex
, std::unique_ptr
<XColorEntry
> pEntry
)
48 XPropertyList::Replace(std::move(pEntry
), nIndex
);
50 XColorEntry
* XColorList::GetColor(tools::Long nIndex
) const
52 return static_cast<XColorEntry
*>( XPropertyList::Get(nIndex
) );
55 uno::Reference
< container::XNameContainer
> XColorList::createInstance()
57 return uno::Reference
< container::XNameContainer
>(
58 SvxUnoXColorTable_createInstance( this ),
62 bool XColorList::Create()
67 // <!-- Gray palette from white to black -->
68 const OUString
aStrGrey( SvxResId( RID_SVXSTR_COLOR_GREY
) );
70 Insert( std::make_unique
<XColorEntry
>( Color( 0xff, 0xff, 0xff ), SvxResId( RID_SVXSTR_COLOR_WHITE
) ) );
71 Insert( std::make_unique
<XColorEntry
>( Color( 0xee, 0xee, 0xee ), aStrGrey
+ " 1" ) );
72 Insert( std::make_unique
<XColorEntry
>( Color( 0xdd, 0xdd, 0xdd ), aStrGrey
+ " 2" ) );
73 Insert( std::make_unique
<XColorEntry
>( Color( 0xcc, 0xcc, 0xcc ), aStrGrey
+ " 3" ) );
74 Insert( std::make_unique
<XColorEntry
>( Color( 0xb2, 0xb2, 0xb2 ), aStrGrey
+ " 4" ) );
75 Insert( std::make_unique
<XColorEntry
>( Color( 0x99, 0x99, 0x99 ), aStrGrey
+ " 5" ) );
76 Insert( std::make_unique
<XColorEntry
>( Color( 0x80, 0x80, 0x80 ), aStrGrey
+ " 6" ) );
77 Insert( std::make_unique
<XColorEntry
>( Color( 0x66, 0x66, 0x66 ), aStrGrey
+ " 7" ) );
78 Insert( std::make_unique
<XColorEntry
>( Color( 0x33, 0x33, 0x33 ), aStrGrey
+ " 8" ) );
79 Insert( std::make_unique
<XColorEntry
>( Color( 0x1c, 0x1c, 0x1c ), aStrGrey
+ " 9" ) );
80 Insert( std::make_unique
<XColorEntry
>( Color( 0x11, 0x11, 0x11 ), aStrGrey
+ " 10") );
81 Insert( std::make_unique
<XColorEntry
>( Color( 0x00, 0x00, 0x00 ), SvxResId( RID_SVXSTR_COLOR_BLACK
) ) );
83 // <!-- Base colors step 0 to 10 -->
84 const sal_uInt32
nNumColorsInGroup(12);
85 const sal_uInt32
nNumGroups(11);
86 const OUString aStrCol
[nNumColorsInGroup
] = {
87 SvxResId(RID_SVXSTR_COLOR_YELLOW
),
88 SvxResId(RID_SVXSTR_COLOR_ORANGE
),
89 SvxResId(RID_SVXSTR_COLOR_RED
),
90 SvxResId(RID_SVXSTR_COLOR_PINK
),
91 SvxResId(RID_SVXSTR_COLOR_MAGENTA
),
92 SvxResId(RID_SVXSTR_COLOR_PURPLE
),
93 SvxResId(RID_SVXSTR_COLOR_BLUE
),
94 SvxResId(RID_SVXSTR_COLOR_SKYBLUE
),
95 SvxResId(RID_SVXSTR_COLOR_CYAN
),
96 SvxResId(RID_SVXSTR_COLOR_TURQUOISE
),
97 SvxResId(RID_SVXSTR_COLOR_GREEN
),
98 SvxResId(RID_SVXSTR_COLOR_YELLOWGREEN
) };
99 static const sal_uInt32 aStdCol
[nNumColorsInGroup
* nNumGroups
] = {
100 0xffff99, 0xff6600, 0xff3333, 0xff00cc, 0xff33ff, 0x9900ff, 0x6666ff, 0x00ccff, 0x66ffff, 0x33ff99, 0x99ff66, 0xccff00,
101 0xffff66, 0xffcc00, 0xff9999, 0xff66cc, 0xff99ff, 0xcc66ff, 0x9999ff, 0x9999ff, 0x99ffff, 0x66ff99, 0x99ff99, 0xccff66,
102 0xffff00, 0xff9900, 0xff6666, 0xff3399, 0xff66ff, 0x9933ff, 0x3333ff, 0x3399ff, 0x00ffff, 0x00ff66, 0x66ff66, 0x99ff33,
103 0xcc9900, 0xff3300, 0xff0000, 0xff0066, 0xff00ff, 0x6600ff, 0x0000ff, 0x0066ff, 0x00cccc, 0x00cc33, 0x00cc00, 0x66ff00,
104 0x996600, 0xcc3300, 0xcc0000, 0xcc0066, 0xcc00cc, 0x6600cc, 0x0000cc, 0x0066cc, 0x009999, 0x009933, 0x009900, 0x66cc00,
105 0x663300, 0x801900, 0x990000, 0x990066, 0x990099, 0x330099, 0x000099, 0x006699, 0x006666, 0x007826, 0x006600, 0x669900,
106 0x333300, 0x461900, 0x330000, 0x330033, 0x660066, 0x000033, 0x000066, 0x000080, 0x003333, 0x00331a, 0x003300, 0x193300,
107 0x666633, 0x661900, 0x663333, 0x660033, 0x663366, 0x330066, 0x333366, 0x003366, 0x336666, 0x006633, 0x336633, 0x336600,
108 0x999966, 0x996633, 0x996666, 0x993366, 0x996699, 0x663399, 0x666699, 0x336699, 0x669999, 0x339966, 0x669966, 0x669933,
109 0xcccc99, 0xcc9966, 0xcc9999, 0xcc6699, 0xcc99cc, 0x9966cc, 0x9999cc, 0x6699cc, 0x99cccc, 0x66cc99, 0x99cc99, 0x99cc66,
110 0xffffcc, 0xffcc99, 0xffcccc, 0xff99cc, 0xffccff, 0xcc99ff, 0xccccff, 0x99ccff, 0xccffff, 0x99ffcc, 0xccffcc, 0xccff99 };
112 for(a
= 0; a
< nNumGroups
; a
++)
115 if (a
> 0) aSuffix
= OUString::number(a
);
117 const sal_uInt32
nOffset(a
* nNumColorsInGroup
);
119 for(b
= 0; b
< nNumColorsInGroup
; b
++)
121 Insert( std::make_unique
<XColorEntry
>( Color(ColorTransparency
, aStdCol
[nOffset
+ b
]), aStrCol
[b
] + aSuffix
) );
125 // <!-- use some 'nice' colors from original palette -->
126 Insert( std::make_unique
<XColorEntry
>( Color( 0xe6, 0xe6, 0xff ), SvxResId( RID_SVXSTR_COLOR_BLUEGREY
) ) );
127 Insert( std::make_unique
<XColorEntry
>( Color( 0xCF, 0xE7, 0xF5 ), SvxResId( RID_SVXSTR_COLOR_BLUE_CLASSIC
) ) );
129 // <!-- add 'pale' colors from original palette -->
130 Insert( std::make_unique
<XColorEntry
>( Color( 0x99, 0x99, 0xff ), SvxResId( RID_SVXSTR_COLOR_VIOLET
) ) );
131 Insert( std::make_unique
<XColorEntry
>( Color( 0x99, 0x33, 0x66 ), SvxResId( RID_SVXSTR_COLOR_BORDEAUX
) ) );
132 Insert( std::make_unique
<XColorEntry
>( Color( 0xff, 0xff, 0xcc ), SvxResId( RID_SVXSTR_COLOR_PALE_YELLOW
) ) );
133 Insert( std::make_unique
<XColorEntry
>( Color( 0xcc, 0xff, 0xff ), SvxResId( RID_SVXSTR_COLOR_PALE_GREEN
) ) );
134 Insert( std::make_unique
<XColorEntry
>( Color( 0x66, 0x00, 0x66 ), SvxResId( RID_SVXSTR_COLOR_DARKVIOLET
) ) );
135 Insert( std::make_unique
<XColorEntry
>( Color( 0xff, 0x80, 0x80 ), SvxResId( RID_SVXSTR_COLOR_SALMON
) ) );
136 Insert( std::make_unique
<XColorEntry
>( Color( 0x00, 0x66, 0xcc ), SvxResId( RID_SVXSTR_COLOR_SEABLUE
) ) );
138 // <!-- add Chart colors from original palette (also 12, coincidence?) -->
139 const OUString
aStrChart( SvxResId( RID_SVXSTR_COLOR_CHART
) );
140 Insert( std::make_unique
<XColorEntry
>( Color( 0x00, 0x45, 0x86 ), aStrChart
+ " 1" ) );
141 Insert( std::make_unique
<XColorEntry
>( Color( 0xff, 0x42, 0x0e ), aStrChart
+ " 2" ) );
142 Insert( std::make_unique
<XColorEntry
>( Color( 0xff, 0xd3, 0x20 ), aStrChart
+ " 3" ) );
143 Insert( std::make_unique
<XColorEntry
>( Color( 0x57, 0x9d, 0x1c ), aStrChart
+ " 4" ) );
144 Insert( std::make_unique
<XColorEntry
>( Color( 0x7e, 0x00, 0x21 ), aStrChart
+ " 5" ) );
145 Insert( std::make_unique
<XColorEntry
>( Color( 0x83, 0xca, 0xff ), aStrChart
+ " 6" ) );
146 Insert( std::make_unique
<XColorEntry
>( Color( 0x31, 0x40, 0x04 ), aStrChart
+ " 7" ) );
147 Insert( std::make_unique
<XColorEntry
>( Color( 0xae, 0xcf, 0x00 ), aStrChart
+ " 8" ) );
148 Insert( std::make_unique
<XColorEntry
>( Color( 0x4b, 0x1f, 0x6f ), aStrChart
+ " 9" ) );
149 Insert( std::make_unique
<XColorEntry
>( Color( 0xff, 0x95, 0x0e ), aStrChart
+ " 10" ) );
150 Insert( std::make_unique
<XColorEntry
>( Color( 0xc5, 0x00, 0x0b ), aStrChart
+ " 11" ) );
151 Insert( std::make_unique
<XColorEntry
>( Color( 0x00, 0x84, 0xd1 ), aStrChart
+ " 12" ) );
153 return(165 == Count());
156 BitmapEx
XColorList::CreateBitmapForUI( tools::Long
/*nIndex*/ )
161 tools::Long
XColorList::GetIndexOfColor( const Color
& rColor
) const
163 for( tools::Long i
= 0, n
= maList
.size(); i
< n
; ++i
)
165 const Color aColor
= static_cast<XColorEntry
*>( maList
[i
].get() )->GetColor();
167 if (aColor
== rColor
)
174 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */