alignment of iconbar buttons

This commit is contained in:
fluxgen 2003-12-12 14:36:22 +00:00
parent 722036eab0
commit d2d3fbc96c
2 changed files with 80 additions and 4 deletions

View file

@ -20,7 +20,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: IconbarTool.cc,v 1.21 2003/12/10 23:08:03 fluxgen Exp $
// $Id: IconbarTool.cc,v 1.22 2003/12/12 14:36:22 fluxgen Exp $
#include "IconbarTool.hh"
@ -63,6 +63,35 @@ void FbTk::Resource<IconbarTool::Mode>::setFromString(const char *strval) {
setDefaultValue();
}
template<>
void FbTk::Resource<Container::Alignment>::setDefaultValue() {
m_value = Container::RELATIVE;
}
template<>
string FbTk::Resource<Container::Alignment>::getString() {
switch (m_value) {
case Container::LEFT:
return string("Left");
case Container::RIGHT:
return string("Right");
case Container::RELATIVE:
return string("Relative");
}
return string("Left");
}
template<>
void FbTk::Resource<Container::Alignment>::setFromString(const char *str) {
if (strcasecmp(str, "Left") == 0)
m_value = Container::LEFT;
else if (strcasecmp(str, "Right") == 0)
m_value = Container::RIGHT;
else if (strcasecmp(str, "RELATIVE") == 0)
m_value = Container::RELATIVE;
else
setDefaultValue();
}
template<>
string FbTk::Resource<IconbarTool::Mode>::getString() {
@ -108,6 +137,24 @@ private:
IconbarTool::Mode m_mode;
};
class ToolbarAlignMenuItem: public FbTk::MenuItem {
public:
ToolbarAlignMenuItem(const char *label, IconbarTool &handler,
Container::Alignment mode,
FbTk::RefCount<FbTk::Command> &cmd):
FbTk::MenuItem(label, cmd), m_handler(handler), m_mode(mode) {
}
bool isEnabled() const { return m_handler.alignment() != m_mode; }
void click(int button, int time) {
m_handler.setAlignment(m_mode);
FbTk::MenuItem::click(button, time);
}
private:
IconbarTool &m_handler;
Container::Alignment m_mode;
};
void setupModeMenu(FbTk::Menu &menu, IconbarTool &handler) {
using namespace FbTk;
@ -129,6 +176,14 @@ void setupModeMenu(FbTk::Menu &menu, IconbarTool &handler) {
IconbarTool::WORKSPACE, saverc_cmd));
menu.insert(new ToolbarModeMenuItem("All Windows", handler,
IconbarTool::ALLWINDOWS, saverc_cmd));
menu.insert("---"); // separator line
menu.insert(new ToolbarAlignMenuItem("Left", handler,
Container::LEFT, saverc_cmd));
menu.insert(new ToolbarAlignMenuItem("Relative", handler,
Container::RELATIVE, saverc_cmd));
menu.insert(new ToolbarAlignMenuItem("Right", handler,
Container::RIGHT, saverc_cmd));
menu.insert("---"); // separator line
menu.update();
}
@ -184,6 +239,10 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, IconbarTheme &theme, BScr
m_empty_pm(0),
m_rc_mode(screen.resourceManager(), WORKSPACE,
screen.name() + ".iconbar.mode", screen.altName() + ".Iconbar.Mode"),
m_rc_alignment(screen.resourceManager(), Container::LEFT,
screen.name() + ".iconbar.alignment", screen.altName() + ".Iconbar.Alignment"),
m_rc_client_width(screen.resourceManager(), 70,
screen.name() + ".iconbar.clientWidth", screen.altName() + ".Iconbar.ClientWidth"),
m_rc_use_pixmap(screen.resourceManager(), true,
screen.name() + ".iconbar.usePixmap", screen.altName() + ".Iconbar.UsePixmap"),
m_menu(*screen.menuTheme(), screen.imageControl(),
@ -254,6 +313,11 @@ void IconbarTool::hide() {
m_icon_container.hide();
}
void IconbarTool::setAlignment(Container::Alignment align) {
*m_rc_alignment = align;
update(0);
}
void IconbarTool::setMode(Mode mode) {
if (mode == *m_rc_mode)
return;
@ -306,6 +370,16 @@ void IconbarTool::update(FbTk::Subject *subj) {
if (m_screen.isShuttingdown())
return;
m_icon_container.setAlignment(*m_rc_alignment);
// clamp to normal values
if (*m_rc_client_width < 1)
*m_rc_client_width = 10;
else if (*m_rc_client_width > 400)
*m_rc_client_width = 400;
m_icon_container.setMaxSizePerClient(*m_rc_client_width);
if (mode() == NONE) {
if (subj != 0 && typeid(*subj) == typeid(IconbarTheme))
renderTheme();

View file

@ -20,7 +20,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: IconbarTool.hh,v 1.10 2003/11/27 14:30:11 fluxgen Exp $
// $Id: IconbarTool.hh,v 1.11 2003/12/12 14:36:22 fluxgen Exp $
#ifndef ICONBARTOOL_HH
#define ICONBARTOOL_HH
@ -66,7 +66,7 @@ public:
void update(FbTk::Subject *subj);
void show();
void hide();
void setAlignment(Container::Alignment a);
void setMode(Mode mode);
unsigned int width() const;
@ -74,7 +74,7 @@ public:
unsigned int borderWidth() const;
Mode mode() const { return *m_rc_mode; }
Container::Alignment alignment() const { return m_icon_container.alignment(); }
private:
/// render single button that holds win
@ -108,6 +108,8 @@ private:
IconList m_icon_list;
FbTk::Resource<Mode> m_rc_mode;
FbTk::Resource<Container::Alignment> m_rc_alignment; ///< alignment of buttons
FbTk::Resource<int> m_rc_client_width; ///< size of client button in LEFT/RIGHT mode
FbTk::Resource<bool> m_rc_use_pixmap; ///< if iconbar should use win pixmap or not
FbMenu m_menu;