📄 theme.cpp
字号:
if (oAttrMap.find("Name") != oAttrMap.end())
m_oThemeName = oAttrMap["Name"];
if (oAttrMap.find("Author") != oAttrMap.end())
m_oThemeAuthor = oAttrMap["Author"];
if (oAttrMap.find("EMail") != oAttrMap.end())
m_oAuthorEMail = oAttrMap["EMail"];
if (oAttrMap.find("WebPage") != oAttrMap.end())
m_oAuthorWebPage = oAttrMap["WebPage"];
if (oAttrMap.find("Misc") != oAttrMap.end())
m_oMiscInfo = oAttrMap["Misc"];
return kError_NoErr;
}
if (oElement == string("Headlines"))
{
string oURLPath;
if (m_pCurrentWindow)
{
m_oLastError = string("A <Headlines> tag must be outside any <Window> tags.");
return kError_InvalidParam;
}
if (m_pParsedHeadlines)
{
m_oLastError = string("Each theme file can only have one <Headlines> tag.");
return kError_InvalidParam;
}
if (oAttrMap.find("URL") == oAttrMap.end())
{
m_oLastError = string("the <Headlines> tag needs a URL attribute");
return kError_ParseError;
}
if (oAttrMap.find("XMLPath") == oAttrMap.end())
{
m_oLastError = string("the <Headlines> tag needs a XMLPath attribute");
return kError_ParseError;
}
if (oAttrMap.find("XMLURLPath") != oAttrMap.end())
oURLPath = oAttrMap["XMLURLPath"];
if (oAttrMap.find("DownloadInterval") == oAttrMap.end())
{
m_oLastError = string("the <Headlines> tag needs a DownloadInterval attribute");
return kError_ParseError;
}
if (oAttrMap.find("ChangeInterval") == oAttrMap.end())
{
m_oLastError = string("the <Headlines> tag needs a ChangeInterval attribute");
return kError_ParseError;
}
m_pParsedHeadlines = new HeadlineInfo(oAttrMap["URL"],
oAttrMap["XMLPath"],
oURLPath,
atoi(oAttrMap["DownloadInterval"].c_str()),
atoi(oAttrMap["ChangeInterval"].c_str()));
return kError_NoErr;
}
return kError_NoErr;
}
Error Theme::EndElement(string &oElement)
{
if (oElement == string("Bitmap") ||
oElement == string("BackgroundBitmap") ||
oElement == string("TogglePanel") ||
oElement == string("Font") ||
oElement == string("ChangeWindow") ||
oElement == string("ThemeInfo") ||
oElement == string("Headlines") ||
oElement == string("MaskBitmap"))
return kError_NoErr;
if (oElement == string("Controls"))
{
if (m_pCurrentWindow == NULL)
{
m_oLastError = string("The <Controls> tag must be inside a "
"<Window> tag");
return kError_InvalidParam;
}
return kError_NoErr;
}
if (oElement == string("Action") ||
oElement == string("Position") ||
oElement == string("Style") ||
oElement == string("Info") ||
oElement == string("ControlBitmap") ||
oElement == string("ControlStateBitmap") ||
oElement == string("SliderTroughBitmap") ||
oElement == string("ActivationBitmap") ||
oElement == string("FontMap") ||
oElement == string("PartName"))
{
if (m_pCurrentControl == NULL)
{
m_oLastError = string("The <") +
oElement.c_str()+
string("> tag must be inside a <XXXXControl>");
return kError_InvalidParam;
}
return kError_NoErr;
}
if (oElement == string("ButtonControl") ||
oElement == string("DialControl") ||
oElement == string("SliderControl") ||
oElement == string("VSliderControl") ||
oElement == string("MultiStateControl") ||
oElement == string("TextControl") ||
oElement == string("PixmapFontControl") ||
oElement == string("PixSliderControl"))
{
if (!m_bPosDefined)
{
m_oLastError = string("The Control is missing the <Position> tag");
return kError_InvalidParam;
}
if (!m_bBitmapDefined && m_eCurrentControl != eTextControl)
{
m_oLastError = string("The Control is missing the <ControlBitmap> tag");
return kError_InvalidParam;
}
if (!m_bInfoDefined && (m_eCurrentControl != eTextControl &&
m_eCurrentControl != ePixFontControl))
{
m_oLastError = string("The Control is missing the <Info> tag");
return kError_InvalidParam;
}
if (m_eCurrentControl == eTextControl)
{
if (!((TextControl *)m_pCurrentControl)->StyleHasBeenSet())
{
m_oLastError = "A <TextControl> needs to define a <Style> tag";
return kError_InvalidParam;
}
}
// fix lameass broken CocaCola themes... someone didn't read the theme
// HOWTO
if (m_pCurrentPanel == NULL)
{
m_pCurrentPanel = new Panel("DummyPanel");
m_pCurrentPanel->SetParentWindow(m_pCurrentWindow);
}
m_pCurrentPanel->AddControl(m_pCurrentControl);
m_pCurrentControl = NULL;
m_eCurrentControl = eUndefinedControl;
return kError_NoErr;
}
if (oElement == string("Window"))
{
vector<Panel *>::iterator i;
if (!m_pParsedWindows)
m_pParsedWindows = new vector<Window *>;
if (m_pCurrentPanel)
{
m_oPanels.push_back(m_pCurrentPanel);
m_pCurrentWindow->AddPanel(m_pCurrentPanel);
m_pCurrentPanel = NULL;
}
m_pParsedWindows->push_back(m_pCurrentWindow);
m_oPanels.clear();
m_pCurrentWindow = NULL;
for(i = m_oPanels.begin(); i != m_oPanels.end(); i++)
{
if ((*i)->GetParentWindow() == NULL)
{
string oName;
(*i)->GetName(oName);
m_oLastError = string("Panel ") + oName +
string(" was referenced but never defined");
return kError_InvalidParam;
}
}
return kError_NoErr;
}
if (oElement == string("Panel"))
{
m_oPanels.push_back(m_pCurrentPanel);
m_pCurrentWindow->AddPanel(m_pCurrentPanel);
m_pCurrentPanel = NULL;
return kError_NoErr;
}
if (oElement == string("PixmapTimeControl"))
{
m_pCurrentPanel->AddControl(m_pCurrentControl);
m_pCurrentControl = NULL;
m_eCurrentControl = eUndefinedControl;
return kError_NoErr;
}
return kError_NoErr;
}
Error Theme::PCData(string &oData)
{
m_oLastError = string("Invalid character data: ") + oData;
return kError_InvalidParam;
}
Bitmap *Theme::FindBitmap(string &oName)
{
vector<Bitmap *>::iterator i;
string oTemp;
if (!m_pParsedBitmaps)
return NULL;
for(i = m_pParsedBitmaps->begin(); i != m_pParsedBitmaps->end(); i++)
{
(*i)->GetName(oTemp);
if (oTemp == oName)
return *i;
}
return NULL;
}
Panel *Theme::FindPanel(string &oName)
{
vector<Panel *>::iterator i;
string oTemp;
Panel *pTemp;
if (m_pCurrentPanel)
{
m_pCurrentPanel->GetName(oTemp);
if (oTemp == oName)
return m_pCurrentPanel;
}
for(i = m_oPanels.begin(); i != m_oPanels.end(); i++)
{
(*i)->GetName(oTemp);
if (oTemp == oName)
return *i;
}
// No panels found. Lets assume that this is a forward reference.
pTemp = new Panel(oName);
m_oPanels.push_back(pTemp);
return pTemp;
}
Font *Theme::FindFont(string &oName)
{
vector<Font *>::iterator i;
string oTemp;
if (!m_pParsedFonts)
return NULL;
for(i = m_pParsedFonts->begin(); i != m_pParsedFonts->end(); i++)
{
(*i)->GetName(oTemp);
if (oTemp == oName)
return *i;
}
return NULL;
}
Error Theme::ParseState(string &oStatestring, ControlStateEnum &eState)
{
Error ret = kError_NoErr;;
if (!strcmp("Normal", oStatestring.c_str()))
eState = CS_Normal;
else if (!strcmp("MouseOver", oStatestring.c_str()))
eState = CS_MouseOver;
else if (!strcmp("Pressed", oStatestring.c_str()))
eState = CS_Pressed;
else if (!strcmp("DisabledMouseOver", oStatestring.c_str()))
eState = CS_DisabledMO;
else if (!strcmp("Disabled", oStatestring.c_str()))
eState = CS_Disabled;
else if (!strcmp("Dragging", oStatestring.c_str()))
eState = CS_Dragging;
else if (!strcmp("HiddenMouseOver", oStatestring.c_str()))
eState = CS_HiddenMO;
else if (!strcmp("Hidden", oStatestring.c_str()))
eState = CS_Hidden;
else
ret = kError_InvalidParam;
return ret;
}
Error Theme::ParseRect(string &oRectstring, Rect &oRect)
{
int iRet;
iRet = sscanf(oRectstring.c_str(), " %d , %d , %d , %d",
&oRect.x1, &oRect.y1, &oRect.x2, &oRect.y2);
return (iRet == 4) ? kError_NoErr : kError_InvalidParam;
}
Error Theme::ParseColor(string &oColorstring, Color &oColor)
{
int iRet;
int iRed, iGreen, iBlue;
iRet = sscanf(oColorstring.c_str(), "#%02X%02X%02X",
&iRed, &iGreen, &iBlue);
if (iRet == 3)
{
oColor.red = iRed;
oColor.green = iGreen;
oColor.blue = iBlue;
return kError_NoErr;
}
return kError_InvalidParam;
}
Error Theme::ParsePos(string &oPosstring, Pos &oPos)
{
int iRet;
iRet = sscanf(oPosstring.c_str(), " %d , %d", &oPos.x, &oPos.y);
return (iRet == 2) ? kError_NoErr : kError_InvalidParam;
}
void Theme::SetDefaultFont(const string &oFont)
{
m_oDefaultFont = oFont;
}
void Theme::PostWindowCreate(void)
{
}
void Theme::ShowThemeCredits(void)
{
string oText;
if (m_bCreditsShown)
{
m_bCreditsShown = false;
m_pWindow->ControlStringValue("Title", true, m_oSavedText);
return;
}
m_pWindow->ControlStringValue("Title", false, m_oSavedText);
if (m_oThemeName.size() > 0)
{
oText = m_oThemeName;
if (m_oThemeAuthor.size() > 0)
oText += string(" written by ") + m_oThemeAuthor;
if (m_oAuthorEMail.size() > 0)
oText += string(", ") + m_oAuthorEMail;
if (m_oAuthorWebPage.size() > 0)
oText += string(" (") + m_oAuthorWebPage + string(")");
if (m_oAuthorWebPage.size() > 0)
oText += string(" ") + m_oMiscInfo + string(" ");
}
else
oText = "<No theme credit info available>";
m_pWindow->ControlStringValue("Title", true, oText);
m_bCreditsShown = true;
}
void Theme::ConvertForeignFormat(string &oDir)
{
m_pForeignThemes->TryToConvert(oDir);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -