Subversion Repositories Scribus

Rev

Rev 5634 | Rev 6106 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
3 paul 7
#include "colorm.h"
8
#include "colorm.moc"
9
#include <qvariant.h>
4689 mrdocs 10
#include <qfontmetrics.h>
3 paul 11
#include <qpixmap.h>
151 Franz 12
#include <cstdlib>
2952 cbradney 13
 
14
#include "commonstrings.h"
3 paul 15
#include "customfdialog.h"
16
#include "dcolor.h"
17
#include "scribusXml.h"
18
#include "cmykfw.h"
151 Franz 19
#include "query.h"
188 Franz 20
#include "scribus.h"
2856 cbradney 21
#include "prefsmanager.h"
415 Franz 22
#include "prefsfile.h"
1693 craig 23
#include "scpaths.h"
128 Franz 24
 
2688 craig 25
#include "scconfig.h"
3051 fschmid 26
#include "util.h"
3137 fschmid 27
#include "dynamictip.h"
128 Franz 28
 
4689 mrdocs 29
ColorListBoxItem::ColorListBoxItem( const ScColor& col, const QString colName ) : QListBoxItem()
30
{
31
        color = col;
32
        setText(colName);
33
}
3 paul 34
 
4689 mrdocs 35
int     ColorListBoxItem::height( const QListBox *lb ) const
36
{
37
        int h;
38
        QString colorName = text();
39
    if ( colorName.isEmpty() )
40
                h = 15;
41
    else
42
                h = QMAX( 15, lb->fontMetrics().lineSpacing() + 2 );
43
    return QMAX( h, QApplication::globalStrut().height() );
44
}
45
 
46
ColorSmallPixmapItem::ColorSmallPixmapItem( const ScColor& col, const QString colName ) : ColorListBoxItem(col, colName)
47
{
48
}
49
 
50
void ColorSmallPixmapItem::paint( QPainter *p )
51
{
52
        static QPixmap smallPix(15, 15);
53
 
54
        int itemHeight = height( listBox() );
55
    int yPos;
4729 subik 56
 
4689 mrdocs 57
        QColor rgb = color.getRawRGBColor();
58
        smallPix.fill(rgb);
59
        QPainter painter(&smallPix);
60
        painter.setBrush(Qt::NoBrush);
61
        QPen b(Qt::black, 1);
62
        painter.setPen(b);
63
        painter.drawRect(0, 0, 15, 15);
64
        painter.end();
65
 
66
        QRect rect;
67
        rect.setCoords(3, 0, 15, 15);
68
 
69
        yPos = ( itemHeight - 15 ) / 2;
70
        p->drawPixmap( 3, yPos, smallPix );
71
 
72
        if( !text().isEmpty() )
73
        {
74
                QFontMetrics fm = p->fontMetrics();
75
                yPos = ( ( itemHeight - fm.height() ) / 2 ) + fm.ascent();
76
                p->drawText( smallPix.width() + 5, yPos, text() );
77
        }
78
}
79
 
80
int     ColorSmallPixmapItem::width( const QListBox *lb )  const
81
{
82
        QString colorName = text();
83
    if ( text().isEmpty() )
84
                return QMAX( 21, QApplication::globalStrut().width() );
85
    return QMAX( 21 + lb->fontMetrics().width( colorName ), QApplication::globalStrut().width() );
86
}
87
 
88
ColorWidePixmapItem::ColorWidePixmapItem( const ScColor& col, const QString colName ) : ColorListBoxItem(col, colName)
89
{
90
}
91
 
92
void ColorWidePixmapItem::paint( QPainter *p )
93
{
94
        static QPixmap widePix(30, 15);
95
 
96
        int itemHeight = height( listBox() );
97
    int yPos;
4729 subik 98
 
4689 mrdocs 99
        QColor rgb = color.getRawRGBColor();
100
        widePix.fill(rgb);
101
 
102
        QRect rect;
103
        rect.setCoords(3, 0, 30, 15);
104
 
105
        yPos = ( itemHeight - 15 ) / 2;
106
        p->drawPixmap( 3, yPos, widePix );
107
 
108
        if( !text().isEmpty() )
109
        {
110
                QFontMetrics fm = p->fontMetrics();
111
                yPos = ( ( itemHeight - fm.height() ) / 2 ) + fm.ascent();
112
                p->drawText( widePix.width() + 5, yPos, text() );
113
        }
114
}
115
 
116
int     ColorWidePixmapItem::width( const QListBox *lb )  const
117
{
118
        QString colorName = text();
119
    if ( text().isEmpty() )
120
                return QMAX( 36, QApplication::globalStrut().width() );
121
    return QMAX( 36 + lb->fontMetrics().width( colorName ), QApplication::globalStrut().width() );
122
}
123
 
124
ColorFancyPixmapItem::ColorFancyPixmapItem( const ScColor& col, const QString colName ) : ColorListBoxItem(col, colName)
125
{
126
}
127
 
128
void ColorFancyPixmapItem::paint( QPainter *p )
129
{
130
        static QPixmap cellPix(60, 15);
131
        static QPixmap smallPix(15, 15);
132
 
133
        static QPixmap alertIcon;
134
        static QPixmap cmykIcon;
135
        static QPixmap rgbIcon;
136
        static QPixmap spotIcon;
137
        static QPixmap regIcon;
138
        static bool iconsInitialized = false;
139
 
140
        if ( !iconsInitialized ) {
141
                alertIcon = loadIcon("alert.png");
142
                cmykIcon = loadIcon("cmyk.png");
143
                rgbIcon = loadIcon("rgb.png");
144
                spotIcon = loadIcon("spot.png");
145
                regIcon = loadIcon("register.png");
146
                iconsInitialized = true;
147
        }
148
 
149
        int itemHeight = height( listBox() );
150
    int yPos;
4729 subik 151
 
4689 mrdocs 152
        QColor rgb = color.getRawRGBColor();
153
        smallPix.fill(rgb);
154
        QPainter painter(&smallPix);
155
        painter.setBrush(Qt::NoBrush);
156
        QPen b(Qt::black, 1);
157
        painter.setPen(b);
158
        painter.drawRect(0, 0, 15, 15);
159
        painter.end();
160
 
161
        cellPix.fill(Qt::white);
162
        paintAlert(smallPix, cellPix, 0, 0);
163
        color.checkGamut();
164
        if (color.isOutOfGamut())
165
                paintAlert(alertIcon, cellPix, 15, 0);
166
        if ((color.getColorModel() == colorModelCMYK) || (color.isSpotColor()))
167
                paintAlert(cmykIcon, cellPix, 30, 0);
168
        else
169
                paintAlert(rgbIcon, cellPix, 30, 0);
170
        if (color.isSpotColor())
171
                paintAlert(spotIcon, cellPix, 46, 2);
172
        if (color.isRegistrationColor())
173
                paintAlert(regIcon, cellPix, 45, 0);
174
 
175
        QRect rect;
176
        rect.setCoords(3, 0, 60, 15);
177
 
178
        yPos = ( itemHeight - 15 ) / 2;
179
        p->drawPixmap( 3, yPos, cellPix );
180
 
181
        if( !text().isEmpty() )
182
        {
183
                QFontMetrics fm = p->fontMetrics();
184
                yPos = ( ( itemHeight - fm.height() ) / 2 ) + fm.ascent();
185
                p->drawText( cellPix.width() + 5, yPos, text() );
186
        }
187
}
188
 
189
int     ColorFancyPixmapItem::width( const QListBox *lb )  const
190
{
191
        QString colorName = text();
192
    if ( text().isEmpty() )
193
                return QMAX( 66, QApplication::globalStrut().width() );
194
    return QMAX( 66 + lb->fontMetrics().width( colorName ), QApplication::globalStrut().width() );
195
}
196
 
4312 subik 197
ColorListBox::ColorListBox(QWidget * parent, const char * name, WFlags f)
198
        : QListBox(parent, name, f)
3 paul 199
{
4312 subik 200
        if (name == "")
201
                setName("ColorListBox");
202
}
203
 
4689 mrdocs 204
void ColorListBox::updateBox(ColorList list, ColorListBox::PixmapType type, bool clearFirst)
4312 subik 205
{
206
        ColorList::Iterator it;
4689 mrdocs 207
        if (clearFirst)
208
                clear();
4312 subik 209
        for (it = list.begin(); it != list.end(); ++it)
210
        {
211
                // if condition 10/21/2004 pv #1191
4729 subik 212
                if (it.key() == CommonStrings::None || it.key() == CommonStrings::NoneColor)
4312 subik 213
                        continue;
214
 
215
                ScColor col = list[it.key()];
4689 mrdocs 216
                if (type == ColorListBox::fancyPixmap)
217
                        insertItem( new ColorFancyPixmapItem(col, it.key()) );
218
                else if (type == ColorListBox::widePixmap)
219
                        insertItem( new ColorWidePixmapItem(col, it.key()) );
220
                else if (type == ColorListBox::smallPixmap)
221
                        insertItem( new ColorSmallPixmapItem(col, it.key()) );
4312 subik 222
        }
223
}
224
 
225
ColorManager::ColorManager(QWidget* parent, ColorList doco, bool haveDoc, QString docColSet, QStringList custColSet)
226
                : QDialog( parent, "ColorManager", true, 0 )
227
{
228
        setName( "ColorManager" );
229
        HaveDoc = haveDoc;
230
        customColSet = custColSet;
282 Franz 231
        setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1, sizePolicy().hasHeightForWidth() ) );
188 Franz 232
        setSizeGripEnabled(true);
233
        setCaption( tr( "Colors" ) );
234
        setIcon(loadIcon("AppIcon.png"));
235
        Layout2 = new QVBoxLayout( this );
236
        Layout2->setSpacing( 6 );
237
        Layout2->setMargin( 11 );
151 Franz 238
 
188 Franz 239
        layout5 = new QHBoxLayout( 0, 0, 6, "layout5");
282 Franz 240
        layout3 = new QVBoxLayout( 0, 0, 6, "layout3");
4312 subik 241
        colorListBox = new ColorListBox( this, "colorListBox" );
242
        colorListBox->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)3, (QSizePolicy::SizeType)3, colorListBox->sizePolicy().hasHeightForWidth() ) );
243
        colorListBox->setMinimumSize( QSize( 164, 228 ) );
244
        colorListBox->setColumnMode( QListBox::FixedNumber );
245
        layout5->addWidget( colorListBox );
151 Franz 246
 
161 Franz 247
        ColorsGroup = new QGroupBox( this, "ColorsGroup" );
248
        ColorsGroup->setColumnLayout(0, Qt::Vertical );
249
        ColorsGroup->layout()->setSpacing( 6 );
250
        ColorsGroup->layout()->setMargin( 11 );
251
        Layout1 = new QVBoxLayout( ColorsGroup->layout() );
252
        Layout1->setAlignment( Qt::AlignTop );
3034 cbradney 253
        LoadF = new QPushButton( tr( "&Import" ), ColorsGroup, "LoadF" );
188 Franz 254
        Layout1->addWidget( LoadF );
340 Franz 255
        NewF = new QPushButton( tr( "&New" ), ColorsGroup, "NewF" );
188 Franz 256
        Layout1->addWidget( NewF );
340 Franz 257
        EditF = new QPushButton( tr( "&Edit" ), ColorsGroup, "EditF" );
188 Franz 258
        EditF->setEnabled( false );
259
        EditF->setDefault( true );
260
        Layout1->addWidget( EditF );
340 Franz 261
        DupF = new QPushButton( tr( "D&uplicate" ), ColorsGroup, "DupF" );
188 Franz 262
        DupF->setEnabled( false );
263
        Layout1->addWidget( DupF );
340 Franz 264
        DelF = new QPushButton( tr( "&Delete" ), ColorsGroup, "DelF" );
188 Franz 265
        DelF->setEnabled( false );
266
        Layout1->addWidget( DelF );
161 Franz 267
        if (HaveDoc)
268
        {
340 Franz 269
                DelU = new QPushButton( tr( "&Remove Unused" ), ColorsGroup, "DelU" );
282 Franz 270
                Layout1->addWidget( DelU );
161 Franz 271
        }
282 Franz 272
        layout3->addWidget( ColorsGroup );
273
        if (!HaveDoc)
161 Franz 274
        {
275
                ColsSetGroup = new QGroupBox( this, "ColsSetGroup" );
276
                ColsSetGroup->setTitle( tr( "Color Sets" ) );
277
                ColsSetGroup->setColumnLayout(0, Qt::Vertical );
278
                ColsSetGroup->layout()->setSpacing( 6 );
279
                ColsSetGroup->layout()->setMargin( 11 );
280
                ColsSetGroupLayout = new QVBoxLayout( ColsSetGroup->layout() );
281
                ColsSetGroupLayout->setAlignment( Qt::AlignTop );
282
                textLabel1 = new QLabel( ColsSetGroup, "textLabel1" );
283
                textLabel1->setText( tr( "Current Color Set:" ) );
284
                ColsSetGroupLayout->addWidget( textLabel1 );
285
                CSets = new QPopupMenu();
286
                CSets->insertItem("Scribus Small");
4606 cbradney 287
/*
161 Franz 288
                CSets->insertItem("X11 RGB-Set");
187 Franz 289
                CSets->insertItem("X11 Grey-Set");
290
                CSets->insertItem("Gnome-Set");
215 Franz 291
                CSets->insertItem("SVG-Set");
1967 fschmid 292
                CSets->insertItem("OpenOffice.org-Set");
4606 cbradney 293
*/
294
                csm.findPaletteLocations();
295
                csm.findPalettes();
296
                QStringList allSets(csm.paletteNames());
297
                for ( QStringList::Iterator it = allSets.begin(); it != allSets.end(); ++it )
298
                {
299
                        CSets->insertItem((*it));
300
                }
301
                customSetStartIndex=CSets->count();
4312 subik 302
                if (custColSet.count() != 0)
161 Franz 303
                {
226 Franz 304
                        QStringList realEx;
305
                        realEx.clear();
4312 subik 306
                        for (uint m = 0; m < custColSet.count(); ++m)
226 Franz 307
                        {
4312 subik 308
                                QString Cpfad = QDir::convertSeparators(QDir::homeDirPath()+"/.scribus/"+custColSet[m]);
226 Franz 309
                                QFileInfo cfi(Cpfad);
310
                                if (cfi.exists())
311
                                {
4312 subik 312
                                        CSets->insertItem(custColSet[m]);
313
                                        realEx.append(custColSet[m]);
226 Franz 314
                                }
315
                        }
4312 subik 316
                        customColSet = realEx;
161 Franz 317
                }
318
                LoadColSet = new QToolButton( ColsSetGroup, "LoadColSet" );
319
                LoadColSet->setPopup(CSets);
320
                LoadColSet->setPopupDelay(0);
4312 subik 321
                LoadColSet->setText(docColSet);
161 Franz 322
                ColsSetGroupLayout->addWidget( LoadColSet );
340 Franz 323
                SaveColSet = new QPushButton( tr( "&Save Color Set" ), ColsSetGroup, "SaveColSet" );
161 Franz 324
                ColsSetGroupLayout->addWidget( SaveColSet );
282 Franz 325
                layout3->addWidget( ColsSetGroup );
161 Franz 326
        }
2952 cbradney 327
        SaveF = new QPushButton( CommonStrings::tr_OK, this, "SaveF" );
282 Franz 328
        layout3->addWidget( SaveF );
2952 cbradney 329
        CancF = new QPushButton( CommonStrings::tr_Cancel, this, "CancF" );
282 Franz 330
        CancF->setDefault( true );
331
        layout3->addWidget( CancF );
332
        layout5->addLayout( layout3 );
333
        Layout2->addLayout( layout5 );
4312 subik 334
        replaceMap.clear();
