Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
7d3c9e87
Commit
7d3c9e87
authored
Feb 09, 2003
by
Olivier Teulière
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/gui/win32/mainframe.cpp: simplifications using the new
aout_Volume* API
parent
df8f6747
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
713 additions
and
735 deletions
+713
-735
modules/gui/win32/mainframe.cpp
modules/gui/win32/mainframe.cpp
+713
-735
No files found.
modules/gui/win32/mainframe.cpp
View file @
7d3c9e87
/*****************************************************************************
* mainframe.cpp: Win32 interface plugin for vlc
*****************************************************************************
* Copyright (C) 2002 VideoLAN
*
* Authors: 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 <vcl.h>
#pragma hdrstop
#include <vlc/vlc.h>
#include <vlc/intf.h>
#include <vlc/vout.h>
#include "dragdrop.h"
#include "mainframe.h"
#include "menu.h"
#include "disc.h"
#include "network.h"
#include "about.h"
#include "preferences.h"
#include "messages.h"
#include "playlist.h"
#include "sout.h"
#include "subtitles.h"
#include "misc.h"
#include "win32_common.h"
#include "netutils.h"
//---------------------------------------------------------------------------
#pragma link "CSPIN"
#pragma resource "*.dfm"
extern
int
Win32Manage
(
intf_thread_t
*
p_intf
);
//---------------------------------------------------------------------------
__fastcall
TMainFrameDlg
::
TMainFrameDlg
(
TComponent
*
Owner
,
intf_thread_t
*
_p_intf
)
:
TForm
(
Owner
)
{
p_intf
=
_p_intf
;
Application
->
ShowHint
=
true
;
Application
->
OnHint
=
DisplayHint
;
TimerManage
->
Interval
=
INTF_IDLE_SLEEP
/
1000
;
TrackBar
->
Max
=
SLIDER_MAX_VALUE
;
/* default height and caption */
ClientHeight
=
37
+
ToolBar
->
Height
;
Caption
=
VOUT_TITLE
" (Win32 interface)"
;
StringListPref
=
new
TStringList
();
Translate
(
this
);
/* drag and drop stuff */
/* initialize the OLE library */
OleInitialize
(
NULL
);
/* TDropTarget will send the WM_OLEDROP message to the form */
lpDropTarget
=
(
LPDROPTARGET
)
new
TDropTarget
(
this
->
Handle
);
CoLockObjectExternal
(
lpDropTarget
,
true
,
true
);
/* register the form as a drop target */
RegisterDragDrop
(
this
->
Handle
,
lpDropTarget
);
}
//---------------------------------------------------------------------------
__fastcall
TMainFrameDlg
::~
TMainFrameDlg
()
{
delete
StringListPref
;
}
//---------------------------------------------------------------------------
/*****************************************************************************
* Event handlers
****************************************************************************/
void
__fastcall
TMainFrameDlg
::
TimerManageTimer
(
TObject
*
Sender
)
{
Win32Manage
(
p_intf
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
DisplayHint
(
TObject
*
Sender
)
{
StatusBar
->
SimpleText
=
GetLongHint
(
Application
->
Hint
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
TrackBarChange
(
TObject
*
Sender
)
{
/* This function displays the current date related to the position in
* the stream. It is called whenever the slider changes its value.
* The lock has to be taken before the function is called */
if
(
p_intf
->
p_sys
->
p_input
!=
NULL
)
{
#define p_area p_intf->p_sys->p_input->stream.p_selected_area
char
psz_time
[
OFFSETTOTIME_MAX_SIZE
];
off_t
Value
=
TrackBar
->
Position
;
GroupBoxSlider
->
Caption
=
input_OffsetToTime
(
p_intf
->
p_sys
->
p_input
,
psz_time
,
(
p_area
->
i_size
*
Value
)
/
(
off_t
)
SLIDER_MAX_VALUE
);
#undef p_area
}
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
FormClose
(
TObject
*
Sender
,
TCloseAction
&
Action
)
{
vlc_mutex_lock
(
&
p_intf
->
change_lock
);
p_intf
->
p_vlc
->
b_die
=
VLC_TRUE
;
vlc_mutex_unlock
(
&
p_intf
->
change_lock
);
/* remove the form from the list of drop targets */
RevokeDragDrop
(
this
->
Handle
);
lpDropTarget
->
Release
();
CoLockObjectExternal
(
lpDropTarget
,
false
,
true
);
/* uninitialize the OLE library */
OleUninitialize
();
/* we don't destroy the form immediatly */
Action
=
caHide
;
}
//---------------------------------------------------------------------------
/*****************************************************************************
* Main callbacks
****************************************************************************/
void
__fastcall
TMainFrameDlg
::
OpenFileActionExecute
(
TObject
*
Sender
)
{
if
(
OpenDialog1
->
Execute
()
)
{
/* add the new file to the interface playlist */
for
(
int
i
=
0
;
i
<
OpenDialog1
->
Files
->
Count
;
i
++
)
p_intf
->
p_sys
->
p_playwin
->
Add
(
OpenDialog1
->
Files
->
Strings
[
i
],
PLAYLIST_APPEND
|
(
p_intf
->
p_sys
->
b_play_when_adding
?
PLAYLIST_GO
:
0
),
PLAYLIST_END
);
};
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
OpenDiscActionExecute
(
TObject
*
Sender
)
{
TDiscDlg
*
p_disc
=
p_intf
->
p_sys
->
p_disc
;
if
(
p_disc
==
NULL
)
{
p_disc
=
new
TDiscDlg
(
this
,
p_intf
);
p_intf
->
p_sys
->
p_disc
=
p_disc
;
}
p_disc
->
Show
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
NetworkStreamActionExecute
(
TObject
*
Sender
)
{
TNetworkDlg
*
p_network
=
p_intf
->
p_sys
->
p_network
;
if
(
p_network
==
NULL
)
{
p_network
=
new
TNetworkDlg
(
this
,
p_intf
);
p_intf
->
p_sys
->
p_network
=
p_network
;
}
p_network
->
Show
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
AddSubtitlesActionsExecute
(
TObject
*
Sender
)
{
TSubtitlesDlg
*
p_subtitles
=
new
TSubtitlesDlg
(
this
,
p_intf
);
p_subtitles
->
ShowModal
();
delete
p_subtitles
;
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
StreamOutputActionExecute
(
TObject
*
Sender
)
{
TSoutDlg
*
p_sout
=
new
TSoutDlg
(
this
,
p_intf
);
p_sout
->
ShowModal
();
delete
p_sout
;
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
ExitActionExecute
(
TObject
*
Sender
)
{
Close
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
FullscreenActionExecute
(
TObject
*
Sender
)
{
vout_thread_t
*
p_vout
;
p_vout
=
(
vout_thread_t
*
)
vlc_object_find
(
p_intf
->
p_sys
->
p_input
,
VLC_OBJECT_VOUT
,
FIND_CHILD
);
if
(
p_vout
==
NULL
)
{
return
;
}
p_vout
->
i_changes
|=
VOUT_FULLSCREEN_CHANGE
;
vlc_object_release
(
p_vout
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
OnTopActionExecute
(
TObject
*
Sender
)
{
vlc_object_t
*
p_vout
;
p_vout
=
(
vlc_object_t
*
)
vlc_object_find
(
p_intf
,
VLC_OBJECT_VOUT
,
FIND_ANYWHERE
);
if
(
p_vout
!=
NULL
)
/*****************************************************************************
* mainframe.cpp: Win32 interface plugin for vlc
*****************************************************************************
* Copyright (C) 2002 VideoLAN
*
* Authors: 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 <vcl.h>
#pragma hdrstop
#include <vlc/vlc.h>
#include <vlc/intf.h>
#include <vlc/vout.h>
#include "dragdrop.h"
#include "mainframe.h"
#include "menu.h"
#include "disc.h"
#include "network.h"
#include "about.h"
#include "preferences.h"
#include "messages.h"
#include "playlist.h"
#include "sout.h"
#include "subtitles.h"
#include "misc.h"
#include "win32_common.h"
#include "netutils.h"
//---------------------------------------------------------------------------
#pragma link "CSPIN"
#pragma resource "*.dfm"
extern
int
Win32Manage
(
intf_thread_t
*
p_intf
);
//---------------------------------------------------------------------------
__fastcall
TMainFrameDlg
::
TMainFrameDlg
(
TComponent
*
Owner
,
intf_thread_t
*
_p_intf
)
:
TForm
(
Owner
)
{
p_intf
=
_p_intf
;
Application
->
ShowHint
=
true
;
Application
->
OnHint
=
DisplayHint
;
TimerManage
->
Interval
=
INTF_IDLE_SLEEP
/
1000
;
TrackBar
->
Max
=
SLIDER_MAX_VALUE
;
/* default height and caption */
ClientHeight
=
37
+
ToolBar
->
Height
;
Caption
=
VOUT_TITLE
" (Win32 interface)"
;
StringListPref
=
new
TStringList
();
Translate
(
this
);
/* drag and drop stuff */
/* initialize the OLE library */
OleInitialize
(
NULL
);
/* TDropTarget will send the WM_OLEDROP message to the form */
lpDropTarget
=
(
LPDROPTARGET
)
new
TDropTarget
(
this
->
Handle
);
CoLockObjectExternal
(
lpDropTarget
,
true
,
true
);
/* register the form as a drop target */
RegisterDragDrop
(
this
->
Handle
,
lpDropTarget
);
}
//---------------------------------------------------------------------------
__fastcall
TMainFrameDlg
::~
TMainFrameDlg
()
{
delete
StringListPref
;
}
//---------------------------------------------------------------------------
/*****************************************************************************
* Event handlers
****************************************************************************/
void
__fastcall
TMainFrameDlg
::
TimerManageTimer
(
TObject
*
Sender
)
{
Win32Manage
(
p_intf
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
DisplayHint
(
TObject
*
Sender
)
{
StatusBar
->
SimpleText
=
GetLongHint
(
Application
->
Hint
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
TrackBarChange
(
TObject
*
Sender
)
{
/* This function displays the current date related to the position in
* the stream. It is called whenever the slider changes its value.
* The lock has to be taken before the function is called */
if
(
p_intf
->
p_sys
->
p_input
!=
NULL
)
{
#define p_area p_intf->p_sys->p_input->stream.p_selected_area
char
psz_time
[
OFFSETTOTIME_MAX_SIZE
];
off_t
Value
=
TrackBar
->
Position
;
GroupBoxSlider
->
Caption
=
input_OffsetToTime
(
p_intf
->
p_sys
->
p_input
,
psz_time
,
(
p_area
->
i_size
*
Value
)
/
(
off_t
)
SLIDER_MAX_VALUE
);
#undef p_area
}
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
FormClose
(
TObject
*
Sender
,
TCloseAction
&
Action
)
{
vlc_mutex_lock
(
&
p_intf
->
change_lock
);
p_intf
->
p_vlc
->
b_die
=
VLC_TRUE
;
vlc_mutex_unlock
(
&
p_intf
->
change_lock
);
/* remove the form from the list of drop targets */
RevokeDragDrop
(
this
->
Handle
);
lpDropTarget
->
Release
();
CoLockObjectExternal
(
lpDropTarget
,
false
,
true
);
/* uninitialize the OLE library */
OleUninitialize
();
/* we don't destroy the form immediatly */
Action
=
caHide
;
}
//---------------------------------------------------------------------------
/*****************************************************************************
* Main callbacks
****************************************************************************/
void
__fastcall
TMainFrameDlg
::
OpenFileActionExecute
(
TObject
*
Sender
)
{
if
(
OpenDialog1
->
Execute
()
)
{
/* add the new file to the interface playlist */
for
(
int
i
=
0
;
i
<
OpenDialog1
->
Files
->
Count
;
i
++
)
p_intf
->
p_sys
->
p_playwin
->
Add
(
OpenDialog1
->
Files
->
Strings
[
i
],
PLAYLIST_APPEND
|
(
p_intf
->
p_sys
->
b_play_when_adding
?
PLAYLIST_GO
:
0
),
PLAYLIST_END
);
};
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
OpenDiscActionExecute
(
TObject
*
Sender
)
{
TDiscDlg
*
p_disc
=
p_intf
->
p_sys
->
p_disc
;
if
(
p_disc
==
NULL
)
{
p_disc
=
new
TDiscDlg
(
this
,
p_intf
);
p_intf
->
p_sys
->
p_disc
=
p_disc
;
}
p_disc
->
Show
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
NetworkStreamActionExecute
(
TObject
*
Sender
)
{
TNetworkDlg
*
p_network
=
p_intf
->
p_sys
->
p_network
;
if
(
p_network
==
NULL
)
{
p_network
=
new
TNetworkDlg
(
this
,
p_intf
);
p_intf
->
p_sys
->
p_network
=
p_network
;
}
p_network
->
Show
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
AddSubtitlesActionsExecute
(
TObject
*
Sender
)
{
TSubtitlesDlg
*
p_subtitles
=
new
TSubtitlesDlg
(
this
,
p_intf
);
p_subtitles
->
ShowModal
();
delete
p_subtitles
;
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
StreamOutputActionExecute
(
TObject
*
Sender
)
{
TSoutDlg
*
p_sout
=
new
TSoutDlg
(
this
,
p_intf
);
p_sout
->
ShowModal
();
delete
p_sout
;
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
ExitActionExecute
(
TObject
*
Sender
)
{
Close
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
FullscreenActionExecute
(
TObject
*
Sender
)
{
vout_thread_t
*
p_vout
;
p_vout
=
(
vout_thread_t
*
)
vlc_object_find
(
p_intf
->
p_sys
->
p_input
,
VLC_OBJECT_VOUT
,
FIND_CHILD
);
if
(
p_vout
==
NULL
)
{
return
;
}
p_vout
->
i_changes
|=
VOUT_FULLSCREEN_CHANGE
;
vlc_object_release
(
p_vout
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
OnTopActionExecute
(
TObject
*
Sender
)
{
vlc_object_t
*
p_vout
;
p_vout
=
(
vlc_object_t
*
)
vlc_object_find
(
p_intf
,
VLC_OBJECT_VOUT
,
FIND_ANYWHERE
);
if
(
p_vout
!=
NULL
)
{
vlc_value_t
val
;
if
(
var_Get
(
p_vout
,
"directx-on-top"
,
&
val
)
>=
0
)
...
...
@@ -228,517 +228,495 @@ void __fastcall TMainFrameDlg::OnTopActionExecute( TObject *Sender )
MenuOnTop
->
Checked
=
val
.
b_bool
;
PopupOnTop
->
Checked
=
val
.
b_bool
;
}
vlc_object_release
(
p_vout
);
}
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PlaylistActionExecute
(
TObject
*
Sender
)
{
TPlaylistDlg
*
p_playwin
=
p_intf
->
p_sys
->
p_playwin
;
if
(
p_playwin
->
Visible
)
{
p_playwin
->
Hide
();
}
else
{
p_playwin
->
UpdateGrid
();
p_playwin
->
Show
();
}
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
MessagesActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_messages
->
Show
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PreferencesActionExecute
(
TObject
*
Sender
)
{
CreatePreferences
(
"main"
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
AboutActionExecute
(
TObject
*
Sender
)
{
TAboutDlg
*
AboutDlg
=
new
TAboutDlg
(
this
,
p_intf
);
AboutDlg
->
ShowModal
();
delete
AboutDlg
;
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
BackActionExecute
(
TObject
*
Sender
)
{
/* TODO */
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PlayActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Play
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PauseActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Pause
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
StopActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Stop
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
SlowActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Slow
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
FastActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Fast
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PreviousActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Previous
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
NextActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Next
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
EjectActionExecute
(
TObject
*
Sender
)
{
AnsiString
Device
=
""
;
char
*
psz_current
;
playlist_t
*
p_playlist
;
p_playlist
=
(
playlist_t
*
)
vlc_object_find
(
p_intf
,
VLC_OBJECT_PLAYLIST
,
FIND_ANYWHERE
);
if
(
p_playlist
==
NULL
)
{
return
;
}
/*
* Get the active input
* Determine whether we can eject a media, ie it's a VCD or DVD
* If it's neither a VCD nor a DVD, then return
*/
vlc_mutex_lock
(
&
p_playlist
->
object_lock
);
psz_current
=
p_playlist
->
pp_items
[
p_playlist
->
i_index
]
->
psz_name
;
if
(
psz_current
!=
NULL
)
{
if
(
strncmp
(
psz_current
,
"dvd"
,
3
)
||
strncmp
(
psz_current
,
"vcd"
,
3
)
)
{
/* Determine the device name by omitting the first 4 characters
* and keeping 3 characters */
Device
=
strdup
(
(
psz_current
+
4
)
);
Device
=
Device
.
SubString
(
1
,
2
);
}
}
vlc_mutex_unlock
(
&
p_playlist
->
object_lock
);
vlc_object_release
(
p_playlist
);
if
(
Device
==
""
)
{
return
;
}
/* If there's a stream playing, we aren't allowed to eject ! */
if
(
p_intf
->
p_sys
->
p_input
==
NULL
)
{
msg_Dbg
(
p_intf
,
"ejecting %s"
,
Device
.
c_str
()
);
intf_Eject
(
p_intf
,
Device
.
c_str
()
);
}
}
//--------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
VolumeUpActionExecute
(
TObject
*
Sender
)
{
aout_instance_t
*
p_aout
;
p_aout
=
(
aout_instance_t
*
)
vlc_object_find
(
p_intf
,
VLC_OBJECT_AOUT
,
FIND_ANYWHERE
);
if
(
p_aout
!=
NULL
)
{
aout_VolumeUp
(
p_aout
,
1
,
NULL
);
vlc_object_release
(
(
vlc_object_t
*
)
p_aout
);
}
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
VolumeDownActionExecute
(
TObject
*
Sender
)
{
aout_instance_t
*
p_aout
;
p_aout
=
(
aout_instance_t
*
)
vlc_object_find
(
p_intf
,
VLC_OBJECT_AOUT
,
FIND_ANYWHERE
);
if
(
p_aout
!=
NULL
)
{
aout_VolumeDown
(
p_aout
,
1
,
NULL
);
vlc_object_release
(
(
vlc_object_t
*
)
p_aout
);
}
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
MuteActionExecute
(
TObject
*
Sender
)
{
aout_instance_t
*
p_aout
;
p_aout
=
(
aout_instance_t
*
)
vlc_object_find
(
p_intf
,
VLC_OBJECT_AOUT
,
FIND_ANYWHERE
);
if
(
p_aout
!=
NULL
)
{
aout_VolumeMute
(
p_aout
,
NULL
);
vlc_object_release
(
(
vlc_object_t
*
)
p_aout
);
// MenuMute->Checked = ! MenuMute->Checked;
}
}
//---------------------------------------------------------------------------
/*****************************************************************************
* External drop handling
*****************************************************************************/
void
__fastcall
TMainFrameDlg
::
OnDrop
(
TMessage
&
Msg
)
{
/* find the number of files dropped */
int
num_files
=
DragQueryFile
(
(
HDROP
)
Msg
.
WParam
,
0xFFFFFFFF
,
(
LPSTR
)
NULL
,
NULL
);
/* append each file to the playlist */
for
(
int
i
=
0
;
i
<
num_files
;
i
++
)
{
/* find the length of the filename */
int
name_length
=
DragQueryFile
(
(
HDROP
)
Msg
.
WParam
,
i
,
NULL
,
NULL
)
+
1
;
/* get the filename */
char
*
FileName
=
new
char
[
name_length
];
DragQueryFile
(
(
HDROP
)
Msg
.
WParam
,
i
,
FileName
,
name_length
);
/* add the new file to the playlist */
if
(
config_GetInt
(
p_intf
,
"enqueue"
)
)
{
p_intf
->
p_sys
->
p_playwin
->
Add
(
FileName
,
PLAYLIST_APPEND
,
PLAYLIST_END
);
}
else
{
p_intf
->
p_sys
->
p_playwin
->
Add
(
FileName
,
PLAYLIST_APPEND
|
PLAYLIST_GO
,
PLAYLIST_END
);
}
delete
[]
FileName
;
}
DragFinish
(
(
HDROP
)
Msg
.
WParam
);
Msg
.
Result
=
0
;
}
//--------------------------------------------------------------------------
/*****************************************************************************
* Menu and popup callbacks
*****************************************************************************/
void
__fastcall
TMainFrameDlg
::
MenuHideinterfaceClick
(
TObject
*
Sender
)
{
this
->
SendToBack
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PopupToggleInterfaceClick
(
TObject
*
Sender
)
{
this
->
BringToFront
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PopupCloseClick
(
TObject
*
Sender
)
{
/* We do nothing, we just need a click on a menu item
* to close the popup. Don't ask me why... */
return
;
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PopupJumpClick
(
TObject
*
Sender
)
{
/* TODO */
}
//---------------------------------------------------------------------------
/*****************************************************************************
* Callbacks for DVD/VCD navigation
****************************************************************************/
void
__fastcall
TMainFrameDlg
::
PrevTitleActionExecute
(
TObject
*
Sender
)
{
input_area_t
*
p_area
;
int
i_id
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
i_id
=
p_intf
->
p_sys
->
p_input
->
stream
.
p_selected_area
->
i_id
-
1
;
/* Disallow area 0 since it is used for video_ts.vob */
if
(
i_id
>
0
)
{
p_area
=
p_intf
->
p_sys
->
p_input
->
stream
.
pp_areas
[
i_id
];
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_intf
->
p_sys
->
p_input
,
p_area
);
input_SetStatus
(
p_intf
->
p_sys
->
p_input
,
INPUT_STATUS_PLAY
);
p_intf
->
p_sys
->
b_title_update
=
VLC_TRUE
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_intf
->
p_sys
->
p_menus
->
SetupMenus
();
}
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
NextTitleActionExecute
(
TObject
*
Sender
)
{
input_area_t
*
p_area
;
unsigned
int
i_id
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
i_id
=
p_intf
->
p_sys
->
p_input
->
stream
.
p_selected_area
->
i_id
+
1
;
if
(
i_id
<
p_intf
->
p_sys
->
p_input
->
stream
.
i_area_nb
)
{
p_area
=
p_intf
->
p_sys
->
p_input
->
stream
.
pp_areas
[
i_id
];
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_intf
->
p_sys
->
p_input
,
p_area
);
input_SetStatus
(
p_intf
->
p_sys
->
p_input
,
INPUT_STATUS_PLAY
);
p_intf
->
p_sys
->
b_title_update
=
VLC_TRUE
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_intf
->
p_sys
->
p_menus
->
SetupMenus
();
}
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PrevChapterActionExecute
(
TObject
*
Sender
)
{
input_area_t
*
p_area
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_area
=
p_intf
->
p_sys
->
p_input
->
stream
.
p_selected_area
;
if
(
p_area
->
i_part
-
1
>
0
)
{
p_area
->
i_part
--
;
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_intf
->
p_sys
->
p_input
,
p_area
);
input_SetStatus
(
p_intf
->
p_sys
->
p_input
,
INPUT_STATUS_PLAY
);
p_intf
->
p_sys
->
b_chapter_update
=
VLC_TRUE
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_intf
->
p_sys
->
p_menus
->
SetupMenus
();
}
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
NextChapterActionExecute
(
TObject
*
Sender
)
{
input_area_t
*
p_area
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_area
=
p_intf
->
p_sys
->
p_input
->
stream
.
p_selected_area
;
if
(
p_area
->
i_part
+
1
<
p_area
->
i_part_nb
)
{
p_area
->
i_part
++
;
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_intf
->
p_sys
->
p_input
,
p_area
);
input_SetStatus
(
p_intf
->
p_sys
->
p_input
,
INPUT_STATUS_PLAY
);
p_intf
->
p_sys
->
b_chapter_update
=
VLC_TRUE
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_intf
->
p_sys
->
p_menus
->
SetupMenus
();
}
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
}
//---------------------------------------------------------------------------
/*****************************************************************************
* Callback for the 'go!' button
****************************************************************************/
void
__fastcall
TMainFrameDlg
::
ButtonGoClick
(
TObject
*
Sender
)
{
int
i_channel
;
i_channel
=
SpinEditChannel
->
Value
;
msg_Dbg
(
p_intf
,
"joining channel %d"
,
i_channel
);
vlc_mutex_lock
(
&
p_intf
->
change_lock
);
network_ChannelJoin
(
p_intf
,
i_channel
);
vlc_mutex_unlock
(
&
p_intf
->
change_lock
);
// input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PLAY );
}
//---------------------------------------------------------------------------
/*****************************************************************************
* ModeManage: actualise the aspect of the interface whenever the input
* changes.
*****************************************************************************
* The lock has to be taken before you call the function.
*****************************************************************************/
void
__fastcall
TMainFrameDlg
::
ModeManage
()
{
TGroupBox
*
ActiveGB
;
int
i_Height
;
bool
b_control
;
/* hide all boxes */
GroupBoxFile
->
Visible
=
false
;
GroupBoxNetwork
->
Visible
=
false
;
GroupBoxDisc
->
Visible
=
false
;
/* hide slider */
GroupBoxSlider
->
Hide
();
/* controls unavailable */
b_control
=
0
;
/* show the box related to current input mode */
if
(
p_intf
->
p_sys
->
p_input
!=
NULL
)
{
switch
(
p_intf
->
p_sys
->
p_input
->
stream
.
i_method
&
0xf0
)
{
case
INPUT_METHOD_FILE
:
GroupBoxFile
->
Visible
=
true
;
ActiveGB
=
GroupBoxFile
;
LabelFileName
->
Caption
=
p_intf
->
p_sys
->
p_input
->
psz_source
;
break
;
case
INPUT_METHOD_DISC
:
GroupBoxDisc
->
Visible
=
true
;
ActiveGB
=
GroupBoxDisc
;
break
;
case
INPUT_METHOD_NETWORK
:
GroupBoxNetwork
->
Visible
=
true
;
ActiveGB
=
GroupBoxNetwork
;
LabelServer
->
Caption
=
p_intf
->
p_sys
->
p_input
->
psz_source
;
if
(
config_GetInt
(
p_intf
,
"network-channel"
)
)
{
LabelChannel
->
Visible
=
true
;
}
else
{
LabelChannel
->
Visible
=
false
;
}
break
;
default:
msg_Warn
(
p_intf
,
"cannot determine input method"
);
GroupBoxFile
->
Visible
=
true
;
ActiveGB
=
GroupBoxFile
;
LabelFileName
->
Caption
=
p_intf
->
p_sys
->
p_input
->
psz_source
;
break
;
}
i_Height
=
StatusBar
->
Height
+
ActiveGB
->
Height
+
ToolBar
->
Height
+
54
;
/* initialize and show slider for seekable streams */
if
(
p_intf
->
p_sys
->
p_input
->
stream
.
b_seekable
)
{
TrackBar
->
Position
=
p_intf
->
p_sys
->
OldValue
=
0
;
GroupBoxSlider
->
Show
();
i_Height
+=
GroupBoxSlider
->
Height
;
}
/* control buttons for free pace streams */
b_control
=
p_intf
->
p_sys
->
p_input
->
stream
.
b_pace_control
;
/* get ready for menu regeneration */
p_intf
->
p_sys
->
b_program_update
=
1
;
p_intf
->
p_sys
->
b_title_update
=
1
;
p_intf
->
p_sys
->
b_chapter_update
=
1
;
p_intf
->
p_sys
->
b_audio_update
=
1
;
p_intf
->
p_sys
->
b_spu_update
=
1
;
p_intf
->
p_sys
->
i_part
=
0
;
p_intf
->
p_sys
->
p_input
->
stream
.
b_changed
=
0
;
msg_Dbg
(
p_intf
,
"stream has changed, refreshing interface"
);
}
else
{
i_Height
=
StatusBar
->
Height
+
ToolBar
->
Height
+
47
;
if
(
config_GetInt
(
p_intf
,
"network-channel"
)
)
{
GroupBoxNetwork
->
Visible
=
true
;
LabelChannel
->
Visible
=
true
;
i_Height
+=
GroupBoxNetwork
->
Height
+
7
;
}
else
{
/* add space between tolbar and statusbar when
* nothing is displayed; isn't it nicer ? :) */
i_Height
+=
17
;
}
/* unsensitize menus */
MenuProgram
->
Enabled
=
false
;
MenuTitle
->
Enabled
=
false
;
MenuChapter
->
Enabled
=
false
;
MenuLanguage
->
Enabled
=
false
;
MenuSubtitles
->
Enabled
=
false
;
PopupNavigation
->
Enabled
=
false
;
PopupLanguage
->
Enabled
=
false
;
PopupSubtitles
->
Enabled
=
false
;
}
/* resize main window */
this
->
Height
=
i_Height
;
/* set control items */
ToolButtonBack
->
Enabled
=
false
;
ToolButtonEject
->
Enabled
=
!
b_control
;
StopAction
->
Enabled
=
true
;
PauseAction
->
Enabled
=
b_control
;
SlowAction
->
Enabled
=
b_control
;
FastAction
->
Enabled
=
b_control
;
PopupBack
->
Enabled
=
false
;
}
//---------------------------------------------------------------------------
/*****************************************************************************
* CreateConfig: create a configuration dialog and save it for further use
*****************************************************************************
* Check if the dialog box is already opened, if so this will save us
* quite a bit of work. (the interface will be destroyed when you actually
* close the main window, but remember that it is only hidden if you
* clicked on the action buttons). This trick also allows us not to
* duplicate identical dialog windows.
*****************************************************************************/
void
__fastcall
TMainFrameDlg
::
CreatePreferences
(
AnsiString
Name
)
{
TPreferencesDlg
*
Preferences
;
int
i_index
,
i_pos
;
i_index
=
StringListPref
->
IndexOf
(
Name
);
if
(
i_index
!=
-
1
)
{
/* config dialog already exists */
Preferences
=
(
TPreferencesDlg
*
)
StringListPref
->
Objects
[
i_index
];
}
else
{
/* create the config dialog */
Preferences
=
new
TPreferencesDlg
(
this
,
p_intf
);
Preferences
->
CreateConfigDialog
(
Name
.
c_str
()
);
/* save it */
i_pos
=
StringListPref
->
Add
(
Name
);
StringListPref
->
Objects
[
i_pos
]
=
Preferences
;
}
/* display the dialog */
Preferences
->
Show
();
}
//---------------------------------------------------------------------------
vlc_object_release
(
p_vout
);
}
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PlaylistActionExecute
(
TObject
*
Sender
)
{
TPlaylistDlg
*
p_playwin
=
p_intf
->
p_sys
->
p_playwin
;
if
(
p_playwin
->
Visible
)
{
p_playwin
->
Hide
();
}
else
{
p_playwin
->
UpdateGrid
();
p_playwin
->
Show
();
}
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
MessagesActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_messages
->
Show
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PreferencesActionExecute
(
TObject
*
Sender
)
{
CreatePreferences
(
"main"
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
AboutActionExecute
(
TObject
*
Sender
)
{
TAboutDlg
*
AboutDlg
=
new
TAboutDlg
(
this
,
p_intf
);
AboutDlg
->
ShowModal
();
delete
AboutDlg
;
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
BackActionExecute
(
TObject
*
Sender
)
{
/* TODO */
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PlayActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Play
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PauseActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Pause
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
StopActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Stop
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
SlowActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Slow
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
FastActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Fast
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PreviousActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Previous
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
NextActionExecute
(
TObject
*
Sender
)
{
p_intf
->
p_sys
->
p_playwin
->
Next
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
EjectActionExecute
(
TObject
*
Sender
)
{
AnsiString
Device
=
""
;
char
*
psz_current
;
playlist_t
*
p_playlist
;
p_playlist
=
(
playlist_t
*
)
vlc_object_find
(
p_intf
,
VLC_OBJECT_PLAYLIST
,
FIND_ANYWHERE
);
if
(
p_playlist
==
NULL
)
{
return
;
}
/*
* Get the active input
* Determine whether we can eject a media, ie it's a VCD or DVD
* If it's neither a VCD nor a DVD, then return
*/
vlc_mutex_lock
(
&
p_playlist
->
object_lock
);
psz_current
=
p_playlist
->
pp_items
[
p_playlist
->
i_index
]
->
psz_name
;
if
(
psz_current
!=
NULL
)
{
if
(
strncmp
(
psz_current
,
"dvd"
,
3
)
||
strncmp
(
psz_current
,
"vcd"
,
3
)
)
{
/* Determine the device name by omitting the first 4 characters
* and keeping 3 characters */
Device
=
strdup
(
(
psz_current
+
4
)
);
Device
=
Device
.
SubString
(
1
,
2
);
}
}
vlc_mutex_unlock
(
&
p_playlist
->
object_lock
);
vlc_object_release
(
p_playlist
);
if
(
Device
==
""
)
{
return
;
}
/* If there's a stream playing, we aren't allowed to eject ! */
if
(
p_intf
->
p_sys
->
p_input
==
NULL
)
{
msg_Dbg
(
p_intf
,
"ejecting %s"
,
Device
.
c_str
()
);
intf_Eject
(
p_intf
,
Device
.
c_str
()
);
}
}
//--------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
VolumeUpActionExecute
(
TObject
*
Sender
)
{
aout_VolumeUp
(
p_intf
,
1
,
NULL
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
VolumeDownActionExecute
(
TObject
*
Sender
)
{
aout_VolumeDown
(
p_intf
,
1
,
NULL
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
MuteActionExecute
(
TObject
*
Sender
)
{
aout_VolumeMute
(
p_intf
,
NULL
);
// MenuMute->Checked = ! MenuMute->Checked;
}
//---------------------------------------------------------------------------
/*****************************************************************************
* External drop handling
*****************************************************************************/
void
__fastcall
TMainFrameDlg
::
OnDrop
(
TMessage
&
Msg
)
{
/* find the number of files dropped */
int
num_files
=
DragQueryFile
(
(
HDROP
)
Msg
.
WParam
,
0xFFFFFFFF
,
(
LPSTR
)
NULL
,
NULL
);
/* append each file to the playlist */
for
(
int
i
=
0
;
i
<
num_files
;
i
++
)
{
/* find the length of the filename */
int
name_length
=
DragQueryFile
(
(
HDROP
)
Msg
.
WParam
,
i
,
NULL
,
NULL
)
+
1
;
/* get the filename */
char
*
FileName
=
new
char
[
name_length
];
DragQueryFile
(
(
HDROP
)
Msg
.
WParam
,
i
,
FileName
,
name_length
);
/* add the new file to the playlist */
if
(
config_GetInt
(
p_intf
,
"enqueue"
)
)
{
p_intf
->
p_sys
->
p_playwin
->
Add
(
FileName
,
PLAYLIST_APPEND
,
PLAYLIST_END
);
}
else
{
p_intf
->
p_sys
->
p_playwin
->
Add
(
FileName
,
PLAYLIST_APPEND
|
PLAYLIST_GO
,
PLAYLIST_END
);
}
delete
[]
FileName
;
}
DragFinish
(
(
HDROP
)
Msg
.
WParam
);
Msg
.
Result
=
0
;
}
//--------------------------------------------------------------------------
/*****************************************************************************
* Menu and popup callbacks
*****************************************************************************/
void
__fastcall
TMainFrameDlg
::
MenuHideinterfaceClick
(
TObject
*
Sender
)
{
this
->
SendToBack
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PopupToggleInterfaceClick
(
TObject
*
Sender
)
{
this
->
BringToFront
();
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PopupCloseClick
(
TObject
*
Sender
)
{
/* We do nothing, we just need a click on a menu item
* to close the popup. Don't ask me why... */
return
;
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PopupJumpClick
(
TObject
*
Sender
)
{
/* TODO */
}
//---------------------------------------------------------------------------
/*****************************************************************************
* Callbacks for DVD/VCD navigation
****************************************************************************/
void
__fastcall
TMainFrameDlg
::
PrevTitleActionExecute
(
TObject
*
Sender
)
{
input_area_t
*
p_area
;
int
i_id
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
i_id
=
p_intf
->
p_sys
->
p_input
->
stream
.
p_selected_area
->
i_id
-
1
;
/* Disallow area 0 since it is used for video_ts.vob */
if
(
i_id
>
0
)
{
p_area
=
p_intf
->
p_sys
->
p_input
->
stream
.
pp_areas
[
i_id
];
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_intf
->
p_sys
->
p_input
,
p_area
);
input_SetStatus
(
p_intf
->
p_sys
->
p_input
,
INPUT_STATUS_PLAY
);
p_intf
->
p_sys
->
b_title_update
=
VLC_TRUE
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_intf
->
p_sys
->
p_menus
->
SetupMenus
();
}
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
NextTitleActionExecute
(
TObject
*
Sender
)
{
input_area_t
*
p_area
;
unsigned
int
i_id
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
i_id
=
p_intf
->
p_sys
->
p_input
->
stream
.
p_selected_area
->
i_id
+
1
;
if
(
i_id
<
p_intf
->
p_sys
->
p_input
->
stream
.
i_area_nb
)
{
p_area
=
p_intf
->
p_sys
->
p_input
->
stream
.
pp_areas
[
i_id
];
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_intf
->
p_sys
->
p_input
,
p_area
);
input_SetStatus
(
p_intf
->
p_sys
->
p_input
,
INPUT_STATUS_PLAY
);
p_intf
->
p_sys
->
b_title_update
=
VLC_TRUE
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_intf
->
p_sys
->
p_menus
->
SetupMenus
();
}
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
PrevChapterActionExecute
(
TObject
*
Sender
)
{
input_area_t
*
p_area
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_area
=
p_intf
->
p_sys
->
p_input
->
stream
.
p_selected_area
;
if
(
p_area
->
i_part
-
1
>
0
)
{
p_area
->
i_part
--
;
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_intf
->
p_sys
->
p_input
,
p_area
);
input_SetStatus
(
p_intf
->
p_sys
->
p_input
,
INPUT_STATUS_PLAY
);
p_intf
->
p_sys
->
b_chapter_update
=
VLC_TRUE
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_intf
->
p_sys
->
p_menus
->
SetupMenus
();
}
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
}
//---------------------------------------------------------------------------
void
__fastcall
TMainFrameDlg
::
NextChapterActionExecute
(
TObject
*
Sender
)
{
input_area_t
*
p_area
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_area
=
p_intf
->
p_sys
->
p_input
->
stream
.
p_selected_area
;
if
(
p_area
->
i_part
+
1
<
p_area
->
i_part_nb
)
{
p_area
->
i_part
++
;
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
input_ChangeArea
(
p_intf
->
p_sys
->
p_input
,
p_area
);
input_SetStatus
(
p_intf
->
p_sys
->
p_input
,
INPUT_STATUS_PLAY
);
p_intf
->
p_sys
->
b_chapter_update
=
VLC_TRUE
;
vlc_mutex_lock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
p_intf
->
p_sys
->
p_menus
->
SetupMenus
();
}
vlc_mutex_unlock
(
&
p_intf
->
p_sys
->
p_input
->
stream
.
stream_lock
);
}
//---------------------------------------------------------------------------
/*****************************************************************************
* Callback for the 'go!' button
****************************************************************************/
void
__fastcall
TMainFrameDlg
::
ButtonGoClick
(
TObject
*
Sender
)
{
int
i_channel
;
i_channel
=
SpinEditChannel
->
Value
;
msg_Dbg
(
p_intf
,
"joining channel %d"
,
i_channel
);
vlc_mutex_lock
(
&
p_intf
->
change_lock
);
network_ChannelJoin
(
p_intf
,
i_channel
);
vlc_mutex_unlock
(
&
p_intf
->
change_lock
);
// input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PLAY );
}
//---------------------------------------------------------------------------
/*****************************************************************************
* ModeManage: actualise the aspect of the interface whenever the input
* changes.
*****************************************************************************
* The lock has to be taken before you call the function.
*****************************************************************************/
void
__fastcall
TMainFrameDlg
::
ModeManage
()
{
TGroupBox
*
ActiveGB
;
int
i_Height
;
bool
b_control
;
/* hide all boxes */
GroupBoxFile
->
Visible
=
false
;
GroupBoxNetwork
->
Visible
=
false
;
GroupBoxDisc
->
Visible
=
false
;
/* hide slider */
GroupBoxSlider
->
Hide
();
/* controls unavailable */
b_control
=
0
;
/* show the box related to current input mode */
if
(
p_intf
->
p_sys
->
p_input
!=
NULL
)
{
switch
(
p_intf
->
p_sys
->
p_input
->
stream
.
i_method
&
0xf0
)
{
case
INPUT_METHOD_FILE
:
GroupBoxFile
->
Visible
=
true
;
ActiveGB
=
GroupBoxFile
;
LabelFileName
->
Caption
=
p_intf
->
p_sys
->
p_input
->
psz_source
;
break
;
case
INPUT_METHOD_DISC
:
GroupBoxDisc
->
Visible
=
true
;
ActiveGB
=
GroupBoxDisc
;
break
;
case
INPUT_METHOD_NETWORK
:
GroupBoxNetwork
->
Visible
=
true
;
ActiveGB
=
GroupBoxNetwork
;
LabelServer
->
Caption
=
p_intf
->
p_sys
->
p_input
->
psz_source
;
if
(
config_GetInt
(
p_intf
,
"network-channel"
)
)
{
LabelChannel
->
Visible
=
true
;
}
else
{
LabelChannel
->
Visible
=
false
;
}
break
;
default:
msg_Warn
(
p_intf
,
"cannot determine input method"
);
GroupBoxFile
->
Visible
=
true
;
ActiveGB
=
GroupBoxFile
;
LabelFileName
->
Caption
=
p_intf
->
p_sys
->
p_input
->
psz_source
;
break
;
}
i_Height
=
StatusBar
->
Height
+
ActiveGB
->
Height
+
ToolBar
->
Height
+
54
;
/* initialize and show slider for seekable streams */
if
(
p_intf
->
p_sys
->
p_input
->
stream
.
b_seekable
)
{
TrackBar
->
Position
=
p_intf
->
p_sys
->
OldValue
=
0
;
GroupBoxSlider
->
Show
();
i_Height
+=
GroupBoxSlider
->
Height
;
}
/* control buttons for free pace streams */
b_control
=
p_intf
->
p_sys
->
p_input
->
stream
.
b_pace_control
;
/* get ready for menu regeneration */
p_intf
->
p_sys
->
b_program_update
=
1
;
p_intf
->
p_sys
->
b_title_update
=
1
;
p_intf
->
p_sys
->
b_chapter_update
=
1
;
p_intf
->
p_sys
->
b_audio_update
=
1
;
p_intf
->
p_sys
->
b_spu_update
=
1
;
p_intf
->
p_sys
->
i_part
=
0
;
p_intf
->
p_sys
->
p_input
->
stream
.
b_changed
=
0
;
msg_Dbg
(
p_intf
,
"stream has changed, refreshing interface"
);
}
else
{
i_Height
=
StatusBar
->
Height
+
ToolBar
->
Height
+
47
;
if
(
config_GetInt
(
p_intf
,
"network-channel"
)
)
{
GroupBoxNetwork
->
Visible
=
true
;
LabelChannel
->
Visible
=
true
;
i_Height
+=
GroupBoxNetwork
->
Height
+
7
;
}
else
{
/* add space between tolbar and statusbar when
* nothing is displayed; isn't it nicer ? :) */
i_Height
+=
17
;
}
/* unsensitize menus */
MenuProgram
->
Enabled
=
false
;
MenuTitle
->
Enabled
=
false
;
MenuChapter
->
Enabled
=
false
;
MenuLanguage
->
Enabled
=
false
;
MenuSubtitles
->
Enabled
=
false
;
PopupNavigation
->
Enabled
=
false
;
PopupLanguage
->
Enabled
=
false
;
PopupSubtitles
->
Enabled
=
false
;
}
/* resize main window */
this
->
Height
=
i_Height
;
/* set control items */
ToolButtonBack
->
Enabled
=
false
;
ToolButtonEject
->
Enabled
=
!
b_control
;
StopAction
->
Enabled
=
true
;
PauseAction
->
Enabled
=
b_control
;
SlowAction
->
Enabled
=
b_control
;
FastAction
->
Enabled
=
b_control
;
PopupBack
->
Enabled
=
false
;
}
//---------------------------------------------------------------------------
/*****************************************************************************
* CreateConfig: create a configuration dialog and save it for further use
*****************************************************************************
* Check if the dialog box is already opened, if so this will save us
* quite a bit of work. (the interface will be destroyed when you actually
* close the main window, but remember that it is only hidden if you
* clicked on the action buttons). This trick also allows us not to
* duplicate identical dialog windows.
*****************************************************************************/
void
__fastcall
TMainFrameDlg
::
CreatePreferences
(
AnsiString
Name
)
{
TPreferencesDlg
*
Preferences
;
int
i_index
,
i_pos
;
i_index
=
StringListPref
->
IndexOf
(
Name
);
if
(
i_index
!=
-
1
)
{
/* config dialog already exists */
Preferences
=
(
TPreferencesDlg
*
)
StringListPref
->
Objects
[
i_index
];
}
else
{
/* create the config dialog */
Preferences
=
new
TPreferencesDlg
(
this
,
p_intf
);
Preferences
->
CreateConfigDialog
(
Name
.
c_str
()
);
/* save it */
i_pos
=
StringListPref
->
Add
(
Name
);
StringListPref
->
Objects
[
i_pos
]
=
Preferences
;
}
/* display the dialog */
Preferences
->
Show
();
}
//---------------------------------------------------------------------------
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment