1 /***************************************************************************
2 * Copyright (C) 2010 by Till Theato (root@ttill.de) *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
20 #include "tracksconfigdialog.h"
21 #include "kdenlivedoc.h"
23 #include <QTableWidget>
27 TracksDelegate::TracksDelegate(QObject *parent) :
32 QWidget *TracksDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem & /* option */, const QModelIndex & /*index*/) const
34 QComboBox *comboBox = new QComboBox(parent);
35 comboBox->addItem(i18n("Video"));
36 comboBox->addItem(i18n("Audio"));
37 connect(comboBox, SIGNAL(activated(int)), this, SLOT(emitCommitData()));
41 void TracksDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
43 QComboBox *comboBox = qobject_cast<QComboBox *>(editor);
46 int pos = comboBox->findText(index.model()->data(index).toString(), Qt::MatchExactly);
47 comboBox->setCurrentIndex(pos);
50 void TracksDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
52 QComboBox *comboBox = qobject_cast<QComboBox *>(editor);
55 model->setData(index, comboBox->currentText());
58 void TracksDelegate::emitCommitData()
60 emit commitData(qobject_cast<QWidget *>(sender()));
64 TracksConfigDialog::TracksConfigDialog(KdenliveDoc * doc, int selected, QWidget* parent) :
70 table->setColumnCount(5);
71 table->setHorizontalHeaderLabels(QStringList() << i18n("Name") << i18n("Type") << i18n("Hidden") << i18n("Muted") << i18n("Locked"));
72 table->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch);
73 table->horizontalHeader()->setResizeMode(1, QHeaderView::Fixed);
74 table->horizontalHeader()->setResizeMode(2, QHeaderView::Fixed);
75 table->horizontalHeader()->setResizeMode(3, QHeaderView::Fixed);
76 table->horizontalHeader()->setResizeMode(4, QHeaderView::Fixed);
78 table->setItemDelegateForColumn(1, new TracksDelegate(this));
80 setupOriginal(selected);
81 connect(table, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(slotUpdateRow(QTableWidgetItem *)));
84 const QList <TrackInfo> TracksConfigDialog::tracksList()
86 QList <TrackInfo> tracks;
88 for (int i = table->rowCount() - 1; i >= 0; i--) {
89 info.trackName = table->item(i, 0)->text();
90 QTableWidgetItem *item = table->item(i, 1);
91 if (item->text() == i18n("Audio")) {
92 info.type = AUDIOTRACK;
95 info.type = VIDEOTRACK;
96 info.isBlind = (table->item(i, 2)->checkState() == Qt::Checked);
98 info.isMute = (table->item(i, 3)->checkState() == Qt::Checked);
99 info.isLocked = (table->item(i, 4)->checkState() == Qt::Checked);
105 void TracksConfigDialog::setupOriginal(int selected)
107 table->setRowCount(m_doc->tracksCount());
111 for (int i = m_doc->tracksCount() - 1; i >= 0; i--) {
112 numbers << QString::number(i);
113 info = m_doc->trackInfoAt(m_doc->tracksCount() - i - 1);
114 table->setItem(i, 0, new QTableWidgetItem(info.trackName));
116 QTableWidgetItem *item1 = new QTableWidgetItem(i18n("Video"));
117 if (info.type == AUDIOTRACK)
118 item1->setText(i18n("Audio"));
119 table->setItem(i, 1, item1);
120 table->openPersistentEditor(item1);
122 QTableWidgetItem *item2 = new QTableWidgetItem("");
123 item2->setFlags(item2->flags() & ~Qt::ItemIsEditable);
124 item2->setCheckState(info.isBlind ? Qt::Checked : Qt::Unchecked);
125 if (info.type == AUDIOTRACK)
126 item2->setFlags(item2->flags() & ~Qt::ItemIsEnabled);
127 table->setItem(i, 2, item2);
129 QTableWidgetItem *item3 = new QTableWidgetItem("");
130 item3->setFlags(item3->flags() & ~Qt::ItemIsEditable);
131 item3->setCheckState(info.isMute ? Qt::Checked : Qt::Unchecked);
132 table->setItem(i, 3, item3);
134 QTableWidgetItem *item4 = new QTableWidgetItem("");
135 item4->setFlags(item4->flags() & ~Qt::ItemIsEditable);
136 item4->setCheckState(info.isLocked ? Qt::Checked : Qt::Unchecked);
137 table->setItem(i, 4, item4);
139 table->setVerticalHeaderLabels(numbers);
141 table->resizeColumnsToContents();
143 table->selectRow(selected);
146 void TracksConfigDialog::slotUpdateRow(QTableWidgetItem* item)
148 if (table->column(item) == 1) {
149 QTableWidgetItem *item2 = table->item(table->row(item), 2);
150 if (item->text() == i18n("Audio")) {
151 item2->setFlags(item2->flags() & ~Qt::ItemIsEnabled);
152 item2->setCheckState(Qt::Checked);
154 item2->setFlags(item2->flags() | Qt::ItemIsEnabled);
155 item2->setCheckState(Qt::Unchecked);
160 #include "tracksconfigdialog.moc"