Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
02d360bd
Commit
02d360bd
authored
Jan 25, 2003
by
Eric Petit
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added a window to see vlc messages.
parent
160a693d
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
1068 additions
and
824 deletions
+1068
-824
modules/gui/beos/BeOS.cpp
modules/gui/beos/BeOS.cpp
+2
-1
modules/gui/beos/Interface.cpp
modules/gui/beos/Interface.cpp
+17
-15
modules/gui/beos/InterfaceWindow.cpp
modules/gui/beos/InterfaceWindow.cpp
+671
-635
modules/gui/beos/InterfaceWindow.h
modules/gui/beos/InterfaceWindow.h
+77
-76
modules/gui/beos/MessagesWindow.cpp
modules/gui/beos/MessagesWindow.cpp
+150
-0
modules/gui/beos/MessagesWindow.h
modules/gui/beos/MessagesWindow.h
+51
-0
modules/gui/beos/Modules.am
modules/gui/beos/Modules.am
+2
-0
modules/gui/beos/MsgVals.h
modules/gui/beos/MsgVals.h
+41
-40
modules/gui/beos/PreferencesWindow.cpp
modules/gui/beos/PreferencesWindow.cpp
+36
-38
modules/gui/beos/PreferencesWindow.h
modules/gui/beos/PreferencesWindow.h
+5
-5
modules/gui/beos/VlcWrapper.h
modules/gui/beos/VlcWrapper.h
+16
-14
No files found.
modules/gui/beos/BeOS.cpp
View file @
02d360bd
...
...
@@ -2,7 +2,7 @@
* beos.cpp : BeOS plugin for vlc
*****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN
* $Id: BeOS.cpp,v 1.
3 2003/01/25 01:03:44
titer Exp $
* $Id: BeOS.cpp,v 1.
4 2003/01/25 20:15:41
titer Exp $
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
...
...
@@ -59,6 +59,7 @@ vlc_module_begin();
add_integer
(
"beos-playlist-xpos"
,
0
,
NULL
,
""
,
""
);
add_integer
(
"beos-playlist-ypos"
,
0
,
NULL
,
""
,
""
);
add_bool
(
"beos-playlist-show"
,
0
,
NULL
,
""
,
""
);
add_bool
(
"beos-messages-show"
,
0
,
NULL
,
""
,
""
);
add_submodule
();
set_capability
(
"video output"
,
100
);
set_callbacks
(
E_
(
OpenVideo
),
E_
(
CloseVideo
)
);
...
...
modules/gui/beos/Interface.cpp
View file @
02d360bd
...
...
@@ -2,7 +2,7 @@
* intf_beos.cpp: beos interface
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: Interface.cpp,v 1.
7 2002/12/09 13:37:38
titer Exp $
* $Id: Interface.cpp,v 1.
8 2003/01/25 20:15:41
titer Exp $
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
...
...
@@ -55,15 +55,7 @@ static void Run ( intf_thread_t *p_intf );
*****************************************************************************/
int
E_
(
OpenIntf
)
(
vlc_object_t
*
p_this
)
{
intf_thread_t
*
p_intf
=
(
intf_thread_t
*
)
p_this
;
BScreen
*
screen
;
screen
=
new
BScreen
();
BRect
rect
=
screen
->
Frame
();
rect
.
top
=
rect
.
bottom
-
100
;
rect
.
bottom
-=
50
;
rect
.
left
+=
50
;
rect
.
right
=
rect
.
left
+
350
;
delete
screen
;
intf_thread_t
*
p_intf
=
(
intf_thread_t
*
)
p_this
;
/* Allocate instance and initialize some members */
p_intf
->
p_sys
=
(
intf_sys_t
*
)
malloc
(
sizeof
(
intf_sys_t
)
);
...
...
@@ -73,11 +65,19 @@ int E_(OpenIntf) ( vlc_object_t *p_this )
return
(
1
);
}
p_intf
->
p_sys
->
p_sub
=
msg_Subscribe
(
p_intf
);
p_intf
->
p_sys
->
p_wrapper
=
new
VlcWrapper
(
p_intf
);
p_intf
->
pf_run
=
Run
;
/* Create the interface window */
BScreen
*
screen
;
screen
=
new
BScreen
();
BRect
rect
=
screen
->
Frame
();
rect
.
top
=
rect
.
bottom
-
100
;
rect
.
bottom
-=
50
;
rect
.
left
+=
50
;
rect
.
right
=
rect
.
left
+
350
;
delete
screen
;
p_intf
->
p_sys
->
p_window
=
new
InterfaceWindow
(
rect
,
VOUT_TITLE
" (BeOS interface)"
,
p_intf
);
...
...
@@ -87,9 +87,9 @@ int E_(OpenIntf) ( vlc_object_t *p_this )
msg_Err
(
p_intf
,
"cannot allocate InterfaceWindow"
);
return
(
1
);
}
else
{
BMessage
message
(
INTERFACE_CREATED
);
message
.
AddPointer
(
"window"
,
p_intf
->
p_sys
->
p_window
);
be_app
->
PostMessage
(
&
message
);
BMessage
message
(
INTERFACE_CREATED
);
message
.
AddPointer
(
"window"
,
p_intf
->
p_sys
->
p_window
);
be_app
->
PostMessage
(
&
message
);
}
p_intf
->
p_sys
->
i_saved_volume
=
AOUT_VOLUME_DEFAULT
;
p_intf
->
p_sys
->
b_loop
=
0
;
...
...
@@ -104,6 +104,8 @@ int E_(OpenIntf) ( vlc_object_t *p_this )
void
E_
(
CloseIntf
)
(
vlc_object_t
*
p_this
)
{
intf_thread_t
*
p_intf
=
(
intf_thread_t
*
)
p_this
;
msg_Unsubscribe
(
p_intf
,
p_intf
->
p_sys
->
p_sub
);
/* Destroy the interface window */
p_intf
->
p_sys
->
p_window
->
Lock
();
...
...
@@ -125,7 +127,7 @@ static void Run( intf_thread_t *p_intf )
if
(
p_intf
->
p_sys
->
p_wrapper
->
UpdateInputAndAOut
()
)
{
/* Manage the slider */
p_intf
->
p_sys
->
p_window
->
u
pdateInterface
();
p_intf
->
p_sys
->
p_window
->
U
pdateInterface
();
}
/* Wait a bit */
...
...
modules/gui/beos/InterfaceWindow.cpp
View file @
02d360bd
...
...
@@ -2,7 +2,7 @@
* InterfaceWindow.cpp: beos interface
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: InterfaceWindow.cpp,v 1.2
1 2003/01/25 01:03:44
titer Exp $
* $Id: InterfaceWindow.cpp,v 1.2
2 2003/01/25 20:15:41
titer Exp $
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
...
...
@@ -48,6 +48,7 @@
#include "MediaControlView.h"
#include "PlayListWindow.h"
#include "PreferencesWindow.h"
#include "MessagesWindow.h"
#include "InterfaceWindow.h"
#define INTERFACE_UPDATE_TIMEOUT 80000 // 2 frames if at 25 fps
...
...
@@ -58,13 +59,13 @@
*****************************************************************************/
InterfaceWindow
::
InterfaceWindow
(
BRect
frame
,
const
char
*
name
,
intf_thread_t
*
p_interface
)
:
BWindow
(
frame
,
name
,
B_TITLED_WINDOW_LOOK
,
B_NORMAL_WINDOW_FEEL
,
B_NOT_ZOOMABLE
|
B_WILL_ACCEPT_FIRST_CLICK
|
B_ASYNCHRONOUS_CONTROLS
),
p_intf
(
p_interface
),
fFilePanel
(
NULL
),
fSubtitlesPanel
(
NULL
),
fLastUpdateTime
(
system_time
()
)
intf_thread_t
*
p_interface
)
:
BWindow
(
frame
,
name
,
B_TITLED_WINDOW_LOOK
,
B_NORMAL_WINDOW_FEEL
,
B_NOT_ZOOMABLE
|
B_WILL_ACCEPT_FIRST_CLICK
|
B_ASYNCHRONOUS_CONTROLS
),
p_intf
(
p_interface
),
fFilePanel
(
NULL
),
fSubtitlesPanel
(
NULL
),
fLastUpdateTime
(
system_time
()
)
{
p_intf
=
p_interface
;
p_wrapper
=
p_intf
->
p_sys
->
p_wrapper
;
...
...
@@ -72,10 +73,6 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name,
fPlaylistIsEmpty
=
!
(
p_wrapper
->
PlaylistSize
()
>
0
);
fPlaylistWindow
=
new
PlayListWindow
(
BRect
(
100.0
,
100.0
,
400.0
,
350.0
),
"Playlist"
,
this
,
p_intf
);
BScreen
*
p_screen
=
new
BScreen
();
BRect
screen_rect
=
p_screen
->
Frame
();
delete
p_screen
;
...
...
@@ -84,106 +81,114 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name,
(
screen_rect
.
bottom
-
PREFS_WINDOW_HEIGHT
)
/
2
,
(
screen_rect
.
right
+
PREFS_WINDOW_WIDTH
)
/
2
,
(
screen_rect
.
bottom
+
PREFS_WINDOW_HEIGHT
)
/
2
);
fPreferencesWindow
=
new
PreferencesWindow
(
window_rect
,
"Preferences"
,
p_intf
);
fPreferencesWindow
=
new
PreferencesWindow
(
p_intf
,
window_rect
,
"Preferences"
);
window_rect
.
Set
(
screen_rect
.
right
-
500
,
screen_rect
.
top
+
50
,
screen_rect
.
right
-
150
,
screen_rect
.
top
+
250
);
fPlaylistWindow
=
new
PlayListWindow
(
window_rect
,
"Playlist"
,
this
,
p_intf
);
window_rect
.
Set
(
screen_rect
.
right
-
500
,
screen_rect
.
top
+
300
,
screen_rect
.
right
-
150
,
screen_rect
.
top
+
600
);
fMessagesWindow
=
new
MessagesWindow
(
p_intf
,
window_rect
,
"Messages"
);
// set the title bar
SetName
(
"interface"
);
SetTitle
(
VOUT_TITLE
);
// the media control view
p_mediaControl
=
new
MediaControlView
(
BRect
(
0.0
,
0.0
,
250.0
,
50.0
),
p_intf
);
p_mediaControl
->
SetViewColor
(
ui_color
(
B_PANEL_BACKGROUND_COLOR
)
);
float
width
,
height
;
p_mediaControl
->
GetPreferredSize
(
&
width
,
&
height
);
// set up the main menu
fMenuBar
=
new
BMenuBar
(
BRect
(
0.0
,
0.0
,
width
,
15.0
),
"main menu"
,
B_FOLLOW_NONE
,
B_ITEMS_IN_ROW
,
false
);
// make menu bar resize to correct height
float
menuWidth
,
menuHeight
;
fMenuBar
->
GetPreferredSize
(
&
menuWidth
,
&
menuHeight
);
fMenuBar
->
ResizeTo
(
width
,
menuHeight
);
// don't change! it's a workarround!
// take care of proper size for ourself
height
+=
fMenuBar
->
Bounds
().
Height
();
ResizeTo
(
width
,
height
);
p_mediaControl
->
MoveTo
(
fMenuBar
->
Bounds
().
LeftBottom
()
+
BPoint
(
0.0
,
1.0
)
);
AddChild
(
fMenuBar
);
AddChild
(
p_mediaControl
);
// Add the file Menu
BMenu
*
fileMenu
=
new
BMenu
(
"File"
);
fMenuBar
->
AddItem
(
fileMenu
);
fileMenu
->
AddItem
(
new
BMenuItem
(
"Open File"
B_UTF8_ELLIPSIS
,
new
BMessage
(
OPEN_FILE
),
'O'
)
);
fileMenu
->
AddItem
(
new
CDMenu
(
"Open Disc"
)
);
fileMenu
->
AddItem
(
new
BMenuItem
(
"Load a subtitle file"
B_UTF8_ELLIPSIS
,
new
BMessage
(
LOAD_SUBFILE
)
)
);
fileMenu
->
AddSeparatorItem
();
BMenuItem
*
item
=
new
BMenuItem
(
"About"
B_UTF8_ELLIPSIS
,
new
BMessage
(
B_ABOUT_REQUESTED
),
'A'
);
item
->
SetTarget
(
be_app
);
fileMenu
->
AddItem
(
item
);
fileMenu
->
AddItem
(
new
BMenuItem
(
"Quit"
,
new
BMessage
(
B_QUIT_REQUESTED
),
'Q'
)
);
fLanguageMenu
=
new
LanguageMenu
(
"Language"
,
AUDIO_ES
,
p_wrapper
);
fSubtitlesMenu
=
new
LanguageMenu
(
"Subtitles"
,
SPU_ES
,
p_wrapper
);
/* Add the Audio menu */
fAudioMenu
=
new
BMenu
(
"Audio"
);
fMenuBar
->
AddItem
(
fAudioMenu
);
fAudioMenu
->
AddItem
(
fLanguageMenu
);
fAudioMenu
->
AddItem
(
fSubtitlesMenu
);
fPrevTitleMI
=
new
BMenuItem
(
"Prev Title"
,
new
BMessage
(
PREV_TITLE
)
);
fNextTitleMI
=
new
BMenuItem
(
"Next Title"
,
new
BMessage
(
NEXT_TITLE
)
);
fPrevChapterMI
=
new
BMenuItem
(
"Prev Chapter"
,
new
BMessage
(
PREV_CHAPTER
)
);
fNextChapterMI
=
new
BMenuItem
(
"Next Chapter"
,
new
BMessage
(
NEXT_CHAPTER
)
);
/* Add the Navigation menu */
fNavigationMenu
=
new
BMenu
(
"Navigation"
);
fMenuBar
->
AddItem
(
fNavigationMenu
);
fNavigationMenu
->
AddItem
(
fPrevTitleMI
);
fNavigationMenu
->
AddItem
(
fNextTitleMI
);
fNavigationMenu
->
AddItem
(
fTitleMenu
=
new
TitleMenu
(
"Go to Title"
,
p_intf
)
);
fNavigationMenu
->
AddSeparatorItem
();
fNavigationMenu
->
AddItem
(
fPrevChapterMI
);
fNavigationMenu
->
AddItem
(
fNextChapterMI
);
fNavigationMenu
->
AddItem
(
fChapterMenu
=
new
ChapterMenu
(
"Go to Chapter"
,
p_intf
)
);
/* Add the Speed menu */
fSpeedMenu
=
new
BMenu
(
"Speed"
);
fSpeedMenu
->
SetRadioMode
(
true
);
fSpeedMenu
->
AddItem
(
fSlowerMI
=
new
BMenuItem
(
"Slower"
,
new
BMessage
(
SLOWER_PLAY
)
)
);
fNormalMI
=
new
BMenuItem
(
"Normal"
,
new
BMessage
(
NORMAL_PLAY
)
);
fNormalMI
->
SetMarked
(
true
);
// default to normal speed
fSpeedMenu
->
AddItem
(
fNormalMI
);
fSpeedMenu
->
AddItem
(
fFasterMI
=
new
BMenuItem
(
"Faster"
,
new
BMessage
(
FASTER_PLAY
)
)
);
fSpeedMenu
->
SetTargetForItems
(
this
);
fMenuBar
->
AddItem
(
fSpeedMenu
);
/* Add the Show menu */
fShowMenu
=
new
BMenu
(
"Show"
);
fShowMenu
->
AddItem
(
new
BMenuItem
(
"Play List"
B_UTF8_ELLIPSIS
,
new
BMessage
(
OPEN_PLAYLIST
),
'P'
)
);
fShowMenu
->
AddItem
(
new
BMenuItem
(
"Messages"
B_UTF8_ELLIPSIS
,
new
BMessage
(
OPEN_MESSAGES
),
'M'
)
);
fShowMenu
->
AddItem
(
new
BMenuItem
(
"Settings"
B_UTF8_ELLIPSIS
,
new
BMessage
(
OPEN_PREFERENCES
),
'S'
)
);
fMenuBar
->
AddItem
(
fShowMenu
);
/* Prepare fow showing */
_SetMenusEnabled
(
false
);
p_mediaControl
->
SetEnabled
(
false
);
// set the title bar
SetName
(
"interface"
);
SetTitle
(
VOUT_TITLE
);
// the media control view
p_mediaControl
=
new
MediaControlView
(
BRect
(
0.0
,
0.0
,
250.0
,
50.0
),
p_intf
);
p_mediaControl
->
SetViewColor
(
ui_color
(
B_PANEL_BACKGROUND_COLOR
)
);
float
width
,
height
;
p_mediaControl
->
GetPreferredSize
(
&
width
,
&
height
);
// set up the main menu
fMenuBar
=
new
BMenuBar
(
BRect
(
0.0
,
0.0
,
width
,
15.0
),
"main menu"
,
B_FOLLOW_NONE
,
B_ITEMS_IN_ROW
,
false
);
// make menu bar resize to correct height
float
menuWidth
,
menuHeight
;
fMenuBar
->
GetPreferredSize
(
&
menuWidth
,
&
menuHeight
);
fMenuBar
->
ResizeTo
(
width
,
menuHeight
);
// don't change! it's a workarround!
// take care of proper size for ourself
height
+=
fMenuBar
->
Bounds
().
Height
();
ResizeTo
(
width
,
height
);
p_mediaControl
->
MoveTo
(
fMenuBar
->
Bounds
().
LeftBottom
()
+
BPoint
(
0.0
,
1.0
)
);
AddChild
(
fMenuBar
);
AddChild
(
p_mediaControl
);
// Add the file Menu
BMenu
*
fileMenu
=
new
BMenu
(
"File"
);
fMenuBar
->
AddItem
(
fileMenu
);
fileMenu
->
AddItem
(
new
BMenuItem
(
"Open File"
B_UTF8_ELLIPSIS
,
new
BMessage
(
OPEN_FILE
),
'O'
)
);
fileMenu
->
AddItem
(
new
CDMenu
(
"Open Disc"
)
);
fileMenu
->
AddItem
(
new
BMenuItem
(
"Load a subtitle file"
B_UTF8_ELLIPSIS
,
new
BMessage
(
LOAD_SUBFILE
)
)
);
fileMenu
->
AddSeparatorItem
();
fileMenu
->
AddItem
(
new
BMenuItem
(
"Play List"
B_UTF8_ELLIPSIS
,
new
BMessage
(
OPEN_PLAYLIST
),
'P'
)
);
fileMenu
->
AddSeparatorItem
();
BMenuItem
*
item
=
new
BMenuItem
(
"About"
B_UTF8_ELLIPSIS
,
new
BMessage
(
B_ABOUT_REQUESTED
),
'A'
);
item
->
SetTarget
(
be_app
);
fileMenu
->
AddItem
(
item
);
fileMenu
->
AddItem
(
new
BMenuItem
(
"Quit"
,
new
BMessage
(
B_QUIT_REQUESTED
),
'Q'
)
);
fLanguageMenu
=
new
LanguageMenu
(
"Language"
,
AUDIO_ES
,
p_wrapper
);
fSubtitlesMenu
=
new
LanguageMenu
(
"Subtitles"
,
SPU_ES
,
p_wrapper
);
/* Add the Audio menu */
fAudioMenu
=
new
BMenu
(
"Audio"
);
fMenuBar
->
AddItem
(
fAudioMenu
);
fAudioMenu
->
AddItem
(
fLanguageMenu
);
fAudioMenu
->
AddItem
(
fSubtitlesMenu
);
fPrevTitleMI
=
new
BMenuItem
(
"Prev Title"
,
new
BMessage
(
PREV_TITLE
)
);
fNextTitleMI
=
new
BMenuItem
(
"Next Title"
,
new
BMessage
(
NEXT_TITLE
)
);
fPrevChapterMI
=
new
BMenuItem
(
"Prev Chapter"
,
new
BMessage
(
PREV_CHAPTER
)
);
fNextChapterMI
=
new
BMenuItem
(
"Next Chapter"
,
new
BMessage
(
NEXT_CHAPTER
)
);
/* Add the Navigation menu */
fNavigationMenu
=
new
BMenu
(
"Navigation"
);
fMenuBar
->
AddItem
(
fNavigationMenu
);
fNavigationMenu
->
AddItem
(
fPrevTitleMI
);
fNavigationMenu
->
AddItem
(
fNextTitleMI
);
fNavigationMenu
->
AddItem
(
fTitleMenu
=
new
TitleMenu
(
"Go to Title"
,
p_intf
)
);
fNavigationMenu
->
AddSeparatorItem
();
fNavigationMenu
->
AddItem
(
fPrevChapterMI
);
fNavigationMenu
->
AddItem
(
fNextChapterMI
);
fNavigationMenu
->
AddItem
(
fChapterMenu
=
new
ChapterMenu
(
"Go to Chapter"
,
p_intf
)
);
/* Add the Speed menu */
fSpeedMenu
=
new
BMenu
(
"Speed"
);
fSpeedMenu
->
SetRadioMode
(
true
);
fSpeedMenu
->
AddItem
(
fSlowerMI
=
new
BMenuItem
(
"Slower"
,
new
BMessage
(
SLOWER_PLAY
)
)
);
fNormalMI
=
new
BMenuItem
(
"Normal"
,
new
BMessage
(
NORMAL_PLAY
)
);
fNormalMI
->
SetMarked
(
true
);
// default to normal speed
fSpeedMenu
->
AddItem
(
fNormalMI
);
fSpeedMenu
->
AddItem
(
fFasterMI
=
new
BMenuItem
(
"Faster"
,
new
BMessage
(
FASTER_PLAY
)
)
);
fSpeedMenu
->
SetTargetForItems
(
this
);
fMenuBar
->
AddItem
(
fSpeedMenu
);
/* Add the Settings menu */
fSettingsMenu
=
new
BMenu
(
"Settings"
);
fSettingsMenu
->
AddItem
(
fPreferencesMI
=
new
BMenuItem
(
"Preferences"
,
new
BMessage
(
OPEN_PREFERENCES
)
)
);
fMenuBar
->
AddItem
(
fSettingsMenu
);
/* Prepare fow showing */
_SetMenusEnabled
(
false
);
p_mediaControl
->
SetEnabled
(
false
);
/* Restore interface settings */
int
i_width
=
config_GetInt
(
p_intf
,
"beos-intf-width"
),
i_height
=
config_GetInt
(
p_intf
,
"beos-intf-height"
),
...
...
@@ -214,14 +219,23 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name,
fPlaylistWindow
->
Unlock
();
}
}
Show
();
if
(
config_GetInt
(
p_intf
,
"beos-messages-show"
)
)
{
/* messages showing */
if
(
fMessagesWindow
->
Lock
()
)
{
fMessagesWindow
->
Show
();
fMessagesWindow
->
Unlock
();
}
}
Show
();
}
InterfaceWindow
::~
InterfaceWindow
()
{
if
(
fPlaylistWindow
)
fPlaylistWindow
->
ReallyQuit
();
if
(
fPlaylistWindow
)
fPlaylistWindow
->
ReallyQuit
();
}
/*****************************************************************************
...
...
@@ -230,12 +244,12 @@ InterfaceWindow::~InterfaceWindow()
void
InterfaceWindow
::
FrameResized
(
float
width
,
float
height
)
{
BRect
r
(
Bounds
());
fMenuBar
->
MoveTo
(
r
.
LeftTop
());
fMenuBar
->
ResizeTo
(
r
.
Width
(),
fMenuBar
->
Bounds
().
Height
());
r
.
top
+=
fMenuBar
->
Bounds
().
Height
()
+
1.0
;
p_mediaControl
->
MoveTo
(
r
.
LeftTop
());
p_mediaControl
->
ResizeTo
(
r
.
Width
(),
r
.
Height
());
BRect
r
(
Bounds
());
fMenuBar
->
MoveTo
(
r
.
LeftTop
());
fMenuBar
->
ResizeTo
(
r
.
Width
(),
fMenuBar
->
Bounds
().
Height
());
r
.
top
+=
fMenuBar
->
Bounds
().
Height
()
+
1.0
;
p_mediaControl
->
MoveTo
(
r
.
LeftTop
());
p_mediaControl
->
ResizeTo
(
r
.
Width
(),
r
.
Height
());
}
/*****************************************************************************
...
...
@@ -243,335 +257,350 @@ InterfaceWindow::FrameResized(float width, float height)
*****************************************************************************/
void
InterfaceWindow
::
MessageReceived
(
BMessage
*
p_message
)
{
int
playback_status
;
// remember playback state
playback_status
=
p_wrapper
->
InputStatus
();
switch
(
p_message
->
what
)
{
case
B_ABOUT_REQUESTED
:
{
BAlert
*
alert
=
new
BAlert
(
VOUT_TITLE
,
"BeOS "
VOUT_TITLE
"
\n\n
<www.videolan.org>"
,
"Ok"
);
alert
->
Go
();
break
;
}
case
TOGGLE_ON_TOP
:
break
;
case
OPEN_FILE
:
if
(
fFilePanel
)
{
fFilePanel
->
Show
();
break
;
}
fFilePanel
=
new
BFilePanel
();
fFilePanel
->
SetTarget
(
this
);
fFilePanel
->
Show
();
break
;
case
OPEN_PLAYLIST
:
if
(
fPlaylistWindow
->
Lock
())
{
if
(
fPlaylistWindow
->
IsHidden
())
fPlaylistWindow
->
Show
();
else
fPlaylistWindow
->
Activate
();
fPlaylistWindow
->
Unlock
();
}
break
;
case
OPEN_DVD
:
{
const
char
*
psz_device
;
BString
type
(
"dvd"
);
if
(
p_message
->
FindString
(
"device"
,
&
psz_device
)
==
B_OK
)
{
BString
device
(
psz_device
);
p_wrapper
->
OpenDisc
(
type
,
device
,
0
,
0
);
}
_UpdatePlaylist
();
}
break
;
case
LOAD_SUBFILE
:
if
(
fSubtitlesPanel
)
{
fSubtitlesPanel
->
Show
();
break
;
}
fSubtitlesPanel
=
new
BFilePanel
();
fSubtitlesPanel
->
SetTarget
(
this
);
fSubtitlesPanel
->
SetMessage
(
new
BMessage
(
SUBFILE_RECEIVED
)
);
fSubtitlesPanel
->
Show
();
break
;
case
SUBFILE_RECEIVED
:
{
entry_ref
ref
;
if
(
p_message
->
FindRef
(
"refs"
,
0
,
&
ref
)
==
B_OK
)
{
BPath
path
(
&
ref
);
if
(
path
.
InitCheck
()
==
B_OK
)
p_wrapper
->
LoadSubFile
(
(
char
*
)
path
.
Path
()
);
}
break
;
}
case
STOP_PLAYBACK
:
// this currently stops playback not nicely
if
(
playback_status
>
UNDEF_S
)
{
snooze
(
400000
);
p_wrapper
->
PlaylistStop
();
p_mediaControl
->
SetStatus
(
NOT_STARTED_S
,
DEFAULT_RATE
);
}
break
;
case
START_PLAYBACK
:
/* starts playing in normal mode */
case
PAUSE_PLAYBACK
:
/* toggle between pause and play */
if
(
playback_status
>
UNDEF_S
)
{
/* pause if currently playing */
if
(
playback_status
==
PLAYING_S
)
{
p_wrapper
->
PlaylistPause
();
}
else
{
p_wrapper
->
PlaylistPlay
();
}
}
else
{
/* Play a new file */
p_wrapper
->
PlaylistPlay
();
}
break
;
case
FASTER_PLAY
:
/* cycle the fast playback modes */
if
(
playback_status
>
UNDEF_S
)
{
p_wrapper
->
InputFaster
();
}
break
;
case
SLOWER_PLAY
:
/* cycle the slow playback modes */
if
(
playback_status
>
UNDEF_S
)
{
p_wrapper
->
InputSlower
();
}
break
;
case
NORMAL_PLAY
:
/* restore speed to normal if already playing */
if
(
playback_status
>
UNDEF_S
)
{
p_wrapper
->
PlaylistPlay
();
}
break
;
case
SEEK_PLAYBACK
:
/* handled by semaphores */
break
;
// volume related messages
case
VOLUME_CHG
:
/* adjust the volume */
if
(
playback_status
>
UNDEF_S
)
{
p_wrapper
->
SetVolume
(
p_mediaControl
->
GetVolume
()
);
p_mediaControl
->
SetMuted
(
p_wrapper
->
IsMuted
()
);
}
break
;
case
VOLUME_MUTE
:
// toggle muting
if
(
p_wrapper
->
IsMuted
()
)
p_wrapper
->
VolumeRestore
();
else
p_wrapper
->
VolumeMute
();
p_mediaControl
->
SetMuted
(
p_wrapper
->
IsMuted
()
);
break
;
case
SELECT_CHANNEL
:
if
(
playback_status
>
UNDEF_S
)
{
int32
channel
;
if
(
p_message
->
FindInt32
(
"channel"
,
&
channel
)
==
B_OK
)
{
p_wrapper
->
ToggleLanguage
(
channel
);
}
}
break
;
case
SELECT_SUBTITLE
:
if
(
playback_status
>
UNDEF_S
)
{
int32
subtitle
;
if
(
p_message
->
FindInt32
(
"subtitle"
,
&
subtitle
)
==
B_OK
)
p_wrapper
->
ToggleSubtitle
(
subtitle
);
}
break
;
// specific navigation messages
case
PREV_TITLE
:
{
p_wrapper
->
PrevTitle
();
break
;
}
case
NEXT_TITLE
:
{
int
playback_status
;
// remember playback state
playback_status
=
p_wrapper
->
InputStatus
();
switch
(
p_message
->
what
)
{
case
B_ABOUT_REQUESTED
:
{
BAlert
*
alert
=
new
BAlert
(
VOUT_TITLE
,
"BeOS "
VOUT_TITLE
"
\n\n
<www.videolan.org>"
,
"Ok"
);
alert
->
Go
();
break
;
}
case
TOGGLE_ON_TOP
:
break
;
case
OPEN_FILE
:
if
(
fFilePanel
)
{
fFilePanel
->
Show
();
break
;
}
fFilePanel
=
new
BFilePanel
();
fFilePanel
->
SetTarget
(
this
);
fFilePanel
->
Show
();
break
;
case
OPEN_PLAYLIST
:
if
(
fPlaylistWindow
->
Lock
())
{
if
(
fPlaylistWindow
->
IsHidden
())
fPlaylistWindow
->
Show
();
else
fPlaylistWindow
->
Activate
();
fPlaylistWindow
->
Unlock
();
}
break
;
case
OPEN_DVD
:
{
const
char
*
psz_device
;
BString
type
(
"dvd"
);
if
(
p_message
->
FindString
(
"device"
,
&
psz_device
)
==
B_OK
)
{
BString
device
(
psz_device
);
p_wrapper
->
OpenDisc
(
type
,
device
,
0
,
0
);
}
_UpdatePlaylist
();
}
break
;
case
LOAD_SUBFILE
:
if
(
fSubtitlesPanel
)
{
fSubtitlesPanel
->
Show
();
break
;
}
fSubtitlesPanel
=
new
BFilePanel
();
fSubtitlesPanel
->
SetTarget
(
this
);
fSubtitlesPanel
->
SetMessage
(
new
BMessage
(
SUBFILE_RECEIVED
)
);
fSubtitlesPanel
->
Show
();
break
;
case
SUBFILE_RECEIVED
:
{
entry_ref
ref
;
if
(
p_message
->
FindRef
(
"refs"
,
0
,
&
ref
)
==
B_OK
)
{
BPath
path
(
&
ref
);
if
(
path
.
InitCheck
()
==
B_OK
)
p_wrapper
->
LoadSubFile
(
(
char
*
)
path
.
Path
()
);
}
break
;
}
case
STOP_PLAYBACK
:
// this currently stops playback not nicely
if
(
playback_status
>
UNDEF_S
)
{
snooze
(
400000
);
p_wrapper
->
PlaylistStop
();
p_mediaControl
->
SetStatus
(
NOT_STARTED_S
,
DEFAULT_RATE
);
}
break
;
case
START_PLAYBACK
:
/* starts playing in normal mode */
case
PAUSE_PLAYBACK
:
/* toggle between pause and play */
if
(
playback_status
>
UNDEF_S
)
{
/* pause if currently playing */
if
(
playback_status
==
PLAYING_S
)
{
p_wrapper
->
PlaylistPause
();
}
else
{
p_wrapper
->
PlaylistPlay
();
}
}
else
{
/* Play a new file */
p_wrapper
->
PlaylistPlay
();
}
break
;
case
FASTER_PLAY
:
/* cycle the fast playback modes */
if
(
playback_status
>
UNDEF_S
)
{
p_wrapper
->
InputFaster
();
}
break
;
case
SLOWER_PLAY
:
/* cycle the slow playback modes */
if
(
playback_status
>
UNDEF_S
)
{
p_wrapper
->
InputSlower
();
}
break
;
case
NORMAL_PLAY
:
/* restore speed to normal if already playing */
if
(
playback_status
>
UNDEF_S
)
{
p_wrapper
->
PlaylistPlay
();
}
break
;
case
SEEK_PLAYBACK
:
/* handled by semaphores */
break
;
// volume related messages
case
VOLUME_CHG
:
/* adjust the volume */
if
(
playback_status
>
UNDEF_S
)
{
p_wrapper
->
SetVolume
(
p_mediaControl
->
GetVolume
()
);
p_mediaControl
->
SetMuted
(
p_wrapper
->
IsMuted
()
);
}
break
;
case
VOLUME_MUTE
:
// toggle muting
if
(
p_wrapper
->
IsMuted
()
)
p_wrapper
->
VolumeRestore
();
else
p_wrapper
->
VolumeMute
();
p_mediaControl
->
SetMuted
(
p_wrapper
->
IsMuted
()
);
break
;
case
SELECT_CHANNEL
:
if
(
playback_status
>
UNDEF_S
)
{
int32
channel
;
if
(
p_message
->
FindInt32
(
"channel"
,
&
channel
)
==
B_OK
)
{
p_wrapper
->
ToggleLanguage
(
channel
);
}
}
break
;
case
SELECT_SUBTITLE
:
if
(
playback_status
>
UNDEF_S
)
{
int32
subtitle
;
if
(
p_message
->
FindInt32
(
"subtitle"
,
&
subtitle
)
==
B_OK
)
p_wrapper
->
ToggleSubtitle
(
subtitle
);
}
break
;
// specific navigation messages
case
PREV_TITLE
:
{
p_wrapper
->
PrevTitle
();
break
;
}
case
NEXT_TITLE
:
{
p_wrapper
->
NextTitle
();
break
;
}
case
TOGGLE_TITLE
:
if
(
playback_status
>
UNDEF_S
)
{
int32
index
;
if
(
p_message
->
FindInt32
(
"index"
,
&
index
)
==
B_OK
)
p_wrapper
->
ToggleTitle
(
index
);
}
break
;
case
PREV_CHAPTER
:
{
break
;
}
case
TOGGLE_TITLE
:
if
(
playback_status
>
UNDEF_S
)
{
int32
index
;
if
(
p_message
->
FindInt32
(
"index"
,
&
index
)
==
B_OK
)
p_wrapper
->
ToggleTitle
(
index
);
}
break
;
case
PREV_CHAPTER
:
{
p_wrapper
->
PrevChapter
();
break
;
}
case
NEXT_CHAPTER
:
{
break
;
}
case
NEXT_CHAPTER
:
{
p_wrapper
->
NextChapter
();
break
;
}
case
TOGGLE_CHAPTER
:
if
(
playback_status
>
UNDEF_S
)
{
int32
index
;
if
(
p_message
->
FindInt32
(
"index"
,
&
index
)
==
B_OK
)
break
;
}
case
TOGGLE_CHAPTER
:
if
(
playback_status
>
UNDEF_S
)
{
int32
index
;
if
(
p_message
->
FindInt32
(
"index"
,
&
index
)
==
B_OK
)
p_wrapper
->
ToggleChapter
(
index
);
}
break
;
case
PREV_FILE
:
p_wrapper
->
PlaylistPrev
();
break
;
case
NEXT_FILE
:
p_wrapper
->
PlaylistNext
();
break
;
// general next/prev functionality (skips to whatever makes most sense)
case
NAVIGATE_PREV
:
p_wrapper
->
NavigatePrev
();
break
;
case
NAVIGATE_NEXT
:
p_wrapper
->
NavigateNext
();
break
;
// drag'n'drop and system messages
case
B_REFS_RECEIVED
:
case
B_SIMPLE_DATA
:
{
/* file(s) opened by the File menu -> append to the playlist;
* file(s) opened by drag & drop -> replace playlist;
* file(s) opened by 'shift' + drag & drop -> append */
bool
replace
=
false
;
if
(
p_message
->
WasDropped
()
)
replace
=
!
(
modifiers
()
&
B_SHIFT_KEY
);
// build list of files to be played from message contents
entry_ref
ref
;
BList
files
;
for
(
int
i
=
0
;
p_message
->
FindRef
(
"refs"
,
i
,
&
ref
)
==
B_OK
;
i
++
)
{
BPath
path
(
&
ref
);
if
(
path
.
InitCheck
()
==
B_OK
)
{
bool
add
=
true
;
// has the user dropped a dvd disk icon?
BDirectory
dir
(
&
ref
);
if
(
dir
.
InitCheck
()
==
B_OK
&&
dir
.
IsRootDirectory
()
)
{
BVolumeRoster
volRoster
;
BVolume
vol
;
BDirectory
volumeRoot
;
status_t
status
=
volRoster
.
GetNextVolume
(
&
vol
);
while
(
status
==
B_NO_ERROR
)
{
if
(
vol
.
GetRootDirectory
(
&
volumeRoot
)
==
B_OK
&&
dir
==
volumeRoot
)
{
BString
volumeName
;
BString
deviceName
;
bool
isCDROM
=
false
;
bool
success
=
false
;
deviceName
=
""
;
volumeName
=
""
;
char
name
[
B_FILE_NAME_LENGTH
];
if
(
vol
.
GetName
(
name
)
>=
B_OK
)
// disk is currently mounted
{
volumeName
=
name
;
dev_t
dev
=
vol
.
Device
();
fs_info
info
;
if
(
fs_stat_dev
(
dev
,
&
info
)
==
B_OK
)
{
success
=
true
;
deviceName
=
info
.
device_name
;
if
(
vol
.
IsReadOnly
()
)
{
int
i_dev
=
open
(
info
.
device_name
,
O_RDONLY
);
if
(
i_dev
>=
0
)
{
device_geometry
g
;
if
(
ioctl
(
i_dev
,
B_GET_GEOMETRY
,
&
g
,
sizeof
(
g
)
)
>=
0
)
isCDROM
=
(
g
.
device_type
==
B_CD
);
close
(
i_dev
);
}
}
}
}
if
(
success
&&
isCDROM
)
{
BMessage
msg
(
OPEN_DVD
);
msg
.
AddString
(
"device"
,
deviceName
.
String
()
);
PostMessage
(
&
msg
);
add
=
false
;
}
break
;
}
else
{
vol
.
Unset
();
status
=
volRoster
.
GetNextVolume
(
&
vol
);
}
}
}
if
(
add
)
{
files
.
AddItem
(
new
BString
(
(
char
*
)
path
.
Path
()
)
);
}
}
}
// give the list to VLC
p_wrapper
->
OpenFiles
(
&
files
,
replace
);
_UpdatePlaylist
();
}
break
;
case
OPEN_PREFERENCES
:
if
(
fPreferencesWindow
->
Lock
()
)
{
if
(
fPreferencesWindow
->
IsHidden
())
fPreferencesWindow
->
Show
();
else
fPreferencesWindow
->
Activate
();
fPreferencesWindow
->
Unlock
();
}
break
;
default:
BWindow
::
MessageReceived
(
p_message
);
break
;
}
}
break
;
case
PREV_FILE
:
p_wrapper
->
PlaylistPrev
();
break
;
case
NEXT_FILE
:
p_wrapper
->
PlaylistNext
();
break
;
// general next/prev functionality (skips to whatever makes most sense)
case
NAVIGATE_PREV
:
p_wrapper
->
NavigatePrev
();
break
;
case
NAVIGATE_NEXT
:
p_wrapper
->
NavigateNext
();
break
;
// drag'n'drop and system messages
case
B_REFS_RECEIVED
:
case
B_SIMPLE_DATA
:
{
/* file(s) opened by the File menu -> append to the playlist;
* file(s) opened by drag & drop -> replace playlist;
* file(s) opened by 'shift' + drag & drop -> append */
bool
replace
=
false
;
if
(
p_message
->
WasDropped
()
)
replace
=
!
(
modifiers
()
&
B_SHIFT_KEY
);
// build list of files to be played from message contents
entry_ref
ref
;
BList
files
;
for
(
int
i
=
0
;
p_message
->
FindRef
(
"refs"
,
i
,
&
ref
)
==
B_OK
;
i
++
)
{
BPath
path
(
&
ref
);
if
(
path
.
InitCheck
()
==
B_OK
)
{
bool
add
=
true
;
// has the user dropped a dvd disk icon?
BDirectory
dir
(
&
ref
);
if
(
dir
.
InitCheck
()
==
B_OK
&&
dir
.
IsRootDirectory
()
)
{
BVolumeRoster
volRoster
;
BVolume
vol
;
BDirectory
volumeRoot
;
status_t
status
=
volRoster
.
GetNextVolume
(
&
vol
);
while
(
status
==
B_NO_ERROR
)
{
if
(
vol
.
GetRootDirectory
(
&
volumeRoot
)
==
B_OK
&&
dir
==
volumeRoot
)
{
BString
volumeName
;
BString
deviceName
;
bool
isCDROM
=
false
;
bool
success
=
false
;
deviceName
=
""
;
volumeName
=
""
;
char
name
[
B_FILE_NAME_LENGTH
];
if
(
vol
.
GetName
(
name
)
>=
B_OK
)
// disk is currently mounted
{
volumeName
=
name
;
dev_t
dev
=
vol
.
Device
();
fs_info
info
;
if
(
fs_stat_dev
(
dev
,
&
info
)
==
B_OK
)
{
success
=
true
;
deviceName
=
info
.
device_name
;
if
(
vol
.
IsReadOnly
()
)
{
int
i_dev
=
open
(
info
.
device_name
,
O_RDONLY
);
if
(
i_dev
>=
0
)
{
device_geometry
g
;
if
(
ioctl
(
i_dev
,
B_GET_GEOMETRY
,
&
g
,
sizeof
(
g
)
)
>=
0
)
isCDROM
=
(
g
.
device_type
==
B_CD
);
close
(
i_dev
);
}
}
}
}
if
(
success
&&
isCDROM
)
{
BMessage
msg
(
OPEN_DVD
);
msg
.
AddString
(
"device"
,
deviceName
.
String
()
);
PostMessage
(
&
msg
);
add
=
false
;
}
break
;
}
else
{
vol
.
Unset
();
status
=
volRoster
.
GetNextVolume
(
&
vol
);
}
}
}
if
(
add
)
{
files
.
AddItem
(
new
BString
(
(
char
*
)
path
.
Path
()
)
);
}
}
}
// give the list to VLC
p_wrapper
->
OpenFiles
(
&
files
,
replace
);
_UpdatePlaylist
();
}
break
;
case
OPEN_PREFERENCES
:
{
if
(
fPreferencesWindow
->
Lock
()
)
{
if
(
fPreferencesWindow
->
IsHidden
())
fPreferencesWindow
->
Show
();
else
fPreferencesWindow
->
Activate
();
fPreferencesWindow
->
Unlock
();
}
break
;
}
case
OPEN_MESSAGES
:
{
if
(
fMessagesWindow
->
Lock
()
)
{
if
(
fMessagesWindow
->
IsHidden
())
fMessagesWindow
->
Show
();
else
fMessagesWindow
->
Activate
();
fMessagesWindow
->
Unlock
();
}
break
;
}
default:
BWindow
::
MessageReceived
(
p_message
);
break
;
}
}
...
...
@@ -580,8 +609,8 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
*****************************************************************************/
bool
InterfaceWindow
::
QuitRequested
()
{
p_wrapper
->
PlaylistStop
();
p_mediaControl
->
SetStatus
(
NOT_STARTED_S
,
DEFAULT_RATE
);
p_wrapper
->
PlaylistStop
();
p_mediaControl
->
SetStatus
(
NOT_STARTED_S
,
DEFAULT_RATE
);
/* Save interface settings */
BRect
frame
=
Frame
();
...
...
@@ -599,65 +628,70 @@ bool InterfaceWindow::QuitRequested()
config_PutInt
(
p_intf
,
"beos-playlist-show"
,
!
fPlaylistWindow
->
IsHidden
()
);
fPlaylistWindow
->
Unlock
();
}
if
(
fMessagesWindow
->
Lock
()
)
{
config_PutInt
(
p_intf
,
"beos-messages-show"
,
!
fMessagesWindow
->
IsHidden
()
);
fMessagesWindow
->
Unlock
();
}
config_SaveConfigFile
(
p_intf
,
"beos"
);
p_intf
->
b_die
=
1
;
p_intf
->
b_die
=
1
;
return
(
true
);
return
(
true
);
}
/*****************************************************************************
* InterfaceWindow::
u
pdateInterface
* InterfaceWindow::
U
pdateInterface
*****************************************************************************/
void
InterfaceWindow
::
u
pdateInterface
()
void
InterfaceWindow
::
U
pdateInterface
()
{
if
(
p_wrapper
->
HasInput
()
)
{
if
(
acquire_sem
(
p_mediaControl
->
fScrubSem
)
==
B_OK
)
{
p_wrapper
->
SetTimeAsFloat
(
p_mediaControl
->
GetSeekTo
());
}
else
if
(
Lock
()
)
{
p_mediaControl
->
SetEnabled
(
true
);
bool
hasTitles
=
p_wrapper
->
HasTitles
();
bool
hasChapters
=
p_wrapper
->
HasChapters
();
p_mediaControl
->
SetStatus
(
p_wrapper
->
InputStatus
(),
p_wrapper
->
InputRate
()
);
p_mediaControl
->
SetProgress
(
p_wrapper
->
GetTimeAsFloat
()
);
_SetMenusEnabled
(
true
,
hasChapters
,
hasTitles
);
_UpdateSpeedMenu
(
p_wrapper
->
InputRate
()
);
// enable/disable skip buttons
bool
canSkipPrev
;
bool
canSkipNext
;
p_wrapper
->
GetNavCapabilities
(
&
canSkipPrev
,
&
canSkipNext
);
p_mediaControl
->
SetSkippable
(
canSkipPrev
,
canSkipNext
);
if
(
p_wrapper
->
HasAudio
()
)
{
p_mediaControl
->
SetAudioEnabled
(
true
);
p_mediaControl
->
SetMuted
(
p_wrapper
->
IsMuted
()
);
}
else
p_mediaControl
->
SetAudioEnabled
(
false
);
Unlock
();
}
// update playlist as well
if
(
fPlaylistWindow
->
Lock
()
)
{
fPlaylistWindow
->
UpdatePlaylist
();
fPlaylistWindow
->
Unlock
();
}
}
if
(
acquire_sem
(
p_mediaControl
->
fScrubSem
)
==
B_OK
)
{
p_wrapper
->
SetTimeAsFloat
(
p_mediaControl
->
GetSeekTo
());
}
else
if
(
Lock
()
)
{
p_mediaControl
->
SetEnabled
(
true
);
bool
hasTitles
=
p_wrapper
->
HasTitles
();
bool
hasChapters
=
p_wrapper
->
HasChapters
();
p_mediaControl
->
SetStatus
(
p_wrapper
->
InputStatus
(),
p_wrapper
->
InputRate
()
);
p_mediaControl
->
SetProgress
(
p_wrapper
->
GetTimeAsFloat
()
);
_SetMenusEnabled
(
true
,
hasChapters
,
hasTitles
);
_UpdateSpeedMenu
(
p_wrapper
->
InputRate
()
);
// enable/disable skip buttons
bool
canSkipPrev
;
bool
canSkipNext
;
p_wrapper
->
GetNavCapabilities
(
&
canSkipPrev
,
&
canSkipNext
);
p_mediaControl
->
SetSkippable
(
canSkipPrev
,
canSkipNext
);
if
(
p_wrapper
->
HasAudio
()
)
{
p_mediaControl
->
SetAudioEnabled
(
true
);
p_mediaControl
->
SetMuted
(
p_wrapper
->
IsMuted
()
);
}
else
p_mediaControl
->
SetAudioEnabled
(
false
);
Unlock
();
}
// update playlist as well
if
(
fPlaylistWindow
->
Lock
()
)
{
fPlaylistWindow
->
UpdatePlaylist
();
fPlaylistWindow
->
Unlock
();
}
}
else
{
_SetMenusEnabled
(
false
);
if
(
!
(
p_wrapper
->
PlaylistSize
()
>
0
)
)
p_mediaControl
->
SetEnabled
(
false
);
else
p_mediaControl
->
SetProgress
(
0
);
_SetMenusEnabled
(
false
);
if
(
!
(
p_wrapper
->
PlaylistSize
()
>
0
)
)
p_mediaControl
->
SetEnabled
(
false
);
else
p_mediaControl
->
SetProgress
(
0
);
}
/* always force the user-specified volume */
...
...
@@ -667,8 +701,10 @@ void InterfaceWindow::updateInterface()
{
p_wrapper
->
SetVolume
(
i_volume
);
}
fMessagesWindow
->
UpdateMessages
();
fLastUpdateTime
=
system_time
();
fLastUpdateTime
=
system_time
();
}
/*****************************************************************************
...
...
@@ -677,7 +713,7 @@ void InterfaceWindow::updateInterface()
bool
InterfaceWindow
::
IsStopped
()
const
{
return
(
system_time
()
-
fLastUpdateTime
>
INTERFACE_UPDATE_TIMEOUT
);
return
(
system_time
()
-
fLastUpdateTime
>
INTERFACE_UPDATE_TIMEOUT
);
}
/*****************************************************************************
...
...
@@ -686,12 +722,12 @@ InterfaceWindow::IsStopped() const
void
InterfaceWindow
::
_UpdatePlaylist
()
{
if
(
fPlaylistWindow
->
Lock
()
)
{
fPlaylistWindow
->
UpdatePlaylist
(
true
);
fPlaylistWindow
->
Unlock
();
p_mediaControl
->
SetEnabled
(
p_wrapper
->
PlaylistSize
()
);
}
if
(
fPlaylistWindow
->
Lock
()
)
{
fPlaylistWindow
->
UpdatePlaylist
(
true
);
fPlaylistWindow
->
Unlock
();
p_mediaControl
->
SetEnabled
(
p_wrapper
->
PlaylistSize
()
);
}
}
/*****************************************************************************
...
...
@@ -700,37 +736,37 @@ InterfaceWindow::_UpdatePlaylist()
void
InterfaceWindow
::
_SetMenusEnabled
(
bool
hasFile
,
bool
hasChapters
,
bool
hasTitles
)
{
if
(
!
hasFile
)
{
hasChapters
=
false
;
hasTitles
=
false
;
}
if
(
Lock
())
{
if
(
fNextChapterMI
->
IsEnabled
()
!=
hasChapters
)
fNextChapterMI
->
SetEnabled
(
hasChapters
);
if
(
fPrevChapterMI
->
IsEnabled
()
!=
hasChapters
)
fPrevChapterMI
->
SetEnabled
(
hasChapters
);
if
(
fChapterMenu
->
IsEnabled
()
!=
hasChapters
)
fChapterMenu
->
SetEnabled
(
hasChapters
);
if
(
fNextTitleMI
->
IsEnabled
()
!=
hasTitles
)
fNextTitleMI
->
SetEnabled
(
hasTitles
);
if
(
fPrevTitleMI
->
IsEnabled
()
!=
hasTitles
)
fPrevTitleMI
->
SetEnabled
(
hasTitles
);
if
(
fTitleMenu
->
IsEnabled
()
!=
hasTitles
)
fTitleMenu
->
SetEnabled
(
hasTitles
);
if
(
fAudioMenu
->
IsEnabled
()
!=
hasFile
)
fAudioMenu
->
SetEnabled
(
hasFile
);
if
(
fNavigationMenu
->
IsEnabled
()
!=
hasFile
)
fNavigationMenu
->
SetEnabled
(
hasFile
);
if
(
fLanguageMenu
->
IsEnabled
()
!=
hasFile
)
fLanguageMenu
->
SetEnabled
(
hasFile
);
if
(
fSubtitlesMenu
->
IsEnabled
()
!=
hasFile
)
fSubtitlesMenu
->
SetEnabled
(
hasFile
);
if
(
fSpeedMenu
->
IsEnabled
()
!=
hasFile
)
fSpeedMenu
->
SetEnabled
(
hasFile
);
Unlock
();
}
if
(
!
hasFile
)
{
hasChapters
=
false
;
hasTitles
=
false
;
}
if
(
Lock
())
{
if
(
fNextChapterMI
->
IsEnabled
()
!=
hasChapters
)
fNextChapterMI
->
SetEnabled
(
hasChapters
);
if
(
fPrevChapterMI
->
IsEnabled
()
!=
hasChapters
)
fPrevChapterMI
->
SetEnabled
(
hasChapters
);
if
(
fChapterMenu
->
IsEnabled
()
!=
hasChapters
)
fChapterMenu
->
SetEnabled
(
hasChapters
);
if
(
fNextTitleMI
->
IsEnabled
()
!=
hasTitles
)
fNextTitleMI
->
SetEnabled
(
hasTitles
);
if
(
fPrevTitleMI
->
IsEnabled
()
!=
hasTitles
)
fPrevTitleMI
->
SetEnabled
(
hasTitles
);
if
(
fTitleMenu
->
IsEnabled
()
!=
hasTitles
)
fTitleMenu
->
SetEnabled
(
hasTitles
);
if
(
fAudioMenu
->
IsEnabled
()
!=
hasFile
)
fAudioMenu
->
SetEnabled
(
hasFile
);
if
(
fNavigationMenu
->
IsEnabled
()
!=
hasFile
)
fNavigationMenu
->
SetEnabled
(
hasFile
);
if
(
fLanguageMenu
->
IsEnabled
()
!=
hasFile
)
fLanguageMenu
->
SetEnabled
(
hasFile
);
if
(
fSubtitlesMenu
->
IsEnabled
()
!=
hasFile
)
fSubtitlesMenu
->
SetEnabled
(
hasFile
);
if
(
fSpeedMenu
->
IsEnabled
()
!=
hasFile
)
fSpeedMenu
->
SetEnabled
(
hasFile
);
Unlock
();
}
}
/*****************************************************************************
...
...
@@ -739,21 +775,21 @@ InterfaceWindow::_SetMenusEnabled(bool hasFile, bool hasChapters, bool hasTitles
void
InterfaceWindow
::
_UpdateSpeedMenu
(
int
rate
)
{
if
(
rate
==
DEFAULT_RATE
)
{
if
(
!
fNormalMI
->
IsMarked
()
)
fNormalMI
->
SetMarked
(
true
);
}
else
if
(
rate
<
DEFAULT_RATE
)
{
if
(
!
fFasterMI
->
IsMarked
()
)
fFasterMI
->
SetMarked
(
true
);
}
else
{
if
(
!
fSlowerMI
->
IsMarked
()
)
fSlowerMI
->
SetMarked
(
true
);
}
if
(
rate
==
DEFAULT_RATE
)
{
if
(
!
fNormalMI
->
IsMarked
()
)
fNormalMI
->
SetMarked
(
true
);
}
else
if
(
rate
<
DEFAULT_RATE
)
{
if
(
!
fFasterMI
->
IsMarked
()
)
fFasterMI
->
SetMarked
(
true
);
}
else
{
if
(
!
fSlowerMI
->
IsMarked
()
)
fSlowerMI
->
SetMarked
(
true
);
}
}
/*****************************************************************************
...
...
@@ -762,30 +798,30 @@ InterfaceWindow::_UpdateSpeedMenu( int rate )
void
InterfaceWindow
::
_InputStreamChanged
()
{
// TODO: move more stuff from updateInterface() here!
snooze
(
400000
);
p_wrapper
->
SetVolume
(
p_mediaControl
->
GetVolume
()
);
// TODO: move more stuff from updateInterface() here!
snooze
(
400000
);
p_wrapper
->
SetVolume
(
p_mediaControl
->
GetVolume
()
);
}
void
make_sure_frame_is_within_limits
(
BRect
&
frame
,
float
minWidth
,
float
minHeight
,
float
maxWidth
,
float
maxHeight
)
float
maxWidth
,
float
maxHeight
)
{
if
(
frame
.
Width
()
<
minWidth
)
frame
.
right
=
frame
.
left
+
minWidth
;
if
(
frame
.
Height
()
<
minHeight
)
frame
.
bottom
=
frame
.
top
+
minHeight
;
if
(
frame
.
Width
()
>
maxWidth
)
frame
.
right
=
frame
.
left
+
maxWidth
;
if
(
frame
.
Height
()
>
maxHeight
)
frame
.
bottom
=
frame
.
top
+
maxHeight
;
if
(
frame
.
Width
()
<
minWidth
)
frame
.
right
=
frame
.
left
+
minWidth
;
if
(
frame
.
Height
()
<
minHeight
)
frame
.
bottom
=
frame
.
top
+
minHeight
;
if
(
frame
.
Width
()
>
maxWidth
)
frame
.
right
=
frame
.
left
+
maxWidth
;
if
(
frame
.
Height
()
>
maxHeight
)
frame
.
bottom
=
frame
.
top
+
maxHeight
;
}
/*****************************************************************************
* CDMenu::CDMenu
*****************************************************************************/
CDMenu
::
CDMenu
(
const
char
*
name
)
:
BMenu
(
name
)
:
BMenu
(
name
)
{
}
...
...
@@ -801,11 +837,11 @@ CDMenu::~CDMenu()
*****************************************************************************/
void
CDMenu
::
AttachedToWindow
(
void
)
{
// remove all items
while
(
BMenuItem
*
item
=
RemoveItem
(
0L
))
delete
item
;
GetCD
(
"/dev/disk"
);
BMenu
::
AttachedToWindow
();
// remove all items
while
(
BMenuItem
*
item
=
RemoveItem
(
0L
))
delete
item
;
GetCD
(
"/dev/disk"
);
BMenu
::
AttachedToWindow
();
}
/*****************************************************************************
...
...
@@ -813,65 +849,65 @@ void CDMenu::AttachedToWindow(void)
*****************************************************************************/
int
CDMenu
::
GetCD
(
const
char
*
directory
)
{
BVolumeRoster
*
volRoster
;
BVolume
*
vol
;
BDirectory
*
dir
;
int
status
;
int
mounted
;
char
name
[
B_FILE_NAME_LENGTH
];
fs_info
info
;
dev_t
dev
;
volRoster
=
new
BVolumeRoster
();
vol
=
new
BVolume
();
dir
=
new
BDirectory
();
status
=
volRoster
->
GetNextVolume
(
vol
);
status
=
vol
->
GetRootDirectory
(
dir
);
while
(
status
==
B_NO_ERROR
)
{
mounted
=
vol
->
GetName
(
name
);
if
((
mounted
==
B_OK
)
&&
/* Disk is currently Mounted */
(
vol
->
IsReadOnly
())
)
/* Disk is read-only */
{
dev
=
vol
->
Device
();
fs_stat_dev
(
dev
,
&
info
);
device_geometry
g
;
int
i_dev
;
i_dev
=
open
(
info
.
device_name
,
O_RDONLY
);
if
(
i_dev
>=
0
)
{
if
(
ioctl
(
i_dev
,
B_GET_GEOMETRY
,
&
g
,
sizeof
(
g
))
>=
0
)
{
if
(
g
.
device_type
==
B_CD
)
//ensure the drive is a CD-ROM
{
BMessage
*
msg
;
msg
=
new
BMessage
(
OPEN_DVD
);
msg
->
AddString
(
"device"
,
info
.
device_name
);
BMenuItem
*
menu_item
;
menu_item
=
new
BMenuItem
(
name
,
msg
);
AddItem
(
menu_item
);
}
close
(
i_dev
);
}
}
}
vol
->
Unset
();
status
=
volRoster
->
GetNextVolume
(
vol
);
}
return
0
;
BVolumeRoster
*
volRoster
;
BVolume
*
vol
;
BDirectory
*
dir
;
int
status
;
int
mounted
;
char
name
[
B_FILE_NAME_LENGTH
];
fs_info
info
;
dev_t
dev
;
volRoster
=
new
BVolumeRoster
();
vol
=
new
BVolume
();
dir
=
new
BDirectory
();
status
=
volRoster
->
GetNextVolume
(
vol
);
status
=
vol
->
GetRootDirectory
(
dir
);
while
(
status
==
B_NO_ERROR
)
{
mounted
=
vol
->
GetName
(
name
);
if
((
mounted
==
B_OK
)
&&
/* Disk is currently Mounted */
(
vol
->
IsReadOnly
())
)
/* Disk is read-only */
{
dev
=
vol
->
Device
();
fs_stat_dev
(
dev
,
&
info
);
device_geometry
g
;
int
i_dev
;
i_dev
=
open
(
info
.
device_name
,
O_RDONLY
);
if
(
i_dev
>=
0
)
{
if
(
ioctl
(
i_dev
,
B_GET_GEOMETRY
,
&
g
,
sizeof
(
g
))
>=
0
)
{
if
(
g
.
device_type
==
B_CD
)
//ensure the drive is a CD-ROM
{
BMessage
*
msg
;
msg
=
new
BMessage
(
OPEN_DVD
);
msg
->
AddString
(
"device"
,
info
.
device_name
);
BMenuItem
*
menu_item
;
menu_item
=
new
BMenuItem
(
name
,
msg
);
AddItem
(
menu_item
);
}
close
(
i_dev
);
}
}
}
vol
->
Unset
();
status
=
volRoster
->
GetNextVolume
(
vol
);
}
return
0
;
}
/*****************************************************************************
* LanguageMenu::LanguageMenu
*****************************************************************************/
LanguageMenu
::
LanguageMenu
(
const
char
*
name
,
int
menu_kind
,
VlcWrapper
*
p_wrapper
)
:
BMenu
(
name
)
VlcWrapper
*
p_wrapper
)
:
BMenu
(
name
)
{
kind
=
menu_kind
;
this
->
p_wrapper
=
p_wrapper
;
kind
=
menu_kind
;
this
->
p_wrapper
=
p_wrapper
;
}
/*****************************************************************************
...
...
@@ -886,13 +922,13 @@ LanguageMenu::~LanguageMenu()
*****************************************************************************/
void
LanguageMenu
::
AttachedToWindow
()
{
// remove all items
while
(
BMenuItem
*
item
=
RemoveItem
(
0L
)
)
delete
item
;
// remove all items
while
(
BMenuItem
*
item
=
RemoveItem
(
0L
)
)
delete
item
;
SetRadioMode
(
true
);
_GetChannels
();
BMenu
::
AttachedToWindow
();
SetRadioMode
(
true
);
_GetChannels
();
BMenu
::
AttachedToWindow
();
}
/*****************************************************************************
...
...
@@ -921,8 +957,8 @@ void LanguageMenu::_GetChannels()
* TitleMenu::TitleMenu
*****************************************************************************/
TitleMenu
::
TitleMenu
(
const
char
*
name
,
intf_thread_t
*
p_interface
)
:
BMenu
(
name
),
p_intf
(
p_interface
)
:
BMenu
(
name
),
p_intf
(
p_interface
)
{
}
...
...
@@ -941,8 +977,8 @@ void TitleMenu::AttachedToWindow()
BMenuItem
*
item
;
BList
*
list
;
while
(
(
item
=
RemoveItem
(
0L
)
)
)
delete
item
;
while
(
(
item
=
RemoveItem
(
0L
)
)
)
delete
item
;
if
(
(
list
=
p_intf
->
p_sys
->
p_wrapper
->
GetTitles
()
)
==
NULL
)
return
;
...
...
@@ -953,7 +989,7 @@ void TitleMenu::AttachedToWindow()
AddItem
(
item
);
}
BMenu
::
AttachedToWindow
();
BMenu
::
AttachedToWindow
();
}
...
...
@@ -961,8 +997,8 @@ void TitleMenu::AttachedToWindow()
* ChapterMenu::ChapterMenu
*****************************************************************************/
ChapterMenu
::
ChapterMenu
(
const
char
*
name
,
intf_thread_t
*
p_interface
)
:
BMenu
(
name
),
p_intf
(
p_interface
)
:
BMenu
(
name
),
p_intf
(
p_interface
)
{
}
...
...
@@ -981,8 +1017,8 @@ void ChapterMenu::AttachedToWindow()
BMenuItem
*
item
;
BList
*
list
;
while
(
(
item
=
RemoveItem
(
0L
)
)
)
delete
item
;
while
(
(
item
=
RemoveItem
(
0L
)
)
)
delete
item
;
if
(
(
list
=
p_intf
->
p_sys
->
p_wrapper
->
GetChapters
()
)
==
NULL
)
return
;
...
...
@@ -993,6 +1029,6 @@ void ChapterMenu::AttachedToWindow()
AddItem
(
item
);
}
BMenu
::
AttachedToWindow
();
BMenu
::
AttachedToWindow
();
}
modules/gui/beos/InterfaceWindow.h
View file @
02d360bd
...
...
@@ -2,7 +2,7 @@
* InterfaceWindow.h: BeOS interface window class prototype
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: InterfaceWindow.h,v 1.
9 2003/01/22 01:13:22
titer Exp $
* $Id: InterfaceWindow.h,v 1.
10 2003/01/25 20:15:41
titer Exp $
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Tony Castley <tcastley@mail.powerup.com.au>
...
...
@@ -35,115 +35,116 @@ class MediaControlView;
class
PlayListWindow
;
class
BFilePanel
;
class
PreferencesWindow
;
class
MessagesWindow
;
class
CDMenu
:
public
BMenu
{
public:
CDMenu
(
const
char
*
name
);
virtual
~
CDMenu
();
CDMenu
(
const
char
*
name
);
virtual
~
CDMenu
();
virtual
void
AttachedToWindow
();
virtual
void
AttachedToWindow
();
private:
int
GetCD
(
const
char
*
directory
);
int
GetCD
(
const
char
*
directory
);
};
class
LanguageMenu
:
public
BMenu
{
public:
LanguageMenu
(
const
char
*
name
,
int
menu_kind
,
VlcWrapper
*
p_wrapper
);
virtual
~
LanguageMenu
();
LanguageMenu
(
const
char
*
name
,
int
menu_kind
,
VlcWrapper
*
p_wrapper
);
virtual
~
LanguageMenu
();
virtual
void
AttachedToWindow
();
virtual
void
AttachedToWindow
();
private:
void
_GetChannels
();
void
_GetChannels
();
VlcWrapper
*
p_wrapper
;
int
kind
;
VlcWrapper
*
p_wrapper
;
int
kind
;
};
class
TitleMenu
:
public
BMenu
{
public:
TitleMenu
(
const
char
*
name
,
intf_thread_t
*
p_interface
);
virtual
~
TitleMenu
();
TitleMenu
(
const
char
*
name
,
intf_thread_t
*
p_interface
);
virtual
~
TitleMenu
();
virtual
void
AttachedToWindow
();
intf_thread_t
*
p_intf
;
virtual
void
AttachedToWindow
();
intf_thread_t
*
p_intf
;
};
class
ChapterMenu
:
public
BMenu
{
public:
ChapterMenu
(
const
char
*
name
,
intf_thread_t
*
p_interface
);
virtual
~
ChapterMenu
();
ChapterMenu
(
const
char
*
name
,
intf_thread_t
*
p_interface
);
virtual
~
ChapterMenu
();
virtual
void
AttachedToWindow
();
virtual
void
AttachedToWindow
();
intf_thread_t
*
p_intf
;
intf_thread_t
*
p_intf
;
};
class
InterfaceWindow
:
public
BWindow
{
public:
InterfaceWindow
(
BRect
frame
,
const
char
*
name
,
intf_thread_t
*
p_interface
);
virtual
~
InterfaceWindow
();
// BWindow
virtual
void
FrameResized
(
float
width
,
float
height
);
virtual
void
MessageReceived
(
BMessage
*
message
);
virtual
bool
QuitRequested
();
// InterfaceWindow
void
u
pdateInterface
();
bool
IsStopped
()
const
;
MediaControlView
*
p_mediaControl
;
private:
void
_UpdatePlaylist
();
void
_SetMenusEnabled
(
bool
hasFile
,
bool
hasChapters
=
false
,
bool
hasTitles
=
false
);
void
_UpdateSpeedMenu
(
int
rate
);
void
_InputStreamChanged
();
intf_thread_t
*
p_intf
;
es_descriptor_t
*
p_spu_es
;
bool
fPlaylistIsEmpty
;
BFilePanel
*
fFilePanel
;
BFilePanel
*
fSubtitlesPanel
;
PlayListWindow
*
fPlaylistWindow
;
PreferencesWindow
*
fPreferencesWindow
;
BMenuBar
*
fMenuBar
;
BMenuItem
*
fNextTitleMI
;
BMenuItem
*
fPrev
TitleMI
;
BMenuItem
*
fNextChapter
MI
;
BMenuItem
*
fPrev
ChapterMI
;
BMenuItem
*
fOnTop
MI
;
BMenuItem
*
fSlower
MI
;
BMenuItem
*
fNormal
MI
;
BMenuItem
*
fFaster
MI
;
BMenuItem
*
fPreferences
MI
;
BMenu
*
fAudioMenu
;
BMenu
*
fNavigationMenu
;
BMenu
*
fTitleMenu
;
BMenu
*
fChapterMenu
;
BMenu
*
fLanguageMenu
;
BMenu
*
fSubtitlesMenu
;
BMenu
*
fSpeedMenu
;
BMenu
*
fSettings
Menu
;
bigtime_t
fLastUpdateTime
;
VlcWrapper
*
p_wrapper
;
InterfaceWindow
(
BRect
frame
,
const
char
*
name
,
intf_thread_t
*
p_interface
);
virtual
~
InterfaceWindow
();
// BWindow
virtual
void
FrameResized
(
float
width
,
float
height
);
virtual
void
MessageReceived
(
BMessage
*
message
);
virtual
bool
QuitRequested
();
// InterfaceWindow
void
U
pdateInterface
();
bool
IsStopped
()
const
;
MediaControlView
*
p_mediaControl
;
private:
void
_UpdatePlaylist
();
void
_SetMenusEnabled
(
bool
hasFile
,
bool
hasChapters
=
false
,
bool
hasTitles
=
false
);
void
_UpdateSpeedMenu
(
int
rate
);
void
_InputStreamChanged
();
intf_thread_t
*
p_intf
;
es_descriptor_t
*
p_spu_es
;
bool
fPlaylistIsEmpty
;
BFilePanel
*
fFilePanel
;
BFilePanel
*
fSubtitlesPanel
;
PlayListWindow
*
fPlaylistWindow
;
PreferencesWindow
*
fPreferencesWindow
;
MessagesWindow
*
fMessagesWindow
;
BMenuBar
*
fMenuBar
;
BMenuItem
*
fNext
TitleMI
;
BMenuItem
*
fPrevTitle
MI
;
BMenuItem
*
fNext
ChapterMI
;
BMenuItem
*
fPrevChapter
MI
;
BMenuItem
*
fOnTop
MI
;
BMenuItem
*
fSlower
MI
;
BMenuItem
*
fNormal
MI
;
BMenuItem
*
fFaster
MI
;
BMenu
*
fAudioMenu
;
BMenu
*
fNavigationMenu
;
BMenu
*
fTitleMenu
;
BMenu
*
fChapterMenu
;
BMenu
*
fLanguageMenu
;
BMenu
*
fSubtitlesMenu
;
BMenu
*
fSpeedMenu
;
BMenu
*
fShow
Menu
;
bigtime_t
fLastUpdateTime
;
VlcWrapper
*
p_wrapper
;
};
#endif
// BEOS_INTERFACE_WINDOW_H
#endif
// BEOS_INTERFACE_WINDOW_H
modules/gui/beos/MessagesWindow.cpp
0 → 100644
View file @
02d360bd
/*****************************************************************************
* MessagesWindow.cpp: beos interface
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: MessagesWindow.cpp,v 1.1 2003/01/25 20:15:41 titer Exp $
*
* Authors: Eric Petit <titer@videolan.org>
*
* 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.
*****************************************************************************/
/* BeOS headers */
#include <InterfaceKit.h>
/* VLC headers */
#include <vlc/vlc.h>
#include <vlc/intf.h>
/* BeOS module headers */
#include "VlcWrapper.h"
#include "MessagesWindow.h"
/*****************************************************************************
* MessagesWindow::MessagesWindow
*****************************************************************************/
MessagesWindow
::
MessagesWindow
(
intf_thread_t
*
p_intf
,
BRect
frame
,
const
char
*
name
)
:
BWindow
(
frame
,
name
,
B_FLOATING_WINDOW_LOOK
,
B_NORMAL_WINDOW_FEEL
,
B_NOT_ZOOMABLE
)
{
this
->
p_intf
=
p_intf
;
p_sub
=
p_intf
->
p_sys
->
p_sub
;
BRect
rect
,
rect2
;
rect
=
Bounds
();
rect
.
right
-=
B_V_SCROLL_BAR_WIDTH
;
rect
.
bottom
-=
B_H_SCROLL_BAR_HEIGHT
;
rect2
=
rect
;
rect2
.
InsetBy
(
5
,
5
);
fMessagesView
=
new
BTextView
(
rect
,
"messages"
,
rect2
,
B_FOLLOW_ALL
,
B_WILL_DRAW
);
fMessagesView
->
MakeEditable
(
false
);
fScrollView
=
new
BScrollView
(
"scrollview"
,
fMessagesView
,
B_WILL_DRAW
,
B_FOLLOW_ALL
,
true
,
true
);
fScrollBar
=
fScrollView
->
ScrollBar
(
B_VERTICAL
);
AddChild
(
fScrollView
);
/* start window thread in hidden state */
Hide
();
Show
();
}
/*****************************************************************************
* MessagesWindow::~MessagesWindow
*****************************************************************************/
MessagesWindow
::~
MessagesWindow
()
{
}
/*****************************************************************************
* MessagesWindow::QuitRequested
*****************************************************************************/
bool
MessagesWindow
::
QuitRequested
()
{
Hide
();
return
false
;
}
/*****************************************************************************
* MessagesWindow::ReallyQuit
*****************************************************************************/
void
MessagesWindow
::
ReallyQuit
()
{
Hide
();
Quit
();
}
/*****************************************************************************
* MessagesWindow::UpdateMessages
*****************************************************************************/
void
MessagesWindow
::
UpdateMessages
()
{
int
i_start
;
vlc_mutex_lock
(
p_sub
->
p_lock
);
int
i_stop
=
*
p_sub
->
pi_stop
;
vlc_mutex_unlock
(
p_sub
->
p_lock
);
if
(
p_sub
->
i_start
!=
i_stop
)
{
for
(
i_start
=
p_sub
->
i_start
;
i_start
!=
i_stop
;
i_start
=
(
i_start
+
1
)
%
VLC_MSG_QSIZE
)
{
/* Append all messages to log window */
/* textctrl->SetDefaultStyle( *dbg_attr );
(*textctrl) << p_sub->p_msg[i_start].psz_module; */
/* switch( p_sub->p_msg[i_start].i_type )
{
case VLC_MSG_INFO:
(*textctrl) << ": ";
textctrl->SetDefaultStyle( *info_attr );
break;
case VLC_MSG_ERR:
(*textctrl) << " error: ";
textctrl->SetDefaultStyle( *err_attr );
break;
case VLC_MSG_WARN:
(*textctrl) << " warning: ";
textctrl->SetDefaultStyle( *warn_attr );
break;
case VLC_MSG_DBG:
default:
(*textctrl) << " debug: ";
break;
} */
/* Add message */
fMessagesView
->
LockLooper
();
fMessagesView
->
Insert
(
p_sub
->
p_msg
[
i_start
].
psz_msg
);
fMessagesView
->
Insert
(
"
\n
"
);
fMessagesView
->
UnlockLooper
();
/* Scroll at the end */
fScrollBar
->
LockLooper
();
float
min
,
max
;
fScrollBar
->
GetRange
(
&
min
,
&
max
);
fScrollBar
->
SetValue
(
max
);
fScrollBar
->
UnlockLooper
();
}
vlc_mutex_lock
(
p_sub
->
p_lock
);
p_sub
->
i_start
=
i_start
;
vlc_mutex_unlock
(
p_sub
->
p_lock
);
}
}
modules/gui/beos/MessagesWindow.h
0 → 100644
View file @
02d360bd
/*****************************************************************************
* MessagesWindow.h
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: MessagesWindow.h,v 1.1 2003/01/25 20:15:41 titer Exp $
*
* Authors: Eric Petit <titer@videolan.org>
*
* 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.
*****************************************************************************/
#ifndef BEOS_MESSAGES_WINDOW_H
#define BEOS_MESSAGES_WINDOW_H
#include <Window.h>
class
MessagesWindow
:
public
BWindow
{
public:
MessagesWindow
(
intf_thread_t
*
p_intf
,
BRect
frame
,
const
char
*
name
);
virtual
~
MessagesWindow
();
virtual
bool
QuitRequested
();
void
ReallyQuit
();
void
UpdateMessages
();
private:
intf_thread_t
*
p_intf
;
msg_subscription_t
*
p_sub
;
BView
*
fBackgroundView
;
BTextView
*
fMessagesView
;
BScrollView
*
fScrollView
;
BScrollBar
*
fScrollBar
;
};
#endif // BEOS_PREFERENCES_WINDOW_H
modules/gui/beos/Modules.am
View file @
02d360bd
...
...
@@ -15,6 +15,8 @@ SOURCES_beos = \
modules/gui/beos/PlayListWindow.h \
modules/gui/beos/PreferencesWindow.cpp \
modules/gui/beos/PreferencesWindow.h \
modules/gui/beos/MessagesWindow.cpp \
modules/gui/beos/MessagesWindow.h \
modules/gui/beos/MediaControlView.cpp \
modules/gui/beos/MediaControlView.h \
modules/gui/beos/VlcWrapper.cpp \
...
...
modules/gui/beos/MsgVals.h
View file @
02d360bd
...
...
@@ -2,7 +2,7 @@
* MsgVals.h
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: MsgVals.h,v 1.
4 2003/01/14 14:48:55
titer Exp $
* $Id: MsgVals.h,v 1.
5 2003/01/25 20:15:41
titer Exp $
*
* Authors: Tony Castley <tcastley@mail.powerup.com.au>
* Stephan Aßmus <stippi@yellowbites.com>
...
...
@@ -25,47 +25,48 @@
#ifndef BEOS_MESSAGE_VALUES_H
#define BEOS_MESSAGE_VALUES_H
#define PLAYING
0
#define PAUSED
1
#define PLAYING
0
#define PAUSED
1
const
uint32
OPEN_FILE
=
'
opfl
'
;
const
uint32
OPEN_DVD
=
'
opdv
'
;
const
uint32
OPEN_FILE
=
'
opfl
'
;
const
uint32
OPEN_DVD
=
'
opdv
'
;
const
uint32
LOAD_SUBFILE
=
'
losu
'
;
const
uint32
SUBFILE_RECEIVED
=
'
sure
'
;
const
uint32
OPEN_PLAYLIST
=
'
oppl
'
;
const
uint32
STOP_PLAYBACK
=
'
stpl
'
;
const
uint32
START_PLAYBACK
=
'
play
'
;
const
uint32
PAUSE_PLAYBACK
=
'
papl
'
;
const
uint32
FASTER_PLAY
=
'
fapl
'
;
const
uint32
SLOWER_PLAY
=
'
slpl
'
;
const
uint32
NORMAL_PLAY
=
'
nrpl
'
;
const
uint32
SEEK_PLAYBACK
=
'
seek
'
;
const
uint32
VOLUME_CHG
=
'
voch
'
;
const
uint32
VOLUME_MUTE
=
'
mute
'
;
const
uint32
SELECT_CHANNEL
=
'
chan
'
;
const
uint32
SELECT_SUBTITLE
=
'
subt
'
;
const
uint32
PREV_TITLE
=
'
prti
'
;
const
uint32
NEXT_TITLE
=
'
nxti
'
;
const
uint32
TOGGLE_TITLE
=
'
tgti
'
;
const
uint32
PREV_CHAPTER
=
'
prch
'
;
const
uint32
NEXT_CHAPTER
=
'
nxch
'
;
const
uint32
TOGGLE_CHAPTER
=
'
tgch
'
;
const
uint32
PREV_FILE
=
'
prfl
'
;
const
uint32
NEXT_FILE
=
'
nxfl
'
;
const
uint32
NAVIGATE_PREV
=
'
navp
'
;
// could be chapter, title or file
const
uint32
NAVIGATE_NEXT
=
'
navn
'
;
// could be chapter, title or file
const
uint32
OPEN_PREFERENCES
=
'
pref
'
;
const
uint32
TOGGLE_ON_TOP
=
'
ontp
'
;
const
uint32
TOGGLE_FULL_SCREEN
=
'
tgfs
'
;
const
uint32
RESIZE_50
=
'
rshl
'
;
const
uint32
RESIZE_100
=
'
rsor
'
;
const
uint32
RESIZE_200
=
'
rsdb
'
;
const
uint32
RESIZE_TRUE
=
'
rstr
'
;
const
uint32
ASPECT_CORRECT
=
'
asco
'
;
const
uint32
VERT_SYNC
=
'
vsyn
'
;
const
uint32
WINDOW_FEEL
=
'
wfel
'
;
const
uint32
SCREEN_SHOT
=
'
scrn
'
;
const
uint32
INTERFACE_CREATED
=
'
ifcr
'
;
/* see VlcApplication::MessageReceived()
const
uint32
OPEN_PLAYLIST
=
'
oppl
'
;
const
uint32
STOP_PLAYBACK
=
'
stpl
'
;
const
uint32
START_PLAYBACK
=
'
play
'
;
const
uint32
PAUSE_PLAYBACK
=
'
papl
'
;
const
uint32
FASTER_PLAY
=
'
fapl
'
;
const
uint32
SLOWER_PLAY
=
'
slpl
'
;
const
uint32
NORMAL_PLAY
=
'
nrpl
'
;
const
uint32
SEEK_PLAYBACK
=
'
seek
'
;
const
uint32
VOLUME_CHG
=
'
voch
'
;
const
uint32
VOLUME_MUTE
=
'
mute
'
;
const
uint32
SELECT_CHANNEL
=
'
chan
'
;
const
uint32
SELECT_SUBTITLE
=
'
subt
'
;
const
uint32
PREV_TITLE
=
'
prti
'
;
const
uint32
NEXT_TITLE
=
'
nxti
'
;
const
uint32
TOGGLE_TITLE
=
'
tgti
'
;
const
uint32
PREV_CHAPTER
=
'
prch
'
;
const
uint32
NEXT_CHAPTER
=
'
nxch
'
;
const
uint32
TOGGLE_CHAPTER
=
'
tgch
'
;
const
uint32
PREV_FILE
=
'
prfl
'
;
const
uint32
NEXT_FILE
=
'
nxfl
'
;
const
uint32
NAVIGATE_PREV
=
'
navp
'
;
// could be chapter, title or file
const
uint32
NAVIGATE_NEXT
=
'
navn
'
;
// could be chapter, title or file
const
uint32
OPEN_PREFERENCES
=
'
pref
'
;
const
uint32
OPEN_MESSAGES
=
'
mess
'
;
const
uint32
TOGGLE_ON_TOP
=
'
ontp
'
;
const
uint32
TOGGLE_FULL_SCREEN
=
'
tgfs
'
;
const
uint32
RESIZE_50
=
'
rshl
'
;
const
uint32
RESIZE_100
=
'
rsor
'
;
const
uint32
RESIZE_200
=
'
rsdb
'
;
const
uint32
RESIZE_TRUE
=
'
rstr
'
;
const
uint32
ASPECT_CORRECT
=
'
asco
'
;
const
uint32
VERT_SYNC
=
'
vsyn
'
;
const
uint32
WINDOW_FEEL
=
'
wfel
'
;
const
uint32
SCREEN_SHOT
=
'
scrn
'
;
const
uint32
INTERFACE_CREATED
=
'
ifcr
'
;
/* see VlcApplication::MessageReceived()
* in src/misc/beos_specific.cpp */
#endif
// BEOS_MESSAGE_VALUES_H
#endif
// BEOS_MESSAGE_VALUES_H
modules/gui/beos/PreferencesWindow.cpp
View file @
02d360bd
...
...
@@ -2,7 +2,7 @@
* PreferencesWindow.cpp: beos interface
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: PreferencesWindow.cpp,v 1.
8 2003/01/17 18:19:43
titer Exp $
* $Id: PreferencesWindow.cpp,v 1.
9 2003/01/25 20:15:41
titer Exp $
*
* Authors: Eric Petit <titer@videolan.org>
*
...
...
@@ -37,12 +37,12 @@
/*****************************************************************************
* Preferences::PreferencesWindow
*****************************************************************************/
PreferencesWindow
::
PreferencesWindow
(
BRect
frame
,
const
char
*
name
,
intf_thread_t
*
p_interfac
e
)
:
BWindow
(
frame
,
name
,
B_FLOATING_WINDOW_LOOK
,
B_NORMAL_WINDOW_FEEL
,
B_NOT_ZOOMABLE
|
B_NOT_RESIZABLE
|
B_NOT_CLOSABLE
)
PreferencesWindow
::
PreferencesWindow
(
intf_thread_t
*
p_intf
,
BRect
frame
,
const
char
*
nam
e
)
:
BWindow
(
frame
,
name
,
B_FLOATING_WINDOW_LOOK
,
B_NORMAL_WINDOW_FEEL
,
B_NOT_ZOOMABLE
|
B_NOT_RESIZABLE
|
B_NOT_CLOSABLE
)
{
p_intf
=
p_interface
;
this
->
p_intf
=
p_intf
;
BRect
rect
;
/* "background" view */
...
...
@@ -132,8 +132,6 @@ PreferencesWindow::PreferencesWindow( BRect frame, const char* name,
rect
.
top
=
rect
.
bottom
-
10
;
fRestartString
=
new
BStringView
(
rect
,
NULL
,
"Warning: changing settings after starting playback may have no effect."
);
/*rgb_color redColor = {255, 0, 0, 255};
fRestartString->SetHighColor(redColor);*/
fRestartString
->
SetAlignment
(
B_ALIGN_CENTER
);
fPrefsView
->
AddChild
(
fRestartString
);
...
...
@@ -154,9 +152,9 @@ PreferencesWindow::PreferencesWindow( BRect frame, const char* name,
button
=
new
BButton
(
rect
,
NULL
,
"Defaults"
,
new
BMessage
(
PREFS_DEFAULTS
)
);
fPrefsView
->
AddChild
(
button
);
// start window thread in hidden state
Hide
();
Show
();
// start window thread in hidden state
Hide
();
Show
();
}
/*****************************************************************************
...
...
@@ -171,36 +169,36 @@ PreferencesWindow::~PreferencesWindow()
*****************************************************************************/
void
PreferencesWindow
::
MessageReceived
(
BMessage
*
p_message
)
{
switch
(
p_message
->
what
)
{
case
DVDOLD_CHECK
:
case
SLIDER_UPDATE
:
{
ApplyChanges
();
break
;
}
case
PREFS_DEFAULTS
:
{
SetDefaults
();
switch
(
p_message
->
what
)
{
case
DVDOLD_CHECK
:
case
SLIDER_UPDATE
:
{
ApplyChanges
();
break
;
}
case
PREFS_DEFAULTS
:
{
SetDefaults
();
ApplyChanges
();
break
;
}
case
PREFS_SAVE
:
{
config_SaveConfigFile
(
p_intf
,
"main"
);
config_SaveConfigFile
(
p_intf
,
"adjust"
);
config_SaveConfigFile
(
p_intf
,
"ffmpeg"
);
break
;
}
case
PREFS_OK
:
{
break
;
}
case
PREFS_SAVE
:
{
config_SaveConfigFile
(
p_intf
,
"main"
);
config_SaveConfigFile
(
p_intf
,
"adjust"
);
config_SaveConfigFile
(
p_intf
,
"ffmpeg"
);
break
;
}
case
PREFS_OK
:
{
Hide
();
break
;
}
default:
BWindow
::
MessageReceived
(
p_message
);
break
;
}
}
default:
BWindow
::
MessageReceived
(
p_message
);
break
;
}
}
/*****************************************************************************
...
...
modules/gui/beos/PreferencesWindow.h
View file @
02d360bd
...
...
@@ -2,7 +2,7 @@
* PreferencesWindow.h
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: PreferencesWindow.h,v 1.
6 2003/01/17 18:19:43
titer Exp $
* $Id: PreferencesWindow.h,v 1.
7 2003/01/25 20:15:41
titer Exp $
*
* Authors: Eric Petit <titer@videolan.org>
*
...
...
@@ -38,9 +38,9 @@
class
PreferencesWindow
:
public
BWindow
{
public:
PreferencesWindow
(
BRect
frame
,
const
char
*
n
ame
,
intf_thread_t
*
p_interfac
e
);
PreferencesWindow
(
intf_thread_t
*
p_intf
,
BRect
fr
ame
,
const
char
*
nam
e
);
virtual
~
PreferencesWindow
();
virtual
void
MessageReceived
(
BMessage
*
message
);
void
ReallyQuit
();
...
...
@@ -65,5 +65,5 @@ class PreferencesWindow : public BWindow
intf_thread_t
*
p_intf
;
};
#endif
// BEOS_PREFERENCES_WINDOW_H
#endif
// BEOS_PREFERENCES_WINDOW_H
modules/gui/beos/VlcWrapper.h
View file @
02d360bd
...
...
@@ -2,7 +2,7 @@
* VlcWrapper.h: BeOS plugin for vlc (derived from MacOS X port)
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: VlcWrapper.h,v 1.1
5 2003/01/22 01:13:22
titer Exp $
* $Id: VlcWrapper.h,v 1.1
6 2003/01/25 20:15:41
titer Exp $
*
* Authors: Florian G. Pflug <fgp@phlo.org>
* Jon Lech Johansen <jon-vl@nanocrew.net>
...
...
@@ -35,16 +35,18 @@ class VlcWrapper;
*****************************************************************************/
struct
intf_sys_t
{
InterfaceWindow
*
p_window
;
msg_subscription_t
*
p_sub
;
InterfaceWindow
*
p_window
;
vlc_bool_t
b_loop
;
vlc_bool_t
b_mute
;
int
i_part
;
audio_volume_t
i_saved_volume
;
int
i_channel
;
bool
b_dvdold
;
vlc_bool_t
b_loop
;
vlc_bool_t
b_mute
;
int
i_part
;
audio_volume_t
i_saved_volume
;
int
i_channel
;
bool
b_dvdold
;
VlcWrapper
*
p_wrapper
;
VlcWrapper
*
p_wrapper
;
};
/*****************************************************************************
...
...
@@ -94,8 +96,8 @@ public:
void
PlaylistJumpTo
(
int
);
void
GetNavCapabilities
(
bool
*
canSkipPrev
,
bool
*
canSkipNext
);
void
NavigatePrev
();
void
NavigateNext
();
void
NavigatePrev
();
void
NavigateNext
();
/* Audio */
bool
HasAudio
();
...
...
@@ -124,8 +126,8 @@ public:
void
LoadSubFile
(
char
*
psz_file
);
private:
intf_thread_t
*
p_intf
;
input_thread_t
*
p_input
;
playlist_t
*
p_playlist
;
intf_thread_t
*
p_intf
;
input_thread_t
*
p_input
;
playlist_t
*
p_playlist
;
aout_instance_t
*
p_aout
;
};
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