//============================================================================ //---------------------------------------------------------------------------- // RoomInfo.c //---------------------------------------------------------------------------- //============================================================================ #include "PLKeyEncoding.h" #include "PLNumberFormatting.h" #include "PLResources.h" #include "PLSound.h" #include "PLPasStr.h" #include "PLStandardColors.h" #include "DialogManager.h" #include "DialogUtils.h" #include "Externs.h" #include "HostDisplayDriver.h" #include "IGpDisplayDriver.h" #include "RectUtils.h" #include "PLPopupMenuWidget.h" #include "PLTimeTaggedVOSEvent.h" #include "QDPixMap.h" #include "ResolveCachingColor.h" #include "ResourceCompiledRef.h" #include "ResourceManager.h" #include "Utilities.h" #define kRoomInfoDialogID 1003 #define kOriginalArtDialogID 1016 #define kNoPICTFoundAlert 1036 #define kRoomNameItem 3 #define kRoomLocationBox 6 #define kRoomTilesBox 10 #define kRoomPopupItem 11 #define kRoomDividerLine 12 #define kRoomTilesBox2 15 #define kRoomFirstCheck 17 #define kLitUnlitText 18 #define kMiniTileWide 16 #define kBoundsButton 19 #define kOriginalArtworkItem 19 #define kPICTIDItem 5 #define kFloorSupportCheck 12 void UpdateRoomInfoDialog (Dialog *); void DragMiniTile (Window *, DrawSurface *, Point, short *); void HiliteTileOver (DrawSurface *, Point); int16_t RoomFilter (Dialog *dialog, const TimeTaggedVOSEvent *evt); short ChooseOriginalArt (short); void UpdateOriginalArt (Dialog *); int16_t OriginalArtFilter (Dialog *dialog, const TimeTaggedVOSEvent *evt); Boolean PictIDExists (short); short GetFirstPICT (void); void BitchAboutPICTNotFound (void); Rect tileSrc, tileDest, tileSrcRect, editTETextBox; Rect leftBound, topBound, rightBound, bottomBound; DrawSurface *tileSrcMap; short tempTiles[kNumTiles]; short tileOver, tempBack, cursorIs; Boolean originalLeftOpen, originalTopOpen, originalRightOpen, originalBottomOpen; Boolean originalFloor; extern IGpCursor *handCursor; extern short lastBackground; extern PortabilityLayer::ResourceArchive *houseResFork; //============================================================== Functions //-------------------------------------------------------------- UpdateRoomInfoDialog #ifndef COMPILEDEMO void UpdateRoomInfoDialog (Dialog *theDialog) { Rect src, dest; short i; if (tempBack >= kUserBackground) SetPopUpMenuValue(theDialog, kRoomPopupItem, kOriginalArtworkItem); else SetPopUpMenuValue(theDialog, kRoomPopupItem, (tempBack - kBaseBackgroundID) + 1); CopyBits(GetPortBitMapForCopyBits(tileSrcMap), GetPortBitMapForCopyBits(theDialog->GetWindow()->GetDrawSurface()), &tileSrcRect, &tileSrc, srcCopy); /* CopyBits(&((GrafPtr)tileSrcMap)->portBits, &(((GrafPtr)theDialog)->portBits), &tileSrcRect, &tileSrc, srcCopy, nil); */ dest = tileDest; dest.right = dest.left + kMiniTileWide; for (i = 0; i < kNumTiles; i++) { QSetRect(&src, 0, 0, kMiniTileWide, 80); QOffsetRect(&src, tempTiles[i] * kMiniTileWide, 0); CopyBits(GetPortBitMapForCopyBits(tileSrcMap), GetPortBitMapForCopyBits(theDialog->GetWindow()->GetDrawSurface()), &src, &dest, srcCopy); /* CopyBits(&((GrafPtr)tileSrcMap)->portBits, &(((GrafPtr)theDialog)->portBits), &src, &dest, srcCopy, nil); */ QOffsetRect(&dest, kMiniTileWide, 0); } if (GetNumberOfLights(thisRoomNumber) == 0) SetDialogString(theDialog, kLitUnlitText, PSTR("(Room Is Dark)")); else SetDialogString(theDialog, kLitUnlitText, PSTR("(Room Is Lit)")); PortabilityLayer::ResolveCachingColor blackColor = StdColors::Black(); FrameDialogItemC(theDialog, kRoomLocationBox, kRedOrangeColor8); FrameDialogItem(theDialog, kRoomTilesBox, blackColor); FrameDialogItemC(theDialog, kRoomDividerLine, kRedOrangeColor8); FrameDialogItem(theDialog, kRoomTilesBox2, blackColor); } #endif //-------------------------------------------------------------- DragMiniTile #ifndef COMPILEDEMO void DragMiniTile (Window *window, DrawSurface *surface, Point mouseIs, short *newTileOver) { Rect dragRect; Point mouseWas; short wasTileOver; Pattern dummyPattern; PortabilityLayer::ResolveCachingColor whiteColor = StdColors::White(); PortabilityLayer::ResolveCachingColor blueColor = StdColors::Blue(); tileOver = (mouseIs.h - tileSrc.left) / kMiniTileWide; wasTileOver = -1; QSetRect(&dragRect, 0, 0, kMiniTileWide, 80); QOffsetRect(&dragRect, tileSrc.left + (tileOver * kMiniTileWide), tileSrc.top); const uint8_t *pattern = *GetQDGlobalsGray(&dummyPattern); surface->InvertFrameRect(dragRect, pattern); mouseWas = mouseIs; while (WaitMouseUp()) // loop until mouse button let up { GetMouse(window, &mouseIs); // get mouse coords if (mouseWas != mouseIs) // the mouse has moved { surface->InvertFrameRect(dragRect, pattern); QOffsetRect(&dragRect, mouseIs.h - mouseWas.h, 0); surface->InvertFrameRect(dragRect, pattern); if (tileDest.Contains(mouseIs)) // is cursor in the drop rect { *newTileOver = (mouseIs.h - tileDest.left) / kMiniTileWide; if (*newTileOver != wasTileOver) { for (int offset = 0; offset < 2; offset++) { Point pointA = Point::Create(tileDest.left + (*newTileOver * kMiniTileWide), tileDest.top - 3 + offset); Point pointB = Point::Create(pointA.h + kMiniTileWide, pointA.v); surface->DrawLine(pointA, pointB, blueColor); } for (int offset = 0; offset < 2; offset++) { Point pointA = Point::Create(tileDest.left + (*newTileOver * kMiniTileWide), tileDest.bottom + 1 + offset); Point pointB = Point::Create(pointA.h + kMiniTileWide, pointA.v); surface->DrawLine(pointA, pointB, blueColor); } if (wasTileOver != -1) { for (int offset = 0; offset < 2; offset++) { Point pointA = Point::Create(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.top - 3 + offset); Point pointB = Point::Create(pointA.h + kMiniTileWide, pointA.v); surface->DrawLine(pointA, pointB, whiteColor); } for (int offset = 0; offset < 2; offset++) { Point pointA = Point::Create(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.bottom + 1 + offset); Point pointB = Point::Create(pointA.h + kMiniTileWide, pointA.v); surface->DrawLine(pointA, pointB, whiteColor); } } wasTileOver = *newTileOver; } } else { *newTileOver = -1; // we're not in the drop zone if (wasTileOver != -1) { for (int offset = 0; offset < 2; offset++) { Point pointA = Point::Create(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.top - 3 + offset); Point pointB = Point::Create(pointA.h + kMiniTileWide, pointA.v); surface->DrawLine(pointA, pointB, whiteColor); } for (int offset = 0; offset < 2; offset++) { Point pointA = Point::Create(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.bottom + 1 + offset); Point pointB = Point::Create(pointA.h + kMiniTileWide, pointA.v); surface->DrawLine(pointA, pointB, whiteColor); } wasTileOver = -1; } } mouseWas = mouseIs; } } if (wasTileOver != -1) { for (int offset = 0; offset < 2; offset++) { Point pointA = Point::Create(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.top - 3 + offset); Point pointB = Point::Create(pointA.h + kMiniTileWide, pointA.v); surface->DrawLine(pointA, pointB, whiteColor); } for (int offset = 0; offset < 2; offset++) { Point pointA = Point::Create(tileDest.left + (wasTileOver * kMiniTileWide), tileDest.bottom + 1 + offset); Point pointB = Point::Create(pointA.h + kMiniTileWide, pointA.v); surface->DrawLine(pointA, pointB, whiteColor); } wasTileOver = -1; } surface->InvertFrameRect(dragRect, pattern); } #endif //-------------------------------------------------------------- HiliteTileOver #ifndef COMPILEDEMO void HiliteTileOver (DrawSurface *surface, Point mouseIs) { short newTileOver; PortabilityLayer::ResolveCachingColor whiteColor = StdColors::White(); PortabilityLayer::ResolveCachingColor redColor = StdColors::Red(); if (tileSrc.Contains(mouseIs)) { if (cursorIs != kHandCursor) { PortabilityLayer::HostDisplayDriver::GetInstance()->SetCursor(handCursor); cursorIs = kHandCursor; } newTileOver = (mouseIs.h - tileSrc.left) / kMiniTileWide; if (newTileOver != tileOver) { { const Point tileLineTopLeft = Point::Create(tileSrc.left + (newTileOver * kMiniTileWide), tileSrc.top - 3); const Point tileLineBottomRight = Point::Create(tileLineTopLeft.h + kMiniTileWide + 1, tileLineTopLeft.v + 2); surface->FillRect(Rect::Create(tileLineTopLeft.v, tileLineTopLeft.h, tileLineBottomRight.v, tileLineBottomRight.h), redColor); } if (tileOver != -1) { { const Point tileLineTopLeft = Point::Create(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.top - 3); const Point tileLineBottomRight = Point::Create(tileLineTopLeft.h + kMiniTileWide + 1, tileLineTopLeft.v + 2); surface->FillRect(Rect::Create(tileLineTopLeft.v, tileLineTopLeft.h, tileLineBottomRight.v, tileLineBottomRight.h), whiteColor); } { const Point tileLineTopLeft = Point::Create(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.bottom + 1); const Point tileLineBottomRight = Point::Create(tileLineTopLeft.h + kMiniTileWide + 1, tileLineTopLeft.v + 2); surface->FillRect(Rect::Create(tileLineTopLeft.v, tileLineTopLeft.h, tileLineBottomRight.v, tileLineBottomRight.h), whiteColor); } } tileOver = newTileOver; } } else { if (tileOver != -1) { { const Point tileLineTopLeft = Point::Create(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.top - 3); const Point tileLineBottomRight = Point::Create(tileLineTopLeft.h + kMiniTileWide + 1, tileLineTopLeft.v + 2); surface->FillRect(Rect::Create(tileLineTopLeft.v, tileLineTopLeft.h, tileLineBottomRight.v, tileLineBottomRight.h), whiteColor); } { const Point tileLineTopLeft = Point::Create(tileSrc.left + (tileOver * kMiniTileWide), tileSrc.bottom + 1); const Point tileLineBottomRight = Point::Create(tileLineTopLeft.h + kMiniTileWide + 1, tileLineTopLeft.v + 2); surface->FillRect(Rect::Create(tileLineTopLeft.v, tileLineTopLeft.h, tileLineBottomRight.v, tileLineBottomRight.h), whiteColor); } tileOver = -1; } if (editTETextBox.Contains(mouseIs)) { if (cursorIs != kBeamCursor) { PortabilityLayer::HostDisplayDriver::GetInstance()->SetStandardCursor(EGpStandardCursors::kIBeam); cursorIs = kBeamCursor; } } else { if (cursorIs != kArrowCursor) { InitCursor(); cursorIs = kArrowCursor; } } } } #endif //-------------------------------------------------------------- RoomFilter #ifndef COMPILEDEMO int16_t RoomFilter(Dialog *dial, const TimeTaggedVOSEvent *evt) { Point mouseIs; short newTileOver; if (!evt) return -1; Window *window = dial->GetWindow(); DrawSurface *surface = dial->GetWindow()->GetDrawSurface(); if (evt->IsKeyDownEvent()) { switch (PackVOSKeyCode(evt->m_vosEvent.m_event.m_keyboardInputEvent)) { case PL_KEY_SPECIAL(kEnter): case PL_KEY_NUMPAD_SPECIAL(kEnter): FlashDialogButton(dial, kOkayButton); return kOkayButton; case PL_KEY_SPECIAL(kEscape): FlashDialogButton(dial, kCancelButton); return kCancelButton; case PL_KEY_SPECIAL(kTab): SelectDialogItemText(dial, kRoomNameItem, 0, 1024); return 0; default: return -1; } } else if (evt->m_vosEvent.m_eventType == GpVOSEventTypes::kMouseInput) { const GpMouseInputEvent &mouseEvent = evt->m_vosEvent.m_event.m_mouseInputEvent; if (evt->IsLMouseDownEvent()) { mouseIs = Point::Create(mouseEvent.m_x, mouseEvent.m_y); mouseIs -= dial->GetWindow()->GetTopLeftCoord(); if (tileSrc.Contains(mouseIs)) { if (StillDown()) { DragMiniTile(window, surface, mouseIs, &newTileOver); if ((newTileOver >= 0) && (newTileOver < kNumTiles)) { tempTiles[newTileOver] = tileOver; UpdateRoomInfoDialog(dial); } } return 0; } else return -1; } else if (mouseEvent.m_eventType == GpMouseEventTypes::kMove) { mouseIs = dial->GetWindow()->MouseToLocal(mouseEvent); HiliteTileOver(surface, mouseIs); return -1; } } return -1; } #endif //-------------------------------------------------------------- DoRoomInfo void DoRoomInfo(void) { #ifndef COMPILEDEMO #define kBackgroundsMenuID 140 Dialog *roomInfoDialog; Str255 floorStr, suiteStr, objectsStr, tempStr; short item, i, newBack; char wasState; Boolean leaving, wasFirstRoom, forceDraw; PLError_t theErr; tileOver = -1; cursorIs = kArrowCursor; tempBack = thisRoom->background; // SetMenuItemTextStyle(backgroundsMenu, kOriginalArtworkItem, italic); NumToString(thisRoom->floor, floorStr); NumToString(thisRoom->suite, suiteStr); NumToString(thisRoom->numObjects, objectsStr); DialogTextSubstitutions substitutions(floorStr, suiteStr, objectsStr); theErr = CreateOffScreenGWorld(&tileSrcMap, &tileSrcRect, kPreferredPixelFormat); // CreateOffScreenPixMap(&tileSrcRect, &tileSrcMap); // SetPort((GrafPtr)tileSrcMap); if ((tempBack > kStars) && (!PictIDExists(tempBack))) { BitchAboutPICTNotFound(); tempBack = kSimpleRoom; } if ((tempBack == 2002) || (tempBack == 2011) || (tempBack == 2016) || (tempBack == 2017)) LoadScaledGraphicCustom(tileSrcMap, tempBack - 800, &tileSrcRect); else LoadScaledGraphicCustom(tileSrcMap, tempBack, &tileSrcRect); for (i = 0; i < kNumTiles; i++) tempTiles[i] = thisRoom->tiles[i]; // CenterDialog(kRoomInfoDialogID); roomInfoDialog = PortabilityLayer::DialogManager::GetInstance()->LoadDialog(kRoomInfoDialogID, kPutInFront, &substitutions); if (roomInfoDialog == nil) RedAlert(kErrDialogDidntLoad); SetPort(roomInfoDialog->GetWindow()->GetDrawSurface()); { PortabilityLayer::WidgetBasicState state; GetDialogItemRect(roomInfoDialog, kRoomPopupItem, &state.m_rect); state.m_resID = kBackgroundsMenuID; state.m_enabled = true; PortabilityLayer::PopupMenuWidget *roomPopupWidget = PortabilityLayer::PopupMenuWidget::Create(state, nullptr); roomInfoDialog->ReplaceWidget(kRoomPopupItem - 1, roomPopupWidget); if (HouseHasOriginalPicts()) EnableMenuItem(roomPopupWidget->GetMenu(), kOriginalArtworkItem); } if (tempBack >= kUserBackground) SetPopUpMenuValue(roomInfoDialog, kRoomPopupItem, kOriginalArtworkItem); else SetPopUpMenuValue(roomInfoDialog, kRoomPopupItem, (tempBack - kBaseBackgroundID) + 1); SetDialogString(roomInfoDialog, kRoomNameItem, thisRoom->name); GetDialogItemRect(roomInfoDialog, kRoomTilesBox, &tileSrc); GetDialogItemRect(roomInfoDialog, kRoomTilesBox2, &tileDest); GetDialogItemRect(roomInfoDialog, kRoomNameItem, &editTETextBox); SelectDialogItemText(roomInfoDialog, kRoomNameItem, 0, 1024); ShowWindow(roomInfoDialog->GetWindow()); DrawDefaultButton(roomInfoDialog); wasFirstRoom = ((*thisHouse)->firstRoom == thisRoomNumber); SetDialogItemValue(roomInfoDialog, kRoomFirstCheck, (short)wasFirstRoom); if (tempBack >= kUserBackground) MyEnableControl(roomInfoDialog, kBoundsButton); else MyDisableControl(roomInfoDialog, kBoundsButton); leaving = false; UpdateRoomInfoDialog(roomInfoDialog); while (!leaving) { bool needRedraw = false; item = roomInfoDialog->ExecuteModal(RoomFilter); if (item == kOkayButton) { for (i = 0; i < kNumTiles; i++) thisRoom->tiles[i] = tempTiles[i]; GetDialogString(roomInfoDialog, kRoomNameItem, tempStr); PasStringCopyNum(tempStr, thisRoom->name, 27); if (wasFirstRoom) { (*thisHouse)->firstRoom = thisRoomNumber; } thisRoom->background = tempBack; if (tempBack < kUserBackground) lastBackground = tempBack; CopyThisRoomToRoom(); ReflectCurrentRoom(false); fileDirty = true; UpdateMenus(false); leaving = true; } else if (item == kCancelButton) { leaving = true; } else if (item == kRoomFirstCheck) { wasFirstRoom = !wasFirstRoom; SetDialogItemValue(roomInfoDialog, kRoomFirstCheck, (short)wasFirstRoom); } else if (item == kRoomPopupItem) { GetPopUpMenuValue(roomInfoDialog, kRoomPopupItem, &newBack); if (newBack == kOriginalArtworkItem) // original art item selected? { if (tempBack < kUserBackground) // was previous bg built-in? { tempBack = GetFirstPICT(); // then assign 1st PICT forceDraw = true; } else forceDraw = false; newBack = ChooseOriginalArt(tempBack); // bring up dialog if ((tempBack != newBack) || (forceDraw)) { tempBack = newBack; LoadScaledGraphicCustom(tileSrcMap, tempBack, &tileSrcRect); needRedraw = true; } } else { newBack += (kBaseBackgroundID - 1); // adjust to get real PICT ID if (newBack != tempBack) // if background has changed SetInitialTiles(newBack, false); } if (newBack >= kUserBackground) { MyEnableControl(roomInfoDialog, kBoundsButton); if (newBack != tempBack) // if background has changed SetInitialTiles(newBack, false); } else MyDisableControl(roomInfoDialog, kBoundsButton); if (newBack != tempBack) { tempBack = newBack; if ((tempBack == 2002) || (tempBack == 2011) || (tempBack == 2016) || (tempBack == 2017)) LoadScaledGraphicCustom(tileSrcMap, tempBack - 800, &tileSrcRect); else LoadScaledGraphicCustom(tileSrcMap, tempBack, &tileSrcRect); needRedraw = true; } } else if (item == kBoundsButton) { newBack = ChooseOriginalArt(tempBack); if (tempBack != newBack) { tempBack = newBack; LoadScaledGraphicCustom(tileSrcMap, tempBack, &tileSrcRect); needRedraw = true; } } if (needRedraw) UpdateRoomInfoDialog(roomInfoDialog); } InitCursor(); roomInfoDialog->Destroy(); // KillOffScreenPixMap(tileSrcMap); DisposeGWorld(tileSrcMap); tileSrcMap = nil; #endif } //-------------------------------------------------------------- UpdateOriginalArt #ifndef COMPILEDEMO void UpdateOriginalArt (Dialog *theDialog) { Pattern grayPattern; GetQDGlobalsGray(&grayPattern); DrawDefaultButton(theDialog); if (!originalLeftOpen) BorderDialogItem(theDialog, 7, 8, 2, nullptr); else BorderDialogItem(theDialog, 7, 8, 2, grayPattern); if (!originalTopOpen) BorderDialogItem(theDialog, 8, 4, 2, nullptr); else BorderDialogItem(theDialog, 8, 4, 2, grayPattern); if (!originalRightOpen) BorderDialogItem(theDialog, 9, 1, 2, nullptr); else BorderDialogItem(theDialog, 9, 1, 2, grayPattern); if (!originalBottomOpen) BorderDialogItem(theDialog, 10, 2, 2, nullptr); else BorderDialogItem(theDialog, 10, 2, 2, grayPattern); } #endif //-------------------------------------------------------------- OriginalArtFilter #ifndef COMPILEDEMO int16_t OriginalArtFilter(Dialog *dial, const TimeTaggedVOSEvent *evt) { Point mouseIs; if (!evt) return -1; if (evt->IsKeyDownEvent()) { switch (PackVOSKeyCode(evt->m_vosEvent.m_event.m_keyboardInputEvent)) { case PL_KEY_SPECIAL(kEnter): case PL_KEY_NUMPAD_SPECIAL(kEnter): FlashDialogButton(dial, kOkayButton); return kOkayButton; case PL_KEY_SPECIAL(kEscape): FlashDialogButton(dial, kCancelButton); return kCancelButton; case PL_KEY_SPECIAL(kTab): SelectDialogItemText(dial, kPICTIDItem, 0, 1024); return 0; default: return -1; } } else if (evt->IsLMouseDownEvent()) { const GpMouseInputEvent &mouseEvt = evt->m_vosEvent.m_event.m_mouseInputEvent; mouseIs = Point::Create(mouseEvt.m_x, mouseEvt.m_y); mouseIs -= dial->GetWindow()->GetTopLeftCoord(); if (leftBound.Contains(mouseIs)) return 7; else if (topBound.Contains(mouseIs)) return 8; else if (rightBound.Contains(mouseIs)) return 9; else if (bottomBound.Contains(mouseIs)) return 10; else return -1; } return -1; } #endif //-------------------------------------------------------------- ChooseOriginalArt #ifndef COMPILEDEMO short ChooseOriginalArt (short was) { Dialog *theDialog; long longID; short item, newPictID, tempShort, wasPictID; Boolean leaving; if (was < kUserBackground) was = kUserBackground; InitCursor(); BringUpDialog(&theDialog, kOriginalArtDialogID, nullptr); if (was >= kOriginalArtworkItem) { newPictID = was; wasPictID = was; } else { newPictID = kUserBackground; wasPictID = 0; } SetDialogNumToStr(theDialog, kPICTIDItem, (long)newPictID); SelectDialogItemText(theDialog, kPICTIDItem, 0, 16); GetDialogItemRect(theDialog, 7, &leftBound); GetDialogItemRect(theDialog, 8, &topBound); GetDialogItemRect(theDialog, 9, &rightBound); GetDialogItemRect(theDialog, 10, &bottomBound); tempShort = thisRoom->bounds >> 1; // version 2.0 house originalLeftOpen = ((tempShort & 1) == 1); originalTopOpen = ((tempShort & 2) == 2); originalRightOpen = ((tempShort & 4) == 4); originalBottomOpen = ((tempShort & 8) == 8); originalFloor = ((tempShort & 16) == 16); SetDialogItemValue(theDialog, kFloorSupportCheck, (short)originalFloor); leaving = false; UpdateOriginalArt(theDialog); while (!leaving) { item = theDialog->ExecuteModal(OriginalArtFilter); if (item == kOkayButton) { GetDialogNumFromStr(theDialog, kPICTIDItem, &longID); if ((longID >= 3000) && (longID < 3800) && (PictIDExists((short)longID))) { newPictID = (short)longID; if (newPictID != wasPictID) SetInitialTiles(tempBack, false); tempShort = 0; if (originalLeftOpen) tempShort += 1; if (originalTopOpen) tempShort += 2; if (originalRightOpen) tempShort += 4; if (originalBottomOpen) tempShort += 8; if (originalFloor) tempShort += 16; tempShort = tempShort << 1; // shift left 1 bit tempShort += 1; // flag that says orginal bounds used thisRoom->bounds = tempShort; leaving = true; } else { SysBeep(1); SetDialogNumToStr(theDialog, kPICTIDItem, (long)newPictID); } } else if (item == kCancelButton) { newPictID = was; leaving = true; } else if (item == 7) { originalLeftOpen = !originalLeftOpen; UpdateOriginalArt(theDialog); } else if (item == 8) { originalTopOpen = !originalTopOpen; UpdateOriginalArt(theDialog); } else if (item == 9) { originalRightOpen = !originalRightOpen; UpdateOriginalArt(theDialog); } else if (item == 10) { originalBottomOpen = !originalBottomOpen; UpdateOriginalArt(theDialog); } else if (item == kFloorSupportCheck) { originalFloor = !originalFloor; ToggleDialogItemValue(theDialog, kFloorSupportCheck); } } theDialog->Destroy(); return (newPictID); } #endif //-------------------------------------------------------------- PictIDExists Boolean PictIDExists (short theID) { THandle thePicture; // Handle resHandle; // Str255 resName; // ResType resType; // short numPicts, i; // short resID; Boolean foundIt; foundIt = true; thePicture = LoadHouseResource('PICT', theID); if (thePicture == nil) { thePicture = LoadHouseResource('Date', theID); if (thePicture == nil) { foundIt = false; } else thePicture.Dispose(); } else thePicture.Dispose(); // foundIt = false; // numPicts = Count1Resources('PICT'); // for (i = 1; i <= numPicts; i++) // { // resHandle = Get1IndResource('PICT', i); // if (resHandle != nil) // { // GetResInfo(resHandle, &resID, &resType, resName); // ReleaseResource(resHandle); // if (resID == theID) // { // foundIt = true; // break; // } // } // } return (foundIt); } //-------------------------------------------------------------- GetFirstPICT short GetFirstPICT (void) { Handle resHandle; Str255 resName; int16_t resID = 0; if (!houseResFork->FindFirstResourceOfType('PICT', resID)) return -1; return resID; } //-------------------------------------------------------------- BitchAboutPICTNotFound #ifndef COMPILEDEMO void BitchAboutPICTNotFound (void) { short hitWhat; // CenterAlert(kNoPICTFoundAlert); hitWhat = PortabilityLayer::DialogManager::GetInstance()->DisplayAlert(kNoPICTFoundAlert, nullptr); } #endif