1 /*****************************************************************************
2 * banks.cpp: Bitmap bank, Event bank, Font bank and OffSet bank
3 *****************************************************************************
4 * Copyright (C) 2003 VideoLAN
5 * $Id: banks.cpp,v 1.10 2003/10/17 18:17:28 ipkiss Exp $
7 * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
8 * Emmanuel Puig <karibu@via.ecp.fr>
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.
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.
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,
24 *****************************************************************************/
27 //--- VLC -------------------------------------------------------------------
30 //--- SKIN ------------------------------------------------------------------
32 #include "../os_bitmap.h"
34 #include "../os_event.h"
36 #include "../os_font.h"
38 #include "skin_common.h"
42 //---------------------------------------------------------------------------
44 //---------------------------------------------------------------------------
45 BitmapBank::BitmapBank( intf_thread_t *_p_intf )
49 // Create default bitmap
50 Add( DEFAULT_BITMAP_NAME, "", 0 );
52 //---------------------------------------------------------------------------
53 BitmapBank::~BitmapBank()
55 for( map<string,Bitmap *>::iterator iter = Bank.begin();
56 iter != Bank.end(); iter++ )
58 delete (OSBitmap *)iter->second;
61 //---------------------------------------------------------------------------
62 bool BitmapBank::Add( string Id, string FileName, int AColor )
64 if( Bank[Id] != NULL )
66 msg_Warn( p_intf, "Bitmap name already exists: %s", Id.c_str() );
70 Bank[Id] = (Bitmap *)new OSBitmap( p_intf, FileName, AColor );
73 //---------------------------------------------------------------------------
74 Bitmap * BitmapBank::Get( string Id )
76 // If the specified bitmap doesn't exist, use the default one
77 if( Bank[Id] == NULL )
79 msg_Warn( p_intf, "Unknown bitmap name '%s', using default one",
82 return Bank[DEFAULT_BITMAP_NAME];
87 //---------------------------------------------------------------------------
90 //---------------------------------------------------------------------------
92 //---------------------------------------------------------------------------
93 FontBank::FontBank( intf_thread_t *_p_intf )
97 // Create default font
98 Add( DEFAULT_FONT_NAME, "arial", 12, 0, 400, false, false );
100 //---------------------------------------------------------------------------
101 FontBank::~FontBank()
103 for( map<string,SkinFont *>::iterator iter = Bank.begin();
104 iter != Bank.end(); iter++ )
106 delete (OSFont *)iter->second;
109 //---------------------------------------------------------------------------
110 bool FontBank::Add( string name, string fontname, int size,
111 int color, int weight, bool italic, bool underline )
113 if( Bank[name] != NULL )
115 msg_Warn( p_intf, "Font name already exists: %s", name.c_str() );
119 Bank[name] = (SkinFont *)new OSFont( p_intf, fontname, size, color,
120 weight, italic, underline );
123 //---------------------------------------------------------------------------
124 SkinFont * FontBank::Get( string Id )
126 // If the specified font doesn't exist, use the default one
127 if( Bank[Id] == NULL )
129 msg_Warn( p_intf, "Unknown font name '%s', using default one",
132 return Bank[DEFAULT_FONT_NAME];
137 //---------------------------------------------------------------------------
140 //---------------------------------------------------------------------------
142 //---------------------------------------------------------------------------
143 EventBank::EventBank( intf_thread_t *_p_intf )
147 // Create default event
148 Add( DEFAULT_EVENT_NAME, "VLC_NOTHING", "none" );
150 Add( "none", "VLC_NOTHING", "none" );
151 Add( "time", "VLC_STREAMPOS", "none" );
152 Add( "left_time", "VLC_ENDSTREAMPOS", "none" );
153 Add( "total_time", "VLC_TOTALSTREAMPOS", "none" );
154 Add( "file_name", "VLC_STREAM_NAME", "none" );
155 Add( "title", "VLC_STREAM_TITLE", "none" );
156 Add( "help", "VLC_HELP_TEXT", "none" );
158 Add( "tray", "VLC_CHANGE_TRAY", "CTRL+T" );
159 Add( "taskbar", "VLC_CHANGE_TASKBAR", "CTRL+B" );
161 Add( "playlist_refresh", "CTRL_PLAYLIST", "none" );
162 Add( "play", "VLC_PLAY", "X" );
163 Add( "pause", "VLC_PAUSE", "C" );
164 Add( "stop", "VLC_STOP", "V" );
165 Add( "next", "VLC_NEXT", "B" );
166 Add( "prev", "VLC_PREV", "Z" );
167 Add( "fullscreen", "VLC_FULLSCREEN", "F" );
170 Add( "mute", "VLC_VOLUME_CHANGE(MUTE)", "none" );
171 Add( "volume_up", "VLC_VOLUME_CHANGE(UP)", "none" );
172 Add( "volume_down", "VLC_VOLUME_CHANGE(DOWN)", "none" );
173 Add( "volume_refresh", "VLC_VOLUME_CHANGE(SET)", "none" );
176 Add( "show_log", "VLC_LOG_SHOW(TRUE)", "none" );
177 Add( "hide_log", "VLC_LOG_SHOW(FALSE)", "none" );
178 Add( "show_prefs", "VLC_PREFS_SHOW", "none" );
179 Add( "show_info", "VLC_INFO_SHOW", "none" );
181 Add( "quit", "VLC_HIDE(VLC_QUIT)", "CTRL+C" );
182 Add( "open", "VLC_OPEN", "CTRL+O" );
183 Add( "net", "VLC_NET", "CTRL+N" );
184 Add( "add_file", "VLC_PLAYLIST_ADD_FILE", "CTRL+A" );
185 Add( "load_skin", "VLC_LOAD_SKIN", "CTRL+S" );
186 Add( "on_top", "VLC_ON_TOP", "CTRL+T" );
188 //---------------------------------------------------------------------------
189 EventBank::~EventBank()
191 for( map<string,Event *>::iterator iter = Bank.begin();
192 iter != Bank.end(); iter++ )
194 iter->second->DestructParameters( true );
195 delete (OSEvent *)iter->second;
198 //---------------------------------------------------------------------------
199 bool EventBank::Add( string Name, string EventDesc, string shortcut )
201 if( Bank[Name] != NULL )
203 msg_Warn( p_intf, "Event name already exists: %s", Name.c_str() );
207 Bank[Name] = (Event *)new OSEvent( p_intf, EventDesc, shortcut );
210 //---------------------------------------------------------------------------
211 void EventBank::TestShortcut( int key, int mod )
213 for( map<string,Event *>::iterator iter = Bank.begin();
214 iter != Bank.end(); iter++ )
216 // If key and modifier match to event shortcut, send event
217 if( iter->second->MatchShortcut( key, mod ) )
218 iter->second->SendEvent();
221 //---------------------------------------------------------------------------
222 Event * EventBank::Get( string Id )
224 // If the specified event doesn't exist, use the default one
225 if( Bank[Id] == NULL )
227 msg_Warn( p_intf, "Unknown event name '%s', using default one",
230 return Bank[DEFAULT_EVENT_NAME];
235 //---------------------------------------------------------------------------
236 void EventBank::Init()
238 for( map<string,Event *>::iterator iter = Bank.begin();
239 iter != Bank.end(); iter++ )
241 iter->second->CreateEvent();
244 //---------------------------------------------------------------------------
247 //---------------------------------------------------------------------------
249 //---------------------------------------------------------------------------
250 OffSetBank::OffSetBank( intf_thread_t *_p_intf )
256 //---------------------------------------------------------------------------
257 OffSetBank::~OffSetBank()
260 msg_Warn( p_intf, "At least one offset remains" );
262 //---------------------------------------------------------------------------
263 void OffSetBank::PushOffSet( int X, int Y )
265 XList.push_front( X );
266 YList.push_front( Y );
270 //---------------------------------------------------------------------------
271 void OffSetBank::PopOffSet()
275 msg_Warn( p_intf, "No offset to pop" );
279 XOff -= XList.front();
280 YOff -= YList.front();
284 //---------------------------------------------------------------------------
285 void OffSetBank::GetOffSet( int &X, int &Y )
290 //---------------------------------------------------------------------------