Subversion Repositories Scribus

Rev

Rev 5691 | Rev 5781 | 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"
5642 cbradney 17
#include "fileloader.h"
3 paul 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
 
5369 mrdocs 57
        QColor rgb = color.getDisplayColor();
4689 mrdocs 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
 
5369 mrdocs 99
        QColor rgb = color.getDisplayColor();
4689 mrdocs 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
 
5369 mrdocs 152
        QColor rgb = color.getDisplayColor();
4689 mrdocs 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>");
5690 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 may not print exactly as indicated 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;
5657 avox 477
                                ColorEn = tsC.readLine().stripWhiteSpace();
4608 cbradney 478
                                if (ColorEn.length()>0 && ColorEn[0]==QChar('#'))
479
                                        continue;
5657 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("/")));
5642 cbradney 560
                FileLoader fl(fileName);
561
                if (fl.TestFile() == -1)
562
                //TODO put in nice user warning
563
                        return;
564
                ColorList LColors;
565
                if (fl.ReadColors(fileName, LColors))
259 Franz 566
                {
1065 cbradney 567
                        ColorList::Iterator it;
3 paul 568
                        for (it = LColors.begin(); it != LColors.end(); ++it)
161 Franz 569
                        {
3 paul 570
                                if (!EditColors.contains(it.key()))
259 Franz 571
                                        EditColors.insert(it.key(), it.data());
161 Franz 572
                        }
259 Franz 573
                        updateCList();
574
                }
188 Franz 575
        }
3 paul 576
}
577
 
