xref: /trunk/main/svx/source/xoutdev/xtabcolr.cxx (revision 0d4ba6f965e72ea5d32a4869e5572bd93ba7cae0)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 // MARKER(update_precomp.py): autogen include statement, do not remove
23 #include "precompiled_svx.hxx"
24 
25 #include <com/sun/star/container/XNameContainer.hpp>
26 #include "svx/XPropertyTable.hxx"
27 #include <unotools/ucbstreamhelper.hxx>
28 #include <unotools/pathoptions.hxx>
29 #include "xmlxtexp.hxx"
30 #include "xmlxtimp.hxx"
31 #include <sfx2/docfile.hxx>
32 #include <tools/urlobj.hxx>
33 #include <svx/dialogs.hrc>
34 #include <svx/dialmgr.hxx>
35 #include <svx/xtable.hxx>
36 #include <svx/xpool.hxx>
37 
38 #define GLOBALOVERFLOW
39 
40 using namespace com::sun::star;
41 using namespace rtl;
42 
43 sal_Unicode const pszExtColor[]  = {'s','o','c'};
44 
45 static char const aChckColor[]  = { 0x04, 0x00, 'S','O','C','L'};   // < 5.2
46 static char const aChckColor0[] = { 0x04, 0x00, 'S','O','C','0'};   // = 5.2
47 static char const aChckXML[]    = { '<', '?', 'x', 'm', 'l' };      // = 6.0
48 
49 /*************************************************************************
50 |*
51 |* XColorList::XColorList()
52 |*
53 *************************************************************************/
54 
55 static XColorListSharedPtr aStaticGlobalColorList;
56 
57 XColorList::XColorList( const String& rPath ) :
58                 XPropertyList( rPath )
59 {
60 }
61 
62 /************************************************************************/
63 
64 XColorList::~XColorList()
65 {
66 }
67 
68 /************************************************************************/
69 
70 XColorEntry* XColorList::Replace(XColorEntry* pEntry, long nIndex )
71 {
72     return (XColorEntry*) XPropertyList::Replace(pEntry, nIndex);
73 }
74 
75 /************************************************************************/
76 
77 XColorEntry* XColorList::Remove(long nIndex)
78 {
79     return (XColorEntry*) XPropertyList::Remove(nIndex);
80 }
81 
82 /************************************************************************/
83 
84 XColorEntry* XColorList::GetColor(long nIndex) const
85 {
86     return (XColorEntry*) XPropertyList::Get(nIndex);
87 }
88 
89 /************************************************************************/
90 
91 sal_Bool XColorList::Load()
92 {
93     if( mbListDirty )
94     {
95         mbListDirty = false;
96 
97         INetURLObject aURL( maPath );
98 
99         if( INET_PROT_NOT_VALID == aURL.GetProtocol() )
100         {
101             OSL_ENSURE( !maPath.Len(), "invalid URL" );
102             return sal_False;
103         }
104 
105         aURL.Append( maName );
106 
107         if( !aURL.getExtension().getLength() )
108             aURL.setExtension( rtl::OUString( pszExtColor, 3 ) );
109 
110         uno::Reference< container::XNameContainer > xTable( SvxUnoXColorTable_createInstance( this ), uno::UNO_QUERY );
111         return SvxXMLXTableImport::load( aURL.GetMainURL( INetURLObject::NO_DECODE ), xTable );
112     }
113     return( sal_False );
114 }
115 
116 /************************************************************************/
117 
118 sal_Bool XColorList::Save()
119 {
120     INetURLObject aURL( maPath );
121 
122     if( INET_PROT_NOT_VALID == aURL.GetProtocol() )
123     {
124         OSL_ENSURE( !maPath.Len(), "invalid URL" );
125         return sal_False;
126     }
127 
128     aURL.Append( maName );
129 
130     if( !aURL.getExtension().getLength() )
131         aURL.setExtension( rtl::OUString( pszExtColor, 3 ) );
132 
133     uno::Reference< container::XNameContainer > xTable( SvxUnoXColorTable_createInstance( this ), uno::UNO_QUERY );
134     return SvxXMLXTableExportComponent::save( aURL.GetMainURL( INetURLObject::NO_DECODE ), xTable );
135 }
136 
137 /************************************************************************/
138 
139 sal_Bool XColorList::Create()
140 {
141     XubString aStr;
142     xub_StrLen nLen;
143     ResMgr& rRes = DIALOG_MGR();
144 
145     static sal_uInt16 __READONLY_DATA aResId[] =
146     {
147         RID_SVXSTR_BLACK,
148         RID_SVXSTR_BLUE,
149         RID_SVXSTR_GREEN,
150         RID_SVXSTR_CYAN,
151         RID_SVXSTR_RED,
152         RID_SVXSTR_MAGENTA,
153         RID_SVXSTR_BROWN,
154         RID_SVXSTR_GREY,
155         RID_SVXSTR_LIGHTGREY,
156         RID_SVXSTR_LIGHTBLUE,
157         RID_SVXSTR_LIGHTGREEN,
158         RID_SVXSTR_LIGHTCYAN,
159         RID_SVXSTR_LIGHTRED,
160         RID_SVXSTR_LIGHTMAGENTA,
161         RID_SVXSTR_YELLOW,
162         RID_SVXSTR_WHITE
163     };
164 
165     // MT: COL_XXX ist in VCL kein enum mehr!!!
166     // COL_WHITE ist seeeehr gross! ( => Zugriff ueber das obige Array hinweg )
167     // Mit der unteren Schleife gibt es keinen Absturtz, aber es ist
168     // alles schwarz, weil alles kleine Werte.
169     // Ausserdem ist die ganze Vorgehensweise laut MM sehr unperformant
170     // => lieber gleich Stringlisten laden.
171 
172     // BM: ifndef VCL part removed (deprecated)
173 
174     static ColorData __READONLY_DATA aColTab[] =
175     {
176         COL_BLACK,
177         COL_BLUE,
178         COL_GREEN,
179         COL_CYAN,
180         COL_RED,
181         COL_MAGENTA,
182         COL_BROWN,
183         COL_GRAY,
184         COL_LIGHTGRAY,
185         COL_LIGHTBLUE,
186         COL_LIGHTGREEN,
187         COL_LIGHTCYAN,
188         COL_LIGHTRED,
189         COL_LIGHTMAGENTA,
190         COL_YELLOW,
191         COL_WHITE
192     };
193 
194     for( sal_uInt16 n = 0; n < 16; ++n )
195     {
196         Insert( new XColorEntry( Color( aColTab[n] ), String( ResId( aResId[ n ], rRes )) ), n );
197     }
198 
199     aStr = SVX_RESSTR( RID_SVXSTR_GREY );
200     aStr.AppendAscii(" 80%");
201     nLen = aStr.Len() - 3;
202     Insert( new XColorEntry( Color( 51, 51, 51 ), aStr ) , 16);
203     aStr.SetChar(nLen, sal_Unicode('7'));
204     Insert( new XColorEntry( Color( 76, 76, 76 ), aStr ) , 17);
205     aStr.SetChar(nLen, sal_Unicode('6'));
206     Insert( new XColorEntry( Color(102,102,102 ), aStr ) , 18);
207     aStr.SetChar(nLen, sal_Unicode('4'));
208     Insert( new XColorEntry( Color(153,153,153 ), aStr ) , 19);
209     aStr.SetChar(nLen, sal_Unicode('3'));
210     Insert( new XColorEntry( Color(179,179,179 ), aStr ) , 20);
211     aStr.SetChar(nLen, sal_Unicode('2'));
212     Insert( new XColorEntry( Color(204,204,204 ), aStr ) , 21);
213     // BM: new 15%
214     aStr.SetChar(nLen, sal_Unicode('1'));
215     aStr.SetChar(nLen + 1, sal_Unicode('5'));
216     Insert( new XColorEntry( Color(217,217,217 ), aStr ) , 22);
217     aStr.SetChar(nLen + 1, sal_Unicode('0'));
218     Insert( new XColorEntry( Color(230,230,230 ), aStr ) , 23);
219     Insert( new XColorEntry( Color(230,230,255 ), SVX_RESSTR( RID_SVXSTR_BLUEGREY ) ) , 24);
220 
221     aStr = SVX_RESSTR( RID_SVXSTR_RED );
222     aStr.AppendAscii(" 1");
223     nLen = aStr.Len() - 1;
224     Insert( new XColorEntry( Color(255, 51,102 ), aStr ) , 25);
225     aStr.SetChar(nLen, sal_Unicode('2'));
226     Insert( new XColorEntry( Color(220, 35,  0 ), aStr ) , 26);
227     aStr.SetChar(nLen, sal_Unicode('3'));
228     Insert( new XColorEntry( Color(184, 71,  0 ), aStr ) , 27);
229     aStr.SetChar(nLen, sal_Unicode('4'));
230     Insert( new XColorEntry( Color(255, 51, 51 ), aStr ) , 28);
231     aStr.SetChar(nLen, sal_Unicode('5'));
232     Insert( new XColorEntry( Color(235, 97, 61 ), aStr ) , 29);
233     aStr.SetChar(nLen, sal_Unicode('6'));
234     Insert( new XColorEntry( Color(184, 71, 71 ), aStr ) , 30);
235     aStr.SetChar(nLen, sal_Unicode('7'));
236     Insert( new XColorEntry( Color(184,  0, 71 ), aStr ) , 31);
237     aStr.SetChar(nLen, sal_Unicode('8'));
238     Insert( new XColorEntry( Color(153, 40, 76 ), aStr ) , 32);
239 
240     aStr = SVX_RESSTR( RID_SVXSTR_MAGENTA );
241     aStr.AppendAscii(" 1");
242     nLen = aStr.Len() - 1;
243     Insert( new XColorEntry( Color(148,  0,107 ), aStr ) , 33);
244     aStr.SetChar(nLen, sal_Unicode('2'));
245     Insert( new XColorEntry( Color(148, 71,107 ), aStr ) , 34);
246     aStr.SetChar(nLen, sal_Unicode('3'));
247     Insert( new XColorEntry( Color(148, 71,148 ), aStr ) , 35);
248     aStr.SetChar(nLen, sal_Unicode('4'));
249     Insert( new XColorEntry( Color(153,102,204 ), aStr ) , 36);
250     aStr.SetChar(nLen, sal_Unicode('5'));
251     Insert( new XColorEntry( Color(107, 71,148 ), aStr ) , 37);
252     aStr.SetChar(nLen, sal_Unicode('6'));
253     Insert( new XColorEntry( Color(107, 35,148 ), aStr ) , 38);
254     aStr.SetChar(nLen, sal_Unicode('7'));
255     Insert( new XColorEntry( Color(107,  0,148 ), aStr ) , 39);
256     aStr.SetChar(nLen, sal_Unicode('8'));
257     Insert( new XColorEntry( Color( 94, 17,166 ), aStr ) , 40);
258 
259     aStr = SVX_RESSTR( RID_SVXSTR_BLUE );
260     aStr.AppendAscii(" 1");
261     nLen = aStr.Len() - 1;
262     Insert( new XColorEntry( Color( 40,  0,153 ), aStr ) , 41);
263     aStr.SetChar(nLen, sal_Unicode('2'));
264     Insert( new XColorEntry( Color( 71,  0,184 ), aStr ) , 42);
265     aStr.SetChar(nLen, sal_Unicode('3'));
266     Insert( new XColorEntry( Color( 35,  0,220 ), aStr ) , 43);
267     aStr.SetChar(nLen, sal_Unicode('4'));
268     Insert( new XColorEntry( Color( 35, 35,220 ), aStr ) , 44);
269     aStr.SetChar(nLen, sal_Unicode('5'));
270     Insert( new XColorEntry( Color(  0, 71,255 ), aStr ) , 45);
271     aStr.SetChar(nLen, sal_Unicode('6'));
272     Insert( new XColorEntry( Color(  0,153,255 ), aStr ) , 46);
273     aStr.SetChar(nLen, sal_Unicode('7'));
274     Insert( new XColorEntry( Color(  0,184,255 ), aStr ) , 47);
275     aStr.SetChar(nLen, sal_Unicode('8'));
276     Insert( new XColorEntry( Color(153,204,255 ), aStr ) , 48);
277     //Insert(48, new XColorEntry( Color( 46,215,255 ), aStr ) );
278 
279     aStr = SVX_RESSTR( RID_SVXSTR_CYAN );
280     aStr.AppendAscii(" 1");
281     nLen = aStr.Len() - 1;
282     Insert( new XColorEntry( Color(  0,220,255 ), aStr ) , 49);
283     aStr.SetChar(nLen, sal_Unicode('2'));
284     Insert( new XColorEntry( Color(  0,204,204 ), aStr ) , 50);
285     aStr.SetChar(nLen, sal_Unicode('3'));
286     Insert( new XColorEntry( Color( 35,184,220 ), aStr ) , 51);
287     aStr.SetChar(nLen, sal_Unicode('4'));
288     Insert( new XColorEntry( Color( 71,184,184 ), aStr ) , 52);
289     aStr.SetChar(nLen, sal_Unicode('5'));
290     Insert( new XColorEntry( Color( 51,163,163 ), aStr ) , 53);
291     aStr.SetChar(nLen, sal_Unicode('6'));
292     Insert( new XColorEntry( Color( 25,138,138 ), aStr ) , 54);
293     aStr.SetChar(nLen, sal_Unicode('7'));
294     Insert( new XColorEntry( Color(  0,107,107 ), aStr ) , 55);
295     aStr.SetChar(nLen, sal_Unicode('8'));
296     Insert( new XColorEntry( Color(  0, 74, 74 ), aStr ) , 56);
297 
298     aStr = SVX_RESSTR( RID_SVXSTR_GREEN );
299     aStr.AppendAscii(" 1");
300     nLen = aStr.Len() - 1;
301     Insert( new XColorEntry( Color( 53, 94,  0 ), aStr ) , 57);
302     aStr.SetChar(nLen, sal_Unicode('2'));
303     Insert( new XColorEntry( Color( 92,133, 38 ), aStr ) , 58);
304     aStr.SetChar(nLen, sal_Unicode('3'));
305     Insert( new XColorEntry( Color(125,166, 71 ), aStr ) , 59);
306     aStr.SetChar(nLen, sal_Unicode('4'));
307     Insert( new XColorEntry( Color(148,189, 94 ), aStr ) , 60);
308     aStr.SetChar(nLen, sal_Unicode('5'));
309     Insert( new XColorEntry( Color(  0,174,  0 ), aStr ) , 61);
310     aStr.SetChar(nLen, sal_Unicode('6'));
311     Insert( new XColorEntry( Color( 51,204,102 ), aStr ) , 62);
312     aStr.SetChar(nLen, sal_Unicode('7'));
313     Insert( new XColorEntry( Color( 61,235, 61 ), aStr ) , 63);
314     aStr.SetChar(nLen, sal_Unicode('8'));
315     Insert( new XColorEntry( Color( 35,255, 35 ), aStr ) , 64);
316 
317     aStr = SVX_RESSTR( RID_SVXSTR_YELLOW );
318     aStr.AppendAscii(" 1");
319     nLen = aStr.Len() - 1;
320     Insert( new XColorEntry( Color(230,255,  0 ), aStr ) , 65);
321     aStr.SetChar(nLen, sal_Unicode('2'));
322     Insert( new XColorEntry( Color(255,255,153 ), aStr ) , 66);
323     aStr.SetChar(nLen, sal_Unicode('3'));
324     Insert( new XColorEntry( Color(255,255,102 ), aStr ) , 67);
325     aStr.SetChar(nLen, sal_Unicode('4'));
326     Insert( new XColorEntry( Color(230,230, 76 ), aStr ) , 68);
327     aStr.SetChar(nLen, sal_Unicode('5'));
328     Insert( new XColorEntry( Color(204,204,  0 ), aStr ) , 69);
329     aStr.SetChar(nLen, sal_Unicode('6'));
330     Insert( new XColorEntry( Color(179,179,  0 ), aStr ) , 70);
331     aStr.SetChar(nLen, sal_Unicode('7'));
332     Insert( new XColorEntry( Color(128,128, 25 ), aStr ) , 71);
333     aStr.SetChar(nLen, sal_Unicode('8'));
334     Insert( new XColorEntry( Color(102,102,  0 ), aStr ) , 72);
335 
336     aStr = SVX_RESSTR( RID_SVXSTR_BROWN );
337     aStr.AppendAscii(" 1");
338     nLen = aStr.Len() - 1;
339     Insert( new XColorEntry( Color( 76, 25,  0 ), aStr ) , 73);
340     aStr.SetChar(nLen, sal_Unicode('2'));
341     Insert( new XColorEntry( Color(102, 51,  0 ), aStr ) , 74);
342     aStr.SetChar(nLen, sal_Unicode('3'));
343     Insert( new XColorEntry( Color(128, 76, 25 ), aStr ) , 75);
344     aStr.SetChar(nLen, sal_Unicode('4'));
345     Insert( new XColorEntry( Color(153,102, 51 ), aStr ) , 76);
346 
347     aStr = SVX_RESSTR( RID_SVXSTR_ORANGE );
348     aStr.AppendAscii(" 1");
349     nLen = aStr.Len() - 1;
350     Insert( new XColorEntry( Color(204,102, 51 ), aStr ) , 77);
351     aStr.SetChar(nLen, sal_Unicode('2'));
352     Insert( new XColorEntry( Color(255,102, 51 ), aStr ) , 78);
353     aStr.SetChar(nLen, sal_Unicode('3'));
354     Insert( new XColorEntry( Color(255,153,102 ), aStr ) , 79);
355     aStr.SetChar(nLen, sal_Unicode('4'));
356     Insert( new XColorEntry( Color(255,204,153 ), aStr ) , 80);
357 
358     // new chart colors
359     aStr = SVX_RESSTR( RID_SVXSTR_VIOLET );
360     Insert( new XColorEntry( Color( 0x99, 0x99, 0xff ), aStr ) , 81);
361 
362     aStr = SVX_RESSTR( RID_SVXSTR_BORDEAUX );
363     Insert( new XColorEntry( Color( 0x99, 0x33, 0x66 ), aStr ) , 82);
364 
365     aStr = SVX_RESSTR( RID_SVXSTR_PALE_YELLOW );
366     Insert( new XColorEntry( Color( 0xff, 0xff, 0xcc ), aStr ) , 83);
367 
368     aStr = SVX_RESSTR( RID_SVXSTR_PALE_GREEN );
369     Insert( new XColorEntry( Color( 0xcc, 0xff, 0xff ), aStr ) , 84);
370 
371     aStr = SVX_RESSTR( RID_SVXSTR_DKVIOLET );
372     Insert( new XColorEntry( Color( 0x66, 0x00, 0x66 ), aStr ) , 85);
373 
374     aStr = SVX_RESSTR( RID_SVXSTR_SALMON );
375     Insert( new XColorEntry( Color( 0xff, 0x80, 0x80 ), aStr ) , 86);
376 
377     aStr = SVX_RESSTR( RID_SVXSTR_SEABLUE );
378     Insert( new XColorEntry( Color( 0x00, 0x66, 0xcc ), aStr ) , 87);
379 
380     // Sun colors
381     aStr = SVX_RESSTR( RID_SVXSTR_COLOR_SUN );
382     aStr.AppendAscii(" 1");
383     nLen = aStr.Len() - 1;
384     Insert( new XColorEntry( Color( 0x33, 0x33, 0x66 ), aStr ) , 88);
385     aStr.SetChar(nLen, sal_Unicode('2'));
386     Insert( new XColorEntry( Color( 0x66, 0x66, 0x99 ), aStr ) , 89);
387     aStr.SetChar(nLen, sal_Unicode('3'));
388     Insert( new XColorEntry( Color( 0x99, 0x99, 0xcc ), aStr ) , 90);
389     aStr.SetChar(nLen, sal_Unicode('4'));
390     Insert( new XColorEntry( Color( 0xcc, 0xcc, 0xff ), aStr ) , 91);
391 
392     // Chart default colors
393     aStr = SVX_RESSTR( RID_SVXSTR_COLOR_CHART );
394     aStr.AppendAscii(" 1");
395     nLen = aStr.Len() - 1;
396     Insert( new XColorEntry( Color( 0x00, 0x45, 0x86 ), aStr ) , 92);
397     aStr.SetChar(nLen, sal_Unicode('2'));
398     Insert( new XColorEntry( Color( 0xff, 0x42, 0x0e ), aStr ) , 93);
399     aStr.SetChar(nLen, sal_Unicode('3'));
400     Insert( new XColorEntry( Color( 0xff, 0xd3, 0x20 ), aStr ) , 94);
401     aStr.SetChar(nLen, sal_Unicode('4'));
402     Insert( new XColorEntry( Color( 0x57, 0x9d, 0x1c ), aStr ) , 95);
403     aStr.SetChar(nLen, sal_Unicode('5'));
404     Insert( new XColorEntry( Color( 0x7e, 0x00, 0x21 ), aStr ) , 96);
405     aStr.SetChar(nLen, sal_Unicode('6'));
406     Insert( new XColorEntry( Color( 0x83, 0xca, 0xff ), aStr ) , 97);
407     aStr.SetChar(nLen, sal_Unicode('7'));
408     Insert( new XColorEntry( Color( 0x31, 0x40, 0x04 ), aStr ) , 98);
409     aStr.SetChar(nLen, sal_Unicode('8'));
410     Insert( new XColorEntry( Color( 0xae, 0xcf, 0x00 ), aStr ) , 99);
411     aStr.SetChar(nLen, sal_Unicode('9'));
412     Insert( new XColorEntry( Color( 0x4b, 0x1f, 0x6f ), aStr ) , 100);
413     aStr.SetChar(nLen, sal_Unicode('1'));
414     aStr.AppendAscii("0");
415     nLen = aStr.Len() - 1;
416     Insert( new XColorEntry( Color( 0xff, 0x95, 0x0e ), aStr ) , 101);
417     aStr.SetChar(nLen, sal_Unicode('1'));
418     Insert( new XColorEntry( Color( 0xc5, 0x00, 0x0b ), aStr ) , 102);
419     aStr.SetChar(nLen, sal_Unicode('2'));
420     Insert( new XColorEntry( Color( 0x00, 0x84, 0xd1 ), aStr ) , 103);
421 
422     return( Count() == 104 );
423 }
424 
425 /************************************************************************/
426 
427 Bitmap XColorList::CreateBitmapForUI( long /*nIndex*/ )
428 {
429     return Bitmap();
430 }
431 
432 /************************************************************************/
433 
434 XColorListSharedPtr XColorList::GetStdColorList()
435 {
436     if ( !aStaticGlobalColorList.get() )
437     {
438         aStaticGlobalColorList = XPropertyListFactory::CreateSharedXColorList(SvtPathOptions().GetPalettePath());
439     }
440 
441     return aStaticGlobalColorList;
442 }
443 
444 // eof
445