Swiftray  1.0
svg-style-selector.h
Go to the documentation of this file.
1 #ifndef VECTY_SVG_STYLE_SELECTOR_H
2 #define VECTY_SVG_STYLE_SELECTOR_H
3 
4 #include <shape/shape.h>
5 #include <QtGui/private/qcssparser_p.h>
6 
7 class SVGNode {
8 public:
9  QString id_;
10  QString class_name_;
11  QString name_;
12  SVGNode *parent; // todo
13  SVGNode *prev; // todo
14 
15  SVGNode(QString name, QString id, QString class_name) {
16  name_ = name;
17  id_ = id;
18  class_name_ = class_name;
19  parent = nullptr;
20  prev = nullptr;
21  }
22 };
23 
24 class SVGStyleSelector : public QCss::StyleSelector {
25 public:
27 
28  virtual ~SVGStyleSelector() {}
29 
30  inline SVGNode *getSVGNode(NodePtr node) const {
31  return static_cast<SVGNode *>(node.ptr);
32  }
33 
34  QString getNodeId(SVGNode *node) const {
35  return node->id_;
36  }
37 
38  QString getNodeClass(SVGNode *node) const {
39  return node->class_name_;
40  }
41 
42  virtual bool nodeNameEquals(NodePtr node, const QString &nodeName) const {
43  SVGNode *n = getSVGNode(node);
44  if (!n) return false;
45  QString name = n->name_;
46  return QString::compare(name, nodeName, Qt::CaseInsensitive) == 0;
47  }
48 
49  virtual QString attribute(NodePtr node, const QString &name) const {
50  SVGNode *n = getSVGNode(node);
51  if ((!getNodeId(n).isEmpty() && (name == QLatin1String("id") ||
52  name == QLatin1String("xml:id"))))
53  return getNodeId(n);
54  if (!getNodeClass(n).isEmpty() && name == QLatin1String("class"))
55  return getNodeClass(n);
56  return QString();
57  }
58 
59  virtual bool hasAttributes(NodePtr node) const {
60  SVGNode *n = getSVGNode(node);
61  return (n &&
62  (!getNodeId(n).isEmpty() || !getNodeClass(n).isEmpty()));
63  }
64 
65  virtual QStringList nodeIds(NodePtr node) const {
66  SVGNode *n = getSVGNode(node);
67  QString nid;
68  if (n)
69  nid = getNodeId(n);
70  QStringList lst;
71  lst.append(nid);
72  return lst;
73  }
74 
75  virtual QStringList nodeNames(NodePtr node) const {
76  SVGNode *n = getSVGNode(node);
77  if (n)
78  return QStringList(n->name_);
79  return QStringList();
80  }
81 
82  virtual bool isNullNode(NodePtr node) const {
83  return !node.ptr;
84  }
85 
86  virtual NodePtr parentNode(NodePtr node) const {
87  SVGNode *n = getSVGNode(node);
88  NodePtr newNode;
89  newNode.ptr = 0;
90  newNode.id = 0;
91  if (n) {
92  SVGNode *svgParent = n->parent;
93  if (svgParent) {
94  newNode.ptr = svgParent;
95  }
96  }
97  return newNode;
98  }
99 
100  virtual NodePtr previousSiblingNode(NodePtr node) const {
101  NodePtr newNode;
102  newNode.ptr = 0;
103  newNode.id = 0;
104 
105  SVGNode *n = getSVGNode(node);
106  if (!n)
107  return newNode;
108 
109  newNode.ptr = getSVGNode(node)->prev;
110  return newNode;
111  }
112 
113  virtual NodePtr duplicateNode(NodePtr node) const {
114  NodePtr n;
115  n.ptr = node.ptr;
116  n.id = node.id;
117  return n;
118  }
119 
120  virtual void freeNode(NodePtr node) const {
121  Q_UNUSED(node);
122  }
123 };
124 
125 #endif //VECTY_SVG_STYLE_SELECTOR_H
Definition: svg-style-selector.h:7
QString name_
Definition: svg-style-selector.h:11
SVGNode * prev
Definition: svg-style-selector.h:13
SVGNode(QString name, QString id, QString class_name)
Definition: svg-style-selector.h:15
SVGNode * parent
Definition: svg-style-selector.h:12
QString id_
Definition: svg-style-selector.h:9
QString class_name_
Definition: svg-style-selector.h:10
Definition: svg-style-selector.h:24
virtual bool isNullNode(NodePtr node) const
Definition: svg-style-selector.h:82
QString getNodeClass(SVGNode *node) const
Definition: svg-style-selector.h:38
SVGStyleSelector()
Definition: svg-style-selector.h:26
virtual ~SVGStyleSelector()
Definition: svg-style-selector.h:28
virtual NodePtr previousSiblingNode(NodePtr node) const
Definition: svg-style-selector.h:100
virtual NodePtr duplicateNode(NodePtr node) const
Definition: svg-style-selector.h:113
virtual bool nodeNameEquals(NodePtr node, const QString &nodeName) const
Definition: svg-style-selector.h:42
SVGNode * getSVGNode(NodePtr node) const
Definition: svg-style-selector.h:30
virtual QStringList nodeNames(NodePtr node) const
Definition: svg-style-selector.h:75
QString getNodeId(SVGNode *node) const
Definition: svg-style-selector.h:34
virtual void freeNode(NodePtr node) const
Definition: svg-style-selector.h:120
virtual bool hasAttributes(NodePtr node) const
Definition: svg-style-selector.h:59
virtual NodePtr parentNode(NodePtr node) const
Definition: svg-style-selector.h:86
virtual QString attribute(NodePtr node, const QString &name) const
Definition: svg-style-selector.h:49
virtual QStringList nodeIds(NodePtr node) const
Definition: svg-style-selector.h:65