~ubuntu-branches/ubuntu/trusty/fluxbox/trusty-proposed

« back to all changes in this revision

Viewing changes to src/Toolbar.hh

  • Committer: Bazaar Package Importer
  • Author(s): Dmitry E. Oboukhov
  • Date: 2008-07-01 10:38:14 UTC
  • mfrom: (2.1.12 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080701103814-khx2b6il152x9p93
Tags: 1.0.0+deb1-8
* x-dev has been removed from build-depends (out-of-date package).
* Standards-Version bumped to 3.8.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Toolbar.hh for Fluxbox
2
 
// Copyright (c) 2002 - 2005 Henrik Kinnunen (fluxgen at fluxbox dot org)
3
 
//
4
 
// Toolbar.hh for Blackbox - an X11 Window manager
5
 
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
6
 
//
7
 
// Permission is hereby granted, free of charge, to any person obtaining a
8
 
// copy of this software and associated documentation files (the "Software"),
9
 
// to deal in the Software without restriction, including without limitation
10
 
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
11
 
// and/or sell copies of the Software, and to permit persons to whom the
12
 
// Software is furnished to do so, subject to the following conditions:
13
 
//
14
 
// The above copyright notice and this permission notice shall be included in
15
 
// all copies or substantial portions of the Software.
16
 
//
17
 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
 
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
 
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20
 
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
 
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
 
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23
 
// DEALINGS IN THE SOFTWARE.
24
 
 
25
 
// $Id: Toolbar.hh 4062 2005-06-23 03:07:25Z fluxgen $
26
 
 
27
 
#ifndef  TOOLBAR_HH
28
 
#define  TOOLBAR_HH
29
 
 
30
 
#include "ToolbarTheme.hh"
31
 
#include "LayerMenu.hh"
32
 
#include "ToolFactory.hh"
33
 
#include "ToolTheme.hh"
34
 
#include "fluxbox.hh"
35
 
 
36
 
#include "FbTk/Timer.hh"
37
 
#include "FbTk/Resource.hh"
38
 
#include "FbTk/Observer.hh"
39
 
#include "FbTk/XLayer.hh"
40
 
#include "FbTk/XLayerItem.hh"
41
 
#include "FbTk/EventHandler.hh"
42
 
#include "FbTk/FbWindow.hh"
43
 
 
44
 
#include <memory>
45
 
 
46
 
class BScreen;
47
 
class Strut;
48
 
class FbMenu;
49
 
class Shape;
50
 
class ToolbarItem;
51
 
 
52
 
namespace FbTk {
53
 
class ImageControl;
54
 
}
55
 
 
56
 
///     The toolbar.
57
 
/// Handles iconbar, workspace name view and clock view
58
 
class Toolbar: public FbTk::EventHandler, public FbTk::Observer, public LayerObject {
59
 
public:
60
 
       
61
 
    /// Toolbar placement on the screen
62
 
    enum Placement{ 
63
 
        // top and bottom placement
64
 
        TOPLEFT = 1, BOTTOMLEFT, TOPCENTER,
65
 
        BOTTOMCENTER, TOPRIGHT, BOTTOMRIGHT,
66
 
        // left and right placement
67
 
        LEFTCENTER, LEFTBOTTOM, LEFTTOP,
68
 
        RIGHTCENTER, RIGHTBOTTOM, RIGHTTOP        
69
 
    };
70
 
 
71
 
    /// Create a toolbar on the screen with specific width
72
 
    Toolbar(BScreen &screen, FbTk::XLayer &layer, size_t width = 200);
73
 
 
74
 
    virtual ~Toolbar();
75
 
 
76
 
    void raise();
77
 
    void lower();
78
 
    void updateVisibleState();
79
 
    void toggleHidden();
80
 
 
81
 
 
82
 
    void moveToLayer(int layernum);
83
 
 
84
 
    void saveOnHead(int head);
85
 
 
86
 
    /**
87
 
       @name eventhandlers
88
 
    */
89
 
    //@{
90
 
    void buttonPressEvent(XButtonEvent &be);
91
 
    void buttonReleaseEvent(XButtonEvent &be);
92
 
    void enterNotifyEvent(XCrossingEvent &ce);
93
 
    void leaveNotifyEvent(XCrossingEvent &ce);
94
 
    void exposeEvent(XExposeEvent &ee);
95
 
    void handleEvent(XEvent &event);
96
 
    //@}
97
 
        
98
 
    /// enter edit mode on workspace label
99
 
    void edit();
100
 
    void reconfigure();
101
 
    void setPlacement(Placement where);
102
 
 
103
 
    void update(FbTk::Subject *subj);
104
 
 
105
 
    int layerNumber() const { return const_cast<FbTk::XLayerItem &>(m_layeritem).getLayerNum(); }
106
 
 
107
 
    inline const FbTk::Menu &menu() const { return m_toolbarmenu; }
108
 
    inline FbTk::Menu &menu() { return m_toolbarmenu; }
109
 
    inline FbTk::Menu &placementMenu() { return m_placementmenu; }
110
 
    inline const FbTk::Menu &placementMenu() const { return m_placementmenu; }
111
 
 
112
 
    inline FbTk::Menu &layerMenu() { return m_layermenu; }
113
 
    inline const FbTk::Menu &layerMenu() const { return m_layermenu; }
114
 
 
115
 
    /// are we hidden?
116
 
    inline bool isHidden() const { return m_hidden; }
117
 
    /// do we auto hide the toolbar?
118
 
    inline bool doAutoHide() const { return *m_rc_auto_hide; }
119
 
    /// @return X window of the toolbar
120
 
    inline const FbTk::FbWindow &window() const { return frame.window; }
121
 
    inline BScreen &screen() { return m_screen; }
122
 
    inline const BScreen &screen() const { return m_screen; }
123
 
    inline unsigned int width() const { return frame.window.width(); }
124
 
    inline unsigned int height() const { return frame.window.height(); }
125
 
    inline unsigned int exposedHeight() const { return doAutoHide() ? frame.bevel_w : frame.height; }
126
 
    inline int x() const { return isHidden() ? frame.x_hidden : frame.x; }
127
 
    inline int y() const { return isHidden() ? frame.y_hidden : frame.y; }
128
 
    inline Placement placement() const { return *m_rc_placement; }
129
 
    /// @return pointer to iconbar if it got one, else 0
130
 
    inline const ToolbarTheme &theme() const { return m_theme; }
131
 
    inline ToolbarTheme &theme() { return m_theme; }
132
 
    bool isVertical() const;
133
 
 
134
 
    inline int getOnHead() const { return *m_rc_on_head; }
135
 
 
136
 
    inline unsigned char alpha() const { return *m_rc_alpha; }
137
 
private:
138
 
    void rearrangeItems();
139
 
    void deleteItems();
140
 
 
141
 
    void updateIconbarGraphics();
142
 
    void setupMenus();
143
 
    void clearStrut();
144
 
    void updateStrut();
145
 
    void updateAlpha();
146
 
 
147
 
    bool m_hidden;       ///< hidden state
148
 
 
149
 
    /// Toolbar frame
150
 
    struct Frame {
151
 
        Frame(FbTk::EventHandler &evh, int screen_num);
152
 
        ~Frame();
153
 
 
154
 
        FbTk::FbWindow window;
155
 
 
156
 
        int x, y, x_hidden, y_hidden, grab_x, grab_y;
157
 
        unsigned int width, height, bevel_w;
158
 
    } frame;
159
 
    // background pixmap
160
 
    Pixmap m_window_pm;
161
 
 
162
 
    BScreen &m_screen; ///< screen connection
163
 
 
164
 
    FbTk::Timer m_hide_timer; ///< timer to for auto hide toolbar
165
 
 
166
 
    FbTk::XLayerItem m_layeritem; ///< layer item, must be declared before layermenu
167
 
    LayerMenu m_layermenu;
168
 
    FbMenu m_placementmenu, m_toolbarmenu;
169
 
 
170
 
 
171
 
    // themes
172
 
    ToolbarTheme m_theme;
173
 
    
174
 
 
175
 
    typedef std::list<ToolbarItem *> ItemList;
176
 
    ItemList m_item_list;
177
 
 
178
 
    ToolFactory m_tool_factory;
179
 
 
180
 
    Strut *m_strut; ///< created and destroyed by BScreen
181
 
 
182
 
    // resources
183
 
    FbTk::Resource<bool> m_rc_auto_hide, m_rc_maximize_over, m_rc_visible;
184
 
    FbTk::Resource<int> m_rc_width_percent;
185
 
    FbTk::Resource<int> m_rc_alpha;
186
 
    FbTk::Resource<Fluxbox::Layer> m_rc_layernum;
187
 
    FbTk::Resource<int> m_rc_on_head;
188
 
    FbTk::Resource<Placement> m_rc_placement;
189
 
    FbTk::Resource<int> m_rc_height;
190
 
    FbTk::Resource<std::string> m_rc_tools;
191
 
    std::auto_ptr<Shape> m_shape;
192
 
    typedef std::list<std::string> StringList;
193
 
    StringList m_tools;
194
 
 
195
 
    bool m_resize_lock; ///< to lock rearrangeItems or not
196
 
};
197
 
 
198
 
 
199
 
#endif // TOOLBAR_HH