#include <KComboBox>
#include <KRun>
#include <KIO/NetAccess>
+#include <KColorScheme>
// #include <knewstuff2/engine.h>
#include <QDomDocument>
m_view.guide_end->clear();
QDomNodeList nodes = guidesxml.elementsByTagName("guide");
if (nodes.count() > 0) {
- m_view.guide_start->addItem(i18n("Render"), "0");
+ m_view.guide_start->addItem(i18n("Beginning"), "0");
m_view.render_guide->setEnabled(true);
m_view.create_chapter->setEnabled(true);
} else {
m_view.guide_end->addItem(i18n("End"), QString::number(duration));
}
-/**
+/**
* Will be called when the user selects an output file via the file dialog.
* File extension will be added automatically.
*/
void RenderWidget::slotUpdateButtons(KUrl url)
{
if (m_view.out_file->url().isEmpty()) m_view.buttonStart->setEnabled(false);
- else m_view.buttonStart->setEnabled(true);
+ else {
+ updateButtons(); // This also checks whether the selected format is available
+ //m_view.buttonStart->setEnabled(true);
+ }
if (url != 0) {
QListWidgetItem *item = m_view.size_list->currentItem();
QString extension = item->data(ExtensionRole).toString();
void RenderWidget::slotUpdateButtons()
{
if (m_view.out_file->url().isEmpty()) m_view.buttonStart->setEnabled(false);
- else m_view.buttonStart->setEnabled(true);
+ else updateButtons(); // This also checks whether the selected format is available
+ //else m_view.buttonStart->setEnabled(true);
}
void RenderWidget::slotSaveProfile()
ui.parameters->setText(m_view.advanced_params->toPlainText());
ui.extension->setText(m_view.size_list->currentItem()->data(ExtensionRole).toString());
ui.profile_name->setFocus();
+
if (d->exec() == QDialog::Accepted && !ui.profile_name->text().simplified().isEmpty()) {
QString exportFile = KStandardDirs::locateLocal("appdata", "export/customprofiles.xml");
QDomDocument doc;
m_view.buttonStart->setEnabled(false);
} else {
m_view.buttonSave->setEnabled(true);
- m_view.buttonStart->setEnabled(m_view.size_list->currentItem()->flags() & Qt::ItemIsEnabled);
+ m_view.buttonStart->setEnabled(m_view.size_list->currentItem()->toolTip().isEmpty());
QString edit = m_view.size_list->currentItem()->data(EditableRole).toString();
if (edit.isEmpty() || !edit.endsWith("customprofiles.xml")) {
m_view.buttonDelete->setEnabled(false);
QListWidgetItem *item = m_view.size_list->currentItem();
if (!item) return;
- const QString dest = m_view.out_file->url().path();
+ QString dest = m_view.out_file->url().path();
if (dest.isEmpty()) return;
+
+ // Check whether target file has an extension.
+ // If not, ask whether extension should be added or not.
+ QString extension = item->data(ExtensionRole).toString();
+ if (!dest.endsWith(extension)) {
+ if (KMessageBox::questionYesNo(this, i18n("File has no extension. Add extension (%1)?", extension)) == KMessageBox::Yes) {
+ dest.append("." + extension);
+ }
+ }
+
QFile f(dest);
if (f.exists()) {
if (KMessageBox::warningYesNo(this, i18n("Output file already exists. Do you want to overwrite it?")) != KMessageBox::Yes)
} else if (std.contains(" s=")) {
subsize = std.section(" s=", 1, 1);
subsize = subsize.section(' ', 0, 0).toLower();
- } else if (destination != "audioonly" && m_view.rescale->isChecked() && m_view.rescale->isEnabled())
- {
+ } else if (destination != "audioonly" && m_view.rescale->isChecked() && m_view.rescale->isEnabled()) {
subsize = QString(" s=%1x%2").arg(width).arg(height);
// Add current size parameter
renderArgs.append(subsize);
renderParameters << scriptName;
m_view.tabWidget->setCurrentIndex(1);
+ // Save rendering profile to document
+ emit selectedRenderProfile(m_view.size_list->currentItem()->data(MetaGroupRole).toString(), m_view.size_list->currentItem()->text());
+
// insert item in running jobs list
QTreeWidgetItem *renderItem;
QList<QTreeWidgetItem *> existing = m_view.running_jobs->findItems(dest, Qt::MatchExactly, 1);
const QStringList vcodecsList = KdenliveSettings::videocodecs();
const QStringList acodecsList = KdenliveSettings::audiocodecs();
+ KColorScheme scheme(palette().currentColorGroup(), KColorScheme::Window);
+ const QColor disabled = scheme.foreground(KColorScheme::InactiveText).color();
+ const QColor disabledbg = scheme.background(KColorScheme::NegativeBackground).color();
+
for (int i = 0; i < m_view.size_list->count(); i++) {
sizeItem = m_view.size_list->item(i);
- if ((sizeItem->data(GroupRole) == group || sizeItem->data(GroupRole).toString().isEmpty()) && sizeItem->data(MetaGroupRole) == destination) {
+ if ((sizeItem->data(GroupRole).toString() == group || sizeItem->data(GroupRole).toString().isEmpty()) && sizeItem->data(MetaGroupRole).toString() == destination) {
std = sizeItem->data(StandardRole).toString();
if (!std.isEmpty()) {
if (std.contains("PAL", Qt::CaseInsensitive)) sizeItem->setHidden(m_view.format_selection->currentIndex() != 0);
if (!formatsList.contains(format)) {
kDebug() << "***** UNSUPPORTED F: " << format;
//sizeItem->setHidden(true);
- sizeItem->setFlags(Qt::ItemIsSelectable);
+ //sizeItem->setFlags(Qt::ItemIsSelectable);
sizeItem->setToolTip(i18n("Unsupported video format: %1", format));
sizeItem->setIcon(brokenIcon);
+ sizeItem->setForeground(disabled);
}
}
}
if (!acodecsList.contains(format)) {
kDebug() << "***** UNSUPPORTED ACODEC: " << format;
//sizeItem->setHidden(true);
- sizeItem->setFlags(Qt::ItemIsSelectable);
+ //sizeItem->setFlags(Qt::ItemIsSelectable);
sizeItem->setToolTip(i18n("Unsupported audio codec: %1", format));
sizeItem->setIcon(brokenIcon);
+ sizeItem->setForeground(disabled);
+ sizeItem->setBackground(disabledbg);
}
}
}
if (!vcodecsList.contains(format)) {
kDebug() << "***** UNSUPPORTED VCODEC: " << format;
//sizeItem->setHidden(true);
- sizeItem->setFlags(Qt::ItemIsSelectable);
+ //sizeItem->setFlags(Qt::ItemIsSelectable);
sizeItem->setToolTip(i18n("Unsupported video codec: %1", format));
sizeItem->setIcon(brokenIcon);
+ sizeItem->setForeground(disabled);
}
}
}
}
+/**
+ * Called when a new format or size has been selected.
+ */
void RenderWidget::refreshParams()
{
+ // Format not available (e.g. codec not installed); Disable start button
QListWidgetItem *item = m_view.size_list->currentItem();
if (!item || item->isHidden()) {
m_view.advanced_params->clear();
m_view.buttonEdit->setEnabled(true);
}
- m_view.buttonStart->setEnabled(m_view.size_list->currentItem()->flags() & Qt::ItemIsEnabled);
+ m_view.buttonStart->setEnabled(m_view.size_list->currentItem()->toolTip().isEmpty());
}
void RenderWidget::reloadProfiles()
{
m_view.error_box->setVisible(false);
}
+
+void RenderWidget::setRenderProfile(const QString &dest, const QString &name)
+{
+ m_view.destination_list->blockSignals(true);
+ m_view.format_list->blockSignals(true);
+ m_view.size_list->blockSignals(true);
+ for (int i = 0; i < m_view.destination_list->count(); i++) {
+ if (m_view.destination_list->itemData(i, Qt::UserRole) == dest) {
+ m_view.destination_list->setCurrentIndex(i);
+ break;
+ }
+ }
+ QList<QListWidgetItem *> childs = m_view.size_list->findItems(name, Qt::MatchExactly);
+ if (!childs.isEmpty()) {
+ QListWidgetItem *profile = childs.at(0);
+ if (profile->isHidden()) {
+ QString group = profile->data(GroupRole).toString();
+ childs = m_view.format_list->findItems(group, Qt::MatchExactly);
+ if (!childs.isEmpty()) {
+ m_view.format_list->setCurrentItem(childs.at(0));
+ }
+ }
+ refreshView();
+ m_view.size_list->blockSignals(false);
+ m_view.size_list->setCurrentItem(profile);
+ } else m_view.size_list->blockSignals(false);
+ m_view.destination_list->blockSignals(false);
+ m_view.format_list->blockSignals(false);
+
+}
+