Subversion Repositories Scribus

Rev

Rev 11930 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 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
*/
181 Franz 7
/***************************************************************************
8
                              guidemanager.cpp
9
                             -------------------
10
    begin                : Fri Jan 30 2004
11
    copyright            : (C) 2004 by Alessandro Rimoldi
12
    copyright            : (C) by Franz Schmid
13
    e-mail               : http://www.ideale.ch/contact
14
 ***************************************************************************/
15
 
16
/***************************************************************************
17
 *                                                                         *
18
 *   This program is free software; you can redistribute it and/or modify  *
19
 *   it under the terms of the GNU General Public License as published by  *
20
 *   the Free Software Foundation; either version 2 of the License, or     *
21
 *   (at your option) any later version.                                   *
22
 *                                                                         *
23
 ***************************************************************************/
24
 
2164 subik 25
#include "scribus.h"
3934 cbradney 26
#include "selection.h"
3 paul 27
#include "guidemanager.h"
28
#include "guidemanager.moc"
3670 cbradney 29
#include "page.h"
1843 cbradney 30
#include "units.h"
4185 subik 31
#include "commonstrings.h"
32
#include "pagestructs.h"
33
 
2200 subik 34
#include <qradiobutton.h>
2215 subik 35
#include <qlayout.h>
2237 subik 36
#include <qcursor.h>
4185 subik 37
#include <qlistview.h>
38
#include <qdialog.h>
39
#include <qvaluelist.h>
40
#include <qgroupbox.h>
41
#include <qlabel.h>
42
#include <qlistview.h>
43
#include <qpushbutton.h>
44
#include <qcheckbox.h>
45
#include <qtooltip.h>
46
#include <qhbuttongroup.h>
1843 cbradney 47
 
2164 subik 48
 
3 paul 49
extern QPixmap loadIcon(QString nam);
181 Franz 50
 
4185 subik 51
 
4215 subik 52
int GuideListItem::compare(QListViewItem *i, int col, bool asc) const
53
{
54
        if (col == 0)
55
        {
56
                double d;
57
                d = text(col).toDouble() - i->text(col).toDouble();
58
                if (d > 0.0)
59
                        return 1;
60
                return -1;
61
        }
62
        else
63
                return QListViewItem::compare(i, col, asc);
64
}
65
 
66
 
2164 subik 67
GuideManager::GuideManager(QWidget* parent) : QDialog(parent, "GuideManager", true, 0)
3 paul 68
{
2397 cbradney 69
        setCaption( tr("Manage Guides"));
240 Franz 70
        setIcon(loadIcon("AppIcon.png"));
2143 subik 71
 
240 Franz 72
        /* Initialise the global variables */
4185 subik 73
        resetMarginsForPage();
4026 craig 74
        docUnitIndex = ScMW->doc->unitIndex();
4185 subik 75
        docUnitPrecision = unitGetPrecisionFromIndex(docUnitIndex);
1917 cbradney 76
        docUnitRatio = unitGetRatioFromIndex(docUnitIndex);
4185 subik 77
        docUnitDecimals = unitGetDecimalsFromIndex(docUnitIndex);
78
        suffix = unitGetSuffixFromIndex(docUnitIndex);
2143 subik 79
 
240 Franz 80
        /* Create the dialog elements */
4215 subik 81
        QHBoxLayout *guideManagerLayout = new QHBoxLayout(this, 11, 6, "guideManagerLayout");
82
        QVBoxLayout *mainWidgetsLayout = new QVBoxLayout(0, 11, 6, "mainWidgetsLayout");
2143 subik 83
 
2215 subik 84
        QHBoxLayout *Layout6 = new QHBoxLayout(0, 0, 6, "Layout6");
2143 subik 85
 
4185 subik 86
        QGroupBox *horGroup = new QGroupBox(this, "horGroup");
87
        horGroup->setTitle( tr("Horizontal Guides"));
88
        horGroup->setColumnLayout(0, Qt::Vertical);
89
        horGroup->layout()->setSpacing(6);
90
        horGroup->layout()->setMargin(11);
91
        QVBoxLayout *horGroupLayout = new QVBoxLayout(horGroup->layout());
92
        horGroupLayout->setAlignment(Qt::AlignTop);
2143 subik 93
 
4185 subik 94
        horList = new QListView(horGroup, "horList");
7121 fschmid 95
        horList->addColumn( tr("Guide"));
96
        horList->addColumn( tr("Unit"));
4185 subik 97
        horList->setMinimumSize(QSize(0, 150));
98
        horList->setSelectionMode(QListView::Extended);
99
        horList->setAllColumnsShowFocus(true);
100
        horList->setSorting(0);
101
        horGroupLayout->addWidget(horList);
2143 subik 102
 
2215 subik 103
        QHBoxLayout *Layout4 = new QHBoxLayout(0, 0, 6, "Layout4");
2143 subik 104
 
4185 subik 105
        TextLabel2 = new QLabel( tr("&Y-Pos:"), horGroup, "TextLabel2");
240 Franz 106
        Layout4->addWidget(TextLabel2);
2143 subik 107
 
4185 subik 108
        horSpin = new MSpinBox(0, locPageHeight, horGroup, 4);
109
        TextLabel2->setBuddy(horSpin);
110
        Layout4->addWidget(horSpin);
2143 subik 111
 
4185 subik 112
        horGroupLayout->addLayout(Layout4);
2143 subik 113
 
2215 subik 114
        QHBoxLayout *Layout3 = new QHBoxLayout(0, 0, 6, "Layout3");
2143 subik 115
 
4185 subik 116
        horSet = new QPushButton( tr( "&Add" ), horGroup, "horSet");
117
        horSet->setAutoDefault(false);
118
        Layout3->addWidget(horSet);
2143 subik 119
 
4185 subik 120
        horDel = new QPushButton( tr( "D&elete" ), horGroup, "horDel");
121
        horDel->setAutoDefault(false);
122
        Layout3->addWidget(horDel);
2143 subik 123
 
4185 subik 124
        horGroupLayout->addLayout(Layout3);
2143 subik 125
 
4185 subik 126
        Layout6->addWidget(horGroup);
2143 subik 127
 
4185 subik 128
        verGroup = new QGroupBox(this, "verGroup");
129
        verGroup->setTitle( tr("Vertical Guides"));
130
        verGroup->setColumnLayout(0, Qt::Vertical);
131
        verGroup->layout()->setSpacing(6);
132
        verGroup->layout()->setMargin(11);
133
        QVBoxLayout *verGroupLayout = new QVBoxLayout(verGroup->layout());
134
        verGroupLayout->setAlignment(Qt::AlignTop);
2143 subik 135
 
4185 subik 136
        verList = new QListView(verGroup, "verList");
7121 fschmid 137
        verList->addColumn( tr("Guide"));
138
        verList->addColumn( tr("Unit"));
4185 subik 139
        verList->setMinimumSize(QSize(0, 150));
140
        verList->setSorting(0);
141
        verList->setSelectionMode(QListView::Extended);
142
        verList->setAllColumnsShowFocus(true);
143
        verGroupLayout->addWidget(verList);
2143 subik 144
 
2215 subik 145
        QHBoxLayout *Layout2 = new QHBoxLayout(0, 0, 6, "Layout2");
2143 subik 146
 
4185 subik 147
        TextLabel1 = new QLabel( tr("&X-Pos:"), verGroup, "TextLabel1");
240 Franz 148
        Layout2->addWidget(TextLabel1);
2143 subik 149
 
4185 subik 150
        verSpin = new MSpinBox(0, locPageWidth, verGroup, 4);
151
        TextLabel1->setBuddy(verSpin);
152
        Layout2->addWidget(verSpin);
2143 subik 153
 
4185 subik 154
        verGroupLayout->addLayout(Layout2);
2143 subik 155
 
2215 subik 156
        QHBoxLayout *Layout1 = new QHBoxLayout(0, 0, 6, "Layout1");
2143 subik 157
 
4185 subik 158
        verSet = new QPushButton( tr( "A&dd" ), verGroup, "verSet");
159
        verSet->setAutoDefault(false);
160
        Layout1->addWidget(verSet);
2143 subik 161
 
4185 subik 162
        verDel = new QPushButton( tr( "De&lete" ), verGroup, "verDel");
163
        verDel->setAutoDefault(false);
164
        Layout1->addWidget(verDel);
2143 subik 165
 
4185 subik 166
        verGroupLayout->addLayout(Layout1);
2143 subik 167
 
4185 subik 168
        Layout6->addWidget(verGroup);
2143 subik 169
 
4215 subik 170
        mainWidgetsLayout->addLayout(Layout6);
2143 subik 171
 
2215 subik 172
        QHBoxLayout *Layout7 = new QHBoxLayout(0, 0, 6, "Layout7");
2143 subik 173
 
2200 subik 174
        // auto guides
4185 subik 175
        QGroupBox *horGroup2 = new QGroupBox(this, "horGroup");
176
        horGroup2->setTitle( tr("Rows and Columns - Automatic Guides"));
177
        horGroup2->setColumnLayout(0, Qt::Vertical);
178
        horGroup2->layout()->setSpacing(6);
179
        horGroup2->layout()->setMargin(11);
180
        QVBoxLayout *horGroupLayout2 = new QVBoxLayout(horGroup2->layout());
181
        horGroupLayout2->setAlignment(Qt::AlignTop);
2143 subik 182
 
2215 subik 183
        // auto guides basic
4185 subik 184
        QLabel *TextLabel8 = new QLabel( tr("&Rows:"), horGroup2, "TextLabel8");
185
        rowSpin = new QSpinBox(1, 100, 1, horGroup2, "rowSpin");
186
        TextLabel8->setBuddy(rowSpin);
2143 subik 187
 
4185 subik 188
        QLabel *TextLabel9 = new QLabel( tr("C&olumns:"), horGroup2, "TextLabel9");
189
        colSpin = new QSpinBox(1, 100, 1, horGroup2, "colSpin");
190
        TextLabel9->setBuddy(colSpin);
2143 subik 191
 
2215 subik 192
        QVBoxLayout *rcLayout = new QVBoxLayout(0, 0, 6, "rcLayout");
193
        rcLayout->addWidget(TextLabel8);
4185 subik 194
        rcLayout->addWidget(rowSpin);
2215 subik 195
        rcLayout->addWidget(TextLabel9);
4185 subik 196
        rcLayout->addWidget(colSpin);
2215 subik 197
 
198
        // auto guides gaps
4185 subik 199
        useRowGap = new QCheckBox( tr("Row &Gap"), horGroup2, "useRowGap");
2215 subik 200
        useRowGap->setChecked(false);
4185 subik 201
        rowGap = new MSpinBox(0, 100, horGroup2, 4);
2215 subik 202
        rowGap->setValue(0);
203
        rowGap->setEnabled(false);
204
 
4185 subik 205
        useColGap = new QCheckBox( tr("Colum&n Gap"), horGroup2, "useColGap");
2200 subik 206
        useColGap->setChecked(false);
4185 subik 207
        colGap = new MSpinBox(0, 100, horGroup2, 4);
2215 subik 208
        colGap->setValue(0);
2200 subik 209
        colGap->setEnabled(false);
210
 
2215 subik 211
        QVBoxLayout *rcGapLayout = new QVBoxLayout(0, 0, 6, "rcGapLayout");
212
        rcGapLayout->addWidget(useRowGap);
213
        rcGapLayout->addWidget(rowGap);
214
        rcGapLayout->addWidget(useColGap);
215
        rcGapLayout->addWidget(colGap);
2143 subik 216
 
2215 subik 217
        // auto guides formating
218
        QHBoxLayout *autoGuidesLayout = new QHBoxLayout(0, 0, 6, "autoGuidesLayout");
219
        autoGuidesLayout->addLayout(rcLayout);
220
        autoGuidesLayout->addLayout(rcGapLayout);
221
 
222
        QHBoxLayout *Layout10 = new QHBoxLayout(0, 0, 6, "Layout10");
4185 subik 223
        bGroup = new QHButtonGroup(horGroup2, "bGroup");
224
        bGroup->setFrameStyle(QFrame::NoFrame);
225
        QLabel *TextLabel10 = new QLabel( tr("Refer to:"), horGroup2, "TextLabel10");
2164 subik 226
        Layout10->addWidget(TextLabel10);
4185 subik 227
        QRadioButton *fPage = new QRadioButton( tr( "&Page" ), bGroup, "fpage");
2164 subik 228
        fPage->setChecked(true);
4185 subik 229
        (void) new QRadioButton( tr( "&Margins" ), bGroup, "fmargin");
230
        QRadioButton *fSelect = new QRadioButton( tr( "&Selection" ), bGroup, "fselect");
2164 subik 231
        fSelect->setEnabled(selected);
4185 subik 232
        Layout10->addWidget(bGroup);
2143 subik 233
 
234
        QSpacerItem* spacer2 = new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
235
        Layout10->addItem(spacer2);
236
 
4185 subik 237
        Layout7->addWidget(horGroup2);
238
        horGroupLayout2->addLayout(autoGuidesLayout);
239
        horGroupLayout2->addLayout(Layout10);
2143 subik 240
 
4215 subik 241
        mainWidgetsLayout->addLayout(Layout7);
2143 subik 242
 
3816 subik 243
        QHBoxLayout *buttonLayout = new QHBoxLayout(0, 0, 6, "buttonLayout");
2215 subik 244
        QSpacerItem* spacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
3816 subik 245
        buttonLayout->addItem(spacer);
2143 subik 246
 
2952 cbradney 247
        okButton = new QPushButton( CommonStrings::tr_OK, this, "okButton");
2215 subik 248
        okButton->setAutoDefault(false);
2237 subik 249
        cancelButton = new QPushButton( tr( "&Close" ), this, "cancelButton");
250
        cancelButton->setAutoDefault(false);
251
        cancelButton->setAccel(QKeySequence("Esc"));
2397 cbradney 252
        setButton = new QPushButton( tr("&Update"), this, "setButton");
2237 subik 253
        setButton->setAutoDefault(false);
3816 subik 254
        buttonLayout->addWidget(setButton);
255
        buttonLayout->addWidget(okButton);
256
        buttonLayout->addWidget(cancelButton);
2143 subik 257
 
4895 subik 258
        //mainWidgetsLayout->addLayout(Layout5);
4215 subik 259
        mainWidgetsLayout->addLayout(buttonLayout);
4284 subik 260
 
4215 subik 261
        // preview pixmap
262
        // prevMainLayout is here due the aligning with the others widgets
4895 subik 263
        QVBoxLayout *prevMainLayout = new QVBoxLayout(0, 11, 6, "prevMainLayout");
4215 subik 264
        QGroupBox *previewGBox = new QGroupBox(this, "previewGBox");
7121 fschmid 265
        previewGBox->setTitle( tr("Preview"));
4215 subik 266
        previewGBox->setColumnLayout(0, Qt::Vertical);
267
        previewGBox->layout()->setSpacing(6);
268
        previewGBox->layout()->setMargin(11);
269
        QVBoxLayout *previewGBoxLayout = new QVBoxLayout(previewGBox->layout());
270
        previewGBoxLayout->setAlignment(Qt::AlignTop);
271
        previewLabel = new QLabel(previewGBox, "previewLabel");
272
        previewGBoxLayout->addWidget(previewLabel);
273
        prevMainLayout->addWidget(previewGBox);
4284 subik 274
 
4895 subik 275
        //QHBoxLayout *Layout5 = new QHBoxLayout(0, 0, 6, "Layout5");
276
        lockedCheckBox = new QCheckBox( tr( "&Lock Guides" ), this, "lockedCheckBox");
277
        lockedCheckBox->setChecked(ScMW->doc->GuideLock);
278
        prevMainLayout->addWidget(lockedCheckBox);
279
 
7121 fschmid 280
        allPages = new QCheckBox( tr("&Apply to All Pages"), this, "allPages");
4895 subik 281
        allPages->setChecked(false);
282
        prevMainLayout->addWidget(allPages);
283
        QSpacerItem* spacer3 = new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
284
        prevMainLayout->addItem(spacer3);
285
 
4215 subik 286
        guideManagerLayout->addLayout(mainWidgetsLayout);
287
        guideManagerLayout->addLayout(prevMainLayout);
2143 subik 288
 
4185 subik 289
        // set current guides
290
        setGuidesFromList(horList, ScMW->doc->currentPage->YGuides);
291
        setGuidesFromList(verList, ScMW->doc->currentPage->XGuides);
2215 subik 292
        unitChange();
4215 subik 293
        slotDrawPreview();
2143 subik 294
 
2237 subik 295
        //tooltips
296
        QToolTip::add( setButton, "<qt>" + tr("Set the guides in document. Guide manager is still opened but the changes are persistant", "guide manager") + "</qt>");
297
 
240 Franz 298
        // Create signals and slots connections
2237 subik 299
        connect(okButton, SIGNAL(clicked()), this, SLOT(commitChanges()));
300
        connect(setButton, SIGNAL(clicked()), this, SLOT(commitEditChanges()));
301
        connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
4185 subik 302
        connect(horSet, SIGNAL(clicked()), this, SLOT(AddHorVal()));
303
        connect(horDel, SIGNAL(clicked()), this, SLOT(DelHorVal()));
304
        connect(horSpin, SIGNAL(valueChanged(int)), this, SLOT(ChangeHorVal()));
305
        connect(horList, SIGNAL(currentChanged(QListViewItem*)), this, SLOT(horList_currentChanged(QListViewItem*)));
306
        connect(verSet, SIGNAL(clicked()), this, SLOT(AddVerVal()));
307
        connect(verDel, SIGNAL(clicked()), this, SLOT(DelVerVal()));
308
        connect(verSpin, SIGNAL(valueChanged(int)), this, SLOT(ChangeVerVal()));
309
        connect(verList, SIGNAL(currentChanged(QListViewItem*)), this, SLOT(verList_currentChanged(QListViewItem*)));
2200 subik 310
        connect(useRowGap, SIGNAL(toggled(bool)), this, SLOT(useRowGap_clicked(bool)));
311
        connect(useColGap, SIGNAL(toggled(bool)), this, SLOT(useColGap_clicked(bool)));
4215 subik 312
        connect(this, SIGNAL(guidesChanged()), this, SLOT(slotDrawPreview()));
313
        connect(rowSpin, SIGNAL(valueChanged(int)), this, SLOT(slotDrawPreview()));
314
        connect(colSpin, SIGNAL(valueChanged(int)), this, SLOT(slotDrawPreview()));
315
        connect(rowGap, SIGNAL(valueChanged(int)), this, SLOT(slotDrawPreview()));
316
        connect(colGap, SIGNAL(valueChanged(int)), this, SLOT(slotDrawPreview()));
317
        connect(bGroup, SIGNAL(clicked(int)), this, SLOT(slotDrawPreview()));
4185 subik 318
}
2143 subik 319
 
