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
|
// Workspace.hh for FbPager
// Copyright (c) 2003 Henrik Kinnunen (fluxgen 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 FBPAGER_WORKSPACE_HH
#define FBPAGER_WORKSPACE_HH
#include "FbTk/FbWindow.hh"
#include "FbTk/FbPixmap.hh"
#include "FbTk/NotCopyable.hh"
#include "FbTk/EventHandler.hh"
#include "FbTk/Color.hh"
#include "ClientWindow.hh"
#include <string>
#include <map>
#include <memory>
namespace FbPager {
/**
Workspace window for fbpager
*/
class Workspace:private FbTk::NotCopyable {
public:
/// create a workspace with specified name, size, parent and eventhandler
Workspace(FbTk::EventHandler &evh,
FbTk::FbWindow &parent, unsigned int width, unsigned int height,
const FbTk::Color &focused_win_color,
const FbTk::Color &wincolor,
const FbTk::Color &border_color,
const FbTk::Color &background_color,
const char *name = 0,
const bool use_pixmap = true,
const int window_border_width = 1);
/// destructor
~Workspace();
/// set new name for this workspace
void setName(const char *name) { m_name = (name ? name : ""); }
/// add a window to workspace, and associate a FbWindow to it
void add(Window win);
void resize(unsigned int width, unsigned int height);
/// remove a window from workspace
void remove(Window win);
/// remove all windows from this workspace
void removeAll();
void shadeWindow(Window win);
void unshadeWindow(Window win);
void iconifyWindow(Window win);
void deiconifyWindow(Window win);
void raiseWindow(Window win);
void lowerWindow(Window win);
void updateGeometry(Window win);
void updateFocusedWindow();
void setWindowColor(const std::string &focused,
const std::string &unfocused,
const std::string &bordercolor_str);
void setAlpha(unsigned char alpha);
void clearWindows();
ClientWindow findClient(const FbTk::FbWindow &win) const;
/**
@brief Find associated FbWindow to win
@return 0 on failure
*/
FbTk::FbWindow *find(Window win);
/// find associated FbWindow to win
const FbTk::FbWindow *find(Window win) const;
/// @return workspace name
const std::string &name() const { return m_name; }
/// @return the workspace's FbWindow
const FbTk::FbWindow &window() const { return m_window; }
/// @return the workspace's FbWindow
FbTk::FbWindow &window() { return m_window; }
static void setFocusedWindow(Window win) { s_focused_window = win; }
private:
void updateBackground(Window win, const FbTk::Color& bg_color);
std::string m_name; ///< name of this workspace
FbTk::FbWindow m_window; ///< FbWindow of this workspace
FbTk::EventHandler &m_eventhandler;
typedef std::map<Window, FbTk::FbWindow*> WindowList;
WindowList m_windowlist; ///< holds a set of Window to FbWindow association
FbTk::Color m_window_color, m_focused_window_color, m_window_bordercolor;
FbTk::FbWindow *m_focused_window;
static Window s_focused_window;
bool m_use_pixmap;
int m_window_border_width;
};
}; // end namespace FbPager
#endif // FBPAGER_WORKSPACE_HH
|