Win - TASEdit updates - display readonly in-window and allow saving greenzone.
This commit is contained in:
parent
28cc8f5aae
commit
f0b33ec203
|
@ -158,6 +158,19 @@ void UpdateTasEdit()
|
||||||
|
|
||||||
lastCursor = newCursor;
|
lastCursor = newCursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int old_movie_readonly=-1;
|
||||||
|
if (old_movie_readonly != movie_readonly)
|
||||||
|
{
|
||||||
|
old_movie_readonly = movie_readonly;
|
||||||
|
if (movie_readonly)
|
||||||
|
{
|
||||||
|
SetWindowText(hwndTasEdit, "TAS Editor");
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
SetWindowText(hwndTasEdit, "TAS Editor (Recording)");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RedrawList()
|
void RedrawList()
|
||||||
|
|
|
@ -63,9 +63,12 @@ bool TASEDIT_PROJECT::SaveProject()
|
||||||
std::ofstream ofs;
|
std::ofstream ofs;
|
||||||
//ofs << GetProjectName() << std::endl;
|
//ofs << GetProjectName() << std::endl;
|
||||||
//ofs << GetFM2Name() << std::endl;
|
//ofs << GetFM2Name() << std::endl;
|
||||||
ofs.open(filename);
|
ofs.open(filename, std::ios_base::binary);
|
||||||
|
|
||||||
currMovieData.dump(&ofs, true);
|
currMovieData.dump(&ofs, true);
|
||||||
|
ofs.put('\0'); // TODO: Add main branch name.
|
||||||
|
currMovieData.dumpGreenzone(&ofs, true);
|
||||||
|
|
||||||
ofs.close();
|
ofs.close();
|
||||||
|
|
||||||
changed=false;
|
changed=false;
|
||||||
|
@ -78,14 +81,18 @@ extern bool LoadFM2(MovieData& movieData, std::istream* fp, int size, bool stopA
|
||||||
bool TASEDIT_PROJECT::LoadProject(std::string PFN)
|
bool TASEDIT_PROJECT::LoadProject(std::string PFN)
|
||||||
{
|
{
|
||||||
const char* filename = PFN.c_str();
|
const char* filename = PFN.c_str();
|
||||||
//char buf[4096];
|
|
||||||
SetProjectName(PFN);
|
SetProjectName(PFN);
|
||||||
std::ifstream ifs;
|
std::ifstream ifs;
|
||||||
ifs.open(filename);
|
ifs.open(filename, std::ios_base::binary);
|
||||||
//ifs.getline(ifs, 4090);
|
|
||||||
//ifs.getline(ifs, 4090);
|
|
||||||
LoadFM2(currMovieData, &ifs, INT_MAX, false);
|
LoadFM2(currMovieData, &ifs, INT_MAX, false);
|
||||||
LoadSubtitles(currMovieData);
|
LoadSubtitles(currMovieData);
|
||||||
|
|
||||||
|
char asdf;
|
||||||
|
ifs.get(asdf); // TODO: Add main branch name.
|
||||||
|
currMovieData.loadGreenzone(&ifs, true);
|
||||||
|
|
||||||
poweron(true);
|
poweron(true);
|
||||||
|
|
||||||
ifs.close();
|
ifs.close();
|
||||||
|
|
|
@ -380,6 +380,10 @@ void MovieData::installValue(std::string& key, std::string& val)
|
||||||
StringToBytes(val,&savestate[0],len); // decodes either base64 or hex
|
StringToBytes(val,&savestate[0],len); // decodes either base64 or hex
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (key == "length")
|
||||||
|
{
|
||||||
|
installInt(val, loadFrameCount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int MovieData::dump(std::ostream *os, bool binary)
|
int MovieData::dump(std::ostream *os, bool binary)
|
||||||
|
@ -408,6 +412,10 @@ int MovieData::dump(std::ostream *os, bool binary)
|
||||||
|
|
||||||
if(savestate.size() != 0)
|
if(savestate.size() != 0)
|
||||||
*os << "savestate " << BytesToString(&savestate[0],savestate.size()) << endl;
|
*os << "savestate " << BytesToString(&savestate[0],savestate.size()) << endl;
|
||||||
|
|
||||||
|
if(FCEUMOV_Mode(MOVIEMODE_TASEDIT))
|
||||||
|
*os << "length " << this->records.size() << endl;
|
||||||
|
|
||||||
if(binary)
|
if(binary)
|
||||||
{
|
{
|
||||||
//put one | to start the binary dump
|
//put one | to start the binary dump
|
||||||
|
@ -423,6 +431,51 @@ int MovieData::dump(std::ostream *os, bool binary)
|
||||||
return end-start;
|
return end-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int MovieData::dumpGreenzone(std::ostream *os, bool binary)
|
||||||
|
{
|
||||||
|
int start = os->tellp();
|
||||||
|
int frame, size;
|
||||||
|
for (int i=0; i<(int)records.size(); ++i)
|
||||||
|
{
|
||||||
|
if (records[i].savestate.empty())
|
||||||
|
continue;
|
||||||
|
frame=i;
|
||||||
|
size=records[i].savestate.size();
|
||||||
|
write32le(frame, os);
|
||||||
|
write32le(size, os);
|
||||||
|
|
||||||
|
os->write(&records[i].savestate[0], size);
|
||||||
|
}
|
||||||
|
frame=-1;
|
||||||
|
size=currMovieData.greenZoneCount;
|
||||||
|
write32le(frame, os);
|
||||||
|
write32le(size, os);
|
||||||
|
|
||||||
|
int end= os->tellp();
|
||||||
|
|
||||||
|
return end-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
int MovieData::loadGreenzone(std::istream *is, bool binary)
|
||||||
|
{
|
||||||
|
int frame, size;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
if (!read32le((uint32 *)&frame, is)) {size=0; break;}
|
||||||
|
if (!read32le((uint32 *)&size, is)) {size=0; break;}
|
||||||
|
if (frame==-1) break;
|
||||||
|
int pos = is->tellg();
|
||||||
|
FCEUSS_LoadFP(is, SSLOADPARAM_NOBACKUP);
|
||||||
|
is->seekg(pos+size);
|
||||||
|
}
|
||||||
|
greenZoneCount=size;
|
||||||
|
|
||||||
|
UpdateTasEdit();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int FCEUMOV_GetFrame(void)
|
int FCEUMOV_GetFrame(void)
|
||||||
{
|
{
|
||||||
return currFrameCounter;
|
return currFrameCounter;
|
||||||
|
@ -495,6 +548,9 @@ static void LoadFM2_binarychunk(MovieData& movieData, std::istream* fp, int size
|
||||||
int todo = std::min(size, flen);
|
int todo = std::min(size, flen);
|
||||||
|
|
||||||
int numRecords = todo/recordsize;
|
int numRecords = todo/recordsize;
|
||||||
|
if (movieData.loadFrameCount!=-1 && movieData.loadFrameCount<numRecords)
|
||||||
|
numRecords=movieData.loadFrameCount;
|
||||||
|
|
||||||
movieData.records.resize(numRecords);
|
movieData.records.resize(numRecords);
|
||||||
for(int i=0;i<numRecords;i++)
|
for(int i=0;i<numRecords;i++)
|
||||||
{
|
{
|
||||||
|
@ -505,6 +561,9 @@ static void LoadFM2_binarychunk(MovieData& movieData, std::istream* fp, int size
|
||||||
//yuck... another custom text parser.
|
//yuck... another custom text parser.
|
||||||
bool LoadFM2(MovieData& movieData, std::istream* fp, int size, bool stopAfterHeader)
|
bool LoadFM2(MovieData& movieData, std::istream* fp, int size, bool stopAfterHeader)
|
||||||
{
|
{
|
||||||
|
// Non-TAS projects consume until EOF
|
||||||
|
movieData.installValue(std::string("length"), std::string("-1"));
|
||||||
|
|
||||||
//first, look for an fcm signature
|
//first, look for an fcm signature
|
||||||
char fcmbuf[3];
|
char fcmbuf[3];
|
||||||
std::ios::pos_type curr = fp->tellg();
|
std::ios::pos_type curr = fp->tellg();
|
||||||
|
|
|
@ -183,6 +183,7 @@ public:
|
||||||
|
|
||||||
//----TasEdit stuff---
|
//----TasEdit stuff---
|
||||||
int greenZoneCount;
|
int greenZoneCount;
|
||||||
|
int loadFrameCount;
|
||||||
//----
|
//----
|
||||||
|
|
||||||
int getNumRecords() { return records.size(); }
|
int getNumRecords() { return records.size(); }
|
||||||
|
@ -218,6 +219,9 @@ public:
|
||||||
void truncateAt(int frame);
|
void truncateAt(int frame);
|
||||||
void installValue(std::string& key, std::string& val);
|
void installValue(std::string& key, std::string& val);
|
||||||
int dump(std::ostream* os, bool binary);
|
int dump(std::ostream* os, bool binary);
|
||||||
|
int dumpGreenzone(std::ostream *os, bool binary);
|
||||||
|
int loadGreenzone(std::istream *is, bool binary);
|
||||||
|
|
||||||
void clearRecordRange(int start, int len);
|
void clearRecordRange(int start, int len);
|
||||||
void insertEmpty(int at, int frames);
|
void insertEmpty(int at, int frames);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue