1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
/*
* Copyright (C) 2025 Linux Studio Plugins Project <https://lsp-plug.in/>
* (C) 2025 Vladimir Sadovnikov <sadko4u@gmail.com>
*
* This file is part of lsp-tk-lib
* Created on: 8 мая 2020 г.
*
* lsp-tk-lib 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 3 of the License, or
* any later version.
*
* lsp-tk-lib 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 lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef LSP_PLUG_IN_TK_PROP_FLAGS_WINDOWACTIONS_H_
#define LSP_PLUG_IN_TK_PROP_FLAGS_WINDOWACTIONS_H_
#ifndef LSP_PLUG_IN_TK_IMPL
#error "use <lsp-plug.in/tk/tk.h>"
#endif
namespace lsp
{
namespace tk
{
class Display;
class Widget;
class WindowActions: public BitEnum
{
protected:
static const prop::enum_t ENUM[];
protected:
explicit WindowActions(prop::Listener *listener = NULL): BitEnum(ENUM, listener) {};
WindowActions(const WindowActions &) = delete;
WindowActions(WindowActions &&) = delete;
WindowActions & operator = (const WindowActions &) = delete;
WindowActions & operator = (WindowActions &&) = delete;
public:
inline bool allowed(ws::window_action_t wa) const { return nValue & wa; }
inline bool denied(ws::window_action_t wa) const { return !(nValue & wa); }
inline bool get(ws::window_action_t wa) const { return nValue & wa; }
inline size_t actions() const { return nValue; }
inline size_t get_all() const { return nValue; }
inline bool movable() const { return nValue & ws::WA_MOVE; }
inline bool resizable() const { return nValue & ws::WA_RESIZE; }
inline bool minimizable() const { return nValue & ws::WA_MINIMIZE; }
inline bool maximizable() const { return nValue & ws::WA_MAXIMIZE; }
inline bool closeable() const { return nValue & ws::WA_CLOSE; }
inline bool stickable() const { return nValue & ws::WA_STICK; }
inline bool shadeable() const { return nValue & ws::WA_SHADE; }
inline bool fullscreenable() const { return nValue & ws::WA_FULLSCREEN; }
inline bool transportable() const { return nValue & ws::WA_CHANGE_DESK; }
public:
inline void set_actions(size_t flags) { xset_all(flags); }
inline void toggle_actions(size_t flags) { xset_all(nValue ^ flags); }
inline void allow_actions(size_t flags) { xset_all(nValue | flags); }
inline void deny_actions(size_t flags) { xset_all(nValue & (~flags)); }
inline void set(ws::window_action_t wa) { xset(wa); }
inline void toggle(ws::window_action_t wa) { xtoggle(wa); }
inline void allow(ws::window_action_t wa) { xset(wa); }
inline void deny(ws::window_action_t wa) { xunset(wa); }
inline void set_movable() { xset(ws::WA_MOVE); }
inline void set_movable(bool value) { xset(ws::WA_MOVE, value); }
inline void set_resizable() { xset(ws::WA_RESIZE); }
inline void set_resizable(bool value) { xset(ws::WA_RESIZE, value); }
inline void set_minimizable() { xset(ws::WA_MINIMIZE); }
inline void set_minimizable(bool value) { xset(ws::WA_MINIMIZE, value); }
inline void set_maximizable() { xset(ws::WA_MAXIMIZE); }
inline void set_maximizable(bool value) { xset(ws::WA_MAXIMIZE, value); }
inline void set_closeable() { xset(ws::WA_CLOSE); }
inline void set_closeable(bool value) { xset(ws::WA_CLOSE, value); }
inline void set_stickable() { xset(ws::WA_STICK); }
inline void set_stickable(bool value) { xset(ws::WA_STICK, value); }
inline void set_shadeable() { xset(ws::WA_SHADE); }
inline void set_shadeable(bool value) { xset(ws::WA_SHADE, value); }
inline void set_fullscreenable() { xset(ws::WA_FULLSCREEN); }
inline void set_fullscreenable(bool value) { xset(ws::WA_FULLSCREEN, value); }
inline void set_transportable() { xset(ws::WA_CHANGE_DESK); }
inline void set_transportable(bool value) { xset(ws::WA_CHANGE_DESK, value); }
inline void allow_all() { xset_all(ws::WA_ALL); }
inline void deny_all() { xset_all(ws::WA_NONE); }
inline void toggle_all() { xset_all(nValue ^ ws::WA_ALL); }
};
namespace prop
{
class WindowActions: public tk::WindowActions
{
public:
explicit WindowActions(prop::Listener *listener = NULL): tk::WindowActions(listener) {};
WindowActions(const WindowActions &) = delete;
WindowActions(WindowActions &&) = delete;
WindowActions & operator = (const WindowActions &) = delete;
WindowActions & operator = (WindowActions &&) = delete;
public:
/**
* Bind property with specified name to the style of linked widget
*/
inline status_t bind(atom_t property, Style *style) { return tk::WindowActions::bind(property, style); }
inline status_t bind(const char *property, Style *style) { return tk::WindowActions::bind(property, style); }
inline status_t bind(const LSPString *property, Style *style) { return tk::WindowActions::bind(property, style); }
/**
* Unbind property
*/
inline status_t unbind() { return tk::WindowActions::unbind(); };
};
} /* namespace prop */
} /* namespace tk */
} /* namespace lsp */
#endif /* LSP_PLUG_IN_TK_PROP_FLAGS_WINDOWACTIONS_H_ */
|