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

📄 skin_parser.cpp

📁 uclinux 下的vlc播放器源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * skin_parser.cpp ***************************************************************************** * Copyright (C) 2004 the VideoLAN team * $Id: skin_parser.cpp 17550 2006-11-08 19:21:58Z ipkiss $ * * Authors: Cyril Deguet     <asmax@via.ecp.fr> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/#include "skin_parser.hpp"#include "../src/os_factory.hpp"#include "interpreter.hpp"#include <math.h>SkinParser::SkinParser( intf_thread_t *pIntf, const string &rFileName,                        const string &rPath, bool useDTD, BuilderData *pData ):    XMLParser( pIntf, rFileName, useDTD ), m_path( rPath), m_pData(pData),    m_ownData(pData == NULL), m_xOffset( 0 ), m_yOffset( 0 ){    // Make sure the data is allocated    if( m_pData == NULL )    {        m_pData = new BuilderData();    }}SkinParser::~SkinParser(){    if( m_ownData )    {        delete m_pData;    }}void SkinParser::handleBeginElement( const string &rName, AttrList_t &attr ){#define CheckDefault( a, b ) \    if( attr.find(a) == attr.end() ) attr[strdup(a)] = strdup(b);#define RequireDefault( a ) \    if( attr.find(a) == attr.end() ) \    { \        msg_Err( getIntf(), "bad theme (element: %s, missing attribute: %s)", \                 rName.c_str(), a ); \        m_errors = true; return; \    }    if( rName == "Include" )    {        RequireDefault( "file" );        OSFactory *pFactory = OSFactory::instance( getIntf() );        string fullPath = m_path + pFactory->getDirSeparator() + attr["file"];        msg_Dbg( getIntf(), "opening included XML file: %s", fullPath.c_str() );        // FIXME: We do not use the DTD to validate the included XML file,        // as the parser seems to dislike it otherwise...        SkinParser subParser( getIntf(), fullPath.c_str(), false, m_pData );        subParser.parse();    }    else if( rName == "IniFile" )    {        RequireDefault( "id" );        RequireDefault( "file" );        const BuilderData::IniFile iniFile( uniqueId( attr["id"] ),                attr["file"] );        m_pData->m_listIniFile.push_back( iniFile );    }    else if( rName == "Anchor" )    {        RequireDefault( "priority" );        CheckDefault( "x", "0" );        CheckDefault( "y", "0" );        CheckDefault( "lefttop", "lefttop" );        CheckDefault( "points", "(0,0)" );        CheckDefault( "range", "10" );        const BuilderData::Anchor anchor( atoi( attr["x"] ) + m_xOffset,                atoi( attr["y"] ) + m_yOffset, attr["lefttop"],                atoi( attr["range"] ), atoi( attr["priority"] ),                attr["points"], m_curLayoutId );        m_pData->m_listAnchor.push_back( anchor );    }    else if( rName == "Bitmap" )    {        RequireDefault( "id" );        RequireDefault( "file" );        RequireDefault( "alphacolor" );        CheckDefault( "nbframes", "1" );        CheckDefault( "fps", "4" );        m_curBitmapId = uniqueId( attr["id"] );        const BuilderData::Bitmap bitmap( m_curBitmapId,                attr["file"], convertColor( attr["alphacolor"] ),                atoi( attr["nbframes"] ), atoi( attr["fps"] ) );        m_pData->m_listBitmap.push_back( bitmap );    }    else if( rName == "SubBitmap" )    {        RequireDefault( "id" );        RequireDefault( "x" );        RequireDefault( "y" );        RequireDefault( "width" );        RequireDefault( "height" );        CheckDefault( "nbframes", "1" );        CheckDefault( "fps", "4" );        const BuilderData::SubBitmap bitmap( uniqueId( attr["id"] ),                m_curBitmapId, atoi( attr["x"] ), atoi( attr["y"] ),                atoi( attr["width"] ), atoi( attr["height"] ),                atoi( attr["nbframes"] ), atoi( attr["fps"] ) );        m_pData->m_listSubBitmap.push_back( bitmap );    }    else if( rName == "BitmapFont" )    {        RequireDefault( "id" );        RequireDefault( "file" );        CheckDefault( "type", "digits" );        const BuilderData::BitmapFont font( uniqueId( attr["id"] ),                attr["file"], attr["type"] );        m_pData->m_listBitmapFont.push_back( font );    }    else if( rName == "PopupMenu" )    {        RequireDefault( "id" );        m_popupPosList.push_back(0);        m_curPopupId = uniqueId( attr["id"] );        const BuilderData::PopupMenu popup( m_curPopupId );        m_pData->m_listPopupMenu.push_back( popup );    }    else if( rName == "MenuItem" )    {        RequireDefault( "label" );        CheckDefault( "action", "none" );        const BuilderData::MenuItem item( attr["label"], attr["action"],                                          m_popupPosList.back(),                                          m_curPopupId );        m_pData->m_listMenuItem.push_back( item );        m_popupPosList.back()++;    }    else if( rName == "MenuSeparator" )    {        const BuilderData::MenuSeparator sep( m_popupPosList.back(),                                              m_curPopupId );        m_pData->m_listMenuSeparator.push_back( sep );        m_popupPosList.back()++;    }    else if( rName == "Button" )    {        RequireDefault( "up" );        CheckDefault( "id", "none" );        CheckDefault( "visible", "true" );        CheckDefault( "x", "0" );        CheckDefault( "y", "0" );        CheckDefault( "lefttop", "lefttop" );        CheckDefault( "rightbottom", "lefttop" );        CheckDefault( "xkeepratio", "false" );        CheckDefault( "ykeepratio", "false" );        CheckDefault( "down", "none" );        CheckDefault( "over", "none" );        CheckDefault( "action", "none" );        CheckDefault( "tooltiptext", "" );        CheckDefault( "help", "" );        const BuilderData::Button button( uniqueId( attr["id"] ),                atoi( attr["x"] ) + m_xOffset, atoi( attr["y"] ) + m_yOffset,                attr["lefttop"], attr["rightbottom"],                convertBoolean( attr["xkeepratio"] ),                convertBoolean( attr["ykeepratio"] ), attr["visible"],                attr["up"], attr["down"], attr["over"], attr["action"],                attr["tooltiptext"], attr["help"],                m_curLayer, m_curWindowId, m_curLayoutId );        m_curLayer++;        m_pData->m_listButton.push_back( button );    }    else if( rName == "Checkbox" )    {        RequireDefault( "up1" );        RequireDefault( "up2" );        RequireDefault( "state" );        CheckDefault( "id", "none" );        CheckDefault( "visible", "true" );        CheckDefault( "x", "0" );        CheckDefault( "y", "0" );        CheckDefault( "lefttop", "lefttop" );        CheckDefault( "rightbottom", "lefttop" );        CheckDefault( "xkeepratio", "false" );        CheckDefault( "ykeepratio", "false" );        CheckDefault( "down1", "none" );        CheckDefault( "over1", "none" );        CheckDefault( "down2", "none" );        CheckDefault( "over2", "none" );        CheckDefault( "action1", "none" );        CheckDefault( "action2", "none" );        CheckDefault( "tooltiptext1", "" );        CheckDefault( "tooltiptext2", "" );        CheckDefault( "help", "" );        const BuilderData::Checkbox checkbox( uniqueId( attr["id"] ),                atoi( attr["x"] ) + m_xOffset, atoi( attr["y"] ) + m_yOffset,                attr["lefttop"], attr["rightbottom"],                convertBoolean( attr["xkeepratio"] ),                convertBoolean( attr["ykeepratio"] ), attr["visible"],                attr["up1"], attr["down1"], attr["over1"],                attr["up2"], attr["down2"], attr["over2"], attr["state"],                attr["action1"], attr["action2"], attr["tooltiptext1"],                attr["tooltiptext2"], attr["help"], m_curLayer, m_curWindowId,                m_curLayoutId );        m_curLayer++;        m_pData->m_listCheckbox.push_back( checkbox );    }    else if( rName == "Font" )    {        RequireDefault( "id" );        RequireDefault( "file" );        CheckDefault( "size", "12" );        const BuilderData::Font fontData( uniqueId( attr["id"] ),                attr["file"], atoi( attr["size"] ) );        m_pData->m_listFont.push_back( fontData );    }    else if( rName == "Group" )    {        CheckDefault( "x", "0" );        CheckDefault( "y", "0" );        m_xOffset += atoi( attr["x"] );        m_yOffset += atoi( attr["y"] );        m_xOffsetList.push_back( atoi( attr["x"] ) );        m_yOffsetList.push_back( atoi( attr["y"] ) );    }    else if( rName == "Image" )    {        RequireDefault( "image" );        CheckDefault( "id", "none" );        CheckDefault( "visible", "true" );        CheckDefault( "x", "0" );        CheckDefault( "y", "0" );        CheckDefault( "lefttop", "lefttop" );        CheckDefault( "rightbottom", "lefttop" );        CheckDefault( "xkeepratio", "false" );        CheckDefault( "ykeepratio", "false" );        CheckDefault( "action", "none" );        CheckDefault( "action2", "none" );        CheckDefault( "resize", "mosaic" );        CheckDefault( "help", "" );        const BuilderData::Image imageData( uniqueId( attr["id"] ),                atoi( attr["x"] ) + m_xOffset, atoi( attr["y"] ) + m_yOffset,                attr["lefttop"], attr["rightbottom"],                convertBoolean( attr["xkeepratio"] ),                convertBoolean( attr["ykeepratio"] ), attr["visible"],                attr["image"], attr["action"], attr["action2"], attr["resize"],                attr["help"], m_curLayer, m_curWindowId, m_curLayoutId );        m_curLayer++;        m_pData->m_listImage.push_back( imageData );    }    else if( rName == "Layout" )    {        RequireDefault( "width" );        RequireDefault( "height" );        CheckDefault( "id", "none" );        CheckDefault( "minwidth", "-1" );        CheckDefault( "maxwidth", "-1" );        CheckDefault( "minheight", "-1" );        CheckDefault( "maxheight", "-1" );        m_curLayoutId = uniqueId( attr["id"] );        const BuilderData::Layout layout( m_curLayoutId, atoi( attr["width"] ),                atoi( attr["height"] ), atoi( attr["minwidth"] ),                atoi( attr["maxwidth"] ), atoi( attr["minheight"] ),                atoi( attr["maxheight"] ), m_curWindowId );        m_pData->m_listLayout.push_back( layout );        m_curLayer = 0;    }    else if( rName == "Playlist" )    {        RequireDefault( "id" );        RequireDefault( "font" );        CheckDefault( "visible", "true" );        CheckDefault( "flat", "true" ); // only difference here        CheckDefault( "x", "0" );        CheckDefault( "y", "0" );        CheckDefault( "width", "0" );        CheckDefault( "height", "0" );        CheckDefault( "lefttop", "lefttop" );        CheckDefault( "rightbottom", "lefttop" );        CheckDefault( "xkeepratio", "false" );        CheckDefault( "ykeepratio", "false" );        CheckDefault( "bgimage", "none" );        CheckDefault( "itemimage", "none" );        CheckDefault( "openimage", "none" );        CheckDefault( "closedimage", "none" );        CheckDefault( "fgcolor", "#000000" );        CheckDefault( "playcolor", "#FF0000" );        CheckDefault( "bgcolor1", "#FFFFFF" );        CheckDefault( "bgcolor2", "#FFFFFF" );        CheckDefault( "selcolor", "#0000FF" );        CheckDefault( "help", "" );        m_curListId = uniqueId( attr["id"] );        const BuilderData::Tree treeData( m_curListId, atoi( attr["x"] ) +                m_xOffset, atoi( attr["y"] ) + m_yOffset, attr["visible"],                attr["flat"],                atoi( attr["width"]), atoi( attr["height"] ),                attr["lefttop"], attr["rightbottom"],                convertBoolean( attr["xkeepratio"] ),                convertBoolean( attr["ykeepratio"] ),                attr["font"], "playtree",                attr["bgimage"], attr["itemimage"],                attr["openimage"], attr["closedimage"],                attr["fgcolor"],                attr["playcolor"],                attr["bgcolor1"],                attr["bgcolor2"],                attr["selcolor"], attr["help"],                m_curLayer, m_curWindowId, m_curLayoutId );        m_curLayer++;        m_pData->m_listTree.push_back( treeData );    }    else if( rName == "Playtree" )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -