1 /***************************************************************************
2 * *
3 * copyright : (C) 2008 The University of Toronto *
4 * netterfield@astro.utoronto.ca *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 ***************************************************************************/
12
13 #include "circleitemdialog.h"
14
15 #include "circledimensionstab.h"
16 #include "circleitem.h"
17 #include "dialogpage.h"
18 #include "application.h"
19 #include "objectstore.h"
20 #include "mainwindow.h"
21 #include "document.h"
22
23 namespace Kst {
24
CircleItemDialog(CircleItem * item,QWidget * parent)25 CircleItemDialog::CircleItemDialog(CircleItem *item, QWidget *parent)
26 : ViewItemDialog(item, parent), _viewItem(item) {
27
28 _circleDimensionsTab = new CircleDimensionsTab(item, this);
29
30 DialogPage *circleDimensionsPage = new DialogPage(this);
31 circleDimensionsPage->setPageTitle(tr("Size/Position"));
32 circleDimensionsPage->addDialogTab(_circleDimensionsTab);
33 addDialogPage(circleDimensionsPage);
34 selectDialogPage(circleDimensionsPage);
35
36 connect(_circleDimensionsTab, SIGNAL(apply()), this, SLOT(dimensionsChanged()));
37
38 setupDimensions();
39
40 connect(_circleDimensionsTab, SIGNAL(tabModified()), this, SLOT(modified()));
41
42 }
43
44
setupDimensions()45 void CircleItemDialog::setupDimensions() {
46 _circleDimensionsTab->enableSingleEditOptions(true);
47 _circleDimensionsTab->setupDimensions();
48 }
49
saveDimensions(ViewItem * item)50 void CircleItemDialog::saveDimensions(ViewItem *item) {
51 Q_ASSERT(item);
52
53 if (editMode() == Multiple) { // saving dimensions not supported for edit multiple mode
54 return;
55 }
56
57 if (_circleDimensionsTab->lockPosToData() && item->dataPosLockable()) {
58 QRectF dr;
59 dr.setWidth(2*_circleDimensionsTab->radius());
60 dr.setHeight(2*_circleDimensionsTab->radius());
61 dr.moveCenter(QPointF(_circleDimensionsTab->x(), _circleDimensionsTab->y()));
62
63 item->setDataRelativeRect(dr);
64 bool lockPosToData = _circleDimensionsTab->lockPosToDataDirty() ? _circleDimensionsTab->lockPosToData() : item->lockPosToData();
65 item->setLockPosToData(lockPosToData);
66
67 item->applyDataLockedDimensions();
68 } else {
69
70 QRectF parentRect = item->parentRect();
71 qreal parentWidth = parentRect.width();
72 qreal parentHeight = parentRect.height();
73 qreal parentX = parentRect.x();
74 qreal parentY = parentRect.y();
75
76 qreal relativeRadius = _circleDimensionsTab->radiusDirty() ? _circleDimensionsTab->radius() :item->relativeWidth()*0.5;
77 bool lockPosToData = _circleDimensionsTab->lockPosToDataDirty() ? _circleDimensionsTab->lockPosToData() : item->lockPosToData();
78
79 qreal radius = relativeRadius * parentWidth;
80 item->setLockPosToData(lockPosToData);
81
82 item->setPos(parentX + _circleDimensionsTab->x()*parentWidth, parentY + _circleDimensionsTab->y()*parentHeight);
83 item->setViewRect(-radius, -radius, radius*2.0, radius*2.0);
84
85 QTransform transform;
86
87 item->setTransform(transform);
88 item->updateRelativeSize();
89 }
90 }
91 }
92