2006-01-16 22:02:54 +01:00
// Copyright (c) 2005, Rodrigo Braz Monteiro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of the Aegisub Group nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// -----------------------------------------------------------------------------
//
// AEGISUB
//
// Website: http://aegisub.cellosoft.com
// Contact: mailto:zeratul@cellosoft.com
//
///////////////////
// Include headers
2006-12-23 04:55:00 +01:00
# include "setup.h"
2006-01-16 22:02:54 +01:00
# include <wx/wxprec.h>
# include <wx/mimetype.h>
# include <wx/filename.h>
# include <wx/tglbtn.h>
2006-01-28 20:48:35 +01:00
# include <wx/rawbmp.h>
2006-01-16 22:02:54 +01:00
# include "subs_grid.h"
# include "frame_main.h"
# include "video_display.h"
# include "video_slider.h"
# include "video_zoom.h"
# include "video_box.h"
# include "ass_file.h"
2006-12-28 21:56:28 +01:00
# include "ass_dialogue.h"
2006-01-16 22:02:54 +01:00
# include "dialog_style_manager.h"
# include "dialog_translation.h"
# include "dialog_jumpto.h"
# include "dialog_shift_times.h"
# include "dialog_search_replace.h"
# include "vfr.h"
# include "subs_edit_box.h"
# include "options.h"
# include "dialog_properties.h"
2006-07-01 04:27:37 +02:00
# include "dialog_attachments.h"
2006-01-16 22:02:54 +01:00
# include "main.h"
2006-12-24 22:52:54 +01:00
# include "dialog_fonts_collector.h"
# include "dialog_about.h"
2006-01-16 22:02:54 +01:00
# include "dialog_export.h"
# include "audio_box.h"
# include "dialog_selection.h"
# include "dialog_styling_assistant.h"
# include "dialog_resample.h"
# include "audio_display.h"
# include "toggle_bitmap.h"
# include "dialog_hotkeys.h"
# include "dialog_timing_processor.h"
2006-12-23 04:55:00 +01:00
# if USE_FEXTRACKER == 1
2006-03-05 20:14:42 +01:00
# include "../FexTrackerSource/FexTracker.h"
# include "../FexTrackerSource/FexTrackingFeature.h"
# include "../FexTrackerSource/FexMovement.h"
2006-01-29 21:48:05 +01:00
# include "dialog_fextracker.h"
2006-02-26 03:49:38 +01:00
# endif
# include "dialog_progress.h"
2006-06-19 04:51:06 +02:00
# include "dialog_options.h"
2006-05-16 01:44:53 +02:00
# include "utils.h"
2006-12-28 23:31:33 +01:00
# include "auto4_base.h"
# include "dialog_automation.h"
2006-01-16 22:02:54 +01:00
////////////////////
// Menu event table
BEGIN_EVENT_TABLE ( FrameMain , wxFrame )
EVT_TIMER ( AutoSave_Timer , FrameMain : : OnAutoSave )
EVT_TIMER ( StatusClear_Timer , FrameMain : : OnStatusClear )
EVT_BUTTON ( Video_Play , FrameMain : : OnVideoPlay )
EVT_BUTTON ( Video_Play_Line , FrameMain : : OnVideoPlayLine )
EVT_BUTTON ( Video_Stop , FrameMain : : OnVideoStop )
EVT_TOGGLEBUTTON ( Video_Auto_Scroll , FrameMain : : OnVideoToggleScroll )
2006-01-29 16:08:51 +01:00
2006-12-23 04:55:00 +01:00
# if USE_FEXTRACKER == 1
2006-01-29 16:08:51 +01:00
EVT_BUTTON ( Video_Tracker_Menu , FrameMain : : OnVideoTrackerMenu )
EVT_MENU ( Video_Track_Points , FrameMain : : OnVideoTrackPoints )
EVT_MENU ( Video_Track_Point_Add , FrameMain : : OnVideoTrackPointAdd )
EVT_MENU ( Video_Track_Point_Del , FrameMain : : OnVideoTrackPointDel )
EVT_MENU ( Video_Track_Movement , FrameMain : : OnVideoTrackMovement )
2006-01-29 21:48:05 +01:00
EVT_BUTTON ( Video_Tracker_Menu2 , FrameMain : : OnVideoTrackerMenu2 )
EVT_MENU ( Video_Track_Movement_MoveAll , FrameMain : : OnVideoTrackMovementMoveAll )
EVT_MENU ( Video_Track_Movement_MoveOne , FrameMain : : OnVideoTrackMovementMoveOne )
2006-02-22 20:25:18 +01:00
EVT_MENU ( Video_Track_Movement_MoveBefore , FrameMain : : OnVideoTrackMovementMoveBefore )
EVT_MENU ( Video_Track_Movement_MoveAfter , FrameMain : : OnVideoTrackMovementMoveAfter )
2006-01-29 16:08:51 +01:00
EVT_MENU ( Video_Track_Split_Line , FrameMain : : OnVideoTrackSplitLine )
2006-03-03 20:00:47 +01:00
EVT_MENU ( Video_Track_Link_File , FrameMain : : OnVideoTrackLinkFile )
EVT_MENU ( Video_Track_Movement_Empty , FrameMain : : OnVideoTrackMovementEmpty )
2006-02-26 03:49:38 +01:00
# endif
2006-01-16 22:02:54 +01:00
EVT_CLOSE ( FrameMain : : OnCloseWindow )
EVT_KEY_DOWN ( FrameMain : : OnKeyDown )
EVT_MENU_OPEN ( FrameMain : : OnMenuOpen )
2006-07-01 07:34:39 +02:00
EVT_MENU_RANGE ( Menu_File_Recent , Menu_File_Recent + 99 , FrameMain : : OnOpenRecentSubs )
EVT_MENU_RANGE ( Menu_Video_Recent , Menu_Video_Recent + 99 , FrameMain : : OnOpenRecentVideo )
EVT_MENU_RANGE ( Menu_Audio_Recent , Menu_Audio_Recent + 99 , FrameMain : : OnOpenRecentAudio )
EVT_MENU_RANGE ( Menu_Timecodes_Recent , Menu_Timecodes_Recent + 99 , FrameMain : : OnOpenRecentTimecodes )
2006-12-18 18:18:14 +01:00
EVT_MENU_RANGE ( Menu_Keyframes_Recent , Menu_Keyframes_Recent + 99 , FrameMain : : OnOpenRecentKeyframes )
2006-12-28 23:31:33 +01:00
EVT_MENU_RANGE ( Menu_Automation_Macro , Menu_Automation_Macro + 99 , FrameMain : : OnAutomationMacro )
2006-01-16 22:02:54 +01:00
2006-12-27 21:16:47 +01:00
EVT_MENU_RANGE ( MENU_GRID_START + 1 , MENU_GRID_END - 1 , FrameMain : : OnGridEvent )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_File_Exit , FrameMain : : OnExit )
EVT_MENU ( Menu_File_Open_Video , FrameMain : : OnOpenVideo )
EVT_MENU ( Menu_File_Close_Video , FrameMain : : OnCloseVideo )
EVT_MENU ( Menu_File_Open_Subtitles , FrameMain : : OnOpenSubtitles )
EVT_MENU ( Menu_File_Open_Subtitles_Charset , FrameMain : : OnOpenSubtitlesCharset )
EVT_MENU ( Menu_File_New_Subtitles , FrameMain : : OnNewSubtitles )
EVT_MENU ( Menu_File_Save_Subtitles , FrameMain : : OnSaveSubtitles )
EVT_MENU ( Menu_File_Save_Subtitles_As , FrameMain : : OnSaveSubtitlesAs )
EVT_MENU ( Menu_File_Save_Subtitles_With_Charset , FrameMain : : OnSaveSubtitlesCharset )
EVT_MENU ( Menu_File_Export_Subtitles , FrameMain : : OnExportSubtitles )
EVT_MENU ( Menu_File_Open_VFR , FrameMain : : OnOpenVFR )
EVT_MENU ( Menu_File_Close_VFR , FrameMain : : OnCloseVFR )
2006-12-18 03:44:38 +01:00
EVT_MENU ( Menu_Video_Load_Keyframes , FrameMain : : OnOpenKeyframes )
EVT_MENU ( Menu_Video_Save_Keyframes , FrameMain : : OnSaveKeyframes )
EVT_MENU ( Menu_Video_Close_Keyframes , FrameMain : : OnCloseKeyframes )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_View_Zoom_50 , FrameMain : : OnSetZoom50 )
EVT_MENU ( Menu_View_Zoom_100 , FrameMain : : OnSetZoom100 )
EVT_MENU ( Menu_View_Zoom_200 , FrameMain : : OnSetZoom200 )
EVT_COMBOBOX ( Toolbar_Zoom_Dropdown , FrameMain : : OnSetZoom )
2006-12-17 21:46:01 +01:00
EVT_MENU ( Video_Play , FrameMain : : OnVideoPlay )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_Video_Zoom_In , FrameMain : : OnZoomIn )
EVT_MENU ( Menu_Video_Zoom_Out , FrameMain : : OnZoomOut )
EVT_MENU ( Menu_Video_AR_Default , FrameMain : : OnSetARDefault )
EVT_MENU ( Menu_Video_AR_Full , FrameMain : : OnSetARFull )
EVT_MENU ( Menu_Video_AR_Wide , FrameMain : : OnSetARWide )
2006-05-16 01:44:53 +02:00
EVT_MENU ( Menu_Video_AR_235 , FrameMain : : OnSetAR235 )
EVT_MENU ( Menu_Video_AR_Custom , FrameMain : : OnSetARCustom )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_Video_JumpTo , FrameMain : : OnJumpTo )
EVT_MENU ( Menu_Video_Select_Visible , FrameMain : : OnSelectVisible )
EVT_MENU ( Menu_Audio_Open_File , FrameMain : : OnOpenAudio )
EVT_MENU ( Menu_Audio_Open_From_Video , FrameMain : : OnOpenAudioFromVideo )
EVT_MENU ( Menu_Audio_Close , FrameMain : : OnCloseAudio )
EVT_MENU ( Menu_Edit_Undo , FrameMain : : OnUndo )
2006-02-20 22:32:58 +01:00
EVT_MENU ( Menu_Edit_Redo , FrameMain : : OnRedo )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_Edit_Cut , FrameMain : : OnCut )
EVT_MENU ( Menu_Edit_Copy , FrameMain : : OnCopy )
EVT_MENU ( Menu_Edit_Paste , FrameMain : : OnPaste )
2006-12-17 19:30:19 +01:00
EVT_MENU ( Menu_Edit_Paste_Over , FrameMain : : OnPasteOver )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_Edit_Find , FrameMain : : OnFind )
EVT_MENU ( Menu_Edit_Find_Next , FrameMain : : OnFindNext )
EVT_MENU ( Menu_Edit_Replace , FrameMain : : OnReplace )
EVT_MENU ( Menu_Edit_Shift , FrameMain : : OnShift )
EVT_MENU ( Menu_Edit_Select , FrameMain : : OnSelect )
2006-07-07 00:39:58 +02:00
EVT_MENU ( Menu_Edit_Sort , FrameMain : : OnSort )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_Tools_Properties , FrameMain : : OnOpenProperties )
EVT_MENU ( Menu_Tools_Styles_Manager , FrameMain : : OnOpenStylesManager )
2006-07-01 04:27:37 +02:00
EVT_MENU ( Menu_Tools_Attachments , FrameMain : : OnOpenAttachments )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_Tools_Translation , FrameMain : : OnOpenTranslation )
EVT_MENU ( Menu_Tools_SpellCheck , FrameMain : : OnOpenSpellCheck )
EVT_MENU ( Menu_Tools_Fonts_Collector , FrameMain : : OnOpenFontsCollector )
EVT_MENU ( Menu_Tools_Automation , FrameMain : : OnOpenAutomation )
EVT_MENU ( Menu_Tools_Styling , FrameMain : : OnOpenStylingAssistant )
EVT_MENU ( Menu_Tools_Resample , FrameMain : : OnOpenResample )
EVT_MENU ( Menu_Tools_Timing_Processor , FrameMain : : OnOpenTimingProcessor )
EVT_MENU ( Menu_Tools_Hotkeys , FrameMain : : OnOpenHotkeys )
2006-06-19 04:51:06 +02:00
EVT_MENU ( Menu_Tools_Options , FrameMain : : OnOpenOptions )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_Subs_Snap_Start_To_Video , FrameMain : : OnSnapSubsStartToVid )
EVT_MENU ( Menu_Subs_Snap_End_To_Video , FrameMain : : OnSnapSubsEndToVid )
EVT_MENU ( Menu_Subs_Snap_Video_To_Start , FrameMain : : OnSnapVidToSubsStart )
EVT_MENU ( Menu_Subs_Snap_Video_To_End , FrameMain : : OnSnapVidToSubsEnd )
EVT_MENU ( Menu_Video_Snap_To_Scene , FrameMain : : OnSnapToScene )
EVT_MENU ( Menu_Video_Shift_To_Frame , FrameMain : : OnShiftToFrame )
EVT_MENU ( Menu_Help_Contents , FrameMain : : OnContents )
EVT_MENU ( Menu_Help_Website , FrameMain : : OnWebsite )
2006-02-23 20:26:14 +01:00
EVT_MENU ( Menu_Help_Forums , FrameMain : : OnForums )
EVT_MENU ( Menu_Help_BugTracker , FrameMain : : OnBugTracker )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_Help_IRCChannel , FrameMain : : OnIRCChannel )
EVT_MENU ( Menu_Help_About , FrameMain : : OnAbout )
EVT_MENU ( Menu_View_Language , FrameMain : : OnChooseLanguage )
EVT_MENU ( Menu_View_Standard , FrameMain : : OnViewStandard )
EVT_MENU ( Menu_View_Audio , FrameMain : : OnViewAudio )
EVT_MENU ( Menu_View_Video , FrameMain : : OnViewVideo )
EVT_MENU ( Menu_View_Subs , FrameMain : : OnViewSubs )
EVT_MENU ( Video_Prev_Frame , FrameMain : : OnPrevFrame )
EVT_MENU ( Video_Next_Frame , FrameMain : : OnNextFrame )
EVT_MENU ( Video_Focus_Seek , FrameMain : : OnFocusSeek )
EVT_MENU ( Grid_Next_Line , FrameMain : : OnNextLine )
EVT_MENU ( Grid_Prev_Line , FrameMain : : OnPrevLine )
EVT_MENU ( Grid_Toggle_Tags , FrameMain : : OnToggleTags )
2006-12-24 18:42:09 +01:00
EVT_MENU ( Edit_Box_Commit , FrameMain : : OnEditBoxCommit )
2006-05-05 20:52:09 +02:00
2006-12-30 23:08:23 +01:00
EVT_MENU ( Medusa_Play , FrameMain : : OnMedusaPlay )
EVT_MENU ( Medusa_Stop , FrameMain : : OnMedusaStop )
EVT_MENU ( Medusa_Play_After , FrameMain : : OnMedusaPlayAfter )
EVT_MENU ( Medusa_Play_Before , FrameMain : : OnMedusaPlayBefore )
EVT_MENU ( Medusa_Next , FrameMain : : OnNextLine )
EVT_MENU ( Medusa_Prev , FrameMain : : OnPrevLine )
EVT_MENU ( Medusa_Shift_Start_Forward , FrameMain : : OnMedusaShiftStartForward )
EVT_MENU ( Medusa_Shift_Start_Back , FrameMain : : OnMedusaShiftStartBack )
EVT_MENU ( Medusa_Shift_End_Forward , FrameMain : : OnMedusaShiftEndForward )
EVT_MENU ( Medusa_Shift_End_Back , FrameMain : : OnMedusaShiftEndBack )
2006-06-19 04:57:27 +02:00
# ifdef __WXMAC__
EVT_MENU ( wxID_ABOUT , FrameMain : : OnAbout )
EVT_MENU ( wxID_EXIT , FrameMain : : OnExit )
# endif
2006-01-16 22:02:54 +01:00
END_EVENT_TABLE ( )
2006-12-27 21:16:47 +01:00
////////////////////////////////
// Redirect grid events to grid
void FrameMain : : OnGridEvent ( wxCommandEvent & event ) {
SubsBox - > AddPendingEvent ( event ) ;
}
2006-01-16 22:02:54 +01:00
////////////////////////
// Menu is being opened
void FrameMain : : OnMenuOpen ( wxMenuEvent & event ) {
// Get menu
//Freeze();
wxMenu * curMenu = event . GetMenu ( ) ;
2006-12-28 23:31:33 +01:00
// Start by cleaning up in macro menu items
2006-12-28 23:41:20 +01:00
for ( unsigned int i = 0 ; i < activeMacroItems . size ( ) ; i + + ) {
2006-12-28 23:31:33 +01:00
wxMenu * p = 0 ;
wxMenuItem * it = MenuBar - > FindItem ( Menu_Automation_Macro + i , & p ) ;
if ( it )
p - > Delete ( it ) ;
}
activeMacroItems . clear ( ) ;
2006-01-16 22:02:54 +01:00
// File menu
if ( curMenu = = fileMenu ) {
// Wipe recent
2006-10-20 00:53:06 +02:00
int count = ( int ) RecentSubs - > GetMenuItemCount ( ) ;
2006-01-16 22:02:54 +01:00
for ( int i = count ; - - i > = 0 ; ) {
RecentSubs - > Destroy ( RecentSubs - > FindItemByPosition ( i ) ) ;
}
// Rebuild recent
int added = 0 ;
wxString n ;
wxArrayString entries = Options . GetRecentList ( _T ( " Recent sub " ) ) ;
for ( size_t i = 0 ; i < entries . Count ( ) ; i + + ) {
n = wxString : : Format ( _T ( " %i " ) , i + 1 ) ;
if ( i < 9 ) n = _T ( " & " ) + n ;
wxFileName shortname ( entries [ i ] ) ;
wxString filename = shortname . GetFullName ( ) ;
RecentSubs - > Append ( Menu_File_Recent + i , n + _T ( " " ) + filename ) ;
added + + ;
}
if ( added = = 0 ) RecentSubs - > Append ( Menu_File_Recent , _T ( " Empty " ) ) - > Enable ( false ) ;
}
// View menu
else if ( curMenu = = viewMenu ) {
// Flags
bool aud = audioBox - > audioDisplay - > loaded ;
bool vid = videoBox - > videoDisplay - > loaded ;
// Set states
MenuBar - > Enable ( Menu_View_Audio , aud ) ;
MenuBar - > Enable ( Menu_View_Video , vid ) ;
MenuBar - > Enable ( Menu_View_Standard , aud & & vid ) ;
// Select option
if ( curMode = = 0 ) MenuBar - > Check ( Menu_View_Subs , true ) ;
if ( curMode = = 1 ) MenuBar - > Check ( Menu_View_Video , true ) ;
if ( curMode = = 2 ) MenuBar - > Check ( Menu_View_Standard , true ) ;
if ( curMode = = 3 ) MenuBar - > Check ( Menu_View_Audio , true ) ;
}
// Video menu
else if ( curMenu = = videoMenu ) {
bool state = videoBox - > videoDisplay - > loaded ;
// Rebuild icons
RebuildMenuItem ( videoMenu , Menu_Video_JumpTo , wxBITMAP ( jumpto_button ) , wxBITMAP ( jumpto_disable_button ) , state ) ;
RebuildMenuItem ( videoMenu , Menu_Subs_Snap_Video_To_Start , wxBITMAP ( video_to_substart ) , wxBITMAP ( video_to_substart_disable ) , state ) ;
RebuildMenuItem ( videoMenu , Menu_Subs_Snap_Video_To_End , wxBITMAP ( video_to_subend ) , wxBITMAP ( video_to_subend_disable ) , state ) ;
// Set states
2006-12-28 21:59:39 +01:00
MenuBar - > Enable ( Menu_View_Zoom , state ) ;
2006-01-16 22:02:54 +01:00
MenuBar - > Enable ( Menu_View_Zoom_50 , state ) ;
MenuBar - > Enable ( Menu_View_Zoom_100 , state ) ;
MenuBar - > Enable ( Menu_View_Zoom_200 , state ) ;
MenuBar - > Enable ( Menu_File_Close_Video , state ) ;
2006-12-28 21:59:39 +01:00
MenuBar - > Enable ( Menu_Video_AR , state ) ;
2006-01-16 22:02:54 +01:00
MenuBar - > Enable ( Menu_Video_AR_Default , state ) ;
MenuBar - > Enable ( Menu_Video_AR_Full , state ) ;
MenuBar - > Enable ( Menu_Video_AR_Wide , state ) ;
2006-05-16 01:44:53 +02:00
MenuBar - > Enable ( Menu_Video_AR_235 , state ) ;
MenuBar - > Enable ( Menu_Video_AR_Custom , state ) ;
2006-12-18 03:44:38 +01:00
MenuBar - > Enable ( Menu_File_Close_VFR , VFR_Output . GetFrameRateType ( ) = = VFR ) ;
2006-12-18 05:53:40 +01:00
MenuBar - > Enable ( Menu_Video_Close_Keyframes , videoBox - > videoDisplay - > OverKeyFramesLoaded ( ) ) ;
2006-12-18 17:08:58 +01:00
MenuBar - > Enable ( Menu_Video_Save_Keyframes , videoBox - > videoDisplay - > KeyFramesLoaded ( ) ) ;
2006-01-16 22:02:54 +01:00
// Set AR radio
2006-05-16 01:44:53 +02:00
int arType = videoBox - > videoDisplay - > GetAspectRatioType ( ) ;
MenuBar - > Check ( Menu_Video_AR_Default , false ) ;
MenuBar - > Check ( Menu_Video_AR_Full , false ) ;
MenuBar - > Check ( Menu_Video_AR_Wide , false ) ;
MenuBar - > Check ( Menu_Video_AR_235 , false ) ;
MenuBar - > Check ( Menu_Video_AR_Custom , false ) ;
switch ( arType ) {
case 0 : MenuBar - > Check ( Menu_Video_AR_Default , true ) ; break ;
case 1 : MenuBar - > Check ( Menu_Video_AR_Full , true ) ; break ;
case 2 : MenuBar - > Check ( Menu_Video_AR_Wide , true ) ; break ;
case 3 : MenuBar - > Check ( Menu_Video_AR_235 , true ) ; break ;
case 4 : MenuBar - > Check ( Menu_Video_AR_Custom , true ) ; break ;
}
2006-01-16 22:02:54 +01:00
// Wipe recent
2006-10-20 00:53:06 +02:00
int count = ( int ) RecentVids - > GetMenuItemCount ( ) ;
2006-01-16 22:02:54 +01:00
for ( int i = count ; - - i > = 0 ; ) {
RecentVids - > Destroy ( RecentVids - > FindItemByPosition ( i ) ) ;
}
2006-10-20 00:53:06 +02:00
count = ( int ) RecentTimecodes - > GetMenuItemCount ( ) ;
2006-07-01 07:34:39 +02:00
for ( int i = count ; - - i > = 0 ; ) {
RecentTimecodes - > Destroy ( RecentTimecodes - > FindItemByPosition ( i ) ) ;
}
2006-12-18 18:18:14 +01:00
count = ( int ) RecentKeyframes - > GetMenuItemCount ( ) ;
for ( int i = count ; - - i > = 0 ; ) {
RecentKeyframes - > Destroy ( RecentKeyframes - > FindItemByPosition ( i ) ) ;
}
2006-01-16 22:02:54 +01:00
2006-07-01 07:34:39 +02:00
// Rebuild recent videos
2006-01-16 22:02:54 +01:00
int added = 0 ;
wxString n ;
wxArrayString entries = Options . GetRecentList ( _T ( " Recent vid " ) ) ;
for ( size_t i = 0 ; i < entries . Count ( ) ; i + + ) {
n = wxString : : Format ( _T ( " %i " ) , i + 1 ) ;
if ( i < 9 ) n = _T ( " & " ) + n ;
wxFileName shortname ( entries [ i ] ) ;
wxString filename = shortname . GetFullName ( ) ;
RecentVids - > Append ( Menu_Video_Recent + i , n + _T ( " " ) + filename ) ;
added + + ;
}
if ( added = = 0 ) RecentVids - > Append ( Menu_Video_Recent , _T ( " Empty " ) ) - > Enable ( false ) ;
2006-07-01 07:34:39 +02:00
// Rebuild recent timecodes
added = 0 ;
entries = Options . GetRecentList ( _T ( " Recent timecodes " ) ) ;
for ( size_t i = 0 ; i < entries . Count ( ) ; i + + ) {
n = wxString : : Format ( _T ( " %i " ) , i + 1 ) ;
if ( i < 9 ) n = _T ( " & " ) + n ;
wxFileName shortname ( entries [ i ] ) ;
wxString filename = shortname . GetFullName ( ) ;
RecentTimecodes - > Append ( Menu_Timecodes_Recent + i , n + _T ( " " ) + filename ) ;
added + + ;
}
if ( added = = 0 ) RecentTimecodes - > Append ( Menu_Timecodes_Recent , _T ( " Empty " ) ) - > Enable ( false ) ;
2006-12-18 18:18:14 +01:00
// Rebuild recent Keyframes
added = 0 ;
entries = Options . GetRecentList ( _T ( " Recent Keyframes " ) ) ;
for ( size_t i = 0 ; i < entries . Count ( ) ; i + + ) {
n = wxString : : Format ( _T ( " %i " ) , i + 1 ) ;
if ( i < 9 ) n = _T ( " & " ) + n ;
wxFileName shortname ( entries [ i ] ) ;
wxString filename = shortname . GetFullName ( ) ;
RecentKeyframes - > Append ( Menu_Keyframes_Recent + i , n + _T ( " " ) + filename ) ;
added + + ;
}
if ( added = = 0 ) RecentKeyframes - > Append ( Menu_Keyframes_Recent , _T ( " Empty " ) ) - > Enable ( false ) ;
2006-01-16 22:02:54 +01:00
}
// Audio menu
else if ( curMenu = = audioMenu ) {
bool state = audioBox - > loaded ;
bool vidstate = videoBox - > videoDisplay - > loaded ;
MenuBar - > Enable ( Menu_Audio_Open_From_Video , vidstate ) ;
MenuBar - > Enable ( Menu_Audio_Close , state ) ;
// Wipe recent
2006-10-20 00:53:06 +02:00
int count = ( int ) RecentAuds - > GetMenuItemCount ( ) ;
2006-01-16 22:02:54 +01:00
for ( int i = count ; - - i > = 0 ; ) {
RecentAuds - > Destroy ( RecentAuds - > FindItemByPosition ( i ) ) ;
}
// Rebuild recent
int added = 0 ;
wxString n ;
wxArrayString entries = Options . GetRecentList ( _T ( " Recent aud " ) ) ;
for ( size_t i = 0 ; i < entries . Count ( ) ; i + + ) {
n = wxString : : Format ( _T ( " %i " ) , i + 1 ) ;
if ( i < 9 ) n = _T ( " & " ) + n ;
wxFileName shortname ( entries [ i ] ) ;
wxString filename = shortname . GetFullName ( ) ;
RecentAuds - > Append ( Menu_Audio_Recent + i , n + _T ( " " ) + filename ) ;
added + + ;
}
if ( added = = 0 ) RecentAuds - > Append ( Menu_Audio_Recent , _T ( " Empty " ) ) - > Enable ( false ) ;
}
2006-12-27 21:35:50 +01:00
// Subtitles menu
else if ( curMenu = = subtitlesMenu ) {
// Variables
bool continuous ;
wxArrayInt sels = SubsBox - > GetSelection ( & continuous ) ;
int count = sels . Count ( ) ;
bool state , state2 ;
// Entries
state = count > 0 ;
MenuBar - > Enable ( MENU_INSERT_BEFORE , state ) ;
MenuBar - > Enable ( MENU_INSERT_AFTER , state ) ;
MenuBar - > Enable ( MENU_SPLIT_BY_KARAOKE , state ) ;
2006-12-28 21:20:55 +01:00
RebuildMenuItem ( subtitlesMenu , MENU_DELETE , wxBITMAP ( delete_button ) , wxBITMAP ( delete_disable_button ) , state ) ;
2006-12-27 21:35:50 +01:00
state2 = count > 0 & & videoBox - > videoDisplay - > loaded ;
MenuBar - > Enable ( MENU_INSERT_BEFORE_VIDEO , state2 ) ;
MenuBar - > Enable ( MENU_INSERT_AFTER_VIDEO , state2 ) ;
MenuBar - > Enable ( Menu_Subtitles_Insert , state ) ;
state = count > 0 & & continuous ;
MenuBar - > Enable ( MENU_DUPLICATE , state ) ;
state = count > 0 & & continuous & & VFR_Output . IsLoaded ( ) ;
MenuBar - > Enable ( MENU_DUPLICATE_NEXT_FRAME , state ) ;
state = count = = 2 ;
MenuBar - > Enable ( MENU_SWAP , state ) ;
state = count > = 2 & & continuous ;
MenuBar - > Enable ( MENU_JOIN_CONCAT , state ) ;
MenuBar - > Enable ( MENU_JOIN_REPLACE , state ) ;
MenuBar - > Enable ( MENU_JOIN_AS_KARAOKE , state ) ;
MenuBar - > Enable ( Menu_Subtitles_Join , state ) ;
2006-12-30 23:38:05 +01:00
state = ( count = = 2 | | count = = 3 ) & & continuous ;
MenuBar - > Enable ( MENU_RECOMBINE , state ) ;
2006-12-27 21:35:50 +01:00
}
2006-12-27 02:56:34 +01:00
// Timing menu
else if ( curMenu = = timingMenu ) {
2006-12-27 21:35:50 +01:00
// Variables
bool continuous ;
wxArrayInt sels = SubsBox - > GetSelection ( & continuous ) ;
int count = sels . Count ( ) ;
// Video related
2006-12-27 02:56:34 +01:00
bool state = videoBox - > videoDisplay - > loaded ;
RebuildMenuItem ( timingMenu , Menu_Subs_Snap_Start_To_Video , wxBITMAP ( substart_to_video ) , wxBITMAP ( substart_to_video_disable ) , state ) ;
RebuildMenuItem ( timingMenu , Menu_Subs_Snap_End_To_Video , wxBITMAP ( subend_to_video ) , wxBITMAP ( subend_to_video_disable ) , state ) ;
RebuildMenuItem ( timingMenu , Menu_Video_Snap_To_Scene , wxBITMAP ( snap_subs_to_scene ) , wxBITMAP ( snap_subs_to_scene_disable ) , state ) ;
RebuildMenuItem ( timingMenu , Menu_Video_Shift_To_Frame , wxBITMAP ( shift_to_frame ) , wxBITMAP ( shift_to_frame_disable ) , state ) ;
2006-12-27 21:35:50 +01:00
// Other
state = count > = 2 & & continuous ;
MenuBar - > Enable ( MENU_ADJOIN , state ) ;
MenuBar - > Enable ( MENU_ADJOIN2 , state ) ;
2006-12-27 02:56:34 +01:00
}
2006-01-16 22:02:54 +01:00
// Edit menu
else if ( curMenu = = editMenu ) {
// Undo state
2006-02-20 22:32:58 +01:00
RebuildMenuItem ( editMenu , Menu_Edit_Undo , wxBITMAP ( undo_button ) , wxBITMAP ( undo_disable_button ) , ! AssFile : : IsUndoStackEmpty ( ) ) ;
RebuildMenuItem ( editMenu , Menu_Edit_Redo , wxBITMAP ( redo_button ) , wxBITMAP ( redo_disable_button ) , ! AssFile : : IsRedoStackEmpty ( ) ) ;
2006-01-16 22:02:54 +01:00
// Copy/cut/paste
wxArrayInt sels = SubsBox - > GetSelection ( ) ;
bool state = ( sels . Count ( ) > 0 ) ;
RebuildMenuItem ( editMenu , Menu_Edit_Cut , wxBITMAP ( cut_button ) , wxBITMAP ( cut_disable_button ) , state ) ;
RebuildMenuItem ( editMenu , Menu_Edit_Copy , wxBITMAP ( copy_button ) , wxBITMAP ( copy_disable_button ) , state ) ;
RebuildMenuItem ( editMenu , Menu_Edit_Paste , wxBITMAP ( paste_button ) , wxBITMAP ( paste_disable_button ) , state ) ;
2006-12-17 19:30:19 +01:00
MenuBar - > Enable ( Menu_Edit_Paste_Over , state ) ;
2006-01-16 22:02:54 +01:00
}
2006-12-28 23:31:33 +01:00
// Automation menu
else if ( curMenu = = automationMenu ) {
2007-01-03 05:31:17 +01:00
AddMacroMenuItems ( automationMenu , wxGetApp ( ) . global_scripts - > GetMacros ( ) ) ;
AddMacroMenuItems ( automationMenu , local_scripts - > GetMacros ( ) ) ;
2006-12-28 23:31:33 +01:00
}
2006-01-16 22:02:54 +01:00
//Thaw();
}
2006-12-28 23:31:33 +01:00
//////////////////////////////
// Macro menu creation helper
void FrameMain : : AddMacroMenuItems ( wxMenu * menu , const std : : vector < Automation4 : : FeatureMacro * > & macros ) {
if ( macros . empty ( ) ) {
return ;
}
int id = activeMacroItems . size ( ) ; ;
for ( std : : vector < Automation4 : : FeatureMacro * > : : const_iterator i = macros . begin ( ) ; i ! = macros . end ( ) ; + + i ) {
wxMenuItem * m = menu - > Append ( Menu_Automation_Macro + id , ( * i ) - > GetName ( ) , ( * i ) - > GetDescription ( ) ) ;
m - > Enable ( ( * i ) - > Validate ( SubsBox - > ass , SubsBox - > GetAbsoluteSelection ( ) , SubsBox - > GetFirstSelRow ( ) ) ) ;
activeMacroItems . push_back ( * i ) ;
id + + ;
}
}
2006-01-16 22:02:54 +01:00
///////////////////////////////
// Open recent subs menu entry
void FrameMain : : OnOpenRecentSubs ( wxCommandEvent & event ) {
int number = event . GetId ( ) - Menu_File_Recent ;
wxString key = _T ( " Recent sub # " ) + wxString : : Format ( _T ( " %i " ) , number + 1 ) ;
LoadSubtitles ( Options . AsText ( key ) ) ;
}
////////////////////////////////
// Open recent video menu entry
void FrameMain : : OnOpenRecentVideo ( wxCommandEvent & event ) {
int number = event . GetId ( ) - Menu_Video_Recent ;
wxString key = _T ( " Recent vid # " ) + wxString : : Format ( _T ( " %i " ) , number + 1 ) ;
LoadVideo ( Options . AsText ( key ) ) ;
}
2006-07-01 07:34:39 +02:00
////////////////////////////////
// Open recent timecodes entry
void FrameMain : : OnOpenRecentTimecodes ( wxCommandEvent & event ) {
int number = event . GetId ( ) - Menu_Timecodes_Recent ;
wxString key = _T ( " Recent timecodes # " ) + wxString : : Format ( _T ( " %i " ) , number + 1 ) ;
LoadVFR ( Options . AsText ( key ) ) ;
}
2006-12-18 18:18:14 +01:00
////////////////////////////////
// Open recent Keyframes entry
void FrameMain : : OnOpenRecentKeyframes ( wxCommandEvent & event ) {
int number = event . GetId ( ) - Menu_Keyframes_Recent ;
wxString key = _T ( " Recent Keyframes # " ) + wxString : : Format ( _T ( " %i " ) , number + 1 ) ;
LoadKeyframes ( Options . AsText ( key ) ) ;
}
2006-01-16 22:02:54 +01:00
////////////////////////////////
// Open recent audio menu entry
void FrameMain : : OnOpenRecentAudio ( wxCommandEvent & event ) {
int number = event . GetId ( ) - Menu_Audio_Recent ;
wxString key = _T ( " Recent aud # " ) + wxString : : Format ( _T ( " %i " ) , number + 1 ) ;
LoadAudio ( Options . AsText ( key ) ) ;
}
////////
// Exit
void FrameMain : : OnExit ( wxCommandEvent & WXUNUSED ( event ) ) {
Close ( ) ;
}
//////////////////
// Open about box
void FrameMain : : OnAbout ( wxCommandEvent & event ) {
2006-04-27 20:12:48 +02:00
AboutScreen About ( this ) ;
2006-01-16 22:02:54 +01:00
About . ShowModal ( ) ;
}
////////////////////
// Open help topics
void FrameMain : : OnContents ( wxCommandEvent & WXUNUSED ( event ) ) {
OpenHelp ( _T ( " " ) ) ;
}
////////////////
// Open website
void FrameMain : : OnWebsite ( wxCommandEvent & WXUNUSED ( event ) ) {
wxFileType * type = wxTheMimeTypesManager - > GetFileTypeFromExtension ( _T ( " html " ) ) ;
if ( type ) {
2006-02-23 20:26:14 +01:00
wxString command = type - > GetOpenCommand ( _T ( " http://www.aegisub.net/ " ) ) ;
if ( ! command . empty ( ) ) wxExecute ( command ) ;
}
}
///////////////
// Open forums
void FrameMain : : OnForums ( wxCommandEvent & WXUNUSED ( event ) ) {
wxFileType * type = wxTheMimeTypesManager - > GetFileTypeFromExtension ( _T ( " html " ) ) ;
if ( type ) {
wxString command = type - > GetOpenCommand ( _T ( " http://www.malakith.net/aegisub/ " ) ) ;
if ( ! command . empty ( ) ) wxExecute ( command ) ;
}
}
///////////////////
// Open bugtracker
void FrameMain : : OnBugTracker ( wxCommandEvent & WXUNUSED ( event ) ) {
wxFileType * type = wxTheMimeTypesManager - > GetFileTypeFromExtension ( _T ( " html " ) ) ;
if ( type ) {
wxString command = type - > GetOpenCommand ( _T ( " http://www.malakith.net/aegibug/ " ) ) ;
2006-01-16 22:02:54 +01:00
if ( ! command . empty ( ) ) wxExecute ( command ) ;
}
}
////////////////////
// Open IRC channel
void FrameMain : : OnIRCChannel ( wxCommandEvent & WXUNUSED ( event ) ) {
wxFileType * type = wxTheMimeTypesManager - > GetFileTypeFromExtension ( _T ( " html " ) ) ;
if ( type ) {
wxString command = type - > GetOpenCommand ( _T ( " irc://irc.chatsociety.net/aegisub " ) ) ;
if ( ! command . empty ( ) ) wxExecute ( command ) ;
}
}
//////////////
// Open video
void FrameMain : : OnOpenVideo ( wxCommandEvent & WXUNUSED ( event ) ) {
2006-03-05 21:42:38 +01:00
wxString path = Options . AsText ( _T ( " Last open video path " ) ) ;
wxString filename = wxFileSelector ( _ ( " Open video file " ) , path , _T ( " " ) , _T ( " " ) , _T ( " Recommended Formats (*.avi,*.avs,*.d2v)|*.avi;*.avs;*.d2v|Other supported formats (*.mkv,*.ogm,*.mp4,*.mpeg,*.mpg,*.vob)|*.mkv;*.ogm;*.mp4;*.mpeg;*.mpg;*.vob|All Files (*.*)|*.* " ) , wxOPEN | wxFILE_MUST_EXIST ) ;
2006-01-16 22:02:54 +01:00
if ( ! filename . empty ( ) ) {
LoadVideo ( filename ) ;
2006-03-05 21:42:38 +01:00
Options . SetText ( _T ( " Last open video path " ) , filename ) ;
2006-12-18 18:18:14 +01:00
Options . Save ( ) ;
2006-01-16 22:02:54 +01:00
}
}
///////////////
// Close video
void FrameMain : : OnCloseVideo ( wxCommandEvent & WXUNUSED ( event ) ) {
LoadVideo ( _T ( " " ) ) ;
}
//////////////
// Open Audio
void FrameMain : : OnOpenAudio ( wxCommandEvent & WXUNUSED ( event ) ) {
2006-03-05 21:42:38 +01:00
wxString path = Options . AsText ( _T ( " Last open audio path " ) ) ;
wxString filename = wxFileSelector ( _ ( " Open audio file " ) , path , _T ( " " ) , _T ( " " ) , _T ( " Audio Formats (*.wav,*.mp3,*.ogg,*.flac,*.mp4,*.ac3,*.aac,*.mka)|*.wav;*.mp3;*.ogg;*.flac;*.mp4;*.ac3;*.aac;*.mka|All files (*.*)|*.* " ) , wxOPEN | wxFILE_MUST_EXIST ) ;
2006-01-16 22:02:54 +01:00
if ( ! filename . empty ( ) ) {
LoadAudio ( filename ) ;
2006-03-05 21:42:38 +01:00
Options . SetText ( _T ( " Last open audio path " ) , filename ) ;
2006-12-18 18:18:14 +01:00
Options . Save ( ) ;
2006-01-16 22:02:54 +01:00
}
}
void FrameMain : : OnOpenAudioFromVideo ( wxCommandEvent & WXUNUSED ( event ) ) {
LoadAudio ( _T ( " " ) , true ) ;
}
void FrameMain : : OnCloseAudio ( wxCommandEvent & WXUNUSED ( event ) ) {
LoadAudio ( _T ( " " ) ) ;
}
//////////////////
// Open subtitles
void FrameMain : : OnOpenSubtitles ( wxCommandEvent & WXUNUSED ( event ) ) {
2006-03-05 21:42:38 +01:00
wxString path = Options . AsText ( _T ( " Last open subtitles path " ) ) ;
2006-12-26 05:48:53 +01:00
wxString filename = wxFileSelector ( _ ( " Open subtitles file " ) , path , _T ( " " ) , _T ( " " ) , AssFile : : GetWildcardList ( 0 ) , wxOPEN | wxFILE_MUST_EXIST ) ;
2006-01-16 22:02:54 +01:00
if ( ! filename . empty ( ) ) {
LoadSubtitles ( filename ) ;
2006-03-14 05:23:00 +01:00
wxFileName filepath ( filename ) ;
Options . SetText ( _T ( " Last open subtitles path " ) , filepath . GetPath ( ) ) ;
2006-12-18 18:18:14 +01:00
Options . Save ( ) ;
2006-01-16 22:02:54 +01:00
}
}
////////////////////////////////////////
// Open subtitles with specific charset
void FrameMain : : OnOpenSubtitlesCharset ( wxCommandEvent & WXUNUSED ( event ) ) {
// Initialize charsets
wxArrayString choices = GetEncodings ( ) ;
2006-03-05 21:42:38 +01:00
wxString path = Options . AsText ( _T ( " Last open subtitles path " ) ) ;
2006-01-16 22:02:54 +01:00
// Get options and load
2006-12-26 05:48:53 +01:00
wxString filename = wxFileSelector ( _ ( " Open subtitles file " ) , path , _T ( " " ) , _T ( " " ) , AssFile : : GetWildcardList ( 0 ) , wxOPEN | wxFILE_MUST_EXIST ) ;
2006-01-16 22:02:54 +01:00
if ( ! filename . empty ( ) ) {
wxString charset = wxGetSingleChoice ( _ ( " Choose charset code: " ) , _ ( " Charset " ) , choices , this , - 1 , - 1 , true , 250 , 200 ) ;
if ( ! charset . empty ( ) ) {
LoadSubtitles ( filename , charset ) ;
}
2006-03-05 21:42:38 +01:00
Options . SetText ( _T ( " Last open subtitles path " ) , filename ) ;
2006-12-18 18:18:14 +01:00
Options . Save ( ) ;
2006-01-16 22:02:54 +01:00
}
}
/////////////////////
// Save subtitles as
void FrameMain : : OnSaveSubtitlesAs ( wxCommandEvent & WXUNUSED ( event ) ) {
SaveSubtitles ( true ) ;
}
//////////////////
// Save subtitles
void FrameMain : : OnSaveSubtitles ( wxCommandEvent & WXUNUSED ( event ) ) {
SaveSubtitles ( false ) ;
}
////////////////////////////////////////
// Save subtitles with specific charset
void FrameMain : : OnSaveSubtitlesCharset ( wxCommandEvent & WXUNUSED ( event ) ) {
SaveSubtitles ( true , true ) ;
}
///////////////////
// Close subtitles
void FrameMain : : OnNewSubtitles ( wxCommandEvent & WXUNUSED ( event ) ) {
LoadSubtitles ( _T ( " " ) ) ;
}
////////////////////
// Export subtitles
void FrameMain : : OnExportSubtitles ( wxCommandEvent & WXUNUSED ( event ) ) {
//wxString filename = wxFileSelector(_T("Export subtitles file"),_T(""),_T(""),_T(""),_T("Advanced Substation Alpha (*.ass)|*.ass"),wxSAVE | wxOVERWRITE_PROMPT);
//if (!filename.empty()) {
// AssFile::top->Export(filename);
//}
DialogExport exporter ( this ) ;
exporter . ShowModal ( ) ;
}
/////////////////
// Open VFR tags
void FrameMain : : OnOpenVFR ( wxCommandEvent & event ) {
2006-03-05 21:42:38 +01:00
wxString path = Options . AsText ( _T ( " Last open timecodes path " ) ) ;
wxString filename = wxFileSelector ( _ ( " Open timecodes file " ) , path , _T ( " " ) , _T ( " " ) , _T ( " All Supported Types (*.txt)|*.txt|All Files (*.*)|*.* " ) , wxOPEN | wxFILE_MUST_EXIST ) ;
2006-01-16 22:02:54 +01:00
if ( ! filename . empty ( ) ) {
LoadVFR ( filename ) ;
2006-03-05 21:42:38 +01:00
Options . SetText ( _T ( " Last open timecodes path " ) , filename ) ;
2006-12-18 18:18:14 +01:00
Options . Save ( ) ;
2006-01-16 22:02:54 +01:00
}
}
//////////////////
// Close VFR tags
void FrameMain : : OnCloseVFR ( wxCommandEvent & event ) {
LoadVFR ( _T ( " " ) ) ;
}
2006-12-18 03:44:38 +01:00
//////////////////
// Open keyframes
void FrameMain : : OnOpenKeyframes ( wxCommandEvent & event ) {
2006-12-18 17:08:58 +01:00
// Pick file
2006-12-18 18:18:14 +01:00
wxString path = Options . AsText ( _T ( " Last open keyframes path " ) ) ;
wxString filename = wxFileSelector ( _T ( " Select the Keyframes file to open " ) , path , _T ( " " ) , _T ( " .txt " ) , _T ( " Text files (*.txt)|*.txt " ) , wxFILE_MUST_EXIST | wxOPEN ) ;
2006-12-18 17:20:45 +01:00
if ( filename . IsEmpty ( ) ) return ;
2006-12-18 18:18:14 +01:00
Options . SetText ( _T ( " Last open keyframes path " ) , filename ) ;
Options . Save ( ) ;
2006-12-18 17:08:58 +01:00
2006-12-18 18:18:14 +01:00
// Load
LoadKeyframes ( filename ) ;
2006-12-18 03:44:38 +01:00
}
///////////////////
// Close keyframes
void FrameMain : : OnCloseKeyframes ( wxCommandEvent & event ) {
2006-12-18 17:08:58 +01:00
videoBox - > videoDisplay - > CloseOverKeyFrames ( ) ;
2006-12-18 03:44:38 +01:00
}
//////////////////
// Save keyframes
void FrameMain : : OnSaveKeyframes ( wxCommandEvent & event ) {
2006-12-18 17:08:58 +01:00
// Pick file
2006-12-18 18:18:14 +01:00
wxString path = Options . AsText ( _T ( " Last open keyframes path " ) ) ;
wxString filename = wxFileSelector ( _T ( " Select the Keyframes file to open " ) , path , _T ( " " ) , _T ( " *.key.txt " ) , _T ( " Text files (*.txt)|*.txt " ) , wxOVERWRITE_PROMPT | wxSAVE ) ;
2006-12-18 17:20:45 +01:00
if ( filename . IsEmpty ( ) ) return ;
2006-12-18 18:18:14 +01:00
Options . SetText ( _T ( " Last open keyframes path " ) , filename ) ;
Options . Save ( ) ;
2006-12-18 17:08:58 +01:00
2006-12-18 18:18:14 +01:00
// Save
SaveKeyframes ( filename ) ;
2006-12-18 03:44:38 +01:00
}
2006-01-16 22:02:54 +01:00
///////////////
// Zoom levels
void FrameMain : : OnSetZoom50 ( wxCommandEvent & WXUNUSED ( event ) ) {
videoBox - > videoDisplay - > Stop ( ) ;
videoBox - > videoDisplay - > zoomBox - > SetSelection ( 3 ) ;
videoBox - > videoDisplay - > SetZoomPos ( 3 ) ;
}
void FrameMain : : OnSetZoom100 ( wxCommandEvent & WXUNUSED ( event ) ) {
videoBox - > videoDisplay - > Stop ( ) ;
videoBox - > videoDisplay - > zoomBox - > SetSelection ( 7 ) ;
videoBox - > videoDisplay - > SetZoomPos ( 7 ) ;
}
void FrameMain : : OnSetZoom200 ( wxCommandEvent & WXUNUSED ( event ) ) {
videoBox - > videoDisplay - > Stop ( ) ;
videoBox - > videoDisplay - > zoomBox - > SetSelection ( 15 ) ;
videoBox - > videoDisplay - > SetZoomPos ( 15 ) ;
}
void FrameMain : : OnZoomIn ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
videoBox - > videoDisplay - > zoomBox - > SetSelection ( videoBox - > videoDisplay - > zoomBox - > GetSelection ( ) + 1 ) ;
videoBox - > videoDisplay - > SetZoomPos ( videoBox - > videoDisplay - > zoomBox - > GetSelection ( ) ) ;
}
void FrameMain : : OnZoomOut ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
int selTo = videoBox - > videoDisplay - > zoomBox - > GetSelection ( ) - 1 ;
if ( selTo < 0 ) selTo = 0 ;
videoBox - > videoDisplay - > zoomBox - > SetSelection ( selTo ) ;
videoBox - > videoDisplay - > SetZoomPos ( videoBox - > videoDisplay - > zoomBox - > GetSelection ( ) ) ;
}
void FrameMain : : OnSetZoom ( wxCommandEvent & event ) {
//videoBox->videoDisplay->SetZoomPos(event.GetValue());
videoBox - > videoDisplay - > SetZoomPos ( videoBox - > videoDisplay - > zoomBox - > GetSelection ( ) ) ;
}
///////////////////////
// Open jump to dialog
void FrameMain : : OnJumpTo ( wxCommandEvent & WXUNUSED ( event ) ) {
videoBox - > videoDisplay - > Stop ( ) ;
if ( videoBox - > videoDisplay - > loaded ) {
DialogJumpTo JumpTo ( this , videoBox - > videoDisplay ) ;
JumpTo . ShowModal ( ) ;
videoBox - > videoSlider - > SetFocus ( ) ;
}
}
/////////////////////
// Open shift dialog
void FrameMain : : OnShift ( wxCommandEvent & WXUNUSED ( event ) ) {
videoBox - > videoDisplay - > Stop ( ) ;
DialogShiftTimes Shift ( this , SubsBox , videoBox - > videoDisplay ) ;
Shift . ShowModal ( ) ;
}
///////////////////
// Open properties
void FrameMain : : OnOpenProperties ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
DialogProperties Properties ( this , videoBox - > videoDisplay ) ;
int res = Properties . ShowModal ( ) ;
if ( res ) {
SubsBox - > CommitChanges ( ) ;
}
}
///////////////////////
// Open styles manager
void FrameMain : : OnOpenStylesManager ( wxCommandEvent & WXUNUSED ( event ) ) {
videoBox - > videoDisplay - > Stop ( ) ;
DialogStyleManager StyleManager ( this , SubsBox ) ;
StyleManager . ShowModal ( ) ;
EditBox - > UpdateGlobals ( ) ;
SubsBox - > CommitChanges ( ) ;
}
2006-07-01 04:27:37 +02:00
////////////////////
// Open attachments
void FrameMain : : OnOpenAttachments ( wxCommandEvent & WXUNUSED ( event ) ) {
videoBox - > videoDisplay - > Stop ( ) ;
DialogAttachments attachments ( this ) ;
attachments . ShowModal ( ) ;
}
2006-01-16 22:02:54 +01:00
//////////////////////////////
// Open translation assistant
void FrameMain : : OnOpenTranslation ( wxCommandEvent & WXUNUSED ( event ) ) {
videoBox - > videoDisplay - > Stop ( ) ;
int start = SubsBox - > GetFirstSelRow ( ) ;
if ( start = = - 1 ) start = 0 ;
DialogTranslation Trans ( this , AssFile : : top , SubsBox , start , true ) ;
Trans . ShowModal ( ) ;
}
//////////////////////
// Open Spell Checker
void FrameMain : : OnOpenSpellCheck ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
2006-12-27 21:16:47 +01:00
wxMessageBox ( _T ( " TODO! " ) , _T ( " Spellchecker " ) ) ;
2006-01-16 22:02:54 +01:00
}
////////////////////////
// Open Fonts Collector
void FrameMain : : OnOpenFontsCollector ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
DialogFontsCollector Collector ( this ) ;
Collector . ShowModal ( ) ;
}
/////////////////////////////
// Open Resolution Resampler
void FrameMain : : OnOpenResample ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
DialogResample diag ( this , SubsBox ) ;
diag . ShowModal ( ) ;
}
/////////////////////////////////////
// Open Timing post-processor dialog
void FrameMain : : OnOpenTimingProcessor ( wxCommandEvent & event ) {
DialogTimingProcessor timing ( this , SubsBox ) ;
timing . ShowModal ( ) ;
}
///////////////////////
// Open Hotkeys dialog
void FrameMain : : OnOpenHotkeys ( wxCommandEvent & event ) {
DialogHotkeys keys ( this ) ;
keys . ShowModal ( ) ;
}
2006-06-19 04:51:06 +02:00
///////////////////////
// Open Options dialog
void FrameMain : : OnOpenOptions ( wxCommandEvent & event ) {
DialogOptions options ( this ) ;
options . ShowModal ( ) ;
}
2006-01-16 22:02:54 +01:00
///////////////////
// Open Automation
void FrameMain : : OnOpenAutomation ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
2006-12-28 23:31:33 +01:00
DialogAutomation dlg ( this , local_scripts ) ;
dlg . ShowModal ( ) ;
}
///////////////////////////////////////////////////////////
// General handler for all Automation-generated menu items
void FrameMain : : OnAutomationMacro ( wxCommandEvent & event ) {
AssFile * oldtop = AssFile : : top ;
activeMacroItems [ event . GetId ( ) - Menu_Automation_Macro ] - > Process ( SubsBox - > ass , SubsBox - > GetAbsoluteSelection ( ) , SubsBox - > GetFirstSelRow ( ) , this ) ;
// check if modifications were made and put on undo stack
SubsBox - > LoadFromAss ( AssFile : : top , true , true ) ;
2006-01-16 22:02:54 +01:00
}
//////////////////////
// Snap subs to video
void FrameMain : : OnSnapSubsStartToVid ( wxCommandEvent & event ) {
if ( videoBox - > videoDisplay - > loaded ) {
wxArrayInt sel = SubsBox - > GetSelection ( ) ;
if ( sel . Count ( ) > 0 ) {
wxCommandEvent dummy ;
2006-02-22 05:59:39 +01:00
SubsBox - > SetSubsToVideo ( true ) ;
2006-01-16 22:02:54 +01:00
}
}
}
void FrameMain : : OnSnapSubsEndToVid ( wxCommandEvent & event ) {
if ( videoBox - > videoDisplay - > loaded ) {
wxArrayInt sel = SubsBox - > GetSelection ( ) ;
if ( sel . Count ( ) > 0 ) {
wxCommandEvent dummy ;
2006-02-22 05:59:39 +01:00
SubsBox - > SetSubsToVideo ( false ) ;
2006-01-16 22:02:54 +01:00
}
}
}
//////////////////////
// Jump video to subs
void FrameMain : : OnSnapVidToSubsStart ( wxCommandEvent & event ) {
if ( videoBox - > videoDisplay - > loaded ) {
wxArrayInt sel = SubsBox - > GetSelection ( ) ;
if ( sel . Count ( ) > 0 ) {
wxCommandEvent dummy ;
2006-02-22 05:59:39 +01:00
SubsBox - > SetVideoToSubs ( true ) ;
2006-01-16 22:02:54 +01:00
}
}
}
void FrameMain : : OnSnapVidToSubsEnd ( wxCommandEvent & event ) {
if ( videoBox - > videoDisplay - > loaded ) {
wxArrayInt sel = SubsBox - > GetSelection ( ) ;
if ( sel . Count ( ) > 0 ) {
wxCommandEvent dummy ;
2006-02-22 05:59:39 +01:00
SubsBox - > SetVideoToSubs ( false ) ;
2006-01-16 22:02:54 +01:00
}
}
}
/////////////////
// Snap to scene
void FrameMain : : OnSnapToScene ( wxCommandEvent & event ) {
if ( videoBox - > videoDisplay - > loaded ) {
// Get frames
wxArrayInt sel = SubsBox - > GetSelection ( ) ;
int curFrame = videoBox - > videoDisplay - > frame_n ;
int prev = 0 ;
int next = 0 ;
int frame = 0 ;
2006-12-18 05:53:40 +01:00
wxArrayInt keyframes = videoBox - > videoDisplay - > GetKeyFrames ( ) ;
size_t n = keyframes . Count ( ) ;
2006-01-16 22:02:54 +01:00
bool found = false ;
for ( size_t i = 0 ; i < n ; i + + ) {
2006-12-18 05:53:40 +01:00
frame = keyframes [ i ] ;
2006-01-16 22:02:54 +01:00
if ( frame = = curFrame ) {
prev = frame ;
2006-12-18 05:53:40 +01:00
if ( i < n - 1 ) next = keyframes [ i + 1 ] ;
2006-01-16 22:02:54 +01:00
else next = videoBox - > videoDisplay - > length ;
found = true ;
break ;
}
if ( frame > curFrame ) {
2006-12-18 05:53:40 +01:00
if ( i ! = 0 ) prev = keyframes [ i - 1 ] ;
2006-01-16 22:02:54 +01:00
else prev = 0 ;
next = frame ;
found = true ;
break ;
}
}
// Last section?
if ( ! found ) {
2006-12-18 05:53:40 +01:00
if ( n > 0 ) prev = keyframes [ n - 1 ] ;
2006-01-16 22:02:54 +01:00
else prev = 0 ;
next = videoBox - > videoDisplay - > length ;
}
// Get times
2006-02-24 17:45:10 +01:00
int start_ms = VFR_Output . GetTimeAtFrame ( prev , true ) ;
int end_ms = VFR_Output . GetTimeAtFrame ( next - 1 , false ) ;
2006-01-16 22:02:54 +01:00
AssDialogue * cur ;
// Update rows
for ( size_t i = 0 ; i < sel . Count ( ) ; i + + ) {
cur = SubsBox - > GetDialogue ( sel [ i ] ) ;
cur - > Start . SetMS ( start_ms ) ;
cur - > End . SetMS ( end_ms ) ;
cur - > UpdateData ( ) ;
}
// Commit
SubsBox - > ass - > FlagAsModified ( ) ;
SubsBox - > CommitChanges ( ) ;
}
}
//////////////////
// Shift to frame
void FrameMain : : OnShiftToFrame ( wxCommandEvent & event ) {
if ( videoBox - > videoDisplay - > loaded ) {
// Get selection
wxArrayInt sels = SubsBox - > GetSelection ( ) ;
2006-10-20 00:53:06 +02:00
size_t n = sels . Count ( ) ;
2006-01-16 22:02:54 +01:00
if ( n = = 0 ) return ;
// Get shifting in ms
AssDialogue * cur = SubsBox - > GetDialogue ( sels [ 0 ] ) ;
if ( ! cur ) return ;
2006-02-24 17:45:10 +01:00
int shiftBy = VFR_Output . GetTimeAtFrame ( videoBox - > videoDisplay - > frame_n , true ) - cur - > Start . GetMS ( ) ;
2006-01-16 22:02:54 +01:00
// Update
2006-10-20 00:53:06 +02:00
for ( size_t i = 0 ; i < n ; i + + ) {
2006-01-16 22:02:54 +01:00
cur = SubsBox - > GetDialogue ( sels [ i ] ) ;
if ( cur ) {
cur - > Start . SetMS ( cur - > Start . GetMS ( ) + shiftBy ) ;
cur - > End . SetMS ( cur - > End . GetMS ( ) + shiftBy ) ;
cur - > UpdateData ( ) ;
}
}
// Commit
SubsBox - > ass - > FlagAsModified ( ) ;
SubsBox - > CommitChanges ( ) ;
}
}
////////
// Undo
void FrameMain : : OnUndo ( wxCommandEvent & WXUNUSED ( event ) ) {
2006-02-22 04:38:23 +01:00
// Block if it's on a editbox
2006-01-16 22:02:54 +01:00
//wxWindow *focused = wxWindow::FindFocus();
//if (focused && focused->IsKindOf(CLASSINFO(wxTextCtrl))) return;
videoBox - > videoDisplay - > Stop ( ) ;
AssFile : : StackPop ( ) ;
SubsBox - > LoadFromAss ( AssFile : : top , true ) ;
AssFile : : Popping = false ;
}
2006-02-20 22:32:58 +01:00
////////
// Redo
void FrameMain : : OnRedo ( wxCommandEvent & WXUNUSED ( event ) ) {
videoBox - > videoDisplay - > Stop ( ) ;
AssFile : : StackRedo ( ) ;
SubsBox - > LoadFromAss ( AssFile : : top , true ) ;
AssFile : : Popping = false ;
}
2006-01-16 22:02:54 +01:00
////////
// Find
void FrameMain : : OnFind ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
Search . OpenDialog ( false ) ;
}
/////////////
// Find next
void FrameMain : : OnFindNext ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
Search . FindNext ( ) ;
}
//////////////////
// Find & replace
void FrameMain : : OnReplace ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
Search . OpenDialog ( true ) ;
}
//////////////////////////////////
// Change aspect ratio to default
void FrameMain : : OnSetARDefault ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
videoBox - > videoDisplay - > SetAspectRatio ( 0 ) ;
SetDisplayMode ( - 1 ) ;
}
/////////////////////////////////////
// Change aspect ratio to fullscreen
void FrameMain : : OnSetARFull ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
videoBox - > videoDisplay - > SetAspectRatio ( 1 ) ;
SetDisplayMode ( - 1 ) ;
}
/////////////////////////////////////
// Change aspect ratio to widescreen
void FrameMain : : OnSetARWide ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
videoBox - > videoDisplay - > SetAspectRatio ( 2 ) ;
SetDisplayMode ( - 1 ) ;
}
2006-05-16 01:44:53 +02:00
///////////////////////////////
// Change aspect ratio to 2:35
void FrameMain : : OnSetAR235 ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
videoBox - > videoDisplay - > SetAspectRatio ( 3 ) ;
SetDisplayMode ( - 1 ) ;
}
/////////////////////////////////////////
// Change aspect ratio to a custom value
void FrameMain : : OnSetARCustom ( wxCommandEvent & event ) {
// Get text
videoBox - > videoDisplay - > Stop ( ) ;
2006-06-22 01:07:03 +02:00
wxString value = wxGetTextFromUser ( _ ( " Enter aspect ratio in either decimal (e.g. 2.35) or fractional (e.g. 16:9) form. Enter a value like 853x480 to set a specific resolution. " ) , _ ( " Enter aspect ratio " ) , FloatToString ( videoBox - > videoDisplay - > GetAspectRatioValue ( ) ) ) ;
if ( value . IsEmpty ( ) ) return ;
value . MakeLower ( ) ;
2006-05-16 01:44:53 +02:00
// Process text
double numval = 0.0 ;
2006-06-22 01:07:03 +02:00
if ( value . Freq ( _T ( ' : ' ) ) = = 1 ) {
doNormalAR :
2006-05-16 01:44:53 +02:00
int pos = value . Find ( _T ( ' : ' ) ) ;
wxString num = value . Left ( pos ) ;
wxString denum = value . Mid ( pos + 1 ) ;
if ( num . IsNumber ( ) & & denum . IsNumber ( ) ) {
double a , b ;
num . ToDouble ( & a ) ;
denum . ToDouble ( & b ) ;
if ( b ! = 0 ) numval = a / b ;
}
}
2006-06-22 01:07:03 +02:00
else if ( value . Freq ( _T ( ' x ' ) ) = = 1 ) {
int pos = value . Find ( _T ( ' x ' ) ) ;
wxString width = value . Left ( pos ) ;
wxString height = value . Mid ( pos + 1 ) ;
if ( width . IsNumber ( ) & & height . IsNumber ( ) ) {
double w , h ;
width . ToDouble ( & w ) ;
height . ToDouble ( & h ) ;
if ( h ! = 0 ) {
numval = w / h ;
videoBox - > videoDisplay - > SetZoom ( h / videoBox - > videoDisplay - > h ) ;
}
}
}
else if ( value . Freq ( _T ( ' : ' ) ) < 1 ) {
value . Append ( _T ( " :1 " ) ) ;
goto doNormalAR ;
}
2006-05-16 01:44:53 +02:00
// Sanity check
2006-06-22 01:07:03 +02:00
if ( numval < 0.5 | | numval > 5.0 ) wxMessageBox ( _ ( " Invalid value! Aspect ratio must be between 0.5 and 5.0. " ) , _ ( " Invalid Aspect Ratio " ) , wxICON_ERROR ) ;
2006-05-16 01:44:53 +02:00
// Set value
else {
videoBox - > videoDisplay - > SetAspectRatio ( 4 , numval ) ;
SetDisplayMode ( - 1 ) ;
}
}
2006-01-16 22:02:54 +01:00
////////////////////////////////////
// Window is attempted to be closed
void FrameMain : : OnCloseWindow ( wxCloseEvent & event ) {
// Stop audio and video
videoBox - > videoDisplay - > Stop ( ) ;
audioBox - > audioDisplay - > Stop ( ) ;
// Ask user if he wants to save first
bool canVeto = event . CanVeto ( ) ;
int result = TryToCloseSubs ( canVeto ) ;
2006-12-29 23:58:09 +01:00
// Store maximization state
Options . SetBool ( _T ( " Maximized " ) , IsMaximized ( ) ) ;
Options . Save ( ) ;
2006-01-16 22:02:54 +01:00
// Abort/destroy
if ( canVeto ) {
if ( result = = wxCANCEL ) event . Veto ( ) ;
else Destroy ( ) ;
}
else Destroy ( ) ;
}
//////////////////
// Cut/copy/paste
void FrameMain : : OnCut ( wxCommandEvent & event ) {
2006-12-24 05:54:35 +01:00
if ( FindFocus ( ) = = EditBox - > TextEdit ) {
EditBox - > TextEdit - > Cut ( ) ;
return ;
}
2006-02-22 07:49:20 +01:00
SubsBox - > CutLines ( SubsBox - > GetSelection ( ) ) ;
2006-01-16 22:02:54 +01:00
}
void FrameMain : : OnCopy ( wxCommandEvent & event ) {
2006-12-24 05:54:35 +01:00
if ( FindFocus ( ) = = EditBox - > TextEdit ) {
EditBox - > TextEdit - > Copy ( ) ;
return ;
}
2006-02-22 07:49:20 +01:00
SubsBox - > CopyLines ( SubsBox - > GetSelection ( ) ) ;
2006-01-16 22:02:54 +01:00
}
void FrameMain : : OnPaste ( wxCommandEvent & event ) {
2006-12-24 05:54:35 +01:00
if ( FindFocus ( ) = = EditBox - > TextEdit ) {
EditBox - > TextEdit - > Paste ( ) ;
return ;
}
2006-02-22 05:59:39 +01:00
SubsBox - > PasteLines ( SubsBox - > GetFirstSelRow ( ) ) ;
2006-01-16 22:02:54 +01:00
}
2006-12-17 19:30:19 +01:00
//////////////
// Paste over
void FrameMain : : OnPasteOver ( wxCommandEvent & event ) {
SubsBox - > PasteLines ( SubsBox - > GetFirstSelRow ( ) , true ) ;
}
2006-01-16 22:02:54 +01:00
////////////////////////
// Select visible lines
void FrameMain : : OnSelectVisible ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
SubsBox - > SelectVisible ( ) ;
}
//////////////////////
// Open select dialog
void FrameMain : : OnSelect ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
DialogSelection select ( this , SubsBox ) ;
select . ShowModal ( ) ;
}
2006-07-07 00:39:58 +02:00
//////////////////
// Sort subtitles
void FrameMain : : OnSort ( wxCommandEvent & event ) {
2006-07-07 00:55:05 +02:00
// Ensure that StartMS is set properly
AssEntry * curEntry ;
AssDialogue * curDiag ;
int startMS = - 1 ;
for ( std : : list < AssEntry * > : : iterator cur = AssFile : : top - > Line . begin ( ) ; cur ! = AssFile : : top - > Line . end ( ) ; cur + + ) {
curEntry = * cur ;
curDiag = AssEntry : : GetAsDialogue ( curEntry ) ;
if ( curDiag ) startMS = curDiag - > Start . GetMS ( ) ;
curEntry - > StartMS = startMS ;
}
// Sort
AssFile : : top - > Line . sort ( LessByPointedToValue < AssEntry > ( ) ) ;
AssFile : : top - > FlagAsModified ( ) ;
SubsBox - > UpdateMaps ( ) ;
SubsBox - > CommitChanges ( ) ;
2006-07-07 00:39:58 +02:00
}
2006-01-16 22:02:54 +01:00
//////////////////////////
// Open styling assistant
void FrameMain : : OnOpenStylingAssistant ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
DialogStyling styling ( this , SubsBox ) ;
styling . ShowModal ( ) ;
}
///////////////
// Auto backup
void FrameMain : : OnAutoSave ( wxTimerEvent & event ) {
// Auto Save
2006-02-19 05:00:22 +01:00
try {
2006-06-29 00:51:33 +02:00
if ( AssFile : : top - > loaded & & AssFile : : top - > CanSave ( ) ) {
2006-02-19 05:00:22 +01:00
// Set path
wxFileName origfile ( AssFile : : top - > filename ) ;
wxString path = Options . AsText ( _T ( " Auto save path " ) ) ;
2006-02-20 22:32:58 +01:00
if ( path . IsEmpty ( ) ) path = origfile . GetPath ( ) ;
2006-02-19 05:00:22 +01:00
wxFileName dstpath ( path ) ;
if ( ! dstpath . IsAbsolute ( ) ) path = AegisubApp : : folderName + path ;
path + = _T ( " / " ) ;
dstpath . Assign ( path ) ;
if ( ! dstpath . DirExists ( ) ) wxMkdir ( path ) ;
// Save
wxString backup = path + origfile . GetName ( ) + _T ( " .AUTOSAVE. " ) + origfile . GetExt ( ) ;
AssFile : : top - > Save ( backup , false , false ) ;
// Set status bar
StatusTimeout ( _ ( " File backup saved as \" " ) + backup + _T ( " \" . " ) ) ;
}
}
catch ( wxString err ) {
StatusTimeout ( _T ( " Exception when attempting to autosave file: " ) + err ) ;
}
2006-04-14 18:46:38 +02:00
catch ( const wchar_t * err ) {
2006-02-19 05:00:22 +01:00
StatusTimeout ( _T ( " Exception when attempting to autosave file: " ) + wxString ( err ) ) ;
}
catch ( . . . ) {
StatusTimeout ( _T ( " Unhandled exception when attempting to autosave file. " ) ) ;
2006-01-16 22:02:54 +01:00
}
}
///////////////////
// Clear statusbar
void FrameMain : : OnStatusClear ( wxTimerEvent & event ) {
SetStatusText ( _T ( " " ) , 1 ) ;
}
////////////
// Key down
void FrameMain : : OnKeyDown ( wxKeyEvent & event ) {
2006-03-05 05:31:09 +01:00
audioBox - > audioDisplay - > AddPendingEvent ( event ) ;
2006-01-16 22:02:54 +01:00
event . Skip ( ) ;
}
/////////////////////
// Next frame hotkey
void FrameMain : : OnNextFrame ( wxCommandEvent & event ) {
videoBox - > videoSlider - > NextFrame ( ) ;
}
/////////////////////////
// Previous frame hotkey
void FrameMain : : OnPrevFrame ( wxCommandEvent & event ) {
videoBox - > videoSlider - > PrevFrame ( ) ;
}
///////////////////////////////////////////////////
// Toggle focus between seek bar and whatever else
void FrameMain : : OnFocusSeek ( wxCommandEvent & event ) {
wxWindow * curFocus = wxWindow : : FindFocus ( ) ;
if ( curFocus = = videoBox - > videoSlider ) {
if ( PreviousFocus ) PreviousFocus - > SetFocus ( ) ;
}
else {
PreviousFocus = curFocus ;
videoBox - > videoSlider - > SetFocus ( ) ;
}
}
////////////////////////
// Previous line hotkey
void FrameMain : : OnPrevLine ( wxCommandEvent & event ) {
int next = EditBox - > linen - 1 ;
if ( next < 0 ) return ;
SubsBox - > SelectRow ( next ) ;
SubsBox - > MakeCellVisible ( next , 0 ) ;
EditBox - > SetToLine ( next ) ;
}
////////////////////
// Next line hotkey
void FrameMain : : OnNextLine ( wxCommandEvent & event ) {
int nrows = SubsBox - > GetRows ( ) ;
int next = EditBox - > linen + 1 ;
if ( next > = nrows ) return ;
SubsBox - > SelectRow ( next ) ;
SubsBox - > MakeCellVisible ( next , 0 ) ;
EditBox - > SetToLine ( next ) ;
}
//////////////////////////////////
// Cycle through tag hiding modes
void FrameMain : : OnToggleTags ( wxCommandEvent & event ) {
// Read value
int tagMode = Options . AsInt ( _T ( " Grid hide overrides " ) ) ;
// Cycle to next
if ( tagMode < 0 | | tagMode > 2 ) tagMode = 1 ;
else {
tagMode = ( tagMode + 1 ) % 3 ;
}
// Show on status bar
wxString message = _T ( " ASS Override Tag mode set to " ) ;
if ( tagMode = = 0 ) message + = _T ( " show full tags. " ) ;
if ( tagMode = = 1 ) message + = _T ( " simplify tags. " ) ;
if ( tagMode = = 2 ) message + = _T ( " hide tags. " ) ;
StatusTimeout ( message , 10000 ) ;
// Set option
Options . SetInt ( _T ( " Grid hide overrides " ) , tagMode ) ;
Options . Save ( ) ;
// Refresh grid
2006-02-19 05:00:22 +01:00
SubsBox - > Refresh ( false ) ;
2006-01-16 22:02:54 +01:00
}
2006-12-24 18:42:09 +01:00
/////////////////////////////
// Commit Edit Box's changes
void FrameMain : : OnEditBoxCommit ( wxCommandEvent & event ) {
// Find focus
wxWindow * focus = FindFocus ( ) ;
2006-12-29 22:45:22 +01:00
if ( ! focus ) return ;
2006-12-24 18:42:09 +01:00
// Is the text edit
if ( focus = = EditBox - > TextEdit ) {
EditBox - > CommitText ( ) ;
SubsBox - > ass - > FlagAsModified ( ) ;
SubsBox - > CommitChanges ( ) ;
}
// Other window
else {
2006-12-29 22:45:22 +01:00
//wxKeyEvent keyevent;
//keyevent.m_keyCode = WXK_RETURN;
//keyevent.m_controlDown = true;
//keyevent.SetEventType(wxEVT_KEY_DOWN);
wxCommandEvent keyevent ( wxEVT_COMMAND_TEXT_ENTER , focus - > GetId ( ) ) ;
focus - > GetEventHandler ( ) - > AddPendingEvent ( keyevent ) ;
2006-12-24 18:42:09 +01:00
}
}
2006-01-16 22:02:54 +01:00
//////////////
// Play video
void FrameMain : : OnVideoPlay ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Play ( ) ;
}
///////////////////
// Play video line
void FrameMain : : OnVideoPlayLine ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > PlayLine ( ) ;
}
//////////////
// Stop video
void FrameMain : : OnVideoStop ( wxCommandEvent & event ) {
videoBox - > videoDisplay - > Stop ( ) ;
}
/////////////////////
// Toggle autoscroll
void FrameMain : : OnVideoToggleScroll ( wxCommandEvent & event ) {
Options . SetBool ( _T ( " Sync video with subs " ) , videoBox - > AutoScroll - > GetValue ( ) ) ;
Options . Save ( ) ;
}
///////////////////////////////
// Choose a different language
void FrameMain : : OnChooseLanguage ( wxCommandEvent & event ) {
// Get language
AegisubApp * app = ( AegisubApp * ) wxTheApp ;
int old = app - > locale . curCode ;
int newCode = app - > locale . PickLanguage ( ) ;
// Is OK?
if ( newCode ! = - 1 ) {
// Set code
Options . SetInt ( _T ( " Locale Code " ) , newCode ) ;
Options . Save ( ) ;
// Language actually changed?
if ( newCode ! = old ) {
// Ask to restart program
int result = wxMessageBox ( _T ( " Aegisub needs to be restarted so that the new language can be applied. Restart now? " ) , _T ( " Restart Aegisub? " ) , wxICON_QUESTION | wxYES_NO ) ;
if ( result = = wxYES ) {
// Restart Aegisub
if ( Close ( ) ) wxExecute ( AegisubApp : : fullPath ) ;
}
}
}
}
/////////////////
// View standard
void FrameMain : : OnViewStandard ( wxCommandEvent & event ) {
if ( ! audioBox - > audioDisplay - > loaded | | ! videoBox - > videoDisplay - > loaded ) return ;
SetDisplayMode ( 2 ) ;
}
//////////////
// View video
void FrameMain : : OnViewVideo ( wxCommandEvent & event ) {
if ( ! videoBox - > videoDisplay - > loaded ) return ;
SetDisplayMode ( 1 ) ;
}
//////////////
// View audio
void FrameMain : : OnViewAudio ( wxCommandEvent & event ) {
if ( ! audioBox - > audioDisplay - > loaded ) return ;
SetDisplayMode ( 3 ) ;
}
/////////////
// View subs
void FrameMain : : OnViewSubs ( wxCommandEvent & event ) {
SetDisplayMode ( 0 ) ;
}
2006-05-05 20:52:09 +02:00
2006-12-30 23:08:23 +01:00
////////////////////
// Medusa shortcuts
void FrameMain : : OnMedusaPlay ( wxCommandEvent & event ) {
int start = 0 , end = 0 ;
audioBox - > audioDisplay - > GetTimesSelection ( start , end ) ;
audioBox - > audioDisplay - > Play ( start , end ) ;
}
void FrameMain : : OnMedusaStop ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > Stop ( ) ;
audioBox - > audioDisplay - > Refresh ( ) ;
}
void FrameMain : : OnMedusaShiftStartForward ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > curStartMS + = 10 ;
audioBox - > audioDisplay - > Update ( ) ;
audioBox - > audioDisplay - > wxWindow : : Update ( ) ;
}
void FrameMain : : OnMedusaShiftStartBack ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > curStartMS - = 10 ;
audioBox - > audioDisplay - > Update ( ) ;
audioBox - > audioDisplay - > wxWindow : : Update ( ) ;
}
void FrameMain : : OnMedusaShiftEndForward ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > curEndMS + = 10 ;
audioBox - > audioDisplay - > Update ( ) ;
audioBox - > audioDisplay - > wxWindow : : Update ( ) ;
}
void FrameMain : : OnMedusaShiftEndBack ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > curEndMS - = 10 ;
audioBox - > audioDisplay - > Update ( ) ;
audioBox - > audioDisplay - > wxWindow : : Update ( ) ;
}
void FrameMain : : OnMedusaPlayBefore ( wxCommandEvent & event ) {
int start = 0 , end = 0 ;
audioBox - > audioDisplay - > GetTimesSelection ( start , end ) ;
audioBox - > audioDisplay - > Play ( start - 500 , start ) ;
}
void FrameMain : : OnMedusaPlayAfter ( wxCommandEvent & event ) {
int start = 0 , end = 0 ;
audioBox - > audioDisplay - > GetTimesSelection ( start , end ) ;
audioBox - > audioDisplay - > Play ( end , end + 500 ) ;
2006-05-05 20:52:09 +02:00
}