;coded in PB3.93 for WinXP ;revised to PB4.02 ;cel 25872 15222 ;- includes XIncludeFile "dialogs\myini.pbi" XIncludeFile "dialogs\bitmaps.pbi" XIncludeFile "MyIDEVars.pbi" XIncludeFile "MyIDEMacros.pbi" XIncludeFile "IDEProcs.pbi" XIncludeFile "SciLexer2.pbi" XIncludeFile "DBCLexer.pbi" If InitSound()=0 MessageRequester("Initialization Error","Unable to use sounds",#MB_ICONSTOP) End EndIf LoadKeyWords() ;- Load Icons CatchImage( #Icon_FileNew , ?FileNew) CatchImage( #Icon_FileOpen, ?FileOpen) CatchImage( #Icon_FileSave, ?FileSave) CatchImage( #Icon_Delete, ?FileDelete) CatchImage( #Icon_Compile, ?Compile) CatchImage( #Icon_Run, ?Run) CatchImage( #Icon_Build, ?Build) CatchImage( #Icon_Image, ?Image) CatchImage( #Icon_Sound, ?Sound) CatchImage( #Icon_World, ?World) CatchImage( #Icon_Model, ?Model) CatchImage( #Icon_Script, ?Script) CatchImage( #Icon_MOB, ?MOB) CatchImage( #Icon_AOB, ?AOB) CatchImage( #Icon_Room, ?Room) CatchImage( #Icon_Left, ?Left) CatchImage( #Icon_Right, ?Right) CatchImage( #Icon_Project, ?Project) CatchImage( #Icon_Help, ?Help) CatchImage( #Icon_Image0, ?Image0) CatchImage( #Icon_Image1, ?Image1) CatchImage( #Icon_Image2, ?Image2) CatchImage( #Icon_Image3, ?Image3) CatchImage( #Icon_Image4, ?Image4) ;- MakeWindow LoadINI() If OpenWindow(#WINDOW, 0, 0, 500, 400, MyTittle+" - "+ProjectName,#WindowFlags) If CreateMenu(#MENU, WindowID(#WINDOW)) ;{ MenuTitle("&File") MenuItem(#MENU_New,"&New") MenuItem(#MENU_Open,"&Open") MenuItem(#MENU_Save,"&Save") MenuItem(#MENU_SaveAS,"save &As") MenuBar() OpenSubMenu("Options") MenuItem(#MENU_Simple,"Simple Mode") MenuItem(#Menu_Advanced,"Advanced Mode") If EnableReserved MenuItem(#Menu_Pro,"Reserved Mode") ;MenuItem(#Menu_Patch,"Run Patch") EndIf CloseSubMenu() MenuBar() MenuItem(#MENU_Quit,"E&xit") ;Edit menue removed, It will be used inside scripts instead ;Edit Menu returned because PB-MDI does not support multiple menus MenuTitle("&Edit") MenuItem(#MENU_Cut,"Cu&t") MenuItem(#MENU_Copy,"&Copy") MenuItem(#MENU_Paste,"&Paste") MenuItem(#MENU_SELALL,"Select &All") MenuItem(#MENU_Undo,"&Undo") MenuTitle("Compile") MenuItem(#MENU_Compile,"&Compile") MenuItem(#MENU_Execute,"&Execute") MenuItem(#MENU_Build,"&Make") MenuBar() MenuItem(#MENU_ExportF,"Export &Function") MenuItem(#MENU_ExportP,"Export &Project") MenuBar() MenuItem(#MENU_COPT,"Compiler Options") MenuItem(#MENU_SOPT,"Source Options") MenuItem(#MENU_MOPT,"Media Options") ;multi-language support dropped ;too many problems to do at once ;MenuItem(#MENU_LOPT,"Language Details") MenuTitle("&Item") OpenSubMenu("&Add") MenuItem(#MENU_SOUND,"&Sound") ;MenuItem(#MENU_3DSound,"3&D Sound") MenuItem(#MENU_Image,"&Image") MenuItem(#MENU_Model,"&Model") MenuItem(#Menu_World,"&World") MenuItem(#MENU_Function,"&Function") MenuItem(#MENU_Import,"Import Function") MenuItem(#MENU_Structure,"Struc&ture") MenuItem(#MENU_Global,"&Global") MenuItem(#MENU_Constant,"&Constant") MenuItem(#MENU_Array,"Array") MenuItem(#MENU_AObject,"Action Object") MenuItem(#MENU_MObject,"Media List") MenuItem(#MENU_Room,"&Room") If DevMode=#DEV_RESERVED OpenSubMenu("Reserved") MenuItem(#Menu_RGlobal,"&Global") MenuItem(#Menu_RConstant,"&Constant") MenuItem(#Menu_RArray,"&Array") MenuItem(#MENU_RStruct,"&Structure") MenuItem(#Menu_RFunction,"&Function") MenuItem(#Menu_RImport,"Import Function") MenuItem(#Menu_RINIT,"&Initialize") CloseSubMenu() EndIf CloseSubMenu() MenuItem(#MENU_Delete,"&Delete") MenuItem(#MENU_Duplicate,"D&uplicate") MenuTitle("&Window") MenuItem(#MENU_HideProject,"&Hide Project Window") MenuItem(#MENU_TileV,"Tile &Virtically") MenuItem(#MENU_TileH,"Tile &Horizontally") MenuItem(#MENU_Cascade,"&Cascade") MenuItem(#MENU_Arrange,"&Auto arrange") MenuItem(#MENU_Previous,"&Previous") MenuItem(#MENU_Next,"&Next") MenuTitle("Help") ;MenuItem(#MENU_HELP,"&Contents") ;MenuItem(#MENU_MORE,"&Language Help") MenuShortCut( #WINDOW , #MENU_HELP , "&Contents" , F1 ) MenuShortCut( #WINDOW , #MENU_MORE , "&Language Help" , F2 ) MenuItem(#MENU_ABOUT,"&About") MenuBar() MenuItem(#Menu_SCI,"&Scintilla") If CreateGadgetList(WindowID(#WINDOW)) MainTop=MenuHeight() MainHeight=WindowHeight(#WINDOW)-MainTop If CreateToolBar(#TOOLBAR, WindowID(#WINDOW)) CompilerIf #PB_VERSION=4.02 MainHeight - ToolBarHeight(#TOOLBAR) MainTop +ToolBarHeight(#TOOLBAR) CompilerElse MainHeight - MainTop MainTop + MainTop ;we don't have a toolbarheight() function ? CompilerEndIf ;- Toolbar ToolBarImageButton(#MENU_New, ImageID(#Icon_FileNew)) ToolBarImageButton(#MENU_Open, ImageID(#Icon_FileOpen)) ToolBarImageButton(#MENU_Save, ImageID(#Icon_FileSave)) ToolBarImageButton(#MENU_Delete, ImageID(#Icon_Delete)) ToolBarSeparator() ToolBarImageButton(#MENU_Compile, ImageID(#Icon_Compile)) ToolBarImageButton(#MENU_execute, ImageID(#Icon_Run)) ToolBarImageButton(#MENU_Build, ImageID(#Icon_Build)) ToolBarSeparator() ToolBarImageButton(#MENU_Image, ImageID(#Icon_Image)) ToolBarImageButton(#MENU_Sound, ImageID(#Icon_Sound)) ToolBarImageButton(#MENU_World, ImageID(#Icon_World)) ToolBarImageButton(#MENU_Model, ImageID(#Icon_Model)) ToolBarImageButton(#MENU_Function,ImageID(#Icon_Script)) ToolBarSeparator() ToolBarImageButton(#MENU_MObject, ImageID(#Icon_MOB)) ToolBarImageButton(#MENU_AObject, ImageID(#Icon_AOB)) ToolBarImageButton(#MENU_Room, ImageID(#Icon_Room)) ToolBarSeparator() ToolBarImageButton(#MENU_HideProject,ImageID(#Icon_Project),#PB_ToolBar_Toggle) ToolBarImageButton(#MENU_Previous,ImageID(#Icon_Left)) ToolBarImageButton(#MENU_Next, ImageID(#Icon_Right)) ToolBarSeparator() ToolBarImageButton(#MENU_Help, ImageID(#Icon_Help)) ;tips ToolBarToolTip(#Toolbar,#MENU_New,"Start a new project") ToolBarToolTip(#Toolbar,#MENU_Open,"Open existing project") ToolBarToolTip(#Toolbar,#MENU_Save,"Save project") ToolBarToolTip(#Toolbar,#MENU_Delete,"Delete the currently selected resource") ToolBarToolTip(#Toolbar,#MENU_Compile,"Compile project") ToolBarToolTip(#Toolbar,#MENU_execute,"Execute Project") ToolBarToolTip(#Toolbar,#MENU_Build,"Buile project EXE") ToolBarToolTip(#Toolbar,#MENU_Image,"Add an image resource") ToolBarToolTip(#Toolbar,#MENU_Sound,"Add a sound resource") ToolBarToolTip(#Toolbar,#MENU_World,"Add a Magic World resource") ToolBarToolTip(#Toolbar,#MENU_Model,"Add a Model resource") ToolBarToolTip(#Toolbar,#MENU_Function,"Add a custom function") ToolBarToolTip(#Toolbar,#MENU_MObject,"Define a Media List") ToolBarToolTip(#Toolbar,#MENU_AObject,"Define an Action Object") ToolBarToolTip(#Toolbar,#MENU_Room,"Add a Room") ToolBarToolTip(#Toolbar,#MENU_HideProject,"Hide Project Window") ToolBarToolTip(#Toolbar,#MENU_Previous,"Show Previous Window") ToolBarToolTip(#Toolbar,#MENU_Next,"Show Next Window") ToolBarToolTip(#Toolbar,#MENU_Help,"Show Organizer Help") EndIf MainWidth=WindowWidth(#WINDOW) MDIGadget(#GADGET_MDI, 0, 0, 0, 0, 3, #MENU_FirstMDI, #PB_MDI_AutoSize) EndIf ;} ClearProject() LoadReserved() UpdateRecentFiles() ;- main loop Delay(10) quit.l=0 RemoveKeyboardShortcut(#WINDOW,#PB_Shortcut_Tab ) RemoveKeyboardShortcut(#Window,#PB_Shortcut_Tab|#PB_Shortcut_Shift ) Select DevMode Case #DEV_SIMPLE SetMenuItemState(#MENU,#MENU_Simple,1) If EnableReserved HideSubMenu() EndIf Case #DEV_ADVANCED SetMenuItemState(#MENU,#Menu_Advanced,1) If EnableReserved HideSubMenu() EndIf Case #DEV_RESERVED SetMenuItemState(#MENU,#Menu_Pro,1) EndSelect ;If DevMode=#DEV_SIMPLE ; DisableMenuItem(#MENU,#MENU_LOPT,1) ;EndIf Repeat WinEvent.l=WaitWindowEvent() ;WinID.l=GetGadgetState(#GADGET_MDI) WinID.l=EventWindow() Select WinEvent ;- ResizeWindow Case #PB_Event_SizeWindow If WinID<>#Window FindLinkList( MDIWindow() , MDIWindow()\WindowID=WinID ) Width=WindowWidth(WinID) Height=WindowHeight(WinID) If MDIWindow()\MDIType & #MDI_FUNCTION = #MDI_FUNCTION ResizeGadget(MDIWindow()\EditorGadget,#PB_Ignore,#PB_Ignore,width,height-40-StatusBarHeight(MDIWindow()\StatusGadget)) ResizeGadget(MDIWindow()\Container,#PB_Ignore,#PB_Ignore,width,#PB_Ignore) ElseIf MDIWindow()\MDIType = #MDI_Project | #MDI_RESERVED ResizeGadget(MDIWindow()\EditorGadget,#PB_Ignore,#PB_Ignore,width,height-StatusBarHeight(MDIWindow()\StatusGadget)) ElseIf MDIWindow()\MDIType = #MDI_ROOM wrsize.l=0 If width<494 width=494 wrsize=1 EndIf If height<284 height=284 wrsize=1 EndIf If wrsize ResizeWindow(WinID,#PB_Ignore,#PB_Ignore,width,height) EndIf ;now for the map display ResizeGadget(MDIWindow()\RoomScroll,#PB_Ignore,#PB_Ignore,270+width-494,270+height-284) ElseIf MDIWindow()\MDIType=#MDI_ERROR If MDIWindow()\StatusGadget>0 ResizeGadget(MDIWindow()\EditorGadget,#PB_Ignore,#PB_Ignore,width,height-StatusBarHeight(MDIWindow()\StatusGadget)) Else ResizeGadget(MDIWindow()\EditorGadget,#PB_Ignore,#PB_Ignore,width,height-MenuHeight()) EndIf ElseIf MDIWindow()\MDIType=#MDI_WEB ResizeGadget(MDIWindow()\WebGadget, #PB_Ignore, #PB_Ignore, width, height-52) If MDIWindow()\WebKey>0 ResizeGadget(MDIWindow()\WebKey, #PB_Ignore, #PB_Ignore, width-185, #PB_Ignore) ResizeGadget(MDIWindow()\WebGo, width-25, #PB_Ignore, #PB_Ignore, #PB_Ignore) EndIf ResizeGadget(MDIWindow()\WebCon, #PB_Ignore, #PB_Ignore, width, #PB_Ignore) EndIf EndIf ;- CloseWindow Case #PB_Event_CloseWindow ;CallDebugger ;Debug WindowMouseY(WinID) ;Debug MenuHeight() ;If WindowMouseY(WinID)<0 If WinID=#Window ;clicked parent close window button Quit=ShutDown() Else ;a child window was closed ResetList(MDIWindow()) While NextElement( MDIWindow()) If MDIWindow()\WindowID=WinID If MDIWindow()\MDIType=#MDI_Project SetWindowState(MDIWindow()\WindowID,#PB_Window_Minimize) Else If MDIWindow()\Changed And MDIWindow()\MDIType<>#MDI_ERROR msg.s=MDIWindow()\MDIName+MDIWindow()\ItemName+" has changed."+Chr(10)+"Do you wish To save?" reply.l=MessageBox_(WindowID(#WINDOW),msg,MyTittle,#MB_YESNOCANCEL | #MB_ICONQUESTION) If reply=#IDYES ;item.l=ListIndex(MDIWindow()) SetGadgetState(#GADGET_MDI,MDIWindow()\WindowID) ProjectChanged=1 SaveFile() ElseIf reply=#IDCANCEL canceled=1 Break EndIf If MDIWindow()\MDIType=#MDI_AOB ;free all indexes ResetList(WControl()) While NextElement(WControl()) If WControl()\WOwner=WinID DeleteElement(WControl()) EndIf Wend EndIf ZapImages() KillSCI(MDIWindow()\EditorGadget) CloseWindow(WinID) DeleteElement(MDIWindow()) Else If MDIWindow()\MDIType=#MDI_AOB ;free all indexes ResetList(WControl()) While NextElement(WControl()) If WControl()\WOwner=WinID DeleteElement(WControl()) EndIf Wend EndIf ZapImages() KillSCI(MDIWindow()\EditorGadget) CloseWindow(WinID) DeleteElement(MDIWindow()) EndIf EndIf Break EndIf Wend EndIf ;- gadget events Case #PB_Event_Gadget ResetList(MDIWindow()) While NextElement( MDIWindow()) If MDIWindow()\WindowID=WinID Break EndIf Wend EG.l=EventGadget() Select EG ;- Web Window ;case MDIWindow()\WebGadget Case MDIWindow()\WebBack SetGadgetState(MDIWindow()\WebGadget, #PB_Web_Back) Case MDIWindow()\WebNext SetGadgetState(MDIWindow()\WebGadget, #PB_Web_Forward) Case MDIWindow()\WebMain SetGadgetText(MDIWindow()\WebGadget,DBCHelpFile) Case MDIWindow()\WebGo KeyWord.s=LCase(Trim(GetGadgetText(MDIWindow()\WebKey))) If keyword found.l=0 ForEach Key() If Key()\Keyword=Keyword SetGadgetText(MDIWindow()\WebGadget,Key()\KeyLink) ;StatusBarText(0, 0, GetGadgetText(10)) found=1 Break EndIf Next Key() If found=0 If MessageRequester("MyHelper","Keyword Not Found"+Chr(10)+"Do you wish to view the Index?",#MB_ICONQUESTION | #MB_YESNO)=#IDYES SetGadgetText(MDIWindow()\WebGadget,GetPathPart(DBCHelpFile)+"index.htm") EndIf EndIf EndIf ;Case MDIWindow()\WebKey ;Case MDIWindow()\WebCon ;- Project Window Case MDIWindow()\TreeGadget ;ok, try to open a window from the project window.... If EventType()=#PB_EventType_LeftDoubleClick TheIndex.l=GetGadgetState(MDIWindow()\TreeGadget) TheName.s=GetGadgetItemText(MDIWindow()\TreeGadget,TheIndex,0) TheType.l=GetGadgetItemData(MDIWindow()\TreeGadget,TheIndex) TheSub.l=GetGadgetItemAttribute(MDIWindow()\TreeGadget,TheIndex,#PB_Tree_SubLevel) If TheType & #MDI_RESERVED = #MDI_RESERVED If TheSub=2 OpenObject(TheName,TheType) EndIf Else If TheSub=1 OpenObject(TheName,TheType) EndIf EndIf EndIf ;- code editor Case MDIWindow()\EditorGadget ;If SendMessage_(GadgetID(MDIWindow()\EditorGadget), #EM_GETMODIFY, #Null, #Null) ; MDIWindow()\Changed=1 ;EndIf MDIWindow()\Changed=SCI_GetModify(MDIWindow()\EditorGadget) Case MDIWindow()\FName,MDIWindow()\FPars If EventType()=#PB_EventType_Change MDIWindow()\Changed=1 EndIf ;Case MDIWindow()\Container Case MDIWindow()\FName If EventType()=#PB_EventType_Change MDIWindow()\Changed=1 EndIf Case MDIWindow()\FPars If EventType()=#PB_EventType_Change MDIWindow()\Changed=1 EndIf Case MDIWindow()\FRType If GetGadgetState(MDIWindow()\FRType)<>MDIWindow()\OldFRType MDIWindow()\Changed=1 EndIf ;- codelistview ;Case MDIWindow()\ListIconGadget ;Case MDIWindow()\VarToAdd ;Case MDIWindow()\VarTypeAdd Case MDIWindow()\AddButton ;add to list If GetGadgetText(MDIWindow()\VarToAdd) msg.s=GetGadgetText(MDIWindow()\VarToAdd)+Chr(10)+GetGadgetText(MDIWindow()\VarTypeAdd) If MDIWindow()\MDIType & #MDI_ARRAY = #MDI_ARRAY defval.s=InputRequester(MyTittle,"Default Array Size for "+GetGadgetText(MDIWindow()\VarToAdd),"1") msg=msg+Chr(10)+defval ElseIf MDIWindow()\MDIType & #MDI_STRUCTURE <> #MDI_STRUCTURE defval.s=InputRequester(MyTittle,"Default Value for "+GetGadgetText(MDIWindow()\VarToAdd),"0") msg=msg+Chr(10)+defval EndIf AddGadgetItem(MDIWindow()\ListIconGadget,-1,msg) SetGadgetText(MDIWindow()\VarToAdd,"") MDIWindow()\Changed=1 EndIf Case MDIWindow()\OKButton ;save changes and close window If MDIWindow()\MDIType & #MDI_STRUCTURE = #MDI_STRUCTURE FindLinkList( Code() , Code()\CodeCaption=MDIWindow()\MDICaption ) Else FindLinkList( Code() , Code()\CodeType=MDIWindow()\MDIType ) EndIf Code()\CodeBody="" If MDIWindow()\MDIType & #MDI_STRUCTURE <> #MDI_STRUCTURE For N=0 To CountGadgetItems(MDIWindow()\ListIconGadget)-1 Code()\CodeBody=Code()\CodeBody+GetGadgetItemText(MDIWindow()\ListIconGadget,N,0)+Chr(10) Code()\CodeBody=Code()\CodeBody+GetGadgetItemText(MDIWindow()\ListIconGadget,N,1)+Chr(10) Code()\CodeBody=Code()\CodeBody+GetGadgetItemText(MDIWindow()\ListIconGadget,N,2)+Chr(10) Next N Else For N=0 To CountGadgetItems(MDIWindow()\ListIconGadget)-1 Code()\CodeBody=Code()\CodeBody+GetGadgetItemText(MDIWindow()\ListIconGadget,N,0)+Chr(10) Code()\CodeBody=Code()\CodeBody+GetGadgetItemText(MDIWindow()\ListIconGadget,N,1)+Chr(10) Next N EndIf MDIWindow()\Changed=0 ZapImages() KillSCI(MDIWindow()\EditorGadget) CloseWindow(MDIWindow()\WindowID) DeleteElement(MDIWindow()) Case MDIWindow()\DelButton LIGSI.l=GetGadgetState(MDIWindow()\ListIconGadget) If LIGSI>=0 RemoveGadgetItem(MDIWindow()\ListIconGadget,LIGSI) MDIWindow()\Changed=1 EndIf Case MDIWindow()\HelpButton ;ShowHelp(HelpFile,RunPath,"#CodeList") ShowWeb(0,HelpFile+"#CodeList") Case MDIWindow()\CancelButton MDIWindow()\Changed=0 ZapImages() KillSCI(MDIWindow()\EditorGadget) CloseWindow(MDIWindow()\WindowID) DeleteElement(MDIWindow()) Case MDIWindow()\RenameButton NN.s=InputRequester(MyTittle,"Rename Structure To",MDIWindow()\MDIName) If NN If NN<>MDIWindow()\MDIName MDIWindow()\Changed=1 FindLinkList( Code() , Code()\CodeName=MDIWindow()\MDIName ) If MDIWindow()\MDIType & #MDI_RESERVED = #MDI_RESERVED MDIWindow()\MDICaption="Reserved Structure - "+NN Else MDIWindow()\MDICaption="Structure - "+NN EndIf SetWindowTitle(MDIWindow()\WindowID,MDIWindow()\MDICaption) ;then repeat for Project list For N=0 To CountGadgetItems(ProjectTree)-1 If GetGadgetItemText(ProjectTree,N,0)=Code()\CodeName Colmn.l=GetGadgetItemAttribute(ProjectTree,N,#PB_Tree_SubLevel) SetGadgetItemText(ProjectTree,N,NN,Colmn) Code()\CodeName=NN Code()\CodeCaption=MDIWindow()\MDICaption MDIWindow()\MDIName=NN Break EndIf Next N EndIf EndIf ;- medialist dialog Case MDIWindow()\ListAdd If GetGadgetState(MDIWindow()\AllMedia)>=0 MName.s=GetGadgetText(MDIWindow()\AllMedia) ForEach Media() If MName=Media()\MediaName Select GetGadgetState(MDIWindow()\PG) Case 0 ;summary list ;verify this is not a model If Media()\MediaType<>#MDI_MODEL MDIWindow()\Changed=1 AddGadgetItem(MDIWindow()\Summary,-1,MName,ImageID(Media()\MediaID)) Select Media()\MediaType Case #MDI_IMAGE SetGadgetItemText(MDIWindow()\Summary,CountGadgetItems(MDIWindow()\Summary)-1,"Image",1) SetImage( MDIWindow()\Image , #Icon_Image4 , MDIWindow()\Snapshot , Media()\MediaFile , MDIWindow()\BImage ) Case #MDI_SOUND SetGadgetItemText(MDIWindow()\Summary,CountGadgetItems(MDIWindow()\Summary)-1,"Sound",1) Case #MDI_WORLD SetGadgetItemText(MDIWindow()\Summary,CountGadgetItems(MDIWindow()\Summary)-1,"World",1) EndSelect Else MessageRequester(MyTittle,"3DModel Objects go in the Models List",#MB_ICONINFORMATION) EndIf Case 1 ;images list ;verify this is an image If Media()\MediaType=#MDI_IMAGE MDIWindow()\Changed=1 AddGadgetItem(MDIWindow()\Images,-1,MName,ImageID(Media()\MediaID)) SetImage( MDIWindow()\Image , #Icon_Image4 , MDIWindow()\Snapshot , Media()\MediaFile , MDIWindow()\BImage ) Else MessageRequester(MyTittle,"Only Images go into this List",#MB_ICONINFORMATION) EndIf Case 2 ;models list If Media()\MediaType=#MDI_MODEL MDIWindow()\Changed=1 AddGadgetItem(MDIWindow()\Models,-1,MName,ImageID(Media()\MediaID)) Else MessageRequester(MyTittle,"Only Models go into this List",#MB_ICONINFORMATION) EndIf EndSelect Break EndIf Next Media() EndIf Case MDIWindow()\ListDel Select GetGadgetState(MDIWindow()\PG) Case 0 ;summary list RemoveCurrentItem(MDIWindow()\Summary) Case 1 ;images list RemoveCurrentItem(MDIWindow()\Images) Case 2 ;models list RemoveCurrentItem(MDIWindow()\Models) EndSelect Case MDIWindow()\ListCopy Select GetGadgetState(MDIWindow()\PG) Case 0 ;summary list CopyCurrentItem(MDIWindow()\Summary,3) Case 1 ;images list CopyCurrentItem(MDIWindow()\Images,4) Case 2 ;models list CopyCurrentItem(MDIWindow()\Models,5) EndSelect Case MDIWindow()\ListUp Select GetGadgetState(MDIWindow()\PG) Case 0 ;summary list MoveGadgetItem(MDIWindow()\Summary,3,-1) Case 1 ;images list MoveGadgetItem(MDIWindow()\Images,3,-1) Case 2 ;models list MoveGadgetItem(MDIWindow()\Models,3,-1) EndSelect Case MDIWindow()\ListDown Select GetGadgetState(MDIWindow()\PG) Case 0 ;summary list MoveGadgetItem(MDIWindow()\Summary,3,1) Case 1 ;images list MoveGadgetItem(MDIWindow()\Images,4,1) Case 2 ;models list MoveGadgetItem(MDIWindow()\Models,5,1) EndSelect Case MDIWindow()\ListCancel ;cancel changes and exit MDIWindow()\Changed=0 ZapImages() CloseWindow(MDIWindow()\WindowID) DeleteElement(MDIWindow()) Case MDIWindow()\ListHelp ;ShowHelp(HelpFile,RunPath,"#MediaList") ShowWeb(0,HelpFile+"#MediaList") Case MDIWindow()\ListOK SaveFile() MDIWindow()\Changed=0 ZapImages() CloseWindow(MDIWindow()\WindowID) DeleteElement(MDIWindow() ) ;Case MDIWindow()\AllMedia ;medialist summary panel ;Case MDIWindow()\PG Case MDIWindow()\SName MDIWindow()\Changed=1 Case MDIWindow()\BImage If EventType()=#PB_EventType_LeftDoubleClick OldF.s=OpenFileRequester(MyTittle,ProjectPath+"*.bmp",ImagePattern,0) If OldF If IsImage(MDIWindow()\Image) And MDIWindow()\Image>#Icon_Image4 FreeImage(MDIWindow()\Image) EndIf MDIWindow()\SnapShot=OldF MDIWindow()\Image=LoadImage(#PB_Any,MDIWindow()\SnapShot) MDIWindow()\Changed=1 If ImageWidth(MDIWindow()\Image)>140 Or ImageHeight(MDIWindow()\Image)>140 ResizeImage(MDIWindow()\Image,140,140) EndIf SetGadgetState(MDIWindow()\BImage,ImageID(MDIWindow()\Image)) ResizeGadget(MDIWindow()\BImage, #PB_Ignore, #PB_Ignore, 140, 140) EndIf EndIf Case MDIWindow()\Merge MDIWindow()\Changed=1 Case MDIWindow()\Width MDIWindow()\Changed=1 Case MDIWindow()\Height MDIWindow()\Changed=1 Case MDIWindow()\Depth MDIWindow()\Changed=1 Case MDIWindow()\Collision MDIWindow()\Changed=1 ;- listicongadgets Case MDIWindow()\Summary,MDIWindow()\Images,MDIWindow()\Models Index.l=GetGadgetState(EG) If Index>=0 ET.l=EventType() If ET=#PB_EventType_LeftDoubleClick x.l=WindowMouseX(MDIWindow()\WindowID)-GadgetX(EG) For C=0 To 5 Cw.l=GetGadgetItemAttribute(EG,index,#PB_ListIcon_ColumnWidth ,C) x - Cw If X<0 Break EndIf Next C ;msg.s=GetGadgetItemText(EG,Index,0)+" Column text="+GetGadgetItemText(EG,Index,C)+" Header="+GetGadgetItemText(EG,-1,C) ;MessageRequester(MyTittle,"You double clicked on "+msg,0) msg.s=GetGadgetItemText(EG,-1,C) If Msg="Loop Image" ;on Image List only, so this is simple Msg.s=GetGadgetItemText(EG,Index,C) If Msg="Loop End" SetGadgetItemText(EG,Index,"",C) ElseIf Msg="Loop Start" SetGadgetItemText(EG,Index,"Loop End",C) Else SetGadgetItemText(EG,Index,"Loop Start",C) EndIf ElseIf Msg="Loop Animation" ;for model list only, so simple too Msg.s=GetGadgetItemText(EG,Index,C) If msg="" SetGadgetItemText(EG,Index,"Loop",C) ElseIf msg="Loop" SetGadgetItemText(EG,Index,"Play",C) ElseIf msg="Play" SetGadgetItemText(EG,Index,"Play1",C) ElseIf msg="Play1" SetGadgetItemText(EG,Index,"Play2",C) Else SetGadgetItemText(EG,Index,"",C) EndIf ElseIf Msg="Sound Loop" ;this could be on any panel Select GetGadgetState(MDIWindow()\PG) Case 0 If GetGadgetItemText(EG,Index,1)="Sound" msg.s=GetGadgetItemText(EG,Index,C) If msg="" SetGadgetItemText(EG,Index,"Play",C) ElseIf Msg="Play" SetGadgetItemText(EG,Index,"Loop",C) ElseIf msg="Loop" SetGadgetItemText(EG,Index,"Random",C) Else SetGadgetItemText(EG,Index,"",C) EndIf Else MessageRequester(MyTittle,"This is not a sound",#MB_ICONSTOP) EndIf Default If GetGadgetItemText(EG,Index,C-1)="" MessageRequester(MyTittle,"No sound Sync Provided",#MB_ICONSTOP) Else msg.s=GetGadgetItemText(EG,Index,C) If msg="" SetGadgetItemText(EG,Index,"Play",C) ElseIf Msg="Play" SetGadgetItemText(EG,Index,"Loop",C) ElseIf msg="Loop" SetGadgetItemText(EG,Index,"Random",C) Else SetGadgetItemText(EG,Index,"",C) EndIf EndIf EndSelect ElseIf Msg="Sound Sync" MName.s=GetGadgetText(MDIWindow()\AllMedia) If GetGadgetItemText(EG,Index,C)="" ForEach Media() If Media()\MediaName=Mname If Media()\MediaType=#MDI_SOUND SetGadgetItemText(EG,Index,MName,C) Else MessageRequester(MyTittle,"No current sound media selected",#MB_ICONSTOP) EndIf Break EndIf Next Media() Else SetGadgetItemText(EG,Index,"",C) SetGadgetItemText(EG,Index,"",C+1) SetGadgetItemText(EG,Index,"",C+2) EndIf ElseIf Msg="Frame" ;applies only to Models If GetGadgetItemText(EG,Index,C-2)="" MessageRequester(MyTittle,"No current sound media selected",#MB_ICONSTOP) Else msg.s=Str(Val(GetGadgetItemText(EG,Index,C))) msg=InputRequester(MyTittle,"Which fram to sync the sound",msg) If Val(msg)=0 SetGadgetItemText(EG,Index,"",C) Else msg=Str(Val(msg)) SetGadgetItemText(EG,Index,msg,C) EndIf EndIf EndIf EndIf EndIf ;Case MDIWindow()\Images ;Case MDIWindow()\Models ;- Action Object Window Case MDIWindow()\ObjName MDIWindow()\Changed=1 Case MDIWindow()\ObjList MDIWindow()\Changed=1 If GetGadgetState(MDIWindow()\ObjList)>=0 MN.s=GetGadgetText(MDIWindow()\ObjList) FindLinkList( MediaList() , MediaList()\ListName = MN ) If ListIndex(MediaList())>=0 SetImage( MDIWindow()\Image , #Icon_AOB , MDIWindow()\Snapshot , MediaList()\ListShot , MDIWindow()\BImage ) EndIf EndIf Case MDIWindow()\ActionUp If EventType()=#PB_EventType_LeftClick SC.l=GetGadgetState(MDIWindow()\ActionTree) If SC>=0 SD=GetGadgetItemData(MDIWindow()\ActionTree,SC) Sub.l=GetGadgetItemAttribute(MDIWindow()\ActionTree,SC,#PB_Tree_SubLevel) If Sub FindLinkList( Event() , Event()\EventUID = SD ) EventOwner=Event()\EventOwnUID ;Temp.EventStruct=Event() Temp.EventStruct CopyEventStruct( Event() , Temp ) PreviousElement(Event()) If Event()\EventOwnUID=EventOwner If Event()\EventFlag NextElement(Event()) DeleteElement(Event()) ;PreviousElement(Event()) delete auto moves to previous InsertElement(Event()) ;Event()=Temp CopyEventStruct( Temp , Event() ) RemoveGadgetItem(MDIWindow()\ActionTree,SC) AddGadgetItem(MDIWindow()\ActionTree,SC-1,Event()\EventName,ImageID(Event()\EventIcon),Event()\EventFlag) SetGadgetItemData(MDIWindow()\ActionTree,SC-1,SD) SetGadgetState(MDIWindow()\ActionTree,SC-1) Else MessageRequester(MyTittle,"At Top Already",#MB_ICONINFORMATION) EndIf Else MessageRequester(MyTittle,"At Top Already",#MB_ICONINFORMATION) EndIf Else MessageRequester(MyTittle,"Only Actions can be moved",#MB_ICONINFORMATION) EndIf EndIf EndIf Case MDIWindow()\ActionDown If EventType()=#PB_EventType_LeftClick SC.l=GetGadgetState(MDIWindow()\ActionTree) If SC>=0 SD=GetGadgetItemData(MDIWindow()\ActionTree,SC) Sub.l=GetGadgetItemAttribute(MDIWindow()\ActionTree,SC,#PB_Tree_SubLevel) If Sub FindLinkList( Event() , Event()\EventUID = SD ) EventOwner=Event()\EventOwnUID ;Temp.EventStruct=Event() Temp.EventStruct CopyEventStruct( Event() , Temp ) If NextElement(Event())=0 ResetList(Event()) EndIf If ListIndex(Event())>=0 If Event()\EventOwnUID=EventOwner If Event()\EventFlag PreviousElement(Event()) DeleteElement(Event()) NextElement(Event()) AddElement(Event()) ;Event()=Temp CopyEventStruct( Temp , Event() ) RemoveGadgetItem(MDIWindow()\ActionTree,SC) AddGadgetItem(MDIWindow()\ActionTree,SC+1,Event()\EventName,ImageID(Event()\EventIcon),Event()\EventFlag) SetGadgetItemData(MDIWindow()\ActionTree,SC+1,SD) SetGadgetState(MDIWindow()\ActionTree,SC+1) Else MessageRequester(MyTittle,"At End Already",#MB_ICONINFORMATION) EndIf Else MessageRequester(MyTittle,"At End Already",#MB_ICONINFORMATION) EndIf Else MessageRequester(MyTittle,"At End Already",#MB_ICONINFORMATION) EndIf Else MessageRequester(MyTittle,"Only Actions can be moved",#MB_ICONINFORMATION) EndIf EndIf EndIf Case MDIWindow()\ActionOK ;save changes SaveFile() ResetList(WControl()) While NextElement(WControl()) If WControl()\WOwner=WinID DeleteElement(WControl()) EndIf Wend ZapImages() CloseWindow(MDIWindow()\WindowID) DeleteElement(MDIWindow()) Case MDIWindow()\ActionHelp ;ShowHelp(HelpFile,RunPath,"#ActionObject") ShowWeb(0,HelpFile+"#ActionObject") Case MDIWindow()\ActionCancel ;cancel icon changes (special case) FindLinkList(ActionObject(),MDIWindow()\MDICaption=ActionObject()\ObjectCaption ) If ActionObject()\ShotID> #Icon_Image4 ActionObject()\ShotID=LoadImage(#PB_Any,ActionObject()\ObjectShot) ResizeImage(ActionObject()\ShotID,140,140) EndIf ResetList(WControl()) While NextElement(WControl()) If WControl()\WOwner=WinID DeleteElement(WControl()) EndIf Wend ZapImages() CloseWindow(MDIWindow()\WindowID) DeleteElement(MDIWindow()) Case MDIWindow()\ActionTree If EventType()=#PB_EventType_LeftDoubleClick SC.l=GetGadgetState(MDIWindow()\ActionTree) If SC>=0 SD=GetGadgetItemData(MDIWindow()\ActionTree,SC) FindLinkList( Event() , Event()\EventUID = SD ) FindLinkList( Control() , Control()\UID = Event()\EventControlUID ) AddEvent(MDIWindow()\ActionTree,1) EndIf EndIf Case MDIWindow()\ActionDel If EventType()=#PB_EventType_LeftClick SC.l=GetGadgetState(MDIWindow()\ActionTree) If SC>=0 SD=GetGadgetItemData(MDIWindow()\ActionTree,SC) Sub.l=GetGadgetItemAttribute(MDIWindow()\ActionTree,SC,#PB_Tree_SubLevel) FindLinkList( Event() , Event()\EventUID = SD ) FindLinkList( Control() , Event()\EventControlUID = Control()\UID ) If Control()\AutoLoad MessageRequester(MyTittle,"The Action/Event is Required and cannot be deleted",#MB_ICONSTOP) Else If sub RemoveGadgetItem(MDIWindow()\ActionTree,SC) DeleteElement(Event()) Else EventOwner.l=Event()\EventOwnUID RemoveGadgetItem(MDIWindow()\ActionTree,SC) DeleteElement(Event()) While NextElement(Event()) If Event()\EventOwnUID=EventOwner If Event()\EventFlag DeleteElement(Event()) Else Break EndIf Else Break EndIf Wend EndIf EndIf EndIf EndIf ;- New Control Panel Case MDIWindow()\NewIcon If EventType()=#PB_EventType_LeftDoubleClick OldF.s=OpenFileRequester(MyTittle,ProjectPath+"*.bmp",ImagePattern,0) OldID=MDIWindow()\NewID If OldF If MDIWindow()\NewShot If MDIWindow()\NewID FreeImage(MDIWindow()\NewID) EndIf MDIWindow()\NewID=LoadImage(#PB_Any,OldF) If IsImage(MDIWindow()\NewID)=0 MDIWindow()\NewID=OldID Else MDIWindow()\NewShot=OldF EndIf Else MDIWindow()\NewID=LoadImage(#PB_Any,OldF) If IsImage(MDIWindow()\NewID)=0 MDIWindow()\NewID=OldID Else MDIWindow()\NewShot=OldF EndIf EndIf MDIWindow()\Changed=1 SetGadgetState(MDIWindow()\NewIcon,ImageID(MDIWindow()\NewID)) ResizeGadget(MDIWindow()\NewIcon, #PB_Ignore, #PB_Ignore, 32, 32) EndIf EndIf ;Case MDIWindow()\NewShot="" ;Case MDIWindow()\NewName ;Case MDIWindow()\NewPanel ;Case MDIWindow()\NewTip ;Case MDIWindow()\AdvancedMode ;Case MDIWindow()\NewMsg ;Case MDIWindow()\NewV1T ;Case MDIWindow()\NewV2T ;Case MDIWindow()\NewV3T ;Case MDIWindow()\NewV1 ;Case MDIWindow()\NewV2 ;Case MDIWindow()\NewV3 ;MDIWindow()\RA_OK=-1 ;MDIWindow()\A2_OK=-1 ;MDIWindow()\Priority=-1 Case MDIWindow()\NewAdd ;save control and close this window AddElement(Control()) Control()\CName=GetGadgetText(MDIWindow()\NewName) ; Control Name Control()\IconFile=MDIWindow()\NewShot ; Icon file name to use for display If IsImage(MDIWindow()\NewID) Control()\IconID=CopyImage(MDIWindow()\NewID,#PB_Any) ; IconID of loaded file Else Control()\IconID=#ICON_SCRIPT EndIf ;Control()\IconID=GetGadgetState(MDIWindow()\NewIcon) ;If Control()\IconID=0 ;Or IsImage(Control()\IconID)=0 ; Control()\IconID=#ICON_SCRIPT ;EndIf Control()\Message=GetGadgetText(MDIWindow()\NewMsg) ; Message to show user Control()\Tip=GetGadgetText(MDIWindow()\NewTip) ; Tip for control Control()\Panel=GetGadgetState(MDIWindow()\NewPanel) ; Panel control belongs on Control()\Advanced=GetGadgetState(MDIWindow()\AdvancedMode) ; flag for advanced control Control()\VT1=GetGadgetState(MDIWindow()\NewV1T) ; Variable Type flag (#VAR_STRING) Control()\VT2=GetGadgetState(MDIWindow()\NewV2T) Control()\VT3=GetGadgetState(MDIWindow()\NewV3T) Control()\VP1=GetGadgetText(MDIWindow()\NewV1) ; Variable Prompt Control()\VP2=GetGadgetText(MDIWindow()\NewV2) Control()\VP3=GetGadgetText(MDIWindow()\NewV3) Control()\CCode=MDIWindow()\FullText ; Full code for Event/Action ;Control()\AutoLoad=GetGadgetState(MDIWindow()\NewAuto) ; Autoload Flag ;Control()\ToEvent=GetGadgetText(MDIWindow()\NewEvent) ; Autoload to Event If GetGadgetState(MDIWindow()\NewEvent)>0 Control()\ToEvent=GetGadgetText(MDIWindow()\NewEvent) Control()\AutoLoad=1 Else Control()\AutoLoad=0 EndIf Control()\UID=GetTickCount_() Control()\RA_OK=GetGadgetState(MDIWindow()\RA_OK) Control()\A2_OK=GetGadgetState(MDIWindow()\A2_OK) Control()\Priority=Val(GetGadgetText(MDIWindow()\Priority)) If Control()\Priority<0 Control()\Priority=0 ElseIf Control()\Priority>100 Control()\Priority=100 EndIf ;now to free the window ResetList(WControl()) While NextElement(WControl()) If WControl()\WOwner=WinID DeleteElement(WControl()) EndIf Wend ZapImages() CloseWindow(WinID) DeleteElement(MDIWindow()) Case MDIWindow()\NewCode ;pop up small code window old.s=ShowSmallText(MDIWindow()\FullText) If Old MDIWindow()\FullText=old EndIf ;- Room Window ;room window - settings panel Case MDIWindow()\RName MDIWindow()\Changed=1 Case MDIWindow()\RGridSize MDIWindow()\Changed=1 mem.f=Pow(Val(GetGadgetText(MDIWindow()\RGridSize))*Val(GetGadgetText(MDIWindow()\RGridCount)),2)*4 Float2String(mem,msg.s) SetGadgetText(MDIWindow()\RMemory,msg) Case MDIWindow()\RGridCount MDIWindow()\Changed=1 mem.f=Pow(Val(GetGadgetText(MDIWindow()\RGridSize))*Val(GetGadgetText(MDIWindow()\RGridCount)),2)*4 Float2String(mem,msg.s) SetGadgetText(MDIWindow()\RMemory,msg) ;Case MDIWindow()\RMemory Case MDIWindow()\RScale MDIWindow()\Changed=1 Case MDIWindow()\RCam MDIWindow()\Changed=1 Case MDIWindow()\RWidth If EventType()=#PB_EventType_Change MDIWindow()\Changed=1 If Val(GetGadgetText(MDIWindow()\RWidth))>50 SetScrollArea(MDIWindow()\RoomScroll,Val(GetGadgetText(MDIWindow()\RWidth)),Val(GetGadgetText(MDIWindow()\RHeight))) ResetMemory(0) EndIf EndIf Case MDIWindow()\RHeight If EventType()=#PB_EventType_Change MDIWindow()\Changed=1 If Val(GetGadgetText(MDIWindow()\RHeight))>50 SetScrollArea(MDIWindow()\RoomScroll,Val(GetGadgetText(MDIWindow()\RWidth)),Val(GetGadgetText(MDIWindow()\RHeight))) ResetMemory(0) EndIf EndIf Case MDIWindow()\RCode ;show code window msg.s=ShowSmallText(MDIWindow()\FullText) If msg MDIWindow()\FullText=msg MDIWindow()\Changed=1 EndIf Case MDIWindow()\RHelp1 ;Show Settings Help ;ShowHelp(HelpFile,RunPath,"#RSettings") ShowWeb(0,HelpFile+"#RSettings") ;BackGround Case MDIWindow()\RBackDrop MDIWindow()\Changed=1 Case MDIWindow()\RBackCIG ;show color selectore If EventType()=#PB_EventType_LeftDoubleClick c.l=ColorRequester(Room()\BackdropColor) If C>=0 MDIWindow()\Changed=1 Room()\BackdropColor=C If Room()\BDCImage=0 Room()\BDCimage=CreateImage(#PB_Any,8,8) StartDrawing(ImageOutput(Room()\BDCImage)) Box(0,0,8,8,Room()\BackdropColor) StopDrawing() Else StartDrawing(ImageOutput(Room()\BDCImage)) Box(0,0,8,8,Room()\BackdropColor) StopDrawing() EndIf SetGadgetState(MDIWindow()\RBackCIG,ImageID(Room()\BDCImage)) EndIf EndIf Case MDIWindow()\BackTiled MDIWindow()\Changed=1 Case MDIWindow()\BackTileSize If EventType()=#PB_EventType_Change MDIWindow()\Changed=1 If Val(GetGadgetText(MDIWindow()\BackTileSize))>8 ResetMemory(1) EndIf EndIf Case MDIWindow()\RHelp2 ;Show Help For Background ;ShowHelp(HelpFile,RunPath,"#RBack") ShowWeb(0,HelpFile+"#RBack") Case MDIWindow()\ImageALL Name.s=GetGadgetText(MDIWindow()\ImageALL) If UCase(Left(Name,4))="NONE" SetGadgetState(MDIWindow()\BackID,ImageID(#Icon_Room)) setScrollArea(MDIWindow()\BackScroll,ImageWidth(#Icon_Room),ImageHeight(#Icon_Room)) Else FindLinkList( Media() , Media()\MediaName = Name ) If ListIndex(Media() )>=0 SetGadgetState(MDIWindow()\BackID, ImageID(Media()\MediaID )) setScrollArea(MDIWindow()\BackScroll,ImageWidth(Media()\MediaID),ImageHeight(Media()\MediaID)) FindLinkList(Room(),Room()\RoomName=MDIWindow()\MDIName) Room()\BackImage=Media()\MediaName Room()\BackID=Media()\MediaID UpdateBackMap() Else RemoveCurrentItem(MDIWindow()\ImageALL) SetGadgetState(MDIWindow()\ImageALL,0) SetGadgetState(MDIWindow()\BackID,ImageID(#Icon_Room)) setScrollArea(MDIWindow()\BackScroll,ImageWidth(#Icon_Room),ImageHeight(#Icon_Room)) EndIf EndIf Case MDIWindow()\BackTileX If EventType()=#PB_EventType_Change MDIWindow()\Changed=1 EndIf Case MDIWindow()\BackID If EventType()=#PB_EventType_LeftClick If GetGadgetState(MDIWindow()\BackTiled) tw.l=Val(GetGadgetText(MDIWindow()\BackTileSize)) If tw=0 SetGadgetText(MDIWindow()\BackTileSize,"32") tw=32 EndIf toff.l=Val(GetGadgetText(MDIWindow()\BackTileX)) ts.l=tw+toff mx.l=WindowMouseX(MDIWindow()\WindowID)-GadgetX(MDIWindow()\BackScroll) my.l=WindowMouseY(MDIWindow()\WindowID)-GadgetY(MDIWindow()\BackScroll) mx=mx+GetGadgetAttribute(MDIWindow()\BackScroll,#PB_ScrollArea_X)-14 my=my+GetGadgetAttribute(MDIWindow()\BackScroll,#PB_ScrollArea_Y)-34 tx.l=mx/ts ty.l=my/ts FindLinkList(Room(),Room()\RoomName=MDIWindow()\MDIName) MDIWindow()\SelBTX=tx*ts MDIWindow()\SelBTY=ty*ts If IsImage(MDIWindow()\BackScratch) FreeImage(MDIWindow()\BackScratch) EndIf MDIWindow()\BackScratch=CopyImage(Room()\BackID,#PB_Any) StartDrawing(ImageOutput(MDIWindow()\BackScratch)) Line(tx*ts-1,ty*ts-1,ts,0,0) Line(tx*ts-1,ty*ts-1,0,ts,0) Line(tx*ts+ts,ty*ts-1,0,ts,0) Line(tx*ts-1,ty*ts+ts,ts,0,0) StopDrawing() SetGadgetState(MDIWindow()\BackID,ImageID(MDIWindow()\BackScratch)) EndIf EndIf ;ForeGround Case MDIWindow()\RHelp3 ;show help for forground ;ShowHelp(HelpFile,RunPath,"#RFront") ShowWeb(0,HelpFile+"#RFront") Case MDIWindow()\ForeTiled MDIWindow()\Changed=1 Case MDIWindow()\ForTileSize If EventType()=#PB_EventType_Change MDIWindow()\Changed=1 If Val(GetGadgetText(MDIWindow()\ForTileSize))>8 ResetMemory(2) EndIf EndIf Case MDIWindow()\ImageALL2 Name.s=GetGadgetText(MDIWindow()\ImageALL2) If UCase(Left(Name,4))="NONE" SetGadgetState(MDIWindow()\ForImageID,ImageID(#Icon_Room)) setScrollArea(MDIWindow()\ForeScroll,ImageWidth(#Icon_Room),ImageHeight(#Icon_Room)) Else FindLinkList( Media() , Media()\MediaName = Name ) If ListIndex(Media() )>=0 SetGadgetState(MDIWindow()\ForImageID, ImageID(Media()\MediaID )) setScrollArea(MDIWindow()\ForeScroll,ImageWidth(Media()\MediaID),ImageHeight(Media()\MediaID)) FindLinkList(Room(),Room()\RoomName=MDIWindow()\MDIName) Room()\ForImageID=Media()\MediaID Room()\ForImage=Media()\MediaName ;UpdateMap(Room()\ForImageID,@MDIWindow()\ForeScratch,@MDIWindow()\RoomMapID,Room()\formem,Room()\ForTileSize) Else RemoveCurrentItem(MDIWindow()\ImageALL2) SetGadgetState(MDIWindow()\ImageALL2,0) SetGadgetState(MDIWindow()\ForImageID,ImageID(#Icon_Room)) setScrollArea(MDIWindow()\ForeScroll,ImageWidth(#Icon_Room),ImageHeight(#Icon_Room)) EndIf EndIf Case MDIWindow()\ForTileX If EventType()=#PB_EventType_Change MDIWindow()\Changed=1 EndIf Case MDIWindow()\ForImageID If EventType()=#PB_EventType_LeftClick If GetGadgetState(MDIWindow()\ForeTiled) tw.l=Val(GetGadgetText(MDIWindow()\ForTileSize)) If tw=0 SetGadgetText(MDIWindow()\ForTileSize,"32") tw=32 EndIf toff.l=Val(GetGadgetText(MDIWindow()\ForTileX)) ts.l=tw+toff mx.l=WindowMouseX(MDIWindow()\WindowID)-GadgetX(MDIWindow()\ForeScroll) my.l=WindowMouseY(MDIWindow()\WindowID)-GadgetY(MDIWindow()\ForeScroll) mx=mx+GetGadgetAttribute(MDIWindow()\ForeScroll,#PB_ScrollArea_X)-14 my=my+GetGadgetAttribute(MDIWindow()\ForeScroll,#PB_ScrollArea_Y)-34 tx.l=mx/ts ty.l=my/ts MDIWindow()\SelFTX=tx*ts MDIWindow()\SelFTY=ty*ts FindLinkList(Room(),Room()\RoomName=MDIWindow()\MDIName) If IsImage(MDIWindow()\ForeScratch) FreeImage(MDIWindow()\ForeScratch) EndIf MDIWindow()\ForeScratch=CopyImage(Room()\ForImageID,#PB_Any) StartDrawing(ImageOutput(MDIWindow()\ForeScratch)) Line(tx*ts-1,ty*ts-1,ts,0,0) Line(tx*ts-1,ty*ts-1,0,ts,0) Line(tx*ts+ts,ty*ts-1,0,ts,0) Line(tx*ts-1,ty*ts+ts,ts,0,0) StopDrawing() SetGadgetState(MDIWindow()\ForImageID,ImageID(MDIWindow()\ForeScratch)) EndIf EndIf ;Objects Case MDIWindow()\AddFloor If EventType()=#PB_EventType_Change ;redraw objects ;background first FindLinkList(Room() , Room()\RoomName = MDIWindow()\MDIName ) UpdateBackMap() ;then the objects ts.l=Val(GetGadgetText(MDIWindow()\BackTileSize)) F.l=Val(GetGadgetText(MDIWindow()\AddFloor)) ;update max floors If Room()\MaxFloorsF*TS And ObjectList()\Y<(F+1)*TS DrawImage(ImageID(ObjectList()\Image),ObjectList()\X,ObjectList()\Z,ts,ts) EndIf EndIf Next ObjectList() StopDrawing() SetGadgetState(MDIWindow()\RoomMap,ImageID(MDIWindow()\RoomMapID)) EndIf Case MDIWindow()\AddObject ;CallDebugger Name.s=GetGadgetText(MDIWindow()\AddObject) ;Debug Name If Name FindLinkList( ActionObject() , ActionObject()\ObjectName = Name ) If ListIndex(ActionObject() )>=0 If IsImage(ActionObject()\ShotID) SetMaxImage(ActionObject()\ShotID,110,110) SetGadgetState(MDIWindow()\ObjectImage, ImageID(ActionObject()\ShotID )) Else SetGadgetState(MDIWindow()\ObjectImage,ImageID(#Icon_AOB)) EndIf Else RemoveCurrentItem(MDIWindow()\AddObject) SetGadgetState(MDIWindow()\AddObject,0) SetGadgetState(MDIWindow()\ObjectImage,ImageID(#Icon_Room)) ;setScrollArea(MDIWindow()\ForeScroll,ImageWidth(#Icon_Room),ImageHeight(#Icon_Room)) EndIf Else SetGadgetState(MDIWindow()\ForImageID,ImageID(#Icon_Room)) ;setScrollArea(MDIWindow()\ForeScroll,ImageWidth(#Icon_Room),ImageHeight(#Icon_Room)) EndIf ;Case MDIWindow()\ObjectX ;Case MDIWindow()\ObjectY ;Case MDIWindow()\ObjectZ ;Case MDIWindow()\ObjectRX ;Case MDIWindow()\ObjectRY ;Case MDIWindow()\ObjectRZ ;Case MDIWindow()\ObjectImage Case MDIWindow()\ObjectDel ;delete all this object from room GID.l=GetGadgetState(MDIWindow()\ObjectImage) If GID FindLinkList(Room() , Room()\RoomName = MDIWindow()\MDIName ) ResetList(ObjectList()) While NextElement(ObjectList()) ;ForEach ObjectList() If ObjectList()\RoomOwnerUID=Room()\RoomUID If ObjectList()\Image=GID DeleteElement(ObjectList()) EndIf EndIf ;Next ObjectList() Wend ;rerender map UpdateBackMap() ;then the objects ts.l=Val(GetGadgetText(MDIWindow()\BackTileSize)) F.l=Val(GetGadgetText(MDIWindow()\AddFloor)) StartDrawing(ImageOutput(MDIWindow()\RoomMapID)) ForEach ObjectList() If ObjectList()\RoomOwnerUID=Room()\RoomUID If ObjectList()\Y>(F-1)*TS And ObjectList()\Y<(F+1)*TS DrawImage(ObjectList()\Image,ObjectList()\X,ObjectList()\Z,ts,ts) EndIf EndIf Next ObjectList() StopDrawing() SetGadgetState(MDIWindow()\RoomMap,ImageID(MDIWindow()\RoomMapID)) EndIf Case MDIWindow()\ObjectView ;show location ;redraw objects ;background first FindLinkList(Room() , Room()\RoomName = MDIWindow()\MDIName ) UpdateBackMap() ;then the objects ts.l=Val(GetGadgetText(MDIWindow()\BackTileSize)) F.l=Val(GetGadgetText(MDIWindow()\AddFloor)) StartDrawing(ImageOutput(MDIWindow()\RoomMapID)) ForEach ObjectList() If ObjectList()\RoomOwnerUID=Room()\RoomUID If ObjectList()\Y>(F-1)*TS And ObjectList()\Y<(F+1)*TS DrawImage(ObjectList()\Image,ObjectList()\X,ObjectList()\Z,ts,ts) EndIf EndIf Next ObjectList() StopDrawing() SetGadgetState(MDIWindow()\RoomMap,ImageID(MDIWindow()\RoomMapID)) ;then adjust the scroll position to center on this location W.l=GetGadgetAttribute(MDIWindow()\RoomScroll,#PB_ScrollArea_InnerWidth) H.l=GetGadgetAttribute(MDIWindow()\RoomScroll,#PB_ScrollArea_InnerHeight) SetGadgetAttribute(MDIWindow()\RoomScroll,#PB_ScrollArea_X,Val(GetGadgetText(MDIWindow()\ObjectX))-W/2) SetGadgetAttribute(MDIWindow()\RoomScroll,#PB_ScrollArea_Y,Val(GetGadgetText(MDIWindow()\ObjectZ))-H/2) Case MDIWindow()\Rhelp4 ;show help for objects ;ShowHelp(HelpFile,RunPath,"#RObjects") ShowWeb(0,HelpFile+"#RObjects") Case MDIWindow()\ObjectEdit ;show action object ;- The Room Map Case MDIWindow()\RoomMap If EventType()=#PB_EventType_LeftClick ;check for context mx.l=WindowMouseX(MDIWindow()\WindowID)-GadgetX(MDIWindow()\RoomScroll)-1 my.l=WindowMouseY(MDIWindow()\WindowID)-GadgetY(MDIWindow()\RoomScroll)-1 mx + GetGadgetAttribute(MDIWindow()\RoomScroll,#PB_ScrollArea_X) my + GetGadgetAttribute(MDIWindow()\RoomScroll,#PB_ScrollArea_Y) FindLinkList(Room(),Room()\RoomName=MDIWindow()\MDIName) If GetGadgetState(MDIWindow()\PG)=MDIWindow()\LastPG Select GetGadgetState(MDIWindow()\PG) Case 1 ;background If Room()\BackMem=0 Room()\BackMem=AllocateMemory((Room()\RoomWidth/Room()\BackTileSize)*(Room()\RoomHeight/Room()\BackTileSize)*8) EndIf ts.l=Val(GetGadgetText(MDIWindow()\BackTileSize)) mtx=mx/ts mty=my/ts rw.l=Val(GetGadgetText(MDIWindow()\RWidth))/ts PokeL(Room()\BackMem+(mty*rw*8)+(mtx*8),MDIWindow()\SelBTX) PokeL(Room()\BackMem+(mty*rw*8)+(mtx*8)+4,MDIWindow()\SelBTY) If IsImage(MDIWindow()\BackScratch) FreeImage(MDIWindow()\BackScratch) EndIf MDIWindow()\BackScratch=GrabImage(Room()\BackID,#PB_Any,MDIWindow()\SelBTX,MDIWindow()\SelBTY,TS,TS) StartDrawing(ImageOutput(MDIWindow()\RoomMapID)) DrawImage(ImageID(MDIWindow()\BackScratch),mtx*ts,mty*ts,ts,ts) StopDrawing() SetGadgetState(MDIWindow()\RoomMap,ImageID(MDIWindow()\RoomMapID)) SetGadgetState(MDIWindow()\BackID,ImageID(Room()\BackID)) Case 2 ;foreground ;first we need the current size of the image area MaxWidth.l=ImageWidth(MDIWindow()\RoomMapID) MaxHeight.l=ImageWidth(MDIWindow()\RoomMapID) RScale.f=1 ;default scale factor If MaxWidth<640 RScale=MaxWidth/640 Else MaxWidth=640 EndIf If MaxHeight<480 If RScale>MaxHeight/480 RScale=MaxHeight/480 EndIf Else MaxHeight=480 EndIf ;adjust height/widht for scalefactores MaxWidth=640*RScale MaxHeight=480*RScale TS.l=RScale*Room()\ForTileSize If Room()\ForMem=0 rh.l=480/Room()\ForTileSize rw.l=640/Room()\ForTileSize Room()\ForMem=AllocateMemory((rh)*(rw)*8) mStart.l=Room()\Formem For y=0 To rh-1 For x=0 To rw-1 PokeL(mStart,-1) PokeL(mStart+4,-1) mStart + 8 Next x Next y EndIf mtx=mx/ts mty=my/ts rw.l=MaxWidth/ts If mtx=mtx If ObjectList()\X<=mtx+ts-1 If ObjectList()\Z>=mty If ObjectList()\Z<=mty+ts-1 DeleteElement(ObjectList()) EndIf EndIf EndIf EndIf EndIf Wend If GetGadgetState(MDIWindow()\ObjectImage) AddElement(ObjectList()) ObjectList()\ActionName=name ; for the droplist ObjectList()\ActionUID=getcurrentitemdata(MDIWindow()\AddObject) ObjectList()\RoomOwnerUID=Room()\RoomUID ObjectList()\X=mtx+Val(GetGadgetText(MDIWindow()\ObjectX)) ObjectList()\Y=Val(GetGadgetText(MDIWindow()\ObjectY))+Val(GetGadgetText(MDIWindow()\AddFloor))*TS ObjectList()\Z=mty+Val(GetGadgetText(MDIWindow()\ObjectZ)) ObjectList()\AX=Val(GetGadgetText(MDIWindow()\ObjectRX)) ObjectList()\AY=Val(GetGadgetText(MDIWindow()\ObjectRY)) ObjectList()\AZ=Val(GetGadgetText(MDIWindow()\ObjectRZ)) ObjectList()\Image=GetGadgetState(MDIWindow()\ObjectImage) StartDrawing(ImageOutput(MDIWindow()\RoomMapID)) DrawImage(ObjectList()\Image,ObjectList()\X,ObjectList()\Z,ts,ts) StopDrawing() SetGadgetState(MDIWindow()\RoomMap,ImageID(MDIWindow()\RoomMapID)) EndIf EndSelect Else MDIWindow()\LastPG=GetGadgetState(MDIWindow()\PG) Select GetGadgetState(MDIWindow()\PG) Case 1 ;redraw background FindLinkList(Room() , Room()\RoomName = MDIWindow()\MDIName ) UpdateBackMap() SetGadgetState(MDIWindow()\BackID,ImageID(Room()\BackID)) Case 2 ;redraw forground FindLinkList(Room() , Room()\RoomName = MDIWindow()\MDIName ) ;with a fresh background UpdateBackMap() ;and reset scroll to top SetScrollPos(MDIWindow()\RoomScroll,0,0) UpdateForeMap() SetGadgetState(MDIWindow()\ForImageID,ImageID(Room()\ForImageID)) Case 3 ;redraw objects ;background first FindLinkList(Room() , Room()\RoomName = MDIWindow()\MDIName ) UpdateBackMap() ;then the objects ts.l=Val(GetGadgetText(MDIWindow()\BackTileSize)) F.l=Val(GetGadgetText(MDIWindow()\AddFloor)) StartDrawing(ImageOutput(MDIWindow()\RoomMapID)) ForEach ObjectList() If ObjectList()\RoomOwnerUID=Room()\RoomUID If ObjectList()\Y>(F-1)*TS And ObjectList()\Y<(F+1)*TS DrawImage(ObjectList()\Image,ObjectList()\X,ObjectList()\Z,ts,ts) EndIf EndIf Next ObjectList() StopDrawing() SetGadgetState(MDIWindow()\RoomMap,ImageID(MDIWindow()\RoomMapID)) EndSelect EndIf ElseIf EventType()=#PB_EventType_RightClick mx.l=WindowMouseX(MDIWindow()\WindowID)-GadgetX(MDIWindow()\RoomScroll)-1 my.l=WindowMouseY(MDIWindow()\WindowID)-GadgetY(MDIWindow()\RoomScroll)-1 mx + GetGadgetAttribute(MDIWindow()\RoomScroll,#PB_ScrollArea_X) my + GetGadgetAttribute(MDIWindow()\RoomScroll,#PB_ScrollArea_Y) FindLinkList(Room(),Room()\RoomName=MDIWindow()\MDIName) Select GetGadgetState(MDIWindow()\PG) Case 1 ;background set this location to default (top-left) If Room()\BackMem=0 Room()\BackMem=AllocateMemory((Room()\RoomWidth/Room()\BackTileSize)*(Room()\RoomHeight/Room()\BackTileSize)*8) EndIf ts.l=Val(GetGadgetText(MDIWindow()\BackTileSize)) mtx=mx/ts mty=my/ts rw.l=Val(GetGadgetText(MDIWindow()\RWidth))/ts PokeL(Room()\BackMem+(mty*rw*8)+(mtx*8),0) PokeL(Room()\BackMem+(mty*rw*8)+(mtx*8)+4,0) If IsImage(MDIWindow()\BackScratch) FreeImage(MDIWindow()\BackScratch) EndIf MDIWindow()\BackScratch=GrabImage(Room()\BackID,#PB_Any,0,0,TS,TS) StartDrawing(ImageOutput(MDIWindow()\RoomMapID)) DrawImage(ImageID(MDIWindow()\BackScratch),mtx*ts,mty*ts,ts,ts) StopDrawing() SetGadgetState(MDIWindow()\RoomMap,ImageID(MDIWindow()\RoomMapID)) Case 2 ;foreground set this location To clear ;first we need the current size of the image area MaxWidth.l=ImageWidth(MDIWindow()\RoomMapID) MaxHeight.l=ImageWidth(MDIWindow()\RoomMapID) RScale.f=1 ;default scale factor If MaxWidth<640 RScale=MaxWidth/640 Else MaxWidth=640 EndIf If MaxHeight<480 If RScale>MaxHeight/480 RScale=MaxHeight/480 EndIf Else MaxHeight=480 EndIf ;adjust height/widht for scalefactores MaxWidth=640*RScale MaxHeight=480*RScale TS.l=RScale*Room()\ForTileSize If Room()\ForMem=0 rh.l=480/Room()\ForTileSize rw.l=640/Room()\ForTileSize Room()\ForMem=AllocateMemory((rh)*(rw)*8) mStart.l=Room()\Formem For y=0 To rh-1 For x=0 To rw-1 PokeL(mStart,-1) PokeL(mStart+4,-1) mStart + 8 Next x Next y EndIf mtx=mx/ts mty=my/ts rw.l=MaxWidth/ts If mtx=0 PokeL(Room()\ForMem+(mty*rw*8)+(mtx*8),-1) PokeL(Room()\ForMem+(mty*rw*8)+(mtx*8)+4,-1) StartDrawing(ImageOutput(MDIWindow()\RoomMapID)) Box(mtx*ts,mty*ts,ts,ts,0) StopDrawing() SetGadgetState(MDIWindow()\RoomMap,ImageID(MDIWindow()\RoomMapID)) EndIf EndIf EndIf Case 3 ;objects delete this object if present ts.l=Val(GetGadgetText(MDIWindow()\ForTileSize)) mtx=ts*Int(mx/ts) mty=ts*Int(my/ts) ;name.s=GetGadgetText(MDIWindow()\AddObject) ResetList(ObjectList()) StartDrawing(ImageOutput(MDIWindow()\RoomMapID)) While NextElement(ObjectList()) If ObjectList()\RoomOwnerUID=Room()\RoomUID If ObjectList()\X>=mtx If ObjectList()\X<=mtx+ts-1 If ObjectList()\Z>=mty If ObjectList()\Z<=mty+ts-1 DeleteElement(ObjectList()) Box(mtx,mty,ts,ts,0) EndIf EndIf EndIf EndIf EndIf Wend StopDrawing() SetGadgetState(MDIWindow()\RoomMap,ImageID(MDIWindow()\RoomMapID)) EndSelect EndIf ;- Misc Controls Default If MDIWindow()\MDIType=#MDI_AOB If EventType()=#PB_EventType_LeftDoubleClick ;check control array If WindowMouseX(MDIWindow()\WindowID)>270 ForEach WControl() If WControl()\ControlID=EG ForEach Control() If Control()\UID=WControl()\CUID If Control()\AutoLoad ;verify control not already pressent For n=0 To CountGadgetItems(MDIWindow()\ActionTree)-1 If Control()\CName=GetGadgetItemText(MDIWindow()\ActionTree,n) MessageRequester(MyTittle,"This Event/Action already active #1",#MB_ICONINFORMATION) Break 2 EndIf Next n ;this is autoload action/event not previously loaded AddEvent(MDIWindow()\ActionTree,0) Break Else ;check type of control If Control()\VT1=#VAR_NONE And Control()\VT2=#VAR_NONE And Control()\VT3=#VAR_NONE ;This control can't have duplicates For n=0 To CountGadgetItems(MDIWindow()\ActionTree)-1 If Control()\CName=GetGadgetItemText(MDIWindow()\ActionTree,n) MessageRequester(MyTittle,"This Event/Action already active #2",#MB_ICONINFORMATION) Break 2 EndIf Next n AddEvent(MDIWindow()\ActionTree,0) Else AddEvent(MDIWindow()\ActionTree,0) EndIf Break EndIf EndIf Next Control() Break EndIf Next WControl() EndIf EndIf EndIf EndSelect ;- Menu Events, FileMenu Case #PB_Event_Menu MenuEvent=EventMenu() Select MenuEvent Case #MENU_NEW If ProjectChanged msg.s="Project "+ProjectName+" has changed."+Chr(10)+"Do you wish To save?" reply.l=MessageBox_(WindowID(#WINDOW),msg,MyTittle,#MB_YESNOCANCEL | #MB_ICONQUESTION) If reply=#IDYES If ProjectName=UnTittled NFN.s=SaveFileRequester(MyTittle,ProjectPath+ProjectName,ProjectPattern,0) If NFN Projectname=GetFilePart(NFN) ProjectPath=GetPathPart(NFN) SwopFiles(NFN) SaveProject() ProjectChanged=0 Else reply=#IDCANCEL EndIf Else SaveProject() ProjectChanged=0 EndIf EndIf If reply<>#IDCANCEL ForEach MDIWindow() ZapImages() KillSCI(MDIWindow()\EditorGadget) CloseWindow(MDIWindow()\WindowID) Next MDIWindow() ClearList(MDIWindow()) ProjectName=UnTittled ProjectChanged=0 ClearProject() LoadReserved() EndIf Else ForEach MDIWindow() ZapImages() KillSCI(MDIWindow()\EditorGadget) CloseWindow(MDIWindow()\WindowID) Next MDIWindow() ClearList(MDIWindow()) ProjectName=UnTittled ProjectChanged=0 ClearProject() LoadReserved() EndIf Case #MENU_OPEN If ProjectChanged msg.s="Project "+ProjectName+" has changed."+Chr(10)+"Do you wish To save?" reply.l=MessageBox_(WindowID(#WINDOW),msg,MyTittle,#MB_YESNOCANCEL | #MB_ICONQUESTION) If reply=#IDYES If ProjectName=UnTittled NFN.s=SaveFileRequester(MyTittle,ProjectPath+ProjectName,ProjectPattern,0) If NFN Projectname=GetFilePart(NFN) ProjectPath=GetPathPart(NFN) SwopFiles(NFN) SaveProject() ProjectChanged=0 Else reply=#IDCANCEL EndIf Else SaveProject() ProjectChanged=0 EndIf EndIf If reply<>#IDCANCEL NFN.s=OpenFileRequester(MyTittle,ProjectPath+ProjectName,ProjectPattern,0) If NFN ForEach MDIWindow() ZapImages() KillSCI(MDIWindow()\EditorGadget) CloseWindow(MDIWindow()\WindowID) Next MDIWindow() ClearList(MDIWindow()) ProjectName=GetFilePart(NFN) projectpath=GetPathPart(NFN) SwopFiles(NFN) ProjectChanged=0 LoadProject() ShowProjectWindow() EndIf EndIf Else NFN.s=OpenFileRequester(MyTittle,ProjectPath+ProjectName,ProjectPattern,0) If NFN ForEach MDIWindow() ZapImages() KillSCI(MDIWindow()\EditorGadget) CloseWindow(MDIWindow()\WindowID) Next MDIWindow() ClearList(MDIWindow()) ProjectName=GetFilePart(NFN) projectpath=GetPathPart(NFN) SwopFiles(NFN) ProjectChanged=0 LoadProject() ShowProjectWindow() EndIf EndIf Case #MENU_SAVE If ProjectName=UnTittled NFN.s=SaveFileRequester(MyTittle,ProjectPath+ProjectName,ProjectPattern,0) If NFN ProjectPath=GetPathPart(NFN) ProjectName=GetFilePart(NFN) SwopFiles(NFN) ProjectChanged=0 SaveProject() EndIf Else SaveProject() ProjectChanged=0 EndIf Case #MENU_SAVEAS NFN.s=SaveFileRequester(MyTittle,ProjectPath+ProjectName,ProjectPattern,0) If NFN ProjectPath=GetPathPart(NFN) ProjectName=GetFilePart(NFN) SwopFiles(NFN) ProjectChanged=0 SaveProject() EndIf Case #MENU_Simple DevMode=#Dev_Simple INI_WriteInteger("Settings","DevMode", DevMode) CheckMode(1,0,0) If EnableReserved HideSubMenu() EndIf DisableMenuItem(#MENU,#MENU_LOPT,1) Case #Menu_Advanced DevMode=#Dev_Advanced INI_WriteInteger("Settings","DevMode", DevMode) CheckMode(0,1,0) If EnableReserved HideSubMenu() EndIf DisableMenuItem(#MENU,#MENU_LOPT,0) Case #Menu_Pro CheckMode(0,0,1) DevMode=#Dev_Reserved INI_WriteInteger("Settings","DevMode",DevMode) ShowSubMenu() DisableMenuItem(#MENU,#MENU_LOPT,0) Case #Menu_Patch RunPatch() Case #Menu_Quit Quit=ShutDown() ;- Compile Menu Case #MENU_Compile PlayGame(0) Case #MENU_Execute PlayGame(1) Case #MENU_Build PlayGame(2) Case #MENU_COPT CompilerOptions() Case #MENU_SOPT SourceOptions() Case #MENU_MOPT MediaOptions() Case #MENU_LOPT LanguageOptions() ;- Item Menu Case #MENU_SOUND AddElement(Media()) Media()\MediaType=#MDI_SOUND Media()\MediaCaption="Sound" Media()\MediaName="sound"+Str(ListIndex(Media())) Media()\MediaID=#Icon_Sound ViewMedia() Case #MENU_Image AddElement(Media()) Media()\MediaType=#MDI_IMAGE Media()\MediaCaption="Image" Media()\MediaName="image"+Str(ListIndex(Media())) Media()\MediaID=#Icon_IMAGE ViewMedia() Case #MENU_Model AddElement(Media()) Media()\MediaType=#MDI_MODEL Media()\MediaCaption="Model" Media()\MediaName="model"+Str(ListIndex(Media())) Media()\MediaID=#Icon_MODEL ViewMedia() Case #MENU_Function AddElement(Code()) Code()\CodeName="Function"+Str(ListIndex(Code())) Code()\CodeType=#MDI_FUNCTION Code()\CodeCaption="Function - "+Code()\CodeName AddCodeToProject() ViewCode() Case #MENU_Structure AddElement(Code()) ;Code()\CodeCaption="Struct" Code()\CodeName="Struct"+Str(ListIndex(Code())) Code()\CodeCaption="Structure - "+Code()\CodeName Code()\CodeType=#MDI_STRUCTURE AddCodeToProject() ViewCodeList() Case #Menu_Add_OK ;same as ADD Button ..... but from a shortcut ForEach MDIWindow() If MDIWindow()\WindowID=WinID If MDIWindow()\ListIconGadget>=0 ;ok do the add bit ... If GetGadgetText(MDIWindow()\VarToAdd) AddGadgetItem(MDIWindow()\ListIconGadget,-1,GetGadgetText(MDIWindow()\VarToAdd)+Chr(10)+GetGadgetText(MDIWindow()\VarTypeAdd)) SetGadgetText(MDIWindow()\VarToAdd,"") MDIWindow()\Changed=1 EndIf EndIf EndIf Next MDIWindow() Case #MENU_Global ;If FindCode(#MDI_GLOBAL)=0 FindLinkList( Code() , Code()\CodeType=#MDI_GLOBAL ) If ListIndex(Code())<0 AddElement(Code()) Code()\CodeCaption="Globals" Code()\CodeName="Global"+Str(ListIndex(Code())) Code()\CodeType=#MDI_GLOBAL AddCodeToProject() EndIf ViewCodeList() Case #MENU_Constant ;If FindCode(#MDI_Constant)=0 FindLinkList( Code() , Code()\CodeType=#MDI_Constant ) If ListIndex(Code())<0 AddElement(Code()) Code()\CodeCaption="Constants" Code()\CodeName="Const"+Str(ListIndex(Code())) Code()\CodeType=#MDI_Constant AddCodeToProject() EndIf ViewCodeList() Case #MENU_Array ;If FindCode(#MDI_Array)=0 FindLinkList( Code() , Code()\CodeType=#MDI_Array ) If ListIndex(Code())<0 AddElement(Code()) Code()\CodeCaption="Arrays" Code()\CodeName="Array"+Str(ListIndex(Code())) Code()\CodeType=#MDI_Array AddCodeToProject() EndIf ViewCodeList() Case #MENU_World AddElement(Media()) Media()\MediaType=#MDI_WORLD Media()\MediaCaption="World" Media()\MediaName="world"+Str(ListIndex(Media())) Media()\MediaID=#Icon_WORLD ViewMedia() Case #MENU_AObject ;action object AddElement(ActionObject()) ActionObject()\ObjectEventID=0 ActionObject()\ObjectName="Object"+Str(ListIndex(ActionObject())) ActionObject()\ObjectCaption="Action Object - "+ActionObject()\ObjectName AddObjectToProject() CreateActionObject() Case #MENU_MObject ;media list AddElement(MediaList()) MediaList()\ListName="MediaList"+Str(ListIndex(MediaList())) MediaList()\ListCaption="MediaList - "+MediaList()\ListName AddListToProject() CreateMediaList() Case #MENU_Room ;OK, The Final Window ;Unless I add Path Setting stuff .... AddElement(Room()) Room()\RoomName="Room"+Str(ListIndex(Room())) Room()\RoomCaption="Room - "+Room()\RoomName AddRoomToProject() CreateRoom() Case #MENU_RGlobal ;If FindCode(#MDI_GLOBAL | #MDI_RESERVED)=0 FindLinkList( Code() , Code()\CodeType=#MDI_GLOBAL | #MDI_RESERVED ) If ListIndex(Code())<0 AddElement(Code()) Code()\CodeCaption="Reserved Globals" Code()\CodeName="RGlobal"+Str(ListIndex(Code())) Code()\CodeType=#MDI_GLOBAL | #MDI_RESERVED AddCodeToProject() EndIf ViewCodeList() Case #Menu_RConstant ;If FindCode(#MDI_Constant | #MDI_RESERVED)=0 FindLinkList( Code() , Code()\CodeType=#MDI_Constant | #MDI_RESERVED ) If ListIndex(Code())<0 AddElement(Code()) Code()\CodeCaption="Reserved Constants" Code()\CodeName="RConst"+Str(ListIndex(Code())) Code()\CodeType=#MDI_Constant | #MDI_RESERVED AddCodeToProject() EndIf ViewCodeList() Case #Menu_RArray ;If FindCode(#MDI_Array | #MDI_RESERVED)=0 FindLinkList( Code() , Code()\CodeType=#MDI_Array | #MDI_RESERVED ) If ListIndex(Code())<0 AddElement(Code()) Code()\CodeCaption="Reserved Array" Code()\CodeName="RArray"+Str(ListIndex(Code())) Code()\CodeType=#MDI_Array | #MDI_RESERVED AddCodeToProject() EndIf ViewCodeList() Case #MENU_RStruct AddElement(Code()) ;Code()\CodeCaption="Reserved Structure" Code()\CodeName="RStructure"+Str(ListIndex(Code())) Code()\CodeCaption="Reserved Structure - "+Code()\CodeName Code()\CodeType=#MDI_RESERVED | #MDI_STRUCTURE AddCodeToProject() ViewCodeList() Case #Menu_RFunction AddElement(Code()) Code()\CodeName="RFunction"+Str(ListIndex(Code())) Code()\CodeCaption="Reserved Function - "+Code()\CodeName Code()\CodeType=#MDI_RESERVED | #MDI_FUNCTION AddCodeToProject() ViewCode() Case #Menu_RINIT ;If FindCode(#MDI_PROJECT | #MDI_RESERVED)=0 FindLinkList( Code() , Code()\CodeType=#MDI_PROJECT | #MDI_RESERVED ) If ListIndex(Code())<0 AddElement(Code()) Code()\CodeCaption="Reserved Initialization" Code()\CodeName="RINIT" Code()\CodeType=#MDI_RESERVED | #MDI_PROJECT AddCodeToProject() EndIf ViewCode() Case #MENU_Delete ;verify project is visible If GetMenuItemState(#MENU,#MENU_HideProject)=0 ;locate project window ForEach MDIWindow() If MDIWindow()\MDIType=#MDI_PROJECT ;determine the selected item to delete Item.l=GetGadgetState(MDIWindow()\TreeGadget) If item>=0 ;verify this item can be deleted sub.l=GetGadgetItemAttribute(MDIWindow()\TreeGadget,Item,#PB_Tree_SubLevel) If sub>0 ;check for reserved level For n=0 To CountGadgetItems(MDIWindow()\TreeGadget) If LCase(GetGadgetItemText(MDIWindow()\TreeGadget,n,0))="reserved" If item>n ;this is a reserved item If sub=2 If DevMode=#Dev_RESERVED name.s=GetGadgetItemText(MDIWindow()\TreeGadget,Item,0) ndata.l=GetGadgetItemData(MDIWindow()\TreeGadget,Item) ProjectChanged=1 RemoveGadgetItem(MDIWindow()\TreeGadget,Item) Kill(name,ndata) EndIf EndIf ElseIf item#IDCANCEL NFN.s=OFN If NFN ForEach MDIWindow() ZapImages() KillSCI(MDIWindow()\EditorGadget) CloseWindow(MDIWindow()\WindowID) Next MDIWindow() ClearList(MDIWindow()) ProjectName=GetFilePart(NFN) projectpath=GetPathPart(NFN) SwopFiles(NFN) ProjectChanged=0 LoadProject() ShowProjectWindow() EndIf EndIf Else NFN.s=OFN If NFN ForEach MDIWindow() ZapImages() KillSCI(MDIWindow()\EditorGadget) CloseWindow(MDIWindow()\WindowID) Next MDIWindow() ClearList(MDIWindow()) ProjectName=GetFilePart(NFN) projectpath=GetPathPart(NFN) SwopFiles(NFN) ProjectChanged=0 LoadProject() ShowProjectWindow() EndIf EndIf ;- Export Function Source Case #MENU_ExportF ;SelectWindowID(WinID) FindLinkList( MDIWindow() , MDIWindow()\WindowID=WinID ) If ListIndex(MDIWindow())>=0 Select MDIWindow()\MDIType Case #MDI_FUNCTION, #MDI_FUNCTION | #MDI_RESERVED , #MDI_PROJECT | #MDI_RESERVED nfn.s=SaveFileRequester(MyTittle,ProjectPath+"*.dba",TextPattern,0) If nfn RF=CreateFile(#PB_Any,nfn) If RF ;first, we need to do the function declaration ;start with function type deffn.s="" Select MDIWindow()\FRType Case #VAR_STRING deffn=FString Case #VAR_INTEGER deffn=FInteger Case #VAR_FLOAT deffn=FFloat Case #VAR_NONE deffn=FBasic EndSelect n=FindString(deffn,"(",1) If UCase(Mid(deffn,n-1,1))="F" deffn=Left(deffn,n-2)+GetGadgetText(MDIWindow()\FName)+"("+GetGadgetText(MDIWindow()\FPars)+")" Else deffn=Left(deffn,n-2)+GetGadgetText(MDIWindow()\FName)+Mid(deffn,n-1,1)+"("+GetGadgetText(MDIWindow()\FPars)+")" EndIf WriteStringN(RF,deffn) For N=0 To CountGadgetItems(MDIWindow()\EditorGadget)-1 WriteStringN(RF,GetGadgetItemText(MDIWindow()\EditorGadget,N,0)) Next N WriteStringN(RF,FEnd) CloseFile(RF) Select MessageRequester(MyTittle,"Do you wish to use external editor?",#MB_YESNO | #MB_ICONQUESTION) Case #IDYES RunProgram(EditorSource,nfn,GetPathPart(nfn)) EndSelect Else MessageRequester(MyTittle,"Unable to save file "+Chr(10)+nfn,#MB_ICONSTOP) EndIf EndIf Default MessageRequester(MyTittle,"At this time, only functions can be imported or expoted",#MB_ICONINFORMATION) EndSelect EndIf ;- Import Source Case #MENU_Import, #MENU_RImport nfn.s=OpenFileRequester(MyTittle,ProjectPath+ "*.dba",TextPattern,0) If nfn ;start a new form RF=ReadFile(#PB_Any,nfn) If RF AddElement(Code()) Code()\CodeName="ImpFunction"+Str(ListIndex(Code())) If MenuEvent=#MENU_Import Code()\CodeType=#MDI_FUNCTION Code()\CodeCaption="Function - "+Code()\CodeName Else Code()\CodeType=#MDI_FUNCTION | #MDI_RESERVED Code()\CodeCaption="Reserved Function - "+Code()\CodeName EndIf AddCodeToProject() ViewCode() ;determine index in Project window For n=0 To CountGadgetItems(ProjectTree) If Code()\CodeName=GetGadgetItemText(ProjectTree,n,0) Break EndIf Next n FFlag.s=UCase(Left(FBasic,3)) Repeat msg.s=ReadString(RF) If UCase(Left(msg,3))=FFlag Break EndIf Until Eof(RF) If Eof(RF) CloseFile(RF) msg="Unable to locate function declaration"+Chr(10) msg=msg+"Do you wish to launch external editor?" If MessageRequester(MyTittle,msg,#MB_YESNO|#MB_ICONSTOP)=#IDYES RunProgram(EditorSource,nfn,GetPathPart(nfn)) EndIf Else F=FindString(msg,"(",1) If F For ThisType.l=0 To 3 If Mid(msg,f-1,1)=FunctionRight(ThisType) Break EndIf Next ThisType If ThisType=4 For ThisType.l=0 To 3 If UCase(Left(msg,Len(FunctionLeft(ThisType))))=UCase(FunctionLeft(ThisType)) Break EndIf Next ThisType EndIf If ThisType=4 CloseFile(RF) msg="Unable to locate function declaration"+Chr(10) msg=msg+"Do you wish to launch external editor?" If MessageRequester(MyTittle,msg,#MB_YESNO|#MB_ICONSTOP)=#IDYES RunProgram(EditorSource,nfn,GetPathPart(nfn)) EndIf Else SetGadgetState(MDIWindow()\FRType,ThisType) MDIWindow()\OldFRType=ThisType SetGadgetText(MDIWIndow()\FPars,Mid(msg,F+1,Len(msg)-(F+1))) SetGadgetText(MDIWindow()\FName,Mid(msg,Len(FunctionLeft(ThisType))+1,F-(Len(FunctionLeft(ThisType))+1))) SetGadgetItemText(ProjectTree,n,GetGadgetText(MDIWindow()\FName),GetGadgetItemAttribute(ProjectTree,n,#PB_Tree_SubLevel )) Repeat msg=ReadString(RF) If UCase(Left(msg,Len(FEnd)))=UCase(FEnd) If Len(msg)>Len(FEnd) If ThisType=#VAR_NONE SetGadgetState(MDIWindow()\FRType,#VAR_INTEGER) EndIf EndIf Break Else AddGadgetItem(MDIWindow()\EditorGadget,-1,msg) EndIf Until Eof(RF) CloseFile(RF) EndIf Else CloseFile(RF) msg="Unable to locate function declaration"+Chr(10) msg=msg+"Do you wish to launch external editor?" If MessageRequester(MyTittle,msg,#MB_YESNO|#MB_ICONSTOP)=#IDYES RunProgram(EditorSource,nfn,GetPathPart(nfn)) EndIf EndIf EndIf Else MessageRequester(MyTittle,"Unable to open file"+Chr(10)+nfn,#MB_ICONSTOP) EndIf EndIf ;- Cut Paste Case #MENU_Cut ;SelectWindowID(WinID) ID2.l=GetGadgetState(#GADGET_MDI) FindLinkList( MDIWindow() , MDIWindow()\WindowID=ID2 ) If ListIndex(MDIWindow())>=0 AG=GetActiveGadget() If AG>=0 MDIWindow()\Changed=1 If AG=MDIWindow()\EditorGadget SCI_Cut(AG) Else SendMessage_(GadgetID(AG), #WM_CUT, #Null, #Null) EndIf ElseIf MDIWindow()\WebGadget>0 Web_Copy(MDIWindow()\WebGadget) EndIf EndIf Case #MENU_Copy ;SelectWindowID(WinID) ID2.l=GetGadgetState(#GADGET_MDI) FindLinkList( MDIWindow() , MDIWindow()\WindowID=ID2 ) If ListIndex(MDIWindow())>=0 AG=GetActiveGadget() If AG>=0 If AG=MDIWindow()\EditorGadget SCI_Copy(AG) Else SendMessage_(GadgetID(AG), #WM_COPY, #Null, #Null) EndIf ElseIf MDIWindow()\WebGadget>0 Web_Copy(MDIWindow()\WebGadget) EndIf EndIf Case #MENU_Paste ;SelectWindowID(WinID) ID2.l=GetGadgetState(#GADGET_MDI) FindLinkList( MDIWindow() , MDIWindow()\WindowID=ID2 ) If ListIndex(MDIWindow())>=0 AG=GetActiveGadget() If AG>=0 MDIWindow()\Changed=1 If AG=MDIWindow()\EditorGadget SCI_Paste(AG) Else SendMessage_(GadgetID(AG), #WM_PASTE, #Null, #Null) EndIf EndIf EndIf Case #MENU_SELALL ;SelectWindowID(WinID) ID2.l=GetGadgetState(#GADGET_MDI) FindLinkList( MDIWindow() , MDIWindow()\WindowID=ID2 ) If ListIndex(MDIWindow())>=0 AG=GetActiveGadget() If AG>=0 If AG=MDIWindow()\EditorGadget ;SCI_SetSel(AG,0,-1) SCI_SelectAll(MDIWindow()\EditorGadget) Else SendMessage_(GadgetID(AG), #EM_SETSEL, 0, -1) EndIf ElseIf MDIWindow()\WebGadget>0 SendMessage_(GadgetID(MDIWindow()\WebGadget), #EM_SETSEL, 0, -1) EndIf EndIf Case #MENU_Undo ;SelectWindowID(WinID) ID2.l=GetGadgetState(#GADGET_MDI) FindLinkList( MDIWindow() , MDIWindow()\WindowID=ID2 ) If ListIndex(MDIWindow())>=0 AG=GetActiveGadget() If AG>=0 If AG=MDIWindow()\EditorGadget SCI_Undo(AG) Else SendMessage_(GadgetID(AG), #WM_UNDO, #Null, #Null) EndIf EndIf EndIf EndSelect EndSelect Until quit EndIf EndIf ;- TheEnd DeathFlag=1 End ;- icons for things ;{ DataSection DataSection FileNew: IncludeBinary "icons\writing\note11.ico" FileOpen: IncludeBinary "icons\office\folder03.ico" FileSave: IncludeBinary "icons\computer\disk06.ico" FileDELETE: IncludeBinary "icons\computer\trash01.ico" Compile: IncludeBinary "icons\industry\sinewave.ico" Run: IncludeBinary "bitmaps\assorted\card2.bmp" Build: IncludeBinary "icons\industry\hammer.ico" Image: IncludeBinary "bitmaps\toolbar3\cam-up.bmp" Sound: IncludeBinary "bitmaps\assorted\speaker.bmp" World: IncludeBinary "icons\elements\earth.ico" Model: IncludeBinary "icons\arrows\point08.ico" Script: IncludeBinary "icons\writing\note06.ico" MOB: IncludeBinary "icons\writing\books05.ico" AOB: IncludeBinary "icons\elements\litening.ico" Room: IncludeBinary "icons\industry\factory.ico" Left: IncludeBinary "icons\arrows\arw03lt.ico" Right: IncludeBinary "icons\arrows\arw03rt.ico" Project: IncludeBinary "icons\office\rulers.ico" Help: IncludeBinary "bitmaps\toolbar3\hlp-up.bmp" Image0: IncludeBinary "C:\Program Files\PB42\Projects\MyIDE\BITMAPS\TOOLBAR3\TBR-UP2.bmp" Image1: IncludeBinary "C:\Program Files\PB42\Projects\MyIDE\BITMAPS\TOOLBAR3\TBR-dn2.bmp" Image2: IncludeBinary "C:\Program Files\PB42\Projects\MyIDE\BITMAPS\TOOLBAR3\TBR-UP.BMP" Image3: IncludeBinary "C:\Program Files\PB42\Projects\MyIDE\BITMAPS\TOOLBAR3\TBR-dn3.bmp" Image4: IncludeBinary "C:\Program Files\PB42\Projects\MyIDE\BITMAPS\ASSORTED\DELETE.BMP" EndDataSection ;}