Subversion Repositories Scribus

Rev

Rev 18480 | Rev 18667 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
16546 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
#include "propertiespalette_xyz.h"
9
 
10
#include <QMessageBox>
11
 
17539 jghali 12
#if defined(_MSC_VER) && !defined(_USE_MATH_DEFINES)
16546 jghali 13
#define _USE_MATH_DEFINES
14
#endif
15
#include <cmath>
16
#include "autoform.h"
17
#include "basepointwidget.h"
18
#include "commonstrings.h"
19
#include "colorlistbox.h"
20
#include "sccolorengine.h"
21
#include "pageitem.h"
22
#include "pageitem_arc.h"
17062 fschmid 23
#include "pageitem_group.h"
16546 jghali 24
#include "pageitem_spiral.h"
25
#include "pageitem_textframe.h"
26
#include "propertiespalette_utils.h"
27
#include "sccombobox.h"
28
#include "scribus.h"
29
#include "scribuscore.h"
30
#include "scraction.h"
31
#include "scribusview.h"
32
#include "selection.h"
33
#include "tabmanager.h"
34
#include "units.h"
35
#include "undomanager.h"
36
#include "util.h"
37
#include "util_icon.h"
38
#include "util_math.h"
39
 
40
//using namespace std;
41
 
42
PropertiesPalette_XYZ::PropertiesPalette_XYZ( QWidget* parent) : QWidget(parent)
43
{
44
        m_ScMW=0;
45
        m_doc=0;
46
        m_haveDoc  = false;
47
        m_haveItem = false;
48
        m_lineMode = false;
49
        m_oldRotation = 0;
50
        m_unitRatio = 1.0;
51
 
52
        setupUi(this);
17383 fschmid 53
        setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
16546 jghali 54
 
55
        _userActionOn = false;
56
        userActionSniffer = new UserActionSniffer(this);
57
        connect(userActionSniffer, SIGNAL(actionStart()), this, SLOT(spinboxStartUserAction()));
58
        connect(userActionSniffer, SIGNAL(actionEnd()), this, SLOT(spinboxFinishUserAction()));
59
 
60
        nameEdit->setFocusPolicy(Qt::ClickFocus);
61
 
62
        installSniffer(xposSpin);
63
        installSniffer(yposSpin);
64
        installSniffer(widthSpin);
65
        installSniffer(heightSpin);
66
 
67
        xposLabel->setBuddy(xposSpin);
68
        yposLabel->setBuddy(yposSpin);
69
        widthLabel->setBuddy(widthSpin);
70
        heightLabel->setBuddy(heightSpin);
71
 
72
        keepFrameWHRatioButton->setCheckable( true );
73
        keepFrameWHRatioButton->setAutoRaise( true );
74
        keepFrameWHRatioButton->setMaximumSize( QSize( 15, 32767 ) );
75
        keepFrameWHRatioButton->setChecked(false);
76
        rotationSpin->setWrapping( true );
77
        installSniffer(rotationSpin);
78
 
79
        rotationSpin->setNewUnit(6);
80
        rotationLabel->setBuddy(rotationSpin);
81
 
82
        levelUp->setIcon(QIcon(loadIcon("16/go-up.png")));
83
        levelDown->setIcon(QIcon(loadIcon("16/go-down.png")));
84
        levelTop->setIcon(QIcon(loadIcon("16/go-top.png")));
85
        levelBottom->setIcon(QIcon(loadIcon("16/go-bottom.png")));
86
        levelLabel->setAlignment( Qt::AlignCenter );
87
 
88
        doGroup->setIcon(QIcon(loadIcon("group.png")));
89
        doUnGroup->setIcon(QIcon(loadIcon("ungroup.png")));
90
 
91
        flipH->setIcon(QIcon(loadIcon("16/flip-object-horizontal.png")));
92
        flipH->setCheckable( true );
93
        flipV->setIcon(QIcon(loadIcon("16/flip-object-vertical.png")));
94
        flipV->setCheckable( true );
95
 
96
        doLock->setCheckable( true );
97
        QIcon a = QIcon();
98
        a.addPixmap(loadIcon("16/lock.png"), QIcon::Normal, QIcon::On);
99
        a.addPixmap(loadIcon("16/lock-unlocked.png"), QIcon::Normal, QIcon::Off);
100
        doLock->setIcon(a);
101
 
102
        noPrint->setCheckable( true );
103
        QIcon a2 = QIcon();
104
        a2.addPixmap(loadIcon("NoPrint.png"), QIcon::Normal, QIcon::On);
105
        a2.addPixmap(loadIcon("16/document-print.png"), QIcon::Normal, QIcon::Off);
106
        noPrint->setIcon(a2);
107
 
108
        noResize->setCheckable( true );
109
        QIcon a3 = QIcon();
110
        a3.addPixmap(loadIcon("framenoresize.png"), QIcon::Normal, QIcon::On);
111
        a3.addPixmap(loadIcon("frameresize.png"), QIcon::Normal, QIcon::Off);
112
        noResize->setIcon(a3);
113
 
114
        m_lineMode = false;
115
 
116
        languageChange();
117
 
118
        connect(xposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewX()));
119
        connect(yposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewY()));
120
        connect(widthSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewW()));
121
        connect(heightSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewH()));
122
        connect(rotationSpin, SIGNAL(valueChanged(double)), this, SLOT(handleRotation()));
123
        connect(flipH, SIGNAL(clicked()), this, SLOT(handleFlipH()));
124
        connect(flipV, SIGNAL(clicked()), this, SLOT(handleFlipV()));
125
        connect(levelUp, SIGNAL(clicked()), this, SLOT(handleRaise()));
126
        connect(levelDown, SIGNAL(clicked()), this, SLOT(handleLower()));
127
        connect(levelTop, SIGNAL(clicked()), this, SLOT(handleFront()));
128
        connect(levelBottom, SIGNAL(clicked()), this, SLOT(handleBack()));
129
        connect(basePointWidget, SIGNAL(buttonClicked(int)), this, SLOT(handleBasePoint(int)));
130
 
131
        connect(nameEdit , SIGNAL(Leaved()) , this, SLOT(handleNewName()));
132
        connect(doLock   , SIGNAL(clicked()), this, SLOT(handleLock()));
133
        connect(noPrint  , SIGNAL(clicked()), this, SLOT(handlePrint()));
134
        connect(noResize , SIGNAL(clicked()), this, SLOT(handleLockSize()));
135
        connect(doGroup  , SIGNAL(clicked()), this, SLOT(handleGrouping()) );
136
        connect(doUnGroup, SIGNAL(clicked()), this, SLOT(handleUngrouping()) );
137
 
138
        m_haveItem = false;
139
        xposSpin->showValue(0);
140
        yposSpin->showValue(0);
141
        widthSpin->showValue(0);
142
        heightSpin->showValue(0);
143
        rotationSpin->showValue(0);
144
}
145
 
146
void PropertiesPalette_XYZ::setMainWindow(ScribusMainWindow* mw)
147
{
148
        m_ScMW = mw;
149
 
17094 jghali 150
        connect(mw, SIGNAL(AppModeChanged(int, int)), this, SLOT(handleAppModeChanged(int, int)));
16546 jghali 151
}
152
 
153
void PropertiesPalette_XYZ::setDoc(ScribusDoc *d)
154
{
155
        if((d == (ScribusDoc*) m_doc) || (m_ScMW && m_ScMW->scriptIsRunning()))
156
                return;
157
 
158
        if (m_doc)
159
        {
160
                disconnect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged()));
