* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef THEME_HPP
#include "../commands/cmd_generic.hpp"
#include "../utils/bezier.hpp"
#include "../utils/variable.hpp"
+#include "../utils/position.hpp"
#include "../controls/ctrl_generic.hpp"
#include <string>
#include <list>
/// Class storing the data of the current theme
class Theme: public SkinObject
{
- private:
- friend class Builder;
- friend class Interpreter;
- public:
- Theme( intf_thread_t *pIntf ): SkinObject( pIntf ),
- m_windowManager( getIntf() ) {}
- virtual ~Theme();
+private:
+ friend class Builder;
+ friend class Interpreter;
+public:
+ Theme( intf_thread_t *pIntf ): SkinObject( pIntf ),
+ m_windowManager( getIntf() ) { }
+ virtual ~Theme();
+
+ void loadConfig();
+ int readConfig();
+ void saveConfig();
+ void applyConfig();
- void loadConfig();
- void saveConfig();
+ GenericBitmap *getBitmapById( const string &id ) const;
+ GenericFont *getFontById( const string &id ) const;
- GenericBitmap *getBitmapById( const string &id );
- GenericFont *getFontById( const string &id );
- Popup *getPopupById( const string &id );
- TopWindow *getWindowById( const string &id );
- GenericLayout *getLayoutById( const string &id );
- CtrlGeneric *getControlById( const string &id );
+# define ObjByID( var ) ( const string &id ) const \
+ { return var.find_object( id ); }
+ Popup *getPopupById ObjByID( m_popups )
+ TopWindow *getWindowById ObjByID( m_windows )
+ GenericLayout *getLayoutById ObjByID( m_layouts )
+ CtrlGeneric *getControlById ObjByID( m_controls )
+ Position *getPositionById ObjByID( m_positions )
+# undef ObjById
- WindowManager &getWindowManager() { return m_windowManager; }
+ WindowManager &getWindowManager() { return m_windowManager; }
+private:
+ template<class T> class IDmap: public std::map<string, T> {
private:
- /// Store the bitmaps by ID
- map<string, GenericBitmapPtr> m_bitmaps;
- /// Store the fonts by ID
- map<string, GenericFontPtr> m_fonts;
- /// Store the popups by ID
- map<string, PopupPtr> m_popups;
- /// Store the windows by ID
- map<string, TopWindowPtr> m_windows;
- /// Store the layouts by ID
- map<string, GenericLayoutPtr> m_layouts;
- /// Store the controls by ID
- map<string, CtrlGenericPtr> m_controls;
- /// Store the commands
- list<CmdGenericPtr> m_commands;
- /// Store the Bezier curves
- list<BezierPtr> m_curves;
- /// Store the variables
- list<VariablePtr> m_vars;
+ typedef typename std::map<string, T> parent;
+ public:
+ typename T::pointer find_object(const string &id) const
+ {
+ typename parent::const_iterator it = parent::find( id );
+ return it!=parent::end() ? it->second.get() : NULL;
+ }
+ typename T::pointer find_first_object(const string &id) const;
+ };
+
+ struct save_t {
+ TopWindow* win;
+ GenericLayout* layout;
+ int x;
+ int y;
+ int width;
+ int height;
+ int visible;
+ };
+
+ /// Store the bitmaps by ID
+ IDmap<GenericBitmapPtr> m_bitmaps;
+ /// Store the fonts by ID
+ IDmap<GenericFontPtr> m_fonts;
+ /// Store the popups by ID
+ IDmap<PopupPtr> m_popups;
+ /// Store the windows by ID
+ IDmap<TopWindowPtr> m_windows;
+ /// Store the layouts by ID
+ IDmap<GenericLayoutPtr> m_layouts;
+ /// Store the controls by ID
+ IDmap<CtrlGenericPtr> m_controls;
+ /// Store the panel positions by ID
+ IDmap<PositionPtr> m_positions;
+ /// Store the commands
+ list<CmdGenericPtr> m_commands;
+ /// Store the Bezier curves
+ list<BezierPtr> m_curves;
+ /// Store the variables
+ list<VariablePtr> m_vars;
+ /// List saved windows/layouts
+ list<save_t> m_saved;
- WindowManager m_windowManager;
+ WindowManager m_windowManager;
};