188 Franz 335
        EditColors = doco;
4312 subik 336
        dynTip = new DynamicTip(colorListBox, &EditColors);
188 Franz 337
        updateCList();
259 Franz 338
        // signals and slots connections
161 Franz 339
        if (!HaveDoc)
340
        {
341
                connect(CSets, SIGNAL(activated(int)), this, SLOT(loadDefaults(int)));
188 Franz 342
                connect(SaveColSet, SIGNAL( clicked() ), this, SLOT( saveDefaults() ) );
4312 subik 343
                QToolTip::add( LoadColSet, "<qt>" + tr( "Choose a color set to load" ) + "</qt>");
344
                QToolTip::add( SaveColSet, "<qt>" + tr( "Save the current color set" ) + "</qt>");
161 Franz 345
        }
188 Franz 346
        else
224 Franz 347
        {
188 Franz 348
                connect(DelU, SIGNAL( clicked() ), this, SLOT( delUnused() ) );
4312 subik 349
                QToolTip::add( DelU, "<qt>" + tr( "Remove unused colors from current document's color set" ) + "</qt>");
224 Franz 350
        }
4312 subik 351
        QToolTip::add( LoadF, "<qt>" + tr( "Import colors to the current set from an existing document" ) + "</qt>");
352
        QToolTip::add( NewF, "<qt>" + tr( "Create a new color within the current set" ) + "</qt>");
353
        QToolTip::add( EditF, "<qt>" + tr( "Edit the currently selected color" ) + "</qt>");
354
        QToolTip::add( DupF, "<qt>" + tr( "Make a copy of the currently selected color" ) + "</qt>");
355
        QToolTip::add( DelF, "<qt>" + tr( "Delete the currently selected color" ) + "</qt>");
356
        QToolTip::add( SaveF, "<qt>" + tr( "Make the current colorset the default color set" ) + "</qt>");
5689 mrdocs 357
        QToolTip::add( colorListBox, "<qt>" + tr( "If color management is enabled, a triangle warning indicator is a warning the the color maybe outside of the color gamut of the current printer profile selected. What this means is the color many not be able to be printed exactly as displayed on screen. Spot colors are indicated by a red circle. Registration colors will have a registration mark next to the color. More hints about gamut warnings are in the online help under Color Management." ) + "</qt>");
188 Franz 358
        connect( SaveF, SIGNAL( clicked() ), this, SLOT( accept() ) );
359
        connect( CancF, SIGNAL( clicked() ), this, SLOT( reject() ) );
360
        connect( NewF, SIGNAL( clicked() ), this, SLOT( neueFarbe() ) );
361
        connect( EditF, SIGNAL( clicked() ), this, SLOT( editFarbe() ) );
362
        connect( DupF, SIGNAL( clicked() ), this, SLOT( duplFarbe() ) );
363
        connect( DelF, SIGNAL( clicked() ), this, SLOT( delFarbe() ) );
364
        connect( LoadF, SIGNAL( clicked() ), this, SLOT( loadFarben() ) );
4312 subik 365
        connect( colorListBox, SIGNAL( highlighted(QListBoxItem*) ), this, SLOT( selFarbe(QListBoxItem*) ) );
366
        connect( colorListBox, SIGNAL( selected(QListBoxItem*) ), this, SLOT( selEditFarbe(QListBoxItem*) ) );
3 paul 367
}
368
 
4312 subik 369
void ColorManager::saveDefaults()
147 Franz 370
{
282 Franz 371
        QString Cpfad = QDir::convertSeparators(QDir::homeDirPath()+"/.scribus/");
151 Franz 372
        QString Name = LoadColSet->text();
348 Franz 373
        Query* dia = new Query(this, "Name", 1, 0, tr("&Name:"), tr("Choose a Name"));
1967 fschmid 374
        if ((Name == "Scribus Small") || (Name == "X11 RGB-Set") || (Name == "OpenOffice.org-Set")
259 Franz 375
                || (Name == "X11 Grey-Set") || (Name == "Gnome-Set") || (Name == "SVG-Set"))
702 cbradney 376
                dia->setEditText("", false);
151 Franz 377
        else
702 cbradney 378
                dia->setEditText(Name, false);
151 Franz 379
        if (dia->exec())
161 Franz 380
        {
702 cbradney 381
                QString Fname = Cpfad+dia->getEditText();
382
                LoadColSet->setText(dia->getEditText());
151 Franz 383
                QFile fx(Fname);
384
                if (fx.open(IO_WriteOnly))
161 Franz 385
                {
151 Franz 386
                        QTextStream tsx(&fx);
387
                        QString tmp;
1065 cbradney 388
                        ColorList::Iterator itc;
702 cbradney 389
                        tsx << "Color Set:"+dia->getEditText()+"\n";
151 Franz 390
                        int cp, mp, yp, kp;
391
                        for (itc = EditColors.begin(); itc != EditColors.end(); ++itc)
161 Franz 392
                        {
151 Franz 393
                                EditColors[itc.key()].getCMYK(&cp, &mp, &yp, &kp);
394
                                tsx << tmp.setNum(cp) << "\t" ;
395
                                tsx << tmp.setNum(mp) << "\t" ;
396
                                tsx << tmp.setNum(yp) << "\t" ;
397
                                tsx << tmp.setNum(kp) << "\t" ;
398
                                tsx << itc.key() << "\n" ;
161 Franz 399
                        }
151 Franz 400
                        fx.close();
702 cbradney 401
                        if (dia->getEditText() != Name)
161 Franz 402
                        {
4312 subik 403
                                customColSet.append(dia->getEditText());
702 cbradney 404
                                CSets->insertItem(dia->getEditText());
151 Franz 405
                        }
406
                }
161 Franz 407
        }
151 Franz 408
        delete dia;
409
}
410
 
4312 subik 411
void ColorManager::loadDefaults(int id)
151 Franz 412
{
413
        int c = CSets->indexOf(id);
226 Franz 414
        bool cus = false;
151 Franz 415
        LoadColSet->setText(CSets->text(id));
161 Franz 416
        EditColors.clear();
282 Franz 417
        QString Cpfad = QDir::convertSeparators(QDir::homeDirPath()+"/.scribus/"+CSets->text(id));
4602 cbradney 418
        QString pfadC = ScPaths::instance().libDir()+"swatches/";
4606 cbradney 419
        QString pfadC2 = pfadC + "Scribus_X11.txt";
151 Franz 420
        switch (c)
161 Franz 421
        {
259 Franz 422
        case 0:
423
                LoadColSet->setText("Scribus Small");
2886 fschmid 424
                EditColors.insert("White", ScColor(0, 0, 0, 0));
425
                EditColors.insert("Black", ScColor(0, 0, 0, 255));
426
                EditColors.insert("Blue", ScColor(255, 255, 0, 0));
427
                EditColors.insert("Cyan", ScColor(255, 0, 0, 0));
428
                EditColors.insert("Green", ScColor(255, 0, 255, 0));
429
                EditColors.insert("Red", ScColor(0, 255, 255, 0));
430
                EditColors.insert("Yellow", ScColor(0, 0, 255, 0));
431
                EditColors.insert("Magenta", ScColor(0, 255, 0, 0));
259 Franz 432
                break;
4606 cbradney 433
                /*
259 Franz 434
        case 1:
4606 cbradney 435
                pfadC2 = pfadC + "Scribus_X11.txt";
259 Franz 436
                break;
437
        case 2:
4606 cbradney 438
                pfadC2 = pfadC + "Scribus_X11Grey.txt";
259 Franz 439
                break;
440
        case 3:
4606 cbradney 441
                pfadC2 = pfadC + "Scribus_Gnome.txt";
259 Franz 442
                break;
443
        case 4:
4606 cbradney 444
                pfadC2 = pfadC + "Scribus_SVG.txt";
259 Franz 445
                break;
1967 fschmid 446
        case 5:
4606 cbradney 447
                pfadC2 = pfadC + "Scribus_OpenOffice.txt";
1967 fschmid 448
                cus = true;
4606 cbradney 449
                break;*/
259 Franz 450
        default:
4606 cbradney 451
                if (c<customSetStartIndex)
452
                {
453
                        QString listText=CSets->text(id);
454
                        if (listText=="Scribus OpenOffice")
455
                                cus=true;
456
                        pfadC2 = csm.paletteFileFromName(listText);
457
                }
458
                else
459
                {
460
                        pfadC2 = Cpfad;
461
                        cus = true;
462
                }
259 Franz 463
                break;
464
        }
190 Franz 465
        if (c != 0)
187 Franz 466
        {
190 Franz 467
                QFile fiC(pfadC2);
468
                if (fiC.open(IO_ReadOnly))
187 Franz 469
                {
190 Franz 470
                        QString ColorEn, Cname;
226 Franz 471
                        int Rval, Gval, Bval, Kval;
190 Franz 472
                        QTextStream tsC(&fiC);
187 Franz 473
                        ColorEn = tsC.readLine();
190 Franz 474
                        while (!tsC.atEnd())
475
                        {
2886 fschmid 476
                                ScColor tmp;
5634 avox 477
                                ColorEn = tsC.readLine().stripWhiteSpace();
4608 cbradney 478
                                if (ColorEn.length()>0 && ColorEn[0]==QChar('#'))
479
                                        continue;
5634 avox 480
 
481
                                if (ColorEn[0].isNumber()) {
482
                                        QTextStream CoE(&ColorEn, IO_ReadOnly);
483
                                        CoE >> Rval;
484
                                        CoE >> Gval;
485
                                        CoE >> Bval;
486
                                        if (cus)
487
                                        {
488
                                                CoE >> Kval;
489
                                                Cname = CoE.read().stripWhiteSpace();
490
                                                tmp.setColor(Rval, Gval, Bval, Kval);
491
                                        }
492
                                        else
493
                                        {
494
                                                Cname = CoE.read().stripWhiteSpace();
495
                                                tmp.setColorRGB(Rval, Gval, Bval);
496
                                        }
497
                                }
498
                                else {
499
                                        QStringList fields = QStringList::split(QChar(9), ColorEn);
500
                                        if (fields.count() != 5)
501
                                                continue;
502
                                        Cname = fields[0];
503
                                        Rval = fields[1].toInt();
504
                                        Gval = fields[2].toInt();
505
                                        Bval = fields[3].toInt();
506
                                        Kval = fields[4].toInt();
226 Franz 507
                                        tmp.setColor(Rval, Gval, Bval, Kval);
508
                                }
4606 cbradney 509
                                if ((c<customSetStartIndex) && (Cname.length()==0))
510
                                {
4608 cbradney 511
                                        if (!cus)
512
                                                Cname=QString("#%1%2%3").arg(Rval,2,16).arg(Gval,2,16).arg(Bval,2,16).upper();
513
                                        else
514
                                                Cname=QString("#%1%2%3%4").arg(Rval,2,16).arg(Gval,2,16).arg(Bval,2,16).arg(Kval,2,16).upper();
4606 cbradney 515
                                        Cname.replace(" ","0");
516
                                }
517
                                if (EditColors.contains(Cname))
4608 cbradney 518
                                {
519
                                        if (tmp==EditColors[Cname])
520
                                                continue;
4606 cbradney 521
                                        Cname=QString("%1%2").arg(Cname).arg(EditColors.count());
4608 cbradney 522
                                }
190 Franz 523
                                EditColors.insert(Cname, tmp);
524
                        }
525
                        fiC.close();
187 Franz 526
                }
190 Franz 527
                else
528
                {
529
                        LoadColSet->setText("Scribus Small");
2886 fschmid 530
                        EditColors.insert("White", ScColor(0, 0, 0, 0));
531
                        EditColors.insert("Black", ScColor(0, 0, 0, 255));
532
                        EditColors.insert("Blue", ScColor(255, 255, 0, 0));
533
                        EditColors.insert("Cyan", ScColor(255, 0, 0, 0));
534
                        EditColors.insert("Green", ScColor(255, 0, 255, 0));
535
                        EditColors.insert("Red", ScColor(0, 255, 255, 0));
536
                        EditColors.insert("Yellow", ScColor(0, 0, 255, 0));
537
                        EditColors.insert("Magenta", ScColor(0, 255, 0, 0));
190 Franz 538
                }
161 Franz 539
        }
147 Franz 540
        updateCList();
541
}
542
 