161
                disconnect(m_doc             , SIGNAL(docChanged())      , this, SLOT(handleSelectionChanged()));
162
        }
163
 
164
        m_doc  = d;
165
        m_item = NULL;
166
        m_unitRatio   = m_doc->unitRatio();
167
        m_unitIndex   = m_doc->unitIndex();
168
        int precision = unitGetPrecisionFromIndex(m_unitIndex);
169
//qt4 FIXME here
170
        double maxXYWHVal =  16777215 * m_unitRatio;
171
        double minXYVal   = -16777215 * m_unitRatio;
172
 
173
        m_haveDoc = true;
174
        m_haveItem = false;
175
 
176
        QMap<QString, double>* docConstants = m_doc? &m_doc->constants()  : NULL;
177
        xposSpin->setValues( minXYVal, maxXYWHVal, precision, minXYVal);
178
        xposSpin->setConstants(docConstants);
179
        yposSpin->setValues( minXYVal, maxXYWHVal, precision, minXYVal);
180
        yposSpin->setConstants(docConstants);
181
        widthSpin->setValues( m_unitRatio, maxXYWHVal, precision, m_unitRatio);
182
        widthSpin->setConstants(docConstants);
183
        heightSpin->setValues( m_unitRatio, maxXYWHVal, precision, m_unitRatio);
184
        heightSpin->setConstants(docConstants);
185
 
186
        rotationSpin->setValues( 0, 359.99, 1, 0);
187
 
188
        updateSpinBoxConstants();
189
 
190
        connect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged()));
191
        connect(m_doc             , SIGNAL(docChanged())      , this, SLOT(handleSelectionChanged()));
192
}
193
 
194
void PropertiesPalette_XYZ::unsetDoc()
195
{
196
        if (m_doc)
197
        {
198
                disconnect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged()));
199
                disconnect(m_doc             , SIGNAL(docChanged())      , this, SLOT(handleSelectionChanged()));
200
        }
201
 
202
        m_haveDoc  = false;
203
        m_haveItem = false;
204
        m_doc   = NULL;
205
        m_item  = NULL;
206
        xposSpin->setConstants(NULL);
207
        yposSpin->setConstants(NULL);
208
        widthSpin->setConstants(NULL);
209
        heightSpin->setConstants(NULL);
210
        doGroup->setEnabled(false);
211
        doUnGroup->setEnabled(false);
212
        flipH->setEnabled(false);
213
        flipV->setEnabled(false);
214
        xposLabel->setText( tr( "&X-Pos:" ) );
215
        widthLabel->setText( tr( "&Width" ) );
216
        yposLabel->setText( tr( "&Y-Pos:" ) );
217
        heightLabel->setText( tr( "&Height:" ) );
218
        xposSpin->showValue(0);
219
        yposSpin->showValue(0);
220
        widthSpin->showValue(0);
221
        heightSpin->showValue(0);
222
        rotationSpin->showValue(0);
223
        setEnabled(false);
224
}
225
 
226
void PropertiesPalette_XYZ::unsetItem()
227
{
228
        m_haveItem = false;
229
        m_item     = NULL;
230
        handleSelectionChanged();
231
}
232
 
233
void PropertiesPalette_XYZ::setLineMode(int lineMode)
234
{
235
        if (lineMode == 0)
236
        {
237
                xposLabel->setText( tr( "&X-Pos:" ) );
238
                widthLabel->setText( tr( "&Width" ) );
239
                yposLabel->setText( tr( "&Y-Pos:" ) );
240
                heightLabel->setText( tr( "&Height:" ) );
241
                rotationSpin->setEnabled(true);
242
                heightSpin->setEnabled(false);
243
                m_lineMode = false;
244
        }
245
        else
246
        {
247
                xposLabel->setText( tr( "&X1:" ) );
248
                widthLabel->setText( tr( "X&2:" ) );
249
                yposLabel->setText( tr( "Y&1:" ) );
250
                heightLabel->setText( tr( "&Y2:" ) );
251
                rotationSpin->setEnabled(false);
252
                heightSpin->setEnabled(true);
253
                m_lineMode = true;
254
        }
255
}
256
 
257
PageItem* PropertiesPalette_XYZ::currentItemFromSelection()
258
{
259
        PageItem *currentItem = NULL;
260
 
261
        if (m_doc)
262
        {
263
                if (m_doc->m_Selection->count() > 1)
264
                {
265
                        currentItem = m_doc->m_Selection->itemAt(0);
266
                }
267
                else if (m_doc->m_Selection->count() == 1)
268
                {
269
                        currentItem = m_doc->m_Selection->itemAt(0);
270
                }
271
        }
272
 
273
        return currentItem;
274
}
275
 
276
void PropertiesPalette_XYZ::setCurrentItem(PageItem *i)
277
{
278
        if (!m_ScMW || m_ScMW->scriptIsRunning())
279
                return;
280
        //CB We shouldnt really need to process this if our item is the same one
281
        //maybe we do if the item has been changed by scripter.. but that should probably
282
        //set some status if so.
283
        //FIXME: This wont work until when a canvas deselect happens, m_item must be NULL.
284
        //if (m_item == i)
285
        //      return;
286
 
287
        if (!m_doc)
288
                setDoc(i->doc());
289
 
290
        disconnect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName()));
291
 
292
        m_haveItem = false;
293
        m_item = i;
294
 
295
        nameEdit->setText(m_item->itemName());
17092 jghali 296
        levelLabel->setText( QString::number(m_item->level()) );
16546 jghali 297
 
298
        connect(nameEdit, SIGNAL(Leaved()), this, SLOT(handleNewName()));
299
 
300
//CB replaces old emits from PageItem::emitAllToGUI()
301
        disconnect(xposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewX()));
302
        disconnect(yposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewY()));
303
        disconnect(widthSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewW()));
304
        disconnect(heightSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewH()));
305
        disconnect(doLock, SIGNAL(clicked()), this, SLOT(handleLock()));
306
        disconnect(noPrint, SIGNAL(clicked()), this, SLOT(handlePrint()));
307
        disconnect(noResize, SIGNAL(clicked()), this, SLOT(handleLockSize()));
308
        disconnect(flipH, SIGNAL(clicked()), this, SLOT(handleFlipH()));
309
        disconnect(flipV, SIGNAL(clicked()), this, SLOT(handleFlipV()));
310
        disconnect(rotationSpin, SIGNAL(valueChanged(double)), this, SLOT(handleRotation()));
311
 
312
        double selX = m_item->xPos();
313
        double selY = m_item->yPos();
314
        double selW = m_item->width();
315
        double selH = m_item->height();
316
        if (m_doc->m_Selection->count() > 1)
317
                m_doc->m_Selection->getGroupRect(&selX, &selY, &selW, &selH);
16977 fschmid 318
//      displayXY(selX, selY);
319
//      displayWH(selW, selH);
16546 jghali 320
 
321
        bool checkableFlip = (i->isImageFrame() || i->isTextFrame() || i->isLatexFrame() || i->isOSGFrame() || i->isSymbol() || i->isGroup() || i->isSpiral());
322
        flipH->setCheckable(checkableFlip);
323
        flipV->setCheckable(checkableFlip);
324
 
325
        noPrint->setChecked(!i->printEnabled());
326
        displayFlippedH(i->imageFlippedH());
327
        displayFlippedV(i->imageFlippedV());
328
        m_oldRotation = i->rotation();
329
        double rr = i->rotation();
330
        if (i->rotation() > 0)
331
                rr = 360 - rr;
332
        rotationSpin->setValue(fabs(rr));
333
 
334
//CB TODO reconnect PP signals from here
335
        connect(xposSpin    , SIGNAL(valueChanged(double)), this, SLOT(handleNewX()));
336
        connect(yposSpin    , SIGNAL(valueChanged(double)), this, SLOT(handleNewY()));
337
        connect(widthSpin   , SIGNAL(valueChanged(double)), this, SLOT(handleNewW()));
338
        connect(heightSpin  , SIGNAL(valueChanged(double)), this, SLOT(handleNewH()));
339
        connect(doLock  , SIGNAL(clicked()), this, SLOT(handleLock()));
340
        connect(noPrint , SIGNAL(clicked()), this, SLOT(handlePrint()));
341
        connect(noResize, SIGNAL(clicked()), this, SLOT(handleLockSize()));
342
        connect(flipH   , SIGNAL(clicked()), this, SLOT(handleFlipH()));
343
        connect(flipV   , SIGNAL(clicked()), this, SLOT(handleFlipV()));
344
        connect(rotationSpin, SIGNAL(valueChanged(double)), this, SLOT(handleRotation()));
345
 
346
        bool setter = false;
347
        xposSpin->setEnabled(!setter);
348
        yposSpin->setEnabled(!setter);
17092 jghali 349
        bool haveSameParent = m_doc->m_Selection->objectsHaveSameParent();
17062 fschmid 350
        levelGroup->setEnabled(haveSameParent && !i->locked());
16546 jghali 351
        if ((m_item->isGroup()) && (!m_item->isSingleSel))
352
        {
353
                setEnabled(true);
354
        }
355
        if ((m_item->itemType() == PageItem::Line) && m_lineMode)
356
        {
357
                xposLabel->setText( tr( "&X1:" ) );
358
                widthLabel->setText( tr( "X&2:" ) );
359
                yposLabel->setText( tr( "Y&1:" ) );
360
                heightLabel->setText( tr( "&Y2:" ) );
361
                rotationSpin->setEnabled(false);
362
        }
363
        else
364
        {
365
                xposLabel->setText( tr( "&X-Pos:" ) );
366
                widthLabel->setText( tr( "&Width" ) );
367
                yposLabel->setText( tr( "&Y-Pos:" ) );
368
                heightLabel->setText( tr( "&Height:" ) );
17418 fschmid 369
                rotationSpin->setEnabled(true);
16546 jghali 370
        }
371
        m_haveItem = true;
372
        if (m_item->asLine())
373
        {
374
                keepFrameWHRatioButton->setEnabled(false);
375
                heightSpin->setEnabled(m_lineMode && !m_item->locked());
376
        }
377
        else
378
        {
379
                heightSpin->setEnabled(true);
380
                keepFrameWHRatioButton->setEnabled(true);
381
        }
382
        displayXY(selX, selY);
383
        displayWH(selW, selH);
384
        displayLocked(i->locked());
385
        displaySizeLocked(i->sizeLocked());
386
        double rrR = i->imageRotation();
387
        if (i->imageRotation() > 0)
388
                rrR = 360 - rrR;
389
        noResize->setEnabled(!m_item->isArc());
390
 
391
        doGroup->setEnabled(false);
392
        doUnGroup->setEnabled(false);
17062 fschmid 393
        if ((m_doc->m_Selection->count() > 1) && (haveSameParent))
16546 jghali 394
                doGroup->setEnabled(true);
395
        if (m_doc->m_Selection->count() == 1)
396
                doUnGroup->setEnabled(m_item->isGroup());
16976 fschmid 397
        if ((m_doc->appMode == modeEditClip) && (m_item->isGroup()))
398
                doUnGroup->setEnabled(false);
16546 jghali 399
        if (m_item->asOSGFrame())
400
        {
401
                setEnabled(true);
402
                rotationSpin->setEnabled(false);
403
        }
404
        if (m_item->asSymbolFrame())
405
        {
406
                setEnabled(true);
407
        }
408
        updateSpinBoxConstants();
409
}
410
 
17094 jghali 411
void PropertiesPalette_XYZ::handleAppModeChanged(int oldMode, int mode)
412
{
17097 fschmid 413
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
414
                return;
415
        doUnGroup->setEnabled(mode != modeEdit && mode != modeEditClip && m_item->isGroup());
17094 jghali 416
}
417
 
16546 jghali 418
void PropertiesPalette_XYZ::handleSelectionChanged()
419
{
420
        if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning())
421
                return;
422
 
423
        nameEdit->setEnabled(m_doc->m_Selection->count() == 1);
424
 
425
        PageItem* currItem = currentItemFromSelection();
426
        if (m_doc->m_Selection->count() > 1)
427
        {
428
                m_oldRotation = 0;
429
                double gx, gy, gh, gw;
430
                m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
431
                int bp = basePointWidget->checkedId();
432
                if (bp == 0)
433
                        m_ScMW->view->RCenter = FPoint(gx, gy);
434
                else if (bp == 1)
435
                        m_ScMW->view->RCenter = FPoint(gx + gw, gy);
436
                else if (bp == 2)
437
                        m_ScMW->view->RCenter = FPoint(gx + gw / 2.0, gy + gh / 2.0);
438
                else if (bp == 3)
439
                        m_ScMW->view->RCenter = FPoint(gx, gy + gh);
440
                else if (bp == 0)
441
                        m_ScMW->view->RCenter = FPoint(gx + gw, gy + gh);
442
                xposLabel->setText( tr( "&X-Pos:" ) );
443
                widthLabel->setText( tr( "&Width:" ) );
444
                yposLabel->setText( tr( "&Y-Pos:" ) );
445
                heightLabel->setText( tr( "&Height:" ) );
446
 
447
                xposSpin->showValue(gx);
448
                yposSpin->showValue(gy);
449
                widthSpin->showValue(gw);
450
                heightSpin->showValue(gh);
451
                rotationSpin->showValue(0);
452
 
453
                xposSpin->setEnabled(true);
454
                yposSpin->setEnabled(true);
455
                widthSpin->setEnabled(true);
456
                heightSpin->setEnabled(true);
457
                rotationSpin->setEnabled(true);
458
 
459
                nameEdit->setEnabled(false);
460
                flipH->setCheckable( false );
461
                flipV->setCheckable( false );
462
                flipH->setChecked(false);
463
                flipV->setChecked(false);
464
 
465
                flipH->setEnabled(true);
466
                flipV->setEnabled(true);
467
 
468
                setEnabled(true);
469
        }
470
        else