4198 subik 320
GuideManager::~GuideManager()
321
{
322
        ScMW->mainWindowStatusLabel->setText(QString::null);
323
}
324
 
4215 subik 325
bool GuideManager::deleteValueFormList(QListView *list)
4185 subik 326
{
327
        /* previous item pointer to ensure that ++it
328
        runs before item goes deleted */
329
        QListViewItem *itemToDelete;
4215 subik 330
        QListViewItemIterator it(list, QListViewItemIterator::Selected);
4185 subik 331
        while (it.current())
264 Franz 332
        {
4185 subik 333
                itemToDelete = it.current();
334
                ++it;
335
                if (itemToDelete)
336
                {
4215 subik 337
                        list->takeItem(itemToDelete);
4185 subik 338
                        delete itemToDelete;
339
                }
264 Franz 340
        }
4215 subik 341
        emit guidesChanged();
342
        return true;
4185 subik 343
}
344
 
4215 subik 345
void GuideManager::DelHorVal()
346
{
347
        deleteValueFormList(horList);
348
}
349
 
4185 subik 350
void GuideManager::DelVerVal()
351
{
4215 subik 352
        deleteValueFormList(verList);
2143 subik 353
}
2237 subik 354
 
4198 subik 355
bool GuideManager::addValueToList(QListView *list, MSpinBox *spin)
3 paul 356
{
4185 subik 357
        QString tmp;
358
        tmp = tmp.setNum(0.0, 'f', docUnitPrecision);
4198 subik 359
        // no duplications
360
        if (list->findItem(tmp, 0) != 0)
361
        {
7121 fschmid 362
                ScMW->mainWindowStatusLabel->setText( tr("There is empty (0.0) guide already"));
4198 subik 363
                return false;
364
        }
4215 subik 365
        QListViewItem *item = new GuideListItem(list, tmp, suffix);
4198 subik 366
        list->insertItem(item);
367
        list->setCurrentItem(item);
368
        list->clearSelection();
369
        list->setSelected(item, true);
370
        spin->setFocus();
371
        spin->selectAll();
4215 subik 372
        emit guidesChanged();
4198 subik 373
        return true;
3 paul 374
}
2143 subik 375
 