4312 subik 543
void ColorManager::loadFarben()
3 paul 544
{
545
        QString fileName;
2856 cbradney 546
        PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
415 Franz 547
        QString wdir = dirs->get("colors", ".");
3 paul 548
#ifdef HAVE_LIBZ
415 Franz 549
        CustomFDialog dia(this, wdir, tr("Open"), tr("Documents (*.sla *.sla.gz *.scd *.scd.gz);;All Files (*)"));
3 paul 550
#else
415 Franz 551
        CustomFDialog dia(this, wdir, tr("Open"), tr("Documents (*.sla *.scd);;All Files (*)"));
3 paul 552
#endif
553
        if (dia.exec() == QDialog::Accepted)
554
                fileName = dia.selectedFile();
555
        else
556
                return;
161 Franz 557
        if (!fileName.isEmpty())
259 Franz 558
        {
415 Franz 559
                dirs->set("colors", fileName.left(fileName.findRev("/")));
259 Franz 560
                ScriXmlDoc *ss = new ScriXmlDoc();
561
                if (ss->ReadColors(fileName))
562
                {
1065 cbradney 563
                        ColorList LColors = ss->Farben;
564
                        ColorList::Iterator it;
3 paul 565
                        for (it = LColors.begin(); it != LColors.end(); ++it)
161 Franz 566
                        {
3 paul 567
                                if (!EditColors.contains(it.key()))
259 Franz 568
                                        EditColors.insert(it.key(), it.data());
161 Franz 569
                        }
259 Franz 570
                        updateCList();
571
                }
118 Franz 572
                delete ss;
188 Franz 573
        }
3 paul 574
}
575
 