471
        {
472
                int itemType = currItem ? (int) currItem->itemType() : -1;
473
 
474
                m_haveItem = (itemType!=-1);
475
                if (itemType == -1)
476
                {
477
                        doGroup->setEnabled(false);
478
                        doUnGroup->setEnabled(false);
479
                }
480
                nameEdit->setEnabled(true);
481
                basePointWidget->setEnabled(true);
482
 
483
                setEnabled(true);
484
 
485
                //CB If Toggle is not possible, then we need to enable it so we can turn it off
486
                //It then gets reset below for items where its valid
487
                flipH->setCheckable(true);
488
                flipV->setCheckable(true);
489
                if ((itemType == 2) || (itemType == 4) || ((itemType >= 9) && (itemType <= 12)) || (itemType == 15))
490
                {
491
                        flipH->setCheckable(true);
492
                        flipV->setCheckable(true);
493
                }
494
                else
495
                {
496
                        flipH->setCheckable(false);
497
                        flipV->setCheckable(false);
498
                        flipH->setChecked(false);
499
                        flipV->setChecked(false);
500
                }
501
 
502
                //CB Why cant we do this for lines?
503
//              flipH->setEnabled((itemType !=-1) && (itemType !=5));
504
//              flipV->setEnabled((itemType !=-1) && (itemType !=5));
505
                flipH->setEnabled(itemType !=-1);
506
                flipV->setEnabled(itemType !=-1);
507
                switch (itemType)
508
                {
509
                case -1:
510
                        xposLabel->setText( tr( "&X-Pos:" ) );
511
                        widthLabel->setText( tr( "&Width:" ) );
512
                        yposLabel->setText( tr( "&Y-Pos:" ) );
513
                        heightLabel->setText( tr( "&Height:" ) );
514
 
515
                        xposSpin->showValue(0);
516
                        yposSpin->showValue(0);
517
                        widthSpin->showValue(0);
518
                        heightSpin->showValue(0);
519
                        rotationSpin->showValue(0);
520
                        levelLabel->setText("  ");
521
                        setEnabled(false);
522
                        break;
523
                case PageItem::ImageFrame:
524
                case PageItem::LatexFrame:
525
                case PageItem::OSGFrame:
526
#ifdef HAVE_OSG
527
                        if (currItem->asOSGFrame())
528
                        {
529
                                setEnabled(true);
530
                                rotationSpin->setEnabled(false);
531
                        }
532
#endif
533
                        break;
534
                case PageItem::Line:
535
                        basePointWidget->setEnabled(false);
536
                        break;
537
                }
538
        }
539
        if (currItem)
540
        {
541
                setCurrentItem(currItem);
542
        }
543
        updateGeometry();
18480 jghali 544
        //repaint();
16546 jghali 545
}
546
 
547
void PropertiesPalette_XYZ::unitChange()
548
{
549
        if (!m_haveDoc)
550
                return;
551
        bool tmp = m_haveItem;
552
        m_haveItem = false;
553
        m_unitRatio = m_doc->unitRatio();
554
        m_unitIndex = m_doc->unitIndex();
555
        xposSpin->setNewUnit( m_unitIndex );
556
        yposSpin->setNewUnit( m_unitIndex );
557
        widthSpin->setNewUnit( m_unitIndex );
558
        heightSpin->setNewUnit( m_unitIndex );
559
        m_haveItem = tmp;
560
}
561
 
562
void PropertiesPalette_XYZ::displayXY(double x, double y)
563
{
564
        if (!m_ScMW || m_ScMW->scriptIsRunning())
565
                return;
566
        disconnect(xposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewX()));
567
        disconnect(yposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewY()));
568
        bool useLineMode = false;
569
        bool tmp = m_haveItem;
570
        double inX, inY, b, h, r, dummy1, dummy2;
571
        QTransform ma;
572
        FPoint n;
573
        if (m_haveItem)
574
        {
575
                if (m_doc->m_Selection->isMultipleSelection())
576
                {
577
                        m_doc->m_Selection->getGroupRect(&dummy1, &dummy2, &b, &h);
578
                        r = 0.0;
579
                        ma.translate(dummy1, dummy2);
580
                }
581
                else
582
                {
583
                        b = m_item->width();
584
                        h = m_item->height();
585
                        r = m_item->rotation();
586
                        ma.translate(x, y);
587
                        useLineMode = (m_lineMode && m_item->isLine());
588
                }
589
        }
590
        else
591
        {
592
                b = 0.0;
593
                h = 0.0;
594
                r = 0.0;
595
                ma.translate(x, y);
596
        }
597
        m_haveItem = false;
598
        ma.rotate(r);
599
        int bp = basePointWidget->checkedId();
600
        // #8890 : basepoint is meaningless when lines use "end points" mode
601
        if (bp == 0 || useLineMode)
602
                n = FPoint(0.0, 0.0);
603
        else if (bp == 1)
604
                n = FPoint(b, 0.0);
605
        else if (bp == 2)
606
                n = FPoint(b / 2.0, h / 2.0);
607
        else if (bp == 3)
608
                n = FPoint(0.0, h);
609
        else if (bp == 4)
610
                n = FPoint(b, h);
611
        inX = ma.m11() * n.x() + ma.m21() * n.y() + ma.dx();
612
        inY = ma.m22() * n.y() + ma.m12() * n.x() + ma.dy();
613
        if (tmp)
614
        {
615
                inX -= m_doc->rulerXoffset;
616
                inY -= m_doc->rulerYoffset;
617
                if (m_doc->guidesPrefs().rulerMode)
618
                {
619
                        inX -= m_doc->currentPage()->xOffset();
620
                        inY -= m_doc->currentPage()->yOffset();
621
                }
622
        }
623
        xposSpin->setValue(inX*m_unitRatio);
624
        yposSpin->setValue(inY*m_unitRatio);
625
        if (useLineMode)
626
                displayWH(m_item->width(), m_item->height());
627
        m_haveItem = tmp;
628
        connect(xposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewX()));
629
        connect(yposSpin, SIGNAL(valueChanged(double)), this, SLOT(handleNewY()));
630
}
631
 
632
void PropertiesPalette_XYZ::displayWH(double x, double y)
633
{
634
        if (!m_ScMW || m_ScMW->scriptIsRunning())
635
                return;
636
        QTransform ma;
637
        QPoint dp;
18480 jghali 638
        bool sigBlocked1 = widthSpin->blockSignals(true);
639
        bool sigBlocked2 = heightSpin->blockSignals(true);
16546 jghali 640
        if ((m_lineMode) && (m_item->asLine()))
641
        {
642
                ma.translate(static_cast<double>(xposSpin->value()) / m_unitRatio, static_cast<double>(yposSpin->value()) / m_unitRatio);
643
                ma.rotate(static_cast<double>(rotationSpin->value())*(-1));
644
                dp = QPoint(static_cast<int>(x), static_cast<int>(y)) * ma;
645
                widthSpin->setValue(dp.x()*m_unitRatio);
646
                heightSpin->setValue(dp.y()*m_unitRatio);
647
        }
648
        else
649
        {
650
                widthSpin->setValue(x*m_unitRatio);
651
                heightSpin->setValue(y*m_unitRatio);
652
        }
18480 jghali 653
        widthSpin->blockSignals(sigBlocked1);
654
        heightSpin->blockSignals(sigBlocked2);
16546 jghali 655
}
656
 
657
void PropertiesPalette_XYZ::displayRotation(double r)
658
{
659
        if (!m_ScMW || m_ScMW->scriptIsRunning())
660
                return;
661
        double rr = r;
662
        if (r > 0)
663
                rr = 360 - rr;
18480 jghali 664
        bool sigBlocked = rotationSpin->blockSignals(true);
16546 jghali 665
        rotationSpin->setValue(fabs(rr));
18480 jghali 666
        rotationSpin->blockSignals(sigBlocked);
16546 jghali 667
}
668
 
