theme.cpp 3.96 KB
Newer Older
1 2 3 4
/*****************************************************************************
 * theme.cpp
 *****************************************************************************
 * Copyright (C) 2003 VideoLAN
5
 * $Id$
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
 *
 * Authors: Cyril Deguet     <asmax@via.ecp.fr>
 *          Olivier Teulire <ipkiss@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., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
 *****************************************************************************/

#include "theme.hpp"


Theme::~Theme()
{
    // Be sure things are destroyed in the right order (XXX check)
    m_layouts.clear();
    m_controls.clear();
    m_windows.clear();
    m_bitmaps.clear();
    m_fonts.clear();
    m_commands.clear();
    m_vars.clear();
38
    m_curves.clear();
39 40 41
}


42 43 44 45 46
void Theme::loadConfig()
{
    msg_Dbg( getIntf(), "Loading theme configuration");

    // Get config from vlcrc file
gbazin's avatar
 
gbazin committed
47
    char *save = config_GetPsz( getIntf(), "skins2-config" );
48
    if( !save ) return;
49

50 51 52 53 54 55 56 57
    // Is there an existing config?
    if( !strcmp( save, "" ) )
    {
        // Show the windows
        m_windowManager.showAll();
        return;
    }

58
    // Initialization
59
    map<string, TopWindowPtr>::const_iterator it;
60
    int i = 0;
61
    int x, y, visible, scan;
62 63 64 65

    // Get config for each window
    for( it = m_windows.begin(); it != m_windows.end(); it++ )
    {
66
        TopWindow *pWin = (*it).second.get();
67
        // Get config
68
        scan = sscanf( &save[i * 13], "(%4d,%4d,%1d)", &x, &y, &visible );
69 70 71 72

        // If config has the correct number of arguments
        if( scan > 2 )
        {
73 74 75 76 77 78 79
            m_windowManager.startMove( *pWin );
            m_windowManager.move( *pWin, x, y );
            m_windowManager.stopMove();
            if( visible )
            {
                m_windowManager.show( *pWin );
            }
80 81 82 83 84
        }

        // Next window
        i++;
    }
85
    free( save );
86 87 88 89 90 91 92 93 94
}


void Theme::saveConfig()
{
    msg_Dbg( getIntf(), "Saving theme configuration");

    // Initialize char where config is stored
    char *save  = new char[400];
95
    map<string, TopWindowPtr>::const_iterator it;
96 97 98 99 100 101
    int i = 0;
    int x, y;

    // Save config of every window
    for( it = m_windows.begin(); it != m_windows.end(); it++ )
    {
102
        TopWindow *pWin = (*it).second.get();
103 104 105 106 107 108 109 110 111
        // Print config
        x = pWin->getLeft();
        y = pWin->getTop();
        sprintf( &save[i * 13], "(%4d,%4d,%1d)", x, y,
            pWin->getVisibleVar().get() );
        i++;
    }

    // Save config to file
gbazin's avatar
 
gbazin committed
112 113
    config_PutPsz( getIntf(), "skins2-config", save );
    config_SaveConfigFile( getIntf(), "skins2" );
114 115 116 117 118 119

    // Free memory
    delete[] save;
}


120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
// Useful macro
#define FIND_OBJECT( mapData, mapName ) \
    map<string, mapData>::const_iterator it; \
    it = mapName.find( id ); \
    if( it == mapName.end() ) \
    { \
        return NULL; \
    } \
    return (*it).second.get();

GenericBitmap *Theme::getBitmapById( const string &id )
{
    FIND_OBJECT( GenericBitmapPtr, m_bitmaps );
}

GenericFont *Theme::getFontById( const string &id )
{
    FIND_OBJECT( GenericFontPtr, m_fonts );
}

140
TopWindow *Theme::getWindowById( const string &id )
141
{
142
    FIND_OBJECT( TopWindowPtr, m_windows );
143 144 145 146 147 148 149 150 151 152 153 154
}

GenericLayout *Theme::getLayoutById( const string &id )
{
    FIND_OBJECT( GenericLayoutPtr, m_layouts );
}

CtrlGeneric *Theme::getControlById( const string &id )
{
    FIND_OBJECT( CtrlGenericPtr, m_controls );
}

155 156