FreeCAD

Форк
0
/
ViewProviderTemplate.cpp 
233 строки · 7.9 Кб
1
/***************************************************************************
2
 *   Copyright (c) 2014 Luke Parry <l.parry@warwick.ac.uk>                 *
3
 *                                                                         *
4
 *   This file is part of the FreeCAD CAx development system.              *
5
 *                                                                         *
6
 *   This library is free software; you can redistribute it and/or         *
7
 *   modify it under the terms of the GNU Library General Public           *
8
 *   License as published by the Free Software Foundation; either          *
9
 *   version 2 of the License, or (at your option) any later version.      *
10
 *                                                                         *
11
 *   This library  is distributed in the hope that it will be useful,      *
12
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
13
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
14
 *   GNU Library General Public License for more details.                  *
15
 *                                                                         *
16
 *   You should have received a copy of the GNU Library General Public     *
17
 *   License along with this library; see the file COPYING.LIB. If not,    *
18
 *   write to the Free Software Foundation, Inc., 59 Temple Place,         *
19
 *   Suite 330, Boston, MA  02111-1307, USA                                *
20
 *                                                                         *
21
 ***************************************************************************/
22

23

24
#include "PreCompiled.h"
25

26
#ifndef _PreComp_
27
#include <QMessageBox>
28
#include <QTextStream>
29
#ifdef FC_OS_WIN32
30
#include <windows.h>
31
#endif
32
#endif
33

34
#include <App/DocumentObject.h>
35
#include <Gui/Application.h>
36
#include <Gui/Document.h>
37
#include <Gui/MainWindow.h>
38

39
#include <Mod/TechDraw/App/DrawPage.h>
40
#include <Mod/TechDraw/App/DrawSVGTemplate.h>
41
#include <Mod/TechDraw/App/DrawTemplate.h>
42

43
#include "MDIViewPage.h"
44
#include "QGISVGTemplate.h"
45
#include "QGITemplate.h"
46
#include "QGSPage.h"
47
#include "QGVPage.h"
48
#include "TemplateTextField.h"
49
#include "ViewProviderPage.h"
50
#include "ViewProviderTemplate.h"
51

52
using namespace TechDrawGui;
53

54
PROPERTY_SOURCE(TechDrawGui::ViewProviderTemplate, Gui::ViewProviderDocumentObject)
55

56
//**************************************************************************
57
// Construction/Destruction
58

59
ViewProviderTemplate::ViewProviderTemplate() : m_myName(std::string())
60
{
61
    initExtension(this);
62

63
    sPixmap = "TechDraw_TreePageTemplate";
64

65
    // Do not show in property editor   why? wf  WF: because DisplayMode applies only to coin and we
66
    // don't use coin.
67
    DisplayMode.setStatus(App::Property::Hidden, true);
68
}
69

70
void ViewProviderTemplate::attach(App::DocumentObject* pcFeat)
71
{
72
    //    Base::Console().Message("VPT::attach(%s)\n", pcFeat->getNameInDocument());
73
    ViewProviderDocumentObject::attach(pcFeat);
74

75
    auto feature = getTemplate();
76
    if (feature) {
77
        m_myName = feature->getNameInDocument();
78
    }
79
}
80

81
void ViewProviderTemplate::updateData(const App::Property* prop)
82
{
83
    //This doesn't belong here.  Should be in a ViewProviderSvgTemplate?
84
    if (getTemplate()->isDerivedFrom(TechDraw::DrawSVGTemplate::getClassTypeId())) {
85
        auto t = static_cast<TechDraw::DrawSVGTemplate*>(getTemplate());
86
        if (prop == &(t->Template)) {
87
            auto page = t->getParentPage();
88
            Gui::ViewProvider* vp =
89
                Gui::Application::Instance->getDocument(t->getDocument())->getViewProvider(page);
90
            TechDrawGui::ViewProviderPage* vpp = dynamic_cast<TechDrawGui::ViewProviderPage*>(vp);
91
            if (vpp) {
92
                vpp->getQGSPage()->attachTemplate(t);
93
                vpp->getQGSPage()->matchSceneRectToTemplate();
94
            }
95
        }
96
    }
97

98
    if (prop == &(getTemplate()->EditableTexts)) {
99
        QGITemplate* qgiv = getQTemplate();
100
        if (qgiv) {
101
            qgiv->updateView(true);
102
        }
103
    }
104

105

106
    Gui::ViewProviderDocumentObject::updateData(prop);
107
}
108

109
void ViewProviderTemplate::onChanged(const App::Property* prop)
110
{
111
    App::DocumentObject* obj = getObject();
112
    if (!obj || obj->isRestoring()) {
113
        Gui::ViewProviderDocumentObject::onChanged(prop);
114
        return;
115
    }
116

117
    if (prop == &Visibility) {
118
        if (Visibility.getValue()) {
119
            show();
120
        }
121
        else {
122
            hide();
123
        }
124
    }
125

126
    Gui::ViewProviderDocumentObject::onChanged(prop);
127
}
128

129
void ViewProviderTemplate::show()
130
{
131
    QGITemplate* qTemplate = getQTemplate();
132
    if (qTemplate) {
133
        qTemplate->show();
134
    }
135

136
    ViewProviderDocumentObject::show();
137
}
138

139
void ViewProviderTemplate::hide()
140
{
141
    QGITemplate* qTemplate = getQTemplate();
142
    if (qTemplate) {
143
        qTemplate->hide();
144
    }
145

146
    ViewProviderDocumentObject::hide();
147
}
148

149
bool ViewProviderTemplate::isShow() const { return Visibility.getValue(); }
150

151
QGITemplate* ViewProviderTemplate::getQTemplate()
152
{
153
    TechDraw::DrawTemplate* dt = getTemplate();
154
    if (dt) {
155
        auto page = dt->getParentPage();
156
        Gui::ViewProvider* vp =
157
            Gui::Application::Instance->getDocument(dt->getDocument())->getViewProvider(page);
158
        TechDrawGui::ViewProviderPage* vpp = dynamic_cast<TechDrawGui::ViewProviderPage*>(vp);
159
        if (vpp)
160
            return vpp->getQGSPage()->getTemplate();
161
    }
162
    return nullptr;
163
}
164

165
void ViewProviderTemplate::setMarkers(bool state)
166
{
167
    //    Base::Console().Message("VPT::setMarkers(%d)\n", state);
168
    QGITemplate* qTemplate = getQTemplate();
169
    QGISVGTemplate* qSvgTemplate = dynamic_cast<QGISVGTemplate*>(qTemplate);
170
    if (qSvgTemplate) {
171
        std::vector<TemplateTextField*> textFields = qSvgTemplate->getTextFields();
172
        for (auto& t : textFields) {
173
            if (state) {
174
                t->show();
175
            }
176
            else {
177
                t->hide();
178
            }
179
        }
180
        qSvgTemplate->updateView(true);
181
    }
182
}
183

184
bool ViewProviderTemplate::onDelete(const std::vector<std::string>&)
185
{
186
    // deleting the template will break the page view, thus warn the user
187

188
    // get the page
189
    auto page = getTemplate()->getParentPage();
190

191
    // If no parent page is given then just go ahead
192
    if (!page)
193
        return true;
194

195
    // generate dialog
196
    QString bodyMessage;
197
    QTextStream bodyMessageStream(&bodyMessage);
198
    bodyMessageStream << qApp->translate("Std_Delete",
199
                                         "The following referencing object might break:");
200
    bodyMessageStream << "\n\n" << QString::fromUtf8(page->Label.getValue());
201
    bodyMessageStream << "\n\n" << QObject::tr("Are you sure you want to continue?");
202

203
    // show and evaluate dialog
204
    int DialogResult = QMessageBox::warning(Gui::getMainWindow(),
205
                                            qApp->translate("Std_Delete", "Object dependencies"),
206
                                            bodyMessage, QMessageBox::Yes, QMessageBox::No);
207
    if (DialogResult == QMessageBox::Yes)
208
        return true;
209
    else
210
        return false;
211
}
212

213
MDIViewPage* ViewProviderTemplate::getMDIViewPage() const
214
{
215
    auto t = getTemplate();
216
    auto page = t->getParentPage();
217
    Gui::ViewProvider* vp =
218
        Gui::Application::Instance->getDocument(t->getDocument())->getViewProvider(page);
219
    TechDrawGui::ViewProviderPage* dvp = dynamic_cast<TechDrawGui::ViewProviderPage*>(vp);
220
    if (dvp) {
221
        return dvp->getMDIViewPage();
222
    }
223
    return nullptr;
224
}
225

226
Gui::MDIView* ViewProviderTemplate::getMDIView() const { return getMDIViewPage(); }
227

228
TechDraw::DrawTemplate* ViewProviderTemplate::getTemplate() const
229
{
230
    return dynamic_cast<TechDraw::DrawTemplate*>(pcObject);
231
}
232

233
const char* ViewProviderTemplate::whoAmI() const { return m_myName.c_str(); }
234

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.