669
void PropertiesPalette_XYZ::handleNewX()
670
{
671
        if (!m_ScMW || m_ScMW->scriptIsRunning())
672
                return;
673
        if ((m_haveDoc) && (m_haveItem))
674
        {
675
                double x,y,w,h, gx, gy, gh, gw, base;
676
                QTransform ma;
677
                x = xposSpin->value() / m_unitRatio;
678
                y = yposSpin->value() / m_unitRatio;
679
                w = widthSpin->value() / m_unitRatio;
680
                h = heightSpin->value() / m_unitRatio;
681
                base = 0;
682
                x += m_doc->rulerXoffset;
683
                y += m_doc->rulerYoffset;
684
                if (m_doc->guidesPrefs().rulerMode)
685
                {
686
                        x += m_doc->currentPage()->xOffset();
687
                        y += m_doc->currentPage()->yOffset();
688
                }
689
                if (m_doc->m_Selection->isMultipleSelection())
690
                {
691
                        m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
692
                        int bp = basePointWidget->checkedId();
693
                        if ((bp == 0) || (bp == 3))
694
                                base = gx;
695
                        else if (bp == 2)
696
                                base = gx + gw / 2.0;
697
                        else if ((bp == 1) || (bp == 4))
698
                                base = gx + gw;
699
                        if (!_userActionOn)
700
                                m_ScMW->view->startGroupTransaction();
701
                        m_doc->moveGroup(x - base, 0, true);
702
                        if (!_userActionOn)
703
                        {
704
                                m_ScMW->view->endGroupTransaction();
705
                        }
706
                        m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
707
                        displayXY(gx, gy);
708
                }
709
                else
710
                {
711
                        if ((m_item->asLine()) && (m_lineMode))
712
                        {
713
                                w += m_doc->rulerXoffset;
714
                                h += m_doc->rulerYoffset;
715
                                if (m_doc->guidesPrefs().rulerMode)
716
                                {
717
                                        w += m_doc->currentPage()->xOffset();
718
                                        h += m_doc->currentPage()->yOffset();
719
                                }
720
                                double r = atan2(h-y,w-x)*(180.0/M_PI);
721
                                w = sqrt(pow(w-x,2)+pow(h-y,2));
722
                                m_item->setXYPos(x, m_item->yPos(), true);
723
                                m_item->setRotation(r, true);
724
                                m_doc->SizeItem(w, m_item->height(), m_item, true);
725
                        }
726
                        else
727
                        {
728
                                ma.translate(m_item->xPos(), m_item->yPos());
729
                                ma.rotate(m_item->rotation());
730
                                int bp = basePointWidget->checkedId();
731
                                if (bp == 0)
732
                                        base = m_item->xPos();
733
                                else if (bp == 2)
734
                                        base = ma.m11() * (m_item->width() / 2.0) + ma.m21() * (m_item->height() / 2.0) + ma.dx();
735
                                else if (bp == 1)
736
                                        base = ma.m11() * m_item->width() + ma.m21() * 0.0 + ma.dx();
737
                                else if (bp == 4)
738
                                        base = ma.m11() * m_item->width() + ma.m21() * m_item->height() + ma.dx();
739
                                else if (bp == 3)
740
                                        base = ma.m11() * 0.0 + ma.m21() * m_item->height() + ma.dx();
741
                                m_doc->MoveItem(x - base, 0, m_item, true);
742
                        }
743
                }
744
                m_doc->regionsChanged()->update(QRect());
17099 jghali 745
                m_doc->changed();
16546 jghali 746
        }
747
}
748
 
749
void PropertiesPalette_XYZ::handleNewY()
750
{
751
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
752
                return;
753
 
754
        double x,y,w,h, gx, gy, gh, gw, base;
755
        QTransform ma;
756
        x = xposSpin->value() / m_unitRatio;
757
        y = yposSpin->value() / m_unitRatio;
758
        w = widthSpin->value() / m_unitRatio;
759
        h = heightSpin->value() / m_unitRatio;
760
        base = 0;
761
        x += m_doc->rulerXoffset;
762
        y += m_doc->rulerYoffset;
763
        if (m_doc->guidesPrefs().rulerMode)
764
        {
765
                x += m_doc->currentPage()->xOffset();
766
                y += m_doc->currentPage()->yOffset();
767
        }
768
        if (m_doc->m_Selection->isMultipleSelection())
769
        {
770
                m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
771
                int bp = basePointWidget->checkedId();
772
                if ((bp == 0) || (bp == 1))
773
                        base = gy;
774
                else if (bp == 2)
775
                        base = gy + gh / 2.0;
776
                else if ((bp == 3) || (bp == 4))
777
                        base = gy + gh;
778
                if (!_userActionOn)
779
                        m_ScMW->view->startGroupTransaction();
780
                m_doc->moveGroup(0, y - base, true);
781
                if (!_userActionOn)
782
                {
783
                        m_ScMW->view->endGroupTransaction();
784
                }
785
                m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
786
                displayXY(gx, gy);
787
        }
788
        else
789
        {
790
                if ((m_item->asLine()) && (m_lineMode))
791
                {
792
                        w += m_doc->rulerXoffset;
793
                        h += m_doc->rulerYoffset;
794
                        if (m_doc->guidesPrefs().rulerMode)
795
                        {
796
                                w += m_doc->currentPage()->xOffset();
797
                                h += m_doc->currentPage()->yOffset();
798
                        }
799
                        double r = atan2(h-y,w-x)*(180.0/M_PI);
800
                        w = sqrt(pow(w-x,2)+pow(h-y,2));
801
                        m_doc->MoveItem(0, y - m_item->yPos(), m_item, true);
802
                        m_item->setXYPos(m_item->xPos(), y, true);
803
                        m_item->setRotation(r, true);
804
                        m_doc->SizeItem(w, m_item->height(), m_item, true);
805
                        m_doc->RotateItem(r, m_item);
806
                }
807
                else
808
                {
809
                        ma.translate(m_item->xPos(), m_item->yPos());
810
                        ma.rotate(m_item->rotation());
811
                        int bp = basePointWidget->checkedId();
812
                        if (bp == 0)
813
                                base = m_item->yPos();
814
                        else if (bp == 2)
815
                                base = ma.m22() * (m_item->height() / 2.0) + ma.m12() * (m_item->width() / 2.0) + ma.dy();
816
                        else if (bp == 1)
817
                                base = ma.m22() * 0.0 + ma.m12() * m_item->width() + ma.dy();
818
                        else if (bp == 4)
819
                                base = ma.m22() * m_item->height() + ma.m12() * m_item->width() + ma.dy();
820
                        else if (bp == 3)
821
                                base = ma.m22() * m_item->height() + ma.m12() * 0.0 + ma.dy();
822
                        m_doc->MoveItem(0, y - base, m_item, true);
823
                }
824
        }
825
        m_doc->regionsChanged()->update(QRect());
17099 jghali 826
        m_doc->changed();
16546 jghali 827
}
828
 
829
void PropertiesPalette_XYZ::handleNewW()
830
{
831
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
832
                return;
833
 
834
        double x,y,w,h, gx, gy, gh, gw;
835
        x = xposSpin->value() / m_unitRatio;
836
        y = yposSpin->value() / m_unitRatio;
837
        w = widthSpin->value() / m_unitRatio;
838
        h = heightSpin->value() / m_unitRatio;
839
        double oldW = (m_item->width()  != 0.0) ? m_item->width()  : 1.0;
840
        double oldH = (m_item->height() != 0.0) ? m_item->height() : 1.0;
841
        if (m_doc->m_Selection->isMultipleSelection())
842
        {
843
                if (!_userActionOn)
844
                        m_ScMW->view->startGroupTransaction();
845
                m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
846
                if (keepFrameWHRatioButton->isChecked())
847
                {
848
                        m_doc->scaleGroup(w / gw, w / gw, false);
849
                        displayWH(w, (w / gw) * gh);
850
                }
851
                else
852
                {
853
                        m_doc->scaleGroup(w / gw, 1.0, false);
854
                        m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
855
                        displayWH(gw, gh);
856
                }
857
                if (!_userActionOn)
858
                {
859
                        m_ScMW->view->endGroupTransaction();
860
                }
861
        }
862
        else
863
        {
864
                bool oldS = m_item->Sizing;
865
                m_item->Sizing = false;
866
                m_item->OldB2 = m_item->width();
867
                m_item->OldH2 = m_item->height();
868
                if (m_item->asLine())
869
                {
870
                        if (m_lineMode)
871
                        {
872
                                double r = atan2(h-y,w-x)*(180.0/M_PI);
873
                                m_item->setRotation(r, true);
874
                                w = sqrt(pow(w-x,2)+pow(h-y,2));
875
                        }
876
                        m_doc->SizeItem(w, m_item->height(), m_item, true, true, false);
877
                }
878
                else
879
                {
17418 fschmid 880
                        if (keepFrameWHRatioButton->isChecked())
16546 jghali 881
                        {
17418 fschmid 882
                                displayWH(w, (w / oldW) * m_item->height());
883
                                m_doc->SizeItem(w, (w / oldW) * m_item->height(), m_item, true, true, false);
16546 jghali 884
                        }
885
                        else
17418 fschmid 886
                                m_doc->SizeItem(w, m_item->height(), m_item, true, true, false);
16546 jghali 887
                }
888
                if (m_item->isArc())
889
                {
890
                        double dw = w - oldW;
891
                        double dh = h - oldH;
892
                        PageItem_Arc* item = m_item->asArc();
893
                        double dsch = item->arcHeight / oldH;
894
                        double dscw = item->arcWidth / oldW;
895
                        item->arcWidth += dw * dscw;
896
                        item->arcHeight += dh * dsch;
897
                        item->recalcPath();
898
                        FPoint tp2(getMinClipF(&m_item->PoLine));
899
                        m_item->PoLine.translate(-tp2.x(), -tp2.y());
900
                        m_doc->AdjustItemSize(m_item);
901
                }
902
                if (m_item->isSpiral())
903
                {
904
                        PageItem_Spiral* item = m_item->asSpiral();
905
                        item->recalcPath();
906
                }
907
                m_item->Sizing = oldS;
908
        }
909
        m_doc->changed();
910
        m_doc->regionsChanged()->update(QRect());
911
}
912
 
913
void PropertiesPalette_XYZ::handleNewH()
914
{
915
        if (!m_ScMW || m_ScMW->scriptIsRunning())
916
                return;
917
        if ((m_haveDoc) && (m_haveItem))
918
        {
919
                double x,y,w,h, gx, gy, gh, gw;
920
                x = xposSpin->value() / m_unitRatio;
921
                y = yposSpin->value() / m_unitRatio;
922
                w = widthSpin->value() / m_unitRatio;
923
                h = heightSpin->value() / m_unitRatio;
924
                double oldW = (m_item->width()  != 0.0) ? m_item->width()  : 1.0;
925
                double oldH = (m_item->height() != 0.0) ? m_item->height() : 1.0;
926
                if (m_doc->m_Selection->isMultipleSelection())
927
                {
928
                        if (!_userActionOn)
929
                                m_ScMW->view->startGroupTransaction();
930
                        m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
931
                        if (keepFrameWHRatioButton->isChecked())
932
                        {
933
                                m_doc->scaleGroup(h / gh, h / gh, false);
934
                                displayWH((h / gh) * gw, h);
935
                        }
936
                        else
937
                        {
938
                                m_doc->scaleGroup(1.0, h / gh, false);
939
                                m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
940
                                displayWH(gw, gh);
941
                        }
942
                        if (!_userActionOn)
943
                        {
944
                                m_ScMW->view->endGroupTransaction();
945
                        }
946
                }
947
                else
948
                {
949
                        bool oldS = m_item->Sizing;
950
                        m_item->Sizing = false;
951
                        m_item->OldB2 = m_item->width();
952
                        m_item->OldH2 = m_item->height();
953
                        if (m_item->asLine())
954
                        {
955
                                if (m_lineMode)
956
                                {
957
                                        double r = atan2(h-y,w-x)*(180.0/M_PI);
958
                                        m_item->setRotation(r, true);
959
                                        w = sqrt(pow(w-x,2)+pow(h-y,2));
960
                                }
961
                                m_doc->SizeItem(w, m_item->height(), m_item, true, true, false);
962
                        }
963
                        else
964
                        {
17418 fschmid 965
                                if (keepFrameWHRatioButton->isChecked())
16546 jghali 966
                                {
17418 fschmid 967
                                        displayWH((h / oldH) * m_item->width(), h);
968
                                        m_doc->SizeItem((h / oldH) * m_item->width(), h, m_item, true, true, false);
16546 jghali 969
                                }
970
                                else
17418 fschmid 971
                                        m_doc->SizeItem(m_item->width(), h, m_item, true, true, false);
16546 jghali 972
                        }
973
                        if (m_item->isArc())
974
                        {
975
                                double dw = w - oldW;
976
                                double dh = h - oldH;
977
                                PageItem_Arc* item = m_item->asArc();
978
                                double dsch = item->arcHeight / oldH;
979
                                double dscw = item->arcWidth / oldW;
980
                                item->arcWidth += dw * dscw;
981
                                item->arcHeight += dh * dsch;
982
                                item->recalcPath();
983
                                FPoint tp2(getMinClipF(&m_item->PoLine));
984
                                m_item->PoLine.translate(-tp2.x(), -tp2.y());
985
                                m_doc->AdjustItemSize(m_item);
986
                        }
987
                        if (m_item->isSpiral())
988
                        {
989
                                PageItem_Spiral* item = m_item->asSpiral();
990
                                item->recalcPath();
991
                        }
992
                        m_item->Sizing = oldS;
993
                }
994
                m_doc->changed();
995
                m_doc->regionsChanged()->update(QRect());
996
        }
997
}
998
 
999
void PropertiesPalette_XYZ::handleRotation()
1000
{
1001
        if (!m_ScMW || m_ScMW->scriptIsRunning())
1002
                return;
1003
        double gx, gy, gh, gw;
1004
        if ((m_haveDoc) && (m_haveItem))
1005
        {
1006
                if (!_userActionOn)
1007
                        m_ScMW->view->startGroupTransaction(Um::Rotate, "", Um::IRotate);
1008
                if (m_doc->m_Selection->isMultipleSelection())
1009
                {
1010
                        m_doc->rotateGroup((rotationSpin->value() - m_oldRotation)*(-1), m_ScMW->view->RCenter);
1011
                        m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
1012
                        displayXY(gx, gy);
1013
                }
1014
                else
1015
                        m_doc->RotateItem(rotationSpin->value()*(-1), m_item);
1016
                if (!_userActionOn)
1017
                {
1018
                        for (int i = 0; i < m_doc->m_Selection->count(); ++i)
1019
                                m_doc->m_Selection->itemAt(i)->checkChanges(true);
1020
                        m_ScMW->view->endGroupTransaction();
1021
                }
17099 jghali 1022
                m_doc->changed();
16546 jghali 1023
                m_doc->regionsChanged()->update(QRect());
1024
                m_oldRotation = rotationSpin->value();
1025
        }
1026
}
1027
 
1028
void PropertiesPalette_XYZ::handleLower()
1029
{
1030
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
1031
                return;
17062 fschmid 1032
        m_doc->itemSelection_LowerItem();
17092 jghali 1033
        levelLabel->setText( QString::number(m_item->level()) );
16546 jghali 1034
}
1035
 
1036
void PropertiesPalette_XYZ::handleRaise()
1037
{
1038
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
1039
                return;
17062 fschmid 1040
        m_doc->itemSelection_RaiseItem();
17092 jghali 1041
        levelLabel->setText( QString::number(m_item->level()) );
16546 jghali 1042
}
1043
 
