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                           rulermover.cpp  -  description
9                              -------------------
10     begin                : Sun Jul 24 2005
11     copyright            : (C) 2005 by Franz Schmid
12     email                : Franz.Schmid@altmuehlnet.de
13  ***************************************************************************/
14 
15 /***************************************************************************
16  *                                                                         *
17  *   This program is free software; you can redistribute it and/or modify  *
18  *   it under the terms of the GNU General Public License as published by  *
19  *   the Free Software Foundation; either version 2 of the License, or     *
20  *   (at your option) any later version.                                   *
21  *                                                                         *
22  ***************************************************************************/
23 
24 #include "rulermover.h"
25 
26 #include <QApplication>
27 #include <QCursor>
28 #include <QMenu>
29 #include <QPixmap>
30 #include <QPalette>
31 #include <QWidget>
32 
33 
34 #include "canvas.h"
35 #include "canvasgesture_rulermove.h"
36 #include "iconmanager.h"
37 #include "scraction.h"
38 #include "scribus.h"
39 #include "scribusdoc.h"
40 #include "scribusview.h"
41 #include "ui/guidemanager.h"
42 
43 
RulerMover(ScribusView * pa)44 RulerMover::RulerMover(ScribusView *pa) : QWidget(pa)
45 {
46 	setBackgroundRole(QPalette::Window);
47 	setAutoFillBackground(true);
48 	QPalette palette;
49 	palette.setBrush(QPalette::Window, QColor(240, 240, 240));
50 	palette.setBrush(backgroundRole(), QBrush(IconManager::instance().loadPixmap("mover.png")));
51 	setPalette(palette);
52 	currView = pa;
53 	rulerGesture = new RulerGesture(currView, RulerGesture::ORIGIN);
54 	Mpressed = false;
55 }
56 
mouseDoubleClickEvent(QMouseEvent *)57 void RulerMover::mouseDoubleClickEvent(QMouseEvent *)
58 {
59 	currView->m_doc->rulerXoffset = 0;
60 	currView->m_doc->rulerYoffset = 0;
61 	currView->DrawNew();
62 }
63 
mousePressEvent(QMouseEvent * m)64 void RulerMover::mousePressEvent(QMouseEvent *m)
65 {
66 	if (m->button() == Qt::LeftButton)
67 	{
68 		Mpressed = true;
69 		qApp->setOverrideCursor(QCursor(Qt::CrossCursor));
70 		currView->startGesture(rulerGesture);
71 		currView->registerMousePress(m->globalPos());
72 	}
73 	QWidget::mousePressEvent(m);
74 }
75 
mouseReleaseEvent(QMouseEvent * m)76 void RulerMover::mouseReleaseEvent(QMouseEvent *m)
77 {
78 	qApp->restoreOverrideCursor();
79 	if (Mpressed)
80 	{
81 		rulerGesture->mouseReleaseEvent(m);
82 		Mpressed = false;
83 	}
84 	else if (m->button() == Qt::RightButton)
85 	{
86 		QMenu *pmen = new QMenu();
87 		QMenu *pmen2 = nullptr;
88 		pmen->addAction( tr("Reset Rulers"), this, SLOT(resetRulers()));
89 		pmen->addAction(currView->m_doc->scMW()->scrActions["viewRulerMode"]);
90 		if (currView->m_doc->guidesPrefs().rulerMode)
91 		{
92 			pmen2 = new QMenu();
93 			if (pmen2)
94 			{
95 				pmen2->setTitle( tr("Move on current Page"));
96 				pmen2->addAction( tr("Origin at Top Left"), this, SLOT(resetRulers()));
97 				pmen2->addAction( tr("Origin at Top Right"), this, SLOT(moveRulerTopRight()));
98 				pmen2->addAction( tr("Origin at Bottom Left"), this, SLOT(moveRulerBottomLeft()));
99 				pmen2->addAction( tr("Origin at Bottom Right"), this, SLOT(moveRulerBottomRight()));
100 				pmen2->addAction( tr("Origin at Center"), this, SLOT(moveRulerCenter()));
101 				pmen2->addAction( tr("Origin at Top Center"), this, SLOT(moveRulerTopCenter()));
102 				pmen2->addAction( tr("Origin at Bottom Center"), this, SLOT(moveRulerBottomCenter()));
103 				pmen->addMenu(pmen2);
104 			}
105 		}
106 		pmen->exec(QCursor::pos());
107 		delete pmen;
108 		delete pmen2;
109 	}
110 	if (currView->m_doc->guidesPrefs().guidesShown)
111 		currView->m_doc->scMW()->guidePalette->setupPage();
112 	QWidget::mouseReleaseEvent(m);
113 }
114 
mouseMoveEvent(QMouseEvent * m)115 void RulerMover::mouseMoveEvent(QMouseEvent *m)
116 {
117 	if (Mpressed)
118 		rulerGesture->mouseMoveEvent(m);
119 	QWidget::mouseMoveEvent(m);
120 }
121 
resetRulers()122 void RulerMover::resetRulers()
123 {
124 	currView->m_doc->rulerXoffset = 0;
125 	currView->m_doc->rulerYoffset = 0;
126 	currView->DrawNew();
127 }
128 
moveRulerTopRight()129 void RulerMover::moveRulerTopRight()
130 {
131 	currView->m_doc->rulerXoffset = currView->m_doc->currentPage()->width();
132 	currView->m_doc->rulerYoffset = 0;
133 	currView->DrawNew();
134 }
135 
moveRulerBottomLeft()136 void RulerMover::moveRulerBottomLeft()
137 {
138 	currView->m_doc->rulerXoffset = 0;
139 	currView->m_doc->rulerYoffset = currView->m_doc->currentPage()->height();
140 	currView->DrawNew();
141 }
142 
moveRulerBottomRight()143 void RulerMover::moveRulerBottomRight()
144 {
145 	currView->m_doc->rulerXoffset = currView->m_doc->currentPage()->width();
146 	currView->m_doc->rulerYoffset = currView->m_doc->currentPage()->height();
147 	currView->DrawNew();
148 }
149 
moveRulerCenter()150 void RulerMover::moveRulerCenter()
151 {
152 	currView->m_doc->rulerXoffset = currView->m_doc->currentPage()->width() / 2.0;
153 	currView->m_doc->rulerYoffset = currView->m_doc->currentPage()->height() / 2.0;
154 	currView->DrawNew();
155 }
156 
moveRulerTopCenter()157 void RulerMover::moveRulerTopCenter()
158 {
159 	currView->m_doc->rulerXoffset = currView->m_doc->currentPage()->width() / 2.0;
160 	currView->m_doc->rulerYoffset = 0;
161 	currView->DrawNew();
162 }
163 
moveRulerBottomCenter()164 void RulerMover::moveRulerBottomCenter()
165 {
166 	currView->m_doc->rulerXoffset = currView->m_doc->currentPage()->width() / 2.0;
167 	currView->m_doc->rulerYoffset = currView->m_doc->currentPage()->height();
168 	currView->DrawNew();
169 }
170 
171