xref: /haiku/src/apps/debuganalyzer/gui/SubWindow.cpp (revision d374a27286b8a52974a97dba0d5966ea026a665d)
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 
16 SubWindowKey::~SubWindowKey()
17 {
18 }
19 
20 
21 // #pragma mark - ObjectSubWindowKey
22 
23 
24 ObjectSubWindowKey::ObjectSubWindowKey(void* object)
25 	:
26 	fObject(object)
27 {
28 }
29 
30 
31 bool
32 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
44 ObjectSubWindowKey::HashCode() const
45 {
46 	return (size_t)(addr_t)fObject;
47 }
48 
49 
50 // #pragma mark - SubWindow
51 
52 
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 
65 SubWindow::~SubWindow()
66 {
67 	RemoveFromSubWindowManager();
68 	fSubWindowManager->ReleaseReference();
69 }
70 
71 
72 bool
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
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