From 6ec33e851327515547d70dc56e24d0438b909ed3 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Fri, 21 Jun 2019 16:34:23 +0800 Subject: [PATCH] Gui: add ViewParams class A convenience class to obtain common view parameters, analogous to existing WindowParameter class. --- src/Gui/CMakeLists.txt | 2 + src/Gui/ViewParams.cpp | 61 +++++++++++++++++++ src/Gui/ViewParams.h | 79 +++++++++++++++++++++++++ src/Gui/ViewProviderMeasureDistance.cpp | 7 ++- 4 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 src/Gui/ViewParams.cpp create mode 100644 src/Gui/ViewParams.h diff --git a/src/Gui/CMakeLists.txt b/src/Gui/CMakeLists.txt index 9dc04247f8ff..cc5a764517d8 100644 --- a/src/Gui/CMakeLists.txt +++ b/src/Gui/CMakeLists.txt @@ -1071,6 +1071,7 @@ SET(Widget_CPP_SRCS WidgetFactory.cpp Widgets.cpp Window.cpp + ViewParams.cpp ) SET(Widget_HPP_SRCS FileDialog.h @@ -1085,6 +1086,7 @@ SET(Widget_HPP_SRCS WidgetFactory.h Widgets.h Window.h + ViewParams.h ) SET(Widget_SRCS ${Widget_CPP_SRCS} diff --git a/src/Gui/ViewParams.cpp b/src/Gui/ViewParams.cpp new file mode 100644 index 000000000000..d0082c257143 --- /dev/null +++ b/src/Gui/ViewParams.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** + * Copyright (c) 2018 Zheng, Lei (realthunder) * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ****************************************************************************/ + +#include "PreCompiled.h" +#include +#include "ViewParams.h" + +using namespace Gui; + +ViewParams::ViewParams() { + handle = App::GetApplication().GetParameterGroupByPath( + "User parameter:BaseApp/Preferences/View"); + handle->Attach(this); +#undef FC_VIEW_PARAM +#define FC_VIEW_PARAM(_name,_ctype,_type,_def) \ + _name = handle->Get##_type(#_name,_def); + + FC_VIEW_PARAMS +} + +ViewParams::~ViewParams() { +} + +void ViewParams::OnChange(Base::Subject &, const char* sReason) { + if(!sReason) + return; +#undef FC_VIEW_PARAM +#define FC_VIEW_PARAM(_name,_ctype,_type,_def) \ + if(strcmp(sReason,#_name)==0) {\ + _name = handle->Get##_type(#_name,_def);\ + return;\ + } + FC_VIEW_PARAMS +} + +ViewParams *ViewParams::instance() { + static ViewParams *inst; + if(!inst) + inst = new ViewParams; + return inst; +} + diff --git a/src/Gui/ViewParams.h b/src/Gui/ViewParams.h new file mode 100644 index 000000000000..e750ed90c477 --- /dev/null +++ b/src/Gui/ViewParams.h @@ -0,0 +1,79 @@ +/**************************************************************************** + * Copyright (c) 2018 Zheng, Lei (realthunder) * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ****************************************************************************/ + +#ifndef GUI_VIEW_PARAMS_H +#define GUI_VIEW_PARAMS_H + + +#include + +namespace Gui { + +/** Convenient class to obtain view provider related parameters */ +class GuiExport ViewParams: public ParameterGrp::ObserverType { +public: + ViewParams(); + virtual ~ViewParams(); + void OnChange(Base::Subject &, const char* sReason); + static ViewParams *instance(); + + ParameterGrp::handle getHandle() { + return handle; + } + +#define FC_VIEW_PARAMS \ + FC_VIEW_PARAM(UseNewSelection,bool,Bool,true) \ + FC_VIEW_PARAM(UseSelectionRoot,bool,Bool,true) \ + FC_VIEW_PARAM(EnableSelection,bool,Bool,true) \ + FC_VIEW_PARAM(RenderCache,int,Int,0) \ + FC_VIEW_PARAM(RandomColor,bool,Bool,false) \ + FC_VIEW_PARAM(BoundingBoxColor,unsigned long,Unsigned,4294967295UL) \ + FC_VIEW_PARAM(AnnotationTextColor,unsigned long,Unsigned,4294967295UL) \ + FC_VIEW_PARAM(MarkerSize,int,Int,9) \ + FC_VIEW_PARAM(DefaultLinkColor,unsigned long,Unsigned,0x66FFFF00) \ + FC_VIEW_PARAM(DefaultShapeLineColor,unsigned long,Unsigned,421075455UL) \ + FC_VIEW_PARAM(DefaultShapeColor,unsigned long,Unsigned,0xCCCCCC00) \ + FC_VIEW_PARAM(DefaultShapeLineWidth,int,Int,2) \ + FC_VIEW_PARAM(CoinCycleCheck,bool,Bool,true) \ + FC_VIEW_PARAM(EnablePropertyViewForInactiveDocument,bool,Bool,true) \ + +#undef FC_VIEW_PARAM +#define FC_VIEW_PARAM(_name,_ctype,_type,_def) \ + _ctype get##_name() const { return _name; }\ + void set##_name(_ctype _v) { handle->Set##_type(#_name,_v); _name=_v; } + + FC_VIEW_PARAMS + +private: +#undef FC_VIEW_PARAM +#define FC_VIEW_PARAM(_name,_ctype,_type,_def) \ + _ctype _name; + + FC_VIEW_PARAMS + ParameterGrp::handle handle; +}; + +#undef FC_VIEW_PARAM + +} // namespace Gui + +#endif // GUI_VIEW_PARAMS_H diff --git a/src/Gui/ViewProviderMeasureDistance.cpp b/src/Gui/ViewProviderMeasureDistance.cpp index 6344ca103e6f..b1f295bab814 100644 --- a/src/Gui/ViewProviderMeasureDistance.cpp +++ b/src/Gui/ViewProviderMeasureDistance.cpp @@ -45,6 +45,7 @@ #include "Application.h" #include "Document.h" #include "View3DInventorViewer.h" +#include "ViewParams.h" #include #include @@ -170,7 +171,8 @@ void ViewProviderMeasureDistance::attach(App::DocumentObject* pcObject) lineSep->addChild(pCoords); lineSep->addChild(pLines); SoMarkerSet* points = new SoMarkerSet(); - points->markerIndex = Gui::Inventor::MarkerBitmaps::getMarkerIndex("CROSS", App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View")->GetInt("MarkerSize", 9)); + points->markerIndex = Gui::Inventor::MarkerBitmaps::getMarkerIndex("CROSS", + ViewParams::instance()->getMarkerSize()); points->numPoints=2; lineSep->addChild(points); @@ -289,7 +291,8 @@ ViewProviderPointMarker::ViewProviderPointMarker() pCoords->ref(); pCoords->point.setNum(0); pMarker = new SoMarkerSet(); - pMarker->markerIndex = Gui::Inventor::MarkerBitmaps::getMarkerIndex("CROSS", App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View")->GetInt("MarkerSize", 9)); + pMarker->markerIndex = Gui::Inventor::MarkerBitmaps::getMarkerIndex("CROSS", + ViewParams::instance()->getMarkerSize()); pMarker->numPoints=0; pMarker->ref();