4312 subik 576
void ColorManager::delUnused()
188 Franz 577
{
578
        PageItem* ite;
579
        bool found;
580
        UsedC.clear();
1065 cbradney 581
        ColorList::Iterator it;
188 Franz 582
        for (it = EditColors.begin(); it != EditColors.end(); ++it)
583
        {
584
                found = false;
4026 craig 585
                if ((it.key() == ScMW->doc->toolSettings.dBrush) || (it.key() == ScMW->doc->toolSettings.dPen) ||
586
                        (it.key() == ScMW->doc->toolSettings.dBrushPict)
587
                        || (it.key() == ScMW->doc->toolSettings.dPenLine) || (it.key() == ScMW->doc->toolSettings.dPenText))
188 Franz 588
                {
589
                        UsedC.insert(it.key(), it.data());
590
                        continue;
190 Franz 591
                }
4026 craig 592
                for (uint c = 0; c < ScMW->doc->MasterItems.count(); ++c)
188 Franz 593
                {
4026 craig 594
                        ite = ScMW->doc->MasterItems.at(c);
456 fschmid 595
                        QPtrVector<VColorStop> cstops = ite->fill_gradient.colorStops();
596
                        for (uint cst = 0; cst < ite->fill_gradient.Stops(); ++cst)
188 Franz 597
                        {
456 fschmid 598
                                if (it.key() == cstops.at(cst)->name)
599
                                        found = true;
600
                                if (found)
601
                                        break;
602
                        }
3625 avox 603
                        if ((ite->asTextFrame()) || (ite->asPathText()))
456 fschmid 604
                        {
1065 cbradney 605
                                for (uint d=0; d<ite->itemText.count(); ++d)
297 Franz 606
                                {
1065 cbradney 607
                                        if (it.key() == ite->itemText.at(d)->ccolor)
297 Franz 608
                                                found = true;
1065 cbradney 609
                                        if (it.key() == ite->itemText.at(d)->cstroke)
456 fschmid 610
                                                found = true;
297 Franz 611
                                        if (found)
612
                                                break;
613
                                }
188 Franz 614
                        }
456 fschmid 615
                        /* PFJ - 29.02.04 - merged if's to one line */
1394 cbradney 616
                        if ((it.key() == ite->fillColor()) || (it.key() == ite->lineColor()))
456 fschmid 617
                                found = true;
188 Franz 618
                        if (found)
619
                                break;
620
                }
621
                if (found)
622
                {
623
                        UsedC.insert(it.key(), it.data());
624
                        continue;
625
                }
4026 craig 626
                for (uint c = 0; c < ScMW->doc->FrameItems.count(); ++c)
3057 fschmid 627
                {
4026 craig 628
                        ite = ScMW->doc->FrameItems.at(c);
3057 fschmid 629
                        QPtrVector<VColorStop> cstops = ite->fill_gradient.colorStops();
630
                        for (uint cst = 0; cst < ite->fill_gradient.Stops(); ++cst)
631
                        {
632
                                if (it.key() == cstops.at(cst)->name)
633
                                        found = true;
634
                                if (found)
635
                                        break;
636
                        }
3625 avox 637
                        if ((ite->asTextFrame()) || (ite->asPathText()))
3057 fschmid 638
                        {
639
                                for (uint d=0; d<ite->itemText.count(); ++d)
640
                                {
641
                                        if (it.key() == ite->itemText.at(d)->ccolor)
642
                                                found = true;
643
                                        if (it.key() == ite->itemText.at(d)->cstroke)
644
                                                found = true;
645
                                        if (found)
646
                                                break;
647
                                }
648
                        }
649
                        /* PFJ - 29.02.04 - merged if's to one line */
650
                        if ((it.key() == ite->fillColor()) || (it.key() == ite->lineColor()))
651
                                found = true;
652
                        if (found)
653
                                break;
654
                }
655
                if (found)
656
                {
657
                        UsedC.insert(it.key(), it.data());
658
                        continue;
659
                }
4026 craig 660
                for (uint c = 0; c < ScMW->doc->DocItems.count(); ++c)
188 Franz 661
                {
4026 craig 662
                        ite = ScMW->doc->DocItems.at(c);
456 fschmid 663
                        QPtrVector<VColorStop> cstops = ite->fill_gradient.colorStops();
664
                        for (uint cst = 0; cst < ite->fill_gradient.Stops(); ++cst)
188 Franz 665
                        {
456 fschmid 666
                                if (it.key() == cstops.at(cst)->name)
667
                                        found = true;
668
                                if (found)
669
                                        break;
670
                        }
3625 avox 671
                        if ((ite->asTextFrame()) || (ite->asPathText()))
456 fschmid 672
                        {
1065 cbradney 673
                                for (uint d=0; d<ite->itemText.count(); ++d)
297 Franz 674
                                {
456 fschmid 675
                                        /* PFJ - 29.02.04 - Merged if's */
1065 cbradney 676
                                        if ((it.key() == ite->itemText.at(d)->ccolor) ||
677
                                                        (it.key() == ite->itemText.at(d)->cstroke))
297 Franz 678
                                                found = true;
679
                                        if (found)
680
                                                break;
681
                                }
188 Franz 682
                        }
456 fschmid 683
                        /* PFJ - 29.02.04 - Merged if's */
1394 cbradney 684
                        if ((it.key() == ite->fillColor()) || (it.key() == ite->lineColor()))
456 fschmid 685
                                found = true;
188 Franz 686
                        if (found)
687
                                break;
688
                }
224 Franz 689
                /* PFJ - 29.02.04 - Merged if's */
4026 craig 690
                if ((it.key() == ScMW->doc->CurrTextFill) ||
691
                        (it.key() == ScMW->doc->CurrTextStroke))
188 Franz 692
                        found = true;
693
                if (found)
694
                {
695
                        UsedC.insert(it.key(), it.data());
696
                        continue;
697
                }
698
        }
699
        EditColors = UsedC;
190 Franz 700
        if (EditColors.count() == 0)
224 Franz 701
        {
2886 fschmid 702
                EditColors.insert("White", ScColor(0, 0, 0, 0));
703
                EditColors.insert("Black", ScColor(0, 0, 0, 255));
224 Franz 704
        }
188 Franz 705
        updateCList();
706
}
707
 
4312 subik 708
void ColorManager::duplFarbe()
3 paul 709
{
259 Franz 710
        QString nam = tr("Copy of %1").arg(sFarbe);
711
        EditColors.insert(nam, EditColors[sFarbe]);
3057 fschmid 712
        sFarbe = nam;
713
        editFarbe();
259 Franz 714
        updateCList();
3 paul 715
}
716
 