4198 subik 376
void GuideManager::AddHorVal()
377
{
378
        addValueToList(horList, horSpin);
4284 subik 379
 
4198 subik 380
}
381
 
4185 subik 382
void GuideManager::AddVerVal()
3 paul 383
{
4198 subik 384
        addValueToList(verList, verSpin);
3 paul 385
}
2143 subik 386
 
4185 subik 387
void GuideManager::resetMarginsForPage()
3 paul 388
{
4185 subik 389
        locPageWidth = ScMW->doc->currentPage->width();
390
        locPageHeight = ScMW->doc->currentPage->height();
391
        // whatif selection settings
392
        FPoint selectionTopLeft = FPoint(0, 0);
393
        FPoint selectionBottomRight = FPoint(0, 0);
2143 subik 394
 
4847 cbradney 395
        int docSelectionCount = ScMW->doc->m_Selection->count();
4185 subik 396
        // multiselection
397
        if (docSelectionCount > 1)
398
        {
399
                selectionTopLeft.setXY(ScMW->view->GroupX - ScMW->doc->currentPage->xOffset(),
400
                                                           ScMW->view->GroupY - ScMW->doc->currentPage->yOffset());
401
                selectionBottomRight.setXY(ScMW->view->GroupW,
402
                                                                   ScMW->view->GroupH);
403
        }
404
        // only one item selected
405
        else if (docSelectionCount == 1)
406
        {
4847 cbradney 407
                PageItem *currItem = ScMW->doc->m_Selection->itemAt(0);
4185 subik 408
                selectionTopLeft.setXY(currItem->xPos() - ScMW->doc->currentPage->xOffset(),
409
                                                           currItem->yPos() - ScMW->doc->currentPage->yOffset());
410
                selectionBottomRight.setXY(currItem->width(), currItem->height());
411
        }
2143 subik 412
 
4185 subik 413
        selected = true;
414
        if (selectionBottomRight != FPoint(0, 0))
415
        {
416
                gy = selectionTopLeft.y();
417
                gx = selectionTopLeft.x();
418
                gw = selectionBottomRight.x();
419
                gh = selectionBottomRight.y();
420
        }
421
        else selected = false;
4284 subik 422
 
11930 subik 423
//      locTop = ScMW->doc->pageMargins.Top;
424
//      locBottom = ScMW->doc->pageMargins.Bottom;
425
        locTop = ScMW->doc->currentPage->Margins.Top;
426
        locBottom = ScMW->doc->currentPage->Margins.Bottom;
4185 subik 427
 
11930 subik 428
        locRight = ScMW->doc->currentPage->Margins.Right;
429
        locLeft = ScMW->doc->currentPage->Margins.Left;
430
 
431
//      PageLocation pageLocation = ScMW->doc->locationOfPage(ScMW->doc->currentPageNumber());
432
//      switch (pageLocation)
433
//      {
434
//              case MiddlePage :
435
// //                   locLeft = ScMW->doc->pageMargins.Left;
436
// //                   locRight = ScMW->doc->pageMargins.Right;
437
//                      locLeft = ScMW->doc->currentPage->Margins.Left;
438
//                      locRight = ScMW->doc->currentPage->Margins.Right;
439
//                      break;
440
//              case LeftPage:
441
// //                   locLeft = ScMW->doc->pageMargins.Right;
442
// //                   locRight = ScMW->doc->pageMargins.Left;
443
//                      locLeft = ScMW->doc->currentPage->Margins.Left;
444
//                      locRight = ScMW->doc->currentPage->Margins.Righ;
445
//                      break;
446
//              case RightPage:
447
// //                   locRight = ScMW->doc->pageMargins.Right;
448
// //                   locLeft = ScMW->doc->pageMargins.Left;
449
//                      locRight = ScMW->doc->currentPage->Margins.Right;
450
//                      locLeft = ScMW->doc->currentPage->Margins.Left;
451
//                      break;
452
//              default:
453
//                      locRight = 0;
454
//                      locLeft = 0;
455
//      }
3 paul 456
}
2143 subik 457
 
