* Taseditor: clicks in Branches Tree
* Taseditor: all GUI buttons fire off at mousedown; disabled Spacebar and enabled Middle mouse button on GUI buttons
This commit is contained in:
parent
9416d2de9e
commit
914c74ad15
|
@ -1,4 +1,11 @@
|
||||||
|
|
||||||
|
09-Apr-2012 - AnS - Taseditor: all GUI buttons fire off at mousedown; disabled Spacebar and enabled Middle mouse button on GUI buttons
|
||||||
|
09-Apr-2012 - AnS - Taseditor: clicks in Branches Tree
|
||||||
|
07-Apr-2012 - AnS - Taseditor: version data in fm3
|
||||||
|
07-Apr-2012 - AnS - Taseditor: much better way of calculating Branches Tree; hinting full timelines; miniarrow showing current Playback cursor position in Branches Tree; "Bookmark#" modtype, undo/redo works for Bookmarks
|
||||||
|
07-Apr-2012 - AnS - Taseditor: applying PAL and PPU flags when loading projects
|
||||||
|
05-apr-2012 - zeromus - fix mapper 242 (dragon quest 8 UNL)
|
||||||
|
26-Mar-2012 - AnS - Taseditor: Alt+Wheel = jump across gaps in Input/Markers
|
||||||
25-Mar-2012 - AnS - returned default mapping of Frame Advance hotkey to Backslash
|
25-Mar-2012 - AnS - returned default mapping of Frame Advance hotkey to Backslash
|
||||||
25-Mar-2012 - AnS - Taseditor: BookmarksList clicks apply on buttonup only
|
25-Mar-2012 - AnS - Taseditor: BookmarksList clicks apply on buttonup only
|
||||||
22-Mar-2012 - AnS - Config->Combine consecutive Recordings/Draws
|
22-Mar-2012 - AnS - Config->Combine consecutive Recordings/Draws
|
||||||
|
|
|
@ -120,7 +120,7 @@ void ApplyDefaultCommandMapping(void);
|
||||||
// Internal variables
|
// Internal variables
|
||||||
int frameSkipAmt = 18;
|
int frameSkipAmt = 18;
|
||||||
uint8 *xbsave = NULL;
|
uint8 *xbsave = NULL;
|
||||||
int eoptions = EO_BGRUN | EO_FORCEISCALE;
|
int eoptions = EO_BGRUN | EO_NOSPRLIM | EO_FORCEISCALE;
|
||||||
|
|
||||||
//global variables
|
//global variables
|
||||||
int soundoptions = SO_SECONDARY | SO_GFOCUS;
|
int soundoptions = SO_SECONDARY | SO_GFOCUS;
|
||||||
|
|
|
@ -1421,12 +1421,10 @@ BEGIN
|
||||||
PUSHBUTTON "Similar",TASEDITOR_FIND_BEST_SIMILAR_MARKER,225,332,34,14,NOT WS_TABSTOP
|
PUSHBUTTON "Similar",TASEDITOR_FIND_BEST_SIMILAR_MARKER,225,332,34,14,NOT WS_TABSTOP
|
||||||
PUSHBUTTON "More",TASEDITOR_FIND_NEXT_SIMILAR_MARKER,259,332,34,14,NOT WS_TABSTOP
|
PUSHBUTTON "More",TASEDITOR_FIND_NEXT_SIMILAR_MARKER,259,332,34,14,NOT WS_TABSTOP
|
||||||
PUSHBUTTON ">>",TASEDITOR_NEXT_MARKER,292,332,23,14,NOT WS_TABSTOP
|
PUSHBUTTON ">>",TASEDITOR_NEXT_MARKER,292,332,23,14,NOT WS_TABSTOP
|
||||||
CONTROL "",IDC_JUMP_PLAYBACK_BUTTON,"Button",BS_OWNERDRAW,5,0,59,13
|
|
||||||
EDITTEXT IDC_PLAYBACK_MARKER_EDIT,65,0,127,13,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP
|
EDITTEXT IDC_PLAYBACK_MARKER_EDIT,65,0,127,13,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP
|
||||||
RTEXT "Marker 0",IDC_PLAYBACK_MARKER,4,2,58,10,0,WS_EX_RIGHT
|
RTEXT "Marker 0",IDC_PLAYBACK_MARKER,4,2,60,10,SS_NOTIFY,WS_EX_RIGHT
|
||||||
CONTROL "",IDC_JUMP_SELECTION_BUTTON,"Button",BS_OWNERDRAW,5,333,59,13
|
|
||||||
EDITTEXT IDC_SELECTION_MARKER_EDIT,65,333,127,13,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP
|
EDITTEXT IDC_SELECTION_MARKER_EDIT,65,333,127,13,ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP
|
||||||
RTEXT "Marker 99999",IDC_SELECTION_MARKER,4,335,58,10,0,WS_EX_RIGHT
|
RTEXT "Marker 99999",IDC_SELECTION_MARKER,4,335,60,10,SS_NOTIFY,WS_EX_RIGHT
|
||||||
CONTROL "",IDC_BRANCHES_BITMAP,"Static",SS_OWNERDRAW | SS_NOTIFY | SS_REALSIZEIMAGE | NOT WS_VISIBLE,202,178,113,89
|
CONTROL "",IDC_BRANCHES_BITMAP,"Static",SS_OWNERDRAW | SS_NOTIFY | SS_REALSIZEIMAGE | NOT WS_VISIBLE,202,178,113,89
|
||||||
CONTROL " Turbo seek",CHECK_TURBO_SEEK,"Button",BS_AUTOCHECKBOX,263,25,50,12
|
CONTROL " Turbo seek",CHECK_TURBO_SEEK,"Button",BS_AUTOCHECKBOX,263,25,50,12
|
||||||
LTEXT "Selection: 0 rows, 16 columns",IDC_TEXT_SELECTION,204,118,112,10
|
LTEXT "Selection: 0 rows, 16 columns",IDC_TEXT_SELECTION,204,118,112,10
|
||||||
|
|
|
@ -14,7 +14,7 @@ Branches - Manager of Branches
|
||||||
* also stores the time of the last modification (see fireball) and the time of project beginning (see cloudlet)
|
* also stores the time of the last modification (see fireball) and the time of project beginning (see cloudlet)
|
||||||
* also caches data used in calculations (cached_first_difference, cached_timelines)
|
* also caches data used in calculations (cached_first_difference, cached_timelines)
|
||||||
* saves and loads the data from a project file. On error: sends warning to caller
|
* saves and loads the data from a project file. On error: sends warning to caller
|
||||||
* implements the working of Branches Tree: creating, recalculating relations, animating, redrawing, mouseover
|
* implements the working of Branches Tree: creating, recalculating relations, animating, redrawing, mouseover, clicks
|
||||||
* on demand: reacts on Bookmarks/current Movie changes and recalculates the Branches Tree
|
* on demand: reacts on Bookmarks/current Movie changes and recalculates the Branches Tree
|
||||||
* regularly updates animations in Branches Tree and calculates Playback cursor position on the Tree
|
* regularly updates animations in Branches Tree and calculates Playback cursor position on the Tree
|
||||||
* stores resources: coordinates for building Branches Tree, animation timings
|
* stores resources: coordinates for building Branches Tree, animation timings
|
||||||
|
@ -189,7 +189,7 @@ void BRANCHES::reset()
|
||||||
void BRANCHES::reset_vars()
|
void BRANCHES::reset_vars()
|
||||||
{
|
{
|
||||||
transition_phase = animation_frame = 0;
|
transition_phase = animation_frame = 0;
|
||||||
playback_x = playback_y = -50;
|
playback_x = playback_y = 0;
|
||||||
must_recalculate_branches_tree = must_redraw_branches_tree = true;
|
must_recalculate_branches_tree = must_redraw_branches_tree = true;
|
||||||
next_animation_time = clock() + BRANCHES_ANIMATION_TICK;
|
next_animation_time = clock() + BRANCHES_ANIMATION_TICK;
|
||||||
}
|
}
|
||||||
|
@ -1116,6 +1116,11 @@ LRESULT APIENTRY BranchesBitmapWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARA
|
||||||
extern BRANCHES branches;
|
extern BRANCHES branches;
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
|
case WM_SETCURSOR:
|
||||||
|
{
|
||||||
|
taseditor_window.must_update_mouse_cursor = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
{
|
{
|
||||||
if (!bookmarks.mouse_over_bitmap)
|
if (!bookmarks.mouse_over_bitmap)
|
||||||
|
@ -1141,7 +1146,41 @@ LRESULT APIENTRY BranchesBitmapWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARA
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
|
{
|
||||||
|
// single click on Branches Tree = send playback to the Bookmark
|
||||||
|
int branch_under_mouse = bookmarks.item_under_mouse;
|
||||||
|
if (branch_under_mouse == ITEM_UNDER_MOUSE_CLOUD)
|
||||||
|
{
|
||||||
|
playback.jump(0);
|
||||||
|
} else if (branch_under_mouse >= 0 && branch_under_mouse < TOTAL_BOOKMARKS && bookmarks.bookmarks_array[branch_under_mouse].not_empty)
|
||||||
|
{
|
||||||
|
bookmarks.command(COMMAND_JUMP, branch_under_mouse);
|
||||||
|
} else if (branch_under_mouse == TOTAL_BOOKMARKS)
|
||||||
|
{
|
||||||
|
playback.jump(currMovieData.getNumRecords() - 1);
|
||||||
|
}
|
||||||
|
if (GetFocus() != hWnd)
|
||||||
|
SetFocus(hWnd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
case WM_LBUTTONDBLCLK:
|
case WM_LBUTTONDBLCLK:
|
||||||
|
{
|
||||||
|
// double click on Branches Tree = deploy the Branch
|
||||||
|
int branch_under_mouse = bookmarks.item_under_mouse;
|
||||||
|
if (branch_under_mouse == ITEM_UNDER_MOUSE_CLOUD)
|
||||||
|
{
|
||||||
|
playback.jump(0);
|
||||||
|
} else if (branch_under_mouse >= 0 && branch_under_mouse < TOTAL_BOOKMARKS && bookmarks.bookmarks_array[branch_under_mouse].not_empty)
|
||||||
|
{
|
||||||
|
bookmarks.command(COMMAND_DEPLOY, branch_under_mouse);
|
||||||
|
} else if (branch_under_mouse == TOTAL_BOOKMARKS)
|
||||||
|
{
|
||||||
|
playback.jump(currMovieData.getNumRecords() - 1);
|
||||||
|
}
|
||||||
|
if (GetFocus() != hWnd)
|
||||||
|
SetFocus(hWnd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
case WM_RBUTTONDOWN:
|
case WM_RBUTTONDOWN:
|
||||||
case WM_RBUTTONDBLCLK:
|
case WM_RBUTTONDBLCLK:
|
||||||
{
|
{
|
||||||
|
|
|
@ -142,13 +142,13 @@ void HISTORY::reset()
|
||||||
history_start_pos = 0;
|
history_start_pos = 0;
|
||||||
history_cursor_pos = -1;
|
history_cursor_pos = -1;
|
||||||
// create initial snapshot
|
// create initial snapshot
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
inp.init(currMovieData, taseditor_config.enable_hot_changes);
|
snap.init(currMovieData, taseditor_config.enable_hot_changes);
|
||||||
strcat(inp.description, modCaptions[MODTYPE_INIT]);
|
strcat(snap.description, modCaptions[MODTYPE_INIT]);
|
||||||
inp.jump_frame = -1;
|
snap.jump_frame = -1;
|
||||||
inp.start_frame = 0;
|
snap.start_frame = 0;
|
||||||
inp.end_frame = inp.size - 1;
|
snap.end_frame = snap.size - 1;
|
||||||
AddItemToHistory(inp);
|
AddItemToHistory(snap);
|
||||||
UpdateHistoryList();
|
UpdateHistoryList();
|
||||||
RedrawHistoryList();
|
RedrawHistoryList();
|
||||||
}
|
}
|
||||||
|
@ -385,7 +385,7 @@ void HISTORY::redo()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// ----------------------------
|
// ----------------------------
|
||||||
void HISTORY::AddItemToHistory(SNAPSHOT &inp, int cur_branch)
|
void HISTORY::AddItemToHistory(SNAPSHOT &snap, int cur_branch)
|
||||||
{
|
{
|
||||||
// history uses conveyor of items (vector with fixed size) to aviod frequent resizing, which would be awfully expensive with such large objects as SNAPSHOT and BOOKMARK
|
// history uses conveyor of items (vector with fixed size) to aviod frequent resizing, which would be awfully expensive with such large objects as SNAPSHOT and BOOKMARK
|
||||||
if (history_total_items >= history_size)
|
if (history_total_items >= history_size)
|
||||||
|
@ -402,12 +402,12 @@ void HISTORY::AddItemToHistory(SNAPSHOT &inp, int cur_branch)
|
||||||
}
|
}
|
||||||
// write data
|
// write data
|
||||||
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
||||||
snapshots[real_pos] = inp;
|
snapshots[real_pos] = snap;
|
||||||
backup_bookmarks[real_pos].free();
|
backup_bookmarks[real_pos].free();
|
||||||
backup_current_branch[real_pos] = cur_branch;
|
backup_current_branch[real_pos] = cur_branch;
|
||||||
RedrawHistoryList();
|
RedrawHistoryList();
|
||||||
}
|
}
|
||||||
void HISTORY::AddItemToHistory(SNAPSHOT &inp, int cur_branch, BOOKMARK &bookm)
|
void HISTORY::AddItemToHistory(SNAPSHOT &snap, int cur_branch, BOOKMARK &bookm)
|
||||||
{
|
{
|
||||||
// history uses conveyor of items (vector with fixed size) to aviod frequent resizing, which would be awfully expensive with such large objects as SNAPSHOT and BOOKMARK
|
// history uses conveyor of items (vector with fixed size) to aviod frequent resizing, which would be awfully expensive with such large objects as SNAPSHOT and BOOKMARK
|
||||||
if (history_total_items >= history_size)
|
if (history_total_items >= history_size)
|
||||||
|
@ -424,7 +424,7 @@ void HISTORY::AddItemToHistory(SNAPSHOT &inp, int cur_branch, BOOKMARK &bookm)
|
||||||
}
|
}
|
||||||
// write data
|
// write data
|
||||||
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
||||||
snapshots[real_pos] = inp;
|
snapshots[real_pos] = snap;
|
||||||
backup_bookmarks[real_pos] = bookm;
|
backup_bookmarks[real_pos] = bookm;
|
||||||
backup_current_branch[real_pos] = cur_branch;
|
backup_current_branch[real_pos] = cur_branch;
|
||||||
RedrawHistoryList();
|
RedrawHistoryList();
|
||||||
|
@ -434,17 +434,17 @@ void HISTORY::AddItemToHistory(SNAPSHOT &inp, int cur_branch, BOOKMARK &bookm)
|
||||||
int HISTORY::RegisterChanges(int mod_type, int start, int end, const char* comment, int consecutive_tag)
|
int HISTORY::RegisterChanges(int mod_type, int start, int end, const char* comment, int consecutive_tag)
|
||||||
{
|
{
|
||||||
// create new shanshot
|
// create new shanshot
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
inp.init(currMovieData, taseditor_config.enable_hot_changes);
|
snap.init(currMovieData, taseditor_config.enable_hot_changes);
|
||||||
// check if there are input differences from latest snapshot
|
// check if there are input differences from latest snapshot
|
||||||
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
||||||
int first_changes = inp.findFirstChange(snapshots[real_pos], start, end);
|
int first_changes = snap.findFirstChange(snapshots[real_pos], start, end);
|
||||||
if (first_changes >= 0)
|
if (first_changes >= 0)
|
||||||
{
|
{
|
||||||
// differences found
|
// differences found
|
||||||
// fill description:
|
// fill description:
|
||||||
inp.mod_type = mod_type;
|
snap.mod_type = mod_type;
|
||||||
strcat(inp.description, modCaptions[inp.mod_type]);
|
strcat(snap.description, modCaptions[snap.mod_type]);
|
||||||
switch (mod_type)
|
switch (mod_type)
|
||||||
{
|
{
|
||||||
case MODTYPE_SET:
|
case MODTYPE_SET:
|
||||||
|
@ -453,7 +453,7 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, const char* comme
|
||||||
case MODTYPE_CLEAR:
|
case MODTYPE_CLEAR:
|
||||||
case MODTYPE_CUT:
|
case MODTYPE_CUT:
|
||||||
{
|
{
|
||||||
inp.jump_frame = first_changes;
|
snap.jump_frame = first_changes;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MODTYPE_INSERT:
|
case MODTYPE_INSERT:
|
||||||
|
@ -463,47 +463,47 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, const char* comme
|
||||||
case MODTYPE_PATTERN:
|
case MODTYPE_PATTERN:
|
||||||
{
|
{
|
||||||
// for these changes user prefers to see frame of attempted change (selection beginning), not frame of actual differences
|
// for these changes user prefers to see frame of attempted change (selection beginning), not frame of actual differences
|
||||||
inp.jump_frame = start;
|
snap.jump_frame = start;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
inp.start_frame = start;
|
snap.start_frame = start;
|
||||||
inp.end_frame = end;
|
snap.end_frame = end;
|
||||||
inp.consecutive_tag = consecutive_tag;
|
snap.consecutive_tag = consecutive_tag;
|
||||||
if (consecutive_tag && taseditor_config.combine_consecutive && snapshots[real_pos].mod_type == inp.mod_type && snapshots[real_pos].consecutive_tag == inp.consecutive_tag)
|
if (consecutive_tag && taseditor_config.combine_consecutive && snapshots[real_pos].mod_type == snap.mod_type && snapshots[real_pos].consecutive_tag == snap.consecutive_tag)
|
||||||
{
|
{
|
||||||
// combine with previous snapshot
|
// combine with previous snapshot
|
||||||
if (inp.jump_frame > snapshots[real_pos].jump_frame)
|
if (snap.jump_frame > snapshots[real_pos].jump_frame)
|
||||||
inp.jump_frame = snapshots[real_pos].jump_frame;
|
snap.jump_frame = snapshots[real_pos].jump_frame;
|
||||||
if (inp.start_frame > snapshots[real_pos].start_frame)
|
if (snap.start_frame > snapshots[real_pos].start_frame)
|
||||||
inp.start_frame = snapshots[real_pos].start_frame;
|
snap.start_frame = snapshots[real_pos].start_frame;
|
||||||
if (inp.end_frame < snapshots[real_pos].end_frame)
|
if (snap.end_frame < snapshots[real_pos].end_frame)
|
||||||
inp.end_frame = snapshots[real_pos].end_frame;
|
snap.end_frame = snapshots[real_pos].end_frame;
|
||||||
// add upper and lower frame to description
|
// add upper and lower frame to description
|
||||||
char framenum[11];
|
char framenum[11];
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
_itoa(inp.start_frame, framenum, 10);
|
_itoa(snap.start_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
if (inp.end_frame > inp.start_frame)
|
if (snap.end_frame > snap.start_frame)
|
||||||
{
|
{
|
||||||
strcat(inp.description, "-");
|
strcat(snap.description, "-");
|
||||||
_itoa(inp.end_frame, framenum, 10);
|
_itoa(snap.end_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
}
|
}
|
||||||
// add comment if there is one specified
|
// add comment if there is one specified
|
||||||
if (comment)
|
if (comment)
|
||||||
{
|
{
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
strncat(inp.description, comment, SNAPSHOT_DESC_MAX_LENGTH - strlen(inp.description) - 1);
|
strncat(snap.description, comment, SNAPSHOT_DESC_MAX_LENGTH - strlen(snap.description) - 1);
|
||||||
}
|
}
|
||||||
// set hotchanges
|
// set hotchanges
|
||||||
if (taseditor_config.enable_hot_changes)
|
if (taseditor_config.enable_hot_changes)
|
||||||
{
|
{
|
||||||
inp.copyHotChanges(&snapshots[real_pos]);
|
snap.copyHotChanges(&snapshots[real_pos]);
|
||||||
inp.fillHotChanges(snapshots[real_pos], first_changes, end);
|
snap.fillHotChanges(snapshots[real_pos], first_changes, end);
|
||||||
}
|
}
|
||||||
// replace current snapshot with this cloned snapshot and truncate history here
|
// replace current snapshot with this cloned snapshot and truncate history here
|
||||||
snapshots[real_pos] = inp;
|
snapshots[real_pos] = snap;
|
||||||
history_total_items = history_cursor_pos+1;
|
history_total_items = history_cursor_pos+1;
|
||||||
UpdateHistoryList();
|
UpdateHistoryList();
|
||||||
RedrawHistoryList();
|
RedrawHistoryList();
|
||||||
|
@ -512,20 +512,20 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, const char* comme
|
||||||
// don't combine
|
// don't combine
|
||||||
// add upper and lower frame to description
|
// add upper and lower frame to description
|
||||||
char framenum[11];
|
char framenum[11];
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
_itoa(inp.start_frame, framenum, 10);
|
_itoa(snap.start_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
if (inp.end_frame > inp.start_frame)
|
if (snap.end_frame > snap.start_frame)
|
||||||
{
|
{
|
||||||
strcat(inp.description, "-");
|
strcat(snap.description, "-");
|
||||||
_itoa(inp.end_frame, framenum, 10);
|
_itoa(snap.end_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
}
|
}
|
||||||
// add comment if there is one specified
|
// add comment if there is one specified
|
||||||
if (comment)
|
if (comment)
|
||||||
{
|
{
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
strncat(inp.description, comment, SNAPSHOT_DESC_MAX_LENGTH - strlen(inp.description) - 1);
|
strncat(snap.description, comment, SNAPSHOT_DESC_MAX_LENGTH - strlen(snap.description) - 1);
|
||||||
}
|
}
|
||||||
// set hotchanges
|
// set hotchanges
|
||||||
if (taseditor_config.enable_hot_changes)
|
if (taseditor_config.enable_hot_changes)
|
||||||
|
@ -534,11 +534,11 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, const char* comme
|
||||||
switch (mod_type)
|
switch (mod_type)
|
||||||
{
|
{
|
||||||
case MODTYPE_DELETE:
|
case MODTYPE_DELETE:
|
||||||
inp.inheritHotChanges_DeleteSelection(&snapshots[real_pos]);
|
snap.inheritHotChanges_DeleteSelection(&snapshots[real_pos]);
|
||||||
break;
|
break;
|
||||||
case MODTYPE_INSERT:
|
case MODTYPE_INSERT:
|
||||||
case MODTYPE_CLONE:
|
case MODTYPE_CLONE:
|
||||||
inp.inheritHotChanges_InsertSelection(&snapshots[real_pos]);
|
snap.inheritHotChanges_InsertSelection(&snapshots[real_pos]);
|
||||||
break;
|
break;
|
||||||
case MODTYPE_SET:
|
case MODTYPE_SET:
|
||||||
case MODTYPE_UNSET:
|
case MODTYPE_UNSET:
|
||||||
|
@ -546,16 +546,16 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, const char* comme
|
||||||
case MODTYPE_CUT:
|
case MODTYPE_CUT:
|
||||||
case MODTYPE_PASTE:
|
case MODTYPE_PASTE:
|
||||||
case MODTYPE_PATTERN:
|
case MODTYPE_PATTERN:
|
||||||
inp.inheritHotChanges(&snapshots[real_pos]);
|
snap.inheritHotChanges(&snapshots[real_pos]);
|
||||||
inp.fillHotChanges(snapshots[real_pos], first_changes, end);
|
snap.fillHotChanges(snapshots[real_pos], first_changes, end);
|
||||||
break;
|
break;
|
||||||
case MODTYPE_TRUNCATE:
|
case MODTYPE_TRUNCATE:
|
||||||
inp.copyHotChanges(&snapshots[real_pos]);
|
snap.copyHotChanges(&snapshots[real_pos]);
|
||||||
// do not add new hotchanges and do not fade old hotchanges, because there was nothing added
|
// do not add new hotchanges and do not fade old hotchanges, because there was nothing added
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AddItemToHistory(inp);
|
AddItemToHistory(snap);
|
||||||
}
|
}
|
||||||
branches.ChangesMadeSinceBranch();
|
branches.ChangesMadeSinceBranch();
|
||||||
}
|
}
|
||||||
|
@ -564,32 +564,32 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, const char* comme
|
||||||
int HISTORY::RegisterInsertNum(int start, int frames)
|
int HISTORY::RegisterInsertNum(int start, int frames)
|
||||||
{
|
{
|
||||||
// create new shanshot
|
// create new shanshot
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
inp.init(currMovieData, taseditor_config.enable_hot_changes);
|
snap.init(currMovieData, taseditor_config.enable_hot_changes);
|
||||||
// check if there are input differences from latest snapshot
|
// check if there are input differences from latest snapshot
|
||||||
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
||||||
int first_changes = inp.findFirstChange(snapshots[real_pos], start);
|
int first_changes = snap.findFirstChange(snapshots[real_pos], start);
|
||||||
if (first_changes >= 0)
|
if (first_changes >= 0)
|
||||||
{
|
{
|
||||||
// differences found
|
// differences found
|
||||||
// fill description:
|
// fill description:
|
||||||
inp.mod_type = MODTYPE_INSERTNUM;
|
snap.mod_type = MODTYPE_INSERTNUM;
|
||||||
strcat(inp.description, modCaptions[inp.mod_type]);
|
strcat(snap.description, modCaptions[snap.mod_type]);
|
||||||
inp.jump_frame = start;
|
snap.jump_frame = start;
|
||||||
inp.start_frame = start;
|
snap.start_frame = start;
|
||||||
inp.end_frame = start + frames - 1;
|
snap.end_frame = start + frames - 1;
|
||||||
char framenum[11];
|
char framenum[11];
|
||||||
// add number of inserted frames to description
|
// add number of inserted frames to description
|
||||||
_itoa(frames, framenum, 10);
|
_itoa(frames, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
// add upper frame to description
|
// add upper frame to description
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
_itoa(inp.start_frame, framenum, 10);
|
_itoa(snap.start_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
// set hotchanges
|
// set hotchanges
|
||||||
if (taseditor_config.enable_hot_changes)
|
if (taseditor_config.enable_hot_changes)
|
||||||
inp.inheritHotChanges_InsertNum(&snapshots[real_pos], start, frames);
|
snap.inheritHotChanges_InsertNum(&snapshots[real_pos], start, frames);
|
||||||
AddItemToHistory(inp);
|
AddItemToHistory(snap);
|
||||||
branches.ChangesMadeSinceBranch();
|
branches.ChangesMadeSinceBranch();
|
||||||
}
|
}
|
||||||
return first_changes;
|
return first_changes;
|
||||||
|
@ -597,30 +597,30 @@ int HISTORY::RegisterInsertNum(int start, int frames)
|
||||||
int HISTORY::RegisterPasteInsert(int start, SelectionFrames& inserted_set)
|
int HISTORY::RegisterPasteInsert(int start, SelectionFrames& inserted_set)
|
||||||
{
|
{
|
||||||
// create new shanshot
|
// create new shanshot
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
inp.init(currMovieData, taseditor_config.enable_hot_changes);
|
snap.init(currMovieData, taseditor_config.enable_hot_changes);
|
||||||
// check if there are input differences from latest snapshot
|
// check if there are input differences from latest snapshot
|
||||||
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
||||||
int first_changes = inp.findFirstChange(snapshots[real_pos], start);
|
int first_changes = snap.findFirstChange(snapshots[real_pos], start);
|
||||||
if (first_changes >= 0)
|
if (first_changes >= 0)
|
||||||
{
|
{
|
||||||
// differences found
|
// differences found
|
||||||
// fill description:
|
// fill description:
|
||||||
inp.mod_type = MODTYPE_PASTEINSERT;
|
snap.mod_type = MODTYPE_PASTEINSERT;
|
||||||
strcat(inp.description, modCaptions[inp.mod_type]);
|
strcat(snap.description, modCaptions[snap.mod_type]);
|
||||||
// for PasteInsert user prefers to see frame of attempted change (selection beginning), not frame of actual differences
|
// for PasteInsert user prefers to see frame of attempted change (selection beginning), not frame of actual differences
|
||||||
inp.jump_frame = start;
|
snap.jump_frame = start;
|
||||||
inp.start_frame = start;
|
snap.start_frame = start;
|
||||||
inp.end_frame = -1;
|
snap.end_frame = -1;
|
||||||
// add upper frame to description
|
// add upper frame to description
|
||||||
char framenum[11];
|
char framenum[11];
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
_itoa(inp.start_frame, framenum, 10);
|
_itoa(snap.start_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
// set hotchanges
|
// set hotchanges
|
||||||
if (taseditor_config.enable_hot_changes)
|
if (taseditor_config.enable_hot_changes)
|
||||||
inp.inheritHotChanges_PasteInsert(&snapshots[real_pos], inserted_set);
|
snap.inheritHotChanges_PasteInsert(&snapshots[real_pos], inserted_set);
|
||||||
AddItemToHistory(inp);
|
AddItemToHistory(snap);
|
||||||
branches.ChangesMadeSinceBranch();
|
branches.ChangesMadeSinceBranch();
|
||||||
}
|
}
|
||||||
return first_changes;
|
return first_changes;
|
||||||
|
@ -628,72 +628,72 @@ int HISTORY::RegisterPasteInsert(int start, SelectionFrames& inserted_set)
|
||||||
void HISTORY::RegisterMarkersChange(int mod_type, int start, int end, const char* comment)
|
void HISTORY::RegisterMarkersChange(int mod_type, int start, int end, const char* comment)
|
||||||
{
|
{
|
||||||
// create new shanshot
|
// create new shanshot
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
inp.init(currMovieData, taseditor_config.enable_hot_changes);
|
snap.init(currMovieData, taseditor_config.enable_hot_changes);
|
||||||
// fill description:
|
// fill description:
|
||||||
inp.mod_type = mod_type;
|
snap.mod_type = mod_type;
|
||||||
strcat(inp.description, modCaptions[mod_type]);
|
strcat(snap.description, modCaptions[mod_type]);
|
||||||
inp.jump_frame = start;
|
snap.jump_frame = start;
|
||||||
inp.start_frame = start;
|
snap.start_frame = start;
|
||||||
inp.end_frame = end;
|
snap.end_frame = end;
|
||||||
// add the frame to description
|
// add the frame to description
|
||||||
char framenum[11];
|
char framenum[11];
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
_itoa(inp.start_frame, framenum, 10);
|
_itoa(snap.start_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
if (inp.end_frame > inp.start_frame || mod_type == MODTYPE_MARKER_DRAG || mod_type == MODTYPE_MARKER_SWAP)
|
if (snap.end_frame > snap.start_frame || mod_type == MODTYPE_MARKER_DRAG || mod_type == MODTYPE_MARKER_SWAP)
|
||||||
{
|
{
|
||||||
if (mod_type == MODTYPE_MARKER_DRAG)
|
if (mod_type == MODTYPE_MARKER_DRAG)
|
||||||
strcat(inp.description, "=>");
|
strcat(snap.description, "=>");
|
||||||
else if (mod_type == MODTYPE_MARKER_SWAP)
|
else if (mod_type == MODTYPE_MARKER_SWAP)
|
||||||
strcat(inp.description, "<=>");
|
strcat(snap.description, "<=>");
|
||||||
else
|
else
|
||||||
strcat(inp.description, "-");
|
strcat(snap.description, "-");
|
||||||
_itoa(inp.end_frame, framenum, 10);
|
_itoa(snap.end_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
}
|
}
|
||||||
// add comment if there is one specified
|
// add comment if there is one specified
|
||||||
if (comment)
|
if (comment)
|
||||||
{
|
{
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
strncat(inp.description, comment, SNAPSHOT_DESC_MAX_LENGTH - strlen(inp.description) - 1);
|
strncat(snap.description, comment, SNAPSHOT_DESC_MAX_LENGTH - strlen(snap.description) - 1);
|
||||||
}
|
}
|
||||||
// input hotchanges aren't changed
|
// input hotchanges aren't changed
|
||||||
if (taseditor_config.enable_hot_changes)
|
if (taseditor_config.enable_hot_changes)
|
||||||
inp.copyHotChanges(&GetCurrentSnapshot());
|
snap.copyHotChanges(&GetCurrentSnapshot());
|
||||||
AddItemToHistory(inp);
|
AddItemToHistory(snap);
|
||||||
branches.ChangesMadeSinceBranch();
|
branches.ChangesMadeSinceBranch();
|
||||||
project.SetProjectChanged();
|
project.SetProjectChanged();
|
||||||
}
|
}
|
||||||
void HISTORY::RegisterBookmarkSet(int slot, BOOKMARK& backup_copy, int old_current_branch)
|
void HISTORY::RegisterBookmarkSet(int slot, BOOKMARK& backup_copy, int old_current_branch)
|
||||||
{
|
{
|
||||||
// create new snapshot
|
// create new snapshot
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
inp.init(currMovieData, taseditor_config.enable_hot_changes);
|
snap.init(currMovieData, taseditor_config.enable_hot_changes);
|
||||||
// fill description: modification type + jump_frame of the Bookmark
|
// fill description: modification type + jump_frame of the Bookmark
|
||||||
inp.mod_type = MODTYPE_BOOKMARK_0 + slot;
|
snap.mod_type = MODTYPE_BOOKMARK_0 + slot;
|
||||||
strcat(inp.description, modCaptions[inp.mod_type]);
|
strcat(snap.description, modCaptions[snap.mod_type]);
|
||||||
inp.start_frame = inp.end_frame = inp.jump_frame = bookmarks.bookmarks_array[slot].snapshot.jump_frame;
|
snap.start_frame = snap.end_frame = snap.jump_frame = bookmarks.bookmarks_array[slot].snapshot.jump_frame;
|
||||||
char framenum[11];
|
char framenum[11];
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
_itoa(inp.jump_frame, framenum, 10);
|
_itoa(snap.jump_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
if (taseditor_config.enable_hot_changes)
|
if (taseditor_config.enable_hot_changes)
|
||||||
inp.copyHotChanges(&GetCurrentSnapshot());
|
snap.copyHotChanges(&GetCurrentSnapshot());
|
||||||
AddItemToHistory(inp, old_current_branch, backup_copy);
|
AddItemToHistory(snap, old_current_branch, backup_copy);
|
||||||
}
|
}
|
||||||
void HISTORY::RegisterBranching(int mod_type, int first_change, int slot, int old_current_branch)
|
void HISTORY::RegisterBranching(int mod_type, int first_change, int slot, int old_current_branch)
|
||||||
{
|
{
|
||||||
// create new snapshot
|
// create new snapshot
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
inp.init(currMovieData, taseditor_config.enable_hot_changes);
|
snap.init(currMovieData, taseditor_config.enable_hot_changes);
|
||||||
// fill description: modification type + time of the Branch
|
// fill description: modification type + time of the Branch
|
||||||
inp.mod_type = mod_type;
|
snap.mod_type = mod_type;
|
||||||
strcat(inp.description, modCaptions[inp.mod_type]);
|
strcat(snap.description, modCaptions[snap.mod_type]);
|
||||||
strcat(inp.description, bookmarks.bookmarks_array[slot].snapshot.description);
|
strcat(snap.description, bookmarks.bookmarks_array[slot].snapshot.description);
|
||||||
inp.jump_frame = first_change;
|
snap.jump_frame = first_change;
|
||||||
inp.start_frame = first_change;
|
snap.start_frame = first_change;
|
||||||
inp.end_frame = -1;
|
snap.end_frame = -1;
|
||||||
if (taseditor_config.enable_hot_changes)
|
if (taseditor_config.enable_hot_changes)
|
||||||
{
|
{
|
||||||
if (mod_type < MODTYPE_BRANCH_MARKERS_0)
|
if (mod_type < MODTYPE_BRANCH_MARKERS_0)
|
||||||
|
@ -702,122 +702,122 @@ void HISTORY::RegisterBranching(int mod_type, int first_change, int slot, int ol
|
||||||
// copy hotchanges of the Branch
|
// copy hotchanges of the Branch
|
||||||
if (taseditor_config.branch_full_movie)
|
if (taseditor_config.branch_full_movie)
|
||||||
{
|
{
|
||||||
inp.copyHotChanges(&bookmarks.bookmarks_array[slot].snapshot);
|
snap.copyHotChanges(&bookmarks.bookmarks_array[slot].snapshot);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
// input was branched partially, so copy hotchanges only up to and not including jump_frame of the Branch
|
// input was branched partially, so copy hotchanges only up to and not including jump_frame of the Branch
|
||||||
inp.copyHotChanges(&bookmarks.bookmarks_array[slot].snapshot, bookmarks.bookmarks_array[slot].snapshot.jump_frame);
|
snap.copyHotChanges(&bookmarks.bookmarks_array[slot].snapshot, bookmarks.bookmarks_array[slot].snapshot.jump_frame);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
// input was not changed, only Markers were changed
|
// input was not changed, only Markers were changed
|
||||||
inp.copyHotChanges(&GetCurrentSnapshot());
|
snap.copyHotChanges(&GetCurrentSnapshot());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AddItemToHistory(inp, old_current_branch);
|
AddItemToHistory(snap, old_current_branch);
|
||||||
}
|
}
|
||||||
void HISTORY::RegisterRecording(int frame_of_change)
|
void HISTORY::RegisterRecording(int frame_of_change)
|
||||||
{
|
{
|
||||||
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
inp.init(currMovieData, taseditor_config.enable_hot_changes);
|
snap.init(currMovieData, taseditor_config.enable_hot_changes);
|
||||||
inp.fillJoypadsDiff(snapshots[real_pos], frame_of_change);
|
snap.fillJoypadsDiff(snapshots[real_pos], frame_of_change);
|
||||||
// fill description:
|
// fill description:
|
||||||
inp.mod_type = MODTYPE_RECORD;
|
snap.mod_type = MODTYPE_RECORD;
|
||||||
strcat(inp.description, modCaptions[MODTYPE_RECORD]);
|
strcat(snap.description, modCaptions[MODTYPE_RECORD]);
|
||||||
char framenum[11];
|
char framenum[11];
|
||||||
// check if current snapshot is also Recording and maybe it is consecutive recording
|
// check if current snapshot is also Recording and maybe it is consecutive recording
|
||||||
if (taseditor_config.combine_consecutive
|
if (taseditor_config.combine_consecutive
|
||||||
&& snapshots[real_pos].mod_type == MODTYPE_RECORD // a) also Recording
|
&& snapshots[real_pos].mod_type == MODTYPE_RECORD // a) also Recording
|
||||||
&& snapshots[real_pos].consecutive_tag == frame_of_change - 1 // b) consecutive (previous frame)
|
&& snapshots[real_pos].consecutive_tag == frame_of_change - 1 // b) consecutive (previous frame)
|
||||||
&& snapshots[real_pos].rec_joypad_diff_bits == inp.rec_joypad_diff_bits) // c) recorded same set of joysticks
|
&& snapshots[real_pos].rec_joypad_diff_bits == snap.rec_joypad_diff_bits) // c) recorded same set of joysticks
|
||||||
{
|
{
|
||||||
// clone this snapshot and continue chain of recorded frames
|
// clone this snapshot and continue chain of recorded frames
|
||||||
inp.jump_frame = snapshots[real_pos].jump_frame;
|
snap.jump_frame = snapshots[real_pos].jump_frame;
|
||||||
inp.start_frame = snapshots[real_pos].jump_frame;
|
snap.start_frame = snapshots[real_pos].jump_frame;
|
||||||
inp.end_frame = frame_of_change;
|
snap.end_frame = frame_of_change;
|
||||||
inp.consecutive_tag = frame_of_change;
|
snap.consecutive_tag = frame_of_change;
|
||||||
// add info which joypads were affected
|
// add info which joypads were affected
|
||||||
int num = joysticks_per_frame[inp.input_type];
|
int num = joysticks_per_frame[snap.input_type];
|
||||||
uint32 current_mask = 1;
|
uint32 current_mask = 1;
|
||||||
for (int i = 0; i < num; ++i)
|
for (int i = 0; i < num; ++i)
|
||||||
{
|
{
|
||||||
if ((inp.rec_joypad_diff_bits & current_mask))
|
if ((snap.rec_joypad_diff_bits & current_mask))
|
||||||
strcat(inp.description, joypadCaptions[i]);
|
strcat(snap.description, joypadCaptions[i]);
|
||||||
current_mask <<= 1;
|
current_mask <<= 1;
|
||||||
}
|
}
|
||||||
// add upper and lower frame to description
|
// add upper and lower frame to description
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
_itoa(inp.start_frame, framenum, 10);
|
_itoa(snap.start_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
strcat(inp.description, "-");
|
strcat(snap.description, "-");
|
||||||
_itoa(inp.end_frame, framenum, 10);
|
_itoa(snap.end_frame, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
// set hotchanges
|
// set hotchanges
|
||||||
if (taseditor_config.enable_hot_changes)
|
if (taseditor_config.enable_hot_changes)
|
||||||
{
|
{
|
||||||
inp.copyHotChanges(&snapshots[real_pos]);
|
snap.copyHotChanges(&snapshots[real_pos]);
|
||||||
inp.fillHotChanges(snapshots[real_pos], frame_of_change, frame_of_change);
|
snap.fillHotChanges(snapshots[real_pos], frame_of_change, frame_of_change);
|
||||||
}
|
}
|
||||||
// replace current snapshot with this cloned snapshot and truncate history here
|
// replace current snapshot with this cloned snapshot and truncate history here
|
||||||
snapshots[real_pos] = inp;
|
snapshots[real_pos] = snap;
|
||||||
history_total_items = history_cursor_pos+1;
|
history_total_items = history_cursor_pos+1;
|
||||||
UpdateHistoryList();
|
UpdateHistoryList();
|
||||||
RedrawHistoryList();
|
RedrawHistoryList();
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
// not consecutive - add new snapshot to history
|
// not consecutive - add new snapshot to history
|
||||||
inp.jump_frame = inp.start_frame = inp.end_frame = inp.consecutive_tag = frame_of_change;
|
snap.jump_frame = snap.start_frame = snap.end_frame = snap.consecutive_tag = frame_of_change;
|
||||||
// add info which joypads were affected
|
// add info which joypads were affected
|
||||||
int num = joysticks_per_frame[inp.input_type];
|
int num = joysticks_per_frame[snap.input_type];
|
||||||
uint32 current_mask = 1;
|
uint32 current_mask = 1;
|
||||||
for (int i = 0; i < num; ++i)
|
for (int i = 0; i < num; ++i)
|
||||||
{
|
{
|
||||||
if ((inp.rec_joypad_diff_bits & current_mask))
|
if ((snap.rec_joypad_diff_bits & current_mask))
|
||||||
strcat(inp.description, joypadCaptions[i]);
|
strcat(snap.description, joypadCaptions[i]);
|
||||||
current_mask <<= 1;
|
current_mask <<= 1;
|
||||||
}
|
}
|
||||||
// add upper frame to description
|
// add upper frame to description
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
_itoa(frame_of_change, framenum, 10);
|
_itoa(frame_of_change, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
// set hotchanges
|
// set hotchanges
|
||||||
if (taseditor_config.enable_hot_changes)
|
if (taseditor_config.enable_hot_changes)
|
||||||
{
|
{
|
||||||
inp.inheritHotChanges(&snapshots[real_pos]);
|
snap.inheritHotChanges(&snapshots[real_pos]);
|
||||||
inp.fillHotChanges(snapshots[real_pos], frame_of_change, frame_of_change);
|
snap.fillHotChanges(snapshots[real_pos], frame_of_change, frame_of_change);
|
||||||
}
|
}
|
||||||
AddItemToHistory(inp);
|
AddItemToHistory(snap);
|
||||||
}
|
}
|
||||||
branches.ChangesMadeSinceBranch();
|
branches.ChangesMadeSinceBranch();
|
||||||
}
|
}
|
||||||
void HISTORY::RegisterImport(MovieData& md, char* filename)
|
void HISTORY::RegisterImport(MovieData& md, char* filename)
|
||||||
{
|
{
|
||||||
// create new snapshot
|
// create new snapshot
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
inp.init(md, taseditor_config.enable_hot_changes, GetInputType(currMovieData));
|
snap.init(md, taseditor_config.enable_hot_changes, GetInputType(currMovieData));
|
||||||
// check if there are input differences from latest snapshot
|
// check if there are input differences from latest snapshot
|
||||||
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
||||||
int first_changes = inp.findFirstChange(snapshots[real_pos]);
|
int first_changes = snap.findFirstChange(snapshots[real_pos]);
|
||||||
if (first_changes >= 0)
|
if (first_changes >= 0)
|
||||||
{
|
{
|
||||||
// differences found
|
// differences found
|
||||||
inp.jump_frame = first_changes;
|
snap.jump_frame = first_changes;
|
||||||
inp.start_frame = 0;
|
snap.start_frame = 0;
|
||||||
inp.end_frame = inp.size - 1;
|
snap.end_frame = snap.size - 1;
|
||||||
// fill description:
|
// fill description:
|
||||||
inp.mod_type = MODTYPE_IMPORT;
|
snap.mod_type = MODTYPE_IMPORT;
|
||||||
strcat(inp.description, modCaptions[inp.mod_type]);
|
strcat(snap.description, modCaptions[snap.mod_type]);
|
||||||
// add filename to description
|
// add filename to description
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
strncat(inp.description, filename, SNAPSHOT_DESC_MAX_LENGTH - strlen(inp.description) - 1);
|
strncat(snap.description, filename, SNAPSHOT_DESC_MAX_LENGTH - strlen(snap.description) - 1);
|
||||||
if (taseditor_config.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
|
// 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(snapshots[real_pos], first_changes);
|
snap.fillHotChanges(snapshots[real_pos], first_changes);
|
||||||
}
|
}
|
||||||
AddItemToHistory(inp);
|
AddItemToHistory(snap);
|
||||||
inp.toMovie(currMovieData);
|
snap.toMovie(currMovieData);
|
||||||
piano_roll.UpdateItemCount();
|
piano_roll.UpdateItemCount();
|
||||||
branches.ChangesMadeSinceBranch();
|
branches.ChangesMadeSinceBranch();
|
||||||
project.SetProjectChanged();
|
project.SetProjectChanged();
|
||||||
|
@ -830,41 +830,41 @@ void HISTORY::RegisterImport(MovieData& md, char* filename)
|
||||||
int HISTORY::RegisterLuaChanges(const char* name, int start, bool InsertionDeletion_was_made)
|
int HISTORY::RegisterLuaChanges(const char* name, int start, bool InsertionDeletion_was_made)
|
||||||
{
|
{
|
||||||
// create new shanshot
|
// create new shanshot
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
inp.init(currMovieData, taseditor_config.enable_hot_changes);
|
snap.init(currMovieData, taseditor_config.enable_hot_changes);
|
||||||
// check if there are input differences from latest snapshot
|
// check if there are input differences from latest snapshot
|
||||||
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
|
||||||
int first_changes = inp.findFirstChange(snapshots[real_pos], start);
|
int first_changes = snap.findFirstChange(snapshots[real_pos], start);
|
||||||
if (first_changes >= 0)
|
if (first_changes >= 0)
|
||||||
{
|
{
|
||||||
// differences found
|
// differences found
|
||||||
// fill description:
|
// fill description:
|
||||||
inp.mod_type = MODTYPE_LUA_CHANGE;
|
snap.mod_type = MODTYPE_LUA_CHANGE;
|
||||||
if (name[0])
|
if (name[0])
|
||||||
{
|
{
|
||||||
// user provided custom name of operation
|
// user provided custom name of operation
|
||||||
strcat(inp.description, LuaCaptionPrefix);
|
strcat(snap.description, LuaCaptionPrefix);
|
||||||
strncat(inp.description, name, LUACHANGES_NAME_MAX_LEN);
|
strncat(snap.description, name, LUACHANGES_NAME_MAX_LEN);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
// set default name
|
// set default name
|
||||||
strcat(inp.description, modCaptions[inp.mod_type]);
|
strcat(snap.description, modCaptions[snap.mod_type]);
|
||||||
}
|
}
|
||||||
inp.jump_frame = first_changes;
|
snap.jump_frame = first_changes;
|
||||||
inp.start_frame = start;
|
snap.start_frame = start;
|
||||||
inp.end_frame = -1;
|
snap.end_frame = -1;
|
||||||
// add upper frame to description
|
// add upper frame to description
|
||||||
char framenum[11];
|
char framenum[11];
|
||||||
strcat(inp.description, " ");
|
strcat(snap.description, " ");
|
||||||
_itoa(first_changes, framenum, 10);
|
_itoa(first_changes, framenum, 10);
|
||||||
strcat(inp.description, framenum);
|
strcat(snap.description, framenum);
|
||||||
// set hotchanges
|
// set hotchanges
|
||||||
if (taseditor_config.enable_hot_changes)
|
if (taseditor_config.enable_hot_changes)
|
||||||
{
|
{
|
||||||
if (InsertionDeletion_was_made)
|
if (InsertionDeletion_was_made)
|
||||||
{
|
{
|
||||||
// do it hard way: take old hot_changes and insert/delete rows to create a snapshot that is comparable to inp
|
// do it hard way: take old hot_changes and insert/delete rows to create a snapshot that is comparable to the snap
|
||||||
if (inp.input_type == snapshots[real_pos].input_type)
|
if (snap.input_type == snapshots[real_pos].input_type)
|
||||||
{
|
{
|
||||||
// create temp copy of current snapshot (we need it as a container for hot_changes)
|
// create temp copy of current snapshot (we need it as a container for hot_changes)
|
||||||
SNAPSHOT hotchanges_snapshot = snapshots[real_pos];
|
SNAPSHOT hotchanges_snapshot = snapshots[real_pos];
|
||||||
|
@ -874,21 +874,21 @@ int HISTORY::RegisterLuaChanges(const char* name, int start, bool InsertionDelet
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
hotchanges_snapshot.has_hot_changes = true;
|
hotchanges_snapshot.has_hot_changes = true;
|
||||||
hotchanges_snapshot.hot_changes.resize(joysticks_per_frame[inp.input_type] * hotchanges_snapshot.size * HOTCHANGE_BYTES_PER_JOY);
|
hotchanges_snapshot.hot_changes.resize(joysticks_per_frame[snap.input_type] * hotchanges_snapshot.size * HOTCHANGE_BYTES_PER_JOY);
|
||||||
}
|
}
|
||||||
// insert/delete frames in hotchanges_snapshot, so that it will be the same size as inp
|
// insert/delete frames in hotchanges_snapshot, so that it will be the same size as the snap
|
||||||
taseditor_lua.InsertDelete_rows_to_Snaphot(hotchanges_snapshot);
|
taseditor_lua.InsertDelete_rows_to_Snaphot(hotchanges_snapshot);
|
||||||
inp.copyHotChanges(&hotchanges_snapshot);
|
snap.copyHotChanges(&hotchanges_snapshot);
|
||||||
inp.fillHotChanges(hotchanges_snapshot, first_changes);
|
snap.fillHotChanges(hotchanges_snapshot, first_changes);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
// easy way: inp.size is equal to currentsnapshot.size, so we can simply inherit hotchanges
|
// easy way: snap.size is equal to currentsnapshot.size, so we can simply inherit hotchanges
|
||||||
inp.inheritHotChanges(&snapshots[real_pos]);
|
snap.inheritHotChanges(&snapshots[real_pos]);
|
||||||
inp.fillHotChanges(snapshots[real_pos], first_changes);
|
snap.fillHotChanges(snapshots[real_pos], first_changes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AddItemToHistory(inp);
|
AddItemToHistory(snap);
|
||||||
branches.ChangesMadeSinceBranch();
|
branches.ChangesMadeSinceBranch();
|
||||||
}
|
}
|
||||||
return first_changes;
|
return first_changes;
|
||||||
|
@ -928,7 +928,7 @@ bool HISTORY::load(EMUFILE *is, bool really_load)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
int i = -1;
|
int i = -1;
|
||||||
SNAPSHOT inp;
|
SNAPSHOT snap;
|
||||||
BOOKMARK bookm;
|
BOOKMARK bookm;
|
||||||
// read "HISTORY" string
|
// read "HISTORY" string
|
||||||
char save_id[HISTORY_ID_LEN];
|
char save_id[HISTORY_ID_LEN];
|
||||||
|
@ -966,7 +966,7 @@ bool HISTORY::load(EMUFILE *is, bool really_load)
|
||||||
// and still need to skip some undo items
|
// and still need to skip some undo items
|
||||||
for (i = 0; i < num_items_to_skip; ++i)
|
for (i = 0; i < num_items_to_skip; ++i)
|
||||||
{
|
{
|
||||||
if (inp.skipLoad(is)) goto error;
|
if (snap.skipLoad(is)) goto error;
|
||||||
if (bookm.skipLoad(is)) goto error;
|
if (bookm.skipLoad(is)) goto error;
|
||||||
if (is->fseek(1, SEEK_CUR)) goto error; // backup_current_branch
|
if (is->fseek(1, SEEK_CUR)) goto error; // backup_current_branch
|
||||||
}
|
}
|
||||||
|
@ -986,7 +986,7 @@ bool HISTORY::load(EMUFILE *is, bool really_load)
|
||||||
// skip redo items if needed
|
// skip redo items if needed
|
||||||
for (; i < total; ++i)
|
for (; i < total; ++i)
|
||||||
{
|
{
|
||||||
if (inp.skipLoad(is)) goto error;
|
if (snap.skipLoad(is)) goto error;
|
||||||
if (bookm.skipLoad(is)) goto error;
|
if (bookm.skipLoad(is)) goto error;
|
||||||
if (is->fseek(1, SEEK_CUR)) goto error; // backup_current_branch
|
if (is->fseek(1, SEEK_CUR)) goto error; // backup_current_branch
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,8 +129,8 @@ public:
|
||||||
HWND hwndHistoryList;
|
HWND hwndHistoryList;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void AddItemToHistory(SNAPSHOT &inp, int cur_branch = 0);
|
void AddItemToHistory(SNAPSHOT &snap, int cur_branch = 0);
|
||||||
void AddItemToHistory(SNAPSHOT &inp, int cur_branch, BOOKMARK &bookm);
|
void AddItemToHistory(SNAPSHOT &snap, int cur_branch, BOOKMARK &bookm);
|
||||||
|
|
||||||
std::vector<SNAPSHOT> snapshots;
|
std::vector<SNAPSHOT> snapshots;
|
||||||
std::vector<BOOKMARK> backup_bookmarks;
|
std::vector<BOOKMARK> backup_bookmarks;
|
||||||
|
|
|
@ -19,7 +19,6 @@ Piano Roll - Piano Roll interface
|
||||||
* on demand: launches flashes in the Header
|
* on demand: launches flashes in the Header
|
||||||
* implements the working of mouse wheel: List scrolling, Playback cursor movement, Selection cursor movement, scrolling across gaps in Input/markers
|
* implements the working of mouse wheel: List scrolling, Playback cursor movement, Selection cursor movement, scrolling across gaps in Input/markers
|
||||||
* implements context menu on Right-click
|
* implements context menu on Right-click
|
||||||
* updates mouse cursor icon depending on item under cursor
|
|
||||||
* stores resources: save id, ids of columns, widths of columns, tables of colors, gradient of Hot Changes, gradient of Header flashings, timings of flashes, all fonts used in TAS Editor, images
|
* stores resources: save id, ids of columns, widths of columns, tables of colors, gradient of Hot Changes, gradient of Header flashings, timings of flashes, all fonts used in TAS Editor, images
|
||||||
------------------------------------------------------------------------------------ */
|
------------------------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
@ -355,40 +354,9 @@ void PIANO_ROLL::update()
|
||||||
}
|
}
|
||||||
column_under_mouse = info.iSubItem;
|
column_under_mouse = info.iSubItem;
|
||||||
}
|
}
|
||||||
// change mouse cursor depending on what it points at
|
|
||||||
LPCSTR cursor_icon = IDC_ARROW;
|
|
||||||
switch (drag_mode)
|
|
||||||
{
|
|
||||||
case DRAG_MODE_NONE:
|
|
||||||
{
|
|
||||||
// normal mouseover
|
|
||||||
//if (row_under_mouse >= 0 && (column_under_mouse == COLUMN_FRAMENUM || column_under_mouse == COLUMN_FRAMENUM2) && markers_manager.GetMarker(row_under_mouse))
|
|
||||||
// cursor_icon = IDC_SIZEALL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case DRAG_MODE_PLAYBACK:
|
|
||||||
{
|
|
||||||
// dragging Playback cursor - show either normal arrow or arrow+wait
|
|
||||||
if (playback.pause_frame)
|
|
||||||
cursor_icon = IDC_APPSTARTING;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case DRAG_MODE_MARKER:
|
|
||||||
{
|
|
||||||
// dragging Marker
|
|
||||||
cursor_icon = IDC_SIZEALL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case DRAG_MODE_OBSERVE:
|
|
||||||
case DRAG_MODE_SET:
|
|
||||||
case DRAG_MODE_UNSET:
|
|
||||||
case DRAG_MODE_SELECTION:
|
|
||||||
// show normal arrow
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
SetCursor(LoadCursor(0, cursor_icon));
|
|
||||||
// and don't check until mouse moves or Piano Roll scrolls
|
// and don't check until mouse moves or Piano Roll scrolls
|
||||||
must_check_item_under_mouse = false;
|
must_check_item_under_mouse = false;
|
||||||
|
taseditor_window.must_update_mouse_cursor = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// update state of Shift/Ctrl/Alt holding
|
// update state of Shift/Ctrl/Alt holding
|
||||||
|
@ -1820,4 +1788,3 @@ LRESULT APIENTRY MarkerDragBoxWndProc(HWND hwnd, UINT message, WPARAM wParam, LP
|
||||||
return DefWindowProc(hwnd, message, wParam, lParam);
|
return DefWindowProc(hwnd, message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -372,6 +372,7 @@ void PLAYBACK::RedrawMarker()
|
||||||
char num[11];
|
char num[11];
|
||||||
_itoa(shown_marker, num, 10);
|
_itoa(shown_marker, num, 10);
|
||||||
strcat(new_text, num);
|
strcat(new_text, num);
|
||||||
|
strcat(new_text, " ");
|
||||||
SetWindowText(hwndPlaybackMarker, new_text);
|
SetWindowText(hwndPlaybackMarker, new_text);
|
||||||
// change marker note
|
// change marker note
|
||||||
strcpy(new_text, markers_manager.GetNote(shown_marker).c_str());
|
strcpy(new_text, markers_manager.GetNote(shown_marker).c_str());
|
||||||
|
|
|
@ -189,6 +189,7 @@ void SELECTION::RedrawMarker()
|
||||||
char num[11];
|
char num[11];
|
||||||
_itoa(shown_marker, num, 10);
|
_itoa(shown_marker, num, 10);
|
||||||
strcat(new_text, num);
|
strcat(new_text, num);
|
||||||
|
strcat(new_text, " ");
|
||||||
SetWindowText(hwndSelectionMarker, new_text);
|
SetWindowText(hwndSelectionMarker, new_text);
|
||||||
// change marker note
|
// change marker note
|
||||||
strcpy(new_text, markers_manager.GetNote(shown_marker).c_str());
|
strcpy(new_text, markers_manager.GetNote(shown_marker).c_str());
|
||||||
|
|
|
@ -316,17 +316,17 @@ bool SNAPSHOT::skipLoad(EMUFILE *is)
|
||||||
}
|
}
|
||||||
|
|
||||||
// return true if any difference is found
|
// return true if any difference is found
|
||||||
bool SNAPSHOT::checkDiff(SNAPSHOT& inp)
|
bool SNAPSHOT::checkDiff(SNAPSHOT& snap)
|
||||||
{
|
{
|
||||||
if (size != inp.size) return true;
|
if (size != snap.size) return true;
|
||||||
if (findFirstChange(inp) >= 0)
|
if (findFirstChange(snap) >= 0)
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fills map of bits judging on which joypads differ (this function is only used by "Record" modtype)
|
// fills map of bits judging on which joypads differ (this function is only used by "Record" modtype)
|
||||||
void SNAPSHOT::fillJoypadsDiff(SNAPSHOT& inp, int frame)
|
void SNAPSHOT::fillJoypadsDiff(SNAPSHOT& snap, int frame)
|
||||||
{
|
{
|
||||||
rec_joypad_diff_bits = 0;
|
rec_joypad_diff_bits = 0;
|
||||||
uint32 current_mask = 1;
|
uint32 current_mask = 1;
|
||||||
|
@ -339,9 +339,9 @@ void SNAPSHOT::fillJoypadsDiff(SNAPSHOT& inp, int frame)
|
||||||
int pos = frame * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type];
|
int pos = frame * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type];
|
||||||
for (int i = 0; i < BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; ++i)
|
for (int i = 0; i < BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; ++i)
|
||||||
{
|
{
|
||||||
if (pos < (inp.size * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]))
|
if (pos < (snap.size * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]))
|
||||||
{
|
{
|
||||||
if (joysticks[pos+i] != inp.joysticks[pos+i]) rec_joypad_diff_bits |= current_mask;
|
if (joysticks[pos+i] != snap.joysticks[pos+i]) rec_joypad_diff_bits |= current_mask;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
if (joysticks[pos+i]) rec_joypad_diff_bits |= current_mask;
|
if (joysticks[pos+i]) rec_joypad_diff_bits |= current_mask;
|
||||||
|
@ -354,33 +354,33 @@ void SNAPSHOT::fillJoypadsDiff(SNAPSHOT& inp, int frame)
|
||||||
}
|
}
|
||||||
|
|
||||||
// return number of first frame of difference between two snapshots
|
// return number of first frame of difference between two snapshots
|
||||||
int SNAPSHOT::findFirstChange(SNAPSHOT& inp, int start, int end)
|
int SNAPSHOT::findFirstChange(SNAPSHOT& snap, int start, int end)
|
||||||
{
|
{
|
||||||
// if these two snapshots have different input_type (abnormal situation) then refuse to search and return the beginning
|
// if these two snapshots have different input_type (abnormal situation) then refuse to search and return the beginning
|
||||||
if (inp.input_type != input_type)
|
if (snap.input_type != input_type)
|
||||||
return start;
|
return start;
|
||||||
|
|
||||||
// search for differences to the specified end (or to the end of this snapshot)
|
// search for differences to the specified end (or to the end of this snapshot)
|
||||||
if (end < 0 || end >= size) end = size-1;
|
if (end < 0 || end >= size) end = size-1;
|
||||||
int inp_end = inp.size;
|
int snap_end = snap.size;
|
||||||
switch(input_type)
|
switch(input_type)
|
||||||
{
|
{
|
||||||
case INPUT_TYPE_FOURSCORE:
|
case INPUT_TYPE_FOURSCORE:
|
||||||
{
|
{
|
||||||
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
||||||
{
|
{
|
||||||
// return the frame if found different byte, or found emptiness in inp when there's non-zero value here
|
// return the frame if found different byte, or found emptiness in the snap when there's non-zero value here
|
||||||
if (frame < inp_end)
|
if (frame < snap_end)
|
||||||
{
|
{
|
||||||
if (joysticks[pos] != inp.joysticks[pos]) return frame;
|
if (joysticks[pos] != snap.joysticks[pos]) return frame;
|
||||||
pos++;
|
pos++;
|
||||||
if (joysticks[pos] != inp.joysticks[pos]) return frame;
|
if (joysticks[pos] != snap.joysticks[pos]) return frame;
|
||||||
pos++;
|
pos++;
|
||||||
if (joysticks[pos] != inp.joysticks[pos]) return frame;
|
if (joysticks[pos] != snap.joysticks[pos]) return frame;
|
||||||
pos++;
|
pos++;
|
||||||
if (joysticks[pos] != inp.joysticks[pos]) return frame;
|
if (joysticks[pos] != snap.joysticks[pos]) return frame;
|
||||||
pos++;
|
pos++;
|
||||||
if (commands[frame] != inp.commands[frame]) return frame;
|
if (commands[frame] != snap.commands[frame]) return frame;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
if (joysticks[pos++]) return frame;
|
if (joysticks[pos++]) return frame;
|
||||||
|
@ -396,14 +396,14 @@ int SNAPSHOT::findFirstChange(SNAPSHOT& inp, int start, int end)
|
||||||
{
|
{
|
||||||
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
||||||
{
|
{
|
||||||
// return the frame if found different byte, or found emptiness in inp when there's non-zero value here
|
// return the frame if found different byte, or found emptiness in the snap when there's non-zero value here
|
||||||
if (frame < inp_end)
|
if (frame < snap_end)
|
||||||
{
|
{
|
||||||
if (joysticks[pos] != inp.joysticks[pos]) return frame;
|
if (joysticks[pos] != snap.joysticks[pos]) return frame;
|
||||||
pos++;
|
pos++;
|
||||||
if (joysticks[pos] != inp.joysticks[pos]) return frame;
|
if (joysticks[pos] != snap.joysticks[pos]) return frame;
|
||||||
pos++;
|
pos++;
|
||||||
if (commands[frame] != inp.commands[frame]) return frame;
|
if (commands[frame] != snap.commands[frame]) return frame;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
if (joysticks[pos++]) return frame;
|
if (joysticks[pos++]) return frame;
|
||||||
|
@ -417,12 +417,12 @@ int SNAPSHOT::findFirstChange(SNAPSHOT& inp, int start, int end)
|
||||||
{
|
{
|
||||||
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
||||||
{
|
{
|
||||||
// return the frame if found different byte, or found emptiness in inp when there's non-zero value here
|
// return the frame if found different byte, or found emptiness in the snap when there's non-zero value here
|
||||||
if (frame < inp_end)
|
if (frame < snap_end)
|
||||||
{
|
{
|
||||||
if (joysticks[pos] != inp.joysticks[pos]) return frame;
|
if (joysticks[pos] != snap.joysticks[pos]) return frame;
|
||||||
pos++;
|
pos++;
|
||||||
if (commands[frame] != inp.commands[frame]) return frame;
|
if (commands[frame] != snap.commands[frame]) return frame;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
if (joysticks[pos++]) return frame;
|
if (joysticks[pos++]) return frame;
|
||||||
|
@ -433,7 +433,7 @@ int SNAPSHOT::findFirstChange(SNAPSHOT& inp, int start, int end)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if current size is less then previous, return last frame (=size-1) as the frame of difference
|
// if current size is less then previous, return last frame (=size-1) as the frame of difference
|
||||||
if (size < inp_end) return size-1;
|
if (size < snap_end) return size-1;
|
||||||
// no changes were found
|
// no changes were found
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -759,35 +759,35 @@ void SNAPSHOT::inheritHotChanges_PasteInsert(SNAPSHOT* source_of_hotchanges, Sel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void SNAPSHOT::fillHotChanges(SNAPSHOT& inp, int start, int end)
|
void SNAPSHOT::fillHotChanges(SNAPSHOT& snap, int start, int end)
|
||||||
{
|
{
|
||||||
// if these two snapshots have different input_type (abnormal situation) then refuse to compare
|
// if these two snapshots have different input_type (abnormal situation) then refuse to compare
|
||||||
if (inp.input_type != input_type)
|
if (snap.input_type != input_type)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// compare snapshots to the specified end (or to the end of this snapshot)
|
// compare snapshots to the specified end (or to the end of this snapshot)
|
||||||
if (end < 0 || end >= size) end = size-1;
|
if (end < 0 || end >= size) end = size-1;
|
||||||
int inp_end = inp.size;
|
int snap_end = snap.size;
|
||||||
switch(input_type)
|
switch(input_type)
|
||||||
{
|
{
|
||||||
case INPUT_TYPE_FOURSCORE:
|
case INPUT_TYPE_FOURSCORE:
|
||||||
{
|
{
|
||||||
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
||||||
{
|
{
|
||||||
// consider changed if found different byte, or found emptiness in inp when there's non-zero value here
|
// consider changed if found different byte, or found emptiness in the snap when there's non-zero value here
|
||||||
if (frame < inp_end)
|
if (frame < snap_end)
|
||||||
{
|
{
|
||||||
if (joysticks[pos] != inp.joysticks[pos])
|
if (joysticks[pos] != snap.joysticks[pos])
|
||||||
SetMaxHotChange_Bits(frame, 0, joysticks[pos] ^ inp.joysticks[pos]);
|
SetMaxHotChange_Bits(frame, 0, joysticks[pos] ^ snap.joysticks[pos]);
|
||||||
pos++;
|
pos++;
|
||||||
if (joysticks[pos] != inp.joysticks[pos])
|
if (joysticks[pos] != snap.joysticks[pos])
|
||||||
SetMaxHotChange_Bits(frame, 1, joysticks[pos] ^ inp.joysticks[pos]);
|
SetMaxHotChange_Bits(frame, 1, joysticks[pos] ^ snap.joysticks[pos]);
|
||||||
pos++;
|
pos++;
|
||||||
if (joysticks[pos] != inp.joysticks[pos])
|
if (joysticks[pos] != snap.joysticks[pos])
|
||||||
SetMaxHotChange_Bits(frame, 2, joysticks[pos] ^ inp.joysticks[pos]);
|
SetMaxHotChange_Bits(frame, 2, joysticks[pos] ^ snap.joysticks[pos]);
|
||||||
pos++;
|
pos++;
|
||||||
if (joysticks[pos] != inp.joysticks[pos])
|
if (joysticks[pos] != snap.joysticks[pos])
|
||||||
SetMaxHotChange_Bits(frame, 3, joysticks[pos] ^ inp.joysticks[pos]);
|
SetMaxHotChange_Bits(frame, 3, joysticks[pos] ^ snap.joysticks[pos]);
|
||||||
pos++;
|
pos++;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
|
@ -811,14 +811,14 @@ void SNAPSHOT::fillHotChanges(SNAPSHOT& inp, int start, int end)
|
||||||
{
|
{
|
||||||
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
||||||
{
|
{
|
||||||
// consider changed if found different byte, or found emptiness in inp when there's non-zero value here
|
// consider changed if found different byte, or found emptiness in the snap when there's non-zero value here
|
||||||
if (frame < inp_end)
|
if (frame < snap_end)
|
||||||
{
|
{
|
||||||
if (joysticks[pos] != inp.joysticks[pos])
|
if (joysticks[pos] != snap.joysticks[pos])
|
||||||
SetMaxHotChange_Bits(frame, 0, joysticks[pos] ^ inp.joysticks[pos]);
|
SetMaxHotChange_Bits(frame, 0, joysticks[pos] ^ snap.joysticks[pos]);
|
||||||
pos++;
|
pos++;
|
||||||
if (joysticks[pos] != inp.joysticks[pos])
|
if (joysticks[pos] != snap.joysticks[pos])
|
||||||
SetMaxHotChange_Bits(frame, 1, joysticks[pos] ^ inp.joysticks[pos]);
|
SetMaxHotChange_Bits(frame, 1, joysticks[pos] ^ snap.joysticks[pos]);
|
||||||
pos++;
|
pos++;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
|
@ -836,11 +836,11 @@ void SNAPSHOT::fillHotChanges(SNAPSHOT& inp, int start, int end)
|
||||||
{
|
{
|
||||||
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
for (int frame = start, pos = start * BYTES_PER_JOYSTICK * joysticks_per_frame[input_type]; frame <= end; ++frame)
|
||||||
{
|
{
|
||||||
// consider changed if found different byte, or found emptiness in inp when there's non-zero value here
|
// consider changed if found different byte, or found emptiness in the snap when there's non-zero value here
|
||||||
if (frame < inp_end)
|
if (frame < snap_end)
|
||||||
{
|
{
|
||||||
if (joysticks[pos] != inp.joysticks[pos])
|
if (joysticks[pos] != snap.joysticks[pos])
|
||||||
SetMaxHotChange_Bits(frame, 0, joysticks[pos] ^ inp.joysticks[pos]);
|
SetMaxHotChange_Bits(frame, 0, joysticks[pos] ^ snap.joysticks[pos]);
|
||||||
pos++;
|
pos++;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,10 +30,10 @@ public:
|
||||||
bool load(EMUFILE *is);
|
bool load(EMUFILE *is);
|
||||||
bool skipLoad(EMUFILE *is);
|
bool skipLoad(EMUFILE *is);
|
||||||
|
|
||||||
bool checkDiff(SNAPSHOT& inp);
|
bool checkDiff(SNAPSHOT& snap);
|
||||||
void fillJoypadsDiff(SNAPSHOT& inp, int frame);
|
void fillJoypadsDiff(SNAPSHOT& snap, int frame);
|
||||||
|
|
||||||
int findFirstChange(SNAPSHOT& inp, int start = 0, int end = -1);
|
int findFirstChange(SNAPSHOT& snap, int start = 0, int end = -1);
|
||||||
int findFirstChange(MovieData& md, int start = 0, int end = -1);
|
int findFirstChange(MovieData& md, int start = 0, int end = -1);
|
||||||
|
|
||||||
int GetJoystickInfo(int frame, int joy);
|
int GetJoystickInfo(int frame, int joy);
|
||||||
|
@ -48,7 +48,7 @@ public:
|
||||||
void inheritHotChanges_InsertSelection(SNAPSHOT* source_of_hotchanges);
|
void inheritHotChanges_InsertSelection(SNAPSHOT* source_of_hotchanges);
|
||||||
void inheritHotChanges_InsertNum(SNAPSHOT* source_of_hotchanges, int start, int frames);
|
void inheritHotChanges_InsertNum(SNAPSHOT* source_of_hotchanges, int start, int frames);
|
||||||
void inheritHotChanges_PasteInsert(SNAPSHOT* source_of_hotchanges, SelectionFrames& inserted_set);
|
void inheritHotChanges_PasteInsert(SNAPSHOT* source_of_hotchanges, SelectionFrames& inserted_set);
|
||||||
void fillHotChanges(SNAPSHOT& inp, int start = 0, int end = -1);
|
void fillHotChanges(SNAPSHOT& snap, int start = 0, int end = -1);
|
||||||
|
|
||||||
void SetMaxHotChange_Bits(int frame, int joypad, uint8 joy_bits);
|
void SetMaxHotChange_Bits(int frame, int joypad, uint8 joy_bits);
|
||||||
void SetMaxHotChange(int frame, int absolute_button);
|
void SetMaxHotChange(int frame, int absolute_button);
|
||||||
|
|
|
@ -125,6 +125,7 @@ bool TASEDITOR_PROJECT::save(const char* different_name, bool save_binary, bool
|
||||||
{
|
{
|
||||||
// change cursor to hourglass
|
// change cursor to hourglass
|
||||||
SetCursor(LoadCursor(0, IDC_WAIT));
|
SetCursor(LoadCursor(0, IDC_WAIT));
|
||||||
|
|
||||||
currMovieData.loadFrameCount = currMovieData.records.size();
|
currMovieData.loadFrameCount = currMovieData.records.size();
|
||||||
currMovieData.emuVersion = FCEU_VERSION_NUMERIC;
|
currMovieData.emuVersion = FCEU_VERSION_NUMERIC;
|
||||||
currMovieData.dump(ofs, save_binary);
|
currMovieData.dump(ofs, save_binary);
|
||||||
|
@ -151,7 +152,7 @@ bool TASEDITOR_PROJECT::save(const char* different_name, bool save_binary, bool
|
||||||
if (!different_name)
|
if (!different_name)
|
||||||
this->reset();
|
this->reset();
|
||||||
// restore cursor
|
// restore cursor
|
||||||
piano_roll.must_check_item_under_mouse = true;
|
taseditor_window.must_update_mouse_cursor = true;
|
||||||
return true;
|
return true;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
|
@ -171,6 +172,7 @@ bool TASEDITOR_PROJECT::load(char* fullname)
|
||||||
|
|
||||||
// change cursor to hourglass
|
// change cursor to hourglass
|
||||||
SetCursor(LoadCursor(0, IDC_WAIT));
|
SetCursor(LoadCursor(0, IDC_WAIT));
|
||||||
|
|
||||||
MovieData tempMovieData = MovieData();
|
MovieData tempMovieData = MovieData();
|
||||||
extern bool LoadFM2(MovieData& movieData, EMUFILE* fp, int size, bool stopAfterHeader);
|
extern bool LoadFM2(MovieData& movieData, EMUFILE* fp, int size, bool stopAfterHeader);
|
||||||
if (LoadFM2(tempMovieData, &ifs, ifs.size(), false))
|
if (LoadFM2(tempMovieData, &ifs, ifs.size(), false))
|
||||||
|
@ -270,7 +272,7 @@ bool TASEDITOR_PROJECT::load(char* fullname)
|
||||||
reset();
|
reset();
|
||||||
RenameProject(fullname);
|
RenameProject(fullname);
|
||||||
// restore mouse cursor shape
|
// restore mouse cursor shape
|
||||||
piano_roll.must_check_item_under_mouse = true;
|
taseditor_window.must_update_mouse_cursor = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,10 @@ Window - User Interface
|
||||||
[Singleton]
|
[Singleton]
|
||||||
|
|
||||||
* implements all operations with TAS Editor window: creating, redrawing, resizing, moving, tooltips, clicks
|
* implements all operations with TAS Editor window: creating, redrawing, resizing, moving, tooltips, clicks
|
||||||
|
* subclasses all buttons and checkboxes in TAS Editor window GUI in order to disable Spacebar key and process Middle clicks
|
||||||
* processes OS messages and sends signals from user to TAS Editor modules (also implements some minor commands on-site, like Greenzone capacity dialog and such)
|
* processes OS messages and sends signals from user to TAS Editor modules (also implements some minor commands on-site, like Greenzone capacity dialog and such)
|
||||||
* switches off/on emulator's keyboard input when the window loses/gains focus
|
* switches off/on emulator's keyboard input when the window loses/gains focus
|
||||||
* on demand: updates the window caption
|
* on demand: updates the window caption; updates mouse cursor icon
|
||||||
* updates all checkboxes and menu items when some settings change
|
* updates all checkboxes and menu items when some settings change
|
||||||
* stores info about 10 last projects (File->Recent) and updates it when saving/loading files
|
* stores info about 10 last projects (File->Recent) and updates it when saving/loading files
|
||||||
* stores resources: window caption, help filename, size and other properties of all GUI items
|
* stores resources: window caption, help filename, size and other properties of all GUI items
|
||||||
|
@ -45,6 +46,7 @@ extern EDITOR editor;
|
||||||
extern SPLICER splicer;
|
extern SPLICER splicer;
|
||||||
extern MARKERS_MANAGER markers_manager;
|
extern MARKERS_MANAGER markers_manager;
|
||||||
extern BOOKMARKS bookmarks;
|
extern BOOKMARKS bookmarks;
|
||||||
|
extern BRANCHES branches;
|
||||||
extern HISTORY history;
|
extern HISTORY history;
|
||||||
extern POPUP_DISPLAY popup_display;
|
extern POPUP_DISPLAY popup_display;
|
||||||
|
|
||||||
|
@ -57,7 +59,63 @@ extern char* GetKeyComboName(int c);
|
||||||
extern BOOL CALLBACK FindNoteProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
extern BOOL CALLBACK FindNoteProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
extern BOOL CALLBACK AboutProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
extern BOOL CALLBACK AboutProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
|
// main window wndproc
|
||||||
BOOL CALLBACK WndprocTasEditor(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
BOOL CALLBACK WndprocTasEditor(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
|
// wndprocs for "Marker X" text fields
|
||||||
|
LRESULT APIENTRY IDC_PLAYBACK_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_SELECTION_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
WNDPROC IDC_PLAYBACK_MARKER_oldWndProc = 0, IDC_SELECTION_MARKER_oldWndProc = 0;
|
||||||
|
// wndprocs for all buttons and checkboxes
|
||||||
|
LRESULT APIENTRY IDC_PROGRESS_BUTTON_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_BRANCHES_BUTTON_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY TASEDITOR_REWIND_FULL_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY TASEDITOR_REWIND_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY TASEDITOR_PLAYSTOP_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY TASEDITOR_FORWARD_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY TASEDITOR_FORWARD_FULL_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY CHECK_FOLLOW_CURSOR_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY CHECK_AUTORESTORE_PLAYBACK_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_RADIO_ALL_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_RADIO_1P_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_RADIO_2P_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_RADIO_3P_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_RADIO_4P_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_SUPERIMPOSE_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_USEPATTERN_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY TASEDITOR_PREV_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY TASEDITOR_FIND_BEST_SIMILAR_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY TASEDITOR_FIND_NEXT_SIMILAR_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY TASEDITOR_NEXT_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY CHECK_TURBO_SEEK_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_RECORDING_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY TASEDITOR_RUN_MANUAL_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
LRESULT APIENTRY IDC_RUN_AUTO_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
// variables storing old wndprocs
|
||||||
|
WNDPROC
|
||||||
|
IDC_PROGRESS_BUTTON_oldWndProc = 0,
|
||||||
|
IDC_BRANCHES_BUTTON_oldWndProc = 0,
|
||||||
|
TASEDITOR_REWIND_FULL_oldWndProc = 0,
|
||||||
|
TASEDITOR_REWIND_oldWndProc = 0,
|
||||||
|
TASEDITOR_PLAYSTOP_oldWndProc = 0,
|
||||||
|
TASEDITOR_FORWARD_oldWndProc = 0,
|
||||||
|
TASEDITOR_FORWARD_FULL_oldWndProc = 0,
|
||||||
|
CHECK_FOLLOW_CURSOR_oldWndProc = 0,
|
||||||
|
CHECK_AUTORESTORE_PLAYBACK_oldWndProc = 0,
|
||||||
|
IDC_RADIO_ALL_oldWndProc = 0,
|
||||||
|
IDC_RADIO_1P_oldWndProc = 0,
|
||||||
|
IDC_RADIO_2P_oldWndProc = 0,
|
||||||
|
IDC_RADIO_3P_oldWndProc = 0,
|
||||||
|
IDC_RADIO_4P_oldWndProc = 0,
|
||||||
|
IDC_SUPERIMPOSE_oldWndProc = 0,
|
||||||
|
IDC_USEPATTERN_oldWndProc = 0,
|
||||||
|
TASEDITOR_PREV_MARKER_oldWndProc = 0,
|
||||||
|
TASEDITOR_FIND_BEST_SIMILAR_MARKER_oldWndProc = 0,
|
||||||
|
TASEDITOR_FIND_NEXT_SIMILAR_MARKER_oldWndProc = 0,
|
||||||
|
TASEDITOR_NEXT_MARKER_oldWndProc = 0,
|
||||||
|
CHECK_TURBO_SEEK_oldWndProc = 0,
|
||||||
|
IDC_RECORDING_oldWndProc = 0,
|
||||||
|
TASEDITOR_RUN_MANUAL_oldWndProc = 0,
|
||||||
|
IDC_RUN_AUTO_oldWndProc = 0;
|
||||||
|
|
||||||
// Recent Menu
|
// Recent Menu
|
||||||
HMENU recent_projects_menu;
|
HMENU recent_projects_menu;
|
||||||
|
@ -84,15 +142,15 @@ Window_items_struct window_items[TASEDITOR_WINDOW_TOTAL_ITEMS] = {
|
||||||
IDC_BOOKMARKS_BOX, -1, 0, 0, 0, "", "", false, 0, 0,
|
IDC_BOOKMARKS_BOX, -1, 0, 0, 0, "", "", false, 0, 0,
|
||||||
IDC_HISTORY_BOX, -1, 0, 0, -1, "", "", false, 0, 0,
|
IDC_HISTORY_BOX, -1, 0, 0, -1, "", "", false, 0, 0,
|
||||||
TASEDITOR_REWIND_FULL, -1, 0, 0, 0, "Send Playback to previous Marker (mouse: Shift+Wheel up) (hotkey: Shift+PageUp)", "", false, 0, 0,
|
TASEDITOR_REWIND_FULL, -1, 0, 0, 0, "Send Playback to previous Marker (mouse: Shift+Wheel up) (hotkey: Shift+PageUp)", "", false, 0, 0,
|
||||||
TASEDITOR_REWIND, -1, 0, 0, 0, "Rewind 1 frame (mouse: Right button+Wheel up) (hotkey: Shift+Up)", "", false, 0, 0, // EMUCMD_TASEDITOR_REWIND
|
TASEDITOR_REWIND, -1, 0, 0, 0, "Rewind 1 frame (mouse: Right button+Wheel up) (hotkey: Shift+Up)", "", false, EMUCMD_TASEDITOR_REWIND, 0,
|
||||||
TASEDITOR_PLAYSTOP, -1, 0, 0, 0, "Pause/Unpause Emulation (mouse: Middle button)", "", false, EMUCMD_PAUSE, 0,
|
TASEDITOR_PLAYSTOP, -1, 0, 0, 0, "Pause/Unpause Emulation (mouse: Middle button)", "", false, EMUCMD_PAUSE, 0,
|
||||||
TASEDITOR_FORWARD, -1, 0, 0, 0, "Advance 1 frame (mouse: Right button+Wheel down) (hotkey: Shift+Down)", "", false, 0, 0,
|
TASEDITOR_FORWARD, -1, 0, 0, 0, "Advance 1 frame (mouse: Right button+Wheel down) (hotkey: Shift+Down)", "", false, EMUCMD_FRAME_ADVANCE, 0,
|
||||||
TASEDITOR_FORWARD_FULL, -1, 0, 0, 0, "Send Playback to next Marker (mouse: Shift+Wheel down) (hotkey: Shift+PageDown)", "", false, 0, 0,
|
TASEDITOR_FORWARD_FULL, -1, 0, 0, 0, "Send Playback to next Marker (mouse: Shift+Wheel down) (hotkey: Shift+PageDown)", "", false, 0, 0,
|
||||||
IDC_PROGRESS1, -1, 0, 0, 0, "", "", false, 0, 0,
|
IDC_PROGRESS1, -1, 0, 0, 0, "", "", false, 0, 0,
|
||||||
CHECK_FOLLOW_CURSOR, -1, 0, 0, 0, "The Piano Roll will follow Playback cursor movements", "", false, 0, 0,
|
CHECK_FOLLOW_CURSOR, -1, 0, 0, 0, "The Piano Roll will follow Playback cursor movements", "", false, 0, 0,
|
||||||
CHECK_AUTORESTORE_PLAYBACK, -1, 0, 0, 0, "If you change input above Playback, cursor will run to where it was before change", "", false, 0, 0,
|
CHECK_AUTORESTORE_PLAYBACK, -1, 0, 0, 0, "When you change input above Playback cursor, the cursor returns to where it was before the change", "", false, 0, 0,
|
||||||
IDC_BOOKMARKSLIST, -1, 0, 0, 0, "Right click = set Bookmark, Left click = jump to Bookmark or load Branch", "", false, 0, 0,
|
IDC_BOOKMARKSLIST, -1, 0, 0, 0, "Right click = set Bookmark, Left click = jump to Bookmark or load Branch", "", false, 0, 0,
|
||||||
IDC_HISTORYLIST, -1, 0, 0, -1, "Click to revert the movie back to that time", "", false, 0, 0,
|
IDC_HISTORYLIST, -1, 0, 0, -1, "Click to revert the project back to that time", "", false, 0, 0,
|
||||||
IDC_RADIO_ALL, -1, 0, 0, 0, "", "", false, 0, 0,
|
IDC_RADIO_ALL, -1, 0, 0, 0, "", "", false, 0, 0,
|
||||||
IDC_RADIO_1P, -1, 0, 0, 0, "", "", false, 0, 0,
|
IDC_RADIO_1P, -1, 0, 0, 0, "", "", false, 0, 0,
|
||||||
IDC_RADIO_2P, -1, 0, 0, 0, "", "", false, 0, 0,
|
IDC_RADIO_2P, -1, 0, 0, 0, "", "", false, 0, 0,
|
||||||
|
@ -104,13 +162,11 @@ Window_items_struct window_items[TASEDITOR_WINDOW_TOTAL_ITEMS] = {
|
||||||
TASEDITOR_FIND_BEST_SIMILAR_MARKER, -1, -1, 0, -1, "Auto-search for Marker Note", "", false, 0, 0,
|
TASEDITOR_FIND_BEST_SIMILAR_MARKER, -1, -1, 0, -1, "Auto-search for Marker Note", "", false, 0, 0,
|
||||||
TASEDITOR_FIND_NEXT_SIMILAR_MARKER, -1, -1, 0, -1, "Continue Auto-search", "", false, 0, 0,
|
TASEDITOR_FIND_NEXT_SIMILAR_MARKER, -1, -1, 0, -1, "Continue Auto-search", "", false, 0, 0,
|
||||||
TASEDITOR_NEXT_MARKER, -1, -1, 0, -1, "Send Selection to next Marker (mouse: Ctrl+Wheel up) (hotkey: Ctrl+PageDown)", "", false, 0, 0,
|
TASEDITOR_NEXT_MARKER, -1, -1, 0, -1, "Send Selection to next Marker (mouse: Ctrl+Wheel up) (hotkey: Ctrl+PageDown)", "", false, 0, 0,
|
||||||
IDC_JUMP_PLAYBACK_BUTTON, 0, 0, 0, 0, "Click here to scroll Piano Roll to Playback cursor (hotkey: tap Shift twice)", "", false, 0, 0,
|
|
||||||
IDC_PLAYBACK_MARKER_EDIT, 0, 0, -1, 0, "Click to edit text", "", false, 0, 0,
|
IDC_PLAYBACK_MARKER_EDIT, 0, 0, -1, 0, "Click to edit text", "", false, 0, 0,
|
||||||
IDC_PLAYBACK_MARKER, 0, 0, 0, 0, "", "", false, 0, 0,
|
IDC_PLAYBACK_MARKER, 0, 0, 0, 0, "Click here to scroll Piano Roll to Playback cursor (hotkey: tap Shift twice)", "", true, 0, 0,
|
||||||
IDC_JUMP_SELECTION_BUTTON, 0, -1, 0, -1, "Click here to scroll Piano Roll to Selection (hotkey: tap Ctrl twice)", "", false, 0, 0,
|
|
||||||
IDC_SELECTION_MARKER_EDIT, 0, -1, -1, -1, "Click to edit text", "", false, 0, 0,
|
IDC_SELECTION_MARKER_EDIT, 0, -1, -1, -1, "Click to edit text", "", false, 0, 0,
|
||||||
IDC_SELECTION_MARKER, 0, -1, 0, -1, "", "", false, 0, 0,
|
IDC_SELECTION_MARKER, 0, -1, 0, -1, "Click here to scroll Piano Roll to Selection (hotkey: tap Ctrl twice)", "", true, 0, 0,
|
||||||
IDC_BRANCHES_BITMAP, -1, 0, 0, 0, "This window visualizes the hierarchy of your Branches", "", false, 0, 0,
|
IDC_BRANCHES_BITMAP, -1, 0, 0, 0, "Click on a Bookmark to send Playback cursor there, double-click to load its Branch", "", false, 0, 0,
|
||||||
CHECK_TURBO_SEEK, -1, 0, 0, 0, "Uncheck when you need to watch seeking in slow motion", "", false, 0, 0,
|
CHECK_TURBO_SEEK, -1, 0, 0, 0, "Uncheck when you need to watch seeking in slow motion", "", false, 0, 0,
|
||||||
IDC_TEXT_SELECTION, -1, 0, 0, 0, "Current size of Selection", "", true, 0, 0,
|
IDC_TEXT_SELECTION, -1, 0, 0, 0, "Current size of Selection", "", true, 0, 0,
|
||||||
IDC_TEXT_CLIPBOARD, -1, 0, 0, 0, "Current size of Input in the Clipboard", "", true, 0, 0,
|
IDC_TEXT_CLIPBOARD, -1, 0, 0, 0, "Current size of Input in the Clipboard", "", true, 0, 0,
|
||||||
|
@ -205,6 +261,34 @@ void TASEDITOR_WINDOW::init()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UpdateTooltips();
|
UpdateTooltips();
|
||||||
|
// subclass "Marker X" text fields
|
||||||
|
IDC_PLAYBACK_MARKER_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_PLAYBACK_MARKER), GWL_WNDPROC, (LONG)IDC_PLAYBACK_MARKER_WndProc);
|
||||||
|
IDC_SELECTION_MARKER_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_SELECTION_MARKER), GWL_WNDPROC, (LONG)IDC_SELECTION_MARKER_WndProc);
|
||||||
|
// subclass all buttons
|
||||||
|
IDC_PROGRESS_BUTTON_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_PROGRESS_BUTTON), GWL_WNDPROC, (LONG)IDC_PROGRESS_BUTTON_WndProc);
|
||||||
|
IDC_BRANCHES_BUTTON_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_BRANCHES_BUTTON), GWL_WNDPROC, (LONG)IDC_BRANCHES_BUTTON_WndProc);
|
||||||
|
TASEDITOR_REWIND_FULL_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, TASEDITOR_REWIND_FULL), GWL_WNDPROC, (LONG)TASEDITOR_REWIND_FULL_WndProc);
|
||||||
|
TASEDITOR_REWIND_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, TASEDITOR_REWIND), GWL_WNDPROC, (LONG)TASEDITOR_REWIND_WndProc);
|
||||||
|
TASEDITOR_PLAYSTOP_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, TASEDITOR_PLAYSTOP), GWL_WNDPROC, (LONG)TASEDITOR_PLAYSTOP_WndProc);
|
||||||
|
TASEDITOR_FORWARD_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, TASEDITOR_FORWARD), GWL_WNDPROC, (LONG)TASEDITOR_FORWARD_WndProc);
|
||||||
|
TASEDITOR_FORWARD_FULL_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, TASEDITOR_FORWARD_FULL), GWL_WNDPROC, (LONG)TASEDITOR_FORWARD_FULL_WndProc);
|
||||||
|
CHECK_FOLLOW_CURSOR_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, CHECK_FOLLOW_CURSOR), GWL_WNDPROC, (LONG)CHECK_FOLLOW_CURSOR_WndProc);
|
||||||
|
CHECK_AUTORESTORE_PLAYBACK_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, CHECK_AUTORESTORE_PLAYBACK), GWL_WNDPROC, (LONG)CHECK_AUTORESTORE_PLAYBACK_WndProc);
|
||||||
|
IDC_RADIO_ALL_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_RADIO_ALL), GWL_WNDPROC, (LONG)IDC_RADIO_ALL_WndProc);
|
||||||
|
IDC_RADIO_1P_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_RADIO_1P), GWL_WNDPROC, (LONG)IDC_RADIO_1P_WndProc);
|
||||||
|
IDC_RADIO_2P_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_RADIO_2P), GWL_WNDPROC, (LONG)IDC_RADIO_2P_WndProc);
|
||||||
|
IDC_RADIO_3P_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_RADIO_3P), GWL_WNDPROC, (LONG)IDC_RADIO_3P_WndProc);
|
||||||
|
IDC_RADIO_4P_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_RADIO_4P), GWL_WNDPROC, (LONG)IDC_RADIO_4P_WndProc);
|
||||||
|
IDC_SUPERIMPOSE_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_SUPERIMPOSE), GWL_WNDPROC, (LONG)IDC_SUPERIMPOSE_WndProc);
|
||||||
|
IDC_USEPATTERN_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_USEPATTERN), GWL_WNDPROC, (LONG)IDC_USEPATTERN_WndProc);
|
||||||
|
TASEDITOR_PREV_MARKER_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, TASEDITOR_PREV_MARKER), GWL_WNDPROC, (LONG)TASEDITOR_PREV_MARKER_WndProc);
|
||||||
|
TASEDITOR_FIND_BEST_SIMILAR_MARKER_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, TASEDITOR_FIND_BEST_SIMILAR_MARKER), GWL_WNDPROC, (LONG)TASEDITOR_FIND_BEST_SIMILAR_MARKER_WndProc);
|
||||||
|
TASEDITOR_FIND_NEXT_SIMILAR_MARKER_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, TASEDITOR_FIND_NEXT_SIMILAR_MARKER), GWL_WNDPROC, (LONG)TASEDITOR_FIND_NEXT_SIMILAR_MARKER_WndProc);
|
||||||
|
TASEDITOR_NEXT_MARKER_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, TASEDITOR_NEXT_MARKER), GWL_WNDPROC, (LONG)TASEDITOR_NEXT_MARKER_WndProc);
|
||||||
|
CHECK_TURBO_SEEK_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, CHECK_TURBO_SEEK), GWL_WNDPROC, (LONG)CHECK_TURBO_SEEK_WndProc);
|
||||||
|
IDC_RECORDING_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_RECORDING), GWL_WNDPROC, (LONG)IDC_RECORDING_WndProc);
|
||||||
|
TASEDITOR_RUN_MANUAL_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, TASEDITOR_RUN_MANUAL), GWL_WNDPROC, (LONG)TASEDITOR_RUN_MANUAL_WndProc);
|
||||||
|
IDC_RUN_AUTO_oldWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndTasEditor, IDC_RUN_AUTO), GWL_WNDPROC, (LONG)IDC_RUN_AUTO_WndProc);
|
||||||
// create "Recent" submenu
|
// create "Recent" submenu
|
||||||
recent_projects_menu = CreateMenu();
|
recent_projects_menu = CreateMenu();
|
||||||
UpdateRecentProjectsMenu();
|
UpdateRecentProjectsMenu();
|
||||||
|
@ -242,10 +326,67 @@ void TASEDITOR_WINDOW::exit()
|
||||||
}
|
}
|
||||||
void TASEDITOR_WINDOW::reset()
|
void TASEDITOR_WINDOW::reset()
|
||||||
{
|
{
|
||||||
|
must_update_mouse_cursor = true;
|
||||||
}
|
}
|
||||||
void TASEDITOR_WINDOW::update()
|
void TASEDITOR_WINDOW::update()
|
||||||
{
|
{
|
||||||
|
if (must_update_mouse_cursor)
|
||||||
|
{
|
||||||
|
// change mouse cursor depending on what it points at
|
||||||
|
LPCSTR cursor_icon = IDC_ARROW;
|
||||||
|
switch (piano_roll.drag_mode)
|
||||||
|
{
|
||||||
|
case DRAG_MODE_NONE:
|
||||||
|
{
|
||||||
|
// normal mouseover
|
||||||
|
if (bookmarks.edit_mode == EDIT_MODE_BRANCHES)
|
||||||
|
{
|
||||||
|
int branch_under_mouse = bookmarks.item_under_mouse;
|
||||||
|
if (branch_under_mouse >= 0 && branch_under_mouse < TOTAL_BOOKMARKS && bookmarks.bookmarks_array[branch_under_mouse].not_empty)
|
||||||
|
{
|
||||||
|
int current_branch = branches.GetCurrentBranch();
|
||||||
|
if (current_branch >= 0 && current_branch < TOTAL_BOOKMARKS)
|
||||||
|
{
|
||||||
|
// find if the Branch belongs to the current timeline
|
||||||
|
int timeline_branch = branches.FindFullTimelineForBranch(current_branch);
|
||||||
|
while (timeline_branch != ITEM_UNDER_MOUSE_CLOUD)
|
||||||
|
{
|
||||||
|
if (timeline_branch == branch_under_mouse)
|
||||||
|
break;
|
||||||
|
timeline_branch = branches.parents[timeline_branch];
|
||||||
|
}
|
||||||
|
if (timeline_branch == ITEM_UNDER_MOUSE_CLOUD)
|
||||||
|
// branch_under_mouse wasn't found in current timeline
|
||||||
|
cursor_icon = IDC_HELP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DRAG_MODE_PLAYBACK:
|
||||||
|
{
|
||||||
|
// user is dragging Playback cursor - show either normal arrow or arrow+wait
|
||||||
|
if (playback.pause_frame)
|
||||||
|
cursor_icon = IDC_APPSTARTING;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DRAG_MODE_MARKER:
|
||||||
|
{
|
||||||
|
// user is dragging Marker
|
||||||
|
cursor_icon = IDC_SIZEALL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DRAG_MODE_OBSERVE:
|
||||||
|
case DRAG_MODE_SET:
|
||||||
|
case DRAG_MODE_UNSET:
|
||||||
|
case DRAG_MODE_SELECTION:
|
||||||
|
// user is drawing/selecting - show normal arrow
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SetCursor(LoadCursor(0, cursor_icon));
|
||||||
|
must_update_mouse_cursor = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
void TASEDITOR_WINDOW::CalculateItems()
|
void TASEDITOR_WINDOW::CalculateItems()
|
||||||
|
@ -717,15 +858,6 @@ BOOL CALLBACK WndprocTasEditor(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TASEDITOR_PLAYSTOP:
|
|
||||||
switch(((LPNMHDR)lParam)->code)
|
|
||||||
{
|
|
||||||
case NM_CLICK:
|
|
||||||
case NM_DBLCLK:
|
|
||||||
playback.ToggleEmulationPause();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
|
@ -890,9 +1022,6 @@ BOOL CALLBACK WndprocTasEditor(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara
|
||||||
} else
|
} else
|
||||||
splicer.ClearFrames();
|
splicer.ClearFrames();
|
||||||
break;
|
break;
|
||||||
case TASEDITOR_PLAYSTOP:
|
|
||||||
playback.ToggleEmulationPause();
|
|
||||||
break;
|
|
||||||
case CHECK_FOLLOW_CURSOR:
|
case CHECK_FOLLOW_CURSOR:
|
||||||
taseditor_config.follow_playback ^= 1;
|
taseditor_config.follow_playback ^= 1;
|
||||||
taseditor_window.UpdateCheckedItems();
|
taseditor_window.UpdateCheckedItems();
|
||||||
|
@ -1161,17 +1290,6 @@ BOOL CALLBACK WndprocTasEditor(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDC_JUMP_PLAYBACK_BUTTON:
|
|
||||||
{
|
|
||||||
piano_roll.FollowPlayback();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IDC_JUMP_SELECTION_BUTTON:
|
|
||||||
{
|
|
||||||
if (piano_roll.drag_mode != DRAG_MODE_SELECTION)
|
|
||||||
piano_roll.FollowSelection();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case ID_SELECTED_SETMARKERS:
|
case ID_SELECTED_SETMARKERS:
|
||||||
{
|
{
|
||||||
editor.SetMarkers();
|
editor.SetMarkers();
|
||||||
|
@ -1382,5 +1500,347 @@ BOOL CALLBACK WndprocTasEditor(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
// -----------------------------------------------------------------------------------------------
|
||||||
|
// implementation of wndprocs for "Marker X" text
|
||||||
|
LRESULT APIENTRY IDC_PLAYBACK_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
case WM_LBUTTONDBLCLK:
|
||||||
|
piano_roll.FollowPlayback();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_PLAYBACK_MARKER_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_SELECTION_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
case WM_LBUTTONDBLCLK:
|
||||||
|
if (piano_roll.drag_mode != DRAG_MODE_SELECTION)
|
||||||
|
piano_roll.FollowSelection();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_SELECTION_MARKER_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
// -----------------------------------------------------------------------------------------------
|
||||||
|
// implementation of wndprocs for all buttons and checkboxes
|
||||||
|
LRESULT APIENTRY IDC_PROGRESS_BUTTON_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_PROGRESS_BUTTON_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_BRANCHES_BUTTON_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_BRANCHES_BUTTON_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY TASEDITOR_REWIND_FULL_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(TASEDITOR_REWIND_FULL_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY TASEDITOR_REWIND_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(TASEDITOR_REWIND_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY TASEDITOR_PLAYSTOP_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
case WM_LBUTTONDBLCLK:
|
||||||
|
playback.ToggleEmulationPause();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return CallWindowProc(TASEDITOR_PLAYSTOP_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY TASEDITOR_FORWARD_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(TASEDITOR_FORWARD_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY TASEDITOR_FORWARD_FULL_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(TASEDITOR_FORWARD_FULL_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY CHECK_FOLLOW_CURSOR_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(CHECK_FOLLOW_CURSOR_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY CHECK_AUTORESTORE_PLAYBACK_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(CHECK_AUTORESTORE_PLAYBACK_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_RADIO_ALL_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_RADIO_ALL_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_RADIO_1P_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_RADIO_1P_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_RADIO_2P_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_RADIO_2P_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_RADIO_3P_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_RADIO_3P_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_RADIO_4P_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_RADIO_4P_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_SUPERIMPOSE_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_SUPERIMPOSE_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_USEPATTERN_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_USEPATTERN_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY TASEDITOR_PREV_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(TASEDITOR_PREV_MARKER_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY TASEDITOR_FIND_BEST_SIMILAR_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(TASEDITOR_FIND_BEST_SIMILAR_MARKER_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY TASEDITOR_FIND_NEXT_SIMILAR_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(TASEDITOR_FIND_NEXT_SIMILAR_MARKER_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY TASEDITOR_NEXT_MARKER_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(TASEDITOR_NEXT_MARKER_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY CHECK_TURBO_SEEK_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(CHECK_TURBO_SEEK_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_RECORDING_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_RECORDING_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY TASEDITOR_RUN_MANUAL_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(TASEDITOR_RUN_MANUAL_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
LRESULT APIENTRY IDC_RUN_AUTO_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
playback.MiddleButtonClick();
|
||||||
|
return 0;
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
return 0; // disable Spacebar
|
||||||
|
}
|
||||||
|
return CallWindowProc(IDC_RUN_AUTO_oldWndProc, hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#define TASEDITOR_WINDOW_TOTAL_ITEMS 43
|
#define TASEDITOR_WINDOW_TOTAL_ITEMS 43
|
||||||
#define PIANOROLL_IN_WINDOWITEMS 2
|
#define PIANOROLL_IN_WINDOWITEMS 2
|
||||||
|
|
||||||
#define TOOLTIP_TEXT_MAX_LEN 82
|
#define TOOLTIP_TEXT_MAX_LEN 100
|
||||||
#define TOOLTIPS_AUTOPOP_TIMEOUT 30000
|
#define TOOLTIPS_AUTOPOP_TIMEOUT 30000
|
||||||
|
|
||||||
#define PATTERNS_MENU_POS 5
|
#define PATTERNS_MENU_POS 5
|
||||||
|
@ -60,6 +60,8 @@ public:
|
||||||
int min_width;
|
int min_width;
|
||||||
int min_height;
|
int min_height;
|
||||||
|
|
||||||
|
bool must_update_mouse_cursor;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void CalculateItems();
|
void CalculateItems();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue