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 */
7
8 #include <cassert>
9
10 #include "commonstrings.h"
11 #include "printlanguagecombo.h"
12 #include "scribusstructs.h"
13 #include "util_printer.h"
14
PrintLanguageCombo(QWidget * parent)15 PrintLanguageCombo::PrintLanguageCombo(QWidget* parent) : QComboBox(parent)
16 {
17 setEditable(false);
18
19 addItem(CommonStrings::trPostScript1, (int) PrintLanguage::PostScript1);
20 addItem(CommonStrings::trPostScript2, (int) PrintLanguage::PostScript2);
21 addItem(CommonStrings::trPostScript3, (int) PrintLanguage::PostScript3);
22
23 setCurrentIndex(2);
24 }
25
addLanguage(PrintLanguage prnLanguage)26 void PrintLanguageCombo::addLanguage(PrintLanguage prnLanguage)
27 {
28 if (prnLanguage == PrintLanguage::PostScript1)
29 addItem(CommonStrings::trPostScript1, (int) PrintLanguage::PostScript1);
30 else if (prnLanguage == PrintLanguage::PostScript2)
31 addItem(CommonStrings::trPostScript2, (int) PrintLanguage::PostScript2);
32 else if (prnLanguage == PrintLanguage::PostScript3)
33 addItem(CommonStrings::trPostScript3, (int) PrintLanguage::PostScript3);
34 else if (prnLanguage == PrintLanguage::WindowsGDI)
35 addItem(CommonStrings::trWindowsGDI, (int) PrintLanguage::WindowsGDI);
36 else if (prnLanguage == PrintLanguage::PDF)
37 addItem(CommonStrings::trPDF, (int) PrintLanguage::PDF);
38 }
39
currentLanguage() const40 PrintLanguage PrintLanguageCombo::currentLanguage() const
41 {
42 return static_cast<PrintLanguage>(this->currentData().toInt());
43 }
44
findLanguage(PrintLanguage prnLanguage) const45 int PrintLanguageCombo::findLanguage(PrintLanguage prnLanguage) const
46 {
47 for (int i = 0; i < this->count(); ++i)
48 {
49 PrintLanguage printLanguage = languageAt(i);
50 if (printLanguage == prnLanguage)
51 return i;
52 }
53
54 return -1;
55 }
56
hasLanguage(PrintLanguage prnLanguage) const57 bool PrintLanguageCombo::hasLanguage(PrintLanguage prnLanguage) const
58 {
59 for (int i = 0; i < this->count(); ++i)
60 {
61 PrintLanguage printLanguage = languageAt(i);
62 if (printLanguage == prnLanguage)
63 return true;
64 }
65
66 return false;
67 }
68
hasPDF() const69 bool PrintLanguageCombo::hasPDF() const
70 {
71 for (int i = 0; i < this->count(); ++i)
72 {
73 PrintLanguage prnLanguage = languageAt(i);
74 if (prnLanguage == PrintLanguage::PDF)
75 return true;
76 }
77
78 return false;
79 }
80
hasPostscript() const81 bool PrintLanguageCombo::hasPostscript() const
82 {
83 for (int i = 0; i < this->count(); ++i)
84 {
85 PrintLanguage prnLanguage = languageAt(i);
86 if (prnLanguage == PrintLanguage::PostScript1)
87 return true;
88 if (prnLanguage == PrintLanguage::PostScript2)
89 return true;
90 if (prnLanguage == PrintLanguage::PostScript3)
91 return true;
92 }
93
94 return false;
95 }
96
languageAt(int index) const97 PrintLanguage PrintLanguageCombo::languageAt(int index) const
98 {
99 assert(index >= 0 && index < this->count());
100 return ((PrintLanguage) itemData(index).toInt());
101 }
102
setCurrentLanguage(PrintLanguage prnLanguage)103 void PrintLanguageCombo::setCurrentLanguage(PrintLanguage prnLanguage)
104 {
105 int newIndex = findData((int) prnLanguage);
106 if (newIndex >= 0)
107 setCurrentIndex(newIndex);
108 }
109
setupLanguages(const QString & printerName,bool toFile)110 void PrintLanguageCombo::setupLanguages(const QString& printerName, bool toFile)
111 {
112 int index = 0, oldPDLIndex = -1;
113 QString oldPDL = this->currentText();
114
115 clear();
116
117 PrintLanguageMap printLanguageMap = PrinterUtil::getPrintLanguageSupport(printerName, toFile);
118 if (printLanguageMap.count() <= 0)
119 {
120 #if defined(Q_OS_WIN32)
121 printLanguageMap.insert(CommonStrings::trWindowsGDI, PrintLanguage::WindowsGDI);
122 #else
123 printLanguageMap.insert(CommonStrings::trPostScript3, PrintLanguage::PostScript3);
124 #endif
125 }
126
127 PrintLanguageMap::Iterator itEnd = printLanguageMap.end();
128 for (auto it = printLanguageMap.begin(); it != itEnd; ++it)
129 {
130 addItem(it.key(), (int) it.value());
131 if (it.key() == oldPDL)
132 oldPDLIndex = index;
133 index++;
134 }
135
136 // Try to not default on PostScript 1 when switching
137 // from a GDI printer to a Postscript printer
138 if (oldPDLIndex < 0)
139 oldPDLIndex = findText(CommonStrings::trPostScript3);
140 if (oldPDLIndex < 0)
141 {
142 PrintLanguage defaultPrintLang = PrinterUtil::getDefaultPrintLanguage(printerName, toFile);
143 oldPDLIndex = findData((int) defaultPrintLang);
144 }
145 if (oldPDLIndex < 0)
146 oldPDLIndex = 0;
147 setCurrentIndex(oldPDLIndex);
148 }
149
changeEvent(QEvent * e)150 void PrintLanguageCombo::changeEvent(QEvent *e)
151 {
152 if (e->type() == QEvent::LanguageChange)
153 {
154 languageChange();
155 return;
156 }
157
158 QWidget::changeEvent(e);
159 }
160
languageChange()161 void PrintLanguageCombo::languageChange()
162 {
163 for (int i = 0; i < this->count(); ++i)
164 {
165 PrintLanguage prnLanguage = languageAt(i);
166 if (prnLanguage == PrintLanguage::PostScript1)
167 setItemText(i, CommonStrings::trPostScript1);
168 if (prnLanguage == PrintLanguage::PostScript2)
169 setItemText(i, CommonStrings::trPostScript2);
170 if (prnLanguage == PrintLanguage::PostScript3)
171 setItemText(i, CommonStrings::trPostScript3);
172 if (prnLanguage == PrintLanguage::WindowsGDI)
173 setItemText(i, CommonStrings::trWindowsGDI);
174 if (prnLanguage == PrintLanguage::PDF)
175 setItemText(i, CommonStrings::trPDF);
176 }
177 }