]> git.sesse.net Git - kdenlive/commitdiff
Some work on project tree view
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 29 Dec 2007 23:21:53 +0000 (23:21 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 29 Dec 2007 23:21:53 +0000 (23:21 +0000)
svn path=/branches/KDE4/; revision=1778

src/CMakeLists.txt
src/kdenliveui.rc
src/main.cpp
src/mainwindow.cpp
src/projectlist.cpp
src/projectlist.h
src/widgets/colorclip_ui.ui [new file with mode: 0644]
src/widgets/projectlist_ui.ui [deleted file]

index d415349948252a3368c660c7a5914646c883559f..a9afc59bb8e3031dd0b0a76652b1b9d8f4aa6bfc 100644 (file)
@@ -18,8 +18,8 @@ ${LIBFFMPEG_LIBRARY}
 
 kde4_add_ui_files(kdenlive_UI
   widgets/timeline_ui.ui
-  widgets/projectlist_ui.ui
   widgets/monitor_ui.ui
+  widgets/colorclip_ui.ui
 )
  
 set(kdenlive_SRCS 
index f8d6be5cddb50824cdddc241c3794b5781e3b736..1fc77acebd2c7099a68ffbdf3e094f818e97612c 100644 (file)
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui name="kdenlive" version="1">
+<gui name="kdenlive" version="3">
   <ToolBar name="mainToolBar" >
     <text>Main Toolbar</text>
     <Action name="clear" />
   </ToolBar>
+
   <MenuBar>
     <Menu name="file" >
       <Action name="clear" />
index cbfa0c24785a2efee6cf82728170df4a69120a0a..52db06a4514d3821f56d24a3ba9696a063894368 100644 (file)
@@ -7,7 +7,7 @@
  
 int main (int argc, char *argv[])
 {
-  KAboutData aboutData( "Kdenlive", "kdenlive",
+  KAboutData aboutData( "kdenlive", "kdenlive",
       ki18n("Kdenlive"), "1.0",
       ki18n("A simple text area which can load and save."),
       KAboutData::License_GPL,
index 3d5c8e3acee573157ec8c805ea249b9671f6d884..822d82c89256d0acc0fa81102ed5e793f08607da 100644 (file)
@@ -29,21 +29,25 @@ MainWindow::MainWindow(QWidget *parent)
   setCentralWidget(m_timelineArea);
 
   projectListDock = new QDockWidget(i18n("Project Tree"), this);
+  projectListDock->setObjectName("project_tree");
   m_projectList = new ProjectList(NULL, this);
   projectListDock->setWidget(m_projectList);
   addDockWidget(Qt::TopDockWidgetArea, projectListDock);
 
   effectListDock = new QDockWidget(i18n("Effect List"), this);
+  effectListDock->setObjectName("project_tree");
   effectList = new KListWidget(this);
   effectListDock->setWidget(effectList);
   addDockWidget(Qt::TopDockWidgetArea, effectListDock);
   
   effectStackDock = new QDockWidget(i18n("Effect Stack"), this);
+  effectStackDock->setObjectName("project_tree");
   effectStack = new KListWidget(this);
   effectStackDock->setWidget(effectStack);
   addDockWidget(Qt::TopDockWidgetArea, effectStackDock);
   
   transitionConfigDock = new QDockWidget(i18n("Transition"), this);
+  transitionConfigDock->setObjectName("project_tree");
   transitionConfig = new KListWidget(this);
   transitionConfigDock->setWidget(transitionConfig);
   addDockWidget(Qt::TopDockWidgetArea, transitionConfigDock);
@@ -51,11 +55,13 @@ MainWindow::MainWindow(QWidget *parent)
   Mlt::Factory::init(NULL);
 
   clipMonitorDock = new QDockWidget(i18n("Clip Monitor"), this);
+  clipMonitorDock->setObjectName("project_tree");
   m_clipMonitor = new Monitor("clip", this);
   clipMonitorDock->setWidget(m_clipMonitor);
   addDockWidget(Qt::TopDockWidgetArea, clipMonitorDock);
 
   projectMonitorDock = new QDockWidget(i18n("Project Monitor"), this);
+  projectMonitorDock->setObjectName("project_tree");
   m_projectMonitor = new Monitor("project", this);
   projectMonitorDock->setWidget(m_projectMonitor);
   addDockWidget(Qt::TopDockWidgetArea, projectMonitorDock);
index a68ec1c23c95b981bd16c68c0d4c9b3b530b6998..6635bb4c66478f9cc0db69e5cc1949d5e417132f 100644 (file)
@@ -3,14 +3,18 @@
 #include <QStylePainter>
 #include <QPixmap>
 #include <QIcon>
+#include <QToolBar>
+#include <QDialog>
 
 #include <KDebug>
+#include <KAction>
 #include <KLocale>
 #include <KFileDialog>
 #include <klistwidgetsearchline.h>
 
 #include "projectlist.h"
 #include "projectitem.h"
+#include "ui_colorclip_ui.h"
 
 #include <QtGui>
 
@@ -53,20 +57,57 @@ ProjectList::ProjectList(Render *projectRender, QWidget *parent)
     : QWidget(parent), m_render(projectRender)
 {
 
-  ui.setupUi(this);
-  ui.project_search->setTreeWidget(ui.project_list);
-      QStringList itemEntry;
-      itemEntry.append(QString::null);
-      itemEntry.append("coucou");
-  new ProjectItem(ui.project_list, itemEntry);
-  connect(ui.button_add, SIGNAL(clicked ( bool )), this, SLOT(slotAddClip()));
-  connect(ui.project_list, SIGNAL(itemSelectionChanged()), this, SLOT(slotClipSelected()));
-  connect(ui.project_list, SIGNAL(itemDoubleClicked ( QTreeWidgetItem *, int )), this, SLOT(slotEditClip(QTreeWidgetItem *, int)));
+  QWidget *vbox = new QWidget;
+  listView = new QTreeWidget(this);;
+  QVBoxLayout *layout = new QVBoxLayout;
+
+  // setup toolbar
+  searchView = new KTreeWidgetSearchLine (this);
+  QToolBar *bar = new QToolBar("projectToolBar", this);
+  bar->addWidget (searchView);
+
+  QToolButton *addButton = new QToolButton( bar );
+  QMenu *addMenu = new QMenu(this);
+  addButton->setMenu( addMenu );
+  addButton->setPopupMode(QToolButton::MenuButtonPopup);
+  bar->addWidget (addButton);
+  
+  QAction *addClip = addMenu->addAction (KIcon("document-new"), i18n("Add Clip"));
+  connect(addClip, SIGNAL(triggered()), this, SLOT(slotAddClip()));
+
+  QAction *addColorClip = addMenu->addAction (KIcon("document-new"), i18n("Add Color Clip"));
+  connect(addColorClip, SIGNAL(triggered()), this, SLOT(slotAddColorClip()));
+
+  QAction *deleteClip = bar->addAction (KIcon("edit-delete"), i18n("Delete Clip"));
+  connect(deleteClip, SIGNAL(triggered()), this, SLOT(slotRemoveClip()));
+
+  QAction *editClip = bar->addAction (KIcon("document-properties"), i18n("Edit Clip"));
+  connect(editClip, SIGNAL(triggered()), this, SLOT(slotEditClip()));
 
+  addButton->setDefaultAction( addClip );
 
-  ui.project_list->setItemDelegate(new ItemDelegate(ui.project_list));
-  ui.project_list->setIconSize(QSize(60, 40));
-  ui.project_list->setSortingEnabled (true);
+  layout->addWidget( bar );
+  layout->addWidget( listView );
+  setLayout( layout );
+
+  searchView->setTreeWidget(listView);
+  listView->setColumnCount(3);
+  QStringList headers;
+  headers<<i18n("Thumbnail")<<i18n("Filename")<<i18n("Description");
+  listView->setHeaderLabels(headers);
+
+  QStringList itemEntry;
+  itemEntry.append(QString::null);
+  itemEntry.append("coucou");
+  new ProjectItem(listView, itemEntry);
+
+  connect(listView, SIGNAL(itemSelectionChanged()), this, SLOT(slotClipSelected()));
+  //connect(listView, SIGNAL(itemDoubleClicked ( QTreeWidgetItem *, int )), this, SLOT(slotEditClip(QTreeWidgetItem *, int)));
+
+
+  listView->setItemDelegate(new ItemDelegate(listView));
+  listView->setIconSize(QSize(60, 40));
+  listView->setSortingEnabled (true);
 
 }
 
@@ -85,15 +126,20 @@ void ProjectList::slotDoubleClicked(QListWidgetItem *item, const QPoint &pos)
 
 void ProjectList::slotClipSelected()
 {
-  ProjectItem *item = (ProjectItem*) ui.project_list->currentItem();
+  ProjectItem *item = (ProjectItem*) listView->currentItem();
   if (item) emit clipSelected(item->toXml());
 }
 
-void ProjectList::slotEditClip(QTreeWidgetItem *item, int column)
+void ProjectList::slotEditClip()
 {
-  if (column != 2){
-    return;
-  }
+
+}
+
+void ProjectList::slotRemoveClip()
+{
+  kDebug()<<"//////////  SLOT REMOVE";
+  if (!listView->currentItem()) return;
+  delete listView->currentItem();
 }
 
 void ProjectList::slotAddClip()
@@ -108,16 +154,52 @@ void ProjectList::slotAddClip()
       QStringList itemEntry;
       itemEntry.append(QString::null);
       itemEntry.append((*it).fileName());
-      ProjectItem *item = new ProjectItem(ui.project_list, itemEntry, QDomElement());
+      ProjectItem *item = new ProjectItem(listView, itemEntry, QDomElement());
       item->setData(1, FullPathRole, (*it).path());
       emit getFileProperties((*it), 0);
   }
+}
+
+void ProjectList::slotAddColorClip()
+{
+  QDialog *dia = new QDialog;
+  Ui::ColorClip_UI *dia_ui = new Ui::ColorClip_UI();
+  dia_ui->setupUi(dia);
+  dia_ui->clip_name->setText(i18n("Color Clip"));
+  if (dia->exec() == QDialog::Accepted)
+  {
+    QDomDocument doc;
+    QDomElement element = doc.createElement("producer");
+    element.setAttribute("mlt_service", "colour");
+    QString color = dia_ui->clip_color->color().name();
+    color = color.replace(0, 1, "0x") + "ff";
+    element.setAttribute("colour", color);
+    element.setAttribute("type", (int) DocClipBase::COLOR);
+    QStringList itemEntry;
+    itemEntry.append(QString::null);
+    itemEntry.append(dia_ui->clip_name->text());
+    ProjectItem *item = new ProjectItem(listView, itemEntry, element);
+    QPixmap pix(60, 40);
+    pix.fill(dia_ui->clip_color->color());
+    item->setIcon(0, QIcon(pix));
 
+    
+  }
+  delete dia_ui;
+  delete dia;
+  /*for (it = list.begin(); it != list.end(); it++) {
+      QStringList itemEntry;
+      itemEntry.append(QString::null);
+      itemEntry.append((*it).fileName());
+      ProjectItem *item = new ProjectItem(listView, itemEntry, QDomElement());
+      item->setData(1, FullPathRole, (*it).path());
+      emit getFileProperties((*it), 0);
+  }*/
 }
 
 void ProjectList::populate(QDomNodeList prods)
 {
-  ui.project_list->clear();
+  listView->clear();
   for (int i = 0; i <  prods.count () ; i++)
   {
     addProducer(prods.item(i).toElement());
@@ -128,12 +210,12 @@ void ProjectList::slotReplyGetFileProperties(const QMap < QString, QString > &pr
 {
   QTreeWidgetItem *parent = 0;
   int count =
-    parent ? parent->childCount() : ui.project_list->topLevelItemCount();
+    parent ? parent->childCount() : listView->topLevelItemCount();
 
   for (int i = 0; i < count; i++)
   {
     QTreeWidgetItem *item =
-      parent ? parent->child(i) : ui.project_list->topLevelItem(i);
+      parent ? parent->child(i) : listView->topLevelItem(i);
 
     if (item->data(1, FullPathRole).toString() == properties["filename"]) {
       ((ProjectItem *) item)->setProperties(properties, metadata);
@@ -147,12 +229,12 @@ void ProjectList::slotReplyGetImage(const KUrl &url, int pos, const QPixmap &pix
 {
    QTreeWidgetItem *parent = 0;
   int count =
-    parent ? parent->childCount() : ui.project_list->topLevelItemCount();
+    parent ? parent->childCount() : listView->topLevelItemCount();
 
   for (int i = 0; i < count; i++)
   {
     QTreeWidgetItem *item =
-      parent ? parent->child(i) : ui.project_list->topLevelItem(i);
+      parent ? parent->child(i) : listView->topLevelItem(i);
 
     if (item->data(1, FullPathRole).toString() == url.path()) {
       item->setIcon(0,pix);
@@ -174,7 +256,7 @@ void ProjectList::addProducer(QDomElement producer)
       QStringList itemEntry;
       itemEntry.append(QString::null);
       itemEntry.append(resource.fileName());
-      ProjectItem *item = new ProjectItem(ui.project_list, itemEntry, producer);
+      ProjectItem *item = new ProjectItem(listView, itemEntry, producer);
       //item->setIcon(0, Render::getVideoThumbnail(resource, 0, 60, 40));
       item->setData(1, FullPathRole, resource.path());
       item->setData(1, ClipTypeRole, (int) type);
@@ -188,8 +270,8 @@ void ProjectList::addProducer(QDomElement producer)
     pix.fill(QColor(colour.left(7)));
     QStringList itemEntry;
     itemEntry.append(QString::null);
-    itemEntry.append(i18n("Color Clip"));
-    ProjectItem *item = new ProjectItem(ui.project_list, itemEntry, producer);
+    itemEntry.append(producer.attribute("name"););
+    ProjectItem *item = new ProjectItem(listView, itemEntry, producer);
     item->setIcon(0, QIcon(pix));
     item->setData(1, ClipTypeRole, (int) type);
   }
index 34ac7f9f08cd07c038569d0ccc0d732bd886af83..584add301f4819832cc9b9664bdbb7542028cfcd 100644 (file)
@@ -3,8 +3,8 @@
 
 #include <QDomNodeList>
 #include <QTreeWidget>
+#include <KTreeWidgetSearchLine>
 
-#include "ui_projectlist_ui.h"
 #include "docclipbase.h"
 #include "renderer.h"
 
@@ -23,14 +23,17 @@ class ProjectList : public QWidget
     void slotReplyGetFileProperties(const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata);
 
   private:
-    Ui::ProjectList_UI ui;
+    QTreeWidget *listView;
+    KTreeWidgetSearchLine *searchView;
     Render *m_render;
 
   private slots:
     void slotDoubleClicked(QListWidgetItem *, const QPoint &);
     void slotAddClip();
-    void slotEditClip(QTreeWidgetItem *item, int column);
+    void slotRemoveClip();
+    void slotEditClip();
     void slotClipSelected();
+    void slotAddColorClip();
 
   signals:
     void clipSelected(const QDomElement &);
diff --git a/src/widgets/colorclip_ui.ui b/src/widgets/colorclip_ui.ui
new file mode 100644 (file)
index 0000000..272f558
--- /dev/null
@@ -0,0 +1,135 @@
+<ui version="4.0" >
+ <class>ColorClip_UI</class>
+ <widget class="QDialog" name="ColorClip_UI" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>286</width>
+    <height>176</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Dialog</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" >
+    <widget class="QLabel" name="label_3" >
+     <property name="text" >
+      <string>Name</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1" colspan="2" >
+    <widget class="KLineEdit" name="clip_name" />
+   </item>
+   <item row="1" column="0" >
+    <widget class="QLabel" name="label" >
+     <property name="text" >
+      <string>Clip Color</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1" colspan="2" >
+    <widget class="KColorButton" name="clip_color" >
+     <property name="color" >
+      <color>
+       <red>0</red>
+       <green>0</green>
+       <blue>0</blue>
+      </color>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QLabel" name="label_2" >
+     <property name="text" >
+      <string>Duration</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" colspan="2" >
+    <widget class="KRestrictedLine" name="clip_duration" >
+     <property name="inputMask" >
+      <string>99:99:99:99; </string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="2" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>20</width>
+       <height>31</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="4" column="0" colspan="3" >
+    <widget class="QDialogButtonBox" name="buttonBox" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons" >
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>KColorButton</class>
+   <extends>QPushButton</extends>
+   <header>kcolorbutton.h</header>
+  </customwidget>
+  <customwidget>
+   <class>KLineEdit</class>
+   <extends>QLineEdit</extends>
+   <header>klineedit.h</header>
+  </customwidget>
+  <customwidget>
+   <class>KRestrictedLine</class>
+   <extends>KLineEdit</extends>
+   <header>krestrictedline.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>ColorClip_UI</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>ColorClip_UI</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/widgets/projectlist_ui.ui b/src/widgets/projectlist_ui.ui
deleted file mode 100644 (file)
index 17edccb..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<ui version="4.0" >
- <class>ProjectList_UI</class>
- <widget class="QWidget" name="ProjectList_UI" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>347</width>
-    <height>205</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout" >
-   <item row="0" column="0" >
-    <widget class="KTreeWidgetSearchLine" name="project_search" />
-   </item>
-   <item row="0" column="1" >
-    <widget class="KPushButton" name="button_add" />
-   </item>
-   <item row="0" column="2" >
-    <widget class="KPushButton" name="button_edit" />
-   </item>
-   <item row="0" column="3" >
-    <widget class="KPushButton" name="button_delete" />
-   </item>
-   <item row="1" column="0" colspan="4" >
-    <widget class="QTreeWidget" name="project_list" >
-     <property name="alternatingRowColors" >
-      <bool>true</bool>
-     </property>
-     <property name="allColumnsShowFocus" >
-      <bool>true</bool>
-     </property>
-     <column>
-      <property name="text" >
-       <string>Thumb</string>
-      </property>
-     </column>
-     <column>
-      <property name="text" >
-       <string>Filename</string>
-      </property>
-     </column>
-     <column>
-      <property name="text" >
-       <string>Description</string>
-      </property>
-     </column>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>KPushButton</class>
-   <extends>QPushButton</extends>
-   <header>kpushbutton.h</header>
-  </customwidget>
-  <customwidget>
-   <class>KTreeWidgetSearchLine</class>
-   <extends>KLineEdit</extends>
-   <header>ktreewidgetsearchline.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>