#include <gp_Lin.hxx>
#include <XGUI_ViewerPrs.h>
+#include <XGUI_Constants.h>
#include <SketchPlugin_Line.h>
}
void PartSet_OperationSketchLine::init(boost::shared_ptr<ModelAPI_Feature> theFeature,
- const std::list<XGUI_ViewerPrs>& /*thePresentations*/)
+ const std::list<XGUI_ViewerPrs>& /*theSelected*/,
+ const std::list<XGUI_ViewerPrs>& /*theHighlighted*/)
{
if (!theFeature || theFeature->getKind() != "SketchLine")
return;
}
void PartSet_OperationSketchLine::mouseReleased(QMouseEvent* theEvent, Handle(V3d_View) theView,
- const std::list<XGUI_ViewerPrs>& theSelected)
+ const std::list<XGUI_ViewerPrs>& theSelected,
+ const std::list<XGUI_ViewerPrs>& /*theHighlighted*/)
{
double aX, anY;
case SM_FirstPoint: {
setLinePoint(feature(), aX, anY, LINE_ATTR_START);
setLinePoint(feature(), aX, anY, LINE_ATTR_END);
- myPointSelectionMode = SM_SecondPoint;
+ flushUpdated();
+
+ setPointSelectionMode(SM_SecondPoint);
}
break;
case SM_SecondPoint: {
setLinePoint(feature(), aX, anY, LINE_ATTR_END);
- myPointSelectionMode = SM_DonePoint;
- }
+ flushUpdated();
+
+ setPointSelectionMode(SM_DonePoint);
+ }
break;
default:
break;
PartSet_Tools::ConvertTo2D(aPoint, sketch(), theView, aX, anY);
setLinePoint(feature(), aX, anY, LINE_ATTR_START);
setLinePoint(feature(), aX, anY, LINE_ATTR_END);
+ flushUpdated();
+ emit focusActivated(LINE_ATTR_START);
}
break;
case SM_SecondPoint:
{
gp_Pnt aPoint = PartSet_Tools::ConvertClickToPoint(theEvent->pos(), theView);
setLinePoint(aPoint, theView, LINE_ATTR_END);
+ flushUpdated();
+ emit focusActivated(LINE_ATTR_END);
}
break;
case SM_DonePoint:
}
}
+void PartSet_OperationSketchLine::keyReleased(std::string theName, QKeyEvent* theEvent)
+{
+ int aKeyType = theEvent->key();
+ if (!theName.empty() && aKeyType == Qt::Key_Return) {
+ if (theName == LINE_ATTR_START) {
+ setPointSelectionMode(SM_SecondPoint, false);
+ }
+ else if (theName == LINE_ATTR_END) {
+ setPointSelectionMode(SM_DonePoint, false);
+ }
+ }
+ keyReleased(theEvent->key());
+}
+
void PartSet_OperationSketchLine::keyReleased(const int theKey)
{
switch (theKey) {
case Qt::Key_Return: {
+ if (myPointSelectionMode == SM_DonePoint)
+ {
+ commit();
+ emit featureConstructed(feature(), FM_Deactivation);
+ emit launchOperation(PartSet_OperationSketchLine::Type(), boost::shared_ptr<ModelAPI_Feature>());
+ }
+ //else
+ // abort();
+ //emit launchOperation(PartSet_OperationSketchLine::Type(), boost::shared_ptr<ModelAPI_Feature>());
+ }
+ break;
+ case Qt::Key_Escape: {
if (myPointSelectionMode == SM_DonePoint)
{
commit();
}
else
abort();
- emit launchOperation(PartSet_OperationSketchLine::Type(), boost::shared_ptr<ModelAPI_Feature>());
}
- break;
default:
- PartSet_OperationSketchBase::keyReleased(theKey);
break;
}
}
void PartSet_OperationSketchLine::startOperation()
{
PartSet_OperationSketchBase::startOperation();
- myPointSelectionMode = !myInitPoint ? SM_FirstPoint : SM_SecondPoint;
+ setPointSelectionMode(!myInitPoint ? SM_FirstPoint : SM_SecondPoint);
+
emit multiSelectionEnabled(false);
}
void PartSet_OperationSketchLine::abortOperation()
{
- emit featureConstructed(feature(), FM_Abort);
+ emit featureConstructed(feature(), FM_Hide);
PartSet_OperationSketchBase::abortOperation();
}
emit multiSelectionEnabled(true);
}
-boost::shared_ptr<ModelAPI_Feature> PartSet_OperationSketchLine::createFeature()
+boost::shared_ptr<ModelAPI_Feature> PartSet_OperationSketchLine::createFeature(const bool theFlushMessage)
{
- boost::shared_ptr<ModelAPI_Feature> aNewFeature = ModuleBase_Operation::createFeature();
+ boost::shared_ptr<ModelAPI_Feature> aNewFeature = ModuleBase_Operation::createFeature(false);
if (sketch()) {
boost::shared_ptr<SketchPlugin_Feature> aFeature =
boost::dynamic_pointer_cast<SketchPlugin_Feature>(sketch());
}
emit featureConstructed(aNewFeature, FM_Activation);
+ if (theFlushMessage)
+ flushCreated();
return aNewFeature;
}
boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(aData->attribute(theAttribute));
aPoint->setValue(aX, anY);
}
+
+void PartSet_OperationSketchLine::setPointSelectionMode(const PointSelectionMode& theMode,
+ const bool isToEmitSignal)
+{
+ myPointSelectionMode = theMode;
+ if (isToEmitSignal) {
+ std::string aName;
+ switch (theMode) {
+ case SM_FirstPoint:
+ aName = LINE_ATTR_START;
+ break;
+ case SM_SecondPoint:
+ aName = LINE_ATTR_END;
+ break;
+ case SM_DonePoint:
+ aName = XGUI::PROP_PANEL_OK;
+ break;
+ default:
+ break;
+ }
+ emit focusActivated(aName);
+ }
+}