1 /*****************************************************************************
\r
2 * mainframe.cpp: Win32 interface plugin for vlc
\r
3 *****************************************************************************
\r
4 * Copyright (C) 2002 VideoLAN
\r
6 * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
\r
8 * This program is free software; you can redistribute it and/or modify
\r
9 * it under the terms of the GNU General Public License as published by
\r
10 * the Free Software Foundation; either version 2 of the License, or
\r
11 * (at your option) any later version.
\r
13 * This program is distributed in the hope that it will be useful,
\r
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
16 * GNU General Public License for more details.
\r
18 * You should have received a copy of the GNU General Public License
\r
19 * along with this program; if not, write to the Free Software
\r
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
\r
21 *****************************************************************************/
\r
26 #include <vlc/vlc.h>
\r
27 #include <vlc/intf.h>
\r
28 #include <vlc/vout.h>
\r
30 #include "mainframe.h"
\r
32 #include "control.h"
\r
34 #include "network.h"
\r
36 #include "preferences.h"
\r
37 #include "messages.h"
\r
38 #include "playlist.h"
\r
39 #include "win32_common.h"
\r
41 #include "netutils.h"
\r
43 //---------------------------------------------------------------------------
\r
44 //#pragma package(smart_init)
\r
45 #pragma link "CSPIN"
\r
46 #pragma resource "*.dfm"
\r
48 extern intf_thread_t *p_intfGlobal;
\r
49 extern int Win32Manage( intf_thread_t *p_intf );
\r
51 //---------------------------------------------------------------------------
\r
52 __fastcall TMainFrameDlg::TMainFrameDlg( TComponent* Owner )
\r
55 Application->ShowHint = true;
\r
56 Application->OnHint = DisplayHint;
\r
58 TimerManage->Interval = INTF_IDLE_SLEEP / 1000;
\r
60 TrackBar->Max = SLIDER_MAX_VALUE;
\r
62 /* default height */
\r
63 ClientHeight = 37 + ToolBar->Height;
\r
65 StringListPref = new TStringList();
\r
67 //---------------------------------------------------------------------------
\r
68 __fastcall TMainFrameDlg::~TMainFrameDlg()
\r
70 delete StringListPref;
\r
72 //---------------------------------------------------------------------------
\r
75 /*****************************************************************************
\r
77 ****************************************************************************/
\r
78 void __fastcall TMainFrameDlg::TimerManageTimer( TObject *Sender )
\r
80 Win32Manage( p_intfGlobal );
\r
82 //---------------------------------------------------------------------------
\r
83 void __fastcall TMainFrameDlg::DisplayHint( TObject *Sender )
\r
85 StatusBar->SimpleText = GetLongHint( Application->Hint );
\r
87 //---------------------------------------------------------------------------
\r
88 void __fastcall TMainFrameDlg::TrackBarChange( TObject *Sender )
\r
90 /* This function displays the current date related to the position in
\r
91 * the stream. It is called whenever the slider changes its value.
\r
92 * The lock has to be taken before the function is called */
\r
94 // vlc_mutex_lock( &p_intfGlobal->p_vlc->p_input_bank->pp_input[0]->stream.stream_lock );
\r
96 if( p_intfGlobal->p_vlc->p_input_bank->pp_input[0] != NULL )
\r
98 #define p_area p_intfGlobal->p_vlc->p_input_bank->pp_input[0]->stream.p_selected_area
\r
99 char psz_time[ OFFSETTOTIME_MAX_SIZE ];
\r
100 off_t Value = TrackBar->Position;
\r
102 GroupBoxSlider->Caption =
\r
103 input_OffsetToTime( p_intfGlobal->p_vlc->p_input_bank->pp_input[0], psz_time,
\r
104 ( p_area->i_size * Value ) / (off_t)SLIDER_MAX_VALUE );
\r
108 // vlc_mutex_unlock( &p_intfGlobal->p_vlc->p_input_bank->pp_input[0]->stream.stream_lock );
\r
110 //---------------------------------------------------------------------------
\r
111 void __fastcall TMainFrameDlg::FormClose( TObject *Sender,
\r
112 TCloseAction &Action )
\r
114 intf_thread_t *p_intf = p_intfGlobal;
\r
116 vlc_mutex_lock( &p_intf->change_lock );
\r
117 p_intf->p_vlc->b_die = 1;
\r
118 vlc_mutex_unlock( &p_intf->change_lock );
\r
120 /* we don't destroy the form immediatly */
\r
123 //---------------------------------------------------------------------------
\r
126 /*****************************************************************************
\r
128 ****************************************************************************/
\r
129 void __fastcall TMainFrameDlg::MenuOpenFileClick( TObject *Sender )
\r
131 int i_end = p_intfGlobal->p_vlc->p_playlist->i_size;
\r
132 AnsiString FileName;
\r
133 if( OpenDialog1->Execute() )
\r
135 /* add the new file to the interface playlist */
\r
136 FileName = OpenDialog1->FileName;
\r
137 intf_PlaylistAdd( p_intfGlobal->p_vlc->p_playlist, PLAYLIST_END,
\r
138 (char*)FileName.c_str() );
\r
140 /* update the plugin display */
\r
141 p_intfGlobal->p_sys->p_playlist->UpdateGrid( p_intfGlobal->p_vlc->p_playlist );
\r
143 /* end current item, select added item */
\r
144 if( p_intfGlobal->p_vlc->p_input_bank->pp_input[0] != NULL )
\r
146 p_intfGlobal->p_vlc->p_input_bank->pp_input[0]->b_eof = 1;
\r
149 intf_PlaylistJumpto( p_intfGlobal->p_vlc->p_playlist, i_end - 1 );
\r
152 //---------------------------------------------------------------------------
\r
153 void __fastcall TMainFrameDlg::MenuOpenDiscClick( TObject *Sender )
\r
155 TDiscDlg *p_disc = p_intfGlobal->p_sys->p_disc;
\r
156 if( p_disc == NULL )
\r
158 p_disc = new TDiscDlg( this );
\r
159 p_intfGlobal->p_sys->p_disc = p_disc;
\r
163 //---------------------------------------------------------------------------
\r
164 void __fastcall TMainFrameDlg::MenuNetworkStreamClick( TObject *Sender )
\r
166 TNetworkDlg *p_network = p_intfGlobal->p_sys->p_network;
\r
167 if( p_network == NULL )
\r
169 p_network = new TNetworkDlg( this );
\r
170 p_intfGlobal->p_sys->p_network = p_network;
\r
174 //---------------------------------------------------------------------------
\r
175 void __fastcall TMainFrameDlg::MenuExitClick( TObject *Sender )
\r
179 //---------------------------------------------------------------------------
\r
180 void __fastcall TMainFrameDlg::MenuHideinterfaceClick( TObject *Sender )
\r
182 this->SendToBack();
\r
184 //---------------------------------------------------------------------------
\r
185 void __fastcall TMainFrameDlg::MenuFullscreenClick( TObject *Sender )
\r
187 if( p_intfGlobal->p_vlc->p_vout_bank->i_count )
\r
189 vlc_mutex_lock( &p_intfGlobal->p_vlc->p_vout_bank->pp_vout[0]->change_lock );
\r
191 p_intfGlobal->p_vlc->p_vout_bank->pp_vout[0]->i_changes |= VOUT_FULLSCREEN_CHANGE;
\r
193 vlc_mutex_unlock( &p_intfGlobal->p_vlc->p_vout_bank->pp_vout[0]->change_lock );
\r
196 //---------------------------------------------------------------------------
\r
197 void __fastcall TMainFrameDlg::MenuPlaylistClick( TObject *Sender )
\r
199 TPlaylistDlg *p_playlist = p_intfGlobal->p_sys->p_playlist;
\r
200 if( p_playlist->Visible )
\r
202 p_playlist->Hide();
\r
206 p_playlist->UpdateGrid( p_intfGlobal->p_vlc->p_playlist );
\r
207 p_playlist->Show();
\r
210 //---------------------------------------------------------------------------
\r
211 void __fastcall TMainFrameDlg::MenuMessagesClick( TObject *Sender )
\r
213 p_intfGlobal->p_sys->p_messages->Show();
\r
215 //---------------------------------------------------------------------------
\r
216 void __fastcall TMainFrameDlg::MenuPreferencesClick( TObject *Sender )
\r
218 CreatePreferences( "main" );
\r
220 //---------------------------------------------------------------------------
\r
221 void __fastcall TMainFrameDlg::MenuAboutClick( TObject *Sender )
\r
223 p_intfGlobal->p_sys->p_about = new TAboutDlg( this );
\r
224 p_intfGlobal->p_sys->p_about->ShowModal();
\r
225 delete p_intfGlobal->p_sys->p_about;
\r
227 //---------------------------------------------------------------------------
\r
230 /*****************************************************************************
\r
231 * Toolbar callbacks
\r
232 ****************************************************************************/
\r
233 void __fastcall TMainFrameDlg::ToolButtonFileClick( TObject *Sender )
\r
235 MenuOpenFileClick( Sender );
\r
237 //---------------------------------------------------------------------------
\r
238 void __fastcall TMainFrameDlg::ToolButtonDiscClick( TObject *Sender )
\r
240 MenuOpenDiscClick( Sender );
\r
242 //---------------------------------------------------------------------------
\r
243 void __fastcall TMainFrameDlg::ToolButtonNetClick( TObject *Sender )
\r
245 MenuNetworkStreamClick( Sender );
\r
247 //---------------------------------------------------------------------------
\r
248 void __fastcall TMainFrameDlg::ToolButtonPlaylistClick( TObject *Sender )
\r
250 MenuPlaylistClick( Sender );
\r
252 //---------------------------------------------------------------------------
\r
253 void __fastcall TMainFrameDlg::ToolButtonBackClick( TObject *Sender )
\r
255 ControlBack( Sender );
\r
257 //---------------------------------------------------------------------------
\r
258 void __fastcall TMainFrameDlg::ToolButtonStopClick( TObject *Sender )
\r
260 ControlStop( Sender );
\r
262 //---------------------------------------------------------------------------
\r
263 void __fastcall TMainFrameDlg::ToolButtonPlayClick( TObject *Sender )
\r
265 ControlPlay( Sender );
\r
267 //---------------------------------------------------------------------------
\r
268 void __fastcall TMainFrameDlg::ToolButtonPauseClick( TObject *Sender )
\r
270 ControlPause( Sender );
\r
272 //---------------------------------------------------------------------------
\r
273 void __fastcall TMainFrameDlg::ToolButtonSlowClick( TObject *Sender )
\r
275 ControlSlow( Sender );
\r
277 //---------------------------------------------------------------------------
\r
278 void __fastcall TMainFrameDlg::ToolButtonFastClick( TObject *Sender )
\r
280 ControlFast( Sender );
\r
282 //---------------------------------------------------------------------------
\r
283 void __fastcall TMainFrameDlg::ToolButtonPrevClick( TObject *Sender )
\r
285 p_intfGlobal->p_sys->p_playlist->Previous();
\r
287 //---------------------------------------------------------------------------
\r
288 void __fastcall TMainFrameDlg::ToolButtonNextClick( TObject *Sender )
\r
290 p_intfGlobal->p_sys->p_playlist->Next();
\r
292 //---------------------------------------------------------------------------
\r
293 void __fastcall TMainFrameDlg::ToolButtonEjectClick( TObject *Sender )
\r
295 AnsiString Device = "";
\r
298 * Get the active input
\r
299 * Determine whether we can eject a media, ie it's a VCD or DVD
\r
300 * If it's neither a VCD nor a DVD, then return
\r
303 if( p_intfGlobal->p_vlc->p_playlist->current.psz_name != NULL )
\r
305 if( strncmp( p_intfGlobal->p_vlc->p_playlist->current.psz_name, "dvd", 3 )
\r
306 || strncmp( p_intfGlobal->p_vlc->p_playlist->current.psz_name, "vcd", 3 ) )
\r
308 /* Determine the device name by omitting the first 4 characters
\r
309 * and keeping 3 characters */
\r
310 Device = strdup( ( p_intfGlobal->p_vlc->p_playlist->current.psz_name + 4 ) );
\r
311 Device = Device.SubString( 1, 2 );
\r
320 /* If there's a stream playing, we aren't allowed to eject ! */
\r
321 if( p_input_bank->pp_input[0] == NULL )
\r
323 intf_WarnMsg( 4, "intf: ejecting %s", Device.c_str() );
\r
325 intf_Eject( Device.c_str() );
\r
328 //--------------------------------------------------------------------------
\r
331 /*****************************************************************************
\r
333 ****************************************************************************/
\r
334 void __fastcall TMainFrameDlg::PopupCloseClick( TObject *Sender )
\r
336 /* We do nothing, we just need a click on a menu item
\r
337 * to close the popup. Don't ask me why... */
\r
340 //---------------------------------------------------------------------------
\r
341 void __fastcall TMainFrameDlg::PopupPlayClick( TObject *Sender )
\r
343 ToolButtonPlayClick( Sender );
\r
345 //---------------------------------------------------------------------------
\r
346 void __fastcall TMainFrameDlg::PopupPauseClick( TObject *Sender )
\r
348 ToolButtonPauseClick( Sender );
\r
350 //---------------------------------------------------------------------------
\r
351 void __fastcall TMainFrameDlg::PopupStopClick( TObject *Sender )
\r
353 ToolButtonStopClick( Sender );
\r
355 //---------------------------------------------------------------------------
\r
356 void __fastcall TMainFrameDlg::PopupBackClick( TObject *Sender )
\r
358 ToolButtonBackClick( Sender );
\r
360 //---------------------------------------------------------------------------
\r
361 void __fastcall TMainFrameDlg::PopupSlowClick( TObject *Sender )
\r
363 ToolButtonSlowClick( Sender );
\r
365 //---------------------------------------------------------------------------
\r
366 void __fastcall TMainFrameDlg::PopupFastClick( TObject *Sender )
\r
368 ToolButtonFastClick( Sender );
\r
370 //---------------------------------------------------------------------------
\r
371 void __fastcall TMainFrameDlg::PopupToggleInterfaceClick( TObject *Sender )
\r
373 this->BringToFront();
\r
375 //---------------------------------------------------------------------------
\r
376 void __fastcall TMainFrameDlg::PopupFullscreenClick( TObject *Sender )
\r
378 MenuFullscreenClick( Sender );
\r
380 //---------------------------------------------------------------------------
\r
381 void __fastcall TMainFrameDlg::PopupNextClick( TObject *Sender )
\r
383 ToolButtonNextClick( Sender );
\r
385 //---------------------------------------------------------------------------
\r
386 void __fastcall TMainFrameDlg::PopupPrevClick( TObject *Sender )
\r
388 ToolButtonPrevClick( Sender );
\r
390 //---------------------------------------------------------------------------
\r
391 void __fastcall TMainFrameDlg::PopupJumpClick( TObject *Sender )
\r
395 //---------------------------------------------------------------------------
\r
396 void __fastcall TMainFrameDlg::PopupPlaylistClick( TObject *Sender )
\r
398 MenuPlaylistClick( Sender );
\r
400 //---------------------------------------------------------------------------
\r
401 void __fastcall TMainFrameDlg::PopupPreferencesClick( TObject *Sender )
\r
403 MenuPreferencesClick( Sender );
\r
405 //---------------------------------------------------------------------------
\r
406 void __fastcall TMainFrameDlg::PopupExitClick( TObject *Sender )
\r
408 MenuExitClick( Sender );
\r
410 //---------------------------------------------------------------------------
\r
411 void __fastcall TMainFrameDlg::PopupOpenFileClick( TObject *Sender )
\r
413 MenuOpenFileClick( Sender );
\r
415 //---------------------------------------------------------------------------
\r
416 void __fastcall TMainFrameDlg::PopupOpenDiscClick( TObject *Sender )
\r
418 MenuOpenDiscClick( Sender );
\r
420 //---------------------------------------------------------------------------
\r
421 void __fastcall TMainFrameDlg::PopupNetworkStreamClick( TObject *Sender )
\r
423 MenuNetworkStreamClick( Sender );
\r
425 //---------------------------------------------------------------------------
\r
428 /*****************************************************************************
\r
429 * Callbacks for DVD/VCD navigation
\r
430 ****************************************************************************/
\r
431 void __fastcall TMainFrameDlg::ButtonTitlePrevClick( TObject *Sender )
\r
433 intf_thread_t * p_intf;
\r
434 input_bank_t * p_input_bank;
\r
435 input_area_t * p_area;
\r
438 p_intf = p_intfGlobal;
\r
439 p_input_bank = p_intf->p_vlc->p_input_bank;
\r
440 i_id = p_input_bank->pp_input[0]->stream.p_selected_area->i_id - 1;
\r
442 /* Disallow area 0 since it is used for video_ts.vob */
\r
445 p_area = p_input_bank->pp_input[0]->stream.pp_areas[i_id];
\r
446 input_ChangeArea( p_input_bank->pp_input[0], (input_area_t*)p_area );
\r
448 input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );
\r
450 p_intf->p_sys->b_title_update = 1;
\r
451 vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );
\r
452 SetupMenus( p_intf );
\r
453 vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );
\r
456 //---------------------------------------------------------------------------
\r
457 void __fastcall TMainFrameDlg::ButtonTitleNextClick( TObject *Sender )
\r
459 intf_thread_t * p_intf;
\r
460 input_bank_t * p_input_bank;
\r
461 input_area_t * p_area;
\r
464 p_intf = p_intfGlobal;
\r
465 p_input_bank = p_intf->p_vlc->p_input_bank;
\r
466 i_id = p_input_bank->pp_input[0]->stream.p_selected_area->i_id + 1;
\r
468 if( i_id < p_input_bank->pp_input[0]->stream.i_area_nb )
\r
470 p_area = p_input_bank->pp_input[0]->stream.pp_areas[i_id];
\r
471 input_ChangeArea( p_input_bank->pp_input[0], (input_area_t*)p_area );
\r
473 input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );
\r
475 p_intf->p_sys->b_title_update = 1;
\r
476 vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );
\r
477 SetupMenus( p_intf );
\r
478 vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );
\r
481 //---------------------------------------------------------------------------
\r
482 void __fastcall TMainFrameDlg::ButtonChapterPrevClick( TObject *Sender )
\r
484 intf_thread_t * p_intf = p_intfGlobal;
\r
485 input_bank_t * p_input_bank = p_intf->p_vlc->p_input_bank;
\r
486 input_area_t * p_area;
\r
488 p_area = p_input_bank->pp_input[0]->stream.p_selected_area;
\r
490 if( p_area->i_part > 0 )
\r
493 input_ChangeArea( p_input_bank->pp_input[0], (input_area_t*)p_area );
\r
495 input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );
\r
497 p_intf->p_sys->b_chapter_update = 1;
\r
498 vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );
\r
499 SetupMenus( p_intf );
\r
500 vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );
\r
503 //---------------------------------------------------------------------------
\r
504 void __fastcall TMainFrameDlg::ButtonChapterNextClick( TObject *Sender )
\r
506 intf_thread_t * p_intf = p_intfGlobal;
\r
507 input_bank_t * p_input_bank = p_intf->p_vlc->p_input_bank;
\r
508 input_area_t * p_area;
\r
510 p_area = p_input_bank->pp_input[0]->stream.p_selected_area;
\r
512 if( p_area->i_part < p_area->i_part_nb )
\r
515 input_ChangeArea( p_input_bank->pp_input[0], (input_area_t*)p_area );
\r
517 input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );
\r
519 p_intf->p_sys->b_chapter_update = 1;
\r
520 vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );
\r
521 SetupMenus( p_intf );
\r
522 vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );
\r
525 //---------------------------------------------------------------------------
\r
528 /*****************************************************************************
\r
529 * Callback for the 'go!' button
\r
530 ****************************************************************************/
\r
531 void __fastcall TMainFrameDlg::ButtonGoClick( TObject *Sender )
\r
533 intf_thread_t *p_intf = p_intfGlobal;
\r
534 input_bank_t *p_input_bank = p_intf->p_vlc->p_input_bank;
\r
537 i_channel = SpinEditChannel->Value;
\r
538 msg_Dbg( p_intf, "joining channel %d", i_channel );
\r
540 vlc_mutex_lock( &p_intf->change_lock );
\r
541 if( p_input_bank->pp_input[0] != NULL )
\r
543 /* end playing item */
\r
544 p_input_bank->pp_input[0]->b_eof = 1;
\r
546 /* update playlist */
\r
547 vlc_mutex_lock( &p_intf->p_vlc->p_playlist->change_lock );
\r
549 p_intf->p_vlc->p_playlist->i_index--;
\r
550 p_intf->p_vlc->p_playlist->b_stopped = 1;
\r
552 vlc_mutex_unlock( &p_intf->p_vlc->p_playlist->change_lock );
\r
554 /* FIXME: ugly hack to close input and outputs */
\r
555 p_intf->pf_manage( p_intf );
\r
558 network_ChannelJoin( p_intf, i_channel );
\r
561 p_intf->p_vlc->p_playlist->b_stopped = 0;
\r
562 p_intf->pf_manage( p_intf );
\r
564 vlc_mutex_unlock( &p_intf->change_lock );
\r
566 // input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );
\r
568 //---------------------------------------------------------------------------
\r
571 /*****************************************************************************
\r
572 * ModeManage: actualise the aspect of the interface whenever the input
\r
574 *****************************************************************************
\r
575 * The lock has to be taken before you call the function.
\r
576 *****************************************************************************/
\r
577 void __fastcall TMainFrameDlg::ModeManage()
\r
579 intf_thread_t * p_intf = p_intfGlobal;
\r
580 input_bank_t * p_input_bank = p_intf->p_vlc->p_input_bank;
\r
581 TGroupBox * ActiveGB;
\r
585 /* hide all boxes */
\r
586 GroupBoxFile->Visible = false;
\r
587 GroupBoxNetwork->Visible = false;
\r
588 GroupBoxDisc->Visible = false;
\r
591 GroupBoxSlider->Hide();
\r
593 /* controls unavailable */
\r
596 /* show the box related to current input mode */
\r
597 if( p_input_bank->pp_input[0] != NULL )
\r
599 switch( p_input_bank->pp_input[0]->stream.i_method & 0xf0 )
\r
601 case INPUT_METHOD_FILE:
\r
602 GroupBoxFile->Visible = true;
\r
603 ActiveGB = GroupBoxFile;
\r
604 LabelFileName->Caption = p_input_bank->pp_input[0]->psz_source;
\r
606 case INPUT_METHOD_DISC:
\r
607 GroupBoxDisc->Visible = true;
\r
608 ActiveGB = GroupBoxDisc;
\r
610 case INPUT_METHOD_NETWORK:
\r
611 GroupBoxNetwork->Visible = true;
\r
612 ActiveGB = GroupBoxNetwork;
\r
613 LabelServer->Caption = p_input_bank->pp_input[0]->psz_source;
\r
614 if( config_GetInt( p_intf, "network-channel" ) )
\r
616 LabelChannel->Visible = true;
\r
620 LabelChannel->Visible = false;
\r
624 msg_Warn( p_intf, "cannot determine input method" );
\r
625 GroupBoxFile->Visible = true;
\r
626 ActiveGB = GroupBoxFile;
\r
627 LabelFileName->Caption = p_input_bank->pp_input[0]->psz_source;
\r
631 i_Height = StatusBar->Height + ActiveGB->Height + ToolBar->Height + 54;
\r
633 /* initialize and show slider for seekable streams */
\r
634 if( p_input_bank->pp_input[0]->stream.b_seekable )
\r
636 TrackBar->Position = p_intf->p_sys->OldValue = 0;
\r
637 GroupBoxSlider->Show();
\r
638 i_Height += GroupBoxSlider->Height;
\r
641 /* control buttons for free pace streams */
\r
642 b_control = p_input_bank->pp_input[0]->stream.b_pace_control;
\r
644 /* get ready for menu regeneration */
\r
645 p_intf->p_sys->b_program_update = 1;
\r
646 p_intf->p_sys->b_title_update = 1;
\r
647 p_intf->p_sys->b_chapter_update = 1;
\r
648 p_intf->p_sys->b_audio_update = 1;
\r
649 p_intf->p_sys->b_spu_update = 1;
\r
650 p_intf->p_sys->i_part = 0;
\r
652 p_input_bank->pp_input[0]->stream.b_changed = 0;
\r
653 msg_Dbg( p_intf, "stream has changed, refreshing interface" );
\r
657 i_Height = StatusBar->Height + ToolBar->Height + 47;
\r
659 if( config_GetInt( p_intf, "network-channel" ) )
\r
661 GroupBoxNetwork->Visible = true;
\r
662 LabelChannel->Visible = true;
\r
663 i_Height += GroupBoxNetwork->Height + 7;
\r
667 /* add space between tolbar and statusbar when
\r
668 * nothing is displayed; isn't it nicer ? :) */
\r
671 /* unsensitize menus */
\r
672 MenuProgram->Enabled = false;
\r
673 MenuTitle->Enabled = false;
\r
674 MenuChapter->Enabled = false;
\r
675 MenuAudio->Enabled = false;
\r
676 MenuSubtitles->Enabled = false;
\r
677 PopupNavigation->Enabled = false;
\r
678 PopupAudio->Enabled = false;
\r
679 PopupSubtitles->Enabled = false;
\r
683 /* resize main window */
\r
684 this->Height = i_Height;
\r
686 /* set control items */
\r
687 ToolButtonBack->Enabled = false;
\r
688 ToolButtonStop->Enabled = true;
\r
689 ToolButtonEject->Enabled = !b_control;
\r
690 ToolButtonPause->Enabled = b_control;
\r
691 ToolButtonSlow->Enabled = b_control;
\r
692 ToolButtonFast->Enabled = b_control;
\r
693 PopupBack->Enabled = false;
\r
694 PopupPause->Enabled = b_control;
\r
695 PopupSlow->Enabled = b_control;
\r
696 PopupFast->Enabled = b_control;
\r
698 //---------------------------------------------------------------------------
\r
701 /*****************************************************************************
\r
702 * CreateConfig: create a configuration dialog and save it for further use
\r
703 *****************************************************************************
\r
704 * Check if the dialog box is already opened, if so this will save us
\r
705 * quite a bit of work. (the interface will be destroyed when you actually
\r
706 * close the main window, but remember that it is only hidden if you
\r
707 * clicked on the action buttons). This trick also allows us not to
\r
708 * duplicate identical dialog windows.
\r
709 *****************************************************************************/
\r
710 void __fastcall TMainFrameDlg::CreatePreferences( AnsiString Name )
\r
712 TPreferencesDlg *Preferences;
\r
713 int i_index, i_pos;
\r
715 i_index = StringListPref->IndexOf( Name );
\r
716 if( i_index != -1 )
\r
718 /* config dialog already exists */
\r
719 Preferences = (TPreferencesDlg *)StringListPref->Objects[i_index];
\r
723 /* create the config dialog */
\r
724 Preferences = new TPreferencesDlg( this );
\r
725 Preferences->CreateConfigDialog( Name.c_str() );
\r
728 i_pos = StringListPref->Add( Name );
\r
729 StringListPref->Objects[i_pos] = Preferences;
\r
732 /* display the dialog */
\r
733 Preferences->Show();
\r
735 //---------------------------------------------------------------------------
\r