// 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 #include #include 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 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