| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include "qg_snaptoolbar.h" |
| |
|
| | #include "lc_actiongroupmanager.h" |
| | #include "lc_snapoptionswidgetsholder.h" |
| | #include "qg_actionhandler.h" |
| | #include "rs_settings.h" |
| |
|
| | QAction* QG_SnapToolBar::justAddAction(QString name, const QMap<QString, QAction*> &actionsMap){ |
| | auto* action = actionsMap[name]; |
| | addAction(action); |
| | return action; |
| | } |
| |
|
| | QAction* QG_SnapToolBar::addOwnAction(QString name, const QMap<QString, QAction*> &actionsMap){ |
| | auto* action = actionsMap[name]; |
| | connect(action, &QAction::triggered, this, &QG_SnapToolBar::actionTriggered); |
| | addAction(action); |
| | return action; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | QG_SnapToolBar::QG_SnapToolBar(QWidget* parent, QG_ActionHandler* ah, LC_ActionGroupManager* agm, const QMap<QString, QAction*> &actionsMap) |
| | : QToolBar(parent), m_actionHandler(ah){ |
| |
|
| | auto action = justAddAction("ExclusiveSnapMode", actionsMap); |
| | connect(action, &QAction::triggered, agm, &LC_ActionGroupManager::toggleExclusiveSnapMode); |
| |
|
| | |
| | m_actionSnapMiddleManual = justAddAction("SnapMiddleManual", actionsMap); |
| | connect(m_actionSnapMiddleManual, &QAction::triggered, m_actionHandler, &QG_ActionHandler::slotSnapMiddleManual); |
| |
|
| | |
| |
|
| | m_actionSnapFree = addOwnAction("SnapFree", actionsMap); |
| | m_actionSnapGrid = addOwnAction("SnapGrid", actionsMap); |
| | m_actionSnapEnd = addOwnAction("SnapEnd", actionsMap); |
| | m_actionSnapOnEntity = addOwnAction("SnapEntity", actionsMap); |
| | m_actionSnapCenter = addOwnAction("SnapCenter", actionsMap); |
| | m_actionSnapMiddle = addOwnAction("SnapMiddle", actionsMap); |
| | m_actionSnapDistance = addOwnAction("SnapDistance", actionsMap); |
| | m_actionSnapIntersection = addOwnAction("SnapIntersection", actionsMap); |
| |
|
| | addSeparator(); |
| |
|
| | m_actionRestrictHorizontal = addOwnAction("RestrictHorizontal", actionsMap); |
| | m_actionRestrictVertical = addOwnAction("RestrictVertical", actionsMap); |
| |
|
| | m_actionRestrictOrthogonal = justAddAction("RestrictOrthogonal", actionsMap); |
| | connect(m_actionRestrictOrthogonal, &QAction::triggered, this, &QG_SnapToolBar::slotRestrictOrthogonal); |
| |
|
| | m_actionRestrictNothing = justAddAction("RestrictNothing", actionsMap); |
| | connect(m_actionRestrictNothing, &QAction::triggered, this, &QG_SnapToolBar::slotRestrictNothing); |
| | |
| | |
| | |
| | m_actionRestrictNothing->setVisible(false); |
| |
|
| | addSeparator(); |
| |
|
| | m_actionRelZero = justAddAction("SetRelativeZero", actionsMap); |
| |
|
| | m_actionLockRelZero = justAddAction("LockRelativeZero", actionsMap); |
| | m_actionLockRelZero->setCheckable(true); |
| | connect(m_actionLockRelZero, &QAction::triggered, m_actionHandler, &QG_ActionHandler::slotLockRelativeZero); |
| |
|
| |
|
| | |
| | setSnaps( RS_SnapMode::fromInt(LC_GET_ONE_INT("Snap", "SnapMode", 0))); |
| | } |
| |
|
| | void QG_SnapToolBar::slotUnsetSnapMiddleManual(){ |
| | m_actionSnapMiddleManual->setChecked(false); |
| | } |
| |
|
| | void QG_SnapToolBar::saveSnapMode(){ |
| | |
| | unsigned int snapFlags {RS_SnapMode::toInt( getSnaps())}; |
| | LC_SET_ONE("Snap", "SnapMode", QString::number(snapFlags)); |
| | |
| | } |
| |
|
| | void QG_SnapToolBar::setSnaps ( RS_SnapMode const& s ){ |
| | m_actionSnapFree->setChecked(s.snapFree); |
| | m_actionSnapGrid->setChecked(s.snapGrid); |
| | m_actionSnapEnd->setChecked(s.snapEndpoint); |
| | m_actionSnapOnEntity->setChecked(s.snapOnEntity); |
| | m_actionSnapCenter->setChecked(s.snapCenter); |
| | m_actionSnapMiddle->setChecked(s.snapMiddle); |
| | m_actionSnapDistance->setChecked(s.snapDistance); |
| | m_actionSnapIntersection->setChecked(s.snapIntersection); |
| |
|
| | bool restHorizontal = s.restriction == RS2::RestrictHorizontal; |
| | bool restOrtho = s.restriction == RS2::RestrictOrthogonal; |
| | bool restVertical = s.restriction == RS2::RestrictVertical; |
| |
|
| | m_actionRestrictHorizontal->setChecked(restHorizontal || restOrtho); |
| | m_actionRestrictVertical->setChecked(restVertical || restOrtho); |
| | m_actionRestrictOrthogonal->setChecked(restOrtho); |
| | m_actionRestrictNothing->setChecked(s.restriction==RS2::RestrictNothing); |
| | } |
| |
|
| | RS_SnapMode QG_SnapToolBar::getSnaps() const{ |
| | RS_SnapMode s; |
| |
|
| | s.snapFree = m_actionSnapFree->isChecked(); |
| | s.snapGrid = m_actionSnapGrid->isChecked(); |
| | s.snapEndpoint = m_actionSnapEnd->isChecked(); |
| | s.snapOnEntity = m_actionSnapOnEntity->isChecked(); |
| | s.snapCenter = m_actionSnapCenter->isChecked(); |
| | s.snapMiddle = m_actionSnapMiddle->isChecked(); |
| | s.snapDistance = m_actionSnapDistance->isChecked(); |
| | s.snapIntersection = m_actionSnapIntersection->isChecked(); |
| | |
| | |
| | int const rH = (m_actionRestrictHorizontal != nullptr && m_actionRestrictHorizontal->isChecked())? 1:0; |
| | int const rV = (m_actionRestrictVertical != nullptr && m_actionRestrictVertical->isChecked())? 2: 0; |
| | switch (rH + rV) { |
| | case 3: |
| | s.restriction = RS2::RestrictOrthogonal; |
| | break; |
| | case 2: |
| | s.restriction = RS2::RestrictVertical; |
| | break; |
| | case 1: |
| | s.restriction = RS2::RestrictHorizontal; |
| | break; |
| | default: |
| | s.restriction = RS2::RestrictNothing; |
| | } |
| | return s; |
| | } |
| |
|
| | bool QG_SnapToolBar::lockedRelativeZero() const{ |
| | return m_actionLockRelZero->isChecked(); |
| | } |
| |
|
| | void QG_SnapToolBar::setLockedRelativeZero(bool on){ |
| | m_actionLockRelZero->setChecked(on); |
| | m_actionLockRelZero->setToolTip(tr("Relative zero position is %1").arg(on ? tr("locked") : tr("unlocked"))); |
| | } |
| |
|
| | void QG_SnapToolBar::setUCSActive(bool on){ |
| | ucsMode->setChecked(on); |
| | ucsMode->setToolTip(tr("Coordinate system: %1").arg(on ? tr("User") : tr("World"))); |
| | } |
| |
|
| | |
| |
|
| | void QG_SnapToolBar::slotRestrictNothing(bool checked){ |
| | if (checked) { |
| | m_actionRestrictVertical->setChecked(!checked); |
| | m_actionRestrictHorizontal->setChecked(!checked); |
| | m_actionRestrictOrthogonal->setChecked(!checked); |
| | m_actionRestrictNothing->setChecked(checked); |
| | actionTriggered(); |
| | } |
| | } |
| |
|
| | void QG_SnapToolBar::slotRestrictOrthogonal(bool checked){ |
| | m_actionRestrictVertical->setChecked(checked); |
| | m_actionRestrictHorizontal->setChecked(checked); |
| | m_actionRestrictNothing->setChecked(!checked); |
| | actionTriggered(); |
| | } |
| |
|
| | void QG_SnapToolBar::slotEnableRelativeZeroSnaps(const bool enabled){ |
| | m_actionRelZero->setEnabled(enabled); |
| | m_actionLockRelZero->setEnabled(enabled); |
| | } |
| |
|
| | void QG_SnapToolBar::actionTriggered(){ |
| | m_actionHandler->setSnaps(getSnaps()); |
| | } |
| |
|
| | LC_SnapOptionsWidgetsHolder *QG_SnapToolBar::getSnapOptionsHolder() { |
| | auto* snapOptionsHolder = new LC_SnapOptionsWidgetsHolder(this); |
| | snapOptionsHolder->setLocatedOnLeft(false); |
| | addWidget(snapOptionsHolder); |
| | return snapOptionsHolder; |
| | } |
| |
|