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 | } |