Gui: add SoToggleSwitch class
update
This commit is contained in:
@@ -1079,6 +1079,7 @@ SET(Inventor_CPP_SRCS
|
||||
Inventor/SoFCBoundingBox.cpp
|
||||
Inventor/SoMouseWheelEvent.cpp
|
||||
Inventor/SoFCTransform.cpp
|
||||
Inventor/SoToggleSwitch.cpp
|
||||
Inventor/Draggers/SoTransformDragger.cpp
|
||||
Inventor/Draggers/SoLinearDragger.cpp
|
||||
Inventor/Draggers/SoPlanarDragger.cpp
|
||||
@@ -1115,6 +1116,7 @@ SET(Inventor_SRCS
|
||||
Inventor/SoFCBoundingBox.h
|
||||
Inventor/SoMouseWheelEvent.h
|
||||
Inventor/SoFCTransform.h
|
||||
Inventor/SoToggleSwitch.h
|
||||
Inventor/Draggers/SoTransformDragger.h
|
||||
Inventor/Draggers/SoLinearDragger.h
|
||||
Inventor/Draggers/SoPlanarDragger.h
|
||||
|
||||
54
src/Gui/Inventor/SoToggleSwitch.cpp
Normal file
54
src/Gui/Inventor/SoToggleSwitch.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
/****************************************************************************
|
||||
* *
|
||||
* Copyright (c) 2025 Sayantan Deb <sayantandebin[at]gmail.com> *
|
||||
* *
|
||||
* This file is part of FreeCAD. *
|
||||
* *
|
||||
* FreeCAD is free software: you can redistribute it and/or modify it *
|
||||
* under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation, either version 2.1 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* FreeCAD 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 *
|
||||
* Lesser General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Lesser General Public *
|
||||
* License along with FreeCAD. If not, see *
|
||||
* <https://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#include "SoToggleSwitch.h"
|
||||
|
||||
SO_NODE_SOURCE(SoToggleSwitch)
|
||||
|
||||
void SoToggleSwitch::initClass()
|
||||
{
|
||||
SO_NODE_INIT_CLASS(SoToggleSwitch, SoSwitch, "Switch");
|
||||
}
|
||||
|
||||
SoToggleSwitch::SoToggleSwitch()
|
||||
{
|
||||
SO_NODE_CONSTRUCTOR(SoToggleSwitch);
|
||||
SO_NODE_ADD_FIELD(on, (1));
|
||||
|
||||
whichChild = SO_SWITCH_ALL;
|
||||
}
|
||||
|
||||
void SoToggleSwitch::toggle()
|
||||
{
|
||||
on = !on.getValue();
|
||||
}
|
||||
|
||||
void SoToggleSwitch::notify(SoNotList* notList)
|
||||
{
|
||||
assert(notList);
|
||||
if (notList->getLastField() == &on) {
|
||||
whichChild = on.getValue()? SO_SWITCH_ALL : SO_SWITCH_NONE;
|
||||
}
|
||||
|
||||
inherited::notify(notList);
|
||||
}
|
||||
56
src/Gui/Inventor/SoToggleSwitch.h
Normal file
56
src/Gui/Inventor/SoToggleSwitch.h
Normal file
@@ -0,0 +1,56 @@
|
||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
/****************************************************************************
|
||||
* *
|
||||
* Copyright (c) 2025 Sayantan Deb <sayantandebin[at]gmail.com> *
|
||||
* *
|
||||
* This file is part of FreeCAD. *
|
||||
* *
|
||||
* FreeCAD is free software: you can redistribute it and/or modify it *
|
||||
* under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation, either version 2.1 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* FreeCAD 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 *
|
||||
* Lesser General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Lesser General Public *
|
||||
* License along with FreeCAD. If not, see *
|
||||
* <https://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef SO_TOGGLE_SWITCH
|
||||
#define SO_TOGGLE_SWITCH
|
||||
|
||||
#include <Inventor/fields/SoSFBool.h>
|
||||
#include <Inventor/nodes/SoSwitch.h>
|
||||
|
||||
|
||||
/**
|
||||
* A switch that can be used to show or hide all child nodes
|
||||
*/
|
||||
class SoToggleSwitch: public SoSwitch
|
||||
{
|
||||
SO_NODE_HEADER(SoToggleSwitch);
|
||||
|
||||
public:
|
||||
static void initClass();
|
||||
SoToggleSwitch();
|
||||
|
||||
// the switch is on be default
|
||||
SoSFBool on;
|
||||
// toggles the switch state
|
||||
void toggle();
|
||||
|
||||
protected:
|
||||
~SoToggleSwitch() override = default;
|
||||
|
||||
void notify(SoNotList* notList) override;
|
||||
|
||||
private:
|
||||
using inherited = SoSwitch;
|
||||
};
|
||||
|
||||
#endif /* SO_TOGGLE_SWITCH */
|
||||
@@ -446,9 +446,16 @@ private:
|
||||
#define FC_SET_SWITCH(__name__, __state__) \
|
||||
do { \
|
||||
SoSwitch* sw = SO_GET_ANY_PART(this, __name__, SoSwitch); \
|
||||
assert(sw); \
|
||||
sw->whichChild = __state__; \
|
||||
} while (0)
|
||||
|
||||
#define FC_SET_TOGGLE_SWITCH(__name__, __state__) \
|
||||
do { \
|
||||
SoToggleSwitch* sw = SO_GET_ANY_PART(this, __name__, SoToggleSwitch); \
|
||||
assert(sw); \
|
||||
sw->on = __state__; \
|
||||
} while (0)
|
||||
|
||||
struct RotationComponents {
|
||||
float angle;
|
||||
|
||||
Reference in New Issue
Block a user