mirror of
https://github.com/microsoft/Microsoft-3D-Movie-Maker.git
synced 2024-11-25 11:42:35 +01:00
256 lines
5.4 KiB
C++
256 lines
5.4 KiB
C++
|
/* Copyright (c) Microsoft Corporation.
|
||
|
Licensed under the MIT License. */
|
||
|
|
||
|
/***************************************************************************
|
||
|
|
||
|
Chunky editor.
|
||
|
|
||
|
***************************************************************************/
|
||
|
#include "ched.h"
|
||
|
ASSERTNAME
|
||
|
|
||
|
|
||
|
BEGIN_CMD_MAP(APP, APPB)
|
||
|
ON_CID_GEN(cidNew, &APP::FCmdOpen, pvNil)
|
||
|
ON_CID_GEN(cidOpen, &APP::FCmdOpen, pvNil)
|
||
|
ON_CID_GEN(cidNewText, &APP::FCmdOpen, pvNil)
|
||
|
ON_CID_GEN(cidOpenText, &APP::FCmdOpen, pvNil)
|
||
|
END_CMD_MAP_NIL()
|
||
|
|
||
|
APP vapp;
|
||
|
|
||
|
RTCLASS(APP)
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
Main for a frame app.
|
||
|
***************************************************************************/
|
||
|
void FrameMain(void)
|
||
|
{
|
||
|
vapp.Run(fappNil, fgobNil, kginDefault);
|
||
|
}
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
Initialize the APP - do the command line parsing thing.
|
||
|
***************************************************************************/
|
||
|
bool APP::_FInit(ulong grfapp, ulong grfgob, long ginDef)
|
||
|
{
|
||
|
if (!APP_PAR::_FInit(grfapp, grfgob, ginDef))
|
||
|
return fFalse;
|
||
|
|
||
|
#ifdef WIN
|
||
|
//parse the command line and load any resource files and help files
|
||
|
FNI fni;
|
||
|
STN stn;
|
||
|
bool fQuote, fScript, fSkip;
|
||
|
PDMD pdmd;
|
||
|
PDDG pddg;
|
||
|
PDOCB pdocb;
|
||
|
long lw;
|
||
|
PSZ psz = vwig.pszCmdLine;
|
||
|
|
||
|
fSkip = fTrue;
|
||
|
fScript = fFalse;
|
||
|
for (;;)
|
||
|
{
|
||
|
while (*psz == kchSpace)
|
||
|
psz++;
|
||
|
if (!*psz)
|
||
|
break;
|
||
|
|
||
|
stn.SetNil();
|
||
|
fQuote = fFalse;
|
||
|
while (*psz && (fQuote || *psz != kchSpace))
|
||
|
{
|
||
|
if (*psz == ChLit('"'))
|
||
|
fQuote = !fQuote;
|
||
|
else
|
||
|
stn.FAppendCh(*psz);
|
||
|
psz++;
|
||
|
}
|
||
|
|
||
|
if (stn.Cch() == 0)
|
||
|
continue;
|
||
|
|
||
|
if (fSkip)
|
||
|
{
|
||
|
// application path
|
||
|
fSkip = fFalse;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (stn.Cch() == 2 && (stn.Psz()[0] == ChLit('/') ||
|
||
|
stn.Psz()[0] == ChLit('-')))
|
||
|
{
|
||
|
// command line switch
|
||
|
switch (stn.Psz()[1])
|
||
|
{
|
||
|
case ChLit('s'):
|
||
|
fScript = fTrue;
|
||
|
break;
|
||
|
}
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (fScript)
|
||
|
{
|
||
|
// this arg should be a cno
|
||
|
fScript = fFalse;
|
||
|
if (!stn.FGetLw(&lw))
|
||
|
continue;
|
||
|
|
||
|
if (pvNil == (pdmd = DMD::PdmdTop()))
|
||
|
continue;
|
||
|
if (pvNil == (pddg = pdmd->Pdocb()->PddgActive()) ||
|
||
|
!pddg->FIs(kclsDCD))
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
((PDCD)pddg)->FTestScript(kctgScript, lw);
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (!fni.FBuildFromPath(&stn) || fni.Ftg() == kftgDir)
|
||
|
continue;
|
||
|
|
||
|
if (pvNil != (pdocb = DOCB::PdocbFromFni(&fni)))
|
||
|
{
|
||
|
pdocb->ActivateDmd();
|
||
|
continue;
|
||
|
}
|
||
|
if (pvNil == (pdocb = (PDOCB)DOC::PdocNew(&fni)))
|
||
|
continue;
|
||
|
pdocb->PdmdNew();
|
||
|
ReleasePpo(&pdocb);
|
||
|
}
|
||
|
#endif //WIN
|
||
|
return fTrue;
|
||
|
}
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
Get the name for the frame tester app.
|
||
|
***************************************************************************/
|
||
|
void APP::GetStnAppName(PSTN pstn)
|
||
|
{
|
||
|
AssertThis(0);
|
||
|
AssertPo(pstn, 0);
|
||
|
|
||
|
#ifdef UNICODE
|
||
|
STN stnDate;
|
||
|
STN stnTime;
|
||
|
|
||
|
stnDate.SetSzs(__DATE__);
|
||
|
stnTime.SetSzs(__TIME__);
|
||
|
pstn->FFormatSz(Debug(PszLit("Debug ")) PszLit("Ched (Unicode; %s; %s)"),
|
||
|
&stnDate, &stnTime);
|
||
|
#else //!UNICODE
|
||
|
*pstn = Debug("Debug ") "Ched (Ansi; " __DATE__ "; " __TIME__ ")";
|
||
|
#endif //!UNICODE
|
||
|
}
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
Update the given window. *prc is the bounding rectangle of the update
|
||
|
region.
|
||
|
***************************************************************************/
|
||
|
void APP::UpdateHwnd(HWND hwnd, RC *prc, ulong grfapp)
|
||
|
{
|
||
|
AssertThis(0);
|
||
|
PGOB pgob;
|
||
|
|
||
|
if (pvNil == (pgob = GOB::PgobFromHwnd(hwnd)))
|
||
|
return;
|
||
|
|
||
|
//for script windows, do offscreen updating
|
||
|
if (pgob->FIs(kclsTSCG))
|
||
|
grfapp |= fappOffscreen;
|
||
|
|
||
|
APP_PAR::UpdateHwnd(hwnd, prc, grfapp);
|
||
|
}
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
Do a fast update of the gob and its descendents into the given gpt.
|
||
|
***************************************************************************/
|
||
|
void APP::_FastUpdate(PGOB pgob, PREGN pregnClip, ulong grfapp, PGPT pgpt)
|
||
|
{
|
||
|
AssertThis(0);
|
||
|
AssertPo(pgob, 0);
|
||
|
AssertPo(pregnClip, 0);
|
||
|
AssertNilOrPo(pgpt, 0);
|
||
|
|
||
|
if (pgob->FIs(kclsTSCG))
|
||
|
grfapp |= fappOffscreen;
|
||
|
|
||
|
APP_PAR::_FastUpdate(pgob, pregnClip, grfapp, pgpt);
|
||
|
}
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
Open an existing or new chunky file for editing.
|
||
|
Handles cidNew and cidOpen.
|
||
|
***************************************************************************/
|
||
|
bool APP::FCmdOpen(PCMD pcmd)
|
||
|
{
|
||
|
FNI fni;
|
||
|
FNI *pfni;
|
||
|
PDOCB pdocb;
|
||
|
|
||
|
pfni = pvNil;
|
||
|
switch (pcmd->cid)
|
||
|
{
|
||
|
default:
|
||
|
Bug("why are we here?");
|
||
|
return fTrue;
|
||
|
|
||
|
case cidOpen:
|
||
|
//do the standard dialog
|
||
|
if (!FGetFniOpenMacro(&fni, pvNil, 0,
|
||
|
PszLit("Chunky Files\0*.chk;*.cfl\0All Files\0*.*\0"),
|
||
|
vwig.hwndApp))
|
||
|
{
|
||
|
return fTrue;
|
||
|
}
|
||
|
pfni = &fni;
|
||
|
if (pvNil != (pdocb = DOCB::PdocbFromFni(&fni)))
|
||
|
{
|
||
|
pdocb->ActivateDmd();
|
||
|
return fTrue;
|
||
|
}
|
||
|
//fall through
|
||
|
case cidNew:
|
||
|
pdocb = (PDOCB)DOC::PdocNew(pfni);
|
||
|
break;
|
||
|
|
||
|
case cidOpenText:
|
||
|
//do the standard dialog
|
||
|
if (!FGetFniOpenMacro(&fni, pvNil, 0,
|
||
|
PszLit("Text Files\0*.txt;*.cht\0All Files\0*.*\0"), vwig.hwndApp))
|
||
|
{
|
||
|
return fTrue;
|
||
|
}
|
||
|
pfni = &fni;
|
||
|
if (pvNil != (pdocb = DOCB::PdocbFromFni(&fni)))
|
||
|
{
|
||
|
pdocb->ActivateDmd();
|
||
|
return fTrue;
|
||
|
}
|
||
|
//fall through
|
||
|
case cidNewText:
|
||
|
pdocb = (PDOCB)CHTXD::PchtxdNew(pfni, pvNil, oskNil);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (pvNil == pdocb)
|
||
|
return fTrue;
|
||
|
|
||
|
pdocb->PdmdNew();
|
||
|
ReleasePpo(&pdocb);
|
||
|
|
||
|
return fTrue;
|
||
|
}
|
||
|
|
||
|
|