4185 subik 458
void GuideManager::addRows()
2200 subik 459
{
4215 subik 460
        if (allPages->isChecked() && rowSpin->value() > 0)
461
                horList->clear();
462
        setGuidesFromList(horList, getAutoRows());
463
}
464
 
465
QValueList<double> GuideManager::getAutoRows()
466
{
4185 subik 467
        resetMarginsForPage();
468
        int n = QString(rowSpin->text()).toInt();
2143 subik 469
        double offset = 0;
3620 subik 470
        double newPageHeight = locPageHeight;
2143 subik 471
 
4185 subik 472
        if (bGroup->selectedId() == 1)
2143 subik 473
        {
3620 subik 474
                newPageHeight = locPageHeight - locTop - locBottom;
475
                offset = locTop;
2143 subik 476
        }
4185 subik 477
        else if (bGroup->selectedId() == 2)
2164 subik 478
        {
2200 subik 479
                offset = gy;
3620 subik 480
                newPageHeight = gh;
2164 subik 481
        }
2215 subik 482
        QValueList<double> values;
5078 subik 483
        double gapValue;
484
        double rowSize;
485
        if (useRowGap->isChecked())
2143 subik 486
        {
5078 subik 487
                gapValue = value2pts(rowGap->value(), ScMW->doc->unitIndex());
488
                rowSize = (newPageHeight - (n - 1) * gapValue) / n;
489
        }
490
        else
491
                rowSize = newPageHeight / n;
492
        for (int i = 1, gapCount = 0; i < n; ++i)
493
        {
2200 subik 494
                if (useRowGap->isChecked())
2143 subik 495
                {
5078 subik 496
                        values.append(offset + i * rowSize + gapCount * gapValue);
497
                        ++gapCount;
498
                        values.append(offset + i * rowSize + gapCount * gapValue);
2143 subik 499
                }
500
                else
5078 subik 501
                        values.append(offset + rowSize * i);
2143 subik 502
        }
4215 subik 503
        return values;
2143 subik 504
}
505
 
