Guiliani  Version 2.6 revision 7293 (documentation build 12)
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
756 void SetGlobalColor(const ColorResource_t& eColorID, eC_UInt uiValue);
757
762 void SetPredictResourceFileExtension(const eC_Bool& bPredictResourceFileExtension);
763
768
772 void SetAddResourceFilePrefix(const eC_Bool& bAddResourceFilePrefix);
773
777 eC_Bool GetAddResourceFilePrefix(void) const;
778
782 eC_String GetImagesFilename() const;
783
787 eC_String GetSoundsFilename() const;
788
792 eC_String GetFontsFilename() const;
793
798
799private:
807 class CGUIBackgroundImageLoader
808 {
809 public:
816 {
817 public:
821 CGUIBackgroundImageLoaderThread(CGUIResourceManager::CGUIBackgroundImageLoader* pkBackgroundLoader);
822
823 virtual void Execute(void *pArg);
824
828 void SetDelay(const eC_UInt& uiDelay);
829
830 private:
831 CGUIResourceManager::CGUIBackgroundImageLoader* m_pkBackgroundLoader;
832 eC_UInt m_uiDelay;
833 };
834
835 public:
838 {
844 const ImageResource_t eID = DUMMY_IMAGE,
845 const eC_String& rkPath = "") :
846 m_eID(eID),
847 m_kPath(rkPath)
848 {}
849
854 bool operator== (const PrefetchImage_t& rkCompare) const
855 {
856 if ((m_eID == rkCompare.m_eID) &&
857 (m_kPath == rkCompare.m_kPath))
858 {
859 return true;
860 }
861 else
862 {
863 return false;
864 }
865 }
866
868 eC_String m_kPath;
869 };
870
871 public:
872 CGUIBackgroundImageLoader();
873
874 // private copy constructor
875 CGUIBackgroundImageLoader(const CGUIBackgroundImageLoader& ref) {}
876
877 ~CGUIBackgroundImageLoader();
878
883 eC_Bool AddImageToPrefetchList(const ImageResource_t eID, const eC_String& kPath);
884
889 eC_Bool RemoveImageFromPrefetchList(const ImageResource_t eID, const eC_String& kPath);
890
891 void SetDelay(const eC_UInt& uiDelay);
892
893 void SetUsedImageID(const ImageResource_t& eID)
894 {
895 m_eUsedImage = eID;
896 }
897
901 ImageResource_t GetUsedImagedID() const
902 {
903 return m_eUsedImage;
904 }
905
906 inline eC_UInt GetNOFImagesInPrefetchList() const
907 {
908 return m_kaPrefetchImageList.GetQuantity();
909 }
910
911 void LockList()
912 {
913 m_kPrefetchImageListSema.Enter();
914 }
915
916 void UnlockList()
917 {
918 m_kPrefetchImageListSema.Leave();
919 }
920
921 void LockThread()
922 {
923 m_kImageLoaderThreadSema.Enter();
924 }
925
926 void UnlockThread()
927 {
928 m_kImageLoaderThreadSema.Leave();
929 }
930
931 eC_Bool GetFirstImage(PrefetchImage_t& kImageToBePrefetched)
932 {
933 return m_kaPrefetchImageList.RemoveFront(kImageToBePrefetched);
934 }
935
936 private:
937 // List of images which are to be prefetched
938 eC_TListDoubleLinked< PrefetchImage_t> m_kaPrefetchImageList;
939
940 // Semaphore for locking access to the internal list of images
941 eC_Semaphore m_kPrefetchImageListSema;
942
943 // Semaphore which is used for blocking / unlocking the thread if new images are added to the list.
944 eC_Semaphore m_kImageLoaderThreadSema;
945
946 // Pointer to the background thread instance.
947 CGUIBackgroundImageLoaderThread* m_pBackgroundImageLoaderThread;
948
949 // ID of the currently loading Image, if nothing is loaded DUMMY_IMAGE
950 ImageResource_t m_eUsedImage;
951 };
952
953private:
960 void UnloadImage(ImageResource_t eImageID);
961
966 void DeInit();
967
969 void Init();
970
973
976
982
988 CGUIResourceManager& operator=(const CGUIResourceManager& kSource);
989
991 void PrefetchNow();
992
993private:
994 // Structures to hold Resource-information.
995 // Yes, this is currently identical for some Resource-types, but still kept separate for future extensions.
996 struct ImageEntry_t
997 {
999 eC_String* pkPath;
1001 eC_Int iRequestCount;
1003 eC_Bool bPermanent;
1004 };
1005
1006 struct SoundEntry_t
1007 {
1009 eC_String* pkPath;
1011 eC_Int iRequestCount;
1013 eC_Bool bPermanent;
1014 };
1015
1016 struct FontEntry_t
1017 {
1019 eC_String* pkFontName;
1021 eC_UInt uiFontSize;
1023 CFntWrap::GUIFont_t eFontStyle;
1025 eC_Int iRequestCount;
1027 eC_Bool bPermanent;
1028 };
1029
1030 struct GeneralResourceEntry_t
1031 {
1033 eC_String* pkResourceFilePath;
1035 eC_Int iRequestCount;
1037 eC_Bool bPermanent;
1038 };
1039
1040private:
1041 CGUIBackgroundImageLoader* m_pkBackgroundLoader;
1042
1043 eC_TArray<ImageEntry_t> m_kaImageTable;
1044 eC_TArray<FontEntry_t> m_kaFontTable;
1045 eC_TArray<SoundEntry_t> m_kaSoundTable;
1046 eC_TArray<GeneralResourceEntry_t> m_kaGeneralResTable;
1047 eC_TArray<eC_UInt> m_kaColorTable;
1048
1049 eC_TListDoubleLinked<ImageResource_t> m_aeReleasedPreloadedImages;
1050
1051 eC_Bool m_bPreLoadPermanentData;
1052
1054 eC_String m_kImagesFilename;
1055
1057 eC_Bool m_bKeepDynamicImages;
1058
1060 eC_Bool m_bOverwriteDynamicImages;
1061
1063 eC_Bool m_bDynamicImagesMustExist;
1064
1066 eC_String m_kSoundsFilename;
1067
1069 eC_Bool m_bKeepDynamicSounds;
1070
1072 eC_Bool m_bOverwriteDynamicSounds;
1073
1075 eC_Bool m_bDynamicSoundsMustExist;
1076
1078 eC_String m_kFontsFilename;
1079
1081 eC_Bool m_bKeepDynamicFonts;
1082
1084 eC_Bool m_bOverwriteDynamicFonts;
1085
1087 eC_Bool m_bDynamicFontsMustExist;
1088
1090 eC_String m_kGeneralResourcesFilename;
1091
1093 eC_Bool m_bKeepDynamicGeneralResources;
1094
1096 eC_Bool m_bOverwriteDynamicGeneralResources;
1097
1099 eC_Bool m_bDynamicGeneralResourcesMustExist;
1100
1102 eC_Bool m_bPredictResourceFileExtension;
1103
1105 eC_Bool m_bAddResourceFilePrefix;
1106};
1107
1108#ifndef GUILIANI_GUILIANILIB
1109#include "GUIPropertyResource.h"
1110
1113inline void RegisterStaticResources()
1114{
1115// Register properties.
1116#define ENTRY(prop_name, prop_value, prop_type) GETPROPHDL.SetGlobalProperty(prop_name, prop_value, static_cast<CGUIValue::GUIValue_t>(prop_type));
1117 USER_PROPERTY_TABLE
1118#undef ENTRY
1119
1120// Register images.
1121#define ENTRY(img, img_name, img_permanent) GETRESMANAGER.RegisterImageResource(img_name, img, img_permanent);
1122 USER_IMAGE_TABLE
1123#undef ENTRY
1124
1125// Register fonts.
1126#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);
1127 USER_FONT_TABLE
1128#undef ENTRY
1129
1130// Register general resources.
1131#define ENTRY(res, res_name, res_permanent) GETRESMANAGER.RegisterGeneralResource(res_name, res, res_permanent);
1132 USER_GENERAL_RESOURCES_TABLE
1133#undef ENTRY
1134
1135// Register sounds.
1136#define ENTRY(snd, snd_name, snd_permanent) GETRESMANAGER.RegisterSoundResource(snd_name, snd, snd_permanent);
1137 USER_SOUND_TABLE
1138#undef ENTRY
1139}
1140
1142inline void RegisterGuilianiStandardImages()
1143{
1144#define ENTRY(img, img_name, img_permanent) GETRESMANAGER.RegisterImageResource("GuilianiResources/" img_name, img, img_permanent);
1146#undef ENTRY
1147}
1149#define REGISTER_GUI_STANDARDCONTROL_IMAGES RegisterGuilianiStandardImages();
1150#endif
1151
1152#endif
1153
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:39
This is the Guiliani base class all controls are derived from.
Definition: GUIObject.h:81
Load images in a separate thread.
Definition: GUIResourceManager.h:816
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)
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 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:838
eC_String m_kPath
path
Definition: GUIResourceManager.h:868
ImageResource_t m_eID
id
Definition: GUIResourceManager.h:867
bool operator==(const PrefetchImage_t &rkCompare) const
Definition: GUIResourceManager.h:854
PrefetchImage_t(const ImageResource_t eID=DUMMY_IMAGE, const eC_String &rkPath="")
Definition: GUIResourceManager.h:843