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
# 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>
2007-06-21 02:46:50 +02:00
# include <wx/stdpaths.h>
2007-07-27 09:30:33 +02:00
# include <wx/sysopt.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_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"
2007-01-13 03:22:28 +01:00
# include "dialog_kanji_timer.h"
2006-01-16 22:02:54 +01:00
# include "audio_display.h"
# include "toggle_bitmap.h"
# include "dialog_timing_processor.h"
2006-02-26 03:49:38 +01:00
# 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"
2007-12-31 07:46:22 +01:00
# ifdef WITH_AUTOMATION
2006-12-28 23:31:33 +01:00
# include "auto4_base.h"
2007-12-31 07:46:22 +01:00
# endif
2006-12-28 23:31:33 +01:00
# include "dialog_automation.h"
2007-01-07 23:54:04 +01:00
# include "dialog_version_check.h"
2007-04-02 20:28:09 +02:00
# include "dialog_dummy_video.h"
2007-04-14 03:02:21 +02:00
# include "dialog_spellchecker.h"
2007-06-19 06:04:46 +02:00
# include "dialog_associations.h"
2007-06-21 02:46:50 +02:00
# include "standard_paths.h"
2007-08-20 00:21:41 +02:00
# include "dialog_video_details.h"
2007-08-26 02:00:37 +02:00
# include "keyframe.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_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 )
2007-07-27 09:30:33 +02:00
EVT_MENU ( Menu_File_New_Window , FrameMain : : OnNewWindow )
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 )
2008-01-16 03:31:37 +01:00
EVT_MENU ( Menu_File_Save_VFR , FrameMain : : OnSaveVFR )
2006-01-16 22:02:54 +01:00
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 )
2007-01-11 06:33:36 +01:00
EVT_MENU ( Video_Frame_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 )
2007-01-23 05:42:08 +01:00
EVT_MENU ( Menu_Video_Detach , FrameMain : : OnDetachVideo )
2007-04-02 20:28:09 +02:00
EVT_MENU ( Menu_Video_Dummy , FrameMain : : OnDummyVideo )
2007-06-28 23:35:37 +02:00
EVT_MENU ( Menu_Video_Overscan , FrameMain : : OnOverscan )
2007-08-20 00:21:41 +02:00
EVT_MENU ( Menu_Video_Details , FrameMain : : OnOpenVideoDetails )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_Audio_Open_File , FrameMain : : OnOpenAudio )
EVT_MENU ( Menu_Audio_Open_From_Video , FrameMain : : OnOpenAudioFromVideo )
EVT_MENU ( Menu_Audio_Close , FrameMain : : OnCloseAudio )
2007-07-23 17:19:48 +02:00
# ifdef _DEBUG
EVT_MENU ( Menu_Audio_Open_Dummy , FrameMain : : OnOpenDummyAudio )
EVT_MENU ( Menu_Audio_Open_Dummy_Noise , FrameMain : : OnOpenDummyNoiseAudio )
# endif
2006-01-16 22:02:54 +01:00
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 )
2007-01-13 03:22:28 +01:00
EVT_MENU ( Menu_Tools_Kanji_Timer , FrameMain : : OnOpenKanjiTimer )
2006-06-19 04:51:06 +02:00
EVT_MENU ( Menu_Tools_Options , FrameMain : : OnOpenOptions )
2007-04-07 07:27:32 +02:00
EVT_MENU ( Menu_Tools_Log , FrameMain : : OnOpenLog )
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 )
2007-01-07 23:54:04 +01:00
EVT_MENU ( Menu_Help_Check_Updates , FrameMain : : OnCheckUpdates )
2006-01-16 22:02:54 +01:00
EVT_MENU ( Menu_Help_About , FrameMain : : OnAbout )
EVT_MENU ( Menu_View_Language , FrameMain : : OnChooseLanguage )
2007-06-19 06:04:46 +02:00
EVT_MENU ( Menu_View_Associations , FrameMain : : OnPickAssociations )
2006-01-16 22:02:54 +01:00
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 )
2007-07-27 10:24:49 +02:00
EVT_MENU ( Medusa_Next , FrameMain : : OnMedusaNext )
EVT_MENU ( Medusa_Prev , FrameMain : : OnMedusaPrev )
2006-12-30 23:08:23 +01:00
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 )
2007-07-27 10:24:49 +02:00
EVT_MENU ( Medusa_Enter , FrameMain : : OnMedusaEnter )
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 ) ;
}
2007-04-08 04:19:21 +02:00
///////////////////////
// Rebuild recent list
void FrameMain : : RebuildRecentList ( wxString listName , wxMenu * menu , int startID ) {
// Wipe previous list
int count = ( int ) menu - > GetMenuItemCount ( ) ;
for ( int i = count ; - - i > = 0 ; ) {
menu - > Destroy ( menu - > FindItemByPosition ( i ) ) ;
}
// Rebuild
int added = 0 ;
wxString n ;
wxArrayString entries = Options . GetRecentList ( listName ) ;
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 ( ) ;
menu - > Append ( startID + i , n + _T ( " " ) + filename ) ;
added + + ;
}
// Nothing added, add an empty placeholder
if ( added = = 0 ) menu - > Append ( startID , _ ( " Empty " ) ) - > Enable ( false ) ;
}
2006-01-16 22:02:54 +01:00
////////////////////////
// Menu is being opened
void FrameMain : : OnMenuOpen ( wxMenuEvent & event ) {
// Get menu
2007-04-08 04:19:21 +02:00
MenuBar - > Freeze ( ) ;
2006-01-16 22:02:54 +01:00
wxMenu * curMenu = event . GetMenu ( ) ;
// File menu
if ( curMenu = = fileMenu ) {
// Rebuild recent
2007-04-08 04:19:21 +02:00
RebuildRecentList ( _T ( " Recent sub " ) , RecentSubs , Menu_File_Recent ) ;
2006-01-16 22:02:54 +01:00
}
// View menu
else if ( curMenu = = viewMenu ) {
// Flags
bool aud = audioBox - > audioDisplay - > loaded ;
2007-01-21 07:30:19 +01:00
bool vid = VideoContext : : Get ( ) - > IsLoaded ( ) ;
2006-01-16 22:02:54 +01:00
// Set states
MenuBar - > Enable ( Menu_View_Audio , aud ) ;
MenuBar - > Enable ( Menu_View_Video , vid ) ;
MenuBar - > Enable ( Menu_View_Standard , aud & & vid ) ;
// Select option
2007-01-23 05:42:08 +01:00
if ( ! showVideo & & ! showAudio ) MenuBar - > Check ( Menu_View_Subs , true ) ;
else if ( showVideo & & ! showAudio ) MenuBar - > Check ( Menu_View_Video , true ) ;
2007-03-31 05:23:46 +02:00
else if ( showAudio & & showVideo ) MenuBar - > Check ( Menu_View_Standard , true ) ;
2007-01-23 05:42:08 +01:00
else MenuBar - > Check ( Menu_View_Audio , true ) ;
2006-01-16 22:02:54 +01:00
}
// Video menu
else if ( curMenu = = videoMenu ) {
2007-01-21 07:30:19 +01:00
bool state = VideoContext : : Get ( ) - > IsLoaded ( ) ;
2006-01-16 22:02:54 +01:00
// Set states
2007-04-08 04:19:21 +02:00
MenuBar - > Enable ( Menu_Video_JumpTo , state ) ;
MenuBar - > Enable ( Menu_Subs_Snap_Video_To_Start , state ) ;
MenuBar - > Enable ( Menu_Subs_Snap_Video_To_End , state ) ;
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 ) ;
2007-01-23 22:38:20 +01:00
MenuBar - > Enable ( Menu_Video_Detach , state & & ! detachedVideo ) ;
2008-01-16 03:31:37 +01:00
MenuBar - > Enable ( Menu_File_Save_VFR , VFR_Output . GetFrameRateType ( ) = = VFR ) ;
2006-12-18 03:44:38 +01:00
MenuBar - > Enable ( Menu_File_Close_VFR , VFR_Output . GetFrameRateType ( ) = = VFR ) ;
2007-01-21 07:30:19 +01:00
MenuBar - > Enable ( Menu_Video_Close_Keyframes , VideoContext : : Get ( ) - > OverKeyFramesLoaded ( ) ) ;
MenuBar - > Enable ( Menu_Video_Save_Keyframes , VideoContext : : Get ( ) - > KeyFramesLoaded ( ) ) ;
2007-08-20 00:21:41 +02:00
MenuBar - > Enable ( Menu_Video_Details , state ) ;
MenuBar - > Enable ( Menu_Video_Overscan , state ) ;
2006-01-16 22:02:54 +01:00
// Set AR radio
2007-01-23 07:32:16 +01:00
int arType = VideoContext : : Get ( ) - > GetAspectRatioType ( ) ;
2006-05-16 01:44:53 +02:00
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
2007-06-28 23:35:37 +02:00
// Set overscan mask
MenuBar - > Check ( Menu_Video_Overscan , Options . AsBool ( _T ( " Show Overscan Mask " ) ) ) ;
2007-04-08 04:19:21 +02:00
// Rebuild recent lists
RebuildRecentList ( _T ( " Recent vid " ) , RecentVids , Menu_Video_Recent ) ;
RebuildRecentList ( _T ( " Recent timecodes " ) , RecentTimecodes , Menu_Timecodes_Recent ) ;
RebuildRecentList ( _T ( " Recent Keyframes " ) , RecentKeyframes , Menu_Keyframes_Recent ) ;
2006-01-16 22:02:54 +01:00
}
// Audio menu
else if ( curMenu = = audioMenu ) {
bool state = audioBox - > loaded ;
2007-01-21 07:30:19 +01:00
bool vidstate = VideoContext : : Get ( ) - > IsLoaded ( ) ;
2006-01-16 22:02:54 +01:00
MenuBar - > Enable ( Menu_Audio_Open_From_Video , vidstate ) ;
MenuBar - > Enable ( Menu_Audio_Close , state ) ;
// Rebuild recent
2007-04-08 04:19:21 +02:00
RebuildRecentList ( _T ( " Recent aud " ) , RecentAuds , Menu_Audio_Recent ) ;
2006-01-16 22:02:54 +01:00
}
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 ) ;
2007-04-08 04:19:21 +02:00
MenuBar - > Enable ( MENU_DELETE , state ) ;
2007-01-21 07:30:19 +01:00
state2 = count > 0 & & VideoContext : : Get ( ) - > IsLoaded ( ) ;
2006-12-27 21:35:50 +01:00
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
2007-01-21 07:30:19 +01:00
bool state = VideoContext : : Get ( ) - > IsLoaded ( ) ;
2007-04-08 04:19:21 +02:00
MenuBar - > Enable ( Menu_Subs_Snap_Start_To_Video , state ) ;
MenuBar - > Enable ( Menu_Subs_Snap_End_To_Video , state ) ;
MenuBar - > Enable ( Menu_Video_Snap_To_Scene , state ) ;
MenuBar - > Enable ( Menu_Video_Shift_To_Frame , 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
2007-04-08 04:41:40 +02:00
editMenu - > Remove ( Menu_Edit_Undo ) ;
editMenu - > Remove ( Menu_Edit_Redo ) ;
2007-07-05 17:51:42 +02:00
AppendBitmapMenuItem ( editMenu , Menu_Edit_Undo , wxString : : Format ( _T ( " %s %s \t %s " ) , _ ( " &Undo " ) , AssFile : : GetUndoDescription ( ) . c_str ( ) , Hotkeys . GetText ( _T ( " Undo " ) ) . c_str ( ) ) , _ ( " Undoes last action " ) , wxBITMAP ( undo_button ) , 0 ) - > Enable ( ! AssFile : : IsUndoStackEmpty ( ) ) ;
AppendBitmapMenuItem ( editMenu , Menu_Edit_Redo , wxString : : Format ( _T ( " %s %s \t %s " ) , _ ( " &Redo " ) , AssFile : : GetRedoDescription ( ) . c_str ( ) , Hotkeys . GetText ( _T ( " Redo " ) ) . c_str ( ) ) , _ ( " Redoes last action " ) , wxBITMAP ( redo_button ) , 1 ) - > Enable ( ! AssFile : : IsRedoStackEmpty ( ) ) ;
2007-01-26 01:47:42 +01:00
2006-01-16 22:02:54 +01:00
// Copy/cut/paste
wxArrayInt sels = SubsBox - > GetSelection ( ) ;
bool state = ( sels . Count ( ) > 0 ) ;
2007-04-08 04:19:21 +02:00
MenuBar - > Enable ( Menu_Edit_Cut , state ) ;
MenuBar - > Enable ( Menu_Edit_Copy , state ) ;
MenuBar - > Enable ( Menu_Edit_Paste , 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
2007-12-31 07:46:22 +01:00
# ifdef WITH_AUTOMATION
2006-12-28 23:31:33 +01:00
else if ( curMenu = = automationMenu ) {
2007-01-05 20:52:39 +01:00
// Remove old macro items
for ( unsigned int i = 0 ; i < activeMacroItems . size ( ) ; i + + ) {
wxMenu * p = 0 ;
wxMenuItem * it = MenuBar - > FindItem ( Menu_Automation_Macro + i , & p ) ;
if ( it )
p - > Delete ( it ) ;
}
activeMacroItems . clear ( ) ;
// Add new ones
int added = 0 ;
added + = AddMacroMenuItems ( automationMenu , wxGetApp ( ) . global_scripts - > GetMacros ( ) ) ;
added + = AddMacroMenuItems ( automationMenu , local_scripts - > GetMacros ( ) ) ;
// If none were added, show a ghosted notice
if ( added = = 0 ) {
automationMenu - > Append ( Menu_Automation_Macro , _ ( " No Automation macros loaded " ) ) - > Enable ( false ) ;
activeMacroItems . push_back ( 0 ) ;
}
2006-12-28 23:31:33 +01:00
}
2007-12-31 07:46:22 +01:00
# endif
2006-12-28 23:31:33 +01:00
2007-04-08 04:19:21 +02:00
MenuBar - > Thaw ( ) ;
2006-01-16 22:02:54 +01:00
}
2006-12-28 23:31:33 +01:00
//////////////////////////////
// Macro menu creation helper
2007-01-05 20:52:39 +01:00
int FrameMain : : AddMacroMenuItems ( wxMenu * menu , const std : : vector < Automation4 : : FeatureMacro * > & macros ) {
2007-12-31 07:46:22 +01:00
# ifdef WITH_AUTOMATION
2006-12-28 23:31:33 +01:00
if ( macros . empty ( ) ) {
2007-01-05 20:52:39 +01:00
return 0 ;
2006-12-28 23:31:33 +01:00
}
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 + + ;
}
2007-01-05 20:52:39 +01:00
return macros . size ( ) ;
2007-12-31 07:46:22 +01:00
# else
return 0 ;
# endif
2006-12-28 23:31:33 +01:00
}
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 ) ;
2007-08-26 02:00:37 +02:00
KeyFrameFile : : Load ( Options . AsText ( key ) ) ;
videoBox - > videoSlider - > Refresh ( ) ;
audioBox - > audioDisplay - > Update ( ) ;
Refresh ( ) ;
2006-12-18 18:18:14 +01:00
}
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 ) ) ;
}
2007-07-27 09:30:33 +02:00
///////////////////
// Open new Window
void FrameMain : : OnNewWindow ( wxCommandEvent & WXUNUSED ( event ) ) {
wxStandardPaths stand ;
wxExecute ( stand . GetExecutablePath ( ) ) ;
}
2006-01-16 22:02:54 +01:00
////////
// 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 ( ) ;
}
2007-01-07 23:54:04 +01:00
//////////////////////
// Open check updates
void FrameMain : : OnCheckUpdates ( wxCommandEvent & event ) {
DialogVersionCheck * check = new DialogVersionCheck ( this , false ) ;
2007-01-24 04:54:32 +01:00
( void ) check ;
2007-01-07 23:54:04 +01:00
}
2006-01-16 22:02:54 +01:00
////////////////////
// Open help topics
void FrameMain : : OnContents ( wxCommandEvent & WXUNUSED ( event ) ) {
OpenHelp ( _T ( " " ) ) ;
}
////////////////
// Open website
void FrameMain : : OnWebsite ( wxCommandEvent & WXUNUSED ( event ) ) {
2008-01-16 17:11:48 +01:00
AegisubApp : : OpenURL ( _T ( " http://www.aegisub.net/ " ) ) ;
2006-02-23 20:26:14 +01:00
}
///////////////
// Open forums
void FrameMain : : OnForums ( wxCommandEvent & WXUNUSED ( event ) ) {
2008-01-16 17:11:48 +01:00
AegisubApp : : OpenURL ( _T ( " http://forum.aegisub.net/ " ) ) ;
2006-02-23 20:26:14 +01:00
}
///////////////////
// Open bugtracker
void FrameMain : : OnBugTracker ( wxCommandEvent & WXUNUSED ( event ) ) {
2008-01-16 17:11:48 +01:00
AegisubApp : : OpenURL ( _T ( " http://bugs.aegisub.net/ " ) ) ;
2006-01-16 22:02:54 +01:00
}
////////////////////
// Open IRC channel
void FrameMain : : OnIRCChannel ( wxCommandEvent & WXUNUSED ( event ) ) {
2008-01-14 00:36:38 +01:00
AegisubApp : : OpenURL ( _T ( " irc://irc.rizon.net/aegisub " ) ) ;
2006-01-16 22:02:54 +01:00
}
2007-01-11 06:33:36 +01:00
//////////////
// Play video
void FrameMain : : OnVideoPlay ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Play ( ) ;
2007-01-11 06:33:36 +01:00
}
2006-01-16 22:02:54 +01:00
//////////////
// 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 " ) ) ;
2008-01-17 21:30:44 +01:00
wxString str = wxString ( _ ( " Recommended Formats " ) ) + _T ( " (*.avi,*.avs,*.d2v)|*.avi;*.avs;*.d2v| " )
+ _ ( " Other supported formats " ) + _T ( " (*.mkv,*.ogm,*.mp4,*.mpeg,*.mpg,*.vob)|*.mkv;*.ogm;*.mp4;*.mpeg;*.mpg;*.vob| " )
+ _ ( " All Files " ) + _T ( " (*.*)|*.* " ) ;
wxString filename = wxFileSelector ( _ ( " Open video file " ) , path , _T ( " " ) , _T ( " " ) , str , wxFD_OPEN | wxFD_FILE_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 " ) ) ;
2008-01-17 21:30:44 +01:00
wxString str = wxString ( _ ( " Audio Formats " ) ) + _T ( " (*.wav,*.mp3,*.ogg,*.flac,*.mp4,*.ac3,*.aac,*.mka,*.m4a)|*.wav;*.mp3;*.ogg;*.flac;*.mp4;*.ac3;*.aac;*.mka;*.m4a| " )
+ _ ( " Video Formats " ) + _T ( " (*.avi,*.mkv,*.ogm,*.mpg,*.mpeg)|*.avi;*.mkv;*.ogm;*.mp4;*.mpeg;*.mpg| " )
+ _ ( " All files " ) + _T ( " (*.*)|*.* " ) ;
wxString filename = wxFileSelector ( _ ( " Open audio file " ) , path , _T ( " " ) , _T ( " " ) , str , wxFD_OPEN | wxFD_FILE_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 ( " " ) ) ;
}
2007-07-23 17:19:48 +02:00
# ifdef _DEBUG
void FrameMain : : OnOpenDummyAudio ( wxCommandEvent & WXUNUSED ( event ) ) {
LoadAudio ( _T ( " ?dummy " ) ) ;
}
void FrameMain : : OnOpenDummyNoiseAudio ( wxCommandEvent & WXUNUSED ( event ) ) {
LoadAudio ( _T ( " ?noise " ) ) ;
}
# endif
2006-01-16 22:02:54 +01:00
//////////////////
// 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 " ) ) ;
2007-01-22 20:31:49 +01:00
wxString filename = wxFileSelector ( _ ( " Open subtitles file " ) , path , _T ( " " ) , _T ( " " ) , AssFile : : GetWildcardList ( 0 ) , wxFD_OPEN | wxFD_FILE_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
2007-01-22 20:31:49 +01:00
wxString filename = wxFileSelector ( _ ( " Open subtitles file " ) , path , _T ( " " ) , _T ( " " ) , AssFile : : GetWildcardList ( 0 ) , wxFD_OPEN | wxFD_FILE_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 ) ) {
2007-12-31 07:46:22 +01:00
# ifdef WITH_AUTOMATION
2007-01-19 12:47:37 +01:00
int autoreload = Options . AsInt ( _T ( " Automation Autoreload Mode " ) ) ;
if ( autoreload & 1 ) {
// Local scripts
const std : : vector < Automation4 : : Script * > scripts = local_scripts - > GetScripts ( ) ;
for ( size_t i = 0 ; i < scripts . size ( ) ; + + i ) {
try {
scripts [ i ] - > Reload ( ) ;
}
catch ( const wchar_t * e ) {
2007-07-18 15:49:44 +02:00
wxLogError ( _T ( " Error while reloading Automation scripts before export: %s " ) , e ) ;
2007-01-19 12:47:37 +01:00
}
catch ( . . . ) {
wxLogError ( _T ( " An unknown error occurred reloading Automation script '%s'. " ) , scripts [ i ] - > GetName ( ) . c_str ( ) ) ;
}
}
}
2007-06-30 21:21:06 +02:00
if ( autoreload & 2 ) {
2007-01-19 12:47:37 +01:00
// Global scripts
wxGetApp ( ) . global_scripts - > Reload ( ) ;
}
2007-12-31 07:46:22 +01:00
# endif
2007-01-19 12:47:37 +01:00
2006-01-16 22:02:54 +01:00
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 " ) ) ;
2008-01-17 21:30:44 +01:00
wxString str = wxString ( _ ( " All Supported Types " ) ) + _T ( " (*.txt)|*.txt| " )
+ _ ( " All Files " ) + _T ( " (*.*)|*.* " ) ;
wxString filename = wxFileSelector ( _ ( " Open timecodes file " ) , path , _T ( " " ) , _T ( " " ) , str , wxFD_OPEN | wxFD_FILE_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
}
}
2008-01-16 03:31:37 +01:00
/////////////////
// Save VFR tags
void FrameMain : : OnSaveVFR ( wxCommandEvent & event ) {
wxString path = Options . AsText ( _T ( " Last open timecodes path " ) ) ;
2008-01-17 21:30:44 +01:00
wxString str = wxString ( _ ( " All Supported Types " ) ) + _T ( " (*.txt)|*.txt| " )
+ _ ( " All Files " ) + _T ( " (*.*)|*.* " ) ;
wxString filename = wxFileSelector ( _ ( " Save timecodes file " ) , path , _T ( " " ) , _T ( " " ) , str , wxFD_SAVE | wxFD_OVERWRITE_PROMPT ) ;
2008-01-16 03:31:37 +01:00
if ( ! filename . empty ( ) ) {
SaveVFR ( filename ) ;
Options . SetText ( _T ( " Last open timecodes path " ) , filename ) ;
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 " ) ) ;
2007-08-26 02:00:37 +02:00
wxString filename = wxFileSelector ( _T ( " Select the keyframes file to open " ) , path , _T ( " " ) , _T ( " .txt " ) , _T ( " All supported formats (*.txt, *.pass)|*.txt;*.pass|All files (*.*)|*.* " ) , wxFD_FILE_MUST_EXIST | wxFD_OPEN ) ;
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
2007-08-26 02:00:37 +02:00
KeyFrameFile : : Load ( filename ) ;
videoBox - > videoSlider - > Refresh ( ) ;
audioBox - > audioDisplay - > Update ( ) ;
Refresh ( ) ;
2006-12-18 03:44:38 +01:00
}
///////////////////
// Close keyframes
void FrameMain : : OnCloseKeyframes ( wxCommandEvent & event ) {
2007-08-26 02:00:37 +02:00
VideoContext : : Get ( ) - > CloseOverKeyFrames ( ) ;
videoBox - > videoSlider - > Refresh ( ) ;
audioBox - > audioDisplay - > Update ( ) ;
Refresh ( ) ;
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 " ) ) ;
2007-01-22 20:31:49 +01:00
wxString filename = wxFileSelector ( _T ( " Select the Keyframes file to open " ) , path , _T ( " " ) , _T ( " *.key.txt " ) , _T ( " Text files (*.txt)|*.txt " ) , wxFD_OVERWRITE_PROMPT | wxFD_SAVE ) ;
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
2007-08-26 02:00:37 +02:00
KeyFrameFile : : Save ( 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 ) ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
videoBox - > videoDisplay - > zoomBox - > SetSelection ( 3 ) ;
videoBox - > videoDisplay - > SetZoomPos ( 3 ) ;
}
void FrameMain : : OnSetZoom100 ( wxCommandEvent & WXUNUSED ( event ) ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
videoBox - > videoDisplay - > zoomBox - > SetSelection ( 7 ) ;
videoBox - > videoDisplay - > SetZoomPos ( 7 ) ;
}
void FrameMain : : OnSetZoom200 ( wxCommandEvent & WXUNUSED ( event ) ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
videoBox - > videoDisplay - > zoomBox - > SetSelection ( 15 ) ;
videoBox - > videoDisplay - > SetZoomPos ( 15 ) ;
}
void FrameMain : : OnZoomIn ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
videoBox - > videoDisplay - > zoomBox - > SetSelection ( videoBox - > videoDisplay - > zoomBox - > GetSelection ( ) + 1 ) ;
videoBox - > videoDisplay - > SetZoomPos ( videoBox - > videoDisplay - > zoomBox - > GetSelection ( ) ) ;
}
void FrameMain : : OnZoomOut ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
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 ( videoBox - > videoDisplay - > zoomBox - > GetSelection ( ) ) ;
}
2007-01-23 05:42:08 +01:00
////////////////
// Detach video
void FrameMain : : OnDetachVideo ( wxCommandEvent & event ) {
2008-01-12 04:09:48 +01:00
DetachVideo ( ) ;
2007-01-23 05:42:08 +01:00
}
2007-04-02 20:28:09 +02:00
///////////////////
// Use dummy video
void FrameMain : : OnDummyVideo ( wxCommandEvent & event ) {
wxString fn ;
if ( DialogDummyVideo : : CreateDummyVideo ( this , fn ) ) {
LoadVideo ( fn ) ;
}
}
2007-06-28 23:35:37 +02:00
///////////////////
// Overscan toggle
void FrameMain : : OnOverscan ( wxCommandEvent & event ) {
Options . SetBool ( _T ( " Show overscan mask " ) , event . IsChecked ( ) ) ;
Options . Save ( ) ;
VideoContext : : Get ( ) - > Stop ( ) ;
videoBox - > videoDisplay - > Render ( ) ;
}
2007-08-20 00:21:41 +02:00
//////////////////////
// Show video details
void FrameMain : : OnOpenVideoDetails ( wxCommandEvent & event ) {
VideoContext : : Get ( ) - > Stop ( ) ;
DialogVideoDetails videodetails ( this ) ;
videodetails . ShowModal ( ) ;
}
2006-01-16 22:02:54 +01:00
///////////////////////
// Open jump to dialog
void FrameMain : : OnJumpTo ( wxCommandEvent & WXUNUSED ( event ) ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
if ( VideoContext : : Get ( ) - > IsLoaded ( ) ) {
2007-01-21 18:01:22 +01:00
DialogJumpTo JumpTo ( this ) ;
2006-01-16 22:02:54 +01:00
JumpTo . ShowModal ( ) ;
videoBox - > videoSlider - > SetFocus ( ) ;
}
}
/////////////////////
// Open shift dialog
void FrameMain : : OnShift ( wxCommandEvent & WXUNUSED ( event ) ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2007-01-21 18:01:22 +01:00
DialogShiftTimes Shift ( this , SubsBox ) ;
2006-01-16 22:02:54 +01:00
Shift . ShowModal ( ) ;
}
///////////////////
// Open properties
void FrameMain : : OnOpenProperties ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2007-01-21 18:01:22 +01:00
DialogProperties Properties ( this ) ;
2006-01-16 22:02:54 +01:00
int res = Properties . ShowModal ( ) ;
if ( res ) {
SubsBox - > CommitChanges ( ) ;
}
}
///////////////////////
// Open styles manager
void FrameMain : : OnOpenStylesManager ( wxCommandEvent & WXUNUSED ( event ) ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
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 ) ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-07-01 04:27:37 +02:00
DialogAttachments attachments ( this ) ;
attachments . ShowModal ( ) ;
}
2006-01-16 22:02:54 +01:00
//////////////////////////////
// Open translation assistant
void FrameMain : : OnOpenTranslation ( wxCommandEvent & WXUNUSED ( event ) ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
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 ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2007-04-14 18:08:50 +02:00
new DialogSpellChecker ( this ) ;
//DialogSpellChecker *spell =
2007-04-14 17:26:46 +02:00
//spell->ShowModal();
2006-01-16 22:02:54 +01:00
}
////////////////////////
// Open Fonts Collector
void FrameMain : : OnOpenFontsCollector ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
DialogFontsCollector Collector ( this ) ;
Collector . ShowModal ( ) ;
}
/////////////////////////////
// Open Resolution Resampler
void FrameMain : : OnOpenResample ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
DialogResample diag ( this , SubsBox ) ;
diag . ShowModal ( ) ;
}
/////////////////////////////////////
// Open Timing post-processor dialog
void FrameMain : : OnOpenTimingProcessor ( wxCommandEvent & event ) {
DialogTimingProcessor timing ( this , SubsBox ) ;
timing . ShowModal ( ) ;
}
2007-01-13 03:22:28 +01:00
/////////////////////////////////////
// Open Kanji Timer dialog
void FrameMain : : OnOpenKanjiTimer ( wxCommandEvent & event ) {
DialogKanjiTimer kanjitimer ( this , SubsBox ) ;
kanjitimer . ShowModal ( ) ;
}
2006-01-16 22:02:54 +01:00
2006-06-19 04:51:06 +02:00
///////////////////////
// Open Options dialog
void FrameMain : : OnOpenOptions ( wxCommandEvent & event ) {
2007-09-12 01:22:26 +02:00
try {
DialogOptions options ( this ) ;
options . ShowModal ( ) ;
}
catch ( const wxChar * e ) {
wxLogError ( e ) ;
}
2006-06-19 04:51:06 +02:00
}
2007-04-07 07:27:32 +02:00
//////////////////
// Open log window
void FrameMain : : OnOpenLog ( wxCommandEvent & event ) {
LogWindow - > Show ( true ) ;
}
2006-01-16 22:02:54 +01:00
///////////////////
// Open Automation
void FrameMain : : OnOpenAutomation ( wxCommandEvent & event ) {
2007-12-31 07:46:22 +01:00
# ifdef WITH_AUTOMATION
2007-09-22 00:56:44 +02:00
# ifdef __APPLE__
if ( wxGetMouseState ( ) . CmdDown ( ) ) {
# else
2007-06-30 21:21:06 +02:00
if ( wxGetMouseState ( ) . ControlDown ( ) ) {
2007-09-22 00:56:44 +02:00
# endif
2007-06-30 21:21:06 +02:00
wxGetApp ( ) . global_scripts - > Reload ( ) ;
if ( wxGetMouseState ( ) . ShiftDown ( ) ) {
const std : : vector < Automation4 : : Script * > scripts = local_scripts - > GetScripts ( ) ;
for ( size_t i = 0 ; i < scripts . size ( ) ; + + i ) {
try {
scripts [ i ] - > Reload ( ) ;
}
catch ( const wchar_t * e ) {
wxLogError ( e ) ;
}
catch ( . . . ) {
wxLogError ( _T ( " An unknown error occurred reloading Automation script '%s'. " ) , scripts [ i ] - > GetName ( ) . c_str ( ) ) ;
}
}
StatusTimeout ( _ ( " Reloaded all Automation scripts " ) ) ;
}
else {
StatusTimeout ( _ ( " Reloaded autoload Automation scripts " ) ) ;
}
}
else {
VideoContext : : Get ( ) - > Stop ( ) ;
DialogAutomation dlg ( this , local_scripts ) ;
dlg . ShowModal ( ) ;
}
2007-12-31 07:46:22 +01:00
# endif
2006-12-28 23:31:33 +01:00
}
///////////////////////////////////////////////////////////
// General handler for all Automation-generated menu items
void FrameMain : : OnAutomationMacro ( wxCommandEvent & event ) {
2007-12-31 07:46:22 +01:00
# ifdef WITH_AUTOMATION
2007-04-12 20:27:14 +02:00
SubsBox - > BeginBatch ( ) ;
// First get selection data
// This much be done before clearing the maps, since selection data are lost during that
std : : vector < int > selected_lines = SubsBox - > GetAbsoluteSelection ( ) ;
int first_sel = SubsBox - > GetFirstSelRow ( ) ;
2007-02-20 03:50:40 +01:00
// Clear all maps from the subs grid before running the macro
// The stuff done by the macro might invalidate some of the iterators held by the grid, which will cause great crashing
SubsBox - > Clear ( ) ;
// Run the macro...
2007-04-12 20:27:14 +02:00
activeMacroItems [ event . GetId ( ) - Menu_Automation_Macro ] - > Process ( SubsBox - > ass , selected_lines , first_sel , this ) ;
2007-02-20 03:50:40 +01:00
// Have the grid update its maps, this properly refreshes it to reflect the changed subs
SubsBox - > UpdateMaps ( ) ;
2007-07-06 16:26:04 +02:00
SubsBox - > SetSelectionFromAbsolute ( selected_lines ) ;
2007-07-01 02:59:26 +02:00
SubsBox - > CommitChanges ( true , false ) ;
2007-08-24 01:09:46 +02:00
SubsBox - > EndBatch ( ) ;
2007-12-31 07:46:22 +01:00
# endif
2006-01-16 22:02:54 +01:00
}
//////////////////////
// Snap subs to video
void FrameMain : : OnSnapSubsStartToVid ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
if ( VideoContext : : Get ( ) - > IsLoaded ( ) ) {
2006-01-16 22:02:54 +01:00
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 ) {
2007-01-21 07:30:19 +01:00
if ( VideoContext : : Get ( ) - > IsLoaded ( ) ) {
2006-01-16 22:02:54 +01:00
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 ) {
2007-01-21 07:30:19 +01:00
if ( VideoContext : : Get ( ) - > IsLoaded ( ) ) {
2006-01-16 22:02:54 +01:00
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 ) {
2007-01-21 07:30:19 +01:00
if ( VideoContext : : Get ( ) - > IsLoaded ( ) ) {
2006-01-16 22:02:54 +01:00
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 ) {
2007-01-21 07:30:19 +01:00
if ( VideoContext : : Get ( ) - > IsLoaded ( ) ) {
2006-01-16 22:02:54 +01:00
// Get frames
wxArrayInt sel = SubsBox - > GetSelection ( ) ;
2007-01-21 07:30:19 +01:00
int curFrame = VideoContext : : Get ( ) - > GetFrameN ( ) ;
2006-01-16 22:02:54 +01:00
int prev = 0 ;
int next = 0 ;
int frame = 0 ;
2007-01-21 07:30:19 +01:00
wxArrayInt keyframes = VideoContext : : Get ( ) - > GetKeyFrames ( ) ;
2006-12-18 05:53:40 +01:00
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 ] ;
2007-01-21 07:30:19 +01:00
else next = VideoContext : : Get ( ) - > GetLength ( ) ;
2006-01-16 22:02:54 +01:00
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 ;
2007-01-21 07:30:19 +01:00
next = VideoContext : : Get ( ) - > GetLength ( ) ;
2006-01-16 22:02:54 +01:00
}
// 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
2007-06-28 23:08:07 +02:00
SubsBox - > editBox - > Update ( ) ;
2007-01-26 01:47:42 +01:00
SubsBox - > ass - > FlagAsModified ( _ ( " snap to scene " ) ) ;
2006-01-16 22:02:54 +01:00
SubsBox - > CommitChanges ( ) ;
}
}
//////////////////
// Shift to frame
void FrameMain : : OnShiftToFrame ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
if ( VideoContext : : Get ( ) - > IsLoaded ( ) ) {
2006-01-16 22:02:54 +01:00
// 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 ;
2007-01-21 07:30:19 +01:00
int shiftBy = VFR_Output . GetTimeAtFrame ( VideoContext : : Get ( ) - > GetFrameN ( ) , 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
2007-01-26 01:47:42 +01:00
SubsBox - > ass - > FlagAsModified ( _ ( " shift to frame " ) ) ;
2006-01-16 22:02:54 +01:00
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;
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
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 ) ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-02-20 22:32:58 +01:00
AssFile : : StackRedo ( ) ;
SubsBox - > LoadFromAss ( AssFile : : top , true ) ;
AssFile : : Popping = false ;
}
2006-01-16 22:02:54 +01:00
////////
// Find
void FrameMain : : OnFind ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
Search . OpenDialog ( false ) ;
}
/////////////
// Find next
void FrameMain : : OnFindNext ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
Search . FindNext ( ) ;
}
//////////////////
// Find & replace
void FrameMain : : OnReplace ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
Search . OpenDialog ( true ) ;
}
//////////////////////////////////
// Change aspect ratio to default
void FrameMain : : OnSetARDefault ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2007-01-23 07:32:16 +01:00
VideoContext : : Get ( ) - > SetAspectRatio ( 0 ) ;
2007-04-13 03:46:50 +02:00
SetDisplayMode ( - 1 , - 2 ) ;
2006-01-16 22:02:54 +01:00
}
/////////////////////////////////////
// Change aspect ratio to fullscreen
void FrameMain : : OnSetARFull ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2007-01-23 07:32:16 +01:00
VideoContext : : Get ( ) - > SetAspectRatio ( 1 ) ;
2007-04-13 03:46:50 +02:00
SetDisplayMode ( - 1 , - 2 ) ;
2006-01-16 22:02:54 +01:00
}
/////////////////////////////////////
// Change aspect ratio to widescreen
void FrameMain : : OnSetARWide ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2007-01-23 07:32:16 +01:00
VideoContext : : Get ( ) - > SetAspectRatio ( 2 ) ;
2007-04-13 03:46:50 +02:00
SetDisplayMode ( - 1 , - 2 ) ;
2006-01-16 22:02:54 +01:00
}
2006-05-16 01:44:53 +02:00
///////////////////////////////
// Change aspect ratio to 2:35
void FrameMain : : OnSetAR235 ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2007-01-23 07:32:16 +01:00
VideoContext : : Get ( ) - > SetAspectRatio ( 3 ) ;
2007-04-13 03:46:50 +02:00
SetDisplayMode ( - 1 , - 2 ) ;
2006-05-16 01:44:53 +02:00
}
/////////////////////////////////////////
// Change aspect ratio to a custom value
void FrameMain : : OnSetARCustom ( wxCommandEvent & event ) {
// Get text
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-06-22 01:07:03 +02:00
2007-01-23 07:32:16 +01: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 ( VideoContext : : Get ( ) - > GetAspectRatioValue ( ) ) ) ;
2006-06-22 01:07:03 +02:00
if ( value . IsEmpty ( ) ) return ;
2007-01-13 09:34:42 +01:00
2006-06-22 01:07:03 +02:00
value . MakeLower ( ) ;
2006-05-16 01:44:53 +02:00
// Process text
2007-01-15 00:34:27 +01:00
double numval ;
2007-01-13 09:34:42 +01:00
if ( value . ToDouble ( & numval ) ) {
//Nothing to see here, move along
2006-05-16 01:44:53 +02:00
}
2007-01-13 09:34:42 +01:00
else {
double a , b ;
int pos = 0 ;
bool scale = false ;
//Why bloat using Contains when we can just check the output of Find?
pos = value . Find ( ' : ' ) ;
if ( pos = = wxNOT_FOUND ) pos = value . Find ( ' / ' ) ;
if ( pos = = wxNOT_FOUND & & value . Contains ( _T ( ' x ' ) ) ) {
pos = value . Find ( ' x ' ) ;
scale = true ;
}
if ( pos > 0 ) {
wxString num = value . Left ( pos ) ;
wxString denum = value . Mid ( pos + 1 ) ;
if ( num . ToDouble ( & a ) & & denum . ToDouble ( & b ) & & b ! = 0 ) {
numval = a / b ;
2007-01-21 07:30:19 +01:00
if ( scale ) videoBox - > videoDisplay - > SetZoom ( b / VideoContext : : Get ( ) - > GetHeight ( ) ) ;
2006-06-22 01:07:03 +02:00
}
}
2007-01-15 00:34:27 +01:00
else numval = 0.0 ;
2006-06-22 01:07:03 +02:00
}
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 {
2007-01-23 07:32:16 +01:00
VideoContext : : Get ( ) - > SetAspectRatio ( 4 , numval ) ;
2007-01-23 05:42:08 +01:00
SetDisplayMode ( - 1 , - 1 ) ;
2006-05-16 01:44:53 +02:00
}
}
2006-01-16 22:02:54 +01:00
////////////////////////////////////
// Window is attempted to be closed
void FrameMain : : OnCloseWindow ( wxCloseEvent & event ) {
// Stop audio and video
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
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 ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
SubsBox - > SelectVisible ( ) ;
}
//////////////////////
// Open select dialog
void FrameMain : : OnSelect ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
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 > ( ) ) ;
2007-01-26 01:47:42 +01:00
AssFile : : top - > FlagAsModified ( _ ( " sort " ) ) ;
2006-07-07 00:55:05 +02:00
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 ) {
2007-01-21 07:30:19 +01:00
VideoContext : : Get ( ) - > Stop ( ) ;
2006-01-16 22:02:54 +01:00
DialogStyling styling ( this , SubsBox ) ;
styling . ShowModal ( ) ;
}
///////////////
// Auto backup
void FrameMain : : OnAutoSave ( wxTimerEvent & event ) {
// Auto Save
2006-02-19 05:00:22 +01:00
try {
2007-04-18 03:59:50 +02:00
if ( AssFile : : top - > loaded ) {
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 ) ;
2007-06-21 02:46:50 +02:00
if ( ! dstpath . IsAbsolute ( ) ) path = StandardPaths : : DecodePath ( _T ( " ?user/ " ) + path ) ;
2006-02-19 05:00:22 +01:00
path + = _T ( " / " ) ;
dstpath . Assign ( path ) ;
if ( ! dstpath . DirExists ( ) ) wxMkdir ( path ) ;
// Save
2007-10-22 22:47:57 +02:00
wxString name = origfile . GetName ( ) ;
2007-10-30 21:40:10 +01:00
wxString backup = path ;
if ( name . IsEmpty ( ) ) backup + = _T ( " Untitled.AUTOSAVE.ass " ) ;
else backup + = origfile . GetName ( ) + _T ( " .AUTOSAVE.ass " ) ;
2006-02-19 05:00:22 +01:00
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
2007-01-12 06:57:45 +01:00
wxString message = _ ( " ASS Override Tag mode set to " ) ;
if ( tagMode = = 0 ) message + = _ ( " show full tags. " ) ;
if ( tagMode = = 1 ) message + = _ ( " simplify tags. " ) ;
if ( tagMode = = 2 ) message + = _ ( " hide tags. " ) ;
2006-01-16 22:02:54 +01:00
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 ( ) ;
2007-01-26 01:47:42 +01:00
SubsBox - > ass - > FlagAsModified ( _ ( " editing " ) ) ;
2006-12-24 18:42:09 +01:00
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
///////////////////////////////
// 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
2007-06-21 02:46:50 +02:00
if ( Close ( ) ) {
wxStandardPaths stand ;
wxExecute ( stand . GetExecutablePath ( ) ) ;
}
2006-01-16 22:02:54 +01:00
}
}
}
}
2007-06-19 06:04:46 +02:00
/////////////////////
// Pick associations
void FrameMain : : OnPickAssociations ( wxCommandEvent & event ) {
2007-06-21 23:14:31 +02:00
# ifdef WIN32
2007-06-19 06:04:46 +02:00
DialogAssociations diag ( NULL ) ;
diag . ShowModal ( ) ;
2007-06-21 23:14:31 +02:00
# endif
2007-06-19 06:04:46 +02:00
}
2006-01-16 22:02:54 +01:00
/////////////////
// View standard
void FrameMain : : OnViewStandard ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
if ( ! audioBox - > audioDisplay - > loaded | | ! VideoContext : : Get ( ) - > IsLoaded ( ) ) return ;
2007-01-23 05:42:08 +01:00
SetDisplayMode ( 1 , 1 ) ;
2006-01-16 22:02:54 +01:00
}
//////////////
// View video
void FrameMain : : OnViewVideo ( wxCommandEvent & event ) {
2007-01-21 07:30:19 +01:00
if ( ! VideoContext : : Get ( ) - > IsLoaded ( ) ) return ;
2007-01-23 05:42:08 +01:00
SetDisplayMode ( 1 , 0 ) ;
2006-01-16 22:02:54 +01:00
}
//////////////
// View audio
void FrameMain : : OnViewAudio ( wxCommandEvent & event ) {
if ( ! audioBox - > audioDisplay - > loaded ) return ;
2007-01-23 05:42:08 +01:00
SetDisplayMode ( 0 , 1 ) ;
2006-01-16 22:02:54 +01:00
}
/////////////
// View subs
void FrameMain : : OnViewSubs ( wxCommandEvent & event ) {
2007-01-23 05:42:08 +01:00
SetDisplayMode ( 0 , 0 ) ;
2006-01-16 22:02:54 +01:00
}
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 ) {
2007-07-27 10:24:49 +02:00
// Playing, stop
if ( audioBox - > audioDisplay - > player - > IsPlaying ( ) ) {
audioBox - > audioDisplay - > Stop ( ) ;
audioBox - > audioDisplay - > Refresh ( ) ;
}
// Otherwise, play the last 500 ms
else {
int start = 0 , end = 0 ;
audioBox - > audioDisplay - > GetTimesSelection ( start , end ) ;
audioBox - > audioDisplay - > Play ( end - 500 , end ) ;
}
2006-12-30 23:08:23 +01:00
}
void FrameMain : : OnMedusaShiftStartForward ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > curStartMS + = 10 ;
audioBox - > audioDisplay - > Update ( ) ;
audioBox - > audioDisplay - > wxWindow : : Update ( ) ;
2007-07-27 10:24:49 +02:00
audioBox - > audioDisplay - > UpdateTimeEditCtrls ( ) ;
2006-12-30 23:08:23 +01:00
}
void FrameMain : : OnMedusaShiftStartBack ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > curStartMS - = 10 ;
audioBox - > audioDisplay - > Update ( ) ;
audioBox - > audioDisplay - > wxWindow : : Update ( ) ;
2007-07-27 10:24:49 +02:00
audioBox - > audioDisplay - > UpdateTimeEditCtrls ( ) ;
2006-12-30 23:08:23 +01:00
}
void FrameMain : : OnMedusaShiftEndForward ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > curEndMS + = 10 ;
audioBox - > audioDisplay - > Update ( ) ;
audioBox - > audioDisplay - > wxWindow : : Update ( ) ;
2007-07-27 10:24:49 +02:00
audioBox - > audioDisplay - > UpdateTimeEditCtrls ( ) ;
2006-12-30 23:08:23 +01:00
}
void FrameMain : : OnMedusaShiftEndBack ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > curEndMS - = 10 ;
audioBox - > audioDisplay - > Update ( ) ;
audioBox - > audioDisplay - > wxWindow : : Update ( ) ;
2007-07-27 10:24:49 +02:00
audioBox - > audioDisplay - > UpdateTimeEditCtrls ( ) ;
2006-12-30 23:08:23 +01:00
}
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
}
2007-07-27 10:24:49 +02:00
void FrameMain : : OnMedusaNext ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > Next ( false ) ;
}
void FrameMain : : OnMedusaPrev ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > Prev ( false ) ;
}
void FrameMain : : OnMedusaEnter ( wxCommandEvent & event ) {
audioBox - > audioDisplay - > CommitChanges ( true ) ;
}