1044
void PropertiesPalette_XYZ::handleFront()
1045
{
1046
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
1047
                return;
17062 fschmid 1048
        m_doc->bringItemSelectionToFront();
17092 jghali 1049
        levelLabel->setText( QString::number(m_item->level()) );
16546 jghali 1050
}
1051
 
1052
void PropertiesPalette_XYZ::handleBack()
1053
{
1054
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
1055
                return;
17062 fschmid 1056
        m_doc->sendItemSelectionToBack();
17092 jghali 1057
        levelLabel->setText( QString::number(m_item->level()) );
16546 jghali 1058
}
1059
 
1060
void PropertiesPalette_XYZ::handleBasePoint(int m)
1061
{
1062
        if (!m_ScMW || m_ScMW->scriptIsRunning())
1063
                return;
1064
        double inX, inY, gx, gy, gh, gw;
1065
        inX = 0;
1066
        inY = 0;
1067
        if ((m_haveDoc) && (m_haveItem))
1068
        {
1069
                m_haveItem = false;
1070
                m_doc->RotMode ( m );
1071
                if (m_doc->m_Selection->isMultipleSelection())
1072
                {
1073
                        m_doc->m_Selection->setGroupRect();
1074
                        m_doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
1075
                        if (m == 0)
1076
                        {
1077
                                m_ScMW->view->RCenter = FPoint(gx, gy);
1078
                                inX = gx;
1079
                                inY = gy;
1080
                        }
1081
                        if (m == 1)
1082
                        {
1083
                                m_ScMW->view->RCenter = FPoint(gx+gw, gy);
1084
                                inX = gx+gw;
1085
                                inY = gy;
1086
                        }
1087
                        if (m == 2)
1088
                        {
1089
                                m_ScMW->view->RCenter = FPoint(gx + gw / 2.0, gy + gh / 2.0);
1090
                                inX = gx + gw / 2.0;
1091
                                inY = gy + gh / 2.0;
1092
                        }
1093
                        if (m == 3)
1094
                        {
1095
                                m_ScMW->view->RCenter = FPoint(gx, gy+gh);
1096
                                inX = gx;
1097
                                inY = gy+gh;
1098
                        }
1099
                        if (m == 4)
1100
                        {
1101
                                m_ScMW->view->RCenter = FPoint(gx+gw, gy+gh);
1102
                                inX = gx+gw;
1103
                                inY = gy+gh;
1104
                        }
1105
                        inX -= m_doc->rulerXoffset;
1106
                        inY -= m_doc->rulerYoffset;
1107
                        if (m_doc->guidesPrefs().rulerMode)
1108
                        {
1109
                                inX -= m_doc->currentPage()->xOffset();
1110
                                inY -= m_doc->currentPage()->yOffset();
1111
                        }
1112
                        xposSpin->setValue(inX*m_unitRatio);
1113
                        yposSpin->setValue(inY*m_unitRatio);
1114
                }
1115
                else
1116
                {
1117
                        double b, h, r;
1118
                        QTransform ma;
1119
                        FPoint n;
1120
                        b = m_item->width();
1121
                        h = m_item->height();
1122
                        r = m_item->rotation();
1123
                        ma.translate(m_item->xPos(), m_item->yPos());
1124
                        ma.rotate(r);
1125
                        int bp = basePointWidget->checkedId();
1126
                        if (bp == 0)
1127
                                n = FPoint(0.0, 0.0);
1128
                        else if (bp == 1)
1129
                                n = FPoint(b, 0.0);
1130
                        else if (bp == 2)
1131
                                n = FPoint(b / 2.0, h / 2.0);
1132
                        else if (bp == 3)
1133
                                n = FPoint(0.0, h);
1134
                        else if (bp == 4)
1135
                                n = FPoint(b, h);
1136
                        inX = ma.m11() * n.x() + ma.m21() * n.y() + ma.dx();
1137
                        inY = ma.m22() * n.y() + ma.m12() * n.x() + ma.dy();
1138
                        inX -= m_doc->rulerXoffset;
1139
                        inY -= m_doc->rulerYoffset;
1140
                        if (m_doc->guidesPrefs().rulerMode)
1141
                        {
1142
                                inX -= m_doc->currentPage()->xOffset();
1143
                                inY -= m_doc->currentPage()->yOffset();
1144
                        }
1145
                        xposSpin->setValue(inX*m_unitRatio);
1146
                        yposSpin->setValue(inY*m_unitRatio);
1147
                }
1148
                if (m_item->itemType() == PageItem::ImageFrame)
1149
                {
1150
                        // FIXME
1151
                        if (false /*!FreeScale->isChecked()*/)
1152
                        {
1153
                                m_item->AdjustPictScale();
1154
                                m_item->update();
1155
                        }
1156
                }
1157
                m_haveItem = true;
1158
        }
1159
}
1160
 
1161
void PropertiesPalette_XYZ::handleLock()
1162
{
1163
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
1164
                return;
1165
        m_ScMW->scrActions["itemLock"]->toggle();
1166
}
1167
 
1168
void PropertiesPalette_XYZ::handleLockSize()
1169
{
1170
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
1171
                return;
1172
        m_ScMW->scrActions["itemLockSize"]->toggle();
1173
}
1174
 
1175
void PropertiesPalette_XYZ::handlePrint()
1176
{
1177
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
1178
                return;
1179
        m_ScMW->scrActions["itemPrintingEnabled"]->toggle();
1180
}
1181
 
1182
void PropertiesPalette_XYZ::handleFlipH()
1183
{
1184
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
1185
                return;
1186
        m_ScMW->scrActions["itemFlipH"]->toggle();
1187
}
1188
 
1189
void PropertiesPalette_XYZ::handleFlipV()
1190
{
1191
        if (!m_ScMW || m_ScMW->scriptIsRunning())
1192
                return;
1193
        m_ScMW->scrActions["itemFlipV"]->toggle();
1194
}
1195
 
1196
void PropertiesPalette_XYZ::handleNewName()
1197
{
1198
        if (m_ScMW->scriptIsRunning() || !m_haveDoc || !m_haveItem)
1199
                return;
1200
        QString NameOld = m_item->itemName();
1201
        QString NameNew = nameEdit->text();
1202
        if (NameNew.isEmpty())
1203
        {
1204
                nameEdit->setText(NameOld);
1205
                return;
1206
        }
1207
        bool found = false;
1208
        QList<PageItem*> allItems;
1209
        for (int a = 0; a < m_doc->Items->count(); ++a)
1210
        {
1211
                PageItem *currItem = m_doc->Items->at(a);
1212
                if (currItem->isGroup())
1213
                        allItems = currItem->getItemList();
1214
                else
1215
                        allItems.append(currItem);
1216
                for (int ii = 0; ii < allItems.count(); ii++)
1217
                {
1218
                        PageItem* item = allItems.at(ii);
1219
                        if ((NameNew == item->itemName()) && (item != m_item))
1220
                        {
1221
                                found = true;
1222
                                break;
1223
                        }
1224
                }
1225
                allItems.clear();
1226
        }
1227
        if (found)
1228
        {
1229
                QMessageBox::warning(this, CommonStrings::trWarning, "<qt>"+ tr("Name \"%1\" isn't unique.<br/>Please choose another.").arg(NameNew)+"</qt>", CommonStrings::tr_OK);
1230
                nameEdit->setText(NameOld);
1231
                nameEdit->setFocus();
1232
        }
1233
        else
1234
        {
1235
                if (m_item->itemName() != nameEdit->text())
1236
                {
1237
                        m_item->setItemName(nameEdit->text());
17099 jghali 1238
                        m_doc->changed();
16546 jghali 1239
                }
1240
        }
1241
}
1242
 
