Skip to content

Commit

Permalink
Gui: add ViewParams class
Browse files Browse the repository at this point in the history
A convenience class to obtain common view parameters, analogous to
existing WindowParameter class.
  • Loading branch information
realthunder committed Jul 14, 2019
1 parent 4d70ffa commit 6ec33e8
Show file tree
Hide file tree
Showing 4 changed files with 147 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/Gui/CMakeLists.txt
Expand Up @@ -1071,6 +1071,7 @@ SET(Widget_CPP_SRCS
WidgetFactory.cpp
Widgets.cpp
Window.cpp
ViewParams.cpp
)
SET(Widget_HPP_SRCS
FileDialog.h
Expand All @@ -1085,6 +1086,7 @@ SET(Widget_HPP_SRCS
WidgetFactory.h
Widgets.h
Window.h
ViewParams.h
)
SET(Widget_SRCS
${Widget_CPP_SRCS}
Expand Down
61 changes: 61 additions & 0 deletions src/Gui/ViewParams.cpp
@@ -0,0 +1,61 @@
/****************************************************************************
* Copyright (c) 2018 Zheng, Lei (realthunder) <realthunder.dev@gmail.com>*
* *
* 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 <App/Application.h>
#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*> &, 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;
}

79 changes: 79 additions & 0 deletions src/Gui/ViewParams.h
@@ -0,0 +1,79 @@
/****************************************************************************
* Copyright (c) 2018 Zheng, Lei (realthunder) <realthunder.dev@gmail.com>*
* *
* 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 <Base/Parameter.h>

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*> &, 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
7 changes: 5 additions & 2 deletions src/Gui/ViewProviderMeasureDistance.cpp
Expand Up @@ -45,6 +45,7 @@
#include "Application.h"
#include "Document.h"
#include "View3DInventorViewer.h"
#include "ViewParams.h"

#include <App/PropertyGeo.h>
#include <App/PropertyStandard.h>
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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();

Expand Down

0 comments on commit 6ec33e8

Please sign in to comment.