1 /***************************************************************************
2 titlewidget.h - description
5 copyright : (C) 2008 by Marco Gittler
6 email : g.marco@freenet.de
7 ***************************************************************************/
9 /***************************************************************************
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. *
16 ***************************************************************************/
18 #include "titlewidget.h"
19 #include "graphicsscenerectmove.h"
20 #include <QGraphicsView>
21 #include <QDomDocument>
23 #include <QGraphicsItem>
24 #include <QGraphicsSvgItem>
25 #include <KFileDialog>
27 int settingUp = false;
29 TitleWidget::TitleWidget(QDialog *parent): QDialog(parent) {
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())) ;
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()));
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()));
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()));
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)));
64 GraphicsSceneRectMove *scene = new GraphicsSceneRectMove(this);
66 // a gradient background
67 QRadialGradient *gradient = new QRadialGradient(0, 0, 10);
68 gradient->setSpread(QGradient::ReflectSpread);
69 //scene->setBackgroundBrush(*gradient);
71 graphicsView->setScene(scene);
72 m_titledocument.setScene(scene);
73 connect(graphicsView->scene(), SIGNAL(selectionChanged()), this , SLOT(selectionChanged()));
77 graphicsView->setRenderHint(QPainter::Antialiasing);
78 graphicsView->setInteractive(true);
79 graphicsView->resize(400, 300);
81 toolBox->setItemEnabled(2, false);
82 toolBox->setItemEnabled(3, false);
85 void TitleWidget::initViewports() {
86 startViewport = new QGraphicsPolygonItem(QPolygonF(QRectF(0, 0, 0, 0)));
87 endViewport = new QGraphicsPolygonItem(QPolygonF(QRectF(0, 0, 0, 0)));
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));
94 startViewport->setPen(startpen);
95 endViewport->setPen(endpen);
97 startViewportSize->setValue(40);
98 endViewportSize->setValue(40);
100 startViewport->setZValue(-1000);
101 endViewport->setZValue(-1000);
103 startViewport->setFlags(/*QGraphicsItem::ItemIsMovable|*/QGraphicsItem::ItemIsSelectable);
104 endViewport->setFlags(/*QGraphicsItem::ItemIsMovable|*/QGraphicsItem::ItemIsSelectable);
106 graphicsView->scene()->addItem(startViewport);
107 graphicsView->scene()->addItem(endViewport);
110 void TitleWidget::slotNewRect() {
112 QGraphicsRectItem * ri = graphicsView->scene()->addRect(-50, -50, 100, 100);
113 ri->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
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);*/
127 void TitleWidget::zIndexChanged(int v) {
128 QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
134 void TitleWidget::selectionChanged() {
135 QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
136 toolBox->setItemEnabled(2, false);
137 toolBox->setItemEnabled(3, false);
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);
147 if ((l[0])->type() == 3) {
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);
162 rectLineWidth->setValue(rec->pen().width());
164 //toolBox->setCurrentIndex(0);
166 zValue->setValue((int)l[0]->zValue());
167 itemzoom->setValue((int)transformations[l[0]].scalex*100);
168 itemrotate->setValue((int)transformations[l[0]].rotate);
172 void TitleWidget::slotChangeBackground() {
173 QColor color = kcolorbutton->color();
174 color.setAlpha(horizontalSlider->value());
175 graphicsView->scene()->setBackgroundBrush(QBrush(color));
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());
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());
193 penf.setWidth(rectLineWidth->value());
195 QColor b = rectBColor->color();
196 b.setAlpha(rectBAlpha->value());
197 rec->setBrush(QBrush(b));
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();
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);
214 void TitleWidget::itemScaled(int val) {
215 QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
217 Transform x = transformations[l[0]];
218 x.scalex = (double)val / 100.0;
219 x.scaley = (double)val / 100.0;
221 qtrans.scale(x.scalex, x.scaley);
222 qtrans.rotate(x.rotate);
223 l[0]->setTransform(qtrans);
224 transformations[l[0]] = x;
228 void TitleWidget::itemRotate(int val) {
229 QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
231 Transform x = transformations[l[0]];
232 x.rotate = (double)val;
234 qtrans.scale(x.scalex, x.scaley);
235 qtrans.rotate(x.rotate);
236 l[0]->setTransform(qtrans);
237 transformations[l[0]] = x;
241 void TitleWidget::setupViewports() {
242 double aspect_ratio = 4.0 / 3.0;//read from project
244 QRectF sp(0, 0, 0, 0);
245 QRectF ep(0, 0, 0, 0);
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);
252 startViewport->setPos(startViewportX->value(), startViewportY->value());
253 endViewport->setPos(endViewportX->value(), endViewportY->value());
255 startViewport->setPolygon(QPolygonF(sp));
256 endViewport->setPolygon(QPolygonF(ep));
260 void TitleWidget::loadTitle() {
261 KUrl url = KFileDialog::getOpenUrl(KUrl(), "*.kdenlivetitle", this, tr("Save Title"));
262 m_titledocument.loadDocument(url, startViewport, endViewport);
265 void TitleWidget::saveTitle() {
266 KUrl url = KFileDialog::getSaveUrl(KUrl(), "*.kdenlivetitle", this, tr("Save Title"));
267 m_titledocument.saveDocument(url, startViewport, endViewport);
270 #include "moc_titlewidget.cpp"