diff options
Diffstat (limited to 'src/WindowCmd.hh')
-rw-r--r-- | src/WindowCmd.hh | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/WindowCmd.hh b/src/WindowCmd.hh index 17a4e86..d1754e9 100644 --- a/src/WindowCmd.hh +++ b/src/WindowCmd.hh | |||
@@ -25,6 +25,7 @@ | |||
25 | #define WINDOWCMD_HH | 25 | #define WINDOWCMD_HH |
26 | 26 | ||
27 | #include "FbTk/Command.hh" | 27 | #include "FbTk/Command.hh" |
28 | #include "FbTk/Accessor.hh" | ||
28 | #include "Window.hh" | 29 | #include "Window.hh" |
29 | #include "WinClient.hh" | 30 | #include "WinClient.hh" |
30 | 31 | ||
@@ -64,5 +65,49 @@ private: | |||
64 | Action m_action; | 65 | Action m_action; |
65 | }; | 66 | }; |
66 | 67 | ||
68 | /// accesses values in current window | ||
69 | template <typename Ret, typename Def=Ret> | ||
70 | class WindowAccessor: public FbTk::Accessor<Ret> { | ||
71 | public: | ||
72 | typedef Ret (FluxboxWindow:: *Getter)() const; | ||
73 | typedef void (FluxboxWindow:: *Setter)(Ret); | ||
74 | WindowAccessor(Getter g, Setter s, Def def): | ||
75 | m_getter(g), m_setter(s), m_def(def) { } | ||
76 | |||
77 | inline operator Ret() const { | ||
78 | FluxboxWindow *fbwin = WindowCmd<void>::window(); | ||
79 | return fbwin ? (fbwin->*m_getter)() : m_def; | ||
80 | } | ||
81 | inline FbTk::Accessor<Ret> &operator =(const Ret &val) { | ||
82 | FluxboxWindow *fbwin = WindowCmd<void>::window(); | ||
83 | if (fbwin) | ||
84 | (fbwin->*m_setter)(val); | ||
85 | return *this; | ||
86 | } | ||
87 | |||
88 | private: | ||
89 | Getter m_getter; | ||
90 | Setter m_setter; | ||
91 | Def m_def; | ||
92 | }; | ||
93 | |||
94 | /// same as above but only reads | ||
95 | template <typename Ret, typename Def=Ret> | ||
96 | class ConstWindowAccessor: public FbTk::Accessor<Ret> { | ||
97 | public: | ||
98 | typedef Ret (FluxboxWindow:: *Getter)() const; | ||
99 | ConstWindowAccessor(Getter g, Def def): | ||
100 | m_getter(g), m_def(def) { } | ||
101 | |||
102 | inline operator Ret() const { | ||
103 | FluxboxWindow *fbwin = WindowCmd<void>::window(); | ||
104 | return fbwin ? (fbwin->*m_getter)() : m_def; | ||
105 | } | ||
106 | inline FbTk::Accessor<Ret> &operator =(const Ret &val) { return *this; } | ||
107 | |||
108 | private: | ||
109 | Getter m_getter; | ||
110 | Def m_def; | ||
111 | }; | ||
67 | 112 | ||
68 | #endif // WINDOWCMD_HH | 113 | #endif // WINDOWCMD_HH |