[TD]fix leader line display attributes

This commit is contained in:
wandererfan
2020-01-13 12:45:48 -05:00
committed by WandererFan
parent c4ca00a1d5
commit d64d6a7c65
4 changed files with 87 additions and 56 deletions

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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();
}