Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
3 paul 1
#include "editformats.h"
2
#include "editformats.moc"
3
#include "edit1format.h"
4
#include <qmessagebox.h>
1884 fschmid 5
#include <qheader.h>
838 cbradney 6
 
7
#include "scribusdoc.h"
117 Franz 8
#include "customfdialog.h"
415 Franz 9
#include "prefsfile.h"
1888 fschmid 10
#include "scribusXml.h"
410 Franz 11
 
3 paul 12
extern QPixmap loadIcon(QString nam);
415 Franz 13
extern PrefsFile* prefsFile;
3 paul 14
 
1884 fschmid 15
ChooseStyles::ChooseStyles( QWidget* parent, QValueList<ParagraphStyle> *styleList, QValueList<ParagraphStyle> *styleOld)
16
 : QDialog( parent, "ChooseStyles", true, 0 )
3 paul 17
{
1884 fschmid 18
        setCaption( tr( "Choose Styles" ) );
19
        setIcon(loadIcon("AppIcon.png"));
20
        ChooseStylesLayout = new QVBoxLayout( this, 10, 5, "ChooseStylesLayout");
21
        StyleView = new QListView( this, "StyleView" );
22
        StyleView->clear();
23
        StyleView->addColumn( tr( "Available Styles" ) );
24
        StyleView->header()->setClickEnabled( FALSE, StyleView->header()->count() - 1 );
25
        StyleView->header()->setResizeEnabled( FALSE, StyleView->header()->count() - 1 );
26
        StyleView->setSorting(-1);
27
        int counter = 5;
2282 fschmid 28
        bool tabEQ = false;
1884 fschmid 29
        for (uint x = 5; x < styleList->count(); ++x)
30
        {
31
                struct ParagraphStyle vg;
32
                struct ParagraphStyle vg2;
33
                vg = (*styleList)[x];
34
                bool found = false;
35
                for (uint xx=0; xx<styleOld->count(); ++xx)
36
                {
37
                        vg2 = (*styleOld)[xx];
38
                        if (vg.Vname == vg2.Vname)
39
                        {
2282 fschmid 40
                                struct PageItem::TabRecord tb;
41
                                tabEQ = false;
42
                                for (uint t1 = 0; t1 < vg2.TabValues.count(); t1++)
43
                                {
44
                                        tb.tabPosition = vg2.TabValues[t1].tabPosition;
45
                                        tb.tabType = vg2.TabValues[t1].tabType;
46
                                        tb.tabFillChar = vg2.TabValues[t1].tabFillChar;
47
                                        for (uint t2 = 0; t2 < vg.TabValues.count(); t2++)
48
                                        {
49
                                                struct PageItem::TabRecord tb2;
50
                                                tb2.tabPosition = vg.TabValues[t2].tabPosition;
51
                                                tb2.tabType = vg.TabValues[t2].tabType;
52
                                                tb2.tabFillChar = vg.TabValues[t2].tabFillChar;
53
                                                if ((tb2.tabFillChar == tb.tabFillChar) && (tb2.tabPosition == tb.tabPosition) && (tb2.tabType == tb.tabType))
54
                                                {
55
                                                        tabEQ = true;
56
                                                        break;
57
                                                }
58
                                        }
59
                                        if (tabEQ)
60
                                                break;
61
                                }
1884 fschmid 62
                                if ((vg.LineSpa == vg2.LineSpa) && (vg.Indent == vg2.Indent) && (vg.First == vg2.First) &&
63
                                        (vg.textAlignment == vg2.textAlignment) && (vg.gapBefore == vg2.gapBefore) &&
2309 fschmid 64
                                        (vg.LineSpaMode == vg2.LineSpaMode) && (vg.gapAfter == vg2.gapAfter) && (vg.Font == vg2.Font) && (tabEQ)
2282 fschmid 65
                                        && (vg.Drop == vg2.Drop) && (vg.DropLin == vg2.DropLin) && (vg.FontEffect == vg2.FontEffect) &&
1884 fschmid 66
                                        (vg.FColor == vg2.FColor) && (vg.FShade == vg2.FShade) && (vg.SColor == vg2.SColor) &&
2282 fschmid 67
                                        (vg.txtShadowX == vg2.txtShadowX) && (vg.txtShadowY == vg2.txtShadowY) &&
2273 fschmid 68
                                        (vg.txtOutline == vg2.txtOutline) && (vg.txtUnderPos == vg2.txtUnderPos) && (vg.txtUnderWidth == vg2.txtUnderWidth) &&
69
                                        (vg.txtStrikePos == vg2.txtStrikePos) && (vg.txtStrikeWidth == vg2.txtStrikeWidth) &&
1884 fschmid 70
                                        (vg.SShade == vg2.SShade) && (vg.BaseAdj == vg2.BaseAdj) && (vg.FontSize == vg2.FontSize))
71
                                {
72
                                        found = true;
73
                                }
74
                                else
75
                                {
76
                                        vg.Vname = "Copy of "+vg2.Vname;
77
                                        found = false;
78
                                }
79
                                break;
80
                        }
81
                }
82
                if (!found)
83
                {
84
                        QCheckListItem *item = new QCheckListItem (StyleView, vg.Vname, QCheckListItem::CheckBox);
85
                        item->setOn(true);
86
                        storedStyles.insert(item, counter);
87
                }
88
                counter++;
89
        }
1915 fschmid 90
        StyleView->setSorting(0);
1884 fschmid 91
        ChooseStylesLayout->addWidget( StyleView );
92
        layout2 = new QHBoxLayout( 0, 0, 5, "layout2");
93
        QSpacerItem* spacer1 = new QSpacerItem( 71, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
94
        layout2->addItem( spacer1 );
95
        OkButton = new QPushButton( this, "OkButton" );
96
        OkButton->setText( tr( "OK" ) );
97
        layout2->addWidget( OkButton );
98
        CancelButton = new QPushButton( this, "CancelButton" );
99
        CancelButton->setText( tr( "Cancel" ) );
100
        layout2->addWidget( CancelButton );
101
        ChooseStylesLayout->addLayout( layout2 );
102
        resize(230, 280);
103
        clearWState( WState_Polished );
104
        connect(CancelButton, SIGNAL(clicked()), this, SLOT(reject()));
105
        connect(OkButton, SIGNAL(clicked()), this, SLOT(accept()));
106
}
107
 
108
StilFormate::StilFormate( QWidget* parent, ScribusDoc *doc, ApplicationPrefs *avail) : QDialog( parent, "Formate", true, 0)
109
{
225 Franz 110
        resize( 327, 260 );
111
        setCaption( tr( "Edit Styles" ) );
112
        setIcon(loadIcon("AppIcon.png"));
161 Franz 113
        fon = avail;
114
        Docu = doc;
225 Franz 115
        StilFormateLayout = new QHBoxLayout( this );
116
        StilFormateLayout->setSpacing( 5 );
117
        StilFormateLayout->setMargin( 10 );
3 paul 118
 
225 Franz 119
        ListBox1 = new QListBox( this, "ListBox1" );
120
        ListBox1->setMinimumSize( QSize( 200, 240 ) );
121
        StilFormateLayout->addWidget( ListBox1 );
3 paul 122
 
225 Franz 123
        Layout15 = new QVBoxLayout;
124
        Layout15->setSpacing( 6 );
125
        Layout15->setMargin( 0 );
3 paul 126
 
340 Franz 127
        LoadS = new QPushButton( tr( "&Append" ), this, "LoadF" );
225 Franz 128
        Layout15->addWidget( LoadS );
117 Franz 129
 
340 Franz 130
        NewB = new QPushButton( tr( "&New" ), this, "NewB" );
225 Franz 131
        Layout15->addWidget( NewB );
3 paul 132
 
340 Franz 133
        EditB = new QPushButton( tr( "&Edit" ), this, "EditB" );
225 Franz 134
        EditB->setDefault( true );
135
        EditB->setEnabled(false);
136
        Layout15->addWidget( EditB );
3 paul 137
 
340 Franz 138
        DublicateB = new QPushButton( tr( "D&uplicate" ), this, "DublicateB" );
225 Franz 139
        DublicateB->setEnabled(false);
140
        Layout15->addWidget( DublicateB );
3 paul 141
 
340 Franz 142
        DeleteB = new QPushButton( tr( "&Delete" ), this, "DeleteB" );
225 Franz 143
        DeleteB->setEnabled(false);
144
        Layout15->addWidget( DeleteB );
3 paul 145
 
340 Franz 146
        SaveB = new QPushButton( tr( "&Save" ), this, "SaveB" );
225 Franz 147
        Layout15->addWidget( SaveB );
3 paul 148
 
340 Franz 149
        ExitB = new QPushButton( tr( "&OK" ), this, "ExitB" );
225 Franz 150
        Layout15->addWidget( ExitB );
222 Franz 151
 
340 Franz 152
        CancelB = new QPushButton( tr( "&Cancel" ), this, "CancelB" );
225 Franz 153
        Layout15->addWidget( CancelB );
154
        QSpacerItem* spacer = new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding );
155
        Layout15->addItem( spacer );
156
        StilFormateLayout->addLayout( Layout15 );
3 paul 157
 
225 Franz 158
        // signals and slots connections
159
        connect(CancelB, SIGNAL(clicked()), this, SLOT(reject()));
160
        connect(SaveB, SIGNAL(clicked()), this, SLOT(saveIt()));
161
        connect(ExitB, SIGNAL(clicked()), this, SLOT(accept()));
162
        connect(EditB, SIGNAL(clicked()), this, SLOT(editFormat()));
163
        connect(NewB, SIGNAL(clicked()), this, SLOT(neuesFormat()));
164
        connect(LoadS, SIGNAL(clicked()), this, SLOT(loadStyles()));
165
        connect(DublicateB, SIGNAL(clicked()), this, SLOT(dupFormat()));
166
        connect(DeleteB, SIGNAL(clicked()), this, SLOT(deleteFormat()));
167
        connect(ListBox1, SIGNAL(highlighted(QListBoxItem*)), this, SLOT(selFormat(QListBoxItem*)));
271 Franz 168
        connect( ListBox1, SIGNAL( selected(QListBoxItem*) ), this, SLOT( selEditFormat(QListBoxItem*) ) );
1065 cbradney 169
        TempVorl = doc->docParagraphStyles;
225 Franz 170
        UpdateFList();
3 paul 171
}
172
 
222 Franz 173
void StilFormate::saveIt()
174
{
175
        emit saveStyle(this);
176
}
177
 
3 paul 178
void StilFormate::selFormat(QListBoxItem *c)
179
{
175 Franz 180
        for (uint x = 5; x < TempVorl.count(); ++x)
223 Franz 181
        {
182
                if (TempVorl[x].Vname == c->text())
175 Franz 183
                {
184
                        sFnumber = x;
185
                        break;
186
                }
223 Franz 187
        }
225 Franz 188
        EditB->setEnabled(true);
189
        DublicateB->setEnabled(true);
190
        DeleteB->setEnabled(true);
3 paul 191
}
192
 
271 Franz 193
void StilFormate::selEditFormat(QListBoxItem *c)
194
{
195
        for (uint x = 5; x < TempVorl.count(); ++x)
196
        {
197
                if (TempVorl[x].Vname == c->text())
198
                {
199
                        sFnumber = x;
200
                        break;
201
                }
202
        }
203
        EditB->setEnabled(true);
204
        DublicateB->setEnabled(true);
205
        DeleteB->setEnabled(true);
206
        editFormat();
207
}
208
 
3 paul 209
void StilFormate::dupFormat()
210
{
1065 cbradney 211
        struct ParagraphStyle sty;
225 Franz 212
        sty.Vname = tr("Copy of %1").arg(TempVorl[sFnumber].Vname);
2309 fschmid 213
        sty.LineSpaMode = TempVorl[sFnumber].LineSpaMode;
225 Franz 214
        sty.LineSpa = TempVorl[sFnumber].LineSpa;
1065 cbradney 215
        sty.textAlignment = TempVorl[sFnumber].textAlignment;
225 Franz 216
        sty.Indent = TempVorl[sFnumber].Indent;
217
        sty.First = TempVorl[sFnumber].First;
1065 cbradney 218
        sty.gapBefore = TempVorl[sFnumber].gapBefore;
219
        sty.gapAfter = TempVorl[sFnumber].gapAfter;
225 Franz 220
        sty.Font = TempVorl[sFnumber].Font;
221
        sty.FontSize = TempVorl[sFnumber].FontSize;
222
        sty.TabValues = TempVorl[sFnumber].TabValues;
223
        sty.Drop = TempVorl[sFnumber].Drop;
224
        sty.DropLin = TempVorl[sFnumber].DropLin;
225
        sty.FontEffect = TempVorl[sFnumber].FontEffect;
173 Franz 226
        sty.FColor = TempVorl[sFnumber].FColor;
227
        sty.FShade = TempVorl[sFnumber].FShade;
228
        sty.SColor = TempVorl[sFnumber].SColor;
229
        sty.SShade = TempVorl[sFnumber].SShade;
241 Franz 230
        sty.BaseAdj = TempVorl[sFnumber].BaseAdj;
2273 fschmid 231
        sty.txtShadowX = TempVorl[sFnumber].txtShadowX;
232
        sty.txtShadowY = TempVorl[sFnumber].txtShadowY;
233
        sty.txtOutline = TempVorl[sFnumber].txtOutline;
234
        sty.txtUnderPos = TempVorl[sFnumber].txtUnderPos;
235
        sty.txtUnderWidth = TempVorl[sFnumber].txtUnderWidth;
236
        sty.txtStrikePos = TempVorl[sFnumber].txtStrikePos;
237
        sty.txtStrikeWidth = TempVorl[sFnumber].txtStrikeWidth;
225 Franz 238
        TempVorl.append(sty);
239
        sFnumber = TempVorl.count()-1;
161 Franz 240
        EditStyle* dia2 = new EditStyle(this, &TempVorl[sFnumber], TempVorl, true, fon,
1065 cbradney 241
                                        static_cast<double>(Docu->typographicSetttings.autoLineSpacing), Docu->docUnitIndex, Docu);
161 Franz 242
        if (!dia2->exec())
243
                TempVorl.remove(TempVorl.fromLast());
225 Franz 244
        delete dia2;
161 Franz 245
        UpdateFList();
3 paul 246
}
247
 
