Use jw from docbook-utils instead of sgmltools-lite
[survex.git] / src / labelinfo.h
blob0077e948c6e7fdae849a7fd6fb202adf1085cec6
1 //
2 // labelinfo.h
3 //
4 // Main frame handling for Aven.
5 //
6 // Copyright (C) 2000-2003,2005 Mark R. Shinwell
7 // Copyright (C) 2001-2003,2004,2005,2006,2010,2011,2012,2013,2014 Olly Betts
8 //
9 // This program is free software; you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation; either version 2 of the License, or
12 // (at your option) any later version.
14 // This program is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 // GNU General Public License for more details.
19 // You should have received a copy of the GNU General Public License
20 // along with this program; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 #ifndef labelinfo_h
25 #define labelinfo_h
27 #include "aven.h"
28 #include "img_hosted.h"
29 #include "message.h"
30 #include "vector3.h"
31 #include "wx.h"
33 // macOS headers pollute the global namespace with generic names like
34 // "class Point", which clashes with our "class Point". So for __WXMAC__
35 // put our class in a namespace and define Point as a macro.
36 #ifdef __WXMAC__
37 namespace svx {
38 #endif
40 class Point : public Vector3 {
41 public:
42 Point() {}
43 explicit Point(const Vector3 & v) : Vector3(v) { }
44 explicit Point(const img_point & pt) : Vector3(pt.x, pt.y, pt.z) { }
45 double GetX() const { return x; }
46 double GetY() const { return y; }
47 double GetZ() const { return z; }
50 #ifdef __WXMAC__
52 #define Point svx::Point
53 #endif
55 #define LFLAG_NOT_ANON 0x01
56 #define LFLAG_NOT_WALL 0x02
57 #define LFLAG_SURFACE 0x04
58 #define LFLAG_UNDERGROUND 0x08
59 #define LFLAG_EXPORTED 0x10
60 #define LFLAG_FIXED 0x20
61 #define LFLAG_ENTRANCE 0x40
62 #define LFLAG_HIGHLIGHTED 0x80
64 class LabelInfo : public Point {
65 wxString text;
66 unsigned width;
67 int flags;
69 public:
70 wxTreeItemId tree_id;
72 LabelInfo() : Point(), text(), flags(0) { }
73 LabelInfo(const img_point &pt, const wxString &text_, int flags_)
74 : Point(pt), text(text_), flags(flags_) {
75 if (text.empty())
76 flags &= ~LFLAG_NOT_ANON;
78 const wxString & GetText() const { return text; }
79 wxString name_or_anon() const {
80 if (!text.empty()) return text;
81 /* TRANSLATORS: Used in place of the station name when talking about an
82 * anonymous station. */
83 return wmsg(/*anonymous station*/56);
85 int get_flags() const { return flags; }
86 void set_flags(int mask) { flags |= mask; }
87 void clear_flags(int mask) { flags &= ~mask; }
88 unsigned get_width() const { return width; }
89 void set_width(unsigned width_) { width = width_; }
91 bool IsEntrance() const { return (flags & LFLAG_ENTRANCE) != 0; }
92 bool IsFixedPt() const { return (flags & LFLAG_FIXED) != 0; }
93 bool IsExportedPt() const { return (flags & LFLAG_EXPORTED) != 0; }
94 bool IsUnderground() const { return (flags & LFLAG_UNDERGROUND) != 0; }
95 bool IsSurface() const { return (flags & LFLAG_SURFACE) != 0; }
96 bool IsHighLighted() const { return (flags & LFLAG_HIGHLIGHTED) != 0; }
97 bool IsAnon() const { return (flags & LFLAG_NOT_ANON) == 0; }
98 bool IsWall() const { return (flags & LFLAG_NOT_WALL) == 0; }
99 // This should really also return true for non-anonymous splay ends, and not
100 // return true for anonymous stations in other situations, but the .3d
101 // format doesn't tell us this information currently, and it's not trivial
102 // to rediscover.
103 bool IsSplayEnd() const { return IsAnon(); }
106 #endif