Microsoft-3D-Movie-Maker/INC/UTEST.H

307 lines
9.3 KiB
C++

/* Copyright (c) Microsoft Corporation.
Licensed under the MIT License. */
/***************************************************************************
utest.h: Socrates main app class
Primary Author: ******
Review Status: REVIEWED - any changes to this file must be reviewed!
***************************************************************************/
#ifndef UTEST_H
#define UTEST_H
/****************************************
KidWorld for the App class
****************************************/
typedef class KWA *PKWA;
#define KWA_PAR WOKS
#define kclsKWA 'KWA'
class KWA : public KWA_PAR
{
RTCLASS_DEC
ASSERT
MARKMEM
protected:
PMBMP _pmbmp; // MBMP to draw in KWA (may be pvNil)
bool _fAskForCD;
public:
KWA(GCB *pgcb) : WOKS(pgcb) { _fAskForCD = fTrue; }
~KWA(void);
virtual void Draw(PGNV pgnv, RC *prcClip);
virtual bool FFindFile(PSTN pstnSrc, PFNI pfni); // for finding AVIs
virtual bool FModalTopic(PRCA prca, CNO cnoTopic, long *plwRet);
void SetMbmp(PMBMP pmbmp);
void SetCDPrompt(bool fAskForCD) { _fAskForCD = fAskForCD; }
bool FAskForCD(void) { return _fAskForCD; }
};
//
// If you change anything for the registry, notify SeanSe for setup changes.
//
#define kszSocratesKey PszLit("Software\\Microsoft\\Microsoft Kids\\3D Movie Maker")
#define kszWaveOutMsgValue PszLit("WaveOutMsg")
#define kszMidiOutMsgValue PszLit("MidiOutMsg")
#define kszGreaterThan8bppMsgValue PszLit("GreaterThan8bppMsg")
#define kszSwitchResolutionValue PszLit("SwitchResolution")
#define kszHomeDirValue PszLit("HomeDirectory")
#define kszInstallDirValue PszLit("InstallDirectory")
#define kszProductsKey PszLit("Software\\Microsoft\\Microsoft Kids\\3D Movie Maker\\Products")
#define kszUserDataValue PszLit("UserData")
#define kszBetterSpeedValue PszLit("BetterSpeed")
// FGetSetRegKey flags
enum
{
fregNil = 0,
fregSetKey = 0x01,
fregSetDefault = 0x02,
fregString = 0x04,
fregBinary = 0x08, // not boolean
fregMachine = 0x10
};
/****************************************
The app class
****************************************/
typedef class APP *PAPP;
#define APP_PAR APPB
#define kclsAPP 'APP'
class APP : public APP_PAR
{
RTCLASS_DEC
CMD_MAP_DEC(APP)
ASSERT
MARKMEM
protected:
bool _fDontReportInitFailure; // init failure was already reported
bool _fOnscreenDrawing;
PCFL _pcfl; // resource file for app
PSTDIO _pstdio; // Current studio
PTATR _ptatr; // Current theater
PCRM _pcrmAll; // The app CRM -- all crfs are loaded into this.
PGL _pglicrfBuilding; // List of crfs in _pcrmAll belonging to Building.
PGL _pglicrfStudio; // List of crfs in _pcrmAll belonging to Studio.
bool _fDontMinimize:1, // "/M" command-line switch
_fSlowCPU:1, // running on slow CPU
_fSwitchedResolution:1, // we successfully switched to 640x480 mode
_fMainWindowCreated:1,
_fMinimized:1,
_fRunInWindow:1, // run in a window (as opposed to fullscreen)
_fFontError:1, // Have we already seen a font error?
_fInPortfolio:1; // Is the portfolio active?
PCEX _pcex; // Pointer to suspended cex.
FNI _fniPortfolioDoc; // document last opened in portfolio
PMVIE _pmvieHandoff; // Stores movie for studio to use
PKWA _pkwa; // Kidworld for App
PGST _pgstBuildingFiles;
PGST _pgstStudioFiles;
PGST _pgstSharedFiles;
PGST _pgstApp; // Misc. app global strings
STN _stnAppName; // App name
STN _stnProductLong; // Long version of product name
STN _stnProductShort; // Short version of product name
STN _stnUser; // User's name
long _sidProduct;
FNI _fniExe; // fni of this executable file
FNI _fniMsKidsDir; // e.g., \mskids
FNI _fniUsersDir; // e.g., \mskids\users
FNI _fniMelanieDir; // e.g., \mskids\users\melanie
FNI _fniProductDir; // e.g., \mskids\3dmovie or \mskids\otherproduct
FNI _fniUserDir; // User's preferred directory
FNI _fni3DMovieDir; // e.g., \mskids\3dMovie
long _dypTextDef; // Default text height
long _cactDisable; // disable count for keyboard accelerators
#ifdef BUG1085
long _cactCursHide; // hide count for cursor
long _cactCursSav; // saved count for cursor
#endif
//
//
//
bool _fDown;
long _cactToggle;
#ifdef WIN
HACCEL _haccel;
HACCEL _haccelGlobal;
#endif
protected:
bool _FAppAlreadyRunning(void);
void _TryToActivateWindow(void);
bool _FEnsureOS(void);
bool _FEnsureAudio(void);
bool _FEnsureVideo(void);
bool _FEnsureColorDepth(void);
bool _FEnsureDisplayResolution(void);
bool _FDisplaySwitchSupported(void);
void _ParseCommandLine(void);
void _SkipToSpace(char **ppch);
void _SkipSpace(char **ppch);
bool _FEnsureProductNames(void);
bool _FFindProductDir(PGST pgst);
bool _FQueryProductExists(STN *pstnLong, STN *pstnShort, FNI *pfni);
bool _FFindMsKidsDir(void);
bool _FCantFindFileDialog(PSTN pstn);
bool _FGetUserName(void);
bool _FGetUserDirectories(void);
bool _FReadUserData(void);
bool _FWriteUserData(void);
bool _FDisplayHomeLogo(void);
bool _FDetermineIfSlowCPU(void);
bool _FOpenResourceFile(void);
bool _FInitKidworld(void);
bool _FInitProductNames(void);
bool _FReadTitlesFromReg(PGST *ppgst);
bool _FInitTdt(void);
PGST _PgstRead(CNO cno);
bool _FReadStringTables(void);
bool _FSetWindowTitle(void);
bool _FInitCrm(void);
bool _FAddToCrm(PGST pgstFiles, PCRM pcrm, PGL pglFiles);
bool _FInitBuilding(void);
bool _FInitStudio(PFNI pfniUserDoc, bool fFailIfDocOpenFailed = fTrue);
void _GetWindowProps(long *pxp, long *pyp, long *pdxp, long *pdyp,
DWORD *pdwStyle);
void _RebuildMainWindow(void);
bool _FSwitch640480(bool fTo640480);
bool _FDisplayIs640480(void);
bool _FShowSplashScreen(void);
bool _FPlaySplashSound(void);
PMVIE _Pmvie(void);
void _CleanupTemp(void);
#ifdef WIN
bool _FSendOpenDocCmd(HWND hwnd, PFNI pfniUserDoc);
bool _FProcessOpenDocCmd(void);
#endif //WIN
// APPB methods that we override
virtual bool _FInit(ulong grfapp, ulong grfgob, long ginDef);
virtual bool _FInitOS(void);
virtual bool _FInitMenu(void) { return fTrue; } // no menubar
virtual void _CopyPixels(PGNV pgvnSrc, RC *prcSrc, PGNV pgnvDst,
RC *prcDst);
virtual void _FastUpdate(PGOB pgob, PREGN pregnClip,
ulong grfapp = fappNil, PGPT pgpt = pvNil);
virtual void _CleanUp(void);
virtual void _Activate(bool fActive);
virtual bool _FGetNextEvt(PEVT pevt);
#ifdef WIN
virtual bool _FFrameWndProc(HWND hwnd, uint wm, WPARAM wParam,
LPARAM lw, long *plwRet);
#endif // WIN
public:
APP(void) { _dypTextDef = 0; }
// Overridden APPB functions
virtual void GetStnAppName(PSTN pstn);
virtual long OnnDefVariable(void);
virtual long DypTextDef(void);
virtual bool TQuerySaveDoc(PDOCB pdocb, bool fForce);
virtual void Quit(bool fForce);
virtual void UpdateHwnd(HWND hwnd, RC *prc, ulong grfapp = fappNil);
virtual void Run(ulong grfapp, ulong grfgob, long ginDef);
#ifdef BUG1085
virtual void HideCurs(void);
virtual void ShowCurs(void);
// New cursor methods
void PushCurs(void);
void PopCurs(void);
#endif // BUG 1085
// Command processors
bool FCmdLoadStudio(PCMD pcmd);
bool FCmdLoadBuilding(PCMD pcmd);
bool FCmdTheaterOpen(PCMD pcmd);
bool FCmdTheaterClose(PCMD pcmd);
bool FCmdIdle(PCMD pcmd);
bool FCmdInfo(PCMD pcmd);
bool FCmdPortfolioClear(PCMD pcmd);
bool FCmdPortfolioOpen(PCMD pcmd);
bool FCmdDisableAccel(PCMD pcmd);
bool FCmdEnableAccel(PCMD pcmd);
bool FCmdInvokeSplot(PCMD pcmd);
bool FCmdExitStudio(PCMD pcmd);
bool FCmdDeactivate(PCMD pcmd);
static bool FInsertCD(PSTN pstnTitle);
void DisplayErrors(void);
void SetPortfolioDoc(PFNI pfni) { _fniPortfolioDoc = *pfni; }
void GetPortfolioDoc(PFNI pfni) { *pfni = _fniPortfolioDoc; }
void SetFInPortfolio(bool fInPortfolio) { _fInPortfolio = fInPortfolio; }
bool FInPortfolio(void) { return _fInPortfolio; }
PSTDIO Pstdio(void) { return _pstdio; }
PKWA Pkwa(void) { return _pkwa; }
PCRM PcrmAll(void) { return _pcrmAll; }
bool FMinimized() { return _fMinimized; }
bool FGetStnApp(long ids, PSTN pstn)
{ return _pgstApp->FFindExtra(&ids, pstn); }
void GetStnProduct(PSTN pstn) { *pstn = _stnProductLong; }
void GetStnUser(PSTN pstn) { *pstn = _stnUser; }
void GetFniExe(PFNI pfni) { *pfni = _fniExe; }
void GetFniProduct(PFNI pfni) { *pfni = _fniProductDir; }
void GetFniUsers(PFNI pfni) { *pfni = _fniUsersDir; }
void GetFniUser(PFNI pfni) { *pfni = _fniUserDir; }
void GetFniMelanie(PFNI pfni) { *pfni = _fniMelanieDir; }
long SidProduct(void) { return _sidProduct; }
bool FGetOnn(PSTN pstn, long *ponn);
void MemStat(long *pdwTotalPhys, long *pdwAvailPhys = pvNil);
bool FSlowCPU(void) { return _fSlowCPU; }
// Kid-friendly modal dialog stuff:
void EnsureInteractive(void)
{
#ifdef WIN
if (_fMinimized || GetForegroundWindow() != vwig.hwndApp)
#else
if (_fMinimized)
#endif
{
#ifdef WIN
SetForegroundWindow(vwig.hwndApp);
ShowWindow(vwig.hwndApp, SW_RESTORE);
#else //!WIN
RawRtn();
#endif //!WIN
}
}
bool TModal(PRCA prca, long tpc, PSTN pstnBackup = pvNil,
long bkBackup = ivNil, long stidSubst = ivNil,
PSTN pstnSubst = pvNil);
// Enable/disable accelerator keys
void DisableAccel(void);
void EnableAccel(void);
// Registry access function
bool FGetSetRegKey(PSZ pszValueName, void *pvData, long cbData,
ulong grfreg = fregSetDefault, bool *pfNoValue = pvNil);
// Movie handoff routines
void HandoffMovie(PMVIE pmvie);
PMVIE PmvieRetrieve(void);
// Determines whether screen savers should be blocked.
virtual bool FAllowScreenSaver(void);
};
#define vpapp ((APP *)vpappb)
#endif //!UTEST_H