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>
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());
165 //toolBox->setCurrentIndex(0);
167 zValue->setValue((int)l[0]->zValue());
168 itemzoom->setValue((int)transformations[l[0]].scalex*100);
169 itemrotate->setValue((int)transformations[l[0]].rotate);
173 void TitleWidget::slotChangeBackground(){
174 QColor color=kcolorbutton->color();
175 color.setAlpha(horizontalSlider->value());
176 graphicsView->scene()->setBackgroundBrush(QBrush(color));
179 void TitleWidget::textChanged(){
180 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
181 if (l.size()==1 && (l[0])->type()==8 && !l[0]->hasFocus()){
182 kDebug() << ktextedit->document()->toHtml();
183 ((QGraphicsTextItem*)l[0])->setHtml(ktextedit->toHtml());
187 void TitleWidget::rectChanged(){
188 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
189 if (l.size()==1 && (l[0])->type()==3 && !settingUp){
190 QGraphicsRectItem *rec=(QGraphicsRectItem*)l[0];
191 QColor f=rectFColor->color();
192 f.setAlpha(rectFAlpha->value());
194 penf.setWidth(rectLineWidth->value());
196 QColor b=rectBColor->color();
197 b.setAlpha(rectBAlpha->value());
198 rec->setBrush(QBrush(b));
202 void TitleWidget::fontBold(){
203 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
204 if (l.size()==1 && (l[0])->type()==8 && !l[0]->hasFocus()){
205 //ktextedit->document()->setTextOption();
209 void TitleWidget::svgSelected(const KUrl& u){
210 QGraphicsSvgItem *svg=new QGraphicsSvgItem(u.toLocalFile());
211 svg->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);
212 graphicsView->scene()->addItem(svg);
215 void TitleWidget::itemScaled(int val) {
216 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
218 Transform x=transformations[l[0]];
219 x.scalex=(double)val/100.0;
220 x.scaley=(double)val/100.0;
222 qtrans.scale(x.scalex,x.scaley);
223 qtrans.rotate(x.rotate);
224 l[0]->setTransform(qtrans);
225 transformations[l[0]]=x;
229 void TitleWidget::itemRotate(int val) {
230 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
232 Transform x=transformations[l[0]];
233 x.rotate=(double)val;
235 qtrans.scale(x.scalex,x.scaley);
236 qtrans.rotate(x.rotate);
237 l[0]->setTransform(qtrans);
238 transformations[l[0]]=x;
242 void TitleWidget::setupViewports(){
243 double aspect_ratio=4.0/3.0;//read from project
248 double sv_size=startViewportSize->value();
249 double ev_size=endViewportSize->value();
250 sp.adjust(-sv_size,-sv_size/aspect_ratio,sv_size,sv_size/aspect_ratio);
251 ep.adjust(-ev_size,-ev_size/aspect_ratio,ev_size,ev_size/aspect_ratio);
253 startViewport->setPos(startViewportX->value(), startViewportY->value());
254 endViewport->setPos(endViewportX->value(),endViewportY->value());
256 startViewport->setPolygon(QPolygonF(sp));
257 endViewport->setPolygon(QPolygonF(ep));
261 void TitleWidget::loadTitle(){
262 KUrl url= KFileDialog::getOpenUrl( KUrl(), "*.kdenlivetitle",this,tr("Save Title"));
263 m_titledocument.loadDocument(url,startViewport,endViewport);
266 void TitleWidget::saveTitle(){
267 KUrl url= KFileDialog::getSaveUrl( KUrl(), "*.kdenlivetitle",this,tr("Save Title"));
268 m_titledocument.saveDocument(url,startViewport,endViewport);
271 #include "moc_titlewidget.cpp"