Subversion Repositories Scribus

Rev

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