From: Jean-Baptiste Mardelle Date: Sat, 13 Dec 2008 00:09:54 +0000 (+0000) Subject: Improve profile selection in First run wizard X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=4be9030ba656aeb05ac8b28aaae5aa79cdf461d5;p=kdenlive Improve profile selection in First run wizard Start implementing project folder svn path=/branches/KDE4/; revision=2779 --- diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index e8bd52ae..eff38756 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -258,4 +258,9 @@ int ClipManager::lastClipId() const { return m_clipIdCounter - 1; } +QString ClipManager::projectFolder() const { + return m_doc->projectFolder().path(); +} + + diff --git a/src/clipmanager.h b/src/clipmanager.h index cfa0565a..8e127b32 100644 --- a/src/clipmanager.h +++ b/src/clipmanager.h @@ -63,6 +63,7 @@ Q_OBJECT public: void startAudioThumbsGeneration(); void endAudioThumbsGeneration(const QString &requestedId); void askForAudioThumb(const QString &id); + QString projectFolder() const; private: // Private attributes /** the list of clips in the document */ diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index bb6a36bd..1699aaa7 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -1374,6 +1374,7 @@ void CustomTrackView::addTrack(TrackInfo type, int ix) { setSceneRect(0, 0, sceneRect().width(), m_tracksHeight * m_document->tracksCount()); verticalScrollBar()->setMaximum(m_tracksHeight * m_document->tracksCount()); QTimer::singleShot(300, this, SIGNAL(trackHeightChanged())); + viewport()->update(); //setFixedHeight(50 * m_tracksCount); } @@ -1427,6 +1428,7 @@ void CustomTrackView::removeTrack(int ix) { setSceneRect(0, 0, sceneRect().width(), m_tracksHeight * m_document->tracksCount()); verticalScrollBar()->setMaximum(m_tracksHeight * m_document->tracksCount()); QTimer::singleShot(300, this, SIGNAL(trackHeightChanged())); + viewport()->update(); } void CustomTrackView::changeTrack(int ix, TrackInfo type) { @@ -2007,6 +2009,7 @@ Transition *CustomTrackView::getTransitionItemAt(GenTime pos, int track) { } void CustomTrackView::moveClip(const ItemInfo start, const ItemInfo end) { + if (m_selectionGroup) resetSelectionGroup(false); ClipItem *item = getClipItemAt((int) start.startPos.frames(m_document->fps()) + 1, start.track); if (!item) { emit displayMessage(i18n("Cannot move clip at time: %1 on track %2", m_document->timecode().getTimecodeFromFrames(start.startPos.frames(m_document->fps())), start.track), ErrorMessage); @@ -2018,6 +2021,8 @@ void CustomTrackView::moveClip(const ItemInfo start, const ItemInfo end) { bool success = m_document->renderer()->mltMoveClip((int)(m_document->tracksCount() - start.track), (int)(m_document->tracksCount() - end.track), (int) start.startPos.frames(m_document->fps()), (int)end.startPos.frames(m_document->fps()), item->baseClip()->producer(end.track)); if (success) { item->setPos((int) end.startPos.frames(m_document->fps()), (int)(end.track * m_tracksHeight + 1)); + m_scene->clearSelection(); + item->setSelected(true); if (item->baseClip()->isTransparent()) { // Also move automatic transition Transition *tr = getTransitionItemAt((int) start.startPos.frames(m_document->fps()), start.track); @@ -2774,8 +2779,8 @@ void CustomTrackView::setOutPoint() { void CustomTrackView::slotUpdateAllThumbs() { QList itemList = items(); + //if (itemList.isEmpty()) return; ClipItem *item; - Transition *transitionitem; for (int i = 0; i < itemList.count(); i++) { if (itemList.at(i)->type() == AVWIDGET) { item = static_cast (itemList.at(i)); diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index 5dabc00d..bc8c4d19 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -48,7 +48,7 @@ DocClipBase::DocClipBase(ClipManager *clipManager, QDomElement xml, const QStrin //if (!url.isEmpty() && QFile::exists(url.path())) { - m_thumbProd = new KThumb(clipManager, url, m_id); + m_thumbProd = new KThumb(clipManager, url, m_id, m_properties.value("file_hash")); if (m_clipType == AV || m_clipType == AUDIO) slotCreateAudioTimer(); } //kDebug() << "type is video" << (m_clipType == AV) << " " << m_clipType; @@ -590,6 +590,10 @@ QMap DocClipBase::properties() const { bool DocClipBase::slotGetAudioThumbs() { if (m_thumbProd == NULL) return false; + if (!KdenliveSettings::audiothumbnails()) { + if (m_audioTimer != NULL) m_audioTimer->stop(); + return false; + } if (m_audioThumbCreated) { if (m_audioTimer != NULL) m_audioTimer->stop(); return false; diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index d7f59113..816f7b36 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -58,6 +58,9 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup if (!infoXmlNode.isNull()) { QDomElement infoXml = infoXmlNode.toElement(); QString profilePath = infoXml.attribute("profile"); + QString projectFolderPath = infoXml.attribute("projectfolder"); + if (!projectFolderPath.isEmpty()) m_projectFolder = KUrl(projectFolderPath); + if (m_projectFolder.isEmpty()) m_projectFolder = KUrl(KdenliveSettings::defaultprojectfolder()); m_startPos = infoXml.attribute("position").toInt(); m_zoom = infoXml.attribute("zoom", "7").toInt(); setProfilePath(profilePath); @@ -155,6 +158,12 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup m_document = createEmptyDocument(tracks.x(), tracks.y()); setProfilePath(profileName); } + if (m_projectFolder.isEmpty()) m_projectFolder = KUrl(KdenliveSettings::defaultprojectfolder()); + + // make sure that the necessary folders exist + KStandardDirs::makeDir(m_projectFolder.path() + "/titles/"); + KStandardDirs::makeDir(m_projectFolder.path() + "/thumbs/"); + m_scenelist = m_document.toString(); kDebug() << "KDEnnlive document, init timecode: " << m_fps; if (m_fps == 30000.0 / 1001.0) m_timecode.setFormat(30, true); @@ -810,6 +819,7 @@ bool KdenliveDoc::saveSceneList(const QString &path, QDomDocument sceneList) { addedXml.setAttribute("version", "0.8"); addedXml.setAttribute("profile", profilePath()); addedXml.setAttribute("position", m_render->seekPosition().frames(m_fps)); + addedXml.setAttribute("projectfolder", m_projectFolder.path()); addedXml.setAttribute("tracks", getTracksInfo()); addedXml.setAttribute("zoom", m_zoom); @@ -851,7 +861,7 @@ ClipManager *KdenliveDoc::clipManager() { } KUrl KdenliveDoc::projectFolder() const { - if (m_projectFolder.isEmpty()) return KUrl(KStandardDirs::locateLocal("appdata", "/projects/")); + //if (m_projectFolder.isEmpty()) return KUrl(KStandardDirs::locateLocal("appdata", "/projects/")); return m_projectFolder; } diff --git a/src/kdenlivesettings.kcfg b/src/kdenlivesettings.kcfg index 767d2211..f2407da6 100644 --- a/src/kdenlivesettings.kcfg +++ b/src/kdenlivesettings.kcfg @@ -126,6 +126,11 @@ /tmp/ + + + + + $HOME diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index 3eb197b4..7796b990 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -53,6 +53,8 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent): KConfigDialog( m_configEnv.rendererpathurl->lineEdit()->setObjectName("kcfg_rendererpath"); m_configEnv.tmppathurl->setMode(KFile::Directory); m_configEnv.tmppathurl->lineEdit()->setObjectName("kcfg_currenttmpfolder"); + m_configEnv.projecturl->setMode(KFile::Directory); + m_configEnv.projecturl->lineEdit()->setObjectName("kcfg_defaultprojectfolder"); m_configEnv.capturefolderurl->setMode(KFile::Directory); m_configEnv.capturefolderurl->lineEdit()->setObjectName("kcfg_capturefolder"); page2 = addPage(p2, i18n("Environment"), "terminal"); diff --git a/src/kthumb.cpp b/src/kthumb.cpp index b821e93f..88aa4492 100644 --- a/src/kthumb.cpp +++ b/src/kthumb.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -59,7 +58,6 @@ bool MyThread::isWorking() { } void MyThread::run() { - if (!f.open(QIODevice::WriteOnly)) { kDebug() << "++++++++ ERROR WRITING TO FILE: " << f.fileName() << endl; kDebug() << "++++++++ DISABLING AUDIO THUMBS" << endl; @@ -126,11 +124,8 @@ void MyThread::run() { } -KThumb::KThumb(ClipManager *clipManager, KUrl url, const QString &id, QObject * parent, const char *name): QObject(parent), m_clipManager(clipManager), m_url(url), m_id(id), m_producer(NULL), m_dar(1), m_mainFrame(-1) { - QCryptographicHash context(QCryptographicHash::Sha1); - context.addData((KFileItem(m_url, "text/plain", S_IFREG).timeString() + m_url.fileName()).toAscii().data()); - m_thumbFile = KGlobal::dirs()->saveLocation("tmp" , "kdenlive") + context.result().toHex() + ".thumb"; - //kDebug() << "thumbfile=" << m_thumbFile; +KThumb::KThumb(ClipManager *clipManager, KUrl url, const QString &id, const QString &hash, QObject * parent, const char *name): QObject(parent), m_clipManager(clipManager), m_url(url), m_id(id), m_producer(NULL), m_dar(1), m_mainFrame(-1) { + m_thumbFile = clipManager->projectFolder() + "/thumbs/" + hash + ".thumb"; connect(&audioThumbProducer, SIGNAL(audioThumbProgress(const int)), this, SLOT(slotAudioThumbProgress(const int))); connect(&audioThumbProducer, SIGNAL(audioThumbOver()), this, SLOT(slotAudioThumbOver())); diff --git a/src/kthumb.h b/src/kthumb.h index 4c3d048c..cb24b9b3 100644 --- a/src/kthumb.h +++ b/src/kthumb.h @@ -78,7 +78,7 @@ class KThumb: public QObject { Q_OBJECT public: - KThumb(ClipManager *clipManager, KUrl url, const QString &id, QObject * parent = 0, const char *name = 0); + KThumb(ClipManager *clipManager, KUrl url, const QString &id, const QString &hash, QObject * parent = 0, const char *name = 0); ~KThumb(); void setProducer(Mlt::Producer *producer); void askForAudioThumbs(const QString &id); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 3cb14ff8..f4f28149 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -900,6 +900,13 @@ void MainWindow::readOptions() { } else { ::exit(1); } + } else if (initialGroup.readEntry("version") == "0.7") { + //Add new settings from 0.7.1 + if (KdenliveSettings::defaultprojectfolder().isEmpty()) { + QString path = QDir::homePath() + "/kdenlive"; + if (KStandardDirs::makeDir(path) == false) kDebug() << "/// ERROR CREATING PROJECT FOLDER: " << path; + KdenliveSettings::setDefaultprojectfolder(path); + } } KConfigGroup treecolumns(config, "Project Tree"); const QByteArray state = treecolumns.readEntry("columns", QByteArray()); @@ -915,7 +922,7 @@ void MainWindow::newFile(bool showProjectSettings) { if (!KdenliveSettings::activatetabs()) closeCurrentDocument(); profileName = KdenliveSettings::default_profile(); } else { - ProjectSettings *w = new ProjectSettings(projectTracks.x(), projectTracks.y(), false, this); + ProjectSettings *w = new ProjectSettings(projectTracks.x(), projectTracks.y(), KdenliveSettings::defaultprojectfolder(), false, this); if (w->exec() != QDialog::Accepted) return; if (!KdenliveSettings::activatetabs()) closeCurrentDocument(); profileName = w->selectedProfile(); @@ -1187,7 +1194,7 @@ void MainWindow::slotEditProfiles() { void MainWindow::slotEditProjectSettings() { QPoint p = m_activeDocument->getTracksCount(); - ProjectSettings *w = new ProjectSettings(p.x(), p.y(), true, this); + ProjectSettings *w = new ProjectSettings(p.x(), p.y(), m_activeDocument->projectFolder().path(), true, this); if (w->exec() == QDialog::Accepted) { QString profile = w->selectedProfile(); diff --git a/src/projectsettings.cpp b/src/projectsettings.cpp index 9e05027f..bf7fca0e 100644 --- a/src/projectsettings.cpp +++ b/src/projectsettings.cpp @@ -26,7 +26,7 @@ #include "profilesdialog.h" #include "projectsettings.h" -ProjectSettings::ProjectSettings(int videotracks, int audiotracks, bool readOnlyTracks, QWidget * parent): QDialog(parent), m_isCustomProfile(false) { +ProjectSettings::ProjectSettings(int videotracks, int audiotracks, const QString projectPath, bool readOnlyTracks, QWidget * parent): QDialog(parent), m_isCustomProfile(false) { m_view.setupUi(this); QMap profilesInfo = ProfilesDialog::getProfilesInfo(); @@ -36,6 +36,7 @@ ProjectSettings::ProjectSettings(int videotracks, int audiotracks, bool readOnly m_view.profiles_list->addItem(i.key(), i.value()); } m_view.project_folder->setMode(KFile::Directory); + m_view.project_folder->setPath(projectPath); QString currentProf = KdenliveSettings::current_profile(); for (int i = 0; i < m_view.profiles_list->count(); i++) { diff --git a/src/projectsettings.h b/src/projectsettings.h index 2cfecf84..0fd0d50b 100644 --- a/src/projectsettings.h +++ b/src/projectsettings.h @@ -30,7 +30,7 @@ class ProjectSettings : public QDialog { Q_OBJECT public: - ProjectSettings(int videotracks, int audiotracks, bool readOnlyTracks, QWidget * parent = 0); + ProjectSettings(int videotracks, int audiotracks, const QString projectPath, bool readOnlyTracks, QWidget * parent = 0); QString selectedProfile() const; KUrl selectedFolder() const; QPoint tracks(); diff --git a/src/widgets/configenv_ui.ui b/src/widgets/configenv_ui.ui index a4aa2ab7..da323fdb 100644 --- a/src/widgets/configenv_ui.ui +++ b/src/widgets/configenv_ui.ui @@ -5,8 +5,8 @@ 0 0 - 304 - 236 + 365 + 240 @@ -66,28 +66,38 @@ Default folders - + + + + Project folder + + + + + + + Temporary files - + - + Capture folder - + - + Qt::Vertical diff --git a/src/widgets/wizardextra_ui.ui b/src/widgets/wizardextra_ui.ui index ca2802ba..68ae0cf1 100644 --- a/src/widgets/wizardextra_ui.ui +++ b/src/widgets/wizardextra_ui.ui @@ -5,12 +5,22 @@ 0 0 - 335 - 156 + 429 + 282 + + + Default folder for project files + + + + + + + QFrame::StyledPanel @@ -43,14 +53,14 @@ - + Activate crash recovery (auto save) - + Install extra video mimetypes @@ -60,7 +70,7 @@ - + Qt::Vertical @@ -75,6 +85,13 @@ + + + KUrlRequester + QFrame +
kurlrequester.h
+
+
diff --git a/src/widgets/wizardstandard_ui.ui b/src/widgets/wizardstandard_ui.ui index 63afda66..09999d04 100644 --- a/src/widgets/wizardstandard_ui.ui +++ b/src/widgets/wizardstandard_ui.ui @@ -5,120 +5,66 @@ 0 0 - 233 - 180 + 400 + 188 - - + + - Please set your default video format + Please set your default video profile - - - QFrame::StyledPanel + + + Video Resolution + + + + + + + Qt::Horizontal + + + + 1 + 20 + + + + + + + + DV - - QFrame::Raised + + true - - - - - Video Standard - - - - - - - PAL - - - true - - - - - - - NTSC - - - - - - - Qt::Horizontal - - - - 9 - 20 - - - - - - - - - QFrame::StyledPanel + + + + HDV - - QFrame::Raised + + + + + + Show All - - - - - DV - - - true - - - - - - - Video Resolution - - - - - - - HDV - - - - - - - Qt::Horizontal - - - - 1 - 20 - - - - - - + - + 0 0 @@ -128,19 +74,6 @@ - - - - Qt::Vertical - - - - 20 - 0 - - - - diff --git a/src/wizard.cpp b/src/wizard.cpp index 2a45f6db..dc917a7f 100644 --- a/src/wizard.cpp +++ b/src/wizard.cpp @@ -47,8 +47,20 @@ Wizard::Wizard(QWidget *parent): QWizard(parent) { QWizardPage *page2 = new QWizardPage; page2->setTitle(i18n("Video Standard")); m_standard.setupUi(page2); - m_standard.profiles_list->setMaximumHeight(100); - connect(m_standard.button_pal, SIGNAL(toggled(bool)), this, SLOT(slotCheckStandard())); + //m_standard.profiles_list->setMaximumHeight(100); + // build profiles lists + m_profilesInfo = ProfilesDialog::getProfilesInfo(); + QMap::const_iterator i = m_profilesInfo.constBegin(); + while (i != m_profilesInfo.constEnd()) { + QMap< QString, QString > profileData = ProfilesDialog::getSettingsFromFile(i.value()); + if (profileData.value("width") == "720") m_dvProfiles.append(i.key()); + else if (profileData.value("width").toInt() >= 1080) m_hdvProfiles.append(i.key()); + else m_otherProfiles.append(i.key()); + ++i; + } + + connect(m_standard.button_all, SIGNAL(toggled(bool)), this, SLOT(slotCheckStandard())); + connect(m_standard.button_hdv, SIGNAL(toggled(bool)), this, SLOT(slotCheckStandard())); connect(m_standard.button_dv, SIGNAL(toggled(bool)), this, SLOT(slotCheckStandard())); slotCheckStandard(); connect(m_standard.profiles_list, SIGNAL(itemSelectionChanged()), this, SLOT(slotCheckSelectedItem())); @@ -57,6 +69,8 @@ Wizard::Wizard(QWidget *parent): QWizard(parent) { QWizardPage *page3 = new QWizardPage; page3->setTitle(i18n("Additional Settings")); m_extra.setupUi(page3); + m_extra.projectfolder->setMode(KFile::Directory); + m_extra.projectfolder->setPath(QDir::homePath() + "/kdenlive"); m_extra.videothumbs->setChecked(KdenliveSettings::videothumbnails()); m_extra.audiothumbs->setChecked(KdenliveSettings::audiothumbnails()); m_extra.autosave->setChecked(KdenliveSettings::crashrecovery()); @@ -141,31 +155,28 @@ void Wizard::slotCheckThumbs() { } void Wizard::slotCheckStandard() { + m_standard.profiles_list->clear(); QStringList profiles; - if (m_standard.button_pal->isChecked()) { - // PAL standard - if (m_standard.button_dv->isChecked()) { - profiles << "dv_pal" << "dv_pal_wide"; - } else { - profiles << "hdv_720_25p" << "hdv_720_50p" << "hdv_1080_50i" << "hdv_1080_25p" << "atsc_1080p_24" << "atsc_1080p_25"; - } + if (m_standard.button_dv->isChecked()) { + // DV standard + m_standard.profiles_list->addItems(m_dvProfiles); + } else if (m_standard.button_hdv->isChecked()) { + // HDV standard + m_standard.profiles_list->addItems(m_hdvProfiles); } else { - // NTSC standard - if (m_standard.button_dv->isChecked()) { - profiles << "dv_ntsc" << "dv_ntsc_wide"; - } else { - profiles << "hdv_720_30p" << "hdv_720_60p" << "hdv_1080_30p" << "hdv_1080_60i" << "atsc_720p_30" << "atsc_1080i_60"; - } + m_standard.profiles_list->addItems(m_dvProfiles); + m_standard.profiles_list->addItems(m_hdvProfiles); + m_standard.profiles_list->addItems(m_otherProfiles); + //m_standard.profiles_list->sortItems(); } - m_standard.profiles_list->clear(); - QStringList profilesDescription; - foreach(const QString &prof, profiles) { - QString desc = ProfilesDialog::getProfileDescription(prof); - if (!desc.isEmpty()) { - QListWidgetItem *item = new QListWidgetItem(desc, m_standard.profiles_list); - item->setData(Qt::UserRole, prof); - } + + for (int i = 0; i < m_standard.profiles_list->count(); i++) { + QListWidgetItem *item = m_standard.profiles_list->item(i); + MltVideoProfile prof = ProfilesDialog::getVideoProfile(m_profilesInfo.value(item->text())); + const QString infoString = i18n("Frame size:%1x%2
Frame rate:%3/%4
Aspect ratio:%5/%6
Display ratio:%7/%8").arg(QString::number(prof.width), QString::number(prof.height), QString::number(prof.frame_rate_num), QString::number(prof.frame_rate_den), QString::number(prof.sample_aspect_num), QString::number(prof.sample_aspect_den), QString::number(prof.display_aspect_num), QString::number(prof.display_aspect_den)); + item->setToolTip(infoString); } + m_standard.profiles_list->setSortingEnabled(true); m_standard.profiles_list->setCurrentRow(0); } @@ -190,8 +201,14 @@ void Wizard::adjustSettings() { KdenliveSettings::setVideothumbnails(m_extra.videothumbs->isChecked()); KdenliveSettings::setCrashrecovery(m_extra.autosave->isChecked()); if (m_standard.profiles_list->currentItem()) { - KdenliveSettings::setDefault_profile(m_standard.profiles_list->currentItem()->data(Qt::UserRole).toString()); + QString selectedProfile = m_profilesInfo.value(m_standard.profiles_list->currentItem()->text()); + if (selectedProfile.isEmpty()) selectedProfile = "dv_pal"; + KdenliveSettings::setDefault_profile(selectedProfile); } + QString path = m_extra.projectfolder->url().path(); + if (KStandardDirs::makeDir(path) == false) kDebug() << "/// ERROR CREATING PROJECT FOLDER: " << path; + KdenliveSettings::setDefaultprojectfolder(path); + } void Wizard::slotCheckMlt() { diff --git a/src/wizard.h b/src/wizard.h index 36ea34bd..c874a694 100644 --- a/src/wizard.h +++ b/src/wizard.h @@ -43,6 +43,10 @@ private: Ui::WizardExtra_UI m_extra; QVBoxLayout *m_startLayout; bool m_systemCheckIsOk; + QStringList m_dvProfiles; + QStringList m_hdvProfiles; + QStringList m_otherProfiles; + QMap m_profilesInfo; private slots: void slotCheckThumbs();