[TD]add light text on dark page mode
- some visually impaired users need white graphics on dark page. - revise Annotation dialog to respect dark style
This commit is contained in:
@@ -23,9 +23,9 @@
|
||||
#include "PreCompiled.h"
|
||||
|
||||
#ifndef _PreComp_
|
||||
# include <iostream>
|
||||
# include <sstream>
|
||||
# include <Precision.hxx>
|
||||
#include <Precision.hxx>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#endif
|
||||
|
||||
#include <App/Application.h>
|
||||
@@ -34,7 +34,7 @@
|
||||
#include <Base/Parameter.h>
|
||||
|
||||
#include "DrawPage.h"
|
||||
#include "DrawPagePy.h" // generated from DrawPagePy.xml
|
||||
#include "DrawPagePy.h"// generated from DrawPagePy.xml
|
||||
#include "DrawProjGroup.h"
|
||||
#include "DrawTemplate.h"
|
||||
#include "DrawView.h"
|
||||
@@ -50,49 +50,59 @@ using namespace TechDraw;
|
||||
// DrawPage
|
||||
//===========================================================================
|
||||
|
||||
App::PropertyFloatConstraint::Constraints DrawPage::scaleRange = {Precision::Confusion(),
|
||||
std::numeric_limits<double>::max(),
|
||||
(0.1)}; // increment by 0.1
|
||||
App::PropertyFloatConstraint::Constraints DrawPage::scaleRange = {
|
||||
Precision::Confusion(), std::numeric_limits<double>::max(), (0.1)};// increment by 0.1
|
||||
|
||||
PROPERTY_SOURCE(TechDraw::DrawPage, App::DocumentObject)
|
||||
|
||||
const char* DrawPage::ProjectionTypeEnums[] = { "First Angle",
|
||||
"Third Angle",
|
||||
nullptr };
|
||||
const char* DrawPage::ProjectionTypeEnums[] = {"First Angle", "Third Angle", nullptr};
|
||||
|
||||
DrawPage::DrawPage(void)
|
||||
{
|
||||
static const char *group = "Page";
|
||||
static const char* group = "Page";
|
||||
nowUnsetting = false;
|
||||
forceRedraw(false);
|
||||
|
||||
ADD_PROPERTY_TYPE(KeepUpdated, (Preferences::keepPagesUpToDate()),
|
||||
group, (App::PropertyType)(App::Prop_Output), "Keep page in sync with model");
|
||||
ADD_PROPERTY_TYPE(Template, (nullptr), group, (App::PropertyType)(App::Prop_None), "Attached Template");
|
||||
ADD_PROPERTY_TYPE(KeepUpdated,
|
||||
(Preferences::keepPagesUpToDate()),
|
||||
group,
|
||||
(App::PropertyType)(App::Prop_Output),
|
||||
"Keep page in sync with model");
|
||||
ADD_PROPERTY_TYPE(
|
||||
Template, (nullptr), group, (App::PropertyType)(App::Prop_None), "Attached Template");
|
||||
Template.setScope(App::LinkScope::Global);
|
||||
ADD_PROPERTY_TYPE(Views, (nullptr), group, (App::PropertyType)(App::Prop_None), "Attached Views");
|
||||
ADD_PROPERTY_TYPE(
|
||||
Views, (nullptr), group, (App::PropertyType)(App::Prop_None), "Attached Views");
|
||||
Views.setScope(App::LinkScope::Global);
|
||||
|
||||
// Projection Properties
|
||||
ProjectionType.setEnums(ProjectionTypeEnums);
|
||||
ADD_PROPERTY(ProjectionType, ((long)Preferences::projectionAngle()));
|
||||
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/General");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/General");
|
||||
double defScale = hGrp->GetFloat("DefaultScale", 1.0);
|
||||
ADD_PROPERTY_TYPE(Scale, (defScale), group, (App::PropertyType)(App::Prop_None), "Scale factor for this Page");
|
||||
ADD_PROPERTY_TYPE(Scale,
|
||||
(defScale),
|
||||
group,
|
||||
(App::PropertyType)(App::Prop_None),
|
||||
"Scale factor for this Page");
|
||||
|
||||
ADD_PROPERTY_TYPE(NextBalloonIndex, (1), group, (App::PropertyType)(App::Prop_None),
|
||||
"Auto-numbering for Balloons");
|
||||
ADD_PROPERTY_TYPE(NextBalloonIndex,
|
||||
(1),
|
||||
group,
|
||||
(App::PropertyType)(App::Prop_None),
|
||||
"Auto-numbering for Balloons");
|
||||
|
||||
Scale.setConstraints(&scaleRange);
|
||||
balloonParent = nullptr;
|
||||
}
|
||||
|
||||
DrawPage::~DrawPage()
|
||||
{
|
||||
}
|
||||
{}
|
||||
|
||||
void DrawPage::onBeforeChange(const App::Property* prop)
|
||||
{
|
||||
@@ -101,53 +111,56 @@ void DrawPage::onBeforeChange(const App::Property* prop)
|
||||
|
||||
void DrawPage::onChanged(const App::Property* prop)
|
||||
{
|
||||
if ((prop == &KeepUpdated) &&
|
||||
KeepUpdated.getValue()) {
|
||||
if (!isRestoring() &&
|
||||
!isUnsetting()) {
|
||||
if ((prop == &KeepUpdated) && KeepUpdated.getValue()) {
|
||||
if (!isRestoring() && !isUnsetting()) {
|
||||
//would be nice if this message was displayed immediately instead of after the recomputeFeature
|
||||
Base::Console().Message("Rebuilding Views for: %s/%s\n", getNameInDocument(), Label.getValue());
|
||||
Base::Console().Message(
|
||||
"Rebuilding Views for: %s/%s\n", getNameInDocument(), Label.getValue());
|
||||
updateAllViews();
|
||||
purgeTouched();
|
||||
}
|
||||
} else if (prop == &Template) {
|
||||
if (!isRestoring() &&
|
||||
!isUnsetting()) {
|
||||
}
|
||||
else if (prop == &Template) {
|
||||
if (!isRestoring() && !isUnsetting()) {
|
||||
//nothing to page to do??
|
||||
}
|
||||
} else if(prop == &Scale) {
|
||||
}
|
||||
else if (prop == &Scale) {
|
||||
// touch all views in the Page as they may be dependent on this scale
|
||||
// WF: not sure this loop is required. Views figure out their scale as required. but maybe
|
||||
// this is needed just to mark the Views to recompute??
|
||||
if (!isRestoring()) {
|
||||
const std::vector<App::DocumentObject*> &vals = Views.getValues();
|
||||
for(std::vector<App::DocumentObject *>::const_iterator it = vals.begin(); it < vals.end(); ++it) {
|
||||
TechDraw::DrawView *view = dynamic_cast<TechDraw::DrawView *>(*it);
|
||||
const std::vector<App::DocumentObject*>& vals = Views.getValues();
|
||||
for (std::vector<App::DocumentObject*>::const_iterator it = vals.begin();
|
||||
it < vals.end();
|
||||
++it) {
|
||||
TechDraw::DrawView* view = dynamic_cast<TechDraw::DrawView*>(*it);
|
||||
if (view && view->ScaleType.isValue("Page")) {
|
||||
if(std::abs(view->Scale.getValue() - Scale.getValue()) > FLT_EPSILON) {
|
||||
view->Scale.setValue(Scale.getValue());
|
||||
if (std::abs(view->Scale.getValue() - Scale.getValue()) > FLT_EPSILON) {
|
||||
view->Scale.setValue(Scale.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (prop == &ProjectionType) {
|
||||
// touch all ortho views in the Page as they may be dependent on Projection Type //(is this true?)
|
||||
const std::vector<App::DocumentObject*> &vals = Views.getValues();
|
||||
for(std::vector<App::DocumentObject *>::const_iterator it = vals.begin(); it < vals.end(); ++it) {
|
||||
TechDraw::DrawProjGroup *view = dynamic_cast<TechDraw::DrawProjGroup *>(*it);
|
||||
if (view && view->ProjectionType.isValue("Default")) {
|
||||
view->ProjectionType.touch();
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Also update Template graphic.
|
||||
}
|
||||
else if (prop == &ProjectionType) {
|
||||
// touch all ortho views in the Page as they may be dependent on Projection Type //(is this true?)
|
||||
const std::vector<App::DocumentObject*>& vals = Views.getValues();
|
||||
for (std::vector<App::DocumentObject*>::const_iterator it = vals.begin(); it < vals.end();
|
||||
++it) {
|
||||
TechDraw::DrawProjGroup* view = dynamic_cast<TechDraw::DrawProjGroup*>(*it);
|
||||
if (view && view->ProjectionType.isValue("Default")) {
|
||||
view->ProjectionType.touch();
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Also update Template graphic.
|
||||
}
|
||||
App::DocumentObject::onChanged(prop);
|
||||
}
|
||||
|
||||
//Page is just a container. It doesn't "do" anything.
|
||||
App::DocumentObjectExecReturn *DrawPage::execute(void)
|
||||
App::DocumentObjectExecReturn* DrawPage::execute(void)
|
||||
{
|
||||
return App::DocumentObject::execute();
|
||||
}
|
||||
@@ -157,10 +170,8 @@ short DrawPage::mustExecute() const
|
||||
{
|
||||
short result = 0;
|
||||
if (!isRestoring()) {
|
||||
result = (Views.isTouched() ||
|
||||
Scale.isTouched() ||
|
||||
ProjectionType.isTouched() ||
|
||||
Template.isTouched());
|
||||
result = (Views.isTouched() || Scale.isTouched() || ProjectionType.isTouched()
|
||||
|| Template.isTouched());
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
@@ -168,9 +179,9 @@ short DrawPage::mustExecute() const
|
||||
return App::DocumentObject::mustExecute();
|
||||
}
|
||||
|
||||
PyObject *DrawPage::getPyObject(void)
|
||||
PyObject* DrawPage::getPyObject(void)
|
||||
{
|
||||
if (PythonObject.is(Py::_None())){
|
||||
if (PythonObject.is(Py::_None())) {
|
||||
// ref counter is set to 1
|
||||
PythonObject = Py::Object(new DrawPagePy(this), true);
|
||||
}
|
||||
@@ -180,13 +191,12 @@ PyObject *DrawPage::getPyObject(void)
|
||||
|
||||
bool DrawPage::hasValidTemplate() const
|
||||
{
|
||||
App::DocumentObject *obj = nullptr;
|
||||
App::DocumentObject* obj = nullptr;
|
||||
obj = Template.getValue();
|
||||
|
||||
if(obj && obj->isDerivedFrom(TechDraw::DrawTemplate::getClassTypeId())) {
|
||||
TechDraw::DrawTemplate *templ = static_cast<TechDraw::DrawTemplate *>(obj);
|
||||
if (templ->getWidth() > 0. &&
|
||||
templ->getHeight() > 0.) {
|
||||
if (obj && obj->isDerivedFrom(TechDraw::DrawTemplate::getClassTypeId())) {
|
||||
TechDraw::DrawTemplate* templ = static_cast<TechDraw::DrawTemplate*>(obj);
|
||||
if (templ->getWidth() > 0. && templ->getHeight() > 0.) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -196,11 +206,11 @@ bool DrawPage::hasValidTemplate() const
|
||||
|
||||
double DrawPage::getPageWidth() const
|
||||
{
|
||||
App::DocumentObject *obj = nullptr;
|
||||
App::DocumentObject* obj = nullptr;
|
||||
obj = Template.getValue();
|
||||
|
||||
if( obj && obj->isDerivedFrom(TechDraw::DrawTemplate::getClassTypeId()) ) {
|
||||
TechDraw::DrawTemplate *templ = static_cast<TechDraw::DrawTemplate *>(obj);
|
||||
if (obj && obj->isDerivedFrom(TechDraw::DrawTemplate::getClassTypeId())) {
|
||||
TechDraw::DrawTemplate* templ = static_cast<TechDraw::DrawTemplate*>(obj);
|
||||
return templ->getWidth();
|
||||
}
|
||||
|
||||
@@ -209,12 +219,12 @@ double DrawPage::getPageWidth() const
|
||||
|
||||
double DrawPage::getPageHeight() const
|
||||
{
|
||||
App::DocumentObject *obj = nullptr;
|
||||
App::DocumentObject* obj = nullptr;
|
||||
obj = Template.getValue();
|
||||
|
||||
if(obj) {
|
||||
if(obj->isDerivedFrom(TechDraw::DrawTemplate::getClassTypeId())) {
|
||||
TechDraw::DrawTemplate *templ = static_cast<TechDraw::DrawTemplate *>(obj);
|
||||
if (obj) {
|
||||
if (obj->isDerivedFrom(TechDraw::DrawTemplate::getClassTypeId())) {
|
||||
TechDraw::DrawTemplate* templ = static_cast<TechDraw::DrawTemplate*>(obj);
|
||||
return templ->getHeight();
|
||||
}
|
||||
}
|
||||
@@ -223,16 +233,16 @@ double DrawPage::getPageHeight() const
|
||||
}
|
||||
|
||||
//orientation as text
|
||||
const char * DrawPage::getPageOrientation() const
|
||||
const char* DrawPage::getPageOrientation() const
|
||||
{
|
||||
App::DocumentObject *obj;
|
||||
App::DocumentObject* obj;
|
||||
obj = Template.getValue();
|
||||
|
||||
if(obj) {
|
||||
if(obj->isDerivedFrom(TechDraw::DrawTemplate::getClassTypeId())) {
|
||||
TechDraw::DrawTemplate *templ = static_cast<TechDraw::DrawTemplate *>(obj);
|
||||
if (obj) {
|
||||
if (obj->isDerivedFrom(TechDraw::DrawTemplate::getClassTypeId())) {
|
||||
TechDraw::DrawTemplate* templ = static_cast<TechDraw::DrawTemplate*>(obj);
|
||||
|
||||
return templ->Orientation.getValueAsString();
|
||||
return templ->Orientation.getValueAsString();
|
||||
}
|
||||
}
|
||||
throw Base::RuntimeError("Template not set for Page");
|
||||
@@ -241,41 +251,43 @@ const char * DrawPage::getPageOrientation() const
|
||||
//orientation as 0(Portrait) or 1(Landscape)
|
||||
int DrawPage::getOrientation() const
|
||||
{
|
||||
App::DocumentObject *obj;
|
||||
App::DocumentObject* obj;
|
||||
obj = Template.getValue();
|
||||
|
||||
if(obj) {
|
||||
if(obj->isDerivedFrom(TechDraw::DrawTemplate::getClassTypeId())) {
|
||||
TechDraw::DrawTemplate *templ = static_cast<TechDraw::DrawTemplate *>(obj);
|
||||
if (obj) {
|
||||
if (obj->isDerivedFrom(TechDraw::DrawTemplate::getClassTypeId())) {
|
||||
TechDraw::DrawTemplate* templ = static_cast<TechDraw::DrawTemplate*>(obj);
|
||||
|
||||
return templ->Orientation.getValue();
|
||||
return templ->Orientation.getValue();
|
||||
}
|
||||
}
|
||||
throw Base::RuntimeError("Template not set for Page");
|
||||
}
|
||||
|
||||
int DrawPage::addView(App::DocumentObject *docObj)
|
||||
int DrawPage::addView(App::DocumentObject* docObj)
|
||||
{
|
||||
if(!docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId()))
|
||||
if (!docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) {
|
||||
return -1;
|
||||
}
|
||||
DrawView* view = static_cast<DrawView*>(docObj);
|
||||
|
||||
//position all new views in center of Page (exceptDVDimension)
|
||||
if (!docObj->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId()) &&
|
||||
!docObj->isDerivedFrom(TechDraw::DrawViewBalloon::getClassTypeId())) {
|
||||
view->X.setValue(getPageWidth()/2.0);
|
||||
view->Y.setValue(getPageHeight()/2.0);
|
||||
//position all new views in center of Page (exceptDVDimension)
|
||||
if (!docObj->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId())
|
||||
&& !docObj->isDerivedFrom(TechDraw::DrawViewBalloon::getClassTypeId())) {
|
||||
view->X.setValue(getPageWidth() / 2.0);
|
||||
view->Y.setValue(getPageHeight() / 2.0);
|
||||
}
|
||||
|
||||
//add view to list
|
||||
const std::vector<App::DocumentObject *> currViews = Views.getValues();
|
||||
std::vector<App::DocumentObject *> newViews(currViews);
|
||||
const std::vector<App::DocumentObject*> currViews = Views.getValues();
|
||||
std::vector<App::DocumentObject*> newViews(currViews);
|
||||
newViews.push_back(docObj);
|
||||
Views.setValues(newViews);
|
||||
|
||||
//check if View fits on Page
|
||||
if ( !view->checkFit(this) ) {
|
||||
Base::Console().Warning("%s is larger than page. Will be scaled.\n", view->getNameInDocument());
|
||||
if (!view->checkFit(this)) {
|
||||
Base::Console().Warning("%s is larger than page. Will be scaled.\n",
|
||||
view->getNameInDocument());
|
||||
view->ScaleType.setValue("Automatic");
|
||||
}
|
||||
|
||||
@@ -285,10 +297,11 @@ int DrawPage::addView(App::DocumentObject *docObj)
|
||||
}
|
||||
|
||||
//Note Views might be removed from document elsewhere so need to check if a View is still in Document here
|
||||
int DrawPage::removeView(App::DocumentObject *docObj)
|
||||
int DrawPage::removeView(App::DocumentObject* docObj)
|
||||
{
|
||||
if(!docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId()))
|
||||
if (!docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
App::Document* doc = docObj->getDocument();
|
||||
if (!doc) {
|
||||
@@ -297,7 +310,7 @@ int DrawPage::removeView(App::DocumentObject *docObj)
|
||||
|
||||
const char* name = docObj->getNameInDocument();
|
||||
if (!name) {
|
||||
return -1;
|
||||
return -1;
|
||||
}
|
||||
const std::vector<App::DocumentObject*> currViews = Views.getValues();
|
||||
std::vector<App::DocumentObject*> newViews;
|
||||
@@ -334,7 +347,7 @@ void DrawPage::onDocumentRestored()
|
||||
|
||||
void DrawPage::redrawCommand()
|
||||
{
|
||||
// Base::Console().Message("DP::redrawCommand()\n");
|
||||
// Base::Console().Message("DP::redrawCommand()\n");
|
||||
forceRedraw(true);
|
||||
updateAllViews();
|
||||
forceRedraw(false);
|
||||
@@ -342,12 +355,13 @@ void DrawPage::redrawCommand()
|
||||
|
||||
void DrawPage::updateAllViews()
|
||||
{
|
||||
// Base::Console().Message("DP::updateAllViews()\n");
|
||||
std::vector<App::DocumentObject*> featViews = getAllViews(); //unordered list of views within page
|
||||
// Base::Console().Message("DP::updateAllViews()\n");
|
||||
std::vector<App::DocumentObject*> featViews =
|
||||
getAllViews();//unordered list of views within page
|
||||
|
||||
//first, make sure all the Parts have been executed so GeometryObjects exist
|
||||
for(auto& v: featViews) {
|
||||
TechDraw::DrawViewPart *part = dynamic_cast<TechDraw::DrawViewPart *>(v);
|
||||
for (auto& v : featViews) {
|
||||
TechDraw::DrawViewPart* part = dynamic_cast<TechDraw::DrawViewPart*>(v);
|
||||
if (part) {
|
||||
//view, section, detail, dpgi
|
||||
part->recomputeFeature();
|
||||
@@ -355,8 +369,8 @@ void DrawPage::updateAllViews()
|
||||
}
|
||||
//second, do the rest of the views that may depend on a part view
|
||||
//TODO: check if we have 2 layers of dependency (ex. leader > weld > tile?)
|
||||
for(auto& v: featViews) {
|
||||
TechDraw::DrawViewPart *part = dynamic_cast<TechDraw::DrawViewPart *>(v);
|
||||
for (auto& v : featViews) {
|
||||
TechDraw::DrawViewPart* part = dynamic_cast<TechDraw::DrawViewPart*>(v);
|
||||
if (part) {
|
||||
continue;
|
||||
}
|
||||
@@ -371,15 +385,15 @@ void DrawPage::updateAllViews()
|
||||
|
||||
std::vector<App::DocumentObject*> DrawPage::getAllViews(void)
|
||||
{
|
||||
auto views = Views.getValues(); //list of docObjects
|
||||
auto views = Views.getValues();//list of docObjects
|
||||
std::vector<App::DocumentObject*> allViews;
|
||||
for (auto& v: views) {
|
||||
for (auto& v : views) {
|
||||
allViews.push_back(v);
|
||||
if (v->isDerivedFrom(TechDraw::DrawProjGroup::getClassTypeId())) {
|
||||
TechDraw::DrawProjGroup* dpg = static_cast<TechDraw::DrawProjGroup*>(v);
|
||||
if (dpg) { //can't really happen!
|
||||
std::vector<App::DocumentObject*> pgViews = dpg->Views.getValues();
|
||||
allViews.insert(allViews.end(), pgViews.begin(), pgViews.end());
|
||||
if (dpg) {//can't really happen!
|
||||
std::vector<App::DocumentObject*> pgViews = dpg->Views.getValues();
|
||||
allViews.insert(allViews.end(), pgViews.begin(), pgViews.end());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -397,31 +411,34 @@ void DrawPage::unsetupObject()
|
||||
|
||||
try {
|
||||
const std::vector<App::DocumentObject*> currViews = Views.getValues();
|
||||
for (auto& v: currViews) {
|
||||
for (auto& v : currViews) {
|
||||
//NOTE: the order of objects in Page.Views does not reflect the object hierarchy
|
||||
// this means that a ProjGroup could be deleted before it's child ProjGroupItems.
|
||||
// this causes problems when removing objects from document
|
||||
if (v->isAttachedToDocument()) {
|
||||
std::string viewName = v->getNameInDocument();
|
||||
Base::Interpreter().runStringArg("App.getDocument(\"%s\").removeObject(\"%s\")",
|
||||
docName.c_str(), viewName.c_str());
|
||||
} else {
|
||||
Base::Console().Log("DP::unsetupObject - v(%s) is not in document. skipping\n", pageName.c_str());
|
||||
docName.c_str(),
|
||||
viewName.c_str());
|
||||
}
|
||||
else {
|
||||
Base::Console().Log("DP::unsetupObject - v(%s) is not in document. skipping\n",
|
||||
pageName.c_str());
|
||||
}
|
||||
}
|
||||
std::vector<App::DocumentObject*> emptyViews; //probably superfluous
|
||||
std::vector<App::DocumentObject*> emptyViews;//probably superfluous
|
||||
Views.setValues(emptyViews);
|
||||
|
||||
}
|
||||
catch (...) {
|
||||
Base::Console().Warning("DP::unsetupObject - %s - error while deleting children\n", getNameInDocument());
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
Base::Console().Warning("DP::unsetupObject - %s - error while deleting children\n",
|
||||
getNameInDocument());
|
||||
}
|
||||
|
||||
App::DocumentObject* tmp = Template.getValue();
|
||||
if (tmp) {
|
||||
std::string templateName = Template.getValue()->getNameInDocument();
|
||||
Base::Interpreter().runStringArg("App.getDocument(\"%s\").removeObject(\"%s\")",
|
||||
docName.c_str(), templateName.c_str());
|
||||
Base::Interpreter().runStringArg(
|
||||
"App.getDocument(\"%s\").removeObject(\"%s\")", docName.c_str(), templateName.c_str());
|
||||
}
|
||||
Template.setValue(nullptr);
|
||||
}
|
||||
@@ -434,21 +451,23 @@ int DrawPage::getNextBalloonIndex(void)
|
||||
return result;
|
||||
}
|
||||
|
||||
void DrawPage::handleChangedPropertyType(
|
||||
Base::XMLReader &reader, const char * TypeName, App::Property * prop)
|
||||
void DrawPage::handleChangedPropertyType(Base::XMLReader& reader, const char* TypeName,
|
||||
App::Property* prop)
|
||||
{
|
||||
if (prop == &Scale) {
|
||||
App::PropertyFloat tmp;
|
||||
if (strcmp(tmp.getTypeId().getName(), TypeName)==0) { //property in file is Float
|
||||
if (strcmp(tmp.getTypeId().getName(), TypeName) == 0) {//property in file is Float
|
||||
tmp.setContainer(this);
|
||||
tmp.Restore(reader);
|
||||
double tmpValue = tmp.getValue();
|
||||
if (tmpValue > 0.0) {
|
||||
Scale.setValue(tmpValue);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
Scale.setValue(1.0);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// has Scale prop that isn't Float!
|
||||
Base::Console().Log("DrawPage::Restore - old Document Scale is Not Float!\n");
|
||||
// no idea
|
||||
@@ -459,12 +478,10 @@ void DrawPage::handleChangedPropertyType(
|
||||
bool DrawPage::canUpdate() const
|
||||
{
|
||||
bool result = false;
|
||||
if (GlobalUpdateDrawings() &&
|
||||
KeepUpdated.getValue()) {
|
||||
if (GlobalUpdateDrawings() && KeepUpdated.getValue()) {
|
||||
result = true;
|
||||
} else if (!GlobalUpdateDrawings() &&
|
||||
AllowPageOverride() &&
|
||||
KeepUpdated.getValue()) {
|
||||
}
|
||||
else if (!GlobalUpdateDrawings() && AllowPageOverride() && KeepUpdated.getValue()) {
|
||||
result = true;
|
||||
}
|
||||
return result;
|
||||
@@ -486,8 +503,11 @@ bool DrawPage::hasObject(App::DocumentObject* obj)
|
||||
//allow/prevent drawing updates for all Pages
|
||||
bool DrawPage::GlobalUpdateDrawings(void)
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/General");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/General");
|
||||
bool result = hGrp->GetBool("GlobalUpdateDrawings", true);
|
||||
return result;
|
||||
}
|
||||
@@ -495,8 +515,11 @@ bool DrawPage::GlobalUpdateDrawings(void)
|
||||
//allow/prevent a single page to update despite GlobalUpdateDrawings setting
|
||||
bool DrawPage::AllowPageOverride(void)
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/General");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/General");
|
||||
bool result = hGrp->GetBool("AllowPageOverride", true);
|
||||
return result;
|
||||
}
|
||||
@@ -504,14 +527,16 @@ bool DrawPage::AllowPageOverride(void)
|
||||
|
||||
// Python Drawing feature ---------------------------------------------------------
|
||||
|
||||
namespace App {
|
||||
namespace App
|
||||
{
|
||||
/// @cond DOXERR
|
||||
PROPERTY_SOURCE_TEMPLATE(TechDraw::DrawPagePython, TechDraw::DrawPage)
|
||||
template<> const char* TechDraw::DrawPagePython::getViewProviderName(void) const {
|
||||
template<> const char* TechDraw::DrawPagePython::getViewProviderName(void) const
|
||||
{
|
||||
return "TechDrawGui::ViewProviderPage";
|
||||
}
|
||||
/// @endcond
|
||||
|
||||
// explicit template instantiation
|
||||
template class TechDrawExport FeaturePythonT<TechDraw::DrawPage>;
|
||||
}
|
||||
}// namespace App
|
||||
|
||||
@@ -53,7 +53,7 @@ DrawViewAnnotation::DrawViewAnnotation()
|
||||
ADD_PROPERTY_TYPE(Text ,("Default Text"), vgroup, App::Prop_None, "Annotation text");
|
||||
ADD_PROPERTY_TYPE(Font ,(Preferences::labelFont().c_str()),
|
||||
vgroup, App::Prop_None, "Font name");
|
||||
ADD_PROPERTY_TYPE(TextColor, (0.0f, 0.0f, 0.0f), vgroup, App::Prop_None, "Text color");
|
||||
ADD_PROPERTY_TYPE(TextColor, (Preferences::normalColor()), vgroup, App::Prop_None, "Text color");
|
||||
ADD_PROPERTY_TYPE(TextSize, (Preferences::labelFontSizeMM()),
|
||||
vgroup, App::Prop_None, "Text size");
|
||||
ADD_PROPERTY_TYPE(MaxWidth, (-1.0), vgroup, App::Prop_None, "Maximum width of the annotation block.\n -1 means no maximum width.");
|
||||
|
||||
@@ -23,19 +23,19 @@
|
||||
#include "PreCompiled.h"
|
||||
|
||||
#ifndef _PreComp_
|
||||
# include <sstream>
|
||||
# include <QDomDocument>
|
||||
# include "QDomNodeModel.h"
|
||||
# include <QXmlQuery>
|
||||
# include <QXmlResultItems>
|
||||
#include "QDomNodeModel.h"
|
||||
#include <QDomDocument>
|
||||
#include <QXmlQuery>
|
||||
#include <QXmlResultItems>
|
||||
#include <sstream>
|
||||
#endif
|
||||
|
||||
#include <Base/Console.h>
|
||||
|
||||
#include "DrawViewSymbol.h"
|
||||
#include "DrawViewSymbolPy.h" // generated from DrawViewSymbolPy.xml
|
||||
#include "DrawPage.h"
|
||||
#include "DrawUtil.h"
|
||||
#include "DrawViewSymbol.h"
|
||||
#include "DrawViewSymbolPy.h"// generated from DrawViewSymbolPy.xml
|
||||
|
||||
|
||||
using namespace TechDraw;
|
||||
@@ -49,18 +49,17 @@ PROPERTY_SOURCE(TechDraw::DrawViewSymbol, TechDraw::DrawView)
|
||||
|
||||
DrawViewSymbol::DrawViewSymbol()
|
||||
{
|
||||
static const char *vgroup = "Drawing view";
|
||||
static const char* vgroup = "Drawing view";
|
||||
|
||||
ADD_PROPERTY_TYPE(Symbol, (""), vgroup, App::Prop_None, "The SVG code defining this symbol");
|
||||
ADD_PROPERTY_TYPE(EditableTexts, (""), vgroup, App::Prop_None, "Substitution values for the editable strings in this symbol");
|
||||
ADD_PROPERTY_TYPE(EditableTexts, (""), vgroup, App::Prop_None,
|
||||
"Substitution values for the editable strings in this symbol");
|
||||
ScaleType.setValue("Custom");
|
||||
Scale.setStatus(App::Property::ReadOnly, false);
|
||||
Symbol.setStatus(App::Property::Hidden, true);
|
||||
}
|
||||
|
||||
DrawViewSymbol::~DrawViewSymbol()
|
||||
{
|
||||
}
|
||||
DrawViewSymbol::~DrawViewSymbol() {}
|
||||
|
||||
void DrawViewSymbol::onChanged(const App::Property* prop)
|
||||
{
|
||||
@@ -69,7 +68,8 @@ void DrawViewSymbol::onChanged(const App::Property* prop)
|
||||
std::vector<std::string> editables = getEditableFields();
|
||||
EditableTexts.setValues(editables);
|
||||
}
|
||||
} else if (prop == &EditableTexts) {
|
||||
}
|
||||
else if (prop == &EditableTexts) {
|
||||
//this will change Symbol, which will call onChanged(Symbol),
|
||||
//which will change EditableTexts, but the loop stops after
|
||||
//1 cycle
|
||||
@@ -79,7 +79,7 @@ void DrawViewSymbol::onChanged(const App::Property* prop)
|
||||
TechDraw::DrawView::onChanged(prop);
|
||||
}
|
||||
|
||||
App::DocumentObjectExecReturn *DrawViewSymbol::execute()
|
||||
App::DocumentObjectExecReturn* DrawViewSymbol::execute()
|
||||
{
|
||||
//nothing to do. DVS is just a container for properties.
|
||||
//the action takes place on the Gui side.
|
||||
@@ -88,9 +88,9 @@ App::DocumentObjectExecReturn *DrawViewSymbol::execute()
|
||||
|
||||
QRectF DrawViewSymbol::getRect() const
|
||||
{
|
||||
double w = 64.0; //must default to something
|
||||
double h = 64.0;
|
||||
return (QRectF(0, 0,w, h));
|
||||
double w = 64.0;//must default to something
|
||||
double h = 64.0;
|
||||
return (QRectF(0, 0, w, h));
|
||||
}
|
||||
|
||||
//!Assume all svg files fit the page and/or the user will scale manually
|
||||
@@ -117,15 +117,15 @@ std::vector<std::string> DrawViewSymbol::getEditableFields()
|
||||
|
||||
// XPath query to select all <tspan> nodes whose <text> parent
|
||||
// has "freecad:editable" attribute
|
||||
query.setQuery(QString::fromUtf8(
|
||||
"declare default element namespace \"" SVG_NS_URI "\"; "
|
||||
"declare namespace freecad=\"" FREECAD_SVG_NS_URI "\"; "
|
||||
"//text[@freecad:editable]/tspan"));
|
||||
query.setQuery(QString::fromUtf8("declare default element namespace \"" SVG_NS_URI "\"; "
|
||||
"declare namespace freecad=\"" FREECAD_SVG_NS_URI "\"; "
|
||||
"//text[@freecad:editable]/tspan"));
|
||||
|
||||
query.evaluateTo(&queryResult);
|
||||
|
||||
while (!queryResult.next().isNull()) {
|
||||
QDomElement tspan = model.toDomNode(queryResult.current().toNodeModelIndex()).toElement();
|
||||
QDomElement tspan =
|
||||
model.toDomNode(queryResult.current().toNodeModelIndex()).toElement();
|
||||
QString editableValue = tspan.firstChild().nodeValue();
|
||||
editables.emplace_back(editableValue.toUtf8().constData());
|
||||
}
|
||||
@@ -153,19 +153,19 @@ void DrawViewSymbol::updateFieldsInSymbol()
|
||||
|
||||
// XPath query to select all <tspan> nodes whose <text> parent
|
||||
// has "freecad:editable" attribute
|
||||
query.setQuery(QString::fromUtf8(
|
||||
"declare default element namespace \"" SVG_NS_URI "\"; "
|
||||
"declare namespace freecad=\"" FREECAD_SVG_NS_URI "\"; "
|
||||
"//text[@freecad:editable]/tspan"));
|
||||
query.setQuery(QString::fromUtf8("declare default element namespace \"" SVG_NS_URI "\"; "
|
||||
"declare namespace freecad=\"" FREECAD_SVG_NS_URI "\"; "
|
||||
"//text[@freecad:editable]/tspan"));
|
||||
query.evaluateTo(&queryResult);
|
||||
|
||||
unsigned int count = 0;
|
||||
while (!queryResult.next().isNull())
|
||||
{
|
||||
QDomElement tspanElement = model.toDomNode(queryResult.current().toNodeModelIndex()).toElement();
|
||||
while (!queryResult.next().isNull()) {
|
||||
QDomElement tspanElement =
|
||||
model.toDomNode(queryResult.current().toNodeModelIndex()).toElement();
|
||||
|
||||
// Keep all spaces in the text node
|
||||
tspanElement.setAttribute(QString::fromUtf8("xml:space"), QString::fromUtf8("preserve"));
|
||||
tspanElement.setAttribute(QString::fromUtf8("xml:space"),
|
||||
QString::fromUtf8("preserve"));
|
||||
|
||||
// Remove all child nodes (if any)
|
||||
while (!tspanElement.lastChild().isNull()) {
|
||||
@@ -173,8 +173,8 @@ void DrawViewSymbol::updateFieldsInSymbol()
|
||||
}
|
||||
|
||||
// Finally append text node with editable replacement as the only <tspan> descendant
|
||||
tspanElement.appendChild(symbolDocument.createTextNode(
|
||||
QString::fromUtf8(editText[count].c_str())));
|
||||
tspanElement.appendChild(
|
||||
symbolDocument.createTextNode(QString::fromUtf8(editText[count].c_str())));
|
||||
++count;
|
||||
}
|
||||
Symbol.setValue(symbolDocument.toString(1).toStdString());
|
||||
@@ -186,6 +186,9 @@ bool DrawViewSymbol::loadQDomDocument(QDomDocument& symbolDocument)
|
||||
{
|
||||
const char* symbol = Symbol.getValue();
|
||||
QByteArray qba(symbol);
|
||||
if (qba.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
QString errorMsg;
|
||||
int errorLine;
|
||||
int errorCol;
|
||||
@@ -193,15 +196,16 @@ bool DrawViewSymbol::loadQDomDocument(QDomDocument& symbolDocument)
|
||||
bool rc = symbolDocument.setContent(qba, nsProcess, &errorMsg, &errorLine, &errorCol);
|
||||
if (!rc) {
|
||||
//invalid SVG message
|
||||
Base::Console().Warning("DrawViewSymbol - %s - SVG for Symbol is not valid. See log.\n");
|
||||
Base::Console().Warning("DrawViewSymbol - %s - SVG for Symbol is not valid. See log.\n",
|
||||
getNameInDocument());
|
||||
Base::Console().Log("DrawViewSymbol - %s - len: %d rc: %d error: %s line: %d col: %d\n",
|
||||
getNameInDocument(), strlen(symbol), rc,
|
||||
qPrintable(errorMsg), errorLine, errorCol);
|
||||
getNameInDocument(), strlen(symbol), rc, qPrintable(errorMsg),
|
||||
errorLine, errorCol);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
PyObject *DrawViewSymbol::getPyObject()
|
||||
PyObject* DrawViewSymbol::getPyObject()
|
||||
{
|
||||
if (PythonObject.is(Py::_None())) {
|
||||
// ref counter is set to 1
|
||||
@@ -212,14 +216,16 @@ PyObject *DrawViewSymbol::getPyObject()
|
||||
|
||||
// Python Drawing feature ---------------------------------------------------------
|
||||
|
||||
namespace App {
|
||||
namespace App
|
||||
{
|
||||
/// @cond DOXERR
|
||||
PROPERTY_SOURCE_TEMPLATE(TechDraw::DrawViewSymbolPython, TechDraw::DrawViewSymbol)
|
||||
template<> const char* TechDraw::DrawViewSymbolPython::getViewProviderName() const {
|
||||
template<> const char* TechDraw::DrawViewSymbolPython::getViewProviderName() const
|
||||
{
|
||||
return "TechDrawGui::ViewProviderSymbol";
|
||||
}
|
||||
/// @endcond
|
||||
|
||||
// explicit template instantiation
|
||||
template class TechDrawExport FeaturePythonT<TechDraw::DrawViewSymbol>;
|
||||
}
|
||||
}// namespace App
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
#include "PreCompiled.h"
|
||||
|
||||
#ifndef _PreComp_
|
||||
#include <string>
|
||||
#include <QString>
|
||||
#include <string>
|
||||
#endif
|
||||
|
||||
#include <App/Application.h>
|
||||
@@ -45,9 +45,11 @@ const double Preferences::DefaultFontSizeInMM = 5.0;
|
||||
|
||||
std::string Preferences::labelFont()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Labels");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Labels");
|
||||
std::string fontName = hGrp->GetASCII("LabelFont", "osifont");
|
||||
return fontName;
|
||||
}
|
||||
@@ -60,40 +62,50 @@ QString Preferences::labelFontQString()
|
||||
|
||||
double Preferences::labelFontSizeMM()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Labels");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Labels");
|
||||
return hGrp->GetFloat("LabelSize", DefaultFontSizeInMM);
|
||||
}
|
||||
|
||||
double Preferences::dimFontSizeMM()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Dimensions");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Dimensions");
|
||||
return hGrp->GetFloat("FontSize", DefaultFontSizeInMM);
|
||||
}
|
||||
|
||||
App::Color Preferences::normalColor()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Colors");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Colors");
|
||||
App::Color fcColor;
|
||||
fcColor.setPackedValue(hGrp->GetUnsigned("NormalColor", 0x000000FF)); //#000000 black
|
||||
fcColor.setPackedValue(hGrp->GetUnsigned("NormalColor", 0x000000FF));//#000000 black
|
||||
return fcColor;
|
||||
}
|
||||
|
||||
App::Color Preferences::selectColor()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("View");
|
||||
unsigned int defColor = hGrp->GetUnsigned("SelectionColor", 0x00FF00FF); //#00FF00 lime
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("View");
|
||||
unsigned int defColor = hGrp->GetUnsigned("SelectionColor", 0x00FF00FF);//#00FF00 lime
|
||||
|
||||
hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Colors");
|
||||
hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Colors");
|
||||
App::Color fcColor;
|
||||
fcColor.setPackedValue(hGrp->GetUnsigned("SelectColor", defColor));
|
||||
return fcColor;
|
||||
@@ -101,14 +113,18 @@ App::Color Preferences::selectColor()
|
||||
|
||||
App::Color Preferences::preselectColor()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("View");
|
||||
unsigned int defColor = hGrp->GetUnsigned("HighlightColor", 0xFFFF00FF); //#FFFF00 yellow
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("View");
|
||||
unsigned int defColor = hGrp->GetUnsigned("HighlightColor", 0xFFFF00FF);//#FFFF00 yellow
|
||||
|
||||
hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Colors");
|
||||
hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Colors");
|
||||
App::Color fcColor;
|
||||
fcColor.setPackedValue(hGrp->GetUnsigned("PreSelectColor", defColor));
|
||||
return fcColor;
|
||||
@@ -116,26 +132,34 @@ App::Color Preferences::preselectColor()
|
||||
|
||||
App::Color Preferences::vertexColor()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Decorations");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Decorations");
|
||||
App::Color fcColor;
|
||||
fcColor.setPackedValue(hGrp->GetUnsigned("VertexColor", 0x000000FF)); //#000000 black
|
||||
fcColor.setPackedValue(hGrp->GetUnsigned("VertexColor", 0x000000FF));//#000000 black
|
||||
return fcColor;
|
||||
}
|
||||
|
||||
double Preferences::vertexScale()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().GetGroup("BaseApp")->
|
||||
GetGroup("Preferences")->GetGroup("Mod/TechDraw/General");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/General");
|
||||
double result = hGrp->GetFloat("VertexScale", 3.0);
|
||||
return result;
|
||||
}
|
||||
|
||||
int Preferences::scaleType()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/General");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/General");
|
||||
int result = hGrp->GetInt("DefaultScaleType", 0);
|
||||
return result;
|
||||
}
|
||||
@@ -143,25 +167,32 @@ int Preferences::scaleType()
|
||||
double Preferences::scale()
|
||||
{
|
||||
int prefScaleType = scaleType();
|
||||
if (prefScaleType == 0) { //page scale
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/General");
|
||||
if (prefScaleType == 0) {//page scale
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/General");
|
||||
return hGrp->GetFloat("DefaultPageScale", 1.0);
|
||||
} else if (prefScaleType == 1) { //custom scale
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/General");
|
||||
}
|
||||
else if (prefScaleType == 1) {//custom scale
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/General");
|
||||
return hGrp->GetFloat("DefaultViewScale", 1.0);
|
||||
}
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
//lightgray #D3D3D3
|
||||
|
||||
bool Preferences::keepPagesUpToDate()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/General");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/General");
|
||||
bool autoUpdate = hGrp->GetBool("KeepPagesUpToDate", true);
|
||||
return autoUpdate;
|
||||
}
|
||||
@@ -169,45 +200,55 @@ bool Preferences::keepPagesUpToDate()
|
||||
bool Preferences::useGlobalDecimals()
|
||||
{
|
||||
bool result = false;
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().
|
||||
GetUserParameter().GetGroup("BaseApp")->
|
||||
GetGroup("Preferences")->GetGroup("Mod/TechDraw/Dimensions");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Dimensions");
|
||||
result = hGrp->GetBool("UseGlobalDecimals", true);
|
||||
return result;
|
||||
}
|
||||
|
||||
int Preferences::projectionAngle()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/General");
|
||||
int projType = hGrp->GetInt("ProjectionAngle", 0); //First Angle
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/General");
|
||||
int projType = hGrp->GetInt("ProjectionAngle", 0);//First Angle
|
||||
return projType;
|
||||
}
|
||||
|
||||
int Preferences::lineGroup()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Decorations");
|
||||
int lgInt = hGrp->GetInt("LineGroup", 3); // FC 0.70mm
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Decorations");
|
||||
int lgInt = hGrp->GetInt("LineGroup", 3);// FC 0.70mm
|
||||
return lgInt;
|
||||
}
|
||||
|
||||
int Preferences::balloonArrow()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Decorations");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Decorations");
|
||||
int end = hGrp->GetInt("BalloonArrow", 0);
|
||||
return end;
|
||||
}
|
||||
|
||||
QString Preferences::defaultTemplate()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Files");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Files");
|
||||
std::string defaultDir = App::Application::getResourceDir() + "Mod/TechDraw/Templates/";
|
||||
std::string defaultFileName = defaultDir + "A4_LandscapeTD.svg";
|
||||
std::string prefFileName = hGrp->GetASCII("TemplateFile", defaultFileName.c_str());
|
||||
@@ -225,8 +266,11 @@ QString Preferences::defaultTemplate()
|
||||
|
||||
QString Preferences::defaultTemplateDir()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/Files");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Files");
|
||||
|
||||
std::string defaultDir = App::Application::getResourceDir() + "Mod/TechDraw/Templates";
|
||||
std::string prefTemplateDir = hGrp->GetASCII("TemplateDir", defaultDir.c_str());
|
||||
@@ -236,17 +280,20 @@ QString Preferences::defaultTemplateDir()
|
||||
QString templateDir = QString::fromStdString(prefTemplateDir);
|
||||
Base::FileInfo fi(prefTemplateDir);
|
||||
if (!fi.isReadable()) {
|
||||
Base::Console().Warning("Template Directory: %s is not readable\n", prefTemplateDir.c_str());
|
||||
Base::Console().Warning("Template Directory: %s is not readable\n",
|
||||
prefTemplateDir.c_str());
|
||||
templateDir = QString::fromStdString(defaultDir);
|
||||
}
|
||||
}
|
||||
return templateDir;
|
||||
}
|
||||
|
||||
std::string Preferences::lineGroupFile()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().
|
||||
GetUserParameter().GetGroup("BaseApp")->
|
||||
GetGroup("Preferences")->GetGroup("Mod/TechDraw/Files");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Files");
|
||||
std::string defaultDir = App::Application::getResourceDir() + "Mod/TechDraw/LineGroup/";
|
||||
std::string defaultFileName = defaultDir + "LineGroup.csv";
|
||||
std::string lgFileName = hGrp->GetASCII("LineGroupFile", defaultFileName.c_str());
|
||||
@@ -263,31 +310,42 @@ std::string Preferences::lineGroupFile()
|
||||
|
||||
std::string Preferences::formatSpec()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/Dimensions");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Dimensions");
|
||||
return hGrp->GetASCII("formatSpec", "%.2w");
|
||||
}
|
||||
|
||||
int Preferences::altDecimals()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/Dimensions");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Dimensions");
|
||||
return hGrp->GetInt("AltDecimals", 2);
|
||||
}
|
||||
|
||||
int Preferences::mattingStyle()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Decorations");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Decorations");
|
||||
int style = hGrp->GetInt("MattingStyle", 0);
|
||||
return style;
|
||||
}
|
||||
|
||||
std::string Preferences::svgFile()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/Files");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Files");
|
||||
|
||||
std::string defaultDir = App::Application::getResourceDir() + "Mod/TechDraw/Patterns/";
|
||||
std::string defaultFileName = defaultDir + "simple.svg";
|
||||
@@ -305,8 +363,11 @@ std::string Preferences::svgFile()
|
||||
|
||||
std::string Preferences::patFile()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/PAT");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/PAT");
|
||||
|
||||
std::string defaultDir = App::Application::getResourceDir() + "Mod/TechDraw/PAT/";
|
||||
std::string defaultFileName = defaultDir + "FCPAT.pat";
|
||||
@@ -325,8 +386,11 @@ std::string Preferences::patFile()
|
||||
|
||||
std::string Preferences::bitmapFill()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/Files");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Files");
|
||||
|
||||
std::string defaultDir = App::Application::getResourceDir() + "Mod/TechDraw/Patterns/";
|
||||
std::string defaultFileName = defaultDir + "default.png";
|
||||
@@ -344,27 +408,130 @@ std::string Preferences::bitmapFill()
|
||||
|
||||
double Preferences::GapISO()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Dimensions");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Dimensions");
|
||||
double factor = hGrp->GetFloat("GapISO", 8.0);
|
||||
return factor;
|
||||
}
|
||||
|
||||
double Preferences::GapASME()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
|
||||
.GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/Dimensions");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Dimensions");
|
||||
double factor = hGrp->GetFloat("GapASME", 6.0);
|
||||
return factor;
|
||||
}
|
||||
|
||||
bool Preferences::reportProgress()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().
|
||||
GetGroup("BaseApp")->GetGroup("Preferences")->
|
||||
GetGroup("Mod/TechDraw/General");
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/General");
|
||||
bool report = hGrp->GetBool("ReportProgress", false);
|
||||
return report;
|
||||
}
|
||||
|
||||
bool Preferences::lightOnDark()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Colors");
|
||||
bool light = hGrp->GetBool("LightOnDark", false);
|
||||
return light;
|
||||
}
|
||||
|
||||
void Preferences::lightOnDark(bool state)
|
||||
{
|
||||
Base::Console().Message("Pref::useLightText - set to %d\n", state);
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Colors");
|
||||
hGrp->SetBool("LightOnDark", state);
|
||||
}
|
||||
|
||||
bool Preferences::monochrome()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Colors");
|
||||
bool mono = hGrp->GetBool("Monochrome", false);
|
||||
return mono;
|
||||
}
|
||||
|
||||
void Preferences::monochrome(bool state)
|
||||
{
|
||||
Base::Console().Message("Pref::useLightText - set to %d\n", state);
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Colors");
|
||||
hGrp->SetBool("Monochrome", state);
|
||||
}
|
||||
|
||||
App::Color Preferences::lightTextColor()
|
||||
{
|
||||
Base::Reference<ParameterGrp> hGrp = App::GetApplication()
|
||||
.GetUserParameter()
|
||||
.GetGroup("BaseApp")
|
||||
->GetGroup("Preferences")
|
||||
->GetGroup("Mod/TechDraw/Colors");
|
||||
App::Color result;
|
||||
result.setPackedValue(hGrp->GetUnsigned("LightTextColor", 0xFFFFFFFF));//#FFFFFFFF white
|
||||
return result;
|
||||
}
|
||||
|
||||
App::Color Preferences::lightenColor(App::Color orig)
|
||||
{
|
||||
// get component colours on [0, 255]
|
||||
uchar red = orig.r * 255;
|
||||
uchar blue = orig.b * 255;
|
||||
uchar green = orig.g * 255;
|
||||
// uchar alpha = orig.a * 255;
|
||||
|
||||
// shift color values
|
||||
uchar m = std::min({red, blue, green});
|
||||
red -= m;
|
||||
blue -= m;
|
||||
green -= m;
|
||||
|
||||
// calculate chroma (colour range)
|
||||
uchar chroma = std::max({red, blue, green});
|
||||
|
||||
// calculate lightened colour value
|
||||
uchar newm = 255 - chroma - m;
|
||||
red += newm;
|
||||
green += newm;
|
||||
blue += newm;
|
||||
|
||||
double redF = (float)red / 255.0;
|
||||
double greenF = (float)green / 255.0;
|
||||
double blueF = (float)blue / 255.0;
|
||||
|
||||
return App::Color(redF, greenF, blueF, orig.a);
|
||||
}
|
||||
|
||||
App::Color Preferences::getAccessibleColor(App::Color orig)
|
||||
{
|
||||
if (Preferences::lightOnDark() && Preferences::monochrome()) {
|
||||
return lightTextColor();
|
||||
}
|
||||
if (Preferences::lightOnDark()) {
|
||||
return lightenColor(orig);
|
||||
}
|
||||
return orig;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
|
||||
class QString;
|
||||
class QColor;
|
||||
|
||||
namespace App
|
||||
{
|
||||
@@ -39,50 +40,59 @@ namespace TechDraw
|
||||
{
|
||||
|
||||
//getters for parameters used in multiple places.
|
||||
class TechDrawExport Preferences {
|
||||
class TechDrawExport Preferences
|
||||
{
|
||||
|
||||
public:
|
||||
static std::string labelFont();
|
||||
static QString labelFontQString();
|
||||
static double labelFontSizeMM();
|
||||
static double dimFontSizeMM();
|
||||
static std::string labelFont();
|
||||
static QString labelFontQString();
|
||||
static double labelFontSizeMM();
|
||||
static double dimFontSizeMM();
|
||||
|
||||
static App::Color normalColor();
|
||||
static App::Color selectColor();
|
||||
static App::Color preselectColor();
|
||||
static App::Color vertexColor();
|
||||
static double vertexScale();
|
||||
static int scaleType();
|
||||
static double scale();
|
||||
static bool useGlobalDecimals();
|
||||
static bool keepPagesUpToDate();
|
||||
static App::Color normalColor();
|
||||
static App::Color selectColor();
|
||||
static App::Color preselectColor();
|
||||
static App::Color vertexColor();
|
||||
static double vertexScale();
|
||||
static int scaleType();
|
||||
static double scale();
|
||||
static bool useGlobalDecimals();
|
||||
static bool keepPagesUpToDate();
|
||||
|
||||
static int projectionAngle();
|
||||
static int lineGroup();
|
||||
static int projectionAngle();
|
||||
static int lineGroup();
|
||||
|
||||
static int balloonArrow();
|
||||
static int balloonArrow();
|
||||
|
||||
static QString defaultTemplate();
|
||||
static QString defaultTemplateDir();
|
||||
static std::string lineGroupFile();
|
||||
static QString defaultTemplate();
|
||||
static QString defaultTemplateDir();
|
||||
static std::string lineGroupFile();
|
||||
|
||||
static const double DefaultFontSizeInMM;
|
||||
static const double DefaultFontSizeInMM;
|
||||
|
||||
static std::string formatSpec();
|
||||
static int altDecimals();
|
||||
static std::string formatSpec();
|
||||
static int altDecimals();
|
||||
|
||||
static int mattingStyle();
|
||||
static int mattingStyle();
|
||||
|
||||
static std::string svgFile();
|
||||
static std::string patFile();
|
||||
static std::string svgFile();
|
||||
static std::string patFile();
|
||||
|
||||
static std::string bitmapFill();
|
||||
static std::string bitmapFill();
|
||||
|
||||
static double GapISO();
|
||||
static double GapASME();
|
||||
static double GapISO();
|
||||
static double GapASME();
|
||||
|
||||
static bool reportProgress();
|
||||
static bool reportProgress();
|
||||
|
||||
static bool lightOnDark();
|
||||
static void lightOnDark(bool state);
|
||||
static bool monochrome();
|
||||
static void monochrome(bool state);
|
||||
static App::Color lightTextColor();
|
||||
static App::Color lightenColor(App::Color orig);
|
||||
static App::Color getAccessibleColor(App::Color orig);
|
||||
};
|
||||
|
||||
} //end namespace TechDraw
|
||||
}//end namespace TechDraw
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user