1 /*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6 #include "SubWindow.h"
7
8 #include <AutoLocker.h>
9
10 #include "SubWindowManager.h"
11
12
13 // #pragma mark - SubWindowKey
14
15
~SubWindowKey()16 SubWindowKey::~SubWindowKey()
17 {
18 }
19
20
21 // #pragma mark - ObjectSubWindowKey
22
23
ObjectSubWindowKey(void * object)24 ObjectSubWindowKey::ObjectSubWindowKey(void* object)
25 :
26 fObject(object)
27 {
28 }
29
30
31 bool
Equals(const SubWindowKey * other) const32 ObjectSubWindowKey::Equals(const SubWindowKey* other) const
33 {
34 if (this == other)
35 return true;
36
37 const ObjectSubWindowKey* key
38 = dynamic_cast<const ObjectSubWindowKey*>(other);
39 return key != NULL && fObject == key->fObject;
40 }
41
42
43 size_t
HashCode() const44 ObjectSubWindowKey::HashCode() const
45 {
46 return (size_t)(addr_t)fObject;
47 }
48
49
50 // #pragma mark - SubWindow
51
52
SubWindow(SubWindowManager * manager,BRect frame,const char * title,window_type type,uint32 flags,uint32 workspace)53 SubWindow::SubWindow(SubWindowManager* manager, BRect frame, const char* title,
54 window_type type, uint32 flags, uint32 workspace)
55 :
56 BWindow(frame, title, type, flags, workspace),
57 fSubWindowManager(manager),
58 fSubWindowKey(NULL)
59
60 {
61 fSubWindowManager->AcquireReference();
62 }
63
64
~SubWindow()65 SubWindow::~SubWindow()
66 {
67 RemoveFromSubWindowManager();
68 fSubWindowManager->ReleaseReference();
69 }
70
71
72 bool
AddToSubWindowManager(SubWindowKey * key)73 SubWindow::AddToSubWindowManager(SubWindowKey* key)
74 {
75 AutoLocker<SubWindowManager> locker(fSubWindowManager);
76
77 fSubWindowKey = key;
78
79 if (!fSubWindowManager->AddSubWindow(this)) {
80 fSubWindowKey = NULL;
81 return false;
82 }
83
84 return true;
85 }
86
87
88 bool
RemoveFromSubWindowManager()89 SubWindow::RemoveFromSubWindowManager()
90 {
91 if (fSubWindowKey == NULL)
92 return false;
93
94 fSubWindowManager->RemoveSubWindow(this);
95 delete fSubWindowKey;
96 fSubWindowKey = NULL;
97 return true;
98 }
99