xref: /haiku/src/apps/powerstatus/ExtendedInfoWindow.cpp (revision 10074df18f9ae90f1d0a8fa93cf98f4e9ddeda0d)
16aed176cSClemens Zeidler /*
2d1929affSKacper Kasper  * Copyright 2009-2017, Haiku, Inc. All Rights Reserved.
36aed176cSClemens Zeidler  * Distributed under the terms of the MIT License.
46aed176cSClemens Zeidler  *
56aed176cSClemens Zeidler  * Authors:
66aed176cSClemens Zeidler  *		Clemens Zeidler, haiku@Clemens-Zeidler.de
7d1929affSKacper Kasper  *		Kacper Kasper, kacperkasper@gmail.com
86aed176cSClemens Zeidler  */
96aed176cSClemens Zeidler 
10bd767f5aSAxel Dörfler 
116aed176cSClemens Zeidler #include "ExtendedInfoWindow.h"
126aed176cSClemens Zeidler 
13830758adSKacper Kasper #include <ControlLook.h>
143bd54e05SAdrien Destugues #include <Catalog.h>
156aed176cSClemens Zeidler #include <GroupView.h>
16830758adSKacper Kasper #include <LayoutBuilder.h>
176aed176cSClemens Zeidler #include <SpaceLayoutItem.h>
18830758adSKacper Kasper #include <TabView.h>
19830758adSKacper Kasper 
20830758adSKacper Kasper 
21830758adSKacper Kasper #include <algorithm>
226aed176cSClemens Zeidler 
236aed176cSClemens Zeidler 
24546208a5SOliver Tappe #undef B_TRANSLATION_CONTEXT
25546208a5SOliver Tappe #define B_TRANSLATION_CONTEXT "PowerStatus"
263bd54e05SAdrien Destugues 
273bd54e05SAdrien Destugues 
28d1929affSKacper Kasper const size_t kLinesCount = 16;
29e391ec67SClemens Zeidler 
30e391ec67SClemens Zeidler 
31bd767f5aSAxel Dörfler //	#pragma mark -
32bd767f5aSAxel Dörfler 
33e391ec67SClemens Zeidler 
34e391ec67SClemens Zeidler BatteryInfoView::BatteryInfoView()
356aed176cSClemens Zeidler 	:
36d1929affSKacper Kasper 	BView("battery info view", B_AUTO_UPDATE_SIZE_LIMITS)
376aed176cSClemens Zeidler {
38fa19dd44Slooncraz 	SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
39d1929affSKacper Kasper 
40830758adSKacper Kasper 	BGroupLayout* layout = new BGroupLayout(B_VERTICAL, 0);
41830758adSKacper Kasper 	layout->SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING,
42830758adSKacper Kasper 		0, B_USE_DEFAULT_SPACING);
43830758adSKacper Kasper 	SetLayout(layout);
44d1929affSKacper Kasper 
45d1929affSKacper Kasper 	for (size_t i = 0; i < kLinesCount; i++) {
46d1929affSKacper Kasper 		BStringView* view = new BStringView("info", "");
47d1929affSKacper Kasper 		AddChild(view);
48d1929affSKacper Kasper 		fStringList.AddItem(view);
49d1929affSKacper Kasper 	}
50d1929affSKacper Kasper 	fStringList.ItemAt(0)->SetFont(be_bold_font);
51d1929affSKacper Kasper 	AddChild(BSpaceLayoutItem::CreateGlue());
526aed176cSClemens Zeidler }
536aed176cSClemens Zeidler 
546aed176cSClemens Zeidler 
55e391ec67SClemens Zeidler BatteryInfoView::~BatteryInfoView()
56e391ec67SClemens Zeidler {
57d1929affSKacper Kasper 	for (int32 i = 0; i < fStringList.CountItems(); i++)
58d1929affSKacper Kasper 		delete fStringList.ItemAt(i);
59e391ec67SClemens Zeidler }
60e391ec67SClemens Zeidler 
61e391ec67SClemens Zeidler 
626aed176cSClemens Zeidler void
636aed176cSClemens Zeidler BatteryInfoView::Update(battery_info& info, acpi_extended_battery_info& extInfo)
646aed176cSClemens Zeidler {
656aed176cSClemens Zeidler 	fBatteryInfo = info;
666aed176cSClemens Zeidler 	fBatteryExtendedInfo = extInfo;
67e391ec67SClemens Zeidler 
68d1929affSKacper Kasper 	for (size_t i = 0; i < kLinesCount; i++) {
69d1929affSKacper Kasper 		fStringList.ItemAt(i)->SetText(_GetTextForLine(i));
706aed176cSClemens Zeidler 	}
71e391ec67SClemens Zeidler }
72e391ec67SClemens Zeidler 
73e391ec67SClemens Zeidler 
748b24b02fSClemens Zeidler void
758b24b02fSClemens Zeidler BatteryInfoView::AttachedToWindow()
768b24b02fSClemens Zeidler {
773e1f071cSClemens Zeidler 	Window()->CenterOnScreen();
788b24b02fSClemens Zeidler }
798b24b02fSClemens Zeidler 
808b24b02fSClemens Zeidler 
81d1929affSKacper Kasper BString
82d1929affSKacper Kasper BatteryInfoView::_GetTextForLine(size_t line)
83e391ec67SClemens Zeidler {
846aed176cSClemens Zeidler 	BString powerUnit;
856aed176cSClemens Zeidler 	BString rateUnit;
866aed176cSClemens Zeidler 	switch (fBatteryExtendedInfo.power_unit) {
876aed176cSClemens Zeidler 		case 0:
883bd54e05SAdrien Destugues 			powerUnit = B_TRANSLATE(" mWh");
893bd54e05SAdrien Destugues 			rateUnit = B_TRANSLATE(" mW");
906aed176cSClemens Zeidler 			break;
916aed176cSClemens Zeidler 
926aed176cSClemens Zeidler 		case 1:
933bd54e05SAdrien Destugues 			powerUnit = B_TRANSLATE(" mAh");
943bd54e05SAdrien Destugues 			rateUnit = B_TRANSLATE(" mA");
956aed176cSClemens Zeidler 			break;
966aed176cSClemens Zeidler 	}
976aed176cSClemens Zeidler 
98d1929affSKacper Kasper 	BString string;
99d1929affSKacper Kasper 	switch (line) {
100d1929affSKacper Kasper 		case 0: {
101a11e2f43SAxel Dörfler 			if ((fBatteryInfo.state & BATTERY_CHARGING) != 0)
102d1929affSKacper Kasper 				string = B_TRANSLATE("Battery charging");
103a11e2f43SAxel Dörfler 			else if ((fBatteryInfo.state & BATTERY_DISCHARGING) != 0)
104d1929affSKacper Kasper 				string = B_TRANSLATE("Battery discharging");
105a11e2f43SAxel Dörfler 			else if ((fBatteryInfo.state & BATTERY_CRITICAL_STATE) != 0
106829200a0SAlexander von Gluck IV 				&& fBatteryExtendedInfo.model_number[0] == '\0'
107829200a0SAlexander von Gluck IV 				&& fBatteryExtendedInfo.serial_number[0] == '\0'
108829200a0SAlexander von Gluck IV 				&& fBatteryExtendedInfo.type[0] == '\0'
109829200a0SAlexander von Gluck IV 				&& fBatteryExtendedInfo.oem_info[0] == '\0')
110d1929affSKacper Kasper 				string = B_TRANSLATE("Empty battery slot");
111a11e2f43SAxel Dörfler 			else if ((fBatteryInfo.state & BATTERY_CRITICAL_STATE) != 0)
112d1929affSKacper Kasper 				string = B_TRANSLATE("Damaged battery");
1136aed176cSClemens Zeidler 			else
114d1929affSKacper Kasper 				string = B_TRANSLATE("Battery unused");
115d1929affSKacper Kasper 			break;
116d1929affSKacper Kasper 		}
117d1929affSKacper Kasper 		case 1:
118d1929affSKacper Kasper 			string = B_TRANSLATE("Capacity: ");
119d1929affSKacper Kasper 			string << fBatteryInfo.capacity;
120d1929affSKacper Kasper 			string << powerUnit;
121d1929affSKacper Kasper 			break;
122d1929affSKacper Kasper 		case 2:
123d1929affSKacper Kasper 			string = B_TRANSLATE("Last full charge: ");
124d1929affSKacper Kasper 			string << fBatteryInfo.full_capacity;
125d1929affSKacper Kasper 			string << powerUnit;
126d1929affSKacper Kasper 			break;
127d1929affSKacper Kasper 		case 3:
128d1929affSKacper Kasper 			string = B_TRANSLATE("Current rate: ");
129d1929affSKacper Kasper 			string << fBatteryInfo.current_rate;
130d1929affSKacper Kasper 			string << rateUnit;
131d1929affSKacper Kasper 			break;
132d1929affSKacper Kasper 		// case 4 missed intentionally
133d1929affSKacper Kasper 		case 5:
134d1929affSKacper Kasper 			string = B_TRANSLATE("Design capacity: ");
135d1929affSKacper Kasper 			string << fBatteryExtendedInfo.design_capacity;
136d1929affSKacper Kasper 			string << powerUnit;
137d1929affSKacper Kasper 			break;
138d1929affSKacper Kasper 		case 6:
139d1929affSKacper Kasper 			string = B_TRANSLATE("Technology: ");
140b636a0ecSClemens Zeidler 			if (fBatteryExtendedInfo.technology == 0)
141d1929affSKacper Kasper 				string << B_TRANSLATE("non-rechargeable");
142b636a0ecSClemens Zeidler 			else if (fBatteryExtendedInfo.technology == 1)
143d1929affSKacper Kasper 				string << B_TRANSLATE("rechargeable");
144b636a0ecSClemens Zeidler 			else
145d1929affSKacper Kasper 				string << "?";
146d1929affSKacper Kasper 			break;
147d1929affSKacper Kasper 		case 7:
148d1929affSKacper Kasper 			string = B_TRANSLATE("Design voltage: ");
149d1929affSKacper Kasper 			string << fBatteryExtendedInfo.design_voltage;
150d1929affSKacper Kasper 			string << B_TRANSLATE(" mV");
151d1929affSKacper Kasper 			break;
152d1929affSKacper Kasper 		case 8:
153d1929affSKacper Kasper 			string = B_TRANSLATE("Design capacity warning: ");
154d1929affSKacper Kasper 			string << fBatteryExtendedInfo.design_capacity_warning;
155d1929affSKacper Kasper 			string << powerUnit;
156d1929affSKacper Kasper 			break;
157d1929affSKacper Kasper 		case 9:
158d1929affSKacper Kasper 			string = B_TRANSLATE("Design capacity low warning: ");
159d1929affSKacper Kasper 			string << fBatteryExtendedInfo.design_capacity_low;
160d1929affSKacper Kasper 			string << powerUnit;
161d1929affSKacper Kasper 			break;
162d1929affSKacper Kasper 		case 10:
163d1929affSKacper Kasper 			string = B_TRANSLATE("Capacity granularity 1: ");
164d1929affSKacper Kasper 			string << fBatteryExtendedInfo.capacity_granularity_1;
165d1929affSKacper Kasper 			string << powerUnit;
166d1929affSKacper Kasper 			break;
167d1929affSKacper Kasper 		case 11:
168d1929affSKacper Kasper 			string = B_TRANSLATE("Capacity granularity 2: ");
169d1929affSKacper Kasper 			string << fBatteryExtendedInfo.capacity_granularity_2;
170d1929affSKacper Kasper 			string << powerUnit;
171d1929affSKacper Kasper 			break;
172d1929affSKacper Kasper 		case 12:
173d1929affSKacper Kasper 			string = B_TRANSLATE("Model number: ");
174d1929affSKacper Kasper 			string << fBatteryExtendedInfo.model_number;
175d1929affSKacper Kasper 			break;
176d1929affSKacper Kasper 		case 13:
177d1929affSKacper Kasper 			string = B_TRANSLATE("Serial number: ");
178d1929affSKacper Kasper 			string << fBatteryExtendedInfo.serial_number;
179d1929affSKacper Kasper 			break;
180d1929affSKacper Kasper 		case 14:
181d1929affSKacper Kasper 			string = B_TRANSLATE("Type: ");
182d1929affSKacper Kasper 			string += fBatteryExtendedInfo.type;
183d1929affSKacper Kasper 			break;
184d1929affSKacper Kasper 		case 15:
185d1929affSKacper Kasper 			string = B_TRANSLATE("OEM info: ");
186d1929affSKacper Kasper 			string += fBatteryExtendedInfo.oem_info;
187d1929affSKacper Kasper 			break;
188d1929affSKacper Kasper 		default:
189d1929affSKacper Kasper 			string = "";
190d1929affSKacper Kasper 			break;
191e391ec67SClemens Zeidler 	}
192d1929affSKacper Kasper 	return string;
1936aed176cSClemens Zeidler }
1946aed176cSClemens Zeidler 
1956aed176cSClemens Zeidler 
196bd767f5aSAxel Dörfler //	#pragma mark -
197bd767f5aSAxel Dörfler 
198bd767f5aSAxel Dörfler 
199830758adSKacper Kasper BatteryTab::BatteryTab(BatteryInfoView* target,
200830758adSKacper Kasper 		ExtPowerStatusView* view)
201830758adSKacper Kasper 	:
202830758adSKacper Kasper 	fBatteryView(view)
203830758adSKacper Kasper {
204830758adSKacper Kasper }
205830758adSKacper Kasper 
206830758adSKacper Kasper 
207830758adSKacper Kasper BatteryTab::~BatteryTab()
208830758adSKacper Kasper {
209830758adSKacper Kasper }
210830758adSKacper Kasper 
211830758adSKacper Kasper 
212830758adSKacper Kasper void
213830758adSKacper Kasper BatteryTab::Select(BView* owner)
214830758adSKacper Kasper {
215830758adSKacper Kasper 	BTab::Select(owner);
216830758adSKacper Kasper 	fBatteryView->Select();
217830758adSKacper Kasper }
218830758adSKacper Kasper 
219830758adSKacper Kasper void
220830758adSKacper Kasper BatteryTab::DrawFocusMark(BView* owner, BRect frame)
221830758adSKacper Kasper {
222830758adSKacper Kasper 	float vertOffset = IsSelected() ? 3 : 2;
223830758adSKacper Kasper 	float horzOffset = IsSelected() ? 2 : 4;
224830758adSKacper Kasper 	float width = frame.Width() - horzOffset * 2;
225830758adSKacper Kasper 	BPoint pt1((frame.left + frame.right - width) / 2.0 + horzOffset,
226830758adSKacper Kasper 		frame.bottom - vertOffset);
227830758adSKacper Kasper 	BPoint pt2((frame.left + frame.right + width) / 2.0,
228830758adSKacper Kasper 		frame.bottom - vertOffset);
229830758adSKacper Kasper 	owner->SetHighUIColor(B_KEYBOARD_NAVIGATION_COLOR);
230830758adSKacper Kasper 	owner->StrokeLine(pt1, pt2);
231830758adSKacper Kasper }
232830758adSKacper Kasper 
233830758adSKacper Kasper 
234830758adSKacper Kasper void
235830758adSKacper Kasper BatteryTab::DrawLabel(BView* owner, BRect frame)
236830758adSKacper Kasper {
237830758adSKacper Kasper 	BRect rect = frame;
238830758adSKacper Kasper 	float size = std::min(rect.Width(), rect.Height());
239830758adSKacper Kasper 	rect.right = rect.left + size;
240830758adSKacper Kasper 	rect.bottom = rect.top + size;
241830758adSKacper Kasper 	if (frame.Width() > rect.Height()) {
242830758adSKacper Kasper 		rect.OffsetBy((frame.Width() - size) / 2.0f, 0.0f);
243830758adSKacper Kasper 	} else {
244830758adSKacper Kasper 		rect.OffsetBy(0.0f, (frame.Height() - size) / 2.0f);
245830758adSKacper Kasper 	}
246830758adSKacper Kasper 	fBatteryView->DrawTo(owner, rect);
247830758adSKacper Kasper }
248830758adSKacper Kasper 
249830758adSKacper Kasper 
250830758adSKacper Kasper BatteryTabView::BatteryTabView(const char* name)
251830758adSKacper Kasper 	:
252830758adSKacper Kasper 	BTabView(name)
253830758adSKacper Kasper {
254830758adSKacper Kasper }
255830758adSKacper Kasper 
256830758adSKacper Kasper 
257830758adSKacper Kasper BatteryTabView::~BatteryTabView()
258830758adSKacper Kasper {
259830758adSKacper Kasper }
260830758adSKacper Kasper 
261830758adSKacper Kasper 
262830758adSKacper Kasper BRect
263830758adSKacper Kasper BatteryTabView::TabFrame(int32 index) const
264830758adSKacper Kasper {
265830758adSKacper Kasper 	BRect bounds(Bounds());
266830758adSKacper Kasper 	float width = TabHeight();
267830758adSKacper Kasper 	float height = TabHeight();
268830758adSKacper Kasper 	float offset = BControlLook::ComposeSpacing(B_USE_WINDOW_SPACING);
269830758adSKacper Kasper 	switch (TabSide()) {
270830758adSKacper Kasper 		case kTopSide:
271830758adSKacper Kasper 			return BRect(offset + index * width, 0.0f,
272830758adSKacper Kasper 				offset + index * width + width, height);
273830758adSKacper Kasper 		case kBottomSide:
274830758adSKacper Kasper 			return BRect(offset + index * width, bounds.bottom - height,
275830758adSKacper Kasper 				offset + index * width + width, bounds.bottom);
276830758adSKacper Kasper 		case kLeftSide:
277830758adSKacper Kasper 			return BRect(0.0f, offset + index * width, height,
278830758adSKacper Kasper 				offset + index * width + width);
279830758adSKacper Kasper 		case kRightSide:
280830758adSKacper Kasper 			return BRect(bounds.right - height, offset + index * width,
281830758adSKacper Kasper 				bounds.right, offset + index * width + width);
282830758adSKacper Kasper 		default:
283830758adSKacper Kasper 			return BRect();
284830758adSKacper Kasper 	}
285830758adSKacper Kasper }
286830758adSKacper Kasper 
287830758adSKacper Kasper 
2886aed176cSClemens Zeidler ExtPowerStatusView::ExtPowerStatusView(PowerStatusDriverInterface* interface,
289bd767f5aSAxel Dörfler 		BRect frame, int32 resizingMode, int batteryID,
290830758adSKacper Kasper 		BatteryInfoView* batteryInfoView, ExtendedInfoWindow* window)
2916aed176cSClemens Zeidler 	:
292bd767f5aSAxel Dörfler 	PowerStatusView(interface, frame, resizingMode, batteryID),
2936aed176cSClemens Zeidler 	fExtendedInfoWindow(window),
294830758adSKacper Kasper 	fBatteryInfoView(batteryInfoView),
295830758adSKacper Kasper 	fBatteryTabView(window->GetBatteryTabView())
2966aed176cSClemens Zeidler {
2976aed176cSClemens Zeidler }
2986aed176cSClemens Zeidler 
2996aed176cSClemens Zeidler 
3006aed176cSClemens Zeidler void
3016aed176cSClemens Zeidler ExtPowerStatusView::Select(bool select)
3026aed176cSClemens Zeidler {
3036aed176cSClemens Zeidler 	fSelected = select;
304bd767f5aSAxel Dörfler 	Update(true);
3056aed176cSClemens Zeidler }
3066aed176cSClemens Zeidler 
3076aed176cSClemens Zeidler 
3086aed176cSClemens Zeidler bool
309bd767f5aSAxel Dörfler ExtPowerStatusView::IsCritical()
3106aed176cSClemens Zeidler {
311bd767f5aSAxel Dörfler 	return (fBatteryInfo.state & BATTERY_CRITICAL_STATE) != 0;
3126aed176cSClemens Zeidler }
3136aed176cSClemens Zeidler 
3146aed176cSClemens Zeidler 
3156aed176cSClemens Zeidler void
316*10074df1SPawan Wadhwani ExtPowerStatusView::Update(bool force, bool notify)
3176aed176cSClemens Zeidler {
318bd767f5aSAxel Dörfler 	PowerStatusView::Update(force);
3196aed176cSClemens Zeidler 	if (!fSelected)
3206aed176cSClemens Zeidler 		return;
3216aed176cSClemens Zeidler 
3226aed176cSClemens Zeidler 	acpi_extended_battery_info extInfo;
323b19e9d5bSAxel Dörfler 	fDriverInterface->GetExtendedBatteryInfo(fBatteryID, &extInfo);
3246aed176cSClemens Zeidler 
3256aed176cSClemens Zeidler 	fBatteryInfoView->Update(fBatteryInfo, extInfo);
3266aed176cSClemens Zeidler 	fBatteryInfoView->Invalidate();
327830758adSKacper Kasper 
328830758adSKacper Kasper 	fBatteryTabView->Invalidate();
3296aed176cSClemens Zeidler }
3306aed176cSClemens Zeidler 
3316aed176cSClemens Zeidler 
332bd767f5aSAxel Dörfler //	#pragma mark -
333bd767f5aSAxel Dörfler 
334bd767f5aSAxel Dörfler 
3356aed176cSClemens Zeidler ExtendedInfoWindow::ExtendedInfoWindow(PowerStatusDriverInterface* interface)
3366aed176cSClemens Zeidler 	:
3373bd54e05SAdrien Destugues 	BWindow(BRect(100, 150, 500, 500), B_TRANSLATE("Extended battery info"),
3383bd54e05SAdrien Destugues 		B_TITLED_WINDOW,
339b19e9d5bSAxel Dörfler 		B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_AVOID_FRONT
340b19e9d5bSAxel Dörfler 			| B_ASYNCHRONOUS_CONTROLS),
3416aed176cSClemens Zeidler 	fDriverInterface(interface),
3426aed176cSClemens Zeidler 	fSelectedView(NULL)
3436aed176cSClemens Zeidler {
34408145692SClemens Zeidler 	fDriverInterface->AcquireReference();
34508145692SClemens Zeidler 
34654606559SKacper Kasper 	float scale = be_plain_font->Size() / 12.0f;
34754606559SKacper Kasper 	float tabHeight = 70.0f * scale;
34854606559SKacper Kasper 	BRect batteryRect(0, 0, 50 * scale, 50 * scale);
349830758adSKacper Kasper 	fBatteryTabView = new BatteryTabView("tabview");
350830758adSKacper Kasper 	fBatteryTabView->SetBorder(B_NO_BORDER);
35154606559SKacper Kasper 	fBatteryTabView->SetTabHeight(tabHeight);
352830758adSKacper Kasper 	fBatteryTabView->SetTabSide(BTabView::kLeftSide);
353830758adSKacper Kasper 	BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
354830758adSKacper Kasper 		.SetInsets(B_USE_DEFAULT_SPACING, 0, B_USE_DEFAULT_SPACING, 0)
355830758adSKacper Kasper 		.Add(fBatteryTabView);
3566aed176cSClemens Zeidler 
3576aed176cSClemens Zeidler 	for (int i = 0; i < interface->GetBatteryCount(); i++) {
358830758adSKacper Kasper 		BatteryInfoView* batteryInfoView = new BatteryInfoView();
3596aed176cSClemens Zeidler 		ExtPowerStatusView* view = new ExtPowerStatusView(interface,
360830758adSKacper Kasper 			batteryRect, B_FOLLOW_NONE, i, batteryInfoView, this);
361830758adSKacper Kasper 		BatteryTab* tab = new BatteryTab(batteryInfoView, view);
362830758adSKacper Kasper 		fBatteryTabView->AddTab(batteryInfoView, tab);
363830758adSKacper Kasper 		// Has to be added, otherwise it won't get info updates
364830758adSKacper Kasper 		view->Hide();
365830758adSKacper Kasper 		AddChild(view);
366e391ec67SClemens Zeidler 
3676aed176cSClemens Zeidler 		fBatteryViewList.AddItem(view);
3686aed176cSClemens Zeidler 		fDriverInterface->StartWatching(view);
369bd767f5aSAxel Dörfler 		if (!view->IsCritical())
3706aed176cSClemens Zeidler 			fSelectedView = view;
3716aed176cSClemens Zeidler 	}
3726aed176cSClemens Zeidler 
3736aed176cSClemens Zeidler 	if (!fSelectedView && fBatteryViewList.CountItems() > 0)
3746aed176cSClemens Zeidler 		fSelectedView = fBatteryViewList.ItemAt(0);
3756aed176cSClemens Zeidler 	fSelectedView->Select();
3766aed176cSClemens Zeidler 
377830758adSKacper Kasper 	BSize size = GetLayout()->PreferredSize();
3786aed176cSClemens Zeidler 	ResizeTo(size.width, size.height);
3796aed176cSClemens Zeidler }
3806aed176cSClemens Zeidler 
3816aed176cSClemens Zeidler 
3826aed176cSClemens Zeidler ExtendedInfoWindow::~ExtendedInfoWindow()
3836aed176cSClemens Zeidler {
38408145692SClemens Zeidler 	for (int i = 0; i < fBatteryViewList.CountItems(); i++)
3856aed176cSClemens Zeidler 		fDriverInterface->StopWatching(fBatteryViewList.ItemAt(i));
38608145692SClemens Zeidler 
38708145692SClemens Zeidler 	fDriverInterface->ReleaseReference();
3886aed176cSClemens Zeidler }
3896aed176cSClemens Zeidler 
3906aed176cSClemens Zeidler 
391830758adSKacper Kasper BatteryTabView*
392830758adSKacper Kasper ExtendedInfoWindow::GetBatteryTabView()
3936aed176cSClemens Zeidler {
394830758adSKacper Kasper 	return fBatteryTabView;
3956aed176cSClemens Zeidler }
396