248
void StilFormate::neuesFormat()
249
{
1065 cbradney 250
        struct ParagraphStyle sty;
225 Franz 251
        sty.Vname = tr("New Style");
2309 fschmid 252
        sty.LineSpaMode = 0;
1194 fschmid 253
        sty.LineSpa = ((Docu->toolSettings.defSize / 10.0) * static_cast<double>(Docu->typographicSetttings.autoLineSpacing) / 100) + (Docu->toolSettings.defSize / 10.0);
1065 cbradney 254
        sty.textAlignment = 0;
225 Franz 255
        sty.Indent = 0;
256
        sty.First = 0;
1065 cbradney 257
        sty.gapBefore = 0;
258
        sty.gapAfter = 0;
1194 fschmid 259
        sty.Font = Docu->toolSettings.defFont;
260
        sty.FontSize = Docu->toolSettings.defSize;
161 Franz 261
        sty.TabValues.clear();
225 Franz 262
        sty.Drop = false;
263
        sty.DropLin = 2;
173 Franz 264
        sty.FontEffect = 0;
1194 fschmid 265
        sty.FColor = Docu->toolSettings.dBrush;
266
        sty.FShade = Docu->toolSettings.dShade;
267
        sty.SColor = Docu->toolSettings.dPen;
268
        sty.SShade = Docu->toolSettings.dShade2;
241 Franz 269
        sty.BaseAdj = false;
2273 fschmid 270
        sty.txtShadowX = 50;
271
        sty.txtShadowY = -50;
272
        sty.txtOutline = 10;
273
        sty.txtUnderPos = Docu->typographicSetttings.valueUnderlinePos;
274
        sty.txtUnderWidth = Docu->typographicSetttings.valueUnderlineWidth;
275
        sty.txtStrikePos = Docu->typographicSetttings.valueStrikeThruPos;
276
        sty.txtStrikeWidth = Docu->typographicSetttings.valueStrikeThruPos;
225 Franz 277
        TempVorl.append(sty);
278
        sFnumber = TempVorl.count()-1;
1065 cbradney 279
        EditStyle* dia2 = new EditStyle(this, &TempVorl[sFnumber], TempVorl, true, fon, static_cast<double>(Docu->typographicSetttings.autoLineSpacing), Docu->docUnitIndex, Docu);
161 Franz 280
        if (!dia2->exec())
281
                TempVorl.remove(TempVorl.fromLast());
225 Franz 282
        delete dia2;
161 Franz 283
        UpdateFList();
3 paul 284
}
285
 
