[Date Prev][Date Next][Thread Prev][Thread Next][Thread Index]
[XaraXtreme-commits] Commit Complete
Commit by : luke
Repository : xara
Revision : 1713
Date : Wed Aug 23 09:12:04 BST 2006
Changed paths:
M /Trunk/XaraLX/Kernel/Makefile.am
M /Trunk/XaraLX/Kernel/main3.cpp
M /Trunk/XaraLX/Kernel/menuops.cpp
A /Trunk/XaraLX/Kernel/selmedia.cpp
A /Trunk/XaraLX/Kernel/selmedia.h
M /Trunk/XaraLX/wxOil/camelot.cpp
M /Trunk/XaraLX/wxOil/camelot.h
M /Trunk/XaraLX/wxOil/menucmds.cpp
A /Trunk/XaraLX/wxOil/xrc/EN/mediaappdlg.xrc
Add suport for re-playing an example movie file using an external app. (will also fix build issues currently being reported)
Diff:
Index: Trunk/XaraLX/Kernel/Makefile.am
===================================================================
--- Trunk/XaraLX/Kernel/Makefile.am (revision 1712)
+++ Trunk/XaraLX/Kernel/Makefile.am (revision 1713)
@@ -80,7 +80,7 @@
swfexpdc.cpp swftext.cpp pmaskrgn.cpp printctl.cpp prnmkcom.cpp prnmks.cpp \
xsepsops.cpp xarprefs.cpp printing.cpp prntview.cpp psrndrgn.cpp opimgset.cpp \
optsprin.cpp prnprefs.cpp rulers.cpp biasgdgt.cpp biasdlg.cpp prvwmenu.cpp \
- ftfilter.cpp cxftree.cpp strlist.cpp
+ ftfilter.cpp cxftree.cpp strlist.cpp selmedia.cpp
AM_CXXFLAGS = $(XARAFLAGS)
Index: Trunk/XaraLX/Kernel/selmedia.h
===================================================================
--- Trunk/XaraLX/Kernel/selmedia.h (revision 0)
+++ Trunk/XaraLX/Kernel/selmedia.h (revision 1713)
@@ -0,0 +1,170 @@
+// $Id: blobby.h 1282 2006-06-09 09:46:49Z alex $
+/* @@tag:xara-cn@@ DO NOT MODIFY THIS LINE
+================================XARAHEADERSTART===========================
+
+ Xara LX, a vector drawing and manipulation program.
+ Copyright (C) 1993-2006 Xara Group Ltd.
+ Copyright on certain contributions may be held in joint with their
+ respective authors. See AUTHORS file for details.
+
+LICENSE TO USE AND MODIFY SOFTWARE
+----------------------------------
+
+This file is part of Xara LX.
+
+Xara LX is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 2 as published
+by the Free Software Foundation.
+
+Xara LX and its component source files are 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 Xara LX (see the file GPL in the root directory of the
+distribution); if not, write to the Free Software Foundation, Inc., 51
+Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+ADDITIONAL RIGHTS
+-----------------
+
+Conditional upon your continuing compliance with the GNU General Public
+License described above, Xara Group Ltd grants to you certain additional
+rights.
+
+The additional rights are to use, modify, and distribute the software
+together with the wxWidgets library, the wxXtra library, and the "CDraw"
+library and any other such library that any version of Xara LX relased
+by Xara Group Ltd requires in order to compile and execute, including
+the static linking of that library to XaraLX. In the case of the
+"CDraw" library, you may satisfy obligation under the GNU General Public
+License to provide source code by providing a binary copy of the library
+concerned and a copy of the license accompanying it.
+
+Nothing in this section restricts any of the rights you have under
+the GNU General Public License.
+
+
+SCOPE OF LICENSE
+----------------
+
+This license applies to this program (XaraLX) and its constituent source
+files only, and does not necessarily apply to other Xara products which may
+in part share the same code base, and are subject to their own licensing
+terms.
+
+This license does not apply to files in the wxXtra directory, which
+are built into a separate library, and are subject to the wxWindows
+license contained within that directory in the file "WXXTRA-LICENSE".
+
+This license does not apply to the binary libraries (if any) within
+the "libs" directory, which are subject to a separate license contained
+within that directory in the file "LIBS-LICENSE".
+
+
+ARRANGEMENTS FOR CONTRIBUTION OF MODIFICATIONS
+----------------------------------------------
+
+Subject to the terms of the GNU Public License (see above), you are
+free to do whatever you like with your modifications. However, you may
+(at your option) wish contribute them to Xara's source tree. You can
+find details of how to do this at:
+ http://www.xaraxtreme.org/developers/
+
+Prior to contributing your modifications, you will need to complete our
+contributor agreement. This can be found at:
+ http://www.xaraxtreme.org/developers/contribute/
+
+Please note that Xara will not accept modifications which modify any of
+the text between the start and end of this header (marked
+XARAHEADERSTART and XARAHEADEREND).
+
+
+MARKS
+-----
+
+Xara, Xara LX, Xara X, Xara X/Xtreme, Xara Xtreme, the Xtreme and Xara
+designs are registered or unregistered trademarks, design-marks, and/or
+service marks of Xara Group Ltd. All rights in these marks are reserved.
+
+
+ Xara Group Ltd, Gaddesden Place, Hemel Hempstead, HP2 6EX, UK.
+ http://www.xara.com/
+
+=================================XARAHEADEREND============================
+ */
+
+// Declaration of the following classes
+/*
+ BlobbyOp : Demonstration temporary operation which changes the colour of a
+ documents paper.
+ and it's actions
+
+*/
+
+
+
+/*
+ */
+
+#ifndef INC_SELMEDIA
+#define INC_SELMEDIA
+
+//#include "undoop.h" - in camtypes.h [AUTOMATICALLY REMOVED]
+//#include "opdesc.h" - in camtypes.h [AUTOMATICALLY REMOVED]
+//#include "doccolor.h" - in camtypes.h [AUTOMATICALLY REMOVED]
+//#include "ops.h" // Operation class - in camtypes.h [AUTOMATICALLY REMOVED]
+//#include "dlgtypes.h" // The DialogOp types - in camtypes.h [AUTOMATICALLY REMOVED]
+#include "dlgmgr.h" // the dialogue box manager
+//#include "convert.h" - in camtypes.h [AUTOMATICALLY REMOVED]
+//#include "dialogop.h" - in camtypes.h [AUTOMATICALLY REMOVED]
+
+// -----------------------------------------------------------------------------------------
+// SelMediaDlg used to test the Dialog system
+
+#define OPTOKEN_SELMEDIADLG _T("SelMediaDlg")
+
+
+struct SelMediaDlgParam : public OpParam
+{
+CC_DECLARE_DYNAMIC(SelMediaDlgParam)
+
+ typedef std::map<PCTSTR, bool> CMediaAppList;
+ typedef CMediaAppList::iterator CMediaAppListIter;
+
+ CMediaAppList* m_pAppList;
+ String_256 m_strSel;
+ bool m_fValid;
+
+ SelMediaDlgParam() : m_pAppList( NULL ), m_fValid( false )
+ {}
+};
+
+class SelMediaDlg: public DialogOp
+{
+ CC_DECLARE_DYNCREATE( SelMediaDlg )
+
+protected:
+ SelMediaDlgParam* m_pOptions;
+
+ void InitValues();
+
+public:
+ SelMediaDlg();
+ MsgResult Message( Msg* Message );
+
+ void Do(OpDescriptor*); // "Do" function
+ void DoWithParam(OpDescriptor*, OpParam* pParam);
+
+ static BOOL Init();
+ BOOL Create();
+ static OpState GetState(String_256*, OpDescriptor*);
+
+ static const UINT32 IDD;
+ static const CDlgMode Mode;
+};
+
+#endif
+
Index: Trunk/XaraLX/Kernel/selmedia.cpp
===================================================================
--- Trunk/XaraLX/Kernel/selmedia.cpp (revision 0)
+++ Trunk/XaraLX/Kernel/selmedia.cpp (revision 1713)
@@ -0,0 +1,295 @@
+// $Id: blobby.cpp 1282 2006-06-09 09:46:49Z alex $
+/* @@tag:xara-cn@@ DO NOT MODIFY THIS LINE
+================================XARAHEADERSTART===========================
+
+ Xara LX, a vector drawing and manipulation program.
+ Copyright (C) 1993-2006 Xara Group Ltd.
+ Copyright on certain contributions may be held in joint with their
+ respective authors. See AUTHORS file for details.
+
+LICENSE TO USE AND MODIFY SOFTWARE
+----------------------------------
+
+This file is part of Xara LX.
+
+Xara LX is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 2 as published
+by the Free Software Foundation.
+
+Xara LX and its component source files are 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 Xara LX (see the file GPL in the root directory of the
+distribution); if not, write to the Free Software Foundation, Inc., 51
+Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+ADDITIONAL RIGHTS
+-----------------
+
+Conditional upon your continuing compliance with the GNU General Public
+License described above, Xara Group Ltd grants to you certain additional
+rights.
+
+The additional rights are to use, modify, and distribute the software
+together with the wxWidgets library, the wxXtra library, and the "CDraw"
+library and any other such library that any version of Xara LX relased
+by Xara Group Ltd requires in order to compile and execute, including
+the static linking of that library to XaraLX. In the case of the
+"CDraw" library, you may satisfy obligation under the GNU General Public
+License to provide source code by providing a binary copy of the library
+concerned and a copy of the license accompanying it.
+
+Nothing in this section restricts any of the rights you have under
+the GNU General Public License.
+
+
+SCOPE OF LICENSE
+----------------
+
+This license applies to this program (XaraLX) and its constituent source
+files only, and does not necessarily apply to other Xara products which may
+in part share the same code base, and are subject to their own licensing
+terms.
+
+This license does not apply to files in the wxXtra directory, which
+are built into a separate library, and are subject to the wxWindows
+license contained within that directory in the file "WXXTRA-LICENSE".
+
+This license does not apply to the binary libraries (if any) within
+the "libs" directory, which are subject to a separate license contained
+within that directory in the file "LIBS-LICENSE".
+
+
+ARRANGEMENTS FOR CONTRIBUTION OF MODIFICATIONS
+----------------------------------------------
+
+Subject to the terms of the GNU Public License (see above), you are
+free to do whatever you like with your modifications. However, you may
+(at your option) wish contribute them to Xara's source tree. You can
+find details of how to do this at:
+ http://www.xaraxtreme.org/developers/
+
+Prior to contributing your modifications, you will need to complete our
+contributor agreement. This can be found at:
+ http://www.xaraxtreme.org/developers/contribute/
+
+Please note that Xara will not accept modifications which modify any of
+the text between the start and end of this header (marked
+XARAHEADERSTART and XARAHEADEREND).
+
+
+MARKS
+-----
+
+Xara, Xara LX, Xara X, Xara X/Xtreme, Xara Xtreme, the Xtreme and Xara
+designs are registered or unregistered trademarks, design-marks, and/or
+service marks of Xara Group Ltd. All rights in these marks are reserved.
+
+
+ Xara Group Ltd, Gaddesden Place, Hemel Hempstead, HP2 6EX, UK.
+ http://www.xara.com/
+
+=================================XARAHEADEREND============================
+ */
+
+// Implemetation of the following classes
+/*
+ OperationHistory : The operation history used to store undoable operations
+ OpUndo : The undo operation
+ OpRedo : The redo operation
+
+ BlobbyOp : Demonstration temporary operation which changes the colour of a
+ documents paper.
+
+ UndoColAction : BlobbyOp undo action
+ RedoColAction : BlobbyOp redo action
+*/
+
+/*
+*/
+#include "camtypes.h"
+//#include "ops.h" - in camtypes.h [AUTOMATICALLY REMOVED]
+
+DECLARE_SOURCE("$Revision: 1282 $");
+
+#include "selmedia.h"
+#include "ophist.h"
+#include "lineattr.h"
+//#include "resource.h"
+#include "page.h"
+//#include "docview.h" - in camtypes.h [AUTOMATICALLY REMOVED]
+//#include "document.h" - in camtypes.h [AUTOMATICALLY REMOVED]
+//#include "mario.h"
+//#include "simon.h"
+//#include "docview.h" - in camtypes.h [AUTOMATICALLY REMOVED]
+//#include "blobtab.h"
+#include <stdlib.h>
+
+#include "bfxatom.h"
+#include "tracergn.h"
+#include "bubbleid.h"
+
+CC_IMPLEMENT_DYNCREATE(SelMediaDlg, DialogOp)
+CC_IMPLEMENT_DYNAMIC(SelMediaDlgParam, OpParam)
+
+#define new CAM_DEBUG_NEW
+
+//------------------------------------------------------------------------------------------
+// Demo Dialog
+
+const CDlgMode SelMediaDlg::Mode = MODAL;// Mode of the dialog
+
+const UINT32 SelMediaDlg::IDD = _R(IDD_SEL_MEDIA_APP_DIALOG);
+
+SelMediaDlg::SelMediaDlg(): DialogOp(SelMediaDlg::IDD, SelMediaDlg::Mode), m_pOptions( NULL )
+{
+}
+
+// -----------------------------------------------------------------------------------------
+
+void SelMediaDlg::InitValues()
+{
+ bool fItemSel = false;
+
+ // Add possible replay apps
+ SelMediaDlgParam::CMediaAppListIter end( m_pOptions->m_pAppList->end() );
+ SelMediaDlgParam::CMediaAppListIter iter( m_pOptions->m_pAppList->begin() );
+ for( INT32 ord = 0; iter != end; ++iter, ++ord )
+ {
+ SetStringGadgetValue( _R(IDC_LIST1), String_256(iter->first), FALSE, ord );
+
+ if( m_pOptions->m_strSel != _T("") )
+ {
+ if( m_pOptions->m_strSel == iter->first )
+ {
+ fItemSel = true;
+ SetSelectedValueIndex( _R(IDC_LIST1), ord );
+ }
+ }
+ else
+ if( iter->second )
+ {
+ fItemSel = true;
+ SetSelectedValueIndex( _R(IDC_LIST1), ord );
+ }
+ }
+
+ if( !fItemSel )
+ SetSelectedValueIndex( _R(IDC_LIST1), 0 );
+}
+
+// -----------------------------------------------------------------------------------------
+
+MsgResult SelMediaDlg::Message( Msg* Message)
+{
+ if (IS_OUR_DIALOG_MSG(Message))
+ {
+ DialogMsg* Msg = (DialogMsg*)Message;
+ // Handle ok button
+ if ((Msg->DlgMsg == DIM_COMMIT) || (Msg->DlgMsg == DIM_CANCEL))
+ {
+ m_pOptions->m_strSel = GetStringGadgetValue( _R(IDC_LIST1) );
+ TRACEUSER( "jlh92", _T("Return sel is %s
"), PCTSTR(m_pOptions->m_strSel) );
+
+ m_pOptions->m_fValid = ( DIM_COMMIT == Msg->DlgMsg );
+
+ Close(); // Hide the dialog
+ End();
+ }
+ else
+ if( DIM_SOFT_COMMIT == Msg->DlgMsg ||
+ DIM_CREATE == Msg->DlgMsg )
+ InitValues();
+
+ return (DLG_EAT_IF_HUNGRY(Msg));
+ }
+ return OK;
+}
+
+// -----------------------------------------------------------------------------------------
+
+OpState SelMediaDlg::GetState(String_256*, OpDescriptor*)
+{
+ OpState OpSt;
+ return(OpSt);
+}
+
+// -----------------------------------------------------------------------------------------
+
+BOOL SelMediaDlg::Init()
+{
+ return (RegisterOpDescriptor(
+ 0,
+ _R(IDS_SELMEDIADLG),
+ CC_RUNTIME_CLASS(SelMediaDlg),
+ OPTOKEN_SELMEDIADLG,
+ SelMediaDlg::GetState,
+ 0, /* help ID */
+ _R(IDBBL_SELMEDIADLG),
+ 0 /* bitmap ID */
+ ));
+}
+
+// -----------------------------------------------------------------------------------------
+
+BOOL SelMediaDlg::Create()
+{
+ if (DialogOp::Create())
+ {
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+// -----------------------------------------------------------------------------------------
+
+void SelMediaDlg::Do(OpDescriptor*)
+{
+ Create();
+ Open();
+}
+
+/******************************************************************************************
+
+> void BmpPrefsDlg::DoWithParam(OpDescriptor*)
+
+ Author: Luke_hart (Xara Group Ltd) <LukeH@xxxxxxxx>
+ Created: 23/08/94
+ Inputs: -
+ Outputs: -
+ Returns: -
+ Purpose: Creates then opens the dialog in response to a request from the user and
+ allows values to be passed in and returned to the caller via the
+ SelMediaDlgParam class.
+ Errors: -
+ SeeAlso: -
+
+******************************************************************************************/
+
+void SelMediaDlg::DoWithParam(OpDescriptor*, OpParam* pParam)
+{
+ if (pParam == NULL)
+ {
+ ERROR3("SelMediaDlg::DoWithParam - NULL Args");
+ return;
+ }
+
+ // Use the OpParam that has been passed in to us
+ ERROR3IF( !pParam->IS_KIND_OF(SelMediaDlgParam), "pParam isn't" );
+ m_pOptions = (SelMediaDlgParam*) pParam;
+
+ // Force the dialog box to be created, as it is modal it will be opened via a message
+ BOOL fOk = Create();
+ if( !fOk )
+ {
+ // Could not create the dialog box so call inform error
+ InformError();
+ End(); // End the operation
+ }
+}
+
Index: Trunk/XaraLX/Kernel/menuops.cpp
===================================================================
--- Trunk/XaraLX/Kernel/menuops.cpp (revision 1712)
+++ Trunk/XaraLX/Kernel/menuops.cpp (revision 1713)
@@ -1282,14 +1282,6 @@
WebsterDemos();
#endif //webster
}
- else if (WhichOp->Token == String(OPTOKEN_HELPDEMOS_NATIVE))
- {
- #ifndef WEBSTER
- HelpDemosNativeAction();
- #else // webster
- WebsterDemos();
- #endif //webster
- }
else if (WhichOp->Token == String(OPTOKEN_HELPTECHSUPPORT))
HelpTechSupportAction();
//Webster_Ranbir_12 \96
@@ -1414,7 +1406,6 @@
ERRORIF(!IndexOp, _R(IDE_NOMORE_MEMORY), FALSE);
-#if defined(ENABLE_MOVIES)
// REGOP(HELP, DEMOS, HelpOps);
OpDescriptor* DemosOp = new OpDescriptor(
0,
@@ -1428,21 +1419,6 @@
ERRORIF(!DemosOp, _R(IDE_NOMORE_MEMORY), FALSE);
-
- // REGOP(HELP, DEMOS, HelpOps);
- OpDescriptor* DemosNativeOp = new OpDescriptor(
- 0,
- _R(IDS_HELP_MOVIES_NATIVE),
- CC_RUNTIME_CLASS(HelpOps),
- OPTOKEN_HELPDEMOS_NATIVE,
- HelpOps::GetState,
- HID_HELP_DEMOS,
- _R(IDBBL_HELPDEMOSOP),
- 0 );
-
- ERRORIF(!DemosNativeOp, _R(IDE_NOMORE_MEMORY), FALSE);
-#endif
-
//Webster_Ranbir_12 \96
#ifdef INC_WEB_MENU_ITEMS
Index: Trunk/XaraLX/Kernel/main3.cpp
===================================================================
--- Trunk/XaraLX/Kernel/main3.cpp (revision 1712)
+++ Trunk/XaraLX/Kernel/main3.cpp (revision 1713)
@@ -170,6 +170,7 @@
//#include "xpehost.h"
#include "editsel.h"
#include "camview.h"
+#include "selmedia.h"
// Normal exe's and standalones
BOOL InitPostTools2()
@@ -302,6 +303,7 @@
InitRegistry() && // register us with the shell etc
InitAppState() && // get workspace prefs
#endif
+ SelMediaDlg::Init() &&
TRUE
);
}
Index: Trunk/XaraLX/wxOil/menucmds.cpp
===================================================================
--- Trunk/XaraLX/wxOil/menucmds.cpp (revision 1712)
+++ Trunk/XaraLX/wxOil/menucmds.cpp (revision 1713)
@@ -794,126 +794,9 @@
HelpUsingGalleries();
}
-#if defined(ENABLE_MOVIES)
-
-#if wxUSE_MEDIACTRL
-enum
-{
- wxID_MEDIACTRL = wxID_HIGHEST + 1,
- wxID_CLOSE_BUTTON
-};
-
-class CReplayWnd : public wxDialog
-{
-private:
- wxMediaCtrl* m_pMediaCtrl;
- wxSizer* m_pSizer;
-
-public:
- CReplayWnd( wxWindow *pWnd );
- virtual ~CReplayWnd()
- {
- TRACEUSER( "jlh92", _T("Destruct CRW
") );
- }
-
- void Load( const wxString& str )
- {
- TRACEUSER( "jlh92", _T("Load Video
") );
- m_pMediaCtrl->Load( str );
-
- m_pSizer->Fit( this );
- m_pSizer->SetSizeHints( this );
- }
-
- void OnClose( wxCloseEvent& event );
- void OnCreate( wxWindowCreateEvent& event );
- void OnDestroy( wxWindowDestroyEvent& event );
-
- void OnCloseButton( wxCommandEvent& event );
-
- void OnLoaded( wxMediaEvent& event );
-
- DECLARE_CLASS( CReplayWnd )
- DECLARE_EVENT_TABLE();
-};
-
-IMPLEMENT_CLASS( CReplayWnd, wxDialog )
-BEGIN_EVENT_TABLE( CReplayWnd, wxDialog )
-// EVT_CLOSE( CReplayWnd::OnClose )
-// EVT_WINDOW_DESTROY( CReplayWnd::OnDestroy )
-// EVT_WINDOW_CREATE( CReplayWnd::OnCreate )
-
- EVT_BUTTON( wxID_CLOSE_BUTTON, CReplayWnd::OnCloseButton )
-
- EVT_MEDIA_LOADED( wxID_MEDIACTRL, CReplayWnd::OnLoaded )
-END_EVENT_TABLE()
-
-CReplayWnd::CReplayWnd( wxWindow *pWnd ) : wxDialog( pWnd, wxID_ANY, _T("Movie Replay"), wxDefaultPosition,
- wxDefaultSize, wxSYSTEM_MENU | wxCAPTION )
-{
- m_pSizer = new wxBoxSizer( wxVERTICAL );
-
- m_pMediaCtrl = new wxMediaCtrl;
- m_pMediaCtrl->Create(this, wxID_MEDIACTRL, wxEmptyString,
- wxDefaultPosition, wxDefaultSize, 0 );
- m_pSizer->Add( m_pMediaCtrl, 0, wxALL, 0 );
-
- {
- wxSizer* pHSizer = new wxBoxSizer( wxHORIZONTAL );
-
- wxButton* pButton = new wxButton( this, wxID_CLOSE_BUTTON, _T("Close") );
- pHSizer->Add( pButton, 0, wxLEFT | wxBOTTOM | wxTOP, 5 );
-
- wxSlider* pSlider = new wxSlider( this, wxID_ANY, 127, 0, 255 );
- pHSizer->Add( pSlider, 1, wxEXPAND | wxALL, 5 );
-
- m_pSizer->Add( pHSizer );
- }
-
- SetSizer( m_pSizer );
-}
-
-void CReplayWnd::OnCreate( wxWindowCreateEvent& )
-{
- TRACEUSER( "jlh92", _T("Create video
") );
-}
-
-void CReplayWnd::OnDestroy( wxWindowDestroyEvent& )
-{
- TRACEUSER( "jlh92", _T("Destroy video
") );
- m_pMediaCtrl->Stop();
-}
-
-void CReplayWnd::OnClose( wxCloseEvent& )
-{
- TRACEUSER( "jlh92", _T("Close video
") );
- m_pMediaCtrl->Stop();
-}
-
-void CReplayWnd::OnLoaded( wxMediaEvent& )
-{
- TRACEUSER( "jlh92", _T("Play Video
") );
- m_pMediaCtrl->Play();
-}
-
-void CReplayWnd::OnCloseButton( wxCommandEvent& )
-{
- TRACEUSER( "jlh92", _T("Close button
") );
-
- if( NULL != m_pMediaCtrl )
- {
- m_pMediaCtrl->Stop();
- delete m_pMediaCtrl;
- m_pMediaCtrl = NULL;
- }
-
- Close();
-}
-#endif
-
static void StartMovie( const wxString &strFile )
{
- wxString strDataPath( CCamApp::GetResourceDirectory() );
+ wxString strDataPath( (wxChar*)CCamApp::GetResourceDirectory() );
if( !wxDir::Exists( strDataPath ) )
{
#if defined(_DEBUG)
@@ -924,9 +807,13 @@
wxString strVideoPath( strDataPath );
strVideoPath += _("/video");
-
- wxString strCommand( _T("mplayer -slave \"") );
+
+ wxString strCommand; // ( _T("mplayer -slave \"") );
strCommand += strVideoPath + _T("/") + strFile + _T("\"");
+
+#if true
+ CCamApp::LaunchMediaApp( strCommand );
+#else
long /*TYPENOTE: CORRECT*/ lResult = wxExecute( strCommand, wxEXEC_SYNC, NULL );
if( 255 == lResult )
{
@@ -937,33 +824,9 @@
if( 255 == lResult )
InformWarning( _R(IDS_MPLAYER_MISSING), _R(IDS_OK) );
}
-}
-
-static void StartMovieNative( const wxString &strFile )
-{
-#if wxUSE_MEDIACTRL
- wxString strDataPath( CCamApp::GetResourceDirectory() );
- if( !wxDir::Exists( strDataPath ) )
- {
-#if defined(_DEBUG)
- // We'll try default location under debug to make life easier
- strDataPath = _T("/usr/share");
#endif
- }
-
- wxString strVideoPath( strDataPath );
- strVideoPath += _("/video");
-
- CReplayWnd* pWnd = new CReplayWnd( CCamFrame::GetMainFrame() );
- pWnd->Load( strVideoPath + _T("/") + strFile );
-
- pWnd->Show( true );
-#else
- InformWarning( _R(IDS_NO_MEDIACTRL), _R(IDS_OK) );
-#endif
}
-
void HelpDemosAction()
{
StartMovie( _T("Part_1_master_inc_audio_smaller_q35_fr15_hi.ogm") );
@@ -972,26 +835,6 @@
}
-void HelpDemosNativeAction()
-{
- StartMovieNative( _T("Part_1_master_inc_audio_smaller_q35_fr15_hi.ogm") );
-
-// HelpOnlineDemos();
-}
-
-#else
-
-void HelpDemosAction()
-{
-}
-
-
-void HelpDemosNativeAction()
-{
-}
-
-#endif
-
void HelpTechSupportAction()
{
HelpTechnicalSupport();
Index: Trunk/XaraLX/wxOil/camelot.h
===================================================================
--- Trunk/XaraLX/wxOil/camelot.h (revision 1712)
+++ Trunk/XaraLX/wxOil/camelot.h (revision 1713)
@@ -154,6 +154,8 @@
static BOOL LaunchWebBrowser(const wxString& strUrl);
+ static bool LaunchMediaApp( const wxString& strUrl );
+
// Get the path to the root of the resource directory structure
static StringBase& GetResourceDirectory();
@@ -174,6 +176,8 @@
static String_256 m_strResourceDirPath; // External resources (i.e. help files)
static String_256 m_strResourceDirPathOverride; // Version in preference file
+ static String_256 m_strMediaApplication; // The media replay application the user chose
+
wxTimer m_Timer;
wxSingleInstanceChecker * m_pSingleInstanceChecker;
Index: Trunk/XaraLX/wxOil/camelot.cpp
===================================================================
--- Trunk/XaraLX/wxOil/camelot.cpp (revision 1712)
+++ Trunk/XaraLX/wxOil/camelot.cpp (revision 1713)
@@ -236,6 +236,7 @@
wxString CCamApp::m_strResourcePath;
String_256 CCamApp::m_strResourceDirPath;
String_256 CCamApp::m_strResourceDirPathOverride;
+String_256 CCamApp::m_strMediaApplication;
/***************************************************************************************************************************/
@@ -301,6 +302,18 @@
}
#endif
+ if ( event.GetEventType() == wxEVT_KILL_FOCUS )
+ {
+ wxFocusEvent& FocusEvent = (wxFocusEvent&)event;
+ TRACEUSER( "jlh92", _T("CCamApp::FilterEvent kill focus to %016x from 0x%016x"), FocusEvent.GetWindow(),
+ FocusEvent.GetEventObject() );
+
+ // When we're given a null focus window it means the whole app
+ // is losing focus, so we need to result the cursor shape.
+ if( NULL == FocusEvent.GetWindow() )
+ CursorStack::GSetActive();
+ }
+
if (( event.GetEventType() == wxEVT_CREATE )
&& pEventObject
&& (pEventObject->IsKindOf(CLASSINFO(wxTopLevelWindow)))
@@ -830,6 +843,9 @@
}
TRACEUSER( "luke", _T("ResDir = %s
"), PCTSTR(m_strResourceDirPath) );
+ // Get the media replay application setting
+ Camelot.DeclarePref( NULL, TEXT("MediaApplication"), &m_strMediaApplication );
+
TRACET(_T("CCamApp::Calling InitKernel"));
// then initialise the kernel (and almost everything else)
if( !InitKernel() )
@@ -2711,3 +2727,148 @@
}
wxCATCH_ALL( wxTheApp->OnUnhandledException(); return -1; )
}
+
+class CMediaReplayDetect
+{
+private:
+ wxArrayString m_astrPathElement;
+
+public:
+ CMediaReplayDetect()
+ {
+ wxString strPath;
+ wxGetEnv( _T("PATH"), &strPath );
+
+ while( strPath != _T("") )
+ {
+ int ordSep = strPath.Find( _T(':') );
+ if( -1 == ordSep )
+ {
+ if( strPath.Len() > 0 )
+ m_astrPathElement.Add( strPath );
+ break;
+ }
+
+ m_astrPathElement.Add( strPath.Mid( 0, ordSep ) );
+ TRACEUSER( "jlh92", _T("Add ele %s
"), PCTSTR(strPath.Mid( 0, ordSep )) );
+ strPath = strPath.Mid( ordSep + 1 );
+ }
+ }
+
+ bool IsAppPresent( const wxString& strApp )
+ {
+ size_t cElement = m_astrPathElement.GetCount();
+ for( size_t ord = 0; ord < cElement; ++ord )
+ {
+ wxString strFullPath = m_astrPathElement.Item( ord );
+ strFullPath += _T("/");
+ strFullPath += strApp;
+
+ if( wxFile::Exists( strFullPath ) )
+ return true;
+ }
+
+ return false;
+ }
+};
+
+bool CCamApp::LaunchMediaApp( const wxString& strUrl )
+{
+ CMediaReplayDetect Detect;
+ static PCTSTR apszApps[] = { _T("mplayer"),
+ _T("gmplayer"),
+ PCTSTR(1), // Everyting above this line supports mplayer control protocol
+ _T("xine"),
+ _T("totem"),
+ _T("xfmedia"),
+ _T("codeine"),
+ NULL };
+
+ // Move array into a helpful structure
+ SelMediaDlgParam::CMediaAppList mapMediaApp;
+ bool fControlable = true;
+ UINT32 ord = 0;
+ while( NULL != apszApps[ord] )
+ {
+ // Skip controlable marker
+ if( PCTSTR(1) == apszApps[ord] )
+ {
+ ++ord;
+ fControlable = false;
+ continue;
+ }
+
+ mapMediaApp.insert( std::make_pair( apszApps[ord], fControlable ) );
+ ++ord;
+ }
+
+ // First we see if the replay app. is present
+ if( !Detect.IsAppPresent( m_strMediaApplication ) )
+ {
+ // Remove any non-present apps
+ SelMediaDlgParam::CMediaAppListIter end( mapMediaApp.end() );
+ SelMediaDlgParam::CMediaAppListIter iter( mapMediaApp.begin() );
+ for( ; iter != end; ++iter )
+ {
+ if( !Detect.IsAppPresent( iter->first ) )
+ {
+ mapMediaApp.erase( iter->first );
+ TRACEUSER( "jlh92", _T("%s is not present"), iter->first );
+ }
+ }
+
+ // Setup param and open replay app selection dialog
+ SelMediaDlgParam Param;
+ Param.m_pAppList = &mapMediaApp;
+ OpDescriptor* pOpDesc = OpDescriptor::FindOpDescriptor( CC_RUNTIME_CLASS(SelMediaDlg) );
+ if( NULL != pOpDesc )
+ {
+ pOpDesc->Invoke( &Param );
+
+ if( Param.m_fValid )
+ m_strMediaApplication = Param.m_strSel;
+ }
+
+ // User canceled, bomb out
+ if( !Param.m_fValid )
+ return true;
+ }
+ else
+ {
+ // Pre-selected app, check to see if we can control it
+ SelMediaDlgParam::CMediaAppListIter iter = mapMediaApp.find( apszApps[ord] );
+ if( mapMediaApp.end() == iter )
+ fControlable = false;
+ else
+ fControlable = iter->second;
+ }
+
+ // Build the command line and execute it
+ wxString strCommand;
+ strCommand = PCTSTR(m_strMediaApplication);
+ strCommand.Append( _T(" \"") );
+ strCommand.Append( strUrl );
+ strCommand.Append( _T("\"") );
+
+ CamLaunchProcess* plp = new CamLaunchProcess();
+ if (plp==NULL)
+ return false;
+
+ bool ok = FALSE != plp->Execute( strCommand );
+ if (ok)
+ {
+ // Let this process run free!
+ plp->Disconnect();
+// delete plp; // This object will allegedly delete itself when the process dies
+ }
+ else
+ {
+ // Make sure we don't leave any zombie processes lying around
+ wxKillError e = plp->Terminate(); // This should result in a call to OnTerminate
+ TRACEUSER("Phil", _T("Terminating bad process returned %d
"), e);
+// delete plp; // This object will allegedly delete itself when the process dies
+ }
+
+ return ok;
+}
+
Index: Trunk/XaraLX/wxOil/xrc/EN/mediaappdlg.xrc
===================================================================
--- Trunk/XaraLX/wxOil/xrc/EN/mediaappdlg.xrc (revision 0)
+++ Trunk/XaraLX/wxOil/xrc/EN/mediaappdlg.xrc (revision 1713)
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="ANSI_X3.4-1968"?>
+<resource version="2.3.0.1" xmlns="http://www.wxwidgets.org/wxxrc">
+ <object class="wxDialog" name="IDD_SEL_MEDIA_APP_DIALOG">
+ <style>wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU</style>
+ <exstyle>wxWS_EX_BLOCK_EVENTS</exstyle>
+ <title>Select Media Replay Application</title>
+ <centered>1</centered>
+ <object class="wxBoxSizer">
+ <orient>wxHORIZONTAL</orient>
+ <object class="sizeritem">
+ <flag>wxGROW|wxALL</flag>
+ <border>5</border>
+ <option>1</option>
+ <object class="wxListBox" name="IDC_LIST1">
+ <style>wxLB_SINGLE</style>
+ </object>
+ </object>
+ <object class="sizeritem">
+ <flag>wxALIGN_TOP</flag>
+ <border>5</border>
+ <object class="wxBoxSizer">
+ <orient>wxVERTICAL</orient>
+ <object class="sizeritem">
+ <flag>wxALIGN_CENTER_HORIZONTAL|wxALL</flag>
+ <border>5</border>
+ <object class="wxButton" name="wxID_OK">
+ <label>&OK</label>
+ </object>
+ </object>
+ <object class="sizeritem">
+ <flag>wxALIGN_CENTER_HORIZONTAL|wxALL</flag>
+ <border>5</border>
+ <object class="wxButton" name="wxID_CANCEL">
+ <label>&Cancel</label>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="wxDialog" name="IDD_REPLAY_DLG" subclass="Dialog">
+ <style>wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX</style>
+ <exstyle>wxWS_EX_BLOCK_EVENTS</exstyle>
+ <size>400,300</size>
+ <title>Dialog</title>
+ <centered>1</centered>
+ <object class="wxBoxSizer">
+ <orient>wxVERTICAL</orient>
+ <object class="sizeritem">
+ <flag>wxGROW|wxALL</flag>
+ <border>5</border>
+ <object class="wxSlider" name="ID_SLIDER1">
+ <style>wxSL_HORIZONTAL</style>
+ <value>0</value>
+ <min>0</min>
+ <max>100</max>
+ </object>
+ </object>
+ <object class="sizeritem">
+ <flag>wxALIGN_CENTER_HORIZONTAL</flag>
+ <border>5</border>
+ <object class="wxBoxSizer">
+ <orient>wxHORIZONTAL</orient>
+ <object class="sizeritem">
+ <flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
+ <border>5</border>
+ <object class="wxButton" name="ID_BUTTON3">
+ <label>|<<</label>
+ </object>
+ </object>
+ <object class="sizeritem">
+ <flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
+ <border>5</border>
+ <object class="wxButton" name="ID_BUTTON1">
+ <label>Pause</label>
+ </object>
+ </object>
+ <object class="sizeritem">
+ <flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
+ <border>5</border>
+ <object class="wxButton" name="ID_BUTTON2">
+ <label>Stop</label>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</resource>
Xara