1/*
2 * Copyright 2019-2020, Andrew Lindesay <apl@lindesay.co.nz>.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5#ifndef USER_USAGE_CONDITIONS_WINDOW_H
6#define USER_USAGE_CONDITIONS_WINDOW_H
7
8#include <Locker.h>
9#include <Messenger.h>
10#include <Window.h>
11
12#include "HaikuDepotConstants.h"
13#include "PackageInfo.h"
14#include "UserDetail.h"
15#include "UserUsageConditions.h"
16
17
18class BarberPole;
19class TextView;
20class BStringView;
21class MarkupTextView;
22class Model;
23
24
25class UserUsageConditionsWindow : public BWindow {
26public:
27								UserUsageConditionsWindow(Model& model,
28									UserUsageConditions& userUsageConditions);
29								UserUsageConditionsWindow(Model& model,
30									UserUsageConditionsSelectionMode mode);
31	virtual						~UserUsageConditionsWindow();
32
33	virtual	void				MessageReceived(BMessage* message);
34	virtual bool				QuitRequested();
35
36private:
37	void						_InitUiControls();
38
39	static const BString		_VersionText(const BString& code);
40	static const BString		_MinimumAgeText(uint8 minimumAge);
41	static const BString		_IntroductionTextForMode(
42									UserUsageConditionsSelectionMode mode,
43									const UserDetail& userDetail);
44
45	void						_DisplayData(const UserDetail& userDetail,
46									const UserUsageConditions&
47									userUsageConditions);
48
49	void						_FetchData();
50	void						_SetWorkerThread(thread_id thread);
51	static int32				_FetchDataThreadEntry(void* data);
52	void						_FetchDataPerform();
53	status_t					_FetchUserUsageConditionsCodePerform(
54									UserDetail& userDetail, BString& code);
55	status_t					_FetchUserUsageConditionsCodeForUserPerform(
56									UserDetail& userDetail, BString& code);
57	void						_NotifyFetchProblem();
58
59private:
60			UserUsageConditionsSelectionMode
61								fMode;
62			MarkupTextView*		fCopyView;
63			Model&				fModel;
64			BStringView*		fAgeNoteStringView;
65			BStringView*		fVersionStringView;
66			TextView*			fIntroductionTextView;
67			BarberPole*			fWorkerIndicator;
68			thread_id			fWorkerThread;
69};
70
71
72#endif // USER_USAGE_CONDITIONS_WINDOW_H
73