38#ifndef DRAIN_ALIGN_ADAPTER_SVG
39#define DRAIN_ALIGN_ADAPTER_SVG
47#include <drain/util/ClassXML.h>
91 AnchorElem(
const std::string & s=
"") : std::string(s){
101 const std::string & str()
const {
106 std::string & str() {
110 void set(
const std::string & s);
112 void set(
const AnchorElem::Anchor & anchor);
122 bool isCollective()
const {
127 bool isPrevious()
const {
132 bool isNone()
const {
138 bool isSpecific()
const {
139 return isSet() && (!isCollective()) && (!isPrevious()) && (!isNone());
151DRAIN_ENUM_DICT(image::AnchorElem::Anchor);
156DRAIN_ENUM_OSTREAM(AnchorElem::Anchor)
168 void setMyAlignAnchor(
const T & value){
169 adjustAnchor(myAnchorHorz, value);
170 myAnchorVert = myAnchorHorz;
174 template <AlignBase::Axis AX,
class T>
176 void setMyAlignAnchor(
const T & value){
177 adjustAnchor(getMyAlignAnchor<AX>(), value);
183 void setDefaultAlignAnchor(
const T & value){
184 adjustAnchor(defaultAnchorHorz, value);
185 defaultAnchorVert = defaultAnchorHorz;
189 template <AlignBase::Axis AX,
class T>
191 void setDefaultAlignAnchor(
const T & value){
192 AnchorElem & defaultAnchor = getDefaultAlignAnchor<AX>();
193 adjustAnchor(defaultAnchor, value);
194 if (defaultAnchor.isPrevious()){
195 Logger(__FILE__, __FUNCTION__, __LINE__).
suspicious(
"Removing explicit ", AnchorElem::Anchor::PREVIOUS,
" as non-informative for group default");
197 adjustAnchor(defaultAnchor, AnchorElem::Anchor::DEFAULT);
204 template <AlignBase::Axis AX>
208 template <AlignBase::Axis AX>
209 const anchor_t & getDefaultAlignAnchor()
const;
212 template <AlignBase::Axis AX>
216 template <AlignBase::Axis AX>
231 void adjustAnchor(
AnchorElem & anchor,
const std::string & value){
232 anchor.assign(value);
236 void adjustAnchor(
AnchorElem & anchor,
const char * value){
237 anchor.assign(value);
241 void adjustAnchor(AnchorElem & anchor,
const AnchorElem & elem){
246 void adjustAnchor(AnchorElem & anchor,
const ClassXML & cls){
252 void adjustAnchor(AnchorElem & anchor,
const T & value){
287 return defaultAnchorHorz;
293 return defaultAnchorVert;
298AlignAnchorSVG::anchor_t & AlignAnchorSVG::getMyAlignAnchor<AlignBase::Axis::HORZ>() {
304AlignAnchorSVG::anchor_t & AlignAnchorSVG::getMyAlignAnchor<AlignBase::Axis::VERT>() {
312 return defaultAnchorHorz;
318 return defaultAnchorVert;
LogSourc e is the means for a function or any program segment to "connect" to a Log.
Definition Log.h:326
Logger & suspicious(const TT &... args)
A weak warning about something going possibly wrong.
Definition Log.h:510
A container for a static dictionary of enumeration values.
Definition Enum.h:51
static const std::string & getKey(const std::string &s, bool lenient=true)
Convenience for object.set(...) like commands.
Definition Enum.h:144
Adapter designed for NodeSVG.
Definition AlignAnchorSVG.h:159
const anchor_t & getMyAlignAnchor() const
Store anchor object/symbol for aligning this object.
virtual void updateAlign()=0
Redefined in NodeSVG.
Definition AlignAnchorSVG.h:77
bool isSet() const
If not set, use default.
Definition AlignAnchorSVG.h:116