[TD]code review changes for Gui

This commit is contained in:
Wanderer Fan
2022-08-18 16:45:40 -04:00
committed by WandererFan
parent e80c42e8f1
commit a1cc69c8e3
5 changed files with 87 additions and 77 deletions

View File

@@ -128,7 +128,6 @@ TechDraw::DrawPage* DrawGuiUtil::findPage(Gui::Command* cmd)
Gui::MDIView* mv = w->activeWindow();
MDIViewPage* mvp = dynamic_cast<MDIViewPage*>(mv);
if (mvp) {
QString windowTitle = mvp->windowTitle();
QGSPage* qp = mvp->getViewProviderPage()->getQGSPage();
page = qp->getDrawPage();
}

View File

@@ -215,15 +215,14 @@ void QGSPage::updateTemplate(bool forceUpdate)
QPointF QGSPage::getTemplateCenter()
{
QPointF result(0.0, 0.0);
App::DocumentObject *obj = m_vpPage->getDrawPage()->Template.getValue();
auto pageTemplate( dynamic_cast<TechDraw::DrawTemplate *>(obj) );
if( pageTemplate != nullptr ) {
double cx = Rez::guiX(pageTemplate->Width.getValue())/2.0;
double cy = -Rez::guiX(pageTemplate->Height.getValue())/2.0;
result = QPointF(cx,cy);
return QPointF(cx,cy);
}
return result;
return QPointF(0.0, 0.0);
}
void QGSPage::matchSceneRectToTemplate(void)
@@ -708,14 +707,13 @@ QGIView * QGSPage::addWeldSymbol(TechDraw::DrawWeldSymbol* weld)
void QGSPage::setDimensionGroups(void)
{
const std::vector<QGIView *> &allItems = getViews();
std::vector<QGIView *>::const_iterator itInspect;
int dimItemType = QGraphicsItem::UserType + 106;
for (itInspect = allItems.begin(); itInspect != allItems.end(); itInspect++) {
if (((*itInspect)->type() == dimItemType) && (!(*itInspect)->group())) {
QGIView* parent = findParent((*itInspect));
for (auto& item : allItems) {
if (item->type() == dimItemType && !item->group()) {
QGIView* parent = findParent(item);
if (parent) {
QGIViewDimension* dim = dynamic_cast<QGIViewDimension*>((*itInspect));
QGIViewDimension* dim = dynamic_cast<QGIViewDimension*>(item);
addDimToParent(dim,parent);
}
}
@@ -725,14 +723,13 @@ void QGSPage::setDimensionGroups(void)
void QGSPage::setBalloonGroups(void)
{
const std::vector<QGIView *> &allItems = getViews();
std::vector<QGIView *>::const_iterator itInspect;
int balloonItemType = QGraphicsItem::UserType + 140;
for (itInspect = allItems.begin(); itInspect != allItems.end(); itInspect++) {
if (((*itInspect)->type() == balloonItemType) && (!(*itInspect)->group())) {
QGIView* parent = findParent((*itInspect));
for (auto& item : allItems) {
if (item->type() == balloonItemType && !item->group()) {
QGIView* parent = findParent(item);
if (parent) {
QGIViewBalloon* balloon = dynamic_cast<QGIViewBalloon*>((*itInspect));
QGIViewBalloon* balloon = dynamic_cast<QGIViewBalloon*>(item);
addBalloonToParent(balloon,parent);
}
}
@@ -743,16 +740,15 @@ void QGSPage::setLeaderGroups(void)
{
// Base::Console().Message("QGSP::setLeaderGroups()\n");
const std::vector<QGIView *> &allItems = getViews();
std::vector<QGIView *>::const_iterator itInspect;
int leadItemType = QGraphicsItem::UserType + 232;
//make sure that qgileader belongs to correct parent.
//quite possibly redundant
for (itInspect = allItems.begin(); itInspect != allItems.end(); itInspect++) {
if (((*itInspect)->type() == leadItemType) && (!(*itInspect)->group())) {
QGIView* parent = findParent((*itInspect));
for (auto& item : allItems) {
if (item->type() == leadItemType && !item->group()) {
QGIView* parent = findParent(item);
if (parent) {
QGILeaderLine* lead = dynamic_cast<QGILeaderLine*>((*itInspect));
QGILeaderLine* lead = dynamic_cast<QGILeaderLine*>(item);
addLeaderToParent(lead,parent);
}
}
@@ -763,15 +759,14 @@ void QGSPage::setRichAnnoGroups(void)
{
// Base::Console().Message("QGSP::setRichAnnoGroups()\n");
const std::vector<QGIView *> &allItems = getViews();
std::vector<QGIView *>::const_iterator itInspect;
int annoItemType = QGraphicsItem::UserType + 233;
//make sure that qgirichanno belongs to correct parent.
for (itInspect = allItems.begin(); itInspect != allItems.end(); itInspect++) {
if (((*itInspect)->type() == annoItemType) && (!(*itInspect)->group())) {
QGIView* parent = findParent((*itInspect));
for (auto& item : allItems) {
if (item->type() == annoItemType && !item->group()) {
QGIView* parent = findParent(item);
if (parent) {
QGIRichAnno* anno = dynamic_cast<QGIRichAnno*>((*itInspect));
QGIRichAnno* anno = dynamic_cast<QGIRichAnno*>(item);
addAnnoToParent(anno,parent);
}
}
@@ -966,12 +961,6 @@ void QGSPage::findMissingViews(const std::vector<App::DocumentObject*> &list, st
void QGSPage::fixOrphans(bool force)
{
Q_UNUSED(force)
// Base::Console().Message("QGSP::fixOrphans()\n");
// if(!force) {
// m_timer->start(100);
// return;
// }
// m_timer->stop();
// get all the DrawViews for this page, including the second level ones
// if we ever have collections of collections, we'll need to revisit this
@@ -1003,8 +992,9 @@ void QGSPage::fixOrphans(bool force)
for (auto& qv: qvs) {
if (!qv)
continue; // already deleted?
App::DocumentObject* obj = doc->getObject(qv->getViewName());
if (obj == nullptr) {
if (!obj) {
//no DrawView anywhere in Document
removeQView(qv);
} else {
@@ -1016,8 +1006,8 @@ void QGSPage::fixOrphans(bool force)
removeQView(qv);
} else if (numParentPages == 1) {
//Does DrawView belong to this DrawPage?
TechDraw::DrawPage* pp = qv->getViewObject()->findParentPage();
if (thisPage != pp) {
TechDraw::DrawPage* parentPage = qv->getViewObject()->findParentPage();
if (thisPage != parentPage) {
//DrawView does not belong to this DrawPage
//remove QGItem from QGScene
removeQView(qv);
@@ -1026,9 +1016,9 @@ void QGSPage::fixOrphans(bool force)
//DrawView belongs to multiple DrawPages
//check if this MDIViewPage corresponds to any parent DrawPage
//if not, delete the QGItem
std::vector<TechDraw::DrawPage*> pPages = qv->getViewObject()->findAllParentPages();
std::vector<TechDraw::DrawPage*> potentialParentPages = qv->getViewObject()->findAllParentPages();
bool found = false;
for (auto p: pPages) {
for (auto p: potentialParentPages) {
if (thisPage == p) {
found = true;
break;

View File

@@ -150,20 +150,26 @@ void ViewProviderDrawingView::hide()
QGIView* ViewProviderDrawingView::getQView()
{
QGIView *qView = nullptr;
TechDraw::DrawView* dv = getViewObject();
if (dv) {
Gui::Document* guiDoc = Gui::Application::Instance->getDocument(getViewObject()->getDocument());
if (guiDoc) {
ViewProviderPage* vpp = getViewProviderPage();
if (vpp) {
if (vpp->getQGSPage()) {
qView = dynamic_cast<QGIView *>(vpp->getQGSPage()->findQViewForDocObj(getViewObject()));
}
}
}
if (!dv) {
return nullptr;
}
return qView;
Gui::Document* guiDoc = Gui::Application::Instance->getDocument(dv->getDocument());
if (!guiDoc) {
return nullptr;
}
ViewProviderPage* vpp = getViewProviderPage();
if (!vpp) {
return nullptr;
}
if (vpp->getQGSPage()) {
return dynamic_cast<QGIView *>(vpp->getQGSPage()->findQViewForDocObj(getViewObject()));
}
return nullptr;
}
bool ViewProviderDrawingView::isShow() const
@@ -234,37 +240,50 @@ void ViewProviderDrawingView::onGuiRepaint(const TechDraw::DrawView* dv)
std::vector<TechDraw::DrawPage*> pages = getViewObject()->findAllParentPages();
if (pages.size() > 1) {
for (auto& p : pages) {
std::vector<App::DocumentObject*> views = p->Views.getValues();
for (auto& v: views) {
if (v == getViewObject()) {
//view v belongs to this page p
ViewProviderPage* vpPage = getViewProviderPage();
if (vpPage) {
if (vpPage->getQGSPage()) {
QGIView* qView = dynamic_cast<QGIView *>(vpPage->getQGSPage()->findQViewForDocObj(v));
if (qView != nullptr) {
qView->updateView(true);
}
}
}
multiParentPaint(pages);
} else if (dv == getViewObject()) {
singleParentPaint(dv);
}
}
void ViewProviderDrawingView::multiParentPaint(std::vector<TechDraw::DrawPage*>& pages)
{
for (auto& p : pages) {
std::vector<App::DocumentObject*> views = p->Views.getValues();
for (auto& v: views) {
if (v != getViewObject()) { //should this be dv from onGuiRepaint?
continue;
}
//view v belongs to this page p
ViewProviderPage* vpPage = getViewProviderPage();
if (!vpPage) {
continue;
}
if (vpPage->getQGSPage()) {
QGIView* qView = dynamic_cast<QGIView *>(vpPage->getQGSPage()->findQViewForDocObj(v));
if (qView) {
qView->updateView(true);
}
}
}
} else if (dv == getViewObject()) {
//original logic for 1 view on 1 page
if (!dv->isRemoving() &&
!dv->isRestoring()) {
QGIView* qgiv = getQView();
if (qgiv) {
qgiv->updateView(true);
} else { //we are not part of the Gui page yet. ask page to add us.
ViewProviderPage* vpPage = getViewProviderPage();
if (vpPage) {
if (vpPage->getQGSPage()) {
vpPage->getQGSPage()->addView(dv);
}
}
}
}
void ViewProviderDrawingView::singleParentPaint(const TechDraw::DrawView* dv)
{
//original logic for 1 view on 1 page
if (dv->isRemoving() ||
dv->isRestoring()) {
return;
}
QGIView* qgiv = getQView();
if (qgiv) {
qgiv->updateView(true);
} else { //we are not part of the Gui page yet. ask page to add us.
ViewProviderPage* vpPage = getViewProviderPage();
if (vpPage) {
if (vpPage->getQGSPage()) {
vpPage->getQGSPage()->addView(dv);
}
}
}

View File

@@ -87,6 +87,9 @@ public:
Connection connectProgressMessage;
private:
void multiParentPaint(std::vector<TechDraw::DrawPage*>& pages);
void singleParentPaint(const TechDraw::DrawView* dv);
};

View File

@@ -334,8 +334,7 @@ void ViewProviderPage::removeMDIView(void)
{
if (!m_mdiView.isNull()) { //m_mdiView is a QPointer
QList<QWidget*> wList= Gui::getMainWindow()->windows();
bool found = wList.contains(m_mdiView);
if (found) {
if (wList.contains(m_mdiView)) {
Gui::getMainWindow()->removeWindow(m_mdiView);
m_mdiView = nullptr; //m_mdiView will eventually be deleted and
m_graphicsView = nullptr; //will take m_graphicsView with it