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>
22 #include <QGraphicsItem>
23 #include <QGraphicsSvgItem>
27 TitleWidget::TitleWidget (QDialog *parent):QDialog(parent){
29 connect (newTextButton,SIGNAL(clicked()), this, SLOT( slotNewText()));
30 connect (newRectButton,SIGNAL(clicked()), this, SLOT( slotNewRect()));
31 connect (kcolorbutton, SIGNAL ( clicked()), this, SLOT( slotChangeBackground()) ) ;
32 connect (horizontalSlider, SIGNAL ( valueChanged(int) ), this, SLOT( slotChangeBackground()) ) ;
33 connect (ktextedit, SIGNAL(textChanged()), this , SLOT (textChanged()));
34 connect (fontColorButton, SIGNAL ( clicked()), this, SLOT( textChanged()) ) ;
35 //connect (fontBold, SIGNAL ( clicked()), this, SLOT( setBold()) ) ;
37 connect (kfontrequester, SIGNAL ( fontSelected(const QFont &)), this, SLOT( textChanged()) ) ;
38 connect(textAlpha, SIGNAL( valueChanged(int) ), this, SLOT (textChanged()));
39 //connect (ktextedit, SIGNAL(selectionChanged()), this , SLOT (textChanged()));
41 connect(rectFAlpha, SIGNAL( valueChanged(int) ), this, SLOT (rectChanged()));
42 connect(rectBAlpha, SIGNAL( valueChanged(int) ), this, SLOT (rectChanged()));
43 connect(rectFColor, SIGNAL( clicked() ), this, SLOT (rectChanged()));
44 connect(rectBColor, SIGNAL( clicked() ), this, SLOT (rectChanged()));
45 connect(rectLineWidth, SIGNAL( valueChanged(int) ), this, SLOT (rectChanged()));
47 connect (startViewportX,SIGNAL(valueChanged(int)), this, SLOT( setupViewports()));
48 connect (startViewportY,SIGNAL(valueChanged(int)), this, SLOT( setupViewports()));
49 connect (startViewportSize,SIGNAL(valueChanged(int)), this, SLOT( setupViewports()));
50 connect (endViewportX,SIGNAL(valueChanged(int)), this, SLOT( setupViewports()));
51 connect (endViewportY,SIGNAL(valueChanged(int)), this, SLOT( setupViewports()));
52 connect (endViewportSize,SIGNAL(valueChanged(int)), this, SLOT( setupViewports()));
54 connect (zValue, SIGNAL (valueChanged(int)), this, SLOT (zIndexChanged(int)));
55 connect (svgfilename, SIGNAL (urlSelected(const KUrl&) ), this,SLOT( svgSelected(const KUrl &)) );
56 connect (itemzoom, SIGNAL (valueChanged(int) ), this,SLOT( itemScaled(int)) );
57 connect (itemrotate, SIGNAL (valueChanged(int) ), this,SLOT( itemRotate(int)) );
59 GraphicsSceneRectMove *scene=new GraphicsSceneRectMove(this);
61 // a gradient background
62 QRadialGradient *gradient=new QRadialGradient(0, 0, 10);
63 gradient->setSpread(QGradient::ReflectSpread);
64 //scene->setBackgroundBrush(*gradient);
66 graphicsView->setScene(scene);
67 connect (graphicsView->scene(), SIGNAL (selectionChanged()), this , SLOT( selectionChanged()));
71 graphicsView->setRenderHint(QPainter::Antialiasing);
72 graphicsView->setInteractive(true);
73 graphicsView->resize(400, 300);
75 toolBox->setItemEnabled(2,false);
76 toolBox->setItemEnabled(3,false);
79 void TitleWidget::initViewports(){
80 startViewport=new QGraphicsPolygonItem(QPolygonF(QRectF(0,0,0,0)));
81 endViewport=new QGraphicsPolygonItem(QPolygonF(QRectF(0,0,0,0)));
83 QPen startpen(Qt::DotLine);
84 QPen endpen(Qt::DashDotLine);
85 startpen.setColor(QColor(100,200,100,140));
86 endpen.setColor(QColor(200,100,100,140));
88 startViewport->setPen(startpen);
89 endViewport->setPen(endpen);
91 startViewportSize->setValue(40);
92 endViewportSize->setValue(40);
94 startViewport->setZValue(-1000);
95 endViewport->setZValue(-1000);
97 startViewport->setFlags(/*QGraphicsItem::ItemIsMovable|*/QGraphicsItem::ItemIsSelectable);
98 endViewport->setFlags(/*QGraphicsItem::ItemIsMovable|*/QGraphicsItem::ItemIsSelectable);
100 graphicsView->scene()->addItem(startViewport);
101 graphicsView->scene()->addItem(endViewport);
104 void TitleWidget::slotNewRect(){
106 QGraphicsRectItem * ri=graphicsView->scene()->addRect(-50,-50,100,100);
107 ri->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);
110 void TitleWidget::slotNewText(){
111 QGraphicsTextItem *tt=graphicsView->scene()->addText("Text here");
112 tt->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);
113 tt->setTextInteractionFlags (Qt::TextEditorInteraction);
114 connect (tt->document(), SIGNAL (contentsChanged()), this, SLOT(selectionChanged()));
115 kDebug() << tt->metaObject()->className();
116 /*QGraphicsRectItem * ri=graphicsView->scene()->addRect(-50,-50,100,100);
117 ri->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);*/
121 void TitleWidget::zIndexChanged(int v){
122 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
128 void TitleWidget::selectionChanged(){
129 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
130 toolBox->setItemEnabled(2,false);
131 toolBox->setItemEnabled(3,false);
134 if ((l[0])->type()==8 ){
135 QGraphicsTextItem* i=((QGraphicsTextItem*)l[0]);
136 if (l[0]->hasFocus() )
137 ktextedit->setHtml(i->toHtml());
138 toolBox->setCurrentIndex(2);
139 toolBox->setItemEnabled(2,true);
141 if ((l[0])->type()==3){
143 QGraphicsRectItem *rec=((QGraphicsRectItem*)l[0]);
144 toolBox->setCurrentIndex(3);
145 toolBox->setItemEnabled(3,true);
146 rectFAlpha->setValue(rec->pen().color().alpha());
147 rectBAlpha->setValue(rec->brush().isOpaque() ? rec->brush().color().alpha() : 0);
148 kDebug() << rec->brush().color().alpha();
149 QColor fcol=rec->pen().color();
150 QColor bcol=rec->brush().color();
151 //fcol.setAlpha(255);
152 //bcol.setAlpha(255);
153 rectFColor->setColor(fcol);
154 rectBColor->setColor(bcol);
156 rectLineWidth->setValue(rec->pen().width());
159 //toolBox->setCurrentIndex(0);
161 zValue->setValue(l[0]->zValue());
162 itemzoom->setValue(transformations[l[0]].scalex*100);
163 itemrotate->setValue(transformations[l[0]].rotate);
167 void TitleWidget::slotChangeBackground(){
168 QColor color=kcolorbutton->color();
169 color.setAlpha(horizontalSlider->value());
170 graphicsView->scene()->setBackgroundBrush(QBrush(color));
173 void TitleWidget::textChanged(){
174 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
175 if (l.size()==1 && (l[0])->type()==8 && !l[0]->hasFocus()){
176 kDebug() << ktextedit->document()->toHtml();
177 ((QGraphicsTextItem*)l[0])->setHtml(ktextedit->toHtml());
181 void TitleWidget::rectChanged(){
182 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
183 if (l.size()==1 && (l[0])->type()==3 && !settingUp){
184 QGraphicsRectItem *rec=(QGraphicsRectItem*)l[0];
185 QColor f=rectFColor->color();
186 f.setAlpha(rectFAlpha->value());
188 penf.setWidth(rectLineWidth->value());
190 QColor b=rectBColor->color();
191 b.setAlpha(rectBAlpha->value());
192 rec->setBrush(QBrush(b));
196 void TitleWidget::fontBold(){
197 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
198 if (l.size()==1 && (l[0])->type()==8 && !l[0]->hasFocus()){
199 //ktextedit->document()->setTextOption();
203 void TitleWidget::svgSelected(const KUrl& u){
204 QGraphicsSvgItem *svg=new QGraphicsSvgItem(u.toLocalFile());
205 svg->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);
206 graphicsView->scene()->addItem(svg);
209 void TitleWidget::itemScaled(int val) {
210 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
212 Transform x=transformations[l[0]];
213 x.scalex=(double)val/100.0;
214 x.scaley=(double)val/100.0;
216 qtrans.scale(x.scalex,x.scaley);
217 qtrans.rotate(x.rotate);
218 l[0]->setTransform(qtrans);
219 transformations[l[0]]=x;
223 void TitleWidget::itemRotate(int val) {
224 QList<QGraphicsItem*> l=graphicsView->scene()->selectedItems();
226 Transform x=transformations[l[0]];
227 x.rotate=(double)val;
229 qtrans.scale(x.scalex,x.scaley);
230 qtrans.rotate(x.rotate);
231 l[0]->setTransform(qtrans);
232 transformations[l[0]]=x;
236 void TitleWidget::setupViewports(){
237 double aspect_ratio=4.0/3.0;//read from project
239 QRectF sp(startViewportX->value(), startViewportY->value(),0,0);
240 QRectF ep(endViewportX->value(),endViewportY->value(),0,0);
242 double sv_size=startViewportSize->value();
243 double ev_size=endViewportSize->value();
244 sp.adjust(-sv_size,-sv_size/aspect_ratio,sv_size,sv_size/aspect_ratio);
245 ep.adjust(-ev_size,-ev_size/aspect_ratio,ev_size,ev_size/aspect_ratio);
247 startViewport->setPolygon(QPolygonF(sp));
248 endViewport->setPolygon(QPolygonF(ep));
251 #include "moc_titlewidget.cpp"