NCL Composer  0.1.5
 All Classes Functions Variables Pages
qnstgraphicsmedia.cpp
1 #include "qnstgraphicsmedia.h"
2 
3 #include <QDrag>
4 
5 #include "qnstutil.h"
6 
7 QnstGraphicsMedia::QnstGraphicsMedia(QnstGraphicsEntity* parent)
8  : QnstGraphicsNode(parent), enableDrag(false)
9 {
10  setnstType(Qnst::Media);
11 
12  setResizable(false);
13 
14  createObjects();
15  createConnections();
16 
17  setnstId("");
18 
19  /* Default media position */
20  if(parent)
21  {
22  setTop(parent->getHeight()/2 - DEFAULT_MEDIA_HEIGHT/2);
23  setLeft(parent->getWidth()/2 - DEFAULT_MEDIA_WIDTH/2);
24  }
25  else
26  {
27  setTop(0);
28  setLeft(0);
29  }
30 
31  setWidth(DEFAULT_MEDIA_WIDTH);
32  setHeight(DEFAULT_MEDIA_HEIGHT);
33 }
34 
35 QnstGraphicsMedia::~QnstGraphicsMedia()
36 {
37 
38 }
39 
40 QString QnstGraphicsMedia::getIcon() const
41 {
42  return icon;
43 }
44 
45 QString QnstGraphicsMedia::getSource() const
46 {
47  return source;
48 }
49 
50 void QnstGraphicsMedia::setSource(QString source)
51 {
52  this->source = source;
53 }
54 
55 void QnstGraphicsMedia::setnstType(QnstType type)
56 {
57  QnstGraphicsNode::setnstType(type);
58 
59  this->icon = QnstUtil::iconFromMediaType(type);
60 }
61 
62 void QnstGraphicsMedia::updateToolTip()
63 {
64  QString tip = "";
65  QString name = (getnstId() != "" ? getnstId() : "?");
66 
67  switch(getnstType())
68  {
69  case Qnst::Image:
70  tip += "Image ("+name+")";
71  break;
72 
73  case Qnst::Audio:
74  tip += "Audio ("+name+")";
75  break;
76 
77  case Qnst::Text:
78  tip += "Text ("+name+")";
79  break;
80 
81  case Qnst::Video:
82  tip += "Video ("+name+")";
83  break;
84 
85  case Qnst::NCLua:
86  tip += "NCLua ("+name+")";
87  break;
88 
89  case Qnst::Html:
90  tip += "HTML ("+name+")";
91  break;
92 
93  case Qnst::NCL:
94  tip += "NCL ("+name+")";
95  break;
96 
97  case Qnst::Settings:
98  tip += "Settings ("+name+")";
99  break;
100 
101  default:
102  tip += "Media ("+name+")";
103  break;
104  }
105 
106  if (hasError)
107  tip += " - Error: " + erroMsg;
108  else if (getSource().isEmpty())
109  tip += " - Alert: Missing 'src' attribute";
110 
111  setToolTip(tip);
112 }
113 
114 QString QnstGraphicsMedia::getRefer() const
115 {
116  return refer;
117 }
118 
119 void QnstGraphicsMedia::setRefer(QString refer)
120 {
121  this->refer = refer;
122 }
123 
124 QString QnstGraphicsMedia::getReferUID() const
125 {
126  return referUID;
127 }
128 
129 void QnstGraphicsMedia::setReferUID(QString refetUID)
130 {
131  this->referUID = refetUID;
132 }
133 
134 QString QnstGraphicsMedia::getInstance() const
135 {
136  return instance;
137 }
138 
139 void QnstGraphicsMedia::setInstance(QString instance)
140 {
141  this->instance = instance;
142 }
143 
144 void QnstGraphicsMedia::createObjects()
145 {
146  menu = new QnstMenu();
147  menu->actionCut->setEnabled(true);
148  menu->actionCopy->setEnabled(true);
149 
150  menu->actionDelete->setEnabled(true);
151 
152  menu->actionExport->setEnabled(true);
153 
154  menu->menuInsert->setEnabled(true);
155  menu->actionAddArea->setEnabled(true);
156  menu->actionAddProperty->setEnabled(true);
157 }
158 
159 void QnstGraphicsMedia::createConnections()
160 {
161  // connect(menu, SIGNAL(undoRequested()), SIGNAL(undoRequested()));
162  // connect(menu, SIGNAL(redoRequested()), SIGNAL(redoRequested()));
163 
164  connect(menu, SIGNAL(cutRequested()), SIGNAL(cutRequested()));
165  connect(menu, SIGNAL(copyRequested()), SIGNAL(copyRequested()));
166  connect(menu, SIGNAL(pasteRequested()), SIGNAL(pasteRequested()));
167 
168  connect(menu, SIGNAL(deleteRequested()), SIGNAL(deleteRequested()));
169 
170  connect(menu, SIGNAL(exportRequested()), SIGNAL(exportRequested()));
171 
172  connect(menu, SIGNAL(menuAddEntityTriggered(Qnst::EntityType)),
173  SLOT(createEntity(Qnst::EntityType)));
174 
175  connect(menu, SIGNAL(zoominRequested()), SIGNAL(zoominRequested()));
176  connect(menu, SIGNAL(zoomoutRequested()), SIGNAL(zoomoutRequested()));
177  connect(menu, SIGNAL(zoomresetRequested()), SIGNAL(zoomresetRequested()));
178  connect(menu, SIGNAL(fullscreenRequested()), SIGNAL(fullscreenRequested()));
179 }
180 
181 void QnstGraphicsMedia::draw(QPainter* painter)
182 {
183  painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
184 
185  painter->drawPixmap(4 + 8/2, 4 + 8/2, getWidth()-8, getHeight()-16-8, QPixmap(icon));
186 
187  // Draw MouseHover rectangle
188  if (!isSelected() && hasMouseHover())
189  {
190  painter->setBrush(Qt::NoBrush);
191  painter->setPen(QPen(QBrush(QColor("#999999")), 0, Qt::DashLine)); // 0px = cosmetic border
192 
193  painter->drawRect(4, 4, getWidth(), getHeight());
194  }
195 
196  painter->setPen(QPen(QBrush(Qt::black),0));
197 
198  if(hasError)
199  {
200  painter->drawPixmap((getWidth()-8)/2 + 12, (getHeight()-8)/2 + 4, 12, 12, QPixmap(":/icon/delete"));
201  }
202  else if (getSource().isEmpty())
203  {
204  painter->drawPixmap((getWidth()-8)/2 + 12, (getHeight()-8)/2 + 4, 12, 12, QPixmap(":/icon/alert"));
205  }
206 
207  if(!getReferUID().isEmpty() && !getReferUID().isEmpty())
208  {
209  painter->drawPixmap(8, getHeight()-40, 32, 32, QPixmap(":/icon/alias"));
210  }
211 
212  QString localid = (getnstId() != "" ? getnstId() : "?");
213 
214  if (localid.length() > 5)
215  {
216  localid = getnstId().replace(3,getnstId().length()-3,"...");
217  }
218 
219  // \todo draw a formated text with underline when there is error
220  // if(hasError)
221  // painter->setPen(QPen(QBrush(Qt::red), 0));
222  // else
223  // painter->setPen(QPen(QBrush(Qt::black), 0));
224 
225  painter->drawText(4 + 8/2, 4 + 8/2 + getHeight()-16-8, getWidth()-8, 16, Qt::AlignCenter, localid);
226 
227 
228  if (isMoving())
229  {
230  painter->setBrush(Qt::NoBrush);
231  painter->setPen(QPen(QBrush(Qt::black), 0)); // 0px = cosmetic border
232 
233  painter->setRenderHint(QPainter::Antialiasing,false);
234  painter->drawRect(getMoveLeft()+4-getLeft(), getMoveTop()+4-getTop(), getWidth()-1, getHeight()-1);
235  }
236 }
237 
238 void QnstGraphicsMedia::delineate(QPainterPath* painter) const
239 {
240  painter->addRect(4, 4, getWidth(), getHeight());
241 }
242 
243 
244 void QnstGraphicsMedia::mousePressEvent(QGraphicsSceneMouseEvent *event)
245 {
246  qDebug() << "QnstGraphicsMedia::mousePressEvent" << isDraggable();
247  if(isDraggable())
248  {
249  QMimeData *data = new QMimeData;
250  data->setColorData(Qt::green);
251  data->setData("nclcomposer/mediaid", getnstId().toAscii());
252  data->setData("nclcomposer/qnstuid", getnstUid().toAscii());
253 
254  QDrag *drag = new QDrag(event->widget());
255  drag->setMimeData(data);
256  drag->start();
257  }
258  else
259  QnstGraphicsNode::mousePressEvent(event);
260 }
261 
262 void QnstGraphicsMedia::setProperties(const QMap<QString, QString> &properties)
263 {
264  QnstGraphicsNode::setProperties(properties);
265 
266  setSource(properties["src"]);
267  setRefer(properties["refer"]);
268  setReferUID(properties["referUID"]);
269  setInstance(properties["instance"]);
270 }
271 
272 void QnstGraphicsMedia::getProperties(QMap<QString, QString> &properties)
273 {
274  QnstGraphicsNode::getProperties(properties);
275 
276  properties["src"] = getSource();
277  properties["refer"] = getRefer();
278  properties["referUID"] = getReferUID();
279  properties["instance"] = getInstance();
280 }