1 #include <QIcon>
2
3 #include "settings.h"
4 #include "imageformatsetup.h"
5 #include "imagewidget.h"
6 #include "qmc2main.h"
7 #include "options.h"
8 #include "macros.h"
9 #include "softwarelist.h"
10 #include "softwaresnapshot.h"
11
12 extern MainWindow *qmc2MainWindow;
13 extern Settings *qmc2Config;
14 extern Options *qmc2Options;
15 extern SoftwareSnap *qmc2SoftwareSnap;
16 extern SoftwareSnapshot *qmc2SoftwareSnapshot;
17
ImageFormatSetup(QWidget * parent)18 ImageFormatSetup::ImageFormatSetup(QWidget *parent)
19 : QDialog(parent)
20 {
21 setupUi(this);
22 m_previousClassIndex = -1;
23 #if QT_VERSION < 0x050000
24 treeWidget->header()->setMovable(false);
25 #else
26 treeWidget->header()->setSectionsMovable(false);
27 #endif
28 artworkClassPrefixes << "prv" << "fly" << "cab" << "ctl" << "mrq" << "ttl" << "pcb" << "sws";
29 artworkClassNames << tr("Preview") << tr("Flyer") << tr("Cabinet") << tr("Controller") << tr("Marquee") << tr("Title") << tr("PCB") << tr("Software snap");
30 artworkClassIcons << ":/data/img/camera.png" << ":/data/img/thumbnail.png" << ":/data/img/arcadecabinet.png" << ":/data/img/joystick.png" << ":/data/img/marquee.png" << ":/data/img/arcademode.png" << ":/data/img/circuit.png" << ":/data/img/pacman.png";
31 qmc2Config->beginGroup("Artwork");
32 foreach (QString name, qmc2Config->childGroups()) {
33 QString nameCopy = name;
34 artworkClassPrefixes << "aw:" + name;
35 artworkClassNames << nameCopy.replace("&", QString());
36 artworkClassIcons << qmc2Config->value(QString("%1/Icon").arg(name), QString()).toString();
37 }
38 qmc2Config->endGroup();
39 restoreActiveFormats(true);
40 connect(treeWidget->model(), SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(rowsInserted(const QModelIndex &, int, int)));
41 }
42
restoreActiveFormats(bool init)43 void ImageFormatSetup::restoreActiveFormats(bool init)
44 {
45 foreach (QString fmt, m_activeFormats.keys())
46 m_activeFormats[fmt].clear();
47 m_activeFormats.clear();
48 for (int i = 0; i < artworkClassPrefixes.count(); i++) {
49 QStringList imgFmts;
50 if ( artworkClassPrefixes[i].startsWith("aw:") )
51 imgFmts = qmc2Config->value(QString("Artwork/%1/ActiveFormats").arg(artworkClassPrefixes[i].split(":")[1]), QStringList()).toStringList();
52 else
53 imgFmts = qmc2Config->value(QMC2_FRONTEND_PREFIX + QString("ActiveImageFormats/%1").arg(artworkClassPrefixes[i]), QStringList()).toStringList();
54 if ( imgFmts.isEmpty() )
55 m_activeFormats[artworkClassPrefixes[i]] << QMC2_IMAGE_FORMAT_INDEX_PNG;
56 else for (int j = 0; j < imgFmts.count(); j++)
57 m_activeFormats[artworkClassPrefixes[i]] << imgFmts[j].toInt();
58 if ( init )
59 comboBoxImageType->addItem(QIcon(artworkClassIcons[i]), artworkClassNames[i], artworkClassPrefixes[i]);
60 }
61 }
62
checkForModifications()63 void ImageFormatSetup::checkForModifications()
64 {
65 bool modified = false;
66 for (int i = 0; i < artworkClassPrefixes.count() && !modified; i++) {
67 QList<int> storedFormats;
68 QStringList imgFmts;
69 if ( artworkClassPrefixes[i].startsWith("aw:") )
70 imgFmts = qmc2Config->value(QString("Artwork/%1/ActiveFormats").arg(artworkClassPrefixes[i].split(":")[1]), QStringList()).toStringList();
71 else
72 imgFmts = qmc2Config->value(QMC2_FRONTEND_PREFIX + QString("ActiveImageFormats/%1").arg(artworkClassPrefixes[i]), QStringList()).toStringList();
73 if ( imgFmts.isEmpty() )
74 storedFormats << QMC2_IMAGE_FORMAT_INDEX_PNG;
75 else for (int j = 0; j < imgFmts.count(); j++)
76 storedFormats << imgFmts[j].toInt();
77 modified = (m_activeFormats[artworkClassPrefixes[i]] != storedFormats);
78 }
79 pushButtonRestore->setEnabled(modified);
80 }
81
rowsInserted(const QModelIndex &,int,int)82 void ImageFormatSetup::rowsInserted(const QModelIndex &, int, int)
83 {
84 QString artworkClass = comboBoxImageType->itemData(comboBoxImageType->currentIndex()).toString();
85 m_activeFormats[artworkClass].clear();
86 for (int i = 0; i < treeWidget->topLevelItemCount(); i++) {
87 QTreeWidgetItem *tlItem = treeWidget->topLevelItem(i);
88 if ( tlItem->checkState(QMC2_IMGFMT_SETUP_COLUMN_ACT) == Qt::Checked )
89 m_activeFormats[artworkClass] << ImageWidget::formatNames.indexOf(tlItem->text(QMC2_IMGFMT_SETUP_COLUMN_NAME));
90 }
91 QTimer::singleShot(0, this, SLOT(checkForModifications()));
92 }
93
adjustIconSizes()94 void ImageFormatSetup::adjustIconSizes()
95 {
96 QFont f;
97 f.fromString(qmc2Config->value(QMC2_FRONTEND_PREFIX + "GUI/Font").toString());
98 QFontMetrics fm(f);
99 QSize iconSize = QSize(fm.height() - 2, fm.height() - 2);
100 pushButtonOk->setIconSize(iconSize);
101 pushButtonCancel->setIconSize(iconSize);
102 pushButtonRestore->setIconSize(iconSize);
103 comboBoxImageType->setIconSize(iconSize);
104 }
105
on_pushButtonOk_clicked()106 void ImageFormatSetup::on_pushButtonOk_clicked()
107 {
108 QString artworkClass = comboBoxImageType->itemData(comboBoxImageType->currentIndex()).toString();
109 m_activeFormats[artworkClass].clear();
110 for (int i = 0; i < treeWidget->topLevelItemCount(); i++) {
111 QTreeWidgetItem *tlItem = treeWidget->topLevelItem(i);
112 if ( tlItem->checkState(QMC2_IMGFMT_SETUP_COLUMN_ACT) == Qt::Checked )
113 m_activeFormats[artworkClass] << ImageWidget::formatNames.indexOf(tlItem->text(QMC2_IMGFMT_SETUP_COLUMN_NAME));
114 }
115 QMapIterator<QString, QList<int> > it(m_activeFormats);
116 while ( it.hasNext() ) {
117 it.next();
118 QStringList prioList;
119 foreach (int format, it.value())
120 prioList << QString::number(format);
121 if ( it.key().startsWith("aw:") )
122 qmc2Config->setValue(QString("Artwork/%1/ActiveFormats").arg(it.key().split(":")[1]), prioList);
123 else
124 qmc2Config->setValue(QMC2_FRONTEND_PREFIX + QString("ActiveImageFormats/%1").arg(it.key()), prioList);
125 }
126 ImageWidget::reloadArtworkFormats();
127 // FIXME: begin: integrate this in ImageWidget::reloadArtworkFormats()
128 if ( qmc2SoftwareSnap )
129 qmc2SoftwareSnap->reloadActiveFormats();
130 if ( qmc2SoftwareSnapshot )
131 qmc2SoftwareSnapshot->reloadActiveFormats();
132 // FIXME: end
133 accept();
134 }
135
on_pushButtonCancel_clicked()136 void ImageFormatSetup::on_pushButtonCancel_clicked()
137 {
138 reject();
139 }
140
on_pushButtonRestore_clicked()141 void ImageFormatSetup::on_pushButtonRestore_clicked()
142 {
143 restoreActiveFormats();
144 m_previousClassIndex = -1;
145 on_comboBoxImageType_currentIndexChanged(comboBoxImageType->currentIndex());
146 QTimer::singleShot(0, this, SLOT(checkForModifications()));
147 }
148
on_comboBoxImageType_currentIndexChanged(int index)149 void ImageFormatSetup::on_comboBoxImageType_currentIndexChanged(int index)
150 {
151 if ( m_previousClassIndex > -1 ) {
152 QString previousArtworkClass = comboBoxImageType->itemData(m_previousClassIndex).toString();
153 m_activeFormats[previousArtworkClass].clear();
154 for (int i = 0; i < treeWidget->topLevelItemCount(); i++) {
155 QTreeWidgetItem *tlItem = treeWidget->topLevelItem(i);
156 if ( tlItem->checkState(QMC2_IMGFMT_SETUP_COLUMN_ACT) == Qt::Checked )
157 m_activeFormats[previousArtworkClass] << ImageWidget::formatNames.indexOf(tlItem->text(QMC2_IMGFMT_SETUP_COLUMN_NAME));
158 }
159 }
160
161 treeWidget->clear();
162
163 QList<QTreeWidgetItem *> insertItems;
164 QList<int> activeFormats = m_activeFormats[artworkClassPrefixes[index]];
165 for (int i = 0; i < QMC2_IMAGE_FORMAT_COUNT; i++) {
166 QTreeWidgetItem *item = new QTreeWidgetItem();
167 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable);
168 item->setText(QMC2_IMGFMT_SETUP_COLUMN_NAME, ImageWidget::formatNames[i]);
169 item->setText(QMC2_IMGFMT_SETUP_COLUMN_DESC, ImageWidget::formatDescriptions[i]);
170 item->setText(QMC2_IMGFMT_SETUP_COLUMN_EXT, ImageWidget::formatExtensions[i]);
171 if ( activeFormats.indexOf(i) < 0 ) {
172 item->setText(QMC2_IMGFMT_SETUP_COLUMN_ACT, "(" + tr("deactivated") + ")");
173 item->setCheckState(QMC2_IMGFMT_SETUP_COLUMN_ACT, Qt::Unchecked);
174 } else {
175 item->setText(QMC2_IMGFMT_SETUP_COLUMN_ACT, "(" + tr("activated") + ")");
176 item->setCheckState(QMC2_IMGFMT_SETUP_COLUMN_ACT, Qt::Checked);
177 }
178 insertItems << item;
179 }
180
181 int prio = 0;
182 for (int i = 0; i < activeFormats.count(); i++) {
183 bool found = false;
184 int format = activeFormats[i];
185 for (int j = 0; j < insertItems.count() && !found; j++) {
186 if ( ImageWidget::formatNames.indexOf(insertItems[j]->text(QMC2_IMGFMT_SETUP_COLUMN_NAME)) == format ) {
187 insertItems.insert(prio++, insertItems.takeAt(j));
188 found = true;
189 }
190 }
191 }
192
193 treeWidget->insertTopLevelItems(0, insertItems);
194
195 for (int i = 0; i < treeWidget->columnCount(); i++)
196 treeWidget->resizeColumnToContents(i);
197
198 m_previousClassIndex = index;
199 }
200
on_treeWidget_itemClicked(QTreeWidgetItem * item,int column)201 void ImageFormatSetup::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
202 {
203 if ( column == QMC2_IMGFMT_SETUP_COLUMN_ACT ) {
204 if ( item->text(QMC2_IMGFMT_SETUP_COLUMN_ACT) == "(" + tr("activated") + ")" ) {
205 item->setText(QMC2_IMGFMT_SETUP_COLUMN_ACT, "(" + tr("deactivated") + ")");
206 item->setCheckState(QMC2_IMGFMT_SETUP_COLUMN_ACT, Qt::Unchecked);
207 } else {
208 item->setText(QMC2_IMGFMT_SETUP_COLUMN_ACT, "(" + tr("activated") + ")");
209 item->setCheckState(QMC2_IMGFMT_SETUP_COLUMN_ACT, Qt::Checked);
210 }
211 QString artworkClass = comboBoxImageType->itemData(comboBoxImageType->currentIndex()).toString();
212 m_activeFormats[artworkClass].clear();
213 for (int i = 0; i < treeWidget->topLevelItemCount(); i++) {
214 QTreeWidgetItem *tlItem = treeWidget->topLevelItem(i);
215 if ( tlItem->checkState(QMC2_IMGFMT_SETUP_COLUMN_ACT) == Qt::Checked )
216 m_activeFormats[artworkClass] << ImageWidget::formatNames.indexOf(tlItem->text(QMC2_IMGFMT_SETUP_COLUMN_NAME));
217 }
218 QTimer::singleShot(0, this, SLOT(checkForModifications()));
219 }
220 }
221
showEvent(QShowEvent * e)222 void ImageFormatSetup::showEvent(QShowEvent *e)
223 {
224 adjustIconSizes();
225 restoreGeometry(qmc2Config->value(QMC2_FRONTEND_PREFIX + "Layout/ImageFormatSetup/Geometry", QByteArray()).toByteArray());
226 comboBoxImageType->setCurrentIndex(qmc2Config->value(QMC2_FRONTEND_PREFIX + "Layout/ImageFormatSetup/ImageType", QMC2_IMAGE_FORMAT_INDEX_PNG).toInt());
227
228 if ( e )
229 QDialog::showEvent(e);
230 }
231
hideEvent(QHideEvent * e)232 void ImageFormatSetup::hideEvent(QHideEvent *e)
233 {
234 qmc2Config->setValue(QMC2_FRONTEND_PREFIX + "Layout/ImageFormatSetup/Geometry", saveGeometry());
235 qmc2Config->setValue(QMC2_FRONTEND_PREFIX + "Layout/ImageFormatSetup/ImageType", comboBoxImageType->currentIndex());
236
237 if ( e )
238 QDialog::hideEvent(e);
239 }
240