"SfR Fresh" - the SfR Freeware/Shareware Archive 
Member "scribus-1.3.3.12/scribus/aligndistribute.cpp" of archive scribus-1.3.3.12.tar.gz:
As a special service "SfR Fresh" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting with prefixed line numbers.
Alternatively you can here view or download the uninterpreted source code file.
That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
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 begin : June 2005
9 copyright : (C) 2005 by Craig Bradney
10 email : cbradney@zip.com.au
11 ***************************************************************************/
12
13 /***************************************************************************
14 * *
15 * ScMW program is free software; you can redistribute it and/or modify *
16 * it under the terms of the GNU General Public License as published by *
17 * the Free Software Foundation; either version 2 of the License, or *
18 * (at your option) any later version. *
19 * *
20 ***************************************************************************/
21
22 #include "aligndistribute.h"
23
24 #include <qvariant.h>
25 #include <qpushbutton.h>
26 #include <qgroupbox.h>
27 #include <qlabel.h>
28 #include <qcombobox.h>
29 #include <qtoolbutton.h>
30 #include <qlayout.h>
31 #include <qtooltip.h>
32 #include <qwhatsthis.h>
33 #include <qimage.h>
34 #include <qpixmap.h>
35 #include <qlineedit.h>
36
37 #include "aligndistribute.moc"
38 #include "page.h"
39 #include "scmessagebox.h"
40 #include "scribus.h"
41 #include "scribusdoc.h"
42 #include "selection.h"
43 #include "undomanager.h"
44 #include "mspinbox.h"
45 #include "units.h"
46 #include "commonstrings.h"
47
48 extern QPixmap loadIcon(QString nam);
49
50 //TODO Distribute with
51 //TODO Handle locked items
52
53 /*
54 * Constructs a AlignDistributePalette as a child of 'parent', with the
55 * name 'name' and widget flags set to 'f'.
56 *
57 * The dialog will by default be modeless, unless you set 'modal' to
58 * true to construct a modal dialog.
59 */
60 AlignDistributePalette::AlignDistributePalette( QWidget* parent, const char* name, bool modal, WFlags fl )
61 : ScrPaletteBase( parent, name, modal, fl )
62 {
63 if ( !name )
64 setName( "AlignDistributePalette" );
65 ScMW = (ScribusMainWindow *)parent;
66 currDoc=NULL;
67 AlignDistributePaletteLayout = new QVBoxLayout( this, 5, 6, "AlignDistributePaletteLayout");
68
69 alignGroupBox = new QGroupBox( this, "alignGroupBox" );
70 alignGroupBox->setColumnLayout(0, Qt::Vertical );
71 alignGroupBox->layout()->setSpacing( 6 );
72 alignGroupBox->layout()->setMargin( 11 );
73 alignGroupBoxLayout = new QGridLayout( alignGroupBox->layout() );
74 //alignGroupBoxLayout = new QVBoxLayout( alignGroupBox->layout() );
75 alignGroupBoxLayout->setAlignment( Qt::AlignTop );
76
77 layout11 = new QHBoxLayout( 0, 0, 6, "layout11");
78
79 alignRelativeToLabel = new QLabel( alignGroupBox, "alignRelativeToLabel" );
80 layout11->addWidget( alignRelativeToLabel );
81
82 alignRelativeToCombo = new QComboBox( false, alignGroupBox, "alignRelativeToCombo" );
83 layout11->addWidget( alignRelativeToCombo );
84 alignGroupBoxLayout->addLayout( layout11, 0, 0 );
85
86 layout14 = new QHBoxLayout( 0, 0, 6, "layout14");
87 spacer15 = new QSpacerItem( 21, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
88 layout14->addItem( spacer15 );
89
90 layout2 = new QGridLayout( 0, 1, 1, 0, 6, "layout2");
91
92 alignLeftOutToolButton = new QToolButton( alignGroupBox, "alignLeftOutToolButton" );
93 layout2->addWidget( alignLeftOutToolButton, 0, 0 );
94
95 alignRightOutToolButton = new QToolButton( alignGroupBox, "alignRightOutToolButton" );
96 layout2->addWidget( alignRightOutToolButton, 0, 4 );
97
98 alignBottomInToolButton = new QToolButton( alignGroupBox, "alignBottomInToolButton" );
99 layout2->addWidget( alignBottomInToolButton, 1, 3 );
100
101 alignRightInToolButton = new QToolButton( alignGroupBox, "alignRightInToolButton" );
102 layout2->addWidget( alignRightInToolButton, 0, 3 );
103
104 alignBottomOutToolButton = new QToolButton( alignGroupBox, "alignBottomOutToolButton" );
105 layout2->addWidget( alignBottomOutToolButton, 1, 4 );
106
107 alignCenterHorToolButton = new QToolButton( alignGroupBox, "alignCenterHorToolButton" );
108 layout2->addWidget( alignCenterHorToolButton, 0, 2 );
109
110 alignLeftInToolButton = new QToolButton( alignGroupBox, "alignLeftInToolButton" );
111 layout2->addWidget( alignLeftInToolButton, 0, 1 );
112
113 alignCenterVerToolButton = new QToolButton( alignGroupBox, "alignCenterVerToolButton" );
114 layout2->addWidget( alignCenterVerToolButton, 1, 2 );
115
116 alignTopOutToolButton = new QToolButton( alignGroupBox, "alignTopOutToolButton" );
117 layout2->addWidget( alignTopOutToolButton, 1, 0 );
118
119 alignTopInToolButton = new QToolButton( alignGroupBox, "alignTopInToolButton" );
120 layout2->addWidget( alignTopInToolButton, 1, 1 );
121 layout14->addLayout( layout2 );
122 spacer16 = new QSpacerItem( 21, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
123 layout14->addItem( spacer16 );
124 alignGroupBoxLayout->addLayout( layout14, 1, 0 );
125
126 alignGuideLayout = new QHBoxLayout( 0, 0, 6, "alignGuideLayout");
127 alignGuideLeftSpacer = new QSpacerItem( 20, 10, QSizePolicy::Expanding, QSizePolicy::Minimum );
128 alignGuideLayout->addItem( alignGuideLeftSpacer );
129 alignGuideLineEdit = new QLineEdit( "", alignGroupBox, "alignGuideLineEdit");
130 alignGuideLineEdit->setMinimumSize( QSize( 80, 20 ) );
131 alignGuideLineEdit->setReadOnly(true);
132 alignGuideLabel = new QLabel( alignGuideLineEdit, "", alignGroupBox, "alignGuideLabel");
133 alignGuideLayout->addWidget( alignGuideLabel );
134
135 alignGuideLayout->addWidget( alignGuideLineEdit );
136 alignGuideRightSpacer = new QSpacerItem( 20, 10, QSizePolicy::Expanding, QSizePolicy::Minimum );
137 alignGuideLayout->addItem( alignGuideRightSpacer);
138 alignGroupBoxLayout->addLayout( alignGuideLayout, 2, 0 );
139
140 AlignDistributePaletteLayout->addWidget( alignGroupBox );
141
142 distributeGroupBox = new QGroupBox( this, "distributeGroupBox" );
143 distributeGroupBox->setColumnLayout(0, Qt::Vertical );
144 distributeGroupBox->layout()->setSpacing( 6 );
145 distributeGroupBox->layout()->setMargin( 11 );
146 distributeGroupBoxLayout = new QGridLayout( distributeGroupBox->layout() );
147 distributeGroupBoxLayout->setAlignment( Qt::AlignTop );
148
149 layout4 = new QHBoxLayout( 0, 0, 6, "layout4");
150 distributeLeftSpacer = new QSpacerItem( 35, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
151 layout4->addItem( distributeLeftSpacer );
152
153 layout1 = new QGridLayout( 0, 1, 1, 0, 6, "layout1");
154
155 distributeDistHToolButton = new QToolButton( distributeGroupBox, "distributeDistHToolButton" );
156 layout1->addWidget( distributeDistHToolButton, 0, 3 );
157
158 distributeDistValueHToolButton = new QToolButton( distributeGroupBox, "distributeDistValueHToolButton" );
159 layout1->addWidget( distributeDistValueHToolButton, 0, 4 );
160
161 distributeRightToolButton = new QToolButton( distributeGroupBox, "distributeRightToolButton" );
162 layout1->addWidget( distributeRightToolButton, 0, 2 );
163
164 distributeBottomToolButton = new QToolButton( distributeGroupBox, "distributeBottomToolButton" );
165 layout1->addWidget( distributeBottomToolButton, 1, 0 );
166
167 distributeCenterHToolButton = new QToolButton( distributeGroupBox, "distributeCenterHToolButton" );
168 layout1->addWidget( distributeCenterHToolButton, 0, 1 );
169
170 distributeDistVToolButton = new QToolButton( distributeGroupBox, "distributeDistVToolButton" );
171 layout1->addWidget( distributeDistVToolButton, 1, 3 );
172
173 distributeDistValueVToolButton = new QToolButton( distributeGroupBox, "distributeDistValueVToolButton" );
174 layout1->addWidget( distributeDistValueVToolButton, 1, 4 );
175
176 distributeLeftToolButton = new QToolButton( distributeGroupBox, "distributeLeftToolButton" );
177 layout1->addWidget( distributeLeftToolButton, 0, 0 );
178
179 distributeCenterVToolButton = new QToolButton( distributeGroupBox, "distributeCenterVToolButton" );
180 layout1->addWidget( distributeCenterVToolButton, 1, 1 );
181
182 distributeTopToolButton = new QToolButton( distributeGroupBox, "distributeTopToolButton" );
183 layout1->addWidget( distributeTopToolButton, 1, 2 );
184 layout4->addLayout( layout1 );
185 distributeRightSpacer = new QSpacerItem( 35, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
186 layout4->addItem( distributeRightSpacer );
187
188 distributeGroupBoxLayout->addLayout( layout4, 0, 0 );
189
190 distanceLayout = new QHBoxLayout( 0, 0, 6, "distanceLayout");
191 distributeDistLeftSpacer = new QSpacerItem( 20, 10, QSizePolicy::Expanding, QSizePolicy::Minimum );
192 distanceLayout->addItem( distributeDistLeftSpacer );
193 distributeDistLabel = new QLabel( distributeGroupBox, "distributeDistLabel");
194 distanceLayout->addWidget( distributeDistLabel );
195 distributeDistMSpinBox = new MSpinBox( -1000, 1000, distributeGroupBox, 2);
196 distributeDistMSpinBox->setMinimumSize( QSize( 80, 20 ) );
197 distributeDistMSpinBox->setValue(0);
198 distanceLayout->addWidget( distributeDistMSpinBox );
199 distributeDistRightSpacer = new QSpacerItem( 20, 10, QSizePolicy::Expanding, QSizePolicy::Minimum );
200 distanceLayout->addItem( distributeDistRightSpacer);
201 distributeGroupBoxLayout->addLayout( distanceLayout, 1, 0 );
202
203 AlignDistributePaletteLayout->addWidget( distributeGroupBox );
204 languageChange();
205
206 resize( QSize(222, 232).expandedTo(minimumSizeHint()) );
207 clearWState( WState_Polished );
208
209 // buddies
210 alignRelativeToLabel->setBuddy( alignRelativeToCombo );
211 distributeDistLabel->setBuddy( distributeDistMSpinBox );
212 init();
213 setView(NULL);
214 }
215
216 /*
217 * Destroys the object and frees any allocated resources
218 */
219 AlignDistributePalette::~AlignDistributePalette()
220 {
221 // no need to delete child widgets, Qt does it all for us
222 }
223
224 /*
225 * Sets the strings of the subwidgets using the current
226 * language.
227 */
228 void AlignDistributePalette::languageChange()
229 {
230 setCaption( tr( "Align and Distribute" ) );
231 alignGroupBox->setTitle( tr( "Align" ) );
232 alignRelativeToLabel->setText( tr( "&Relative to:" ) );
233 int alignComboValue=alignRelativeToCombo->currentItem();
234 alignRelativeToCombo->clear();
235 alignRelativeToCombo->insertItem( tr( "First Selected" ) );
236 alignRelativeToCombo->insertItem( tr( "Last Selected" ) );
237 alignRelativeToCombo->insertItem( tr( "Page" ) );
238 alignRelativeToCombo->insertItem( tr( "Margins" ) );
239 alignRelativeToCombo->insertItem( tr( "Guide" ) );
240 alignRelativeToCombo->insertItem( tr( "Selection" ) );
241 alignRelativeToCombo->setCurrentItem(alignComboValue);
242 alignToChanged(alignComboValue);
243 alignLeftOutToolButton->setText( QString::null );
244 QToolTip::add( alignLeftOutToolButton, tr( "Align right sides of objects to left side of anchor" ) );
245 alignRightOutToolButton->setText( QString::null );
246 QToolTip::add( alignRightOutToolButton, tr( "Align left sides of objects to right side of anchor" ) );
247 alignBottomInToolButton->setText( QString::null );
248 QToolTip::add( alignBottomInToolButton, tr( "Align bottoms" ) );
249 alignRightInToolButton->setText( QString::null );
250 QToolTip::add( alignRightInToolButton, tr( "Align right sides" ) );
251 alignBottomOutToolButton->setText( QString::null );
252 QToolTip::add( alignBottomOutToolButton, tr( "Align tops of objects to bottom of anchor" ) );
253 alignCenterHorToolButton->setText( QString::null );
254 QToolTip::add( alignCenterHorToolButton, tr( "Center on vertical axis" ) );
255 alignLeftInToolButton->setText( QString::null );
256 QToolTip::add( alignLeftInToolButton, tr( "Align left sides" ) );
257 alignCenterVerToolButton->setText( QString::null );
258 QToolTip::add( alignCenterVerToolButton, tr( "Center on horizontal axis" ) );
259 alignTopOutToolButton->setText( QString::null );
260 QToolTip::add( alignTopOutToolButton, tr( "Align bottoms of objects to top of anchor" ) );
261 alignTopInToolButton->setText( QString::null );
262 QToolTip::add( alignTopInToolButton, tr( "Align tops" ) );
263
264 alignGuideLabel->setText( tr( "&Selected Guide:" ) );
265
266 distributeGroupBox->setTitle( tr( "Distribute" ) );
267 distributeDistHToolButton->setText( QString::null );
268 QToolTip::add( distributeDistHToolButton, tr( "Make horizontal gaps between objects equal" ) );
269 distributeDistValueHToolButton->setText( QString::null );
270 QToolTip::add( distributeDistValueHToolButton, tr( "Make horizontal gaps between objects equal to the value specified" ) );
271 distributeRightToolButton->setText( QString::null );
272 distributeRightToolButton->setTextLabel( tr( "Distribute right sides equidistantly" ) );
273 distributeBottomToolButton->setText( QString::null );
274 QToolTip::add( distributeBottomToolButton, tr( "Distribute bottoms equidistantly" ) );
275 distributeCenterHToolButton->setText( QString::null );
276 QToolTip::add( distributeCenterHToolButton, tr( "Distribute centers equidistantly horizontally" ) );
277 distributeDistVToolButton->setText( QString::null );
278 QToolTip::add( distributeDistVToolButton, tr( "Make vertical gaps between objects equal" ) );
279 distributeDistValueVToolButton->setText( QString::null );
280 QToolTip::add( distributeDistValueVToolButton, tr( "Make vertical gaps between objects equal to the value specified" ) );
281 distributeLeftToolButton->setText( QString::null );
282 QToolTip::add( distributeLeftToolButton, tr( "Distribute left sides equidistantly" ) );
283 distributeCenterVToolButton->setText( QString::null );
284 QToolTip::add( distributeCenterVToolButton, tr( "Distribute centers equidistantly vertically" ) );
285 distributeTopToolButton->setText( QString::null );
286 QToolTip::add( distributeTopToolButton, tr( "Distribute tops equidistantly" ) );
287
288 distributeDistLabel->setText( tr( "&Distance:" ) );
289 QToolTip::add( distributeDistMSpinBox, tr( "Distribute the items with the distance specified" ) );
290
291 guideInfoTextNone = tr("None Selected");
292 }
293
294 void AlignDistributePalette::init()
295 {
296 undoManager = UndoManager::instance();
297
298 alignLeftOutToolButton->setIconSet(QIconSet(loadIcon("al_left_out.png"), QIconSet::Small));
299 alignLeftInToolButton->setIconSet(QIconSet(loadIcon("al_left_in.png"), QIconSet::Small));
300 alignCenterHorToolButton->setIconSet(QIconSet(loadIcon("al_center_hor.png"), QIconSet::Small));
301 alignRightInToolButton->setIconSet(QIconSet(loadIcon("al_right_in.png"), QIconSet::Small));
302 alignRightOutToolButton->setIconSet(QIconSet(loadIcon("al_right_out.png"), QIconSet::Small));
303
304 alignTopOutToolButton->setIconSet(QIconSet(loadIcon("al_top_out.png"), QIconSet::Small));
305 alignTopInToolButton->setIconSet(QIconSet(loadIcon("al_top_in.png"), QIconSet::Small));
306 alignCenterVerToolButton->setIconSet(QIconSet(loadIcon("al_center_ver.png"), QIconSet::Small));
307 alignBottomInToolButton->setIconSet(QIconSet(loadIcon("al_bottom_in.png"), QIconSet::Small));
308 alignBottomOutToolButton->setIconSet(QIconSet(loadIcon("al_bottom_out.png"), QIconSet::Small));
309
310 distributeLeftToolButton->setIconSet(QIconSet(loadIcon("distribute_left.png"), QIconSet::Small));
311 distributeCenterHToolButton->setIconSet(QIconSet(loadIcon("distribute_hcentre.png"), QIconSet::Small));
312 distributeRightToolButton->setIconSet(QIconSet(loadIcon("distribute_right.png"), QIconSet::Small));
313 distributeDistHToolButton->setIconSet(QIconSet(loadIcon("distribute_hdist.png"), QIconSet::Small));
314 distributeDistValueHToolButton->setIconSet(QIconSet(loadIcon("distribute_hdist_val.png"), QIconSet::Small));
315
316 distributeBottomToolButton->setIconSet(QIconSet(loadIcon("distribute_bottom.png"), QIconSet::Small));
317 distributeCenterVToolButton->setIconSet(QIconSet(loadIcon("distribute_vcentre.png"), QIconSet::Small));
318 distributeTopToolButton->setIconSet(QIconSet(loadIcon("distribute_top.png"), QIconSet::Small));
319 distributeDistVToolButton->setIconSet(QIconSet(loadIcon("distribute_vdist.png"), QIconSet::Small));
320 distributeDistValueVToolButton->setIconSet(QIconSet(loadIcon("distribute_vdist_val.png"), QIconSet::Small));
321
322 connect(alignLeftOutToolButton, SIGNAL(clicked()), this, SLOT(alignLeftOut()));
323 connect(alignRightOutToolButton, SIGNAL(clicked()), this, SLOT(alignRightOut()));
324 connect(alignBottomInToolButton, SIGNAL(clicked()), this, SLOT(alignBottomIn()));
325 connect(alignRightInToolButton, SIGNAL(clicked()), this, SLOT(alignRightIn()));
326 connect(alignBottomOutToolButton, SIGNAL(clicked()), this, SLOT(alignBottomOut()));
327 connect(alignCenterHorToolButton, SIGNAL(clicked()), this, SLOT(alignCenterHor()));
328 connect(alignLeftInToolButton, SIGNAL(clicked()), this, SLOT(alignLeftIn()));
329 connect(alignCenterVerToolButton, SIGNAL(clicked()), this, SLOT(alignCenterVer()));
330 connect(alignTopOutToolButton, SIGNAL(clicked()), this, SLOT(alignTopOut()));
331 connect(alignTopInToolButton, SIGNAL(clicked()), this, SLOT(alignTopIn()));
332 connect(distributeDistHToolButton, SIGNAL(clicked()), this, SLOT(distributeDistH()));
333 connect(distributeDistValueHToolButton, SIGNAL(clicked()), this, SLOT(distributeDistValH()));
334 connect(distributeRightToolButton, SIGNAL(clicked()), this, SLOT(distributeRight()));
335 connect(distributeBottomToolButton, SIGNAL(clicked()), this, SLOT(distributeBottom()));
336 connect(distributeCenterHToolButton, SIGNAL(clicked()), this, SLOT(distributeCenterH()));
337 connect(distributeDistVToolButton, SIGNAL(clicked()), this, SLOT(distributeDistV()));
338 connect(distributeDistValueVToolButton, SIGNAL(clicked()), this, SLOT(distributeDistValV()));
339 connect(distributeLeftToolButton, SIGNAL(clicked()), this, SLOT(distributeLeft()));
340 connect(distributeCenterVToolButton, SIGNAL(clicked()), this, SLOT(distributeCenterV()));
341 connect(distributeTopToolButton, SIGNAL(clicked()), this, SLOT(distributeTop()));
342
343 connect(alignRelativeToCombo, SIGNAL(activated(int)), this, SLOT(alignToChanged(int)));
344
345 unitRatio=1.0;
346 usingDistance=false;
347 guideDirection=-1;
348
349 guideInfoText = guideInfoTextNone;
350 alignGuideLineEdit->setText(guideInfoTextNone);
351 }
352
353 void AlignDistributePalette::unitChange()
354 {
355 if (currDoc!=NULL)
356 {
357 double oldValue=distributeDistMSpinBox->value();
358 double oldRatio=unitRatio;
359 distributeDistMSpinBox->setDecimals(unitGetDecimalsFromIndex(currDoc->unitIndex()));
360 distributeDistMSpinBox->setSuffix(unitGetSuffixFromIndex(currDoc->unitIndex()));
361 unitRatio=unitGetRatioFromIndex(currDoc->unitIndex());
362 double ratioDivisor = unitRatio / oldRatio;
363 distributeDistMSpinBox->setValue(oldValue*ratioDivisor);
364 enableGuideButtons();
365 }
366 }
367
368 void AlignDistributePalette::setView( ScribusView * newView )
369 {
370 currView=newView;
371 if (currView!=NULL)
372 {
373 currDoc=currView->Doc;
374 alignObjects=&(currDoc->AObjects);
375 }
376 else
377 {
378 currDoc=NULL;
379 alignObjects=NULL;
380 }
381 unitChange();
382 }
383
384 bool AlignDistributePalette::startAlign()
385 {
386 currDoc->buildAlignItemList();
387 alignObjectsCount=alignObjects->count();
388 if (alignObjectsCount==0)
389 return false;
390
391 bool oneLocked=false;
392 for (uint i = 0; i < alignObjectsCount; ++i)
393 for (uint j = 0; j < (*alignObjects)[i].Objects.count(); ++j)
394 if ((*alignObjects)[i].Objects.at(j)->locked())
395 oneLocked=true;
396 if (oneLocked)
397 {
398 int t = ScMessageBox::warning(ScMW, CommonStrings::trWarning,
399 tr("Some objects are locked."),
400 tr("&Unlock All"), CommonStrings::tr_Cancel,
401 0, 0);
402 if (t == 1)
403 return false;
404 for (uint i = 0; i < alignObjectsCount; ++i)
405 for (uint j = 0; j < (*alignObjects)[i].Objects.count(); ++j)
406 if ((*alignObjects)[i].Objects.at(j)->locked())
407 (*alignObjects)[i].Objects.at(j)->setLocked(false);
408 }
409
410 QString targetTooltip = Um::ItemsInvolved + "\n";
411 for (uint i = 0; i < currDoc->m_Selection->count(); ++i)
412 targetTooltip += "\t" + currDoc->m_Selection->itemAt(i)->getUName() + "\n";
413 // Make the align action a single action in Action History
414 undoManager->beginTransaction(Um::Selection, 0, Um::AlignDistribute, targetTooltip, Um::IAlignDistribute);
415 return true;
416 }
417
418 void AlignDistributePalette::endAlign()
419 {
420 emit documentChanged();
421 ScMW->HaveNewSel(currDoc->m_Selection->itemAt(0)->itemType());
422 for (uint i = 0; i < currDoc->m_Selection->count(); ++i)
423 currDoc->setRedrawBounding(currDoc->m_Selection->itemAt(i));
424 undoManager->commit(); // commit and send the action to the UndoManager
425 currView->updateContents();
426 }
427
428
429 void AlignDistributePalette::alignLeftOut()
430 {
431 if (currView!=NULL)
432 {
433 if (!startAlign())
434 return;
435 int loopStart=0, loopEnd=alignObjectsCount;
436 double newX = 99999.9;
437 switch ( currAlignTo )
438 {
439 case First:
440 newX = (*alignObjects)[0].x1;
441 loopStart=1;
442 break;
443 case Last:
444 newX = (*alignObjects)[alignObjectsCount-1].x1;
445 loopEnd=alignObjectsCount-2;
446 break;
447 case Page:
448 newX = currDoc->currentPage->xOffset();
449 break;
450 case Margins:
451 newX = currDoc->currentPage->xOffset();
452 newX += currDoc->currentPage->Margins.Left;
453 break;
454 case Guide:
455 newX=currDoc->currentPage->xOffset() + guidePosition;
456 break;
457 case Selection:
458 for (uint a = 0; a < alignObjectsCount; ++a)
459 newX = QMIN((*alignObjects)[a].x1, newX);
460 break;
461 }
462 for (int i = loopStart; i <= loopEnd; ++i)
463 {
464 double diff=newX-(*alignObjects)[i].x2;
465 for (uint j = 0; j < (*alignObjects)[i].Objects.count(); ++j)
466 (*alignObjects)[i].Objects.at(j)->moveBy(diff, 0.0);
467 }
468 endAlign();
469 }
470 }
471
472 void AlignDistributePalette::alignLeftIn()
473 {
474 if (currView!=NULL)
475 {
476 if (!startAlign())
477 return;
478 int loopStart=0, loopEnd=alignObjectsCount;
479 double newX = 99999.9;
480 switch ( currAlignTo )
481 {
482 case First:
483 newX = (*alignObjects)[0].x1;
484 loopStart=1;
485 break;
486 case Last:
487 newX = (*alignObjects)[alignObjectsCount-1].x1;
488 loopEnd=alignObjectsCount-2;
489 break;
490 case Page:
491 newX = currDoc->currentPage->xOffset();
492 break;
493 case Margins:
494 newX = currDoc->currentPage->xOffset();
495 newX += currDoc->currentPage->Margins.Left;
496 break;
497 case Guide:
498 newX=currDoc->currentPage->xOffset() + guidePosition;
499 break;
500 case Selection:
501 for (uint a = 0; a < alignObjectsCount; ++a)
502 newX = QMIN((*alignObjects)[a].x1, newX);
503 break;
504 }
505 for (int i = loopStart; i <= loopEnd; ++i)
506 {
507 double diff=newX-(*alignObjects)[i].x1;
508 for (uint j = 0; j < (*alignObjects)[i].Objects.count(); ++j)
509 (*alignObjects)[i].Objects.at(j)->moveBy(diff, 0.0);
510 }
511 endAlign();
512 }
513 }
514
515 void AlignDistributePalette::alignCenterHor()
516 {
517 if (currView!=NULL)
518 {
519 if (!startAlign())
520 return;
521 int loopStart=0, loopEnd=alignObjectsCount;
522 double newX;
523 switch ( currAlignTo )
524 {
525 case First:
526 newX = (*alignObjects)[0].x1 + ((*alignObjects)[0].width)/2;
527 loopStart=1;
528 break;
529 case Last:
530 {
531 int objindex=alignObjectsCount-1;
532 newX = (*alignObjects)[objindex].x1 + ((*alignObjects)[objindex].width)/2;
533 loopEnd=alignObjectsCount-2;
534 }
535 break;
536 case Page:
537 newX = currDoc->currentPage->xOffset();
538 newX += currDoc->currentPage->width()/2;
539 break;
540 case Margins:
541 newX = currDoc->currentPage->xOffset();
542 newX += currDoc->currentPage->Margins.Left;
543 newX += (currDoc->currentPage->width() - currDoc->currentPage->Margins.Right - currDoc->currentPage->Margins.Left)/2;
544 break;
545 case Guide:
546 newX=currDoc->currentPage->xOffset() + guidePosition;
547 break;
548 case Selection:
549 double minX=99999.9, maxX=-99999.9;
550 for (uint a = 0; a < alignObjectsCount; ++a)
551 {
552 minX = QMIN((*alignObjects)[a].x1, minX);
553 maxX = QMAX((*alignObjects)[a].x2, maxX);
554 }
555 newX = minX + (maxX-minX)/2;
556 break;
557 }
558 for (int i = loopStart; i <= loopEnd; ++i)
559 {
560 double diff=newX-(*alignObjects)[i].x1-((*alignObjects)[i].width)/2;
561 for (uint j = 0; j < (*alignObjects)[i].Objects.count(); ++j)
562 (*alignObjects)[i].Objects.at(j)->moveBy(diff, 0.0);
563 }
564 endAlign();
565 }
566 }
567
568 void AlignDistributePalette::alignRightIn()
569 {
570 if (currView!=NULL)
571 {
572 if (!startAlign())
573 return;
574 int loopStart=0, loopEnd=alignObjectsCount;
575 double newX = -99999.9;
576 switch ( currAlignTo )
577 {
578 case First:
579 newX = (*alignObjects)[0].x2;
580 loopStart=1;
581 break;
582 case Last:
583 newX = (*alignObjects)[alignObjectsCount-1].x2;
584 loopEnd=alignObjectsCount-2;
585 break;
586 case Page:
587 newX = currDoc->currentPage->xOffset();
588 newX += currDoc->currentPage->width();;
589 break;
590 case Margins:
591 newX = currDoc->currentPage->xOffset();
592 newX += currDoc->currentPage->width();;
593 newX -= currDoc->currentPage->Margins.Right;
594 break;
595 case Guide:
596 newX=currDoc->currentPage->xOffset() + guidePosition;
597 break;
598 case Selection:
599 for (uint a = 0; a < alignObjectsCount; ++a)
600 newX = QMAX((*alignObjects)[a].x2, newX);
601 break;
602 }
603 for (int i = loopStart; i <= loopEnd; ++i)
604 {
605 double diff=newX-(*alignObjects)[i].x2;
606 for (uint j = 0; j < (*alignObjects)[i].Objects.count(); ++j)
607 (*alignObjects)[i].Objects.at(j)->moveBy(diff, 0.0);
608 }
609 endAlign();
610 }
611 }
612
613 void AlignDistributePalette::alignRightOut()
614 {
615 if (currView!=NULL)
616 {
617 if (!startAlign())
618 return;
619 int loopStart=0, loopEnd=alignObjectsCount;
620 double newX = -99999.9;
621 switch ( currAlignTo )
622 {
623 case First:
624 newX = (*alignObjects)[0].x2;
625 loopStart=1;
626 break;
627 case Last:
628 newX = (*alignObjects)[alignObjectsCount-1].x2;
629 loopEnd=alignObjectsCount-2;
630 break;
631 case Page:
632 newX = currDoc->currentPage