1/*
2 * Copyright (c) 2001-2005, Haiku, Inc.
3 * Distributed under the terms of the MIT license.
4 *
5 * Author:
6 * DarkWyrm <bpmagic@columbus.rr.com>
7 * Clemens Zeidler <haiku@clemens-zeidler.de>
8 * Joseph Groover <looncraz@satx.rr.com>
9 */
10#ifndef DECOR_MANAGER_H
11#define DECOR_MANAGER_H
12
13
14#include <image.h>
15#include <String.h>
16#include <Locker.h>
17#include <ObjectList.h>
18#include <Entry.h>
19#include <DecorInfo.h>
20
21#include "Decorator.h"
22
23class Desktop;
24class DesktopListener;
25class DrawingEngine;
26class Window;
27class WindowBehaviour;
28
29
30typedef BObjectList<DesktopListener> DesktopListenerList;
31
32
33// special name to test for use of non-fs-tied default decorator
34// this just keeps things clean and simple is all
35
36class DecorAddOn {
37public:
38 DecorAddOn(image_id id, const char* name);
39 virtual ~DecorAddOn();
40
41 virtual status_t InitCheck() const;
42
43 image_id ImageID() const { return fImageID; }
44
45 Decorator* AllocateDecorator(Desktop* desktop,
46 DrawingEngine* engine, BRect rect,
47 const char* title, window_look look,
48 uint32 flags);
49
50 virtual WindowBehaviour* AllocateWindowBehaviour(Window* window);
51
52 virtual const DesktopListenerList& GetDesktopListeners();
53
54protected:
55 virtual Decorator* _AllocateDecorator(DesktopSettings& settings,
56 BRect rect, Desktop* desktop);
57
58 DesktopListenerList fDesktopListeners;
59
60private:
61 image_id fImageID;
62 BString fName;
63};
64
65
66class DecorManager {
67public:
68 DecorManager();
69 ~DecorManager();
70
71 Decorator* AllocateDecorator(Window *window);
72 WindowBehaviour* AllocateWindowBehaviour(Window *window);
73 void CleanupForWindow(Window *window);
74
75 status_t PreviewDecorator(BString path, Window *window);
76
77 const DesktopListenerList& GetDesktopListeners();
78
79 BString GetCurrentDecorator() const;
80 status_t SetDecorator(BString path, Desktop *desktop);
81
82private:
83 DecorAddOn* _LoadDecor(BString path, status_t &error);
84 bool _LoadSettingsFromDisk();
85 bool _SaveSettingsToDisk();
86
87private:
88 DecorAddOn fDefaultDecor;
89 DecorAddOn* fCurrentDecor;
90 DecorAddOn* fPreviewDecor;
91
92 Window* fPreviewWindow;
93 BString fCurrentDecorPath;
94};
95
96extern DecorManager gDecorManager;
97
98#endif /* DECOR_MANAGER_H */