- BORLAND/: Borland C++ 4.52 (chosen over 4.5 by byte-match: CODE/RP/CW32.LIB
is identical to 4.52's install lib). BCC32/TLINK32/TLIB/MAKE run natively on
Win11; CODE/BT/OPT.MAK is the shipped BTL4OPT.EXE's exact flag recipe
(extender = Borland PowerPack DPMI32, not Phar Lap TNT).
- restoration/source410/: the literal 1995-form reconstruction of the missing
BT game source (never mixed into CODE/). Round 1-3 state:
* 6 of 10 surviving original TUs COMPILE CLEAN under the period toolchain
(BTMSSN, BTCNSL, BTSCNRL, BTTEAM, BTL4MODE, BTL4ARND) - first builds
since 1996.
* BT_L4/BTL4APP.CPP pilot reconstruction: 12/12 functions, Fail() lands on
its binary-recorded line 400 exactly.
* BT/BTCNSL.HPP: console wire IDs recovered from the binary's ctors
(Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1];
TeamScore=12 flagged [T4]).
* MUNGA/: 8 engine-header backfills back-dated from the BT412 WinTesla tree
(VDATA numbering decomp-verified; AUDREND's OpenAL-era virtual removed -
the period compiler is the drift detector).
* Tooling: backdate.py (WinTesla->1995 header transform), compile410.sh
(per-TU verification sweep under authentic OPT.MAK flags).
* README: corrected roadmap - MECH.HPP is the capstone grown with the mech
TU reconstructions; BTREG.CPP green = the header-family milestone.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
698 lines
24 KiB
Plaintext
698 lines
24 KiB
Plaintext
##{cheader.snp}
|
|
#include <owl\owlpch.h>
|
|
#pragma hdrstop
|
|
|
|
##@OPT_APPL_DRAGDROP 2
|
|
#include <dir.h>
|
|
|
|
##--BEGIN-- !@OPT_APPL_DRAGDROP
|
|
##: QUERY_WIND_CLIENT [[Client]]
|
|
##: <<*Client QUERY_BASE_NAME [[BaseClient]]
|
|
##: BaseClient == "TListBox"
|
|
#include <dir.h>
|
|
|
|
##--END-- !@OPT_APPL_DRAGDROP
|
|
##QUERY_FILE_H [[FileName]]
|
|
#include "[[FileName]]"
|
|
##QUERY_WIND_CLIENT [[Client]]
|
|
##<<*Client QUERY_FILE_H [[Filename]]
|
|
#include "[[Filename]]" // Definition of client class.
|
|
##--BEGIN-- ((@QUERY_APPL_MODEL != VALUE_DIALOG) || ((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU))
|
|
## :<<TDialog QUERY_FILE_H [[Filename]]
|
|
#include "[[Filename]]" // Definition of about dialog.
|
|
##--END-- ((@QUERY_APPL_MODEL != VALUE_DIALOG) || ((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU))
|
|
|
|
|
|
##--BEGIN-- @OPT_APPL_HELP
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Generated help file.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
##@QUERY_APPL_HELP [[HelpFile]]
|
|
const char HelpFileName[] = "[[HelpFile]].hlp";
|
|
|
|
|
|
##--END-- @OPT_APPL_HELP
|
|
##{cdragdrp.owl}
|
|
//{{[[TApplication]] Implementation}}
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_OLE_AUTO
|
|
//
|
|
// OLE's ITypeInfo browses this symbol table for a list of all data,
|
|
// properties, and methods exposed by this automated class.
|
|
//
|
|
DEFINE_AUTOCLASS([[TApplication]])
|
|
EXPOSE_APPLICATION([[TApplication]], "Application", "Application object", 0)
|
|
EXPOSE_QUIT("Quit", "Quit application", 0)
|
|
//{{[[TApplication]]SYM_TBL_BEGIN}}
|
|
//{{[[TApplication]]SYM_TBL_END}}
|
|
END_AUTOCLASS([[TApplication]], tfAppObject | tfCanCreate, "[[TApplication]]", 0, 0);
|
|
|
|
|
|
DEFINE_APP_DICTIONARY(AppDictionary);
|
|
static TPointer<TRegistrar> Registrar;
|
|
|
|
REGISTRATION_FORMAT_BUFFER(100)
|
|
|
|
BEGIN_REGISTRATION(ApplicationReg)
|
|
##@QUERY_OLE_GUID [[GUID]]
|
|
REGDATA(clsid, "{[[GUID]]}")
|
|
##--BEGIN-- @QUERY_PRJ_NAME [[AppTitle]]
|
|
REGDATA(progid, "[[AppTitle]].Application.1")
|
|
REGDATA(appname, "[[AppTitle]] Server")
|
|
REGDATA(description, "[[AppTitle]] Server Application")
|
|
REGDATA(cmdline, "/Automation")
|
|
// REGDATA(debugger, "TDW")
|
|
##--END-- @QUERY_PRJ_NAME [[AppTitle]]
|
|
END_REGISTRATION
|
|
|
|
|
|
##--END-- @QUERY_APPL_OLE_AUTO
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Build a response table for all messages/commands handled
|
|
// by the application.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
DEFINE_RESPONSE_TABLE1([[TApplication]], TApplication)
|
|
//{{[[TApplication]]RSP_TBL_BEGIN}}
|
|
##--BEGIN-- @QUERY_APPL_MODEL != VALUE_DIALOG
|
|
##:DBResponse(\\"[[TApplication]]", "CM_FILENEW", "CmFileNew", "", "COMMAND")
|
|
##:DBResponse(\\"[[TApplication]]", "CM_FILEOPEN", "CmFileOpen", "", "COMMAND")
|
|
EV_COMMAND(CM_FILENEW, CmFileNew),
|
|
EV_COMMAND(CM_FILEOPEN, CmFileOpen),
|
|
##@OPT_APPL_PRINTING 6
|
|
##:DBResponse(\\"[[TApplication]]", "CM_FILEPRINT", "CmFilePrint", "", "COMMAND")
|
|
##:DBResponse(\\"[[TApplication]]", "CM_FILEPRINTERSETUP", "CmFilePrintSetup", "", "COMMAND")
|
|
##:DBResponse(\\"[[TApplication]]", "CM_FILEPRINTPREVIEW", "CmFilePrintPreview", "", "COMMAND")
|
|
##:DBResponse(\\"[[TApplication]]", "CM_FILEPRINT", "CmPrintEnable", "", "ENABLER")
|
|
##:DBResponse(\\"[[TApplication]]", "CM_FILEPRINTERSETUP", "CmPrintEnable", "", "ENABLER")
|
|
##:DBResponse(\\"[[TApplication]]", "CM_FILEPRINTPREVIEW", "CmPrintEnable", "", "ENABLER")
|
|
EV_COMMAND(CM_FILEPRINT, CmFilePrint),
|
|
EV_COMMAND(CM_FILEPRINTERSETUP, CmFilePrintSetup),
|
|
EV_COMMAND(CM_FILEPRINTPREVIEW, CmFilePrintPreview),
|
|
EV_COMMAND_ENABLE(CM_FILEPRINT, CmPrintEnable),
|
|
EV_COMMAND_ENABLE(CM_FILEPRINTERSETUP, CmPrintEnable),
|
|
EV_COMMAND_ENABLE(CM_FILEPRINTPREVIEW, CmPrintEnable),
|
|
##--END-- @QUERY_APPL_MODEL != VALUE_DIALOG
|
|
##@OPT_APPL_HELP 2
|
|
##:DBResponse(\\"[[TApplication]]", "CM_HELPCONTENTS", "CmHelpContents", "", "COMMAND")
|
|
##:DBResponse(\\"[[TApplication]]", "CM_HELPUSING", "CmHelpUsing", "", "COMMAND")
|
|
EV_COMMAND(CM_HELPCONTENTS, CmHelpContents),
|
|
EV_COMMAND(CM_HELPUSING, CmHelpUsing),
|
|
##:DBResponse(\\"[[TApplication]]", "CM_HELPABOUT", "CmHelpAbout", "", "COMMAND")
|
|
EV_COMMAND(CM_HELPABOUT, CmHelpAbout),
|
|
##@OPT_APPL_DRAGDROP
|
|
##:DBResponse(\\"[[TApplication]]", "", "", "WM_DROPFILES", "")
|
|
EV_WM_DROPFILES,
|
|
##@OPT_APPL_PRINTING
|
|
##:DBResponse(\\"[[TApplication]]", "", "", "WM_WININICHANGE", "")
|
|
EV_WM_WININICHANGE,
|
|
//{{[[TApplication]]RSP_TBL_END}}
|
|
END_RESPONSE_TABLE;
|
|
|
|
|
|
##--END-- (@QUERY_APPL_MODEL == VALUE_SDI) && !@OPT_APPL_DOCVIEW
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// =====
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
##@QUERY_APPL_OLE_AUTO
|
|
[[TApplication]]::[[TApplication]] () : TApplication(::ApplicationReg["appname"], ::Module, &::AppDictionary)
|
|
##!@QUERY_APPL_OLE_AUTO
|
|
##QUERY_WIND_TITLE [[Title]]
|
|
[[TApplication]]::[[TApplication]] () : TApplication("[[Title]]")
|
|
{
|
|
##@OPT_APPL_HELP 3
|
|
HelpState = false;
|
|
ContextHelp = false;
|
|
HelpCursor = 0;
|
|
|
|
##@OPT_APPL_PRINTING 3
|
|
Printer = 0;
|
|
Printing = 0;
|
|
|
|
##--BEGIN-- @QUERY_APPL_MODEL != VALUE_DIALOG
|
|
##@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
|
|
// Common file file flags and filters for Open/Save As dialogs. Filename and directory are
|
|
// computed in the member functions CmFileOpen, and CmFileSaveAs.
|
|
FileData.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
|
|
##OPT_DV_RESET
|
|
##OPT_DV_NEXT
|
|
##QUERY_DV_DESCR [[Descr]]
|
|
##--BEGIN-- QUERY_DV_FILTER [[Filter]]
|
|
##(Filter != "*.*") && (Descr != "All Files (*.*)"
|
|
FileData.SetFilter("[[Descr]]|[[Filter]]|All Files (*.*)|*.*|");
|
|
##(Filter == "*.*") && (Descr == "All Files (*.*)"
|
|
FileData.SetFilter("All Files (*.*)|*.*|");
|
|
|
|
##--END-- QUERY_DV_FILTER [[Filter]]
|
|
##--END-- @QUERY_APPL_MODEL != VALUE_DIALOG
|
|
// INSERT>> Your constructor code here.
|
|
}
|
|
|
|
|
|
[[TApplication]]::~[[TApplication]] ()
|
|
{
|
|
##@OPT_APPL_PRINTING 3
|
|
if (Printer)
|
|
delete Printer;
|
|
|
|
// INSERT>> Your destructor code here.
|
|
}
|
|
|
|
|
|
##--BEGIN-- @OPT_APPL_HELP
|
|
bool [[TApplication]]::CanClose ()
|
|
{
|
|
bool result = TApplication::CanClose();
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Close the help engine if we used it.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
if (result && HelpState)
|
|
GetMainWindow()->WinHelp(HelpFileName, HELP_QUIT, 0L);
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
##--END-- @OPT_APPL_HELP
|
|
##(((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU) || (@QUERY_APPL_MODEL != VALUE_DIALOG))
|
|
##--BEGIN-- @OPT_APPL_TOOLBAR
|
|
void [[TApplication]]::SetupSpeedBar (TDecoratedFrame *frame)
|
|
{
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Create default toolbar New and associate toolbar buttons with commands.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
TControlBar* cb = new TControlBar(frame);
|
|
##@QUERY_APPL_MODEL == VALUE_SDI 2
|
|
cb->Insert(*new TButtonGadget(CM_FILENEW, CM_FILENEW));
|
|
cb->Insert(*new TButtonGadget(CM_FILEOPEN, CM_FILEOPEN));
|
|
cb->Insert(*new TButtonGadget(CM_FILESAVE, CM_FILESAVE));
|
|
cb->Insert(*new TSeparatorGadget(6));
|
|
cb->Insert(*new TButtonGadget(CM_EDITCUT, CM_EDITCUT));
|
|
cb->Insert(*new TButtonGadget(CM_EDITCOPY, CM_EDITCOPY));
|
|
cb->Insert(*new TButtonGadget(CM_EDITPASTE, CM_EDITPASTE));
|
|
cb->Insert(*new TSeparatorGadget(6));
|
|
cb->Insert(*new TButtonGadget(CM_EDITUNDO, CM_EDITUNDO));
|
|
cb->Insert(*new TSeparatorGadget(6));
|
|
cb->Insert(*new TButtonGadget(CM_EDITFIND, CM_EDITFIND));
|
|
cb->Insert(*new TButtonGadget(CM_EDITFINDNEXT, CM_EDITFINDNEXT));
|
|
##@OPT_APPL_PRINTING 3
|
|
cb->Insert(*new TSeparatorGadget(6));
|
|
cb->Insert(*new TButtonGadget(CM_FILEPRINT, CM_FILEPRINT));
|
|
cb->Insert(*new TButtonGadget(CM_FILEPRINTPREVIEW, CM_FILEPRINTPREVIEW));
|
|
##@OPT_APPL_HELP 2
|
|
cb->Insert(*new TSeparatorGadget(6));
|
|
cb->Insert(*new TButtonGadget(CM_HELPCONTENTS, CM_HELPCONTENTS));
|
|
|
|
##@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Add fly-over help hints.
|
|
cb->SetHintMode(TGadgetWindow::EnterHints);
|
|
|
|
frame->Insert(*cb, TDecoratedFrame::Top);
|
|
}
|
|
|
|
|
|
##--END-- @OPT_APPL_TOOLBAR
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// =====
|
|
// Application intialization.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
void [[TApplication]]::InitMainWindow ()
|
|
{
|
|
if (nCmdShow != SW_HIDE)
|
|
##@QUERY_APPL_STARTUP == VALUE_NORMAL
|
|
nCmdShow = (nCmdShow != SW_SHOWMINNOACTIVE) ? SW_SHOWNORMAL : nCmdShow;
|
|
##@QUERY_APPL_STARTUP == VALUE_MIN
|
|
nCmdShow = (nCmdShow != SW_SHOWMINNOACTIVE) ? SW_SHOWMINIMIZED : nCmdShow;
|
|
##@QUERY_APPL_STARTUP == VALUE_MAX
|
|
nCmdShow = (nCmdShow != SW_SHOWMINNOACTIVE) ? SW_SHOWMAXIMIZED : nCmdShow;
|
|
|
|
##@OPT_APPL_STATUSBAR
|
|
SDIDecFrame *frame = new SDIDecFrame(0, GetName(), 0, true);
|
|
##!@OPT_APPL_STATUSBAR
|
|
SDIDecFrame *frame = new SDIDecFrame(0, GetName(), 0, false);
|
|
##@QUERY_APPL_MODEL == VALUE_DIALOG
|
|
frame->SetFlag(wfShrinkToClient);
|
|
|
|
##QUERY_WIND_STYLE [[StyleAttributes]]
|
|
##StyleAttributes != "" 3
|
|
// Override the default window style for the main window.
|
|
[[StyleAttributes]]
|
|
|
|
##QUERY_WIND_BACKGRND [[BackgroundColor]]
|
|
##BackgroundColor != "" 3
|
|
// Change the window's background color
|
|
frame->SetBkgndColor([[BackgroundColor]]);
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Assign ICON w/ this application.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
frame->SetIcon(this, IDI_SDIAPPLICATION);
|
|
|
|
##(((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU) || (@QUERY_APPL_MODEL != VALUE_DIALOG))
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Menu associated with window and accelerator table associated with table.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
##(((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU) || (@QUERY_APPL_MODEL != VALUE_DIALOG)) 2
|
|
frame->AssignMenu(SDI_MENU);
|
|
|
|
##(((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU) || (@QUERY_APPL_MODEL != VALUE_DIALOG))
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Associate with the accelerator table.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
##(((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU) || (@QUERY_APPL_MODEL != VALUE_DIALOG)) 2
|
|
frame->Attr.AccelTable = SDI_MENU;
|
|
|
|
##(((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU) || (@QUERY_APPL_MODEL != VALUE_DIALOG))
|
|
##@OPT_APPL_TOOLBAR
|
|
SetupSpeedBar(frame);
|
|
##@OPT_APPL_STATUSBAR 7
|
|
|
|
TStatusBar *sb = new TStatusBar(frame, TGadget::Recessed,
|
|
TStatusBar::CapsLock |
|
|
TStatusBar::NumLock |
|
|
TStatusBar::ScrollLock |
|
|
TStatusBar::Overtype);
|
|
frame->Insert(*sb, TDecoratedFrame::Bottom);
|
|
|
|
SetMainWindow(frame);
|
|
|
|
##(((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU) || (@QUERY_APPL_MODEL != VALUE_DIALOG))
|
|
frame->SetMenuDescr(TMenuDescr(SDI_MENU));
|
|
##--BEGIN-- @QUERY_APPL_CONTROL==VALUE_3D
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Windows 3-D controls.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
EnableCtl3d(true);
|
|
##--END-- @QUERY_APPL_CONTROL==VALUE_3D
|
|
##--BEGIN-- @QUERY_APPL_CONTROL==VALUE_BWCC
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Borland Windows custom controls.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
EnableBWCC();
|
|
##--END-- @QUERY_APPL_CONTROL==VALUE_BWCC
|
|
}
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_MODEL != VALUE_DIALOG
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// ===========
|
|
// Menu File New command
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
void [[TApplication]]::CmFileNew ()
|
|
{
|
|
##QUERY_WIND_CLIENT [[ClientClass]]
|
|
##--BEGIN-- <<*ClientClass QUERY_BASE_NAME [[BaseClient]]
|
|
##BaseClient == "TEditFile" 2
|
|
[[ClientClass]] *client = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), [[ClientClass]]); // Client window for the frame.
|
|
client->NewFile();
|
|
##BaseClient == "TListBox" 3
|
|
[[ClientClass]] *client = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), [[ClientClass]]); // Client window for the frame.
|
|
if (client->CanClose())
|
|
client->ClearList();
|
|
##--END-- <<*ClientClass QUERY_BASE_NAME [[BaseClient]]
|
|
}
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// ===========
|
|
// Menu File Open command
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
void [[TApplication]]::CmFileOpen ()
|
|
{
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Display standard Open dialog box to select a file name.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
*FileData.FileName = 0;
|
|
|
|
##QUERY_WIND_CLIENT [[ClientClass]]
|
|
[[ClientClass]] *client = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), [[ClientClass]]); // Client window for the frame.
|
|
if (client->CanClose())
|
|
if (TFileOpenDialog(GetMainWindow(), FileData).Execute() == IDOK)
|
|
OpenFile();
|
|
}
|
|
|
|
|
|
void [[TApplication]]::OpenFile (const char *fileName)
|
|
{
|
|
if (fileName)
|
|
strcpy(FileData.FileName, fileName);
|
|
|
|
##QUERY_WIND_CLIENT [[ClientName]]
|
|
##--BEGIN-- <<*ClientName QUERY_BASE_NAME [[BaseClient]]
|
|
##BaseClient == "TEditFile" 2
|
|
[[ClientName]] *client = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), [[ClientName]]); // Client window for the frame.
|
|
client->ReplaceWith(FileData.FileName);
|
|
##BaseClient == "TListBox" 3
|
|
[[ClientName]] *client = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), [[ClientName]]); // Client window for the frame.
|
|
client->ClearList();
|
|
LoadTextFile();
|
|
##--END-- <<*ClientName QUERY_BASE_NAME [[BaseClient]]
|
|
}
|
|
|
|
|
|
##QUERY_WIND_CLIENT [[ClientName]]
|
|
##--BEGIN-- <<*ClientName QUERY_BASE_NAME [[BaseClient]]
|
|
##--BEGIN-- BaseClient == "TListBox"
|
|
##: @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Used by ListBox client to read a text file into the list box.
|
|
void [[TApplication]]::LoadTextFile ()
|
|
{
|
|
char buf[255+1];
|
|
ifstream *inStream;
|
|
|
|
TListBox *client = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), TListBox);
|
|
|
|
##: @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Only work if the client class is a TListBox.
|
|
if (client) {
|
|
client->ClearList();
|
|
inStream = new ifstream(FileData.FileName);
|
|
while (inStream->good()) {
|
|
inStream->getline(buf, sizeof(buf) - 1);
|
|
if (inStream->good())
|
|
client->AddString(buf);
|
|
}
|
|
|
|
##: @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Return an error message if we had a stream error and it wasn't the eof.
|
|
if (inStream->bad() && !inStream->eof()) {
|
|
string msgTemplate(*this, IDS_UNABLEREAD);
|
|
char* msg = new char[MAXPATH + msgTemplate.length()];
|
|
wsprintf(msg, msgTemplate.c_str(), *FileData.FileName);
|
|
GetMainWindow()->MessageBox(msg, GetName(), MB_ICONEXCLAMATION | MB_OK);
|
|
delete msg;
|
|
}
|
|
|
|
delete inStream;
|
|
}
|
|
}
|
|
|
|
|
|
##--END-- BaseClient == "TListBox"
|
|
##--END-- <<*ClientName QUERY_BASE_NAME [[BaseClient]]
|
|
##--END-- @QUERY_APPL_MODEL != VALUE_DIALOG
|
|
//{{SDIDecFrame Implementation}}
|
|
|
|
|
|
SDIDecFrame::SDIDecFrame (TWindow *parent, const char far *title, TWindow *clientWnd, bool trackMenuSelection, TModule *module)
|
|
##QUERY_WIND_CLIENT [[ClientClass]]
|
|
##--BEGIN-- <<*ClientClass QUERY_BASE_NAME [[BaseClient]]
|
|
##BaseClient == "TEditFile"
|
|
: TDecoratedFrame(parent, title, clientWnd == 0 ? new [[ClientClass]](0, 0, 0) : clientWnd, trackMenuSelection, module)
|
|
##BaseClient == "TListBox"
|
|
: TDecoratedFrame(parent, title, clientWnd == 0 ? new [[ClientClass]](0, 0, 0, 0, 100, 100) : clientWnd, trackMenuSelection, module)
|
|
##BaseClient == "TWindow"
|
|
: TDecoratedFrame(parent, title, clientWnd == 0 ? new [[ClientClass]](0, "") : clientWnd, trackMenuSelection, module)
|
|
##BaseClient == "TDialog"
|
|
: TDecoratedFrame(parent, title, clientWnd == 0 ? new [[ClientClass]](0) : clientWnd, trackMenuSelection, module)
|
|
##--END-- <<*ClientClass QUERY_BASE_NAME [[BaseClient]]
|
|
{
|
|
// INSERT>> Your constructor code here.
|
|
|
|
}
|
|
|
|
|
|
SDIDecFrame::~SDIDecFrame ()
|
|
{
|
|
// INSERT>> Your destructor code here.
|
|
|
|
}
|
|
##--BEGIN-- ((@QUERY_APPL_MODEL == VALUE_DIALOG) && (@OPT_APPL_TOOLBAR || @OPT_APPL_STATUSBAR))
|
|
|
|
|
|
void SDIDecFrame::SetupWindow ()
|
|
{
|
|
TDecoratedFrame::SetupWindow();
|
|
|
|
TRect r;
|
|
GetWindowRect(r);
|
|
|
|
##@OPT_APPL_TOOLBAR && @OPT_APPL_STATUSBAR && @QUERY_APPL_DLGCLIENT_MENU
|
|
r.bottom += 60;
|
|
##((!@QUERY_APPL_DLGCLIENT_MENU && @OPT_APPL_STATUSBAR) || (@QUERY_APPL_DLGCLIENT_MENU && @OPT_APPL_TOOLBAR && !OPT_APPL_STATUSBAR))
|
|
r.bottom += 30;
|
|
SetWindowPos(0, r, SWP_NOZORDER | SWP_NOMOVE);
|
|
|
|
// INSERT>> Your code here.
|
|
|
|
}
|
|
##--END-- ((@QUERY_APPL_MODEL == VALUE_DIALOG) && (@OPT_APPL_TOOLBAR || @OPT_APPL_STATUSBAR))
|
|
##--BEGIN-- @OPT_APPL_PRINTING
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// ==========
|
|
// Menu File Print command
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
void [[TApplication]]::CmFilePrint ()
|
|
{
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Create Printer object if not already created.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
if (!Printer)
|
|
Printer = new TPrinter(this);
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Create Printout window and set characteristics.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
APXPrintOut printout(Printer, "Title", GetMainWindow()->GetClientWindow());
|
|
printout.SetBanding(true);
|
|
|
|
Printing++;
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Bring up the Print dialog and print the document.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
Printer->Print(GetWindowPtr(GetActiveWindow()), printout, true);
|
|
|
|
Printing--;
|
|
}
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// ==========
|
|
// Menu File Print Setup command
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
void [[TApplication]]::CmFilePrintSetup ()
|
|
{
|
|
if (!Printer)
|
|
Printer = new TPrinter(this);
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Bring up the Print Setup dialog.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
Printer->Setup(GetMainWindow());
|
|
}
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// ==========
|
|
// Menu File Print Preview command
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
void [[TApplication]]::CmFilePrintPreview ()
|
|
{
|
|
SDIDecFrame *sdiFrame = TYPESAFE_DOWNCAST(GetMainWindow(), SDIDecFrame);
|
|
if (sdiFrame) {
|
|
if (!Printer)
|
|
Printer = new TPrinter(this);
|
|
|
|
Printing++;
|
|
|
|
PreviewWindow *prevW = new PreviewWindow(sdiFrame, Printer, sdiFrame->GetClientWindow(), "Print Preview", new TLayoutWindow(0));
|
|
prevW->Create();
|
|
|
|
BeginModal(GetMainWindow());
|
|
|
|
Printing--;
|
|
|
|
##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Now that printing is off we can invalidate because the edit window to repaint.
|
|
GetMainWindow()->SetRedraw(true);
|
|
GetMainWindow()->Invalidate();
|
|
|
|
##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
|
|
// We must destroy the preview window explicitly. Otherwise, the window will not be destroyed until
|
|
// it's parent the MainWindow is destroyed.
|
|
prevW->Destroy();
|
|
delete prevW;
|
|
}
|
|
}
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// ==========
|
|
// Menu enabler used by Print, Print Setup and Print Preview.
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
void [[TApplication]]::CmPrintEnable (TCommandEnabler &tce)
|
|
{
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// If we have a Printer already created just test if all is okay.
|
|
// Otherwise create a Printer object and make sure the printer
|
|
// really exists and then delete the Printer object.
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
if (!Printer) {
|
|
Printer = new TPrinter(this);
|
|
|
|
tce.Enable(Printer->GetSetup().Error == 0);
|
|
} else
|
|
tce.Enable(Printer->GetSetup().Error == 0);
|
|
}
|
|
##--END-- @OPT_APPL_PRINTING
|
|
##--BEGIN-- @OPT_APPL_HELP
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// =====
|
|
// Menu Help Contents command
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
void [[TApplication]]::CmHelpContents ()
|
|
{
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Show the help table of contents.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
HelpState = GetMainWindow()->WinHelp(HelpFileName, HELP_CONTENTS, 0L);
|
|
}
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// =====
|
|
// Menu Help Using Help command
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
void [[TApplication]]::CmHelpUsing ()
|
|
{
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Display the contents of the Windows help file.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
HelpState = GetMainWindow()->WinHelp(HelpFileName, HELP_HELPONHELP, 0L);
|
|
}
|
|
##--END-- @OPT_APPL_HELP
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TApplication]]
|
|
// ===========
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
##@QUERY_TARGET_NAME [[Target]]
|
|
// Menu Help About [[Target]] command
|
|
void [[TApplication]]::CmHelpAbout ()
|
|
{
|
|
##"" [[TDialog]]
|
|
##--BEGIN-- ((@QUERY_APPL_MODEL != VALUE_DIALOG) || ((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU))
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Show the modal dialog.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
## :<<TDialog QUERY_CLASS_NAME TDialog
|
|
[[TDialog]](MainWindow).Execute();
|
|
##--END-- ((@QUERY_APPL_MODEL != VALUE_DIALOG) || ((@QUERY_APPL_MODEL == VALUE_DIALOG) && @QUERY_APPL_DLGCLIENT_MENU))
|
|
}
|
|
##--BEGIN-- @OPT_APPL_DRAGDROP
|
|
|
|
|
|
void [[TApplication]]::InitInstance ()
|
|
{
|
|
TApplication::InitInstance();
|
|
|
|
##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Accept files via drag/drop in the frame window.
|
|
GetMainWindow()->DragAcceptFiles(true);
|
|
}
|
|
|
|
|
|
void [[TApplication]]::EvDropFiles (TDropInfo drop)
|
|
{
|
|
##@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Tell DragQueryFile the file interested in (0) and the length of your buffer.
|
|
int fileLength = drop.DragQueryFileNameLen(0) + 1;
|
|
char *fileName = new char[fileLength];
|
|
|
|
drop.DragQueryFile(0, fileName, fileLength);
|
|
|
|
##@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Open the file that was dropped.
|
|
AddFile(fileName);
|
|
##@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Release the memory allocated for this handle with DragFinish.
|
|
drop.DragFinish();
|
|
}
|
|
|
|
|
|
void [[TApplication]]::AddFile (const char *FileName)
|
|
{
|
|
strcpy(FileData.FileName, FileName);
|
|
|
|
##@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Open the file dragged in.
|
|
##QUERY_WIND_CLIENT [[ClientClass]]
|
|
##--BEGIN-- <<*ClientClass QUERY_BASE_NAME [[BaseClient]]
|
|
##BaseClient == "TEditFile" 2
|
|
[[ClientClass]] *client = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), [[ClientClass]]);
|
|
client->ReplaceWith(FileData.FileName);
|
|
##BaseClient == "TListBox" 3
|
|
[[ClientClass]] *client = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), [[ClientClass]]);
|
|
client->ClearList();
|
|
LoadTextFile();
|
|
##--END-- <<*ClientClass QUERY_BASE_NAME [[BaseClient]]
|
|
}
|
|
##--END-- @OPT_APPL_DRAGDROP
|
|
##{main.owl}
|