4185 subik 506
void GuideManager::addCols()
2200 subik 507
{
4215 subik 508
        if (allPages->isChecked() && colSpin->value() > 0)
509
                verList->clear();
510
        setGuidesFromList(verList, getAutoCols());
511
}
512
 
513
QValueList<double> GuideManager::getAutoCols()
514
{
4185 subik 515
        resetMarginsForPage();
516
        int n = QString(colSpin->text()).toInt();
2143 subik 517
        double offset = 0;
3620 subik 518
        double newPageWidth = locPageWidth;
2143 subik 519
 
4185 subik 520
        if (bGroup->selectedId() == 1)
2143 subik 521
        {
3620 subik 522
                newPageWidth = locPageWidth - locLeft - locRight;
523
                offset = locLeft;
2143 subik 524
        }
4185 subik 525
        else if (bGroup->selectedId() == 2)
2164 subik 526
        {
527
                offset = gx;
3620 subik 528
                newPageWidth = gw;
2164 subik 529
        }
2143 subik 530
 
2215 subik 531
        QValueList<double> values;
5078 subik 532
        double gapValue;
533
        double columnSize;
534
        if (useColGap->isChecked())
2143 subik 535
        {
5078 subik 536
                gapValue = value2pts(colGap->value(), ScMW->doc->unitIndex());
537
                columnSize = (newPageWidth - (n - 1) * gapValue) / n;
538
        }
539
        else
540
                columnSize = newPageWidth / n;
541
        for (int i = 1, gapCount = 0; i < n; ++i)
542
        {
2200 subik 543
                if (useColGap->isChecked())
2143 subik 544
                {
5078 subik 545
                        values.append(offset + i * columnSize + gapCount * gapValue);
546
                        ++gapCount;
547
                        values.append(offset + i * columnSize + gapCount * gapValue);
2143 subik 548
                }
549
                else
5078 subik 550
                        values.append(offset + columnSize * i);
2143 subik 551
        }
4215 subik 552
        return values;
2215 subik 553
}
554
 
