Subversion Repositories Scribus

Rev

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