Added a bigger wxMMedia2 demonstration: wxMultimediaBoard: it is a sort
of light clone of the Windows Media Player. Early development, but it plays WAV/AIFF files and should work on Windows as soon as I build the makefiles. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6011 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
38
utils/wxMMedia2/board/Makefile.in
Normal file
38
utils/wxMMedia2/board/Makefile.in
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
#
|
||||||
|
# File: makefile.unx
|
||||||
|
# Author: Julian Smart
|
||||||
|
# Created: 1998
|
||||||
|
# Updated:
|
||||||
|
# Copyright: (c) 1998 Julian Smart
|
||||||
|
#
|
||||||
|
# "%W% %G%"
|
||||||
|
#
|
||||||
|
# Makefile for minimal example (UNIX).
|
||||||
|
|
||||||
|
top_srcdir = @top_srcdir@
|
||||||
|
top_builddir = ../../..
|
||||||
|
program_dir = utils/wxMMedia2/board
|
||||||
|
|
||||||
|
PROGRAM=mmboard
|
||||||
|
|
||||||
|
OBJECTS=$(PROGRAM).o
|
||||||
|
|
||||||
|
EXTRA_CPPFLAGS= -I$(top_srcdir)/utils/wxMMedia2/lib
|
||||||
|
|
||||||
|
EXTRA_LIBS= ../lib/libwxmmedia2.a
|
||||||
|
# the comment at the end of the next line is needed because otherwise autoconf
|
||||||
|
# would remove this line completely - it contains a built-in hack to remove
|
||||||
|
# any VPATH assignment not containing ':'
|
||||||
|
VPATH = @PATH_IFS@$(top_srcdir)/utils/wxMMedia2/sample # ':' for autoconf
|
||||||
|
|
||||||
|
include ../../../src/make.env
|
||||||
|
|
||||||
|
.SUFFIXES: .o .cpp .c
|
||||||
|
|
||||||
|
.cpp.o:
|
||||||
|
$(CC) $(CPPFLAGS) $(EXTRA_CPPFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
all: $(PROGRAM)
|
||||||
|
|
||||||
|
mmboard: $(OBJECTS)
|
||||||
|
$(CC) $(LDFLAGS) -o mmboard $(OBJECTS) $(EXTRA_LIBS) $(LDLIBS) $(top_builddir)/lib/@WX_TARGET_LIBRARY@
|
24
utils/wxMMedia2/board/eject.xpm
Normal file
24
utils/wxMMedia2/board/eject.xpm
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * eject_xpm[] = {
|
||||||
|
"15 16 5 1",
|
||||||
|
" c None",
|
||||||
|
". c #949594",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #FFFFFF",
|
||||||
|
"# c #8E8E8E",
|
||||||
|
" . ",
|
||||||
|
" .+@ ",
|
||||||
|
" .+++@ ",
|
||||||
|
" .+++++@ ",
|
||||||
|
" .+++++++@ ",
|
||||||
|
" .+++++++++@ ",
|
||||||
|
" .+++++++++++@ ",
|
||||||
|
".+############@",
|
||||||
|
".@@@@@@@@@@@@@@",
|
||||||
|
" ",
|
||||||
|
"...............",
|
||||||
|
".++++++++++++#@",
|
||||||
|
".++++++++++++#@",
|
||||||
|
".++++++++++++#@",
|
||||||
|
".+############@",
|
||||||
|
".@@@@@@@@@@@@@@"};
|
308
utils/wxMMedia2/board/mmbman.cpp
Normal file
308
utils/wxMMedia2/board/mmbman.cpp
Normal file
@@ -0,0 +1,308 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: mmbman.cpp
|
||||||
|
// Purpose: Multimedia Board manager
|
||||||
|
// Author: Guilhem Lavaux, <guilhem.lavaux@libertysurf.fr>
|
||||||
|
// Modified by:
|
||||||
|
// Created: 13/02/2000
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 2000, Guilhem Lavaux
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma implementation "mmbman.cpp"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// For compilers that support precompilation, includes "wx/wx.h".
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
#pragma hdrstop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// for all others, include the necessary headers (this file is usually all you
|
||||||
|
// need because it includes almost all "standard" wxWindows headers
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/wx.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Personnal headers
|
||||||
|
|
||||||
|
#include "wx/stream.h"
|
||||||
|
#include "wx/wfstream.h"
|
||||||
|
|
||||||
|
#include "sndbase.h"
|
||||||
|
#include "sndfile.h"
|
||||||
|
#include "sndwav.h"
|
||||||
|
#include "sndaiff.h"
|
||||||
|
#include "sndpcm.h"
|
||||||
|
#include "sndulaw.h"
|
||||||
|
|
||||||
|
#ifdef __UNIX__
|
||||||
|
#include "sndoss.h"
|
||||||
|
#include "sndesd.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __WIN32__
|
||||||
|
#include "sndwin.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "mmboard.h"
|
||||||
|
#include "mmbman.h"
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Private class definitions
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class MMBoardSoundFile: public MMBoardFile {
|
||||||
|
public:
|
||||||
|
MMBoardSoundFile(const wxString& filename);
|
||||||
|
~MMBoardSoundFile();
|
||||||
|
|
||||||
|
bool NeedWindow();
|
||||||
|
|
||||||
|
void SetWindow(wxWindow *window);
|
||||||
|
|
||||||
|
void Play();
|
||||||
|
void Pause();
|
||||||
|
void Resume();
|
||||||
|
void Stop();
|
||||||
|
|
||||||
|
MMBoardTime GetPosition();
|
||||||
|
MMBoardTime GetLength();
|
||||||
|
|
||||||
|
bool IsStopped();
|
||||||
|
|
||||||
|
wxString GetStringType();
|
||||||
|
wxString GetStringInformation();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxSoundFileStream *GetDecoder();
|
||||||
|
|
||||||
|
wxSoundStream *m_output_stream;
|
||||||
|
wxInputStream *m_input_stream;
|
||||||
|
wxSoundFileStream *m_file_stream;
|
||||||
|
|
||||||
|
MMBoardTime m_length;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// MMBoardSoundFile
|
||||||
|
|
||||||
|
MMBoardSoundFile::MMBoardSoundFile(const wxString& filename)
|
||||||
|
: MMBoardFile()
|
||||||
|
{
|
||||||
|
m_input_stream = new wxFileInputStream(filename);
|
||||||
|
m_output_stream = MMBoardManager::OpenSoundStream();
|
||||||
|
|
||||||
|
m_file_stream = GetDecoder();
|
||||||
|
|
||||||
|
if (!m_file_stream)
|
||||||
|
SetError(MMBoard_UnknownFile);
|
||||||
|
|
||||||
|
// Compute length
|
||||||
|
wxUint32 length, seconds;
|
||||||
|
|
||||||
|
length = m_file_stream->GetLength();
|
||||||
|
seconds = m_file_stream->GetSoundFormat().GetTimeFromBytes(length);
|
||||||
|
m_length.seconds = seconds % 60;
|
||||||
|
m_length.minutes = (seconds / 60) % 60;
|
||||||
|
m_length.hours = seconds / 3600;
|
||||||
|
}
|
||||||
|
|
||||||
|
MMBoardSoundFile::~MMBoardSoundFile()
|
||||||
|
{
|
||||||
|
delete m_file_stream;
|
||||||
|
MMBoardManager::UnrefSoundStream(m_output_stream);
|
||||||
|
delete m_input_stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSoundFileStream *MMBoardSoundFile::GetDecoder()
|
||||||
|
{
|
||||||
|
wxSoundFileStream *f_stream;
|
||||||
|
|
||||||
|
// First, we try a Wave decoder
|
||||||
|
f_stream = new wxSoundWave(*m_input_stream, *m_output_stream);
|
||||||
|
if (f_stream->CanRead())
|
||||||
|
return f_stream;
|
||||||
|
delete f_stream;
|
||||||
|
|
||||||
|
// Then, a AIFF decoder
|
||||||
|
f_stream = new wxSoundAiff(*m_input_stream, *m_output_stream);
|
||||||
|
if (f_stream->CanRead())
|
||||||
|
return f_stream;
|
||||||
|
delete f_stream;
|
||||||
|
|
||||||
|
// TODO: automate
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
MMBoardTime MMBoardSoundFile::GetLength()
|
||||||
|
{
|
||||||
|
return m_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MMBoardSoundFile::IsStopped()
|
||||||
|
{
|
||||||
|
return m_file_stream->IsStopped();
|
||||||
|
}
|
||||||
|
|
||||||
|
MMBoardTime MMBoardSoundFile::GetPosition()
|
||||||
|
{
|
||||||
|
wxUint32 length, seconds;
|
||||||
|
MMBoardTime file_time;
|
||||||
|
|
||||||
|
file_time.seconds = file_time.minutes = file_time.hours = 0;
|
||||||
|
if (m_file_stream->IsStopped())
|
||||||
|
return file_time;
|
||||||
|
|
||||||
|
length = m_file_stream->GetPosition();
|
||||||
|
seconds = m_file_stream->GetSoundFormat().GetTimeFromBytes(length);
|
||||||
|
file_time.seconds = seconds % 60;
|
||||||
|
file_time.minutes = (seconds / 60) % 60;
|
||||||
|
file_time.hours = seconds / 3600;
|
||||||
|
|
||||||
|
return file_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MMBoardSoundFile::NeedWindow()
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardSoundFile::SetWindow(wxWindow *window)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardSoundFile::Play()
|
||||||
|
{
|
||||||
|
m_file_stream->Play();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardSoundFile::Pause()
|
||||||
|
{
|
||||||
|
m_file_stream->Pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardSoundFile::Resume()
|
||||||
|
{
|
||||||
|
m_file_stream->Resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardSoundFile::Stop()
|
||||||
|
{
|
||||||
|
m_file_stream->Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString MMBoardSoundFile::GetStringType()
|
||||||
|
{
|
||||||
|
return wxString("WAVE file");
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString MMBoardSoundFile::GetStringInformation()
|
||||||
|
{
|
||||||
|
wxString info;
|
||||||
|
wxSoundFormatBase *format;
|
||||||
|
|
||||||
|
format = &(m_file_stream->GetSoundFormat());
|
||||||
|
|
||||||
|
info = _T("Data encoding: ");
|
||||||
|
switch (format->GetType()) {
|
||||||
|
case wxSOUND_PCM: {
|
||||||
|
wxSoundFormatPcm *pcm_format = (wxSoundFormatPcm *)format;
|
||||||
|
|
||||||
|
info += _T("PCM\n");
|
||||||
|
info += wxString::Format(_T("Sampling rate: %d\n")
|
||||||
|
_T("Bits per sample: %d\n")
|
||||||
|
_T("Number of channels: %d\n"),
|
||||||
|
pcm_format->GetSampleRate(),
|
||||||
|
pcm_format->GetBPS(),
|
||||||
|
pcm_format->GetChannels());
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case wxSOUND_ULAW: {
|
||||||
|
wxSoundFormatUlaw *ulaw_format = (wxSoundFormatUlaw *)format;
|
||||||
|
info += _T("ULAW\n");
|
||||||
|
info += wxString::Format(_T("Sampling rate: %d\n"), ulaw_format->GetSampleRate());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
info += _T("Unknown");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// MMBoardFile
|
||||||
|
|
||||||
|
MMBoardFile::MMBoardFile()
|
||||||
|
{
|
||||||
|
m_error = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
MMBoardFile::~MMBoardFile()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// MMBoardManager
|
||||||
|
|
||||||
|
MMBoardFile *MMBoardManager::Open(const wxString& filename)
|
||||||
|
{
|
||||||
|
MMBoardFile *file;
|
||||||
|
|
||||||
|
file = new MMBoardSoundFile(filename);
|
||||||
|
if (file->GetError()) {
|
||||||
|
delete file;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
DECLARE_APP(MMBoardApp)
|
||||||
|
|
||||||
|
wxSoundStream *MMBoardManager::OpenSoundStream()
|
||||||
|
{
|
||||||
|
#ifdef __UNIX__
|
||||||
|
if ((wxGetApp().m_caps & MM_SOUND_ESD) != 0)
|
||||||
|
return new wxSoundStreamESD();
|
||||||
|
|
||||||
|
if ((wxGetApp().m_caps & MM_SOUND_OSS) != 0)
|
||||||
|
return new wxSoundStreamOSS();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __WIN32__
|
||||||
|
if ((wxGetApp().m_caps & MM_SOUND_WIN) != 0)
|
||||||
|
return new wxSoundStreamWin();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wxMessageBox("You are trying to open a multimedia but you have not devices", "Error", wxOK | wxICON_ERROR, NULL);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardManager::UnrefSoundStream(wxSoundStream *stream)
|
||||||
|
{
|
||||||
|
delete stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
82
utils/wxMMedia2/board/mmbman.h
Normal file
82
utils/wxMMedia2/board/mmbman.h
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: mmbman.h
|
||||||
|
// Purpose: Multimedia Board manager
|
||||||
|
// Author: Guilhem Lavaux, <guilhem.lavaux@libertysurf.fr>
|
||||||
|
// Modified by:
|
||||||
|
// Created: 13/02/2000
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 2000, Guilhem Lavaux
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _MMBMAN_APP_H_
|
||||||
|
#define _MMBMAN_APP_H_
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma interface "mmbman.cpp"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "wx/stream.h"
|
||||||
|
#include "sndbase.h"
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Base structure definitions
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
wxUint8 seconds, minutes, hours;
|
||||||
|
} MMBoardTime;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Constants
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define MMBoard_NoError 0
|
||||||
|
#define MMBoard_UnknownFile 1
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Interface definition: MMBoardFile
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class MMBoardFile {
|
||||||
|
public:
|
||||||
|
MMBoardFile();
|
||||||
|
virtual ~MMBoardFile();
|
||||||
|
|
||||||
|
virtual bool NeedWindow() = 0;
|
||||||
|
|
||||||
|
virtual void SetWindow(wxWindow *window) = 0;
|
||||||
|
|
||||||
|
virtual void Play() = 0;
|
||||||
|
virtual void Pause() = 0;
|
||||||
|
virtual void Resume() = 0;
|
||||||
|
virtual void Stop() = 0;
|
||||||
|
|
||||||
|
virtual MMBoardTime GetPosition() = 0;
|
||||||
|
virtual MMBoardTime GetLength() = 0;
|
||||||
|
|
||||||
|
virtual bool IsStopped() = 0;
|
||||||
|
|
||||||
|
virtual wxString GetStringType() = 0;
|
||||||
|
virtual wxString GetStringInformation() = 0;
|
||||||
|
|
||||||
|
void SetError(wxUint8 error) { m_error = error; }
|
||||||
|
wxUint8 GetError() const { return m_error; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxUint8 m_error;
|
||||||
|
};
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Main manager
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class MMBoardManager {
|
||||||
|
public:
|
||||||
|
static MMBoardFile *Open(const wxString& filename);
|
||||||
|
|
||||||
|
static wxSoundStream *OpenSoundStream();
|
||||||
|
static void UnrefSoundStream(wxSoundStream *stream);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
468
utils/wxMMedia2/board/mmboard.cpp
Normal file
468
utils/wxMMedia2/board/mmboard.cpp
Normal file
@@ -0,0 +1,468 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: mmboard.cpp
|
||||||
|
// Purpose: Multimedia Library sample
|
||||||
|
// Author: Guilhem Lavaux (created from minimal by J. Smart)
|
||||||
|
// Modified by:
|
||||||
|
// Created: 13/02/2000
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) Guilhem Lavaux
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma implementation "mmboard.cpp"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// For compilers that support precompilation, includes "wx/wx.h".
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
#pragma hdrstop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// for all others, include the necessary headers (this file is usually all you
|
||||||
|
// need because it includes almost all "standard" wxWindows headers
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/wx.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// ressources
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// the application icon
|
||||||
|
#if defined(__WXGTK__) || defined(__WXMOTIF__)
|
||||||
|
#include "mondrian.xpm"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// include multimedia classes
|
||||||
|
#include "sndbase.h"
|
||||||
|
#ifdef __WIN32__
|
||||||
|
#include "sndwin.h"
|
||||||
|
#endif
|
||||||
|
#ifdef __UNIX__
|
||||||
|
#include "sndoss.h"
|
||||||
|
#include "sndesd.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "wx/statline.h"
|
||||||
|
#include "wx/stattext.h"
|
||||||
|
|
||||||
|
// include personnal classes
|
||||||
|
#include "mmboard.h"
|
||||||
|
#include "mmbman.h"
|
||||||
|
|
||||||
|
#include "play.xpm"
|
||||||
|
#include "stop.xpm"
|
||||||
|
#include "eject.xpm"
|
||||||
|
#include "pause.xpm"
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// private classes
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Main Multimedia Board frame
|
||||||
|
class MMBoardFrame : public wxFrame
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// ctor(s)
|
||||||
|
MMBoardFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
|
||||||
|
// dtor
|
||||||
|
~MMBoardFrame();
|
||||||
|
|
||||||
|
// event handlers
|
||||||
|
void OnQuit(wxCommandEvent& event);
|
||||||
|
void OnAbout(wxCommandEvent& event);
|
||||||
|
void OnOpen(wxCommandEvent& event);
|
||||||
|
void OnPlay(wxCommandEvent& event);
|
||||||
|
void OnStop(wxCommandEvent& event);
|
||||||
|
void OnPause(wxCommandEvent& event);
|
||||||
|
void OnRefreshInfo(wxEvent& event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// any class wishing to process wxWindows events must use this macro
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
|
||||||
|
private:
|
||||||
|
void UpdateMMedInfo();
|
||||||
|
void UpdateInfoText();
|
||||||
|
|
||||||
|
MMBoardFile *m_opened_file;
|
||||||
|
|
||||||
|
wxSlider *m_positionSlider;
|
||||||
|
wxBitmapButton *m_playButton, *m_pauseButton, *m_stopButton, *m_ejectButton;
|
||||||
|
wxStaticText *m_fileType, *m_infoText;
|
||||||
|
|
||||||
|
wxTimer *m_refreshTimer;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// constants
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// IDs for the controls and the menu commands
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
// menu items
|
||||||
|
MMBoard_Quit = 1,
|
||||||
|
MMBoard_Open,
|
||||||
|
MMBoard_About,
|
||||||
|
MMBoard_PositionSlider,
|
||||||
|
MMBoard_PlayButton,
|
||||||
|
MMBoard_PauseButton,
|
||||||
|
MMBoard_ResumeButton,
|
||||||
|
MMBoard_StopButton,
|
||||||
|
MMBoard_EjectButton,
|
||||||
|
MMBoard_RefreshInfo
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// event tables and other macros for wxWindows
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(MMBoardFrame, wxFrame)
|
||||||
|
EVT_MENU(MMBoard_Quit, MMBoardFrame::OnQuit)
|
||||||
|
EVT_MENU(MMBoard_About, MMBoardFrame::OnAbout)
|
||||||
|
EVT_MENU(MMBoard_Open, MMBoardFrame::OnOpen)
|
||||||
|
EVT_BUTTON(MMBoard_PlayButton, MMBoardFrame::OnPlay)
|
||||||
|
EVT_BUTTON(MMBoard_StopButton, MMBoardFrame::OnStop)
|
||||||
|
EVT_BUTTON(MMBoard_PauseButton, MMBoardFrame::OnPause)
|
||||||
|
EVT_CUSTOM(wxEVT_TIMER, MMBoard_RefreshInfo, MMBoardFrame::OnRefreshInfo)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Main board application launcher
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
IMPLEMENT_APP(MMBoardApp)
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// the application class
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool MMBoardApp::OnInit()
|
||||||
|
{
|
||||||
|
// create the main application window
|
||||||
|
MMBoardFrame *frame = new MMBoardFrame("Multimedia Board",
|
||||||
|
wxPoint(50, 50), wxSize(450, 340));
|
||||||
|
|
||||||
|
// and show it (the frames, unlike simple controls, are not shown when
|
||||||
|
// created initially)
|
||||||
|
frame->Show(TRUE);
|
||||||
|
|
||||||
|
m_caps = TestMultimediaCaps();
|
||||||
|
|
||||||
|
if (!m_caps) {
|
||||||
|
wxMessageBox("Your system has no multimedia capabilities. We are exiting now.", "Major error !", wxOK | wxICON_ERROR, NULL);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString msg;
|
||||||
|
msg.Printf("Detected : %s%s%s", (m_caps & MM_SOUND_OSS) ? "OSS " : "",
|
||||||
|
(m_caps & MM_SOUND_ESD) ? "ESD " : "",
|
||||||
|
(m_caps & MM_SOUND_WIN) ? "WIN" : "");
|
||||||
|
|
||||||
|
wxMessageBox(msg, "Good !", wxOK | wxICON_INFORMATION, NULL);
|
||||||
|
|
||||||
|
// success: wxApp::OnRun() will be called which will enter the main message
|
||||||
|
// loop and the application will run. If we returned FALSE here, the
|
||||||
|
// application would exit immediately.
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxUint8 MMBoardApp::TestMultimediaCaps()
|
||||||
|
{
|
||||||
|
wxSoundStream *dev;
|
||||||
|
wxUint8 caps;
|
||||||
|
|
||||||
|
caps = 0;
|
||||||
|
|
||||||
|
#ifdef __UNIX__
|
||||||
|
// We test the OSS (Open Sound System) support.
|
||||||
|
|
||||||
|
dev = new wxSoundStreamOSS();
|
||||||
|
if (dev->GetError() == wxSOUND_NOERR)
|
||||||
|
caps |= MM_SOUND_OSS;
|
||||||
|
delete dev;
|
||||||
|
|
||||||
|
// We now test the ESD support
|
||||||
|
|
||||||
|
dev = new wxSoundStreamESD();
|
||||||
|
if (dev->GetError() == wxSOUND_NOERR)
|
||||||
|
caps |= MM_SOUND_ESD;
|
||||||
|
delete dev;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __WIN32__
|
||||||
|
// We test the Windows sound support.
|
||||||
|
|
||||||
|
dev = new wxSoundStreamWin();
|
||||||
|
if (dev->GetError() == wxSOUND_NOERR)
|
||||||
|
caps |= MM_SOUND_WIN;
|
||||||
|
delete dev;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return caps;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// main frame
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// frame constructor
|
||||||
|
MMBoardFrame::MMBoardFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
|
||||||
|
: wxFrame((wxFrame *)NULL, -1, title, pos, size)
|
||||||
|
{
|
||||||
|
#ifdef __WXMAC__
|
||||||
|
// we need this in order to allow the about menu relocation, since ABOUT is
|
||||||
|
// not the default id of the about menu
|
||||||
|
wxApp::s_macAboutMenuItemId = MMBoard_About;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// set the frame icon
|
||||||
|
SetIcon(wxICON(mondrian));
|
||||||
|
|
||||||
|
// create a menu bar
|
||||||
|
wxMenu *menuFile = new wxMenu(_T(""), wxMENU_TEAROFF);
|
||||||
|
|
||||||
|
// the "About" item should be in the help menu
|
||||||
|
wxMenu *helpMenu = new wxMenu;
|
||||||
|
helpMenu->Append(MMBoard_About, _T("&About...\tCtrl-A"), _T("Show about dialog"));
|
||||||
|
|
||||||
|
menuFile->Append(MMBoard_Open, _T("&Open\tAlt-O"), _T("Open file"));
|
||||||
|
menuFile->AppendSeparator();
|
||||||
|
menuFile->Append(MMBoard_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
|
||||||
|
|
||||||
|
// now append the freshly created menu to the menu bar...
|
||||||
|
wxMenuBar *menuBar = new wxMenuBar();
|
||||||
|
menuBar->Append(menuFile, _T("&File"));
|
||||||
|
menuBar->Append(helpMenu, _T("&Help"));
|
||||||
|
|
||||||
|
// ... and attach this menu bar to the frame
|
||||||
|
SetMenuBar(menuBar);
|
||||||
|
|
||||||
|
#if wxUSE_STATUSBAR
|
||||||
|
// create a status bar just for fun (by default with 1 pane only)
|
||||||
|
CreateStatusBar(3);
|
||||||
|
SetStatusText(_T("Welcome to wxWindows!"));
|
||||||
|
#endif // wxUSE_STATUSBAR
|
||||||
|
|
||||||
|
// Misc variables
|
||||||
|
m_opened_file = NULL;
|
||||||
|
|
||||||
|
wxPanel *panel = new wxPanel(this, -1);
|
||||||
|
|
||||||
|
// Initialize main slider
|
||||||
|
m_positionSlider = new wxSlider( panel, MMBoard_PositionSlider, 0, 0, 60,
|
||||||
|
wxDefaultPosition, wxSize(300, -1),
|
||||||
|
wxSL_HORIZONTAL | wxSL_AUTOTICKS);
|
||||||
|
m_positionSlider->SetPageSize(60); // 60 secs
|
||||||
|
|
||||||
|
// Initialize info panel
|
||||||
|
wxPanel *infoPanel = new wxPanel( panel, -1);
|
||||||
|
infoPanel->SetBackgroundColour(*wxBLACK);
|
||||||
|
infoPanel->SetForegroundColour(*wxWHITE);
|
||||||
|
|
||||||
|
wxBoxSizer *infoSizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
m_fileType = new wxStaticText(infoPanel, -1, _T(""));
|
||||||
|
wxStaticLine *line = new wxStaticLine(infoPanel, -1);
|
||||||
|
m_infoText = new wxStaticText(infoPanel, -1, "");
|
||||||
|
|
||||||
|
UpdateInfoText();
|
||||||
|
|
||||||
|
infoSizer->Add(m_fileType, 0, wxGROW | wxALL, 1);
|
||||||
|
infoSizer->Add(line, 0, wxGROW | wxCENTRE, 20);
|
||||||
|
infoSizer->Add(m_infoText, 0, wxGROW | wxALL, 1);
|
||||||
|
|
||||||
|
infoPanel->SetSizer(infoSizer);
|
||||||
|
infoPanel->SetAutoLayout(TRUE);
|
||||||
|
|
||||||
|
// Bitmap button panel
|
||||||
|
wxBoxSizer *buttonSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
|
||||||
|
wxBitmap *play_bmp = new wxBitmap(play_back_xpm);
|
||||||
|
wxBitmap *stop_bmp = new wxBitmap(stop_back_xpm);
|
||||||
|
wxBitmap *eject_bmp = new wxBitmap(eject_xpm);
|
||||||
|
wxBitmap *pause_bmp = new wxBitmap(pause_xpm);
|
||||||
|
|
||||||
|
m_playButton = new wxBitmapButton(panel, MMBoard_PlayButton, *play_bmp);
|
||||||
|
m_playButton->Enable(FALSE);
|
||||||
|
m_pauseButton = new wxBitmapButton(panel, MMBoard_PauseButton, *pause_bmp);
|
||||||
|
m_pauseButton->Enable(FALSE);
|
||||||
|
m_stopButton = new wxBitmapButton(panel, MMBoard_StopButton, *stop_bmp);
|
||||||
|
m_stopButton->Enable(FALSE);
|
||||||
|
m_ejectButton = new wxBitmapButton(panel, MMBoard_EjectButton, *eject_bmp);
|
||||||
|
m_ejectButton->Enable(FALSE);
|
||||||
|
|
||||||
|
buttonSizer->Add(m_playButton, 0, wxALL, 2);
|
||||||
|
buttonSizer->Add(m_pauseButton, 0, wxALL, 2);
|
||||||
|
buttonSizer->Add(m_stopButton, 0, wxALL, 2);
|
||||||
|
buttonSizer->Add(m_ejectButton, 0, wxALL, 2);
|
||||||
|
|
||||||
|
// Top sizer
|
||||||
|
wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
sizer->Add(new wxStaticLine(panel, -1), 0, wxGROW | wxCENTRE, 0);
|
||||||
|
sizer->Add(m_positionSlider, 0, wxCENTRE | wxGROW | wxALL, 2);
|
||||||
|
sizer->Add(new wxStaticLine(panel, -1), 0, wxGROW | wxCENTRE, 0);
|
||||||
|
sizer->Add(buttonSizer, 0, wxALL, 0);
|
||||||
|
sizer->Add(new wxStaticLine(panel, -1), 0, wxGROW | wxCENTRE, 0);
|
||||||
|
sizer->Add(infoPanel, 1, wxCENTRE | wxGROW, 0);
|
||||||
|
|
||||||
|
panel->SetSizer(sizer);
|
||||||
|
panel->SetAutoLayout(TRUE);
|
||||||
|
sizer->Fit(this);
|
||||||
|
sizer->SetSizeHints(this);
|
||||||
|
|
||||||
|
// Timer
|
||||||
|
m_refreshTimer = new wxTimer(this, MMBoard_RefreshInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
MMBoardFrame::~MMBoardFrame()
|
||||||
|
{
|
||||||
|
if (m_opened_file)
|
||||||
|
delete m_opened_file;
|
||||||
|
|
||||||
|
delete m_refreshTimer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// event handlers
|
||||||
|
|
||||||
|
void MMBoardFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
// TRUE is to force the frame to close
|
||||||
|
Close(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
wxString msg;
|
||||||
|
msg.Printf( _T("wxWindows Multimedia board v1.0a, wxMMedia v2.0a:\n")
|
||||||
|
_T("an example of the capabilities of the wxWindows multimedia classes.\n")
|
||||||
|
_T("Copyright 1999, 2000, Guilhem Lavaux.\n"));
|
||||||
|
|
||||||
|
wxMessageBox(msg, "About MMBoard", wxOK | wxICON_INFORMATION, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardFrame::OnOpen(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
wxString selected_file;
|
||||||
|
|
||||||
|
// select a file to be opened
|
||||||
|
selected_file = wxLoadFileSelector("multimedia", "*", NULL, this);
|
||||||
|
if (selected_file.IsNull())
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_opened_file = MMBoardManager::Open(selected_file);
|
||||||
|
|
||||||
|
// Change the range values of the slider.
|
||||||
|
MMBoardTime length;
|
||||||
|
|
||||||
|
length = m_opened_file->GetLength();
|
||||||
|
m_positionSlider->SetRange(0, length.hours * 3600 + length.minutes * 60 + length.seconds);
|
||||||
|
|
||||||
|
// Update misc info
|
||||||
|
UpdateMMedInfo();
|
||||||
|
|
||||||
|
SetStatusText(selected_file, 2);
|
||||||
|
|
||||||
|
// Update info text
|
||||||
|
UpdateInfoText();
|
||||||
|
|
||||||
|
// Enable a few buttons
|
||||||
|
m_playButton->Enable(TRUE);
|
||||||
|
m_ejectButton->Enable(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardFrame::UpdateInfoText()
|
||||||
|
{
|
||||||
|
wxString infotext1, infotext2;
|
||||||
|
|
||||||
|
if (m_opened_file) {
|
||||||
|
infotext1 = _T("File type:\n\t");
|
||||||
|
infotext1 += m_opened_file->GetStringType() + _T("\n");
|
||||||
|
|
||||||
|
infotext2 = _T("File informations:\n\n");
|
||||||
|
infotext2 += m_opened_file->GetStringInformation();
|
||||||
|
} else {
|
||||||
|
infotext1 = _T("File type: \n\tNo file opened");
|
||||||
|
infotext2 = _T("File informations:\nNo information\n\n\n\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
m_fileType->SetLabel(infotext1);
|
||||||
|
m_infoText->SetLabel(infotext2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardFrame::UpdateMMedInfo()
|
||||||
|
{
|
||||||
|
wxString temp_string;
|
||||||
|
MMBoardTime current, length;
|
||||||
|
|
||||||
|
if (m_opened_file) {
|
||||||
|
current = m_opened_file->GetPosition();
|
||||||
|
length = m_opened_file->GetLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
// We refresh the status bar
|
||||||
|
temp_string.Printf("%02d:%02d / %02d:%02d", current.hours * 60 + current.minutes,
|
||||||
|
current.seconds, length.hours * 60 + length.minutes, length.seconds);
|
||||||
|
SetStatusText(temp_string, 1);
|
||||||
|
|
||||||
|
// We set the slider position
|
||||||
|
m_positionSlider->SetValue(current.hours * 3600 + current.minutes * 60 + current.seconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Playing management, refreshers, ...
|
||||||
|
|
||||||
|
void MMBoardFrame::OnRefreshInfo(wxEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
UpdateMMedInfo();
|
||||||
|
|
||||||
|
if (m_opened_file->IsStopped()) {
|
||||||
|
m_refreshTimer->Stop();
|
||||||
|
m_playButton->Enable(TRUE);
|
||||||
|
m_stopButton->Enable(FALSE);
|
||||||
|
m_pauseButton->Enable(FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardFrame::OnPlay(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
m_refreshTimer->Start(1000, FALSE);
|
||||||
|
|
||||||
|
m_opened_file->Play();
|
||||||
|
|
||||||
|
m_stopButton->Enable(TRUE);
|
||||||
|
m_pauseButton->Enable(TRUE);
|
||||||
|
m_playButton->Enable(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardFrame::OnStop(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
m_opened_file->Stop();
|
||||||
|
m_refreshTimer->Stop();
|
||||||
|
|
||||||
|
m_stopButton->Enable(FALSE);
|
||||||
|
m_playButton->Enable(TRUE);
|
||||||
|
|
||||||
|
UpdateMMedInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MMBoardFrame::OnPause(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
m_opened_file->Pause();
|
||||||
|
|
||||||
|
m_playButton->Enable(TRUE);
|
||||||
|
m_pauseButton->Enable(FALSE);
|
||||||
|
}
|
57
utils/wxMMedia2/board/mmboard.h
Normal file
57
utils/wxMMedia2/board/mmboard.h
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: mmboard.h
|
||||||
|
// Purpose: Multimedia Board header
|
||||||
|
// Author: Guilhem Lavaux, <guilhem.lavaux@libertysurf.fr>
|
||||||
|
// Modified by:
|
||||||
|
// Created: 13/02/2000
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 2000, Guilhem Lavaux
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _MMBOARD_APP_H_
|
||||||
|
#define _MMBOARD_APP_H_
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma interface "mmboard.cpp"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// for compilers that support precompilation, includes "wx/wx.h"
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
#pragma hdrstop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// for all others, include the necessary headers
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/wx.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
// constants
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define MM_SOUND_OSS 0x01
|
||||||
|
#define MM_SOUND_ESD 0x02
|
||||||
|
#define MM_SOUND_WIN 0x04
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
// Class definitions
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Define a new application type, each program should derive a class from wxApp
|
||||||
|
class MMBoardApp : public wxApp
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxUint8 m_caps;
|
||||||
|
|
||||||
|
// override base class virtuals
|
||||||
|
// ----------------------------
|
||||||
|
|
||||||
|
virtual bool OnInit();
|
||||||
|
|
||||||
|
wxUint8 TestMultimediaCaps();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
BIN
utils/wxMMedia2/board/mondrian.ico
Normal file
BIN
utils/wxMMedia2/board/mondrian.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 766 B |
44
utils/wxMMedia2/board/mondrian.xpm
Normal file
44
utils/wxMMedia2/board/mondrian.xpm
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char *mondrian_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"32 32 6 1",
|
||||||
|
" c Black",
|
||||||
|
". c Blue",
|
||||||
|
"X c #00bf00",
|
||||||
|
"o c Red",
|
||||||
|
"O c Yellow",
|
||||||
|
"+ c Gray100",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" oooooo +++++++++++++++++++++++ ",
|
||||||
|
" oooooo +++++++++++++++++++++++ ",
|
||||||
|
" oooooo +++++++++++++++++++++++ ",
|
||||||
|
" oooooo +++++++++++++++++++++++ ",
|
||||||
|
" oooooo +++++++++++++++++++++++ ",
|
||||||
|
" oooooo +++++++++++++++++++++++ ",
|
||||||
|
" oooooo +++++++++++++++++++++++ ",
|
||||||
|
" ",
|
||||||
|
" ++++++ ++++++++++++++++++ .... ",
|
||||||
|
" ++++++ ++++++++++++++++++ .... ",
|
||||||
|
" ++++++ ++++++++++++++++++ .... ",
|
||||||
|
" ++++++ ++++++++++++++++++ .... ",
|
||||||
|
" ++++++ ++++++++++++++++++ .... ",
|
||||||
|
" ++++++ ++++++++++++++++++ ",
|
||||||
|
" ++++++ ++++++++++++++++++ ++++ ",
|
||||||
|
" ++++++ ++++++++++++++++++ ++++ ",
|
||||||
|
" ++++++ ++++++++++++++++++ ++++ ",
|
||||||
|
" ++++++ ++++++++++++++++++ ++++ ",
|
||||||
|
" ++++++ ++++++++++++++++++ ++++ ",
|
||||||
|
" ++++++ ++++++++++++++++++ ++++ ",
|
||||||
|
" ++++++ ++++++++++++++++++ ++++ ",
|
||||||
|
" ++++++ ++++++++++++++++++ ++++ ",
|
||||||
|
" ++++++ ++++++++++++++++++ ++++ ",
|
||||||
|
" ++++++ ++++ ",
|
||||||
|
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
|
||||||
|
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
|
||||||
|
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
|
||||||
|
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
|
||||||
|
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
|
||||||
|
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
|
||||||
|
" "
|
||||||
|
};
|
23
utils/wxMMedia2/board/pause.xpm
Normal file
23
utils/wxMMedia2/board/pause.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * pause_xpm[] = {
|
||||||
|
"13 15 5 1",
|
||||||
|
" c None",
|
||||||
|
". c #949594",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #8E8E8E",
|
||||||
|
"# c #FFFFFF",
|
||||||
|
"...... ......",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+++@# .+++@#",
|
||||||
|
".+@@@# .+@@@#",
|
||||||
|
".##### .#####"};
|
23
utils/wxMMedia2/board/play.xpm
Normal file
23
utils/wxMMedia2/board/play.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * play_back_xpm[] = {
|
||||||
|
"13 15 5 1",
|
||||||
|
" c None",
|
||||||
|
". c #949594",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #8E8E8E",
|
||||||
|
"# c #FFFFFF",
|
||||||
|
"...... ",
|
||||||
|
".+++++. ",
|
||||||
|
".++++++. ",
|
||||||
|
".+++++++. ",
|
||||||
|
".++++++++. ",
|
||||||
|
".+++++++++. ",
|
||||||
|
".++++++++++. ",
|
||||||
|
".++++++++++@#",
|
||||||
|
".+++++++++@# ",
|
||||||
|
".++++++++@# ",
|
||||||
|
".+++++++@# ",
|
||||||
|
".++++++@# ",
|
||||||
|
".+++++@# ",
|
||||||
|
".+@@@@# ",
|
||||||
|
".##### "};
|
23
utils/wxMMedia2/board/stop.xpm
Normal file
23
utils/wxMMedia2/board/stop.xpm
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * stop_back_xpm[] = {
|
||||||
|
"13 15 5 1",
|
||||||
|
" c None",
|
||||||
|
". c #949594",
|
||||||
|
"+ c #000000",
|
||||||
|
"@ c #8E8E8E",
|
||||||
|
"# c #FFFFFF",
|
||||||
|
".............",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".++++++++++@#",
|
||||||
|
".+@@@@@@@@@@#",
|
||||||
|
".############"};
|
Reference in New Issue
Block a user