181 Franz 555
void GuideManager::ChangeHorVal()
3 paul 556
{
4185 subik 557
        QListViewItem *item = horList->currentItem();
558
        if (item == 0)
559
                return;
560
        QString tmp;
561
        tmp = tmp.setNum(horSpin->value(), 'f', docUnitPrecision);
562
        item->setText(0, tmp);
4215 subik 563
        emit guidesChanged();
3 paul 564
}
2143 subik 565
 
181 Franz 566
void GuideManager::ChangeVerVal()
3 paul 567
{
4185 subik 568
        QListViewItem *item = verList->currentItem();
569
        if (item == 0)
570
                return;
571
        QString tmp;
572
        tmp = tmp.setNum(verSpin->value(), 'f', docUnitPrecision);
573
        item->setText(0, tmp);
4215 subik 574
        emit guidesChanged();
3 paul 575
}
2143 subik 576
 
2215 subik 577
void GuideManager::unitChange()
3 paul 578
{
4185 subik 579
        horSpin->setSuffix(suffix);
580
        verSpin->setSuffix(suffix);
581
        rowGap->setSuffix(suffix);
582
        colGap->setSuffix(suffix);
583
        horSpin->setDecimals(docUnitDecimals);
584
        verSpin->setDecimals(docUnitDecimals);
585
        rowGap->setDecimals(docUnitDecimals);
586
        colGap->setDecimals(docUnitDecimals);
3 paul 587
}
2143 subik 588
 
2164 subik 589
void GuideManager::refreshDoc()
590
{
4185 subik 591
        if (rowSpin->value() > 1)
592
                addRows();
593
        if (colSpin->value() > 1)
594
                addCols();
595
        QValueList<double> tmp = getValuesFromList(verList);
596
        ScMW->doc->currentPage->addXGuides(tmp);
597
        tmp = getValuesFromList(horList);
598
        ScMW->doc->currentPage->addYGuides(tmp);
599
        ScMW->doc->lockGuides(lockedCheckBox->isChecked());
4026 craig 600
        ScMW->view->DrawNew();
2164 subik 601
}
2200 subik 602
 
3816 subik 603
void GuideManager::refreshWholeDoc()
604
{
4026 craig 605
        int origPage = ScMW->doc->currentPage->pageNr();
3816 subik 606
 
4136 cbradney 607
        for (uint i = 0; i < ScMW->doc->Pages->count(); ++i)
3816 subik 608
        {
4026 craig 609
                ScMW->view->GotoPage(i);
4185 subik 610
                refreshDoc();
3816 subik 611
        }
4026 craig 612
        ScMW->view->GotoPage(origPage);
613
        ScMW->view->DrawNew();
3816 subik 614
}
615
 
2200 subik 616
void GuideManager::useRowGap_clicked(bool state)
617
{
618
        rowGap->setEnabled(state);
4198 subik 619
        if (state)
620
                rowGap->setFocus();
2200 subik 621
}
622
 
623
void GuideManager::useColGap_clicked(bool state)
624
{
625
        colGap->setEnabled(state);
4198 subik 626
        if (state)
627
                colGap->setFocus();
2200 subik 628
}
2237 subik 629
 
630
void GuideManager::commitChanges()
631
{
632
        commitEditChanges();
633
        return accept();
634
}
635
 
636
void GuideManager::commitEditChanges()
637
{
638
        qApp->setOverrideCursor(QCursor(waitCursor), true);
3816 subik 639
        if (allPages->isChecked())
640
                refreshWholeDoc();
641
        else
642
                refreshDoc();
2237 subik 643
        QApplication::restoreOverrideCursor();
644
}
4185 subik 645
 