286
void StilFormate::editFormat()
287
{
161 Franz 288
        EditStyle* dia = new EditStyle(this, &TempVorl[sFnumber], TempVorl, false, fon,
1065 cbradney 289
                                       static_cast<double>(Docu->typographicSetttings.autoLineSpacing), Docu->docUnitIndex, Docu);
3 paul 290
        dia->exec();
291
        delete dia;
292
        UpdateFList();
293
}
294
 
295
void StilFormate::deleteFormat()
296
{
161 Franz 297
        int exit=QMessageBox::warning(this,
225 Franz 298
                                      tr("Warning"),
415 Franz 299
                                      tr("Do you really want to delete this Style?"),
225 Franz 300
                                      tr("No"),
301
                                      tr("Yes"),
232 Franz 302
                                      0, 0, 0);
223 Franz 303
        /* PFJ - 29.02.04 - Altered to use the correct QMessageBox value. It was 1 */
232 Franz 304
        /* FS - 13.03.04 the 1 is correct in this version of QMessageBox, it returns the Nr of the clicked Button either 0 or 1 or 2 */
305
        if (exit == 1)
161 Franz 306
        {
3 paul 307
                ListBox1->removeItem(sFnumber);
308
                TempVorl.remove(TempVorl.at(sFnumber));
309
                UpdateFList();
161 Franz 310
        }
3 paul 311
}
312
 
117 Franz 313
void StilFormate::loadStyles()
314
{
415 Franz 315
        PrefsContext* dirs = prefsFile->getContext("dirs");
316
        QString wdir = dirs->get("editformats", ".");
117 Franz 317
#ifdef HAVE_LIBZ
415 Franz 318
        CustomFDialog dia(this, wdir, tr("Open"), tr("Documents (*.sla *.sla.gz *.scd *.scd.gz);;All Files (*)"));
117 Franz 319
#else
415 Franz 320
        CustomFDialog dia(this, wdir, tr("Open"), tr("Documents (*.sla *.scd);;All Files (*)"));
117 Franz 321
#endif
322
        if (dia.exec() == QDialog::Accepted)
410 Franz 323
        {
415 Franz 324
                QString selectedFile = dia.selectedFile();
325
                dirs->set("editformats", selectedFile.left(selectedFile.findRev("/")));
1884 fschmid 326
                QValueList<ParagraphStyle> TempVorl2;
327
                for (uint x = 0; x < 5; ++x)
328
                {
329
                        TempVorl2.append(TempVorl[x]);
330
                }
331
                Docu->loadStylesFromFile(selectedFile, &TempVorl2);
332
                ChooseStyles* dia2 = new ChooseStyles(this, &TempVorl2, &TempVorl);
333
                if (dia2->exec())
334
                {
1888 fschmid 335
                        QStringList neededColors;
336
                        neededColors.clear();
1884 fschmid 337
                        QMap<QCheckListItem*, int>::Iterator it;
338
                        for (it = dia2->storedStyles.begin(); it != dia2->storedStyles.end(); ++it)
339
                        {
1888 fschmid 340
                                struct ParagraphStyle sty;
1884 fschmid 341
                                if (it.key()->isOn())
1888 fschmid 342
                                {
343
                                        sty = TempVorl2[it.data()];
344
                                        TempVorl.append(sty);
345
                                        if ((!Docu->PageColors.contains(sty.SColor)) && (!neededColors.contains(sty.SColor)))
346
                                                neededColors.append(sty.SColor);
347
                                        if ((!Docu->PageColors.contains(sty.FColor)) && (!neededColors.contains(sty.FColor)))
348
                                                neededColors.append(sty.FColor);
349
                                }
1884 fschmid 350
                        }
1888 fschmid 351
                        if (!neededColors.isEmpty())
352
                        {
353
                                ScriXmlDoc *ss = new ScriXmlDoc();
354
                                if (ss->ReadColors(selectedFile))
355
                                {
356
                                        ColorList LColors = ss->Farben;
357
                                        ColorList::Iterator itc;
358
                                        for (itc = LColors.begin(); itc != LColors.end(); ++itc)
359
                                        {
360
                                                if (neededColors.contains(itc.key()))
361
                                                        Docu->PageColors.insert(itc.key(), itc.data());
362
                                        }
363
                                }
364
                                delete ss;
365
                        }
1884 fschmid 366
                }
410 Franz 367
                UpdateFList();
368
        }
117 Franz 369
        else
370
                return;
408 Franz 371
}
372
 
3 paul 373
void StilFormate::UpdateFList()
374
{
232 Franz 375
        ListBox1->clear();
3 paul 376
        if (TempVorl.count() < 6)
377
                return;
378
        for (uint x = 5; x < TempVorl.count(); ++x)
379
                ListBox1->insertItem(TempVorl[x].Vname);
380
        if (ListBox1->currentItem() == -1)
225 Franz 381
        {
382
                DublicateB->setEnabled(false);
383
                EditB->setEnabled(false);
161 Franz 384
                DeleteB->setEnabled(false);
225 Franz 385
        }
223 Franz 386
        /* PFJ - 29.02.04 - Altered from TRUE to true */
387
        ListBox1->sort( true );
3 paul 388
        ListBox1->setSelected(ListBox1->currentItem(), false);
389
}