theme.cpp 3.65 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
 *
 * 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()
{
30 31
    saveConfig();

32 33 34 35 36 37 38 39
    // 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();
40
    m_curves.clear();
41 42 43
}


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

    // Get config from vlcrc file
gbazin's avatar
 
gbazin committed
49
    char *save = config_GetPsz( getIntf(), "skins2-config" );
50 51 52 53
    if( save == NULL )
        return;

    // Initialization
54
    map<string, TopWindowPtr>::const_iterator it;
55 56 57 58 59 60
    int i = 0;
    int x, y, v, scan;

    // Get config for each window
    for( it = m_windows.begin(); it != m_windows.end(); it++ )
    {
61
        TopWindow *pWin = (*it).second.get();
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
        // Get config
        scan = sscanf( &save[i * 13], "(%4d,%4d,%1d)", &x, &y, &v );

        // If config has the correct number of arguments
        if( scan > 2 )
        {
            pWin->move( x, y );
            if( v ) pWin->show();
        }

        // Next window
        i++;
    }
}


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

    // Initialize char where config is stored
    char *save  = new char[400];
84
    map<string, TopWindowPtr>::const_iterator it;
85 86 87 88 89 90
    int i = 0;
    int x, y;

    // Save config of every window
    for( it = m_windows.begin(); it != m_windows.end(); it++ )
    {
91
        TopWindow *pWin = (*it).second.get();
92 93 94 95 96 97 98 99 100
        // 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
101 102
    config_PutPsz( getIntf(), "skins2-config", save );
    config_SaveConfigFile( getIntf(), "skins2" );
103 104 105 106 107 108

    // Free memory
    delete[] save;
}


109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
// 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 );
}

129
TopWindow *Theme::getWindowById( const string &id )
130
{
131
    FIND_OBJECT( TopWindowPtr, m_windows );
132 133 134 135 136 137 138 139 140 141 142 143
}

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

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

144 145