Guiliani  Version 2.5 revision 7293 (documentation build 13)
GUIResourceManager.h
1/*
2* Copyright (C) TES Electronic Solutions GmbH,
3* All Rights Reserved.
4* Contact: info@guiliani.de
5*
6* This file is part of the Guiliani HMI framework
7* for the development of graphical user interfaces on embedded systems.
8*/
9
10#ifndef GUIRESOURCEMANAGER__H_
11#define GUIRESOURCEMANAGER__H_
12
13#include "eC_String.h"
14#include "eC_TArray.h"
15
16#include "GUIComponentManager.h"
17#include "FntWrap.h"
18
19#include "GUIFontResource.h"
20#include "GUISoundResource.h"
21#include "GUIImageResource.h"
22#include "GUIGeneralResource.h"
23#include "GUIColorResource.h"
24
25#include "GUIImageData.h"
26
27#include "GUIThread.h"
28
29class CGUIObject;
30
32#define GETRESMANAGER CGUIComponentManager::GetInstance().GetResourceManager()
33
35const eC_Int DIALOG_FILE_VERSION = 1;
36
38
111{
112 friend class CGUI;
113 friend class CGUIComponentManager;
114
115public:
118 static void CreateInstance();
119
122 static void DeleteInstance();
123
124#ifdef GUILIANI_WRITE_GUI
132 eC_Bool WriteImageResourcesToFile(const eC_String& kPath);
133
141 eC_Bool WriteFontResourcesToFile(const eC_String& kPath);
142
150 eC_Bool WriteSoundResourcesToFile(const eC_String& kPath);
151
161 eC_Bool WriteGeneralResourcesToFile(const eC_String& rkPath);
162
172 eC_Bool WriteColorResourcesToFile(const eC_String& rkPath);
173
180 void WriteDialogToFile(const eC_String& pkStreamingFile, CGUIObject* pkDialog);
181
188 void WriteDialogToFile(eC_File *pkFile, CGUIObject* pkDialog);
189#endif
190
191#ifdef GUILIANI_STREAM_GUI
198 eC_Bool RegisterImageResourcesFromFile(const eC_String& rkPath);
207 eC_Bool RegisterFontResourcesFromFile(const eC_String& rkPath);
208
217 eC_Bool RegisterSoundResourcesFromFile(const eC_String& rkPath);
218
229 eC_Bool RegisterGeneralResourcesFromFile(const eC_String& rkPath);
230
239 eC_Bool RegisterColorResourcesFromFile(const eC_String& rkPath);
240#endif
241
250 const eC_String& kPath,
251 const eC_Bool bPermanent=false);
252
264 void* pkMemory,
265 const eC_UInt& uiWidth,
266 const eC_UInt& uiHeight,
267 const eC_UInt& eImageType,
268 const eC_Bool bPermanent = true);
269
278 const eC_String& kPath,
279 const eC_Bool bPermanent=false);
280
290 const eC_String& kPath,
291 eC_UInt uiFontSize,
292 const CFntWrap::GUIFont_t &eFontStyle,
293 eC_Bool bPermanent=true);
294
305 const eC_String& rkPath,
306 eC_Bool bPermanent = false);
307
316 const eC_UInt& ruiValue);
317
331 void KeepDynamicImages(eC_Bool bKeep);
332
337 void OverwriteDynamicImages(eC_Bool bOverwrite);
338
344 void DynamicImagesMustExist(eC_Bool bMustExist);
345
359 void KeepDynamicSounds(eC_Bool bKeep);
360
365 void OverwriteDynamicSounds(eC_Bool bOverwrite);
366
372 void DynamicSoundsMustExist(eC_Bool bMustExist);
373
387 void KeepDynamicFonts(eC_Bool bKeep);
388
393 void OverwriteDynamicFonts(eC_Bool bOverwrite);
394
400 void DynamicFontsMustExist(eC_Bool bMustExist);
401
411 void KeepDynamicGeneralResources(eC_Bool bKeep);
412
417 void OverwriteDynamicGeneralResources(eC_Bool bOverwrite);
418
424 void DynamicGeneralResourcesMustExist(eC_Bool bMustExist);
425
434 inline void EnablePreloading(const eC_Bool bPreLoadPermanentData){ m_bPreLoadPermanentData = bPreLoadPermanentData; }
435
445
455
460 void SetPrefetchDelay(eC_UInt uiDelay);
461
470
479
488
502
507 eC_Int GetImageRequestCount(const ImageResource_t& eImageID) const;
508
513 eC_Int GetFontRequestCount(const FontResource_t& eFontID) const;
514
519 eC_Int GetSoundRequestCount(const SoundResource_t& eSoundID) const;
520
525 eC_Int GetGeneralResourceRequestCount(const GeneralResource_t& eGeneralResourceID) const;
526
534 void FreeImageResource(const ImageResource_t eImageID);
535
543 void FreeFontResource(const FontResource_t eFontID);
544
552 void FreeSoundResource (const SoundResource_t eSoundID);
553
566 void FreeGeneralResource(const GeneralResource_t eResourceID);
567
575 const eC_String& kPath,
576 const ImageResource_t eImageID,
577 const eC_Bool bPermanent = false);
578
589 void* pkMemory,
590 const eC_UInt& uiWidth,
591 const eC_UInt& uiHeight,
592 const eC_UInt& eImageType,
593 const ImageResource_t eImageID,
594 const eC_Bool bPermanent);
595
600 void RefreshImageResource(const ImageResource_t& eImageID, void* pkMemory);
601
610 const eC_String& kPath,
611 const FontResource_t eFontID,
612 const eC_UInt uiFontSize,
613 const CFntWrap::GUIFont_t &eFontStyle,
614 const eC_Bool bPermanent = true);
615
622 const eC_String& pcPath,
623 const SoundResource_t eSoundID,
624 const eC_Bool bPermanent = false);
625
633 const eC_String& rkPath,
634 const GeneralResource_t eResourceID,
635 eC_Bool bPermanent = false);
636
642 const eC_UInt& uiValue,
643 const ColorResource_t eColorID);
644
649 eC_String GetImagePath (const ImageResource_t& eImageID) const;
650
655 eC_UInt GetFontSize(const FontResource_t &eFontID) const;
656
661 eC_String GetFontPath(const FontResource_t &eFontID) const;
662
668
673 void SetFontStyle(const FontResource_t &eFontID, const CFntWrap::GUIFont_t& eStyle);
674
679 eC_String GetSoundPath(const SoundResource_t& eSoundID) const;
680
685 eC_String GetGeneralResourcePath(const GeneralResource_t& eResourceID) const;
686
691 eC_UInt GetColorValue(const ColorResource_t& eColorID) const;
692
698
704
710
716
722
727 eC_Bool IsImagePermanent(const ImageResource_t& eImageID) const;
728
733 eC_Bool IsFontPermanent(const FontResource_t& eFontID) const;
734
739 eC_Bool IsSoundPermanent(const SoundResource_t& eSoundID) const;
740
745 eC_Bool IsGeneralResourcePermanent(const GeneralResource_t& eResourceID) const;
746
751
754
757
762 void SetGlobalColor(const ColorResource_t& eColorID, eC_UInt uiValue);
763
768 void SetPredictResourceFileExtension(const eC_Bool& bPredictResourceFileExtension);
769
774
778 void SetAddResourceFilePrefix(const eC_Bool& bAddResourceFilePrefix);
779
783 eC_Bool GetAddResourceFilePrefix(void) const;
784
788 eC_String GetImagesFilename() const;
789
793 eC_String GetSoundsFilename() const;
794
798 eC_String GetFontsFilename() const;
799
804
805private:
813 class CGUIBackgroundImageLoader
814 {
815 public:
822 {
823 public:
827 CGUIBackgroundImageLoaderThread(CGUIResourceManager::CGUIBackgroundImageLoader* pkBackgroundLoader);
828
829 virtual void Execute(void *pArg);
830
834 void SetDelay(const eC_UInt& uiDelay);
835
836 private:
837 CGUIResourceManager::CGUIBackgroundImageLoader* m_pkBackgroundLoader;
838 eC_UInt m_uiDelay;
839 };
840
841 public:
844 {
850 const ImageResource_t eID = DUMMY_IMAGE,
851 const eC_String& rkPath = "") :
852 m_eID(eID),
853 m_kPath(rkPath)
854 {}
855
860 bool operator== (const PrefetchImage_t& rkCompare) const
861 {
862 if ((m_eID == rkCompare.m_eID) &&
863 (m_kPath == rkCompare.m_kPath))
864 {
865 return true;
866 }
867 else
868 {
869 return false;
870 }
871 }
872
874 eC_String m_kPath;
875 };
876
877 public:
878 CGUIBackgroundImageLoader();
879
880 // private copy constructor
881 CGUIBackgroundImageLoader(const CGUIBackgroundImageLoader& ref) {}
882
883 ~CGUIBackgroundImageLoader();
884
889 eC_Bool AddImageToPrefetchList(const ImageResource_t eID, const eC_String& kPath);
890
895 eC_Bool RemoveImageFromPrefetchList(const ImageResource_t eID, const eC_String& kPath);
896
897 void SetDelay(const eC_UInt& uiDelay);
898
899 void SetUsedImageID(const ImageResource_t& eID)
900 {
901 m_eUsedImage = eID;
902 }
903
907 ImageResource_t GetUsedImagedID() const
908 {
909 return m_eUsedImage;
910 }
911
912 inline eC_UInt GetNOFImagesInPrefetchList() const
913 {
914 return m_kaPrefetchImageList.GetQuantity();
915 }
916
917 void LockList()
918 {
919 m_kPrefetchImageListSema.Enter();
920 }
921
922 void UnlockList()
923 {
924 m_kPrefetchImageListSema.Leave();
925 }
926
927 void LockThread()
928 {
929 m_kImageLoaderThreadSema.Enter();
930 }
931
932 void UnlockThread()
933 {
934 m_kImageLoaderThreadSema.Leave();
935 }
936
937 eC_Bool GetFirstImage(PrefetchImage_t& kImageToBePrefetched)
938 {
939 return m_kaPrefetchImageList.RemoveFront(kImageToBePrefetched);
940 }
941
942 private:
943 // List of images which are to be prefetched
944 eC_TListDoubleLinked< PrefetchImage_t> m_kaPrefetchImageList;
945
946 // Semaphore for locking access to the internal list of images
947 eC_Semaphore m_kPrefetchImageListSema;
948
949 // Semaphore which is used for blocking / unlocking the thread if new images are added to the list.
950 eC_Semaphore m_kImageLoaderThreadSema;
951
952 // Pointer to the background thread instance.
953 CGUIBackgroundImageLoaderThread* m_pBackgroundImageLoaderThread;
954
955 // ID of the currently loading Image, if nothing is loaded DUMMY_IMAGE
956 ImageResource_t m_eUsedImage;
957 };
958
959private:
966 void UnloadImage(ImageResource_t eImageID);
967
972 void DeInit();
973
975 void Init();
976
979
982
988
994 CGUIResourceManager& operator=(const CGUIResourceManager& kSource);
995
997 void PrefetchNow();
998
999private:
1000 // Structures to hold Resource-information.
1001 // Yes, this is currently identical for some Resource-types, but still kept separate for future extensions.
1002 struct ImageEntry_t
1003 {
1005 eC_String* pkPath;
1007 eC_Int iRequestCount;
1009 eC_Bool bPermanent;
1010 };
1011
1012 struct SoundEntry_t
1013 {
1015 eC_String* pkPath;
1017 eC_Int iRequestCount;
1019 eC_Bool bPermanent;
1020 };
1021
1022 struct FontEntry_t
1023 {
1025 eC_String* pkFontName;
1027 eC_UInt uiFontSize;
1029 CFntWrap::GUIFont_t eFontStyle;
1031 eC_Int iRequestCount;
1033 eC_Bool bPermanent;
1034 };
1035
1036 struct GeneralResourceEntry_t
1037 {
1039 eC_String* pkResourceFilePath;
1041 eC_Int iRequestCount;
1043 eC_Bool bPermanent;
1044 };
1045
1046private:
1047 CGUIBackgroundImageLoader* m_pkBackgroundLoader;
1048
1049 eC_TArray<ImageEntry_t> m_kaImageTable;
1050 eC_TArray<FontEntry_t> m_kaFontTable;
1051 eC_TArray<SoundEntry_t> m_kaSoundTable;
1052 eC_TArray<GeneralResourceEntry_t> m_kaGeneralResTable;
1053 eC_TArray<eC_UInt> m_kaColorTable;
1054
1055 eC_TListDoubleLinked<ImageResource_t> m_aeReleasedPreloadedImages;
1056
1057 eC_Bool m_bPreLoadPermanentData;
1058
1060 eC_String m_kImagesFilename;
1061
1063 eC_Bool m_bKeepDynamicImages;
1064
1066 eC_Bool m_bOverwriteDynamicImages;
1067
1069 eC_Bool m_bDynamicImagesMustExist;
1070
1072 eC_String m_kSoundsFilename;
1073
1075 eC_Bool m_bKeepDynamicSounds;
1076
1078 eC_Bool m_bOverwriteDynamicSounds;
1079
1081 eC_Bool m_bDynamicSoundsMustExist;
1082
1084 eC_String m_kFontsFilename;
1085
1087 eC_Bool m_bKeepDynamicFonts;
1088
1090 eC_Bool m_bOverwriteDynamicFonts;
1091
1093 eC_Bool m_bDynamicFontsMustExist;
1094
1096 eC_String m_kGeneralResourcesFilename;
1097
1099 eC_Bool m_bKeepDynamicGeneralResources;
1100
1102 eC_Bool m_bOverwriteDynamicGeneralResources;
1103
1105 eC_Bool m_bDynamicGeneralResourcesMustExist;
1106
1108 eC_Bool m_bPredictResourceFileExtension;
1109
1111 eC_Bool m_bAddResourceFilePrefix;
1112
1113#ifdef _DEBUG
1114 eC_TArray<eC_UInt> m_auiImageReloadCount;
1115 eC_TArray<eC_Bool> m_abImageDeletedBefore;
1116#endif
1117};
1118
1119#ifndef GUILIANI_GUILIANILIB
1120#include "GUIPropertyResource.h"
1121
1124inline void RegisterStaticResources()
1125{
1126// Register properties.
1127#define ENTRY(prop_name, prop_value, prop_type) GETPROPHDL.SetGlobalProperty(prop_name, prop_value, static_cast<CGUIValue::GUIValue_t>(prop_type));
1128 USER_PROPERTY_TABLE
1129#undef ENTRY
1130
1131// Register images.
1132#define ENTRY(img, img_name, img_permanent) GETRESMANAGER.RegisterImageResource(img_name, img, img_permanent);
1133 USER_IMAGE_TABLE
1134#undef ENTRY
1135
1136// Register fonts.
1137#define ENTRY(fnt, fnt_name, fnt_size, fnt_style, fnt_permanent) GETRESMANAGER.RegisterFontResource(fnt_name, fnt, fnt_size, static_cast<CFntWrap::GUIFont_t>(fnt_style), fnt_permanent);
1138 USER_FONT_TABLE
1139#undef ENTRY
1140
1141// Register general resources.
1142#define ENTRY(res, res_name, res_permanent) GETRESMANAGER.RegisterGeneralResource(res_name, res, res_permanent);
1143 USER_GENERAL_RESOURCES_TABLE
1144#undef ENTRY
1145
1146// Register sounds.
1147#define ENTRY(snd, snd_name, snd_permanent) GETRESMANAGER.RegisterSoundResource(snd_name, snd, snd_permanent);
1148 USER_SOUND_TABLE
1149#undef ENTRY
1150}
1151
1153inline void RegisterGuilianiStandardImages()
1154{
1155#define ENTRY(img, img_name, img_permanent) GETRESMANAGER.RegisterImageResource("GuilianiResources/" img_name, img, img_permanent);
1157#undef ENTRY
1158}
1160#define REGISTER_GUI_STANDARDCONTROL_IMAGES RegisterGuilianiStandardImages();
1161#endif
1162
1163#endif
1164
Helper Macros in Guiliani
ColorResource_t
List of color-resource ids.
Definition: GUIColorResource.h:41
Helper Macros in Guiliani
FontResource_t
List of font resource ids.
Definition: GUIFontResource.h:54
Helper Macros in Guiliani
GeneralResource_t
List of general resource ids.
Definition: GUIGeneralResource.h:52
Helper Macros in Guiliani
ImageResource_t
Enumeration of image resource ids.
Definition: GUIImageResource.h:126
#define IMAGE_TABLE
Enum table of all Guiliani internal images.
Definition: GUIImageResource.h:33
Helper Macros in Guiliani
Helper Macros in Guiliani
SoundResource_t
List of sound resource ids.
Definition: GUISoundResource.h:48
GUIFont_t
Definition: FntWrap.h:44
central component-manager
Definition: GUIComponentManager.h:62
GUI base class for any Guiliani application.
Definition: GUI.h:47
This is the Guiliani base class all controls are derived from.
Definition: GUIObject.h:79
Load images in a separate thread.
Definition: GUIResourceManager.h:822
CGUIBackgroundImageLoaderThread(CGUIResourceManager::CGUIBackgroundImageLoader *pkBackgroundLoader)
Manages resource ID mappings for fonts, images, sounds, etc.
Definition: GUIResourceManager.h:111
CFntWrap::GUIFont_t GetFontStyle(const FontResource_t &eFontID) const
void SetAddResourceFilePrefix(const eC_Bool &bAddResourceFilePrefix)
eC_Bool RegisterColorResourcesFromFile(const eC_String &rkPath)
void WriteDialogToFile(const eC_String &pkStreamingFile, CGUIObject *pkDialog)
void DynamicGeneralResourcesMustExist(eC_Bool bMustExist)
void AddToPrefetchQueue(const ImageResource_t eID)
static void CreateInstance()
eC_Bool RegisterFontResourcesFromFile(const eC_String &rkPath)
void FreeFontResource(const FontResource_t eFontID)
eC_String GetFontPath(const FontResource_t &eFontID) const
SoundResource_t RegisterDynamicSound(const eC_String &kPath, const eC_Bool bPermanent=false)
eC_Bool IsSoundPermanent(const SoundResource_t &eSoundID) const
eC_Bool RegisterGeneralResourcesFromFile(const eC_String &rkPath)
eC_Bool IsDynamicImage(ImageResource_t eImageID)
eC_Bool WriteFontResourcesToFile(const eC_String &kPath)
void OverwriteDynamicSounds(eC_Bool bOverwrite)
void RegisterGeneralResource(const eC_String &rkPath, const GeneralResource_t eResourceID, eC_Bool bPermanent=false)
eC_String GetGeneralResourcesFilename() const
eC_Bool IsDynamicGeneralResource(GeneralResource_t eResourceID)
eC_Bool IsDynamicSound(SoundResource_t eSoundID)
eC_String GetFontsFilename() const
ImageResource_t RegisterDynamicImage(const eC_String &kPath, const eC_Bool bPermanent=false)
void RequestGeneralResource(const GeneralResource_t eResourceID)
eC_Bool IsDynamicFont(FontResource_t eFontID)
eC_Int GetGeneralResourceRequestCount(const GeneralResource_t &eGeneralResourceID) const
GeneralResource_t RegisterDynamicGeneralResource(const eC_String &rkPath, eC_Bool bPermanent=false)
eC_Bool IsDynamicColor(ColorResource_t eColorID)
eC_String GetGeneralResourcePath(const GeneralResource_t &eResourceID) const
eC_String GetSoundsFilename() const
eC_Bool IsImagePermanent(const ImageResource_t &eImageID) const
ColorResource_t RegisterDynamicColor(const eC_UInt &ruiValue)
void SetPrefetchDelay(eC_UInt uiDelay)
ImageResource_t RegisterDynamicImage(void *pkMemory, const eC_UInt &uiWidth, const eC_UInt &uiHeight, const eC_UInt &eImageType, const eC_Bool bPermanent=true)
eC_Bool GetAddResourceFilePrefix(void) const
void KeepDynamicImages(eC_Bool bKeep)
void FreeImageResource(const ImageResource_t eImageID)
void SetPredictResourceFileExtension(const eC_Bool &bPredictResourceFileExtension)
void FreeSoundResource(const SoundResource_t eSoundID)
void PrintRequestCounts()
Only available in debug builds: Prints the count of currently requested images.
eC_Bool GetPredictResourceFileExtension(void) const
FontResource_t RegisterDynamicFont(const eC_String &kPath, eC_UInt uiFontSize, const CFntWrap::GUIFont_t &eFontStyle, eC_Bool bPermanent=true)
void RegisterFontResource(const eC_String &kPath, const FontResource_t eFontID, const eC_UInt uiFontSize, const CFntWrap::GUIFont_t &eFontStyle, const eC_Bool bPermanent=true)
eC_Int GetImageRequestCount(const ImageResource_t &eImageID) const
eC_Bool WriteSoundResourcesToFile(const eC_String &kPath)
void OverwriteDynamicGeneralResources(eC_Bool bOverwrite)
void RegisterSoundResource(const eC_String &pcPath, const SoundResource_t eSoundID, const eC_Bool bPermanent=false)
void RequestSoundResource(const SoundResource_t eSoundID)
static void DeleteInstance()
void PrintReloadCounts()
Only available in debug builds: Prints the count of reloads for each image.
void DynamicSoundsMustExist(eC_Bool bMustExist)
void RefreshImageResource(const ImageResource_t &eImageID, void *pkMemory)
eC_Bool RemoveFromPrefetchQueue(const ImageResource_t eID)
eC_Bool WriteGeneralResourcesToFile(const eC_String &rkPath)
eC_UInt GetFontSize(const FontResource_t &eFontID) const
void KeepDynamicFonts(eC_Bool bKeep)
void KeepDynamicGeneralResources(eC_Bool bKeep)
eC_Bool IsFontPermanent(const FontResource_t &eFontID) const
eC_Bool RegisterSoundResourcesFromFile(const eC_String &rkPath)
void SetGlobalColor(const ColorResource_t &eColorID, eC_UInt uiValue)
void FreeGeneralResource(const GeneralResource_t eResourceID)
eC_Bool WriteColorResourcesToFile(const eC_String &rkPath)
void KeepDynamicSounds(eC_Bool bKeep)
void DynamicImagesMustExist(eC_Bool bMustExist)
void WriteDialogToFile(eC_File *pkFile, CGUIObject *pkDialog)
void RegisterColorResource(const eC_UInt &uiValue, const ColorResource_t eColorID)
void RequestFontResource(const FontResource_t eFontID)
eC_Bool RegisterImageResourcesFromFile(const eC_String &rkPath)
eC_Int GetSoundRequestCount(const SoundResource_t &eSoundID) const
void SetFontStyle(const FontResource_t &eFontID, const CFntWrap::GUIFont_t &eStyle)
void DynamicFontsMustExist(eC_Bool bMustExist)
eC_Bool IsGeneralResourcePermanent(const GeneralResource_t &eResourceID) const
eC_Bool WriteImageResourcesToFile(const eC_String &kPath)
eC_UInt GetColorValue(const ColorResource_t &eColorID) const
void EnablePreloading(const eC_Bool bPreLoadPermanentData)
Definition: GUIResourceManager.h:434
void RequestImageResource(const ImageResource_t eImageID)
void RegisterImageResource(const eC_String &kPath, const ImageResource_t eImageID, const eC_Bool bPermanent=false)
eC_String GetSoundPath(const SoundResource_t &eSoundID) const
eC_String GetImagePath(const ImageResource_t &eImageID) const
eC_String GetImagesFilename() const
eC_Int GetFontRequestCount(const FontResource_t &eFontID) const
void RegisterImageResource(void *pkMemory, const eC_UInt &uiWidth, const eC_UInt &uiHeight, const eC_UInt &eImageType, const ImageResource_t eImageID, const eC_Bool bPermanent)
eC_UInt GetNofImagesInPrefetchList()
void OverwriteDynamicFonts(eC_Bool bOverwrite)
void OverwriteDynamicImages(eC_Bool bOverwrite)
This is the base class for Guiliani threads.
Definition: GUIThread.h:85
Represents a double linked list template with header and tail node.
Definition: eC_TList_doubleLinked.h:67
Internal storage structure for image-related information which is required for background loading.
Definition: GUIResourceManager.h:844
eC_String m_kPath
path
Definition: GUIResourceManager.h:874
ImageResource_t m_eID
id
Definition: GUIResourceManager.h:873
bool operator==(const PrefetchImage_t &rkCompare) const
Definition: GUIResourceManager.h:860
PrefetchImage_t(const ImageResource_t eID=DUMMY_IMAGE, const eC_String &rkPath="")
Definition: GUIResourceManager.h:849