diff --git a/src/attic/pc/keyscan.h b/src/attic/pc/keyscan.h index 09c20a1b..bec3af66 100644 --- a/src/attic/pc/keyscan.h +++ b/src/attic/pc/keyscan.h @@ -48,7 +48,7 @@ #elif DOS -#define SCAN_GRAVE 0x29 +#define SCAN_TILDE 0x29 #define SCAN_1 0x02 #define SCAN_2 0x03 #define SCAN_3 0x04 diff --git a/src/drivers/win/config.cpp b/src/drivers/win/config.cpp index 519bbf20..e5381a3e 100644 --- a/src/drivers/win/config.cpp +++ b/src/drivers/win/config.cpp @@ -38,6 +38,7 @@ #include "movieoptions.h" #include "ramwatch.h" #include "debugger.h" +#include "taseditlib/taseditor_config.h" #include "../../state.h" //adelikat: For bool backupSavestates @@ -69,42 +70,7 @@ extern bool oldInputDisplay; extern bool fullSaveStateLoads; extern int frameSkipAmt; -extern bool TASEdit_follow_playback; -extern bool TASEdit_turbo_seek; -extern bool TASEdit_show_lag_frames; -extern bool TASEdit_show_markers; -extern bool TASEdit_show_branch_screenshots; -extern bool TASEdit_show_branch_tooltips; -extern bool TASEdit_bind_markers; -extern bool TASEdit_empty_marker_notes; -extern bool TASEdit_combine_consecutive_rec; -extern bool TASEdit_use_1p_rec; -extern bool TASEdit_columnset_by_keys; -extern bool TASEdit_keyboard_for_listview; -extern bool TASEdit_superimpose_affects_paste; -extern bool TASEdit_branch_full_movie; -extern bool TASEdit_branch_only_when_rec; -extern bool TASEdit_view_branches_tree; -extern bool TASEdit_branch_scr_hud; -extern bool TASEdit_restore_position; -extern int TASEdit_superimpose; -extern bool TASEdit_enable_hot_changes; -extern int TASEdit_greenzone_capacity; -extern int TasEdit_undo_levels; -extern int TASEdit_autosave_period; -extern bool TASEdit_jump_to_undo; -extern bool TASEdit_follow_note_context; -extern int TASEdit_last_export_type; -extern bool TASEdit_last_export_subtitles; -extern bool TASEdit_savecompact_binary; -extern bool TASEdit_savecompact_markers; -extern bool TASEdit_savecompact_bookmarks; -extern bool TASEdit_savecompact_greenzone; -extern bool TASEdit_savecompact_history; -extern bool TASEdit_savecompact_list; -extern bool TASEdit_savecompact_selection; -extern bool TASEdit_findnote_matchcase; -extern bool TASEdit_findnote_search_up; +extern TASEDITOR_CONFIG taseditor_config; extern char* recent_projects[]; //window positions and sizes: @@ -122,8 +88,6 @@ extern int Monitor_wndx, Monitor_wndy; extern int Tracer_wndx, Tracer_wndy; extern int CDLogger_wndx, CDLogger_wndy; extern int GGConv_wndx, GGConv_wndy; -extern int TasEdit_wndx, TasEdit_wndy; -extern int FindNote_wndx, FindNote_wndy; extern int MetaPosX,MetaPosY; extern int MLogPosX,MLogPosY; @@ -319,10 +283,6 @@ static CFGSTRUCT fceuconfig[] = { AC(CDLogger_wndy), AC(GGConv_wndx), AC(GGConv_wndy), - AC(TasEdit_wndx), - AC(TasEdit_wndy), - AC(FindNote_wndx), - AC(FindNote_wndy), AC(TextHookerPosX), AC(TextHookerPosY), AC(MetaPosX), @@ -337,42 +297,47 @@ static CFGSTRUCT fceuconfig[] = { AC(AFoff), AC(AutoFireOffset), AC(DesynchAutoFire), - AC(TASEdit_follow_playback), - AC(TASEdit_turbo_seek), - AC(TASEdit_show_lag_frames), - AC(TASEdit_show_markers), - AC(TASEdit_show_branch_screenshots), - AC(TASEdit_show_branch_tooltips), - AC(TASEdit_bind_markers), - AC(TASEdit_empty_marker_notes), - AC(TASEdit_combine_consecutive_rec), - AC(TASEdit_use_1p_rec), - AC(TASEdit_columnset_by_keys), - AC(TASEdit_keyboard_for_listview), - AC(TASEdit_superimpose_affects_paste), - AC(TASEdit_branch_full_movie), - AC(TASEdit_branch_only_when_rec), - AC(TASEdit_view_branches_tree), - AC(TASEdit_branch_scr_hud), - AC(TASEdit_restore_position), - AC(TASEdit_superimpose), - AC(TASEdit_enable_hot_changes), - AC(TASEdit_greenzone_capacity), - AC(TasEdit_undo_levels), - AC(TASEdit_autosave_period), - AC(TASEdit_jump_to_undo), - AC(TASEdit_follow_note_context), - AC(TASEdit_last_export_type), - AC(TASEdit_last_export_subtitles), - AC(TASEdit_savecompact_binary), - AC(TASEdit_savecompact_markers), - AC(TASEdit_savecompact_bookmarks), - AC(TASEdit_savecompact_greenzone), - AC(TASEdit_savecompact_history), - AC(TASEdit_savecompact_list), - AC(TASEdit_savecompact_selection), - AC(TASEdit_findnote_matchcase), - AC(TASEdit_findnote_search_up), + AC(taseditor_config.wndx), + AC(taseditor_config.wndy), + AC(taseditor_config.findnote_wndx), + AC(taseditor_config.findnote_wndy), + AC(taseditor_config.follow_playback), + AC(taseditor_config.turbo_seek), + AC(taseditor_config.show_lag_frames), + AC(taseditor_config.show_markers), + AC(taseditor_config.show_branch_screenshots), + AC(taseditor_config.show_branch_tooltips), + AC(taseditor_config.bind_markers), + AC(taseditor_config.empty_marker_notes), + AC(taseditor_config.combine_consecutive_rec), + AC(taseditor_config.use_1p_rec), + AC(taseditor_config.columnset_by_keys), + AC(taseditor_config.keyboard_for_listview), + AC(taseditor_config.superimpose_affects_paste), + AC(taseditor_config.branch_full_movie), + AC(taseditor_config.branch_only_when_rec), + AC(taseditor_config.view_branches_tree), + AC(taseditor_config.branch_scr_hud), + AC(taseditor_config.restore_position), + AC(taseditor_config.superimpose), + AC(taseditor_config.enable_auto_function), + AC(taseditor_config.enable_hot_changes), + AC(taseditor_config.greenzone_capacity), + AC(taseditor_config.undo_levels), + AC(taseditor_config.autosave_period), + AC(taseditor_config.jump_to_undo), + AC(taseditor_config.follow_note_context), + AC(taseditor_config.last_export_type), + AC(taseditor_config.last_export_subtitles), + AC(taseditor_config.savecompact_binary), + AC(taseditor_config.savecompact_markers), + AC(taseditor_config.savecompact_bookmarks), + AC(taseditor_config.savecompact_greenzone), + AC(taseditor_config.savecompact_history), + AC(taseditor_config.savecompact_list), + AC(taseditor_config.savecompact_selection), + AC(taseditor_config.findnote_matchcase), + AC(taseditor_config.findnote_search_up), AC(lagCounterDisplay), AC(oldInputDisplay), AC(movieSubtitles), diff --git a/src/drivers/win/input.cpp b/src/drivers/win/input.cpp index 204a33e6..4c175da2 100644 --- a/src/drivers/win/input.cpp +++ b/src/drivers/win/input.cpp @@ -543,7 +543,7 @@ ButtConfig fkbmap[0x48]= MK(1),MK(2),MK(3),MK(4),MK(5),MK(6),MK(7),MK(8),MK(9),MK(0), MK(MINUS),MK(EQUAL),MK(BACKSLASH),MK(BACKSPACE), MK(ESCAPE),MK(Q),MK(W),MK(E),MK(R),MK(T),MK(Y),MK(U),MK(I),MK(O), - MK(P),MK(GRAVE),MK(BRACKET_LEFT),MK(ENTER), + MK(P),MK(TILDE),MK(BRACKET_LEFT),MK(ENTER), MK(LEFTCONTROL),MK(A),MK(S),MK(D),MK(F),MK(G),MK(H),MK(J),MK(K), MK(L),MK(SEMICOLON),MK(APOSTROPHE),MK(BRACKET_RIGHT),MK(INSERT), MK(LEFTSHIFT),MK(Z),MK(X),MK(C),MK(V),MK(B),MK(N),MK(M),MK(COMMA), diff --git a/src/drivers/win/keyscan.h b/src/drivers/win/keyscan.h index 26a7d620..c97fff7f 100644 --- a/src/drivers/win/keyscan.h +++ b/src/drivers/win/keyscan.h @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#define SCAN_GRAVE 0x29 +#define SCAN_TILDE 0x29 #define SCAN_1 0x02 #define SCAN_2 0x03 #define SCAN_3 0x04 diff --git a/src/drivers/win/main.cpp b/src/drivers/win/main.cpp index dce741a7..72268f1a 100644 --- a/src/drivers/win/main.cpp +++ b/src/drivers/win/main.cpp @@ -70,6 +70,7 @@ #include "video.h" #include "utils/xstring.h" #include +#include "taseditlib/taseditor_window.h" //--------------------------- //mbg merge 6/29/06 - new aboutbox @@ -307,8 +308,8 @@ int BlockingCheck() { //other accelerator capable dialogs could be added here extern HWND hwndMemWatch; - extern HWND hwndTasEdit; - extern HWND hwndFindNote; + extern TASEDITOR_WINDOW taseditor_window; + int handled = 0; if(hCheat) @@ -337,15 +338,15 @@ int BlockingCheck() - if(!handled && hwndTasEdit) + if(!handled && taseditor_window.hwndTasEditor) { - if(IsChild(hwndTasEdit, msg.hwnd)) - handled = TranslateAccelerator(hwndTasEdit,fceu_hAccel,&msg); + if(IsChild(taseditor_window.hwndTasEditor, msg.hwnd)) + handled = TranslateAccelerator(taseditor_window.hwndTasEditor, fceu_hAccel, &msg); } - if(!handled && hwndFindNote) + if(!handled && taseditor_window.hwndFindNote) { - if(IsChild(hwndFindNote, msg.hwnd)) - handled = IsDialogMessage(hwndFindNote, &msg); + if(IsChild(taseditor_window.hwndFindNote, msg.hwnd)) + handled = IsDialogMessage(taseditor_window.hwndFindNote, &msg); } /* //adelikat - Currently no accel keys are used in the main window. Uncomment this block to activate them. if(!handled) diff --git a/src/drivers/win/mapinput.cpp b/src/drivers/win/mapinput.cpp index a64c72ed..b12ef9d1 100644 --- a/src/drivers/win/mapinput.cpp +++ b/src/drivers/win/mapinput.cpp @@ -24,7 +24,7 @@ static struct { { EMUCMD_RESET, SCAN_R | CMD_KEY_CTRL, }, { EMUCMD_PAUSE, SCAN_PAUSE, }, - { EMUCMD_FRAME_ADVANCE, SCAN_BACKSLASH, }, + { EMUCMD_FRAME_ADVANCE, SCAN_TILDE, }, { EMUCMD_SCREENSHOT, SCAN_F12, }, { EMUCMD_HIDE_MENU_TOGGLE, SCAN_ESCAPE }, { EMUCMD_SPEED_SLOWER, SCAN_MINUS, }, @@ -73,7 +73,7 @@ static struct { EMUCMD_RELOAD, SCAN_F1 | CMD_KEY_CTRL , }, { EMUCMD_MISC_UNDOREDOSAVESTATE, SCAN_Z | CMD_KEY_CTRL, }, { EMUCMD_MISC_TOGGLEFULLSCREEN, SCAN_ENTER | CMD_KEY_ALT, }, - { EMUCMD_TASEDIT_REWIND, SCAN_GRAVE, }, + { EMUCMD_TASEDIT_REWIND, SCAN_ESCAPE, }, { EMUCMD_RERECORD_DISPLAY_TOGGLE, SCAN_M, }, }; diff --git a/src/drivers/win/res.rc b/src/drivers/win/res.rc index 01db885e..3ca7870a 100644 --- a/src/drivers/win/res.rc +++ b/src/drivers/win/res.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_ICON3 ICON "res\\tasedit-icon.ico" -IDI_ICON4 ICON "res\\tasedit-icon32.ico" +IDI_ICON3 ICON "res\\taseditor-icon.ico" +IDI_ICON4 ICON "res\\taseditor-icon32.ico" ICON_1 ICON "res/ICON_1.ico" ICON_2 ICON "res/ICON_2.ico" @@ -240,7 +240,7 @@ BEGIN MENUITEM "Selection Redo\tCtrl+W", ID_EDIT_SELECTIONREDO MENUITEM SEPARATOR MENUITEM "Select &All", ID_EDIT_SELECTALL - MENUITEM "Select mid &Markers\tCtrl+A", ID_EDIT_SELECTMIDMARKERS + MENUITEM "Select between &Markers\tCtrl+A", ID_EDIT_SELECTMIDMARKERS MENUITEM "Reselect Clipboard\tCtrl+B", ID_EDIT_RESELECTCLIPBOARD MENUITEM SEPARATOR MENUITEM "&Copy\tCtrl+C", ID_TASEDIT_COPY @@ -284,13 +284,14 @@ BEGIN MENUITEM "&Empty new Marker Notes", ID_CONFIG_EMPTYNEWMARKERNOTES MENUITEM SEPARATOR MENUITEM "&Combine consecutive Recordings", ID_CONFIG_COMBINECONSECUTIVERECORDINGS - MENUITEM "&Use 1P keys for all single Recordings", ID_CONFIG_USE1PFORRECORDING + MENUITEM "Use 1&P keys for all single Recordings", ID_CONFIG_USE1PFORRECORDING MENUITEM "Use &Input keys for ColumnSet", ID_CONFIG_USEINPUTKEYSFORCOLUMNSET MENUITEM SEPARATOR MENUITEM "Allow &keyboard controls in Listview", ID_CONFIG_KEYBOARDCONTROLSINLISTVIEW MENUITEM "&Superimpose affects copy/paste", ID_CONFIG_SUPERIMPOSE_AFFECTS_PASTE MENUITEM SEPARATOR MENUITEM "Mute &Turbo", ID_CONFIG_MUTETURBO + MENUITEM "Silent autosave", ID_CONFIG_SILENTAUTOSAVE END POPUP "&Help" BEGIN @@ -1385,46 +1386,49 @@ CAPTION "TAS Editor" MENU TASEDITMENU FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN + CONTROL "",IDC_PROGRESS_BUTTON,"Button",BS_OWNERDRAW,314,37,116,12 + CONTROL "",IDC_BRANCHES_BUTTON,"Button",BS_OWNERDRAW,320,168,104,11 CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_OWNERDATA | LVS_NOSORTHEADER | WS_BORDER,6,15,299,362 GROUPBOX " Playback ",IDC_STATIC,310,1,123,62,BS_CENTER,WS_EX_RIGHT + GROUPBOX " Recorder ",IDC_STATIC,310,64,123,46,BS_CENTER,WS_EX_RIGHT + GROUPBOX " Splicer ",IDC_STATIC,310,111,123,30,BS_CENTER,WS_EX_RIGHT + GROUPBOX " Bookmarks ",IDC_BOOKMARKS_BOX,310,170,123,103,BS_CENTER,WS_EX_RIGHT + GROUPBOX " Lua ",IDC_STATIC,310,142,123,26,BS_CENTER,WS_EX_RIGHT + GROUPBOX " History ",IDC_STATIC,310,273,123,99,BS_CENTER,WS_EX_RIGHT PUSHBUTTON "<<",TASEDIT_REWIND_FULL,314,10,23,14,NOT WS_TABSTOP PUSHBUTTON "<",TASEDIT_REWIND,337,10,23,14,NOT WS_TABSTOP PUSHBUTTON "||",TASEDIT_PLAYSTOP,360,10,23,14,NOT WS_TABSTOP PUSHBUTTON ">",TASEDIT_FORWARD,383,10,23,14,NOT WS_TABSTOP PUSHBUTTON ">>",TASEDIT_FORWARD_FULL,406,10,23,14,NOT WS_TABSTOP - CONTROL "",IDC_PROGRESS_BUTTON,"Button",BS_OWNERDRAW,314,37,116,12 - CONTROL "",IDC_BRANCHES_BUTTON,"Button",BS_OWNERDRAW,320,149,104,11 CONTROL "",IDC_PROGRESS1,"msctls_progress32",PBS_SMOOTH | WS_BORDER,314,40,115,6 CONTROL " Follow cursor",CHECK_FOLLOW_CURSOR,"Button",BS_AUTOCHECKBOX,316,26,56,12 CONTROL " Auto-restore last position",CHECK_AUTORESTORE_PLAYBACK, "Button",BS_AUTOCHECKBOX,316,49,105,12 - GROUPBOX " Recorder ",IDC_STATIC,310,64,123,48,BS_CENTER,WS_EX_RIGHT - GROUPBOX " Splicer ",IDC_STATIC,310,113,123,35,BS_CENTER,WS_EX_RIGHT - GROUPBOX " Bookmarks ",IDC_BOOKMARKS_BOX,310,150,123,103,BS_CENTER,WS_EX_RIGHT - CONTROL "",IDC_BOOKMARKSLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | LVS_OWNERDATA | LVS_NOSCROLL | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | NOT WS_VISIBLE | WS_BORDER,315,160,113,89 - CONTROL "",IDC_HISTORYLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_OWNERDATA | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER,315,265,113,102 - CONTROL " All",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,316,86,27,10 - CONTROL " 1P",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,372,86,25,10 - CONTROL " 2P",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,402,86,24,10 - CONTROL " 3P",IDC_RADIO5,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,372,98,25,10 - CONTROL " 4P",IDC_RADIO6,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,402,98,24,10 - CONTROL " Superimpose",IDC_SUPERIMPOSE,"Button",BS_AUTO3STATE,372,74,55,10 - GROUPBOX " History ",IDC_STATIC,310,255,123,116,BS_CENTER,WS_EX_RIGHT + CONTROL "",IDC_BOOKMARKSLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | LVS_OWNERDATA | LVS_NOSCROLL | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | NOT WS_VISIBLE | WS_BORDER,315,179,113,89 + CONTROL "",IDC_HISTORYLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | LVS_ALIGNLEFT | LVS_OWNERDATA | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER,315,283,113,85 + CONTROL " All",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,316,85,27,10 + CONTROL " 1P",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,372,85,25,10 + CONTROL " 2P",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,402,85,24,10 + CONTROL " 3P",IDC_RADIO5,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,372,97,25,10 + CONTROL " 4P",IDC_RADIO6,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,402,97,24,10 + CONTROL " Superimpose",IDC_SUPERIMPOSE,"Button",BS_AUTO3STATE,372,73,55,10 PUSHBUTTON "<<",TASEDIT_PREV_MARKER,315,376,23,14,NOT WS_TABSTOP PUSHBUTTON "Similar",TASEDIT_FIND_BEST_SIMILAR_MARKER,338,376,34,14,NOT WS_TABSTOP PUSHBUTTON "More",TASEDIT_FIND_NEXT_SIMILAR_MARKER,372,376,34,14,NOT WS_TABSTOP PUSHBUTTON ">>",TASEDIT_NEXT_MARKER,405,376,23,14,NOT WS_TABSTOP CONTROL "",IDC_JUMP_PLAYBACK_BUTTON,"Button",BS_OWNERDRAW,5,1,59,13 EDITTEXT IDC_PLAYBACK_MARKER_EDIT,65,1,240,13,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP - RTEXT "Marker 0",IDC_PLAYBACK_MARKER,3,3,60,10,0,WS_EX_RIGHT + RTEXT "Marker 0",IDC_PLAYBACK_MARKER,4,3,58,10,0,WS_EX_RIGHT CONTROL "",IDC_JUMP_SELECTION_BUTTON,"Button",BS_OWNERDRAW,5,377,59,13 EDITTEXT IDC_SELECTION_MARKER_EDIT,65,377,240,13,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP - RTEXT "Marker 99999",IDC_SELECTION_MARKER,3,379,60,10,0,WS_EX_RIGHT - CONTROL "",IDC_BRANCHES_BITMAP,"Static",SS_OWNERDRAW | SS_NOTIFY | SS_REALSIZEIMAGE | NOT WS_VISIBLE,315,160,113,89 + RTEXT "Marker 99999",IDC_SELECTION_MARKER,4,379,58,10,0,WS_EX_RIGHT + CONTROL "",IDC_BRANCHES_BITMAP,"Static",SS_OWNERDRAW | SS_NOTIFY | SS_REALSIZEIMAGE | NOT WS_VISIBLE,315,179,113,89 CONTROL " Turbo seek",CHECK_TURBO_SEEK,"Button",BS_AUTOCHECKBOX,379,26,50,12 - LTEXT "Selection: 0 rows, 16 columns",IDC_TEXT_SELECTION,316,123,114,10 - LTEXT "Clipboard: 0 rows, 16 columns",IDC_TEXT_CLIPBOARD,316,134,114,10 - CONTROL " Recording",IDC_RECORDING,"Button",BS_AUTO3STATE,316,74,49,10 + LTEXT "Selection: 0 rows, 16 columns",IDC_TEXT_SELECTION,316,119,114,10 + LTEXT "Clipboard: 0 rows, 16 columns",IDC_TEXT_CLIPBOARD,315,129,114,10 + CONTROL " Recording",IDC_RECORDING,"Button",BS_AUTO3STATE,316,73,49,10 + PUSHBUTTON "Run function",TASEDIT_RUN_MANUAL,315,151,54,14,NOT WS_TABSTOP + CONTROL "Auto function",IDC_RUN_AUTO,"Button",BS_AUTO3STATE,375,153,55,10 END IDD_TASEDIT_ABOUT DIALOGEX 0, 0, 208, 70 diff --git a/src/drivers/win/res/tasedit-icon.ico b/src/drivers/win/res/taseditor-icon.ico similarity index 100% rename from src/drivers/win/res/tasedit-icon.ico rename to src/drivers/win/res/taseditor-icon.ico diff --git a/src/drivers/win/res/tasedit-icon32.ico b/src/drivers/win/res/taseditor-icon32.ico similarity index 100% rename from src/drivers/win/res/tasedit-icon32.ico rename to src/drivers/win/res/taseditor-icon32.ico diff --git a/src/drivers/win/resource.h b/src/drivers/win/resource.h index 5353c609..c1ae6db8 100644 --- a/src/drivers/win/resource.h +++ b/src/drivers/win/resource.h @@ -439,6 +439,8 @@ #define IDC_EDIT2 1154 #define IDC_PLAYBACK_MARKER_EDIT 1154 #define IDC_JUMP_SELECTION_BUTTON 1155 +#define TASEDIT_PREV_MARKER2 1156 +#define TASEDIT_RUN_MANUAL 1156 #define CHECK_SOUND_MUTETURBO 1179 #define IDC_EDIT_AUTHOR 1180 #define MEMW_STATIC 1181 @@ -486,6 +488,8 @@ #define IDC_RAMLIST 1205 #define IDC_CHECK4 1205 #define IDC_CHECK_BOOKMARKS 1205 +#define IDC_SUPERIMPOSE2 1205 +#define IDC_RUN_AUTO 1205 #define IDC_C_SEARCH 1206 #define IDC_CHECK5 1206 #define IDC_CHECK_GREENZONE 1206 @@ -965,6 +969,7 @@ #define ID_EDIT_FINDNOTE 40513 #define ID_CONFIG_REAPPEARINGFINDNOTEDIALOG 40514 #define ID_VIEW_FINDNOTE 40515 +#define ID_CONFIG_SILENTAUTOSAVE 40516 #define IDC_DEBUGGER_ICONTRAY 55535 #define MW_ValueLabel2 65423 #define MW_ValueLabel1 65426 @@ -974,7 +979,7 @@ #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 202 -#define _APS_NEXT_COMMAND_VALUE 40516 +#define _APS_NEXT_COMMAND_VALUE 40517 #define _APS_NEXT_CONTROL_VALUE 1275 #define _APS_NEXT_SYMED_VALUE 101 #endif diff --git a/src/drivers/win/tasedit.cpp b/src/drivers/win/tasedit.cpp index 92a84ea4..13fcc7c2 100644 --- a/src/drivers/win/tasedit.cpp +++ b/src/drivers/win/tasedit.cpp @@ -1,193 +1,86 @@ #include #include -#include "taseditlib/taseditproj.h" +#include "taseditlib/taseditor_project.h" #include "utils/xstring.h" -#include "Win32InputBox.h" #include "keyboard.h" #include "joystick.h" -#include "main.h" +#include "main.h" // for GetRomName #include "tasedit.h" #include "version.h" -#include #include // for StrStrI +#include "Win32InputBox.h" #pragma comment(lib, "Shlwapi.lib") using namespace std; // TAS Editor data -HWND hwndTasEdit = 0, hwndFindNote = 0; -HMENU hmenu, hrmenu; -bool TASEdit_focus = false; -bool Tasedit_rewind_now = false; +bool Taseditor_rewind_now = false; +bool must_call_manual_lua_function = false; // note editing/search (probably should be moved to separate class/module) int marker_note_edit = MARKER_NOTE_EDIT_NONE; char findnote_string[MAX_NOTE_LEN] = {0}; int search_similar_marker = 0; // all Taseditor functional modules -TASEDIT_PROJECT project; +TASEDITOR_CONFIG taseditor_config; +TASEDITOR_WINDOW taseditor_window; +TASEDITOR_PROJECT project; INPUT_HISTORY history; PLAYBACK playback; RECORDER recorder; GREENZONE greenzone; MARKERS current_markers; BOOKMARKS bookmarks; -SCREENSHOT_DISPLAY screenshot_display; -TASEDIT_LIST tasedit_list; -TASEDIT_SELECTION selection; +POPUP_DISPLAY popup_display; +TASEDITOR_LIST list; +TASEDITOR_LUA taseditor_lua; +TASEDITOR_SELECTION selection; -// saved FCEU config +// temporarily saved FCEUX config int saved_eoptions; int saved_EnableAutosave; extern int EnableAutosave; - +// FCEUX extern EMOVIEMODE movieMode; // maybe we need normal setter for movieMode, to encapsulate it extern void UpdateCheckedMenuItems(); -BOOL CALLBACK FindNoteProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam); - -// vars saved in cfg file (need dedicated storage class?) -int TasEdit_wndx = 0, TasEdit_wndy = 0; -int FindNote_wndx = 0, FindNote_wndy = 0; -bool TASEdit_follow_playback = true; -bool TASEdit_turbo_seek = true; -bool TASEdit_show_lag_frames = true; -bool TASEdit_show_markers = true; -bool TASEdit_show_branch_screenshots = true; -bool TASEdit_show_branch_tooltips = true; -bool TASEdit_bind_markers = true; -bool TASEdit_empty_marker_notes = true; -bool TASEdit_combine_consecutive_rec = true; -bool TASEdit_use_1p_rec = true; -bool TASEdit_columnset_by_keys = true; -bool TASEdit_keyboard_for_listview = true; -bool TASEdit_superimpose_affects_paste = true; -int TASEdit_superimpose = BST_UNCHECKED; -bool TASEdit_branch_full_movie = true; -bool TASEdit_branch_only_when_rec = false; -bool TASEdit_view_branches_tree = false; -bool TASEdit_branch_scr_hud = true; -bool TASEdit_restore_position = false; -int TASEdit_greenzone_capacity = GREENZONE_CAPACITY_DEFAULT; -int TasEdit_undo_levels = UNDO_LEVELS_DEFAULT; -int TASEdit_autosave_period = AUTOSAVE_PERIOD_DEFAULT; -extern bool muteTurbo; -bool TASEdit_enable_hot_changes = true; -bool TASEdit_jump_to_undo = true; -bool TASEdit_follow_note_context = true; -int TASEdit_last_export_type = EXPORT_TYPE_1P; -bool TASEdit_last_export_subtitles = false; -bool TASEdit_savecompact_binary = true; -bool TASEdit_savecompact_markers = true; -bool TASEdit_savecompact_bookmarks = true; -bool TASEdit_savecompact_greenzone = false; -bool TASEdit_savecompact_history = false; -bool TASEdit_savecompact_list = true; -bool TASEdit_savecompact_selection = false; -bool TASEdit_findnote_matchcase = false; -bool TASEdit_findnote_search_up = false; - -// Recent Menu -HMENU recent_projects_menu; -char* recent_projects[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -const unsigned int MENU_FIRST_RECENT_PROJECT = 55000; -const unsigned int MAX_NUMBER_OF_RECENT_PROJECTS = sizeof(recent_projects)/sizeof(*recent_projects); +// lua engine +extern void TaseditorAutoFunction(); +extern void TaseditorManualFunction(); // resources -char taseditor_help_filename[] = "\\taseditor.chm"; -string tasedithelp = "{16CDE0C4-02B0-4A60-A88D-076319909A4D}"; //Name of TAS Editor Help page char buttonNames[NUM_JOYPAD_BUTTONS][2] = {"A", "B", "S", "T", "U", "D", "L", "R"}; -char windowCaptioBase[] = "TAS Editor"; -HICON hTaseditorIcon = 0; // enterframe function void UpdateTasEdit() { - if(!hwndTasEdit) return; + if(!taseditor_window.hwndTasEditor) + { + // TAS Editor is not engaged... but we still should run Lua auto function + TaseditorAutoFunction(); + return; + } + // update all modules that need to be updated preiodically recorder.update(); - tasedit_list.update(); + list.update(); current_markers.update(); greenzone.update(); playback.update(); bookmarks.update(); - screenshot_display.update(); + popup_display.update(); selection.update(); history.update(); project.update(); -} - -void RedrawWindowCaption() -{ - char new_caption[300]; - strcpy(new_caption, windowCaptioBase); - if (!movie_readonly) - strcat(new_caption, recorder.GetRecordingCaption()); - // add project name - std::string projectname = project.GetProjectName(); - if (!projectname.empty()) + + // run Lua functions if needed + if (taseditor_config.enable_auto_function) + TaseditorAutoFunction(); + if (must_call_manual_lua_function) { - strcat(new_caption, " - "); - strcat(new_caption, projectname.c_str()); + TaseditorManualFunction(); + must_call_manual_lua_function = false; } - // and * if project has unsaved changes - if (project.GetProjectChanged()) - strcat(new_caption, "*"); - SetWindowText(hwndTasEdit, new_caption); -} -void RedrawTasedit() -{ - InvalidateRect(hwndTasEdit, 0, FALSE); -} - -void StrayClickMenu(LPNMITEMACTIVATE info) -{ - POINT pt = info->ptAction; - ClientToScreen(tasedit_list.hwndList, &pt); - HMENU sub = GetSubMenu(hrmenu, CONTEXTMENU_STRAY); - TrackPopupMenu(sub, 0, pt.x, pt.y, 0, hwndTasEdit, 0); -} -void RightClickMenu(LPNMITEMACTIVATE info) -{ - POINT pt = info->ptAction; - ClientToScreen(tasedit_list.hwndList, &pt); - - SelectionFrames* current_selection = selection.MakeStrobe(); - if (current_selection->size() == 0) - { - StrayClickMenu(info); - return; - } - HMENU sub = GetSubMenu(hrmenu, CONTEXTMENU_SELECTED); - // inspect current selection and disable inappropriate menu items - SelectionFrames::iterator current_selection_begin(current_selection->begin()); - SelectionFrames::iterator current_selection_end(current_selection->end()); - bool set_found = false, unset_found = false; - for(SelectionFrames::iterator it(current_selection_begin); it != current_selection_end; it++) - { - if(current_markers.GetMarker(*it)) - set_found = true; - else - unset_found = true; - } - if (set_found) - EnableMenuItem(sub, ID_SELECTED_REMOVEMARKER, MF_BYCOMMAND | MF_ENABLED); - else - EnableMenuItem(sub, ID_SELECTED_REMOVEMARKER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - if (unset_found) - EnableMenuItem(sub, ID_SELECTED_SETMARKER, MF_BYCOMMAND | MF_ENABLED); - else - EnableMenuItem(sub, ID_SELECTED_SETMARKER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - - TrackPopupMenu(sub, 0, pt.x, pt.y, 0, hwndTasEdit, 0); -} -void RightClick(LPNMITEMACTIVATE info) -{ - int index = info->iItem; - if(index == -1) - StrayClickMenu(info); - else if (selection.CheckFrameSelected(index)) - RightClickMenu(info); } void ToggleJoypadBit(int column_index, int row_index, UINT KeyFlags) @@ -251,7 +144,7 @@ void SingleClick(LPNMITEMACTIVATE info) history.RegisterMarkersChange(MODTYPE_MARKER_SET, row_index); else history.RegisterMarkersChange(MODTYPE_MARKER_UNSET, row_index); - tasedit_list.RedrawRow(row_index); + list.RedrawRow(row_index); } } else if(column_index >= COLUMN_JOYPAD1_A && column_index <= COLUMN_JOYPAD4_R) @@ -296,12 +189,12 @@ void CloneFrames() { // end of current region currMovieData.cloneRegion(*it, frames); - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) current_markers.insertEmpty(*it, frames); frames = 1; } else frames++; } - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) { current_markers.update(); selection.must_find_current_marker = playback.must_find_current_marker = true; @@ -330,12 +223,12 @@ void InsertFrames() { // end of current region currMovieData.insertEmpty(*it,frames); - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) current_markers.insertEmpty(*it,frames); frames = 1; } else frames++; } - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) { current_markers.update(); selection.must_find_current_marker = playback.must_find_current_marker = true; @@ -347,7 +240,7 @@ void InsertNumFrames() { SelectionFrames* current_selection = selection.MakeStrobe(); int frames = current_selection->size(); - if(CWin32InputBox::GetInteger("Insert number of Frames", "How many frames?", frames, hwndTasEdit) == IDOK) + if(CWin32InputBox::GetInteger("Insert number of Frames", "How many frames?", frames, taseditor_window.hwndTasEditor) == IDOK) { if (frames > 0) { @@ -363,13 +256,13 @@ void InsertNumFrames() index = currFrameCounter; } currMovieData.insertEmpty(index, frames); - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) { current_markers.insertEmpty(index, frames); selection.must_find_current_marker = playback.must_find_current_marker = true; } // select inserted rows - tasedit_list.update(); + list.update(); selection.SetRegionSelection(index, index + frames - 1); greenzone.InvalidateAndCheck(history.RegisterChanges(MODTYPE_INSERT, index)); } @@ -388,16 +281,16 @@ void DeleteFrames() for(SelectionFrames::reverse_iterator it(current_selection->rbegin()); it != current_selection_rend; it++) { currMovieData.records.erase(currMovieData.records.begin() + *it); - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) current_markers.EraseMarker(*it); } - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) selection.must_find_current_marker = playback.must_find_current_marker = true; // check if user deleted all frames if (!currMovieData.getNumRecords()) playback.StartFromZero(); // reduce list - tasedit_list.update(); + list.update(); int result = history.RegisterChanges(MODTYPE_DELETE, start_index); if (result >= 0) @@ -406,7 +299,7 @@ void DeleteFrames() } else if (greenzone.greenZoneCount >= currMovieData.getNumRecords()) { greenzone.InvalidateAndCheck(currMovieData.getNumRecords()-1); - } else tasedit_list.RedrawList(); + } else list.RedrawList(); } void ClearFrames(SelectionFrames* current_selection) @@ -439,12 +332,12 @@ void Truncate() if (currMovieData.getNumRecords() > frame+1) { currMovieData.truncateAt(frame+1); - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) { current_markers.SetMarkersSize(frame+1); selection.must_find_current_marker = playback.must_find_current_marker = true; } - tasedit_list.update(); + list.update(); int result = history.RegisterChanges(MODTYPE_TRUNCATE, frame+1); if (result >= 0) { @@ -452,7 +345,7 @@ void Truncate() } else if (greenzone.greenZoneCount >= currMovieData.getNumRecords()) { greenzone.InvalidateAndCheck(currMovieData.getNumRecords()-1); - } else tasedit_list.RedrawList(); + } else list.RedrawList(); } } @@ -490,7 +383,7 @@ void FrameColumnSet() if (current_markers.SetMarker(*it)) { changes_made = true; - tasedit_list.RedrawRow(*it); + list.RedrawRow(*it); } } } @@ -505,7 +398,7 @@ void FrameColumnSet() { current_markers.ClearMarker(*it); changes_made = true; - tasedit_list.RedrawRow(*it); + list.RedrawRow(*it); } } if (changes_made) @@ -514,7 +407,7 @@ void FrameColumnSet() if (changes_made) { selection.must_find_current_marker = playback.must_find_current_marker = true; - tasedit_list.SetHeaderColumnLight(COLUMN_FRAMENUM, HEADER_LIGHT_MAX); + list.SetHeaderColumnLight(COLUMN_FRAMENUM, HEADER_LIGHT_MAX); } } void InputColumnSet(int column) @@ -548,7 +441,7 @@ void InputColumnSet(int column) { greenzone.InvalidateAndCheck(history.RegisterChanges(MODTYPE_UNSET, *current_selection_begin, *current_selection->rbegin())); } - tasedit_list.SetHeaderColumnLight(column, HEADER_LIGHT_MAX); + list.SetHeaderColumnLight(column, HEADER_LIGHT_MAX); } bool Copy(SelectionFrames* current_selection) @@ -595,7 +488,7 @@ bool Copy(SelectionFrames* current_selection) } clipString << std::endl; - if (!OpenClipboard(hwndTasEdit)) + if (!OpenClipboard(taseditor_window.hwndTasEditor)) return false; EmptyClipboard(); @@ -638,7 +531,7 @@ bool Paste() SelectionFrames* current_selection = selection.MakeStrobe(); if (current_selection->size() == 0) return false; - if (!OpenClipboard(hwndTasEdit)) return false; + if (!OpenClipboard(taseditor_window.hwndTasEditor)) return false; SelectionFrames::iterator current_selection_begin(current_selection->begin()); bool result = false; @@ -681,7 +574,7 @@ bool Paste() ++pos; } - if (!TASEdit_superimpose_affects_paste || TASEdit_superimpose == BST_UNCHECKED) + if (!taseditor_config.superimpose_affects_paste || taseditor_config.superimpose == BST_UNCHECKED) { currMovieData.records[pos].joysticks[0] = 0; currMovieData.records[pos].joysticks[1] = 0; @@ -697,7 +590,7 @@ bool Paste() { case '|': // Joystick mark // flush buttons to movie data - if (TASEdit_superimpose_affects_paste && (TASEdit_superimpose == BST_CHECKED || (TASEdit_superimpose == BST_INDETERMINATE && new_buttons == 0))) + if (taseditor_config.superimpose_affects_paste && (taseditor_config.superimpose == BST_CHECKED || (taseditor_config.superimpose == BST_INDETERMINATE && new_buttons == 0))) { flash_joy[joy] |= (new_buttons & (~currMovieData.records[pos].joysticks[joy])); // highlight buttons that are new currMovieData.records[pos].joysticks[joy] |= new_buttons; @@ -723,7 +616,7 @@ bool Paste() ++frame; } // before going to next frame, flush buttons to movie data - if (TASEdit_superimpose_affects_paste && (TASEdit_superimpose == BST_CHECKED || (TASEdit_superimpose == BST_INDETERMINATE && new_buttons == 0))) + if (taseditor_config.superimpose_affects_paste && (taseditor_config.superimpose == BST_CHECKED || (taseditor_config.superimpose == BST_INDETERMINATE && new_buttons == 0))) { flash_joy[joy] |= (new_buttons & (~currMovieData.records[pos].joysticks[joy])); // highlight buttons that are new currMovieData.records[pos].joysticks[joy] |= new_buttons; @@ -743,7 +636,7 @@ bool Paste() for (int btn = 0; btn < NUM_JOYPAD_BUTTONS; ++btn) { if (flash_joy[joy] & (1 << btn)) - tasedit_list.SetHeaderColumnLight(COLUMN_JOYPAD1_A + joy * NUM_JOYPAD_BUTTONS + btn, HEADER_LIGHT_MAX); + list.SetHeaderColumnLight(COLUMN_JOYPAD1_A + joy * NUM_JOYPAD_BUTTONS + btn, HEADER_LIGHT_MAX); } } result = true; @@ -758,7 +651,7 @@ bool PasteInsert() SelectionFrames* current_selection = selection.MakeStrobe(); if (current_selection->size() == 0) return false; - if (!OpenClipboard(hwndTasEdit)) return false; + if (!OpenClipboard(taseditor_window.hwndTasEditor)) return false; SelectionFrames::iterator current_selection_begin(current_selection->begin()); bool result = false; @@ -808,7 +701,7 @@ bool PasteInsert() // insert new frame currMovieData.insertEmpty(pos, 1); - if (TASEdit_bind_markers) current_markers.insertEmpty(pos, 1); + if (taseditor_config.bind_markers) current_markers.insertEmpty(pos, 1); selection.GetInsertedSet().insert(pos); // read this frame input @@ -838,7 +731,7 @@ bool PasteInsert() pGlobal = strchr(pGlobal, '\n'); } current_markers.update(); - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) selection.must_find_current_marker = playback.must_find_current_marker = true; greenzone.InvalidateAndCheck(history.RegisterChanges(MODTYPE_PASTEINSERT, *current_selection_begin)); // flash list header columns that were changed during paste @@ -847,7 +740,7 @@ bool PasteInsert() for (int btn = 0; btn < NUM_JOYPAD_BUTTONS; ++btn) { if (flash_joy[joy] & (1 << btn)) - tasedit_list.SetHeaderColumnLight(COLUMN_JOYPAD1_A + joy * NUM_JOYPAD_BUTTONS + btn, HEADER_LIGHT_MAX); + list.SetHeaderColumnLight(COLUMN_JOYPAD1_A + joy * NUM_JOYPAD_BUTTONS + btn, HEADER_LIGHT_MAX); } } result = true; @@ -865,7 +758,7 @@ void OpenProject() OPENFILENAME ofn; memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = hwndTasEdit; + ofn.hwndOwner = taseditor_window.hwndTasEditor; ofn.hInstance = fceu_hInstance; ofn.lpstrTitle = "Open TAS Editor Project"; const char filter[] = "TAS Editor Projects (*.fm3)\0*.fm3\0All Files (*.*)\0*.*\0\0"; @@ -888,7 +781,7 @@ void OpenProject() bool LoadProject(char* fullname) { marker_note_edit = MARKER_NOTE_EDIT_NONE; - SetFocus(tasedit_list.hwndList); + SetFocus(list.hwndList); // remember to update fourscore status bool last_fourscore = currMovieData.fourscore; // try to load project @@ -897,40 +790,28 @@ bool LoadProject(char* fullname) // update fourscore status if (last_fourscore && !currMovieData.fourscore) { - tasedit_list.RemoveFourscore(); + list.RemoveFourscore(); FCEUD_SetInput(currMovieData.fourscore, currMovieData.microphone, (ESI)currMovieData.ports[0], (ESI)currMovieData.ports[1], (ESIFC)currMovieData.ports[2]); } else if (!last_fourscore && currMovieData.fourscore) { - tasedit_list.AddFourscore(); + list.AddFourscore(); FCEUD_SetInput(currMovieData.fourscore, currMovieData.microphone, (ESI)currMovieData.ports[0], (ESI)currMovieData.ports[1], (ESIFC)currMovieData.ports[2]); } - UpdateRecentProjectsArray(fullname); - RedrawTasedit(); - RedrawWindowCaption(); + taseditor_window.UpdateRecentProjectsArray(fullname); + taseditor_window.RedrawWindow(); + taseditor_window.RedrawCaption(); search_similar_marker = 0; return true; } else { // failed to load - RedrawTasedit(); - RedrawWindowCaption(); + taseditor_window.RedrawWindow(); + taseditor_window.RedrawCaption(); + search_similar_marker = 0; search_similar_marker = 0; return false; } } -void LoadRecentProject(int slot) -{ - char*& fname = recent_projects[slot]; - if(fname && AskSaveProject()) - { - if (!LoadProject(fname)) - { - int result = MessageBox(hwndTasEdit, "Remove from list?", "Could Not Open Recent Project", MB_YESNO); - if (result == IDYES) - RemoveRecentProject(slot); - } - } -} // Saves current project bool SaveProjectAs() @@ -939,7 +820,7 @@ bool SaveProjectAs() OPENFILENAME ofn; memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = hwndTasEdit; + ofn.hwndOwner = taseditor_window.hwndTasEditor; ofn.hInstance = fceu_hInstance; ofn.lpstrTitle = "Save TAS Editor Project As..."; ofn.lpstrFilter = filter; @@ -963,10 +844,10 @@ bool SaveProjectAs() { project.RenameProject(nameo); project.save(); - UpdateRecentProjectsArray(nameo); + taseditor_window.UpdateRecentProjectsArray(nameo); } else return false; // saved successfully - remove * mark from caption - RedrawWindowCaption(); + taseditor_window.RedrawCaption(); return true; } bool SaveProject() @@ -974,19 +855,19 @@ bool SaveProject() if (!project.save()) return SaveProjectAs(); else - RedrawWindowCaption(); + taseditor_window.RedrawCaption(); return true; } void SaveCompact_GetCheckboxes(HWND hwndDlg) { - TASEdit_savecompact_binary = (SendDlgItemMessage(hwndDlg, IDC_CHECK_BINARY, BM_GETCHECK, 0, 0) == BST_CHECKED); - TASEdit_savecompact_markers = (SendDlgItemMessage(hwndDlg, IDC_CHECK_MARKERS, BM_GETCHECK, 0, 0) == BST_CHECKED); - TASEdit_savecompact_bookmarks = (SendDlgItemMessage(hwndDlg, IDC_CHECK_BOOKMARKS, BM_GETCHECK, 0, 0) == BST_CHECKED); - TASEdit_savecompact_greenzone = (SendDlgItemMessage(hwndDlg, IDC_CHECK_GREENZONE, BM_GETCHECK, 0, 0) == BST_CHECKED); - TASEdit_savecompact_history = (SendDlgItemMessage(hwndDlg, IDC_CHECK_HISTORY, BM_GETCHECK, 0, 0) == BST_CHECKED); - TASEdit_savecompact_list = (SendDlgItemMessage(hwndDlg, IDC_CHECK_LIST, BM_GETCHECK, 0, 0) == BST_CHECKED); - TASEdit_savecompact_selection = (SendDlgItemMessage(hwndDlg, IDC_CHECK_SELECTION, BM_GETCHECK, 0, 0) == BST_CHECKED); + taseditor_config.savecompact_binary = (SendDlgItemMessage(hwndDlg, IDC_CHECK_BINARY, BM_GETCHECK, 0, 0) == BST_CHECKED); + taseditor_config.savecompact_markers = (SendDlgItemMessage(hwndDlg, IDC_CHECK_MARKERS, BM_GETCHECK, 0, 0) == BST_CHECKED); + taseditor_config.savecompact_bookmarks = (SendDlgItemMessage(hwndDlg, IDC_CHECK_BOOKMARKS, BM_GETCHECK, 0, 0) == BST_CHECKED); + taseditor_config.savecompact_greenzone = (SendDlgItemMessage(hwndDlg, IDC_CHECK_GREENZONE, BM_GETCHECK, 0, 0) == BST_CHECKED); + taseditor_config.savecompact_history = (SendDlgItemMessage(hwndDlg, IDC_CHECK_HISTORY, BM_GETCHECK, 0, 0) == BST_CHECKED); + taseditor_config.savecompact_list = (SendDlgItemMessage(hwndDlg, IDC_CHECK_LIST, BM_GETCHECK, 0, 0) == BST_CHECKED); + taseditor_config.savecompact_selection = (SendDlgItemMessage(hwndDlg, IDC_CHECK_SELECTION, BM_GETCHECK, 0, 0) == BST_CHECKED); } BOOL CALLBACK AboutProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) @@ -1013,14 +894,14 @@ BOOL CALLBACK SaveCompactProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM { case WM_INITDIALOG: { - SetWindowPos(hwndDlg, 0, TasEdit_wndx + 100, TasEdit_wndy + 200, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); - CheckDlgButton(hwndDlg, IDC_CHECK_BINARY, TASEdit_savecompact_binary?MF_CHECKED : MF_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_CHECK_MARKERS, TASEdit_savecompact_markers?MF_CHECKED : MF_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_CHECK_BOOKMARKS, TASEdit_savecompact_bookmarks?MF_CHECKED : MF_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_CHECK_GREENZONE, TASEdit_savecompact_greenzone?MF_CHECKED : MF_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_CHECK_HISTORY, TASEdit_savecompact_history?MF_CHECKED : MF_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_CHECK_LIST, TASEdit_savecompact_list?MF_CHECKED : MF_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_CHECK_SELECTION, TASEdit_savecompact_selection?MF_CHECKED : MF_UNCHECKED); + SetWindowPos(hwndDlg, 0, taseditor_config.wndx + 100, taseditor_config.wndy + 200, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); + CheckDlgButton(hwndDlg, IDC_CHECK_BINARY, taseditor_config.savecompact_binary?MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_CHECK_MARKERS, taseditor_config.savecompact_markers?MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_CHECK_BOOKMARKS, taseditor_config.savecompact_bookmarks?MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_CHECK_GREENZONE, taseditor_config.savecompact_greenzone?MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_CHECK_HISTORY, taseditor_config.savecompact_history?MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_CHECK_LIST, taseditor_config.savecompact_list?MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_CHECK_SELECTION, taseditor_config.savecompact_selection?MF_CHECKED : MF_UNCHECKED); return TRUE; } case WM_COMMAND: @@ -1050,13 +931,13 @@ BOOL CALLBACK SaveCompactProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM void SaveCompact() { - if (DialogBox(fceu_hInstance, MAKEINTRESOURCE(IDD_TASEDIT_SAVECOMPACT), hwndTasEdit, SaveCompactProc) > 0) + if (DialogBox(fceu_hInstance, MAKEINTRESOURCE(IDD_TASEDIT_SAVECOMPACT), taseditor_window.hwndTasEditor, SaveCompactProc) > 0) { const char filter[] = "TAS Editor Projects (*.fm3)\0*.fm3\0All Files (*.*)\0*.*\0\0"; OPENFILENAME ofn; memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = hwndTasEdit; + ofn.hwndOwner = taseditor_window.hwndTasEditor; ofn.hInstance = fceu_hInstance; ofn.lpstrTitle = "Save Compact"; ofn.lpstrFilter = filter; @@ -1081,7 +962,7 @@ void SaveCompact() if(GetSaveFileName(&ofn)) //If it is a valid filename { - project.save_compact(nameo, TASEdit_savecompact_binary, TASEdit_savecompact_markers, TASEdit_savecompact_bookmarks, TASEdit_savecompact_greenzone, TASEdit_savecompact_history, TASEdit_savecompact_list, TASEdit_savecompact_selection); + project.save_compact(nameo, taseditor_config.savecompact_binary, taseditor_config.savecompact_markers, taseditor_config.savecompact_bookmarks, taseditor_config.savecompact_greenzone, taseditor_config.savecompact_history, taseditor_config.savecompact_list, taseditor_config.savecompact_selection); } } } @@ -1095,7 +976,7 @@ bool AskSaveProject() // ask saving project if (changes_found) { - int answer = MessageBox(hwndTasEdit, "Save Project changes?", "TAS Editor", MB_YESNOCANCEL); + int answer = MessageBox(taseditor_window.hwndTasEditor, "Save Project changes?", "TAS Editor", MB_YESNOCANCEL); if(answer == IDYES) return SaveProject(); return (answer != IDCANCEL); @@ -1110,7 +991,7 @@ void Import() OPENFILENAME ofn; memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = hwndTasEdit; + ofn.hwndOwner = taseditor_window.hwndTasEditor; ofn.hInstance = fceu_hInstance; ofn.lpstrTitle = "Import"; ofn.lpstrFilter = filter; @@ -1145,8 +1026,8 @@ BOOL CALLBACK ExportProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPara switch (message) { case WM_INITDIALOG: - SetWindowPos(hwndDlg, 0, TasEdit_wndx + 100, TasEdit_wndy + 200, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); - switch (TASEdit_last_export_type) + SetWindowPos(hwndDlg, 0, taseditor_config.wndx + 100, taseditor_config.wndy + 200, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); + switch (taseditor_config.last_export_type) { case EXPORT_TYPE_1P: { @@ -1164,23 +1045,23 @@ BOOL CALLBACK ExportProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPara break; } } - CheckDlgButton(hwndDlg, IDC_NOTES_TO_SUBTITLES, TASEdit_last_export_subtitles?MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_NOTES_TO_SUBTITLES, taseditor_config.last_export_subtitles?MF_CHECKED : MF_UNCHECKED); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_RADIO_1PLAYER: - TASEdit_last_export_type = EXPORT_TYPE_1P; + taseditor_config.last_export_type = EXPORT_TYPE_1P; break; case IDC_RADIO_2PLAYERS: - TASEdit_last_export_type = EXPORT_TYPE_2P; + taseditor_config.last_export_type = EXPORT_TYPE_2P; break; case IDC_RADIO_FOURSCORE: - TASEdit_last_export_type = EXPORT_TYPE_FOURSCORE; + taseditor_config.last_export_type = EXPORT_TYPE_FOURSCORE; break; case IDC_NOTES_TO_SUBTITLES: - TASEdit_last_export_subtitles ^= 1; - CheckDlgButton(hwndDlg, IDC_NOTES_TO_SUBTITLES, TASEdit_last_export_subtitles?MF_CHECKED : MF_UNCHECKED); + taseditor_config.last_export_subtitles ^= 1; + CheckDlgButton(hwndDlg, IDC_NOTES_TO_SUBTITLES, taseditor_config.last_export_subtitles?MF_CHECKED : MF_UNCHECKED); break; case IDOK: EndDialog(hwndDlg, 1); @@ -1196,7 +1077,7 @@ BOOL CALLBACK ExportProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPara void Export() { - if (DialogBox(fceu_hInstance, MAKEINTRESOURCE(IDD_TASEDIT_EXPORT), hwndTasEdit, ExportProc) > 0) + if (DialogBox(fceu_hInstance, MAKEINTRESOURCE(IDD_TASEDIT_EXPORT), taseditor_window.hwndTasEditor, ExportProc) > 0) { const char filter[] = "FCEUX Movie File (*.fm2)\0*.fm2\0All Files (*.*)\0*.*\0\0"; char fname[2048]; @@ -1204,7 +1085,7 @@ void Export() OPENFILENAME ofn; memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = hwndTasEdit; + ofn.hwndOwner = taseditor_window.hwndTasEditor; ofn.hInstance = fceu_hInstance; ofn.lpstrTitle = "Export to FM2"; ofn.lpstrFilter = filter; @@ -1220,7 +1101,7 @@ void Export() // create copy of current movie data MovieData temp_md = currMovieData; // modify the copy according to selected type of export - switch (TASEdit_last_export_type) + switch (taseditor_config.last_export_type) { case EXPORT_TYPE_1P: { @@ -1243,7 +1124,7 @@ void Export() } } temp_md.loadFrameCount = -1; - if (TASEdit_last_export_subtitles) + if (taseditor_config.last_export_subtitles) { // convert Marker Notes to Movie Subtitles char framenum[11]; @@ -1270,750 +1151,14 @@ void Export() } } -BOOL CALLBACK WndprocTasEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - switch(uMsg) - { - case WM_PAINT: - break; - case WM_INITDIALOG: - { - if (TasEdit_wndx==-32000) TasEdit_wndx=0; //Just in case - if (TasEdit_wndy==-32000) TasEdit_wndy=0; - SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hTaseditorIcon); - SetWindowPos(hwndDlg, 0, TasEdit_wndx, TasEdit_wndy, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); - break; - } - case WM_MOVE: - { - if (!IsIconic(hwndDlg)) - { - RECT wrect; - GetWindowRect(hwndDlg, &wrect); - TasEdit_wndx = wrect.left; - TasEdit_wndy = wrect.top; - WindowBoundsCheckNoResize(TasEdit_wndx, TasEdit_wndy, wrect.right); - // also move screenshot display if it's open - screenshot_display.ParentWindowMoved(); - } - break; - } - case WM_NOTIFY: - switch(wParam) - { - case IDC_LIST1: - switch(((LPNMHDR)lParam)->code) - { - case NM_CUSTOMDRAW: - SetWindowLong(hwndDlg, DWL_MSGRESULT, tasedit_list.CustomDraw((NMLVCUSTOMDRAW*)lParam)); - return TRUE; - case LVN_GETDISPINFO: - tasedit_list.GetDispInfo((NMLVDISPINFO*)lParam); - break; - case NM_CLICK: - SingleClick((LPNMITEMACTIVATE)lParam); - break; - case NM_DBLCLK: - DoubleClick((LPNMITEMACTIVATE)lParam); - break; - case NM_RCLICK: - RightClick((LPNMITEMACTIVATE)lParam); - break; - case LVN_ITEMCHANGED: - selection.ItemChanged((LPNMLISTVIEW) lParam); - break; - case LVN_ODSTATECHANGED: - selection.ItemRangeChanged((LPNMLVODSTATECHANGE) lParam); - break; - /* - case LVN_ENDSCROLL: - // redraw upper and lower list rows (fix for known WinXP bug) - int start = ListView_GetTopIndex(hwndList); - ListView_RedrawItems(hwndList,start,start); - int end = start + listItems - 1; - ListView_RedrawItems(hwndList,end,end); - break; - */ - } - break; - case IDC_BOOKMARKSLIST: - switch(((LPNMHDR)lParam)->code) - { - case NM_CUSTOMDRAW: - SetWindowLong(hwndDlg, DWL_MSGRESULT, bookmarks.CustomDraw((NMLVCUSTOMDRAW*)lParam)); - return TRUE; - case LVN_GETDISPINFO: - bookmarks.GetDispInfo((NMLVDISPINFO*)lParam); - break; - case NM_CLICK: - case NM_DBLCLK: - bookmarks.LeftClick((LPNMITEMACTIVATE)lParam); - break; - case NM_RCLICK: - bookmarks.RightClick((LPNMITEMACTIVATE)lParam); - break; - } - break; - case IDC_HISTORYLIST: - switch(((LPNMHDR)lParam)->code) - { - case NM_CUSTOMDRAW: - SetWindowLong(hwndDlg, DWL_MSGRESULT, history.CustomDraw((NMLVCUSTOMDRAW*)lParam)); - return TRUE; - case LVN_GETDISPINFO: - history.GetDispInfo((NMLVDISPINFO*)lParam); - break; - case NM_CLICK: - case NM_DBLCLK: - case NM_RCLICK: - history.Click((LPNMITEMACTIVATE)lParam); - break; - } - break; - case TASEDIT_PLAYSTOP: - switch(((LPNMHDR)lParam)->code) - { - case NM_CLICK: - case NM_DBLCLK: - playback.ToggleEmulationPause(); - break; - } - break; - } - break; - case WM_CLOSE: - case WM_QUIT: - ExitTasEdit(); - break; - case WM_ACTIVATE: - if(LOWORD(wParam)) - { - TASEdit_focus = true; - SetTaseditInput(); - } else - { - TASEdit_focus = false; - ClearTaseditInput(); - } - break; - case WM_CTLCOLORSTATIC: - if ((HWND)lParam == playback.hwndPlaybackMarker) - { - SetTextColor((HDC)wParam, PLAYBACK_MARKER_COLOR); - SetBkMode((HDC)wParam, TRANSPARENT); - return (BOOL)(tasedit_list.bg_brush); - } else if ((HWND)lParam == selection.hwndSelectionMarker) - { - SetTextColor((HDC)wParam, GetSysColor(COLOR_HIGHLIGHT)); - SetBkMode((HDC)wParam, TRANSPARENT); - return (BOOL)tasedit_list.bg_brush; - } - - break; - case WM_COMMAND: - { - unsigned int loword_wparam = LOWORD(wParam); - // first check clicking Recent submenu item - if (loword_wparam >= MENU_FIRST_RECENT_PROJECT && loword_wparam < MENU_FIRST_RECENT_PROJECT + MAX_NUMBER_OF_RECENT_PROJECTS) - { - LoadRecentProject(loword_wparam - MENU_FIRST_RECENT_PROJECT); - break; - } - // finally check all other commands - switch(loword_wparam) - { - case IDC_PLAYBACK_MARKER_EDIT: - { - switch (HIWORD(wParam)) - { - case EN_SETFOCUS: - { - marker_note_edit = MARKER_NOTE_EDIT_UPPER; - // enable editing - SendMessage(playback.hwndPlaybackMarkerEdit, EM_SETREADONLY, false, 0); - // disable FCEUX keyboard - ClearTaseditInput(); - if (TASEdit_follow_note_context) - tasedit_list.FollowPlayback(); - break; - } - case EN_KILLFOCUS: - { - if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) - { - UpdateMarkerNote(); - marker_note_edit = MARKER_NOTE_EDIT_NONE; - } - // disable editing (make it grayed) - SendMessage(playback.hwndPlaybackMarkerEdit, EM_SETREADONLY, true, 0); - // enable FCEUX keyboard - if (TASEdit_focus) - SetTaseditInput(); - break; - } - } - break; - } - case IDC_SELECTION_MARKER_EDIT: - { - switch (HIWORD(wParam)) - { - case EN_SETFOCUS: - { - marker_note_edit = MARKER_NOTE_EDIT_LOWER; - // enable editing - SendMessage(selection.hwndSelectionMarkerEdit, EM_SETREADONLY, false, 0); - // disable FCEUX keyboard - ClearTaseditInput(); - if (TASEdit_follow_note_context) - tasedit_list.FollowSelection(); - break; - } - case EN_KILLFOCUS: - { - if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) - { - UpdateMarkerNote(); - marker_note_edit = MARKER_NOTE_EDIT_NONE; - } - // disable editing (make it grayed) - SendMessage(selection.hwndSelectionMarkerEdit, EM_SETREADONLY, true, 0); - // enable FCEUX keyboard - if (TASEdit_focus) - SetTaseditInput(); - break; - } - } - break; - } - case ID_FILE_OPENPROJECT: - OpenProject(); - break; - case ACCEL_CTRL_S: - case ID_FILE_SAVEPROJECT: - SaveProject(); - break; - case ID_FILE_SAVEPROJECTAS: - SaveProjectAs(); - break; - case ID_FILE_SAVECOMPACT: - SaveCompact(); - break; - case ID_FILE_IMPORT: - Import(); - break; - case ID_FILE_EXPORTFM2: - Export(); - break; - case ID_TASEDIT_FILE_CLOSE: - ExitTasEdit(); - break; - case ID_EDIT_SELECTALL: - if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) - SendMessage(playback.hwndPlaybackMarkerEdit, EM_SETSEL, 0, -1); - else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) - SendMessage(selection.hwndSelectionMarkerEdit, EM_SETSEL, 0, -1); - else - selection.SelectAll(); - break; - case ACCEL_CTRL_X: - case ID_TASEDIT_CUT: - if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) - SendMessage(playback.hwndPlaybackMarkerEdit, WM_CUT, 0, 0); - else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) - SendMessage(selection.hwndSelectionMarkerEdit, WM_CUT, 0, 0); - else - Cut(); - break; - case ACCEL_CTRL_C: - case ID_TASEDIT_COPY: - if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) - SendMessage(playback.hwndPlaybackMarkerEdit, WM_COPY, 0, 0); - else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) - SendMessage(selection.hwndSelectionMarkerEdit, WM_COPY, 0, 0); - else - Copy(); - break; - case ACCEL_CTRL_V: - case ID_TASEDIT_PASTE: - if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) - SendMessage(playback.hwndPlaybackMarkerEdit, WM_PASTE, 0, 0); - else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) - SendMessage(selection.hwndSelectionMarkerEdit, WM_PASTE, 0, 0); - else - Paste(); - break; - case ACCEL_SHIFT_V: - { - // hack to allow entering Shift-V into edit control even though accelerator steals the input - char insert_v[] = "v"; - char insert_V[] = "V"; - if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) - { - if (GetKeyState(VK_CAPITAL) & 1) - SendMessage(playback.hwndPlaybackMarkerEdit, EM_REPLACESEL, true, (LPARAM)insert_v); - else - SendMessage(playback.hwndPlaybackMarkerEdit, EM_REPLACESEL, true, (LPARAM)insert_V); - } else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) - { - if (GetKeyState(VK_CAPITAL) & 1) - SendMessage(selection.hwndSelectionMarkerEdit, EM_REPLACESEL, true, (LPARAM)insert_v); - else - SendMessage(selection.hwndSelectionMarkerEdit, EM_REPLACESEL, true, (LPARAM)insert_V); - } else - PasteInsert(); - break; - } - case ID_EDIT_PASTEINSERT: - if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) - SendMessage(playback.hwndPlaybackMarkerEdit, WM_PASTE, 0, 0); - else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) - SendMessage(selection.hwndSelectionMarkerEdit, WM_PASTE, 0, 0); - else - PasteInsert(); - break; - case ACCEL_CTRL_DELETE: - case ID_TASEDIT_DELETE: - case ID_CONTEXT_SELECTED_DELETEFRAMES: - DeleteFrames(); - break; - case ACCEL_CTRL_T: - case ID_EDIT_TRUNCATE: - case ID_CONTEXT_SELECTED_TRUNCATE: - case ID_CONTEXT_STRAY_TRUNCATE: - Truncate(); - break; - case ID_HELP_TASEDITHELP: - { - //OpenHelpWindow(tasedithelp); - string helpFileName = BaseDirectory; - helpFileName.append(taseditor_help_filename); - HtmlHelp(GetDesktopWindow(), helpFileName.c_str(), HH_DISPLAY_TOPIC, (DWORD)NULL); - break; - } - case ACCEL_INS: - case ID_EDIT_INSERT: - case MENU_CONTEXT_STRAY_INSERTFRAMES: - case ID_CONTEXT_SELECTED_INSERTFRAMES2: - InsertNumFrames(); - break; - case ACCEL_SHIFT_INS: - case ID_EDIT_INSERTFRAMES: - case ID_CONTEXT_SELECTED_INSERTFRAMES: - InsertFrames(); - break; - case ACCEL_DEL: - case ID_EDIT_CLEAR: - case ID_CONTEXT_SELECTED_CLEARFRAMES: - if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) - { - DWORD sel_start, sel_end; - SendMessage(playback.hwndPlaybackMarkerEdit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end); - if (sel_start == sel_end) - SendMessage(playback.hwndPlaybackMarkerEdit, EM_SETSEL, sel_start, sel_start + 1); - SendMessage(playback.hwndPlaybackMarkerEdit, WM_CLEAR, 0, 0); - } else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) - { - DWORD sel_start, sel_end; - SendMessage(selection.hwndSelectionMarkerEdit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end); - if (sel_start == sel_end) - SendMessage(selection.hwndSelectionMarkerEdit, EM_SETSEL, sel_start, sel_start + 1); - SendMessage(selection.hwndSelectionMarkerEdit, WM_CLEAR, 0, 0); - } else - ClearFrames(); - break; - case TASEDIT_PLAYSTOP: - playback.ToggleEmulationPause(); - break; - case CHECK_FOLLOW_CURSOR: - //switch "Follow playback" flag - TASEdit_follow_playback ^= 1; - CheckDlgButton(hwndTasEdit, CHECK_FOLLOW_CURSOR, TASEdit_follow_playback?MF_CHECKED : MF_UNCHECKED); - // if switched off then jump to selection - if (!TASEdit_follow_playback && playback.GetPauseFrame()) - tasedit_list.FollowPauseframe(); - break; - case CHECK_TURBO_SEEK: - //switch "Turbo seek" flag - TASEdit_turbo_seek ^= 1; - CheckDlgButton(hwndTasEdit, CHECK_TURBO_SEEK, TASEdit_turbo_seek?MF_CHECKED : MF_UNCHECKED); - // if currently seeking, apply this option immediately - if (playback.pause_frame) - turbo = TASEdit_turbo_seek; - break; - case ID_VIEW_SHOW_LAG_FRAMES: - TASEdit_show_lag_frames ^= 1; - CheckMenuItem(hmenu, ID_VIEW_SHOW_LAG_FRAMES, TASEdit_show_lag_frames?MF_CHECKED : MF_UNCHECKED); - tasedit_list.RedrawList(); - bookmarks.RedrawBookmarksList(); - break; - case ID_VIEW_SHOW_MARKERS: - TASEdit_show_markers ^= 1; - CheckMenuItem(hmenu, ID_VIEW_SHOW_MARKERS, TASEdit_show_markers?MF_CHECKED : MF_UNCHECKED); - tasedit_list.RedrawList(); // no need to redraw Bookmarks, as Markers are only shown in main list - break; - case ID_VIEW_SHOWBRANCHSCREENSHOTS: - //switch "Show Branch Screenshots" flag - TASEdit_show_branch_screenshots ^= 1; - CheckMenuItem(hmenu, ID_VIEW_SHOWBRANCHSCREENSHOTS, TASEdit_show_branch_screenshots?MF_CHECKED : MF_UNCHECKED); - break; - case ID_VIEW_SHOWBRANCHTOOLTIPS: - //switch "Show Branch Screenshots" flag - TASEdit_show_branch_tooltips ^= 1; - CheckMenuItem(hmenu, ID_VIEW_SHOWBRANCHTOOLTIPS, TASEdit_show_branch_tooltips?MF_CHECKED : MF_UNCHECKED); - break; - case ID_VIEW_ENABLEHOTCHANGES: - TASEdit_enable_hot_changes ^= 1; - CheckMenuItem(hmenu, ID_VIEW_ENABLEHOTCHANGES, TASEdit_enable_hot_changes?MF_CHECKED : MF_UNCHECKED); - tasedit_list.RedrawList(); // redraw buttons text - break; - case ID_VIEW_JUMPWHENMAKINGUNDO: - TASEdit_jump_to_undo ^= 1; - CheckMenuItem(hmenu, ID_VIEW_JUMPWHENMAKINGUNDO, TASEdit_jump_to_undo?MF_CHECKED : MF_UNCHECKED); - break; - case ID_VIEW_FOLLOWMARKERNOTECONTEXT: - TASEdit_follow_note_context ^= 1; - CheckMenuItem(hmenu, ID_VIEW_FOLLOWMARKERNOTECONTEXT, TASEdit_follow_note_context?MF_CHECKED : MF_UNCHECKED); - break; - case ACCEL_CTRL_P: - case CHECK_AUTORESTORE_PLAYBACK: - //switch "Auto-restore last playback position" flag - TASEdit_restore_position ^= 1; - CheckDlgButton(hwndTasEdit,CHECK_AUTORESTORE_PLAYBACK,TASEdit_restore_position?BST_CHECKED:BST_UNCHECKED); - break; - case ID_CONFIG_SETGREENZONECAPACITY: - { - int new_capacity = TASEdit_greenzone_capacity; - if(CWin32InputBox::GetInteger("Greenzone capacity", "Keep savestates for how many frames?\n(actual limit of savestates can be 5 times more than the number provided)", new_capacity, hwndDlg) == IDOK) - { - if (new_capacity < GREENZONE_CAPACITY_MIN) - new_capacity = GREENZONE_CAPACITY_MIN; - else if (new_capacity > GREENZONE_CAPACITY_MAX) - new_capacity = GREENZONE_CAPACITY_MAX; - if (new_capacity < TASEdit_greenzone_capacity) - { - TASEdit_greenzone_capacity = new_capacity; - greenzone.GreenzoneCleaning(); - } else TASEdit_greenzone_capacity = new_capacity; - } - break; - } - case ID_CONFIG_SETMAXUNDOLEVELS: - { - int new_size = TasEdit_undo_levels; - if(CWin32InputBox::GetInteger("Max undo levels", "Keep history of how many changes?", new_size, hwndDlg) == IDOK) - { - if (new_size < UNDO_LEVELS_MIN) - new_size = UNDO_LEVELS_MIN; - else if (new_size > UNDO_LEVELS_MAX) - new_size = UNDO_LEVELS_MAX; - if (new_size != TasEdit_undo_levels) - { - TasEdit_undo_levels = new_size; - history.reset(); - selection.reset(); - // hot changes were cleared, so update list - tasedit_list.RedrawList(); - } - } - break; - } - case ID_CONFIG_SETAUTOSAVEPERIOD: - { - int new_period = TASEdit_autosave_period; - if(CWin32InputBox::GetInteger("Autosave period", "How many minutes may the project stay not saved after being changed?\n(0 = no autosaves)", new_period, hwndDlg) == IDOK) - { - if (new_period < AUTOSAVE_PERIOD_MIN) - new_period = AUTOSAVE_PERIOD_MIN; - else if (new_period > AUTOSAVE_PERIOD_MAX) - new_period = AUTOSAVE_PERIOD_MAX; - TASEdit_autosave_period = new_period; - project.SheduleNextAutosave(); - } - break; - } - case ID_CONFIG_BRANCHESRESTOREFULLMOVIE: - //switch "Branches restore entire Movie" flag - TASEdit_branch_full_movie ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_BRANCHESRESTOREFULLMOVIE, TASEdit_branch_full_movie?MF_CHECKED : MF_UNCHECKED); - break; - case ID_CONFIG_BRANCHESWORKONLYWHENRECORDING: - //switch "Branches work only when Recording" flag - TASEdit_branch_only_when_rec ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_BRANCHESWORKONLYWHENRECORDING, TASEdit_branch_only_when_rec?MF_CHECKED : MF_UNCHECKED); - bookmarks.RedrawBookmarksCaption(); - break; - case ID_CONFIG_HUDINBRANCHSCREENSHOTS: - //switch "HUD in Branch screenshots" flag - TASEdit_branch_scr_hud ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_HUDINBRANCHSCREENSHOTS, TASEdit_branch_scr_hud?MF_CHECKED : MF_UNCHECKED); - break; - case ID_CONFIG_BINDMARKERSTOINPUT: - TASEdit_bind_markers ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_BINDMARKERSTOINPUT, TASEdit_bind_markers?MF_CHECKED : MF_UNCHECKED); - tasedit_list.RedrawList(); - break; - case ID_CONFIG_EMPTYNEWMARKERNOTES: - TASEdit_empty_marker_notes ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_EMPTYNEWMARKERNOTES, TASEdit_empty_marker_notes?MF_CHECKED : MF_UNCHECKED); - break; - case ID_CONFIG_COMBINECONSECUTIVERECORDINGS: - //switch "Combine consecutive Recordings" flag - TASEdit_combine_consecutive_rec ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_COMBINECONSECUTIVERECORDINGS, TASEdit_combine_consecutive_rec?MF_CHECKED : MF_UNCHECKED); - break; - case ID_CONFIG_USE1PFORRECORDING: - //switch "Use 1P keys for single Recordings" flag - TASEdit_use_1p_rec ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_USE1PFORRECORDING, TASEdit_use_1p_rec?MF_CHECKED : MF_UNCHECKED); - break; - case ID_CONFIG_USEINPUTKEYSFORCOLUMNSET: - TASEdit_columnset_by_keys ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_USEINPUTKEYSFORCOLUMNSET, TASEdit_columnset_by_keys?MF_CHECKED : MF_UNCHECKED); - break; - case ID_CONFIG_KEYBOARDCONTROLSINLISTVIEW: - TASEdit_keyboard_for_listview ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_KEYBOARDCONTROLSINLISTVIEW, TASEdit_keyboard_for_listview?MF_CHECKED : MF_UNCHECKED); - break; - case ID_CONFIG_SUPERIMPOSE_AFFECTS_PASTE: - TASEdit_superimpose_affects_paste ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_SUPERIMPOSE_AFFECTS_PASTE, TASEdit_superimpose_affects_paste?MF_CHECKED : MF_UNCHECKED); - break; - case ID_CONFIG_MUTETURBO: - muteTurbo ^= 1; - CheckMenuItem(hmenu, ID_CONFIG_MUTETURBO, muteTurbo?MF_CHECKED : MF_UNCHECKED); - break; - case IDC_PROGRESS_BUTTON: - // click on progressbar - stop seeking - if (playback.GetPauseFrame()) playback.SeekingStop(); - break; - case IDC_BRANCHES_BUTTON: - // click on "Bookmarks/Branches" - switch "View Tree of branches" - TASEdit_view_branches_tree ^= 1; - bookmarks.RedrawBookmarksCaption(); - break; - case IDC_RECORDING: - // toggle readonly, no need to recheck radiobuttons - FCEUI_MovieToggleReadOnly(); - CheckDlgButton(hwndTasEdit, IDC_RECORDING, movie_readonly?BST_UNCHECKED : BST_CHECKED); - break; - case IDC_RADIO2: - recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_ALL; - break; - case IDC_RADIO3: - recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_1P; - break; - case IDC_RADIO4: - recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_2P; - break; - case IDC_RADIO5: - recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_3P; - break; - case IDC_RADIO6: - recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_4P; - break; - case IDC_SUPERIMPOSE: - // 3 states of "Superimpose" checkbox - if (TASEdit_superimpose == BST_UNCHECKED) - TASEdit_superimpose = BST_CHECKED; - else if (TASEdit_superimpose == BST_CHECKED) - TASEdit_superimpose = BST_INDETERMINATE; - else TASEdit_superimpose = BST_UNCHECKED; - CheckDlgButton(hwndTasEdit, IDC_SUPERIMPOSE, TASEdit_superimpose); - break; - case ACCEL_CTRL_A: - if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) - SendMessage(playback.hwndPlaybackMarkerEdit, EM_SETSEL, 0, -1); - else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) - SendMessage(selection.hwndSelectionMarkerEdit, EM_SETSEL, 0, -1); - else - selection.SelectMidMarkers(); - break; - case ID_EDIT_SELECTMIDMARKERS: - case ID_SELECTED_SELECTMIDMARKERS: - selection.SelectMidMarkers(); - break; - case ACCEL_CTRL_INSERT: - case ID_EDIT_CLONEFRAMES: - case ID_SELECTED_CLONE: - CloneFrames(); - break; - case ACCEL_CTRL_Z: - case ID_EDIT_UNDO: - { - if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) - { - SendMessage(playback.hwndPlaybackMarkerEdit, WM_UNDO, 0, 0); - } else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) - { - SendMessage(selection.hwndSelectionMarkerEdit, WM_UNDO, 0, 0); - } else - { - int result = history.undo(); - if (result >= 0) - { - tasedit_list.update(); - tasedit_list.FollowUndo(); - greenzone.InvalidateAndCheck(result); - } - } - break; - } - case ACCEL_CTRL_Y: - case ID_EDIT_REDO: - { - int result = history.redo(); - if (result >= 0) - { - tasedit_list.update(); - tasedit_list.FollowUndo(); - greenzone.InvalidateAndCheck(result); - } - break; - } - case ID_EDIT_SELECTIONUNDO: - case ACCEL_CTRL_Q: - { - selection.undo(); - tasedit_list.FollowSelection(); - break; - } - case ID_EDIT_SELECTIONREDO: - case ACCEL_CTRL_W: - { - selection.redo(); - tasedit_list.FollowSelection(); - break; - } - case ID_EDIT_RESELECTCLIPBOARD: - case ACCEL_CTRL_B: - { - selection.ReselectClipboard(); - tasedit_list.FollowSelection(); - break; - } - case IDC_JUMP_PLAYBACK_BUTTON: - { - tasedit_list.FollowPlayback(); - break; - } - case IDC_JUMP_SELECTION_BUTTON: - { - tasedit_list.FollowSelection(); - break; - } - case ID_SELECTED_SETMARKER: - { - SelectionFrames* current_selection = selection.MakeStrobe(); - if (current_selection->size()) - { - SelectionFrames::iterator current_selection_begin(current_selection->begin()); - SelectionFrames::iterator current_selection_end(current_selection->end()); - bool changes_made = false; - for(SelectionFrames::iterator it(current_selection_begin); it != current_selection_end; it++) - { - if(!current_markers.GetMarker(*it)) - { - if (current_markers.SetMarker(*it)) - { - changes_made = true; - tasedit_list.RedrawRow(*it); - } - } - } - if (changes_made) - { - selection.must_find_current_marker = playback.must_find_current_marker = true; - history.RegisterMarkersChange(MODTYPE_MARKER_SET, *current_selection_begin, *current_selection->rbegin()); - } - } - break; - } - case ID_SELECTED_REMOVEMARKER: - { - SelectionFrames* current_selection = selection.MakeStrobe(); - if (current_selection->size()) - { - SelectionFrames::iterator current_selection_begin(current_selection->begin()); - SelectionFrames::iterator current_selection_end(current_selection->end()); - bool changes_made = false; - for(SelectionFrames::iterator it(current_selection_begin); it != current_selection_end; it++) - { - if(current_markers.GetMarker(*it)) - { - current_markers.ClearMarker(*it); - changes_made = true; - tasedit_list.RedrawRow(*it); - } - } - if (changes_made) - { - selection.must_find_current_marker = playback.must_find_current_marker = true; - history.RegisterMarkersChange(MODTYPE_MARKER_UNSET, *current_selection_begin, *current_selection->rbegin()); - } - } - break; - } - case ACCEL_SHIFT_PGUP: - if (!playback.jump_was_used_this_frame) - playback.RewindFull(); - break; - case ACCEL_SHIFT_PGDN: - if (!playback.jump_was_used_this_frame) - playback.ForwardFull(); - break; - case ACCEL_CTRL_PGUP: - selection.JumpPrevMarker(); - break; - case ACCEL_CTRL_PGDN: - selection.JumpNextMarker(); - break; - case ACCEL_CTRL_F: - case ID_VIEW_FINDNOTE: - { - if (hwndFindNote) - SetFocus(GetDlgItem(hwndFindNote, IDC_NOTE_TO_FIND)); - else - hwndFindNote = CreateDialog(fceu_hInstance, MAKEINTRESOURCE(IDD_TASEDIT_FINDNOTE), hwndTasEdit, FindNoteProc); - break; - } - case TASEDIT_FIND_BEST_SIMILAR_MARKER: - search_similar_marker = 0; - current_markers.FindSimilar(search_similar_marker); - search_similar_marker++; - break; - case TASEDIT_FIND_NEXT_SIMILAR_MARKER: - current_markers.FindSimilar(search_similar_marker); - search_similar_marker++; - break; - case ID_HELP_ABOUT: - DialogBox(fceu_hInstance, MAKEINTRESOURCE(IDD_TASEDIT_ABOUT), hwndTasEdit, AboutProc); - break; - - - } - break; - } - case WM_SYSKEYDOWN: - { - if (wParam == VK_F10) - return 0; - break; - } - default: - break; - } - return FALSE; -} - bool EnterTasEdit() { if(!FCEU_IsValidUI(FCEUI_TASEDIT)) return false; - if(!hwndTasEdit) + if(!taseditor_window.hwndTasEditor) { - hTaseditorIcon = (HICON)LoadImage(fceu_hInstance, MAKEINTRESOURCE(IDI_ICON3), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE); - hwndTasEdit = CreateDialog(fceu_hInstance, "TASEDIT", hAppWnd, WndprocTasEdit); - if(hwndTasEdit) + // start TAS Editor + taseditor_window.init(); + if(taseditor_window.hwndTasEditor) { SetTaseditInput(); // save "eoptions" @@ -2030,42 +1175,24 @@ bool EnterTasEdit() EnableAutosave = 0; UpdateCheckedMenuItems(); - hmenu = GetMenu(hwndTasEdit); - hrmenu = LoadMenu(fceu_hInstance,"TASEDITCONTEXTMENUS"); - recent_projects_menu = CreateMenu(); - UpdateRecentProjectsMenu(); - // check option ticks - CheckDlgButton(hwndTasEdit, CHECK_FOLLOW_CURSOR, TASEdit_follow_playback?MF_CHECKED : MF_UNCHECKED); - CheckDlgButton(hwndTasEdit, CHECK_TURBO_SEEK, TASEdit_turbo_seek?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_VIEW_SHOW_LAG_FRAMES, TASEdit_show_lag_frames?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_VIEW_SHOW_MARKERS, TASEdit_show_markers?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_VIEW_SHOWBRANCHSCREENSHOTS, TASEdit_show_branch_screenshots?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_VIEW_SHOWBRANCHTOOLTIPS, TASEdit_show_branch_tooltips?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_VIEW_JUMPWHENMAKINGUNDO, TASEdit_jump_to_undo?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_VIEW_FOLLOWMARKERNOTECONTEXT, TASEdit_follow_note_context?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_VIEW_ENABLEHOTCHANGES, TASEdit_enable_hot_changes?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_BRANCHESRESTOREFULLMOVIE, TASEdit_branch_full_movie?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_BRANCHESWORKONLYWHENRECORDING, TASEdit_branch_only_when_rec?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_HUDINBRANCHSCREENSHOTS, TASEdit_branch_scr_hud?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_BINDMARKERSTOINPUT, TASEdit_bind_markers?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_EMPTYNEWMARKERNOTES, TASEdit_empty_marker_notes?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_COMBINECONSECUTIVERECORDINGS, TASEdit_combine_consecutive_rec?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_USE1PFORRECORDING, TASEdit_use_1p_rec?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_USEINPUTKEYSFORCOLUMNSET, TASEdit_columnset_by_keys?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_KEYBOARDCONTROLSINLISTVIEW, TASEdit_keyboard_for_listview?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_SUPERIMPOSE_AFFECTS_PASTE, TASEdit_superimpose_affects_paste?MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hmenu, ID_CONFIG_MUTETURBO, muteTurbo?MF_CHECKED : MF_UNCHECKED); - CheckDlgButton(hwndTasEdit,CHECK_AUTORESTORE_PLAYBACK,TASEdit_restore_position?BST_CHECKED:BST_UNCHECKED); - CheckDlgButton(hwndTasEdit, IDC_SUPERIMPOSE, TASEdit_superimpose); - - SetWindowPos(hwndTasEdit, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); // init modules - greenzone.init(); + list.init(); + selection.init(); playback.init(); + greenzone.init(); + recorder.init(); + current_markers.init(); + project.init(); + bookmarks.init(); + popup_display.init(); + history.init(); + taseditor_lua.init(); // either start new movie or use current movie if (FCEUMOV_Mode(MOVIEMODE_INACTIVE)) { + // create new movie FCEUI_StopMovie(); + movieMode = MOVIEMODE_TASEDIT; CreateCleanMovie(); playback.StartFromZero(); } else @@ -2074,34 +1201,27 @@ bool EnterTasEdit() if (currMovieData.savestate.size() != 0) { FCEUD_PrintError("This version of TAS Editor doesn't work with movies starting from savestate."); - // delete savestate, but preserve input + // delete savestate, but preserve input anyway currMovieData.savestate.clear(); } FCEUI_StopMovie(); + movieMode = MOVIEMODE_TASEDIT; currMovieData.emuVersion = FCEU_VERSION_NUMERIC; greenzone.TryDumpIncremental(lagFlag != 0); } - // switch to taseditor mode - movieMode = MOVIEMODE_TASEDIT; + // now create initiasl snapshot in history + history.reset(); + // force the input configuration stored in the movie to apply to FCEUX config currMovieData.ports[0] = SI_GAMEPAD; currMovieData.ports[1] = SI_GAMEPAD; - //force the input configuration stored in the movie to apply FCEUD_SetInput(currMovieData.fourscore, currMovieData.microphone, (ESI)currMovieData.ports[0], (ESI)currMovieData.ports[1], (ESIFC)currMovieData.ports[2]); - // init variables - recorder.init(); - tasedit_list.init(); - current_markers.init(); - project.init(); - bookmarks.init(); - screenshot_display.init(); - history.init(); - selection.init(); + must_call_manual_lua_function = false; marker_note_edit = MARKER_NOTE_EDIT_NONE; search_similar_marker = 0; SetFocus(history.hwndHistoryList); // set focus only once, to show selection cursor - SetFocus(tasedit_list.hwndList); + SetFocus(list.hwndList); FCEU_DispMessage("TAS Editor engaged", 0); return true; } else return false; @@ -2112,16 +1232,18 @@ bool ExitTasEdit() { if (!AskSaveProject()) return false; - if (hwndFindNote) - { - DestroyWindow(hwndFindNote); - hwndFindNote = 0; - } - DestroyWindow(hwndTasEdit); - hwndTasEdit = 0; - TASEdit_focus = false; - DestroyIcon(hTaseditorIcon); - hTaseditorIcon = 0; + // destroy window + taseditor_window.exit(); + // release memory + list.free(); + current_markers.free(); + greenzone.free(); + bookmarks.free(); + popup_display.free(); + history.free(); + playback.SeekingStop(); + selection.free(); + ClearTaseditInput(); // restore "eoptions" eoptions = saved_eoptions; @@ -2129,15 +1251,6 @@ bool ExitTasEdit() EnableAutosave = saved_EnableAutosave; DoPriority(); UpdateCheckedMenuItems(); - // release memory - tasedit_list.free(); - current_markers.free(); - greenzone.free(); - bookmarks.free(); - screenshot_display.free(); - history.free(); - playback.SeekingStop(); - selection.free(); // switch off taseditor mode movieMode = MOVIEMODE_INACTIVE; FCEU_DispMessage("TAS Editor disengaged", 0); @@ -2203,12 +1316,12 @@ BOOL CALLBACK FindNoteProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPa { case WM_INITDIALOG: { - if (FindNote_wndx == -32000) FindNote_wndx = 0; //Just in case - if (TasEdit_wndy == -32000) FindNote_wndy = 0; - SetWindowPos(hwndDlg, 0, FindNote_wndx, FindNote_wndy, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); + if (taseditor_config.findnote_wndx == -32000) taseditor_config.findnote_wndx = 0; //Just in case + if (taseditor_config.findnote_wndy == -32000) taseditor_config.findnote_wndy = 0; + SetWindowPos(hwndDlg, 0, taseditor_config.findnote_wndx, taseditor_config.findnote_wndy, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); - CheckDlgButton(hwndDlg, IDC_MATCH_CASE, TASEdit_findnote_matchcase?MF_CHECKED : MF_UNCHECKED); - if (TASEdit_findnote_search_up) + CheckDlgButton(hwndDlg, IDC_MATCH_CASE, taseditor_config.findnote_matchcase?MF_CHECKED : MF_UNCHECKED); + if (taseditor_config.findnote_search_up) Button_SetCheck(GetDlgItem(hwndDlg, IDC_RADIO_UP), BST_CHECKED); else Button_SetCheck(GetDlgItem(hwndDlg, IDC_RADIO_DOWN), BST_CHECKED); @@ -2228,9 +1341,9 @@ BOOL CALLBACK FindNoteProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPa { RECT wrect; GetWindowRect(hwndDlg, &wrect); - FindNote_wndx = wrect.left; - FindNote_wndy = wrect.top; - WindowBoundsCheckNoResize(FindNote_wndx, FindNote_wndy, wrect.right); + taseditor_config.findnote_wndx = wrect.left; + taseditor_config.findnote_wndy = wrect.top; + WindowBoundsCheckNoResize(taseditor_config.findnote_wndx, taseditor_config.findnote_wndy, wrect.right); } break; } @@ -2250,14 +1363,14 @@ BOOL CALLBACK FindNoteProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPa break; } case IDC_RADIO_UP: - TASEdit_findnote_search_up = true; + taseditor_config.findnote_search_up = true; break; case IDC_RADIO_DOWN: - TASEdit_findnote_search_up = false; + taseditor_config.findnote_search_up = false; break; case IDC_MATCH_CASE: - TASEdit_findnote_matchcase ^= 1; - CheckDlgButton(hwndDlg, IDC_MATCH_CASE, TASEdit_findnote_matchcase?MF_CHECKED : MF_UNCHECKED); + taseditor_config.findnote_matchcase ^= 1; + CheckDlgButton(hwndDlg, IDC_MATCH_CASE, taseditor_config.findnote_matchcase?MF_CHECKED : MF_UNCHECKED); break; case IDOK: { @@ -2268,17 +1381,17 @@ BOOL CALLBACK FindNoteProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPa bool result; int movie_size = currMovieData.getNumRecords(); int current_frame = selection.GetCurrentSelectionBeginning(); - if (current_frame < 0 && TASEdit_findnote_search_up) + if (current_frame < 0 && taseditor_config.findnote_search_up) current_frame = movie_size; while (true) { // move forward - if (TASEdit_findnote_search_up) + if (taseditor_config.findnote_search_up) { current_frame--; if (current_frame < 0) { - MessageBox(hwndFindNote, "Nothing was found.", "Find Note", MB_OK); + MessageBox(taseditor_window.hwndFindNote, "Nothing was found.", "Find Note", MB_OK); break; } } else @@ -2286,7 +1399,7 @@ BOOL CALLBACK FindNoteProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPa current_frame++; if (current_frame >= movie_size) { - MessageBox(hwndFindNote, "Nothing was found!", "Find Note", MB_OK); + MessageBox(taseditor_window.hwndFindNote, "Nothing was found!", "Find Note", MB_OK); break; } } @@ -2294,7 +1407,7 @@ BOOL CALLBACK FindNoteProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPa cur_marker = current_markers.GetMarker(current_frame); if (cur_marker) { - if (TASEdit_findnote_matchcase) + if (taseditor_config.findnote_matchcase) result = (strstr(current_markers.GetNote(cur_marker).c_str(), findnote_string) != 0); else result = (StrStrI(current_markers.GetNote(cur_marker).c_str(), findnote_string) != 0); @@ -2309,8 +1422,8 @@ BOOL CALLBACK FindNoteProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPa return TRUE; } case IDCANCEL: - DestroyWindow(hwndFindNote); - hwndFindNote = 0; + DestroyWindow(taseditor_window.hwndFindNote); + taseditor_window.hwndFindNote = 0; return TRUE; } break; @@ -2318,113 +1431,11 @@ BOOL CALLBACK FindNoteProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPa case WM_CLOSE: case WM_QUIT: { - DestroyWindow(hwndFindNote); - hwndFindNote = 0; + DestroyWindow(taseditor_window.hwndFindNote); + taseditor_window.hwndFindNote = 0; break; } } return FALSE; } -// -------------------------------------------------------------------------------------------- -void UpdateRecentProjectsMenu() -{ - MENUITEMINFO moo; - int x; - moo.cbSize = sizeof(moo); - moo.fMask = MIIM_SUBMENU | MIIM_STATE; - GetMenuItemInfo(GetSubMenu(hmenu, 0), ID_TASEDIT_FILE_RECENT, FALSE, &moo); - moo.hSubMenu = recent_projects_menu; - moo.fState = recent_projects[0] ? MFS_ENABLED : MFS_GRAYED; - SetMenuItemInfo(GetSubMenu(hmenu, 0), ID_TASEDIT_FILE_RECENT, FALSE, &moo); - - // Remove all recent files submenus - for(x = 0; x < MAX_NUMBER_OF_RECENT_PROJECTS; x++) - { - RemoveMenu(recent_projects_menu, MENU_FIRST_RECENT_PROJECT + x, MF_BYCOMMAND); - } - // Recreate the menus - for(x = MAX_NUMBER_OF_RECENT_PROJECTS - 1; x >= 0; x--) - { - // Skip empty strings - if(!recent_projects[x]) continue; - - string tmp = recent_projects[x]; - // clamp this string to 128 chars - if(tmp.size() > 128) - tmp = tmp.substr(0, 128); - - moo.cbSize = sizeof(moo); - moo.fMask = MIIM_DATA | MIIM_ID | MIIM_TYPE; - // Insert the menu item - moo.cch = tmp.size(); - moo.fType = 0; - moo.wID = MENU_FIRST_RECENT_PROJECT + x; - moo.dwTypeData = (LPSTR)tmp.c_str(); - InsertMenuItem(recent_projects_menu, 0, 1, &moo); - } - - // if recent_projects is empty, "Recent" manu should be grayed - int i; - for (i = 0; i < MAX_NUMBER_OF_RECENT_PROJECTS; ++i) - if (recent_projects[i]) break; - if (i < MAX_NUMBER_OF_RECENT_PROJECTS) - EnableMenuItem(hmenu, ID_TASEDIT_FILE_RECENT, MF_ENABLED); - else - EnableMenuItem(hmenu, ID_TASEDIT_FILE_RECENT, MF_GRAYED); - - DrawMenuBar(hwndTasEdit); -} -void UpdateRecentProjectsArray(const char* addString) -{ - // find out if the filename is already in the recent files list - for(unsigned int x = 0; x < MAX_NUMBER_OF_RECENT_PROJECTS; x++) - { - if(recent_projects[x]) - { - if(!strcmp(recent_projects[x], addString)) // Item is already in list - { - // If the filename is in the file list don't add it again, move it up in the list instead - char* tmp = recent_projects[x]; // save pointer - for(int y = x; y; y--) - // Move items down. - recent_projects[y] = recent_projects[y - 1]; - // Put item on top. - recent_projects[0] = tmp; - UpdateRecentProjectsMenu(); - return; - } - } - } - // The filename wasn't found in the list. That means we need to add it. - // If there's no space left in the recent files list, get rid of the last item in the list - if(recent_projects[MAX_NUMBER_OF_RECENT_PROJECTS-1]) - free(recent_projects[MAX_NUMBER_OF_RECENT_PROJECTS-1]); - // Move other items down - for(unsigned int x = MAX_NUMBER_OF_RECENT_PROJECTS-1; x; x--) - recent_projects[x] = recent_projects[x-1]; - // Add new item - recent_projects[0] = (char*)malloc(strlen(addString) + 1); - strcpy(recent_projects[0], addString); - - UpdateRecentProjectsMenu(); -} -void RemoveRecentProject(unsigned int which) -{ - if (which >= MAX_NUMBER_OF_RECENT_PROJECTS) return; - // Remove the item - if(recent_projects[which]) - free(recent_projects[which]); - // If the item is not the last one in the list, shift the remaining ones up - if (which < MAX_NUMBER_OF_RECENT_PROJECTS-1) - { - // Move the remaining items up - for(unsigned int x = which+1; x < MAX_NUMBER_OF_RECENT_PROJECTS; ++x) - { - recent_projects[x-1] = recent_projects[x]; // Shift each remaining item up by 1 - } - } - recent_projects[MAX_NUMBER_OF_RECENT_PROJECTS-1] = 0; // Clear out the last item since it is empty now - - UpdateRecentProjectsMenu(); -} diff --git a/src/drivers/win/tasedit.h b/src/drivers/win/tasedit.h index 1b7b77db..475a6abc 100644 --- a/src/drivers/win/tasedit.h +++ b/src/drivers/win/tasedit.h @@ -1,39 +1,16 @@ -#define GREENZONE_CAPACITY_MIN 1 -#define GREENZONE_CAPACITY_MAX 50000 -#define GREENZONE_CAPACITY_DEFAULT 10000 - -#define UNDO_LEVELS_MIN 1 -#define UNDO_LEVELS_MAX 999 -#define UNDO_LEVELS_DEFAULT 99 - -#define AUTOSAVE_PERIOD_MIN 0 // 0 = no autosave -#define AUTOSAVE_PERIOD_MAX 60 // 1 hour -#define AUTOSAVE_PERIOD_DEFAULT 10 // in minutes - -#define EXPORT_TYPE_1P 0 -#define EXPORT_TYPE_2P 1 -#define EXPORT_TYPE_FOURSCORE 2 - #define MARKER_NOTE_EDIT_NONE 0 #define MARKER_NOTE_EDIT_UPPER 1 #define MARKER_NOTE_EDIT_LOWER 2 -enum ECONTEXTMENU -{ - CONTEXTMENU_STRAY = 0, - CONTEXTMENU_SELECTED = 1, -}; - +void SingleClick(LPNMITEMACTIVATE info); +void DoubleClick(LPNMITEMACTIVATE info); bool EnterTasEdit(); void InitDialog(); bool ExitTasEdit(); void UpdateTasEdit(); -void RedrawTasedit(); -void RedrawWindowCaption(); void ToggleJoypadBit(int column_index, int row_index, UINT KeyFlags); void OpenProject(); bool LoadProject(char* fullname); -void LoadRecentProject(int slot); bool SaveProject(); bool SaveProjectAs(); void SaveCompact(); @@ -59,6 +36,3 @@ void ClearTaseditInput(); void UpdateMarkerNote(); -void UpdateRecentProjectsMenu(); -void UpdateRecentProjectsArray(const char* addString); -void RemoveRecentProject(unsigned int which); diff --git a/src/drivers/win/taseditlib/bookmark.cpp b/src/drivers/win/taseditlib/bookmark.cpp index 0b1290c2..4b7db280 100644 --- a/src/drivers/win/taseditlib/bookmark.cpp +++ b/src/drivers/win/taseditlib/bookmark.cpp @@ -1,14 +1,11 @@ //Implementation file of Bookmark class - -#include "taseditproj.h" +#include "taseditor_project.h" #include "zlib.h" +extern TASEDITOR_CONFIG taseditor_config; extern GREENZONE greenzone; extern INPUT_HISTORY history; -extern bool TASEdit_branch_scr_hud; -extern bool TASEdit_enable_hot_changes; - extern uint8 *XBuf; extern uint8 *XBackBuf; @@ -27,9 +24,9 @@ void BOOKMARK::init() void BOOKMARK::set() { // copy input and hotchanges - snapshot.init(currMovieData, TASEdit_enable_hot_changes); + snapshot.init(currMovieData, taseditor_config.enable_hot_changes); snapshot.jump_frame = currFrameCounter; - if (TASEdit_enable_hot_changes) + if (taseditor_config.enable_hot_changes) snapshot.copyHotChanges(&history.GetCurrentSnapshot()); // copy savestate savestate = greenzone.savestates[currFrameCounter]; @@ -37,7 +34,7 @@ void BOOKMARK::set() uLongf comprlen = (SCREENSHOT_SIZE>>9)+12 + SCREENSHOT_SIZE; saved_screenshot.resize(comprlen); // compress screenshot data - if (TASEdit_branch_scr_hud) + if (taseditor_config.branch_scr_hud) compress(&saved_screenshot[0], &comprlen, XBuf, SCREENSHOT_SIZE); else compress(&saved_screenshot[0], &comprlen, XBackBuf, SCREENSHOT_SIZE); diff --git a/src/drivers/win/taseditlib/bookmarks.cpp b/src/drivers/win/taseditlib/bookmarks.cpp index 81b9cdce..05fe6907 100644 --- a/src/drivers/win/taseditlib/bookmarks.cpp +++ b/src/drivers/win/taseditlib/bookmarks.cpp @@ -1,32 +1,25 @@ //Implementation file of Bookmarks class - -#include "taseditproj.h" +#include "taseditor_project.h" #include "utils/xstring.h" #include "zlib.h" #pragma comment(lib, "msimg32.lib") -extern HWND hwndTasEdit; - LRESULT APIENTRY BookmarksListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); LRESULT APIENTRY BranchesBitmapWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); WNDPROC hwndBookmarksList_oldWndProc, hwndBranchesBitmap_oldWndProc; -extern SCREENSHOT_DISPLAY screenshot_display; +extern TASEDITOR_CONFIG taseditor_config; +extern TASEDITOR_WINDOW taseditor_window; +extern POPUP_DISPLAY popup_display; extern PLAYBACK playback; -extern TASEDIT_SELECTION selection; +extern TASEDITOR_SELECTION selection; extern GREENZONE greenzone; -extern TASEDIT_PROJECT project; +extern TASEDITOR_PROJECT project; extern INPUT_HISTORY history; -extern TASEDIT_LIST tasedit_list; +extern TASEDITOR_LIST list; extern MARKERS current_markers; -extern bool TASEdit_show_lag_frames; -extern bool TASEdit_bind_markers; -extern bool TASEdit_branch_full_movie; -extern bool TASEdit_branch_only_when_rec; -extern bool TASEdit_view_branches_tree; - extern void UpdateMarkerNote(); // resources @@ -59,16 +52,16 @@ BOOKMARKS::BOOKMARKS() void BOOKMARKS::init() { free(); - hwndBookmarksList = GetDlgItem(hwndTasEdit, IDC_BOOKMARKSLIST); - hwndBookmarks = GetDlgItem(hwndTasEdit, IDC_BOOKMARKS_BOX); - hwndBranchesBitmap = GetDlgItem(hwndTasEdit, IDC_BRANCHES_BITMAP); + hwndBookmarksList = GetDlgItem(taseditor_window.hwndTasEditor, IDC_BOOKMARKSLIST); + hwndBookmarks = GetDlgItem(taseditor_window.hwndTasEditor, IDC_BOOKMARKS_BOX); + hwndBranchesBitmap = GetDlgItem(taseditor_window.hwndTasEditor, IDC_BRANCHES_BITMAP); // prepare bookmarks listview ListView_SetExtendedListViewStyleEx(hwndBookmarksList, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); // subclass the listview hwndBookmarksList_oldWndProc = (WNDPROC)SetWindowLong(hwndBookmarksList, GWL_WNDPROC, (LONG)BookmarksListWndProc); // setup same images for the listview - ListView_SetImageList(hwndBookmarksList, tasedit_list.himglist, LVSIL_SMALL); + ListView_SetImageList(hwndBookmarksList, list.himglist, LVSIL_SMALL); // setup columns LVCOLUMN lvc; // icons column @@ -288,8 +281,8 @@ void BOOKMARKS::set(int slot) bookmarks_array[slot].set(); // if this screenshot is currently shown - reinit and redraw it - if (screenshot_display.screenshot_currently_shown == slot) - screenshot_display.screenshot_currently_shown = ITEM_UNDER_MOUSE_NONE; + if (popup_display.screenshot_currently_shown == slot) + popup_display.screenshot_currently_shown = ITEM_UNDER_MOUSE_NONE; int parent; // inherit current branch @@ -384,7 +377,7 @@ void BOOKMARKS::set(int slot) // switch current branch to this branch if (slot != current_branch && current_branch >= 0) { - tasedit_list.RedrawRow(bookmarks_array[current_branch].snapshot.jump_frame); + list.RedrawRow(bookmarks_array[current_branch].snapshot.jump_frame); RedrawChangedBookmarks(bookmarks_array[current_branch].snapshot.jump_frame); } if (slot != current_branch || changes_since_current_branch) @@ -395,10 +388,10 @@ void BOOKMARKS::set(int slot) if (previous_frame >= 0 && previous_frame != currFrameCounter) { - tasedit_list.RedrawRow(previous_frame); + list.RedrawRow(previous_frame); RedrawChangedBookmarks(previous_frame); } - tasedit_list.RedrawRow(currFrameCounter); + list.RedrawRow(currFrameCounter); RedrawChangedBookmarks(currFrameCounter); FCEU_DispMessage("Branch %d saved.", 0, slot); @@ -412,14 +405,14 @@ void BOOKMARKS::jump(int slot) int frame = bookmarks_array[slot].snapshot.jump_frame; playback.jump(frame); if (playback.GetPauseFrame()) - tasedit_list.FollowPauseframe(); + list.FollowPauseframe(); bookmarks_array[slot].jump(); } } void BOOKMARKS::unleash(int slot) { - if (TASEdit_branch_only_when_rec && movie_readonly) + if (taseditor_config.branch_only_when_rec && movie_readonly) { jump(slot); return; @@ -431,10 +424,10 @@ void BOOKMARKS::unleash(int slot) bool markers_changed = false; // revert current movie to the input_snapshot state - if (TASEdit_branch_full_movie) + if (taseditor_config.branch_full_movie) { // update Markers - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) { if (bookmarks_array[slot].snapshot.my_markers.checkMarkersDiff(current_markers)) { @@ -449,7 +442,7 @@ void BOOKMARKS::unleash(int slot) { // restore entire movie bookmarks_array[slot].snapshot.toMovie(currMovieData, first_change); - tasedit_list.update(); + list.update(); selection.must_find_current_marker = playback.must_find_current_marker = true; history.RegisterBranching(MODTYPE_BRANCH_0 + slot, first_change, slot); greenzone.Invalidate(first_change); @@ -458,7 +451,7 @@ void BOOKMARKS::unleash(int slot) { selection.must_find_current_marker = playback.must_find_current_marker = true; history.RegisterBranching(MODTYPE_BRANCH_MARKERS_0 + slot, first_change, slot); - tasedit_list.RedrawList(); + list.RedrawList(); bookmarks_array[slot].unleashed(); } else { @@ -468,7 +461,7 @@ void BOOKMARKS::unleash(int slot) } else if (jump_frame > 0) { // update Markers - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) { if (bookmarks_array[slot].snapshot.my_markers.checkMarkersDiff(current_markers, jump_frame)) { @@ -484,7 +477,7 @@ void BOOKMARKS::unleash(int slot) // restore movie up to and not including bookmarked frame (imitating old TASing method) if (currMovieData.getNumRecords() <= jump_frame) currMovieData.records.resize(jump_frame+1); // but if old movie is shorter, include last frame as blank frame bookmarks_array[slot].snapshot.toMovie(currMovieData, first_change, jump_frame-1); - tasedit_list.update(); + list.update(); selection.must_find_current_marker = playback.must_find_current_marker = true; history.RegisterBranching(MODTYPE_BRANCH_0 + slot, first_change, slot); greenzone.Invalidate(first_change); @@ -493,7 +486,7 @@ void BOOKMARKS::unleash(int slot) { selection.must_find_current_marker = playback.must_find_current_marker = true; history.RegisterBranching(MODTYPE_BRANCH_MARKERS_0 + slot, first_change, slot); - tasedit_list.RedrawList(); + list.RedrawList(); bookmarks_array[slot].unleashed(); } else { @@ -522,9 +515,9 @@ void BOOKMARKS::unleash(int slot) // switch current branch to this branch if (slot != current_branch && current_branch >= 0) { - tasedit_list.RedrawRow(bookmarks_array[current_branch].snapshot.jump_frame); + list.RedrawRow(bookmarks_array[current_branch].snapshot.jump_frame); RedrawChangedBookmarks(bookmarks_array[current_branch].snapshot.jump_frame); - tasedit_list.RedrawRow(bookmarks_array[slot].snapshot.jump_frame); + list.RedrawRow(bookmarks_array[slot].snapshot.jump_frame); RedrawChangedBookmarks(bookmarks_array[slot].snapshot.jump_frame); } current_branch = slot; @@ -605,13 +598,13 @@ error: void BOOKMARKS::RedrawBookmarksCaption() { int prev_edit_mode = edit_mode; - if (TASEdit_branch_only_when_rec && movie_readonly) + if (taseditor_config.branch_only_when_rec && movie_readonly) { edit_mode = EDIT_MODE_BOOKMARKS; ShowWindow(hwndBranchesBitmap, SW_HIDE); ShowWindow(hwndBookmarksList, SW_SHOW); RedrawBookmarksList(); - } else if (TASEdit_view_branches_tree) + } else if (taseditor_config.view_branches_tree) { edit_mode = EDIT_MODE_BRANCHES; ShowWindow(hwndBookmarksList, SW_HIDE); @@ -937,12 +930,12 @@ LONG BOOKMARKS::CustomDraw(NMLVCUSTOMDRAW* msg) if (bookmarks_array[cell_y].flash_phase) msg->clrText = bookmark_flash_colors[bookmarks_array[cell_y].flash_type][bookmarks_array[cell_y].flash_phase]; - if (cell_x == BOOKMARKS_COLUMN_FRAME || (TASEdit_branch_only_when_rec && movie_readonly && cell_x == BOOKMARKS_COLUMN_TIME)) + if (cell_x == BOOKMARKS_COLUMN_FRAME || (taseditor_config.branch_only_when_rec && movie_readonly && cell_x == BOOKMARKS_COLUMN_TIME)) { if (bookmarks_array[cell_y].not_empty) { // frame number - SelectObject(msg->nmcd.hdc, tasedit_list.hMainListFont); + SelectObject(msg->nmcd.hdc, list.hMainListFont); int frame = bookmarks_array[cell_y].snapshot.jump_frame; if (frame == currFrameCounter || frame == (playback.GetPauseFrame() - 1)) { @@ -952,7 +945,7 @@ LONG BOOKMARKS::CustomDraw(NMLVCUSTOMDRAW* msg) { if (!greenzone.savestates[frame].empty()) { - if (TASEdit_show_lag_frames && greenzone.lag_history[frame]) + if (taseditor_config.show_lag_frames && greenzone.lag_history[frame]) msg->clrTextBk = LAG_FRAMENUM_COLOR; else msg->clrTextBk = GREENZONE_FRAMENUM_COLOR; @@ -961,7 +954,7 @@ LONG BOOKMARKS::CustomDraw(NMLVCUSTOMDRAW* msg) || (!greenzone.savestates[frame & EVERY4TH].empty() && (int)greenzone.savestates.size() > (frame | 0x3) + 1 && !greenzone.savestates[(frame | 0x3) + 1].empty()) || (!greenzone.savestates[frame & EVERY2ND].empty() && !greenzone.savestates[(frame | 0x1) + 1].empty())) { - if (TASEdit_show_lag_frames && greenzone.lag_history[frame]) + if (taseditor_config.show_lag_frames && greenzone.lag_history[frame]) msg->clrTextBk = PALE_LAG_FRAMENUM_COLOR; else msg->clrTextBk = PALE_GREENZONE_FRAMENUM_COLOR; @@ -973,7 +966,7 @@ LONG BOOKMARKS::CustomDraw(NMLVCUSTOMDRAW* msg) if (bookmarks_array[cell_y].not_empty) { // frame number - SelectObject(msg->nmcd.hdc, tasedit_list.hMainListFont); + SelectObject(msg->nmcd.hdc, list.hMainListFont); int frame = bookmarks_array[cell_y].snapshot.jump_frame; if (frame == currFrameCounter || frame == (playback.GetPauseFrame() - 1)) { @@ -983,7 +976,7 @@ LONG BOOKMARKS::CustomDraw(NMLVCUSTOMDRAW* msg) { if (!greenzone.savestates[frame].empty()) { - if (TASEdit_show_lag_frames && greenzone.lag_history[frame]) + if (taseditor_config.show_lag_frames && greenzone.lag_history[frame]) msg->clrTextBk = LAG_INPUT_COLOR1; else msg->clrTextBk = GREENZONE_INPUT_COLOR1; @@ -992,7 +985,7 @@ LONG BOOKMARKS::CustomDraw(NMLVCUSTOMDRAW* msg) || (!greenzone.savestates[frame & EVERY4TH].empty() && (int)greenzone.savestates.size() > (frame | 0x3) + 1 && !greenzone.savestates[(frame | 0x3) + 1].empty()) || (!greenzone.savestates[frame & EVERY2ND].empty() && !greenzone.savestates[(frame | 0x1) + 1].empty())) { - if (TASEdit_show_lag_frames && greenzone.lag_history[frame]) + if (taseditor_config.show_lag_frames && greenzone.lag_history[frame]) msg->clrTextBk = PALE_LAG_INPUT_COLOR1; else msg->clrTextBk = PALE_GREENZONE_INPUT_COLOR1; @@ -1011,9 +1004,9 @@ void BOOKMARKS::LeftClick(LPNMITEMACTIVATE info) int cell_y = info->iItem; if (cell_y >= 0 && cell_x >= 0) { - if (cell_x <= BOOKMARKS_COLUMN_FRAME || (TASEdit_branch_only_when_rec && movie_readonly)) + if (cell_x <= BOOKMARKS_COLUMN_FRAME || (taseditor_config.branch_only_when_rec && movie_readonly)) jump((cell_y + 1) % TOTAL_BOOKMARKS); - else if (cell_x == BOOKMARKS_COLUMN_TIME && (!TASEdit_branch_only_when_rec || !movie_readonly)) + else if (cell_x == BOOKMARKS_COLUMN_TIME && (!taseditor_config.branch_only_when_rec || !movie_readonly)) unleash((cell_y + 1) % TOTAL_BOOKMARKS); } // remove selection diff --git a/src/drivers/win/taseditlib/greenzone.cpp b/src/drivers/win/taseditlib/greenzone.cpp index c6bbce5e..c3df161e 100644 --- a/src/drivers/win/taseditlib/greenzone.cpp +++ b/src/drivers/win/taseditlib/greenzone.cpp @@ -1,16 +1,13 @@ //Implementation file of Greenzone class - -#include "taseditproj.h" +#include "taseditor_project.h" #include "state.h" #include "zlib.h" -extern TASEDIT_PROJECT project; +extern TASEDITOR_CONFIG taseditor_config; +extern TASEDITOR_PROJECT project; extern PLAYBACK playback; extern BOOKMARKS bookmarks; -extern TASEDIT_LIST tasedit_list; - -extern int TASEdit_greenzone_capacity; -extern bool TASEdit_restore_position; +extern TASEDITOR_LIST list; char greenzone_save_id[GREENZONE_ID_LEN] = "GREENZONE"; char greenzone_skipsave_id[GREENZONE_ID_LEN] = "GREENZONX"; @@ -104,12 +101,12 @@ void GREENZONE::storeTasSavestate(int frame) void GREENZONE::GreenzoneCleaning() { - int i = currFrameCounter - TASEdit_greenzone_capacity; + int i = currFrameCounter - taseditor_config.greenzone_capacity; bool changed = false; if (i < 0) goto finish; int limit; // 2x of 1/2 - limit = i - 2 * TASEdit_greenzone_capacity; + limit = i - 2 * taseditor_config.greenzone_capacity; if (limit < -1) limit = -1; for (; i > limit; i--) { @@ -121,7 +118,7 @@ void GREENZONE::GreenzoneCleaning() } if (i < 0) goto finish; // 4x of 1/4 - limit = i - 4 * TASEdit_greenzone_capacity; + limit = i - 4 * taseditor_config.greenzone_capacity; if (limit < -1) limit = -1; for (; i > limit; i--) { @@ -133,7 +130,7 @@ void GREENZONE::GreenzoneCleaning() } if (i < 0) goto finish; // 8x of 1/8 - limit = i - 8 * TASEdit_greenzone_capacity; + limit = i - 8 * taseditor_config.greenzone_capacity; if (limit < -1) limit = -1; for (; i > limit; i--) { @@ -145,7 +142,7 @@ void GREENZONE::GreenzoneCleaning() } if (i < 0) goto finish; // 16x of 1/16 - limit = i - 16 * TASEdit_greenzone_capacity; + limit = i - 16 * taseditor_config.greenzone_capacity; if (limit < -1) limit = -1; for (; i > limit; i--) { @@ -167,7 +164,7 @@ void GREENZONE::GreenzoneCleaning() finish: if (changed) { - tasedit_list.RedrawList(); + list.RedrawList(); bookmarks.RedrawBookmarksList(); } // shedule next cleaning @@ -299,11 +296,11 @@ bool GREENZONE::load(EMUFILE *is) if (read32le(&frame, is)) { currFrameCounter = frame; - int greenzone_tail_frame = currFrameCounter - TASEdit_greenzone_capacity; - int greenzone_tail_frame2 = greenzone_tail_frame - 2 * TASEdit_greenzone_capacity; - int greenzone_tail_frame4 = greenzone_tail_frame - 4 * TASEdit_greenzone_capacity; - int greenzone_tail_frame8 = greenzone_tail_frame - 8 * TASEdit_greenzone_capacity; - int greenzone_tail_frame16 = greenzone_tail_frame - 16 * TASEdit_greenzone_capacity; + int greenzone_tail_frame = currFrameCounter - taseditor_config.greenzone_capacity; + int greenzone_tail_frame2 = greenzone_tail_frame - 2 * taseditor_config.greenzone_capacity; + int greenzone_tail_frame4 = greenzone_tail_frame - 4 * taseditor_config.greenzone_capacity; + int greenzone_tail_frame8 = greenzone_tail_frame - 8 * taseditor_config.greenzone_capacity; + int greenzone_tail_frame16 = greenzone_tail_frame - 16 * taseditor_config.greenzone_capacity; // read savestates while(1) { @@ -383,7 +380,7 @@ void GREENZONE::InvalidateAndCheck(int after) // either set playback cursor to the end of greenzone or run seeking to restore playback position if (currFrameCounter >= greenZoneCount) { - if (TASEdit_restore_position) + if (taseditor_config.restore_position) playback.restorePosition(); else playback.jump(greenZoneCount-1); @@ -391,7 +388,7 @@ void GREENZONE::InvalidateAndCheck(int after) } } // redraw list even if greenzone didn't change - tasedit_list.RedrawList(); + list.RedrawList(); bookmarks.RedrawBookmarksList(); } // This version doesn't restore playback, may be used only by Branching and Recording functions! @@ -407,7 +404,7 @@ void GREENZONE::Invalidate(int after) } } // redraw list even if greenzone didn't change - tasedit_list.RedrawList(); + list.RedrawList(); bookmarks.RedrawBookmarksList(); } diff --git a/src/drivers/win/taseditlib/inputhistory.cpp b/src/drivers/win/taseditlib/inputhistory.cpp index 8f39e44e..0b386a40 100644 --- a/src/drivers/win/taseditlib/inputhistory.cpp +++ b/src/drivers/win/taseditlib/inputhistory.cpp @@ -1,28 +1,22 @@ //Implementation file of Input History class (Undo feature) - -#include "taseditproj.h" - -extern HWND hwndTasEdit; -extern bool TASEdit_bind_markers; -extern bool TASEdit_enable_hot_changes; -extern bool TASEdit_branch_full_movie; -extern bool TASEdit_combine_consecutive_rec; -extern int TasEdit_undo_levels; +#include "taseditor_project.h" LRESULT APIENTRY HistoryListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); WNDPROC hwndHistoryList_oldWndProc; +extern TASEDITOR_CONFIG taseditor_config; +extern TASEDITOR_WINDOW taseditor_window; extern MARKERS current_markers; extern BOOKMARKS bookmarks; extern PLAYBACK playback; -extern TASEDIT_SELECTION selection; +extern TASEDITOR_SELECTION selection; extern GREENZONE greenzone; -extern TASEDIT_PROJECT project; -extern TASEDIT_LIST tasedit_list; +extern TASEDITOR_PROJECT project; +extern TASEDITOR_LIST list; char history_save_id[HISTORY_ID_LEN] = "HISTORY"; char history_skipsave_id[HISTORY_ID_LEN] = "HISTORX"; -char modCaptions[40][20] = {" Init", +char modCaptions[41][20] = {" Init", " Change", " Set", " Unset", @@ -61,7 +55,8 @@ char modCaptions[40][20] = {" Init", " Marker Rename", " LUA Marker Set", " LUA Marker Unset", - " LUA Marker Rename" }; + " LUA Marker Rename", + " LUA Change" }; char joypadCaptions[4][5] = {"(1P)", "(2P)", "(3P)", "(4P)"}; INPUT_HISTORY::INPUT_HISTORY() @@ -71,7 +66,7 @@ INPUT_HISTORY::INPUT_HISTORY() void INPUT_HISTORY::init() { // prepare the history listview - hwndHistoryList = GetDlgItem(hwndTasEdit, IDC_HISTORYLIST); + hwndHistoryList = GetDlgItem(taseditor_window.hwndTasEditor, IDC_HISTORYLIST); ListView_SetExtendedListViewStyleEx(hwndHistoryList, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); // subclass the listview hwndHistoryList_oldWndProc = (WNDPROC)SetWindowLong(hwndHistoryList, GWL_WNDPROC, (LONG)HistoryListWndProc); @@ -80,8 +75,6 @@ void INPUT_HISTORY::init() lvc.cx = 500; lvc.fmt = LVCFMT_LEFT; ListView_InsertColumn(hwndHistoryList, 0, &lvc); - - reset(); } void INPUT_HISTORY::free() { @@ -92,7 +85,7 @@ void INPUT_HISTORY::reset() { free(); // init vars - history_size = TasEdit_undo_levels + 1; + history_size = taseditor_config.undo_levels + 1; undo_hint_pos = old_undo_hint_pos = undo_hint_time = -1; old_show_undo_hint = show_undo_hint = false; input_snapshots.resize(history_size); @@ -100,7 +93,7 @@ void INPUT_HISTORY::reset() history_cursor_pos = -1; // create initial snapshot INPUT_SNAPSHOT inp; - inp.init(currMovieData, TASEdit_enable_hot_changes); + inp.init(currMovieData, taseditor_config.enable_hot_changes); strcat(inp.description, modCaptions[0]); inp.jump_frame = -1; AddInputSnapshotToHistory(inp); @@ -111,7 +104,7 @@ void INPUT_HISTORY::update() { // update undo_hint if (old_undo_hint_pos != undo_hint_pos && old_undo_hint_pos >= 0) - tasedit_list.RedrawRow(old_undo_hint_pos); // not changing bookmarks list + list.RedrawRow(old_undo_hint_pos); // not changing bookmarks list old_undo_hint_pos = undo_hint_pos; old_show_undo_hint = show_undo_hint; show_undo_hint = false; @@ -123,7 +116,7 @@ void INPUT_HISTORY::update() undo_hint_pos = -1; // finished hinting } if (old_show_undo_hint != show_undo_hint) - tasedit_list.RedrawRow(undo_hint_pos); // not changing bookmarks list + list.RedrawRow(undo_hint_pos); // not changing bookmarks list @@ -152,7 +145,7 @@ int INPUT_HISTORY::jump(int new_pos) // update markers bool markers_changed = false; - if (TASEdit_bind_markers) + if (taseditor_config.bind_markers) { if (input_snapshots[real_pos].my_markers.checkMarkersDiff(current_markers)) { @@ -175,12 +168,12 @@ int INPUT_HISTORY::jump(int new_pos) current_markers.update(); selection.must_find_current_marker = playback.must_find_current_marker = true; bookmarks.ChangesMadeSinceBranch(); - tasedit_list.RedrawList(); - tasedit_list.FollowUndo(); - } else if (TASEdit_enable_hot_changes) + list.RedrawList(); + list.FollowUndo(); + } else if (taseditor_config.enable_hot_changes) { // when using Hot Changes, list should be always redrawn, because old changes become less hot - tasedit_list.RedrawList(); + list.RedrawList(); } return first_change; @@ -243,7 +236,7 @@ int INPUT_HISTORY::RegisterChanges(int mod_type, int start, int end) { // create new input shanshot INPUT_SNAPSHOT inp; - inp.init(currMovieData, TASEdit_enable_hot_changes); + inp.init(currMovieData, taseditor_config.enable_hot_changes); inp.mod_type = mod_type; // check if there are input differences from latest snapshot int real_pos = (history_start_pos + history_cursor_pos) % history_size; @@ -288,7 +281,7 @@ int INPUT_HISTORY::RegisterChanges(int mod_type, int start, int end) strcat(inp.description, framenum); } // set hotchanges - if (TASEdit_enable_hot_changes) + if (taseditor_config.enable_hot_changes) { // inherit previous hotchanges and set new changes switch (mod_type) @@ -327,7 +320,7 @@ void INPUT_HISTORY::RegisterMarkersChange(int mod_type, int start, int end) { // create new input shanshot INPUT_SNAPSHOT inp; - inp.init(currMovieData, TASEdit_enable_hot_changes); + inp.init(currMovieData, taseditor_config.enable_hot_changes); inp.mod_type = mod_type; // fill description: strcat(inp.description, modCaptions[mod_type]); @@ -343,7 +336,7 @@ void INPUT_HISTORY::RegisterMarkersChange(int mod_type, int start, int end) strcat(inp.description, "-"); strcat(inp.description, framenum); } - if (TASEdit_enable_hot_changes) + if (taseditor_config.enable_hot_changes) inp.copyHotChanges(&GetCurrentSnapshot()); AddInputSnapshotToHistory(inp); bookmarks.ChangesMadeSinceBranch(); @@ -353,19 +346,19 @@ void INPUT_HISTORY::RegisterBranching(int mod_type, int first_change, int slot) { // create new input snapshot INPUT_SNAPSHOT inp; - inp.init(currMovieData, TASEdit_enable_hot_changes); + inp.init(currMovieData, taseditor_config.enable_hot_changes); // fill description: modification type + time of the Branch inp.mod_type = mod_type; strcat(inp.description, modCaptions[mod_type]); strcat(inp.description, bookmarks.bookmarks_array[slot].snapshot.description); inp.jump_frame = first_change; - if (TASEdit_enable_hot_changes) + if (taseditor_config.enable_hot_changes) { if (mod_type < MODTYPE_BRANCH_MARKERS_0) { // input was changed // copy hotchanges of the Branch - if (TASEdit_branch_full_movie) + if (taseditor_config.branch_full_movie) { inp.copyHotChanges(&bookmarks.bookmarks_array[slot].snapshot); } else @@ -385,13 +378,13 @@ void INPUT_HISTORY::RegisterRecording(int frame_of_change) { int real_pos = (history_start_pos + history_cursor_pos) % history_size; INPUT_SNAPSHOT inp; - inp.init(currMovieData, TASEdit_enable_hot_changes); + inp.init(currMovieData, taseditor_config.enable_hot_changes); inp.fillJoypadsDiff(input_snapshots[real_pos], frame_of_change); inp.mod_type = MODTYPE_RECORD; strcat(inp.description, modCaptions[MODTYPE_RECORD]); char framenum[11]; // check if current snapshot is also Recording and maybe it is consecutive recording - if (TASEdit_combine_consecutive_rec && input_snapshots[real_pos].mod_type == MODTYPE_RECORD && input_snapshots[real_pos].rec_end_frame+1 == frame_of_change && input_snapshots[real_pos].rec_joypad_diff_bits == inp.rec_joypad_diff_bits) + if (taseditor_config.combine_consecutive_rec && input_snapshots[real_pos].mod_type == MODTYPE_RECORD && input_snapshots[real_pos].rec_end_frame+1 == frame_of_change && input_snapshots[real_pos].rec_joypad_diff_bits == inp.rec_joypad_diff_bits) { // clone this snapshot and continue chain of recorded frames inp.jump_frame = input_snapshots[real_pos].jump_frame; @@ -413,7 +406,7 @@ void INPUT_HISTORY::RegisterRecording(int frame_of_change) strcat(inp.description, "-"); strcat(inp.description, framenum); // set hotchanges - if (TASEdit_enable_hot_changes) + if (taseditor_config.enable_hot_changes) { inp.copyHotChanges(&input_snapshots[real_pos]); inp.fillHotChanges(input_snapshots[real_pos], frame_of_change, frame_of_change); @@ -441,7 +434,7 @@ void INPUT_HISTORY::RegisterRecording(int frame_of_change) strcat(inp.description, " "); strcat(inp.description, framenum); // set hotchanges - if (TASEdit_enable_hot_changes) + if (taseditor_config.enable_hot_changes) { inp.inheritHotChanges(&input_snapshots[real_pos]); inp.fillHotChanges(input_snapshots[real_pos], frame_of_change, frame_of_change); @@ -454,7 +447,7 @@ void INPUT_HISTORY::RegisterImport(MovieData& md, char* filename) { // create new input snapshot INPUT_SNAPSHOT inp; - inp.init(md, TASEdit_enable_hot_changes, (currMovieData.fourscore)?FOURSCORE:NORMAL_2JOYPADS); + inp.init(md, taseditor_config.enable_hot_changes, (currMovieData.fourscore)?FOURSCORE:NORMAL_2JOYPADS); // check if there are input differences from latest snapshot int real_pos = (history_start_pos + history_cursor_pos) % history_size; int first_changes = inp.findFirstChange(input_snapshots[real_pos]); @@ -468,20 +461,20 @@ void INPUT_HISTORY::RegisterImport(MovieData& md, char* filename) // add filename to description strcat(inp.description, " "); strncat(inp.description, filename, SNAPSHOT_DESC_MAX_LENGTH - strlen(inp.description) - 1); - if (TASEdit_enable_hot_changes) + if (taseditor_config.enable_hot_changes) { // do not inherit old hotchanges, because imported input (most likely) doesn't have direct connection with recent edits, so old hotchanges are irrelevant and should not be copied inp.fillHotChanges(input_snapshots[real_pos], first_changes); } AddInputSnapshotToHistory(inp); inp.toMovie(currMovieData); - tasedit_list.update(); + list.update(); bookmarks.ChangesMadeSinceBranch(); project.SetProjectChanged(); greenzone.InvalidateAndCheck(first_changes); } else { - MessageBox(hwndTasEdit, "Imported movie has the same input.\nNo changes were made.", "TAS Editor", MB_OK); + MessageBox(taseditor_window.hwndTasEditor, "Imported movie has the same input.\nNo changes were made.", "TAS Editor", MB_OK); } } @@ -611,8 +604,8 @@ void INPUT_HISTORY::Click(LPNMITEMACTIVATE info) int result = jump(item); if (result >= 0) { - tasedit_list.update(); - tasedit_list.FollowUndo(); + list.update(); + list.FollowUndo(); greenzone.InvalidateAndCheck(result); return; } diff --git a/src/drivers/win/taseditlib/inputhistory.h b/src/drivers/win/taseditlib/inputhistory.h index b9121dc0..9ef6b6e6 100644 --- a/src/drivers/win/taseditlib/inputhistory.h +++ b/src/drivers/win/taseditlib/inputhistory.h @@ -42,6 +42,7 @@ #define MODTYPE_LUA_MARKER_SET 37 #define MODTYPE_LUA_MARKER_UNSET 38 #define MODTYPE_LUA_MARKER_RENAME 39 +#define MODTYPE_LUA_CHANGE 40 #define HISTORY_NORMAL_COLOR 0x000000 #define HISTORY_INCOHERENT_COLOR 0x999999 diff --git a/src/drivers/win/taseditlib/inputsnapshot.cpp b/src/drivers/win/taseditlib/inputsnapshot.cpp index f4adc663..4baac4c4 100644 --- a/src/drivers/win/taseditlib/inputsnapshot.cpp +++ b/src/drivers/win/taseditlib/inputsnapshot.cpp @@ -1,14 +1,11 @@ //Implementation file of Input Snapshot class (Undo feature) - -#include "taseditproj.h" +#include "taseditor_project.h" #include "zlib.h" const int bytes_per_frame[NUM_SUPPORTED_INPUT_TYPES] = {2, 4}; // so 16bits for normal joypads, 32bits for fourscore -extern void FCEU_printf(char *format, ...); - extern MARKERS current_markers; -extern TASEDIT_SELECTION selection; +extern TASEDITOR_SELECTION selection; INPUT_SNAPSHOT::INPUT_SNAPSHOT() { diff --git a/src/drivers/win/taseditlib/inputsnapshot.h b/src/drivers/win/taseditlib/inputsnapshot.h index 8fa011f4..a9c875f5 100644 --- a/src/drivers/win/taseditlib/inputsnapshot.h +++ b/src/drivers/win/taseditlib/inputsnapshot.h @@ -43,7 +43,7 @@ public: int GetHotChangeInfo(int frame, int absolute_button); int size; // in frames - int input_type; // 0=normal, 1=fourscore; theoretically TASEdit can support other input types, although some stuff may be unintentionally hardcoded + int input_type; // 0=normal, 1=fourscore; theoretically TAS Editor can support other input types, although some stuff may be unintentionally hardcoded std::vector joysticks; // Format: joy0-for-frame0, joy1-for-frame0, joy2-for-frame0, joy3-for-frame0, joy0-for-frame1, joy1-for-frame1, ... std::vector commands; // Format: commands-for-frame0, commands-for-frame1, ... std::vector hot_changes; // Format: buttons01joy0-for-frame0, buttons23joy0-for-frame0, buttons45joy0-for-frame0, buttons67joy0-for-frame0, buttons01joy1-for-frame0, ... diff --git a/src/drivers/win/taseditlib/markers.cpp b/src/drivers/win/taseditlib/markers.cpp index efb43ac0..1d92eb80 100644 --- a/src/drivers/win/taseditlib/markers.cpp +++ b/src/drivers/win/taseditlib/markers.cpp @@ -1,13 +1,12 @@ //Implementation file of Markers class -#include "taseditproj.h" +#include "taseditor_project.h" #include "zlib.h" #include // for StrStrI -extern bool TASEdit_empty_marker_notes; -extern HWND hwndTasEdit; - +extern TASEDITOR_CONFIG taseditor_config; +extern TASEDITOR_WINDOW taseditor_window; extern PLAYBACK playback; -extern TASEDIT_SELECTION selection; +extern TASEDITOR_SELECTION selection; // resources char markers_save_id[MARKERS_ID_LEN] = "MARKERS"; @@ -274,7 +273,7 @@ int MARKERS::SetMarker(int frame) int marker_num = GetMarkerUp(frame) + 1; markers_array[frame] = marker_num; - if (TASEdit_empty_marker_notes) + if (taseditor_config.empty_marker_notes) notes.insert(notes.begin() + marker_num, 1, ""); else // copy previous marker note @@ -392,7 +391,7 @@ void MARKERS::FindSimilar(int offset) // check if playback_marker_text is empty if (!sourceNote[0]) { - MessageBox(hwndTasEdit, "Marker Note under Playback cursor is empty!", "Find Similar Note", MB_OK); + MessageBox(taseditor_window.hwndTasEditor, "Marker Note under Playback cursor is empty!", "Find Similar Note", MB_OK); return; } @@ -431,7 +430,7 @@ void MARKERS::FindSimilar(int offset) if (!totalSourceKeywords) { - MessageBox(hwndTasEdit, "Marker Note under Playback cursor doesn't have keywords!", "Find Similar Note", MB_OK); + MessageBox(taseditor_window.hwndTasEditor, "Marker Note under Playback cursor doesn't have keywords!", "Find Similar Note", MB_OK); return; } @@ -574,9 +573,9 @@ void MARKERS::FindSimilar(int offset) } else { if (offset) - MessageBox(hwndTasEdit, "Could not find more Notes similar to Marker Note under Playback cursor!", "Find Similar Note", MB_OK); + MessageBox(taseditor_window.hwndTasEditor, "Could not find more Notes similar to Marker Note under Playback cursor!", "Find Similar Note", MB_OK); else - MessageBox(hwndTasEdit, "Could not find anything similar to Marker Note under Playback cursor!", "Find Similar Note", MB_OK); + MessageBox(taseditor_window.hwndTasEditor, "Could not find anything similar to Marker Note under Playback cursor!", "Find Similar Note", MB_OK); } } diff --git a/src/drivers/win/taseditlib/playback.cpp b/src/drivers/win/taseditlib/playback.cpp index 437b8e6d..27133c16 100644 --- a/src/drivers/win/taseditlib/playback.cpp +++ b/src/drivers/win/taseditlib/playback.cpp @@ -1,21 +1,21 @@ //Implementation file of Playback class -#include "taseditproj.h" +#include "taseditor_project.h" #include "..\tasedit.h" // only for MARKER_NOTE_EDIT_UPPER #ifdef _S9XLUA_H extern void ForceExecuteLuaFrameFunctions(); #endif -extern HWND hwndTasEdit; -extern bool Tasedit_rewind_now; +extern bool Taseditor_rewind_now; extern bool turbo; -extern bool TASEdit_turbo_seek; extern int marker_note_edit; extern int search_similar_marker; +extern TASEDITOR_CONFIG taseditor_config; +extern TASEDITOR_WINDOW taseditor_window; extern MARKERS current_markers; extern GREENZONE greenzone; -extern TASEDIT_LIST tasedit_list; +extern TASEDITOR_LIST list; extern BOOKMARKS bookmarks; extern void UpdateMarkerNote(); @@ -32,17 +32,17 @@ PLAYBACK::PLAYBACK() void PLAYBACK::init() { - hwndProgressbar = GetDlgItem(hwndTasEdit, IDC_PROGRESS1); + hwndProgressbar = GetDlgItem(taseditor_window.hwndTasEditor, IDC_PROGRESS1); SendMessage(hwndProgressbar, PBM_SETRANGE, 0, MAKELPARAM(0, PROGRESSBAR_WIDTH)); - hwndRewind = GetDlgItem(hwndTasEdit, TASEDIT_REWIND); - hwndForward = GetDlgItem(hwndTasEdit, TASEDIT_FORWARD); - hwndRewindFull = GetDlgItem(hwndTasEdit, TASEDIT_REWIND_FULL); - hwndForwardFull = GetDlgItem(hwndTasEdit, TASEDIT_FORWARD_FULL); - hwndPlaybackMarker = GetDlgItem(hwndTasEdit, IDC_PLAYBACK_MARKER); - SendMessage(hwndPlaybackMarker, WM_SETFONT, (WPARAM)tasedit_list.hMarkersFont, 0); - hwndPlaybackMarkerEdit = GetDlgItem(hwndTasEdit, IDC_PLAYBACK_MARKER_EDIT); + hwndRewind = GetDlgItem(taseditor_window.hwndTasEditor, TASEDIT_REWIND); + hwndForward = GetDlgItem(taseditor_window.hwndTasEditor, TASEDIT_FORWARD); + hwndRewindFull = GetDlgItem(taseditor_window.hwndTasEditor, TASEDIT_REWIND_FULL); + hwndForwardFull = GetDlgItem(taseditor_window.hwndTasEditor, TASEDIT_FORWARD_FULL); + hwndPlaybackMarker = GetDlgItem(taseditor_window.hwndTasEditor, IDC_PLAYBACK_MARKER); + SendMessage(hwndPlaybackMarker, WM_SETFONT, (WPARAM)list.hMarkersFont, 0); + hwndPlaybackMarkerEdit = GetDlgItem(taseditor_window.hwndTasEditor, IDC_PLAYBACK_MARKER_EDIT); SendMessage(hwndPlaybackMarkerEdit, EM_SETLIMITTEXT, MAX_NOTE_LEN - 1, 0); - SendMessage(hwndPlaybackMarkerEdit, WM_SETFONT, (WPARAM)tasedit_list.hMarkersEditFont, 0); + SendMessage(hwndPlaybackMarkerEdit, WM_SETFONT, (WPARAM)list.hMarkersEditFont, 0); // subclass the edit control playbackMarkerEdit_oldWndproc = (WNDPROC)SetWindowLong(hwndPlaybackMarkerEdit, GWL_WNDPROC, (LONG)UpperMarkerEditWndProc); @@ -74,7 +74,7 @@ void PLAYBACK::update() if (old_pauseframe != pause_frame && old_pauseframe) { // pause_frame was changed, clear old_pauseframe gfx - tasedit_list.RedrawRow(old_pauseframe-1); + list.RedrawRow(old_pauseframe-1); bookmarks.RedrawChangedBookmarks(old_pauseframe-1); } old_pauseframe = pause_frame; @@ -89,7 +89,7 @@ void PLAYBACK::update() if (old_show_pauseframe != show_pauseframe) { // update pauseframe gfx - tasedit_list.RedrawRow(pause_frame-1); + list.RedrawRow(pause_frame-1); bookmarks.RedrawChangedBookmarks(pause_frame-1); } @@ -114,15 +114,15 @@ void PLAYBACK::update() // update the playback cursor if(currFrameCounter != lastCursor) { - tasedit_list.FollowPlaybackIfNeeded(); + list.FollowPlaybackIfNeeded(); // update gfx of the old and new rows - tasedit_list.RedrawRow(lastCursor); + list.RedrawRow(lastCursor); bookmarks.RedrawChangedBookmarks(lastCursor); - tasedit_list.RedrawRow(currFrameCounter); + list.RedrawRow(currFrameCounter); bookmarks.RedrawChangedBookmarks(currFrameCounter); // enforce redrawing now lastCursor = currFrameCounter; - UpdateWindow(tasedit_list.hwndList); + UpdateWindow(list.hwndList); // lazy update of "Playback's Marker text" int current_marker = current_markers.GetMarkerUp(currFrameCounter); if (shown_marker != current_marker) @@ -145,7 +145,7 @@ void PLAYBACK::update() // update < and > buttons old_rewind_button_state = rewind_button_state; - rewind_button_state = ((Button_GetState(hwndRewind) & BST_PUSHED) != 0 || Tasedit_rewind_now); + rewind_button_state = ((Button_GetState(hwndRewind) & BST_PUSHED) != 0 || Taseditor_rewind_now); if (rewind_button_state) { if (!old_rewind_button_state) @@ -236,7 +236,7 @@ void PLAYBACK::SeekingStart(int finish_frame) { seeking_start_frame = currFrameCounter; pause_frame = finish_frame; - if (TASEdit_turbo_seek) + if (taseditor_config.turbo_seek) turbo = true; UnpauseEmulation(); } @@ -255,7 +255,7 @@ void PLAYBACK::RewindFrame() jump(currFrameCounter-1); else // cursor is at frame 0 - can't rewind, but still must make cursor visible if needed - tasedit_list.FollowPlaybackIfNeeded(); + list.FollowPlaybackIfNeeded(); if (!pause_frame) PauseEmulation(); } void PLAYBACK::ForwardFrame() @@ -319,7 +319,7 @@ void PLAYBACK::jump(int frame) if (JumpToFrame(frame)) { ForceExecuteLuaFrameFunctions(); - tasedit_list.FollowPlaybackIfNeeded(); + list.FollowPlaybackIfNeeded(); } } void PLAYBACK::restorePosition() @@ -385,7 +385,7 @@ LRESULT APIENTRY UpperMarkerEditWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) { extern PLAYBACK playback; - extern TASEDIT_SELECTION selection; + extern TASEDITOR_SELECTION selection; switch(msg) { case WM_CHAR: @@ -395,11 +395,11 @@ LRESULT APIENTRY UpperMarkerEditWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR case VK_ESCAPE: // revert text to original note text SetWindowText(playback.hwndPlaybackMarkerEdit, current_markers.GetNote(playback.shown_marker).c_str()); - SetFocus(tasedit_list.hwndList); + SetFocus(list.hwndList); return 0; case VK_RETURN: // exit and save text changes - SetFocus(tasedit_list.hwndList); + SetFocus(list.hwndList); return 0; case VK_TAB: // switch to lower edit control (also exit and save text changes) diff --git a/src/drivers/win/taseditlib/playback.h b/src/drivers/win/taseditlib/playback.h index c7bf173d..13b9571f 100644 --- a/src/drivers/win/taseditlib/playback.h +++ b/src/drivers/win/taseditlib/playback.h @@ -39,6 +39,8 @@ public: int GetPauseFrame(); void SetProgressbar(int a, int b); + bool JumpToFrame(int index); + int pause_frame; bool must_find_current_marker; int shown_marker; @@ -50,7 +52,6 @@ public: bool jump_was_used_this_frame; private: - bool JumpToFrame(int index); int lastCursor; // but for currentCursor we use external variable currFrameCounter bool old_emu_paused, emu_paused; diff --git a/src/drivers/win/taseditlib/screenshot_display.cpp b/src/drivers/win/taseditlib/popup_display.cpp similarity index 76% rename from src/drivers/win/taseditlib/screenshot_display.cpp rename to src/drivers/win/taseditlib/popup_display.cpp index 40c7b1f8..3e9c3272 100644 --- a/src/drivers/win/taseditlib/screenshot_display.cpp +++ b/src/drivers/win/taseditlib/popup_display.cpp @@ -1,16 +1,12 @@ -//Implementation file of SCREENSHOT_DISPLAY class - -#include "taseditproj.h" +//Implementation file of POPUP_DISPLAY class +#include "taseditor_project.h" #include "zlib.h" -extern HWND hwndTasEdit; -extern int TasEdit_wndx, TasEdit_wndy; -extern bool TASEdit_show_branch_screenshots; -extern bool TASEdit_show_branch_tooltips; - +extern TASEDITOR_CONFIG taseditor_config; +extern TASEDITOR_WINDOW taseditor_window; extern MARKERS current_markers; extern BOOKMARKS bookmarks; -extern TASEDIT_LIST tasedit_list; +extern TASEDITOR_LIST list; LRESULT CALLBACK ScrBmpWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT APIENTRY MarkerNoteTooltipWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); @@ -19,7 +15,7 @@ LRESULT APIENTRY MarkerNoteTooltipWndProc(HWND hwnd, UINT message, WPARAM wParam char szClassName[] = "ScrBmp"; char szClassName2[] = "MarketNoteTooltip"; -SCREENSHOT_DISPLAY::SCREENSHOT_DISPLAY() +POPUP_DISPLAY::POPUP_DISPLAY() { // create BITMAPINFO scr_bmi = (LPBITMAPINFO)malloc(sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); // 256 color in palette @@ -70,7 +66,7 @@ SCREENSHOT_DISPLAY::SCREENSHOT_DISPLAY() blend.SourceConstantAlpha = 255; } -void SCREENSHOT_DISPLAY::init() +void POPUP_DISPLAY::init() { free(); // fill scr_bmp palette with current palette colors @@ -81,12 +77,12 @@ void SCREENSHOT_DISPLAY::init() scr_bmi->bmiColors[i].rgbGreen = color_palette[i].peGreen; scr_bmi->bmiColors[i].rgbBlue = color_palette[i].peBlue; } - HDC win_hdc = GetWindowDC(tasedit_list.hwndList); + HDC win_hdc = GetWindowDC(list.hwndList); scr_bmp = CreateDIBSection(win_hdc, scr_bmi, DIB_RGB_COLORS, (void**)&scr_ptr, 0, 0); // calculate coordinates (relative to IDC_BOOKMARKS_BOX) RECT temp_rect, parent_rect; - GetWindowRect(hwndTasEdit, &parent_rect); - GetWindowRect(GetDlgItem(hwndTasEdit, IDC_BOOKMARKS_BOX), &temp_rect); + GetWindowRect(taseditor_window.hwndTasEditor, &parent_rect); + GetWindowRect(GetDlgItem(taseditor_window.hwndTasEditor, IDC_BOOKMARKS_BOX), &temp_rect); scr_bmp_x = temp_rect.left - SCREENSHOT_WIDTH - SCR_BMP_DX - parent_rect.left; //scr_bmp_y = ((temp_rect.bottom + temp_rect.top - (SCREENSHOT_HEIGHT + SCR_BMP_TOOLTIP_GAP + MARKER_NOTE_TOOLTIP_HEIGHT)) / 2) - parent_rect.top; scr_bmp_y = (temp_rect.bottom - SCREENSHOT_HEIGHT) - parent_rect.top; @@ -94,7 +90,7 @@ void SCREENSHOT_DISPLAY::init() //tooltip_y = scr_bmp_y + SCREENSHOT_HEIGHT + SCR_BMP_TOOLTIP_GAP; tooltip_y = scr_bmp_y + SCREENSHOT_HEIGHT + SCR_BMP_TOOLTIP_GAP; } -void SCREENSHOT_DISPLAY::free() +void POPUP_DISPLAY::free() { reset(); if (scr_bmp) @@ -103,7 +99,7 @@ void SCREENSHOT_DISPLAY::free() scr_bmp = 0; } } -void SCREENSHOT_DISPLAY::reset() +void POPUP_DISPLAY::reset() { screenshot_currently_shown = ITEM_UNDER_MOUSE_NONE; next_update_time = scr_bmp_phase = 0; @@ -119,7 +115,7 @@ void SCREENSHOT_DISPLAY::reset() } } -void SCREENSHOT_DISPLAY::update() +void POPUP_DISPLAY::update() { // once per 40 milliseconds update screenshot_bitmap alpha if (clock() > next_update_time) @@ -127,25 +123,25 @@ void SCREENSHOT_DISPLAY::update() next_update_time = clock() + DISPLAY_UPDATE_TICK; if (bookmarks.item_under_mouse >= 0 && bookmarks.item_under_mouse < TOTAL_BOOKMARKS) { - if (TASEdit_show_branch_screenshots && !hwndScrBmp) + if (taseditor_config.show_branch_screenshots && !hwndScrBmp) { // create window - hwndScrBmp = CreateWindowEx(WS_EX_LAYERED | WS_EX_TRANSPARENT, szClassName, szClassName, WS_POPUP, TasEdit_wndx + scr_bmp_x, TasEdit_wndy + scr_bmp_y, SCREENSHOT_WIDTH, SCREENSHOT_HEIGHT, hwndTasEdit, NULL, fceu_hInstance, NULL); + hwndScrBmp = CreateWindowEx(WS_EX_LAYERED | WS_EX_TRANSPARENT, szClassName, szClassName, WS_POPUP, taseditor_config.wndx + scr_bmp_x, taseditor_config.wndy + scr_bmp_y, SCREENSHOT_WIDTH, SCREENSHOT_HEIGHT, taseditor_window.hwndTasEditor, NULL, fceu_hInstance, NULL); RedrawScreenshotBitmap(); ShowWindow(hwndScrBmp, SW_SHOWNA); } - if (TASEdit_show_branch_tooltips && !hwndMarkerNoteTooltip) + if (taseditor_config.show_branch_tooltips && !hwndMarkerNoteTooltip) { - hwndMarkerNoteTooltip = CreateWindowEx(WS_EX_LAYERED | WS_EX_TRANSPARENT, szClassName2, szClassName2, WS_POPUP, TasEdit_wndx + tooltip_x, TasEdit_wndy + tooltip_y, MARKER_NOTE_TOOLTIP_WIDTH, MARKER_NOTE_TOOLTIP_HEIGHT, hwndTasEdit, NULL, fceu_hInstance, NULL); + hwndMarkerNoteTooltip = CreateWindowEx(WS_EX_LAYERED | WS_EX_TRANSPARENT, szClassName2, szClassName2, WS_POPUP, taseditor_config.wndx + tooltip_x, taseditor_config.wndy + tooltip_y, MARKER_NOTE_TOOLTIP_WIDTH, MARKER_NOTE_TOOLTIP_HEIGHT, taseditor_window.hwndTasEditor, NULL, fceu_hInstance, NULL); ChangeTooltipText(); ShowWindow(hwndMarkerNoteTooltip, SW_SHOWNA); } // change screenshot_bitmap pic and tooltip text if needed if (screenshot_currently_shown != bookmarks.item_under_mouse) { - if (TASEdit_show_branch_screenshots) + if (taseditor_config.show_branch_screenshots) ChangeScreenshotBitmap(); - if (TASEdit_show_branch_tooltips) + if (taseditor_config.show_branch_tooltips) ChangeTooltipText(); screenshot_currently_shown = bookmarks.item_under_mouse; } @@ -205,7 +201,7 @@ void SCREENSHOT_DISPLAY::update() } } -void SCREENSHOT_DISPLAY::ChangeScreenshotBitmap() +void POPUP_DISPLAY::ChangeScreenshotBitmap() { // uncompress uLongf destlen = SCREENSHOT_SIZE; @@ -219,13 +215,13 @@ void SCREENSHOT_DISPLAY::ChangeScreenshotBitmap() } RedrawScreenshotBitmap(); } -void SCREENSHOT_DISPLAY::RedrawScreenshotBitmap() +void POPUP_DISPLAY::RedrawScreenshotBitmap() { HBITMAP temp_bmp = (HBITMAP)SendMessage(scr_bmp_pic, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)scr_bmp); if (temp_bmp && temp_bmp != scr_bmp) DeleteObject(temp_bmp); } -void SCREENSHOT_DISPLAY::ChangeTooltipText() +void POPUP_DISPLAY::ChangeTooltipText() { // retrieve info from the pointed bookmark's markers int frame = bookmarks.bookmarks_array[bookmarks.item_under_mouse].snapshot.jump_frame; @@ -235,23 +231,23 @@ void SCREENSHOT_DISPLAY::ChangeTooltipText() SetWindowText(marker_note_tooltip, new_text); } -void SCREENSHOT_DISPLAY::ParentWindowMoved() +void POPUP_DISPLAY::ParentWindowMoved() { if (hwndScrBmp) - SetWindowPos(hwndScrBmp, 0, TasEdit_wndx + scr_bmp_x, TasEdit_wndy + scr_bmp_y, 0, 0, SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE); + SetWindowPos(hwndScrBmp, 0, taseditor_config.wndx + scr_bmp_x, taseditor_config.wndy + scr_bmp_y, 0, 0, SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE); if (hwndMarkerNoteTooltip) - SetWindowPos(hwndMarkerNoteTooltip, 0, TasEdit_wndx + tooltip_x, TasEdit_wndy + tooltip_y, 0, 0, SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE); + SetWindowPos(hwndMarkerNoteTooltip, 0, taseditor_config.wndx + tooltip_x, taseditor_config.wndy + tooltip_y, 0, 0, SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE); } // ---------------------------------------------------------------------------------------- LRESULT APIENTRY ScrBmpWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { - extern SCREENSHOT_DISPLAY screenshot_display; + extern POPUP_DISPLAY popup_display; switch(message) { case WM_CREATE: { // create static bitmap placeholder - screenshot_display.scr_bmp_pic = CreateWindow(WC_STATIC, NULL, SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 255, 255, hwnd, NULL, NULL, NULL); + popup_display.scr_bmp_pic = CreateWindow(WC_STATIC, NULL, SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 255, 255, hwnd, NULL, NULL, NULL); return 0; } default: @@ -260,13 +256,13 @@ LRESULT APIENTRY ScrBmpWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lP } LRESULT APIENTRY MarkerNoteTooltipWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { - extern SCREENSHOT_DISPLAY screenshot_display; + extern POPUP_DISPLAY popup_display; switch(message) { case WM_CREATE: { // create static text field - screenshot_display.marker_note_tooltip = CreateWindow(WC_STATIC, NULL, WS_CHILD | WS_VISIBLE | SS_CENTER | SS_SUNKEN, 1, 1, MARKER_NOTE_TOOLTIP_WIDTH - 2, MARKER_NOTE_TOOLTIP_HEIGHT - 2, hwnd, NULL, NULL, NULL); + popup_display.marker_note_tooltip = CreateWindow(WC_STATIC, NULL, WS_CHILD | WS_VISIBLE | SS_CENTER | SS_SUNKEN, 1, 1, MARKER_NOTE_TOOLTIP_WIDTH - 2, MARKER_NOTE_TOOLTIP_HEIGHT - 2, hwnd, NULL, NULL, NULL); return 0; } default: diff --git a/src/drivers/win/taseditlib/screenshot_display.h b/src/drivers/win/taseditlib/popup_display.h similarity index 84% rename from src/drivers/win/taseditlib/screenshot_display.h rename to src/drivers/win/taseditlib/popup_display.h index 70248a30..11ef3753 100644 --- a/src/drivers/win/taseditlib/screenshot_display.h +++ b/src/drivers/win/taseditlib/popup_display.h @@ -1,4 +1,4 @@ -//Specification file for SCREENSHOT_DISPLAY class +//Specification file for POPUP_DISPLAY class #define SCR_BMP_PHASE_MAX 10 #define SCR_BMP_PHASE_ALPHA_MAX 8 @@ -11,10 +11,10 @@ #define DISPLAY_UPDATE_TICK 40 // update at 25FPS -class SCREENSHOT_DISPLAY +class POPUP_DISPLAY { public: - SCREENSHOT_DISPLAY(); + POPUP_DISPLAY(); void init(); void free(); void reset(); diff --git a/src/drivers/win/taseditlib/recorder.cpp b/src/drivers/win/taseditlib/recorder.cpp index 92887bfa..713acb74 100644 --- a/src/drivers/win/taseditlib/recorder.cpp +++ b/src/drivers/win/taseditlib/recorder.cpp @@ -1,23 +1,16 @@ //Implementation file of RECORDER class -#include "taseditproj.h" +#include "taseditor_project.h" #include "zlib.h" -extern HWND hwndTasEdit; - extern uint32 GetGamepadPressedImmediate(); extern void ColumnSet(int column); +extern TASEDITOR_CONFIG taseditor_config; +extern TASEDITOR_WINDOW taseditor_window; extern BOOKMARKS bookmarks; extern INPUT_HISTORY history; extern GREENZONE greenzone; -extern TASEDIT_LIST tasedit_list; - -extern void RedrawWindowCaption(); -extern bool TASEdit_branch_only_when_rec; -extern bool TASEdit_use_1p_rec; -extern int TASEdit_superimpose; -extern bool TASEdit_columnset_by_keys; -extern bool TASEdit_focus; +extern TASEDITOR_LIST list; // resources const char recordingModes[5][4] = { "All", @@ -36,12 +29,12 @@ RECORDER::RECORDER() void RECORDER::init() { - hwndRecCheckbox = GetDlgItem(hwndTasEdit, IDC_RECORDING); - hwndRB_RecAll = GetDlgItem(hwndTasEdit, IDC_RADIO2); - hwndRB_Rec1P = GetDlgItem(hwndTasEdit, IDC_RADIO3); - hwndRB_Rec2P = GetDlgItem(hwndTasEdit, IDC_RADIO4); - hwndRB_Rec3P = GetDlgItem(hwndTasEdit, IDC_RADIO5); - hwndRB_Rec4P = GetDlgItem(hwndTasEdit, IDC_RADIO6); + hwndRecCheckbox = GetDlgItem(taseditor_window.hwndTasEditor, IDC_RECORDING); + hwndRB_RecAll = GetDlgItem(taseditor_window.hwndTasEditor, IDC_RADIO2); + hwndRB_Rec1P = GetDlgItem(taseditor_window.hwndTasEditor, IDC_RADIO3); + hwndRB_Rec2P = GetDlgItem(taseditor_window.hwndTasEditor, IDC_RADIO4); + hwndRB_Rec3P = GetDlgItem(taseditor_window.hwndTasEditor, IDC_RADIO5); + hwndRB_Rec4P = GetDlgItem(taseditor_window.hwndTasEditor, IDC_RADIO6); reset(); old_multitrack_recording_joypad = multitrack_recording_joypad; old_movie_readonly = movie_readonly; @@ -71,9 +64,9 @@ void RECORDER::update() { // update window caption if needed if (old_movie_readonly != movie_readonly || old_multitrack_recording_joypad != multitrack_recording_joypad) - RedrawWindowCaption(); + taseditor_window.RedrawCaption(); // update Bookmarks/Branches groupbox caption if needed - if (TASEdit_branch_only_when_rec && old_movie_readonly != movie_readonly) + if (taseditor_config.branch_only_when_rec && old_movie_readonly != movie_readonly) bookmarks.RedrawBookmarksCaption(); // update recording radio buttons if user used hotkey to switch R/W if (old_movie_readonly != movie_readonly || old_multitrack_recording_joypad != multitrack_recording_joypad) @@ -96,7 +89,7 @@ void RECORDER::update() { int joy = multitrack_recording_joypad - 1; // substitute target joypad with 1p joypad - if (multitrack_recording_joypad > MULTITRACK_RECORDING_1P && TASEdit_use_1p_rec) + if (multitrack_recording_joypad > MULTITRACK_RECORDING_1P && taseditor_config.use_1p_rec) current_joy[joy] = current_joy[0]; // clear all other joypads (pressing them does not count) for (int i = 0; i < NUM_JOYPADS; ++i) @@ -104,7 +97,7 @@ void RECORDER::update() current_joy[i] = 0; } // call ColumnSet if needed - if (TASEdit_columnset_by_keys && movie_readonly && TASEdit_focus) + if (taseditor_config.columnset_by_keys && movie_readonly && taseditor_window.TASEditor_focus) { int num_joys; if (currMovieData.fourscore) @@ -178,7 +171,7 @@ void RECORDER::InputChanged() for (; i >= 0; i--) { // superimpose (bitwise OR) if needed - if (TASEdit_superimpose == BST_CHECKED || (TASEdit_superimpose == BST_INDETERMINATE && new_joy[i] == 0)) + if (taseditor_config.superimpose == BST_CHECKED || (taseditor_config.superimpose == BST_INDETERMINATE && new_joy[i] == 0)) new_joy[i] |= old_joy[i]; // change this joystick currMovieData.records[currFrameCounter].joysticks[i] = new_joy[i]; @@ -188,17 +181,17 @@ void RECORDER::InputChanged() // set lights for changed buttons for (int button = 0; button < NUM_JOYPAD_BUTTONS; ++button) if ((new_joy[i] & (1 << button)) && !(old_joy[i] & (1 << button))) - tasedit_list.SetHeaderColumnLight(COLUMN_JOYPAD1_A + i * NUM_JOYPAD_BUTTONS + button, HEADER_LIGHT_MAX); + list.SetHeaderColumnLight(COLUMN_JOYPAD1_A + i * NUM_JOYPAD_BUTTONS + button, HEADER_LIGHT_MAX); } } } else { int joy = multitrack_recording_joypad - 1; // substitute target joypad with 1p joypad - if (multitrack_recording_joypad > MULTITRACK_RECORDING_1P && TASEdit_use_1p_rec) + if (multitrack_recording_joypad > MULTITRACK_RECORDING_1P && taseditor_config.use_1p_rec) new_joy[joy] = new_joy[0]; // superimpose (bitwise OR) if needed - if (TASEdit_superimpose == BST_CHECKED || (TASEdit_superimpose == BST_INDETERMINATE && new_joy[joy] == 0)) + if (taseditor_config.superimpose == BST_CHECKED || (taseditor_config.superimpose == BST_INDETERMINATE && new_joy[joy] == 0)) new_joy[joy] |= old_joy[joy]; // other joysticks should not be changed currMovieData.records[currFrameCounter].joysticks[0] = old_joy[0]; @@ -216,7 +209,7 @@ void RECORDER::InputChanged() // set lights for changed buttons for (int button = 0; button < NUM_JOYPAD_BUTTONS; ++button) if ((new_joy[joy] & (1 << button)) && !(old_joy[joy] & (1 << button))) - tasedit_list.SetHeaderColumnLight(COLUMN_JOYPAD1_A + joy * NUM_JOYPAD_BUTTONS + button, HEADER_LIGHT_MAX); + list.SetHeaderColumnLight(COLUMN_JOYPAD1_A + joy * NUM_JOYPAD_BUTTONS + button, HEADER_LIGHT_MAX); } } if (changes_made) diff --git a/src/drivers/win/taseditlib/taseditor_config.cpp b/src/drivers/win/taseditlib/taseditor_config.cpp new file mode 100644 index 00000000..0d96dd93 --- /dev/null +++ b/src/drivers/win/taseditlib/taseditor_config.cpp @@ -0,0 +1,55 @@ +//Implementation file of TASEDITOR_CONFIG class +#include "../common.h" +#include "taseditor_config.h" + +TASEDITOR_CONFIG::TASEDITOR_CONFIG() +{ + // set default values + wndx = 0; + wndy = 0; + findnote_wndx = 0; + findnote_wndy = 0; + follow_playback = true; + turbo_seek = true; + show_lag_frames = true; + show_markers = true; + show_branch_screenshots = true; + show_branch_tooltips = true; + enable_hot_changes = true; + jump_to_undo = true; + follow_note_context = true; + bind_markers = true; + empty_marker_notes = true; + combine_consecutive_rec = true; + use_1p_rec = true; + columnset_by_keys = true; + keyboard_for_listview = true; + superimpose = BST_UNCHECKED; + superimpose_affects_paste = true; + branch_full_movie = true; + branch_only_when_rec = false; + view_branches_tree = false; + branch_scr_hud = true; + restore_position = false; + greenzone_capacity = GREENZONE_CAPACITY_DEFAULT; + undo_levels = UNDO_LEVELS_DEFAULT; + autosave_period = AUTOSAVE_PERIOD_DEFAULT; + last_export_type = EXPORT_TYPE_1P; + last_export_subtitles = false; + savecompact_binary = true; + savecompact_markers = true; + savecompact_bookmarks = true; + savecompact_greenzone = false; + savecompact_history = false; + savecompact_list = true; + savecompact_selection = false; + findnote_matchcase = false; + findnote_search_up = false; + enable_auto_function = true; + silent_autosave = true; + +} + + + + diff --git a/src/drivers/win/taseditlib/taseditor_config.h b/src/drivers/win/taseditlib/taseditor_config.h new file mode 100644 index 00000000..e7beb4d9 --- /dev/null +++ b/src/drivers/win/taseditlib/taseditor_config.h @@ -0,0 +1,69 @@ +//Specification file for TASEDITOR_CONFIG class +#define GREENZONE_CAPACITY_MIN 1 +#define GREENZONE_CAPACITY_MAX 50000 +#define GREENZONE_CAPACITY_DEFAULT 10000 + +#define UNDO_LEVELS_MIN 1 +#define UNDO_LEVELS_MAX 999 +#define UNDO_LEVELS_DEFAULT 99 + +#define AUTOSAVE_PERIOD_MIN 0 // 0 = no autosave +#define AUTOSAVE_PERIOD_MAX 1440 // 24 hours +#define AUTOSAVE_PERIOD_DEFAULT 15 // in minutes + +#define EXPORT_TYPE_1P 0 +#define EXPORT_TYPE_2P 1 +#define EXPORT_TYPE_FOURSCORE 2 + +class TASEDITOR_CONFIG +{ +public: + TASEDITOR_CONFIG(); + + // vars saved in cfg file + int wndx; + int wndy; + int findnote_wndx; + int findnote_wndy; + bool follow_playback; + bool turbo_seek; + bool show_lag_frames; + bool show_markers; + bool show_branch_screenshots; + bool show_branch_tooltips; + bool enable_hot_changes; + bool jump_to_undo; + bool follow_note_context; + bool bind_markers; + bool empty_marker_notes; + bool combine_consecutive_rec; + bool use_1p_rec; + bool columnset_by_keys; + bool keyboard_for_listview; + int superimpose; + bool superimpose_affects_paste; + bool branch_full_movie; + bool branch_only_when_rec; + bool view_branches_tree; + bool branch_scr_hud; + bool restore_position; + int greenzone_capacity; + int undo_levels; + int autosave_period; + int last_export_type; + bool last_export_subtitles; + bool savecompact_binary; + bool savecompact_markers; + bool savecompact_bookmarks; + bool savecompact_greenzone; + bool savecompact_history; + bool savecompact_list; + bool savecompact_selection; + bool findnote_matchcase; + bool findnote_search_up; + bool enable_auto_function; + bool silent_autosave; + +private: + +}; diff --git a/src/drivers/win/taseditlib/tasedit_list.cpp b/src/drivers/win/taseditlib/taseditor_list.cpp similarity index 85% rename from src/drivers/win/taseditlib/tasedit_list.cpp rename to src/drivers/win/taseditlib/taseditor_list.cpp index af1552ad..72826697 100644 --- a/src/drivers/win/taseditlib/tasedit_list.cpp +++ b/src/drivers/win/taseditlib/taseditor_list.cpp @@ -1,29 +1,22 @@ -//Implementation file of TASEDIT_LIST class -#include "taseditproj.h" +//Implementation file of TASEDITOR_LIST class +#include "taseditor_project.h" #include "utils/xstring.h" #include "uxtheme.h" #pragma comment(lib, "UxTheme.lib") -extern HWND hwndTasEdit; extern char buttonNames[NUM_JOYPAD_BUTTONS][2]; extern void ColumnSet(int column); +extern TASEDITOR_CONFIG taseditor_config; +extern TASEDITOR_WINDOW taseditor_window; extern BOOKMARKS bookmarks; extern PLAYBACK playback; extern RECORDER recorder; extern GREENZONE greenzone; extern INPUT_HISTORY history; extern MARKERS current_markers; -extern TASEDIT_SELECTION selection; - -extern bool TASEdit_enable_hot_changes; -extern bool TASEdit_show_markers; -extern bool TASEdit_bind_markers; -extern bool TASEdit_show_lag_frames; -extern bool TASEdit_follow_playback; -extern bool TASEdit_jump_to_undo; -extern bool TASEdit_keyboard_for_listview; +extern TASEDITOR_SELECTION selection; LRESULT APIENTRY HeaderWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); @@ -37,9 +30,13 @@ COLORREF header_lights_colors[11] = { 0x0, 0x006311, 0x008500, 0x1dad00, 0x46d10 char list_save_id[LIST_ID_LEN] = "LIST"; char list_skipsave_id[LIST_ID_LEN] = "LISX"; -TASEDIT_LIST::TASEDIT_LIST() +TASEDITOR_LIST::TASEDITOR_LIST() { +} +void TASEDITOR_LIST::init() +{ + free(); // create fonts for main listview hMainListFont = CreateFont(14, 7, /*Height,Width*/ 0, 0, /*escapement,orientation*/ @@ -66,15 +63,11 @@ TASEDIT_LIST::TASEDIT_LIST() ANSI_CHARSET, OUT_DEVICE_PRECIS, CLIP_MASK, /*charset, precision, clipping*/ DEFAULT_QUALITY, DEFAULT_PITCH, /*quality, and pitch*/ "Arial"); /*font name*/ - -} - -void TASEDIT_LIST::init() -{ - free(); bg_brush = CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); + header_colors.resize(MAX_NUM_COLUMNS); - hwndList = GetDlgItem(hwndTasEdit, IDC_LIST1); + + hwndList = GetDlgItem(taseditor_window.hwndTasEditor, IDC_LIST1); // prepare the main listview ListView_SetExtendedListViewStyleEx(hwndList, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_INFOTIP, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_INFOTIP); // subclass the header @@ -180,8 +173,28 @@ void TASEDIT_LIST::init() reset(); //update(); } -void TASEDIT_LIST::free() +void TASEDITOR_LIST::free() { + if (hMainListFont) + { + DeleteObject(hMainListFont); + hMainListFont = 0; + } + if (hMainListSelectFont) + { + DeleteObject(hMainListSelectFont); + hMainListSelectFont = 0; + } + if (hMarkersFont) + { + DeleteObject(hMarkersFont); + hMarkersFont = 0; + } + if (hMarkersEditFont) + { + DeleteObject(hMarkersEditFont); + hMarkersEditFont = 0; + } if (bg_brush) { DeleteObject(bg_brush); @@ -194,13 +207,13 @@ void TASEDIT_LIST::free() } header_colors.resize(0); } -void TASEDIT_LIST::reset() +void TASEDITOR_LIST::reset() { next_header_update_time = 0; // scroll to the beginning ListView_EnsureVisible(hwndList, 0, FALSE); } -void TASEDIT_LIST::update() +void TASEDITOR_LIST::update() { //update the number of items in the list int currLVItemCount = ListView_GetItemCount(hwndList); @@ -208,7 +221,7 @@ void TASEDIT_LIST::update() if(currLVItemCount != movie_size) ListView_SetItemCountEx(hwndList, movie_size, LVSICF_NOSCROLL|LVSICF_NOINVALIDATEALL); - // once per 40 milliseconds update screenshot_bitmap alpha + // once per 40 milliseconds update colors alpha if (clock() > next_header_update_time) { next_header_update_time = clock() + HEADER_LIGHT_UPDATE_TICK; @@ -255,7 +268,7 @@ void TASEDIT_LIST::update() } } -void TASEDIT_LIST::save(EMUFILE *os, bool really_save) +void TASEDITOR_LIST::save(EMUFILE *os, bool really_save) { if (really_save) { @@ -272,7 +285,7 @@ void TASEDIT_LIST::save(EMUFILE *os, bool really_save) } } // returns true if couldn't load -bool TASEDIT_LIST::load(EMUFILE *is) +bool TASEDITOR_LIST::load(EMUFILE *is) { update(); // read "LIST" string @@ -298,7 +311,7 @@ error: return true; } // ---------------------------------------------------------------------- -void TASEDIT_LIST::AddFourscore() +void TASEDITOR_LIST::AddFourscore() { // add list columns LVCOLUMN lvc; @@ -320,7 +333,7 @@ void TASEDIT_LIST::AddFourscore() // change eoptions FCEUI_SetInputFourscore(true); } -void TASEDIT_LIST::RemoveFourscore() +void TASEDITOR_LIST::RemoveFourscore() { // remove list columns for (num_columns = COLUMN_FRAMENUM2; num_columns >= COLUMN_JOYPAD3_A; num_columns--) @@ -329,21 +342,21 @@ void TASEDIT_LIST::RemoveFourscore() FCEUI_SetInputFourscore(false); } -void TASEDIT_LIST::RedrawList() +void TASEDITOR_LIST::RedrawList() { InvalidateRect(hwndList, 0, FALSE); } -void TASEDIT_LIST::RedrawRow(int index) +void TASEDITOR_LIST::RedrawRow(int index) { ListView_RedrawItems(hwndList, index, index); } -void TASEDIT_LIST::RedrawHeader() +void TASEDITOR_LIST::RedrawHeader() { InvalidateRect(hwndHeader, 0, FALSE); } // ------------------------------------------------------------------------- -bool TASEDIT_LIST::CheckItemVisible(int frame) +bool TASEDITOR_LIST::CheckItemVisible(int frame) { int top = ListView_GetTopIndex(hwndList); // in fourscore there's horizontal scrollbar which takes one row for itself @@ -352,7 +365,7 @@ bool TASEDIT_LIST::CheckItemVisible(int frame) return false; } -void TASEDIT_LIST::FollowPlayback() +void TASEDITOR_LIST::FollowPlayback() { // center list at jump_frame int list_items = ListView_GetCountPerPage(hwndList); @@ -367,14 +380,14 @@ void TASEDIT_LIST::FollowPlayback() index = 0; ListView_EnsureVisible(hwndList, index, false); } -void TASEDIT_LIST::FollowPlaybackIfNeeded() +void TASEDITOR_LIST::FollowPlaybackIfNeeded() { - if (TASEdit_follow_playback) ListView_EnsureVisible(hwndList,currFrameCounter,FALSE); + if (taseditor_config.follow_playback) ListView_EnsureVisible(hwndList,currFrameCounter,FALSE); } -void TASEDIT_LIST::FollowUndo() +void TASEDITOR_LIST::FollowUndo() { int jump_frame = history.GetUndoHint(); - if (TASEdit_jump_to_undo && jump_frame >= 0) + if (taseditor_config.jump_to_undo && jump_frame >= 0) { if (!CheckItemVisible(jump_frame)) { @@ -393,7 +406,7 @@ void TASEDIT_LIST::FollowUndo() } } } -void TASEDIT_LIST::FollowSelection() +void TASEDITOR_LIST::FollowSelection() { SelectionFrames* current_selection = selection.MakeStrobe(); if (current_selection->size() == 0) return; @@ -432,7 +445,7 @@ void TASEDIT_LIST::FollowSelection() ListView_EnsureVisible(hwndList, index, false); } } -void TASEDIT_LIST::FollowPauseframe() +void TASEDITOR_LIST::FollowPauseframe() { int jump_frame = playback.GetPauseFrame(); if (jump_frame >= 0) @@ -452,7 +465,7 @@ void TASEDIT_LIST::FollowPauseframe() } } -void TASEDIT_LIST::SetHeaderColumnLight(int column, int level) +void TASEDITOR_LIST::SetHeaderColumnLight(int column, int level) { if (column < COLUMN_FRAMENUM || column >= num_columns || level < 0 || level > HEADER_LIGHT_MAX) return; @@ -465,7 +478,7 @@ void TASEDIT_LIST::SetHeaderColumnLight(int column, int level) } } -void TASEDIT_LIST::GetDispInfo(NMLVDISPINFO* nmlvDispInfo) +void TASEDITOR_LIST::GetDispInfo(NMLVDISPINFO* nmlvDispInfo) { LVITEM& item = nmlvDispInfo->item; if(item.mask & LVIF_TEXT) @@ -509,7 +522,7 @@ void TASEDIT_LIST::GetDispInfo(NMLVDISPINFO* nmlvDispInfo) item.pszText[2] = 0; } else { - if (TASEdit_enable_hot_changes && history.GetCurrentSnapshot().GetHotChangeInfo(item.iItem, item.iSubItem - COLUMN_JOYPAD1_A)) + if (taseditor_config.enable_hot_changes && history.GetCurrentSnapshot().GetHotChangeInfo(item.iItem, item.iSubItem - COLUMN_JOYPAD1_A)) { item.pszText[0] = 45; // "-" item.pszText[1] = 0; @@ -521,7 +534,7 @@ void TASEDIT_LIST::GetDispInfo(NMLVDISPINFO* nmlvDispInfo) } } -LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) +LONG TASEDITOR_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) { int cell_x, cell_y; switch(msg->nmcd.dwDrawStage) @@ -537,7 +550,7 @@ LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) if(cell_x > COLUMN_ICONS) { // text color - if(TASEdit_enable_hot_changes && cell_x >= COLUMN_JOYPAD1_A && cell_x <= COLUMN_JOYPAD4_R) + if(taseditor_config.enable_hot_changes && cell_x >= COLUMN_JOYPAD1_A && cell_x <= COLUMN_JOYPAD4_R) msg->clrText = hot_changes_colors[history.GetCurrentSnapshot().GetHotChangeInfo(cell_y, cell_x - COLUMN_JOYPAD1_A)]; else msg->clrText = NORMAL_TEXT_COLOR; @@ -554,9 +567,9 @@ LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) if (cell_y == history.GetUndoHint()) { // undo hint here - if (TASEdit_show_markers && current_markers.GetMarker(cell_y)) + if (taseditor_config.show_markers && current_markers.GetMarker(cell_y)) { - msg->clrTextBk = (TASEdit_bind_markers) ? BINDMARKED_UNDOHINT_FRAMENUM_COLOR : MARKED_UNDOHINT_FRAMENUM_COLOR; + msg->clrTextBk = (taseditor_config.bind_markers) ? BINDMARKED_UNDOHINT_FRAMENUM_COLOR : MARKED_UNDOHINT_FRAMENUM_COLOR; } else { msg->clrTextBk = UNDOHINT_FRAMENUM_COLOR; @@ -564,24 +577,24 @@ LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) } else if (cell_y == currFrameCounter || cell_y == (playback.GetPauseFrame() - 1)) { // current frame - if (TASEdit_show_markers && current_markers.GetMarker(cell_y)) + if (taseditor_config.show_markers && current_markers.GetMarker(cell_y)) { - msg->clrTextBk = (TASEdit_bind_markers) ? CUR_BINDMARKED_FRAMENUM_COLOR : CUR_MARKED_FRAMENUM_COLOR; + msg->clrTextBk = (taseditor_config.bind_markers) ? CUR_BINDMARKED_FRAMENUM_COLOR : CUR_MARKED_FRAMENUM_COLOR; } else { msg->clrTextBk = CUR_FRAMENUM_COLOR; } - } else if (TASEdit_show_markers && current_markers.GetMarker(cell_y)) + } else if (taseditor_config.show_markers && current_markers.GetMarker(cell_y)) { // marked frame - msg->clrTextBk = (TASEdit_bind_markers) ? BINDMARKED_FRAMENUM_COLOR : MARKED_FRAMENUM_COLOR; + msg->clrTextBk = (taseditor_config.bind_markers) ? BINDMARKED_FRAMENUM_COLOR : MARKED_FRAMENUM_COLOR; } else { if(cell_y < greenzone.greenZoneCount) { if (!greenzone.savestates[cell_y].empty()) { - if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y]) + if (taseditor_config.show_lag_frames && greenzone.lag_history[cell_y]) msg->clrTextBk = LAG_FRAMENUM_COLOR; else msg->clrTextBk = GREENZONE_FRAMENUM_COLOR; @@ -590,7 +603,7 @@ LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) || (!greenzone.savestates[cell_y & EVERY4TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0x3) + 1 && !greenzone.savestates[(cell_y | 0x3) + 1].empty()) || (!greenzone.savestates[cell_y & EVERY2ND].empty() && !greenzone.savestates[(cell_y | 0x1) + 1].empty())) { - if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y]) + if (taseditor_config.show_lag_frames && greenzone.lag_history[cell_y]) msg->clrTextBk = PALE_LAG_FRAMENUM_COLOR; else msg->clrTextBk = PALE_GREENZONE_FRAMENUM_COLOR; @@ -615,7 +628,7 @@ LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) { if (!greenzone.savestates[cell_y].empty()) { - if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y]) + if (taseditor_config.show_lag_frames && greenzone.lag_history[cell_y]) msg->clrTextBk = LAG_INPUT_COLOR1; else msg->clrTextBk = GREENZONE_INPUT_COLOR1; @@ -624,7 +637,7 @@ LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) || (!greenzone.savestates[cell_y & EVERY4TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0x3) + 1 && !greenzone.savestates[(cell_y | 0x3) + 1].empty()) || (!greenzone.savestates[cell_y & EVERY2ND].empty() && !greenzone.savestates[(cell_y | 0x1) + 1].empty())) { - if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y]) + if (taseditor_config.show_lag_frames && greenzone.lag_history[cell_y]) msg->clrTextBk = PALE_LAG_INPUT_COLOR1; else msg->clrTextBk = PALE_GREENZONE_INPUT_COLOR1; @@ -648,7 +661,7 @@ LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) { if (!greenzone.savestates[cell_y].empty()) { - if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y]) + if (taseditor_config.show_lag_frames && greenzone.lag_history[cell_y]) msg->clrTextBk = LAG_INPUT_COLOR2; else msg->clrTextBk = GREENZONE_INPUT_COLOR2; @@ -657,7 +670,7 @@ LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) || (!greenzone.savestates[cell_y & EVERY4TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0x3) + 1 && !greenzone.savestates[(cell_y | 0x3) + 1].empty()) || (!greenzone.savestates[cell_y & EVERY2ND].empty() && !greenzone.savestates[(cell_y | 0x1) + 1].empty())) { - if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y]) + if (taseditor_config.show_lag_frames && greenzone.lag_history[cell_y]) msg->clrTextBk = PALE_LAG_INPUT_COLOR2; else msg->clrTextBk = PALE_GREENZONE_INPUT_COLOR2; @@ -670,7 +683,7 @@ LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg) } } -LONG TASEDIT_LIST::HeaderCustomDraw(NMLVCUSTOMDRAW* msg) +LONG TASEDITOR_LIST::HeaderCustomDraw(NMLVCUSTOMDRAW* msg) { switch(msg->nmcd.dwDrawStage) { @@ -720,7 +733,7 @@ LRESULT APIENTRY HeaderWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam //The subclass wndproc for the listview LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { - extern TASEDIT_LIST tasedit_list; + extern TASEDITOR_LIST list; switch(msg) { case WM_CHAR: @@ -728,7 +741,7 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) return 0; case WM_NOTIFY: { - if (((LPNMHDR)lParam)->hwndFrom == tasedit_list.hwndHeader) + if (((LPNMHDR)lParam)->hwndFrom == list.hwndHeader) { switch (((LPNMHDR)lParam)->code) { @@ -737,14 +750,14 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) case HDN_TRACK: return true; // no column resizing case NM_CUSTOMDRAW: - return tasedit_list.HeaderCustomDraw((NMLVCUSTOMDRAW*)lParam); + return list.HeaderCustomDraw((NMLVCUSTOMDRAW*)lParam); } } break; } case WM_KEYDOWN: { - if (!TASEdit_keyboard_for_listview) + if (!taseditor_config.keyboard_for_listview) return 0; break; } diff --git a/src/drivers/win/taseditlib/tasedit_list.h b/src/drivers/win/taseditlib/taseditor_list.h similarity index 93% rename from src/drivers/win/taseditlib/tasedit_list.h rename to src/drivers/win/taseditlib/taseditor_list.h index e21f1b40..822b5b79 100644 --- a/src/drivers/win/taseditlib/tasedit_list.h +++ b/src/drivers/win/taseditlib/taseditor_list.h @@ -1,4 +1,4 @@ -//Specification file for TASEDIT_LIST class +//Specification file for TASEDITOR_LIST class #define LIST_ID_LEN 5 #define CDDS_SUBITEMPREPAINT (CDDS_SUBITEM | CDDS_ITEMPREPAINT) @@ -94,10 +94,10 @@ #define PLAYBACK_MARKER_COLOR 0xC9AF00 -class TASEDIT_LIST +class TASEDITOR_LIST { public: - TASEDIT_LIST(); + TASEDITOR_LIST(); void init(); void free(); void reset(); diff --git a/src/drivers/win/taseditlib/taseditor_lua.cpp b/src/drivers/win/taseditlib/taseditor_lua.cpp new file mode 100644 index 00000000..6f294dca --- /dev/null +++ b/src/drivers/win/taseditlib/taseditor_lua.cpp @@ -0,0 +1,193 @@ +//Implementation file of TASEDITOR_LUA class +#include "taseditor_project.h" + +extern TASEDITOR_WINDOW taseditor_window; +extern INPUT_HISTORY history; +extern MARKERS current_markers; +extern BOOKMARKS bookmarks; +extern RECORDER recorder; +extern PLAYBACK playback; +extern TASEDITOR_LIST list; +extern TASEDITOR_SELECTION selection; + +extern void TaseditorUpdateManualFunctionStatus(); + +TASEDITOR_LUA::TASEDITOR_LUA() +{ +} + +void TASEDITOR_LUA::init() +{ + hwndRunFunction = GetDlgItem(taseditor_window.hwndTasEditor, TASEDIT_RUN_MANUAL); + TaseditorUpdateManualFunctionStatus(); + reset(); +} +void TASEDITOR_LUA::reset() +{ + +} +void TASEDITOR_LUA::update() +{ + +} + +void TASEDITOR_LUA::EnableRunFunction() +{ + EnableWindow(hwndRunFunction, true); +} +void TASEDITOR_LUA::DisableRunFunction() +{ + EnableWindow(hwndRunFunction, false); +} +// -------------------------------------------------------------------------------- +// Lua functions of taseditor library + +// bool taseditor.engaged() +bool TASEDITOR_LUA::engaged() +{ + return FCEUMOV_Mode(MOVIEMODE_TASEDIT); +} + +// bool taseditor.markedframe(int frame) +bool TASEDITOR_LUA::markedframe(int frame) +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + return current_markers.GetMarker(frame) != 0; + else + return false; +} + +// int taseditor.getmarker(int frame) +int TASEDITOR_LUA::getmarker(int frame) +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + return current_markers.GetMarkerUp(frame); + else + return -1; +} + +// int taseditor.setmarker(int frame) +int TASEDITOR_LUA::setmarker(int frame) +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + { + int marker_id = current_markers.GetMarker(frame); + if(!marker_id) + { + marker_id = current_markers.SetMarker(frame); + if (marker_id) + { + // new marker was created - register changes in TAS Editor + history.RegisterMarkersChange(MODTYPE_LUA_MARKER_SET, frame); + selection.must_find_current_marker = playback.must_find_current_marker = true; + list.SetHeaderColumnLight(COLUMN_FRAMENUM, HEADER_LIGHT_MAX); + } + } + return marker_id; + } else + return -1; +} + +// taseditor.clearmarker(int frame) +void TASEDITOR_LUA::clearmarker(int frame) +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + { + if (current_markers.GetMarker(frame)) + { + current_markers.ClearMarker(frame); + // marker was deleted - register changes in TAS Editor + history.RegisterMarkersChange(MODTYPE_LUA_MARKER_UNSET, frame); + selection.must_find_current_marker = playback.must_find_current_marker = true; + list.SetHeaderColumnLight(COLUMN_FRAMENUM, HEADER_LIGHT_MAX); + } + } +} + +// string taseditor.getnote(int index) +const char* TASEDITOR_LUA::getnote(int index) +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + return current_markers.GetNote(index).c_str(); + else + return NULL; +} + +// taseditor.setnote(int index, string newtext) +void TASEDITOR_LUA::setnote(int index, const char* newtext) +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + { + // rename only if newtext is different from old text + char text[MAX_NOTE_LEN]; + strncpy(text, newtext, MAX_NOTE_LEN - 1); + if (strcmp(current_markers.GetNote(index).c_str(), text)) + { + // text differs from old note - rename + current_markers.SetNote(index, text); + history.RegisterMarkersChange(MODTYPE_LUA_MARKER_RENAME, current_markers.GetMarkerFrame(index)); + selection.must_find_current_marker = playback.must_find_current_marker = true; + } + } +} + +// int taseditor.getcurrentbranch() +int TASEDITOR_LUA::getcurrentbranch() +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + return bookmarks.GetCurrentBranch(); + else + return -1; +} + +// string taseditor.getrecordermode() +const char* TASEDITOR_LUA::getrecordermode() +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + return recorder.GetRecordingMode(); + else + return NULL; +} + +// int taseditor.getplaybacktarget() +int TASEDITOR_LUA::getplaybacktarget() +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + return playback.pause_frame - 1; + else + return -1; +} + +// taseditor.setplayback() +void TASEDITOR_LUA::setplayback(int frame) +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + playback.JumpToFrame(frame); // do not trigger lua functions after jump +} + +// taseditor.stopseeking() +void TASEDITOR_LUA::stopseeking() +{ + if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) + playback.SeekingStop(); +} + + + + + +// -------------------------------------------------------------------------------- + + + + + + + + + + + + + + diff --git a/src/drivers/win/taseditlib/taseditor_lua.h b/src/drivers/win/taseditlib/taseditor_lua.h new file mode 100644 index 00000000..089deee7 --- /dev/null +++ b/src/drivers/win/taseditlib/taseditor_lua.h @@ -0,0 +1,32 @@ +//Specification file for TASEDITOR_LUA class + +class TASEDITOR_LUA +{ +public: + TASEDITOR_LUA(); + void init(); + void reset(); + void update(); + + void EnableRunFunction(); + void DisableRunFunction(); + + // Taseditor Lua library + bool engaged(); + bool markedframe(int frame); + int getmarker(int frame); + int setmarker(int frame); + void clearmarker(int frame); + const char* getnote(int index); + void setnote(int index, const char* newtext); + int getcurrentbranch(); + const char* getrecordermode(); + int getplaybacktarget(); + void setplayback(int frame); + void stopseeking(); + + +private: + HWND hwndRunFunction; + +}; diff --git a/src/drivers/win/taseditlib/taseditproj.cpp b/src/drivers/win/taseditlib/taseditor_project.cpp similarity index 64% rename from src/drivers/win/taseditlib/taseditproj.cpp rename to src/drivers/win/taseditlib/taseditor_project.cpp index abe69589..f19c27e7 100644 --- a/src/drivers/win/taseditlib/taseditproj.cpp +++ b/src/drivers/win/taseditlib/taseditor_project.cpp @@ -1,38 +1,29 @@ -//Implementation file of TASEdit Project class -#include "taseditproj.h" +//Implementation file of TASEDITOR_PROJECT class +#include "taseditor_project.h" #include "utils/xstring.h" #include "version.h" -#define MARKERS_SAVED 1 -#define BOOKMARKS_SAVED 2 -#define GREENZONE_SAVED 4 -#define HISTORY_SAVED 8 -#define LIST_SAVED 16 -#define SELECTION_SAVED 32 -#define ALL_SAVED MARKERS_SAVED|BOOKMARKS_SAVED|GREENZONE_SAVED|HISTORY_SAVED|LIST_SAVED|SELECTION_SAVED - +extern TASEDITOR_CONFIG taseditor_config; +extern TASEDITOR_WINDOW taseditor_window; extern MARKERS current_markers; extern BOOKMARKS bookmarks; -extern SCREENSHOT_DISPLAY screenshot_display; +extern POPUP_DISPLAY popup_display; extern GREENZONE greenzone; extern PLAYBACK playback; extern RECORDER recorder; extern INPUT_HISTORY history; -extern TASEDIT_LIST tasedit_list; -extern TASEDIT_SELECTION selection; +extern TASEDITOR_LIST list; +extern TASEDITOR_SELECTION selection; -extern void FCEU_printf(char *format, ...); extern void FCEU_PrintError(char *format, ...); extern bool SaveProject(); -extern void RedrawWindowCaption(); +extern bool SaveProjectAs(); -extern int TASEdit_autosave_period; - -TASEDIT_PROJECT::TASEDIT_PROJECT() +TASEDITOR_PROJECT::TASEDITOR_PROJECT() { } -void TASEDIT_PROJECT::init() +void TASEDITOR_PROJECT::init() { // init new project projectFile = ""; @@ -41,24 +32,27 @@ void TASEDIT_PROJECT::init() reset(); } -void TASEDIT_PROJECT::reset() +void TASEDITOR_PROJECT::reset() { changed = false; } -void TASEDIT_PROJECT::update() +void TASEDITOR_PROJECT::update() { - // if it's time to autosave - save - if (changed && TASEdit_autosave_period && clock() >= next_save_shedule) + // if it's time to autosave - pop Save As dialog + if (changed && taseditor_config.autosave_period && clock() >= next_save_shedule) { - SaveProject(); + if (taseditor_config.silent_autosave) + SaveProject(); + else + SaveProjectAs(); // in case user pressed Cancel, postpone saving to next time SheduleNextAutosave(); } } -bool TASEDIT_PROJECT::save() +bool TASEDITOR_PROJECT::save() { std::string PFN = GetProjectFile(); if (PFN.empty()) return false; @@ -75,7 +69,7 @@ bool TASEDIT_PROJECT::save() bookmarks.save(ofs); greenzone.save(ofs); history.save(ofs); - tasedit_list.save(ofs); + list.save(ofs); selection.save(ofs); delete ofs; @@ -84,7 +78,7 @@ bool TASEDIT_PROJECT::save() this->reset(); return true; } -bool TASEDIT_PROJECT::save_compact(char* filename, bool save_binary, bool save_markers, bool save_bookmarks, bool save_greenzone, bool save_history, bool save_list, bool save_selection) +bool TASEDITOR_PROJECT::save_compact(char* filename, bool save_binary, bool save_markers, bool save_bookmarks, bool save_greenzone, bool save_history, bool save_list, bool save_selection) { EMUFILE_FILE* ofs = FCEUD_UTF8_fstream(filename,"wb"); @@ -104,7 +98,7 @@ bool TASEDIT_PROJECT::save_compact(char* filename, bool save_binary, bool save_m bookmarks.save(ofs, save_bookmarks); greenzone.save(ofs, save_greenzone); history.save(ofs, save_history); - tasedit_list.save(ofs, save_list); + list.save(ofs, save_list); selection.save(ofs, save_selection); delete ofs; @@ -112,7 +106,7 @@ bool TASEDIT_PROJECT::save_compact(char* filename, bool save_binary, bool save_m playback.updateProgressbar(); return true; } -bool TASEDIT_PROJECT::load(char* fullname) +bool TASEDITOR_PROJECT::load(char* fullname) { EMUFILE_FILE ifs(fullname, "rb"); @@ -145,19 +139,19 @@ bool TASEDIT_PROJECT::load(char* fullname) bookmarks.load(&ifs); greenzone.load(&ifs); history.load(&ifs); - tasedit_list.load(&ifs); + list.load(&ifs); selection.load(&ifs); playback.reset(); recorder.reset(); - screenshot_display.reset(); + popup_display.reset(); reset(); RenameProject(fullname); return true; } -void TASEDIT_PROJECT::RenameProject(char* new_fullname) +void TASEDITOR_PROJECT::RenameProject(char* new_fullname) { projectFile = new_fullname; char drv[512], dir[512], name[512], ext[512]; // For getting the filename @@ -168,35 +162,35 @@ void TASEDIT_PROJECT::RenameProject(char* new_fullname) fm2FileName = thisfm2name; } // ----------------------------------------------------------------- -std::string TASEDIT_PROJECT::GetProjectFile() +std::string TASEDITOR_PROJECT::GetProjectFile() { return projectFile; } -std::string TASEDIT_PROJECT::GetProjectName() +std::string TASEDITOR_PROJECT::GetProjectName() { return projectName; } -std::string TASEDIT_PROJECT::GetFM2Name() +std::string TASEDITOR_PROJECT::GetFM2Name() { return fm2FileName; } -void TASEDIT_PROJECT::SetProjectChanged() +void TASEDITOR_PROJECT::SetProjectChanged() { if (!changed) { changed = true; - RedrawWindowCaption(); + taseditor_window.RedrawCaption(); SheduleNextAutosave(); } } -bool TASEDIT_PROJECT::GetProjectChanged() +bool TASEDITOR_PROJECT::GetProjectChanged() { return changed; } -void TASEDIT_PROJECT::SheduleNextAutosave() +void TASEDITOR_PROJECT::SheduleNextAutosave() { - if (TASEdit_autosave_period) - next_save_shedule = clock() + TASEdit_autosave_period * AUTOSAVE_PERIOD_SCALE; + if (taseditor_config.autosave_period) + next_save_shedule = clock() + taseditor_config.autosave_period * AUTOSAVE_PERIOD_SCALE; } diff --git a/src/drivers/win/taseditlib/taseditproj.h b/src/drivers/win/taseditlib/taseditor_project.h similarity index 64% rename from src/drivers/win/taseditlib/taseditproj.h rename to src/drivers/win/taseditlib/taseditor_project.h index 23a2d752..2cf13114 100644 --- a/src/drivers/win/taseditlib/taseditproj.h +++ b/src/drivers/win/taseditlib/taseditor_project.h @@ -1,10 +1,12 @@ -//Specification file for the TASEdit Project class +//Specification file for the TASEDITOR_PROJECT class #include typedef std::set SelectionFrames; #include #include "movie.h" #include "../common.h" +#include "taseditor_config.h" +#include "taseditor_window.h" #include "markers.h" #include "inputsnapshot.h" #include "inputhistory.h" @@ -12,16 +14,25 @@ typedef std::set SelectionFrames; #include "recorder.h" #include "greenzone.h" #include "bookmarks.h" -#include "tasedit_list.h" -#include "tasedit_sel.h" -#include "screenshot_display.h" +#include "taseditor_list.h" +#include "taseditor_lua.h" +#include "taseditor_sel.h" +#include "popup_display.h" #define AUTOSAVE_PERIOD_SCALE 60000 // = 1 minute in milliseconds -class TASEDIT_PROJECT +#define MARKERS_SAVED 1 +#define BOOKMARKS_SAVED 2 +#define GREENZONE_SAVED 4 +#define HISTORY_SAVED 8 +#define LIST_SAVED 16 +#define SELECTION_SAVED 32 +#define ALL_SAVED MARKERS_SAVED|BOOKMARKS_SAVED|GREENZONE_SAVED|HISTORY_SAVED|LIST_SAVED|SELECTION_SAVED + +class TASEDITOR_PROJECT { public: - TASEDIT_PROJECT(); + TASEDITOR_PROJECT(); void init(); void reset(); void update(); diff --git a/src/drivers/win/taseditlib/tasedit_sel.cpp b/src/drivers/win/taseditlib/taseditor_sel.cpp similarity index 78% rename from src/drivers/win/taseditlib/tasedit_sel.cpp rename to src/drivers/win/taseditlib/taseditor_sel.cpp index 5e81b933..058af8c9 100644 --- a/src/drivers/win/taseditlib/tasedit_sel.cpp +++ b/src/drivers/win/taseditlib/taseditor_sel.cpp @@ -1,16 +1,13 @@ -//Implementation file of TASEDIT_SELECTION class -#include "taseditproj.h" +//Implementation file of TASEDITOR_SELECTION class +#include "taseditor_project.h" #include "..\tasedit.h" // only for MARKER_NOTE_EDIT_LOWER -char selection_save_id[SELECTION_ID_LEN] = "SELECTION"; -char selection_skipsave_id[SELECTION_ID_LEN] = "SELECTIOX"; - -extern HWND hwndTasEdit; -extern int TasEdit_undo_levels; -extern int marker_note_edit; - +extern TASEDITOR_CONFIG taseditor_config; +extern TASEDITOR_WINDOW taseditor_window; extern MARKERS current_markers; -extern TASEDIT_LIST tasedit_list; +extern TASEDITOR_LIST list; + +extern int marker_note_edit; extern void UpdateMarkerNote(); @@ -18,6 +15,9 @@ LRESULT APIENTRY LowerMarkerEditWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR WNDPROC selectionMarkerEdit_oldWndproc; // resources +char selection_save_id[SELECTION_ID_LEN] = "SELECTION"; +char selection_skipsave_id[SELECTION_ID_LEN] = "SELECTIOX"; + char selectionText[] = "Selection: "; char selectionEmptyText[] = "Selection: no"; char numTextRow[] = "1 row, "; @@ -28,21 +28,21 @@ char clipboardText[] = "Clipboard: "; char clipboardEmptyText[] = "Clipboard: empty"; char lowerMarkerText[] = "Marker "; -TASEDIT_SELECTION::TASEDIT_SELECTION() +TASEDITOR_SELECTION::TASEDITOR_SELECTION() { } -void TASEDIT_SELECTION::init() +void TASEDITOR_SELECTION::init() { - hwndPrevMarker = GetDlgItem(hwndTasEdit, TASEDIT_PREV_MARKER); - hwndNextMarker = GetDlgItem(hwndTasEdit, TASEDIT_NEXT_MARKER); - hwndTextSelection = GetDlgItem(hwndTasEdit, IDC_TEXT_SELECTION); - hwndTextClipboard = GetDlgItem(hwndTasEdit, IDC_TEXT_CLIPBOARD); - hwndSelectionMarker = GetDlgItem(hwndTasEdit, IDC_SELECTION_MARKER); - SendMessage(hwndSelectionMarker, WM_SETFONT, (WPARAM)tasedit_list.hMarkersFont, 0); - hwndSelectionMarkerEdit = GetDlgItem(hwndTasEdit, IDC_SELECTION_MARKER_EDIT); + hwndPrevMarker = GetDlgItem(taseditor_window.hwndTasEditor, TASEDIT_PREV_MARKER); + hwndNextMarker = GetDlgItem(taseditor_window.hwndTasEditor, TASEDIT_NEXT_MARKER); + hwndTextSelection = GetDlgItem(taseditor_window.hwndTasEditor, IDC_TEXT_SELECTION); + hwndTextClipboard = GetDlgItem(taseditor_window.hwndTasEditor, IDC_TEXT_CLIPBOARD); + hwndSelectionMarker = GetDlgItem(taseditor_window.hwndTasEditor, IDC_SELECTION_MARKER); + SendMessage(hwndSelectionMarker, WM_SETFONT, (WPARAM)list.hMarkersFont, 0); + hwndSelectionMarkerEdit = GetDlgItem(taseditor_window.hwndTasEditor, IDC_SELECTION_MARKER_EDIT); SendMessage(hwndSelectionMarkerEdit, EM_SETLIMITTEXT, MAX_NOTE_LEN - 1, 0); - SendMessage(hwndSelectionMarkerEdit, WM_SETFONT, (WPARAM)tasedit_list.hMarkersEditFont, 0); + SendMessage(hwndSelectionMarkerEdit, WM_SETFONT, (WPARAM)list.hMarkersEditFont, 0); // subclass the edit control selectionMarkerEdit_oldWndproc = (WNDPROC)SetWindowLong(hwndSelectionMarkerEdit, GWL_WNDPROC, (LONG)LowerMarkerEditWndProc); @@ -52,20 +52,20 @@ void TASEDIT_SELECTION::init() CheckClipboard(); RedrawTextClipboard(); } -void TASEDIT_SELECTION::free() +void TASEDITOR_SELECTION::free() { // clear history selections_history.resize(0); history_total_items = 0; temp_selection.clear(); } -void TASEDIT_SELECTION::reset() +void TASEDITOR_SELECTION::reset() { free(); // init vars shown_marker = 0; last_selection_beginning = -1; - history_size = TasEdit_undo_levels + 1; + history_size = taseditor_config.undo_levels + 1; selections_history.resize(history_size); history_start_pos = 0; history_cursor_pos = -1; @@ -74,14 +74,14 @@ void TASEDIT_SELECTION::reset() track_selection_changes = true; reset_vars(); } -void TASEDIT_SELECTION::reset_vars() +void TASEDITOR_SELECTION::reset_vars() { old_prev_marker_button_state = prev_marker_button_state = false; old_next_marker_button_state = next_marker_button_state = false; must_redraw_text = true; must_find_current_marker = true; } -void TASEDIT_SELECTION::update() +void TASEDITOR_SELECTION::update() { // keep selection within movie limits if (CurrentSelection().size()) @@ -179,7 +179,7 @@ void TASEDIT_SELECTION::update() } -void TASEDIT_SELECTION::RedrawTextClipboard() +void TASEDITOR_SELECTION::RedrawTextClipboard() { if (clipboard_selection.size()) { @@ -212,7 +212,7 @@ void TASEDIT_SELECTION::RedrawTextClipboard() } else SetWindowText(hwndTextClipboard, clipboardEmptyText); } -void TASEDIT_SELECTION::RedrawMarker() +void TASEDITOR_SELECTION::RedrawMarker() { // redraw marker num char new_text[MAX_NOTE_LEN] = {0}; @@ -227,7 +227,7 @@ void TASEDIT_SELECTION::RedrawMarker() SetWindowText(hwndSelectionMarkerEdit, new_text); } -void TASEDIT_SELECTION::JumpPrevMarker() +void TASEDITOR_SELECTION::JumpPrevMarker() { // jump to previous marker int index = GetCurrentSelectionBeginning(); @@ -239,7 +239,7 @@ void TASEDIT_SELECTION::JumpPrevMarker() else JumpToFrame(0); } -void TASEDIT_SELECTION::JumpNextMarker() +void TASEDITOR_SELECTION::JumpNextMarker() { // jump to next marker int index = GetCurrentSelectionBeginning(); @@ -253,14 +253,14 @@ void TASEDIT_SELECTION::JumpNextMarker() else JumpToFrame(last_frame); } -void TASEDIT_SELECTION::JumpToFrame(int frame) +void TASEDITOR_SELECTION::JumpToFrame(int frame) { ClearSelection(); SetRowSelection(frame); - tasedit_list.FollowSelection(); + list.FollowSelection(); } // ---------------------------------------------------------- -void TASEDIT_SELECTION::save(EMUFILE *os, bool really_save) +void TASEDITOR_SELECTION::save(EMUFILE *os, bool really_save) { if (really_save) { @@ -283,7 +283,7 @@ void TASEDIT_SELECTION::save(EMUFILE *os, bool really_save) } } // returns true if couldn't load -bool TASEDIT_SELECTION::load(EMUFILE *is) +bool TASEDITOR_SELECTION::load(EMUFILE *is) { // read "SELECTION" string char save_id[SELECTION_ID_LEN]; @@ -344,7 +344,7 @@ error: return true; } -void TASEDIT_SELECTION::saveSelection(SelectionFrames& selection, EMUFILE *os) +void TASEDITOR_SELECTION::saveSelection(SelectionFrames& selection, EMUFILE *os) { write32le(selection.size(), os); if (selection.size()) @@ -353,7 +353,7 @@ void TASEDIT_SELECTION::saveSelection(SelectionFrames& selection, EMUFILE *os) write32le(*it, os); } } -bool TASEDIT_SELECTION::loadSelection(SelectionFrames& selection, EMUFILE *is) +bool TASEDITOR_SELECTION::loadSelection(SelectionFrames& selection, EMUFILE *is) { int temp_int, temp_size; selection.clear(); @@ -366,7 +366,7 @@ bool TASEDIT_SELECTION::loadSelection(SelectionFrames& selection, EMUFILE *is) } return false; } -bool TASEDIT_SELECTION::skiploadSelection(EMUFILE *is) +bool TASEDITOR_SELECTION::skiploadSelection(EMUFILE *is) { int temp_size; if (!read32le(&temp_size, is)) return true; @@ -375,7 +375,7 @@ bool TASEDIT_SELECTION::skiploadSelection(EMUFILE *is) } // ---------------------------------------------------------- //used to track selection -void TASEDIT_SELECTION::ItemRangeChanged(NMLVODSTATECHANGE* info) +void TASEDITOR_SELECTION::ItemRangeChanged(NMLVODSTATECHANGE* info) { bool ON = !(info->uOldState & LVIS_SELECTED) && (info->uNewState & LVIS_SELECTED); bool OFF = (info->uOldState & LVIS_SELECTED) && !(info->uNewState & LVIS_SELECTED); @@ -389,7 +389,7 @@ void TASEDIT_SELECTION::ItemRangeChanged(NMLVODSTATECHANGE* info) must_redraw_text = true; } -void TASEDIT_SELECTION::ItemChanged(NMLISTVIEW* info) +void TASEDITOR_SELECTION::ItemChanged(NMLISTVIEW* info) { int item = info->iItem; @@ -423,7 +423,7 @@ void TASEDIT_SELECTION::ItemChanged(NMLISTVIEW* info) must_redraw_text = true; } // ---------------------------------------------------------- -void TASEDIT_SELECTION::AddNewSelectionToHistory() +void TASEDITOR_SELECTION::AddNewSelectionToHistory() { // create new empty selection SelectionFrames selectionFrames; @@ -445,7 +445,7 @@ void TASEDIT_SELECTION::AddNewSelectionToHistory() selections_history[(history_start_pos + history_cursor_pos) % history_size] = selectionFrames; } -void TASEDIT_SELECTION::jump(int new_pos) +void TASEDITOR_SELECTION::jump(int new_pos) { if (new_pos < 0) new_pos = 0; else if (new_pos >= history_total_items) new_pos = history_total_items-1; if (new_pos == history_cursor_pos) return; @@ -457,22 +457,22 @@ void TASEDIT_SELECTION::jump(int new_pos) // also keep selection within list update(); } -void TASEDIT_SELECTION::undo() +void TASEDITOR_SELECTION::undo() { jump(history_cursor_pos - 1); } -void TASEDIT_SELECTION::redo() +void TASEDITOR_SELECTION::redo() { jump(history_cursor_pos + 1); } -void TASEDIT_SELECTION::MemorizeClipboardSelection() +void TASEDITOR_SELECTION::MemorizeClipboardSelection() { // copy currently strobed selection data to clipboard_selection clipboard_selection = temp_selection; RedrawTextClipboard(); } -void TASEDIT_SELECTION::ReselectClipboard() +void TASEDITOR_SELECTION::ReselectClipboard() { if (clipboard_selection.size() == 0) return; @@ -483,9 +483,9 @@ void TASEDIT_SELECTION::ReselectClipboard() update(); } // retrieves some information from clipboard to clipboard_selection -void TASEDIT_SELECTION::CheckClipboard() +void TASEDITOR_SELECTION::CheckClipboard() { - if (OpenClipboard(hwndTasEdit)) + if (OpenClipboard(taseditor_window.hwndTasEditor)) { // check if clipboard contains TAS Editor input data HANDLE hGlobal = GetClipboardData(CF_TEXT); @@ -525,40 +525,40 @@ void TASEDIT_SELECTION::CheckClipboard() } } // ---------------------------------------------------------- -void TASEDIT_SELECTION::ClearSelection() +void TASEDITOR_SELECTION::ClearSelection() { - ListView_SetItemState(tasedit_list.hwndList, -1, 0, LVIS_FOCUSED|LVIS_SELECTED); + ListView_SetItemState(list.hwndList, -1, 0, LVIS_FOCUSED|LVIS_SELECTED); } -void TASEDIT_SELECTION::ClearRowSelection(int index) +void TASEDITOR_SELECTION::ClearRowSelection(int index) { - ListView_SetItemState(tasedit_list.hwndList, index, 0, LVIS_SELECTED); + ListView_SetItemState(list.hwndList, index, 0, LVIS_SELECTED); } -void TASEDIT_SELECTION::EnforceSelectionToList() +void TASEDITOR_SELECTION::EnforceSelectionToList() { track_selection_changes = false; ClearSelection(); for(SelectionFrames::reverse_iterator it(CurrentSelection().rbegin()); it != CurrentSelection().rend(); it++) { - ListView_SetItemState(tasedit_list.hwndList, *it, LVIS_SELECTED, LVIS_SELECTED); + ListView_SetItemState(list.hwndList, *it, LVIS_SELECTED, LVIS_SELECTED); } track_selection_changes = true; } -void TASEDIT_SELECTION::SelectAll() +void TASEDITOR_SELECTION::SelectAll() { - ListView_SetItemState(tasedit_list.hwndList, -1, LVIS_SELECTED, LVIS_SELECTED); + ListView_SetItemState(list.hwndList, -1, LVIS_SELECTED, LVIS_SELECTED); } -void TASEDIT_SELECTION::SetRowSelection(int index) +void TASEDITOR_SELECTION::SetRowSelection(int index) { - ListView_SetItemState(tasedit_list.hwndList, index, LVIS_FOCUSED|LVIS_SELECTED, LVIS_FOCUSED|LVIS_SELECTED); + ListView_SetItemState(list.hwndList, index, LVIS_FOCUSED|LVIS_SELECTED, LVIS_FOCUSED|LVIS_SELECTED); } -void TASEDIT_SELECTION::SetRegionSelection(int start, int end) +void TASEDITOR_SELECTION::SetRegionSelection(int start, int end) { for (int i = start; i <= end; ++i) - ListView_SetItemState(tasedit_list.hwndList, i, LVIS_FOCUSED|LVIS_SELECTED, LVIS_FOCUSED|LVIS_SELECTED); + ListView_SetItemState(list.hwndList, i, LVIS_FOCUSED|LVIS_SELECTED, LVIS_FOCUSED|LVIS_SELECTED); } -void TASEDIT_SELECTION::SelectMidMarkers() +void TASEDITOR_SELECTION::SelectMidMarkers() { int center, upper_border, lower_border; int upper_marker, lower_marker; @@ -580,7 +580,7 @@ void TASEDIT_SELECTION::SelectMidMarkers() if (current_markers.GetMarker(lower_marker)) break; // clear selection without clearing focused, because otherwise there's strange bug when quickly pressing Ctrl+A right after clicking on already selected row - ListView_SetItemState(tasedit_list.hwndList, -1, 0, LVIS_SELECTED); + ListView_SetItemState(list.hwndList, -1, 0, LVIS_SELECTED); // special case if (upper_marker == -1 && lower_marker == movie_size) @@ -595,7 +595,7 @@ void TASEDIT_SELECTION::SelectMidMarkers() // default: select all between markers for (int i = upper_marker+1; i < lower_marker; ++i) { - ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED); + ListView_SetItemState(list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED); } } else if (upper_border == upper_marker+1 && lower_border == lower_marker-1) { @@ -604,14 +604,14 @@ void TASEDIT_SELECTION::SelectMidMarkers() if (lower_marker >= movie_size) lower_marker = movie_size - 1; for (int i = upper_marker; i <= lower_marker; ++i) { - ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED); + ListView_SetItemState(list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED); } } else if (upper_border <= upper_marker && lower_border >= lower_marker) { // selected all between markers and both markers selected too - now deselect lower marker for (int i = upper_marker; i < lower_marker; ++i) { - ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED); + ListView_SetItemState(list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED); } } else if (upper_border == upper_marker && lower_border == lower_marker-1) { @@ -619,52 +619,52 @@ void TASEDIT_SELECTION::SelectMidMarkers() if (lower_marker >= movie_size) lower_marker = movie_size - 1; for (int i = upper_marker+1; i <= lower_marker; ++i) { - ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED); + ListView_SetItemState(list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED); } } else if (upper_border == upper_marker+1 && lower_border == lower_marker) { // selected all between markers and lower marker selected too - now deselect lower marker (return to "selected all between markers") for (int i = upper_marker + 1; i < lower_marker; ++i) { - ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED); + ListView_SetItemState(list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED); } } } // getters -int TASEDIT_SELECTION::GetCurrentSelectionSize() +int TASEDITOR_SELECTION::GetCurrentSelectionSize() { return selections_history[(history_start_pos + history_cursor_pos) % history_size].size(); } -int TASEDIT_SELECTION::GetCurrentSelectionBeginning() +int TASEDITOR_SELECTION::GetCurrentSelectionBeginning() { if (selections_history[(history_start_pos + history_cursor_pos) % history_size].size()) return *selections_history[(history_start_pos + history_cursor_pos) % history_size].begin(); else return -1; } -bool TASEDIT_SELECTION::CheckFrameSelected(int frame) +bool TASEDITOR_SELECTION::CheckFrameSelected(int frame) { if(CurrentSelection().find(frame) == CurrentSelection().end()) return false; return true; } -SelectionFrames* TASEDIT_SELECTION::MakeStrobe() +SelectionFrames* TASEDITOR_SELECTION::MakeStrobe() { // copy current selection to temp_selection temp_selection = selections_history[(history_start_pos + history_cursor_pos) % history_size]; return &temp_selection; } -SelectionFrames& TASEDIT_SELECTION::GetStrobedSelection() +SelectionFrames& TASEDITOR_SELECTION::GetStrobedSelection() { return temp_selection; } -SelectionFrames& TASEDIT_SELECTION::GetInsertedSet() +SelectionFrames& TASEDITOR_SELECTION::GetInsertedSet() { return inserted_set; } // this getter is only for inside-class use -SelectionFrames& TASEDIT_SELECTION::CurrentSelection() +SelectionFrames& TASEDITOR_SELECTION::CurrentSelection() { return selections_history[(history_start_pos + history_cursor_pos) % history_size]; } @@ -674,7 +674,7 @@ LRESULT APIENTRY LowerMarkerEditWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) { extern PLAYBACK playback; - extern TASEDIT_SELECTION selection; + extern TASEDITOR_SELECTION selection; switch(msg) { case WM_CHAR: @@ -684,11 +684,11 @@ LRESULT APIENTRY LowerMarkerEditWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR case VK_ESCAPE: // revert text to original note text SetWindowText(selection.hwndSelectionMarkerEdit, current_markers.GetNote(selection.shown_marker).c_str()); - SetFocus(tasedit_list.hwndList); + SetFocus(list.hwndList); return 0; case VK_RETURN: // exit and save text changes - SetFocus(tasedit_list.hwndList); + SetFocus(list.hwndList); return 0; case VK_TAB: // switch to upper edit control (also exit and save text changes) diff --git a/src/drivers/win/taseditlib/tasedit_sel.h b/src/drivers/win/taseditlib/taseditor_sel.h similarity index 90% rename from src/drivers/win/taseditlib/tasedit_sel.h rename to src/drivers/win/taseditlib/taseditor_sel.h index 254026a3..a5d7a9bf 100644 --- a/src/drivers/win/taseditlib/tasedit_sel.h +++ b/src/drivers/win/taseditlib/taseditor_sel.h @@ -1,11 +1,11 @@ -//Specification file for TASEDIT_SELECTION class +//Specification file for TASEDITOR_SELECTION class #define SELECTION_ID_LEN 10 -class TASEDIT_SELECTION +class TASEDITOR_SELECTION { public: - TASEDIT_SELECTION(); + TASEDITOR_SELECTION(); void init(); void free(); void reset(); diff --git a/src/drivers/win/taseditlib/taseditor_window.cpp b/src/drivers/win/taseditlib/taseditor_window.cpp new file mode 100644 index 00000000..f92bd683 --- /dev/null +++ b/src/drivers/win/taseditlib/taseditor_window.cpp @@ -0,0 +1,1081 @@ +//Implementation file of TASEDITOR_WINDOW class +#include "taseditor_project.h" +#include "../main.h" +#include "../Win32InputBox.h" +#include "../tasedit.h" +#include + +extern TASEDITOR_CONFIG taseditor_config; +extern PLAYBACK playback; +extern GREENZONE greenzone; +extern RECORDER recorder; +extern TASEDITOR_PROJECT project; +extern TASEDITOR_LIST list; +extern TASEDITOR_SELECTION selection; +extern MARKERS current_markers; +extern BOOKMARKS bookmarks; +extern INPUT_HISTORY history; +extern POPUP_DISPLAY popup_display; + +extern bool turbo; +extern bool muteTurbo; +extern int marker_note_edit; +extern int search_similar_marker; +extern bool must_call_manual_lua_function; + +BOOL CALLBACK WndprocTasEditor(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +extern BOOL CALLBACK FindNoteProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam); +extern BOOL CALLBACK AboutProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam); + +// Recent Menu +HMENU recent_projects_menu; +char* recent_projects[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +const unsigned int MENU_FIRST_RECENT_PROJECT = 55000; +const unsigned int MAX_NUMBER_OF_RECENT_PROJECTS = sizeof(recent_projects)/sizeof(*recent_projects); + +// resources +char windowCaptioBase[] = "TAS Editor"; +char taseditor_help_filename[] = "\\taseditor.chm"; + +TASEDITOR_WINDOW::TASEDITOR_WINDOW() +{ + hwndTasEditor = 0; + hwndFindNote = 0; + hTaseditorIcon = 0; + TASEditor_focus = false; + +} + +void TASEDITOR_WINDOW::init() +{ + hTaseditorIcon = (HICON)LoadImage(fceu_hInstance, MAKEINTRESOURCE(IDI_ICON3), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE); + hwndTasEditor = CreateDialog(fceu_hInstance, "TASEDIT", hAppWnd, WndprocTasEditor); + hmenu = GetMenu(hwndTasEditor); + hrmenu = LoadMenu(fceu_hInstance,"TASEDITCONTEXTMENUS"); + + UpdateCheckedItems(); + SetWindowPos(hwndTasEditor, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); + + recent_projects_menu = CreateMenu(); + UpdateRecentProjectsMenu(); + + reset(); +} +void TASEDITOR_WINDOW::exit() +{ + if (hwndFindNote) + { + DestroyWindow(hwndFindNote); + hwndFindNote = 0; + } + if (hwndTasEditor) + { + DestroyWindow(hwndTasEditor); + hwndTasEditor = 0; + TASEditor_focus = false; + } + if (hTaseditorIcon) + { + DestroyIcon(hTaseditorIcon); + hTaseditorIcon = 0; + } +} +void TASEDITOR_WINDOW::reset() +{ + +} +void TASEDITOR_WINDOW::update() +{ + +} +// -------------------------------------------------------------------------------- +void TASEDITOR_WINDOW::RedrawCaption() +{ + char new_caption[300]; + strcpy(new_caption, windowCaptioBase); + if (!movie_readonly) + strcat(new_caption, recorder.GetRecordingCaption()); + // add project name + std::string projectname = project.GetProjectName(); + if (!projectname.empty()) + { + strcat(new_caption, " - "); + strcat(new_caption, projectname.c_str()); + } + // and * if project has unsaved changes + if (project.GetProjectChanged()) + strcat(new_caption, "*"); + SetWindowText(hwndTasEditor, new_caption); +} +void TASEDITOR_WINDOW::RedrawWindow() +{ + InvalidateRect(hwndTasEditor, 0, FALSE); +} + +void TASEDITOR_WINDOW::RightClick(LPNMITEMACTIVATE info) +{ + int index = info->iItem; + if(index == -1) + StrayClickMenu(info); + else if (selection.CheckFrameSelected(index)) + RightClickMenu(info); +} +void TASEDITOR_WINDOW::StrayClickMenu(LPNMITEMACTIVATE info) +{ + POINT pt = info->ptAction; + ClientToScreen(list.hwndList, &pt); + HMENU sub = GetSubMenu(hrmenu, CONTEXTMENU_STRAY); + TrackPopupMenu(sub, 0, pt.x, pt.y, 0, hwndTasEditor, 0); +} +void TASEDITOR_WINDOW::RightClickMenu(LPNMITEMACTIVATE info) +{ + POINT pt = info->ptAction; + ClientToScreen(list.hwndList, &pt); + + SelectionFrames* current_selection = selection.MakeStrobe(); + if (current_selection->size() == 0) + { + StrayClickMenu(info); + return; + } + HMENU sub = GetSubMenu(hrmenu, CONTEXTMENU_SELECTED); + // inspect current selection and disable inappropriate menu items + SelectionFrames::iterator current_selection_begin(current_selection->begin()); + SelectionFrames::iterator current_selection_end(current_selection->end()); + bool set_found = false, unset_found = false; + for(SelectionFrames::iterator it(current_selection_begin); it != current_selection_end; it++) + { + if(current_markers.GetMarker(*it)) + set_found = true; + else + unset_found = true; + } + if (set_found) + EnableMenuItem(sub, ID_SELECTED_REMOVEMARKER, MF_BYCOMMAND | MF_ENABLED); + else + EnableMenuItem(sub, ID_SELECTED_REMOVEMARKER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + if (unset_found) + EnableMenuItem(sub, ID_SELECTED_SETMARKER, MF_BYCOMMAND | MF_ENABLED); + else + EnableMenuItem(sub, ID_SELECTED_SETMARKER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + + TrackPopupMenu(sub, 0, pt.x, pt.y, 0, hwndTasEditor, 0); +} + +void TASEDITOR_WINDOW::UpdateCheckedItems() +{ + // check option ticks + CheckDlgButton(hwndTasEditor, CHECK_FOLLOW_CURSOR, taseditor_config.follow_playback?MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(hwndTasEditor,CHECK_AUTORESTORE_PLAYBACK,taseditor_config.restore_position?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndTasEditor, IDC_SUPERIMPOSE, taseditor_config.superimpose); + CheckDlgButton(hwndTasEditor, IDC_RUN_AUTO, taseditor_config.enable_auto_function); + CheckDlgButton(hwndTasEditor, CHECK_TURBO_SEEK, taseditor_config.turbo_seek?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_VIEW_SHOW_LAG_FRAMES, taseditor_config.show_lag_frames?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_VIEW_SHOW_MARKERS, taseditor_config.show_markers?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_VIEW_SHOWBRANCHSCREENSHOTS, taseditor_config.show_branch_screenshots?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_VIEW_SHOWBRANCHTOOLTIPS, taseditor_config.show_branch_tooltips?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_VIEW_JUMPWHENMAKINGUNDO, taseditor_config.jump_to_undo?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_VIEW_FOLLOWMARKERNOTECONTEXT, taseditor_config.follow_note_context?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_VIEW_ENABLEHOTCHANGES, taseditor_config.enable_hot_changes?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_BRANCHESRESTOREFULLMOVIE, taseditor_config.branch_full_movie?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_BRANCHESWORKONLYWHENRECORDING, taseditor_config.branch_only_when_rec?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_HUDINBRANCHSCREENSHOTS, taseditor_config.branch_scr_hud?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_BINDMARKERSTOINPUT, taseditor_config.bind_markers?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_EMPTYNEWMARKERNOTES, taseditor_config.empty_marker_notes?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_COMBINECONSECUTIVERECORDINGS, taseditor_config.combine_consecutive_rec?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_USE1PFORRECORDING, taseditor_config.use_1p_rec?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_USEINPUTKEYSFORCOLUMNSET, taseditor_config.columnset_by_keys?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_KEYBOARDCONTROLSINLISTVIEW, taseditor_config.keyboard_for_listview?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_SUPERIMPOSE_AFFECTS_PASTE, taseditor_config.superimpose_affects_paste?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_MUTETURBO, muteTurbo?MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(hmenu, ID_CONFIG_SILENTAUTOSAVE, taseditor_config.silent_autosave?MF_CHECKED : MF_UNCHECKED); + +} + + + +// -------------------------------------------------------------------------------------------- +void TASEDITOR_WINDOW::UpdateRecentProjectsMenu() +{ + MENUITEMINFO moo; + int x; + moo.cbSize = sizeof(moo); + moo.fMask = MIIM_SUBMENU | MIIM_STATE; + GetMenuItemInfo(GetSubMenu(hmenu, 0), ID_TASEDIT_FILE_RECENT, FALSE, &moo); + moo.hSubMenu = recent_projects_menu; + moo.fState = recent_projects[0] ? MFS_ENABLED : MFS_GRAYED; + SetMenuItemInfo(GetSubMenu(hmenu, 0), ID_TASEDIT_FILE_RECENT, FALSE, &moo); + + // Remove all recent files submenus + for(x = 0; x < MAX_NUMBER_OF_RECENT_PROJECTS; x++) + { + RemoveMenu(recent_projects_menu, MENU_FIRST_RECENT_PROJECT + x, MF_BYCOMMAND); + } + // Recreate the menus + for(x = MAX_NUMBER_OF_RECENT_PROJECTS - 1; x >= 0; x--) + { + // Skip empty strings + if(!recent_projects[x]) continue; + + std::string tmp = recent_projects[x]; + // clamp this string to 128 chars + if(tmp.size() > 128) + tmp = tmp.substr(0, 128); + + moo.cbSize = sizeof(moo); + moo.fMask = MIIM_DATA | MIIM_ID | MIIM_TYPE; + // Insert the menu item + moo.cch = tmp.size(); + moo.fType = 0; + moo.wID = MENU_FIRST_RECENT_PROJECT + x; + moo.dwTypeData = (LPSTR)tmp.c_str(); + InsertMenuItem(recent_projects_menu, 0, 1, &moo); + } + + // if recent_projects is empty, "Recent" manu should be grayed + int i; + for (i = 0; i < MAX_NUMBER_OF_RECENT_PROJECTS; ++i) + if (recent_projects[i]) break; + if (i < MAX_NUMBER_OF_RECENT_PROJECTS) + EnableMenuItem(hmenu, ID_TASEDIT_FILE_RECENT, MF_ENABLED); + else + EnableMenuItem(hmenu, ID_TASEDIT_FILE_RECENT, MF_GRAYED); + + DrawMenuBar(hwndTasEditor); +} +void TASEDITOR_WINDOW::UpdateRecentProjectsArray(const char* addString) +{ + // find out if the filename is already in the recent files list + for(unsigned int x = 0; x < MAX_NUMBER_OF_RECENT_PROJECTS; x++) + { + if(recent_projects[x]) + { + if(!strcmp(recent_projects[x], addString)) // Item is already in list + { + // If the filename is in the file list don't add it again, move it up in the list instead + char* tmp = recent_projects[x]; // save pointer + for(int y = x; y; y--) + // Move items down. + recent_projects[y] = recent_projects[y - 1]; + // Put item on top. + recent_projects[0] = tmp; + UpdateRecentProjectsMenu(); + return; + } + } + } + // The filename wasn't found in the list. That means we need to add it. + // If there's no space left in the recent files list, get rid of the last item in the list + if(recent_projects[MAX_NUMBER_OF_RECENT_PROJECTS-1]) + free(recent_projects[MAX_NUMBER_OF_RECENT_PROJECTS-1]); + // Move other items down + for(unsigned int x = MAX_NUMBER_OF_RECENT_PROJECTS-1; x; x--) + recent_projects[x] = recent_projects[x-1]; + // Add new item + recent_projects[0] = (char*)malloc(strlen(addString) + 1); + strcpy(recent_projects[0], addString); + + UpdateRecentProjectsMenu(); +} +void TASEDITOR_WINDOW::RemoveRecentProject(unsigned int which) +{ + if (which >= MAX_NUMBER_OF_RECENT_PROJECTS) return; + // Remove the item + if(recent_projects[which]) + free(recent_projects[which]); + // If the item is not the last one in the list, shift the remaining ones up + if (which < MAX_NUMBER_OF_RECENT_PROJECTS-1) + { + // Move the remaining items up + for(unsigned int x = which+1; x < MAX_NUMBER_OF_RECENT_PROJECTS; ++x) + { + recent_projects[x-1] = recent_projects[x]; // Shift each remaining item up by 1 + } + } + recent_projects[MAX_NUMBER_OF_RECENT_PROJECTS-1] = 0; // Clear out the last item since it is empty now + + UpdateRecentProjectsMenu(); +} +void TASEDITOR_WINDOW::LoadRecentProject(int slot) +{ + char*& fname = recent_projects[slot]; + if(fname && AskSaveProject()) + { + if (!LoadProject(fname)) + { + int result = MessageBox(hwndTasEditor, "Remove from list?", "Could Not Open Recent Project", MB_YESNO); + if (result == IDYES) + RemoveRecentProject(slot); + } + } +} + + +// ==================================================================================================== +BOOL CALLBACK WndprocTasEditor(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + extern TASEDITOR_WINDOW taseditor_window; + switch(uMsg) + { + case WM_PAINT: + break; + case WM_INITDIALOG: + { + if (taseditor_config.wndx == -32000) taseditor_config.wndx = 0; //Just in case + if (taseditor_config.wndy == -32000) taseditor_config.wndy = 0; + SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)taseditor_window.hTaseditorIcon); + SetWindowPos(hwndDlg, 0, taseditor_config.wndx, taseditor_config.wndy, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); + break; + } + case WM_MOVE: + { + if (!IsIconic(hwndDlg)) + { + RECT wrect; + GetWindowRect(hwndDlg, &wrect); + taseditor_config.wndx = wrect.left; + taseditor_config.wndy = wrect.top; + WindowBoundsCheckNoResize(taseditor_config.wndx, taseditor_config.wndy, wrect.right); + // also move popup display if it's open + popup_display.ParentWindowMoved(); + } + break; + } + case WM_NOTIFY: + switch(wParam) + { + case IDC_LIST1: + switch(((LPNMHDR)lParam)->code) + { + case NM_CUSTOMDRAW: + SetWindowLong(hwndDlg, DWL_MSGRESULT, list.CustomDraw((NMLVCUSTOMDRAW*)lParam)); + return TRUE; + case LVN_GETDISPINFO: + list.GetDispInfo((NMLVDISPINFO*)lParam); + break; + case NM_CLICK: + SingleClick((LPNMITEMACTIVATE)lParam); + break; + case NM_DBLCLK: + DoubleClick((LPNMITEMACTIVATE)lParam); + break; + case NM_RCLICK: + taseditor_window.RightClick((LPNMITEMACTIVATE)lParam); + break; + case LVN_ITEMCHANGED: + selection.ItemChanged((LPNMLISTVIEW) lParam); + break; + case LVN_ODSTATECHANGED: + selection.ItemRangeChanged((LPNMLVODSTATECHANGE) lParam); + break; + /* + case LVN_ENDSCROLL: + // redraw upper and lower list rows (fix for known WinXP bug) + int start = ListView_GetTopIndex(hwndList); + ListView_RedrawItems(hwndList,start,start); + int end = start + listItems - 1; + ListView_RedrawItems(hwndList,end,end); + break; + */ + } + break; + case IDC_BOOKMARKSLIST: + switch(((LPNMHDR)lParam)->code) + { + case NM_CUSTOMDRAW: + SetWindowLong(hwndDlg, DWL_MSGRESULT, bookmarks.CustomDraw((NMLVCUSTOMDRAW*)lParam)); + return TRUE; + case LVN_GETDISPINFO: + bookmarks.GetDispInfo((NMLVDISPINFO*)lParam); + break; + case NM_CLICK: + case NM_DBLCLK: + bookmarks.LeftClick((LPNMITEMACTIVATE)lParam); + break; + case NM_RCLICK: + bookmarks.RightClick((LPNMITEMACTIVATE)lParam); + break; + } + break; + case IDC_HISTORYLIST: + switch(((LPNMHDR)lParam)->code) + { + case NM_CUSTOMDRAW: + SetWindowLong(hwndDlg, DWL_MSGRESULT, history.CustomDraw((NMLVCUSTOMDRAW*)lParam)); + return TRUE; + case LVN_GETDISPINFO: + history.GetDispInfo((NMLVDISPINFO*)lParam); + break; + case NM_CLICK: + case NM_DBLCLK: + case NM_RCLICK: + history.Click((LPNMITEMACTIVATE)lParam); + break; + } + break; + case TASEDIT_PLAYSTOP: + switch(((LPNMHDR)lParam)->code) + { + case NM_CLICK: + case NM_DBLCLK: + playback.ToggleEmulationPause(); + break; + } + break; + } + break; + case WM_CLOSE: + case WM_QUIT: + ExitTasEdit(); + break; + case WM_ACTIVATE: + if(LOWORD(wParam)) + { + taseditor_window.TASEditor_focus = true; + SetTaseditInput(); + } else + { + taseditor_window.TASEditor_focus = false; + ClearTaseditInput(); + } + break; + case WM_CTLCOLORSTATIC: + if ((HWND)lParam == playback.hwndPlaybackMarker) + { + SetTextColor((HDC)wParam, PLAYBACK_MARKER_COLOR); + SetBkMode((HDC)wParam, TRANSPARENT); + return (BOOL)(list.bg_brush); + } else if ((HWND)lParam == selection.hwndSelectionMarker) + { + SetTextColor((HDC)wParam, GetSysColor(COLOR_HIGHLIGHT)); + SetBkMode((HDC)wParam, TRANSPARENT); + return (BOOL)list.bg_brush; + } + + break; + case WM_COMMAND: + { + unsigned int loword_wparam = LOWORD(wParam); + // first check clicking Recent submenu item + if (loword_wparam >= MENU_FIRST_RECENT_PROJECT && loword_wparam < MENU_FIRST_RECENT_PROJECT + MAX_NUMBER_OF_RECENT_PROJECTS) + { + taseditor_window.LoadRecentProject(loword_wparam - MENU_FIRST_RECENT_PROJECT); + break; + } + // finally check all other commands + switch(loword_wparam) + { + case IDC_PLAYBACK_MARKER_EDIT: + { + switch (HIWORD(wParam)) + { + case EN_SETFOCUS: + { + marker_note_edit = MARKER_NOTE_EDIT_UPPER; + // enable editing + SendMessage(playback.hwndPlaybackMarkerEdit, EM_SETREADONLY, false, 0); + // disable FCEUX keyboard + ClearTaseditInput(); + if (taseditor_config.follow_note_context) + list.FollowPlayback(); + break; + } + case EN_KILLFOCUS: + { + if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) + { + UpdateMarkerNote(); + marker_note_edit = MARKER_NOTE_EDIT_NONE; + } + // disable editing (make it grayed) + SendMessage(playback.hwndPlaybackMarkerEdit, EM_SETREADONLY, true, 0); + // enable FCEUX keyboard + if (taseditor_window.TASEditor_focus) + SetTaseditInput(); + break; + } + } + break; + } + case IDC_SELECTION_MARKER_EDIT: + { + switch (HIWORD(wParam)) + { + case EN_SETFOCUS: + { + marker_note_edit = MARKER_NOTE_EDIT_LOWER; + // enable editing + SendMessage(selection.hwndSelectionMarkerEdit, EM_SETREADONLY, false, 0); + // disable FCEUX keyboard + ClearTaseditInput(); + if (taseditor_config.follow_note_context) + list.FollowSelection(); + break; + } + case EN_KILLFOCUS: + { + if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) + { + UpdateMarkerNote(); + marker_note_edit = MARKER_NOTE_EDIT_NONE; + } + // disable editing (make it grayed) + SendMessage(selection.hwndSelectionMarkerEdit, EM_SETREADONLY, true, 0); + // enable FCEUX keyboard + if (taseditor_window.TASEditor_focus) + SetTaseditInput(); + break; + } + } + break; + } + case ID_FILE_OPENPROJECT: + OpenProject(); + break; + case ACCEL_CTRL_S: + case ID_FILE_SAVEPROJECT: + SaveProject(); + break; + case ID_FILE_SAVEPROJECTAS: + SaveProjectAs(); + break; + case ID_FILE_SAVECOMPACT: + SaveCompact(); + break; + case ID_FILE_IMPORT: + Import(); + break; + case ID_FILE_EXPORTFM2: + Export(); + break; + case ID_TASEDIT_FILE_CLOSE: + ExitTasEdit(); + break; + case ID_EDIT_SELECTALL: + if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) + SendMessage(playback.hwndPlaybackMarkerEdit, EM_SETSEL, 0, -1); + else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) + SendMessage(selection.hwndSelectionMarkerEdit, EM_SETSEL, 0, -1); + else + selection.SelectAll(); + break; + case ACCEL_CTRL_X: + case ID_TASEDIT_CUT: + if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) + SendMessage(playback.hwndPlaybackMarkerEdit, WM_CUT, 0, 0); + else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) + SendMessage(selection.hwndSelectionMarkerEdit, WM_CUT, 0, 0); + else + Cut(); + break; + case ACCEL_CTRL_C: + case ID_TASEDIT_COPY: + if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) + SendMessage(playback.hwndPlaybackMarkerEdit, WM_COPY, 0, 0); + else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) + SendMessage(selection.hwndSelectionMarkerEdit, WM_COPY, 0, 0); + else + Copy(); + break; + case ACCEL_CTRL_V: + case ID_TASEDIT_PASTE: + if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) + SendMessage(playback.hwndPlaybackMarkerEdit, WM_PASTE, 0, 0); + else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) + SendMessage(selection.hwndSelectionMarkerEdit, WM_PASTE, 0, 0); + else + Paste(); + break; + case ACCEL_SHIFT_V: + { + // hack to allow entering Shift-V into edit control even though accelerator steals the input message + char insert_v[] = "v"; + char insert_V[] = "V"; + if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) + { + if (GetKeyState(VK_CAPITAL) & 1) + SendMessage(playback.hwndPlaybackMarkerEdit, EM_REPLACESEL, true, (LPARAM)insert_v); + else + SendMessage(playback.hwndPlaybackMarkerEdit, EM_REPLACESEL, true, (LPARAM)insert_V); + } else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) + { + if (GetKeyState(VK_CAPITAL) & 1) + SendMessage(selection.hwndSelectionMarkerEdit, EM_REPLACESEL, true, (LPARAM)insert_v); + else + SendMessage(selection.hwndSelectionMarkerEdit, EM_REPLACESEL, true, (LPARAM)insert_V); + } else + PasteInsert(); + break; + } + case ID_EDIT_PASTEINSERT: + if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) + SendMessage(playback.hwndPlaybackMarkerEdit, WM_PASTE, 0, 0); + else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) + SendMessage(selection.hwndSelectionMarkerEdit, WM_PASTE, 0, 0); + else + PasteInsert(); + break; + case ACCEL_CTRL_DELETE: + case ID_TASEDIT_DELETE: + case ID_CONTEXT_SELECTED_DELETEFRAMES: + DeleteFrames(); + break; + case ACCEL_CTRL_T: + case ID_EDIT_TRUNCATE: + case ID_CONTEXT_SELECTED_TRUNCATE: + case ID_CONTEXT_STRAY_TRUNCATE: + Truncate(); + break; + case ID_HELP_TASEDITHELP: + { + //OpenHelpWindow(tasedithelp); + std::string helpFileName = BaseDirectory; + helpFileName.append(taseditor_help_filename); + HtmlHelp(GetDesktopWindow(), helpFileName.c_str(), HH_DISPLAY_TOPIC, (DWORD)NULL); + break; + } + case ACCEL_INS: + case ID_EDIT_INSERT: + case MENU_CONTEXT_STRAY_INSERTFRAMES: + case ID_CONTEXT_SELECTED_INSERTFRAMES2: + InsertNumFrames(); + break; + case ACCEL_SHIFT_INS: + case ID_EDIT_INSERTFRAMES: + case ID_CONTEXT_SELECTED_INSERTFRAMES: + InsertFrames(); + break; + case ACCEL_DEL: + case ID_EDIT_CLEAR: + case ID_CONTEXT_SELECTED_CLEARFRAMES: + if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) + { + DWORD sel_start, sel_end; + SendMessage(playback.hwndPlaybackMarkerEdit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end); + if (sel_start == sel_end) + SendMessage(playback.hwndPlaybackMarkerEdit, EM_SETSEL, sel_start, sel_start + 1); + SendMessage(playback.hwndPlaybackMarkerEdit, WM_CLEAR, 0, 0); + } else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) + { + DWORD sel_start, sel_end; + SendMessage(selection.hwndSelectionMarkerEdit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end); + if (sel_start == sel_end) + SendMessage(selection.hwndSelectionMarkerEdit, EM_SETSEL, sel_start, sel_start + 1); + SendMessage(selection.hwndSelectionMarkerEdit, WM_CLEAR, 0, 0); + } else + ClearFrames(); + break; + case TASEDIT_PLAYSTOP: + playback.ToggleEmulationPause(); + break; + case CHECK_FOLLOW_CURSOR: + //switch "Follow playback" flag + taseditor_config.follow_playback ^= 1; + taseditor_window.UpdateCheckedItems(); + // if switched off then maybe jump to target frame + if (!taseditor_config.follow_playback && playback.GetPauseFrame()) + list.FollowPauseframe(); + break; + case CHECK_TURBO_SEEK: + //switch "Turbo seek" flag + taseditor_config.turbo_seek ^= 1; + taseditor_window.UpdateCheckedItems(); + // if currently seeking, apply this option immediately + if (playback.pause_frame) + turbo = taseditor_config.turbo_seek; + break; + case ID_VIEW_SHOW_LAG_FRAMES: + taseditor_config.show_lag_frames ^= 1; + taseditor_window.UpdateCheckedItems(); + list.RedrawList(); + bookmarks.RedrawBookmarksList(); + break; + case ID_VIEW_SHOW_MARKERS: + taseditor_config.show_markers ^= 1; + taseditor_window.UpdateCheckedItems(); + list.RedrawList(); // no need to redraw Bookmarks, as Markers are only shown in main list + break; + case ID_VIEW_SHOWBRANCHSCREENSHOTS: + //switch "Show Branch Screenshots" flag + taseditor_config.show_branch_screenshots ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_VIEW_SHOWBRANCHTOOLTIPS: + //switch "Show Branch Screenshots" flag + taseditor_config.show_branch_tooltips ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_VIEW_ENABLEHOTCHANGES: + taseditor_config.enable_hot_changes ^= 1; + taseditor_window.UpdateCheckedItems(); + list.RedrawList(); // redraw buttons text + break; + case ID_VIEW_JUMPWHENMAKINGUNDO: + taseditor_config.jump_to_undo ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_VIEW_FOLLOWMARKERNOTECONTEXT: + taseditor_config.follow_note_context ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ACCEL_CTRL_P: + case CHECK_AUTORESTORE_PLAYBACK: + //switch "Auto-restore last playback position" flag + taseditor_config.restore_position ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_CONFIG_SETGREENZONECAPACITY: + { + int new_capacity = taseditor_config.greenzone_capacity; + if(CWin32InputBox::GetInteger("Greenzone capacity", "Keep savestates for how many frames?\n(actual limit of savestates can be 5 times more than the number provided)", new_capacity, hwndDlg) == IDOK) + { + if (new_capacity < GREENZONE_CAPACITY_MIN) + new_capacity = GREENZONE_CAPACITY_MIN; + else if (new_capacity > GREENZONE_CAPACITY_MAX) + new_capacity = GREENZONE_CAPACITY_MAX; + if (new_capacity < taseditor_config.greenzone_capacity) + { + taseditor_config.greenzone_capacity = new_capacity; + greenzone.GreenzoneCleaning(); + } else taseditor_config.greenzone_capacity = new_capacity; + } + break; + } + case ID_CONFIG_SETMAXUNDOLEVELS: + { + int new_size = taseditor_config.undo_levels; + if(CWin32InputBox::GetInteger("Max undo levels", "Keep history of how many changes?", new_size, hwndDlg) == IDOK) + { + if (new_size < UNDO_LEVELS_MIN) + new_size = UNDO_LEVELS_MIN; + else if (new_size > UNDO_LEVELS_MAX) + new_size = UNDO_LEVELS_MAX; + if (new_size != taseditor_config.undo_levels) + { + taseditor_config.undo_levels = new_size; + history.reset(); + selection.reset(); + // hot changes were cleared, so update list + list.RedrawList(); + } + } + break; + } + case ID_CONFIG_SETAUTOSAVEPERIOD: + { + int new_period = taseditor_config.autosave_period; + if(CWin32InputBox::GetInteger("Autosave period", "How many minutes may the project stay not saved after being changed?\n(0 = no autosaves)", new_period, hwndDlg) == IDOK) + { + if (new_period < AUTOSAVE_PERIOD_MIN) + new_period = AUTOSAVE_PERIOD_MIN; + else if (new_period > AUTOSAVE_PERIOD_MAX) + new_period = AUTOSAVE_PERIOD_MAX; + taseditor_config.autosave_period = new_period; + project.SheduleNextAutosave(); + } + break; + } + case ID_CONFIG_BRANCHESRESTOREFULLMOVIE: + //switch "Branches restore entire Movie" flag + taseditor_config.branch_full_movie ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_CONFIG_BRANCHESWORKONLYWHENRECORDING: + //switch "Branches work only when Recording" flag + taseditor_config.branch_only_when_rec ^= 1; + taseditor_window.UpdateCheckedItems(); + bookmarks.RedrawBookmarksCaption(); + break; + case ID_CONFIG_HUDINBRANCHSCREENSHOTS: + //switch "HUD in Branch screenshots" flag + taseditor_config.branch_scr_hud ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_CONFIG_BINDMARKERSTOINPUT: + taseditor_config.bind_markers ^= 1; + taseditor_window.UpdateCheckedItems(); + list.RedrawList(); + break; + case ID_CONFIG_EMPTYNEWMARKERNOTES: + taseditor_config.empty_marker_notes ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_CONFIG_COMBINECONSECUTIVERECORDINGS: + //switch "Combine consecutive Recordings" flag + taseditor_config.combine_consecutive_rec ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_CONFIG_USE1PFORRECORDING: + //switch "Use 1P keys for single Recordings" flag + taseditor_config.use_1p_rec ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_CONFIG_USEINPUTKEYSFORCOLUMNSET: + taseditor_config.columnset_by_keys ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_CONFIG_KEYBOARDCONTROLSINLISTVIEW: + taseditor_config.keyboard_for_listview ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_CONFIG_SUPERIMPOSE_AFFECTS_PASTE: + taseditor_config.superimpose_affects_paste ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_CONFIG_MUTETURBO: + muteTurbo ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case ID_CONFIG_SILENTAUTOSAVE: + taseditor_config.silent_autosave ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + case IDC_PROGRESS_BUTTON: + // click on progressbar - stop seeking + if (playback.GetPauseFrame()) playback.SeekingStop(); + break; + case IDC_BRANCHES_BUTTON: + // click on "Bookmarks/Branches" - switch "View Tree of branches" + taseditor_config.view_branches_tree ^= 1; + bookmarks.RedrawBookmarksCaption(); + break; + case IDC_RECORDING: + // toggle readonly, no need to recheck radiobuttons + FCEUI_MovieToggleReadOnly(); + CheckDlgButton(taseditor_window.hwndTasEditor, IDC_RECORDING, movie_readonly?BST_UNCHECKED : BST_CHECKED); + break; + case IDC_RADIO2: + recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_ALL; + break; + case IDC_RADIO3: + recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_1P; + break; + case IDC_RADIO4: + recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_2P; + break; + case IDC_RADIO5: + recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_3P; + break; + case IDC_RADIO6: + recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_4P; + break; + case IDC_SUPERIMPOSE: + // 3 states of "Superimpose" checkbox + if (taseditor_config.superimpose == BST_UNCHECKED) + taseditor_config.superimpose = BST_CHECKED; + else if (taseditor_config.superimpose == BST_CHECKED) + taseditor_config.superimpose = BST_INDETERMINATE; + else taseditor_config.superimpose = BST_UNCHECKED; + taseditor_window.UpdateCheckedItems(); + break; + case ACCEL_CTRL_A: + if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) + SendMessage(playback.hwndPlaybackMarkerEdit, EM_SETSEL, 0, -1); + else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) + SendMessage(selection.hwndSelectionMarkerEdit, EM_SETSEL, 0, -1); + else + selection.SelectMidMarkers(); + break; + case ID_EDIT_SELECTMIDMARKERS: + case ID_SELECTED_SELECTMIDMARKERS: + selection.SelectMidMarkers(); + break; + case ACCEL_CTRL_INSERT: + case ID_EDIT_CLONEFRAMES: + case ID_SELECTED_CLONE: + CloneFrames(); + break; + case ACCEL_CTRL_Z: + case ID_EDIT_UNDO: + { + if (marker_note_edit == MARKER_NOTE_EDIT_UPPER) + { + SendMessage(playback.hwndPlaybackMarkerEdit, WM_UNDO, 0, 0); + } else if (marker_note_edit == MARKER_NOTE_EDIT_LOWER) + { + SendMessage(selection.hwndSelectionMarkerEdit, WM_UNDO, 0, 0); + } else + { + int result = history.undo(); + if (result >= 0) + { + list.update(); + list.FollowUndo(); + greenzone.InvalidateAndCheck(result); + } + } + break; + } + case ACCEL_CTRL_Y: + case ID_EDIT_REDO: + { + int result = history.redo(); + if (result >= 0) + { + list.update(); + list.FollowUndo(); + greenzone.InvalidateAndCheck(result); + } + break; + } + case ID_EDIT_SELECTIONUNDO: + case ACCEL_CTRL_Q: + { + selection.undo(); + list.FollowSelection(); + break; + } + case ID_EDIT_SELECTIONREDO: + case ACCEL_CTRL_W: + { + selection.redo(); + list.FollowSelection(); + break; + } + case ID_EDIT_RESELECTCLIPBOARD: + case ACCEL_CTRL_B: + { + selection.ReselectClipboard(); + list.FollowSelection(); + break; + } + case IDC_JUMP_PLAYBACK_BUTTON: + { + list.FollowPlayback(); + break; + } + case IDC_JUMP_SELECTION_BUTTON: + { + list.FollowSelection(); + break; + } + case ID_SELECTED_SETMARKER: + { + SelectionFrames* current_selection = selection.MakeStrobe(); + if (current_selection->size()) + { + SelectionFrames::iterator current_selection_begin(current_selection->begin()); + SelectionFrames::iterator current_selection_end(current_selection->end()); + bool changes_made = false; + for(SelectionFrames::iterator it(current_selection_begin); it != current_selection_end; it++) + { + if(!current_markers.GetMarker(*it)) + { + if (current_markers.SetMarker(*it)) + { + changes_made = true; + list.RedrawRow(*it); + } + } + } + if (changes_made) + { + selection.must_find_current_marker = playback.must_find_current_marker = true; + history.RegisterMarkersChange(MODTYPE_MARKER_SET, *current_selection_begin, *current_selection->rbegin()); + } + } + break; + } + case ID_SELECTED_REMOVEMARKER: + { + SelectionFrames* current_selection = selection.MakeStrobe(); + if (current_selection->size()) + { + SelectionFrames::iterator current_selection_begin(current_selection->begin()); + SelectionFrames::iterator current_selection_end(current_selection->end()); + bool changes_made = false; + for(SelectionFrames::iterator it(current_selection_begin); it != current_selection_end; it++) + { + if(current_markers.GetMarker(*it)) + { + current_markers.ClearMarker(*it); + changes_made = true; + list.RedrawRow(*it); + } + } + if (changes_made) + { + selection.must_find_current_marker = playback.must_find_current_marker = true; + history.RegisterMarkersChange(MODTYPE_MARKER_UNSET, *current_selection_begin, *current_selection->rbegin()); + } + } + break; + } + case ACCEL_SHIFT_PGUP: + if (!playback.jump_was_used_this_frame) + playback.RewindFull(); + break; + case ACCEL_SHIFT_PGDN: + if (!playback.jump_was_used_this_frame) + playback.ForwardFull(); + break; + case ACCEL_CTRL_PGUP: + selection.JumpPrevMarker(); + break; + case ACCEL_CTRL_PGDN: + selection.JumpNextMarker(); + break; + case ACCEL_CTRL_F: + case ID_VIEW_FINDNOTE: + { + if (taseditor_window.hwndFindNote) + SetFocus(GetDlgItem(taseditor_window.hwndFindNote, IDC_NOTE_TO_FIND)); + else + taseditor_window.hwndFindNote = CreateDialog(fceu_hInstance, MAKEINTRESOURCE(IDD_TASEDIT_FINDNOTE), taseditor_window.hwndTasEditor, FindNoteProc); + break; + } + case TASEDIT_FIND_BEST_SIMILAR_MARKER: + search_similar_marker = 0; + current_markers.FindSimilar(search_similar_marker); + search_similar_marker++; + break; + case TASEDIT_FIND_NEXT_SIMILAR_MARKER: + current_markers.FindSimilar(search_similar_marker); + search_similar_marker++; + break; + case ID_HELP_ABOUT: + DialogBox(fceu_hInstance, MAKEINTRESOURCE(IDD_TASEDIT_ABOUT), taseditor_window.hwndTasEditor, AboutProc); + break; + case TASEDIT_RUN_MANUAL: + // the function will be called in next window update + must_call_manual_lua_function = true; + break; + case IDC_RUN_AUTO: + taseditor_config.enable_auto_function ^= 1; + taseditor_window.UpdateCheckedItems(); + break; + + + } + break; + } + case WM_SYSKEYDOWN: + { + if (wParam == VK_F10) + return 0; + break; + } + default: + break; + } + return FALSE; +} + + + + + + + + + + + + + + + + + + + diff --git a/src/drivers/win/taseditlib/taseditor_window.h b/src/drivers/win/taseditlib/taseditor_window.h new file mode 100644 index 00000000..d3a0474d --- /dev/null +++ b/src/drivers/win/taseditlib/taseditor_window.h @@ -0,0 +1,40 @@ +//Specification file for TASEDITOR_WINDOW class + +enum ECONTEXTMENU +{ + CONTEXTMENU_STRAY = 0, + CONTEXTMENU_SELECTED = 1, +}; + +class TASEDITOR_WINDOW +{ +public: + TASEDITOR_WINDOW(); + void init(); + void exit(); + void reset(); + void update(); + + HWND hwndTasEditor, hwndFindNote; + HMENU hmenu, hrmenu; + HICON hTaseditorIcon; + bool TASEditor_focus; + + void RedrawCaption(); + void RedrawWindow(); + + void RightClick(LPNMITEMACTIVATE info); + void StrayClickMenu(LPNMITEMACTIVATE info); + void RightClickMenu(LPNMITEMACTIVATE info); + + void UpdateCheckedItems(); + + void UpdateRecentProjectsMenu(); + void UpdateRecentProjectsArray(const char* addString); + void RemoveRecentProject(unsigned int which); + void LoadRecentProject(int slot); + + +private: + +}; diff --git a/src/fceulua.h b/src/fceulua.h index 96808811..62e567b5 100644 --- a/src/fceulua.h +++ b/src/fceulua.h @@ -9,6 +9,8 @@ enum LuaCallID LUACALL_BEFOREEXIT, LUACALL_BEFORESAVE, LUACALL_AFTERLOAD, + LUACALL_TASEDITOR_AUTO, + LUACALL_TASEDITOR_MANUAL, LUACALL_COUNT }; diff --git a/src/input.cpp b/src/input.cpp index d3e8912a..0f724364 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -52,11 +52,13 @@ #include "drivers/win/window.h" #include "drivers/win/ntview.h" +#include "./drivers/win/taseditlib/taseditor_window.h" #include "./drivers/win/taseditlib/markers.h" #include "./drivers/win/taseditlib/inputsnapshot.h" #include "./drivers/win/taseditlib/bookmarks.h" -extern bool Tasedit_rewind_now; +extern bool Taseditor_rewind_now; extern BOOKMARKS bookmarks; +extern TASEDITOR_WINDOW taseditor_window; #endif // WIN32 //it is easier to declare these input drivers extern here than include a bunch of files @@ -1116,8 +1118,7 @@ static void ReloadRom(void) if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) { // load most recent project - extern void LoadRecentProject(int slot); - LoadRecentProject(0); + taseditor_window.LoadRecentProject(0); } else { // load most recent ROM @@ -1166,13 +1167,13 @@ static void ToggleFullscreen(void) static void TaseditRewindOn(void) { #ifdef WIN32 - Tasedit_rewind_now = true; + Taseditor_rewind_now = true; #endif } static void TaseditRewindOff(void) { #ifdef WIN32 - Tasedit_rewind_now = false; + Taseditor_rewind_now = false; #endif } diff --git a/src/lua-engine.cpp b/src/lua-engine.cpp index 2432ad58..482d8854 100644 --- a/src/lua-engine.cpp +++ b/src/lua-engine.cpp @@ -39,14 +39,9 @@ #include "fceulua.h" #ifdef WIN32 -#include "drivers/win/taseditlib/taseditproj.h" -extern INPUT_HISTORY history; -extern MARKERS current_markers; -extern BOOKMARKS bookmarks; -extern RECORDER recorder; -extern PLAYBACK playback; -extern TASEDIT_LIST tasedit_list; -extern TASEDIT_SELECTION selection; +#include "drivers/win/common.h" +#include "drivers/win/taseditlib/taseditor_lua.h" +extern TASEDITOR_LUA taseditor_lua; #endif extern "C" @@ -127,6 +122,7 @@ extern INT_PTR CALLBACK DlgLuaScriptDialog(HWND hDlg, UINT msg, WPARAM wParam, L extern void PrintToWindowConsole(int hDlgAsInt, const char* str); extern void WinLuaOnStart(int hDlgAsInt); extern void WinLuaOnStop(int hDlgAsInt); +void TaseditorUpdateManualFunctionStatus(); #endif static lua_State *L; @@ -200,6 +196,9 @@ static const char* luaCallIDStrings [] = "CALL_BEFOREEXIT", "CALL_BEFORESAVE", "CALL_AFTERLOAD", + "CALL_TASEDITOR_AUTO", + "CALL_TASEDITOR_MANUAL", + }; //make sure we have the right number of strings @@ -237,6 +236,9 @@ static void FCEU_LuaOnStop() { FCEUD_SetEmulationSpeed(EMUSPEED_NORMAL); //TODO: Ideally lua returns the speed to the speed the user set before running the script //rather than returning it to normal, and turbo off. Perhaps some flags and a FCEUD_GetEmulationSpeed function FCEUD_TurboOff(); //Turn off turbo +#ifdef WIN32 + TaseditorUpdateManualFunctionStatus(); +#endif } @@ -374,6 +376,12 @@ static int emu_frameadvance(lua_State *L) { // It's actually rather disappointing... } +// bool emu.paused() (getter) +static int emu_paused(lua_State *L) +{ + lua_pushboolean(L, FCEUI_EmulationPaused() != 0); + return 1; +} // emu.pause() // @@ -1884,6 +1892,32 @@ void ForceExecuteLuaFrameFunctions() CallRegisteredLuaFunctions(LUACALL_AFTEREMULATION); } +void TaseditorAutoFunction() +{ + CallRegisteredLuaFunctions(LUACALL_TASEDITOR_AUTO); +} + +void TaseditorManualFunction() +{ + CallRegisteredLuaFunctions(LUACALL_TASEDITOR_MANUAL); +} + +void TaseditorUpdateManualFunctionStatus() +{ +#ifdef WIN32 + if (L) + { + // check if LUACALL_TASEDITOR_MANUAL function is not nil + lua_getfield(L, LUA_REGISTRYINDEX, luaCallIDStrings[LUACALL_TASEDITOR_MANUAL]); + if (lua_isfunction(L, -1)) + taseditor_lua.EnableRunFunction(); + else + taseditor_lua.DisableRunFunction(); + lua_pop(L, 1); + } else taseditor_lua.DisableRunFunction(); +#endif +} + // Not for the signed versions though static int memory_readbytesigned(lua_State *L) { signed char c = (signed char) FCEU_CheatGetByte(luaL_checkinteger(L,1)); @@ -4261,10 +4295,42 @@ static int sound_get(lua_State *L) // TAS Editor functions library +// bool taseditor.registerauto() +static int taseditor_registerauto(lua_State *L) +{ + if (!lua_isnil(L,1)) + luaL_checktype(L, 1, LUA_TFUNCTION); + lua_settop(L,1); + lua_getfield(L, LUA_REGISTRYINDEX, luaCallIDStrings[LUACALL_TASEDITOR_AUTO]); + lua_insert(L,1); + lua_setfield(L, LUA_REGISTRYINDEX, luaCallIDStrings[LUACALL_TASEDITOR_AUTO]); + //StopScriptIfFinished(luaStateToUIDMap[L]); + return 1; +} + +// bool taseditor.registermanual() +static int taseditor_registermanual(lua_State *L) +{ + if (!lua_isnil(L,1)) + luaL_checktype(L, 1, LUA_TFUNCTION); + lua_settop(L,1); + lua_getfield(L, LUA_REGISTRYINDEX, luaCallIDStrings[LUACALL_TASEDITOR_MANUAL]); + lua_insert(L,1); + lua_setfield(L, LUA_REGISTRYINDEX, luaCallIDStrings[LUACALL_TASEDITOR_MANUAL]); +#ifdef WIN32 + TaseditorUpdateManualFunctionStatus(); +#endif + return 1; +} + // bool taseditor.engaged() static int taseditor_engaged(lua_State *L) { - lua_pushboolean(L, FCEUMOV_Mode(MOVIEMODE_TASEDIT)); +#ifdef WIN32 + lua_pushboolean(L, taseditor_lua.engaged()); +#else + lua_pushboolean(L, false); +#endif return 1; } @@ -4272,15 +4338,10 @@ static int taseditor_engaged(lua_State *L) static int taseditor_markedframe(lua_State *L) { #ifdef WIN32 - if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) - { - int frame = luaL_checkinteger(L, 1); - lua_pushboolean(L, current_markers.GetMarker(frame) != 0); - } else + lua_pushboolean(L, taseditor_lua.markedframe(luaL_checkinteger(L, 1))); +#else + lua_pushboolean(L, false); #endif - { - lua_pushboolean(L, false); - } return 1; } @@ -4288,15 +4349,10 @@ static int taseditor_markedframe(lua_State *L) static int taseditor_getmarker(lua_State *L) { #ifdef WIN32 - if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) - { - int frame = luaL_checkinteger(L, 1); - lua_pushinteger(L, current_markers.GetMarkerUp(frame)); - } else + lua_pushinteger(L, taseditor_lua.getmarker(luaL_checkinteger(L, 1))); +#else + lua_pushinteger(L, -1); #endif - { - lua_pushinteger(L, -1); - } return 1; } @@ -4304,27 +4360,10 @@ static int taseditor_getmarker(lua_State *L) static int taseditor_setmarker(lua_State *L) { #ifdef WIN32 - if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) - { - int frame = luaL_checkinteger(L, 1); - int marker_id = current_markers.GetMarker(frame); - if(!marker_id) - { - marker_id = current_markers.SetMarker(frame); - if (marker_id) - { - // new marker was created - register changes in TAS Editor - history.RegisterMarkersChange(MODTYPE_LUA_MARKER_SET, frame); - selection.must_find_current_marker = playback.must_find_current_marker = true; - tasedit_list.SetHeaderColumnLight(COLUMN_FRAMENUM, HEADER_LIGHT_MAX); - } - } - lua_pushinteger(L, marker_id); - } else + lua_pushinteger(L, taseditor_lua.setmarker(luaL_checkinteger(L, 1))); +#else + lua_pushinteger(L, -1); #endif - { - lua_pushinteger(L, -1); - } return 1; } @@ -4332,18 +4371,7 @@ static int taseditor_setmarker(lua_State *L) static int taseditor_clearmarker(lua_State *L) { #ifdef WIN32 - if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) - { - int frame = luaL_checkinteger(L, 1); - if (current_markers.GetMarker(frame)) - { - current_markers.ClearMarker(frame); - // marker was deleted - register changes in TAS Editor - history.RegisterMarkersChange(MODTYPE_LUA_MARKER_UNSET, frame); - selection.must_find_current_marker = playback.must_find_current_marker = true; - tasedit_list.SetHeaderColumnLight(COLUMN_FRAMENUM, HEADER_LIGHT_MAX); - } - } + taseditor_lua.clearmarker(luaL_checkinteger(L, 1)); #endif return 0; } @@ -4352,15 +4380,10 @@ static int taseditor_clearmarker(lua_State *L) static int taseditor_getnote(lua_State *L) { #ifdef WIN32 - if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) - { - int index = luaL_checkinteger(L, 1); - lua_pushstring(L, current_markers.GetNote(index).c_str()); - } else + lua_pushstring(L, taseditor_lua.getnote(luaL_checkinteger(L, 1))); +#else + lua_pushnil(L); #endif - { - lua_pushnil(L); - } return 1; } @@ -4368,19 +4391,7 @@ static int taseditor_getnote(lua_State *L) static int taseditor_setnote(lua_State *L) { #ifdef WIN32 - if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) - { - int index = luaL_checkinteger(L, 1); - char newtext[MAX_NOTE_LEN]; - strncpy(newtext, luaL_checkstring(L, 2), MAX_NOTE_LEN - 1); - if (strcmp(current_markers.GetNote(index).c_str(), newtext)) - { - // text differs from old note - rename - current_markers.SetNote(index, newtext); - history.RegisterMarkersChange(MODTYPE_LUA_MARKER_RENAME, current_markers.GetMarkerFrame(index)); - selection.must_find_current_marker = playback.must_find_current_marker = true; - } - } + taseditor_lua.setnote(luaL_checkinteger(L, 1), luaL_checkstring(L, 2)); #endif return 0; } @@ -4389,14 +4400,10 @@ static int taseditor_setnote(lua_State *L) static int taseditor_getcurrentbranch(lua_State *L) { #ifdef WIN32 - if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) - { - lua_pushinteger(L, bookmarks.GetCurrentBranch()); - } else + lua_pushinteger(L, taseditor_lua.getcurrentbranch()); +#else + lua_pushinteger(L, -1); #endif - { - lua_pushinteger(L, -1); - } return 1; } @@ -4404,14 +4411,10 @@ static int taseditor_getcurrentbranch(lua_State *L) static int taseditor_getrecordermode(lua_State *L) { #ifdef WIN32 - if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) - { - lua_pushstring(L, recorder.GetRecordingMode()); - } else + lua_pushstring(L, taseditor_lua.getrecordermode()); +#else + lua_pushnil(L); #endif - { - lua_pushnil(L); - } return 1; } @@ -4419,17 +4422,35 @@ static int taseditor_getrecordermode(lua_State *L) static int taseditor_getplaybacktarget(lua_State *L) { #ifdef WIN32 - if (FCEUMOV_Mode(MOVIEMODE_TASEDIT)) - { - lua_pushinteger(L, playback.pause_frame - 1); - } else + lua_pushinteger(L, taseditor_lua.getplaybacktarget()); +#else + lua_pushinteger(L, -1); #endif - { - lua_pushinteger(L, -1); - } return 1; } +// taseditor.setplayback(int frame) +static int taseditor_setplayback(lua_State *L) +{ +#ifdef WIN32 + taseditor_lua.setplayback(luaL_checkinteger(L, 1)); +#endif + return 0; +} + +// taseditor.stopseeking() +static int taseditor_stopseeking(lua_State *L) +{ +#ifdef WIN32 + taseditor_lua.stopseeking(); +#endif + return 0; +} + + + + + static int doPopup(lua_State *L, const char* deftype, const char* deficon) { const char *str = luaL_checkstring(L, 1); const char* type = lua_type(L,2) == LUA_TSTRING ? lua_tostring(L,2) : deftype; @@ -5018,6 +5039,7 @@ static const struct luaL_reg emulib [] = { {"softreset", emu_softreset}, {"speedmode", emu_speedmode}, {"frameadvance", emu_frameadvance}, + {"paused", emu_paused}, {"pause", emu_pause}, {"unpause", emu_unpause}, {"exec_count", emu_exec_count}, @@ -5188,6 +5210,8 @@ static const struct luaL_reg soundlib[] = { static const struct luaL_reg taseditorlib[] = { + {"registerauto", taseditor_registerauto}, + {"registermanual", taseditor_registermanual}, {"engaged", taseditor_engaged}, {"markedframe", taseditor_markedframe}, {"getmarker", taseditor_getmarker}, @@ -5198,6 +5222,8 @@ static const struct luaL_reg taseditorlib[] = { {"getcurrentbranch", taseditor_getcurrentbranch}, {"getrecordermode", taseditor_getrecordermode}, {"getplaybacktarget", taseditor_getplaybacktarget}, + {"setplayback", taseditor_setplayback}, + {"stopseeking", taseditor_stopseeking}, {NULL,NULL} }; diff --git a/src/movie.cpp b/src/movie.cpp index 879fad24..953bbe56 100644 --- a/src/movie.cpp +++ b/src/movie.cpp @@ -396,6 +396,7 @@ MovieData::MovieData() , PPUflag(false) , rerecordCount(0) , binaryFlag(false) + , loadFrameCount(-1) , microphone(false) { memset(&romChecksum,0,sizeof(MD5DATA)); diff --git a/vc/vc10_fceux.sln b/vc/vc10_fceux.sln index b76a745c..d037781c 100644 --- a/vc/vc10_fceux.sln +++ b/vc/vc10_fceux.sln @@ -1,6 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 +# Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fceux", "vc10_fceux.vcxproj", "{6893EF44-FEA3-46DF-B236-C4C200F54294}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F8647A59-ED57-4975-B40C-054BA8588E4E}" diff --git a/vc/vc10_fceux.vcxproj b/vc/vc10_fceux.vcxproj index c165481d..db0f905b 100644 --- a/vc/vc10_fceux.vcxproj +++ b/vc/vc10_fceux.vcxproj @@ -428,10 +428,14 @@ + - - - + + + + + + @@ -506,7 +510,6 @@ CompileAsC CompileAsC - @@ -749,10 +752,14 @@ + - - - + + + + + + @@ -766,7 +773,6 @@ - @@ -862,8 +868,8 @@ - - + + @@ -901,8 +907,6 @@ - - diff --git a/vc/vc10_fceux.vcxproj.filters b/vc/vc10_fceux.vcxproj.filters index 7f501a17..0454370d 100644 --- a/vc/vc10_fceux.vcxproj.filters +++ b/vc/vc10_fceux.vcxproj.filters @@ -445,9 +445,6 @@ drivers\win - - drivers\win\taseditlib - drivers\win @@ -931,16 +928,28 @@ drivers\win\taseditlib - - drivers\win\taseditlib - - - drivers\win\taseditlib - drivers\win\taseditlib - + + drivers\win\taseditlib + + + drivers\win\taseditlib + + + drivers\win\taseditlib + + + drivers\win\taseditlib + + + drivers\win\taseditlib + + + drivers\win\taseditlib + + drivers\win\taseditlib @@ -1119,9 +1128,6 @@ drivers\win - - drivers\win\taseditlib - drivers\win @@ -1405,16 +1411,28 @@ drivers\win\taseditlib - - drivers\win\taseditlib - - - drivers\win\taseditlib - drivers\win\taseditlib - + + drivers\win\taseditlib + + + drivers\win\taseditlib + + + drivers\win\taseditlib + + + drivers\win\taseditlib + + + drivers\win\taseditlib + + + drivers\win\taseditlib + + drivers\win\taseditlib @@ -1500,10 +1518,8 @@ - - - - + +