1243
void PropertiesPalette_XYZ::installSniffer(ScrSpinBox *spinBox)
1244
{
1245
        const QList<QObject*> list = spinBox->children();
1246
        if (!list.isEmpty())
1247
        {
1248
                QListIterator<QObject*> it(list);
1249
                QObject *obj;
1250
                while (it.hasNext())
1251
                {
1252
                        obj = it.next();
1253
                        obj->installEventFilter(userActionSniffer);
1254
                }
1255
        }
1256
}
1257
 
1258
bool PropertiesPalette_XYZ::userActionOn()
1259
{
1260
        return _userActionOn;
1261
}
1262
 
1263
void PropertiesPalette_XYZ::spinboxStartUserAction()
1264
{
1265
        _userActionOn = true;
1266
}
1267
 
1268
void PropertiesPalette_XYZ::spinboxFinishUserAction()
1269
{
1270
        _userActionOn = false;
1271
 
1272
        for (int i = 0; i < m_doc->m_Selection->count(); ++i)
1273
                m_doc->m_Selection->itemAt(i)->checkChanges(true);
1274
        if (m_ScMW->view->groupTransactionStarted())
1275
        {
1276
                m_ScMW->view->endGroupTransaction();
1277
        }
1278
}
1279
 
1280
void PropertiesPalette_XYZ::changeEvent(QEvent *e)
1281
{
1282
        if (e->type() == QEvent::LanguageChange)
1283
        {
1284
                languageChange();
1285
        }
1286
        else
1287
                QWidget::changeEvent(e);
1288
}
1289
 
1290
void PropertiesPalette_XYZ::languageChange()
1291
{
1292
        setWindowTitle( tr("Properties"));
1293
 
1294
        nameGroup->setTitle( tr("Name"));
1295
        geoGroup->setTitle( tr("Geometry"));
1296
        xposLabel->setText( tr("&X-Pos:"));
1297
        yposLabel->setText( tr("&Y-Pos:"));
1298
        widthLabel->setText( tr("&Width:"));
1299
        heightLabel->setText( tr("&Height:"));
1300
        rotationLabel->setText( tr("&Rotation:"));
1301
        basepointLabel->setText( tr("Basepoint:"));
1302
        levelGroup->setTitle( tr("Level"));
1303
 
1304
        QString ptSuffix = tr(" pt");
1305
 
1306
        QString ein = (m_haveDoc) ? unitGetSuffixFromIndex(m_doc->unitIndex()) : ptSuffix;
1307
 
1308
        xposSpin->setSuffix(ein);
1309
        yposSpin->setSuffix(ein);
1310
        widthSpin->setSuffix(ein);
1311
        heightSpin->setSuffix(ein);
1312
 
1313
        nameEdit->setToolTip( tr("Name of selected object"));
1314
        xposSpin->setToolTip( tr("Horizontal position of current basepoint"));
1315
        yposSpin->setToolTip( tr("Vertical position of current basepoint"));
1316
        widthSpin->setToolTip( tr("Width"));
1317
        heightSpin->setToolTip( tr("Height"));
1318
        rotationSpin->setToolTip( tr("Rotation of object at current basepoint"));
1319
        basepointLabel->setToolTip( tr("Point from which measurements or rotation angles are referenced"));
1320
        doGroup->setToolTip( tr("Group the selected objects"));
1321
        doUnGroup->setToolTip( tr("Ungroup the selected group"));
1322
        flipH->setToolTip( tr("Flip Horizontal"));
1323
        flipV->setToolTip( tr("Flip Vertical"));
1324
        levelUp->setToolTip( tr("Move one level up"));
1325
        levelDown->setToolTip( tr("Move one level down"));
1326
        levelTop->setToolTip( tr("Move to front"));
1327
        levelBottom->setToolTip( tr("Move to back"));
17062 fschmid 1328
        levelLabel->setToolTip( tr("Indicates the level the object is on, 1 means the object is at the bottom"));
16546 jghali 1329
        doLock->setToolTip( tr("Lock or unlock the object"));
1330
        noResize->setToolTip( tr("Lock or unlock the size of the object"));
1331
        noPrint->setToolTip( tr("Enable or disable exporting of the object"));
1332
 
1333
        keepFrameWHRatioButton->setToolTip( tr("Keep the aspect ratio"));
1334
}
1335
 
1336
void PropertiesPalette_XYZ::updateSpinBoxConstants()
1337
{
1338
        if (!m_haveDoc)
1339
                return;
1340
        if(m_doc->m_Selection->count()==0)
1341
                return;
1342
        widthSpin->setConstants(&m_doc->constants());
1343
        heightSpin->setConstants(&m_doc->constants());
1344
        xposSpin->setConstants(&m_doc->constants());
1345
        yposSpin->setConstants(&m_doc->constants());
1346
 
1347
}
1348
 
1349
void PropertiesPalette_XYZ::displayLocked(bool isLocked)
1350
{
1351
        xposSpin->setReadOnly(isLocked);
1352
        yposSpin->setReadOnly(isLocked);
1353
        widthSpin->setReadOnly(isLocked);
1354
        heightSpin->setReadOnly(isLocked);
1355
        rotationSpin->setReadOnly(isLocked);
1356
        QPalette pal(qApp->palette());
1357
        if (isLocked)
1358
                pal.setCurrentColorGroup(QPalette::Disabled);
1359
 
1360
        xposSpin->setPalette(pal);
1361
        yposSpin->setPalette(pal);
1362
        widthSpin->setPalette(pal);
1363
        heightSpin->setPalette(pal);
1364
        rotationSpin->setPalette(pal);
1365
 
1366
        doLock->setChecked(isLocked);
1367
}
1368
 
1369
void PropertiesPalette_XYZ::displaySizeLocked(bool isSizeLocked)
1370
{
1371
        bool b=isSizeLocked;
1372
        if (m_haveItem && m_item->locked())
1373
                b=true;
1374
        widthSpin->setReadOnly(b);
1375
        heightSpin->setReadOnly(b);
1376
        QPalette pal(qApp->palette());
1377
 
1378
        if (b)
1379
                pal.setCurrentColorGroup(QPalette::Disabled);
1380
 
1381
        widthSpin->setPalette(pal);
1382
        heightSpin->setPalette(pal);
1383
        noResize->setChecked(isSizeLocked);
1384
}
1385
 
1386
void PropertiesPalette_XYZ::displayPrintingEnabled(bool isPrintingEnabled)
1387
{
1388
        noPrint->setChecked(!isPrintingEnabled);
1389
}
1390
 
1391
void PropertiesPalette_XYZ::displayFlippedH(bool isFlippedH)
1392
{
1393
        flipH->setChecked(isFlippedH);
1394
}
1395
 
1396
void PropertiesPalette_XYZ::displayFlippedV(bool isFlippedV)
1397
{
1398
        flipV->setChecked(isFlippedV);
1399
}
1400
 
1401
void PropertiesPalette_XYZ::handleGrouping()
1402
{
1403
        m_ScMW->GroupObj();
1404
        doGroup->setEnabled(false);
1405
        doUnGroup->setEnabled(true);
1406
        handleSelectionChanged();
1407
        //FIXME
1408
        //TabStack->setItemEnabled(idShapeItem, false);
1409
}
1410
 
1411
void PropertiesPalette_XYZ::handleUngrouping()
1412
{
1413
        m_ScMW->UnGroupObj();
17097 fschmid 1414
        m_doc->invalidateAll();
1415
        m_doc->regionsChanged()->update(QRect());
16546 jghali 1416
}