Platforms to show: All Mac Windows Linux Cross-Platform
Required plugins for this example: MBS MacBase Plugin, MBS MacOSX Plugin, MBS Picture Plugin, MBS Main Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /MacOSX/DVD/DVD Playback
This example is the version from Mon, 5th May 2019.
Project "DVD Playback.xojo_binary_project"
FileTypes
Filetype text
End FileTypes
Class MainWindow Inherits Window
Control StaticText1 Inherits Label
ControlInstance StaticText1 Inherits Label
End Control
Control Last Inherits Label
ControlInstance Last Inherits Label
End Control
Control Canvas1 Inherits Canvas
ControlInstance Canvas1 Inherits Canvas
EventHandler Function MouseDown(X As Integer, Y As Integer) As Boolean
dim i as integer
i=d.DoMenuClick(x,y)
CheckLastError "DoMenuClick"
End EventHandler
EventHandler Sub MouseMove(X As Integer, Y As Integer)
dim i as integer
i=d.DoMenuMouseOver(x,y)
CheckLastError "DoMenuMouseOver"
End EventHandler
End Control
Control StaticText2 Inherits Label
ControlInstance StaticText2 Inherits Label
End Control
Control pos Inherits Label
ControlInstance pos Inherits Label
End Control
Control PushButton1 Inherits PushButton
ControlInstance PushButton1 Inherits PushButton
EventHandler Sub Action()
d.Play
CheckLastError "Play"
End EventHandler
End Control
Control PushButton2 Inherits PushButton
ControlInstance PushButton2 Inherits PushButton
EventHandler Sub Action()
d.Pause
CheckLastError "Pause"
End EventHandler
End Control
Control PushButton3 Inherits PushButton
ControlInstance PushButton3 Inherits PushButton
EventHandler Sub Action()
d.NextChapter
CheckLastError "NextChapter"
End EventHandler
End Control
Control PushButton4 Inherits PushButton
ControlInstance PushButton4 Inherits PushButton
EventHandler Sub Action()
d.PreviousChapter
CheckLastError "PreviousChapter"
End EventHandler
End Control
Control PushButton5 Inherits PushButton
ControlInstance PushButton5 Inherits PushButton
EventHandler Sub Action()
dim w,p as Picture
w=ScreenshotRectMBS(left+Canvas1.Left,top+Canvas1.top, Canvas1.Width,Canvas1.Height)
p = new Picture(Canvas2.Width,Canvas2.Height,32)
p.Graphics.DrawPicture w,0,0,p.Width,p.Height,0,0,w.width,w.height
Canvas2.Backdrop=p
End EventHandler
End Control
Control Canvas2 Inherits Canvas
ControlInstance Canvas2 Inherits Canvas
End Control
EventHandler Sub Close()
if mediaOpened then
d.CloseMediaVolume
end if
End EventHandler
EventHandler Function KeyDown(Key As String) As Boolean
if key=" " then
UpdatePosition
Return true
end if
End EventHandler
EventHandler Sub Open()
Init
End EventHandler
EventHandler Sub Resized()
d.SetVideoBounds 0,0,Canvas1.Width,Canvas1.Height
CheckLastError "SetVideoBounds"
End EventHandler
Sub CheckLastError(s as string)
if d.Lasterror<>0 then
last.text=s+" failed with error "+str(d.Lasterror)+": "+d.LasterrorString
end if
'MsgBox s
End Sub
Sub Init()
dim v,dvd as FolderItem
dim i,c as integer
d=new MyDVDPlayback
d.Open
CheckLastError "Open"
if d.Lasterror=0 then
c=VolumeCount-1
for i=1 to c
v=volume(i)
if d.IsValidMedia(v) then
dvd=v
end if
next
if dvd=nil then
MsgBox "No DVD media found."
else
dim w as NSWindowMBS = self.NSWindowMBS
d.SetVideoWindowID(w.windowNumber)
'd.SetPlayWindow(self,0)
CheckLastError "SetPlayWindow"
if d.Lasterror=0 then
d.SetVideoBounds 0,0,Canvas1.Width,Canvas1.Height
CheckLastError "SetVideoBounds"
if d.Lasterror=0 then
d.OpenMediaVolume dvd
CheckLastError "OpenMediaVolume"
if d.Lasterror=0 then
mediaOpened=true
d.play
CheckLastError "Play"
end if
end if
end if
end if
else
MsgBox "Only one application on Mac OS X 10.3 can play a DVD."
end if
End Sub
Sub UpdatePosition()
const kDVDTimeCodeUninitialized = 0
const kDVDTimeCodeElapsedSeconds = 1
const kDVDTimeCodeRemainingSeconds = 2
const kDVDTimeCodeTitleDurationSeconds = 3 // only useable for GetTime
const kDVDTimeCodeChapterElapsedSeconds = 4 // "
const kDVDTimeCodeChapterRemainingSeconds = 5 // "
const kDVDTimeCodeChapterDurationSeconds = 6 // "
dim p as string
dim title as integer
dim t,f as integer
dim Elapsed as integer
dim Duration as integer
title=d.GetTitle
p="Title "+str(title)+" of "+str(d.GetNumberOfTitles)
p=p+", Chapter "+str(d.GetChapter)+" of "+str(d.GetNumberOfChapters(title))
d.GetTime(kDVDTimeCodeElapsedSeconds, t, f)
Elapsed=t
d.GetTime(kDVDTimeCodeTitleDurationSeconds, t, f)
Duration=t
p=p+", Time: "+formattime(Elapsed)+" of "+formattime(Duration)
if pos.text<>p then
pos.text=p
end if
End Sub
Function formattime(i as integer) As String
dim second, minute, hour as integer
dim n as integer
n=i
second=n mod 60
n=n-second
n=n\60
minute=n mod 60
n=n-minute
n=n\60
hour=n
if hour=0 then
Return Format(minute,"00")+":"+Format(second,"00")
else
Return Format(hour,"0")+":"+Format(minute,"00")+":"+Format(second,"00")
end if
End Function
Property Protected d As MyDVDPlayback
Property Protected inmenu As boolean
Property Protected mediaOpened As boolean
End Class
MenuBar MenuBar1
MenuItem UntitledMenu1 = ""
MenuItem FileMenu = "&File"
MenuItem FileQuit = "Quit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "Undo"
MenuItem UntitledMenu0 = "-"
MenuItem EditCut = "Cut"
MenuItem EditCopy = "Copy"
MenuItem EditPaste = "Paste"
MenuItem EditClear = "Clear"
End MenuBar
Class App Inherits Application
End Class
Class MyDVDPlayback Inherits DVDPlaybackMBS
EventHandler Sub DVDEvent(eventcode as integer, value1 as integer, value2 as integer)
// you may do something here...
'mainWindow.Title=str(eventcode)
MainWindow.UpdatePosition
End EventHandler
EventHandler Sub FatalError(errorcode as integer)
MsgBox "Fatal error "+str(errorcode)+" in the DVD Playback Framework!"
quit
End EventHandler
End Class
End Project
See also:
The items on this page are in the following plugins: MBS MacOSX Plugin.