architecture astronomy
This commit is contained in:
parent
1f5cd12fac
commit
b5c354b994
20 changed files with 306 additions and 401 deletions
|
@ -25,24 +25,27 @@
|
|||
#include "AlphaMenu.hh"
|
||||
|
||||
#include "Window.hh"
|
||||
#include "WindowCmd.hh"
|
||||
#include "Screen.hh"
|
||||
#include "Workspace.hh"
|
||||
#include "WindowCmd.hh"
|
||||
#include "fluxbox.hh"
|
||||
#include "Layer.hh"
|
||||
#include "IntResMenuItem.hh"
|
||||
#include "FbTk/IntMenuItem.hh"
|
||||
|
||||
#include "FbTk/I18n.hh"
|
||||
#include "Window.hh"
|
||||
#include "WindowCmd.hh"
|
||||
|
||||
AlphaMenu::AlphaMenu(MenuTheme &tm, FbTk::ImageControl &imgctrl,
|
||||
FbTk::XLayer &layer, AlphaObject &object):
|
||||
ToggleMenu(tm, imgctrl, layer),
|
||||
m_focused_alpha_resource(&object, &AlphaObject::getFocusedAlpha, &AlphaObject::setFocusedAlpha, 255),
|
||||
m_unfocused_alpha_resource(&object, &AlphaObject::getUnfocusedAlpha, &AlphaObject::setUnfocusedAlpha, 255)
|
||||
FbTk::XLayer &layer):
|
||||
ToggleMenu(tm, imgctrl, layer)
|
||||
{
|
||||
|
||||
static WindowAccessor<int> m_focused_alpha((WindowAccessor<int>::Getter)&FluxboxWindow::getFocusedAlpha,
|
||||
(WindowAccessor<int>::Setter)&FluxboxWindow::setFocusedAlpha, 255);
|
||||
static WindowAccessor<int> m_unfocused_alpha((WindowAccessor<int>::Getter)&FluxboxWindow::getUnfocusedAlpha,
|
||||
(WindowAccessor<int>::Setter)&FluxboxWindow::setUnfocusedAlpha, 255);
|
||||
|
||||
_FB_USES_NLS;
|
||||
|
||||
// build menu...
|
||||
|
@ -53,7 +56,7 @@ AlphaMenu::AlphaMenu(MenuTheme &tm, FbTk::ImageControl &imgctrl,
|
|||
"Transparency level of the focused window");
|
||||
|
||||
FbTk::MenuItem *focused_alpha_item =
|
||||
new IntResMenuItem< ObjectResource<AlphaObject, int> >(focused_alpha_label, m_focused_alpha_resource, 0, 255, *this);
|
||||
new FbTk::IntMenuItem(focused_alpha_label, m_focused_alpha, 0, 255, *this);
|
||||
insert(focused_alpha_item);
|
||||
|
||||
const FbTk::FbString unfocused_alpha_label =
|
||||
|
@ -62,14 +65,14 @@ AlphaMenu::AlphaMenu(MenuTheme &tm, FbTk::ImageControl &imgctrl,
|
|||
"Transparency level of unfocused windows");
|
||||
|
||||
FbTk::MenuItem *unfocused_alpha_item =
|
||||
new IntResMenuItem< ObjectResource<AlphaObject, int> >(unfocused_alpha_label, m_unfocused_alpha_resource, 0, 255, *this);
|
||||
new FbTk::IntMenuItem(unfocused_alpha_label, m_unfocused_alpha, 0, 255, *this);
|
||||
insert(unfocused_alpha_item);
|
||||
|
||||
const FbTk::FbString usedefault_label = _FB_XTEXT(Windowmenu, DefaultAlpha,
|
||||
"Use Defaults",
|
||||
"Default transparency settings for this window");
|
||||
FbTk::MenuItem *usedefault_item =
|
||||
new AlphaMenuSelectItem(usedefault_label, &object, *this);
|
||||
new AlphaMenuSelectItem(usedefault_label, *this);
|
||||
insert(usedefault_item);
|
||||
|
||||
updateMenu();
|
||||
|
@ -81,8 +84,8 @@ void AlphaMenu::move(int x, int y) {
|
|||
|
||||
if (isVisible()) {
|
||||
// TODO: hardcoding the indices is a bad idea
|
||||
((IntResMenuItem< ObjectResource<AlphaObject, int> >*)find(0))->updateLabel();
|
||||
((IntResMenuItem< ObjectResource<AlphaObject, int> >*)find(1))->updateLabel();
|
||||
((FbTk::IntMenuItem *)find(0))->updateLabel();
|
||||
((FbTk::IntMenuItem *)find(1))->updateLabel();
|
||||
frameWindow().updateBackground(false);
|
||||
FbTk::Menu::clearWindow();
|
||||
}
|
||||
|
@ -90,8 +93,8 @@ void AlphaMenu::move(int x, int y) {
|
|||
|
||||
void AlphaMenu::show() {
|
||||
// TODO: hardcoding the indices is a bad idea
|
||||
((IntResMenuItem< ObjectResource<AlphaObject, int> >*)find(0))->updateLabel();
|
||||
((IntResMenuItem< ObjectResource<AlphaObject, int> >*)find(1))->updateLabel();
|
||||
((FbTk::IntMenuItem *)find(0))->updateLabel();
|
||||
((FbTk::IntMenuItem *)find(1))->updateLabel();
|
||||
frameWindow().updateBackground(false);
|
||||
FbTk::Menu::clearWindow();
|
||||
|
||||
|
|
|
@ -26,56 +26,40 @@
|
|||
#define ALPHAMENU_HH
|
||||
|
||||
#include "ToggleMenu.hh"
|
||||
#include "WindowCmd.hh"
|
||||
#include "FbTk/MenuItem.hh"
|
||||
#include "ObjectResource.hh"
|
||||
|
||||
class AlphaObject {
|
||||
public:
|
||||
|
||||
virtual int getFocusedAlpha() const = 0;
|
||||
virtual int getUnfocusedAlpha() const = 0;
|
||||
virtual bool getUseDefaultAlpha() const = 0;
|
||||
|
||||
virtual void setFocusedAlpha(int alpha) = 0;
|
||||
virtual void setUnfocusedAlpha(int alpha) = 0;
|
||||
virtual void setDefaultAlpha() = 0;
|
||||
|
||||
virtual ~AlphaObject() {};
|
||||
};
|
||||
|
||||
|
||||
class AlphaMenu : public ToggleMenu {
|
||||
public:
|
||||
AlphaMenu(MenuTheme &tm, FbTk::ImageControl &imgctrl,
|
||||
FbTk::XLayer &layer, AlphaObject &object);
|
||||
FbTk::XLayer &layer);
|
||||
|
||||
// we override these to update the menu when the active window changes
|
||||
void move(int x, int y);
|
||||
void show();
|
||||
|
||||
ObjectResource<AlphaObject, int> m_focused_alpha_resource;
|
||||
ObjectResource<AlphaObject, int> m_unfocused_alpha_resource;
|
||||
|
||||
};
|
||||
|
||||
class AlphaMenuSelectItem : public FbTk::MenuItem {
|
||||
|
||||
public:
|
||||
AlphaMenuSelectItem(const FbTk::FbString &label, AlphaObject *object, AlphaMenu &parent):
|
||||
FbTk::MenuItem(label), m_object(object), m_parent(parent) {
|
||||
AlphaMenuSelectItem(const FbTk::FbString &label, AlphaMenu &parent):
|
||||
FbTk::MenuItem(label), m_parent(parent) {
|
||||
setToggleItem(true);
|
||||
setCloseOnClick(false);
|
||||
}
|
||||
|
||||
bool isSelected() const { return m_object->getUseDefaultAlpha(); }
|
||||
bool isSelected() const {
|
||||
static ConstWindowAccessor<bool> s_is_default(&FluxboxWindow::getUseDefaultAlpha, true);
|
||||
return s_is_default;
|
||||
}
|
||||
void click(int button, int time, unsigned int mods) {
|
||||
m_object->setDefaultAlpha();
|
||||
static WindowCmd<void> s_set_default(&FluxboxWindow::setDefaultAlpha);
|
||||
s_set_default.execute();
|
||||
m_parent.show(); // cheat to refreshing the window
|
||||
FbTk::MenuItem::click(button, time, mods);
|
||||
}
|
||||
|
||||
private:
|
||||
AlphaObject *m_object;
|
||||
AlphaMenu &m_parent;
|
||||
};
|
||||
|
||||
|
|
85
src/FbTk/Accessor.hh
Normal file
85
src/FbTk/Accessor.hh
Normal file
|
@ -0,0 +1,85 @@
|
|||
// Accessor.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_ACCESSOR_HH
|
||||
#define FBTK_ACCESSOR_HH
|
||||
|
||||
namespace FbTk {
|
||||
|
||||
// base class for objects that act like data type T
|
||||
template <typename T>
|
||||
class Accessor {
|
||||
public:
|
||||
virtual Accessor<T> &operator =(const T &val) = 0;
|
||||
virtual operator T() const = 0;
|
||||
};
|
||||
|
||||
// essentially just a reference
|
||||
template <typename T>
|
||||
class SimpleAccessor: public Accessor<T> {
|
||||
public:
|
||||
SimpleAccessor(T &val): m_val(val) { }
|
||||
inline Accessor<T> &operator =(const T &val) { m_val = val; return *this; }
|
||||
inline operator T() const { return m_val; }
|
||||
|
||||
private:
|
||||
T &m_val;
|
||||
};
|
||||
|
||||
// use object methods as an accessor
|
||||
template <typename T, typename Receiver>
|
||||
class ObjectAccessor: public Accessor<T> {
|
||||
public:
|
||||
typedef T (Receiver:: *Getter)() const;
|
||||
typedef void (Receiver:: *Setter)(T &);
|
||||
ObjectAccessor(Receiver &r, Getter g, Setter s):
|
||||
m_receiver(r), m_getter(g), m_setter(s) { }
|
||||
|
||||
inline operator T() const { return (m_receiver.*m_getter)(); }
|
||||
inline Accessor<T> &operator =(const T &val) {
|
||||
(m_receiver.*m_setter)(val); return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
Receiver &m_receiver;
|
||||
Getter m_getter;
|
||||
Setter m_setter;
|
||||
};
|
||||
|
||||
// same as above but with no set method
|
||||
template <typename T, typename Receiver>
|
||||
class ConstObjectAccessor: public Accessor<T> {
|
||||
public:
|
||||
typedef T (Receiver:: *Getter)() const;
|
||||
ConstObjectAccessor(const Receiver &r, Getter g):
|
||||
m_receiver(r), m_getter(g) { }
|
||||
|
||||
inline operator T() const { return (m_receiver.*m_getter)(); }
|
||||
inline Accessor<T> &operator =(const T &val) { return *this; }
|
||||
|
||||
private:
|
||||
const Receiver &m_receiver;
|
||||
Getter m_getter;
|
||||
};
|
||||
|
||||
}; // end namespace FbTk
|
||||
|
||||
#endif // FBTK_ACCESSOR_HH
|
|
@ -1,5 +1,5 @@
|
|||
// BoolMenuItem.hh for Fluxbox Window Manager
|
||||
// Copyright (c) 2003 - 2006 Henrik Kinnunen (fluxgen at fluxbox dot org)
|
||||
// BoolMenuItem.hh for FbTk
|
||||
// Copyright (c) 2003 - 2007 Henrik Kinnunen (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"),
|
||||
|
@ -19,24 +19,25 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id$
|
||||
|
||||
#ifndef BOOLMENUITEM_HH
|
||||
#define BOOLMENUITEM_HH
|
||||
#ifndef FBTK_BOOLMENUITEM_HH
|
||||
#define FBTK_BOOLMENUITEM_HH
|
||||
|
||||
#include "MenuItem.hh"
|
||||
#include "Accessor.hh"
|
||||
|
||||
namespace FbTk {
|
||||
|
||||
/// a bool menu item
|
||||
class BoolMenuItem: public FbTk::MenuItem {
|
||||
public:
|
||||
BoolMenuItem(const FbTk::FbString &label, bool &item,
|
||||
BoolMenuItem(const FbTk::FbString &label, Accessor<bool> &item,
|
||||
FbTk::RefCount<FbTk::Command> &cmd):
|
||||
FbTk::MenuItem(label, cmd), m_item(item) {
|
||||
FbTk::MenuItem::setSelected(m_item);
|
||||
setToggleItem(true);
|
||||
setCloseOnClick(false);
|
||||
}
|
||||
BoolMenuItem(const FbTk::FbString &label, bool &item):
|
||||
BoolMenuItem(const FbTk::FbString &label, Accessor<bool> &item):
|
||||
FbTk::MenuItem(label), m_item(item) {
|
||||
FbTk::MenuItem::setSelected(m_item);
|
||||
setToggleItem(true);
|
||||
|
@ -53,38 +54,9 @@ public:
|
|||
FbTk::MenuItem::setSelected(m_item);
|
||||
}
|
||||
private:
|
||||
bool &m_item;
|
||||
Accessor<bool> &m_item;
|
||||
};
|
||||
|
||||
/// a bool menu item
|
||||
template <typename Type>
|
||||
class BoolResMenuItem: public FbTk::MenuItem {
|
||||
public:
|
||||
BoolResMenuItem(const FbTk::FbString &label, Type &res,
|
||||
FbTk::RefCount<FbTk::Command> &cmd):
|
||||
FbTk::MenuItem(label, cmd), m_res(res) {
|
||||
FbTk::MenuItem::setSelected(*m_res);
|
||||
setToggleItem(true);
|
||||
setCloseOnClick(false);
|
||||
}
|
||||
BoolResMenuItem(const FbTk::FbString &label, Type &res):
|
||||
FbTk::MenuItem(label), m_res(res) {
|
||||
FbTk::MenuItem::setSelected(*m_res);
|
||||
setToggleItem(true);
|
||||
setCloseOnClick(false);
|
||||
}
|
||||
bool isSelected() const { return *m_res; }
|
||||
// toggle state
|
||||
void click(int button, int time, unsigned int mods) {
|
||||
setSelected(!*m_res);
|
||||
FbTk::MenuItem::click(button, time, mods);
|
||||
}
|
||||
void setSelected(bool value) {
|
||||
m_res = value;
|
||||
FbTk::MenuItem::setSelected(*m_res);
|
||||
}
|
||||
private:
|
||||
Type &m_res;
|
||||
};
|
||||
}; // end namespace FbTk
|
||||
|
||||
#endif // BOOLMENUITEM_HH
|
||||
#endif // FBTK_BOOLMENUITEM_HH
|
|
@ -22,58 +22,32 @@
|
|||
#ifndef FBTK_DEFAULTVALUE_HH
|
||||
#define FBTK_DEFAULTVALUE_HH
|
||||
|
||||
#include "Accessor.hh"
|
||||
|
||||
namespace FbTk {
|
||||
|
||||
// classes for overriding default values without having to listen for changes
|
||||
template <typename T>
|
||||
class DefaultValue {
|
||||
// class for overriding default values and restoring them later
|
||||
|
||||
// Ret = type of value that gets returned
|
||||
// Def = type of default value -- may be Accessor<Ret> &, for example
|
||||
template <typename Ret, typename Def=Ret &>
|
||||
class DefaultValue: public Accessor<Ret> {
|
||||
public:
|
||||
DefaultValue(const T &def):
|
||||
DefaultValue(const Def 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 bool isDefault() const { return m_use_default; }
|
||||
|
||||
inline DefaultValue<T> &operator =(const T &val) {
|
||||
set(val); return *this;
|
||||
inline DefaultValue<Ret, Def> &operator =(const Ret &val) {
|
||||
m_use_default = false; m_actual = val; return *this;
|
||||
}
|
||||
|
||||
inline operator T() const { return get(); }
|
||||
inline operator Ret() const { return m_use_default ? m_default : m_actual; }
|
||||
|
||||
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 bool 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;
|
||||
const Def m_default;
|
||||
Ret m_actual;
|
||||
bool m_use_default;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// IntResMenuItem.hh for Fluxbox Window Manager
|
||||
// Copyright (c) 2003 Henrik Kinnunen (fluxgen at fluxbox dot org)
|
||||
// IntMenuItem.hh for FbTk
|
||||
// Copyright (c) 2003-2007 Henrik Kinnunen (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"),
|
||||
|
@ -19,21 +19,21 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id$
|
||||
|
||||
#ifndef INTRESMENUITEM_HH
|
||||
#define INTRESMENUITEM_HH
|
||||
#ifndef FBTK_INTMENUITEM_HH
|
||||
#define FBTK_INTMENUITEM_HH
|
||||
|
||||
#include "MenuItem.hh"
|
||||
#include "Resource.hh"
|
||||
#include "Accessor.hh"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace FbTk {
|
||||
|
||||
/// Changes an resource integer value between min and max
|
||||
template <typename Type>
|
||||
class IntResMenuItem: public FbTk::MenuItem {
|
||||
class IntMenuItem: public FbTk::MenuItem {
|
||||
public:
|
||||
IntResMenuItem(const FbTk::FbString &label, Type &res, int min_val, int max_val, FbTk::Menu &host_menu) :
|
||||
IntMenuItem(const FbTk::FbString &label, Accessor<int> &res,
|
||||
int min_val, int max_val, FbTk::Menu &host_menu) :
|
||||
FbTk::MenuItem(label, host_menu), m_org_label(FbTk::MenuItem::label()),
|
||||
m_max(max_val), m_min(min_val), m_res(res) {
|
||||
updateLabel();
|
||||
|
@ -61,16 +61,16 @@ public:
|
|||
|
||||
// make sure values stay within bounds _before_ we try to set m_res
|
||||
// otherwise, this may cause bugs (say, with casting to unsigned char)
|
||||
if ((button == 4 || button == 3) && *m_res < m_max) { // up
|
||||
if (*m_res + inc_val < m_max)
|
||||
m_res.get() += inc_val;
|
||||
if ((button == 4 || button == 3) && m_res < m_max) { // up
|
||||
if (m_res + inc_val < m_max)
|
||||
m_res = m_res + inc_val;
|
||||
else
|
||||
m_res.get() = m_max;
|
||||
} else if ((button == 5 || button == 1) && *m_res > m_min) { // down
|
||||
if (*m_res - inc_val >= m_min)
|
||||
m_res.get() -= inc_val;
|
||||
m_res = m_max;
|
||||
} else if ((button == 5 || button == 1) && m_res > m_min) { // down
|
||||
if (m_res - inc_val >= m_min)
|
||||
m_res = m_res - inc_val;
|
||||
else
|
||||
m_res.get() = m_min;
|
||||
m_res = m_min;
|
||||
}
|
||||
|
||||
// update label
|
||||
|
@ -87,14 +87,16 @@ public:
|
|||
}
|
||||
|
||||
void updateLabel() {
|
||||
setLabel(appendIntValue(m_org_label, *m_res));
|
||||
setLabel(appendIntValue(m_org_label, m_res));
|
||||
}
|
||||
|
||||
private:
|
||||
std::string m_org_label; ///< original label
|
||||
const int m_max; ///< maximum value the integer can have
|
||||
const int m_min; ///< minimum value the integer can have
|
||||
Type &m_res; ///< resource item to be changed
|
||||
Accessor<int> &m_res; ///< resource item to be changed
|
||||
};
|
||||
|
||||
#endif // INTRESMENUITEM_HH
|
||||
}; // end namespace FbTk
|
||||
|
||||
#endif // FBTK_INTMENUITEM_HH
|
|
@ -16,7 +16,7 @@ imlib2_SOURCE= ImageImlib2.hh ImageImlib2.cc
|
|||
endif
|
||||
|
||||
libFbTk_a_SOURCES = App.hh App.cc Color.cc Color.hh Command.hh \
|
||||
ObjectRegistry.hh DefaultValue.hh \
|
||||
ObjectRegistry.hh Accessor.hh DefaultValue.hh \
|
||||
FileUtil.hh FileUtil.cc \
|
||||
EventHandler.hh EventManager.hh EventManager.cc \
|
||||
FbWindow.hh FbWindow.cc Font.cc Font.hh FontImp.hh \
|
||||
|
@ -25,6 +25,7 @@ libFbTk_a_SOURCES = App.hh App.cc Color.cc Color.hh Command.hh \
|
|||
LogicCommands.hh LogicCommands.cc \
|
||||
MacroCommand.hh MacroCommand.cc \
|
||||
Menu.hh Menu.cc MenuItem.hh MenuItem.cc \
|
||||
BoolMenuItem.hh IntMenuItem.hh \
|
||||
MultiButtonMenuItem.hh MultiButtonMenuItem.cc \
|
||||
MenuTheme.hh MenuTheme.cc NotCopyable.hh \
|
||||
RefCount.hh SimpleCommand.hh SignalHandler.cc SignalHandler.hh \
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#define FBTK_RESOURCE_HH
|
||||
|
||||
#include "NotCopyable.hh"
|
||||
#include "Accessor.hh"
|
||||
|
||||
#include <string>
|
||||
#include <list>
|
||||
|
@ -160,17 +161,16 @@ private:
|
|||
|
||||
/// Real resource class
|
||||
/**
|
||||
* usage: Resource<int> someresource(resourcemanager, 10, "someresourcename", "somealternativename"); \n
|
||||
* and then implement setFromString and getString \n
|
||||
* example: \n
|
||||
* template <> \n
|
||||
* void Resource<int>::setFromString(const char *str) { \n
|
||||
* *(*this) = atoi(str); \n
|
||||
* usage: Resource<int> someresource(resourcemanager, 10, "someresourcename", "somealternativename");
|
||||
* and then implement setFromString and getString
|
||||
* example:
|
||||
* template <>
|
||||
* void Resource<int>::setFromString(const char *str) {
|
||||
* *(*this) = atoi(str);
|
||||
* }
|
||||
*/
|
||||
template <typename T>
|
||||
class Resource:public Resource_base
|
||||
{
|
||||
class Resource:public Resource_base, public Accessor<T> {
|
||||
public:
|
||||
typedef T Type;
|
||||
Resource(ResourceManager &rm, T val,
|
||||
|
@ -192,6 +192,7 @@ public:
|
|||
/// @return string value of resource
|
||||
std::string getString() const;
|
||||
|
||||
inline operator T() const { return m_value; }
|
||||
inline T& get() { return m_value; }
|
||||
inline T& operator*() { return m_value; }
|
||||
inline const T& operator*() const { return m_value; }
|
||||
|
|
|
@ -95,8 +95,8 @@ FbWinFrame::FbWinFrame(BScreen &screen, FbWinFrameTheme &theme, FbTk::ImageContr
|
|||
m_button_size(1),
|
||||
m_height_before_shade(1),
|
||||
m_shaded(false),
|
||||
m_focused_alpha(theme, &FbWinFrameTheme::focusedAlpha),
|
||||
m_unfocused_alpha(theme, &FbWinFrameTheme::unfocusedAlpha),
|
||||
m_focused_alpha(AlphaAcc(theme, &FbWinFrameTheme::focusedAlpha)),
|
||||
m_unfocused_alpha(AlphaAcc(theme, &FbWinFrameTheme::unfocusedAlpha)),
|
||||
m_themelistener(*this),
|
||||
m_shape(m_window, theme.shapePlace()),
|
||||
m_disable_themeshape(false) {
|
||||
|
|
|
@ -400,8 +400,9 @@ private:
|
|||
unsigned int m_height_before_shade; ///< height before shade, so we can restore it when we unshade
|
||||
bool m_shaded; ///< wheter we're shaded or not
|
||||
/// alpha values
|
||||
FbTk::DefaultAccessor<unsigned char, FbWinFrameTheme> m_focused_alpha;
|
||||
FbTk::DefaultAccessor<unsigned char, FbWinFrameTheme> m_unfocused_alpha;
|
||||
typedef FbTk::ConstObjectAccessor<unsigned char, FbWinFrameTheme> AlphaAcc;
|
||||
FbTk::DefaultValue<unsigned char, AlphaAcc> m_focused_alpha;
|
||||
FbTk::DefaultValue<unsigned char, AlphaAcc> m_unfocused_alpha;
|
||||
|
||||
class ThemeListener: public FbTk::Observer {
|
||||
public:
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
#include "IconButton.hh"
|
||||
#include "Workspace.hh"
|
||||
#include "FbMenu.hh"
|
||||
#include "BoolMenuItem.hh"
|
||||
#include "FbTk/ObjectRegistry.hh"
|
||||
#include "WinClient.hh"
|
||||
#include "FocusControl.hh"
|
||||
|
@ -43,6 +42,7 @@
|
|||
#include "FbTk/I18n.hh"
|
||||
#include "FbTk/Menu.hh"
|
||||
#include "FbTk/MenuItem.hh"
|
||||
#include "FbTk/BoolMenuItem.hh"
|
||||
#include "FbTk/RefCount.hh"
|
||||
#include "FbTk/SimpleCommand.hh"
|
||||
#include "FbTk/ImageControl.hh"
|
||||
|
@ -288,9 +288,9 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, IconbarTheme &theme,
|
|||
save_and_reconfig->add(reconfig);
|
||||
save_and_reconfig->add(save);
|
||||
RefCount<Command> s_and_reconfig(save_and_reconfig);
|
||||
m_menu.insert(new BoolMenuItem(_FB_XTEXT(Toolbar, ShowIcons,
|
||||
m_menu.insert(new FbTk::BoolMenuItem(_FB_XTEXT(Toolbar, ShowIcons,
|
||||
"Show Pictures", "chooses if little icons are shown next to title in the iconbar"),
|
||||
*m_rc_use_pixmap, s_and_reconfig));
|
||||
m_rc_use_pixmap, s_and_reconfig));
|
||||
m_menu.updateMenu();
|
||||
// must be internal menu, otherwise toolbar main menu tries to delete it.
|
||||
m_menu.setInternalMenu();
|
||||
|
|
|
@ -96,7 +96,6 @@ TOOLBAR_SOURCE = Toolbar.hh Toolbar.cc \
|
|||
endif
|
||||
|
||||
fluxbox_SOURCES = AtomHandler.hh ArrowButton.hh ArrowButton.cc \
|
||||
BoolMenuItem.hh \
|
||||
FbAtoms.hh FbAtoms.cc FbWinFrame.hh FbWinFrame.cc \
|
||||
FbWinFrameTheme.hh FbWinFrameTheme.cc \
|
||||
fluxbox.cc fluxbox.hh \
|
||||
|
@ -111,7 +110,7 @@ fluxbox_SOURCES = AtomHandler.hh ArrowButton.hh ArrowButton.cc \
|
|||
Workspace.cc Workspace.hh \
|
||||
FbCommands.hh FbCommands.cc LayerMenu.hh LayerMenu.cc \
|
||||
Layer.hh \
|
||||
IntResMenuItem.hh FbMenu.hh FbMenu.cc \
|
||||
FbMenu.hh FbMenu.cc \
|
||||
WinClient.hh WinClient.cc \
|
||||
Strut.hh \
|
||||
Xinerama.hh \
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
#include "SendToMenu.hh"
|
||||
#include "AlphaMenu.hh"
|
||||
#include "Layer.hh"
|
||||
#include "BoolMenuItem.hh"
|
||||
|
||||
#include "FbMenuParser.hh"
|
||||
#include "StyleMenuItem.hh"
|
||||
|
@ -45,6 +44,7 @@
|
|||
|
||||
#include "FbTk/I18n.hh"
|
||||
#include "FbTk/MultiButtonMenuItem.hh"
|
||||
#include "FbTk/BoolMenuItem.hh"
|
||||
#include "FbTk/RefCount.hh"
|
||||
#include "FbTk/MacroCommand.hh"
|
||||
#include "FbTk/SimpleCommand.hh"
|
||||
|
@ -157,7 +157,7 @@ private:
|
|||
FbTk::Menu *m_menu;
|
||||
};
|
||||
|
||||
class MenuContext: public LayerObject, public AlphaObject {
|
||||
class MenuContext: public LayerObject {
|
||||
public:
|
||||
void moveToLayer(int layer_number) {
|
||||
if (WindowCmd<void>::window() == 0)
|
||||
|
@ -170,42 +170,6 @@ public:
|
|||
return WindowCmd<void>::window()->layerItem().getLayerNum();
|
||||
}
|
||||
|
||||
int getFocusedAlpha() const {
|
||||
if (WindowCmd<void>::window() == 0)
|
||||
return 255;
|
||||
return WindowCmd<void>::window()->getFocusedAlpha();
|
||||
}
|
||||
|
||||
int getUnfocusedAlpha() const {
|
||||
if (WindowCmd<void>::window() == 0)
|
||||
return 255;
|
||||
return WindowCmd<void>::window()->getUnfocusedAlpha();
|
||||
}
|
||||
|
||||
bool getUseDefaultAlpha() const {
|
||||
if (WindowCmd<void>::window() == 0)
|
||||
return true;
|
||||
return WindowCmd<void>::window()->getUseDefaultAlpha();
|
||||
}
|
||||
|
||||
void setFocusedAlpha(int alpha) {
|
||||
if (WindowCmd<void>::window() == 0)
|
||||
return;
|
||||
WindowCmd<void>::window()->setFocusedAlpha(alpha);
|
||||
}
|
||||
|
||||
void setUnfocusedAlpha(int alpha) {
|
||||
if (WindowCmd<void>::window() == 0)
|
||||
return;
|
||||
WindowCmd<void>::window()->setUnfocusedAlpha(alpha);
|
||||
}
|
||||
|
||||
void setDefaultAlpha() {
|
||||
if (WindowCmd<void>::window() == 0)
|
||||
return;
|
||||
WindowCmd<void>::window()->setDefaultAlpha();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
static void translateMenuItem(Parser &parse, ParseItem &item, FbTk::StringConvertor &labelconvertor);
|
||||
|
@ -551,8 +515,8 @@ bool MenuCreator::createWindowMenuItem(const string &type,
|
|||
static MenuContext context;
|
||||
|
||||
if (type == "shade") {
|
||||
static ObjectResource<FluxboxWindow, bool> res(&WindowCmd<void>::window, &FluxboxWindow::isShaded, &FluxboxWindow::shade, false);
|
||||
menu.insert(new BoolResMenuItem<ObjectResource<FluxboxWindow, bool> >(
|
||||
static WindowAccessor<bool> res(&FluxboxWindow::isShaded, &FluxboxWindow::setShaded, false);
|
||||
menu.insert(new FbTk::BoolMenuItem(
|
||||
label.empty()?_FB_XTEXT(Windowmenu, Shade, "Shade", "Shade the window"):label,
|
||||
res));
|
||||
|
||||
|
@ -575,8 +539,8 @@ bool MenuCreator::createWindowMenuItem(const string &type,
|
|||
maximize_item->setCommand(3, maximize_horiz_cmd);
|
||||
menu.insert(maximize_item);
|
||||
} else if (type == "iconify") {
|
||||
static ObjectResource<FluxboxWindow, bool> res(&WindowCmd<void>::window, &FluxboxWindow::isIconic, &FluxboxWindow::toggleIconic, false);
|
||||
menu.insert(new BoolResMenuItem<ObjectResource<FluxboxWindow, bool> >(
|
||||
static WindowAccessor<bool> res(&FluxboxWindow::isIconic, &FluxboxWindow::setIconic, false);
|
||||
menu.insert(new FbTk::BoolMenuItem(
|
||||
label.empty() ?
|
||||
_FB_XTEXT(Windowmenu, Iconify,
|
||||
"Iconify", "Iconify the window") :
|
||||
|
@ -607,8 +571,8 @@ bool MenuCreator::createWindowMenuItem(const string &type,
|
|||
label, raise_cmd);
|
||||
|
||||
} else if (type == "stick") {
|
||||
static ObjectResource<FluxboxWindow, bool> res(&WindowCmd<void>::window, &FluxboxWindow::isStuck, &FluxboxWindow::stick, false);
|
||||
menu.insert(new BoolResMenuItem<ObjectResource<FluxboxWindow, bool> >(
|
||||
static WindowAccessor<bool> res(&FluxboxWindow::isStuck, &FluxboxWindow::setStuck, false);
|
||||
menu.insert(new FbTk::BoolMenuItem(
|
||||
label.empty() ?
|
||||
_FB_XTEXT(Windowmenu, Stick,
|
||||
"Stick", "Stick the window"):
|
||||
|
@ -625,8 +589,7 @@ bool MenuCreator::createWindowMenuItem(const string &type,
|
|||
"Menu containing various transparency options"): label,
|
||||
new AlphaMenu(screen->menuTheme(),
|
||||
screen->imageControl(),
|
||||
*screen->layerManager().getLayer(Layer::MENU),
|
||||
context));
|
||||
*screen->layerManager().getLayer(Layer::MENU)));
|
||||
}
|
||||
#endif // HAVE_XRENDER
|
||||
} else if (type == "extramenus") {
|
||||
|
|
|
@ -1,145 +0,0 @@
|
|||
// ObjectResource.hh for Fluxbox
|
||||
// Copyright (c) 2007 Henrik Kinnunen (fluxgen at fluxbox dot org)
|
||||
// and Simon Bowden (rathnor at users.sourceforge.net)
|
||||
//
|
||||
// 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.
|
||||
|
||||
// $Id$
|
||||
|
||||
#ifndef OBJECTRESOURCE_HH
|
||||
#define OBJECTRESOURCE_HH
|
||||
|
||||
/* This is a generic resource that can be used as an accessor to a value in an object.
|
||||
The constructors allow to select between:
|
||||
1a. giving an object of ObjectType, OR
|
||||
1b. giving a function returning an object of ObjectType
|
||||
|
||||
2a. a function that sets a value
|
||||
2b. a function that toggles a value
|
||||
*/
|
||||
|
||||
template <typename ObjectType, typename ValueType>
|
||||
class ObjectResource {
|
||||
public:
|
||||
typedef ValueType (ObjectType::* getResourceType)() const;
|
||||
typedef void (ObjectType::* setResourceType)(ValueType);
|
||||
typedef void (ObjectType::* toggleResourceType)();
|
||||
typedef ObjectType* (*getResourceObject)();
|
||||
|
||||
ObjectResource(ObjectType *object, getResourceType get, setResourceType set, ValueType a_default) :
|
||||
m_get(get), m_set(set), m_istoggle(false), m_object(object),
|
||||
m_default(a_default), m_use_accessor(false) {
|
||||
}
|
||||
|
||||
ObjectResource(ObjectType *object, getResourceType get, toggleResourceType toggle, ValueType a_default) :
|
||||
m_get(get), m_toggle(toggle), m_istoggle(true), m_object(object),
|
||||
m_default(a_default), m_use_accessor(false) {
|
||||
}
|
||||
|
||||
ObjectResource(getResourceObject object_accessor, getResourceType get, setResourceType set, ValueType a_default) :
|
||||
m_get(get), m_set(set), m_istoggle(false), m_object_accessor(object_accessor),
|
||||
m_default(a_default), m_use_accessor(true) {
|
||||
}
|
||||
|
||||
ObjectResource(getResourceObject object_accessor, getResourceType get, toggleResourceType toggle, ValueType a_default) :
|
||||
m_get(get), m_toggle(toggle), m_istoggle(true), m_object_accessor(object_accessor),
|
||||
m_default(a_default), m_use_accessor(true) {
|
||||
}
|
||||
|
||||
ObjectResource<ObjectType, ValueType>& operator = (const ValueType newvalue) {
|
||||
ObjectType * obj = getObject();
|
||||
if (!obj)
|
||||
return *this;
|
||||
|
||||
if (m_istoggle) {
|
||||
if (newvalue != (operator*)())
|
||||
(obj->*m_toggle)();
|
||||
} else {
|
||||
(obj->*m_set)(newvalue);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
ObjectResource<ObjectType, ValueType>& operator += (const ValueType newvalue) {
|
||||
ObjectType * obj = getObject();
|
||||
if (obj && !m_istoggle)
|
||||
(obj->*m_set)((operator*)()+newvalue);
|
||||
return *this;
|
||||
}
|
||||
|
||||
ObjectResource<ObjectType, ValueType>& operator -= (const ValueType newvalue) {
|
||||
ObjectType * obj = getObject();
|
||||
if (obj && !m_istoggle)
|
||||
(obj->*m_set)((operator*)()-newvalue);
|
||||
return *this;
|
||||
}
|
||||
|
||||
// this is a touch dirty, but it makes us compatible with FbTk::Resource<int> in IntResMenuItem
|
||||
ObjectResource<ObjectType, ValueType>& get() {
|
||||
return *this;
|
||||
}
|
||||
|
||||
ValueType operator*() {
|
||||
ObjectType * obj = getObject();
|
||||
if (!obj)
|
||||
return m_default;
|
||||
|
||||
return (obj->*m_get)();
|
||||
}
|
||||
|
||||
const ValueType operator*() const {
|
||||
ObjectType * obj = getObject();
|
||||
if (!obj)
|
||||
return m_default;
|
||||
|
||||
return (obj->*m_get)();
|
||||
}
|
||||
|
||||
private:
|
||||
// choose one get and one set function
|
||||
|
||||
ObjectType * getObject() {
|
||||
if (m_use_accessor)
|
||||
return (*m_object_accessor)();
|
||||
else
|
||||
return m_object;
|
||||
}
|
||||
|
||||
getResourceType m_get;
|
||||
|
||||
union {
|
||||
setResourceType m_set;
|
||||
toggleResourceType m_toggle;
|
||||
};
|
||||
|
||||
bool m_istoggle;
|
||||
|
||||
union {
|
||||
ObjectType *m_object;
|
||||
getResourceObject m_object_accessor;
|
||||
};
|
||||
|
||||
// default is only used when object isn't set (saves crashes)
|
||||
ValueType m_default;
|
||||
|
||||
bool m_use_accessor;
|
||||
};
|
||||
|
||||
|
||||
#endif // OBJECTRESOURCE_HH
|
|
@ -47,8 +47,8 @@
|
|||
#include "SlitTheme.hh"
|
||||
|
||||
// menu items
|
||||
#include "BoolMenuItem.hh"
|
||||
#include "IntResMenuItem.hh"
|
||||
#include "FbTk/BoolMenuItem.hh"
|
||||
#include "FbTk/IntMenuItem.hh"
|
||||
#include "FocusModelMenuItem.hh"
|
||||
|
||||
// menus
|
||||
|
@ -1576,7 +1576,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
|
|||
"Method used to give focus to windows");
|
||||
FbTk::Menu *focus_menu = createMenu(focusmenu_label);
|
||||
|
||||
#define _BOOLITEM(m,a, b, c, d, e, f) (m).insert(new BoolMenuItem(_FB_XTEXT(a, b, c, d), e, f))
|
||||
#define _BOOLITEM(m,a, b, c, d, e, f) (m).insert(new FbTk::BoolMenuItem(_FB_XTEXT(a, b, c, d), e, f))
|
||||
|
||||
|
||||
#define _FOCUSITEM(a, b, c, d, e) \
|
||||
|
@ -1599,19 +1599,19 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
|
|||
focusControl(), FocusControl::MOUSETABFOCUS, save_and_reconfigure));
|
||||
|
||||
try {
|
||||
focus_menu->insert(new BoolMenuItem(_FB_XTEXT(Configmenu, FocusNew,
|
||||
focus_menu->insert(new FbTk::BoolMenuItem(_FB_XTEXT(Configmenu, FocusNew,
|
||||
"Focus New Windows", "Focus newly created windows"),
|
||||
*m_resource_manager.getResource<bool>(name() + ".focusNewWindows"),
|
||||
m_resource_manager.getResource<bool>(name() + ".focusNewWindows"),
|
||||
saverc_cmd));
|
||||
} catch (FbTk::ResourceException e) {
|
||||
cerr<<e.what()<<endl;
|
||||
}
|
||||
|
||||
focus_menu->insert(new BoolMenuItem(_FB_XTEXT(Configmenu,
|
||||
focus_menu->insert(new FbTk::BoolMenuItem(_FB_XTEXT(Configmenu,
|
||||
AutoRaise,
|
||||
"Auto Raise",
|
||||
"Auto Raise windows on sloppy"),
|
||||
*resource.auto_raise,
|
||||
resource.auto_raise,
|
||||
save_and_reconfigure));
|
||||
|
||||
focus_menu->updateMenu();
|
||||
|
@ -1628,17 +1628,17 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
|
|||
|
||||
_BOOLITEM(*maxmenu, Configmenu, FullMax,
|
||||
"Full Maximization", "Maximise over slit, toolbar, etc",
|
||||
*resource.full_max, saverc_cmd);
|
||||
resource.full_max, saverc_cmd);
|
||||
_BOOLITEM(*maxmenu, Configmenu, MaxIgnoreInc,
|
||||
"Ignore Resize Increment",
|
||||
"Maximizing Ignores Resize Increment (e.g. xterm)",
|
||||
*resource.max_ignore_inc, saverc_cmd);
|
||||
resource.max_ignore_inc, saverc_cmd);
|
||||
_BOOLITEM(*maxmenu, Configmenu, MaxDisableMove,
|
||||
"Disable Moving", "Don't Allow Moving While Maximized",
|
||||
*resource.max_disable_move, saverc_cmd);
|
||||
resource.max_disable_move, saverc_cmd);
|
||||
_BOOLITEM(*maxmenu, Configmenu, MaxDisableResize,
|
||||
"Disable Resizing", "Don't Allow Resizing While Maximized",
|
||||
*resource.max_disable_resize, saverc_cmd);
|
||||
resource.max_disable_resize, saverc_cmd);
|
||||
|
||||
maxmenu->updateMenu();
|
||||
menu.insert(maxmenu_label, maxmenu);
|
||||
|
@ -1658,16 +1658,16 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
|
|||
|
||||
_BOOLITEM(*tab_menu,Configmenu, TabsInTitlebar,
|
||||
"Tabs in Titlebar", "Tabs in Titlebar",
|
||||
*resource.default_internal_tabs, save_and_reconftabs);
|
||||
tab_menu->insert(new BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,
|
||||
resource.default_internal_tabs, save_and_reconftabs);
|
||||
tab_menu->insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,
|
||||
"Maximize Over", "Maximize over this thing when maximizing"),
|
||||
*resource.max_over_tabs, save_and_reconfigure));
|
||||
tab_menu->insert(new BoolMenuItem(_FB_XTEXT(Toolbar, ShowIcons,
|
||||
resource.max_over_tabs, save_and_reconfigure));
|
||||
tab_menu->insert(new FbTk::BoolMenuItem(_FB_XTEXT(Toolbar, ShowIcons,
|
||||
"Show Pictures", "chooses if little icons are shown next to title in the iconbar"),
|
||||
*resource.tabs_use_pixmap, save_and_reconfigure));
|
||||
resource.tabs_use_pixmap, save_and_reconfigure));
|
||||
|
||||
FbTk::MenuItem *tab_width_item =
|
||||
new IntResMenuItem< FbTk::Resource<int> >(_FB_XTEXT(Configmenu, ExternalTabWidth,
|
||||
new FbTk::IntMenuItem(_FB_XTEXT(Configmenu, ExternalTabWidth,
|
||||
"External Tab Width",
|
||||
"Width of external-style tabs"),
|
||||
resource.tab_width, 10, 3000, /* silly number */
|
||||
|
@ -1715,10 +1715,11 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
|
|||
FbTk::Menu *alpha_menu = createMenu(alphamenu_label);
|
||||
|
||||
if (FbTk::Transparent::haveComposite(true)) {
|
||||
alpha_menu->insert(new BoolMenuItem(_FB_XTEXT(Configmenu, ForcePseudoTrans,
|
||||
static FbTk::SimpleAccessor<bool> s_pseudo(Fluxbox::instance()->getPseudoTrans());
|
||||
alpha_menu->insert(new FbTk::BoolMenuItem(_FB_XTEXT(Configmenu, ForcePseudoTrans,
|
||||
"Force Pseudo-Transparency",
|
||||
"When composite is available, still use old pseudo-transparency"),
|
||||
Fluxbox::instance()->getPseudoTrans(), save_and_reconfigure));
|
||||
s_pseudo, save_and_reconfigure));
|
||||
}
|
||||
|
||||
// in order to save system resources, don't save or reconfigure alpha
|
||||
|
@ -1727,7 +1728,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
|
|||
new ::DelayedCmd(save_and_reconfigure));
|
||||
|
||||
FbTk::MenuItem *focused_alpha_item =
|
||||
new IntResMenuItem< FbTk::Resource<int> >(_FB_XTEXT(Configmenu, FocusedAlpha,
|
||||
new FbTk::IntMenuItem(_FB_XTEXT(Configmenu, FocusedAlpha,
|
||||
"Focused Window Alpha",
|
||||
"Transparency level of the focused window"),
|
||||
resource.focused_alpha, 0, 255, *alpha_menu);
|
||||
|
@ -1735,7 +1736,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
|
|||
alpha_menu->insert(focused_alpha_item);
|
||||
|
||||
FbTk::MenuItem *unfocused_alpha_item =
|
||||
new IntResMenuItem< FbTk::Resource<int> >(_FB_XTEXT(Configmenu,
|
||||
new FbTk::IntMenuItem(_FB_XTEXT(Configmenu,
|
||||
UnfocusedAlpha,
|
||||
"Unfocused Window Alpha",
|
||||
"Transparency level of unfocused windows"),
|
||||
|
@ -1745,7 +1746,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
|
|||
alpha_menu->insert(unfocused_alpha_item);
|
||||
|
||||
FbTk::MenuItem *menu_alpha_item =
|
||||
new IntResMenuItem< FbTk::Resource<int> >(_FB_XTEXT(Configmenu, MenuAlpha,
|
||||
new FbTk::IntMenuItem(_FB_XTEXT(Configmenu, MenuAlpha,
|
||||
"Menu Alpha", "Transparency level of menu"),
|
||||
resource.menu_alpha, 0, 255, *alpha_menu);
|
||||
menu_alpha_item->setCommand(delayed_save_and_reconf);
|
||||
|
@ -1763,21 +1764,21 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
|
|||
|
||||
_BOOLITEM(menu, Configmenu, ImageDithering,
|
||||
"Image Dithering", "Image Dithering",
|
||||
*resource.image_dither, save_and_reconfigure);
|
||||
resource.image_dither, save_and_reconfigure);
|
||||
_BOOLITEM(menu, Configmenu, OpaqueMove,
|
||||
"Opaque Window Moving",
|
||||
"Window Moving with whole window visible (as opposed to outline moving)",
|
||||
*resource.opaque_move, saverc_cmd);
|
||||
resource.opaque_move, saverc_cmd);
|
||||
_BOOLITEM(menu, Configmenu, WorkspaceWarping,
|
||||
"Workspace Warping",
|
||||
"Workspace Warping - dragging windows to the edge and onto the next workspace",
|
||||
*resource.workspace_warping, saverc_cmd);
|
||||
resource.workspace_warping, saverc_cmd);
|
||||
_BOOLITEM(menu, Configmenu, DecorateTransient,
|
||||
"Decorate Transient Windows", "Decorate Transient Windows",
|
||||
*resource.decorate_transient, saverc_cmd);
|
||||
resource.decorate_transient, saverc_cmd);
|
||||
_BOOLITEM(menu, Configmenu, ClickRaises,
|
||||
"Click Raises", "Click Raises",
|
||||
*resource.click_raises, saverc_cmd);
|
||||
resource.click_raises, saverc_cmd);
|
||||
|
||||
#undef _BOOLITEM
|
||||
|
||||
|
|
14
src/Slit.cc
14
src/Slit.cc
|
@ -38,7 +38,6 @@
|
|||
#include "Screen.hh"
|
||||
#include "ImageControl.hh"
|
||||
#include "RefCount.hh"
|
||||
#include "BoolMenuItem.hh"
|
||||
#include "EventManager.hh"
|
||||
#include "SimpleCommand.hh"
|
||||
#include "MacroCommand.hh"
|
||||
|
@ -50,7 +49,6 @@
|
|||
#include "FbTk/Theme.hh"
|
||||
#include "FbMenu.hh"
|
||||
#include "Transparent.hh"
|
||||
#include "IntResMenuItem.hh"
|
||||
|
||||
#ifdef XINERAMA
|
||||
#include "Xinerama.hh"
|
||||
|
@ -63,6 +61,8 @@
|
|||
#include "FbTk/MenuSeparator.hh"
|
||||
#include "FbTk/StringUtil.hh"
|
||||
#include "FbTk/I18n.hh"
|
||||
#include "FbTk/BoolMenuItem.hh"
|
||||
#include "FbTk/IntMenuItem.hh"
|
||||
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
#include <sys/types.h>
|
||||
|
@ -1268,17 +1268,17 @@ void Slit::setupMenu() {
|
|||
}
|
||||
#endif //XINERAMA
|
||||
|
||||
m_slitmenu.insert(new BoolMenuItem(_FB_XTEXT(Common, AutoHide, "Auto hide", "This thing automatically hides when not close by"),
|
||||
*m_rc_auto_hide,
|
||||
m_slitmenu.insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, AutoHide, "Auto hide", "This thing automatically hides when not close by"),
|
||||
m_rc_auto_hide,
|
||||
save_and_reconfigure_slit));
|
||||
|
||||
m_slitmenu.insert(new BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,"Maximize Over", "Maximize over this thing when maximizing"),
|
||||
*m_rc_maximize_over,
|
||||
m_slitmenu.insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,"Maximize Over", "Maximize over this thing when maximizing"),
|
||||
m_rc_maximize_over,
|
||||
save_and_reconfigure_slit));
|
||||
|
||||
// this saves resources and clears the slit window to update alpha value
|
||||
FbTk::MenuItem *alpha_menuitem =
|
||||
new IntResMenuItem< FbTk::Resource<int> >(_FB_XTEXT(Common, Alpha, "Alpha", "Transparency level"),
|
||||
new FbTk::IntMenuItem(_FB_XTEXT(Common, Alpha, "Alpha", "Transparency level"),
|
||||
m_rc_alpha,
|
||||
0, 255, m_slitmenu);
|
||||
// setup command for alpha value
|
||||
|
|
|
@ -36,8 +36,6 @@
|
|||
#include "Keys.hh"
|
||||
#include "Screen.hh"
|
||||
#include "WindowCmd.hh"
|
||||
#include "IntResMenuItem.hh"
|
||||
#include "BoolMenuItem.hh"
|
||||
|
||||
#ifdef XINERAMA
|
||||
#include "Xinerama.hh"
|
||||
|
@ -54,6 +52,8 @@
|
|||
#include "FbTk/SimpleCommand.hh"
|
||||
#include "FbTk/StringUtil.hh"
|
||||
#include "FbTk/Transparent.hh"
|
||||
#include "FbTk/BoolMenuItem.hh"
|
||||
#include "FbTk/IntMenuItem.hh"
|
||||
|
||||
|
||||
// use GNU extensions
|
||||
|
@ -835,17 +835,17 @@ void Toolbar::setupMenus(bool skip_new_placement) {
|
|||
visible_macro->add(reconfig_toolbar);
|
||||
visible_macro->add(save_resources);
|
||||
RefCommand toggle_visible_cmd(visible_macro);
|
||||
menu().insert(new BoolMenuItem(_FB_XTEXT(Common, Visible,
|
||||
menu().insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, Visible,
|
||||
"Visible", "Whether this item is visible"),
|
||||
*m_rc_visible, toggle_visible_cmd));
|
||||
m_rc_visible, toggle_visible_cmd));
|
||||
|
||||
menu().insert(new BoolMenuItem(_FB_XTEXT(Common, AutoHide,
|
||||
menu().insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, AutoHide,
|
||||
"Auto hide", "Toggle auto hide of toolbar"),
|
||||
*m_rc_auto_hide,
|
||||
m_rc_auto_hide,
|
||||
reconfig_toolbar_and_save_resource));
|
||||
|
||||
MenuItem *toolbar_menuitem =
|
||||
new IntResMenuItem< FbTk::Resource<int> >(_FB_XTEXT(Toolbar, WidthPercent,
|
||||
new FbTk::IntMenuItem(_FB_XTEXT(Toolbar, WidthPercent,
|
||||
"Toolbar width percent",
|
||||
"Percentage of screen width taken by toolbar"),
|
||||
m_rc_width_percent,
|
||||
|
@ -855,10 +855,10 @@ void Toolbar::setupMenus(bool skip_new_placement) {
|
|||
toolbar_menuitem->setCommand(reconfig_toolbar_and_save_resource);
|
||||
menu().insert(toolbar_menuitem);
|
||||
|
||||
menu().insert(new BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,
|
||||
menu().insert(new FbTk::BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,
|
||||
"Maximize Over",
|
||||
"Maximize over this thing when maximizing"),
|
||||
*m_rc_maximize_over,
|
||||
m_rc_maximize_over,
|
||||
reconfig_toolbar_and_save_resource));
|
||||
menu().insert(_FB_XTEXT(Menu, Layer, "Layer...", "Title of Layer menu"), &layerMenu());
|
||||
#ifdef XINERAMA
|
||||
|
@ -922,7 +922,7 @@ void Toolbar::setupMenus(bool skip_new_placement) {
|
|||
|
||||
// this saves resources and clears the slit window to update alpha value
|
||||
FbTk::MenuItem *alpha_menuitem =
|
||||
new IntResMenuItem< FbTk::Resource<int> >(_FB_XTEXT(Common, Alpha, "Alpha", "Transparency level"),
|
||||
new FbTk::IntMenuItem(_FB_XTEXT(Common, Alpha, "Alpha", "Transparency level"),
|
||||
m_rc_alpha,
|
||||
0, 255, menu());
|
||||
// setup command for alpha value
|
||||
|
|
|
@ -264,8 +264,8 @@ FluxboxWindow::FluxboxWindow(WinClient &client, FbWinFrameTheme &tm,
|
|||
m_toggled_decos(false),
|
||||
m_icon_hidden(false),
|
||||
m_focus_hidden(false),
|
||||
m_focus_new(screen().focusControl(), &FocusControl::focusNew),
|
||||
m_mouse_focus(screen().focusControl(), &FocusControl::isMouseFocus),
|
||||
m_focus_new(BoolAcc(screen().focusControl(), &FocusControl::focusNew)),
|
||||
m_mouse_focus(BoolAcc(screen().focusControl(), &FocusControl::isMouseFocus)),
|
||||
m_click_focus(true),
|
||||
m_old_pos_x(0), m_old_pos_y(0),
|
||||
m_old_width(1), m_old_height(1),
|
||||
|
@ -1745,17 +1745,18 @@ void FluxboxWindow::shade() {
|
|||
}
|
||||
|
||||
void FluxboxWindow::shadeOn() {
|
||||
|
||||
if (!shaded)
|
||||
shade();
|
||||
|
||||
}
|
||||
|
||||
void FluxboxWindow::shadeOff() {
|
||||
|
||||
if (shaded)
|
||||
shade();
|
||||
}
|
||||
|
||||
void FluxboxWindow::setShaded(bool val) {
|
||||
if (val != shaded)
|
||||
shade();
|
||||
}
|
||||
|
||||
void FluxboxWindow::stick() {
|
||||
|
@ -1783,6 +1784,17 @@ void FluxboxWindow::stick() {
|
|||
|
||||
}
|
||||
|
||||
void FluxboxWindow::setStuck(bool val) {
|
||||
if (val != stuck)
|
||||
stick();
|
||||
}
|
||||
|
||||
void FluxboxWindow::setIconic(bool val) {
|
||||
if (val && isIconic())
|
||||
deiconify();
|
||||
if (!val && !isIconic())
|
||||
iconify();
|
||||
}
|
||||
|
||||
void FluxboxWindow::raise() {
|
||||
if (isIconic())
|
||||
|
|
|
@ -270,10 +270,16 @@ public:
|
|||
void shadeOn();
|
||||
/// unshades window
|
||||
void shadeOff();
|
||||
/// sets shaded state
|
||||
void setShaded(bool val);
|
||||
/// toggles sticky
|
||||
void stick();
|
||||
/// sets stuck state
|
||||
void setStuck(bool val);
|
||||
/// toggles iconic
|
||||
void toggleIconic();
|
||||
/// sets iconic state
|
||||
void setIconic(bool val);
|
||||
void raise();
|
||||
void lower();
|
||||
void tempRaise();
|
||||
|
@ -611,10 +617,11 @@ private:
|
|||
|
||||
bool m_icon_hidden; ///< if the window is in the iconbar
|
||||
bool m_focus_hidden; ///< if the window is in the NextWindow list
|
||||
typedef FbTk::ConstObjectAccessor<bool, FocusControl> BoolAcc;
|
||||
/// if the window is normally focused when mapped
|
||||
FbTk::DefaultAccessor<bool, FocusControl> m_focus_new;
|
||||
FbTk::DefaultValue<bool, BoolAcc> m_focus_new;
|
||||
/// if the window is focused with EnterNotify
|
||||
FbTk::DefaultAccessor<bool, FocusControl> m_mouse_focus;
|
||||
FbTk::DefaultValue<bool, BoolAcc> m_mouse_focus;
|
||||
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
|
||||
unsigned int m_old_width, m_old_height; ///< old size so we can restore from maximized state
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#define WINDOWCMD_HH
|
||||
|
||||
#include "FbTk/Command.hh"
|
||||
#include "FbTk/Accessor.hh"
|
||||
#include "Window.hh"
|
||||
#include "WinClient.hh"
|
||||
|
||||
|
@ -64,5 +65,49 @@ private:
|
|||
Action m_action;
|
||||
};
|
||||
|
||||
/// accesses values in current window
|
||||
template <typename Ret, typename Def=Ret>
|
||||
class WindowAccessor: public FbTk::Accessor<Ret> {
|
||||
public:
|
||||
typedef Ret (FluxboxWindow:: *Getter)() const;
|
||||
typedef void (FluxboxWindow:: *Setter)(Ret);
|
||||
WindowAccessor(Getter g, Setter s, Def def):
|
||||
m_getter(g), m_setter(s), m_def(def) { }
|
||||
|
||||
inline operator Ret() const {
|
||||
FluxboxWindow *fbwin = WindowCmd<void>::window();
|
||||
return fbwin ? (fbwin->*m_getter)() : m_def;
|
||||
}
|
||||
inline FbTk::Accessor<Ret> &operator =(const Ret &val) {
|
||||
FluxboxWindow *fbwin = WindowCmd<void>::window();
|
||||
if (fbwin)
|
||||
(fbwin->*m_setter)(val);
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
Getter m_getter;
|
||||
Setter m_setter;
|
||||
Def m_def;
|
||||
};
|
||||
|
||||
/// same as above but only reads
|
||||
template <typename Ret, typename Def=Ret>
|
||||
class ConstWindowAccessor: public FbTk::Accessor<Ret> {
|
||||
public:
|
||||
typedef Ret (FluxboxWindow:: *Getter)() const;
|
||||
ConstWindowAccessor(Getter g, Def def):
|
||||
m_getter(g), m_def(def) { }
|
||||
|
||||
inline operator Ret() const {
|
||||
FluxboxWindow *fbwin = WindowCmd<void>::window();
|
||||
return fbwin ? (fbwin->*m_getter)() : m_def;
|
||||
}
|
||||
inline FbTk::Accessor<Ret> &operator =(const Ret &val) { return *this; }
|
||||
|
||||
private:
|
||||
Getter m_getter;
|
||||
Def m_def;
|
||||
};
|
||||
|
||||
#endif // WINDOWCMD_HH
|
||||
|
|
Loading…
Reference in a new issue