Code: Select all
; *******************************************************************************
; MDIGadget() Description: Modified By LOCALMOTION34
; *******************************************************************************
; Example Code: a MDI ImageViewer:
; *******************************************************************************
Structure MDIWindow
; info about the loaded image
Image.l
ImageWidth.l
ImageHeight.l
; gadget numbers
ScrollAreaGadget.l
ImageGadget.l
EndStructure
NewList MDIWindow.MDIWindow()
#SS_NOTIFY=256
#WINDOW = 0
#TOOLBAR = 0
#MENU = 0
Enumeration
#MENU_Open
#MENU_Close
#MENU_CloseAll
#MENU_Quit
#MENU_TileV
#MENU_TileH
#MENU_Cascade
#MENU_Arrange
#MENU_Previous
#MENU_Next
#MENU_FirstMDI
EndEnumeration
Structure gadgetlist
button.l
button2.l
button3.l
button4.l
EndStructure
Dim windowlist.gadgetlist(100)
windowlist(0)\button=1
windowlist(0)\button2=2
windowlist(0)\button3=3
windowlist(0)\button4=4
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
#GADGET_MDI = 0
#Window_0=1
#WindowFlags = #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget
If OpenWindow(#WINDOW, 0, 0, 800, 600, #WindowFlags, "MDI ImageViewer/Docked ToolWindow")
If CreateMenu(#MENU, WindowID())
MenuTitle("File")
MenuItem(#MENU_Open, "Open")
MenuItem(#MENU_Close, "Close")
MenuItem(#MENU_CloseAll, "Close All")
MenuBar()
MenuItem(#MENU_Quit, "Quit")
MenuTitle("Windows")
MenuItem(#MENU_TileV, "Tile vertically")
MenuItem(#MENU_TileH, "Tile horizontally")
MenuItem(#MENU_Cascade, "Cascade")
MenuItem(#MENU_Previous, "Previous")
MenuItem(#MENU_Next, "Next")
; MDI subwindows will get added here
EndIf
If CreateToolBar(#TOOLBAR, WindowID())
ToolBarStandardButton(#MENU_Open, #PB_ToolBarIcon_Open)
ToolBarStandardButton(#MENU_Close, #PB_ToolBarIcon_Delete)
ToolBarSeparator()
ToolBarStandardButton(#MENU_Previous, #PB_ToolBarIcon_Undo)
ToolBarStandardButton(#MENU_Next, #PB_ToolBarIcon_Redo)
EndIf
If CreateGadgetList(WindowID())
MDIGadget(#GADGET_MDI, 110, 30, 700, 500, 1, #MENU_FirstMDI)
x = WindowX()
y = WindowY()
slam=OpenWindow(1,x+3,y+80,110,500,#PB_Window_BorderLess| #WS_BORDER,"",WindowID(#WINDOW))
SetWindowLong_(WindowID(1),#GWL_EXSTYLE,#WS_EX_TOOLWINDOW|#ws_child)
SendMessage_(slam, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
CreateGadgetList(WindowID(1))
ButtonGadget(100, 10, 15, 80, 24,"Docked")
ButtonGadget(101, 10, 45, 80, 24,"Tool Window")
CloseGadgetList()
EndIf
Quit = 0
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow
Quit = 1
ElseIf Event = #PB_Event_Menu
Select EventMenuID()
Case #MENU_Open
a=CountGadgetItems(#GADGET_MDI)
zam=AddGadgetItem(#GADGET_MDI, 1, Str(a))
ButtonGadget(windowlist(0)\button+a*4,100,100,30,30,"test")
ButtonGadget(windowlist(0)\button2+a*4,130,100,30,30,"test")
ButtonGadget(windowlist(0)\button3+a*4,160,100,30,30,"test")
ButtonGadget(windowlist(0)\button4+a*4,190,100,30,30,"test")
Case #MENU_Quit
Quit = 1
Case #MENU_TileV
SetGadgetState(#GADGET_MDI, #PB_MDI_TileVertically)
Case #MENU_TileH
SetGadgetState(#GADGET_MDI, #PB_MDI_TileHorizontally)
Case #MENU_Cascade
SetGadgetState(#GADGET_MDI, #PB_MDI_Cascade)
Case #MENU_Arrange
SetGadgetState(#GADGET_MDI, #PB_MDI_Arrange)
Case #MENU_Previous
SetGadgetState(#GADGET_MDI, #PB_MDI_Previous)
Case #MENU_Next
SetGadgetState(#GADGET_MDI, #PB_MDI_Next)
EndSelect
ElseIf Event = #PB_Event_Gadget
If EventGadgetID() = #GADGET_MDI
Type = EventType()
If Type = #PB_EventType_SizeItem
Item = GetGadgetAttribute(#GADGET_MDI, #PB_MDI_SizedItem)
Width = GetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemWidth)
Height = GetGadgetItemAttribute(#GADGET_MDI, Item, #PB_MDI_ItemHeight)
SelectElement(MDIWindow(), Item)
ElseIf Type = #PB_EventType_CloseItem
Item = GetGadgetState(#GADGET_MDI)
RemoveGadgetItem(#GADGET_MDI, Item)
DeleteElement(MDIWindow())
EndIf
ElseIf EventGadgetID()=101
SetWindowStyles(1,#WS_VISIBLE |#swp_nomove| #WS_BORDER |#PB_Window_TitleBar,#WS_EX_TOOLWINDOW)
SetWindowPos_(1,#WS_VISIBLE,0,30,110,500,#swp_nomove)
ResizeGadget(#GADGET_MDI,5, 30, 810, 500)
ElseIf EventGadgetID()=100
SetWindowStyles(1,#WS_VISIBLE |#PB_Window_BorderLess| #WS_BORDER,#WS_EX_TOOLWINDOW)
UseWindow(#WINDOW)
x = WindowX()
y = WindowY()
UseWindow(1)
MoveWindow(x+3,y+80)
ResizeGadget(#GADGET_MDI,110, 30, 700, 500)
EndIf
EndIf
Until Quit = 1
EndIf