4312 subik 717
void ColorManager::neueFarbe()
3 paul 718
{
2886 fschmid 719
        ScColor tmpFarbe = ScColor(0, 0, 0, 0);
4312 subik 720
        CMYKChoose* dia = new CMYKChoose(this, tmpFarbe, tr("New Color"), &EditColors, customColSet);
4052 cbradney 721
        int newItemIndex=0;
722
        int colCount=0;
259 Franz 723
        if (dia->exec())
724
        {
3057 fschmid 725
                dia->Farbe.setSpotColor(dia->Separations->isChecked());
4052 cbradney 726
                ColorList::Iterator itnew=EditColors.insert(dia->Farbname->text(), dia->Farbe);
727
                bool regChecked=dia->Regist->isChecked();
728
                ColorList::Iterator it;
729
                for (it = EditColors.begin(); it != EditColors.end(); ++it)
3060 fschmid 730
                {
4052 cbradney 731
                        if (regChecked)
3060 fschmid 732
                                EditColors[it.key()].setRegistrationColor(false);
4052 cbradney 733
                        if (it==itnew)
734
                                newItemIndex=colCount;
735
                        ++colCount;
3060 fschmid 736
                }
737
                EditColors[dia->Farbname->text()].setRegistrationColor(dia->Regist->isChecked());
161 Franz 738
                updateCList();
259 Franz 739
        }
740
        delete dia;
4312 subik 741
        colorListBox->setSelected(newItemIndex, true);
742
        colorListBox->setTopItem(newItemIndex);
3 paul 743
}
744
 
4312 subik 745
void ColorManager::editFarbe()
3 paul 746
{
4312 subik 747
        int selectedIndex=colorListBox->currentItem();
748
        int topIndex=colorListBox->topItem();
2886 fschmid 749
        ScColor tmpFarbe = EditColors[sFarbe];
4312 subik 750
        CMYKChoose* dia = new CMYKChoose(this, tmpFarbe, sFarbe, &EditColors, customColSet);
259 Franz 751
        if (dia->exec())
161 Franz 752
        {
3057 fschmid 753
                dia->Farbe.setSpotColor(dia->Separations->isChecked());
344 Franz 754
                EditColors[dia->Farbname->text()] = dia->Farbe;
3060 fschmid 755
                if (dia->Regist->isChecked())
756
                {
757
                        ColorList::Iterator it;
758
                        for (it = EditColors.begin(); it != EditColors.end(); ++it)
759
                        {
760
                                EditColors[it.key()].setRegistrationColor(false);
761
                        }
762
                }
763
                EditColors[dia->Farbname->text()].setRegistrationColor(dia->Regist->isChecked());
344 Franz 764
                if (sFarbe != dia->Farbname->text())
2876 fschmid 765
                {
4312 subik 766
                        replaceMap.insert(sFarbe, dia->Farbname->text());
2876 fschmid 767
                        EditColors.remove(sFarbe);
768
                }
259 Franz 769
                updateCList();
770
        }
3 paul 771
        delete dia;
4312 subik 772
        colorListBox->setSelected(selectedIndex, true);
773
        colorListBox->setTopItem(topIndex);
3 paul 774
}
775
 
4312 subik 776
void ColorManager::delFarbe()
259 Franz 777
{
4312 subik 778
        int selectedIndex=colorListBox->currentItem();
779
        int topIndex=colorListBox->topItem();
259 Franz 780
        DelColor *dia = new DelColor(this, EditColors, sFarbe, HaveDoc);
781
        if (dia->exec())
782
        {
4312 subik 783
                if (replaceMap.values().contains(sFarbe))
3653 fschmid 784
                {
785
                        QMap<QString,QString>::Iterator it;
4312 subik 786
                        for (it = replaceMap.begin(); it != replaceMap.end(); ++it)
3653 fschmid 787
                        {
788
                                if (it.data() == sFarbe)
789
                                        it.data() = dia->getReplacementColor();
790
                        }
791
                }
4312 subik 792
                replaceMap.insert(sFarbe, dia->getReplacementColor());
259 Franz 793
                EditColors.remove(sFarbe);
794
                updateCList();
795
        }
796
        delete dia;
4312 subik 797
        int listBoxCount=colorListBox->count();
4052 cbradney 798
        if (listBoxCount>selectedIndex)
4312 subik 799
                colorListBox->setSelected(selectedIndex, true);
4052 cbradney 800
        if (listBoxCount>topIndex)
4312 subik 801
                colorListBox->setTopItem(topIndex);
259 Franz 802
}
803
 
4312 subik 804
void ColorManager::selFarbe(QListBoxItem *c)
3 paul 805
{
806
        sFarbe = c->text();
807
        EditF->setEnabled(true);
808
        DupF->setEnabled(true);
161 Franz 809
        DelF->setEnabled(EditColors.count() == 1 ? false : true);
3 paul 810
}
811
 
4312 subik 812
void ColorManager::selEditFarbe(QListBoxItem *c)
270 Franz 813
{
814
        sFarbe = c->text();
815
        EditF->setEnabled(true);
816
        DupF->setEnabled(true);
817
        DelF->setEnabled(EditColors.count() == 1 ? false : true);
818
        editFarbe();
819
}
820
 
4312 subik 821
void ColorManager::updateCList()
3 paul 822
{
4689 mrdocs 823
        colorListBox->updateBox(EditColors, ColorListBox::fancyPixmap);
80 Franz 824
        DelF->setEnabled(EditColors.count() == 1 ? false : true);
4312 subik 825
        if (colorListBox->currentItem() == -1)
259 Franz 826
        {
827
                DupF->setEnabled(false);
828
                EditF->setEnabled(false);
829
                DelF->setEnabled(false);
830
        }
4312 subik 831
        colorListBox->setSelected(colorListBox->currentItem(), false);
3 paul 832
}
833
 
4312 subik 834
QString ColorManager::getColorSetName()
835
{
836
        return LoadColSet->text();
837
}