mirror of
				https://projects.vdr-developer.org/git/vdr-plugin-skindesigner.git
				synced 2023-10-19 15:58:31 +00:00 
			
		
		
		
	optimized image caching code
This commit is contained in:
		@@ -46,25 +46,24 @@ void cImageCache::CacheLogo(int width, int height) {
 | 
			
		||||
    if (width == 0 || height == 0)
 | 
			
		||||
        return;
 | 
			
		||||
    
 | 
			
		||||
    int channelsCached = 0;     
 | 
			
		||||
    int logosCached = 0;     
 | 
			
		||||
    
 | 
			
		||||
    for (const cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel)) {
 | 
			
		||||
        if (channelsCached >= config.numLogosPerSizeInitial)
 | 
			
		||||
        if (logosCached >= config.numLogosPerSizeInitial)
 | 
			
		||||
            break;
 | 
			
		||||
        if (channel->GroupSep()) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        stringstream logoName;
 | 
			
		||||
        logoName << *channel->GetChannelID().ToString() << "_" << width << "x" << height;
 | 
			
		||||
        map<string, cImage*>::iterator hit = channelLogoCache.find(logoName.str());
 | 
			
		||||
        if (hit != channelLogoCache.end()) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        bool success = LoadLogo(channel);
 | 
			
		||||
        if (success) {
 | 
			
		||||
            channelsCached++;
 | 
			
		||||
            logosCached++;
 | 
			
		||||
            cImage *image = CreateImage(width, height);
 | 
			
		||||
            stringstream logoName;
 | 
			
		||||
            logoName << *channel->GetChannelID().ToString() << "_" << width << "x" << height;
 | 
			
		||||
            std::map<std::string, cImage*>::iterator hit = channelLogoCache.find(logoName.str());
 | 
			
		||||
            if (hit != channelLogoCache.end()) {
 | 
			
		||||
                delete image;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            channelLogoCache.insert(pair<string, cImage*>(logoName.str(), image));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -158,13 +157,7 @@ bool cImageCache::SeparatorLogoExists(string name) {
 | 
			
		||||
void cImageCache::CacheIcon(eImageType type, string name, int width, int height) {
 | 
			
		||||
    if (width < 1 || width > 1920 || height < 1 || height > 1080)
 | 
			
		||||
        return;
 | 
			
		||||
    bool success = LoadIcon(type, name);
 | 
			
		||||
    if (!success) 
 | 
			
		||||
        return;
 | 
			
		||||
    stringstream iconName;
 | 
			
		||||
    iconName << name << "_" << width << "x" << height;
 | 
			
		||||
    cImage *image = CreateImage(width, height, true);
 | 
			
		||||
    iconCache.insert(pair<string, cImage*>(iconName.str(), image));
 | 
			
		||||
    GetIcon(type, name, width, height);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cImage *cImageCache::GetIcon(eImageType type, string name, int width, int height) {
 | 
			
		||||
@@ -281,13 +274,7 @@ bool cImageCache::MenuIconExists(string name) {
 | 
			
		||||
void cImageCache::CacheSkinpart(string name, int width, int height) {
 | 
			
		||||
    if (width < 1 || width > 1920 || height < 1 || height > 1080)
 | 
			
		||||
        return;
 | 
			
		||||
    bool success = LoadSkinpart(name);
 | 
			
		||||
    if (!success) 
 | 
			
		||||
        return;
 | 
			
		||||
    stringstream iconName;
 | 
			
		||||
    iconName << name << "_" << width << "x" << height;
 | 
			
		||||
    cImage *image = CreateImage(width, height, false);
 | 
			
		||||
    skinPartsCache.insert(pair<string, cImage*>(iconName.str(), image));
 | 
			
		||||
    GetSkinpart(name, width, height);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cImage *cImageCache::GetSkinpart(string name, int width, int height) {
 | 
			
		||||
 
 | 
			
		||||
@@ -104,7 +104,6 @@ vector< pair<string, int> > cTemplate::GetUsedFonts(void) {
 | 
			
		||||
 | 
			
		||||
void cTemplate::CacheImages(void) {
 | 
			
		||||
    CacheImages(rootView);
 | 
			
		||||
 | 
			
		||||
    rootView->InitSubViewIterator();
 | 
			
		||||
    cTemplateView *subView = NULL;
 | 
			
		||||
    while(subView = rootView->GetNextSubView()) {
 | 
			
		||||
@@ -113,9 +112,7 @@ void cTemplate::CacheImages(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cTemplate::Debug(void) {
 | 
			
		||||
 | 
			
		||||
    rootView->Debug();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************
 | 
			
		||||
@@ -213,13 +210,7 @@ void cTemplate::CacheImages(cTemplateView *view) {
 | 
			
		||||
        viewElement->InitIterator();
 | 
			
		||||
        cTemplatePixmap *pix = NULL;
 | 
			
		||||
        while(pix = viewElement->GetNextPixmap()) {
 | 
			
		||||
            pix->InitIterator();
 | 
			
		||||
            cTemplateFunction *func = NULL;
 | 
			
		||||
            while(func = pix->GetNextFunction()) {
 | 
			
		||||
                if (func->GetType() == ftDrawImage) {
 | 
			
		||||
                    CacheImage(func);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            CachePixmapImages(pix);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    //used images in viewLists pixmaps
 | 
			
		||||
@@ -229,40 +220,40 @@ void cTemplate::CacheImages(cTemplateView *view) {
 | 
			
		||||
        viewList->InitIterator();
 | 
			
		||||
        cTemplatePixmap *pix = NULL;
 | 
			
		||||
        while(pix = viewList->GetNextPixmap()) {
 | 
			
		||||
            pix->InitIterator();
 | 
			
		||||
            cTemplateFunction *func = NULL;
 | 
			
		||||
            while(func = pix->GetNextFunction()) {
 | 
			
		||||
                if (func->GetType() == ftDrawImage) {
 | 
			
		||||
                    CacheImage(func);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            CachePixmapImages(pix);
 | 
			
		||||
        }
 | 
			
		||||
        cTemplateViewElement *listElement = viewList->GetListElement();
 | 
			
		||||
        listElement->InitIterator();
 | 
			
		||||
        while(pix = listElement->GetNextPixmap()) {
 | 
			
		||||
            pix->InitIterator();
 | 
			
		||||
            cTemplateFunction *func = NULL;
 | 
			
		||||
            while(func = pix->GetNextFunction()) {
 | 
			
		||||
                if (func->GetType() == ftDrawImage) {
 | 
			
		||||
                    CacheImage(func);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            CachePixmapImages(pix);
 | 
			
		||||
        }
 | 
			
		||||
        cTemplateViewElement *currentElement = viewList->GetListElementCurrent();
 | 
			
		||||
        if (!currentElement) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        currentElement->InitIterator();
 | 
			
		||||
        while(pix = currentElement->GetNextPixmap()) {
 | 
			
		||||
            CachePixmapImages(pix);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    //used logos in viewTabs
 | 
			
		||||
    //used images in viewTabs
 | 
			
		||||
    view->InitViewTabIterator();
 | 
			
		||||
    cTemplateViewTab *viewTab = NULL;
 | 
			
		||||
    while(viewTab = view->GetNextViewTab()) {
 | 
			
		||||
        viewTab->InitIterator();
 | 
			
		||||
        cTemplateFunction *func = NULL;
 | 
			
		||||
        while(func = viewTab->GetNextFunction()) {
 | 
			
		||||
            if (func->GetType() == ftDrawImage) {
 | 
			
		||||
                CacheImage(func);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        CachePixmapImages(viewTab);
 | 
			
		||||
    }    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cTemplate::CachePixmapImages(cTemplatePixmap *pix) {
 | 
			
		||||
    pix->InitIterator();
 | 
			
		||||
    cTemplateFunction *func = NULL;
 | 
			
		||||
    while(func = pix->GetNextFunction()) {
 | 
			
		||||
        if (func->GetType() == ftDrawImage) {
 | 
			
		||||
            CacheImage(func);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cTemplate::CacheImage(cTemplateFunction *func) {
 | 
			
		||||
    eImageType imgType = (eImageType)func->GetNumericParameter(ptImageType);
 | 
			
		||||
    int width = func->GetNumericParameter(ptWidth);
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ enum eViewType {
 | 
			
		||||
class cTemplate {
 | 
			
		||||
private:
 | 
			
		||||
    eViewType viewType;
 | 
			
		||||
    void CachePixmapImages(cTemplatePixmap *pix);
 | 
			
		||||
    void CacheImage(cTemplateFunction *func);
 | 
			
		||||
protected:
 | 
			
		||||
    cGlobals *globals;
 | 
			
		||||
 
 | 
			
		||||
@@ -25,26 +25,26 @@ public:
 | 
			
		||||
// Data structure for service "RegisterPlugin"
 | 
			
		||||
class RegisterPlugin {
 | 
			
		||||
public:
 | 
			
		||||
	RegisterPlugin(void) {
 | 
			
		||||
		name = "";
 | 
			
		||||
	};
 | 
			
		||||
	void SetMenu(int key, string templateName) {
 | 
			
		||||
		menus.insert(pair<int, string>(key, templateName));
 | 
			
		||||
	}
 | 
			
		||||
    RegisterPlugin(void) {
 | 
			
		||||
        name = "";
 | 
			
		||||
    };
 | 
			
		||||
    void SetMenu(int key, string templateName) {
 | 
			
		||||
        menus.insert(pair<int, string>(key, templateName));
 | 
			
		||||
    }
 | 
			
		||||
// in
 | 
			
		||||
	string name;				 //name of plugin
 | 
			
		||||
	map< int, string > menus;    //menus as key -> templatename hashmap 
 | 
			
		||||
    string name;                 //name of plugin
 | 
			
		||||
    map< int, string > menus;    //menus as key -> templatename hashmap 
 | 
			
		||||
//out
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Data structure for service "GetDisplayMenu"
 | 
			
		||||
class GetDisplayMenu {
 | 
			
		||||
public:
 | 
			
		||||
	GetDisplayMenu(void) {
 | 
			
		||||
		displayMenu = NULL;
 | 
			
		||||
	};
 | 
			
		||||
    GetDisplayMenu(void) {
 | 
			
		||||
        displayMenu = NULL;
 | 
			
		||||
    };
 | 
			
		||||
// in
 | 
			
		||||
//out	
 | 
			
		||||
	cSDDisplayMenu *displayMenu;
 | 
			
		||||
//out   
 | 
			
		||||
    cSDDisplayMenu *displayMenu;
 | 
			
		||||
};
 | 
			
		||||
#endif //__SKINDESIGNERSERVICES_H
 | 
			
		||||
@@ -4,11 +4,11 @@
 | 
			
		||||
* cSkindesignerOsdItem
 | 
			
		||||
**********************************************************************/
 | 
			
		||||
cSkindesignerOsdItem::cSkindesignerOsdItem(eOSState State) : cOsdItem(State) {
 | 
			
		||||
	sdDisplayMenu = NULL;
 | 
			
		||||
    sdDisplayMenu = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cSkindesignerOsdItem::cSkindesignerOsdItem(const char *Text, eOSState State, bool Selectable) : cOsdItem(Text, State, Selectable) {
 | 
			
		||||
	sdDisplayMenu = NULL;
 | 
			
		||||
    sdDisplayMenu = NULL;
 | 
			
		||||
}  
 | 
			
		||||
 | 
			
		||||
cSkindesignerOsdItem::~cSkindesignerOsdItem() {
 | 
			
		||||
@@ -16,33 +16,33 @@ cSkindesignerOsdItem::~cSkindesignerOsdItem() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable) {
 | 
			
		||||
	if (sdDisplayMenu) {
 | 
			
		||||
		if (!sdDisplayMenu->SetItemPlugin(&stringTokens, &intTokens, &loopTokens, Index, Current, Selectable)) {
 | 
			
		||||
			DisplayMenu->SetItem(Text(), Index, Current, Selectable);
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		DisplayMenu->SetItem(Text(), Index, Current, Selectable);
 | 
			
		||||
	}
 | 
			
		||||
    if (sdDisplayMenu) {
 | 
			
		||||
        if (!sdDisplayMenu->SetItemPlugin(&stringTokens, &intTokens, &loopTokens, Index, Current, Selectable)) {
 | 
			
		||||
            DisplayMenu->SetItem(Text(), Index, Current, Selectable);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        DisplayMenu->SetItem(Text(), Index, Current, Selectable);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdItem::AddStringToken(string key, string value) {
 | 
			
		||||
	stringTokens.insert(pair<string,string>(key, value));
 | 
			
		||||
    stringTokens.insert(pair<string,string>(key, value));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdItem::AddIntToken(string key, int value) {
 | 
			
		||||
	intTokens.insert(pair<string,int>(key, value));
 | 
			
		||||
    intTokens.insert(pair<string,int>(key, value));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdItem::AddLoopToken(string loopName, map<string, string> &tokens) {
 | 
			
		||||
	map<string, vector<map<string, string> > >::iterator hitLoop = loopTokens.find(loopName);
 | 
			
		||||
	if (hitLoop == loopTokens.end()) {
 | 
			
		||||
		vector<map<string, string> > tokenVector;
 | 
			
		||||
		tokenVector.push_back(tokens);
 | 
			
		||||
		loopTokens.insert(pair<string, vector<map<string, string> > >(loopName, tokenVector));
 | 
			
		||||
	} else {
 | 
			
		||||
		vector<map<string, string> > *tokenVector = &hitLoop->second;
 | 
			
		||||
		tokenVector->push_back(tokens);
 | 
			
		||||
	}
 | 
			
		||||
    map<string, vector<map<string, string> > >::iterator hitLoop = loopTokens.find(loopName);
 | 
			
		||||
    if (hitLoop == loopTokens.end()) {
 | 
			
		||||
        vector<map<string, string> > tokenVector;
 | 
			
		||||
        tokenVector.push_back(tokens);
 | 
			
		||||
        loopTokens.insert(pair<string, vector<map<string, string> > >(loopName, tokenVector));
 | 
			
		||||
    } else {
 | 
			
		||||
        vector<map<string, string> > *tokenVector = &hitLoop->second;
 | 
			
		||||
        tokenVector->push_back(tokens);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -50,12 +50,12 @@ void cSkindesignerOsdItem::AddLoopToken(string loopName, map<string, string> &to
 | 
			
		||||
* cSkindesignerOsdMenu
 | 
			
		||||
**********************************************************************/
 | 
			
		||||
cSkindesignerOsdMenu::cSkindesignerOsdMenu(const char *Title, int c0, int c1, int c2, int c3, int c4) : cOsdMenu(Title, c0, c1, c2, c3, c4) {
 | 
			
		||||
	init = true;
 | 
			
		||||
    init = true;
 | 
			
		||||
    displayText = false;
 | 
			
		||||
	sdDisplayMenu = NULL;
 | 
			
		||||
	pluginName = "";
 | 
			
		||||
	SetMenuCategory(mcPlugin);
 | 
			
		||||
	SetSkinDesignerDisplayMenu();
 | 
			
		||||
    sdDisplayMenu = NULL;
 | 
			
		||||
    pluginName = "";
 | 
			
		||||
    SetMenuCategory(mcPlugin);
 | 
			
		||||
    SetSkinDesignerDisplayMenu();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cSkindesignerOsdMenu::~cSkindesignerOsdMenu() {
 | 
			
		||||
@@ -63,56 +63,56 @@ cSkindesignerOsdMenu::~cSkindesignerOsdMenu() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdMenu::SetPluginMenu(int menu, eMenuType type) {
 | 
			
		||||
	if (type == mtList)
 | 
			
		||||
		displayText = false;
 | 
			
		||||
	else if (type == mtText)
 | 
			
		||||
		displayText = true;
 | 
			
		||||
    if (type == mtList)
 | 
			
		||||
        displayText = false;
 | 
			
		||||
    else if (type == mtText)
 | 
			
		||||
        displayText = true;
 | 
			
		||||
 | 
			
		||||
	if (sdDisplayMenu) {
 | 
			
		||||
		sdDisplayMenu->SetPluginMenu(pluginName, menu, type, init);
 | 
			
		||||
	}
 | 
			
		||||
    if (sdDisplayMenu) {
 | 
			
		||||
        sdDisplayMenu->SetPluginMenu(pluginName, menu, type, init);
 | 
			
		||||
    }
 | 
			
		||||
    init = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cSkindesignerOsdMenu::SetSkinDesignerDisplayMenu(void) {
 | 
			
		||||
	static cPlugin *pSkinDesigner = cPluginManager::GetPlugin("skindesigner");
 | 
			
		||||
  	if (!pSkinDesigner) {
 | 
			
		||||
    	return false;	
 | 
			
		||||
  	}
 | 
			
		||||
  	GetDisplayMenu call;
 | 
			
		||||
  	bool ok = pSkinDesigner->Service("GetDisplayMenu", &call);
 | 
			
		||||
  	if (ok && call.displayMenu) {
 | 
			
		||||
  		sdDisplayMenu = call.displayMenu;
 | 
			
		||||
  		return true;
 | 
			
		||||
  	}
 | 
			
		||||
  	return false;
 | 
			
		||||
    static cPlugin *pSkinDesigner = cPluginManager::GetPlugin("skindesigner");
 | 
			
		||||
    if (!pSkinDesigner) {
 | 
			
		||||
        return false;   
 | 
			
		||||
    }
 | 
			
		||||
    GetDisplayMenu call;
 | 
			
		||||
    bool ok = pSkinDesigner->Service("GetDisplayMenu", &call);
 | 
			
		||||
    if (ok && call.displayMenu) {
 | 
			
		||||
        sdDisplayMenu = call.displayMenu;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdMenu::ClearTokens(void) {
 | 
			
		||||
	text = "";
 | 
			
		||||
    text = "";
 | 
			
		||||
    stringTokens.clear();
 | 
			
		||||
    intTokens.clear();
 | 
			
		||||
    loopTokens.clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdMenu::AddStringToken(string key, string value) {
 | 
			
		||||
	stringTokens.insert(pair<string,string>(key, value));
 | 
			
		||||
    stringTokens.insert(pair<string,string>(key, value));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdMenu::AddIntToken(string key, int value) {
 | 
			
		||||
	intTokens.insert(pair<string,int>(key, value));
 | 
			
		||||
    intTokens.insert(pair<string,int>(key, value));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdMenu::AddLoopToken(string loopName, map<string, string> &tokens) {
 | 
			
		||||
	map<string, vector<map<string, string> > >::iterator hitLoop = loopTokens.find(loopName);
 | 
			
		||||
	if (hitLoop == loopTokens.end()) {
 | 
			
		||||
		vector<map<string, string> > tokenVector;
 | 
			
		||||
		tokenVector.push_back(tokens);
 | 
			
		||||
		loopTokens.insert(pair<string, vector<map<string, string> > >(loopName, tokenVector));
 | 
			
		||||
	} else {
 | 
			
		||||
		vector<map<string, string> > *tokenVector = &hitLoop->second;
 | 
			
		||||
		tokenVector->push_back(tokens);
 | 
			
		||||
	}
 | 
			
		||||
    map<string, vector<map<string, string> > >::iterator hitLoop = loopTokens.find(loopName);
 | 
			
		||||
    if (hitLoop == loopTokens.end()) {
 | 
			
		||||
        vector<map<string, string> > tokenVector;
 | 
			
		||||
        tokenVector.push_back(tokens);
 | 
			
		||||
        loopTokens.insert(pair<string, vector<map<string, string> > >(loopName, tokenVector));
 | 
			
		||||
    } else {
 | 
			
		||||
        vector<map<string, string> > *tokenVector = &hitLoop->second;
 | 
			
		||||
        tokenVector->push_back(tokens);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdMenu::TextKeyLeft(void) {
 | 
			
		||||
@@ -140,9 +140,9 @@ void cSkindesignerOsdMenu::TextKeyDown(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSkindesignerOsdMenu::Display(void) {
 | 
			
		||||
	if (displayText) {
 | 
			
		||||
		if (sdDisplayMenu) {
 | 
			
		||||
			if (sdDisplayMenu->SetPluginText(&stringTokens, &intTokens, &loopTokens)) {
 | 
			
		||||
    if (displayText) {
 | 
			
		||||
        if (sdDisplayMenu) {
 | 
			
		||||
            if (sdDisplayMenu->SetPluginText(&stringTokens, &intTokens, &loopTokens)) {
 | 
			
		||||
                esyslog("skindesclient: template found");
 | 
			
		||||
                sdDisplayMenu->Flush();
 | 
			
		||||
            } else {
 | 
			
		||||
@@ -151,19 +151,19 @@ void cSkindesignerOsdMenu::Display(void) {
 | 
			
		||||
                DisplayMenu()->SetText(text.c_str(), false);
 | 
			
		||||
                DisplayMenu()->Flush();
 | 
			
		||||
            }
 | 
			
		||||
		} else {
 | 
			
		||||
        } else {
 | 
			
		||||
            DisplayMenu()->Clear();
 | 
			
		||||
			DisplayMenu()->SetText(text.c_str(), false);
 | 
			
		||||
            DisplayMenu()->SetText(text.c_str(), false);
 | 
			
		||||
            DisplayMenu()->Flush();
 | 
			
		||||
		}
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
	}
 | 
			
		||||
	if (sdDisplayMenu) {
 | 
			
		||||
		for (cOsdItem *item = First(); item; item = Next(item)) {
 | 
			
		||||
	        cSkindesignerOsdItem *sdItem = dynamic_cast<cSkindesignerOsdItem*>(item);
 | 
			
		||||
	        if (sdItem)
 | 
			
		||||
				sdItem->SetDisplayMenu(sdDisplayMenu);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	cOsdMenu::Display();
 | 
			
		||||
    }
 | 
			
		||||
    if (sdDisplayMenu) {
 | 
			
		||||
        for (cOsdItem *item = First(); item; item = Next(item)) {
 | 
			
		||||
            cSkindesignerOsdItem *sdItem = dynamic_cast<cSkindesignerOsdItem*>(item);
 | 
			
		||||
            if (sdItem)
 | 
			
		||||
                sdItem->SetDisplayMenu(sdDisplayMenu);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    cOsdMenu::Display();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,8 +12,8 @@
 | 
			
		||||
 | 
			
		||||
class cSkindesignerOsdItem : public cOsdItem {
 | 
			
		||||
private:
 | 
			
		||||
	cSDDisplayMenu *sdDisplayMenu;
 | 
			
		||||
	map < string, string > stringTokens;
 | 
			
		||||
    cSDDisplayMenu *sdDisplayMenu;
 | 
			
		||||
    map < string, string > stringTokens;
 | 
			
		||||
    map < string, int > intTokens;
 | 
			
		||||
    map < string, vector< map< string, string > > > loopTokens;
 | 
			
		||||
protected:
 | 
			
		||||
@@ -22,9 +22,9 @@ public:
 | 
			
		||||
    cSkindesignerOsdItem(const char *Text, eOSState State = osUnknown, bool Selectable = true);
 | 
			
		||||
    virtual ~cSkindesignerOsdItem();
 | 
			
		||||
    virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable);
 | 
			
		||||
	void SetDisplayMenu(cSDDisplayMenu *sdDisplayMenu) { this->sdDisplayMenu = sdDisplayMenu; };
 | 
			
		||||
    void SetDisplayMenu(cSDDisplayMenu *sdDisplayMenu) { this->sdDisplayMenu = sdDisplayMenu; };
 | 
			
		||||
    void AddStringToken(string key, string value);
 | 
			
		||||
	void AddIntToken(string key, int value);
 | 
			
		||||
    void AddIntToken(string key, int value);
 | 
			
		||||
    void AddLoopToken(string loopName, map<string, string> &tokens);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -34,16 +34,16 @@ private:
 | 
			
		||||
    bool init;
 | 
			
		||||
    bool displayText;
 | 
			
		||||
    string pluginName;
 | 
			
		||||
	cSDDisplayMenu *sdDisplayMenu;
 | 
			
		||||
    cSDDisplayMenu *sdDisplayMenu;
 | 
			
		||||
    string text;
 | 
			
		||||
    map < string, string > stringTokens;
 | 
			
		||||
    map < string, int > intTokens;
 | 
			
		||||
    map < string, vector< map< string, string > > > loopTokens;
 | 
			
		||||
	bool SetSkinDesignerDisplayMenu(void);
 | 
			
		||||
    bool SetSkinDesignerDisplayMenu(void);
 | 
			
		||||
protected:
 | 
			
		||||
    void ClearTokens(void);
 | 
			
		||||
    void SetPluginName(string name) {pluginName = name; };
 | 
			
		||||
	void SetPluginMenu(int menu, eMenuType type);
 | 
			
		||||
    void SetPluginMenu(int menu, eMenuType type);
 | 
			
		||||
    void SetText(string text) { this->text = text; };
 | 
			
		||||
    void AddStringToken(string key, string value);
 | 
			
		||||
    void AddIntToken(string key, int value);
 | 
			
		||||
 
 | 
			
		||||
@@ -7,17 +7,17 @@
 | 
			
		||||
#include "libskindesigner/skindesignerosdbase.h"
 | 
			
		||||
 | 
			
		||||
enum eMenus {
 | 
			
		||||
	meListMain,
 | 
			
		||||
    meListMain,
 | 
			
		||||
    meListSub,
 | 
			
		||||
	meDetail
 | 
			
		||||
    meDetail
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class cPlugOsdMenu : public cSkindesignerOsdMenu {
 | 
			
		||||
private:
 | 
			
		||||
	void SetMenu(int numItems, bool subfolder = false);
 | 
			
		||||
    void SetMenu(int numItems, bool subfolder = false);
 | 
			
		||||
    void SetDetailView(int element);
 | 
			
		||||
public:
 | 
			
		||||
	cPlugOsdMenu(void);
 | 
			
		||||
    cPlugOsdMenu(void);
 | 
			
		||||
    virtual ~cPlugOsdMenu();
 | 
			
		||||
    virtual eOSState ProcessKey(eKeys key);
 | 
			
		||||
};
 | 
			
		||||
@@ -28,12 +28,12 @@ public:
 | 
			
		||||
//***************************************************************************
 | 
			
		||||
 | 
			
		||||
cPlugOsdMenu::cPlugOsdMenu(void) : cSkindesignerOsdMenu("Skindesigner Client") {
 | 
			
		||||
	SetPluginName("skindesclient");
 | 
			
		||||
	SetMenu(10);
 | 
			
		||||
    SetPluginName("skindesclient");
 | 
			
		||||
    SetMenu(10);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cPlugOsdMenu::~cPlugOsdMenu(void) {
 | 
			
		||||
	
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
eOSState cPlugOsdMenu::ProcessKey(eKeys key) {
 | 
			
		||||
 
 | 
			
		||||
@@ -209,5 +209,5 @@
 | 
			
		||||
            </areascroll>
 | 
			
		||||
        </currentelement>
 | 
			
		||||
    </menuitems>
 | 
			
		||||
</menuschedules>
 | 
			
		||||
 | 
			
		||||
</menuschedules>
 | 
			
		||||
		Reference in New Issue
	
	Block a user