⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 theme.cpp

📁 FreeAMP(MP3播放)程序源代码-用来研究MP3解码
💻 CPP
📖 第 1 页 / 共 5 页
字号:

       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 + -