* Tasedit: Export dialog: "Convert Marker Notes to Movie Subtitles"
* Tasedit: Recording checkbox instead of radiobutton * Tasedit: Config->Use Input keys for ColumnSet * Tasedit: disabled Visual Themes for listview header, listview header lights * Tasedit: Config->Empty new Marker Notes * Tasedit: icon
This commit is contained in:
parent
703ab3d752
commit
306b8a5278
|
@ -76,10 +76,12 @@ 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_use_1p_rec;
|
||||
extern bool TASEdit_empty_marker_notes;
|
||||
extern bool TASEdit_combine_consecutive_rec;
|
||||
extern bool TASEdit_superimpose_affects_paste;
|
||||
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;
|
||||
|
@ -93,6 +95,7 @@ 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;
|
||||
|
@ -336,10 +339,12 @@ static CFGSTRUCT fceuconfig[] = {
|
|||
AC(TASEdit_show_branch_screenshots),
|
||||
AC(TASEdit_show_branch_tooltips),
|
||||
AC(TASEdit_bind_markers),
|
||||
AC(TASEdit_use_1p_rec),
|
||||
AC(TASEdit_empty_marker_notes),
|
||||
AC(TASEdit_combine_consecutive_rec),
|
||||
AC(TASEdit_superimpose_affects_paste),
|
||||
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),
|
||||
|
@ -353,6 +358,7 @@ static CFGSTRUCT fceuconfig[] = {
|
|||
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),
|
||||
|
|
|
@ -25,6 +25,7 @@ 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"
|
||||
ICON_1 ICON "res/ICON_1.ico"
|
||||
ICON_2 ICON "res/ICON_2.ico"
|
||||
|
||||
|
@ -276,11 +277,14 @@ BEGIN
|
|||
MENUITEM "&HUD in Branch screenshots", ID_CONFIG_HUDINBRANCHSCREENSHOTS
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Bind Markers to Input", ID_CONFIG_BINDMARKERSTOINPUT
|
||||
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 "&Superimpose affects copy/paste", ID_CONFIG_SUPERIMPOSE_AFFECTS_PASTE
|
||||
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
|
||||
END
|
||||
|
@ -1394,13 +1398,12 @@ BEGIN
|
|||
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 " OFF",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,316,74,27,10
|
||||
CONTROL " ON",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,316,87,27,10
|
||||
CONTROL " 1P",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,373,74,25,10
|
||||
CONTROL " 2P",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,402,74,23,10
|
||||
CONTROL " 3P",IDC_RADIO5,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,373,87,25,10
|
||||
CONTROL " 4P",IDC_RADIO6,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,402,87,23,10
|
||||
CONTROL " Superimpose",IDC_SUPERIMPOSE,"Button",BS_AUTO3STATE,316,100,56,10
|
||||
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
|
||||
EDITTEXT IDC_SELECTION_MARKER_EDIT,65,377,240,13,ES_READONLY | NOT WS_TABSTOP
|
||||
PUSHBUTTON "<<",TASEDIT_PREV_MARKER,315,376,23,14,NOT WS_TABSTOP
|
||||
|
@ -1415,18 +1418,21 @@ BEGIN
|
|||
CONTROL "",IDC_TEXT_SELECTION_BUTTON,"Button",BS_OWNERDRAW,315,121,113,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
|
||||
END
|
||||
|
||||
IDD_TASEDIT_EXPORT DIALOGEX 0, 0, 122, 73
|
||||
IDD_TASEDIT_EXPORT DIALOGEX 0, 0, 158, 86
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Export to FM2"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Export",IDOK,7,52,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,65,52,50,14
|
||||
CONTROL " 1 player",IDC_RADIO_1PLAYER,"Button",BS_AUTORADIOBUTTON,36,8,49,10
|
||||
CONTROL " 2 players",IDC_RADIO_2PLAYERS,"Button",BS_AUTORADIOBUTTON,36,21,49,10
|
||||
CONTROL " Fourscore",IDC_RADIO_FOURSCORE,"Button",BS_AUTORADIOBUTTON,36,35,47,10
|
||||
DEFPUSHBUTTON "Export",IDOK,7,66,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,100,66,50,14
|
||||
CONTROL " 1 player",IDC_RADIO_1PLAYER,"Button",BS_AUTORADIOBUTTON,8,8,47,10
|
||||
CONTROL " 2 players",IDC_RADIO_2PLAYERS,"Button",BS_AUTORADIOBUTTON,8,21,47,10
|
||||
CONTROL " Fourscore",IDC_RADIO_FOURSCORE,"Button",BS_AUTORADIOBUTTON,8,35,47,10
|
||||
CONTROL " Convert Marker Notes to Movie Subtitles",IDC_NOTES_TO_SUBTITLES,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,50,141,10
|
||||
END
|
||||
|
||||
IDD_TASEDIT_SAVECOMPACT DIALOGEX 0, 0, 122, 134
|
||||
|
@ -1885,6 +1891,10 @@ BEGIN
|
|||
BOTTOMMARGIN, 121
|
||||
END
|
||||
|
||||
"ROMPATCHER", DIALOG
|
||||
BEGIN
|
||||
END
|
||||
|
||||
"GGCONV", DIALOG
|
||||
BEGIN
|
||||
END
|
||||
|
@ -1917,6 +1927,7 @@ BEGIN
|
|||
|
||||
"TASEDIT", DIALOG
|
||||
BEGIN
|
||||
RIGHTMARGIN, 433
|
||||
END
|
||||
|
||||
IDD_TASEDIT_EXPORT, DIALOG
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
|
@ -183,6 +183,7 @@
|
|||
#define IDD_TASEDIT_EXPORT 185
|
||||
#define IDD_TASEDIT_SAVECOMPACT 186
|
||||
#define IDD_TASEDIT_BRANCH_NOTE 188
|
||||
#define IDI_ICON3 197
|
||||
#define MENU_RESET 200
|
||||
#define BUTTON_ROMS 200
|
||||
#define TXT_PAD1 200
|
||||
|
@ -469,10 +470,12 @@
|
|||
#define IDC_FULLSAVESTATES 1203
|
||||
#define IDC_SUPERIMPOSE 1203
|
||||
#define IDC_CHECK_BINARY 1203
|
||||
#define IDC_NOTES_TO_SUBTITLES 1203
|
||||
#define IDC_VOLUMEGROUP 1204
|
||||
#define IDC_OMITBLANK 1204
|
||||
#define IDC_CHECK3 1204
|
||||
#define IDC_CHECK_MARKERS 1204
|
||||
#define IDC_RECORDING 1204
|
||||
#define IDC_RAMLIST 1205
|
||||
#define IDC_CHECK4 1205
|
||||
#define IDC_CHECK_BOOKMARKS 1205
|
||||
|
@ -948,6 +951,8 @@
|
|||
#define ID_ACCELERATOR40506 40506
|
||||
#define ID_VIEW_FOLLOWMARKERNOTECONTEXT 40507
|
||||
#define ID_VIEW_SHOWBRANCHTOOLTIPS 40508
|
||||
#define ID_CONFIG_USEINPUTKEYSFORCOLUMNSET 40509
|
||||
#define ID_CONFIG_EMPTYNEWMARKERNOTES 40510
|
||||
#define IDC_DEBUGGER_ICONTRAY 55535
|
||||
#define MW_ValueLabel2 65423
|
||||
#define MW_ValueLabel1 65426
|
||||
|
@ -956,8 +961,8 @@
|
|||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 189
|
||||
#define _APS_NEXT_COMMAND_VALUE 40509
|
||||
#define _APS_NEXT_RESOURCE_VALUE 198
|
||||
#define _APS_NEXT_COMMAND_VALUE 40511
|
||||
#define _APS_NEXT_CONTROL_VALUE 1273
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
|
|
|
@ -49,10 +49,12 @@ bool TASEdit_show_markers = true;
|
|||
bool TASEdit_show_branch_screenshots = true;
|
||||
bool TASEdit_show_branch_tooltips = true;
|
||||
bool TASEdit_bind_markers = true;
|
||||
bool TASEdit_use_1p_rec = true;
|
||||
bool TASEdit_empty_marker_notes = true;
|
||||
bool TASEdit_combine_consecutive_rec = true;
|
||||
bool TASEdit_superimpose_affects_paste = 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;
|
||||
|
@ -67,6 +69,7 @@ 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;
|
||||
|
@ -86,17 +89,18 @@ string tasedithelp = "{16CDE0C4-02B0-4A60-A88D-076319909A4D}"; //Name of TAS Edi
|
|||
char buttonNames[NUM_JOYPAD_BUTTONS][2] = {"A", "B", "S", "T", "U", "D", "L", "R"};
|
||||
char windowCaptioBase[] = "TAS Editor";
|
||||
extern char recordingCaptions[5][30];
|
||||
HICON hTaseditorIcon = 0;
|
||||
|
||||
// enterframe function
|
||||
void UpdateTasEdit()
|
||||
{
|
||||
if(!hwndTasEdit) return;
|
||||
|
||||
recorder.update();
|
||||
tasedit_list.update();
|
||||
current_markers.update();
|
||||
greenzone.update();
|
||||
playback.update();
|
||||
recorder.update();
|
||||
bookmarks.update();
|
||||
screenshot_display.update();
|
||||
selection.update();
|
||||
|
@ -226,7 +230,6 @@ void SingleClick(LPNMITEMACTIVATE info)
|
|||
history.RegisterMarkersChange(MODTYPE_MARKER_SET, row_index);
|
||||
else
|
||||
history.RegisterMarkersChange(MODTYPE_MARKER_UNSET, row_index);
|
||||
project.SetProjectChanged();
|
||||
tasedit_list.RedrawRow(row_index);
|
||||
}
|
||||
}
|
||||
|
@ -487,8 +490,8 @@ void FrameColumnSet()
|
|||
}
|
||||
if (changes_made)
|
||||
{
|
||||
project.SetProjectChanged();
|
||||
selection.must_find_current_marker = playback.must_find_current_marker = true;
|
||||
tasedit_list.SetHeaderColumnLight(COLUMN_FRAMENUM, HEADER_LIGHT_MAX);
|
||||
}
|
||||
}
|
||||
void InputColumnSet(int column)
|
||||
|
@ -522,9 +525,9 @@ void InputColumnSet(int column)
|
|||
{
|
||||
greenzone.InvalidateAndCheck(history.RegisterChanges(MODTYPE_UNSET, *current_selection_begin, *current_selection->rbegin()));
|
||||
}
|
||||
tasedit_list.SetHeaderColumnLight(column, HEADER_LIGHT_MAX);
|
||||
}
|
||||
|
||||
|
||||
bool Copy(SelectionFrames* current_selection)
|
||||
{
|
||||
if (!current_selection)
|
||||
|
@ -1087,6 +1090,7 @@ 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);
|
||||
return TRUE;
|
||||
case WM_COMMAND:
|
||||
switch (LOWORD(wParam))
|
||||
|
@ -1100,6 +1104,10 @@ BOOL CALLBACK ExportProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lPara
|
|||
case IDC_RADIO_FOURSCORE:
|
||||
TASEdit_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);
|
||||
break;
|
||||
case IDOK:
|
||||
EndDialog(hwndDlg, 1);
|
||||
return TRUE;
|
||||
|
@ -1161,6 +1169,25 @@ void Export()
|
|||
}
|
||||
}
|
||||
temp_md.loadFrameCount = -1;
|
||||
if (TASEdit_last_export_subtitles)
|
||||
{
|
||||
// convert Marker Notes to Movie Subtitles
|
||||
char framenum[11];
|
||||
std::string subtitle;
|
||||
int marker_id;
|
||||
for (int i = 0; i < current_markers.GetMarkersSize(); ++i)
|
||||
{
|
||||
marker_id = current_markers.GetMarker(i);
|
||||
if (marker_id)
|
||||
{
|
||||
_itoa(i, framenum, 10);
|
||||
strcat(framenum, " ");
|
||||
subtitle = framenum;
|
||||
subtitle.append(current_markers.GetNote(marker_id));
|
||||
temp_md.subtitles.push_back(subtitle);
|
||||
}
|
||||
}
|
||||
}
|
||||
// dump to disk
|
||||
temp_md.dump(osRecordingMovie, false);
|
||||
delete osRecordingMovie;
|
||||
|
@ -1176,10 +1203,13 @@ BOOL CALLBACK WndprocTasEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
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;
|
||||
break;
|
||||
}
|
||||
case WM_MOVE:
|
||||
{
|
||||
if (!IsIconic(hwndDlg))
|
||||
|
@ -1614,28 +1644,35 @@ BOOL CALLBACK WndprocTasEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
CheckMenuItem(hmenu, ID_CONFIG_HUDINBRANCHSCREENSHOTS, TASEdit_branch_scr_hud?MF_CHECKED : MF_UNCHECKED);
|
||||
break;
|
||||
case ID_CONFIG_BINDMARKERSTOINPUT:
|
||||
//switch "Bind Markers to Input" flag
|
||||
TASEdit_bind_markers ^= 1;
|
||||
CheckMenuItem(hmenu, ID_CONFIG_BINDMARKERSTOINPUT, TASEdit_bind_markers?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);
|
||||
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_SUPERIMPOSE_AFFECTS_PASTE:
|
||||
TASEdit_superimpose_affects_paste ^= 1;
|
||||
CheckMenuItem(hmenu, ID_CONFIG_SUPERIMPOSE_AFFECTS_PASTE, TASEdit_superimpose_affects_paste?MF_CHECKED : MF_UNCHECKED);
|
||||
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);
|
||||
|
@ -1649,33 +1686,24 @@ BOOL CALLBACK WndprocTasEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
TASEdit_view_branches_tree ^= 1;
|
||||
bookmarks.RedrawBookmarksCaption();
|
||||
break;
|
||||
case IDC_RADIO1:
|
||||
// switch to readonly, no need to recheck radiobuttons
|
||||
if (!movie_readonly) FCEUI_MovieToggleReadOnly();
|
||||
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:
|
||||
// switch to read+write for all, no need to recheck radiobuttons
|
||||
if (movie_readonly) FCEUI_MovieToggleReadOnly();
|
||||
recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_ALL;
|
||||
break;
|
||||
case IDC_RADIO3:
|
||||
// switch to read+write for 1P, no need to recheck radiobuttons
|
||||
if (movie_readonly) FCEUI_MovieToggleReadOnly();
|
||||
recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_1P;
|
||||
break;
|
||||
case IDC_RADIO4:
|
||||
// switch to read+write for 2P, no need to recheck radiobuttons
|
||||
if (movie_readonly) FCEUI_MovieToggleReadOnly();
|
||||
recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_2P;
|
||||
break;
|
||||
case IDC_RADIO5:
|
||||
// switch to read+write for 3P, no need to recheck radiobuttons
|
||||
if (movie_readonly) FCEUI_MovieToggleReadOnly();
|
||||
recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_3P;
|
||||
break;
|
||||
case IDC_RADIO6:
|
||||
// switch to read+write for 4P, no need to recheck radiobuttons
|
||||
if (movie_readonly) FCEUI_MovieToggleReadOnly();
|
||||
recorder.multitrack_recording_joypad = MULTITRACK_RECORDING_4P;
|
||||
break;
|
||||
case IDC_SUPERIMPOSE:
|
||||
|
@ -1784,7 +1812,6 @@ BOOL CALLBACK WndprocTasEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
{
|
||||
selection.must_find_current_marker = playback.must_find_current_marker = true;
|
||||
history.RegisterMarkersChange(MODTYPE_MARKER_SET, *current_selection_begin, *current_selection->rbegin());
|
||||
project.SetProjectChanged();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1810,7 +1837,6 @@ BOOL CALLBACK WndprocTasEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
{
|
||||
selection.must_find_current_marker = playback.must_find_current_marker = true;
|
||||
history.RegisterMarkersChange(MODTYPE_MARKER_UNSET, *current_selection_begin, *current_selection->rbegin());
|
||||
project.SetProjectChanged();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1851,6 +1877,7 @@ bool EnterTasEdit()
|
|||
if(!FCEU_IsValidUI(FCEUI_TASEDIT)) return false;
|
||||
if(!hwndTasEdit)
|
||||
{
|
||||
hTaseditorIcon = (HICON)LoadImage(fceu_hInstance, MAKEINTRESOURCE(IDI_ICON3), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE);
|
||||
hwndTasEdit = CreateDialog(fceu_hInstance,"TASEDIT", hAppWnd, WndprocTasEdit);
|
||||
if(hwndTasEdit)
|
||||
{
|
||||
|
@ -1887,10 +1914,12 @@ bool EnterTasEdit()
|
|||
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_USE1PFORRECORDING, TASEdit_use_1p_rec?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_SUPERIMPOSE_AFFECTS_PASTE, TASEdit_superimpose_affects_paste?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);
|
||||
|
@ -1950,6 +1979,8 @@ bool ExitTasEdit()
|
|||
DestroyWindow(hwndTasEdit);
|
||||
hwndTasEdit = 0;
|
||||
TASEdit_focus = false;
|
||||
DestroyIcon(hTaseditorIcon);
|
||||
hTaseditorIcon = 0;
|
||||
ClearTaseditInput();
|
||||
// restore "eoptions"
|
||||
eoptions = saved_eoptions;
|
||||
|
|
|
@ -413,8 +413,6 @@ void BOOKMARKS::jump(int slot)
|
|||
playback.jump(frame);
|
||||
if (playback.GetPauseFrame())
|
||||
tasedit_list.FollowPauseframe();
|
||||
else
|
||||
tasedit_list.FollowPlayback();
|
||||
bookmarks_array[slot].jump();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -342,6 +342,7 @@ void INPUT_HISTORY::RegisterMarkersChange(int mod_type, int start, int end)
|
|||
inp.copyHotChanges(&GetCurrentSnapshot());
|
||||
AddInputSnapshotToHistory(inp);
|
||||
bookmarks.ChangesMadeSinceBranch();
|
||||
project.SetProjectChanged();
|
||||
}
|
||||
void INPUT_HISTORY::RegisterBranching(int mod_type, int first_change, int slot)
|
||||
{
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
//Implementation file of Markers class
|
||||
|
||||
#include "taseditproj.h"
|
||||
#include "zlib.h"
|
||||
|
||||
extern bool TASEdit_empty_marker_notes;
|
||||
|
||||
// resources
|
||||
char markers_save_id[MARKERS_ID_LEN] = "MARKERS";
|
||||
char markers_skipsave_id[MARKERS_ID_LEN] = "MARKERX";
|
||||
|
||||
|
@ -257,7 +259,11 @@ void MARKERS::SetMarker(int frame)
|
|||
{
|
||||
int marker_num = GetMarkerUp(frame) + 1;
|
||||
markers_array[frame] = marker_num;
|
||||
notes.insert(notes.begin() + marker_num, 1, "");
|
||||
if (TASEdit_empty_marker_notes)
|
||||
notes.insert(notes.begin() + marker_num, 1, "");
|
||||
else
|
||||
// copy previous marker note
|
||||
notes.insert(notes.begin() + marker_num, 1, notes[marker_num - 1]);
|
||||
// increase following markers' ids
|
||||
int size = markers_array.size();
|
||||
for (frame++; frame < size; ++frame)
|
||||
|
|
|
@ -113,7 +113,7 @@ void PLAYBACK::update()
|
|||
// update the playback cursor
|
||||
if(currFrameCounter != lastCursor)
|
||||
{
|
||||
tasedit_list.FollowPlayback();
|
||||
tasedit_list.FollowPlaybackIfNeeded();
|
||||
// update gfx of the old and new rows
|
||||
tasedit_list.RedrawRow(lastCursor);
|
||||
bookmarks.RedrawChangedBookmarks(lastCursor);
|
||||
|
@ -253,7 +253,7 @@ void PLAYBACK::RewindFrame()
|
|||
if (currFrameCounter > 0)
|
||||
jump(currFrameCounter-1);
|
||||
else
|
||||
tasedit_list.FollowPlayback();
|
||||
tasedit_list.FollowPlaybackIfNeeded();
|
||||
if (!pause_frame) PauseEmulation();
|
||||
}
|
||||
void PLAYBACK::ForwardFrame()
|
||||
|
@ -315,7 +315,7 @@ void PLAYBACK::jump(int frame)
|
|||
if (JumpToFrame(frame))
|
||||
{
|
||||
ForceExecuteLuaFrameFunctions();
|
||||
tasedit_list.FollowPlayback();
|
||||
tasedit_list.FollowPlaybackIfNeeded();
|
||||
}
|
||||
}
|
||||
void PLAYBACK::restorePosition()
|
||||
|
|
|
@ -4,14 +4,19 @@
|
|||
|
||||
extern HWND hwndTasEdit;
|
||||
|
||||
extern uint32 GetGamepadPressedImmediate();
|
||||
extern void ColumnSet(int column);
|
||||
|
||||
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;
|
||||
|
||||
// resources
|
||||
char recordingCaptions[5][30] = { " (Recording All)",
|
||||
|
@ -25,7 +30,7 @@ RECORDER::RECORDER()
|
|||
|
||||
void RECORDER::init()
|
||||
{
|
||||
hwndRB_RecOff = GetDlgItem(hwndTasEdit, IDC_RADIO1);
|
||||
hwndRecCheckbox = GetDlgItem(hwndTasEdit, IDC_RECORDING);
|
||||
hwndRB_RecAll = GetDlgItem(hwndTasEdit, IDC_RADIO2);
|
||||
hwndRB_Rec1P = GetDlgItem(hwndTasEdit, IDC_RADIO3);
|
||||
hwndRB_Rec2P = GetDlgItem(hwndTasEdit, IDC_RADIO4);
|
||||
|
@ -36,6 +41,7 @@ void RECORDER::init()
|
|||
old_movie_readonly = movie_readonly;
|
||||
old_joy.resize(4);
|
||||
new_joy.resize(4);
|
||||
current_joy.resize(4);
|
||||
}
|
||||
void RECORDER::reset()
|
||||
{
|
||||
|
@ -60,7 +66,7 @@ void RECORDER::update()
|
|||
// update window caption if needed
|
||||
if (old_movie_readonly != movie_readonly || old_multitrack_recording_joypad != multitrack_recording_joypad)
|
||||
RedrawWindowCaption();
|
||||
// update Bookmarks/Branches groupbox caption
|
||||
// update Bookmarks/Branches groupbox caption if needed
|
||||
if (TASEdit_branch_only_when_rec && old_movie_readonly != movie_readonly)
|
||||
bookmarks.RedrawBookmarksCaption();
|
||||
// update recording radio buttons if user used hotkey to switch R/W
|
||||
|
@ -70,11 +76,49 @@ void RECORDER::update()
|
|||
RecheckRecordingRadioButtons();
|
||||
}
|
||||
|
||||
old_joy[0] = current_joy[0];
|
||||
old_joy[1] = current_joy[1];
|
||||
old_joy[2] = current_joy[2];
|
||||
old_joy[3] = current_joy[3];
|
||||
// fill current_joy data for listview header lights
|
||||
uint32 joypads = GetGamepadPressedImmediate();
|
||||
current_joy[0] = (joypads & 0xFF);
|
||||
current_joy[1] = ((joypads >> 8) & 0xFF);
|
||||
current_joy[2] = ((joypads >> 16) & 0xFF);
|
||||
current_joy[3] = ((joypads >> 24) & 0xFF);
|
||||
if (multitrack_recording_joypad != MULTITRACK_RECORDING_ALL)
|
||||
{
|
||||
int joy = multitrack_recording_joypad - 1;
|
||||
// substitute target joypad with 1p joypad
|
||||
if (multitrack_recording_joypad > MULTITRACK_RECORDING_1P && TASEdit_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)
|
||||
if (i != joy)
|
||||
current_joy[i] = 0;
|
||||
}
|
||||
// call ColumnSet if needed
|
||||
if (TASEdit_columnset_by_keys && movie_readonly)
|
||||
{
|
||||
int num_joys;
|
||||
if (currMovieData.fourscore)
|
||||
num_joys = NUM_JOYPADS;
|
||||
else
|
||||
num_joys = 2;
|
||||
for (int joy = 0; joy < num_joys; ++joy)
|
||||
{
|
||||
for (int button = 0; button < NUM_JOYPAD_BUTTONS; ++button)
|
||||
{
|
||||
// if the button was pressed right now
|
||||
if ((current_joy[joy] & (1 << button)) && !(old_joy[joy] & (1 << button)))
|
||||
ColumnSet(COLUMN_JOYPAD1_A + joy * NUM_JOYPAD_BUTTONS + button);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------------------------------------
|
||||
void RECORDER::UncheckRecordingRadioButtons()
|
||||
{
|
||||
Button_SetCheck(hwndRB_RecOff, BST_UNCHECKED);
|
||||
Button_SetCheck(hwndRB_RecAll, BST_UNCHECKED);
|
||||
Button_SetCheck(hwndRB_Rec1P, BST_UNCHECKED);
|
||||
Button_SetCheck(hwndRB_Rec2P, BST_UNCHECKED);
|
||||
|
@ -85,29 +129,24 @@ void RECORDER::RecheckRecordingRadioButtons()
|
|||
{
|
||||
old_movie_readonly = movie_readonly;
|
||||
old_multitrack_recording_joypad = multitrack_recording_joypad;
|
||||
if (movie_readonly)
|
||||
Button_SetCheck(hwndRecCheckbox, movie_readonly?BST_UNCHECKED : BST_CHECKED);
|
||||
switch(multitrack_recording_joypad)
|
||||
{
|
||||
Button_SetCheck(hwndRB_RecOff, BST_CHECKED);
|
||||
} else
|
||||
{
|
||||
switch(multitrack_recording_joypad)
|
||||
{
|
||||
case MULTITRACK_RECORDING_ALL:
|
||||
Button_SetCheck(hwndRB_RecAll, BST_CHECKED);
|
||||
break;
|
||||
case MULTITRACK_RECORDING_1P:
|
||||
Button_SetCheck(hwndRB_Rec1P, BST_CHECKED);
|
||||
break;
|
||||
case MULTITRACK_RECORDING_2P:
|
||||
Button_SetCheck(hwndRB_Rec2P, BST_CHECKED);
|
||||
break;
|
||||
case MULTITRACK_RECORDING_3P:
|
||||
Button_SetCheck(hwndRB_Rec3P, BST_CHECKED);
|
||||
break;
|
||||
case MULTITRACK_RECORDING_4P:
|
||||
Button_SetCheck(hwndRB_Rec4P, BST_CHECKED);
|
||||
break;
|
||||
}
|
||||
case MULTITRACK_RECORDING_ALL:
|
||||
Button_SetCheck(hwndRB_RecAll, BST_CHECKED);
|
||||
break;
|
||||
case MULTITRACK_RECORDING_1P:
|
||||
Button_SetCheck(hwndRB_Rec1P, BST_CHECKED);
|
||||
break;
|
||||
case MULTITRACK_RECORDING_2P:
|
||||
Button_SetCheck(hwndRB_Rec2P, BST_CHECKED);
|
||||
break;
|
||||
case MULTITRACK_RECORDING_3P:
|
||||
Button_SetCheck(hwndRB_Rec3P, BST_CHECKED);
|
||||
break;
|
||||
case MULTITRACK_RECORDING_4P:
|
||||
Button_SetCheck(hwndRB_Rec4P, BST_CHECKED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -138,12 +177,18 @@ void RECORDER::InputChanged()
|
|||
// change this joystick
|
||||
currMovieData.records[currFrameCounter].joysticks[i] = new_joy[i];
|
||||
if (new_joy[i] != old_joy[i])
|
||||
{
|
||||
changes_made = true;
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
int joy = multitrack_recording_joypad - 1;
|
||||
// substitute targed joypad with 1p joypad
|
||||
// substitute target joypad with 1p joypad
|
||||
if (multitrack_recording_joypad > MULTITRACK_RECORDING_1P && TASEdit_use_1p_rec)
|
||||
new_joy[joy] = new_joy[0];
|
||||
// superimpose (bitwise OR) if needed
|
||||
|
@ -160,7 +205,13 @@ void RECORDER::InputChanged()
|
|||
// change only this joystick
|
||||
currMovieData.records[currFrameCounter].joysticks[joy] = new_joy[joy];
|
||||
if (new_joy[joy] != old_joy[joy])
|
||||
{
|
||||
changes_made = true;
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
if (changes_made)
|
||||
{
|
||||
|
|
|
@ -20,12 +20,13 @@ public:
|
|||
void InputChanged();
|
||||
|
||||
int multitrack_recording_joypad;
|
||||
std::vector<uint8> current_joy;
|
||||
|
||||
private:
|
||||
int old_multitrack_recording_joypad;
|
||||
bool old_movie_readonly;
|
||||
|
||||
HWND hwndRB_RecOff, hwndRB_RecAll, hwndRB_Rec1P, hwndRB_Rec2P, hwndRB_Rec3P, hwndRB_Rec4P;
|
||||
HWND hwndRecCheckbox, hwndRB_RecAll, hwndRB_Rec1P, hwndRB_Rec2P, hwndRB_Rec3P, hwndRB_Rec4P;
|
||||
|
||||
// temps
|
||||
std::vector<uint8> old_joy;
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
//Implementation file of TASEDIT_LIST class
|
||||
|
||||
#include "taseditproj.h"
|
||||
#include "utils/xstring.h"
|
||||
#include "uxtheme.h"
|
||||
|
||||
#pragma comment(lib, "UxTheme.lib")
|
||||
|
||||
extern HWND hwndTasEdit;
|
||||
extern char buttonNames[NUM_JOYPAD_BUTTONS][2];
|
||||
|
@ -24,11 +26,12 @@ extern bool TASEdit_keyboard_for_listview;
|
|||
|
||||
LRESULT APIENTRY HeaderWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
WNDPROC hwndList_oldWndProc, hwndHeader_oldWndproc;
|
||||
WNDPROC hwndList_oldWndProc = 0, hwndHeader_oldWndproc = 0;
|
||||
|
||||
// resources
|
||||
COLORREF hot_changes_colors[16] = { 0x0, 0x5c4c44, 0x854604, 0xab2500, 0xc20006, 0xd6006f, 0xd40091, 0xba00a4, 0x9500ba, 0x7a00cc, 0x5800d4, 0x0045e2, 0x0063ea, 0x0079f4, 0x0092fa, 0x00aaff };
|
||||
//COLORREF hot_changes_colors[16] = { 0x0, 0x661212, 0x842B4E, 0x652C73, 0x48247D, 0x383596, 0x2947AE, 0x1E53C1, 0x135DD2, 0x116EDA, 0x107EE3, 0x0F8EEB, 0x209FF4, 0x3DB1FD, 0x51C2FF, 0x4DCDFF };
|
||||
COLORREF header_lights_colors[11] = { 0x0, 0x00661f, 0x008a15, 0x00a800, 0x24c700, 0x4bd600, 0x79e300, 0x97e800, 0xb4f000, 0xd6f700, 0xffff00 };
|
||||
|
||||
char list_save_id[LIST_ID_LEN] = "LIST";
|
||||
char list_skipsave_id[LIST_ID_LEN] = "LISX";
|
||||
|
@ -68,6 +71,7 @@ TASEDIT_LIST::TASEDIT_LIST()
|
|||
void TASEDIT_LIST::init()
|
||||
{
|
||||
free();
|
||||
header_colors.resize(MAX_NUM_COLUMNS);
|
||||
hwndList = GetDlgItem(hwndTasEdit, 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);
|
||||
|
@ -76,6 +80,8 @@ void TASEDIT_LIST::init()
|
|||
hwndHeader_oldWndproc = (WNDPROC)SetWindowLong(hwndHeader, GWL_WNDPROC, (LONG)HeaderWndProc);
|
||||
// subclass the whole listview
|
||||
hwndList_oldWndProc = (WNDPROC)SetWindowLong(hwndList, GWL_WNDPROC, (LONG)ListWndProc);
|
||||
// disable Visual Themes for header
|
||||
SetWindowTheme(hwndHeader, L"", L"");
|
||||
// setup images for the listview
|
||||
himglist = ImageList_Create(9, 13, ILC_COLOR8 | ILC_MASK, 1, 1);
|
||||
HBITMAP bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP0));
|
||||
|
@ -144,17 +150,17 @@ void TASEDIT_LIST::init()
|
|||
ListView_SetImageList(hwndList, himglist, LVSIL_SMALL);
|
||||
// setup columns
|
||||
LVCOLUMN lvc;
|
||||
int colidx=0;
|
||||
num_columns = 0;
|
||||
// icons column
|
||||
lvc.mask = LVCF_WIDTH;
|
||||
lvc.cx = 13;
|
||||
ListView_InsertColumn(hwndList, colidx++, &lvc);
|
||||
ListView_InsertColumn(hwndList, num_columns++, &lvc);
|
||||
// frame number column
|
||||
lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_FMT;
|
||||
lvc.fmt = LVCFMT_CENTER;
|
||||
lvc.cx = 75;
|
||||
lvc.pszText = "Frame#";
|
||||
ListView_InsertColumn(hwndList, colidx++, &lvc);
|
||||
ListView_InsertColumn(hwndList, num_columns++, &lvc);
|
||||
// pads columns
|
||||
lvc.cx = 21;
|
||||
// add pads 1 and 2
|
||||
|
@ -163,14 +169,14 @@ void TASEDIT_LIST::init()
|
|||
for (int btn = 0; btn < NUM_JOYPAD_BUTTONS; ++btn)
|
||||
{
|
||||
lvc.pszText = buttonNames[btn];
|
||||
ListView_InsertColumn(hwndList, colidx++, &lvc);
|
||||
ListView_InsertColumn(hwndList, num_columns++, &lvc);
|
||||
}
|
||||
}
|
||||
// add pads 3 and 4 and frame_number2
|
||||
if (currMovieData.fourscore) AddFourscore();
|
||||
|
||||
update();
|
||||
reset();
|
||||
//update();
|
||||
}
|
||||
void TASEDIT_LIST::free()
|
||||
{
|
||||
|
@ -179,10 +185,11 @@ void TASEDIT_LIST::free()
|
|||
ImageList_Destroy(himglist);
|
||||
himglist = 0;
|
||||
}
|
||||
|
||||
header_colors.resize(0);
|
||||
}
|
||||
void TASEDIT_LIST::reset()
|
||||
{
|
||||
next_header_update_time = 0;
|
||||
// scroll to the beginning
|
||||
ListView_EnsureVisible(hwndList, 0, FALSE);
|
||||
}
|
||||
|
@ -194,7 +201,51 @@ 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
|
||||
if (clock() > next_header_update_time)
|
||||
{
|
||||
next_header_update_time = clock() + HEADER_LIGHT_UPDATE_TICK;
|
||||
bool changes_made = false;
|
||||
// 1 - update Frame# columns' heads
|
||||
if (header_colors[COLUMN_FRAMENUM])
|
||||
{
|
||||
header_colors[COLUMN_FRAMENUM]--;
|
||||
header_colors[COLUMN_FRAMENUM2] = header_colors[COLUMN_FRAMENUM];
|
||||
changes_made = true;
|
||||
}
|
||||
// update input columns' heads
|
||||
int i = num_columns-1;
|
||||
if (i == COLUMN_FRAMENUM2) i--;
|
||||
for (; i >= COLUMN_JOYPAD1_A; i--)
|
||||
{
|
||||
if (header_colors[i] > HEADER_LIGHT_HOLD)
|
||||
{
|
||||
header_colors[i]--;
|
||||
changes_made = true;
|
||||
} else
|
||||
{
|
||||
if (recorder.current_joy[(i - COLUMN_JOYPAD1_A) / NUM_JOYPAD_BUTTONS] & (1 << ((i - COLUMN_JOYPAD1_A) % NUM_JOYPAD_BUTTONS)))
|
||||
{
|
||||
// the button is held
|
||||
if (header_colors[i] < HEADER_LIGHT_HOLD)
|
||||
{
|
||||
header_colors[i]++;
|
||||
changes_made = true;
|
||||
}
|
||||
} else
|
||||
{
|
||||
// the button is released
|
||||
if (header_colors[i])
|
||||
{
|
||||
header_colors[i]--;
|
||||
changes_made = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changes_made)
|
||||
RedrawHeader();
|
||||
}
|
||||
}
|
||||
|
||||
void TASEDIT_LIST::save(EMUFILE *os, bool really_save)
|
||||
|
@ -247,29 +298,26 @@ void TASEDIT_LIST::AddFourscore()
|
|||
lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_FMT;
|
||||
lvc.fmt = LVCFMT_CENTER;
|
||||
lvc.cx = 21;
|
||||
int colidx = COLUMN_JOYPAD3_A;
|
||||
for (int joy = 0; joy < 2; ++joy)
|
||||
{
|
||||
for (int btn = 0; btn < NUM_JOYPAD_BUTTONS; ++btn)
|
||||
{
|
||||
lvc.pszText = buttonNames[btn];
|
||||
ListView_InsertColumn(hwndList, colidx++, &lvc);
|
||||
ListView_InsertColumn(hwndList, num_columns++, &lvc);
|
||||
}
|
||||
}
|
||||
// frame number column again
|
||||
lvc.cx = 75;
|
||||
lvc.pszText = "Frame#";
|
||||
ListView_InsertColumn(hwndList, colidx++, &lvc);
|
||||
ListView_InsertColumn(hwndList, num_columns++, &lvc);
|
||||
// change eoptions
|
||||
FCEUI_SetInputFourscore(true);
|
||||
}
|
||||
void TASEDIT_LIST::RemoveFourscore()
|
||||
{
|
||||
// remove list columns
|
||||
for (int i = COLUMN_FRAMENUM2; i >= COLUMN_JOYPAD3_A; --i)
|
||||
{
|
||||
ListView_DeleteColumn (hwndList, i);
|
||||
}
|
||||
for (num_columns = COLUMN_FRAMENUM2; num_columns >= COLUMN_JOYPAD3_A; num_columns--)
|
||||
ListView_DeleteColumn (hwndList, num_columns);
|
||||
// change eoptions
|
||||
FCEUI_SetInputFourscore(false);
|
||||
}
|
||||
|
@ -282,7 +330,10 @@ void TASEDIT_LIST::RedrawRow(int index)
|
|||
{
|
||||
ListView_RedrawItems(hwndList, index, index);
|
||||
}
|
||||
|
||||
void TASEDIT_LIST::RedrawHeader()
|
||||
{
|
||||
InvalidateRect(hwndHeader, 0, FALSE);
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
bool TASEDIT_LIST::CheckItemVisible(int frame)
|
||||
|
@ -295,6 +346,10 @@ bool TASEDIT_LIST::CheckItemVisible(int frame)
|
|||
}
|
||||
|
||||
void TASEDIT_LIST::FollowPlayback()
|
||||
{
|
||||
ListView_EnsureVisible(hwndList,currFrameCounter,FALSE);
|
||||
}
|
||||
void TASEDIT_LIST::FollowPlaybackIfNeeded()
|
||||
{
|
||||
if (TASEdit_follow_playback) ListView_EnsureVisible(hwndList,currFrameCounter,FALSE);
|
||||
}
|
||||
|
@ -379,6 +434,19 @@ void TASEDIT_LIST::FollowPauseframe()
|
|||
}
|
||||
}
|
||||
|
||||
void TASEDIT_LIST::SetHeaderColumnLight(int column, int level)
|
||||
{
|
||||
if (column < COLUMN_FRAMENUM || column >= num_columns || level < 0 || level > HEADER_LIGHT_MAX)
|
||||
return;
|
||||
|
||||
if (header_colors[column] != level)
|
||||
{
|
||||
header_colors[column] = level;
|
||||
RedrawHeader();
|
||||
next_header_update_time = clock() + HEADER_LIGHT_UPDATE_TICK;
|
||||
}
|
||||
}
|
||||
|
||||
void TASEDIT_LIST::GetDispInfo(NMLVDISPINFO* nmlvDispInfo)
|
||||
{
|
||||
LVITEM& item = nmlvDispInfo->item;
|
||||
|
@ -583,6 +651,28 @@ LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg)
|
|||
return CDRF_DODEFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
LONG TASEDIT_LIST::HeaderCustomDraw(NMLVCUSTOMDRAW* msg)
|
||||
{
|
||||
switch(msg->nmcd.dwDrawStage)
|
||||
{
|
||||
case CDDS_PREPAINT:
|
||||
SelectObject(msg->nmcd.hdc, hMainListFont);
|
||||
return CDRF_NOTIFYITEMDRAW;
|
||||
case CDDS_ITEMPREPAINT:
|
||||
{
|
||||
int cell_x = msg->nmcd.dwItemSpec;
|
||||
if (cell_x < num_columns)
|
||||
{
|
||||
int cur_color = header_colors[cell_x];
|
||||
if (cur_color)
|
||||
SetTextColor(msg->nmcd.hdc, header_lights_colors[cur_color]);
|
||||
}
|
||||
}
|
||||
default:
|
||||
return CDRF_DODEFAULT;
|
||||
}
|
||||
}
|
||||
// -------------------------------------------------------------------------
|
||||
LRESULT APIENTRY HeaderWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
|
@ -612,6 +702,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;
|
||||
switch(msg)
|
||||
{
|
||||
case WM_CHAR:
|
||||
|
@ -619,12 +710,17 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
return 0;
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
switch (((LPNMHDR)lParam)->code)
|
||||
if (((LPNMHDR)lParam)->hwndFrom == tasedit_list.hwndHeader)
|
||||
{
|
||||
case HDN_BEGINTRACKW:
|
||||
case HDN_BEGINTRACKA:
|
||||
case HDN_TRACK:
|
||||
return true; // no column resizing
|
||||
switch (((LPNMHDR)lParam)->code)
|
||||
{
|
||||
case HDN_BEGINTRACKW:
|
||||
case HDN_BEGINTRACKA:
|
||||
case HDN_TRACK:
|
||||
return true; // no column resizing
|
||||
case NM_CUSTOMDRAW:
|
||||
return tasedit_list.HeaderCustomDraw((NMLVCUSTOMDRAW*)lParam);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -643,5 +739,3 @@ LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
return CallWindowProc(hwndList_oldWndProc, hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -9,6 +9,11 @@
|
|||
#define NUM_JOYPADS 4
|
||||
#define NUM_JOYPAD_BUTTONS 8
|
||||
|
||||
#define HEADER_LIGHT_MAX 10
|
||||
#define HEADER_LIGHT_HOLD 5
|
||||
#define HEADER_LIGHT_UPDATE_TICK 40 // 25FPS
|
||||
|
||||
#define MAX_NUM_COLUMNS 35
|
||||
#define COLUMN_ICONS 0
|
||||
#define COLUMN_FRAMENUM 1
|
||||
#define COLUMN_JOYPAD1_A 2
|
||||
|
@ -44,6 +49,7 @@
|
|||
#define COLUMN_JOYPAD4_L 32
|
||||
#define COLUMN_JOYPAD4_R 33
|
||||
#define COLUMN_FRAMENUM2 34
|
||||
|
||||
#define DIGITS_IN_FRAMENUM 7
|
||||
#define ARROW_IMAGE_ID 20
|
||||
|
||||
|
@ -82,8 +88,6 @@
|
|||
#define CUR_MARKED_FRAMENUM_COLOR 0xDEF7F3
|
||||
#define MARKED_UNDOHINT_FRAMENUM_COLOR 0xE1E7EC
|
||||
|
||||
|
||||
|
||||
class TASEDIT_LIST
|
||||
{
|
||||
public:
|
||||
|
@ -101,17 +105,21 @@ public:
|
|||
|
||||
void RedrawList();
|
||||
void RedrawRow(int index);
|
||||
void RedrawHeader();
|
||||
|
||||
bool CheckItemVisible(int frame);
|
||||
|
||||
void FollowPlayback();
|
||||
void FollowPlaybackIfNeeded();
|
||||
void FollowUndo();
|
||||
void FollowSelection();
|
||||
void FollowPauseframe();
|
||||
|
||||
void SetHeaderColumnLight(int column, int level);
|
||||
|
||||
void GetDispInfo(NMLVDISPINFO* nmlvDispInfo);
|
||||
LONG CustomDraw(NMLVCUSTOMDRAW* msg);
|
||||
|
||||
LONG HeaderCustomDraw(NMLVCUSTOMDRAW* msg);
|
||||
|
||||
HWND hwndList, hwndHeader;
|
||||
|
||||
|
@ -120,5 +128,8 @@ public:
|
|||
HFONT hMainListFont, hMainListSelectFont, hMarkersFont, hMarkersEditFont;
|
||||
|
||||
private:
|
||||
std::vector<uint8> header_colors;
|
||||
int num_columns;
|
||||
int next_header_update_time;
|
||||
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//Implementation file of TASEDIT_SELECTION class
|
||||
#include "taseditproj.h"
|
||||
#include "..\tasedit.h" // only for MARKER_NOTE_EDIT_UPPER
|
||||
#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";
|
||||
|
|
|
@ -858,8 +858,11 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\src\drivers\win\res\branch_spritesheet.bmp" />
|
||||
<None Include="..\src\drivers\win\res\icon3.ico" />
|
||||
<None Include="..\src\drivers\win\res\icon4.ico" />
|
||||
<None Include="..\src\drivers\win\res\ICON_1.ico" />
|
||||
<None Include="..\src\drivers\win\res\ICON_2.ico" />
|
||||
<None Include="..\src\drivers\win\res\tasedit-icon.ico" />
|
||||
<None Include="..\src\drivers\win\res\te_0.bmp" />
|
||||
<None Include="..\src\drivers\win\res\te_1.bmp" />
|
||||
<None Include="..\src\drivers\win\res\te_10.bmp" />
|
||||
|
@ -897,6 +900,7 @@
|
|||
</CustomBuild>
|
||||
<None Include="..\src\pputile.inc" />
|
||||
<None Include="ClassDiagram1.cd" />
|
||||
<None Include="res\tasedit-icon.ico" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
|
|
@ -1498,6 +1498,10 @@
|
|||
<None Include="..\src\drivers\win\res\te_arrow.bmp">
|
||||
<Filter>pix</Filter>
|
||||
</None>
|
||||
<None Include="..\src\drivers\win\res\icon3.ico" />
|
||||
<None Include="..\src\drivers\win\res\icon4.ico" />
|
||||
<None Include="res\tasedit-icon.ico" />
|
||||
<None Include="..\src\drivers\win\res\tasedit-icon.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CustomBuild Include="..\src\auxlib.lua" />
|
||||
|
|
Loading…
Reference in New Issue