[TD]fix RTA edit when no MDI

This commit is contained in:
wandererfan
2020-02-16 09:56:44 -05:00
committed by WandererFan
parent d0215f7637
commit 3988824b67
3 changed files with 55 additions and 40 deletions

View File

@@ -83,15 +83,21 @@ TaskRichAnno::TaskRichAnno(TechDrawGui::ViewProviderRichAnno* annoVP) :
m_textDialog(nullptr),
m_rte(nullptr)
{
// Base::Console().Message("TRA::TRA() - edit\n");
if (m_annoVP == nullptr) {
//should be caught in CMD caller
Base::Console().Error("TaskRichAnno - bad parameters. Can not proceed.\n");
return;
}
ui->setupUi(this);
m_annoFeat = m_annoVP->getFeature();
m_basePage = m_annoFeat->findParentPage();
if ( m_basePage == nullptr ) {
Base::Console().Error("TaskRichAnno - bad parameters (2). Can not proceed.\n");
return;
}
//m_baseFeat can be null
App::DocumentObject* obj = m_annoFeat->AnnoParent.getValue();
if (obj != nullptr) {
@@ -99,23 +105,28 @@ TaskRichAnno::TaskRichAnno(TechDrawGui::ViewProviderRichAnno* annoVP) :
m_baseFeat = static_cast<TechDraw::DrawView*>(m_annoFeat->AnnoParent.getValue());
}
}
m_basePage = m_annoFeat->findParentPage();
if ( m_basePage == nullptr ) {
Base::Console().Error("TaskRichAnno - bad parameters (2). Can not proceed.\n");
return;
Gui::Document* activeGui = Gui::Application::Instance->getDocument(m_basePage->getDocument());
Gui::ViewProvider* vp = activeGui->getViewProvider(m_basePage);
ViewProviderPage* dvp = static_cast<ViewProviderPage*>(vp);
m_mdi = dvp->getMDIViewPage();
m_qgParent = nullptr;
m_haveMdi = true;
if (m_mdi != nullptr) {
m_view = m_mdi->getQGVPage();
if (m_baseFeat != nullptr) {
m_qgParent = m_view->findQViewForDocObj(m_baseFeat);
}
} else {
m_haveMdi = false;
}
ui->setupUi(this);
m_title = QObject::tr("Rich text editor");
setUiEdit();
// m_title = QObject::tr("Rich text editor");
m_mdi = m_annoVP->getMDIViewPage();
m_scene = m_mdi->m_scene;
m_view = m_mdi->getQGVPage();
if (m_baseFeat != nullptr) {
m_qgParent = m_view->findQViewForDocObj(m_baseFeat);
}
m_saveContextPolicy = m_mdi->contextMenuPolicy();
m_attachPoint = Rez::guiX(Base::Vector3d(m_annoFeat->X.getValue(),
-m_annoFeat->Y.getValue(),
@@ -139,27 +150,30 @@ TaskRichAnno::TaskRichAnno(TechDraw::DrawView* baseFeat,
m_textDialog(nullptr),
m_rte(nullptr)
{
// Base::Console().Message("TRA::TRA() - create\n");
if (m_basePage == nullptr) {
//should be caught in CMD caller
Base::Console().Error("TaskRichAnno - bad parameters. Can not proceed.\n");
return;
}
ui->setupUi(this);
m_title = QObject::tr("Rich text creator");
Gui::Document* activeGui = Gui::Application::Instance->getDocument(m_basePage->getDocument());
Gui::ViewProvider* vp = activeGui->getViewProvider(m_basePage);
ViewProviderPage* vpp = static_cast<ViewProviderPage*>(vp);
m_mdi = vpp->getMDIViewPage();
m_scene = m_mdi->m_scene;
m_view = m_mdi->getQGVPage();
if (baseFeat != nullptr) {
m_qgParent = m_view->findQViewForDocObj(baseFeat);
}
ViewProviderPage* dvp = static_cast<ViewProviderPage*>(vp);
m_saveContextPolicy = m_mdi->contextMenuPolicy();
m_qgParent = nullptr;
m_haveMdi = true;
m_mdi = dvp->getMDIViewPage();
if (m_mdi != nullptr) {
m_view = m_mdi->getQGVPage();
if (baseFeat != nullptr) {
m_qgParent = m_view->findQViewForDocObj(baseFeat);
}
} else {
m_haveMdi = false;
}
ui->setupUi(this);
m_title = QObject::tr("Rich text creator");
setUiPrimary();
@@ -346,10 +360,16 @@ void TaskRichAnno::createAnnoFeature()
if (obj->isDerivedFrom(TechDraw::DrawRichAnno::getClassTypeId())) {
m_annoFeat = static_cast<TechDraw::DrawRichAnno*>(obj);
commonFeatureUpdate();
QPointF qTemp = calcTextStartPos(m_annoFeat->getScale());
Base::Vector3d vTemp(qTemp.x(), qTemp.y());
m_annoFeat->X.setValue(Rez::appX(vTemp.x));
m_annoFeat->Y.setValue(Rez::appX(vTemp.y));
if (m_haveMdi) {
QPointF qTemp = calcTextStartPos(m_annoFeat->getScale());
Base::Vector3d vTemp(qTemp.x(), qTemp.y());
m_annoFeat->X.setValue(Rez::appX(vTemp.x));
m_annoFeat->Y.setValue(Rez::appX(vTemp.y));
} else {
//if we don't have a mdi, we can't calculate start position, so just put it mid-page
m_annoFeat->X.setValue(m_basePage->getPageWidth()/2.0);
m_annoFeat->Y.setValue(m_basePage->getPageHeight()/2.0);
}
}
if (m_annoFeat != nullptr) {
@@ -463,7 +483,7 @@ QPointF TaskRichAnno::calcTextStartPos(double scale)
QPointF result(w,h);
return result;
} else {
Base::Console().Message("TRA::calcStartPos - no m_basePage\n");
Base::Console().Message("TRA::calcStartPos - no m_basePage\n"); //shouldn't happen. caught elsewhere
}
}
@@ -518,7 +538,7 @@ bool TaskRichAnno::accept()
} else {
createAnnoFeature();
}
m_mdi->setContextMenuPolicy(m_saveContextPolicy);
// m_mdi->setContextMenuPolicy(m_saveContextPolicy);
Gui::Command::doCommand(Gui::Command::Gui,"Gui.ActiveDocument.resetEdit()");
return true;
@@ -537,10 +557,6 @@ bool TaskRichAnno::reject()
if (!doc) {
return false;
}
if (m_mdi != nullptr) {
m_mdi->setContextMenuPolicy(m_saveContextPolicy);
}
if (getCreateMode() &&
(m_annoFeat != nullptr) ) {
removeFeature();

View File

@@ -107,7 +107,6 @@ private:
bool blockUpdate;
MDIViewPage* m_mdi;
QGraphicsScene* m_scene;
QGVPage* m_view;
ViewProviderRichAnno* m_annoVP;
TechDraw::DrawView* m_baseFeat;
@@ -131,6 +130,7 @@ private:
QDialog* m_textDialog;
MRichTextEdit* m_rte;
QString m_title;
bool m_haveMdi;
};
class TaskDlgRichAnno : public Gui::TaskView::TaskDialog

View File

@@ -94,7 +94,6 @@ bool ViewProviderRichAnno::setEdit(int ModNum)
if (Gui::Control().activeDialog()) { //TaskPanel already open!
return false;
}
// clear the selection (convenience)
Gui::Selection().clearSelection();
Gui::Control().showDialog(new TaskDlgRichAnno(this));
return true;