[TD]fix leader line display attributes
This commit is contained in:
@@ -71,11 +71,9 @@ using namespace TechDrawGui;
|
||||
|
||||
|
||||
//**************************************************************
|
||||
QGILeaderLine::QGILeaderLine(QGraphicsItem* myParent,
|
||||
TechDraw::DrawLeaderLine* leader) :
|
||||
m_parentItem(myParent),
|
||||
QGILeaderLine::QGILeaderLine() :
|
||||
m_lineColor(Qt::black),
|
||||
// m_hasHover(false),
|
||||
m_hasHover(false),
|
||||
m_blockDraw(false)
|
||||
|
||||
{
|
||||
@@ -90,15 +88,11 @@ QGILeaderLine::QGILeaderLine(QGraphicsItem* myParent,
|
||||
|
||||
m_line = new QGIPrimPath();
|
||||
addToGroup(m_line);
|
||||
m_line->setNormalColor(getNormalColor());
|
||||
m_line->setFlag(QGraphicsItem::ItemIsSelectable, false);
|
||||
m_line->setAcceptHoverEvents(false);
|
||||
m_line->setPrettyNormal();
|
||||
m_line->setPos(0.0,0.0);
|
||||
|
||||
m_editPath = new QGEPath(this);
|
||||
m_editPath->setNormalColor(getNormalColor());
|
||||
|
||||
addToGroup(m_editPath);
|
||||
m_editPath->setPos(0.0, 0.0);
|
||||
m_editPath->setFlag(QGraphicsItem::ItemIsSelectable, false);
|
||||
@@ -109,30 +103,34 @@ QGILeaderLine::QGILeaderLine(QGraphicsItem* myParent,
|
||||
|
||||
m_arrow1 = new QGIArrow();
|
||||
addToGroup(m_arrow1);
|
||||
m_arrow1->setNormalColor(getNormalColor());
|
||||
m_arrow1->setFillColor(getNormalColor());
|
||||
m_arrow1->setPrettyNormal();
|
||||
m_arrow1->setPos(0.0,0.0);
|
||||
m_arrow1->hide();
|
||||
m_arrow2 = new QGIArrow();
|
||||
addToGroup(m_arrow2);
|
||||
m_arrow2->setNormalColor(getNormalColor());
|
||||
m_arrow2->setFillColor(getNormalColor());
|
||||
m_arrow2->setPrettyNormal();
|
||||
m_arrow2->setPos(0.0, 0.0);
|
||||
m_arrow2->hide();
|
||||
|
||||
setParentItem(m_parentItem);
|
||||
|
||||
setViewFeature(leader);
|
||||
|
||||
setZValue(ZVALUE::DIMENSION);
|
||||
|
||||
QObject::connect(
|
||||
m_editPath, SIGNAL(pointsUpdated(QPointF, std::vector<QPointF>)),
|
||||
this , SLOT (onLineEditFinished(QPointF, std::vector<QPointF>))
|
||||
);
|
||||
}
|
||||
|
||||
void QGILeaderLine::setLeaderFeature(TechDraw::DrawLeaderLine* feat)
|
||||
{
|
||||
// Base::Console().Message("QGILL::setLeaderFeature()\n");
|
||||
setViewFeature(static_cast<TechDraw::DrawView *>(feat));
|
||||
|
||||
float x = Rez::guiX(feat->X.getValue());
|
||||
float y = Rez::guiX(-feat->Y.getValue());
|
||||
setPos(x,y);
|
||||
|
||||
setNormalColorAll();
|
||||
setPrettyNormal();
|
||||
|
||||
updateView();
|
||||
}
|
||||
|
||||
QVariant QGILeaderLine::itemChange(GraphicsItemChange change, const QVariant &value)
|
||||
@@ -173,6 +171,7 @@ void QGILeaderLine::mouseReleaseEvent(QGraphicsSceneMouseEvent * event)
|
||||
void QGILeaderLine::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
||||
{
|
||||
// Base::Console().Message("QGILL::hoverEnter() - selected; %d\n",isSelected());
|
||||
m_hasHover = true;
|
||||
if (!isSelected()) {
|
||||
setPrettyPre();
|
||||
}
|
||||
@@ -182,10 +181,10 @@ void QGILeaderLine::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
||||
void QGILeaderLine::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
|
||||
{
|
||||
// Base::Console().Message("QGILL::hoverLeave() - selected; %d\n",isSelected());
|
||||
m_hasHover = false;
|
||||
if(!isSelected()) {
|
||||
setPrettyNormal();
|
||||
}
|
||||
|
||||
QGIView::hoverLeaveEvent(event);
|
||||
}
|
||||
|
||||
@@ -203,6 +202,17 @@ void QGILeaderLine::onSourceChange(TechDraw::DrawView* newParent)
|
||||
}
|
||||
}
|
||||
|
||||
void QGILeaderLine::setNormalColorAll()
|
||||
{
|
||||
// Base::Console().Message("QGILL::setNormalColorAll - normal color: %s\n", qPrintable(getNormalColor().name()));
|
||||
m_line->setNormalColor(getNormalColor());
|
||||
m_editPath->setNormalColor(getNormalColor());
|
||||
m_arrow1->setNormalColor(getNormalColor());
|
||||
m_arrow1->setFillColor(getNormalColor());
|
||||
m_arrow2->setNormalColor(getNormalColor());
|
||||
m_arrow2->setFillColor(getNormalColor());
|
||||
}
|
||||
|
||||
void QGILeaderLine::setPrettyNormal() {
|
||||
// Base::Console().Message("QGILL::setPrettyNormal()\n");
|
||||
m_line->setPrettyNormal();
|
||||
@@ -341,27 +351,22 @@ void QGILeaderLine::draw()
|
||||
{
|
||||
// Base::Console().Message("QGILL::draw()- %s\n", getViewObject()->getNameInDocument());
|
||||
if (m_blockDraw) {
|
||||
// Base::Console().Message("QGIL::draw - block draw\n");
|
||||
return;
|
||||
}
|
||||
if (!isVisible()) {
|
||||
// Base::Console().Message("QGIL::draw - not visible\n");
|
||||
return;
|
||||
}
|
||||
TechDraw::DrawLeaderLine* featLeader = getFeature();
|
||||
if((!featLeader) ) {
|
||||
// Base::Console().Message("QGIL::draw - no feature\n");
|
||||
return;
|
||||
}
|
||||
auto vp = static_cast<ViewProviderLeader*>(getViewProvider(getViewObject()));
|
||||
if ( vp == nullptr ) {
|
||||
// Base::Console().Message("QGIL::draw - no viewprovider\n");
|
||||
return;
|
||||
}
|
||||
TechDraw::DrawView* parent = featLeader->getBaseView();
|
||||
|
||||
if (m_editPath->inEdit()) {
|
||||
// Base::Console().Message("QGIL::draw - m_editPath in edit\n");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -385,7 +390,6 @@ void QGILeaderLine::draw()
|
||||
m_line->setStyle(m_lineStyle);
|
||||
m_line->setWidth(getLineWidth());
|
||||
|
||||
m_line->setNormalColor(getNormalColor());
|
||||
m_line->setPos(0,0); //make m_line coords == leader coords
|
||||
|
||||
std::vector<QPointF> qPoints = getWayPointsFromFeature();
|
||||
@@ -394,10 +398,18 @@ void QGILeaderLine::draw()
|
||||
p = p * scale;
|
||||
}
|
||||
}
|
||||
m_line->setPath(makeLeaderPath(qPoints));
|
||||
m_line->show();
|
||||
|
||||
setNormalColorAll();
|
||||
m_line->setPath(makeLeaderPath(qPoints));
|
||||
setArrows(qPoints);
|
||||
|
||||
if (isSelected()) {
|
||||
setPrettySel();
|
||||
} else if (m_hasHover) {
|
||||
setPrettyPre();
|
||||
} else {
|
||||
setPrettyNormal();
|
||||
}
|
||||
}
|
||||
|
||||
QPainterPath QGILeaderLine::makeLeaderPath(std::vector<QPointF> qPoints)
|
||||
@@ -485,6 +497,7 @@ std::vector<QPointF> QGILeaderLine::getWayPointsFromFeature(void)
|
||||
|
||||
void QGILeaderLine::setArrows(std::vector<QPointF> pathPoints)
|
||||
{
|
||||
// Base::Console().Message("QGILL::setArrows()\n");
|
||||
Base::Vector3d stdX(1.0,0.0,0.0);
|
||||
TechDraw::DrawLeaderLine* featLeader = getFeature();
|
||||
|
||||
@@ -497,8 +510,6 @@ void QGILeaderLine::setArrows(std::vector<QPointF> pathPoints)
|
||||
m_arrow1->setSize(QGIArrow::getPrefArrowSize());
|
||||
m_arrow1->setDirMode(true);
|
||||
m_arrow1->setDirection(stdX);
|
||||
m_arrow1->setNormalColor(getNormalColor());
|
||||
m_arrow1->setFillColor(getNormalColor());
|
||||
if (pathPoints.size() > 1) {
|
||||
auto it = pathPoints.begin();
|
||||
QPointF s = (*it);
|
||||
@@ -519,8 +530,6 @@ void QGILeaderLine::setArrows(std::vector<QPointF> pathPoints)
|
||||
m_arrow2->setWidth(getLineWidth());
|
||||
m_arrow2->setDirMode(true);
|
||||
m_arrow2->setDirection(-stdX);
|
||||
m_arrow2->setNormalColor(getNormalColor());
|
||||
m_arrow2->setFillColor(getNormalColor());
|
||||
if (pathPoints.size() > 1) {
|
||||
auto itr = pathPoints.rbegin();
|
||||
QPointF s = (*itr);
|
||||
@@ -580,6 +589,7 @@ double QGILeaderLine::getEdgeFuzz(void) const
|
||||
|
||||
QColor QGILeaderLine::getNormalColor()
|
||||
{
|
||||
// Base::Console().Message("QGILL::getNormalColor()\n");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/LeaderLinens");
|
||||
App::Color fcColor;
|
||||
@@ -587,11 +597,14 @@ QColor QGILeaderLine::getNormalColor()
|
||||
m_colNormal = fcColor.asValue<QColor>();
|
||||
|
||||
auto lead( dynamic_cast<TechDraw::DrawLeaderLine*>(getViewObject()) );
|
||||
if( lead == nullptr )
|
||||
if( lead == nullptr ) {
|
||||
// Base::Console().Message("QGILL::getNormalColor - no feature\n");
|
||||
return m_colNormal;
|
||||
}
|
||||
|
||||
auto vp = static_cast<ViewProviderLeader*>(getViewProvider(getViewObject()));
|
||||
if ( vp == nullptr ) {
|
||||
// Base::Console().Message("QGILL::getNormalColor - no viewProvider\n");
|
||||
return m_colNormal;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,8 +57,7 @@ class TechDrawGuiExport QGILeaderLine : public QGIView
|
||||
public:
|
||||
enum {Type = QGraphicsItem::UserType + 232};
|
||||
|
||||
explicit QGILeaderLine(QGraphicsItem* myParent = nullptr,
|
||||
TechDraw::DrawLeaderLine* lead = nullptr);
|
||||
explicit QGILeaderLine();
|
||||
~QGILeaderLine() = default;
|
||||
|
||||
int type() const override { return Type;}
|
||||
@@ -92,6 +91,8 @@ public:
|
||||
void setPrettyPre();
|
||||
void setPrettySel();
|
||||
|
||||
void setLeaderFeature(TechDraw::DrawLeaderLine* feat);
|
||||
|
||||
public Q_SLOTS:
|
||||
void onLineEditFinished(QPointF attach, std::vector<QPointF> deltas); //QGEPath is finished editing points
|
||||
virtual void onSourceChange(TechDraw::DrawView* newParent) override;
|
||||
@@ -114,6 +115,7 @@ protected:
|
||||
|
||||
protected:
|
||||
QColor getNormalColor() override;
|
||||
void setNormalColorAll();
|
||||
|
||||
QGraphicsItem* m_parentItem;
|
||||
QGIPrimPath* m_line; //actual leader line
|
||||
|
||||
@@ -496,33 +496,30 @@ void QGVPage::addDimToParent(QGIViewDimension* dim, QGIView* parent)
|
||||
QGIView * QGVPage::addViewLeader(TechDraw::DrawLeaderLine *leader)
|
||||
{
|
||||
// Base::Console().Message("QGVP::addViewLeader(%s)\n",leader->getNameInDocument());
|
||||
QGILeaderLine* leaderGroup = nullptr;
|
||||
QGILeaderLine* leaderGroup = new QGILeaderLine();
|
||||
|
||||
App::DocumentObject* parentObj = leader->LeaderParent.getValue();
|
||||
TechDraw::DrawView* parentDV = dynamic_cast<TechDraw::DrawView*>(parentObj);
|
||||
auto ourScene( scene() );
|
||||
ourScene->addItem(leaderGroup);
|
||||
|
||||
//NOTE: if Leaders are ever allowed to not be attached to a View, this next bit will have to change
|
||||
if (parentDV != nullptr) {
|
||||
QGIView* parentQV = findQViewForDocObj(parentObj);
|
||||
if (parentQV != nullptr) {
|
||||
leaderGroup = new QGILeaderLine(parentQV, leader);
|
||||
leaderGroup->updateView(true); //this is different from everybody else,
|
||||
//but it works.
|
||||
return leaderGroup;
|
||||
}
|
||||
} else {
|
||||
throw Base::TypeError("QGVP::addViewLeader - parent DV has no QGIV");
|
||||
leaderGroup->setLeaderFeature(leader);
|
||||
|
||||
QGIView *parent = 0;
|
||||
parent = findParent(leaderGroup);
|
||||
|
||||
if(parent) {
|
||||
addLeaderToParent(leaderGroup,parent);
|
||||
}
|
||||
return nullptr;
|
||||
|
||||
leaderGroup->updateView(true);
|
||||
|
||||
return leaderGroup;
|
||||
}
|
||||
|
||||
//assign leader to correct parent if not already so
|
||||
void QGVPage::addLeaderToParent(QGILeaderLine* lead, QGIView* parent)
|
||||
{
|
||||
QGraphicsItem* qgiParent = lead->parentItem();
|
||||
if (qgiParent != parent) {
|
||||
parent->addToGroup(lead);
|
||||
}
|
||||
// Base::Console().Message("QGVP::addLeaderToParent()\n");
|
||||
parent->addToGroup(lead);
|
||||
lead->setZValue(ZVALUE::DIMENSION);
|
||||
}
|
||||
|
||||
QGIView * QGVPage::addRichAnno(TechDraw::DrawRichAnno* anno)
|
||||
|
||||
@@ -210,7 +210,7 @@ void TaskLeaderLine::changeEvent(QEvent *e)
|
||||
void TaskLeaderLine::setUiPrimary()
|
||||
{
|
||||
// Base::Console().Message("TTL::setUiPrimary()\n");
|
||||
enableVPUi(false);
|
||||
enableVPUi(true);
|
||||
setWindowTitle(QObject::tr("New Leader Line"));
|
||||
|
||||
if (m_baseFeat != nullptr) {
|
||||
@@ -224,6 +224,8 @@ void TaskLeaderLine::setUiPrimary()
|
||||
ui->cboxStartSym->setCurrentIndex(aSize);
|
||||
}
|
||||
|
||||
//switch widgets related to ViewProvider on/off
|
||||
//there is no ViewProvider until some time after feature is created.
|
||||
void TaskLeaderLine::enableVPUi(bool b)
|
||||
{
|
||||
ui->cpLineColor->setEnabled(b);
|
||||
@@ -287,7 +289,19 @@ void TaskLeaderLine::createLeaderFeature(std::vector<Base::Vector3d> converted)
|
||||
}
|
||||
commonFeatureUpdate();
|
||||
}
|
||||
|
||||
|
||||
if (m_lineFeat != nullptr) {
|
||||
Gui::ViewProvider* vp = QGIView::getViewProvider(m_lineFeat);
|
||||
auto leadVP = dynamic_cast<ViewProviderLeader*>(vp);
|
||||
if ( leadVP != nullptr ) {
|
||||
App::Color ac;
|
||||
ac.setValue<QColor>(ui->cpLineColor->color());
|
||||
leadVP->Color.setValue(ac);
|
||||
leadVP->LineWidth.setValue(ui->dsbWeight->value());
|
||||
leadVP->LineStyle.setValue(ui->cboxStyle->currentIndex());
|
||||
}
|
||||
}
|
||||
|
||||
Gui::Command::updateActive();
|
||||
Gui::Command::commitCommand();
|
||||
m_lineFeat->requestPaint();
|
||||
@@ -305,7 +319,12 @@ void TaskLeaderLine::updateLeaderFeature(void)
|
||||
m_lineVP->LineWidth.setValue(ui->dsbWeight->value());
|
||||
m_lineVP->LineStyle.setValue(ui->cboxStyle->currentIndex());
|
||||
|
||||
Gui::Command::updateActive();
|
||||
Gui::Command::commitCommand();
|
||||
|
||||
if (m_baseFeat != nullptr) {
|
||||
m_baseFeat->requestPaint();
|
||||
}
|
||||
m_lineFeat->requestPaint();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user