summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2015-06-04 10:57:25 +0200
committerlouis <louis.braun@gmx.de>2015-06-04 10:57:25 +0200
commit664b71daee7b42de2364bbbbf76a40fb9ad5817c (patch)
tree60842cc065ba6a875aae9bc235e9949fb28e10dd
parentd2947bfcfdb16fbb948ef82fd4957e63210f5730 (diff)
downloadvdr-plugin-skindesigner-664b71daee7b42de2364bbbbf76a40fb9ad5817c.tar.gz
vdr-plugin-skindesigner-664b71daee7b42de2364bbbbf76a40fb9ad5817c.tar.bz2
changed skin installation that VDR main loop is not blocked
-rw-r--r--HISTORY4
-rw-r--r--displaymenu.c1
-rw-r--r--libcore/skinrepo.c2
-rw-r--r--po/de_DE.po50
-rw-r--r--po/fi_FI.po36
-rw-r--r--setup.c251
-rw-r--r--setup.h38
7 files changed, 243 insertions, 139 deletions
diff --git a/HISTORY b/HISTORY
index d88b0b3..05f3d5d 100644
--- a/HISTORY
+++ b/HISTORY
@@ -354,3 +354,7 @@ Version 0.5.0
- adapted README
Version 0.5.1
+
+- changed skin installation that VDR main loop is not blocked
+- use shallow clone when cloning git
+
diff --git a/displaymenu.c b/displaymenu.c
index ae461a8..21e8cfe 100644
--- a/displaymenu.c
+++ b/displaymenu.c
@@ -195,6 +195,7 @@ bool cSDDisplayMenu::SetItemPlugin(map<string,string> *stringTokens, map<string,
void cSDDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable) {
if (!doOutput)
return;
+ //esyslog("skindesigner: %s %d - %s", Current ? "----->" : "", Index, Text);
cDisplayMenuListView *list = rootView->GetListView();
if (!list) {
return;
diff --git a/libcore/skinrepo.c b/libcore/skinrepo.c
index 91f22a9..c6943f9 100644
--- a/libcore/skinrepo.c
+++ b/libcore/skinrepo.c
@@ -32,7 +32,7 @@ void cSkinRepo::Install(string path, string themesPath) {
this->themesPath = themesPath;
if (repoType == rtGit) {
- command = *cString::sprintf("git clone --progress %s %s", url.c_str(), skinPath.c_str());
+ command = *cString::sprintf("git clone --depth=1 --progress %s %s", url.c_str(), skinPath.c_str());
tempfile = *cString::sprintf("gitclone_%s_%ld.out", name.c_str(), time(0));
dsyslog("skindesigner: installing skin from Git, command: %s, logfile: %s", command.c_str(), tempfile.c_str());
diff --git a/po/de_DE.po b/po/de_DE.po
index 3cfbb71..a5b7215 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-skindesigner 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2015-05-29 18:13+0200\n"
+"POT-Creation-Date: 2015-06-04 10:40+0200\n"
"PO-Revision-Date: 2014-09-27 11:02+0200\n"
"Last-Translator: Louis Braun <louis.braun@gmx.de>\n"
"Language-Team: \n"
@@ -15,6 +15,30 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+msgid "Skin successfully installed"
+msgstr "Skin installiert"
+
+msgid "Skin NOT successfully installed"
+msgstr "Skin NICHT installiert"
+
+msgid "Timeout"
+msgstr ""
+
+msgid "Installing Skin"
+msgstr ""
+
+msgid "sec"
+msgstr ""
+
+msgid "Skin successfully updated"
+msgstr "Skin erfolgreich aktualisiert"
+
+msgid "Skin already up to date"
+msgstr "Skin ist auf aktuellem Stand"
+
+msgid "Updating Skin from Git"
+msgstr ""
+
msgid "after one another"
msgstr "eines nach dem anderen"
@@ -30,27 +54,9 @@ msgstr "Installiere Skin"
msgid "Update from Git"
msgstr "Aus Git aktualisieren"
-msgid "Installing Skin..."
-msgstr "Installiere Skin..."
-
-msgid "Skin successfully installed"
-msgstr "Skin installiert"
-
-msgid "Skin NOT successfully installed"
-msgstr "Skin NICHT installiert"
-
msgid "No Git Repsoitory available"
msgstr "Kein Git Repository verfügbar"
-msgid "Updating Skin from Git..."
-msgstr "Aktualisiere Skin aus Git..."
-
-msgid "Skin successfully updated"
-msgstr "Skin erfolgreich aktualisiert"
-
-msgid "Skin already up to date"
-msgstr "Skin ist auf aktuellem Stand"
-
msgid "Plugin Setup"
msgstr ""
@@ -137,3 +143,9 @@ msgstr "Unterstützte Plugins"
msgid "Skin Designer"
msgstr "Skin Designer"
+
+#~ msgid "Updating Skin from Git..."
+#~ msgstr "Aktualisiere Skin aus Git..."
+
+#~ msgid "Installing Skin..."
+#~ msgstr "Installiere Skin..."
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 8efee65..2db4d70 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-skindesigner 0.2.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2015-05-29 18:13+0200\n"
+"POT-Creation-Date: 2015-06-04 10:40+0200\n"
"PO-Revision-Date: 2015-01-25 01:25+0200\n"
"Last-Translator: Rolf Ahrenberg\n"
"Language-Team: Finnish\n"
@@ -15,40 +15,46 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-msgid "after one another"
-msgstr "yksi kerrallaan"
+msgid "Skin successfully installed"
+msgstr ""
-msgid "at one go"
-msgstr "kaikki kerralla"
+msgid "Skin NOT successfully installed"
+msgstr ""
-msgid "Downloading Skin Screenshots..."
+msgid "Timeout"
msgstr ""
-msgid "Install Skin"
+msgid "Installing Skin"
msgstr ""
-msgid "Update from Git"
+msgid "sec"
msgstr ""
-msgid "Installing Skin..."
+msgid "Skin successfully updated"
msgstr ""
-msgid "Skin successfully installed"
+msgid "Skin already up to date"
msgstr ""
-msgid "Skin NOT successfully installed"
+msgid "Updating Skin from Git"
msgstr ""
-msgid "No Git Repsoitory available"
+msgid "after one another"
+msgstr "yksi kerrallaan"
+
+msgid "at one go"
+msgstr "kaikki kerralla"
+
+msgid "Downloading Skin Screenshots..."
msgstr ""
-msgid "Updating Skin from Git..."
+msgid "Install Skin"
msgstr ""
-msgid "Skin successfully updated"
+msgid "Update from Git"
msgstr ""
-msgid "Skin already up to date"
+msgid "No Git Repsoitory available"
msgstr ""
msgid "Plugin Setup"
diff --git a/setup.c b/setup.c
index 70b2f5a..bd53a06 100644
--- a/setup.c
+++ b/setup.c
@@ -1,6 +1,122 @@
#include "libcore/curlfuncs.h"
#include "setup.h"
+// --- cInstallManager -----------------------------------------------------------
+cInstallManager::cInstallManager(void) {
+ installing = false;
+ updating = false;
+ runningInst = NULL;
+ installationStart = 0;
+ lastInstallDuration = -1;
+ timeout = 120; //2 Minutes timeout
+ currentSkin = "";
+}
+
+cInstallManager::~cInstallManager(void) {
+}
+
+bool cInstallManager::StartInstallation(string skin) {
+ runningInst = config.GetSkinRepo(skin);
+ if (!runningInst) {
+ return false;
+ }
+ installing = true;
+ installationStart = cTimeMs::Now();
+ runningInst->Install(*config.installerSkinPath, config.vdrThemesPath);
+ return true;
+}
+
+bool cInstallManager::StartUpdate(string skin) {
+ runningInst = config.GetSkinRepo(skin);
+ if (!runningInst || runningInst->Type() != rtGit) {
+ return false;
+ }
+ updating = true;
+ installationStart = cTimeMs::Now();
+ runningInst->Update(*config.installerSkinPath);
+ return true;
+}
+
+bool cInstallManager::Finished(void) {
+ if (!runningInst)
+ return true;
+ if (runningInst->InstallationFinished()) {
+ installing = false;
+ updating = false;
+ return true;
+ }
+ return false;
+}
+
+bool cInstallManager::SuccessfullyInstalled(void) {
+ if (!runningInst)
+ return false;
+ bool ok = runningInst->SuccessfullyInstalled();
+ runningInst = NULL;
+ return ok;
+
+}
+
+bool cInstallManager::SuccessfullyUpdated(void) {
+ if (!runningInst)
+ return false;
+ bool ok = runningInst->SuccessfullyUpdated();
+ runningInst = NULL;
+ return ok;
+}
+
+int cInstallManager::Duration(void) {
+ return (cTimeMs::Now() - installationStart) / 1000;
+}
+
+eOSState cInstallManager::ProcessInstallationStatus(void) {
+ if (Installing()) {
+ if (Finished()) {
+ if (SuccessfullyInstalled()) {
+ config.AddNewSkinRef(currentSkin);
+ Skins.Message(mtStatus, tr("Skin successfully installed"));
+ } else {
+ Skins.Message(mtError, tr("Skin NOT successfully installed"));
+ }
+ cCondWait::SleepMs(1000);
+ return osEnd;
+ } else {
+ int duration = Duration();
+ if (duration > timeout) {
+ Skins.Message(mtError, tr("Timeout"));
+ cCondWait::SleepMs(1000);
+ return osEnd;
+ } else if (duration != lastInstallDuration) {
+ Skins.Message(mtStatus, *cString::sprintf("%s (%d %s)...", tr("Installing Skin"), duration, tr("sec")));
+ lastInstallDuration = duration;
+ }
+ }
+ } else if (Updating()) {
+ if (Finished()) {
+ if (SuccessfullyUpdated()) {
+ Skins.Message(mtStatus, tr("Skin successfully updated"));
+ } else {
+ Skins.Message(mtStatus, tr("Skin already up to date"));
+ }
+ cCondWait::SleepMs(1000);
+ return osEnd;
+ } else {
+ int duration = Duration();
+ if (duration > timeout) {
+ Skins.Message(mtError, tr("Timeout"));
+ cCondWait::SleepMs(1000);
+ return osEnd;
+ } else if (duration != lastInstallDuration) {
+ Skins.Message(mtStatus, *cString::sprintf("%s (%d %s)...", tr("Updating Skin from Git"), duration, tr("sec")));
+ lastInstallDuration = duration;
+ }
+ }
+ }
+ return osContinue;
+}
+
+
+// --- cSkinDesignerSetup -----------------------------------------------------------
cSkinDesignerSetup::cSkinDesignerSetup() {
numLogosPerSizeInitial = config.numLogosPerSizeInitial;
limitLogoCache = config.limitLogoCache;
@@ -16,7 +132,7 @@ cSkinDesignerSetup::cSkinDesignerSetup() {
Setup();
}
-cSkinDesignerSetup::~cSkinDesignerSetup() {
+cSkinDesignerSetup::~cSkinDesignerSetup(void) {
config.setupCloseDoReload = true;
}
@@ -35,11 +151,16 @@ void cSkinDesignerSetup::Setup(void) {
}
eOSState cSkinDesignerSetup::ProcessKey(eKeys Key) {
+ eOSState state = ProcessInstallationStatus();
+ if (state == osEnd)
+ return osEnd;
+
bool hadSubMenu = HasSubMenu();
- eOSState state = cMenuSetupPage::ProcessKey(Key);
+ state = cMenuSetupPage::ProcessKey(Key);
if (hadSubMenu && Key == kOk) {
Store();
}
+
if (!hadSubMenu && (Key == kOk || Key == kUp || Key == kDown || Key == kLeft || Key == kRight || Key == kRed)) {
SetHelp(NULL, NULL, NULL, NULL);
cOsdItem *current = Get(Current());
@@ -47,16 +168,16 @@ eOSState cSkinDesignerSetup::ProcessKey(eKeys Key) {
if (!skinMenuItem)
return state;
eItemType type = skinMenuItem->Type();
- string skinName = skinMenuItem->GetSkinName();
+ currentSkin = skinMenuItem->GetSkinName();
// KEY OK
if ((Key == kOk)) {
if (type == itSkinSetup) {
- state = AddSubMenu(new cSkindesignerSkinSetup(skinName, ""));
+ state = AddSubMenu(new cSkindesignerSkinSetup(currentSkin, ""));
} else if (type == itNoSkinSetup) {
state = osContinue;
} else if (type == itSkinRepo) {
Skins.Message(mtStatus, tr("Downloading Skin Screenshots..."));
- cSkindesignerSkinPreview *prev = new cSkindesignerSkinPreview(skinName);
+ cSkindesignerSkinPreview *prev = new cSkindesignerSkinPreview(currentSkin);
Skins.Message(mtStatus, NULL);
state = AddSubMenu(prev);
}
@@ -66,7 +187,7 @@ eOSState cSkinDesignerSetup::ProcessKey(eKeys Key) {
if (type == itSkinRepo) {
SetHelp(tr("Install Skin"), NULL, NULL, NULL);
} else if (type == itSkinSetup || type == itNoSkinSetup) {
- cSkinRepo *repo = config.GetSkinRepo(skinName);
+ cSkinRepo *repo = config.GetSkinRepo(currentSkin);
if (repo && repo->Type() == rtGit) {
SetHelp(tr("Update from Git"), NULL, NULL, NULL);
}
@@ -75,44 +196,14 @@ eOSState cSkinDesignerSetup::ProcessKey(eKeys Key) {
// KEY RED
if (Key == kRed) {
if (type == itSkinRepo) {
- Skins.Message(mtStatus, tr("Installing Skin..."));
- cSkinRepo *skinRepo = config.GetSkinRepo(skinName);
- if (!skinRepo) {
- return state;
- }
- skinRepo->Install(*config.installerSkinPath, config.vdrThemesPath);
- while (!skinRepo->InstallationFinished()) {
- cCondWait::SleepMs(50);
- }
- bool ok = skinRepo->SuccessfullyInstalled();
- if (ok) {
- config.AddNewSkinRef(skinName);
- Skins.Message(mtStatus, tr("Skin successfully installed"));
- cCondWait::SleepMs(1000);
- state = osEnd;
- } else {
- Skins.Message(mtStatus, tr("Skin NOT successfully installed"));
- state = osContinue;
- }
+ Skins.Message(mtStatus, *cString::sprintf("%s ...", tr("Installing Skin")));
+ StartInstallation(currentSkin);
} else if (type == itSkinSetup || type == itNoSkinSetup) {
- cSkinRepo *skinRepo = config.GetSkinRepo(skinName);
- if (!skinRepo || skinRepo->Type() != rtGit) {
- Skins.Message(mtStatus, tr("No Git Repsoitory available"));
- return state;
- }
- Skins.Message(mtStatus, tr("Updating Skin from Git..."));
- skinRepo->Update(*config.installerSkinPath);
- while (!skinRepo->InstallationFinished()) {
- cCondWait::SleepMs(50);
- }
- bool ok = skinRepo->SuccessfullyUpdated();
- if (ok) {
- Skins.Message(mtStatus, tr("Skin successfully updated"));
- cCondWait::SleepMs(1000);
- state = osEnd;
+ bool gitAvailable = StartUpdate(currentSkin);
+ if (gitAvailable) {
+ Skins.Message(mtStatus, *cString::sprintf("%s ...", tr("Updating Skin from Git")));
} else {
- Skins.Message(mtStatus, tr("Skin already up to date"));
- state = osContinue;
+ Skins.Message(mtStatus, tr("No Git Repsoitory available"));
}
}
}
@@ -261,7 +352,10 @@ cSkindesignerSkinSetup::~cSkindesignerSkinSetup() {
}
eOSState cSkindesignerSkinSetup::ProcessKey(eKeys Key) {
- eOSState state = cOsdMenu::ProcessKey(Key);
+ eOSState state = ProcessInstallationStatus();
+ if (state == osEnd)
+ return osEnd;
+ state = cOsdMenu::ProcessKey(Key);
if (state == osUnknown) {
switch (Key) {
case kOk: {
@@ -275,24 +369,11 @@ eOSState cSkindesignerSkinSetup::ProcessKey(eKeys Key) {
}
}
case kRed: {
- cSkinRepo *skinRepo = config.GetSkinRepo(skin);
- if (!skinRepo) {
- Skins.Message(mtStatus, tr("No Git Repsoitory available"));
- return state;
- }
- Skins.Message(mtStatus, tr("Updating Skin from Git..."));
- skinRepo->Update(*config.installerSkinPath);
- while (!skinRepo->InstallationFinished()) {
- cCondWait::SleepMs(50);
- }
- bool ok = skinRepo->SuccessfullyUpdated();
- if (ok) {
- Skins.Message(mtStatus, tr("Skin successfully updated"));
- cCondWait::SleepMs(1000);
- state = osEnd;
+ bool gitAvailable = StartUpdate(skin);
+ if (gitAvailable) {
+ Skins.Message(mtStatus, *cString::sprintf("%s ...", tr("Updating Skin from Git")));
} else {
- Skins.Message(mtStatus, tr("Skin already up to date"));
- state = osContinue;
+ Skins.Message(mtStatus, tr("No Git Repsoitory available"));
}
}
default:
@@ -334,7 +415,7 @@ void cSkindesignerSkinSetup::Set(void) {
cSkindesignerSkinPreview::cSkindesignerSkinPreview(string skinName) :
cSkindesignerOsdMenu(*cString::sprintf("%s: %s \"%s\"", trVDR("Preview"), tr("Skin"), skinName.c_str())) {
- this->skinName = skinName;
+ currentSkin = skinName;
SetPluginName("setup");
FirstCallCleared();
Set();
@@ -344,7 +425,10 @@ cSkindesignerSkinPreview::~cSkindesignerSkinPreview() {
}
eOSState cSkindesignerSkinPreview::ProcessKey(eKeys Key) {
- eOSState state = cOsdMenu::ProcessKey(Key);
+ eOSState state = ProcessInstallationStatus();
+ if (state == osEnd)
+ return osEnd;
+ state = cOsdMenu::ProcessKey(Key);
switch (Key) {
case kOk:
case kBack:
@@ -367,14 +451,8 @@ eOSState cSkindesignerSkinPreview::ProcessKey(eKeys Key) {
state = osContinue;
break;
} case kRed: {
- Skins.Message(mtStatus, tr("Installing Skin..."));
- bool ok = InstallSkin();
- if (ok)
- Skins.Message(mtStatus, tr("Skin successfully installed"));
- else
- Skins.Message(mtStatus, tr("Skin NOT successfully installed"));
- cCondWait::SleepMs(1000);
- state = osEnd;
+ StartInstallation(currentSkin);
+ state = osContinue;
break;
} default:
break;
@@ -384,7 +462,7 @@ eOSState cSkindesignerSkinPreview::ProcessKey(eKeys Key) {
void cSkindesignerSkinPreview::Display(void) {
SetHelp(tr("Install Skin"), NULL, NULL, NULL);
- skindesignerapi::cSkindesignerOsdMenu::Display();
+ skindesignerapi::cSkindesignerOsdMenu::Display();
}
void cSkindesignerSkinPreview::Set(void) {
@@ -392,18 +470,18 @@ void cSkindesignerSkinPreview::Set(void) {
ClearTokens();
Clear();
- cSkinRepo *skinRepo = config.GetSkinRepo(skinName);
+ cSkinRepo *skinRepo = config.GetSkinRepo(currentSkin);
if (!skinRepo) {
- esyslog("skindesigner: no valid skin repository found for skin %s", skinName.c_str());
+ esyslog("skindesigner: no valid skin repository found for skin %s", currentSkin.c_str());
return;
}
- AddStringToken("menuheader", *cString::sprintf("%s: %s \"%s\"", trVDR("Preview"), tr("Skin"), skinName.c_str()));
- AddStringToken("skinname", skinName);
+ AddStringToken("menuheader", *cString::sprintf("%s: %s \"%s\"", trVDR("Preview"), tr("Skin"), currentSkin.c_str()));
+ AddStringToken("skinname", currentSkin);
AddStringToken("author", skinRepo->Author());
-
+
stringstream plainText;
- plainText << *cString::sprintf("%s: %s \"%s\"", trVDR("Preview"), tr("Skin"), skinName.c_str()) << "\n\n";
+ plainText << *cString::sprintf("%s: %s \"%s\"", trVDR("Preview"), tr("Skin"), currentSkin.c_str()) << "\n\n";
plainText << tr("Author") << ": " << skinRepo->Author() << "\n";
plainText << tr("Used Fonts") << ": \n";
@@ -435,7 +513,7 @@ void cSkindesignerSkinPreview::Set(void) {
if (url.find(".png") != string::npos)
imgType = ".png";
stringstream tempName;
- tempName << "/tmp/screenshot_" << skinName << "_" << i++ << imgType;
+ tempName << "/tmp/screenshot_" << currentSkin << "_" << i++ << imgType;
dsyslog("skindesigner: download screenshot name %s url %s", tempName.str().c_str(), url.c_str());
CurlGetUrlFile(url.c_str(), tempName.str().c_str());
map<string,string> img;
@@ -445,23 +523,6 @@ void cSkindesignerSkinPreview::Set(void) {
}
}
-bool cSkindesignerSkinPreview::InstallSkin(void) {
- cSkinRepo *skinRepo = config.GetSkinRepo(skinName);
- if (!skinRepo) {
- esyslog("skindesigner: no valid skin repository found for skin %s", skinName.c_str());
- return false;
- }
- skinRepo->Install(*config.installerSkinPath, config.vdrThemesPath);
- while (!skinRepo->InstallationFinished()) {
- cCondWait::SleepMs(50);
- }
- bool ok = skinRepo->SuccessfullyInstalled();
- if (ok) {
- config.AddNewSkinRef(skinName);
- }
- return ok;
-}
-
string cSkindesignerSkinPreview::CheckFontInstalled(string fontName) {
if (fontManager->FontInstalled(fontName))
return "1";
diff --git a/setup.h b/setup.h
index 73cbee4..d35993a 100644
--- a/setup.h
+++ b/setup.h
@@ -10,9 +10,33 @@ enum eItemType {
itSkinRepo
};
-// --- cSkinDesignerSetup -----------------------------------------------------------
+// --- cInstallManager -----------------------------------------------------------
+class cInstallManager {
+private:
+ uint64_t installationStart;
+ int lastInstallDuration;
+ int timeout;
+ bool installing;
+ bool updating;
+ cSkinRepo *runningInst;
+protected:
+ string currentSkin;
+ bool StartInstallation(string skin);
+ bool StartUpdate(string skin);
+ bool Installing(void) { return installing; };
+ bool Updating(void) { return updating; };
+ bool Finished(void);
+ bool SuccessfullyInstalled(void);
+ bool SuccessfullyUpdated(void);
+ int Duration(void);
+ eOSState ProcessInstallationStatus(void);
+public:
+ cInstallManager(void);
+ virtual ~cInstallManager(void);
+};
-class cSkinDesignerSetup : public cMenuSetupPage {
+// --- cSkinDesignerSetup -----------------------------------------------------------
+class cSkinDesignerSetup : public cMenuSetupPage, cInstallManager {
private:
int numLogosPerSizeInitial;
int limitLogoCache;
@@ -24,7 +48,6 @@ private:
int blockFlush;
int framesPerSecond;
const char *menuDisplayStyle[2];
-
void Setup(void);
virtual void Store(void);
virtual eOSState ProcessKey(eKeys Key);
@@ -35,7 +58,7 @@ private:
void InstallSkins(void);
public:
cSkinDesignerSetup(void);
- virtual ~cSkinDesignerSetup();
+ virtual ~cSkinDesignerSetup(void);
};
// --- cSkinMenuItem -----------------------------------------------------------
@@ -64,7 +87,7 @@ public:
// --- cSkindesignerSkinSetup -----------------------------------------------------------
-class cSkindesignerSkinSetup : public cOsdMenu {
+class cSkindesignerSkinSetup : public cOsdMenu, cInstallManager {
private:
string skin;
string name;
@@ -78,13 +101,10 @@ public:
// --- cSkindesignerSkinPreview -----------------------------------------------------------
-class cSkindesignerSkinPreview : public skindesignerapi::cSkindesignerOsdMenu {
-private:
- string skinName;
+class cSkindesignerSkinPreview : public skindesignerapi::cSkindesignerOsdMenu, cInstallManager {
protected:
virtual eOSState ProcessKey(eKeys Key);
void Set(void);
- bool InstallSkin(void);
string CheckFontInstalled(string fontName);
public:
cSkindesignerSkinPreview(string skin);