Rev 16511 | Rev 16856 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
12610 | jghali | 1 | /* |
2 | For general Scribus (>=1.3.2) copyright and licensing information please refer |
||
3 | to the COPYING file provided with the program. Following this notice may exist |
||
4 | a copyright and/or license notice that predates the release of Scribus 1.3.2 |
||
5 | for which a new license (GPL+exception) is in place. |
||
6 | */ |
||
7 | /*************************************************************************** |
||
8 | * * |
||
9 | * This program is free software; you can redistribute it and/or modify * |
||
10 | * it under the terms of the GNU General Public License as published by * |
||
11 | * the Free Software Foundation; either version 2 of the License, or * |
||
12 | * (at your option) any later version. * |
||
13 | * * |
||
14 | ***************************************************************************/ |
||
15 | |||
16 | |||
17 | #include "canvasmode_create.h" |
||
18 | |||
19 | #include <QApplication> |
||
20 | #include <QButtonGroup> |
||
21 | #include <QCheckBox> |
||
22 | #include <QCursor> |
||
23 | #include <QEvent> |
||
24 | #include <QMessageBox> |
||
25 | #include <QMouseEvent> |
||
26 | #include <QPainterPath> |
||
27 | #include <QPoint> |
||
28 | #include <QRect> |
||
29 | #include <QWidgetAction> |
||
30 | |||
13576 | cbradney | 31 | #include "ui/basepointwidget.h" |
12610 | jghali | 32 | #include "canvas.h" |
33 | #include "fpoint.h" |
||
34 | #include "fpointarray.h" |
||
13576 | cbradney | 35 | #include "ui/hruler.h" |
36 | #include "ui/vruler.h" |
||
12610 | jghali | 37 | #include "hyphenator.h" |
13650 | cbradney | 38 | #include "ui/insertTable.h" |
39 | #include "ui/oneclick.h" |
||
12610 | jghali | 40 | #include "pageitem_textframe.h" |
13576 | cbradney | 41 | #include "ui/pageselector.h" |
12610 | jghali | 42 | #include "prefscontext.h" |
43 | #include "prefsfile.h" |
||
44 | #include "prefsmanager.h" |
||
13551 | cbradney | 45 | #include "ui/propertiespalette.h" |
12610 | jghali | 46 | #include "scraction.h" |
13551 | cbradney | 47 | #include "ui/scrapbookpalette.h" |
12610 | jghali | 48 | #include "scribus.h" |
49 | #include "scribusdoc.h" |
||
50 | #include "scribusview.h" |
||
51 | #include "scribusXml.h" |
||
52 | #include "selection.h" |
||
53 | #include "undomanager.h" |
||
54 | #include "units.h" |
||
55 | #include "util.h" |
||
56 | #include "util_icon.h" |
||
57 | #include "util_math.h" |
||
58 | |||
59 | |||
60 | |||
61 | CreateMode::CreateMode(ScribusView* view) : CanvasMode(view) |
||
62 | { |
||
63 | canvasPressCoord.setXY(-1.0, -1.0); |
||
64 | mouseGlobalCoord.setXY(-1.0, -1.0); |
||
65 | inItemCreation = false; |
||
66 | createObjectMode = 0; |
||
67 | createObjectSubMode = 0; |
||
68 | modifiers = 0; |
||
69 | m_MouseButtonPressed = false; |
||
70 | m_createTransaction = NULL; |
||
71 | } |
||
72 | |||
73 | |||
74 | void CreateMode::drawControls(QPainter* p) |
||
75 | { |
||
76 | if (!inItemCreation) return; |
||
77 | |||
78 | QPointF topLeft(createObjectPos.x(), createObjectPos.y()); |
||
79 | QPointF btRight(canvasCurrCoord.x(), canvasCurrCoord.y()); |
||
80 | QColor drawColor = qApp->palette().color(QPalette::Active, QPalette::Highlight); |
||
81 | |||
82 | if (createObjectMode != modeDrawLine) |
||
83 | { |
||
16511 | craig | 84 | QRectF bounds = QRectF(topLeft, btRight).normalized(); |
85 | QRect localRect = m_canvas->canvasToLocal(bounds); |
||
86 | if (localRect.width() <= 0 || localRect.height() <= 0) |
||
87 | return; |
||
12610 | jghali | 88 | p->setRenderHint(QPainter::Antialiasing); |
89 | |||
90 | p->save(); |
||
91 | p->setPen(QPen(drawColor, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); |
||
92 | drawColor.setAlpha(64); |
||
93 | p->setBrush(drawColor); |
||
94 | p->drawRect(localRect); |
||
95 | |||
96 | drawColor.setAlpha(255); |
||
97 | p->setBrush(Qt::NoBrush); |
||
98 | p->setPen(QPen(drawColor, 1, Qt::DashLine, Qt::FlatCap, Qt::MiterJoin)); |
||
99 | |||
100 | int frameType = 0, itemType = 0; |
||
101 | getFrameItemTypes(itemType, frameType); |
||
102 | if (frameType == PageItem::Ellipse) |
||
103 | { |
||
104 | p->drawEllipse(localRect); |
||
105 | } |
||
16215 | fschmid | 106 | else if (createObjectMode == modeDrawArc) |
107 | { |
||
108 | QPainterPath path; |
||
109 | path.moveTo(localRect.width() / 2.0, localRect.height() / 2.0); |
||
110 | path.arcTo(0.0, 0.0, localRect.width(), localRect.height(), m_doc->itemToolPrefs().arcStartAngle, m_doc->itemToolPrefs().arcSweepAngle); |
||
111 | path.closeSubpath(); |
||
112 | p->translate(localRect.left(), localRect.top()); |
||
113 | p->drawPath(path); |
||
114 | } |
||
12610 | jghali | 115 | else if (createObjectMode == modeDrawRegularPolygon) |
116 | { |
||
16203 | fschmid | 117 | QPainterPath path = RegularPolygonPath(localRect.width(), localRect.height(), m_doc->itemToolPrefs().polyCorners, m_doc->itemToolPrefs().polyUseFactor, m_doc->itemToolPrefs().polyFactor, m_doc->itemToolPrefs().polyRotation, m_doc->itemToolPrefs().polyCurvature, m_doc->itemToolPrefs().polyInnerRot, m_doc->itemToolPrefs().polyOuterCurvature); |
12610 | jghali | 118 | p->translate(localRect.left(), localRect.top()); |
119 | p->drawPath(path); |
||
120 | } |
||
16311 | fschmid | 121 | else if (createObjectMode == modeDrawSpiral) |
122 | { |
||
123 | QPainterPath path = SpiralPath(localRect.width(), localRect.height(), m_doc->itemToolPrefs().spiralStartAngle, m_doc->itemToolPrefs().spiralEndAngle, m_doc->itemToolPrefs().spiralFactor); |
||
124 | p->translate(localRect.left(), localRect.top()); |
||
125 | p->drawPath(path); |
||
126 | } |
||
12610 | jghali | 127 | else if ((createObjectMode == modeDrawShapes) && (createObjectSubMode > 1)) |
128 | { |
||
129 | FPointArray poly; |
||
130 | int valCount = m_doc->ValCount; |
||
131 | double *vals = m_doc->ShapeValues; |
||
132 | for (int a = 0; a < valCount-3; a += 4) |
||
133 | { |
||
134 | if (vals[a] < 0) |
||
135 | { |
||
136 | poly.setMarker(); |
||
137 | continue; |
||
138 | } |
||
139 | double x1 = localRect.width() * vals[a] / 100.0; |
||
140 | double y1 = localRect.height() * vals[a+1] / 100.0; |
||
141 | double x2 = localRect.width() * vals[a+2] / 100.0; |
||
142 | double y2 = localRect.height() * vals[a+3] / 100.0; |
||
143 | poly.addPoint(x1, y1); |
||
144 | poly.addPoint(x2, y2); |
||
145 | } |
||
146 | QPainterPath path = poly.toQPainterPath(false); |
||
147 | p->translate(localRect.left(), localRect.top()); |
||
148 | p->drawPath(path); |
||
149 | } |
||
150 | p->restore(); |
||
151 | } |
||
152 | else |
||
153 | { |
||
154 | QPoint p1 = m_canvas->canvasToLocal(topLeft); |
||
155 | QPoint p2 = m_canvas->canvasToLocal(btRight); |
||
156 | |||
157 | p->save(); |
||
158 | p->setPen(QPen(drawColor, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); |
||
159 | p->setBrush(drawColor); |
||
160 | p->drawLine(p1, p2); |
||
161 | p->restore(); |
||
162 | } |
||
163 | } |
||
164 | |||
165 | inline bool CreateMode::GetItem(PageItem** pi) |
||
166 | { |
||
167 | *pi = m_doc->m_Selection->itemAt(0); |
||
168 | return (*pi) != NULL; |
||
169 | } |
||
170 | |||
171 | // the following code was moved from scribusview.cpp: |
||
172 | |||
173 | |||
174 | void CreateMode::enterEvent(QEvent *) |
||
175 | { |
||
176 | if (!m_MouseButtonPressed) |
||
177 | { |
||
178 | setModeCursor(); |
||
179 | } |
||
180 | } |
||
181 | |||
182 | |||
183 | void CreateMode::leaveEvent(QEvent *e) |
||
184 | { |
||
185 | if (!m_MouseButtonPressed) |
||
186 | qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); |
||
187 | } |
||
188 | |||
189 | |||
190 | void CreateMode::activate(bool fromGesture) |
||
191 | { |
||
192 | PageItem* currItem; |
||
193 | // qDebug() << "CreateMode::activate" << fromGesture; |
||
194 | if (!fromGesture || !GetItem(&currItem) || !m_createTransaction) |
||
195 | { |
||
196 | if (m_createTransaction) |
||
197 | { |
||
198 | // qDebug() << "canceling left over create Transaction"; |
||
199 | m_createTransaction->cancel(); |
||
200 | delete m_createTransaction; |
||
201 | m_createTransaction = NULL; |
||
202 | } |
||
203 | canvasPressCoord.setXY(-1.0, -1.0); |
||
204 | mouseGlobalCoord.setXY(-1.0, -1.0); |
||
205 | inItemCreation = false; |
||
206 | } |
||
207 | setModeCursor(); |
||
208 | } |
||
209 | |||
210 | void CreateMode::deactivate(bool forGesture) |
||
211 | { |
||
212 | // qDebug() << "CreateMode::deactivate" << forGesture; |
||
213 | if (!forGesture) |
||
214 | { |
||
215 | if (m_createTransaction) |
||
216 | { |
||
217 | // qDebug() << "CreateMode::deactivate: canceling left over create Transaction"; |
||
218 | m_createTransaction->cancel(); |
||
219 | delete m_createTransaction; |
||
220 | m_createTransaction = NULL; |
||
221 | } |
||
222 | } |
||
223 | } |
||
224 | |||
225 | void CreateMode::mouseDoubleClickEvent(QMouseEvent *m) |
||
226 | { |
||
227 | m->accept(); |
||
228 | m_MouseButtonPressed = false; |
||
229 | m_canvas->resetRenderMode(); |
||
230 | } |
||
231 | |||
232 | |||
233 | void CreateMode::mouseMoveEvent(QMouseEvent *m) |
||
234 | { |
||
235 | const FPoint mousePointDoc = m_canvas->globalToCanvas(m->globalPos()); |
||
12705 | jghali | 236 | modifiers = m->modifiers(); |
12610 | jghali | 237 | |
238 | double newX, newY; |
||
239 | PageItem *currItem; |
||
240 | QPoint np, np2, mop; |
||
241 | QPainter p; |
||
242 | QRect tx; |
||
243 | m->accept(); |
||
244 | // qDebug() << "legacy mode move:" << m->x() << m->y() << m_canvas->globalToCanvas(m->globalPos()).x() << m_canvas->globalToCanvas(m->globalPos()).y(); |
||
245 | // emit MousePos(m->x()/m_canvas->scale(),// + m_doc->minCanvasCoordinate.x(), |
||
246 | // m->y()/m_canvas->scale()); // + m_doc->minCanvasCoordinate.y()); |
||
13124 | fschmid | 247 | |
13128 | jghali | 248 | if (commonMouseMove(m)) |
249 | return; |
||
12610 | jghali | 250 | if (GetItem(&currItem)) |
251 | { |
||
15179 | jghali | 252 | newX = mousePointDoc.x(); //m_view->translateToDoc(m->x(), m->y()).x()); |
253 | newY = mousePointDoc.y(); //m_view->translateToDoc(m->x(), m->y()).y()); |
||
12610 | jghali | 254 | |
255 | if (m_doc->DragP) |
||
256 | return; |
||
257 | } |
||
258 | else |
||
259 | { |
||
260 | if ((m_MouseButtonPressed) && (m->buttons() & Qt::LeftButton)) |
||
261 | { |
||
15179 | jghali | 262 | newX = mousePointDoc.x(); |
263 | newY = mousePointDoc.y(); |
||
12703 | jghali | 264 | if (createObjectMode == modeDrawLine) |
265 | { |
||
12705 | jghali | 266 | if (m_doc->useRaster) |
267 | { |
||
14932 | cbradney | 268 | newX = qRound(newX / m_doc->guidesPrefs().minorGridSpacing) * m_doc->guidesPrefs().minorGridSpacing; |
269 | newY = qRound(newY / m_doc->guidesPrefs().minorGridSpacing) * m_doc->guidesPrefs().minorGridSpacing; |
||
12703 | jghali | 270 | } |
12705 | jghali | 271 | if (m->modifiers() & Qt::ControlModifier) |
272 | { |
||
14922 | jghali | 273 | QRectF bounds(QPointF(createObjectPos.x(), createObjectPos.y()), QPointF(newX, newY)); |
12705 | jghali | 274 | double newRot = xy2Deg(bounds.width(), bounds.height()); |
275 | if (newRot < 0.0) |
||
276 | newRot += 360; |
||
14932 | cbradney | 277 | newRot = constrainAngle(newRot, m_doc->opToolPrefs().constrain); |
12705 | jghali | 278 | double len = qMax(0.01, distance(bounds.width(), bounds.height())); |
279 | bounds.setSize(len * QSizeF(cosd(newRot), sind(newRot))); |
||
12703 | jghali | 280 | newX = bounds.right(); |
12705 | jghali | 281 | newY = bounds.bottom(); |
12703 | jghali | 282 | } |
283 | } |
||
13599 | cbradney | 284 | //CB: #8099: Readd snapping for drag creation of lines by commenting this else.. |
285 | //else |
||
286 | //{ |
||
12703 | jghali | 287 | FPoint np2 = m_doc->ApplyGridF(FPoint(newX, newY)); |
288 | double nx = np2.x(); |
||
289 | double ny = np2.y(); |
||
290 | m_doc->ApplyGuides(&nx, &ny); |
||
14922 | jghali | 291 | // #8959 : suppress qRound here as this prevent drawing line with angle constrain |
292 | // precisely and does not allow to stick precisely to grid or guides |
||
293 | newX = /*qRound(*/nx/*)*/; |
||
294 | newY = /*qRound(*/ny/*)*/; |
||
13599 | cbradney | 295 | //} |
296 | |||
12610 | jghali | 297 | canvasCurrCoord.setXY(newX, newY); |
298 | m_view->HaveSelRect = true; |
||
299 | |||
12650 | fschmid | 300 | double wSize = canvasCurrCoord.x() - createObjectPos.x(); |
301 | double hSize = canvasCurrCoord.y() - createObjectPos.y(); |
||
302 | QRectF createObjectRect(createObjectPos.x(), createObjectPos.y(), wSize, hSize); |
||
303 | createObjectRect = createObjectRect.normalized(); |
||
304 | if (createObjectMode != modeDrawLine) |
||
305 | m_canvas->displaySizeHUD(m->globalPos(), createObjectRect.width(), createObjectRect.height(), false); |
||
306 | else |
||
307 | { |
||
12663 | fschmid | 308 | double angle = -xy2Deg(wSize, hSize); |
309 | if (angle < 0.0) |
||
310 | angle = angle + 360; |
||
12650 | fschmid | 311 | double trueLength = sqrt(pow(createObjectRect.width(), 2) + pow(createObjectRect.height(), 2)); |
12656 | fschmid | 312 | m_canvas->displaySizeHUD(m->globalPos(), trueLength, angle, true); |
12650 | fschmid | 313 | } |
314 | |||
12610 | jghali | 315 | // Necessary for drawControls to be called |
316 | m_canvas->repaint(); |
||
317 | } |
||
12656 | fschmid | 318 | else |
319 | m_canvas->displayCorrectedXYHUD(m->globalPos(), mousePointDoc.x(), mousePointDoc.y()); |
||
12610 | jghali | 320 | } |
321 | } |
||
322 | |||
323 | void CreateMode::mousePressEvent(QMouseEvent *m) |
||
324 | { |
||
325 | const FPoint mousePointDoc = m_canvas->globalToCanvas(m->globalPos()); |
||
12705 | jghali | 326 | modifiers = m->modifiers(); |
12610 | jghali | 327 | |
328 | double Rxp = 0, Ryp = 0; |
||
329 | m_MouseButtonPressed = true; |
||
330 | m_view->HaveSelRect = false; |
||
331 | m_doc->DragP = false; |
||
332 | m_doc->leaveDrag = false; |
||
333 | inItemCreation = false; |
||
334 | // oldClip = 0; |
||
335 | m->accept(); |
||
336 | m_view->registerMousePress(m->globalPos()); |
||
14932 | cbradney | 337 | QRect mpo(m->x()-m_doc->guidesPrefs().grabRadius, m->y()-m_doc->guidesPrefs().grabRadius, m_doc->guidesPrefs().grabRadius*2, m_doc->guidesPrefs().grabRadius*2); |
12610 | jghali | 338 | // mpo.moveBy(qRound(m_doc->minCanvasCoordinate.x() * m_canvas->scale()), qRound(m_doc->minCanvasCoordinate.y() * m_canvas->scale())); |
339 | canvasPressCoord = mousePointDoc; |
||
340 | createObjectMode = m_doc->appMode; |
||
341 | createObjectSubMode = m_doc->SubMode; |
||
342 | createObjectPos = m_doc->ApplyGridF(canvasPressCoord); |
||
343 | |||
344 | Rxp = m_doc->ApplyGridF(canvasPressCoord).x(); |
||
345 | canvasPressCoord.setX(qRound(Rxp)); |
||
346 | Ryp = m_doc->ApplyGridF(canvasPressCoord).y(); |
||
14141 | jghali | 347 | canvasPressCoord.setXY(qRound(Rxp), qRound(Ryp)); |
12610 | jghali | 348 | |
349 | canvasCurrCoord = canvasPressCoord; |
||
14141 | jghali | 350 | m_doc->ApplyGuides(&Rxp, &Ryp); |
12610 | jghali | 351 | createObjectPos.setXY(Rxp, Ryp); |
14141 | jghali | 352 | |
12610 | jghali | 353 | if (m->button() == Qt::MidButton) |
354 | { |
||
355 | m_view->MidButt = true; |
||
13124 | fschmid | 356 | if (m->modifiers() & Qt::ControlModifier) |
357 | m_view->DrawNew(); |
||
12610 | jghali | 358 | return; |
359 | } |
||
360 | |||
361 | if (m->button() == Qt::RightButton) |
||
362 | { |
||
363 | m_view->requestMode(modeNormal); |
||
364 | return; |
||
365 | } |
||
366 | if (m->button() != Qt::LeftButton) |
||
367 | return; |
||
368 | selectPage(m); |
||
369 | |||
370 | switch (m_doc->appMode) |
||
371 | { |
||
372 | case modeDrawTable: |
||
373 | m_view->Deselect(false); |
||
374 | break; |
||
375 | } |
||
376 | |||
377 | inItemCreation = true; |
||
378 | } |
||
379 | |||
380 | |||
381 | |||
382 | void CreateMode::mouseReleaseEvent(QMouseEvent *m) |
||
383 | { |
||
384 | const FPoint mousePointDoc = m_canvas->globalToCanvas(m->globalPos()); |
||
12705 | jghali | 385 | modifiers = m->modifiers(); |
12610 | jghali | 386 | |
387 | PageItem *currItem; |
||
388 | m_MouseButtonPressed = false; |
||
389 | m_canvas->resetRenderMode(); |
||
390 | m->accept(); |
||
13285 | fschmid | 391 | // m_view->stopDragTimer(); |
12610 | jghali | 392 | |
393 | m_createTransaction = new UndoTransaction(Um::instance()->beginTransaction("creating")); |
||
394 | currItem = doCreateNewObject(); |
||
16814 | jghali | 395 | if (m_createTransaction && currItem && currItem->isGroup()) |
12610 | jghali | 396 | { |
16814 | jghali | 397 | // We created a table, just commit transaction |
12610 | jghali | 398 | m_view->resetMousePressed(); |
16814 | jghali | 399 | m_createTransaction->commit(); |
400 | m_doc->changed(); |
||
401 | delete m_createTransaction; |
||
402 | m_createTransaction = NULL; |
||
403 | } |
||
404 | else if (m_createTransaction && currItem) |
||
405 | { |
||
406 | m_view->resetMousePressed(); |
||
12610 | jghali | 407 | currItem->checkChanges(true); |
408 | QString targetName = Um::ScratchSpace; |
||
409 | if (currItem->OwnPage > -1) |
||
410 | targetName = m_doc->Pages->at(currItem->OwnPage)->getUName(); |
||
411 | m_createTransaction->commit(targetName, currItem->getUPixmap(), |
||
412 | Um::Create + " " + currItem->getUName(), "", Um::ICreate); |
||
413 | m_doc->changed(); |
||
414 | delete m_createTransaction; |
||
415 | m_createTransaction = NULL; |
||
12633 | jghali | 416 | /*currItem->update(); |
12610 | jghali | 417 | currItem->emitAllToGUI();*/ |
418 | } |
||
419 | else if (m_createTransaction) |
||
420 | { |
||
421 | m_createTransaction->cancel(); |
||
422 | delete m_createTransaction; |
||
423 | m_createTransaction = NULL; |
||
424 | } |
||
13955 | cbradney | 425 | if (!PrefsManager::instance()->appPrefs.uiPrefs.stickyTools) |
12610 | jghali | 426 | { |
427 | m_view->requestMode(modeNormal); |
||
428 | } |
||
429 | else |
||
430 | { |
||
431 | m_view->updateCanvas(); |
||
432 | int appMode = m_doc->appMode; |
||
433 | m_view->requestMode(appMode); |
||
434 | } |
||
435 | inItemCreation = false; |
||
436 | } |
||
437 | |||
438 | |||
439 | |||
440 | void CreateMode::selectPage(QMouseEvent *m) |
||
441 | { |
||
442 | m_MouseButtonPressed = true; |
||
443 | FPoint mousePointDoc = m_canvas->globalToCanvas(m->globalPos()); |
||
444 | canvasPressCoord = mousePointDoc; |
||
14932 | cbradney | 445 | QRect mpo(m->x()-m_doc->guidesPrefs().grabRadius, m->y()-m_doc->guidesPrefs().grabRadius, m_doc->guidesPrefs().grabRadius*2, m_doc->guidesPrefs().grabRadius*2); |
12610 | jghali | 446 | // mpo.moveBy(qRound(Doc->minCanvasCoordinate.x() * m_canvas->scale()), qRound(m_doc->minCanvasCoordinate.y() * m_canvas->scale())); |
447 | m_doc->nodeEdit.deselect(); |
||
448 | m_view->Deselect(false); |
||
449 | if (!m_doc->masterPageMode()) |
||
450 | { |
||
451 | int i = m_doc->OnPage(canvasPressCoord.x(), canvasPressCoord.y()); |
||
452 | if (i!=-1) |
||
453 | { |
||
454 | uint docCurrPageNo=m_doc->currentPageNumber(); |
||
455 | uint j=static_cast<uint>(i); |
||
456 | if (docCurrPageNo != j) |
||
457 | { |
||
458 | m_doc->setCurrentPage(m_doc->Pages->at(j)); |
||
459 | m_view->setMenTxt(j); |
||
460 | m_view->DrawNew(); |
||
461 | } |
||
462 | } |
||
463 | /* uint docPagesCount=m_doc->Pages->count(); |
||
464 | uint docCurrPageNo=m_doc->currentPageNumber(); |
||
465 | for (uint i = 0; i < docPagesCount; ++i) |
||
466 | { |
||
467 | int x = static_cast<int>(m_doc->Pages->at(i)->xOffset() * m_canvas->scale()); |
||
468 | int y = static_cast<int>(m_doc->Pages->at(i)->yOffset() * m_canvas->scale()); |
||
469 | int w = static_cast<int>(m_doc->Pages->at(i)->width() * m_canvas->scale()); |
||
470 | int h = static_cast<int>(m_doc->Pages->at(i)->height() * m_canvas->scale()); |
||
471 | if (QRect(x, y, w, h).intersects(mpo)) |
||
472 | { |
||
473 | if (docCurrPageNo != i) |
||
474 | { |
||
475 | m_doc->setCurrentPage(m_doc->Pages->at(i)); |
||
476 | setMenTxt(i); |
||
477 | DrawNew(); |
||
478 | } |
||
479 | break; |
||
480 | } |
||
481 | } */ |
||
482 | |||
483 | //FIXME m_view->setRulerPos(m_view->contentsX(), m_view->contentsY()); |
||
484 | } |
||
485 | } |
||
486 | |||
487 | void CreateMode::SetupDrawNoResize(int nr) |
||
488 | { |
||
489 | PageItem* currItem = m_doc->Items->at(nr); |
||
13996 | cbradney | 490 | // currItem->setFont(Doc->toolSettings.textFont); |
491 | // currItem->setFontSize(Doc->toolSettings.textSize); |
||
12610 | jghali | 492 | m_doc->m_Selection->delaySignalsOn(); |
493 | m_doc->m_Selection->clear(); |
||
494 | m_doc->m_Selection->addItem(currItem); |
||
495 | m_doc->m_Selection->delaySignalsOff(); |
||
496 | // emit DocChanged(); |
||
497 | currItem->Sizing = false /*currItem->asLine() ? false : true*/; |
||
498 | //#6456 m_view->resetMoveTimer(); |
||
499 | } |
||
500 | |||
501 | void CreateMode::getFrameItemTypes(int& itemType, int& frameType) |
||
502 | { |
||
503 | itemType = (int) PageItem::Polygon; |
||
504 | frameType = (int) PageItem::Rectangle; |
||
505 | switch (createObjectMode) |
||
506 | { |
||
507 | case modeDrawShapes: |
||
508 | switch (createObjectSubMode) |
||
509 | { |
||
510 | case 0: |
||
511 | itemType = (int) PageItem::Polygon; |
||
512 | frameType = (int) PageItem::Rectangle; |
||
513 | break; |
||
514 | case 1: |
||
515 | itemType = (int) PageItem::Polygon; |
||
516 | frameType = (int) PageItem::Ellipse; |
||
517 | break; |
||
518 | default: |
||
519 | itemType = (int) PageItem::Polygon; |
||
520 | frameType = (int) PageItem::Unspecified; |
||
521 | break; |
||
522 | } |
||
523 | break; |
||
524 | case modeDrawLine: |
||
525 | itemType = (int) PageItem::Line; |
||
526 | frameType = (int) PageItem::Unspecified; |
||
527 | break; |
||
528 | case modeDrawLatex: |
||
529 | itemType = (int) PageItem::LatexFrame; |
||
530 | frameType = (int) PageItem::Unspecified; |
||
531 | break; |
||
532 | case modeDrawImage: |
||
533 | itemType = (int) PageItem::ImageFrame; |
||
534 | frameType = (int) PageItem::Unspecified; |
||
535 | break; |
||
536 | case modeDrawText: |
||
537 | itemType = (int) PageItem::TextFrame; |
||
538 | frameType = (int) PageItem::Unspecified; |
||
539 | break; |
||
540 | case modeDrawRegularPolygon: |
||
16191 | fschmid | 541 | itemType = (int) PageItem::RegularPolygon; |
12610 | jghali | 542 | frameType = (int) PageItem::Unspecified; |
543 | break; |
||
16215 | fschmid | 544 | case modeDrawArc: |
545 | itemType = (int) PageItem::Arc; |
||
546 | frameType = (int) PageItem::Unspecified; |
||
547 | break; |
||
16311 | fschmid | 548 | case modeDrawSpiral: |
549 | itemType = (int) PageItem::Spiral; |
||
550 | frameType = (int) PageItem::Unspecified; |
||
551 | break; |
||
12610 | jghali | 552 | case modeInsertPDFButton: |
553 | case modeInsertPDFTextfield: |
||
554 | case modeInsertPDFCheckbox: |
||
555 | case modeInsertPDFCombobox: |
||
556 | case modeInsertPDFListbox: |
||
557 | case modeInsertPDFTextAnnotation: |
||
558 | case modeInsertPDFLinkAnnotation: |
||
559 | itemType = (int) PageItem::TextFrame; |
||
560 | frameType = (int) PageItem::Unspecified; |
||
561 | break; |
||
562 | case modeDrawTable: |
||
563 | itemType = (int) PageItem::TextFrame; |
||
564 | frameType = (int) PageItem::Unspecified; |
||
565 | break; |
||
13839 | fschmid | 566 | #ifdef HAVE_OSG |
567 | case modeInsertPDF3DAnnotation: |
||
568 | itemType = (int) PageItem::OSGFrame; |
||
569 | frameType = (int) PageItem::Unspecified; |
||
570 | break; |
||
571 | #endif |
||
12610 | jghali | 572 | } |
573 | } |
||
574 | |||
575 | PageItem* CreateMode::doCreateNewObject(void) |
||
576 | { |
||
577 | int z = -1; |
||
578 | double rot, len; |
||
579 | |||
580 | double wSize = canvasCurrCoord.x() - createObjectPos.x(); |
||
581 | double hSize = canvasCurrCoord.y() - createObjectPos.y(); |
||
12708 | jghali | 582 | bool skipOneClick = (modifiers == Qt::ShiftModifier); |
12706 | jghali | 583 | if ((createObjectMode == modeDrawLine) || (createObjectMode == modeDrawTable) || |
584 | (createObjectMode == modeInsertPDFButton) || (createObjectMode == modeInsertPDFTextfield) || |
||
585 | (createObjectMode == modeInsertPDFTextfield) || (createObjectMode == modeInsertPDFCheckbox) || |
||
586 | (createObjectMode == modeInsertPDFCombobox) || (createObjectMode == modeInsertPDFListbox) || |
||
13839 | fschmid | 587 | (createObjectMode == modeInsertPDFTextAnnotation) || (createObjectMode == modeInsertPDFLinkAnnotation) || |
588 | (createObjectMode == modeInsertPDF3DAnnotation)) |
||
12610 | jghali | 589 | { |
12707 | jghali | 590 | skipOneClick = false; |
12706 | jghali | 591 | } |
592 | if (!skipOneClick) |
||
593 | { |
||
12705 | jghali | 594 | if ((!m_view->moveTimerElapsed()) || ((fabs(wSize) < 2.0) && (fabs(hSize) < 2.0))) |
12610 | jghali | 595 | { |
12705 | jghali | 596 | if (!doOneClick(createObjectPos, canvasCurrCoord)) |
597 | { |
||
598 | return NULL; |
||
599 | } |
||
12610 | jghali | 600 | } |
601 | } |
||
602 | |||
603 | wSize = canvasCurrCoord.x() - createObjectPos.x(); |
||
604 | hSize = canvasCurrCoord.y() - createObjectPos.y(); |
||
605 | PageItem *newObject = NULL, *currItem = NULL; |
||
606 | // FIXME for modeDrawLine |
||
607 | QRectF createObjectRect(createObjectPos.x(), createObjectPos.y(), wSize, hSize); |
||
608 | if (createObjectMode != modeDrawLine) |
||
609 | createObjectRect = createObjectRect.normalized(); |
||
610 | double Rxp = createObjectRect.x(); |
||
611 | double Ryp = createObjectRect.y(); |
||
612 | double Rxpd = createObjectRect.width(); |
||
613 | double Rypd = createObjectRect.height(); |
||
614 | |||
615 | switch (createObjectMode) |
||
616 | { |
||
617 | case modeDrawShapes: |
||
618 | switch (createObjectSubMode) |
||
619 | { |
||
16277 | fschmid | 620 | case 0: |
621 | if (modifiers == Qt::ShiftModifier) |
||
622 | z = m_doc->itemAddArea(PageItem::Polygon, PageItem::Rectangle, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor, true); |
||
623 | else |
||
624 | z = m_doc->itemAdd(PageItem::Polygon, PageItem::Rectangle, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor, true); |
||
12610 | jghali | 625 | m_doc->Items->at(z)->FrameType = 0; |
16277 | fschmid | 626 | break; |
627 | case 1: |
||
628 | if (modifiers == Qt::ShiftModifier) |
||
629 | z = m_doc->itemAddArea(PageItem::Polygon, PageItem::Ellipse, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor, true); |
||
630 | else |
||
631 | z = m_doc->itemAdd(PageItem::Polygon, PageItem::Ellipse, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor, true); |
||
12610 | jghali | 632 | m_doc->Items->at(z)->FrameType = 1; |
16277 | fschmid | 633 | break; |
634 | default: |
||
635 | if (modifiers == Qt::ShiftModifier) |
||
636 | z = m_doc->itemAddArea(PageItem::Polygon, PageItem::Unspecified, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor, true); |
||
637 | else |
||
638 | z = m_doc->itemAdd(PageItem::Polygon, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor, true); |
||
12610 | jghali | 639 | m_doc->Items->at(z)->SetFrameShape(m_doc->ValCount, m_doc->ShapeValues); |
12891 | fschmid | 640 | m_doc->AdjustItemSize(m_doc->Items->at(z)); |
12610 | jghali | 641 | m_doc->setRedrawBounding(m_doc->Items->at(z)); |
642 | m_doc->Items->at(z)->FrameType = createObjectSubMode + 2; |
||
16277 | fschmid | 643 | break; |
12610 | jghali | 644 | } |
645 | break; |
||
646 | case modeDrawLine: |
||
647 | Rxp = createObjectPos.x(); |
||
648 | Ryp = createObjectPos.y(); |
||
649 | m_doc->ApplyGuides(&Rxp, &Ryp); |
||
12633 | jghali | 650 | rot = xy2Deg(Rxpd, Rypd); |
12610 | jghali | 651 | if (rot < 0.0) |
652 | rot += 360; |
||
653 | len = qMax(0.01, distance(Rxpd, Rypd)); |
||
14932 | cbradney | 654 | z = m_doc->itemAdd(PageItem::Line, PageItem::Unspecified, Rxp, Ryp, len, 1, m_doc->itemToolPrefs().lineWidth, CommonStrings::None, m_doc->itemToolPrefs().lineColor, true); |
12610 | jghali | 655 | m_doc->Items->at(z)->setRotation(rot); |
13374 | jghali | 656 | m_doc->Items->at(z)->setRedrawBounding(); |
12610 | jghali | 657 | break; |
658 | case modeDrawLatex: |
||
659 | if (modifiers == Qt::ShiftModifier) |
||
14932 | cbradney | 660 | z = m_doc->itemAddArea(PageItem::LatexFrame, PageItem::Unspecified, Rxp, Ryp, 1, m_doc->itemToolPrefs().imageFillColor, CommonStrings::None, true); |
12610 | jghali | 661 | else |
14932 | cbradney | 662 | z = m_doc->itemAdd(PageItem::LatexFrame, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().imageFillColor, CommonStrings::None, true); |
12610 | jghali | 663 | break; |
664 | case modeDrawImage: |
||
665 | if (modifiers == Qt::ShiftModifier) |
||
14932 | cbradney | 666 | z = m_doc->itemAddArea(PageItem::ImageFrame, PageItem::Unspecified, Rxp, Ryp, 1, m_doc->itemToolPrefs().imageFillColor, CommonStrings::None, true); |
12610 | jghali | 667 | else |
14932 | cbradney | 668 | z = m_doc->itemAdd(PageItem::ImageFrame, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().imageFillColor, CommonStrings::None, true); |
12610 | jghali | 669 | break; |
670 | case modeDrawText: |
||
671 | if (modifiers == Qt::ShiftModifier) |
||
14932 | cbradney | 672 | z = m_doc->itemAddArea(PageItem::TextFrame, PageItem::Unspecified, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().textFont, true); |
12610 | jghali | 673 | else |
14932 | cbradney | 674 | z = m_doc->itemAdd(PageItem::TextFrame, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().textFont, true); |
12610 | jghali | 675 | break; |
676 | case modeDrawRegularPolygon: |
||
16215 | fschmid | 677 | if (modifiers == Qt::ShiftModifier) |
678 | z = m_doc->itemAddArea(PageItem::RegularPolygon, PageItem::Unspecified, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().lineColor, true); |
||
679 | else |
||
680 | z = m_doc->itemAdd(PageItem::RegularPolygon, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().lineColor, true); |
||
681 | break; |
||
682 | case modeDrawArc: |
||
683 | if (modifiers == Qt::ShiftModifier) |
||
684 | z = m_doc->itemAddArea(PageItem::Arc, PageItem::Unspecified, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().lineColor, true); |
||
685 | else |
||
686 | z = m_doc->itemAdd(PageItem::Arc, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().lineColor, true); |
||
16277 | fschmid | 687 | m_doc->AdjustItemSize(m_doc->Items->at(z)); |
688 | m_doc->setRedrawBounding(m_doc->Items->at(z)); |
||
16215 | fschmid | 689 | break; |
16311 | fschmid | 690 | case modeDrawSpiral: |
691 | if (modifiers == Qt::ShiftModifier) |
||
692 | z = m_doc->itemAddArea(PageItem::Spiral, PageItem::Unspecified, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().lineColor, true); |
||
693 | else |
||
694 | z = m_doc->itemAdd(PageItem::Spiral, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().lineColor, true); |
||
695 | m_doc->AdjustItemSize(m_doc->Items->at(z)); |
||
696 | m_doc->setRedrawBounding(m_doc->Items->at(z)); |
||
697 | break; |
||
12610 | jghali | 698 | case modeInsertPDFButton: |
699 | case modeInsertPDFTextfield: |
||
700 | case modeInsertPDFCheckbox: |
||
701 | case modeInsertPDFCombobox: |
||
702 | case modeInsertPDFListbox: |
||
703 | case modeInsertPDFTextAnnotation: |
||
704 | case modeInsertPDFLinkAnnotation: |
||
14932 | cbradney | 705 | z = m_doc->itemAdd(PageItem::TextFrame, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().textColor, true); |
12610 | jghali | 706 | currItem = m_doc->Items->at(z); |
707 | currItem->setIsAnnotation(true); |
||
708 | currItem->AutoName = false; |
||
709 | switch (m_doc->appMode) |
||
710 | { |
||
711 | case modeInsertPDFButton: |
||
712 | currItem->annotation().setType(2); |
||
713 | currItem->annotation().setFlag(65536); |
||
714 | break; |
||
715 | case modeInsertPDFTextfield: |
||
716 | currItem->annotation().setType(3); |
||
717 | break; |
||
718 | case modeInsertPDFCheckbox: |
||
719 | currItem->annotation().setType(4); |
||
720 | break; |
||
721 | case modeInsertPDFCombobox: |
||
722 | currItem->annotation().setType(5); |
||
723 | currItem->annotation().setFlag(131072); |
||
724 | break; |
||
725 | case modeInsertPDFListbox: |
||
726 | currItem->annotation().setType(6); |
||
727 | break; |
||
728 | case modeInsertPDFTextAnnotation: |
||
729 | currItem->annotation().setType(10); |
||
730 | break; |
||
731 | case modeInsertPDFLinkAnnotation: |
||
732 | currItem->annotation().setType(11); |
||
733 | currItem->annotation().setZiel(m_doc->currentPage()->pageNr()); |
||
734 | currItem->annotation().setAction("0 0"); |
||
735 | currItem->setTextFlowMode(PageItem::TextFlowDisabled); |
||
736 | break; |
||
737 | } |
||
738 | break; |
||
739 | case modeDrawTable: |
||
740 | /*m_view->Deselect(false); |
||
741 | Rxp = mousePointDoc.x(); |
||
742 | Ryp = mousePointDoc.y(); |
||
743 | npf = m_doc->ApplyGridF(FPoint(Rxp, Ryp)); |
||
744 | Rxp = npf.x(); |
||
745 | Ryp = npf.y(); |
||
746 | m_doc->ApplyGuides(&Rxp, &Ryp); |
||
747 | canvasPressCoord.setXY(qRound(Rxp), qRound(Ryp)); |
||
748 | canvasCurrCoord = canvasPressCoord; |
||
749 | mouseGlobalCoord.setXY(m->globalPos().x(), m->globalPos().y()); |
||
750 | m_view->redrawMarker->setGeometry(m->globalPos().x(), m->globalPos().y(), 1, 1); |
||
751 | m_view->redrawMarker->show();*/ |
||
752 | |||
753 | if ((m_doc->m_Selection->count() == 0) && (m_view->HaveSelRect) && (!m_view->MidButt)) |
||
754 | { |
||
755 | UndoTransaction * activeTransaction = NULL; |
||
756 | m_view->HaveSelRect = false; |
||
757 | double Tx, Ty, Tw, Th; |
||
758 | FPoint np2 = m_doc->ApplyGridF(canvasPressCoord); |
||
759 | Tx = np2.x(); |
||
760 | Ty = np2.y(); |
||
761 | m_doc->ApplyGuides(&Tx, &Ty); |
||
762 | canvasPressCoord.setXY(qRound(Tx), qRound(Ty)); |
||
763 | np2 = m_doc->ApplyGridF(canvasCurrCoord); |
||
764 | Tw = np2.x(); |
||
765 | Th = np2.y(); |
||
766 | m_doc->ApplyGuides(&Tw, &Th); |
||
767 | canvasCurrCoord.setXY(qRound(Tw), qRound(Th)); |
||
768 | Tw = Tw - Tx; |
||
769 | Th = Th - Ty; |
||
770 | int Cols, Rows; |
||
771 | double deltaX, deltaY, offX, offY; |
||
772 | if ((Th < 6) || (Tw < 6)) |
||
773 | { |
||
774 | m_view->requestMode(submodePaintingDone); |
||
775 | break; |
||
776 | } |
||
777 | qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); |
||
778 | InsertTable *dia = new InsertTable(m_view, static_cast<int>(Th / 6), static_cast<int>(Tw / 6)); |
||
779 | if (!dia->exec()) |
||
780 | { |
||
781 | m_view->requestMode(submodePaintingDone); |
||
782 | delete dia; |
||
783 | dia = NULL; |
||
784 | break; |
||
785 | } |
||
786 | Cols = dia->Cols->value(); |
||
787 | Rows = dia->Rows->value(); |
||
788 | delete dia; |
||
789 | dia=NULL; |
||
790 | deltaX = Tw / Cols; |
||
791 | deltaY = Th / Rows; |
||
792 | offX = 0.0; |
||
793 | offY = 0.0; |
||
794 | m_doc->m_Selection->clear(); |
||
795 | if (UndoManager::undoEnabled()) |
||
16814 | jghali | 796 | activeTransaction = new UndoTransaction(Um::instance()->beginTransaction(m_doc->currentPage()->getUName(), |
797 | Um::ITable, Um::CreateTable, |
||
798 | QString(Um::RowsCols).arg(Rows).arg(Cols), |
||
799 | Um::ICreate)); |
||
12610 | jghali | 800 | m_doc->m_Selection->delaySignalsOn(); |
801 | for (int rc = 0; rc < Rows; ++rc) |
||
802 | { |
||
803 | for (int cc = 0; cc < Cols; ++cc) |
||
804 | { |
||
14932 | cbradney | 805 | z = m_doc->itemAdd(PageItem::TextFrame, PageItem::Unspecified, Tx + offX, Ty + offY, deltaX, deltaY, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().textColor, true); |
12610 | jghali | 806 | currItem = m_doc->Items->at(z); |
807 | currItem->isTableItem = true; |
||
808 | currItem->setTextFlowMode(PageItem::TextFlowUsesBoundingBox); |
||
809 | m_doc->m_Selection->addItem(currItem); |
||
810 | offX += deltaX; |
||
811 | } |
||
812 | offY += deltaY; |
||
813 | offX = 0.0; |
||
814 | } |
||
815 | for (int rc = 0; rc < Rows; ++rc) |
||
816 | { |
||
817 | for (int cc = 0; cc < Cols; ++cc) |
||
818 | { |
||
819 | currItem = m_doc->m_Selection->itemAt((rc * Cols) + cc); |
||
820 | if (rc == 0) |
||
821 | currItem->TopLink = 0; |
||
822 | else |
||
823 | currItem->TopLink = m_doc->m_Selection->itemAt(((rc-1)*Cols)+cc); |
||
824 | if (rc == Rows-1) |
||
825 | currItem->BottomLink = 0; |
||
826 | else |
||
827 | currItem->BottomLink = m_doc->m_Selection->itemAt(((rc+1)*Cols)+cc); |
||
828 | if (cc == 0) |
||
829 | currItem->LeftLink = 0; |
||
830 | else |
||
831 | currItem->LeftLink = m_doc->m_Selection->itemAt((rc*Cols)+cc-1); |
||
832 | if (cc == Cols-1) |
||
833 | currItem->RightLink = 0; |
||
834 | else |
||
835 | currItem->RightLink = m_doc->m_Selection->itemAt((rc*Cols)+cc+1); |
||
836 | } |
||
837 | } |
||
838 | m_doc->itemSelection_GroupObjects(false, false); |
||
16814 | jghali | 839 | z = m_doc->Items->count() - 1; |
12610 | jghali | 840 | if (activeTransaction) |
841 | { |
||
842 | activeTransaction->commit(); |
||
843 | delete activeTransaction; |
||
844 | activeTransaction = NULL; |
||
845 | } |
||
846 | m_doc->m_Selection->delaySignalsOff(); |
||
847 | } |
||
848 | break; |
||
13839 | fschmid | 849 | case modeInsertPDF3DAnnotation: |
850 | if (modifiers == Qt::ShiftModifier) |
||
851 | { |
||
14932 | cbradney | 852 | z = m_doc->itemAddArea(PageItem::OSGFrame, PageItem::Unspecified, Rxp, Ryp, 1, m_doc->itemToolPrefs().imageFillColor, CommonStrings::None, true); |
13839 | fschmid | 853 | } |
854 | else |
||
855 | { |
||
14932 | cbradney | 856 | z = m_doc->itemAdd(PageItem::OSGFrame, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().imageFillColor, CommonStrings::None, true); |
13839 | fschmid | 857 | } |
858 | currItem = m_doc->Items->at(z); |
||
859 | currItem->setIsAnnotation(true); |
||
860 | currItem->AutoName = false; |
||
861 | currItem->annotation().setType(12); |
||
862 | break; |
||
12610 | jghali | 863 | } |
864 | if (z >= 0) |
||
865 | { |
||
866 | SetupDrawNoResize(z); |
||
867 | newObject = m_doc->Items->at(z); |
||
12680 | fschmid | 868 | newObject->ContourLine = newObject->PoLine.copy(); |
12610 | jghali | 869 | } |
870 | return newObject; |
||
871 | } |
||
872 | |||
873 | bool CreateMode::doOneClick(FPoint& startPoint, FPoint& endPoint) |
||
874 | { |
||
875 | bool doCreate = false; |
||
876 | double xSize, ySize; |
||
877 | int originPoint = 0; |
||
878 | |||
879 | if (QApplication::keyboardModifiers() & Qt::ControlModifier) |
||
880 | return true; |
||
881 | |||
882 | PrefsContext* sizes = PrefsManager::instance()->prefsFile->getContext("ObjectSize"); |
||
883 | bool doRemember = sizes->getBool("Remember", true); |
||
884 | |||
885 | int lmode = (createObjectMode == modeDrawLine) ? 1 : 0; |
||
886 | if (lmode == 0) |
||
887 | { |
||
888 | xSize = sizes->getDouble("defWidth", 100.0); |
||
889 | ySize = sizes->getDouble("defHeight", 100.0); |
||
890 | originPoint = sizes->getInt("Origin", 0); |
||
891 | } |
||
892 | else |
||
893 | { |
||
894 | xSize = sizes->getDouble("defLength", 100.0); |
||
895 | ySize = sizes->getDouble("defAngle", 0.0); |
||
896 | originPoint = sizes->getInt("OriginL", 0); |
||
897 | } |
||
898 | |||
899 | qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); |
||
900 | OneClick *dia = new OneClick(m_view, ScribusView::tr("Enter Object Size"), m_doc->unitIndex(), xSize, ySize, doRemember, originPoint, lmode); |
||
901 | if (dia->exec()) |
||
902 | { |
||
903 | doRemember = dia->checkRemember->isChecked(); |
||
904 | if (lmode == 0) |
||
905 | { |
||
906 | xSize = dia->spinWidth->value() / unitGetRatioFromIndex(m_doc->unitIndex()); |
||
907 | ySize = dia->spinHeight->value() / unitGetRatioFromIndex(m_doc->unitIndex()); |
||
908 | originPoint = dia->RotationGroup->checkedId(); |
||
909 | if (doRemember) |
||
910 | { |
||
911 | sizes->set("defWidth", xSize); |
||
912 | sizes->set("defHeight", ySize); |
||
913 | sizes->set("Origin", originPoint); |
||
914 | } |
||
915 | endPoint.setXY(startPoint.x() + xSize, startPoint.y() + ySize); |
||
916 | switch (originPoint) |
||
917 | { |
||
918 | case 0: |
||
919 | break; |
||
920 | case 1: |
||
921 | startPoint.setX(startPoint.x() - xSize); |
||
922 | endPoint.setX(endPoint.x() - xSize); |
||
923 | break; |
||
924 | case 2: |
||
925 | startPoint.setXY(startPoint.x() - xSize / 2.0, startPoint.y() - ySize / 2.0); |
||
926 | endPoint.setXY(endPoint.x() - xSize / 2.0, endPoint.y() - ySize / 2.0); |
||
927 | break; |
||
928 | case 3: |
||
929 | startPoint.setY(startPoint.y() - ySize); |
||
930 | endPoint.setY(endPoint.y() - ySize); |
||
931 | break; |
||
932 | case 4: |
||
933 | startPoint.setXY(startPoint.x() - xSize, startPoint.y() - ySize); |
||
934 | endPoint.setXY(endPoint.x() - xSize, endPoint.y() - ySize); |
||
935 | break; |
||
936 | } |
||
937 | } |
||
938 | else |
||
939 | { |
||
940 | FPoint oldStart = startPoint; |
||
941 | xSize = dia->spinWidth->value() / unitGetRatioFromIndex(m_doc->unitIndex()); |
||
942 | ySize = dia->spinHeight->value(); |
||
943 | originPoint = dia->RotationGroup->checkedId(); |
||
944 | if (doRemember) |
||
945 | { |
||
946 | sizes->set("defLength", xSize); |
||
947 | sizes->set("defAngle", ySize); |
||
948 | sizes->set("OriginL", originPoint); |
||
949 | } |
||
950 | double angle = -ySize * M_PI / 180.0; |
||
951 | switch (originPoint) |
||
952 | { |
||
953 | case 0: |
||
954 | endPoint = FPoint(startPoint.x() + xSize * cos(angle), startPoint.y() + xSize * sin(angle)); |
||
955 | break; |
||
956 | case 1: |
||
957 | startPoint = FPoint(oldStart.x() - xSize * cos(angle), oldStart.y() - xSize * sin(angle)); |
||
958 | endPoint = oldStart; |
||
959 | break; |
||
960 | case 2: |
||
961 | startPoint = FPoint(oldStart.x() - xSize / 2.0 * cos(angle), oldStart.y() - xSize / 2.0 * sin(angle)); |
||
962 | endPoint = FPoint(oldStart.x() + xSize / 2.0 * cos(angle), oldStart.y() + xSize / 2.0 * sin(angle)); |
||
963 | break; |
||
964 | } |
||
965 | } |
||
966 | sizes->set("Remember", doRemember); |
||
967 | doCreate = true; |
||
968 | } |
||
969 | delete dia; |
||
970 | return doCreate; |
||
971 | } |
||
972 | |||
12799 | pierre | 973 | // void CreateMode::setResizeCursor(int how) |
974 | // { |
||
975 | // switch (how) |
||
976 | // { |
||
977 | // case 1: |
||
978 | // case 2: |
||
979 | // qApp->changeOverrideCursor(QCursor(Qt::SizeFDiagCursor)); |
||
980 | // break; |
||
981 | // case 3: |
||
982 | // case 4: |
||
983 | // qApp->changeOverrideCursor(QCursor(Qt::SizeBDiagCursor)); |
||
984 | // break; |
||
985 | // case 5: |
||
986 | // case 8: |
||
987 | // qApp->changeOverrideCursor(QCursor(Qt::SizeVerCursor)); |
||
988 | // break; |
||
989 | // case 6: |
||
990 | // case 7: |
||
991 | // qApp->changeOverrideCursor(QCursor(Qt::SizeHorCursor)); |
||
992 | // break; |
||
993 | // default: |
||
994 | // qApp->changeOverrideCursor(QCursor(Qt::SizeAllCursor)); |
||
995 | // break; |
||
996 | // } |
||
997 | // } |
||
12610 | jghali | 998 |