* Tasedit: refactoring, tasedit_list class
* Tasedit: selection strobe (improved stability) * Tasedit: rewinding pauses emulation * soft reset and power switch messages, messages when saving/loading Branches
This commit is contained in:
parent
514c80e416
commit
0fcdda6c8a
|
@ -66,7 +66,7 @@ void RedoText(void)
|
|||
}
|
||||
|
||||
SetDlgItemText(logwin, LBL_LOG_TEXT, textbuf);
|
||||
SendDlgItemMessage(logwin, LBL_LOG_TEXT, EM_LINESCROLL, 0, 200);
|
||||
SendDlgItemMessage(logwin, LBL_LOG_TEXT, EM_LINESCROLL, 0, MAXIMUM_NUMBER_OF_LOGS);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#define MAXIMUM_NUMBER_OF_LOGS 256
|
||||
#define MAXIMUM_NUMBER_OF_LOGS 1024
|
||||
|
||||
#define DONT_ADD_NEWLINE 0
|
||||
#define DO_ADD_NEWLINE 1
|
||||
|
|
|
@ -60,7 +60,6 @@
|
|||
#include "tracer.h"
|
||||
#include "cdlogger.h"
|
||||
#include "throttle.h"
|
||||
#include "tasedit.h"
|
||||
#include "replay.h"
|
||||
#include "palette.h" //For the SetPalette function
|
||||
#include "main.h"
|
||||
|
@ -857,6 +856,7 @@ void _updateWindow()
|
|||
//UpdateLogWindow(); //adelikat: Moved to FCEUI_Emulate
|
||||
UpdateMemWatch();
|
||||
NTViewDoBlit(0);
|
||||
extern void UpdateTasEdit();
|
||||
UpdateTasEdit();
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,136 +1,41 @@
|
|||
#define CDDS_SUBITEMPREPAINT (CDDS_SUBITEM | CDDS_ITEMPREPAINT)
|
||||
#define CDDS_SUBITEMPOSTPAINT (CDDS_SUBITEM | CDDS_ITEMPOSTPAINT)
|
||||
#define CDDS_SUBITEMPREERASE (CDDS_SUBITEM | CDDS_ITEMPREERASE)
|
||||
#define CDDS_SUBITEMPOSTERASE (CDDS_SUBITEM | CDDS_ITEMPOSTERASE)
|
||||
|
||||
#define NUM_JOYPADS 4
|
||||
#define NUM_JOYPAD_BUTTONS 8
|
||||
#define PROGRESSBAR_WIDTH 200
|
||||
|
||||
#define GREENZONE_CAPACITY_DEFAULT 10000
|
||||
#define GREENZONE_CAPACITY_MIN 1
|
||||
#define GREENZONE_CAPACITY_MAX 50000
|
||||
|
||||
#define UNDO_LEVELS_MIN 1
|
||||
#define UNDO_LEVELS_MAX 999
|
||||
#define UNDO_LEVELS_DEFAULT 100
|
||||
|
||||
#define AUTOSAVE_PERIOD_SCALE 60000 // = 1 minute in milliseconds
|
||||
#define AUTOSAVE_PERIOD_DEFAULT 10 // in minutes
|
||||
#define AUTOSAVE_PERIOD_MIN 0 // 0 = no autosave
|
||||
#define AUTOSAVE_PERIOD_MAX 60 // 1 hour
|
||||
|
||||
#define UNDO_LEVELS_MIN 1
|
||||
#define UNDO_LEVELS_MAX 999
|
||||
#define UNDO_LEVELS_DEFAULT 100
|
||||
|
||||
// multitrack
|
||||
// multitracking
|
||||
#define MULTITRACK_RECORDING_ALL 0
|
||||
#define MULTITRACK_RECORDING_1P 1
|
||||
#define MULTITRACK_RECORDING_2P 2
|
||||
#define MULTITRACK_RECORDING_3P 3
|
||||
#define MULTITRACK_RECORDING_4P 4
|
||||
// listview column names
|
||||
#define COLUMN_ICONS 0
|
||||
#define COLUMN_FRAMENUM 1
|
||||
#define COLUMN_JOYPAD1_A 2
|
||||
#define COLUMN_JOYPAD1_B 3
|
||||
#define COLUMN_JOYPAD1_S 4
|
||||
#define COLUMN_JOYPAD1_T 5
|
||||
#define COLUMN_JOYPAD1_U 6
|
||||
#define COLUMN_JOYPAD1_D 7
|
||||
#define COLUMN_JOYPAD1_L 8
|
||||
#define COLUMN_JOYPAD1_R 9
|
||||
#define COLUMN_JOYPAD2_A 10
|
||||
#define COLUMN_JOYPAD2_B 11
|
||||
#define COLUMN_JOYPAD2_S 12
|
||||
#define COLUMN_JOYPAD2_T 13
|
||||
#define COLUMN_JOYPAD2_U 14
|
||||
#define COLUMN_JOYPAD2_D 15
|
||||
#define COLUMN_JOYPAD2_L 16
|
||||
#define COLUMN_JOYPAD2_R 17
|
||||
#define COLUMN_JOYPAD3_A 18
|
||||
#define COLUMN_JOYPAD3_B 19
|
||||
#define COLUMN_JOYPAD3_S 20
|
||||
#define COLUMN_JOYPAD3_T 21
|
||||
#define COLUMN_JOYPAD3_U 22
|
||||
#define COLUMN_JOYPAD3_D 23
|
||||
#define COLUMN_JOYPAD3_L 24
|
||||
#define COLUMN_JOYPAD3_R 25
|
||||
#define COLUMN_JOYPAD4_A 26
|
||||
#define COLUMN_JOYPAD4_B 27
|
||||
#define COLUMN_JOYPAD4_S 28
|
||||
#define COLUMN_JOYPAD4_T 29
|
||||
#define COLUMN_JOYPAD4_U 30
|
||||
#define COLUMN_JOYPAD4_D 31
|
||||
#define COLUMN_JOYPAD4_L 32
|
||||
#define COLUMN_JOYPAD4_R 33
|
||||
#define COLUMN_FRAMENUM2 34
|
||||
#define DIGITS_IN_FRAMENUM 7
|
||||
#define ARROW_IMAGE_ID 20
|
||||
// listview colors
|
||||
#define NORMAL_TEXT_COLOR 0x0
|
||||
|
||||
#define NORMAL_FRAMENUM_COLOR 0xFFFFFF
|
||||
#define NORMAL_INPUT_COLOR1 0xEDEDED
|
||||
#define NORMAL_INPUT_COLOR2 0xDEDEDE
|
||||
|
||||
#define GREENZONE_FRAMENUM_COLOR 0xDDFFDD
|
||||
#define GREENZONE_INPUT_COLOR1 0xC8F7C4
|
||||
#define GREENZONE_INPUT_COLOR2 0xAEE2AE
|
||||
|
||||
#define PALE_GREENZONE_FRAMENUM_COLOR 0xE4FFE4
|
||||
#define PALE_GREENZONE_INPUT_COLOR1 0xD5F9D4
|
||||
#define PALE_GREENZONE_INPUT_COLOR2 0xBAE6BA
|
||||
|
||||
#define LAG_FRAMENUM_COLOR 0xDBDAFF
|
||||
#define LAG_INPUT_COLOR1 0xCECBEF
|
||||
#define LAG_INPUT_COLOR2 0xBEBAE4
|
||||
|
||||
#define PALE_LAG_FRAMENUM_COLOR 0xE1E1FF
|
||||
#define PALE_LAG_INPUT_COLOR1 0xD6D3F1
|
||||
#define PALE_LAG_INPUT_COLOR2 0xC7C4E8
|
||||
|
||||
#define CUR_FRAMENUM_COLOR 0xFCF1CE
|
||||
#define CUR_INPUT_COLOR1 0xF7E9B2
|
||||
#define CUR_INPUT_COLOR2 0xE4D8A8
|
||||
|
||||
#define UNDOHINT_FRAMENUM_COLOR 0xF9DDE6
|
||||
#define UNDOHINT_INPUT_COLOR1 0xF6CCDD
|
||||
#define UNDOHINT_INPUT_COLOR2 0xE5B7CC
|
||||
|
||||
#define MARKED_FRAMENUM_COLOR 0xC0FCFF
|
||||
#define CUR_MARKED_FRAMENUM_COLOR 0xDEF7F3
|
||||
#define MARKED_UNDOHINT_FRAMENUM_COLOR 0xE1E7EC
|
||||
|
||||
// greenzone cleaning masks
|
||||
#define EVERY16TH 0xFFFFFFF0
|
||||
#define EVERY8TH 0xFFFFFFF8
|
||||
#define EVERY4TH 0xFFFFFFFC
|
||||
#define EVERY2ND 0xFFFFFFFE
|
||||
// -----------------------------
|
||||
enum ECONTEXTMENU
|
||||
{
|
||||
CONTEXTMENU_STRAY = 0,
|
||||
CONTEXTMENU_SELECTED = 1,
|
||||
};
|
||||
|
||||
void EnterTasEdit();
|
||||
void InitDialog();
|
||||
bool ExitTasEdit();
|
||||
void UpdateTasEdit();
|
||||
void UpdateList();
|
||||
void InputChangedRec();
|
||||
bool CheckItemVisible(int frame);
|
||||
void FollowPlayback();
|
||||
void FollowUndo();
|
||||
void FollowSelection();
|
||||
void FollowPauseframe();
|
||||
void AddFourscore();
|
||||
void RemoveFourscore();
|
||||
void RedrawWindowCaption();
|
||||
void RedrawTasedit();
|
||||
void RedrawList();
|
||||
void RedrawListAndBookmarks();
|
||||
void RedrawRow(int index);
|
||||
void RedrawRowAndBookmark(int index);
|
||||
void InputChangedRec();
|
||||
void ToggleJoypadBit(int column_index, int row_index, UINT KeyFlags);
|
||||
void SwitchToReadOnly();
|
||||
void UncheckRecordingRadioButtons();
|
||||
void RecheckRecordingRadioButtons();
|
||||
void OpenProject();
|
||||
|
@ -141,10 +46,10 @@ void CloneFrames();
|
|||
void InsertFrames();
|
||||
void InsertNumFrames();
|
||||
void DeleteFrames();
|
||||
void ClearFrames(bool cut = false);
|
||||
void ClearFrames(SelectionFrames* current_selection = 0);
|
||||
void Truncate();
|
||||
void ColumnSet(int column);
|
||||
bool Copy();
|
||||
bool Copy(SelectionFrames* current_selection = 0);
|
||||
void Cut();
|
||||
bool Paste();
|
||||
void GotFocus();
|
||||
|
|
|
@ -1,25 +1,24 @@
|
|||
//Implementation file of Bookmarks class
|
||||
|
||||
#include "movie.h"
|
||||
#include "../common.h"
|
||||
#include "taseditproj.h"
|
||||
#include "../tasedit.h"
|
||||
#include "zlib.h"
|
||||
#include "utils/xstring.h"
|
||||
|
||||
#pragma comment(lib, "msimg32.lib")
|
||||
|
||||
LRESULT CALLBACK ScrBmpWndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
char szClassName[] = "BmpTestApp";
|
||||
HWND hwndScrBmp, scr_bmp_pic;
|
||||
WNDCLASSEX wincl;
|
||||
BLENDFUNCTION blend;
|
||||
extern HWND hwndTasEdit;
|
||||
extern int TasEdit_wndx, TasEdit_wndy;
|
||||
extern void RedrawRowAndBookmark(int index);
|
||||
|
||||
LRESULT APIENTRY BookmarksListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT APIENTRY BranchesBitmapWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT CALLBACK ScrBmpWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
WNDPROC hwndBookmarksList_oldWndProc, hwndBranchesBitmap_oldWndProc;
|
||||
|
||||
// resources
|
||||
char szClassName[] = "ScrBmp";
|
||||
char bookmarks_save_id[BOOKMARKS_ID_LEN] = "BOOKMARKS";
|
||||
char bookmarksCaption[3][23] = { " Bookmarks ", " Bookmarks / Branches ", " Branches " };
|
||||
|
||||
// color tables for flashing when saving/loading bookmarks
|
||||
COLORREF bookmark_flash_colors[3][FLASH_PHASE_MAX+1] = {
|
||||
// set
|
||||
|
@ -36,10 +35,7 @@ extern GREENZONE greenzone;
|
|||
extern TASEDIT_PROJECT project;
|
||||
extern INPUT_HISTORY history;
|
||||
extern MARKERS markers;
|
||||
|
||||
extern HWND hwndBookmarks;
|
||||
extern HWND hwndBookmarksList;
|
||||
extern HWND hwndBranchesBitmap;
|
||||
extern TASEDIT_LIST tasedit_list;
|
||||
|
||||
extern bool TASEdit_show_lag_frames;
|
||||
extern bool TASEdit_bind_markers;
|
||||
|
@ -103,6 +99,34 @@ BOOKMARKS::BOOKMARKS()
|
|||
void BOOKMARKS::init()
|
||||
{
|
||||
free();
|
||||
hwndBookmarksList = GetDlgItem(hwndTasEdit, IDC_BOOKMARKSLIST);
|
||||
hwndBookmarks = GetDlgItem(hwndTasEdit, IDC_BOOKMARKS_BOX);
|
||||
hwndBranchesBitmap = GetDlgItem(hwndTasEdit, IDC_BRANCHES_BITMAP);
|
||||
|
||||
// prepare bookmarks listview
|
||||
ListView_SetExtendedListViewStyleEx(hwndBookmarksList, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
|
||||
// subclass the listview
|
||||
hwndBookmarksList_oldWndProc = (WNDPROC)SetWindowLong(hwndBookmarksList, GWL_WNDPROC, (LONG)BookmarksListWndProc);
|
||||
// setup same images for the listview
|
||||
ListView_SetImageList(hwndBookmarksList, tasedit_list.himglist, LVSIL_SMALL);
|
||||
// setup columns
|
||||
LVCOLUMN lvc;
|
||||
// icons column
|
||||
lvc.mask = LVCF_WIDTH;
|
||||
lvc.cx = 13;
|
||||
ListView_InsertColumn(hwndBookmarksList, 0, &lvc);
|
||||
// jump_frame column
|
||||
lvc.mask = LVCF_WIDTH | LVCF_FMT;
|
||||
lvc.fmt = LVCFMT_CENTER;
|
||||
lvc.cx = 74;
|
||||
ListView_InsertColumn(hwndBookmarksList, 1, &lvc);
|
||||
// time column
|
||||
lvc.cx = 80;
|
||||
ListView_InsertColumn(hwndBookmarksList, 2, &lvc);
|
||||
|
||||
// subclass BranchesBitmap
|
||||
hwndBranchesBitmap_oldWndProc = (WNDPROC)SetWindowLong(hwndBranchesBitmap, GWL_WNDPROC, (LONG)BranchesBitmapWndProc);
|
||||
|
||||
// init arrays
|
||||
BranchX.resize(TOTAL_BOOKMARKS+1);
|
||||
BranchY.resize(TOTAL_BOOKMARKS+1);
|
||||
|
@ -134,7 +158,7 @@ void BOOKMARKS::init()
|
|||
|
||||
// find rows top/height (for mouseover hittest calculations)
|
||||
RECT temp_rect;
|
||||
if (ListView_GetSubItemRect(hwndBookmarksList, 0, 2, LVIR_BOUNDS, &temp_rect))
|
||||
if (ListView_GetSubItemRect(hwndBookmarksList, 0, 2, LVIR_BOUNDS, &temp_rect) && temp_rect.bottom != temp_rect.top)
|
||||
{
|
||||
branch_row_top = temp_rect.top;
|
||||
branch_row_left = temp_rect.left;
|
||||
|
@ -405,6 +429,8 @@ void BOOKMARKS::set(int slot)
|
|||
if (previous_frame >= 0 && previous_frame != currFrameCounter)
|
||||
RedrawRowAndBookmark(previous_frame);
|
||||
RedrawRowAndBookmark(currFrameCounter);
|
||||
|
||||
FCEU_DispMessage("Branch %d saved.", 0, slot);
|
||||
}
|
||||
|
||||
void BOOKMARKS::jump(int slot)
|
||||
|
@ -414,10 +440,10 @@ void BOOKMARKS::jump(int slot)
|
|||
{
|
||||
int frame = bookmarks_array[slot].snapshot.jump_frame;
|
||||
playback.jump(frame);
|
||||
if (playback.pauseframe)
|
||||
FollowPauseframe();
|
||||
if (playback.GetPauseFrame())
|
||||
tasedit_list.FollowPauseframe();
|
||||
else
|
||||
FollowPlayback();
|
||||
tasedit_list.FollowPlayback();
|
||||
bookmarks_array[slot].jump();
|
||||
}
|
||||
}
|
||||
|
@ -454,14 +480,14 @@ void BOOKMARKS::unleash(int slot)
|
|||
// restore entire movie
|
||||
currMovieData.records.resize(bookmarks_array[slot].snapshot.size);
|
||||
bookmarks_array[slot].snapshot.toMovie(currMovieData, first_change);
|
||||
UpdateList();
|
||||
tasedit_list.update();
|
||||
history.RegisterBranching(MODTYPE_BRANCH_0 + slot, first_change, slot);
|
||||
greenzone.Invalidate(first_change);
|
||||
bookmarks_array[slot].unleashed();
|
||||
} else if (markers_changed)
|
||||
{
|
||||
history.RegisterBranching(MODTYPE_BRANCH_MARKERS_0 + slot, first_change, slot);
|
||||
RedrawList();
|
||||
tasedit_list.RedrawList();
|
||||
bookmarks_array[slot].unleashed();
|
||||
} else
|
||||
{
|
||||
|
@ -487,14 +513,14 @@ void BOOKMARKS::unleash(int slot)
|
|||
// restore movie up to and not including bookmarked frame (imitating old TASing method)
|
||||
if (currMovieData.getNumRecords() <= jump_frame) currMovieData.records.resize(jump_frame+1); // but if old movie is shorter, include last frame as blank frame
|
||||
bookmarks_array[slot].snapshot.toMovie(currMovieData, first_change, jump_frame-1);
|
||||
UpdateList();
|
||||
tasedit_list.update();
|
||||
history.RegisterBranching(MODTYPE_BRANCH_0 + slot, first_change, slot);
|
||||
greenzone.Invalidate(first_change);
|
||||
bookmarks_array[slot].unleashed();
|
||||
} else if (markers_changed)
|
||||
{
|
||||
history.RegisterBranching(MODTYPE_BRANCH_MARKERS_0 + slot, first_change, slot);
|
||||
RedrawList();
|
||||
tasedit_list.RedrawList();
|
||||
bookmarks_array[slot].unleashed();
|
||||
} else
|
||||
{
|
||||
|
@ -532,6 +558,8 @@ void BOOKMARKS::unleash(int slot)
|
|||
current_branch = slot;
|
||||
changes_since_current_branch = false;
|
||||
must_recalculate_branches_tree = true;
|
||||
|
||||
FCEU_DispMessage("Branch %d loaded.", 0, slot);
|
||||
}
|
||||
|
||||
void BOOKMARKS::save(EMUFILE *os)
|
||||
|
@ -946,7 +974,7 @@ LONG BOOKMARKS::CustomDraw(NMLVCUSTOMDRAW* msg)
|
|||
// frame number
|
||||
SelectObject(msg->nmcd.hdc, hBookmarksFont);
|
||||
int frame = bookmarks_array[cell_y].snapshot.jump_frame;
|
||||
if (frame == currFrameCounter || frame == playback.GetPauseFrame())
|
||||
if (frame == currFrameCounter || frame == (playback.GetPauseFrame() - 1))
|
||||
{
|
||||
// current frame
|
||||
msg->clrTextBk = CUR_FRAMENUM_COLOR;
|
||||
|
@ -977,7 +1005,7 @@ LONG BOOKMARKS::CustomDraw(NMLVCUSTOMDRAW* msg)
|
|||
// frame number
|
||||
SelectObject(msg->nmcd.hdc, hBookmarksFont);
|
||||
int frame = bookmarks_array[cell_y].snapshot.jump_frame;
|
||||
if (frame == currFrameCounter || frame == playback.GetPauseFrame())
|
||||
if (frame == currFrameCounter || frame == (playback.GetPauseFrame() - 1))
|
||||
{
|
||||
// current frame
|
||||
msg->clrTextBk = CUR_INPUT_COLOR1;
|
||||
|
@ -1309,14 +1337,92 @@ void BOOKMARKS::RecursiveSetYPos(int parent, int parentY)
|
|||
}
|
||||
}
|
||||
// ----------------------------------------------------------------------------------------
|
||||
LRESULT CALLBACK ScrBmpWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
LRESULT APIENTRY BookmarksListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
extern BOOKMARKS bookmarks;
|
||||
switch(msg)
|
||||
{
|
||||
case WM_CHAR:
|
||||
case WM_KEYDOWN:
|
||||
case WM_KEYUP:
|
||||
case WM_SETFOCUS:
|
||||
case WM_KILLFOCUS:
|
||||
return 0;
|
||||
case WM_MOUSEMOVE:
|
||||
{
|
||||
if (!bookmarks.mouse_over_bookmarkslist)
|
||||
{
|
||||
bookmarks.mouse_over_bookmarkslist = true;
|
||||
bookmarks.list_tme.hwndTrack = hWnd;
|
||||
TrackMouseEvent(&bookmarks.list_tme);
|
||||
}
|
||||
bookmarks.MouseMove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
|
||||
break;
|
||||
}
|
||||
case WM_MOUSELEAVE:
|
||||
{
|
||||
bookmarks.mouse_over_bookmarkslist = false;
|
||||
bookmarks.MouseMove(-1, -1);
|
||||
break;
|
||||
}
|
||||
case WM_SYSKEYDOWN:
|
||||
{
|
||||
if (wParam == VK_F10)
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return CallWindowProc(hwndBookmarksList_oldWndProc, hWnd, msg, wParam, lParam);
|
||||
}
|
||||
LRESULT APIENTRY BranchesBitmapWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
extern BOOKMARKS bookmarks;
|
||||
switch(msg)
|
||||
{
|
||||
case WM_MOUSEMOVE:
|
||||
{
|
||||
if (!bookmarks.mouse_over_bitmap)
|
||||
{
|
||||
bookmarks.mouse_over_bitmap = true;
|
||||
bookmarks.tme.hwndTrack = hWnd;
|
||||
TrackMouseEvent(&bookmarks.tme);
|
||||
}
|
||||
bookmarks.MouseMove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
|
||||
break;
|
||||
}
|
||||
case WM_MOUSELEAVE:
|
||||
{
|
||||
bookmarks.mouse_over_bitmap = false;
|
||||
bookmarks.MouseMove(-1, -1);
|
||||
break;
|
||||
}
|
||||
case WM_SYSKEYDOWN:
|
||||
{
|
||||
if (wParam == VK_F10)
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc = BeginPaint(hWnd, &ps);
|
||||
bookmarks.PaintBranchesBitmap(hdc);
|
||||
EndPaint(hWnd, &ps);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return CallWindowProc(hwndBranchesBitmap_oldWndProc, hWnd, msg, wParam, lParam);
|
||||
}
|
||||
// ----------------------------------------------------------------------------------------
|
||||
LRESULT APIENTRY ScrBmpWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
extern BOOKMARKS bookmarks;
|
||||
switch(message)
|
||||
{
|
||||
case WM_CREATE:
|
||||
{
|
||||
// create static bitmap placeholder
|
||||
scr_bmp_pic = CreateWindow(WC_STATIC, NULL, SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 255, 255, hwnd, NULL, NULL, NULL);
|
||||
bookmarks.scr_bmp_pic = CreateWindow(WC_STATIC, NULL, SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 255, 255, hwnd, NULL, NULL, NULL);
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -135,11 +135,10 @@ public:
|
|||
std::vector<BOOKMARK> bookmarks_array;
|
||||
|
||||
// not saved vars
|
||||
bool mouse_over_bitmap, mouse_over_bookmarkslist;
|
||||
TRACKMOUSEEVENT tme, list_tme;
|
||||
int branch_row_top;
|
||||
int branch_row_left;
|
||||
int branch_row_height;
|
||||
bool mouse_over_bitmap, mouse_over_bookmarkslist;
|
||||
// screenshot bmp stuff
|
||||
LPBITMAPINFO scr_bmi;
|
||||
HBITMAP scr_bmp;
|
||||
|
@ -148,6 +147,10 @@ public:
|
|||
int scr_bmp_y;
|
||||
int scr_bmp_phase;
|
||||
int screenshot_currently_shown;
|
||||
HWND hwndScrBmp, scr_bmp_pic;
|
||||
WNDCLASSEX wincl;
|
||||
BLENDFUNCTION blend;
|
||||
TRACKMOUSEEVENT tme, list_tme;
|
||||
|
||||
private:
|
||||
void SetCurrentPosTime();
|
||||
|
@ -179,6 +182,9 @@ private:
|
|||
int mouse_x, mouse_y;
|
||||
int item_under_mouse;
|
||||
|
||||
HWND hwndBookmarksList, hwndBookmarks;
|
||||
HWND hwndBranchesBitmap;
|
||||
|
||||
// GDI stuff
|
||||
HFONT hBookmarksFont;
|
||||
HBRUSH normal_brush;
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
//Implementation file of Greenzone class
|
||||
|
||||
#include "movie.h"
|
||||
#include "state.h"
|
||||
#include "../common.h"
|
||||
#include "zlib.h"
|
||||
#include "taseditproj.h"
|
||||
#include "../tasedit.h"
|
||||
#include "state.h"
|
||||
#include "zlib.h"
|
||||
|
||||
extern TASEDIT_PROJECT project;
|
||||
|
|
|
@ -5,6 +5,12 @@
|
|||
|
||||
#define GREENZONE_ID_LEN 10
|
||||
|
||||
// greenzone cleaning masks
|
||||
#define EVERY16TH 0xFFFFFFF0
|
||||
#define EVERY8TH 0xFFFFFFF8
|
||||
#define EVERY4TH 0xFFFFFFFC
|
||||
#define EVERY2ND 0xFFFFFFFE
|
||||
|
||||
class GREENZONE
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -3,18 +3,20 @@
|
|||
#include "taseditproj.h"
|
||||
#include "../tasedit.h" // just for mainlist functions, later this should be deleted
|
||||
|
||||
extern void FCEU_printf(char *format, ...);
|
||||
|
||||
extern HWND hwndHistoryList;
|
||||
extern HWND hwndTasEdit;
|
||||
extern bool TASEdit_bind_markers;
|
||||
extern bool TASEdit_enable_hot_changes;
|
||||
extern bool TASEdit_branch_full_movie;
|
||||
|
||||
LRESULT APIENTRY HistoryListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
WNDPROC hwndHistoryList_oldWndProc;
|
||||
|
||||
extern MARKERS markers;
|
||||
extern BOOKMARKS bookmarks;
|
||||
extern PLAYBACK playback;
|
||||
extern GREENZONE greenzone;
|
||||
extern TASEDIT_PROJECT project;
|
||||
extern TASEDIT_LIST tasedit_list;
|
||||
|
||||
char history_save_id[HISTORY_ID_LEN] = "HISTORY";
|
||||
char modCaptions[36][20] = {" Init",
|
||||
|
@ -57,11 +59,20 @@ char joypadCaptions[4][5] = {"(1P)", "(2P)", "(3P)", "(4P)"};
|
|||
|
||||
INPUT_HISTORY::INPUT_HISTORY()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void INPUT_HISTORY::init(int new_size)
|
||||
{
|
||||
// prepare the history listview
|
||||
hwndHistoryList = GetDlgItem(hwndTasEdit, IDC_HISTORYLIST);
|
||||
ListView_SetExtendedListViewStyleEx(hwndHistoryList, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
|
||||
// subclass the listview
|
||||
hwndHistoryList_oldWndProc = (WNDPROC)SetWindowLong(hwndHistoryList, GWL_WNDPROC, (LONG)HistoryListWndProc);
|
||||
LVCOLUMN lvc;
|
||||
lvc.mask = LVCF_WIDTH | LVCF_FMT;
|
||||
lvc.cx = 200;
|
||||
lvc.fmt = LVCFMT_LEFT;
|
||||
ListView_InsertColumn(hwndHistoryList, 0, &lvc);
|
||||
// init vars
|
||||
if (new_size > 0)
|
||||
history_size = new_size + 1;
|
||||
|
@ -92,7 +103,7 @@ void INPUT_HISTORY::update()
|
|||
{
|
||||
// update undo_hint
|
||||
if (old_undo_hint_pos != undo_hint_pos && old_undo_hint_pos >= 0)
|
||||
RedrawRow(old_undo_hint_pos); // not changing bookmarks list
|
||||
tasedit_list.RedrawRow(old_undo_hint_pos); // not changing bookmarks list
|
||||
old_undo_hint_pos = undo_hint_pos;
|
||||
old_show_undo_hint = show_undo_hint;
|
||||
show_undo_hint = false;
|
||||
|
@ -104,7 +115,7 @@ void INPUT_HISTORY::update()
|
|||
undo_hint_pos = -1; // finished hinting
|
||||
}
|
||||
if (old_show_undo_hint != show_undo_hint)
|
||||
RedrawRow(undo_hint_pos); // not changing bookmarks list
|
||||
tasedit_list.RedrawRow(undo_hint_pos); // not changing bookmarks list
|
||||
|
||||
|
||||
|
||||
|
@ -155,11 +166,11 @@ int INPUT_HISTORY::jump(int new_pos)
|
|||
{
|
||||
markers.update();
|
||||
bookmarks.ChangesMadeSinceBranch();
|
||||
RedrawList();
|
||||
tasedit_list.RedrawList();
|
||||
} else if (TASEdit_enable_hot_changes)
|
||||
{
|
||||
// when using Hot Changes, list should be always redrawn, because old changes become less hot
|
||||
RedrawList();
|
||||
tasedit_list.RedrawList();
|
||||
}
|
||||
|
||||
return first_change;
|
||||
|
@ -484,8 +495,8 @@ void INPUT_HISTORY::Click(LPNMITEMACTIVATE info)
|
|||
int result = jump(item);
|
||||
if (result >= 0)
|
||||
{
|
||||
UpdateList();
|
||||
FollowUndo();
|
||||
tasedit_list.update();
|
||||
tasedit_list.FollowUndo();
|
||||
greenzone.InvalidateAndCheck(result);
|
||||
return;
|
||||
}
|
||||
|
@ -534,4 +545,24 @@ int INPUT_HISTORY::GetUndoHint()
|
|||
else
|
||||
return -1;
|
||||
}
|
||||
// ---------------------------------------------------------------------------------
|
||||
LRESULT APIENTRY HistoryListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
case WM_CHAR:
|
||||
case WM_KEYDOWN:
|
||||
case WM_KEYUP:
|
||||
case WM_KILLFOCUS:
|
||||
return 0;
|
||||
case WM_SYSKEYDOWN:
|
||||
{
|
||||
if (wParam == VK_F10)
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return CallWindowProc(hwndHistoryList_oldWndProc, hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -78,6 +78,8 @@ public:
|
|||
void RedrawHistoryList();
|
||||
void UpdateHistoryList();
|
||||
|
||||
HWND hwndHistoryList;
|
||||
|
||||
private:
|
||||
std::vector<INPUT_SNAPSHOT> input_snapshots;
|
||||
|
||||
|
|
|
@ -470,10 +470,10 @@ void INPUT_SNAPSHOT::inheritHotChanges_DeleteSelection(INPUT_SNAPSHOT* source_of
|
|||
int bytes = bytes_per_frame[input_type] * HOTCHANGE_BYTES_PER_JOY;
|
||||
int frame = 0, pos = 0, source_pos = 0;
|
||||
int this_size = hot_changes.size(), source_size = source_of_hotchanges->hot_changes.size();
|
||||
SelectionFrames::iterator it(selection.CurrentSelection().begin());
|
||||
SelectionFrames::iterator it(selection.GetStrobedSelection().begin());
|
||||
while (pos < this_size && source_pos < source_size)
|
||||
{
|
||||
if (it != selection.CurrentSelection().end() && frame == *it)
|
||||
if (it != selection.GetStrobedSelection().end() && frame == *it)
|
||||
{
|
||||
// this frame is selected
|
||||
it++;
|
||||
|
@ -499,10 +499,11 @@ void INPUT_SNAPSHOT::inheritHotChanges_InsertSelection(INPUT_SNAPSHOT* source_of
|
|||
int bytes = bytes_per_frame[input_type] * HOTCHANGE_BYTES_PER_JOY;
|
||||
int frame = 0, region_len = 0, pos = 0, source_pos = 0;
|
||||
int this_size = hot_changes.size(), source_size = source_of_hotchanges->hot_changes.size();
|
||||
SelectionFrames::iterator it(selection.CurrentSelection().begin());
|
||||
SelectionFrames::iterator it(selection.GetStrobedSelection().begin());
|
||||
SelectionFrames::iterator current_selection_end(selection.GetStrobedSelection().end());
|
||||
while (pos < this_size && source_pos < source_size)
|
||||
{
|
||||
if (it != selection.CurrentSelection().end() && frame == *it)
|
||||
if (it != current_selection_end && frame == *it)
|
||||
{
|
||||
// this frame is selected
|
||||
it++;
|
||||
|
@ -529,10 +530,11 @@ void INPUT_SNAPSHOT::inheritHotChanges_InsertSelection(INPUT_SNAPSHOT* source_of
|
|||
int bytes = bytes_per_frame[input_type] * HOTCHANGE_BYTES_PER_JOY;
|
||||
int frame = 0, region_len = 0, pos = 0;
|
||||
int this_size = hot_changes.size();
|
||||
SelectionFrames::iterator it(selection.CurrentSelection().begin());
|
||||
SelectionFrames::iterator it(selection.GetStrobedSelection().begin());
|
||||
SelectionFrames::iterator current_selection_end(selection.GetStrobedSelection().end());
|
||||
while (pos < this_size)
|
||||
{
|
||||
if (it != selection.CurrentSelection().end() && frame == *it)
|
||||
if (it != current_selection_end && frame == *it)
|
||||
{
|
||||
// this frame is selected
|
||||
it++;
|
||||
|
@ -541,7 +543,7 @@ void INPUT_SNAPSHOT::inheritHotChanges_InsertSelection(INPUT_SNAPSHOT* source_of
|
|||
memset(&hot_changes[pos], 0xFF, bytes);
|
||||
pos += bytes;
|
||||
// exit loop when all selection frames are handled
|
||||
if (it == selection.CurrentSelection().end()) break;
|
||||
if (it == current_selection_end) break;
|
||||
} else
|
||||
{
|
||||
// this frame is not selected
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
//Implementation file of Markers class
|
||||
|
||||
#include "movie.h"
|
||||
#include "../common.h"
|
||||
#include "taseditproj.h"
|
||||
//#include "../tasedit.h"
|
||||
#include "zlib.h"
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
//Implementation file of Playback class
|
||||
|
||||
#include "movie.h"
|
||||
#include "../common.h"
|
||||
#include "taseditproj.h"
|
||||
#include "../tasedit.h"
|
||||
|
||||
|
@ -9,16 +7,18 @@
|
|||
extern void ForceExecuteLuaFrameFunctions();
|
||||
#endif
|
||||
|
||||
extern HWND hwndProgressbar, hwndList, hwndRewind, hwndForward, hwndRewindFull, hwndForwardFull;
|
||||
extern HWND hwndProgressbar, hwndRewind, hwndForward, hwndRewindFull, hwndForwardFull;
|
||||
extern void FCEU_printf(char *format, ...);
|
||||
extern bool turbo;
|
||||
|
||||
extern MARKERS markers;
|
||||
extern GREENZONE greenzone;
|
||||
extern TASEDIT_LIST tasedit_list;
|
||||
|
||||
extern bool Tasedit_rewind_now;
|
||||
|
||||
PLAYBACK::PLAYBACK()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void PLAYBACK::init()
|
||||
|
@ -29,7 +29,7 @@ void PLAYBACK::init()
|
|||
void PLAYBACK::reset()
|
||||
{
|
||||
lastCursor = -1;
|
||||
pauseframe = old_pauseframe = 0;
|
||||
pause_frame = old_pauseframe = 0;
|
||||
old_show_pauseframe = show_pauseframe = false;
|
||||
old_rewind_button_state = rewind_button_state = false;
|
||||
old_forward_button_state = forward_button_state = false;
|
||||
|
@ -40,31 +40,31 @@ void PLAYBACK::reset()
|
|||
}
|
||||
void PLAYBACK::update()
|
||||
{
|
||||
// pause when seeking hit pauseframe
|
||||
// pause when seeking hit pause_frame
|
||||
if(!FCEUI_EmulationPaused())
|
||||
if(pauseframe && pauseframe <= currFrameCounter + 1)
|
||||
if(pause_frame && pause_frame <= currFrameCounter + 1)
|
||||
SeekingStop();
|
||||
|
||||
// update flashing pauseframe
|
||||
if (old_pauseframe != pauseframe && old_pauseframe) RedrawRowAndBookmark(old_pauseframe-1);
|
||||
old_pauseframe = pauseframe;
|
||||
if (old_pauseframe != pause_frame && old_pauseframe) RedrawRowAndBookmark(old_pauseframe-1);
|
||||
old_pauseframe = pause_frame;
|
||||
old_show_pauseframe = show_pauseframe;
|
||||
if (pauseframe)
|
||||
if (pause_frame)
|
||||
{
|
||||
if (emu_paused)
|
||||
show_pauseframe = (int)(clock() / PAUSEFRAME_BLINKING_PERIOD_PAUSED) & 1;
|
||||
else
|
||||
show_pauseframe = (int)(clock() / PAUSEFRAME_BLINKING_PERIOD_SEEKING) & 1;
|
||||
} else show_pauseframe = false;
|
||||
if (old_show_pauseframe != show_pauseframe) RedrawRowAndBookmark(pauseframe-1);
|
||||
if (old_show_pauseframe != show_pauseframe) RedrawRowAndBookmark(pause_frame-1);
|
||||
|
||||
// update seeking progressbar
|
||||
old_emu_paused = emu_paused;
|
||||
emu_paused = (FCEUI_EmulationPaused() != 0);
|
||||
if (pauseframe)
|
||||
if (pause_frame)
|
||||
{
|
||||
if (old_show_pauseframe != show_pauseframe)
|
||||
SetProgressbar(currFrameCounter - seeking_start_frame, pauseframe-seeking_start_frame);
|
||||
SetProgressbar(currFrameCounter - seeking_start_frame, pause_frame - seeking_start_frame);
|
||||
} else if (old_emu_paused != emu_paused)
|
||||
{
|
||||
// emulator got paused/unpaused externally
|
||||
|
@ -79,42 +79,39 @@ void PLAYBACK::update()
|
|||
//update the playback cursor
|
||||
if(currFrameCounter != lastCursor)
|
||||
{
|
||||
FollowPlayback();
|
||||
tasedit_list.FollowPlayback();
|
||||
//update the old and new rows
|
||||
RedrawRowAndBookmark(lastCursor);
|
||||
RedrawRowAndBookmark(currFrameCounter);
|
||||
UpdateWindow(hwndList);
|
||||
UpdateWindow(tasedit_list.hwndList);
|
||||
lastCursor = currFrameCounter;
|
||||
}
|
||||
|
||||
// update < and > buttons
|
||||
if(emu_paused)
|
||||
old_rewind_button_state = rewind_button_state;
|
||||
rewind_button_state = ((Button_GetState(hwndRewind) & BST_PUSHED) != 0 || Tasedit_rewind_now);
|
||||
if (rewind_button_state)
|
||||
{
|
||||
old_rewind_button_state = rewind_button_state;
|
||||
rewind_button_state = ((Button_GetState(hwndRewind) & BST_PUSHED) != 0 || Tasedit_rewind_now);
|
||||
if (rewind_button_state)
|
||||
if (!old_rewind_button_state)
|
||||
{
|
||||
if (!old_rewind_button_state)
|
||||
{
|
||||
button_hold_time = clock();
|
||||
RewindFrame();
|
||||
} else if (button_hold_time + HOLD_REPEAT_DELAY < clock())
|
||||
{
|
||||
RewindFrame();
|
||||
}
|
||||
button_hold_time = clock();
|
||||
RewindFrame();
|
||||
} else if (button_hold_time + HOLD_REPEAT_DELAY < clock())
|
||||
{
|
||||
RewindFrame();
|
||||
}
|
||||
old_forward_button_state = forward_button_state;
|
||||
forward_button_state = (Button_GetState(hwndForward) & BST_PUSHED) != 0;
|
||||
if (forward_button_state && !rewind_button_state)
|
||||
}
|
||||
old_forward_button_state = forward_button_state;
|
||||
forward_button_state = (Button_GetState(hwndForward) & BST_PUSHED) != 0;
|
||||
if (forward_button_state && !rewind_button_state)
|
||||
{
|
||||
if (!old_forward_button_state)
|
||||
{
|
||||
if (!old_forward_button_state)
|
||||
{
|
||||
button_hold_time = clock();
|
||||
ForwardFrame();
|
||||
} else if (button_hold_time + HOLD_REPEAT_DELAY < clock())
|
||||
{
|
||||
ForwardFrame();
|
||||
}
|
||||
button_hold_time = clock();
|
||||
ForwardFrame();
|
||||
} else if (button_hold_time + HOLD_REPEAT_DELAY < clock())
|
||||
{
|
||||
ForwardFrame();
|
||||
}
|
||||
}
|
||||
// update << and >> buttons
|
||||
|
@ -149,9 +146,9 @@ void PLAYBACK::update()
|
|||
|
||||
void PLAYBACK::updateProgressbar()
|
||||
{
|
||||
if (pauseframe)
|
||||
if (pause_frame)
|
||||
{
|
||||
SetProgressbar(currFrameCounter - seeking_start_frame, pauseframe-seeking_start_frame);
|
||||
SetProgressbar(currFrameCounter - seeking_start_frame, pause_frame - seeking_start_frame);
|
||||
} else
|
||||
{
|
||||
if (emu_paused)
|
||||
|
@ -183,13 +180,13 @@ void PLAYBACK::UnpauseEmulation()
|
|||
void PLAYBACK::SeekingStart(int finish_frame)
|
||||
{
|
||||
seeking_start_frame = currFrameCounter;
|
||||
pauseframe = finish_frame;
|
||||
pause_frame = finish_frame;
|
||||
turbo = true;
|
||||
UnpauseEmulation();
|
||||
}
|
||||
void PLAYBACK::SeekingStop()
|
||||
{
|
||||
pauseframe = 0;
|
||||
pause_frame = 0;
|
||||
turbo = false;
|
||||
PauseEmulation();
|
||||
SetProgressbar(1, 1);
|
||||
|
@ -199,10 +196,12 @@ void PLAYBACK::SeekingStop()
|
|||
void PLAYBACK::RewindFrame()
|
||||
{
|
||||
if (currFrameCounter > 0) jump(currFrameCounter-1);
|
||||
if (!pause_frame) PauseEmulation();
|
||||
}
|
||||
void PLAYBACK::ForwardFrame()
|
||||
{
|
||||
jump(currFrameCounter+1);
|
||||
if (!pause_frame) PauseEmulation();
|
||||
turbo = false;
|
||||
}
|
||||
void PLAYBACK::RewindFull()
|
||||
|
@ -247,13 +246,13 @@ void PLAYBACK::jump(int frame)
|
|||
if (JumpToFrame(frame))
|
||||
{
|
||||
ForceExecuteLuaFrameFunctions();
|
||||
FollowPlayback();
|
||||
tasedit_list.FollowPlayback();
|
||||
}
|
||||
}
|
||||
void PLAYBACK::restorePosition()
|
||||
{
|
||||
if (pauseframe)
|
||||
jump(pauseframe-1);
|
||||
if (pause_frame)
|
||||
jump(pause_frame-1);
|
||||
else
|
||||
jump(currFrameCounter);
|
||||
}
|
||||
|
@ -276,7 +275,7 @@ bool PLAYBACK::JumpToFrame(int index)
|
|||
{
|
||||
turbo = false;
|
||||
// if playback was seeking, pause emulation right here
|
||||
if (pauseframe) SeekingStop();
|
||||
if (pause_frame) SeekingStop();
|
||||
return true;
|
||||
}
|
||||
//Search for an earlier frame with savestate
|
||||
|
@ -298,9 +297,9 @@ bool PLAYBACK::JumpToFrame(int index)
|
|||
int PLAYBACK::GetPauseFrame()
|
||||
{
|
||||
if (show_pauseframe)
|
||||
return pauseframe-1;
|
||||
return pause_frame;
|
||||
else
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void PLAYBACK::SetProgressbar(int a, int b)
|
||||
|
|
|
@ -36,11 +36,12 @@ public:
|
|||
int GetPauseFrame();
|
||||
void SetProgressbar(int a, int b);
|
||||
|
||||
int pauseframe;
|
||||
|
||||
private:
|
||||
bool JumpToFrame(int index);
|
||||
|
||||
int pause_frame;
|
||||
|
||||
int lastCursor; // for currentCursor we use external variable currFrameCounter
|
||||
bool old_emu_paused, emu_paused;
|
||||
int old_pauseframe;
|
||||
|
|
|
@ -0,0 +1,573 @@
|
|||
//Implementation file of TASEDIT_LIST class
|
||||
|
||||
#include "taseditproj.h"
|
||||
//#include "../tasedit.h"
|
||||
#include "utils/xstring.h"
|
||||
|
||||
extern HWND hwndTasEdit, hwndRB_Rec3P, hwndRB_Rec4P;
|
||||
extern char buttonNames[NUM_JOYPAD_BUTTONS][2];
|
||||
extern void ColumnSet(int column);
|
||||
|
||||
extern BOOKMARKS bookmarks;
|
||||
extern PLAYBACK playback;
|
||||
extern GREENZONE greenzone;
|
||||
extern INPUT_HISTORY history;
|
||||
extern MARKERS markers;
|
||||
extern TASEDIT_SELECTION selection;
|
||||
|
||||
extern bool TASEdit_enable_hot_changes;
|
||||
extern bool TASEdit_show_markers;
|
||||
extern bool TASEdit_show_lag_frames;
|
||||
extern bool TASEdit_follow_playback;
|
||||
extern bool TASEdit_jump_to_undo;
|
||||
|
||||
|
||||
LRESULT APIENTRY HeaderWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
WNDPROC hwndList_oldWndProc, hwndHeader_oldWndproc;
|
||||
|
||||
// resources
|
||||
COLORREF hot_changes_colors[16] = { 0x0, 0x661212, 0x842B4E, 0x652C73, 0x48247D, 0x383596, 0x2947AE, 0x1E53C1, 0x135DD2, 0x116EDA, 0x107EE3, 0x0F8EEB, 0x209FF4, 0x3DB1FD, 0x51C2FF, 0x4DCDFF };
|
||||
|
||||
TASEDIT_LIST::TASEDIT_LIST()
|
||||
{
|
||||
|
||||
// create fonts for main listview
|
||||
hMainListFont = CreateFont(15, 10, /*Height,Width*/
|
||||
0, 0, /*escapement,orientation*/
|
||||
FW_BOLD, FALSE, FALSE, FALSE, /*weight, italic, underline, strikeout*/
|
||||
ANSI_CHARSET, OUT_DEVICE_PRECIS, CLIP_MASK, /*charset, precision, clipping*/
|
||||
DEFAULT_QUALITY, DEFAULT_PITCH, /*quality, and pitch*/
|
||||
"Courier"); /*font name*/
|
||||
hMainListSelectFont = CreateFont(14, 7, /*Height,Width*/
|
||||
0, 0, /*escapement,orientation*/
|
||||
FW_BOLD, FALSE, FALSE, FALSE, /*weight, italic, underline, strikeout*/
|
||||
ANSI_CHARSET, OUT_DEVICE_PRECIS, CLIP_MASK, /*charset, precision, clipping*/
|
||||
DEFAULT_QUALITY, DEFAULT_PITCH, /*quality, and pitch*/
|
||||
"Arial"); /*font name*/
|
||||
|
||||
}
|
||||
|
||||
void TASEDIT_LIST::init()
|
||||
{
|
||||
//free();
|
||||
hwndList = GetDlgItem(hwndTasEdit, IDC_LIST1);
|
||||
|
||||
// prepare the main listview
|
||||
ListView_SetExtendedListViewStyleEx(hwndList, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
|
||||
// subclass the header
|
||||
hwndHeader = ListView_GetHeader(hwndList);
|
||||
hwndHeader_oldWndproc = (WNDPROC)SetWindowLong(hwndHeader, GWL_WNDPROC, (LONG)HeaderWndProc);
|
||||
// subclass the whole listview
|
||||
hwndList_oldWndProc = (WNDPROC)SetWindowLong(hwndList, GWL_WNDPROC, (LONG)ListWndProc);
|
||||
// setup images for the listview
|
||||
himglist = ImageList_Create(9, 13, ILC_COLOR8 | ILC_MASK, 1, 1);
|
||||
HBITMAP bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP0));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP2));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP3));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP4));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP5));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP6));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP7));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP8));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP9));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP10));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP11));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP12));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP13));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP14));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP15));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP16));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP17));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP18));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_BITMAP19));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
bmp = LoadBitmap(fceu_hInstance, MAKEINTRESOURCE(IDB_TE_ARROW));
|
||||
ImageList_AddMasked(himglist, bmp, 0xFFFFFF);
|
||||
DeleteObject(bmp);
|
||||
ListView_SetImageList(hwndList, himglist, LVSIL_SMALL);
|
||||
// setup columns
|
||||
LVCOLUMN lvc;
|
||||
int colidx=0;
|
||||
// icons column
|
||||
lvc.mask = LVCF_WIDTH;
|
||||
lvc.cx = 13;
|
||||
ListView_InsertColumn(hwndList, colidx++, &lvc);
|
||||
// frame number column
|
||||
lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_FMT;
|
||||
lvc.fmt = LVCFMT_CENTER;
|
||||
lvc.cx = 75;
|
||||
lvc.pszText = "Frame#";
|
||||
ListView_InsertColumn(hwndList, colidx++, &lvc);
|
||||
// pads columns
|
||||
lvc.cx = 21;
|
||||
// add pads 1 and 2
|
||||
for (int joy = 0; joy < 2; ++joy)
|
||||
{
|
||||
for (int btn = 0; btn < NUM_JOYPAD_BUTTONS; ++btn)
|
||||
{
|
||||
lvc.pszText = buttonNames[btn];
|
||||
ListView_InsertColumn(hwndList, colidx++, &lvc);
|
||||
}
|
||||
}
|
||||
// add pads 3 and 4 and frame_number2
|
||||
if (currMovieData.fourscore) AddFourscore();
|
||||
|
||||
listItems = ListView_GetCountPerPage(hwndList);
|
||||
// calculate scr_bmp coordinates (relative to the listview top-left corner
|
||||
RECT temp_rect, parent_rect;
|
||||
GetWindowRect(hwndTasEdit, &parent_rect);
|
||||
GetWindowRect(hwndHeader, &temp_rect);
|
||||
bookmarks.scr_bmp_x = temp_rect.left - parent_rect.left;
|
||||
bookmarks.scr_bmp_y = temp_rect.bottom - parent_rect.top;
|
||||
|
||||
update();
|
||||
}
|
||||
void TASEDIT_LIST::free()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
void TASEDIT_LIST::update()
|
||||
{
|
||||
//update the number of items in the list
|
||||
int currLVItemCount = ListView_GetItemCount(hwndList);
|
||||
int movie_size = currMovieData.getNumRecords();
|
||||
if(currLVItemCount != movie_size)
|
||||
ListView_SetItemCountEx(hwndList, movie_size, LVSICF_NOSCROLL|LVSICF_NOINVALIDATEALL);
|
||||
|
||||
|
||||
}
|
||||
// ----------------------------------------------------------------------
|
||||
void TASEDIT_LIST::AddFourscore()
|
||||
{
|
||||
// add list columns
|
||||
LVCOLUMN lvc;
|
||||
lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_FMT;
|
||||
lvc.fmt = LVCFMT_CENTER;
|
||||
lvc.cx = 21;
|
||||
int colidx = COLUMN_JOYPAD3_A;
|
||||
for (int joy = 0; joy < 2; ++joy)
|
||||
{
|
||||
for (int btn = 0; btn < NUM_JOYPAD_BUTTONS; ++btn)
|
||||
{
|
||||
lvc.pszText = buttonNames[btn];
|
||||
ListView_InsertColumn(hwndList, colidx++, &lvc);
|
||||
}
|
||||
}
|
||||
// frame number column again
|
||||
lvc.cx = 75;
|
||||
lvc.pszText = "Frame#";
|
||||
ListView_InsertColumn(hwndList, colidx++, &lvc);
|
||||
// enable radiobuttons for 3P/4P multitracking
|
||||
EnableWindow(hwndRB_Rec3P, true);
|
||||
EnableWindow(hwndRB_Rec4P, true);
|
||||
// change eoptions
|
||||
FCEUI_SetInputFourscore(true);
|
||||
}
|
||||
void TASEDIT_LIST::RemoveFourscore()
|
||||
{
|
||||
// remove list columns
|
||||
for (int i = COLUMN_FRAMENUM2; i >= COLUMN_JOYPAD3_A; --i)
|
||||
{
|
||||
ListView_DeleteColumn (hwndList, i);
|
||||
}
|
||||
// disable radiobuttons for 3P/4P multitracking
|
||||
EnableWindow(hwndRB_Rec3P, false);
|
||||
EnableWindow(hwndRB_Rec4P, false);
|
||||
// change eoptions
|
||||
FCEUI_SetInputFourscore(false);
|
||||
}
|
||||
|
||||
void TASEDIT_LIST::RedrawList()
|
||||
{
|
||||
InvalidateRect(hwndList, 0, FALSE);
|
||||
}
|
||||
void TASEDIT_LIST::RedrawRow(int index)
|
||||
{
|
||||
ListView_RedrawItems(hwndList, index, index);
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
bool TASEDIT_LIST::CheckItemVisible(int frame)
|
||||
{
|
||||
int top = ListView_GetTopIndex(hwndList);
|
||||
// in fourscore there's horizontal scrollbar which takes one row for itself
|
||||
if (frame >= top && frame < top + listItems - (currMovieData.fourscore)?1:0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void TASEDIT_LIST::FollowPlayback()
|
||||
{
|
||||
if (TASEdit_follow_playback) ListView_EnsureVisible(hwndList,currFrameCounter,FALSE);
|
||||
}
|
||||
void TASEDIT_LIST::FollowUndo()
|
||||
{
|
||||
int jump_frame = history.GetUndoHint();
|
||||
if (TASEdit_jump_to_undo && jump_frame >= 0)
|
||||
{
|
||||
if (!CheckItemVisible(jump_frame))
|
||||
{
|
||||
// center list at jump_frame
|
||||
int list_items = listItems;
|
||||
if (currMovieData.fourscore) list_items--;
|
||||
int lower_border = (list_items - 1) / 2;
|
||||
int upper_border = (list_items - 1) - lower_border;
|
||||
int index = jump_frame + lower_border;
|
||||
if (index >= currMovieData.getNumRecords())
|
||||
index = currMovieData.getNumRecords()-1;
|
||||
ListView_EnsureVisible(hwndList, index, false);
|
||||
index = jump_frame - upper_border;
|
||||
if (index < 0)
|
||||
index = 0;
|
||||
ListView_EnsureVisible(hwndList, index, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
void TASEDIT_LIST::FollowSelection()
|
||||
{
|
||||
SelectionFrames* current_selection = selection.MakeStrobe();
|
||||
if (current_selection->size() == 0) return;
|
||||
|
||||
int list_items = listItems;
|
||||
if (currMovieData.fourscore) list_items--;
|
||||
int selection_start = *current_selection->begin();
|
||||
int selection_end = *current_selection->rbegin();
|
||||
int selection_items = 1 + selection_end - selection_start;
|
||||
|
||||
if (selection_items <= list_items)
|
||||
{
|
||||
// selected region can fit in screen
|
||||
int lower_border = (list_items - selection_items) / 2;
|
||||
int upper_border = (list_items - selection_items) - lower_border;
|
||||
int index = selection_end + lower_border;
|
||||
if (index >= currMovieData.getNumRecords())
|
||||
index = currMovieData.getNumRecords()-1;
|
||||
ListView_EnsureVisible(hwndList, index, false);
|
||||
index = selection_start - upper_border;
|
||||
if (index < 0)
|
||||
index = 0;
|
||||
ListView_EnsureVisible(hwndList, index, false);
|
||||
} else
|
||||
{
|
||||
// selected region is too big to fit in screen
|
||||
// just center at selection_start
|
||||
int lower_border = (list_items - 1) / 2;
|
||||
int upper_border = (list_items - 1) - lower_border;
|
||||
int index = selection_start + lower_border;
|
||||
if (index >= currMovieData.getNumRecords())
|
||||
index = currMovieData.getNumRecords()-1;
|
||||
ListView_EnsureVisible(hwndList, index, false);
|
||||
index = selection_start - upper_border;
|
||||
if (index < 0)
|
||||
index = 0;
|
||||
ListView_EnsureVisible(hwndList, index, false);
|
||||
}
|
||||
}
|
||||
void TASEDIT_LIST::FollowPauseframe()
|
||||
{
|
||||
int jump_frame = playback.GetPauseFrame();
|
||||
if (jump_frame >= 0)
|
||||
{
|
||||
// center list at jump_frame
|
||||
int list_items = listItems;
|
||||
if (currMovieData.fourscore) list_items--;
|
||||
int lower_border = (list_items - 1) / 2;
|
||||
int upper_border = (list_items - 1) - lower_border;
|
||||
int index = jump_frame + lower_border;
|
||||
if (index >= currMovieData.getNumRecords())
|
||||
index = currMovieData.getNumRecords()-1;
|
||||
ListView_EnsureVisible(hwndList, index, false);
|
||||
index = jump_frame - upper_border;
|
||||
if (index < 0)
|
||||
index = 0;
|
||||
ListView_EnsureVisible(hwndList, index, false);
|
||||
}
|
||||
}
|
||||
|
||||
void TASEDIT_LIST::GetDispInfo(NMLVDISPINFO* nmlvDispInfo)
|
||||
{
|
||||
LVITEM& item = nmlvDispInfo->item;
|
||||
if(item.mask & LVIF_TEXT)
|
||||
{
|
||||
switch(item.iSubItem)
|
||||
{
|
||||
case COLUMN_ICONS:
|
||||
{
|
||||
if(item.iImage == I_IMAGECALLBACK)
|
||||
{
|
||||
item.iImage = bookmarks.FindBookmarkAtFrame(item.iItem);
|
||||
if (item.iImage < 0)
|
||||
{
|
||||
if (item.iItem == currFrameCounter)
|
||||
item.iImage = ARROW_IMAGE_ID;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case COLUMN_FRAMENUM:
|
||||
case COLUMN_FRAMENUM2:
|
||||
{
|
||||
U32ToDecStr(item.pszText, item.iItem, DIGITS_IN_FRAMENUM);
|
||||
break;
|
||||
}
|
||||
case COLUMN_JOYPAD1_A: case COLUMN_JOYPAD1_B: case COLUMN_JOYPAD1_S: case COLUMN_JOYPAD1_T:
|
||||
case COLUMN_JOYPAD1_U: case COLUMN_JOYPAD1_D: case COLUMN_JOYPAD1_L: case COLUMN_JOYPAD1_R:
|
||||
case COLUMN_JOYPAD2_A: case COLUMN_JOYPAD2_B: case COLUMN_JOYPAD2_S: case COLUMN_JOYPAD2_T:
|
||||
case COLUMN_JOYPAD2_U: case COLUMN_JOYPAD2_D: case COLUMN_JOYPAD2_L: case COLUMN_JOYPAD2_R:
|
||||
case COLUMN_JOYPAD3_A: case COLUMN_JOYPAD3_B: case COLUMN_JOYPAD3_S: case COLUMN_JOYPAD3_T:
|
||||
case COLUMN_JOYPAD3_U: case COLUMN_JOYPAD3_D: case COLUMN_JOYPAD3_L: case COLUMN_JOYPAD3_R:
|
||||
case COLUMN_JOYPAD4_A: case COLUMN_JOYPAD4_B: case COLUMN_JOYPAD4_S: case COLUMN_JOYPAD4_T:
|
||||
case COLUMN_JOYPAD4_U: case COLUMN_JOYPAD4_D: case COLUMN_JOYPAD4_L: case COLUMN_JOYPAD4_R:
|
||||
{
|
||||
int joy = (item.iSubItem - COLUMN_JOYPAD1_A) / NUM_JOYPAD_BUTTONS;
|
||||
int bit = (item.iSubItem - COLUMN_JOYPAD1_A) % NUM_JOYPAD_BUTTONS;
|
||||
uint8 data = currMovieData.records[item.iItem].joysticks[joy];
|
||||
if(data & (1<<bit))
|
||||
{
|
||||
item.pszText[0] = buttonNames[bit][0];
|
||||
item.pszText[2] = 0;
|
||||
} else
|
||||
{
|
||||
if (TASEdit_enable_hot_changes && history.GetCurrentSnapshot().GetHotChangeInfo(item.iItem, item.iSubItem - COLUMN_JOYPAD1_A))
|
||||
{
|
||||
item.pszText[0] = 45; // "-"
|
||||
item.pszText[1] = 0;
|
||||
} else item.pszText[0] = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LONG TASEDIT_LIST::CustomDraw(NMLVCUSTOMDRAW* msg)
|
||||
{
|
||||
int cell_x, cell_y;
|
||||
switch(msg->nmcd.dwDrawStage)
|
||||
{
|
||||
case CDDS_PREPAINT:
|
||||
return CDRF_NOTIFYITEMDRAW;
|
||||
case CDDS_ITEMPREPAINT:
|
||||
return CDRF_NOTIFYSUBITEMDRAW;
|
||||
case CDDS_SUBITEMPREPAINT:
|
||||
cell_x = msg->iSubItem;
|
||||
cell_y = msg->nmcd.dwItemSpec;
|
||||
|
||||
|
||||
|
||||
if(cell_x > COLUMN_ICONS)
|
||||
{
|
||||
SelectObject(msg->nmcd.hdc, hMainListFont);
|
||||
// text color
|
||||
if(TASEdit_enable_hot_changes && cell_x >= COLUMN_JOYPAD1_A && cell_x <= COLUMN_JOYPAD4_R)
|
||||
{
|
||||
msg->clrText = hot_changes_colors[history.GetCurrentSnapshot().GetHotChangeInfo(cell_y, cell_x - COLUMN_JOYPAD1_A)];
|
||||
} else msg->clrText = NORMAL_TEXT_COLOR;
|
||||
// bg color
|
||||
if(cell_x == COLUMN_FRAMENUM || cell_x == COLUMN_FRAMENUM2)
|
||||
{
|
||||
// frame number
|
||||
if (cell_y == history.GetUndoHint())
|
||||
{
|
||||
// undo hint here
|
||||
if(TASEdit_show_markers && (int)markers.markers_array.size() > cell_y && (markers.markers_array[cell_y] & MARKER_FLAG_BIT))
|
||||
msg->clrTextBk = MARKED_UNDOHINT_FRAMENUM_COLOR;
|
||||
else
|
||||
msg->clrTextBk = UNDOHINT_FRAMENUM_COLOR;
|
||||
} else if (cell_y == currFrameCounter || cell_y == (playback.GetPauseFrame() - 1))
|
||||
{
|
||||
// current frame
|
||||
if(TASEdit_show_markers && (int)markers.markers_array.size() > cell_y && (markers.markers_array[cell_y] & MARKER_FLAG_BIT))
|
||||
// this frame is also marked
|
||||
msg->clrTextBk = CUR_MARKED_FRAMENUM_COLOR;
|
||||
else
|
||||
msg->clrTextBk = CUR_FRAMENUM_COLOR;
|
||||
} else if(TASEdit_show_markers && (int)markers.markers_array.size() > cell_y && (markers.markers_array[cell_y] & MARKER_FLAG_BIT))
|
||||
{
|
||||
// marked frame
|
||||
msg->clrTextBk = MARKED_FRAMENUM_COLOR;
|
||||
} else if(cell_y < greenzone.greenZoneCount)
|
||||
{
|
||||
if (!greenzone.savestates[cell_y].empty())
|
||||
{
|
||||
if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y])
|
||||
msg->clrTextBk = LAG_FRAMENUM_COLOR;
|
||||
else
|
||||
msg->clrTextBk = GREENZONE_FRAMENUM_COLOR;
|
||||
} else if ((!greenzone.savestates[cell_y & EVERY16TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0xF) + 1 && !greenzone.savestates[(cell_y | 0xF) + 1].empty())
|
||||
|| (!greenzone.savestates[cell_y & EVERY8TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0x7) + 1 && !greenzone.savestates[(cell_y | 0x7) + 1].empty())
|
||||
|| (!greenzone.savestates[cell_y & EVERY4TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0x3) + 1 && !greenzone.savestates[(cell_y | 0x3) + 1].empty())
|
||||
|| (!greenzone.savestates[cell_y & EVERY2ND].empty() && !greenzone.savestates[(cell_y | 0x1) + 1].empty()))
|
||||
{
|
||||
if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y])
|
||||
msg->clrTextBk = PALE_LAG_FRAMENUM_COLOR;
|
||||
else
|
||||
msg->clrTextBk = PALE_GREENZONE_FRAMENUM_COLOR;
|
||||
} else msg->clrTextBk = NORMAL_FRAMENUM_COLOR;
|
||||
} else msg->clrTextBk = NORMAL_FRAMENUM_COLOR;
|
||||
} else if((cell_x - COLUMN_JOYPAD1_A) / NUM_JOYPAD_BUTTONS == 0 || (cell_x - COLUMN_JOYPAD1_A) / NUM_JOYPAD_BUTTONS == 2)
|
||||
{
|
||||
// pad 1 or 3
|
||||
if (cell_y == history.GetUndoHint())
|
||||
{
|
||||
// undo hint here
|
||||
msg->clrTextBk = UNDOHINT_INPUT_COLOR1;
|
||||
} else if (cell_y == currFrameCounter || cell_y == (playback.GetPauseFrame() - 1))
|
||||
{
|
||||
// current frame
|
||||
msg->clrTextBk = CUR_INPUT_COLOR1;
|
||||
} else if(cell_y < greenzone.greenZoneCount)
|
||||
{
|
||||
if (!greenzone.savestates[cell_y].empty())
|
||||
{
|
||||
if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y])
|
||||
msg->clrTextBk = LAG_INPUT_COLOR1;
|
||||
else
|
||||
msg->clrTextBk = GREENZONE_INPUT_COLOR1;
|
||||
} else if ((!greenzone.savestates[cell_y & EVERY16TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0xF) + 1 && !greenzone.savestates[(cell_y | 0xF) + 1].empty())
|
||||
|| (!greenzone.savestates[cell_y & EVERY8TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0x7) + 1 && !greenzone.savestates[(cell_y | 0x7) + 1].empty())
|
||||
|| (!greenzone.savestates[cell_y & EVERY4TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0x3) + 1 && !greenzone.savestates[(cell_y | 0x3) + 1].empty())
|
||||
|| (!greenzone.savestates[cell_y & EVERY2ND].empty() && !greenzone.savestates[(cell_y | 0x1) + 1].empty()))
|
||||
{
|
||||
if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y])
|
||||
msg->clrTextBk = PALE_LAG_INPUT_COLOR1;
|
||||
else
|
||||
msg->clrTextBk = PALE_GREENZONE_INPUT_COLOR1;
|
||||
} else msg->clrTextBk = NORMAL_INPUT_COLOR1;
|
||||
} else msg->clrTextBk = NORMAL_INPUT_COLOR1;
|
||||
} else if((cell_x - COLUMN_JOYPAD1_A) / NUM_JOYPAD_BUTTONS == 1 || (cell_x - COLUMN_JOYPAD1_A) / NUM_JOYPAD_BUTTONS == 3)
|
||||
{
|
||||
// pad 2 or 4
|
||||
if (cell_y == history.GetUndoHint())
|
||||
{
|
||||
// undo hint here
|
||||
msg->clrTextBk = UNDOHINT_INPUT_COLOR2;
|
||||
} else if (cell_y == currFrameCounter || cell_y == (playback.GetPauseFrame() - 1))
|
||||
{
|
||||
// current frame
|
||||
msg->clrTextBk = CUR_INPUT_COLOR2;
|
||||
} else if(cell_y < greenzone.greenZoneCount)
|
||||
{
|
||||
if (!greenzone.savestates[cell_y].empty())
|
||||
{
|
||||
if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y])
|
||||
msg->clrTextBk = LAG_INPUT_COLOR2;
|
||||
else
|
||||
msg->clrTextBk = GREENZONE_INPUT_COLOR2;
|
||||
} else if ((!greenzone.savestates[cell_y & EVERY16TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0xF) + 1 && !greenzone.savestates[(cell_y | 0xF) + 1].empty())
|
||||
|| (!greenzone.savestates[cell_y & EVERY8TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0x7) + 1 && !greenzone.savestates[(cell_y | 0x7) + 1].empty())
|
||||
|| (!greenzone.savestates[cell_y & EVERY4TH].empty() && (int)greenzone.savestates.size() > (cell_y | 0x3) + 1 && !greenzone.savestates[(cell_y | 0x3) + 1].empty())
|
||||
|| (!greenzone.savestates[cell_y & EVERY2ND].empty() && !greenzone.savestates[(cell_y | 0x1) + 1].empty()))
|
||||
{
|
||||
if (TASEdit_show_lag_frames && greenzone.lag_history[cell_y])
|
||||
msg->clrTextBk = PALE_LAG_INPUT_COLOR2;
|
||||
else
|
||||
msg->clrTextBk = PALE_GREENZONE_INPUT_COLOR2;
|
||||
} else msg->clrTextBk = NORMAL_INPUT_COLOR2;
|
||||
} else msg->clrTextBk = NORMAL_INPUT_COLOR2;
|
||||
}
|
||||
}
|
||||
default:
|
||||
return CDRF_DODEFAULT;
|
||||
}
|
||||
}
|
||||
// -------------------------------------------------------------------------
|
||||
LRESULT APIENTRY HeaderWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
case WM_SETCURSOR:
|
||||
return true; // no column resizing
|
||||
case WM_LBUTTONDOWN:
|
||||
case WM_LBUTTONDBLCLK:
|
||||
{
|
||||
if (selection.GetCurrentSelectionSize())
|
||||
{
|
||||
//perform hit test
|
||||
HD_HITTESTINFO info;
|
||||
info.pt.x = GET_X_LPARAM(lParam);
|
||||
info.pt.y = GET_Y_LPARAM(lParam);
|
||||
SendMessage(hWnd,HDM_HITTEST,0,(LPARAM)&info);
|
||||
if(info.iItem >= COLUMN_FRAMENUM && info.iItem <= COLUMN_FRAMENUM2)
|
||||
ColumnSet(info.iItem);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return CallWindowProc(hwndHeader_oldWndproc, hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
//The subclass wndproc for the listview
|
||||
LRESULT APIENTRY ListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
case WM_CHAR:
|
||||
case WM_KILLFOCUS:
|
||||
return 0;
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
switch (((LPNMHDR)lParam)->code)
|
||||
{
|
||||
case HDN_BEGINTRACKW:
|
||||
case HDN_BEGINTRACKA:
|
||||
case HDN_TRACK:
|
||||
return true; // no column resizing
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_SYSKEYDOWN:
|
||||
{
|
||||
if (wParam == VK_F10)
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return CallWindowProc(hwndList_oldWndProc, hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
//Specification file for TASEDIT_LIST class
|
||||
#define CDDS_SUBITEMPREPAINT (CDDS_SUBITEM | CDDS_ITEMPREPAINT)
|
||||
#define CDDS_SUBITEMPOSTPAINT (CDDS_SUBITEM | CDDS_ITEMPOSTPAINT)
|
||||
#define CDDS_SUBITEMPREERASE (CDDS_SUBITEM | CDDS_ITEMPREERASE)
|
||||
#define CDDS_SUBITEMPOSTERASE (CDDS_SUBITEM | CDDS_ITEMPOSTERASE)
|
||||
|
||||
#define NUM_JOYPADS 4
|
||||
#define NUM_JOYPAD_BUTTONS 8
|
||||
|
||||
#define COLUMN_ICONS 0
|
||||
#define COLUMN_FRAMENUM 1
|
||||
#define COLUMN_JOYPAD1_A 2
|
||||
#define COLUMN_JOYPAD1_B 3
|
||||
#define COLUMN_JOYPAD1_S 4
|
||||
#define COLUMN_JOYPAD1_T 5
|
||||
#define COLUMN_JOYPAD1_U 6
|
||||
#define COLUMN_JOYPAD1_D 7
|
||||
#define COLUMN_JOYPAD1_L 8
|
||||
#define COLUMN_JOYPAD1_R 9
|
||||
#define COLUMN_JOYPAD2_A 10
|
||||
#define COLUMN_JOYPAD2_B 11
|
||||
#define COLUMN_JOYPAD2_S 12
|
||||
#define COLUMN_JOYPAD2_T 13
|
||||
#define COLUMN_JOYPAD2_U 14
|
||||
#define COLUMN_JOYPAD2_D 15
|
||||
#define COLUMN_JOYPAD2_L 16
|
||||
#define COLUMN_JOYPAD2_R 17
|
||||
#define COLUMN_JOYPAD3_A 18
|
||||
#define COLUMN_JOYPAD3_B 19
|
||||
#define COLUMN_JOYPAD3_S 20
|
||||
#define COLUMN_JOYPAD3_T 21
|
||||
#define COLUMN_JOYPAD3_U 22
|
||||
#define COLUMN_JOYPAD3_D 23
|
||||
#define COLUMN_JOYPAD3_L 24
|
||||
#define COLUMN_JOYPAD3_R 25
|
||||
#define COLUMN_JOYPAD4_A 26
|
||||
#define COLUMN_JOYPAD4_B 27
|
||||
#define COLUMN_JOYPAD4_S 28
|
||||
#define COLUMN_JOYPAD4_T 29
|
||||
#define COLUMN_JOYPAD4_U 30
|
||||
#define COLUMN_JOYPAD4_D 31
|
||||
#define COLUMN_JOYPAD4_L 32
|
||||
#define COLUMN_JOYPAD4_R 33
|
||||
#define COLUMN_FRAMENUM2 34
|
||||
#define DIGITS_IN_FRAMENUM 7
|
||||
#define ARROW_IMAGE_ID 20
|
||||
|
||||
// listview colors
|
||||
#define NORMAL_TEXT_COLOR 0x0
|
||||
|
||||
#define NORMAL_FRAMENUM_COLOR 0xFFFFFF
|
||||
#define NORMAL_INPUT_COLOR1 0xEDEDED
|
||||
#define NORMAL_INPUT_COLOR2 0xDEDEDE
|
||||
|
||||
#define GREENZONE_FRAMENUM_COLOR 0xDDFFDD
|
||||
#define GREENZONE_INPUT_COLOR1 0xC8F7C4
|
||||
#define GREENZONE_INPUT_COLOR2 0xAEE2AE
|
||||
|
||||
#define PALE_GREENZONE_FRAMENUM_COLOR 0xE4FFE4
|
||||
#define PALE_GREENZONE_INPUT_COLOR1 0xD5F9D4
|
||||
#define PALE_GREENZONE_INPUT_COLOR2 0xBAE6BA
|
||||
|
||||
#define LAG_FRAMENUM_COLOR 0xDBDAFF
|
||||
#define LAG_INPUT_COLOR1 0xCECBEF
|
||||
#define LAG_INPUT_COLOR2 0xBEBAE4
|
||||
|
||||
#define PALE_LAG_FRAMENUM_COLOR 0xE1E1FF
|
||||
#define PALE_LAG_INPUT_COLOR1 0xD6D3F1
|
||||
#define PALE_LAG_INPUT_COLOR2 0xC7C4E8
|
||||
|
||||
#define CUR_FRAMENUM_COLOR 0xFCF1CE
|
||||
#define CUR_INPUT_COLOR1 0xF7E9B2
|
||||
#define CUR_INPUT_COLOR2 0xE4D8A8
|
||||
|
||||
#define UNDOHINT_FRAMENUM_COLOR 0xF9DDE6
|
||||
#define UNDOHINT_INPUT_COLOR1 0xF6CCDD
|
||||
#define UNDOHINT_INPUT_COLOR2 0xE5B7CC
|
||||
|
||||
#define MARKED_FRAMENUM_COLOR 0xC0FCFF
|
||||
#define CUR_MARKED_FRAMENUM_COLOR 0xDEF7F3
|
||||
#define MARKED_UNDOHINT_FRAMENUM_COLOR 0xE1E7EC
|
||||
|
||||
|
||||
|
||||
class TASEDIT_LIST
|
||||
{
|
||||
public:
|
||||
TASEDIT_LIST();
|
||||
void init();
|
||||
void free();
|
||||
void update();
|
||||
|
||||
void AddFourscore();
|
||||
void RemoveFourscore();
|
||||
|
||||
void RedrawList();
|
||||
void RedrawRow(int index);
|
||||
|
||||
bool CheckItemVisible(int frame);
|
||||
|
||||
void FollowPlayback();
|
||||
void FollowUndo();
|
||||
void FollowSelection();
|
||||
void FollowPauseframe();
|
||||
|
||||
void GetDispInfo(NMLVDISPINFO* nmlvDispInfo);
|
||||
LONG CustomDraw(NMLVCUSTOMDRAW* msg);
|
||||
|
||||
|
||||
HWND hwndList, hwndHeader;
|
||||
HIMAGELIST himglist;
|
||||
|
||||
private:
|
||||
int listItems; // number of items per list page
|
||||
|
||||
|
||||
// GDI stuff
|
||||
HFONT hMainListFont, hMainListSelectFont;
|
||||
|
||||
|
||||
};
|
|
@ -7,9 +7,7 @@
|
|||
char selection_save_id[SELECTION_ID_LEN] = "SELECTION";
|
||||
|
||||
extern MARKERS markers;
|
||||
|
||||
extern HWND hwndList;
|
||||
extern void RedrawList();
|
||||
extern TASEDIT_LIST tasedit_list;
|
||||
|
||||
TASEDIT_SELECTION::TASEDIT_SELECTION()
|
||||
{
|
||||
|
@ -40,7 +38,7 @@ void TASEDIT_SELECTION::free()
|
|||
|
||||
void TASEDIT_SELECTION::update()
|
||||
{
|
||||
// keep selection within list limits
|
||||
// keep selection within movie limits
|
||||
if (CurrentSelection().size())
|
||||
{
|
||||
int delete_index;
|
||||
|
@ -56,13 +54,6 @@ void TASEDIT_SELECTION::update()
|
|||
|
||||
}
|
||||
|
||||
bool TASEDIT_SELECTION::CheckFrameSelected(int frame)
|
||||
{
|
||||
if(CurrentSelection().find(frame) == CurrentSelection().end())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TASEDIT_SELECTION::save(EMUFILE *os)
|
||||
{
|
||||
// write "SELECTION" string
|
||||
|
@ -228,11 +219,6 @@ void TASEDIT_SELECTION::AddNewSelectionToHistory()
|
|||
selections_history[(history_start_pos + history_cursor_pos) % history_size] = selectionFrames;
|
||||
}
|
||||
|
||||
SelectionFrames& TASEDIT_SELECTION::CurrentSelection()
|
||||
{
|
||||
return selections_history[(history_start_pos + history_cursor_pos) % history_size];
|
||||
}
|
||||
|
||||
void TASEDIT_SELECTION::jump(int new_pos)
|
||||
{
|
||||
if (new_pos < 0) new_pos = 0; else if (new_pos >= history_total_items) new_pos = history_total_items-1;
|
||||
|
@ -256,8 +242,8 @@ void TASEDIT_SELECTION::redo()
|
|||
|
||||
void TASEDIT_SELECTION::MemorizeClipboardSelection()
|
||||
{
|
||||
// copy current selection data to clipboard_selection
|
||||
clipboard_selection = CurrentSelection();
|
||||
// copy currently strobed selection data to clipboard_selection
|
||||
clipboard_selection = temp_selection;
|
||||
}
|
||||
void TASEDIT_SELECTION::ReselectClipboard()
|
||||
{
|
||||
|
@ -272,11 +258,11 @@ void TASEDIT_SELECTION::ReselectClipboard()
|
|||
// ----------------------------------------------------------
|
||||
void TASEDIT_SELECTION::ClearSelection()
|
||||
{
|
||||
ListView_SetItemState(hwndList, -1, 0, LVIS_FOCUSED|LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, -1, 0, LVIS_FOCUSED|LVIS_SELECTED);
|
||||
}
|
||||
void TASEDIT_SELECTION::ClearRowSelection(int index)
|
||||
{
|
||||
ListView_SetItemState(hwndList, index, 0, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, index, 0, LVIS_SELECTED);
|
||||
}
|
||||
|
||||
void TASEDIT_SELECTION::EnforceSelectionToList()
|
||||
|
@ -285,24 +271,24 @@ void TASEDIT_SELECTION::EnforceSelectionToList()
|
|||
ClearSelection();
|
||||
for(SelectionFrames::reverse_iterator it(CurrentSelection().rbegin()); it != CurrentSelection().rend(); it++)
|
||||
{
|
||||
ListView_SetItemState(hwndList, *it, LVIS_SELECTED, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, *it, LVIS_SELECTED, LVIS_SELECTED);
|
||||
}
|
||||
track_selection_changes = true;
|
||||
}
|
||||
|
||||
void TASEDIT_SELECTION::SelectAll()
|
||||
{
|
||||
ListView_SetItemState(hwndList, -1, LVIS_SELECTED, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, -1, LVIS_SELECTED, LVIS_SELECTED);
|
||||
//RedrawList();
|
||||
}
|
||||
void TASEDIT_SELECTION::SetRowSelection(int index)
|
||||
{
|
||||
ListView_SetItemState(hwndList, index, LVIS_SELECTED, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, index, LVIS_SELECTED, LVIS_SELECTED);
|
||||
}
|
||||
void TASEDIT_SELECTION::SetRegionSelection(int start, int end)
|
||||
{
|
||||
for (int i = start; i <= end; ++i)
|
||||
ListView_SetItemState(hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
}
|
||||
void TASEDIT_SELECTION::SelectMidMarkers()
|
||||
{
|
||||
|
@ -326,7 +312,7 @@ void TASEDIT_SELECTION::SelectMidMarkers()
|
|||
if (markers.markers_array[lower_marker] & MARKER_FLAG_BIT) break;
|
||||
|
||||
// clear selection without clearing focused, because otherwise there's strange bug when quickly pressing Ctrl+A right after clicking on already selected row
|
||||
ListView_SetItemState(hwndList, -1, 0, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, -1, 0, LVIS_SELECTED);
|
||||
|
||||
// special case
|
||||
if (upper_marker == -1 && lower_marker == movie_size)
|
||||
|
@ -341,7 +327,7 @@ void TASEDIT_SELECTION::SelectMidMarkers()
|
|||
// default: select all between markers
|
||||
for (int i = upper_marker+1; i < lower_marker; ++i)
|
||||
{
|
||||
ListView_SetItemState(hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
}
|
||||
} else if (upper_border == upper_marker+1 && lower_border == lower_marker-1)
|
||||
{
|
||||
|
@ -350,14 +336,14 @@ void TASEDIT_SELECTION::SelectMidMarkers()
|
|||
if (lower_marker >= movie_size) lower_marker = movie_size - 1;
|
||||
for (int i = upper_marker; i <= lower_marker; ++i)
|
||||
{
|
||||
ListView_SetItemState(hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
}
|
||||
} else if (upper_border <= upper_marker && lower_border >= lower_marker)
|
||||
{
|
||||
// selected all between markers and both markers selected too - now deselect lower marker
|
||||
for (int i = upper_marker; i < lower_marker; ++i)
|
||||
{
|
||||
ListView_SetItemState(hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
}
|
||||
} else if (upper_border == upper_marker && lower_border == lower_marker-1)
|
||||
{
|
||||
|
@ -365,22 +351,48 @@ void TASEDIT_SELECTION::SelectMidMarkers()
|
|||
if (lower_marker >= movie_size) lower_marker = movie_size - 1;
|
||||
for (int i = upper_marker+1; i <= lower_marker; ++i)
|
||||
{
|
||||
ListView_SetItemState(hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
}
|
||||
} else if (upper_border == upper_marker+1 && lower_border == lower_marker)
|
||||
{
|
||||
// selected all between markers and lower marker selected too - now deselect lower marker (return to "selected all between markers")
|
||||
for (int i = upper_marker + 1; i < lower_marker; ++i)
|
||||
{
|
||||
ListView_SetItemState(hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
ListView_SetItemState(tasedit_list.hwndList, i, LVIS_SELECTED, LVIS_SELECTED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// getters
|
||||
int TASEDIT_SELECTION::GetCurrentSelectionSize()
|
||||
{
|
||||
return selections_history[(history_start_pos + history_cursor_pos) % history_size].size();
|
||||
}
|
||||
int TASEDIT_SELECTION::GetCurrentSelectionBeginning()
|
||||
{
|
||||
if (selections_history[(history_start_pos + history_cursor_pos) % history_size].size())
|
||||
return *selections_history[(history_start_pos + history_cursor_pos) % history_size].begin();
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
bool TASEDIT_SELECTION::CheckFrameSelected(int frame)
|
||||
{
|
||||
if(CurrentSelection().find(frame) == CurrentSelection().end())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
SelectionFrames* TASEDIT_SELECTION::MakeStrobe()
|
||||
{
|
||||
// copy current selection to temp_selection
|
||||
temp_selection = selections_history[(history_start_pos + history_cursor_pos) % history_size];
|
||||
return &temp_selection;
|
||||
}
|
||||
SelectionFrames& TASEDIT_SELECTION::GetStrobedSelection()
|
||||
{
|
||||
return temp_selection;
|
||||
}
|
||||
// this getter is only for inside-class use
|
||||
SelectionFrames& TASEDIT_SELECTION::CurrentSelection()
|
||||
{
|
||||
return selections_history[(history_start_pos + history_cursor_pos) % history_size];
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ public:
|
|||
void ItemChanged(NMLISTVIEW* info);
|
||||
|
||||
void AddNewSelectionToHistory();
|
||||
SelectionFrames& CurrentSelection();
|
||||
|
||||
void undo();
|
||||
void redo();
|
||||
|
@ -39,10 +38,16 @@ public:
|
|||
void SetRegionSelection(int start, int end);
|
||||
void SelectMidMarkers();
|
||||
|
||||
|
||||
// getters
|
||||
int GetCurrentSelectionSize();
|
||||
int GetCurrentSelectionBeginning();
|
||||
bool CheckFrameSelected(int frame);
|
||||
SelectionFrames* MakeStrobe();
|
||||
SelectionFrames& GetStrobedSelection();
|
||||
|
||||
private:
|
||||
SelectionFrames& CurrentSelection();
|
||||
|
||||
bool track_selection_changes;
|
||||
|
||||
std::vector<SelectionFrames> selections_history;
|
||||
|
@ -53,5 +58,6 @@ private:
|
|||
int history_total_items;
|
||||
int history_size;
|
||||
|
||||
SelectionFrames temp_selection;
|
||||
|
||||
};
|
||||
|
|
|
@ -9,6 +9,7 @@ extern BOOKMARKS bookmarks;
|
|||
extern GREENZONE greenzone;
|
||||
extern PLAYBACK playback;
|
||||
extern INPUT_HISTORY history;
|
||||
extern TASEDIT_LIST tasedit_list;
|
||||
extern TASEDIT_SELECTION selection;
|
||||
|
||||
extern void FCEU_printf(char *format, ...);
|
||||
|
@ -81,7 +82,7 @@ bool TASEDIT_PROJECT::LoadProject(std::string PFN)
|
|||
bool error;
|
||||
LoadFM2(currMovieData, &ifs, ifs.size(), false);
|
||||
LoadSubtitles(currMovieData);
|
||||
UpdateList();
|
||||
tasedit_list.update();
|
||||
// try to load markers
|
||||
error = markers.load(&ifs);
|
||||
if (error)
|
||||
|
|
|
@ -11,6 +11,7 @@ typedef std::set<int> SelectionFrames;
|
|||
#include "greenzone.h"
|
||||
#include "markers.h"
|
||||
#include "bookmarks.h"
|
||||
#include "tasedit_list.h"
|
||||
#include "tasedit_sel.h"
|
||||
|
||||
class TASEDIT_PROJECT
|
||||
|
|
|
@ -50,7 +50,6 @@
|
|||
#include "cdlogger.h"
|
||||
#include "throttle.h"
|
||||
#include "monitor.h"
|
||||
#include "tasedit.h"
|
||||
#include "keyboard.h"
|
||||
#include "joystick.h"
|
||||
#include "oldmovie.h"
|
||||
|
@ -1923,6 +1922,7 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
|
|||
// break;
|
||||
// Removing this tool since it is redundant to both
|
||||
case MENU_TASEDIT:
|
||||
extern void EnterTasEdit();
|
||||
EnterTasEdit();
|
||||
break;
|
||||
case MENU_CONVERT_MOVIE:
|
||||
|
|
|
@ -589,6 +589,7 @@ void FCEUI_ResetNES(void)
|
|||
return;
|
||||
FCEU_QSimpleCommand(FCEUNPCMD_RESET);
|
||||
ResetFrameCounter();
|
||||
FCEU_DispMessage("Soft reset", 0);
|
||||
}
|
||||
|
||||
//Powers off the NES
|
||||
|
@ -598,6 +599,7 @@ void FCEUI_PowerNES(void)
|
|||
return;
|
||||
FCEU_QSimpleCommand(FCEUNPCMD_POWER);
|
||||
ResetFrameCounter();
|
||||
FCEU_DispMessage("Power switch", 0);
|
||||
}
|
||||
|
||||
const char* FCEUI_CommandTypeNames[]=
|
||||
|
|
|
@ -252,7 +252,6 @@ extern bool subtitlesOnAVI;
|
|||
extern bool freshMovie;
|
||||
extern bool movie_readonly;
|
||||
extern bool autoMovieBackup;
|
||||
extern int pauseframe;
|
||||
extern bool fullSaveStateLoads;
|
||||
//--------------------------------------------------
|
||||
void FCEUI_MakeBackupMovie(bool dispMessage);
|
||||
|
|
|
@ -426,6 +426,7 @@
|
|||
<ClCompile Include="..\src\drivers\win\taseditlib\inputsnapshot.cpp" />
|
||||
<ClCompile Include="..\src\drivers\win\taseditlib\markers.cpp" />
|
||||
<ClCompile Include="..\src\drivers\win\taseditlib\playback.cpp" />
|
||||
<ClCompile Include="..\src\drivers\win\taseditlib\tasedit_list.cpp" />
|
||||
<ClCompile Include="..\src\drivers\win\taseditlib\tasedit_sel.cpp" />
|
||||
<ClCompile Include="..\src\drivers\win\texthook.cpp" />
|
||||
<ClCompile Include="..\src\drivers\win\throttle.cpp" />
|
||||
|
@ -739,6 +740,7 @@
|
|||
<ClInclude Include="..\src\drivers\win\state.h" />
|
||||
<ClInclude Include="..\src\drivers\win\tasedit.h" />
|
||||
<ClInclude Include="..\src\drivers\win\taseditlib\inputhistory.h" />
|
||||
<ClInclude Include="..\src\drivers\win\taseditlib\tasedit_list.h" />
|
||||
<ClInclude Include="..\src\drivers\win\taseditlib\tasedit_sel.h" />
|
||||
<ClInclude Include="..\src\drivers\win\texthook.h" />
|
||||
<ClInclude Include="..\src\drivers\win\throttle.h" />
|
||||
|
|
|
@ -929,6 +929,7 @@
|
|||
<Filter>drivers\win\taseditlib</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\drivers\win\taseditlib\tasedit_sel.cpp" />
|
||||
<ClCompile Include="..\src\drivers\win\taseditlib\tasedit_list.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\src\cart.h">
|
||||
|
@ -1377,6 +1378,7 @@
|
|||
<Filter>drivers\win\taseditlib</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\drivers\win\taseditlib\tasedit_sel.h" />
|
||||
<ClInclude Include="..\src\drivers\win\taseditlib\tasedit_list.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="..\src\drivers\win\res.rc">
|
||||
|
|
Loading…
Reference in New Issue