646
void GuideManager::setGuidesFromList(QListView *w, QValueList<double> guides)
647
{
648
        QValueList<double>::iterator it;
649
        QString tmp;
650
 
651
        for (it = guides.begin(); it != guides.end(); ++it)
652
        {
653
                tmp = tmp.setNum((*it) * docUnitRatio , 'f', docUnitPrecision);
4215 subik 654
                // no insert for duplicates
655
                if (w->findItem(tmp, 0) != 0)
656
                        continue;
657
                QListViewItem *item = new GuideListItem(w, tmp, suffix);
4185 subik 658
                w->insertItem(item);
659
        }
660
        w->setCurrentItem(w->firstChild());
661
        w->setSelected(w->firstChild(), true);
4215 subik 662
        emit guidesChanged();
4185 subik 663
}
664
 
665
QValueList<double> GuideManager::getValuesFromList(QListView *w)
666
{
667
        QValueList<double> ret;
668
        QListViewItemIterator it(w);
669
 
670
        while (it.current())
671
        {
672
                ret.append(it.current()->text(0).toDouble() / docUnitRatio);
673
                ++it;
674
        }
675
        return ret;
676
}
677
 
678
void GuideManager::verList_currentChanged(QListViewItem *item)
679
{
680
        double val;
681
        if (!item)
682
                val = 0.0;
683
        else
684
                val = item->text(0).toDouble();
685
        verSpin->setValue(val);
4215 subik 686
        emit guidesChanged();
4185 subik 687
}
688
 
689
void GuideManager::horList_currentChanged(QListViewItem *item)
690
{
691
        double val;
692
        if (!item)
693
                val = 0.0;
694
        else
695
                val = item->text(0).toDouble();
696
        horSpin->setValue(val);
4215 subik 697
        emit guidesChanged();
4185 subik 698
}
4215 subik 699
 
700
void GuideManager::slotDrawPreview()
701
{
4284 subik 702
        int size = 200; // height of the preview pixmap
4215 subik 703
        int x, y; // helper values. original guide size to smaller one
704
        double val; // position of the current guide (red one)
705
        QPixmap pm; // paint device for preview
706
        QPainter *p = new QPainter();
707
        QValueList<double> vg = getValuesFromList(verList); // vert. g.
708
        QValueList<double> hg = getValuesFromList(horList); // hor. g.
709
        QValueList<double>::iterator it; // iterator for guides lists
4466 subik 710
        // page size on pts
711
        double pagew = ScMW->doc->currentPage->width() * docUnitRatio;
712
        double pageh = ScMW->doc->currentPage->height() * docUnitRatio;
4215 subik 713
 
714
        vg += getAutoCols();
715
        hg += getAutoRows();
4284 subik 716
        //! \note Sorting is a must here for GUI
4215 subik 717
        horList->sort();
718
        verList->sort();
719
        // load the page only at the first time
720
        if (previewPixmap.isNull())
12945 jghali 721
        {
722
                if (ScMW->doc->masterPageMode())
723
                {
724
                        QString pageName = ScMW->doc->MasterPages.at(ScMW->doc->currentPageNumber())->pageName();
725
                        previewPixmap = ScMW->view->MPageToPixmap(pageName, size);
726
                }
727
                else
728
                        previewPixmap = ScMW->view->PageToPixmap(ScMW->doc->currentPageNumber(), size);
729
        }
4215 subik 730
 
731
        pm = previewPixmap;
732
        p->begin(&pm);
733
        p->setPen(QPen(ScMW->doc->guidesSettings.guideColor, 1, Qt::SolidLine));
734
        // all guides - paint it standard
735
        for (it = vg.begin(); it != vg.end(); ++it)
736
        {
4466 subik 737
                x = (int)(pm.width() * (*it) * docUnitRatio / pagew);
4215 subik 738
                p->drawLine(x, 0, x, pm.height());
739
        }
740
        for (it = hg.begin(); it != hg.end(); ++it)
741
        {
4466 subik 742
                y = (int)(pm.height() * (*it) * docUnitRatio / pageh);
4215 subik 743
                p->drawLine(0, y, pm.width(), y);
744
        }
745
        // current guide - paint it bold and red...
4466 subik 746
        p->setPen(QPen(QColor(200, 0, 0), 2, Qt::SolidLine));
747
        val = verSpin->value(); // val is docUnitRatio'ned already
4215 subik 748
        if (val > 0.0)
749
        {
4466 subik 750
                x = (int)(pm.width() * val / pagew);
4215 subik 751
                p->drawLine(x, 0, x, pm.height());
752
        }
753
        val = horSpin->value();
754
        if (val > 0.0)
755
        {
4466 subik 756
                y = (int)(pm.height() * val / pageh);
4215 subik 757
                p->drawLine(0, y, pm.width(), y);
758
        }
759
        p->end();
760
        previewLabel->setPixmap(pm);
761
        delete p;
762
}