theme.cpp
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:4k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * theme.cpp
  3.  *****************************************************************************
  4.  * Copyright (C) 2003 VideoLAN
  5.  * $Id: theme.cpp 7266 2004-04-03 18:47:12Z ipkiss $
  6.  *
  7.  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
  8.  *          Olivier Teuli鑢e <ipkiss@via.ecp.fr>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  23.  *****************************************************************************/
  24. #include "theme.hpp"
  25. Theme::~Theme()
  26. {
  27.     // Be sure things are destroyed in the right order (XXX check)
  28.     m_layouts.clear();
  29.     m_controls.clear();
  30.     m_windows.clear();
  31.     m_bitmaps.clear();
  32.     m_fonts.clear();
  33.     m_commands.clear();
  34.     m_vars.clear();
  35.     m_curves.clear();
  36. }
  37. void Theme::loadConfig()
  38. {
  39.     msg_Dbg( getIntf(), "Loading theme configuration");
  40.     // Get config from vlcrc file
  41.     char *save = config_GetPsz( getIntf(), "skins2-config" );
  42.     if( save == NULL )
  43.         return;
  44.     // Initialization
  45.     map<string, TopWindowPtr>::const_iterator it;
  46.     int i = 0;
  47.     int x, y, visible, scan;
  48.     // Get config for each window
  49.     for( it = m_windows.begin(); it != m_windows.end(); it++ )
  50.     {
  51.         TopWindow *pWin = (*it).second.get();
  52.         // Get config
  53.         scan = sscanf( &save[i * 13], "(%4d,%4d,%1d)", &x, &y, &visible );
  54.         // If config has the correct number of arguments
  55.         if( scan > 2 )
  56.         {
  57.             m_windowManager.startMove( *pWin );
  58.             m_windowManager.move( *pWin, x, y );
  59.             m_windowManager.stopMove();
  60.             if( visible )
  61.             {
  62.                 m_windowManager.show( *pWin );
  63.             }
  64.         }
  65.         // Next window
  66.         i++;
  67.     }
  68. }
  69. void Theme::saveConfig()
  70. {
  71.     msg_Dbg( getIntf(), "Saving theme configuration");
  72.     // Initialize char where config is stored
  73.     char *save  = new char[400];
  74.     map<string, TopWindowPtr>::const_iterator it;
  75.     int i = 0;
  76.     int x, y;
  77.     // Save config of every window
  78.     for( it = m_windows.begin(); it != m_windows.end(); it++ )
  79.     {
  80.         TopWindow *pWin = (*it).second.get();
  81.         // Print config
  82.         x = pWin->getLeft();
  83.         y = pWin->getTop();
  84.         sprintf( &save[i * 13], "(%4d,%4d,%1d)", x, y,
  85.             pWin->getVisibleVar().get() );
  86.         i++;
  87.     }
  88.     // Save config to file
  89.     config_PutPsz( getIntf(), "skins2-config", save );
  90.     config_SaveConfigFile( getIntf(), "skins2" );
  91.     // Free memory
  92.     delete[] save;
  93. }
  94. // Useful macro
  95. #define FIND_OBJECT( mapData, mapName ) 
  96.     map<string, mapData>::const_iterator it; 
  97.     it = mapName.find( id ); 
  98.     if( it == mapName.end() ) 
  99.     { 
  100.         return NULL; 
  101.     } 
  102.     return (*it).second.get();
  103. GenericBitmap *Theme::getBitmapById( const string &id )
  104. {
  105.     FIND_OBJECT( GenericBitmapPtr, m_bitmaps );
  106. }
  107. GenericFont *Theme::getFontById( const string &id )
  108. {
  109.     FIND_OBJECT( GenericFontPtr, m_fonts );
  110. }
  111. TopWindow *Theme::getWindowById( const string &id )
  112. {
  113.     FIND_OBJECT( TopWindowPtr, m_windows );
  114. }
  115. GenericLayout *Theme::getLayoutById( const string &id )
  116. {
  117.     FIND_OBJECT( GenericLayoutPtr, m_layouts );
  118. }
  119. CtrlGeneric *Theme::getControlById( const string &id )
  120. {
  121.     FIND_OBJECT( CtrlGenericPtr, m_controls );
  122. }