00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "aligndistribute.h"
00023
00024 #include <QComboBox>
00025 #include <QEvent>
00026 #include <QImage>
00027 #include <QLabel>
00028 #include <QLayout>
00029 #include <QLineEdit>
00030 #include <QPixmap>
00031 #include <QPushButton>
00032 #include <QTabWidget>
00033 #include <QToolButton>
00034 #include <QToolTip>
00035 #include <QVariant>
00036
00037 #include "commonstrings.h"
00038 #include "page.h"
00039 #include "scmessagebox.h"
00040 #include "scribusdoc.h"
00041 #include "scrspinbox.h"
00042 #include "selection.h"
00043 #include "undomanager.h"
00044 #include "units.h"
00045 #include "util_icon.h"
00046 #include "scribusstructs.h"
00047
00048
00049
00050 AlignDistributePalette::AlignDistributePalette( QWidget* parent, const char* name, bool , Qt::WFlags )
00051 : ScrPaletteBase( parent, name )
00052 {
00053 setupUi(this);
00054 currDoc=NULL;
00055
00056
00057 toolButtonDummy1->hide();
00058 toolButtonDummy2->hide();
00059
00060
00061 distributeDistSpinBox->setValues(-1000.0, 1000.0, 2, 0.0);
00062
00063
00064 alignRelativeToLabel->setBuddy( alignRelativeToCombo );
00065 alignGuideLabel->setBuddy( alignGuideLineEdit );
00066 distributeDistLabel->setBuddy( distributeDistSpinBox );
00067
00068 resize( QSize(100, 100).expandedTo(minimumSizeHint()) );
00069 languageChange();
00070 init();
00071 setDoc(NULL);
00072 }
00073
00074 AlignDistributePalette::~AlignDistributePalette()
00075 {
00076 }
00077
00078 void AlignDistributePalette::changeEvent(QEvent *e)
00079 {
00080 if (e->type() == QEvent::LanguageChange)
00081 {
00082 languageChange();
00083 }
00084 else
00085 QWidget::changeEvent(e);
00086 }
00087
00088 void AlignDistributePalette::languageChange()
00089 {
00090 setWindowTitle( tr( "Align and Distribute" ) );
00091 tabWidget->setTabText(0, tr( "Align"));
00092 tabWidget->setTabText(1, tr( "Distribute"));
00093 alignRelativeToLabel->setText( tr( "&Relative to:" ) );
00094 int alignComboValue=alignRelativeToCombo->currentIndex();
00095 alignRelativeToCombo->clear();
00096 alignRelativeToCombo->addItem( tr( "First Selected" ) );
00097 alignRelativeToCombo->addItem( tr( "Last Selected" ) );
00098 alignRelativeToCombo->addItem( tr( "Page" ) );
00099 alignRelativeToCombo->addItem( tr( "Margins" ) );
00100 alignRelativeToCombo->addItem( tr( "Guide" ) );
00101 alignRelativeToCombo->addItem( tr( "Selection" ) );
00102 alignRelativeToCombo->setCurrentIndex(alignComboValue);
00103 alignToChanged(alignComboValue);
00104 alignLeftOutToolButton->setText( QString::null );
00105 alignLeftOutToolButton->setToolTip( tr( "Align right sides of items to left side of anchor" ) );
00106 alignRightOutToolButton->setText( QString::null );
00107 alignRightOutToolButton->setToolTip( tr( "Align left sides of items to right side of anchor" ) );
00108 alignBottomInToolButton->setText( QString::null );
00109 alignBottomInToolButton->setToolTip( tr( "Align bottoms" ) );
00110 alignRightInToolButton->setText( QString::null );
00111 alignRightInToolButton->setToolTip( tr( "Align right sides" ) );
00112 alignBottomOutToolButton->setText( QString::null );
00113 alignBottomOutToolButton->setToolTip( tr( "Align tops of items to bottom of anchor" ) );
00114 alignCenterHorToolButton->setText( QString::null );
00115 alignCenterHorToolButton->setToolTip( tr( "Center on vertical axis" ) );
00116 alignLeftInToolButton->setText( QString::null );
00117 alignLeftInToolButton->setToolTip( tr( "Align left sides" ) );
00118 alignCenterVerToolButton->setText( QString::null );
00119 alignCenterVerToolButton->setToolTip( tr( "Center on horizontal axis" ) );
00120 alignTopOutToolButton->setText( QString::null );
00121 alignTopOutToolButton->setToolTip( tr( "Align bottoms of items to top of anchor" ) );
00122 alignTopInToolButton->setText( QString::null );
00123 alignTopInToolButton->setToolTip( tr( "Align tops" ) );
00124
00125 alignGuideLabel->setText( tr( "&Selected Guide:" ) );
00126
00127 distributeDistHToolButton->setText( QString::null );
00128 distributeDistHToolButton->setToolTip( tr( "Make horizontal gaps between items equal" ) );
00129 distributeDistValueHToolButton->setText( QString::null );
00130 distributeDistValueHToolButton->setToolTip( tr( "Make horizontal gaps between items equal to the value specified" ) );
00131
00132 distributeRightToolButton->setText( QString::null );
00133 distributeRightToolButton->setToolTip( tr( "Distribute right sides equidistantly" ) );
00134 distributeBottomToolButton->setText( QString::null );
00135 distributeBottomToolButton->setToolTip( tr( "Distribute bottoms equidistantly" ) );
00136 distributeCenterHToolButton->setText( QString::null );
00137 distributeCenterHToolButton->setToolTip( tr( "Distribute centers equidistantly horizontally" ) );
00138 distributeDistVToolButton->setText( QString::null );
00139 distributeDistVToolButton->setToolTip( tr( "Make vertical gaps between items equal" ) );
00140 distributeDistValueVToolButton->setText( QString::null );
00141 distributeDistValueVToolButton->setToolTip( tr( "Make vertical gaps between items equal to the value specified" ) );
00142 distributeLeftToolButton->setText( QString::null );
00143 distributeLeftToolButton->setToolTip( tr( "Distribute left sides equidistantly" ) );
00144 distributeCenterVToolButton->setText( QString::null );
00145 distributeCenterVToolButton->setToolTip( tr( "Distribute centers equidistantly vertically" ) );
00146 distributeTopToolButton->setText( QString::null );
00147 distributeTopToolButton->setToolTip( tr( "Distribute tops equidistantly" ) );
00148 distributeAcrossPageToolButton->setText( QString::null );
00149 distributeAcrossPageToolButton->setToolTip( tr( "Make horizontal gaps between items and sides of page equal" ) );
00150 distributeDownPageToolButton->setText( QString::null );
00151 distributeDownPageToolButton->setToolTip( tr( "Make vertical gaps between items and the top and bottom of page equal" ) );
00152 distributeAcrossMarginsToolButton->setText( QString::null );
00153 distributeAcrossMarginsToolButton->setToolTip( tr( "Make horizontal gaps between items and sides of page margins equal" ) );
00154 distributeDownMarginsToolButton->setText( QString::null );
00155 distributeDownMarginsToolButton->setToolTip( tr( "Make vertical gaps between items and the top and bottom of page margins equal" ) );
00156
00157 distributeDistLabel->setText( tr( "&Distance:" ) );
00158 distributeDistSpinBox->setToolTip( tr( "Distribute the items with the distance specified" ) );
00159
00160 guideInfoTextNone = tr("None Selected");
00161 }
00162
00163 void AlignDistributePalette::init()
00164 {
00165 undoManager = UndoManager::instance();
00166
00167
00168 alignLeftOutToolButton->setIcon(QIcon(loadIcon("22/align-horizontal-left-out.png")));
00169 alignLeftInToolButton->setIcon(QIcon(loadIcon("22/align-horizontal-left.png")));
00170 alignCenterHorToolButton->setIcon(QIcon(loadIcon("22/align-horizontal-center.png")));
00171 alignRightInToolButton->setIcon(QIcon(loadIcon("22/align-horizontal-right.png")));
00172 alignRightOutToolButton->setIcon(QIcon(loadIcon("22/align-horizontal-right-out.png")));
00173
00174 alignTopOutToolButton->setIcon(QIcon(loadIcon("22/align-vertical-top-out.png")));
00175 alignTopInToolButton->setIcon(QIcon(loadIcon("22/align-vertical-top.png")));
00176 alignCenterVerToolButton->setIcon(QIcon(loadIcon("22/align-vertical-center.png")));
00177 alignBottomInToolButton->setIcon(QIcon(loadIcon("22/align-vertical-bottom.png")));
00178 alignBottomOutToolButton->setIcon(QIcon(loadIcon("22/align-vertical-bottom-out.png")));
00179
00180 distributeLeftToolButton->setIcon(QIcon(loadIcon("22/distribute-horizontal-left.png")));
00181 distributeCenterHToolButton->setIcon(QIcon(loadIcon("22/distribute-horizontal-center.png")));
00182 distributeRightToolButton->setIcon(QIcon(loadIcon("22/distribute-horizontal-right.png")));
00183 distributeDistHToolButton->setIcon(QIcon(loadIcon("22/distribute-horizontal-equal.png")));
00184
00185 distributeBottomToolButton->setIcon(QIcon(loadIcon("22/distribute-vertical-bottom.png")));
00186 distributeCenterVToolButton->setIcon(QIcon(loadIcon("22/distribute-vertical-center.png")));
00187 distributeTopToolButton->setIcon(QIcon(loadIcon("22/distribute-vertical-top.png")));
00188 distributeDistVToolButton->setIcon(QIcon(loadIcon("22/distribute-vertical-equal.png")));
00189
00190
00191 distributeAcrossPageToolButton->setIcon(QIcon(loadIcon("22/distribute-horizontal-page.png")));
00192 distributeDownPageToolButton->setIcon(QIcon(loadIcon("22/distribute-vertical-page.png")));
00193 distributeAcrossMarginsToolButton->setIcon(QIcon(loadIcon("22/distribute-horizontal-margin.png")));
00194 distributeDownMarginsToolButton->setIcon(QIcon(loadIcon("22/distribute-vertical-margin.png")));
00195 distributeDistValueHToolButton->setIcon(QIcon(loadIcon("22/distribute-horizontal-x.png")));
00196 distributeDistValueVToolButton->setIcon(QIcon(loadIcon("22/distribute-vertical-y.png")));
00197
00198 connect(alignLeftOutToolButton, SIGNAL(clicked()), this, SLOT(alignLeftOut()));
00199 connect(alignRightOutToolButton, SIGNAL(clicked()), this, SLOT(alignRightOut()));
00200 connect(alignBottomInToolButton, SIGNAL(clicked()), this, SLOT(alignBottomIn()));
00201 connect(alignRightInToolButton, SIGNAL(clicked()), this, SLOT(alignRightIn()));
00202 connect(alignBottomOutToolButton, SIGNAL(clicked()), this, SLOT(alignBottomOut()));
00203 connect(alignCenterHorToolButton, SIGNAL(clicked()), this, SLOT(alignCenterHor()));
00204 connect(alignLeftInToolButton, SIGNAL(clicked()), this, SLOT(alignLeftIn()));
00205 connect(alignCenterVerToolButton, SIGNAL(clicked()), this, SLOT(alignCenterVer()));
00206 connect(alignTopOutToolButton, SIGNAL(clicked()), this, SLOT(alignTopOut()));
00207 connect(alignTopInToolButton, SIGNAL(clicked()), this, SLOT(alignTopIn()));
00208 connect(distributeDistHToolButton, SIGNAL(clicked()), this, SLOT(distributeDistH()));
00209 connect(distributeDistValueHToolButton, SIGNAL(clicked()), this, SLOT(distributeDistValH()));
00210 connect(distributeRightToolButton, SIGNAL(clicked()), this, SLOT(distributeRight()));
00211 connect(distributeBottomToolButton, SIGNAL(clicked()), this, SLOT(distributeBottom()));
00212 connect(distributeCenterHToolButton, SIGNAL(clicked()), this, SLOT(distributeCenterH()));
00213 connect(distributeDistVToolButton, SIGNAL(clicked()), this, SLOT(distributeDistV()));
00214 connect(distributeDistValueVToolButton, SIGNAL(clicked()), this, SLOT(distributeDistValV()));
00215 connect(distributeLeftToolButton, SIGNAL(clicked()), this, SLOT(distributeLeft()));
00216 connect(distributeCenterVToolButton, SIGNAL(clicked()), this, SLOT(distributeCenterV()));
00217 connect(distributeTopToolButton, SIGNAL(clicked()), this, SLOT(distributeTop()));
00218 connect(distributeAcrossPageToolButton, SIGNAL(clicked()), this, SLOT(distributeDistAcrossPage()));
00219 connect(distributeDownPageToolButton, SIGNAL(clicked()), this, SLOT(distributeDistDownPage()));
00220 connect(distributeAcrossMarginsToolButton, SIGNAL(clicked()), this, SLOT(distributeDistAcrossMargins()));
00221 connect(distributeDownMarginsToolButton, SIGNAL(clicked()), this, SLOT(distributeDistDownMargins()));
00222
00223 alignRelativeToCombo->setCurrentIndex(0);
00224 alignToChanged(0);
00225 connect(alignRelativeToCombo, SIGNAL(activated(int)), this, SLOT(alignToChanged(int)));
00226
00227 unitRatio=1.0;
00228 guideDirection=-1;
00229
00230 guideInfoText = guideInfoTextNone;
00231 alignGuideLineEdit->setText(guideInfoTextNone);
00232 }
00233
00234 void AlignDistributePalette::unitChange()
00235 {
00236 if (currDoc!=NULL)
00237 {
00238 double oldValue=distributeDistSpinBox->value();
00239 double oldRatio=unitRatio;
00240 distributeDistSpinBox->setDecimals(unitGetPrecisionFromIndex(currDoc->unitIndex()));
00241 distributeDistSpinBox->setSuffix(unitGetSuffixFromIndex(currDoc->unitIndex()));
00242 unitRatio=unitGetRatioFromIndex(currDoc->unitIndex());
00243 double ratioDivisor = unitRatio / oldRatio;
00244 distributeDistSpinBox->setValue(oldValue*ratioDivisor);
00245 enableGuideButtons();
00246 }
00247 }
00248
00249 void AlignDistributePalette::setDoc( ScribusDoc* newDoc )
00250 {
00251 currDoc=newDoc;
00252 if (currDoc!=NULL)
00253 alignObjects=&(currDoc->AObjects);
00254 else
00255 alignObjects=NULL;
00256 unitChange();
00257 }
00258
00259 void AlignDistributePalette::alignLeftOut()
00260 {
00261 if (currDoc!=NULL)
00262 currDoc->itemSelection_AlignLeftOut(currAlignTo, guidePosition);
00263 }
00264
00265 void AlignDistributePalette::alignLeftIn()
00266 {
00267 if (currDoc!=NULL)
00268 currDoc->itemSelection_AlignLeftIn(currAlignTo, guidePosition);
00269 }
00270
00271 void AlignDistributePalette::alignCenterHor()
00272 {
00273 if (currDoc!=NULL)
00274 currDoc->itemSelection_AlignCenterHor(currAlignTo, guidePosition);
00275 }
00276
00277 void AlignDistributePalette::alignRightIn()
00278 {
00279 if (currDoc!=NULL)
00280 currDoc->itemSelection_AlignRightIn(currAlignTo, guidePosition);
00281 }
00282
00283 void AlignDistributePalette::alignRightOut()
00284 {
00285 if (currDoc!=NULL)
00286 currDoc->itemSelection_AlignRightOut(currAlignTo, guidePosition);
00287 }
00288
00289 void AlignDistributePalette::alignTopOut()
00290 {
00291 if (currDoc!=NULL)
00292 currDoc->itemSelection_AlignTopOut(currAlignTo, guidePosition);
00293 }
00294
00295 void AlignDistributePalette::alignTopIn()
00296 {
00297 if (currDoc!=NULL)
00298 currDoc->itemSelection_AlignTopIn(currAlignTo, guidePosition);
00299 }
00300
00301
00302 void AlignDistributePalette::alignCenterVer()
00303 {
00304 if (currDoc!=NULL)
00305 currDoc->itemSelection_AlignCenterVer(currAlignTo, guidePosition);
00306 }
00307
00308
00309 void AlignDistributePalette::alignBottomIn()
00310 {
00311 if (currDoc!=NULL)
00312 currDoc->itemSelection_AlignBottomIn(currAlignTo, guidePosition);
00313 }
00314
00315 void AlignDistributePalette::alignBottomOut()
00316 {
00317 if (currDoc!=NULL)
00318 currDoc->itemSelection_AlignBottomOut(currAlignTo, guidePosition);
00319 }
00320
00321 void AlignDistributePalette::distributeLeft()
00322 {
00323 if (currDoc!=NULL)
00324 currDoc->itemSelection_DistributeLeft();
00325 }
00326
00327 void AlignDistributePalette::distributeCenterH()
00328 {
00329 if (currDoc!=NULL)
00330 currDoc->itemSelection_DistributeCenterH();
00331 }
00332
00333 void AlignDistributePalette::distributeRight()
00334 {
00335 if (currDoc!=NULL)
00336 currDoc->itemSelection_DistributeRight();
00337 }
00338
00339 void AlignDistributePalette::distributeDistH(bool usingDistance)
00340 {
00341 if (currDoc!=NULL)
00342 currDoc->itemSelection_DistributeDistH(usingDistance, distributeDistSpinBox->value());
00343 }
00344
00345 void AlignDistributePalette::distributeDistValH()
00346 {
00347 if (currDoc!=NULL)
00348 distributeDistH(true);
00349 }
00350
00351 void AlignDistributePalette::distributeDistAcrossPage()
00352 {
00353 if (currDoc!=NULL)
00354 currDoc->itemSelection_DistributeAcrossPage();
00355 }
00356
00357 void AlignDistributePalette::distributeDistDownPage()
00358 {
00359 if (currDoc!=NULL)
00360 currDoc->itemSelection_DistributeDownPage();
00361 }
00362
00363 void AlignDistributePalette::distributeDistAcrossMargins()
00364 {
00365 if (currDoc!=NULL)
00366 currDoc->itemSelection_DistributeAcrossPage(true);
00367 }
00368
00369 void AlignDistributePalette::distributeDistDownMargins()
00370 {
00371 if (currDoc!=NULL)
00372 currDoc->itemSelection_DistributeDownPage(true);
00373 }
00374
00375
00376 void AlignDistributePalette::distributeBottom()
00377 {
00378 if (currDoc!=NULL)
00379 currDoc->itemSelection_DistributeBottom();
00380 }
00381
00382 void AlignDistributePalette::distributeCenterV()
00383 {
00384 if (currDoc!=NULL)
00385 currDoc->itemSelection_DistributeCenterV();
00386 }
00387
00388 void AlignDistributePalette::distributeTop()
00389 {
00390 if (currDoc!=NULL)
00391 currDoc->itemSelection_DistributeTop();
00392 }
00393
00394 void AlignDistributePalette::distributeDistV(bool usingDistance)
00395 {
00396 if (currDoc!=NULL)
00397 currDoc->itemSelection_DistributeDistV(usingDistance, distributeDistSpinBox->value());
00398 }
00399
00400 void AlignDistributePalette::distributeDistValV()
00401 {
00402 if (currDoc!=NULL)
00403 distributeDistV(true);
00404 }
00405
00406 void AlignDistributePalette::alignToChanged(int newAlignTo)
00407 {
00408 currAlignTo=(ScribusDoc::AlignTo)newAlignTo;
00409 enableGuideButtons();
00410 }
00411
00412 void AlignDistributePalette::setGuide(int direction, double position)
00413 {
00414
00415 guideDirection=direction;
00416 guidePosition=position;
00417 enableGuideButtons();
00418 }
00419
00420 void AlignDistributePalette::enableGuideButtons()
00421 {
00422 QString suffix="";
00423 double unitRatio=1.0;
00424 int precision=1;
00425 if (currDoc!=NULL)
00426 {
00427 suffix=unitGetSuffixFromIndex(currDoc->unitIndex());
00428 unitRatio=unitGetRatioFromIndex(currDoc->unitIndex());
00429 precision=unitGetPrecisionFromIndex(currDoc->unitIndex());
00430 }
00431 bool setterH=true, setterV=true;
00432 switch(guideDirection)
00433 {
00434 case -1:
00435 guideInfoText = guideInfoTextNone;
00436 if (currAlignTo==ScribusDoc::alignGuide)
00437 setterH=setterV=false;
00438 break;
00439 case 0:
00440 guideInfoText = tr("Y: %1%2").arg(guidePosition * unitRatio, 0, 'f', precision).arg(suffix);
00441 if (currAlignTo==ScribusDoc::alignGuide)
00442 {
00443 setterV=false;
00444 setterH=true;
00445 }
00446 break;
00447 case 1:
00448 guideInfoText = tr("X: %1%2").arg(guidePosition * unitRatio, 0, 'f', precision).arg(suffix);
00449 if (currAlignTo==ScribusDoc::alignGuide)
00450 {
00451 setterV=true;
00452 setterH=false;
00453 }
00454 break;
00455 }
00456 bool setterO=true;
00457 if (currAlignTo==ScribusDoc::alignGuide)
00458 setterO=false;
00459
00460 alignLeftInToolButton->setEnabled(setterV);
00461 alignLeftOutToolButton->setEnabled(setterO);
00462 alignRightInToolButton->setEnabled(setterV);
00463 alignRightOutToolButton->setEnabled(setterO);
00464 alignCenterHorToolButton->setEnabled(setterV);
00465
00466 alignTopInToolButton->setEnabled(setterH);
00467 alignTopOutToolButton->setEnabled(setterO);
00468 alignBottomInToolButton->setEnabled(setterH);
00469 alignBottomOutToolButton->setEnabled(setterO);
00470 alignCenterVerToolButton->setEnabled(setterH);
00471
00472 alignGuideLineEdit->setText(guideInfoText);
00473 }