SparrowhawkMMU wrote:...I structure my code to one module per file (also a general module declaration file I load up front)...
...when I open a second window, the controls on the new windows clearly take the ids of the parent as the originals disappear!
The placement of the
general module, and its usage in each module, is key. Here's a slightly simplified, visual version of ts-soft's example:
Code: Select all
; --- common module
;
DeclareModule generalModule
Enumeration windows
EndEnumeration
Enumeration gadgets
EndEnumeration
EndDeclareModule
Module generalModule
EndModule
; --- module A
;
DeclareModule a
UseModule generalModule
Enumeration windows
#win
EndEnumeration
Enumeration gadgets
#gadget
EndEnumeration
Declare openWin()
EndDeclareModule
Module a
Procedure openWin()
OpenWindow(#win, 160, 300, 250, 100, "Module A Window")
ButtonGadget(#gadget, 25, 20, 200, 30, "Module A Gadget")
EndProcedure
EndModule
; --- module B
;
DeclareModule b
UseModule generalModule
Enumeration windows
#win
EndEnumeration
Enumeration gadgets
#gadget
EndEnumeration
Declare openWin()
EndDeclareModule
Module b
Procedure openWin()
OpenWindow(#win, 220, 400, 250, 100, "Module B Window")
ButtonGadget(#gadget, 25, 20, 200, 30, "Module B Gadget ")
EndProcedure
EndModule
; --- module C
;
DeclareModule c
UseModule generalModule
Enumeration windows
#win
EndEnumeration
Enumeration gadgets
#gadget
EndEnumeration
Declare openWin()
EndDeclareModule
Module c
Procedure openWin()
OpenWindow(#win, 280, 500, 250, 100, "Module C Window")
ButtonGadget(#gadget, 25, 20, 200, 30, "Module C Gadget")
EndProcedure
EndModule
; --- main module
;
UseModule generalModule
Enumeration windows
#win
#childWin
EndEnumeration
Enumeration gadgets
#gadget
#childGadget
EndEnumeration
OpenWindow(#win, 100, 200, 250, 100, "Main Window")
ButtonGadget(#gadget, 25, 20, 200, 30, "Main Gadget")
a::openWin()
b::openWin()
c::openWin()
OpenWindow(#childWin, 340, 600, 250, 100, "Child Window")
ButtonGadget(#childGadget, 25, 20, 200, 30, "Child Gadget")
MessageRequester("Modules", "Perfectly black-boxed - no clashes!")
While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
Works perfectly without clash or conflict, even when each module is loaded from separate files. Furthermore, there are no worries about maintaining unique constant names, as they could be reused. The constants,
#win and
#gadget in this example, are used in all three modules, and also in the main module, without issue.
Hope it helps.