4312 subik 578
void ColorManager::delUnused()
188 Franz 579
{
580
        PageItem* ite;
581
        bool found;
582
        UsedC.clear();
1065 cbradney 583
        ColorList::Iterator it;
188 Franz 584
        for (it = EditColors.begin(); it != EditColors.end(); ++it)
585
        {
586
                found = false;
4026 craig 587
                if ((it.key() == ScMW->doc->toolSettings.dBrush) || (it.key() == ScMW->doc->toolSettings.dPen) ||
588
                        (it.key() == ScMW->doc->toolSettings.dBrushPict)
589
                        || (it.key() == ScMW->doc->toolSettings.dPenLine) || (it.key() == ScMW->doc->toolSettings.dPenText))
188 Franz 590
                {
591
                        UsedC.insert(it.key(), it.data());
592
                        continue;
190 Franz 593
                }
4026 craig 594
                for (uint c = 0; c < ScMW->doc->MasterItems.count(); ++c)
188 Franz 595
                {
4026 craig 596
                        ite = ScMW->doc->MasterItems.at(c);
456 fschmid 597
                        QPtrVector<VColorStop> cstops = ite->fill_gradient.colorStops();
598
                        for (uint cst = 0; cst < ite->fill_gradient.Stops(); ++cst)
188 Franz 599
                        {
456 fschmid 600
                                if (it.key() == cstops.at(cst)->name)
601
                                        found = true;
602
                                if (found)
603
                                        break;
604
                        }
3625 avox 605
                        if ((ite->asTextFrame()) || (ite->asPathText()))
456 fschmid 606
                        {
5753 jghali 607
                                for (int d=0; d<ite->itemText.length(); ++d)
297 Franz 608
                                {
5691 avox 609
                                        if (it.key() == ite->itemText.charStyle(d).fillColor())
297 Franz 610
                                                found = true;
5691 avox 611
                                        if (it.key() == ite->itemText.charStyle(d).strokeColor())
456 fschmid 612
                                                found = true;
297 Franz 613
                                        if (found)
614
                                                break;
615
                                }
188 Franz 616
                        }
456 fschmid 617
                        /* PFJ - 29.02.04 - merged if's to one line */
1394 cbradney 618
                        if ((it.key() == ite->fillColor()) || (it.key() == ite->lineColor()))
456 fschmid 619
                                found = true;
188 Franz 620
                        if (found)
621
                                break;
622
                }
623
                if (found)
624
                {
625
                        UsedC.insert(it.key(), it.data());
626
                        continue;
627
                }
4026 craig 628
                for (uint c = 0; c < ScMW->doc->FrameItems.count(); ++c)
3057 fschmid 629
                {
4026 craig 630
                        ite = ScMW->doc->FrameItems.at(c);
3057 fschmid 631
                        QPtrVector<VColorStop> cstops = ite->fill_gradient.colorStops();
632
                        for (uint cst = 0; cst < ite->fill_gradient.Stops(); ++cst)
633
                        {
634
                                if (it.key() == cstops.at(cst)->name)
635
                                        found = true;
636
                                if (found)
637
                                        break;
638
                        }
3625 avox 639
                        if ((ite->asTextFrame()) || (ite->asPathText()))
3057 fschmid 640
                        {
5753 jghali 641
                                for (int d=0; d<ite->itemText.length(); ++d)
3057 fschmid 642
                                {
5691 avox 643
                                        if (it.key() == ite->itemText.charStyle(d).fillColor())
3057 fschmid 644
                                                found = true;
5691 avox 645
                                        if (it.key() == ite->itemText.charStyle(d).strokeColor())
3057 fschmid 646
                                                found = true;
647
                                        if (found)
648
                                                break;
649
                                }
650
                        }
651
                        /* PFJ - 29.02.04 - merged if's to one line */
652
                        if ((it.key() == ite->fillColor()) || (it.key() == ite->lineColor()))
653
                                found = true;
654
                        if (found)
655
                                break;
656
                }
657
                if (found)
658
                {
659
                        UsedC.insert(it.key(), it.data());
660
                        continue;
661
                }
4026 craig 662
                for (uint c = 0; c < ScMW->doc->DocItems.count(); ++c)
188 Franz 663
                {
4026 craig 664
                        ite = ScMW->doc->DocItems.at(c);
456 fschmid 665
                        QPtrVector<VColorStop> cstops = ite->fill_gradient.colorStops();
666
                        for (uint cst = 0; cst < ite->fill_gradient.Stops(); ++cst)
188 Franz 667
                        {
456 fschmid 668
                                if (it.key() == cstops.at(cst)->name)
669
                                        found = true;
670
                                if (found)
671
                                        break;
672
                        }
5569 avox 673
                        if ((it.key() == ite->itemText.defaultStyle().charStyle().fillColor()) ||
674
                        (it.key() == ite->itemText.defaultStyle().charStyle().strokeColor()))
675
                                found = true;
3625 avox 676
                        if ((ite->asTextFrame()) || (ite->asPathText()))
456 fschmid 677
                        {
5753 jghali 678
                                for (int d=0; d<ite->itemText.length(); ++d)
297 Franz 679
                                {
456 fschmid 680
                                        /* PFJ - 29.02.04 - Merged if's */
5691 avox 681
                                        if ((it.key() == ite->itemText.charStyle(d).fillColor()) ||
682
                                                        (it.key() == ite->itemText.charStyle(d).strokeColor()))
297 Franz 683
                                                found = true;
684
                                        if (found)
685
                                                break;
686
                                }
188 Franz 687
                        }
456 fschmid 688
                        /* PFJ - 29.02.04 - Merged if's */
1394 cbradney 689
                        if ((it.key() == ite->fillColor()) || (it.key() == ite->lineColor()))
456 fschmid 690
                                found = true;
188 Franz 691
                        if (found)
692
                                break;
693
                }
224 Franz 694
                /* PFJ - 29.02.04 - Merged if's */
5559 avox 695
                if ((it.key() == ScMW->doc->currentStyle.charStyle().fillColor()) ||
696
                        (it.key() == ScMW->doc->currentStyle.charStyle().strokeColor()))
188 Franz 697
                        found = true;
698
                if (found)
699
                {
700
                        UsedC.insert(it.key(), it.data());
701
                        continue;
702
                }
703
        }
704
        EditColors = UsedC;
190 Franz 705
        if (EditColors.count() == 0)
224 Franz 706
        {
2886 fschmid 707
                EditColors.insert("White", ScColor(0, 0, 0, 0));
708
                EditColors.insert("Black", ScColor(0, 0, 0, 255));
224 Franz 709
        }
188 Franz 710
        updateCList();
711
}
712
 
4312 subik 713
void ColorManager::duplFarbe()
3 paul 714
{
259 Franz 715
        QString nam = tr("Copy of %1").arg(sFarbe);
716
        EditColors.insert(nam, EditColors[sFarbe]);
3057 fschmid 717
        sFarbe = nam;
718
        editFarbe();
259 Franz 719
        updateCList();
3 paul 720
}
721
 
4312 subik 722
void ColorManager::neueFarbe()
3 paul 723
{
2886 fschmid 724
        ScColor tmpFarbe = ScColor(0, 0, 0, 0);
4312 subik 725
        CMYKChoose* dia = new CMYKChoose(this, tmpFarbe, tr("New Color"), &EditColors, customColSet);
4052 cbradney 726
        int newItemIndex=0;
727
        int colCount=0;
259 Franz 728
        if (dia->exec())
729
        {
3057 fschmid 730
                dia->Farbe.setSpotColor(dia->Separations->isChecked());
4052 cbradney 731
                ColorList::Iterator itnew=EditColors.insert(dia->Farbname->text(), dia->Farbe);
732
                bool regChecked=dia->Regist->isChecked();
733
                ColorList::Iterator it;
734
                for (it = EditColors.begin(); it != EditColors.end(); ++it)
3060 fschmid 735
                {
4052 cbradney 736
                        if (regChecked)
3060 fschmid 737
                                EditColors[it.key()].setRegistrationColor(false);
4052 cbradney 738
                        if (it==itnew)
739
                                newItemIndex=colCount;
740
                        ++colCount;
3060 fschmid 741
                }
742
                EditColors[dia->Farbname->text()].setRegistrationColor(dia->Regist->isChecked());
161 Franz 743
                updateCList();
259 Franz 744
        }
745
        delete dia;
4312 subik 746
        colorListBox->setSelected(newItemIndex, true);
747
        colorListBox->setTopItem(newItemIndex);
3 paul 748
}
749
 
4312 subik 750
void ColorManager::editFarbe()
3 paul 751
{
4312 subik 752
        int selectedIndex=colorListBox->currentItem();
753
        int topIndex=colorListBox->topItem();
2886 fschmid 754
        ScColor tmpFarbe = EditColors[sFarbe];
4312 subik 755
        CMYKChoose* dia = new CMYKChoose(this, tmpFarbe, sFarbe, &EditColors, customColSet);
259 Franz 756
        if (dia->exec())
161 Franz 757
        {
3057 fschmid 758
                dia->Farbe.setSpotColor(dia->Separations->isChecked());
344 Franz 759
                EditColors[dia->Farbname->text()] = dia->Farbe;
3060 fschmid 760
                if (dia->Regist->isChecked())
761
                {
762
                        ColorList::Iterator it;
763
                        for (it = EditColors.begin(); it != EditColors.end(); ++it)
764
                        {
765
                                EditColors[it.key()].setRegistrationColor(false);
766
                        }
767
                }
768
                EditColors[dia->Farbname->text()].setRegistrationColor(dia->Regist->isChecked());
344 Franz 769
                if (sFarbe != dia->Farbname->text())
2876 fschmid 770
                {
4312 subik 771
                        replaceMap.insert(sFarbe, dia->Farbname->text());
2876 fschmid 772
                        EditColors.remove(sFarbe);
773
                }
259 Franz 774
                updateCList();
775
        }
3 paul 776
        delete dia;
4312 subik 777
        colorListBox->setSelected(selectedIndex, true);
778
        colorListBox->setTopItem(topIndex);
3 paul 779
}
780
 
4312 subik 781
void ColorManager::delFarbe()
259 Franz 782
{
4312 subik 783
        int selectedIndex=colorListBox->currentItem();
784
        int topIndex=colorListBox->topItem();
259 Franz 785
        DelColor *dia = new DelColor(this, EditColors, sFarbe, HaveDoc);
786
        if (dia->exec())
787
        {
4312 subik 788
                if (replaceMap.values().contains(sFarbe))
3653 fschmid 789
                {
790
                        QMap<QString,QString>::Iterator it;
4312 subik 791
                        for (it = replaceMap.begin(); it != replaceMap.end(); ++it)
3653 fschmid 792
                        {
793
                                if (it.data() == sFarbe)
794
                                        it.data() = dia->getReplacementColor();
795
                        }
796
                }
4312 subik 797
                replaceMap.insert(sFarbe, dia->getReplacementColor());
259 Franz 798
                EditColors.remove(sFarbe);
799
                updateCList();
800
        }
801
        delete dia;
4312 subik 802
        int listBoxCount=colorListBox->count();
4052 cbradney 803
        if (listBoxCount>selectedIndex)
4312 subik 804
                colorListBox->setSelected(selectedIndex, true);
4052 cbradney 805
        if (listBoxCount>topIndex)
4312 subik 806
                colorListBox->setTopItem(topIndex);
259 Franz 807
}
808
 
4312 subik 809
void ColorManager::selFarbe(QListBoxItem *c)
3 paul 810
{
811
        sFarbe = c->text();
812
        EditF->setEnabled(true);
813
        DupF->setEnabled(true);
161 Franz 814
        DelF->setEnabled(EditColors.count() == 1 ? false : true);
3 paul 815
}
816
 
4312 subik 817
void ColorManager::selEditFarbe(QListBoxItem *c)
270 Franz 818
{
819
        sFarbe = c->text();
820
        EditF->setEnabled(true);
821
        DupF->setEnabled(true);
822
        DelF->setEnabled(EditColors.count() == 1 ? false : true);
823
        editFarbe();
824
}
825
 
4312 subik 826
void ColorManager::updateCList()
3 paul 827
{
4689 mrdocs 828
        colorListBox->updateBox(EditColors, ColorListBox::fancyPixmap);
80 Franz 829
        DelF->setEnabled(EditColors.count() == 1 ? false : true);
4312 subik 830
        if (colorListBox->currentItem() == -1)
259 Franz 831
        {
832
                DupF->setEnabled(false);
833
                EditF->setEnabled(false);
834
                DelF->setEnabled(false);
835
        }
4312 subik 836
        colorListBox->setSelected(colorListBox->currentItem(), false);
3 paul 837
}
838
 
4312 subik 839
QString ColorManager::getColorSetName()
840
{
841
        return LoadColSet->text();
842
}