Glider4/RoomEditor_103/Sources/E-TheMenus.p

1 line
12 KiB
OpenEdge ABL
Executable File
Raw Blame History

unit TheMenus;
interface
uses
Balloons, Palettes, About, Globals, Utilities, Drawing, HouseStuff, RoomStuff, ObjectStuff, FileInNOut, FlyGlider;
procedure DoNewHouse;
procedure DoOpenHouse;
procedure DoPrevRoom;
procedure DoNextRoom;
procedure DoNewRoom;
function DoSaveHouse: Boolean;
function DoSaveHouseAs: Boolean;
procedure DoClear;
procedure HandleMenu (theMenu, theItem: integer);
{=================================}
implementation
{=================================}
procedure DoTest;
begin
end;
{=================================}
procedure DoOpenHouse;
var
canceled: Boolean;
begin
if (not DoOpen) then
begin
DoNewHouse;
Exit(DoOpenHouse);
end;
ErrorCheckHouse;
changed := FALSE;
roomAt := 1;
thisRoom := thisHouse.theRooms[roomAt];
EnableItem(GetMenu(mFile), iSave);
EnableItem(GetMenu(mFile), iSaveAs);
oneActive := 0;
handleRect := nullRect;
LoadABackground(thisRoom.backPictID);
UpdateMenuItems(fileExists);
UpdateMenuItems(editToRoom);
DrawAllObjects;
DrawRoomNum;
OpenTools;
end;
{=================================}
procedure DoNewHouse;
var
cancelIt: Boolean;
index: Integer;
begin
roomAt := 1;
FlushRoom(thisRoom);
with thisHouse do
begin
version := $0100;
numberORooms := 0;
for index := 0 to 19 do
begin
hiScores[index] := 0;
hiLevel[index] := 0;
hiName[index] := 'no one...';
hiRoom[index] := 'no room...';
end;
pictFile := resourceName;
nextFile := '';
firstFile := '';
theRooms[roomAt] := thisRoom;
end;
changed := FALSE;
oneActive := 0;
handleRect := nullRect;
thisHouse.numberORooms := 1;
cancelIt := FALSE;
DoRoomBackInfo(cancelIt);
LoadABackground(thisRoom.backPictID);
UpdateMenuItems(fileIsNew);
UpdateMenuItems(editToRoom);
OpenTools;
end;
{=================================}
procedure DoMenuClose;
const
saveBut = 1;
cancelBut = 6;
var
buttonClicked: Integer;
dummyBool: Boolean;
begin
Deselect;
if (changed) then
begin
buttonClicked := SaveNoClose;
if (buttonClicked = saveBut) then
begin
thisHouse.theRooms[roomAt] := thisRoom;
if (fileIsOpen) then
begin
if (not DoSaveHouse) then
begin
dummyBool := DoClose;
Exit(DoMenuClose);
end;
dummyBool := DoClose;
end
else
begin
if (not DoSaveHouseAs) then
Exit(DoMenuClose);
end;
end
else if (buttonClicked = cancelBut) then
begin
Exit(DoMenuClose);
end
else
dummyBool := DoClose;
end
else
dummyBool := DoClose;
FlushRoom(thisRoom);
roomAt := 0;
changed := FALSE;
SetPort(GrafPtr(mainWndo));
EraseRect(wholeArea);
if (inColor) then
SetPort(GrafPtr(loadCPtr))
else
SetPort(offLoadPort);
EraseRect(wholeArea);
if (inColor) then
SetPort(GrafPtr(virginCPtr))
else
SetPort(offVirginPort);
EraseRect(wholeArea);
CloseTools;
UpdateMenuItems(noFileOpen);
end;
{=================================}
procedure DoGoToRoom;
var
wasRoom: Integer;
begin
thisHouse.theRooms[roomAt] := thisRoom;
wasRoom := roomAt;
DoGotoDial;
if (wasRoom <> roomAt) then
begin
thisRoom := thisHouse.theRooms[roomAt];
Deselect;
LoadABackground(thisRoom.backPictID);
DrawAllObjects;
DrawRoomNum;
UpdateMenuItems(editToRoom);
end;
end;
{=================================}
procedure DoPrevRoom;
begin
thisHouse.theRooms[roomAt] := thisRoom;
roomAt := roomAt - 1;
if (roomAt < 1) then
roomAt := thisHouse.numberORooms;
thisRoom := thisHouse.theRooms[roomAt];
Deselect;
LoadABackground(thisRoom.backPictID);
DrawAllObjects;
DrawRoomNum;
UpdateMenuItems(editToRoom);
end;
{=================================}
procedure DoNextRoom;
begin
thisHouse.theRooms[roomAt] := thisRoom;
roomAt := roomAt + 1;
if (roomAt > thisHouse.numberORooms) then
roomAt := 1;
thisRoom := thisHouse.theRooms[roomAt];
Deselect;
LoadABackground(thisRoom.backPictID);
DrawAllObjects;
DrawRoomNum;
UpdateMenuItems(editToRoom);
end;
{=================================}
procedure DoNewRoom;
var
cancelIt: Boolean;
begin
thisHouse.theRooms[roomAt] := thisRoom;
if (not InsertNewRoom) then
begin
Exit(DoNewRoom);
end;
cancelIt := TRUE;
changed := TRUE;
DoRoomBackInfo(cancelIt);
LoadABackground(thisRoom.backPictID);
DrawRoomNum;
oneActive := 0;
UpdateMenuItems(editToRoom);
end;
{=================================}
function DoSaveHouse;
var
dummyBool: Boolean;
begin
thisHouse.theRooms[roomAt] := thisRoom;
ErrorCheckHouse;
dummyBool := DoSave;
DoSaveHouse := dummyBool;
end;
{=================================}
function DoSaveHouseAs;
var
dummyBool: Boolean;
begin
thisHouse.theRooms[roomAt] := thisRoom;
ErrorCheckHouse;
dummyBool := DoSaveAs;
DoSaveHouseAs := dummyBool;
end;
{=================================}
procedure DoQuit;
const
saveBut = 1;
quitBut = 2;
cancelBut = 6;
var
buttonClicked: Integer;
dummyBool: Boolean;
begin
if (changed) then
begin
buttonClicked := SaveFirst;
if (buttonClicked = saveBut) then
begin
if (fileIsOpen) then
begin
if DoSaveHouse then
begin
doneFlag := TRUE;
dummyBool := DoClose;
end
else
begin
Exit(DoQuit);
end;
end
else {else - file is NOT open}
begin
if DoSaveHouseAs then
begin
doneFlag := TRUE;
dummyBool := DoClose;
end
else
Exit(DoQuit);
end;
end
else if (buttonClicked = quitBut) then
begin
if (fileIsOpen) then
dummyBool := DoClose;
doneFlag := TRUE;
end
else if (buttonClicked = cancelBut) then
Exit(DoQuit);
end {end - if changed}
else {else - no changes}
begin
if (fileIsOpen) then
dummyBool := DoClose;
doneFlag := TRUE;
end;
end;
{=================================}
procedure DoHelp;
var
aboutStuff: AboutRec;
tempR: Rect;
wasPort: GrafPtr;
begin
GetPort(wasPort);
SetPort(GrafPtr(mainWndo));
with aboutStuff do
begin
FontInfo[AboutMsg].Font := 0;
FontInfo[AboutMsg].Size := 0;
FontInfo[AboutMsg].Face := [];
FontInfo[AboutMsg].Color := RedColor;
FontInfo[AboutTEXT].Font := 1;
FontInfo[AboutTEXT].Size := 9;
FontInfo[AboutTEXT].Face := [];
FontInfo[AboutTEXT].Color := BlueColor;
TEXTCopy := TRUE;
KeyEquivs := TRUE;
CloseBox := FALSE;
Styled := TRUE;
CenterMode := AboutMainCenter;
MainIcon := 128;
ClickIcon := 129;
ClickMsg := 'by john calhoun <20> 1991 Casady & Greene, Inc.';
end;
SetRect(tempR, 12, 30, 500, 332);
OffsetRect(tempR, rightOffset, downOffset);
BuildAbout(tempR, DBoxProc, 128, 'Editor Help', 'Room Editor 1.0 - General Help', aboutStuff);
SetPort(wasPort);
end;
{=================================}
procedure DoCut;
var
cancelIt: Boolean;
begin
if (editRoom) then {no object selected}
begin {so, cut whole room}
if (not DeleteRoom) then
begin
scrapRoom := thisRoom; {store room just cut}
FlushRoom(thisRoom); {flush it}
cancelIt := FALSE; {force user to create a room}
DoRoomBackInfo(cancelIt);
end
else
begin
roomScrapDirty := TRUE;
objectScrapDirty := FALSE;
SetItem(GetMenu(mEdit), iPaste, 'Paste Room');
EnableItem(GetMenu(mEdit), iPaste);
scrapRoom := thisRoom;
thisRoom := thisHouse.theRooms[roomAt];
end;
LoadABackground(thisRoom.backPictID); {load the new room in}
oneActive := 0; {insure no active object}
handleRect := nullRect;
DrawAllObjects;
DrawRoomNum;
changed := TRUE;
end
else
begin
objectScrapDirty := TRUE;
roomScrapDirty := FALSE;
SetItem(GetMenu(mEdit), iPaste, 'Paste Object');
EnableItem(GetMenu(mEdit), iPaste);
scrapObject := thisRoom.theObjects[oneActive];
thisRoom.theObjects[oneActive].objectIs := 0;
Deselect; {Sort will set correct # of objects}
SortObjects; {0-ing out the type will kill it in the sort routine}
DrawAllObjects;
changed := TRUE;
end;
end;
{=================================}
procedure DoCopy;
begin
if (editRoom) then
begin
scrapRoom := thisRoom;
roomScrapDirty := TRUE;
objectScrapDirty := FALSE;
SetItem(GetMenu(mEdit), iPaste, 'Paste Room');
EnableItem(GetMenu(mEdit), iPaste);
end
else
begin
scrapObject := thisRoom.theObjects[oneActive];
objectScrapDirty := TRUE;
roomScrapDirty := FALSE;
SetItem(GetMenu(mEdit), iPaste, 'Paste Object');
EnableItem(GetMenu(mEdit), iPaste);
end;
end;
{=================================}
procedure DoPaste;
begin
if (roomScrapDirty) then
begin
if (not InsertRoom) then
Exit(DoPaste);
LoadABackground(thisRoom.backPictID); {draw the pasted room in}
oneActive := 0; {insure no active object}
handleRect := nullRect;
DrawAllObjects;
DrawRoomNum;
changed := TRUE;
end
else
begin
if (InsertObject) then
begin
SortObjects;
DrawAllObjects;
changed := TRUE;
end
else
Exit(DoPaste);
end;
end;
{=================================}
procedure DoClear;
var
cancelIt: Boolean;
begin
if (editRoom) then
begin
if (not DeleteRoom) then
begin
FlushRoom(thisRoom); {flush it}
cancelIt := FALSE; {force user to create a room}
DoRoomBackInfo(cancelIt);
end
else
begin
thisRoom := thisHouse.theRooms[roomAt];
end;
LoadABackground(thisRoom.backPictID); {load the new room in}
oneActive := 0; {insure no active object}
handleRect := nullRect;
DrawAllObjects;
DrawRoomNum;
changed := TRUE;
end
else
begin
thisRoom.theObjects[oneActive].objectIs := 0;
Deselect;
SortObjects;
DrawAllObjects;
changed := TRUE;
end;
end;
{=================================}
procedure HandleMenu; {Handle menu selections realtime}
var
DNA, holdActive, i: integer;
DAName: Str255;
SavePort: GrafPtr;
boolHolder, cancelIt: boolean;
begin
case theMenu of
mApple:
case theItem of
iNothing:
;
iAboutEdit:
DoAbout;
otherwise
begin
GetPort(SavePort);
GetItem(GetMenu(mApple), theItem, DAName);
DNA := OpenDeskAcc(DAName);
SetPort(SavePort);
end;
end;
mFile:
case theItem of {Handle all commands in this menu list}
iNew:
DoNewHouse;
iOpen:
DoOpenHouse;
iClose:
DoMenuClose;
iSave:
cancelIt := DoSaveHouse;
iSaveAs:
cancelIt := DoSaveHouseAs;
iQuit:
DoQuit;
otherwise
end;
mEdit:
case theItem of {Handle all commands in this menu list}
iCut:
DoCut;
iCopy:
DoCopy;
iPaste:
DoPaste;
iClear:
DoClear;
otherwise
;
end;
mSpecial:
case theItem of {Handle all commands in this menu list}
iTryGlider:
FlyGlider;
iControls:
;
iRestoreDeep:
begin
restoreColor := not restoreColor;
if (restoreColor) then
SetItem(GetMenu(mSpecial), iRestoreDeep, 'Depth Restore is On')
else
SetItem(GetMenu(mSpecial), iRestoreDeep, 'Depth Restore is Off');
end;
iGoToRoom:
DoGoToRoom;
iNextRoom:
DoNextRoom;
iPrevRoom:
DoPrevRoom;
iNewRoom:
DoNewRoom;
otherwise
;
end;
mWindows:
case theItem of {Handle all commands in this menu list}
iTools:
OpenTools;
iAutoHideTools:
begin
autoHide := not autoHide;
if (autoHide) then
SetItem(GetMenu(mWindows), iAutoHideTools, 'Auto-Hide Tools is On')
else
SetItem(GetMenu(mWindows), iAutoHideTools, 'Auto-Hide Tools is Off');
end;
iHouse:
DoHouseInfo;
iRoomBack:
begin
cancelIt := TRUE;
DoRoomBackInfo(cancelIt);
LoadABackground(thisRoom.backPictID);
DrawAllObjects;
end;
iRoomCond:
begin
cancelIt := TRUE;
DoRoomCondInfo(cancelIt);
DrawAllObjects;
end;
iObject:
DoObjectInfo;
iHelp:
DoHelp;
otherwise
end;
mControls:
case theItem of
iHoldKey..iRelMouse:
begin
for i := iHoldkey to iRelMouse do
CheckItem(GetMenu(mControls), i, FALSE);
CheckItem(GetMenu(mControls), theItem, TRUE);
controlMethod := theItem;
end;
iConfigure:
DoCustomizeKeys;
otherwise
end;
kHMHelpMenuID:
if (theItem = iGlidersHelp) then
DoHelp;
otherwise
end;
HiliteMenu(0);
end;
{=================================}
end. {End of unit}