diff options
| author | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
|---|---|---|
| committer | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
| commit | 7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch) | |
| tree | 4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/nodeeditpalette.cpp | |
| download | scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip | |
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/nodeeditpalette.cpp')
| -rw-r--r-- | scribus/nodeeditpalette.cpp | 953 |
1 files changed, 953 insertions, 0 deletions
diff --git a/scribus/nodeeditpalette.cpp b/scribus/nodeeditpalette.cpp new file mode 100644 index 0000000..a51f995 --- /dev/null +++ b/scribus/nodeeditpalette.cpp @@ -0,0 +1,953 @@ +/* +For general Scribus (>=1.3.2) copyright and licensing information please refer +to the COPYING file provided with the program. Following this notice may exist +a copyright and/or license notice that predates the release of Scribus 1.3.2 +for which a new license (GPL+exception) is in place. +*/ + +#include <QEvent> + +#include "nodeeditpalette.h" +#include "page.h" +#include "pageitem.h" +#include "scribusview.h" +#include "selection.h" +#include "undomanager.h" +#include "undostate.h" +#include "units.h" +#include "util_icon.h" + +NodePalette::NodePalette( QWidget* parent) : ScrPaletteBase( parent, "nodePalette", false, 0) +{ + QSize iconSize = QSize(22, 22); + doc=0; + unitRatio=1.0; + vboxLayout = new QVBoxLayout(this); + vboxLayout->setSpacing(2); + vboxLayout->setMargin(5); + gridLayout = new QGridLayout(); + gridLayout->setSpacing(2); + gridLayout->setMargin(0); + MoveNode = new QToolButton(this); + MoveNode->setText( "" ); + MoveNode->setIcon(QIcon(loadIcon("MoveNode.png"))); + MoveNode->setIconSize(iconSize); + MoveNode->setContentsMargins(0, 0, 0, 0); + MoveNode->setCheckable(true); + MoveNode->setChecked(true); + MoveNode->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(MoveNode, 0, 0, 1, 1); + + AddNode = new QToolButton(this); + AddNode->setIcon(QIcon(loadIcon("AddNode.png"))); + AddNode->setIconSize(iconSize); + AddNode->setContentsMargins(0, 0, 0, 0); + AddNode->setEnabled(true); + AddNode->setCheckable(true); + AddNode->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(AddNode, 0, 1, 1, 1); + + DeleteNode = new QToolButton(this); + DeleteNode->setIcon(QIcon(loadIcon("DeleteNode.png"))); + DeleteNode->setIconSize(iconSize); + DeleteNode->setContentsMargins(0, 0, 0, 0); + DeleteNode->setEnabled(true); + DeleteNode->setCheckable(true); + DeleteNode->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(DeleteNode, 0, 2, 1, 1); + + ResNode = new QToolButton(this); + ResNode->setIcon(QIcon(loadIcon("ResetNode.png"))); + ResNode->setIconSize(iconSize); + ResNode->setContentsMargins(0, 0, 0, 0); + ResNode->setEnabled(true); + ResNode->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(ResNode, 0, 3, 1, 1); + + MoveControl = new QToolButton(this); + MoveControl->setIcon(QIcon(loadIcon("MoveKontrol.png"))); + MoveControl->setIconSize(iconSize); + MoveControl->setContentsMargins(0, 0, 0, 0); + MoveControl->setCheckable(true); + MoveControl->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(MoveControl, 1, 0, 1, 1); + + AsymMove = new QToolButton(this); + AsymMove->setIcon(QIcon(loadIcon("MoveAsym.png"))); + AsymMove->setIconSize(iconSize); + AsymMove->setContentsMargins(0, 0, 0, 0); + AsymMove->setEnabled(false); + AsymMove->setCheckable(true); + AsymMove->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(AsymMove, 1, 1, 1, 1); + + SymMove = new QToolButton(this); + SymMove->setIcon(QIcon(loadIcon("MoveSym.png"))); + SymMove->setIconSize(iconSize); + SymMove->setContentsMargins(0, 0, 0, 0); + SymMove->setEnabled(false); + SymMove->setCheckable(true); + SymMove->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(SymMove, 1, 2, 1, 1); + + Res1Node = new QToolButton(this); + Res1Node->setIcon(QIcon(loadIcon("Reset1Node.png"))); + Res1Node->setIconSize(iconSize); + Res1Node->setContentsMargins(0, 0, 0, 0); + Res1Node->setEnabled(false); + Res1Node->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(Res1Node, 1, 3, 1, 1); + + PolySplit = new QToolButton(this); + PolySplit->setEnabled( false ); + PolySplit->setCheckable( true ); + PolySplit->setIcon(QIcon(loadIcon("PolyCut.png"))); + PolySplit->setIconSize(iconSize); + PolySplit->setContentsMargins(0, 0, 0, 0); + PolySplit->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(PolySplit, 2, 0, 1, 1); + + BezierClose = new QToolButton(this); + BezierClose->setEnabled( false ); + BezierClose->setIcon(QIcon(loadIcon("BezierClose.png"))); + BezierClose->setIconSize(iconSize); + BezierClose->setContentsMargins(0, 0, 0, 0); + BezierClose->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(BezierClose, 2, 1, 1, 1); + + PolyMirrorH = new QToolButton(this); + PolyMirrorH->setIcon(QIcon(loadIcon("hmirror.png"))); + PolyMirrorH->setIconSize(iconSize); + PolyMirrorH->setContentsMargins(0, 0, 0, 0); + PolyMirrorH->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(PolyMirrorH, 2, 2, 1, 1); + + PolyMirrorV = new QToolButton(this); + PolyMirrorV->setIcon(QIcon(loadIcon("vmirror.png"))); + PolyMirrorV->setIconSize(iconSize); + PolyMirrorV->setContentsMargins(0, 0, 0, 0); + PolyMirrorV->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + gridLayout->addWidget(PolyMirrorV, 2, 3, 1, 1); + + PolyShearL = new QToolButton(this); + PolyShearL->setIcon(QIcon(loadIcon("22/transform-shear-left.png"))); + PolyShearL->setIconSize(iconSize); + PolyShearL->setContentsMargins(0, 0, 0, 0); + PolyShearL->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + PolyShearL->setAutoRepeat(true); + gridLayout->addWidget(PolyShearL, 3, 0, 1, 1); + + PolyShearR = new QToolButton(this); + PolyShearR->setIcon(QIcon(loadIcon("22/transform-shear-right.png"))); + PolyShearR->setIconSize(iconSize); + PolyShearR->setContentsMargins(0, 0, 0, 0); + PolyShearR->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + PolyShearR->setAutoRepeat(true); + gridLayout->addWidget(PolyShearR, 3, 1, 1, 1); + + PolyShearU = new QToolButton(this); + PolyShearU->setIcon(QIcon(loadIcon("22/transform-shear-up.png"))); + PolyShearU->setIconSize(iconSize); + PolyShearU->setContentsMargins(0, 0, 0, 0); + PolyShearU->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + PolyShearU->setAutoRepeat(true); + gridLayout->addWidget(PolyShearU, 3, 2, 1, 1); + + PolyShearD = new QToolButton(this); + PolyShearD->setIcon(QIcon(loadIcon("22/transform-shear-down.png"))); + PolyShearD->setIconSize(iconSize); + PolyShearD->setContentsMargins(0, 0, 0, 0); + PolyShearD->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3))); + PolyShearD->setAutoRepeat(true); + gridLayout->addWidget(PolyShearD, 3, 3, 1, 1); + vboxLayout->addLayout(gridLayout); + + gridLayout1 = new QGridLayout(); + gridLayout1->setSpacing(5); + gridLayout1->setMargin(0); + + RotateCCW = new QToolButton(this); + RotateCCW->setIcon(QIcon(loadIcon("rotate_ccw.png"))); + RotateCCW->setIconSize(iconSize); + RotateCCW->setContentsMargins(0, 0, 0, 0); + RotateCCW->setAutoRepeat(true); + gridLayout1->addWidget(RotateCCW, 0, 0, 1, 1); + + RotateCW = new QToolButton(this); + RotateCW->setIcon(QIcon(loadIcon("rotate_cw.png"))); + RotateCW->setIconSize(iconSize); + RotateCW->setContentsMargins(0, 0, 0, 0); + RotateCW->setAutoRepeat(true); + gridLayout1->addWidget(RotateCW, 0, 1, 1, 1); + + RotVal = new QSpinBox(this); + RotVal->setMinimum(1); + RotVal->setMaximum(180); + RotVal->setValue(1); + RotVal->setSuffix( QString::fromUtf8(" °")); + gridLayout1->addWidget(RotVal, 0, 2, 1, 1); + + Expand = new QToolButton(this); + Expand->setIcon(QIcon(loadIcon("expand.png"))); + Expand->setIconSize(iconSize); + Expand->setContentsMargins(0, 0, 0, 0); + Expand->setAutoRepeat(true); + gridLayout1->addWidget(Expand, 1, 0, 1, 1); + + Shrink = new QToolButton(this); + Shrink->setIcon(QIcon(loadIcon("crop.png"))); + Shrink->setIconSize(iconSize); + Shrink->setContentsMargins(0, 0, 0, 0); + Shrink->setAutoRepeat(true); + gridLayout1->addWidget(Shrink, 1, 1, 1, 1); + + scalePercentage = new QSpinBox(this); + scalePercentage->setMinimum(1); + scalePercentage->setMaximum(100); + scalePercentage->setValue(10); + gridLayout1->addWidget(scalePercentage, 1, 2, 1, 1); + + Enlarge = new QToolButton(this); + Enlarge->setIcon(QIcon(loadIcon("expand.png"))); + Enlarge->setIconSize(iconSize); + Enlarge->setContentsMargins(0, 0, 0, 0); + Enlarge->setAutoRepeat(true); + gridLayout1->addWidget(Enlarge, 2, 0, 1, 1); + + Reduce = new QToolButton(this); + Reduce->setIcon(QIcon(loadIcon("crop.png"))); + Reduce->setIconSize(iconSize); + Reduce->setContentsMargins(0, 0, 0, 0); + Reduce->setAutoRepeat(true); + gridLayout1->addWidget(Reduce, 2, 1, 1, 1); + + scaleDistance = new ScrSpinBox( 1, 16777215, this, 0); + scaleDistance->setValues(-16777215, 16777215, 2, 30); + gridLayout1->addWidget(scaleDistance, 2, 2, 1, 1); + vboxLayout->addLayout(gridLayout1); + + gridLayout2 = new QGridLayout(); + gridLayout2->setSpacing(5); + gridLayout2->setMargin(0); + + QSpacerItem* spacer = new QSpacerItem( 3, 3, QSizePolicy::Fixed, QSizePolicy::Fixed ); + vboxLayout->addItem(spacer); + AbsMode = new QGroupBox( "&Absolute Coordinates", this ); + AbsMode->setCheckable(true); + AbsMode->setChecked(false); + vboxLayout1 = new QVBoxLayout(AbsMode); + vboxLayout1->setSpacing(2); + vboxLayout1->setMargin(5); + absToCanvas = new QRadioButton( tr("to Canvas"), AbsMode); + vboxLayout1->addWidget(absToCanvas); + absToPage = new QRadioButton( tr("to Page"), AbsMode); + vboxLayout1->addWidget(absToPage); + absToCanvas->setChecked(true); + gridLayout2->addWidget(AbsMode, 1, 0, 1, 2); + + TextLabel1 = new QLabel(this); + gridLayout2->addWidget(TextLabel1, 2, 0, 1, 1); + + XSpin = new ScrSpinBox( 0, 16777215, this, 2 ); + XSpin->setEnabled(false); + gridLayout2->addWidget(XSpin, 2, 1, 1, 1); + + TextLabel2 = new QLabel(this); + gridLayout2->addWidget(TextLabel2, 3, 0, 1, 1); + + YSpin = new ScrSpinBox( 0, 16777215, this, 2 ); + YSpin->setEnabled(false); + gridLayout2->addWidget(YSpin, 3, 1, 1, 1); + TextLabel1->setBuddy(XSpin); + TextLabel2->setBuddy(YSpin); + + EditCont = new QCheckBox(this); + EditCont->setChecked(false); + gridLayout2->addWidget(EditCont, 4, 0, 1, 2); + + ResetCont = new QPushButton(this); + ResetCont->setEnabled(false); + gridLayout2->addWidget(ResetCont, 5, 0, 1, 2); + + ResetContClip = new QPushButton(this); + ResetContClip->setEnabled(true); + ResetContClip->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(6), static_cast<QSizePolicy::Policy>(6))); + ResetContClip->hide(); + gridLayout2->addWidget(ResetContClip, 6, 0, 1, 2); + + ResetShape2Clip = new QPushButton(this); + ResetShape2Clip->setEnabled(true); + ResetShape2Clip->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(6), static_cast<QSizePolicy::Policy>(6))); + ResetShape2Clip->hide(); + gridLayout2->addWidget(ResetShape2Clip, 7, 0, 1, 2); + + editEditButton = new QPushButton(this); + editEditButton->setDefault(true); + gridLayout2->addWidget(editEditButton, 8, 0, 1, 2); + + vboxLayout->addLayout(gridLayout2); + resize(QSize(170, 380).expandedTo(minimumSizeHint())); + + languageChange(); +} + +void NodePalette::connectSignals() +{ + // signals and slots connections + connect(editEditButton, SIGNAL(clicked()), this, SLOT(EndEdit())); + connect(DeleteNode, SIGNAL(clicked()), this, SLOT(DelN())); + connect(AddNode, SIGNAL(clicked()), this, SLOT(AddN())); + connect(MoveNode, SIGNAL(clicked()), this, SLOT(MoveN())); + connect(AsymMove, SIGNAL(clicked()), this, SLOT(SetAsym())); + connect(SymMove, SIGNAL(clicked()), this, SLOT(SetSym())); + connect(ResNode, SIGNAL(clicked()), this, SLOT(ResetControl())); + connect(Res1Node, SIGNAL(clicked()), this, SLOT(Reset1Control())); + connect(BezierClose, SIGNAL(clicked()), this, SLOT(CloseBezier())); + connect(PolySplit, SIGNAL(clicked()), this, SLOT(SplitPoly())); + connect(MoveControl, SIGNAL(clicked()), this, SLOT(MoveK())); + connect(XSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + connect(YSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + connect(PolyMirrorH, SIGNAL(clicked()), this, SLOT(MirrorH())); + connect(PolyMirrorV, SIGNAL(clicked()), this, SLOT(MirrorV())); + connect(PolyShearR, SIGNAL(clicked()), this, SLOT(ShearR())); + connect(PolyShearL, SIGNAL(clicked()), this, SLOT(ShearL())); + connect(PolyShearU, SIGNAL(clicked()), this, SLOT(ShearU())); + connect(PolyShearD, SIGNAL(clicked()), this, SLOT(ShearD())); + connect(RotateCCW, SIGNAL(clicked()), this, SLOT(doRotCCW())); + connect(RotateCW, SIGNAL(clicked()), this, SLOT(doRotCW())); + connect(Shrink, SIGNAL(clicked()), this, SLOT(doShrink())); + connect(Expand, SIGNAL(clicked()), this, SLOT(doExpand())); + connect(Reduce, SIGNAL(clicked()), this, SLOT(doReduce())); + connect(Enlarge, SIGNAL(clicked()), this, SLOT(doEnlarge())); + connect(AbsMode, SIGNAL(clicked()), this, SLOT(ToggleAbsMode())); + connect(absToCanvas, SIGNAL(clicked()), this, SLOT(ToggleAbsMode())); + connect(absToPage, SIGNAL(clicked()), this, SLOT(ToggleAbsMode())); + connect(EditCont, SIGNAL(clicked()), this, SLOT(ToggleConMode())); + connect(ResetCont, SIGNAL(clicked()), this, SLOT(ResetContour())); + connect(ResetContClip, SIGNAL(clicked()), this, SLOT(ResetContourToImageClip())); + connect(ResetShape2Clip, SIGNAL(clicked()), this, SLOT(ResetShapeToImageClip())); +} + +void NodePalette::disconnectSignals() +{ + // signals and slots disconnetions + disconnect(editEditButton, SIGNAL(clicked()), this, SLOT(EndEdit())); + disconnect(DeleteNode, SIGNAL(clicked()), this, SLOT(DelN())); + disconnect(AddNode, SIGNAL(clicked()), this, SLOT(AddN())); + disconnect(MoveNode, SIGNAL(clicked()), this, SLOT(MoveN())); + disconnect(AsymMove, SIGNAL(clicked()), this, SLOT(SetAsym())); + disconnect(SymMove, SIGNAL(clicked()), this, SLOT(SetSym())); + disconnect(ResNode, SIGNAL(clicked()), this, SLOT(ResetControl())); + disconnect(Res1Node, SIGNAL(clicked()), this, SLOT(Reset1Control())); + disconnect(BezierClose, SIGNAL(clicked()), this, SLOT(CloseBezier())); + disconnect(PolySplit, SIGNAL(clicked()), this, SLOT(SplitPoly())); + disconnect(MoveControl, SIGNAL(clicked()), this, SLOT(MoveK())); + disconnect(XSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + disconnect(YSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + disconnect(PolyMirrorH, SIGNAL(clicked()), this, SLOT(MirrorH())); + disconnect(PolyMirrorV, SIGNAL(clicked()), this, SLOT(MirrorV())); + disconnect(PolyShearR, SIGNAL(clicked()), this, SLOT(ShearR())); + disconnect(PolyShearL, SIGNAL(clicked()), this, SLOT(ShearL())); + disconnect(PolyShearU, SIGNAL(clicked()), this, SLOT(ShearU())); + disconnect(PolyShearD, SIGNAL(clicked()), this, SLOT(ShearD())); + disconnect(RotateCCW, SIGNAL(clicked()), this, SLOT(doRotCCW())); + disconnect(RotateCW, SIGNAL(clicked()), this, SLOT(doRotCW())); + disconnect(Shrink, SIGNAL(clicked()), this, SLOT(doShrink())); + disconnect(Expand, SIGNAL(clicked()), this, SLOT(doExpand())); + disconnect(Reduce, SIGNAL(clicked()), this, SLOT(doReduce())); + disconnect(Enlarge, SIGNAL(clicked()), this, SLOT(doEnlarge())); + disconnect(ResetCont, SIGNAL(clicked()), this, SLOT(ResetContour())); + disconnect(ResetContClip, SIGNAL(clicked()), this, SLOT(ResetContourToImageClip())); + disconnect(ResetShape2Clip, SIGNAL(clicked()), this, SLOT(ResetShapeToImageClip())); +} + +void NodePalette::setDoc(ScribusDoc *dc, ScribusView *vi) +{ + doc = dc; + view = vi; + + unitChange(); + disconnect(EditCont, SIGNAL(clicked()), this, SLOT(ToggleConMode())); + disconnect(AbsMode, SIGNAL(clicked()), this, SLOT(ToggleAbsMode())); + if (doc!=0) + { + YSpin->setNewUnit(doc->unitIndex()); + XSpin->setNewUnit(doc->unitIndex()); + } + AbsMode->setChecked(false); + EditCont->setChecked(false); + if (doc==0) + disconnectSignals(); + else + connectSignals(); +} + +void NodePalette::SplitPoly() +{ + if (doc==0) + return; + MoveN(); + doc->nodeEdit.submode = NodeEditContext::SPLIT_PATH; + PolySplit->setChecked(true); +} + +void NodePalette::IsOpen() +{ + if (doc==0) + return; + PolySplit->setChecked(false); + BezierClose->setEnabled(true); + PolySplit->setEnabled(true); + EditCont->setEnabled(false); +} + +void NodePalette::PolyStatus(int typ, uint size) +{ + if (doc==0) + return; + bool setter; + switch (typ) + { + case 6: + PolySplit->setEnabled(true); + BezierClose->setEnabled(false); + break; + case 7: + setter = size > 7 ? true : false; + BezierClose->setEnabled(setter); + PolySplit->setEnabled(setter); + break; + default: + BezierClose->setEnabled(false); + PolySplit->setEnabled(false); + break; + } +} + +void NodePalette::CloseBezier() +{ + if (doc==0) + return; + MoveN(); + PageItem *currItem = doc->m_Selection->itemAt(0); + PageItem* newItem = doc->convertItemTo(currItem, PageItem::Polygon); + doc->m_Selection->clear(); + doc->m_Selection->addItem(newItem); + newItem->update(); + BezierClose->setEnabled(false); + PolySplit->setEnabled(true); + EditCont->setEnabled(true); +} + +void NodePalette::doRotCCW() +{ + if (doc != 0) + view->TransformPoly(0, RotVal->value()); +} + +void NodePalette::doRotCW() +{ + if (doc != 0) + view->TransformPoly(1, RotVal->value()); +} + +void NodePalette::doShrink() +{ + if (doc != 0) + view->TransformPoly(2, 1, scalePercentage->value()); +} + +void NodePalette::doExpand() +{ + if (doc != 0) + view->TransformPoly(3, 1, scalePercentage->value()); +} + +void NodePalette::doReduce() +{ + if (doc != 0) + view->TransformPoly(8, 1, value2pts(scaleDistance->value(),doc->unitIndex())); +} + +void NodePalette::doEnlarge() +{ + if (doc != 0) + view->TransformPoly(9, 1, value2pts(scaleDistance->value(),doc->unitIndex())); +} + +void NodePalette::ShearR() +{ + if (doc != 0) + view->TransformPoly(5); +} + +void NodePalette::ShearL() +{ + if (doc != 0) + view->TransformPoly(4); +} + +void NodePalette::ShearU() +{ + if (doc != 0) + view->TransformPoly(6); +} + +void NodePalette::ShearD() +{ + if (doc != 0) + view->TransformPoly(7); +} + +void NodePalette::MirrorH() +{ + if (doc != 0) + doc->MirrorPolyH(doc->m_Selection->itemAt(0)); +} + +void NodePalette::MirrorV() +{ + if (doc != 0) + doc->MirrorPolyV(doc->m_Selection->itemAt(0)); +} + +void NodePalette::ResetControl() +{ + if (doc != 0) + doc->nodeEdit.resetControl(doc->m_Selection->itemAt(0)); +} + +void NodePalette::Reset1Control() +{ + if (doc != 0) + doc->nodeEdit.reset1Control(doc->m_Selection->itemAt(0)); +} + +void NodePalette::ResetContour() +{ + if (doc != 0) + { + PageItem *currItem = doc->m_Selection->itemAt(0); + if (UndoManager::undoEnabled()) + { + ItemState<FPointArray> *is = new ItemState<FPointArray>(Um::ResetContourLine, "",Um::IBorder); + is->set("RESET_CONTOUR", "reset_contour"); + is->setItem(doc->m_Selection->itemAt(0)->ContourLine); + UndoManager::instance()->action(currItem, is); + } + //FIXME make an internal item copy poline to contourline member + currItem->ContourLine = currItem->PoLine.copy(); + currItem->ClipEdited = true; + view->DrawNew(); + } +} + +void NodePalette::ResetContourToImageClip() +{ + if (doc != 0) + { + PageItem *currItem = doc->m_Selection->itemAt(0); + currItem->ContourLine = currItem->imageClip.copy(); + currItem->ClipEdited = true; + view->DrawNew(); + } +} + +void NodePalette::ResetShapeToImageClip() +{ + if (doc != 0) + { + PageItem *currItem = doc->m_Selection->itemAt(0); + currItem->PoLine = currItem->imageClip.copy(); + currItem->ClipEdited = true; + currItem->FrameType = 3; + doc->AdjustItemSize(currItem); + emit DocChanged(); + } +} + +void NodePalette::MovePoint() +{ + if (doc==0) + return; + if (doc->nodeEdit.submode == NodeEditContext::MOVE_POINT) + { + PageItem *currItem = doc->m_Selection->itemAt(0); + FPoint zp; + FPoint np(XSpin->value()/doc->unitRatio(), YSpin->value()/doc->unitRatio()); + if (AbsMode->isChecked()) + { + if (absToCanvas->isChecked()) + zp = FPoint(currItem->xPos(), currItem->yPos()); + else + zp = FPoint(currItem->xPos() - doc->currentPage()->xOffset(), currItem->yPos() - doc->currentPage()->yOffset()); + np -= zp; + } + doc->nodeEdit.moveClipPoint(currItem, np); + doc->AdjustItemSize(currItem); + emit DocChanged(); + } +} + +void NodePalette::SetSym() +{ + if (doc != 0) + doc->nodeEdit.MoveSym = true; + SymMove->setChecked(true); + AsymMove->setChecked(false); +} + +void NodePalette::SetAsym() +{ + if (doc != 0) + doc->nodeEdit.MoveSym = false; + SymMove->setChecked(false); + AsymMove->setChecked(true); +} + +void NodePalette::SetXY(double x, double y) +{ + if (doc==0) + return; + FPoint zp(0.0, 0.0); + disconnect(XSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + disconnect(YSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + if (AbsMode->isChecked()) + { + if (absToCanvas->isChecked()) + zp = FPoint(doc->m_Selection->itemAt(0)->xPos(), doc->m_Selection->itemAt(0)->yPos()); + else + zp = FPoint(doc->m_Selection->itemAt(0)->xPos() - doc->currentPage()->xOffset(), doc->m_Selection->itemAt(0)->yPos() - doc->currentPage()->yOffset()); + } + XSpin->setValue((x + zp.x())*doc->unitRatio()); + YSpin->setValue((y + zp.y())*doc->unitRatio()); + connect(XSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + connect(YSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); +} + +void NodePalette::ToggleAbsMode() +{ + if (doc==0) + return; + FPoint zp(0.0, 0.0); + disconnect(XSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + disconnect(YSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + FPointArray Clip; + FPoint np(0.0, 0.0); + if (EditCont->isChecked()) + Clip = doc->m_Selection->itemAt(0)->ContourLine; + else + Clip = doc->m_Selection->itemAt(0)->PoLine; + if (doc->nodeEdit.SelNode.count() != 0) + np = Clip.point(doc->nodeEdit.SelNode.at(0)); + if (AbsMode->isChecked()) + { + XSpin->setMinimum(-16777215); + YSpin->setMinimum(-16777215); + if (absToCanvas->isChecked()) + zp = FPoint(doc->m_Selection->itemAt(0)->xPos(), doc->m_Selection->itemAt(0)->yPos()); + else + zp = FPoint(doc->m_Selection->itemAt(0)->xPos() - doc->currentPage()->xOffset(), doc->m_Selection->itemAt(0)->yPos() - doc->currentPage()->yOffset()); + } + else + { + XSpin->setMinimum(0); + YSpin->setMinimum(0); + } + XSpin->setValue((np.x() + zp.x())*doc->unitRatio()); + YSpin->setValue((np.y() + zp.y())*doc->unitRatio()); + connect(XSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + connect(YSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); +} + +void NodePalette::ToggleConMode() +{ + disconnect(XSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + disconnect(YSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + if (doc != 0) + { + doc->nodeEdit.isContourLine = EditCont->isChecked(); + if (EditCont->isChecked()) + { + BezierClose->setEnabled(false); + PolySplit->setEnabled(false); + ResetCont->setEnabled(true); + ResetContClip->setEnabled(true); + XSpin->setMinimum(-16777215); + YSpin->setMinimum(-16777215); + } + else + { + BezierClose->setEnabled(false); + PolySplit->setEnabled(true); + ResetCont->setEnabled(false); + ResetContClip->setEnabled(false); + if (AbsMode->isChecked()) + { + XSpin->setMinimum(-16777215); + YSpin->setMinimum(-16777215); + } + else + { + XSpin->setMinimum(0); + YSpin->setMinimum(0); + } + } + view->DrawNew(); + } + connect(XSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); + connect(YSpin, SIGNAL(valueChanged(double)), this, SLOT(MovePoint())); +} + +void NodePalette::HaveNode(bool have, bool mov) +{ + if (doc==0) + return; + bool setter = have ? true : false; + if (doc->nodeEdit.SelNode.count() > 1) + { + XSpin->setEnabled(false); + YSpin->setEnabled(false); + } + else + { + XSpin->setEnabled(setter); + YSpin->setEnabled(setter); + } + if (setter == true) + { + if (doc->nodeEdit.EdPoints) + ResNode->setEnabled(setter); + else + Res1Node->setEnabled(setter); + } + else + { + ResNode->setEnabled(setter); + Res1Node->setEnabled(setter); + } + if (doc->nodeEdit.submode == NodeEditContext::MOVE_POINT) + { + disconnect(AsymMove, SIGNAL(clicked()), this, SLOT(SetAsym())); + disconnect(SymMove, SIGNAL(clicked()), this, SLOT(SetSym())); + if (mov) + { + SymMove->setChecked(true); + AsymMove->setChecked(false); + } + else + { + AsymMove->setChecked(true); + SymMove->setChecked(false); + } + connect(AsymMove, SIGNAL(clicked()), this, SLOT(SetAsym())); + connect(SymMove, SIGNAL(clicked()), this, SLOT(SetSym())); + } + if (doc->nodeEdit.submode == NodeEditContext::DEL_POINT) + { + uint cc; + bool leaveEd = false; + PageItem*currItem=doc->m_Selection->itemAt(0); + if (doc->nodeEdit.isContourLine) + cc = currItem->ContourLine.size(); + else + cc = currItem->PoLine.size(); + if (currItem->asPolyLine()) + { + if (cc < 5) + leaveEd = true; + } + else + { + if (cc < 13) + leaveEd = true; + } + if (leaveEd) + { + MoveN(); + MoveControl->setEnabled(true); + } + } +} + +void NodePalette::MoveK() +{ + if (doc==0) + return; + doc->nodeEdit.submode = NodeEditContext::MOVE_POINT; + doc->nodeEdit.EdPoints = false; + doc->nodeEdit.ClRe = -1; + doc->nodeEdit.ClRe2 = -1; + doc->nodeEdit.SegP1 = -1; + doc->nodeEdit.SegP2 = -1; + if (doc->m_Selection->count() > 0) + doc->m_Selection->itemAt(0)->update(); + SymMove->setEnabled(true); + AsymMove->setEnabled(true); + Res1Node->setEnabled(true); + ResNode->setEnabled(false); + AddNode->setEnabled(false); + DeleteNode->setEnabled(false); + MoveNode->setChecked(false); + MoveControl->setChecked(true); + DeleteNode->setChecked(false); + AddNode->setChecked(false); +} + +void NodePalette::MoveN() +{ + if (doc==0) + return; + doc->nodeEdit.submode = NodeEditContext::MOVE_POINT; + doc->nodeEdit.EdPoints = true; + doc->nodeEdit.ClRe = -1; + doc->nodeEdit.ClRe2 = -1; + doc->nodeEdit.SegP1 = -1; + doc->nodeEdit.SegP2 = -1; + if (doc->m_Selection->count() > 0) + doc->m_Selection->itemAt(0)->update(); + ResNode->setEnabled(true); + AddNode->setEnabled(true); + DeleteNode->setEnabled(true); + SymMove->setEnabled(false); + AsymMove->setEnabled(false); + Res1Node->setEnabled(false); + MoveNode->setChecked(true); + MoveControl->setChecked(false); + DeleteNode->setChecked(false); + AddNode->setChecked(false); +} + +void NodePalette::AddN() +{ + if (doc==0) + return; + doc->nodeEdit.submode = NodeEditContext::ADD_POINT; + doc->nodeEdit.EdPoints = true; + SymMove->setEnabled(false); + AsymMove->setEnabled(false); + ResNode->setEnabled(false); + Res1Node->setEnabled(false); + AddNode->setChecked(true); + DeleteNode->setChecked(false); +} + +void NodePalette::DelN() +{ + if (doc==0) + return; + doc->nodeEdit.submode = NodeEditContext::DEL_POINT; + doc->nodeEdit.EdPoints = true; + SymMove->setEnabled(false); + AsymMove->setEnabled(false); + ResNode->setEnabled(false); + Res1Node->setEnabled(false); + AddNode->setChecked(false); + DeleteNode->setChecked(true); +} + +void NodePalette::closeEvent(QCloseEvent *ce) +{ + if (doc != 0) + { + MoveN(); + doc->nodeEdit.ClRe = -1; + doc->nodeEdit.ClRe2 = -1; + doc->nodeEdit.SegP1 = -1; + doc->nodeEdit.SegP2 = -1; + doc->nodeEdit.SelNode.clear(); + } + PolySplit->setEnabled( false ); + BezierClose->setEnabled( false ); + emit Schliessen(); + ScrPaletteBase::closeEvent(ce); +} + +void NodePalette::EndEdit() +{ + if (doc != 0) + { + MoveN(); + doc->nodeEdit.ClRe = -1; + doc->nodeEdit.ClRe2 = -1; + doc->nodeEdit.SegP1 = -1; + doc->nodeEdit.SegP2 = -1; + doc->nodeEdit.SelNode.clear(); + EditCont->setChecked(false); + ToggleConMode(); + } + PolySplit->setEnabled( false ); + BezierClose->setEnabled( false ); + EditCont->setChecked(false); + emit Schliessen(); +} + +void NodePalette::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) + { + languageChange(); + } + else + QWidget::changeEvent(e); +} + +void NodePalette::languageChange() +{ + setWindowTitle( tr( "Nodes" ) ); + scalePercentage->setSuffix( tr(" %")); + + AbsMode->setTitle( tr("&Absolute Coordinates")); + absToCanvas->setText( tr("to Canvas")); + absToPage->setText( tr("to Page")); + TextLabel1->setText( tr("&X-Pos:")); + TextLabel2->setText( tr("&Y-Pos:")); + EditCont->setText( tr("Edit &Contour Line")); + ResetCont->setText( tr("&Reset Contour Line")); + ResetContClip->setText( tr("Set Contour to Image Clip")); + ResetShape2Clip->setText( tr("Set Shape to Image Clip")); + editEditButton->setText( tr("&End Editing")); + MoveNode->setToolTip( tr("Move Nodes")); + MoveControl->setToolTip( tr("Move Control Points")); + AddNode->setToolTip( tr("Add Nodes")); + DeleteNode->setToolTip( tr("Delete Nodes")); + AsymMove->setToolTip( tr("Move Control Points Independently")); + SymMove->setToolTip( tr("Move Control Points Symmetrical")); + ResNode->setToolTip( tr("Reset Control Points")); + Res1Node->setToolTip( tr("Reset this Control Point")); + PolySplit->setToolTip( tr("Open a Polygon or Cuts a Bezier Curve")); + BezierClose->setToolTip( tr("Close this Bezier Curve")); + PolyMirrorH->setToolTip( tr("Mirror the Path Horizontally")); + PolyMirrorV->setToolTip( tr("Mirror the Path Vertically")); + PolyShearR->setToolTip( tr("Shear the Path Horizontally to the Right")); + PolyShearL->setToolTip( tr("Shear the Path Horizontally to the Left")); + PolyShearU->setToolTip( tr("Shear the Path Vertically Up")); + PolyShearD->setToolTip( tr("Shear the Path Vertically Down")); + RotateCCW->setToolTip( tr("Rotate the Path Counter-Clockwise")); + RotateCW->setToolTip( tr("Rotate the Path Clockwise")); + Shrink->setToolTip( tr("Shrink the Size of the Path by shown %")); + Expand->setToolTip( tr("Enlarge the Size of the Path by shown %")); + Reduce->setToolTip( tr("Reduce the Size of the Path by the shown value")); + Enlarge->setToolTip( tr("Enlarge the Size of the Path by the shown value")); + RotVal->setToolTip( tr("Angle of Rotation")); + scalePercentage->setToolTip( tr("% to Enlarge or Shrink By")); + scaleDistance->setToolTip( tr("Value to Enlarge or Shrink By")); + EditCont->setToolTip( tr("Activate Contour Line Editing Mode")); + ResetCont->setToolTip( tr("Reset the Contour Line to the Original Shape of the Frame")); + ResetContClip->setToolTip( tr("Reset the Contour Line to the Clipping Path of the Image")); + ResetShape2Clip->setToolTip( tr("Set the Shape to the Clipping Path of the Image")); + AbsMode->setToolTip( "<qt>" + tr("When checked use coordinates relative to the page, otherwise coordinates are relative to the Object.") + "</qt>"); +} + +void NodePalette::unitChange() +{ + if (doc==0) + return; + unitRatio = doc->unitRatio(); + scaleDistance->setNewUnit(doc->unitIndex()); +} + +ScribusDoc* NodePalette::currentDocument() const +{ + return doc; +} |
