]> git.sesse.net Git - kdenlive/blob - src/titlewidget.cpp
Reindent all source files
[kdenlive] / src / titlewidget.cpp
1 /***************************************************************************
2                           titlewidget.h  -  description
3                              -------------------
4     begin                : Feb 28 2008
5     copyright            : (C) 2008 by Marco Gittler
6     email                : g.marco@freenet.de
7  ***************************************************************************/
8
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  ***************************************************************************/
17
18 #include "titlewidget.h"
19 #include "graphicsscenerectmove.h"
20 #include <QGraphicsView>
21 #include <QDomDocument>
22 #include <KDebug>
23 #include <QGraphicsItem>
24 #include <QGraphicsSvgItem>
25 #include <KFileDialog>
26
27 int settingUp = false;
28
29 TitleWidget::TitleWidget(QDialog *parent): QDialog(parent) {
30     setupUi(this);
31     connect(newTextButton, SIGNAL(clicked()), this, SLOT(slotNewText()));
32     connect(newRectButton, SIGNAL(clicked()), this, SLOT(slotNewRect()));
33     connect(kcolorbutton, SIGNAL(clicked()), this, SLOT(slotChangeBackground())) ;
34     connect(horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(slotChangeBackground())) ;
35     connect(ktextedit, SIGNAL(textChanged()), this , SLOT(textChanged()));
36     connect(fontColorButton, SIGNAL(clicked()), this, SLOT(textChanged())) ;
37     //connect (fontBold, SIGNAL ( clicked()), this, SLOT( setBold()) ) ;
38     connect(loadButton, SIGNAL(clicked()), this, SLOT(loadTitle())) ;
39     connect(saveButton, SIGNAL(clicked()), this, SLOT(saveTitle())) ;
40
41
42     connect(kfontrequester, SIGNAL(fontSelected(const QFont &)), this, SLOT(textChanged())) ;
43     connect(textAlpha, SIGNAL(valueChanged(int)), this, SLOT(textChanged()));
44     //connect (ktextedit, SIGNAL(selectionChanged()), this , SLOT (textChanged()));
45
46     connect(rectFAlpha, SIGNAL(valueChanged(int)), this, SLOT(rectChanged()));
47     connect(rectBAlpha, SIGNAL(valueChanged(int)), this, SLOT(rectChanged()));
48     connect(rectFColor, SIGNAL(clicked()), this, SLOT(rectChanged()));
49     connect(rectBColor, SIGNAL(clicked()), this, SLOT(rectChanged()));
50     connect(rectLineWidth, SIGNAL(valueChanged(int)), this, SLOT(rectChanged()));
51
52     connect(startViewportX, SIGNAL(valueChanged(int)), this, SLOT(setupViewports()));
53     connect(startViewportY, SIGNAL(valueChanged(int)), this, SLOT(setupViewports()));
54     connect(startViewportSize, SIGNAL(valueChanged(int)), this, SLOT(setupViewports()));
55     connect(endViewportX, SIGNAL(valueChanged(int)), this, SLOT(setupViewports()));
56     connect(endViewportY, SIGNAL(valueChanged(int)), this, SLOT(setupViewports()));
57     connect(endViewportSize, SIGNAL(valueChanged(int)), this, SLOT(setupViewports()));
58
59     connect(zValue, SIGNAL(valueChanged(int)), this, SLOT(zIndexChanged(int)));
60     connect(svgfilename, SIGNAL(urlSelected(const KUrl&)), this, SLOT(svgSelected(const KUrl &)));
61     connect(itemzoom, SIGNAL(valueChanged(int)), this, SLOT(itemScaled(int)));
62     connect(itemrotate, SIGNAL(valueChanged(int)), this, SLOT(itemRotate(int)));
63
64     GraphicsSceneRectMove *scene = new GraphicsSceneRectMove(this);
65
66     // a gradient background
67     QRadialGradient *gradient = new QRadialGradient(0, 0, 10);
68     gradient->setSpread(QGradient::ReflectSpread);
69     //scene->setBackgroundBrush(*gradient);
70
71     graphicsView->setScene(scene);
72     m_titledocument.setScene(scene);
73     connect(graphicsView->scene(), SIGNAL(selectionChanged()), this , SLOT(selectionChanged()));
74     initViewports();
75
76     graphicsView->show();
77     graphicsView->setRenderHint(QPainter::Antialiasing);
78     graphicsView->setInteractive(true);
79     graphicsView->resize(400, 300);
80
81     toolBox->setItemEnabled(2, false);
82     toolBox->setItemEnabled(3, false);
83 }
84
85 void TitleWidget::initViewports() {
86     startViewport = new QGraphicsPolygonItem(QPolygonF(QRectF(0, 0, 0, 0)));
87     endViewport = new QGraphicsPolygonItem(QPolygonF(QRectF(0, 0, 0, 0)));
88
89     QPen startpen(Qt::DotLine);
90     QPen endpen(Qt::DashDotLine);
91     startpen.setColor(QColor(100, 200, 100, 140));
92     endpen.setColor(QColor(200, 100, 100, 140));
93
94     startViewport->setPen(startpen);
95     endViewport->setPen(endpen);
96
97     startViewportSize->setValue(40);
98     endViewportSize->setValue(40);
99
100     startViewport->setZValue(-1000);
101     endViewport->setZValue(-1000);
102
103     startViewport->setFlags(/*QGraphicsItem::ItemIsMovable|*/QGraphicsItem::ItemIsSelectable);
104     endViewport->setFlags(/*QGraphicsItem::ItemIsMovable|*/QGraphicsItem::ItemIsSelectable);
105
106     graphicsView->scene()->addItem(startViewport);
107     graphicsView->scene()->addItem(endViewport);
108 }
109
110 void TitleWidget::slotNewRect() {
111
112     QGraphicsRectItem * ri = graphicsView->scene()->addRect(-50, -50, 100, 100);
113     ri->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
114 }
115
116 void TitleWidget::slotNewText() {
117     QGraphicsTextItem *tt = graphicsView->scene()->addText("Text here");
118     tt->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
119     tt->setTextInteractionFlags(Qt::TextEditorInteraction);
120     connect(tt->document(), SIGNAL(contentsChanged()), this, SLOT(selectionChanged()));
121     kDebug() << tt->metaObject()->className();
122     /*QGraphicsRectItem * ri=graphicsView->scene()->addRect(-50,-50,100,100);
123     ri->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);*/
124
125 }
126
127 void TitleWidget::zIndexChanged(int v) {
128     QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
129     if (l.size() >= 1) {
130         l[0]->setZValue(v);
131     }
132 }
133
134 void TitleWidget::selectionChanged() {
135     QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
136     toolBox->setItemEnabled(2, false);
137     toolBox->setItemEnabled(3, false);
138     if (l.size() == 1) {
139
140         if ((l[0])->type() == 8) {
141             QGraphicsTextItem* i = ((QGraphicsTextItem*)l[0]);
142             if (l[0]->hasFocus())
143                 ktextedit->setHtml(i->toHtml());
144             toolBox->setCurrentIndex(2);
145             toolBox->setItemEnabled(2, true);
146         } else
147             if ((l[0])->type() == 3) {
148                 settingUp = true;
149                 QGraphicsRectItem *rec = ((QGraphicsRectItem*)l[0]);
150                 toolBox->setCurrentIndex(3);
151                 toolBox->setItemEnabled(3, true);
152                 rectFAlpha->setValue(rec->pen().color().alpha());
153                 rectBAlpha->setValue(rec->brush().isOpaque() ? rec->brush().color().alpha() : 0);
154                 kDebug() << rec->brush().color().alpha();
155                 QColor fcol = rec->pen().color();
156                 QColor bcol = rec->brush().color();
157                 //fcol.setAlpha(255);
158                 //bcol.setAlpha(255);
159                 rectFColor->setColor(fcol);
160                 rectBColor->setColor(bcol);
161                 settingUp = false;
162                 rectLineWidth->setValue(rec->pen().width());
163             } else {
164                 //toolBox->setCurrentIndex(0);
165             }
166         zValue->setValue((int)l[0]->zValue());
167         itemzoom->setValue((int)transformations[l[0]].scalex*100);
168         itemrotate->setValue((int)transformations[l[0]].rotate);
169     }
170 }
171
172 void TitleWidget::slotChangeBackground() {
173     QColor color = kcolorbutton->color();
174     color.setAlpha(horizontalSlider->value());
175     graphicsView->scene()->setBackgroundBrush(QBrush(color));
176 }
177
178 void TitleWidget::textChanged() {
179     QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
180     if (l.size() == 1 && (l[0])->type() == 8 && !l[0]->hasFocus()) {
181         kDebug() << ktextedit->document()->toHtml();
182         ((QGraphicsTextItem*)l[0])->setHtml(ktextedit->toHtml());
183     }
184 }
185
186 void TitleWidget::rectChanged() {
187     QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
188     if (l.size() == 1 && (l[0])->type() == 3 && !settingUp) {
189         QGraphicsRectItem *rec = (QGraphicsRectItem*)l[0];
190         QColor f = rectFColor->color();
191         f.setAlpha(rectFAlpha->value());
192         QPen penf(f);
193         penf.setWidth(rectLineWidth->value());
194         rec->setPen(penf);
195         QColor b = rectBColor->color();
196         b.setAlpha(rectBAlpha->value());
197         rec->setBrush(QBrush(b));
198     }
199 }
200
201 void TitleWidget::fontBold() {
202     QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
203     if (l.size() == 1 && (l[0])->type() == 8 && !l[0]->hasFocus()) {
204         //ktextedit->document()->setTextOption();
205     }
206 }
207
208 void TitleWidget::svgSelected(const KUrl& u) {
209     QGraphicsSvgItem *svg = new QGraphicsSvgItem(u.toLocalFile());
210     svg->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
211     graphicsView->scene()->addItem(svg);
212 }
213
214 void TitleWidget::itemScaled(int val) {
215     QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
216     if (l.size() == 1) {
217         Transform x = transformations[l[0]];
218         x.scalex = (double)val / 100.0;
219         x.scaley = (double)val / 100.0;
220         QTransform qtrans;
221         qtrans.scale(x.scalex, x.scaley);
222         qtrans.rotate(x.rotate);
223         l[0]->setTransform(qtrans);
224         transformations[l[0]] = x;
225     }
226 }
227
228 void TitleWidget::itemRotate(int val) {
229     QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
230     if (l.size() == 1) {
231         Transform x = transformations[l[0]];
232         x.rotate = (double)val;
233         QTransform qtrans;
234         qtrans.scale(x.scalex, x.scaley);
235         qtrans.rotate(x.rotate);
236         l[0]->setTransform(qtrans);
237         transformations[l[0]] = x;
238     }
239 }
240
241 void TitleWidget::setupViewports() {
242     double aspect_ratio = 4.0 / 3.0;//read from project
243
244     QRectF sp(0, 0, 0, 0);
245     QRectF ep(0, 0, 0, 0);
246
247     double sv_size = startViewportSize->value();
248     double ev_size = endViewportSize->value();
249     sp.adjust(-sv_size, -sv_size / aspect_ratio, sv_size, sv_size / aspect_ratio);
250     ep.adjust(-ev_size, -ev_size / aspect_ratio, ev_size, ev_size / aspect_ratio);
251
252     startViewport->setPos(startViewportX->value(), startViewportY->value());
253     endViewport->setPos(endViewportX->value(), endViewportY->value());
254
255     startViewport->setPolygon(QPolygonF(sp));
256     endViewport->setPolygon(QPolygonF(ep));
257
258 }
259
260 void TitleWidget::loadTitle() {
261     KUrl url = KFileDialog::getOpenUrl(KUrl(), "*.kdenlivetitle", this, tr("Save Title"));
262     m_titledocument.loadDocument(url, startViewport, endViewport);
263 }
264
265 void TitleWidget::saveTitle() {
266     KUrl url = KFileDialog::getSaveUrl(KUrl(), "*.kdenlivetitle", this, tr("Save Title"));
267     m_titledocument.saveDocument(url, startViewport, endViewport);
268 }
269
270 #include "moc_titlewidget.cpp"
271