~ubuntu-branches/ubuntu/hardy/kdenlive/hardy

« back to all changes in this revision

Viewing changes to kdenlive/clipproperties.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Albin Tonnerre
  • Date: 2008-01-30 17:07:51 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20080130170751-lyc8p6xvd7o98ur5
Tags: 0.5.svn20071228-0.0ubuntu1
* Merge from debian-multimedia (LP: #150453). Remaining changes:
  - Bump compat to 5
  - Suggest dvgrab and ffmpeg (needed for firewire capture)
  - debian/{rules,control}: add a kdenlive-data package
  - Add .install files for kdenlive and kdenlive-data
  - debian/copyright: add some copyright information
  - Modify Maintainer value to match the DebianMaintainerField specification

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
#include <qlayout.h>
24
24
#include <qslider.h>
25
25
#include <qcheckbox.h>
26
 
#include <qtextedit.h>
27
26
#include <qcolor.h>
28
27
#include <qtoolbutton.h>
29
28
#include <qradiobutton.h>
30
29
#include <qspinbox.h>
 
30
#include <qtabwidget.h>
31
31
 
32
32
#include <kpushbutton.h>
33
33
#include <kurlrequester.h>
34
34
#include <klocale.h>
35
35
#include <kcolorbutton.h>
 
36
#include <ktextedit.h>
36
37
#include <kfiledialog.h>
37
38
#include <kcombobox.h>
 
39
#include <klistview.h>
 
40
#include <kiconloader.h>
38
41
#include <kdebug.h>
 
42
#include <kio/netaccess.h>
 
43
#include <krun.h>
39
44
 
40
45
#include "transition.h"
41
46
#include "docclipref.h"
42
47
#include "docclipavfile.h"
43
48
#include "clipproperties.h"
44
49
#include "kdenlivesettings.h"
45
 
 
 
50
#include "playlist.h"
46
51
 
47
52
namespace Gui {
48
53
 
49
 
    ClipProperties::ClipProperties(DocClipRef *refClip, KdenliveDoc * document, QWidget * parent, const char *name):  KDialogBase (KDialogBase::Swallow, 0, parent,name, true, i18n("Clip Properties"), KDialogBase::Ok | KDialogBase::Cancel), m_imageCount(0) {
 
54
    ClipProperties::ClipProperties(DocClipRef *refClip, KdenliveDoc * document, QWidget * parent, const char *name):  KDialogBase (KDialogBase::Swallow, 0, parent,name, true, i18n("Clip Properties"), KDialogBase::User2 | KDialogBase::User1 | KDialogBase::Stretch | KDialogBase::Ok | KDialogBase::Cancel), m_imageCount(0) {
50
55
 
51
56
        clipChoice = new clipProperties_UI(this);
 
57
        setButtonText(KDialogBase::User1, i18n("Edit"));
 
58
        setButtonText(KDialogBase::User2, i18n("Save Description"));
52
59
        clipChoice->edit_name->setText(refClip->name());
53
60
        clipChoice->edit_description->setText(refClip->description());
54
61
        clipChoice->edit_duration->setText(document->timeCode().getTimecode(refClip->duration(), KdenliveSettings::defaultfps()));
63
70
 
64
71
        DocClipAVFile * avclip = refClip->referencedClip()->toDocClipAVFile();
65
72
 
 
73
        if (m_clipType != DocClipBase::PLAYLIST) {
 
74
            showButton( KDialogBase::User1, false);
 
75
            showButton( KDialogBase::User2, false);
 
76
        }
 
77
        else {
 
78
            connect(this, SIGNAL(user1Clicked()), this, SLOT(slotEditPlayList()));
 
79
            connect(this, SIGNAL(user2Clicked()), this, SLOT(saveDescription()));
 
80
            connect(clipChoice->edit_description, SIGNAL(textChanged()), this, SLOT(slotEnableSaveDescription()));
 
81
        }
 
82
        clipChoice->clipType->setText(DocClipBase::getTypeName(m_clipType));
66
83
        // slideshow stuff
67
84
        if (m_clipType != DocClipBase::SLIDESHOW) {
68
85
            clipChoice->ttl_label->hide();
70
87
            clipChoice->image_ttl->hide();
71
88
            clipChoice->image_type_label->hide();
72
89
            clipChoice->imageType->hide();
 
90
            clipChoice->slide_loop->hide();
73
91
        }
 
92
 
74
93
        if (m_clipType == DocClipBase::COLOR) {
75
94
            QString color = avclip->color();
76
95
            color = color.replace(0, 2, "#");
82
101
            clipChoice->transparent_bg->hide();
83
102
            clipChoice->label_file->hide();
84
103
            clipChoice->edit_url->hide();
85
 
            clipChoice->clipType->setText(i18n("Color Clip"));
86
104
            clipChoice->clipSize->setText("-");
87
105
            clipChoice->clipFps->setText("-");
88
106
            clipChoice->clipAudio->setText("-");
89
107
            clipChoice->clipFilesize->setText("-");
 
108
            clipChoice->tab_extra->removePage(clipChoice->tab_extra->page(2));
90
109
        }
91
110
        else if (m_clipType == DocClipBase::IMAGE) {
92
111
            clipChoice->transparent_bg->setChecked(avclip->isTransparent());
96
115
            clipChoice->button_color->hide();
97
116
            clipChoice->label_name->hide();
98
117
            clipChoice->edit_name->hide();
99
 
            clipChoice->clipType->setText(i18n("Image Clip"));
100
118
            clipChoice->clipSize->setText(QString::number(refClip->clipWidth())+"x"+QString::number(refClip->clipHeight()));
101
119
            clipChoice->clipFps->setText("-");
102
120
            clipChoice->clipAudio->setText("-");
103
121
            clipChoice->clipFilesize->setText(refClip->formattedFileSize());
 
122
            clipChoice->tab_extra->removePage(clipChoice->tab_extra->page(2));
104
123
        }
105
124
        else if (m_clipType == DocClipBase::VIRTUAL) {
106
125
            clipChoice->label_color->hide();
107
126
            clipChoice->button_color->hide();
108
127
            clipChoice->label_name->hide();
109
128
            clipChoice->edit_name->hide();
110
 
            clipChoice->clipType->setText(i18n("Virtual Clip"));
111
129
            clipChoice->clipSize->setText(QString::number(refClip->clipWidth())+"x"+QString::number(refClip->clipHeight()));
112
130
            clipChoice->clipFps->setText("-");
113
131
            clipChoice->clipAudio->setText("-");
114
132
            clipChoice->clipFilesize->setText("-");
 
133
            clipChoice->tab_extra->removePage(clipChoice->tab_extra->page(2));
115
134
        }
116
135
        else if (m_clipType == DocClipBase::SLIDESHOW) {
 
136
            clipChoice->slide_loop->setChecked(avclip->loop());
117
137
            clipChoice->transparent_bg->setChecked(avclip->isTransparent());
118
138
            clipChoice->crossfade->setChecked(avclip->hasCrossfade());
119
139
            m_luma = avclip->lumaFile();
129
149
            clipChoice->button_color->hide();
130
150
            clipChoice->label_name->hide();
131
151
            clipChoice->edit_name->hide();
132
 
            clipChoice->clipType->setText(i18n("Slideshow Clip"));
133
152
            clipChoice->image_ttl->setText(document->timeCode().getTimecode(GenTime(avclip->clipTtl(), KdenliveSettings::defaultfps()), KdenliveSettings::defaultfps()));
134
153
            clipChoice->transition_ttl->setText(document->timeCode().getTimecode(GenTime(avclip->lumaDuration(), KdenliveSettings::defaultfps()), KdenliveSettings::defaultfps()));
135
154
 
147
166
            clipChoice->clipFps->setText("-");
148
167
            clipChoice->clipAudio->setText("-");
149
168
            clipChoice->clipFilesize->setText(refClip->formattedFileSize());
 
169
            clipChoice->tab_extra->removePage(clipChoice->tab_extra->page(2));
150
170
        }
151
171
        else {
152
172
                clipChoice->meta_text->setText(avclip->formattedMetaData());
177
197
            }
178
198
            else clipChoice->clipAudio->setText(i18n("None"));
179
199
            if (m_clipType == DocClipBase::AUDIO) {
180
 
                clipChoice->clipType->setText(i18n("Audio Clip"));
 
200
                clipChoice->tab_extra->removePage(clipChoice->tab_extra->page(2));
181
201
            }
182
202
            else { // Video clip
183
203
                QPixmap pix = document->renderer()->getVideoThumbnail(refClip->fileURL().path(), clip->getProjectThumbFrame(), clipChoice->preview_pixmap->width(), clipChoice->preview_pixmap->height());
184
204
                if (!pix.isNull()) clipChoice->preview_pixmap->setPixmap(pix);
185
 
                clipChoice->clipType->setText(i18n("Video Clip"));
186
205
                clipChoice->clipSize->setText(QString::number(refClip->clipWidth())+"x"+QString::number(refClip->clipHeight()));
 
206
                if (m_clipType == DocClipBase::PLAYLIST) {
 
207
                    // westley clip, populate playlist tab
 
208
                    clipChoice->tab_extra->page(2)->setEnabled(true);
 
209
                    clipChoice->tab_extra->removePage(clipChoice->tab_extra->page(1));
 
210
                    parsePlayList(refClip->fileURL());
 
211
                }
 
212
                else {
 
213
                    clipChoice->tab_extra->removePage(clipChoice->tab_extra->page(2));
 
214
                }
187
215
            }
188
216
        }
189
217
 
198
226
    {
199
227
    }
200
228
 
 
229
    void ClipProperties::saveDescription()
 
230
    {
 
231
        PlayList::saveDescription(url(), description());
 
232
        enableButton(KDialogBase::User2, false);
 
233
    }
 
234
 
 
235
    void ClipProperties::slotEnableSaveDescription()
 
236
    {
 
237
        enableButton(KDialogBase::User2, true);
 
238
    }
 
239
 
 
240
    void ClipProperties::slotEditPlayList()
 
241
    {
 
242
        (void) new KRun(KURL(clipChoice->edit_url->url()));
 
243
    }
 
244
 
 
245
    void ClipProperties::parsePlayList(KURL url)
 
246
    {
 
247
        QDomDocument doc;
 
248
        doc.setContent(&QFile(url.path()), false);
 
249
        QDomElement documentElement = doc.documentElement();
 
250
        if (documentElement.tagName() != "westley") {
 
251
        kdWarning() << "KdenliveDoc::loadFromXML() document element has unknown tagName : " << documentElement.tagName() << endl;
 
252
        }
 
253
 
 
254
        QDomNode kdenlivedoc = documentElement.elementsByTagName("kdenlivedoc").item(0);
 
255
        QDomNode n;
 
256
        if (!kdenlivedoc.isNull()) n = kdenlivedoc.firstChild();
 
257
        else n = documentElement.firstChild();
 
258
        QDomElement e;
 
259
        bool missingFiles = false;
 
260
 
 
261
        while (!n.isNull()) {
 
262
            e = n.toElement();
 
263
            if (!e.isNull() && e.tagName() == "producer") {
 
264
                    QString prodUrl = e.attribute("resource", QString::null);
 
265
                    if (!prodUrl.isEmpty()) {
 
266
                        QListViewItem *item = new QListViewItem(clipChoice->clips_list, prodUrl);
 
267
                        if (KIO::NetAccess::exists(KURL(prodUrl), false, this)) 
 
268
                            item->setPixmap(0, KGlobal::iconLoader()->loadIcon("ok", KIcon::Small));
 
269
                        else {
 
270
                            item->setPixmap(0, KGlobal::iconLoader()->loadIcon("no", KIcon::Small));
 
271
                            missingFiles = true;
 
272
                        }
 
273
                    }
 
274
            }
 
275
            n = n.nextSibling();
 
276
        }
 
277
        if (missingFiles) {
 
278
            clipChoice->tab_extra->setTabIconSet(clipChoice->tab_extra->page(1), KGlobal::iconLoader()->loadIcon("file_broken", KIcon::Small));
 
279
            clipChoice->tab_extra->setCurrentPage(1);
 
280
        }
 
281
    }
 
282
 
201
283
    void ClipProperties::insertLuma(const QPixmap &pix, const QString &txt)
202
284
    {
203
285
        clipChoice->luma_list->insertItem(pix, txt);
246
328
        if (!pix.isNull()) clipChoice->preview_pixmap->setPixmap(pix);
247
329
    }
248
330
 
249
 
    QString ClipProperties::color()
 
331
    QString ClipProperties::color() const
250
332
    {
251
333
        QString color = clipChoice->button_color->color().name();
252
334
        color = color.replace(0, 1, "0x") + "ff";
253
335
        return color;
254
336
    }
255
337
    
256
 
    QString ClipProperties::name()
 
338
    QString ClipProperties::name() const
257
339
    {
258
340
        return clipChoice->edit_name->text();
259
341
    }
260
342
 
261
 
    int ClipProperties::ttl()
 
343
    bool ClipProperties::loop() const
 
344
    {
 
345
        return clipChoice->slide_loop->isChecked();
 
346
    }
 
347
 
 
348
    int ClipProperties::ttl() const
262
349
    {
263
350
        return  m_document->getTimecodePosition(clipChoice->image_ttl->text()).frames(KdenliveSettings::defaultfps());
264
351
    }
265
352
 
266
 
    QString ClipProperties::extension()
 
353
    QString ClipProperties::extension() const
267
354
    {
268
355
        return clipChoice->imageType->currentText();
269
356
    }
270
357
    
271
 
    QString ClipProperties::description()
 
358
    QString ClipProperties::description() const
272
359
    {
273
360
        return clipChoice->edit_description->text();
274
361
    }
275
362
    
276
 
    GenTime ClipProperties::duration()
 
363
    GenTime ClipProperties::duration() const
277
364
    {
278
365
        QString d = clipChoice->edit_duration->text();
279
366
        return m_document->getTimecodePosition(d);
285
372
        clipChoice->preview_pixmap->repaint();
286
373
    }
287
374
    
288
 
    QString ClipProperties::url()
 
375
    QString ClipProperties::url() const
289
376
    {
290
 
        return clipChoice->edit_url->url(); 
 
377
        return clipChoice->edit_url->url();
291
378
    }
292
379
    
293
 
    bool ClipProperties::transparency()
 
380
    bool ClipProperties::transparency() const
294
381
    {
295
382
        return clipChoice->transparent_bg->isChecked(); 
296
383
    }
297
384
 
298
 
    bool ClipProperties::crossfading()
 
385
    bool ClipProperties::crossfading() const
299
386
    {
300
387
        return clipChoice->crossfade->isChecked(); 
301
388
    }
302
389
 
303
390
    QString ClipProperties::lumaFile() const
304
391
    {
 
392
        if (!clipChoice->luma_selected->isChecked()) return QString::null;
305
393
        return clipChoice->luma_list->currentText();
306
394
    }
307
395