stupid &
This commit is contained in:
parent
f3790fb3e4
commit
f5024351e7
4 changed files with 91 additions and 5 deletions
82
src/FbTk/DefaultValue.hh
Normal file
82
src/FbTk/DefaultValue.hh
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
// DefaultValue.hh
|
||||||
|
// Copyright (c) 2007 Fluxbox Team (fluxgen at fluxbox dot org)
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
// copy of this software and associated documentation files (the "Software"),
|
||||||
|
// to deal in the Software without restriction, including without limitation
|
||||||
|
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
// and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
// Software is furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
#ifndef FBTK_DEFAULTVALUE_HH
|
||||||
|
#define FBTK_DEFAULTVALUE_HH
|
||||||
|
|
||||||
|
namespace FbTk {
|
||||||
|
|
||||||
|
// classes for overriding default values without having to listen for changes
|
||||||
|
template <typename T>
|
||||||
|
class DefaultValue {
|
||||||
|
public:
|
||||||
|
DefaultValue(const T &def):
|
||||||
|
m_default(def), m_actual(def), m_use_default(true) { }
|
||||||
|
|
||||||
|
inline const T &get() const { return m_use_default ? m_default : m_actual; }
|
||||||
|
inline void set(const T &val) { m_use_default = false; m_actual = val; }
|
||||||
|
inline void restoreDefault() { m_use_default = true; }
|
||||||
|
inline void isDefault() const { return m_use_default; }
|
||||||
|
|
||||||
|
inline DefaultValue<T> &operator =(const T &val) {
|
||||||
|
set(val); return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline operator T() const { return get(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const T &m_default;
|
||||||
|
T m_actual;
|
||||||
|
bool m_use_default;
|
||||||
|
};
|
||||||
|
|
||||||
|
// designed for use with built-in types T, thus no need to return references
|
||||||
|
template <typename T, typename Receiver>
|
||||||
|
class DefaultAccessor {
|
||||||
|
public:
|
||||||
|
typedef T (Receiver:: *Accessor)() const;
|
||||||
|
DefaultAccessor(const Receiver &r, Accessor a):
|
||||||
|
m_receiver(r), m_accessor(a), m_actual((r.*a)()),
|
||||||
|
m_use_default(true) { }
|
||||||
|
|
||||||
|
inline const T get() const {
|
||||||
|
return m_use_default ? (m_receiver.*m_accessor)() : m_actual;
|
||||||
|
}
|
||||||
|
inline void set(const T &val) { m_use_default = false; m_actual = val; }
|
||||||
|
inline void restoreDefault() { m_use_default = true; }
|
||||||
|
inline void isDefault() const { return m_use_default; }
|
||||||
|
|
||||||
|
inline DefaultAccessor<T, Receiver> &operator =(const T &val) {
|
||||||
|
set(val); return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline operator T() const { return get(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const Receiver &m_receiver;
|
||||||
|
Accessor m_accessor;
|
||||||
|
T m_actual;
|
||||||
|
bool m_use_default;
|
||||||
|
};
|
||||||
|
|
||||||
|
}; // end namespace FbTk
|
||||||
|
|
||||||
|
#endif // FBTK_DEFAULTVALUE_HH
|
|
@ -16,7 +16,7 @@ imlib2_SOURCE= ImageImlib2.hh ImageImlib2.cc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
libFbTk_a_SOURCES = App.hh App.cc Color.cc Color.hh Command.hh \
|
libFbTk_a_SOURCES = App.hh App.cc Color.cc Color.hh Command.hh \
|
||||||
ObjectRegistry.hh \
|
ObjectRegistry.hh DefaultValue.hh \
|
||||||
FileUtil.hh FileUtil.cc \
|
FileUtil.hh FileUtil.cc \
|
||||||
EventHandler.hh EventManager.hh EventManager.cc \
|
EventHandler.hh EventManager.hh EventManager.cc \
|
||||||
FbWindow.hh FbWindow.cc Font.cc Font.hh FontImp.hh \
|
FbWindow.hh FbWindow.cc Font.cc Font.hh FontImp.hh \
|
||||||
|
|
|
@ -264,8 +264,8 @@ FluxboxWindow::FluxboxWindow(WinClient &client, FbWinFrameTheme &tm,
|
||||||
m_toggled_decos(false),
|
m_toggled_decos(false),
|
||||||
m_icon_hidden(false),
|
m_icon_hidden(false),
|
||||||
m_focus_hidden(false),
|
m_focus_hidden(false),
|
||||||
m_focus_new(screen().focusControl().focusNew()),
|
m_focus_new(screen().focusControl(), &FocusControl::focusNew),
|
||||||
m_mouse_focus(screen().focusControl().isMouseFocus()),
|
m_mouse_focus(screen().focusControl(), &FocusControl::isMouseFocus),
|
||||||
m_click_focus(true),
|
m_click_focus(true),
|
||||||
m_old_pos_x(0), m_old_pos_y(0),
|
m_old_pos_x(0), m_old_pos_y(0),
|
||||||
m_old_width(1), m_old_height(1),
|
m_old_width(1), m_old_height(1),
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#ifndef WINDOW_HH
|
#ifndef WINDOW_HH
|
||||||
#define WINDOW_HH
|
#define WINDOW_HH
|
||||||
|
|
||||||
|
#include "FbTk/DefaultValue.hh"
|
||||||
#include "FbTk/Timer.hh"
|
#include "FbTk/Timer.hh"
|
||||||
#include "FbTk/Subject.hh"
|
#include "FbTk/Subject.hh"
|
||||||
#include "FbTk/Observer.hh"
|
#include "FbTk/Observer.hh"
|
||||||
|
@ -49,6 +50,7 @@ class WinClient;
|
||||||
class FbWinFrameTheme;
|
class FbWinFrameTheme;
|
||||||
class BScreen;
|
class BScreen;
|
||||||
class FbWinFrame;
|
class FbWinFrame;
|
||||||
|
class FocusControl;
|
||||||
|
|
||||||
namespace FbTk {
|
namespace FbTk {
|
||||||
class TextButton;
|
class TextButton;
|
||||||
|
@ -609,8 +611,10 @@ private:
|
||||||
|
|
||||||
bool m_icon_hidden; ///< if the window is in the iconbar
|
bool m_icon_hidden; ///< if the window is in the iconbar
|
||||||
bool m_focus_hidden; ///< if the window is in the NextWindow list
|
bool m_focus_hidden; ///< if the window is in the NextWindow list
|
||||||
bool m_focus_new; ///< if the window is normally focused when mapped
|
/// if the window is normally focused when mapped
|
||||||
bool m_mouse_focus; ///< if the window is focused with EnterNotify
|
FbTk::DefaultAccessor<bool, FocusControl> m_focus_new;
|
||||||
|
/// if the window is focused with EnterNotify
|
||||||
|
FbTk::DefaultAccessor<bool, FocusControl> m_mouse_focus;
|
||||||
bool m_click_focus; ///< if the window is focused by clicking
|
bool m_click_focus; ///< if the window is focused by clicking
|
||||||
int m_old_pos_x, m_old_pos_y; ///< old position so we can restore from maximized
|
int m_old_pos_x, m_old_pos_y; ///< old position so we can restore from maximized
|
||||||
unsigned int m_old_width, m_old_height; ///< old size so we can restore from maximized state
|
unsigned int m_old_width, m_old_height; ///< old size so we can restore from maximized state
|
||||||
|
|
Loading…
Reference in a new issue