1/*
2 * Copyright 2010-2012, Haiku. All rights reserved.
3 * Distributed under the terms of the MIT license.
4 */
5#ifndef _LOCALE_ROSTER_DATA_H_
6#define _LOCALE_ROSTER_DATA_H_
7
8
9#include <Collator.h>
10#include <DateFormat.h>
11#include <FormattingConventions.h>
12#include <image.h>
13#include <Language.h>
14#include <List.h>
15#include <Locale.h>
16#include <Locker.h>
17#include <Message.h>
18#include <Resources.h>
19#include <TimeZone.h>
20
21
22class BCatalogData;
23class BLocale;
24
25struct entry_ref;
26
27
28namespace BPrivate {
29
30
31/*
32 * Struct containing the actual locale data.
33 */
34struct LocaleRosterData {
35			BLocker				fLock;
36			BList				fCatalogAddOnInfos;
37			BMessage			fPreferredLanguages;
38
39			BLocale				fDefaultLocale;
40			BTimeZone			fDefaultTimeZone;
41
42			bool				fIsFilesystemTranslationPreferred;
43
44								LocaleRosterData(const BLanguage& language,
45									const BFormattingConventions& conventions);
46								~LocaleRosterData();
47
48			status_t			InitCheck() const;
49
50			status_t			Refresh();
51
52	static	int					CompareInfos(const void* left,
53									const void* right);
54
55			status_t			GetResources(BResources** resources);
56
57			status_t			SetDefaultFormattingConventions(
58									const BFormattingConventions& convetions);
59			status_t			SetDefaultTimeZone(const BTimeZone& zone);
60			status_t			SetPreferredLanguages(const BMessage* msg);
61			status_t			SetFilesystemTranslationPreferred(
62									bool preferred);
63private:
64			status_t			_Initialize();
65
66			status_t			_InitializeCatalogAddOns();
67			void				_CleanupCatalogAddOns();
68
69			status_t			_LoadLocaleSettings();
70			status_t			_SaveLocaleSettings();
71
72			status_t			_LoadTimeSettings();
73			status_t			_SaveTimeSettings();
74
75			status_t			_SetDefaultFormattingConventions(
76									const BFormattingConventions& conventions);
77			status_t			_SetDefaultTimeZone(const BTimeZone& zone);
78			status_t			_SetPreferredLanguages(const BMessage* msg);
79			void				_SetFilesystemTranslationPreferred(
80									bool preferred);
81
82			status_t			_AddDefaultFormattingConventionsToMessage(
83									BMessage* message) const;
84			status_t			_AddDefaultTimeZoneToMessage(
85									BMessage* message) const;
86			status_t			_AddPreferredLanguagesToMessage(
87									BMessage* message) const;
88			status_t			_AddFilesystemTranslationPreferenceToMessage(
89									BMessage* message) const;
90
91private:
92			status_t			fInitStatus;
93
94			bool				fAreResourcesLoaded;
95			BResources			fResources;
96};
97
98
99typedef BCatalogData* (*InstantiateCatalogFunc)(const entry_ref& catalogOwner,
100	const char* language, uint32 fingerprint);
101
102typedef BCatalogData* (*CreateCatalogFunc)(const char* name,
103	const char* language);
104
105typedef BCatalogData* (*InstantiateEmbeddedCatalogFunc)(
106	entry_ref* appOrAddOnRef);
107
108typedef status_t (*GetAvailableLanguagesFunc)(BMessage*, const char*,
109	const char*, int32);
110
111
112/*
113 * info about a single catalog-add-on (representing a catalog type):
114 */
115struct CatalogAddOnInfo {
116			InstantiateCatalogFunc 		fInstantiateFunc;
117			CreateCatalogFunc			fCreateFunc;
118			GetAvailableLanguagesFunc 	fLanguagesFunc;
119
120			BString				fName;
121			BString				fPath;
122			image_id			fAddOnImage;
123			uint8				fPriority;
124			BList				fLoadedCatalogs;
125			bool				fIsEmbedded;
126									// an embedded add-on actually isn't an
127									// add-on, it is included as part of the
128									// library.
129									// The DefaultCatalog is such a beast!
130
131								CatalogAddOnInfo(const BString& name,
132									const BString& path, uint8 priority);
133								~CatalogAddOnInfo();
134
135			bool				MakeSureItsLoaded();
136			void				UnloadIfPossible();
137};
138
139
140}	// namespace BPrivate
141
142
143#endif	// _LOCALE_ROSTER_DATA_H_
144