Compile function NDW_GAN_ETCH_EVENTS(CtrlEntId, Event, @PARAMS) /*********************************************************************************************************************** This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written permission from Infineon. Name : NDW_GAN_ETCH_Events Description : This function acts as a commuter module for all events related to this window. Notes : Commuter Modules are automatically called from the Promoted_Events function which is called by the application-specific promoted event handler. This makes it possible to add QuickEvents that need to execute Basic+ logic without having use the Form Designer to make the association, although this is limited to the events which are currently promoted. If the form needs to call the commuter module directly then the QuickEvent parameters should be formatted like this: '@SELF','@EVENT',['@PARAM1','@PARAMx'] Parameters : CtrlEntId [in] -- The fully qualified name of the control calling the promoted event Event [in] -- The event being executed. See the Notes section regarding "PRE" events Param1-15 [in] -- Additional event parameter holders EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in EVENT_SETUP insert Response [out] -- COMMIT mode: Response<1> = List of internal GaN Etch IDs selected DEFAULT mode: Response<1> EQ False$(0) History : (Date, Initials, Notes) 04/01/19 djs Created initial commuter module. 07/24/19 djs Updated form and commuter module to support a 'COMMIT' mode where users can select one or more internal GaN Etch runs to be bound to one external GaN Etch run upon the ETCH complete event on the REACT_RUN form. ***********************************************************************************************************************/ #pragma precomp SRP_PreCompiler #window NDW_GAN_ETCH $Insert RLIST_EQUATES $Insert APP_INSERTS Equ COL$SELECT to 6 Declare subroutine Database_Services, GaN_Services // Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler. If Event EQ 'OLE' then Transfer Event to OIEvent Transfer Param1 to Event Transfer Param2 to Param1 Transfer Param3 to Param2 Transfer Param4 to Param3 Transfer Param5 to Param4 Transfer Param6 to Param5 Transfer Param7 to Param6 Transfer Param8 to Param7 end GoToEvent Event for CtrlEntId else // Event not implemented end Return EventFlow or 1 //----------------------------------------------------------------------------- // EVENT HANDLERS //----------------------------------------------------------------------------- Event WINDOW.CREATE(CreateParam) FormMode = '' ExternalEtchID = '' Reactor = '' FormMode = Field(CreateParam, @FM, 1, 1) If FormMode _EQC 'COMMIT' then ExternalEtchID = Field(CreateParam, @FM, 2, 1) Reactor = Field(CreateParam, @FM, 3, 1) end Set_Property(@Window, '@FORMMODE', FormMode) GoSub Setup_OLE_Controls FormSize = '' SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize) EventFlow = 1 End Event Event WINDOW.CLOSE(CancelFlag) End_Dialog(@Window, False$) end event Event WINDOW.OMNIEVENT(Message, Param1, Param2, Param3, Param4) If Message _EQC 'Refresh' then GoSub RefreshQueue end end event Event PUB_CREATE.CLICK() ReactorNo = Get_Property(@Window:'.CMB_REACTOR', 'TEXT') If ReactorNo NE '' then Gan_Services('CreateEtchRun', ReactorNo) GoSub RefreshQueue end end event Event CMB_REACTOR.CHANGED(NewData) If NewData NE '' then Set_Property(@Window:'.PUB_CREATE', 'ENABLED', True$) end else Set_Property(@Window:'.PUB_CREATE', 'ENABLED', False$) end end event Event PUB_EXIT.CLICK() End_Dialog(@Window, False$) end event Event EDT_ETCH_QUEUE.POSCHANGED(NextColumn, NextRow) end event Event OLE_EDT_ETCH_Q.OnContextMenuClick(Item, UserData) Action = Item Cell = UserData RowIndex = Field(Cell, ';', 2) EtchIDs = Get_Property(@Window, '@ETCHIDS') EtchID = EtchIDs If EtchID NE '' then Begin Case Case Action EQ 'START' Gan_Services('StartEtchRun', EtchID) Case Action EQ 'STOP' Gan_Services('StopEtchRun', EtchID) Case Action EQ 'DEL' Gan_Services('DeleteEtchRun', EtchID) End Case GoSub RefreshQueue end end event Event OLE_EDT_ETCH_Q.OnClick(Cell, Point, Button, Shift, Ctrl) If Button EQ "Right" then Row = Field(Cell, ';', 2) Reactor = Get_Property(CtrlEntID, "OLE.CellText[1;":Row:"]") StartDTM = Get_Property(CtrlEntID, "OLE.CellText[2;":Row:"]") EndDTM = Get_Property(CtrlEntID, "OLE.CellText[3;":Row:"]") Menu = "" // Initialize all menu options to false until we deem they need to be turned on StartStatus = False$ StopStatus = False$ DelStatus = True$ Begin Case Case StartDTM EQ '' // Need to ensure that no other etch has been started for this reactor EtchIDs = '' EtchQList = '' RowIndex = 1 GoSub ClearCursors Query = 'SELECT GAN_ETCH WITH AVAILABLE EQ ':True$:' AND WITH REACTOR EQ ' | : Reactor : ' AND WITH STATUS NE "COMPLETED" AND WITH STATUS NE "READY"' Rlist(Query, Target_ActiveList$, '', '', '') EOF = False$ If @RecCount EQ 0 then StartStatus = True$ Case StartDTM NE '' and EndDTM EQ '' StopStatus = True$ Case Otherwise$ Null End Case Menu<-1> = "START" :@VM:"Start" :@VM:StartStatus Menu<-1> = "STOP" :@VM:"Stop" :@VM:StopStatus Menu<-1> = "DEL" :@VM:"Delete" :@VM:DelStatus Send_Message(CtrlEntID, "OLE.ShowContextMenu", Point, Menu, Cell) end end event Event OLE_EDT_ETCH_Q.OnCheckChanged(Cell, OldValue, NewValue) EtchQArray = Get_Property(@Window:'.OLE_EDT_ETCH_Q', 'OLE.ARRAY') RowsSelected = Sum(EtchQArray) If RowsSelected GT 0 then Set_Property(@Window:'.PUB_COMMIT', 'ENABLED', True$) end else Set_Property(@Window:'.PUB_COMMIT', 'ENABLED', False$) end end event Event PUB_COMMIT.CLICK() EtchIDList = Get_Property(@Window, '@ETCHIDS') SelEtchIDs = '' EtchQArray = Get_Property(@Window:'.OLE_EDT_ETCH_Q', 'OLE.ARRAY') RowsSelected = EtchQArray For each Checkmark in RowsSelected using @VM setting vPos If Checkmark EQ True$ then SelEtchIDs<0, -1> = EtchIDList end Next Checkmark End_Dialog(@Window, SelEtchIDs) end event //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Internal GoSubs //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Setup_OLE_Controls: // Qualify OLE events that we want to intercept Qualifier = '' Qualifier<1> = 1 Qualifier<4> = 1 ; * process synchronously (i.e. immediately) EtchQCtrl = @Window:'.OLE_EDT_ETCH_Q' Send_Message(EtchQCtrl, 'QUALIFY_EVENT', 'OLE.PosChanged', Qualifier) Send_Message(EtchQCtrl, 'QUALIFY_EVENT', 'OLE.OnContextMenuClick', Qualifier) Send_Message(EtchQCtrl, 'QUALIFY_EVENT', 'OLE.OnClick', Qualifier) If FormMode _EQC 'COMMIT' then WindowTitle = Get_Property(@Window, 'TEXT') NewWindowTitle = 'Commit Etch - ':ExternalEtchID Set_Property(@Window, 'TEXT', NewWindowTitle) Send_Message(EtchQCtrl, 'QUALIFY_EVENT', 'OLE.OnCheckChanged', Qualifier) Set_Property(@Window:'.GROUP_ETCH_CREATE', 'VISIBLE', False$) Set_Property(@Window:'.PUB_EXIT', 'VISIBLE', False$) Set_Property(@Window:'.PUB_COMMIT', 'VISIBLE', True$) GoSub RefreshQueue HeaderFontArray = 'Segoe UI':@SVM:8:@SVM:700 HeaderColArray = 40:@FM:False$:@FM:False$:@FM:False$ Set_Property(EtchQCtrl, "OLE.CellFont[All; All]", 'Segoe UI':@SVM:8) Set_Property(EtchQCtrl, "OLE.CellFont[1;All]", HeaderFontArray) Set_Property(EtchQCtrl, "OLE.HeaderFont[All; 1]", HeaderFontArray) Set_Property(EtchQCtrl, "OLE.HeaderFont[1; All]", HeaderFontArray) Set_Property(EtchQCtrl, "OLE.HeaderColumn[1]", HeaderColArray) EtchHeaderTitles = "Reactor":@VM:"Start":@VM:"End":@VM:"Hours":@VM:"User":@VM:"Select" Set_Property(EtchQCtrl, "OLE.TitleList", EtchHeaderTitles) Set_Property(EtchQCtrl, "OLE.HeaderAlignment[All; 1]", 'C':@FM:'C':@FM:'C') Set_Property(EtchQCtrl, "OLE.CellAlignment[All; All]", 'C':@FM:'C':@FM:'C') Set_Property(EtchQCtrl, "OLE.AllowDeletions", False$) Set_Property(EtchQCtrl, "OLE.AllowInserts", False$) CheckBoxArray = 'Check Box' CheckBoxArray<2,1> = True$ Set_Property(EtchQCtrl, "OLE.CellType[":COL$SELECT:"; All]", CheckBoxArray) CommitCtrl = @Window:'.PUB_COMMIT' FormSize = Get_Property(@Window, 'SIZE') EtchQCtrlSize = Get_Property(EtchQCtrl, 'SIZE') CommitCtrlSize = Get_Property(CommitCtrl, 'SIZE') FormSize<3> = FormSize<3> + 50 FormSize<4> = FormSize<4> - 20 Set_Property(@Window, 'SIZE', FormSize) EtchQCtrlSize<3> = EtchQCtrlSize<3> + 50 Set_Property(EtchQCtrl, 'SIZE', EtchQCtrlSize) CommitCtrlSize<1> = CommitCtrlSize<1> + 50 CommitCtrlSize<2> = CommitCtrlSize<2> - 10 Set_Property(CommitCtrl, 'SIZE', CommitCtrlSize) // Disable resizing of the header row and header column // Resize header column to fit contents HeaderRowArray = Get_Property(EtchQCtrl, "OLE.HeaderRow[1]") HeaderRowArray<3> = False$ Set_Property(EtchQCtrl, "OLE.HeaderRow[1]", HeaderRowArray) // Disable resizing of columns as there is no need for this on this form StageColSize = Get_Property(EtchQCtrl, "OLE.DataColumn[1]") StageColSize<3> = False$ Set_Property(EtchQCtrl, "OLE.DataColumn[All]", StageColSize) StageColSize<1> = 50 Set_Property(EtchQCtrl, "OLE.DataColumn[1]", StageColSize) StageColSize<1> = 120 Set_Property(EtchQCtrl, "OLE.DataColumn[2-3]", StageColSize) StageColSize<1> = 50 Set_Property(EtchQCtrl, "OLE.DataColumn[4]", StageColSize) StageColSize<1> = 143 Set_Property(EtchQCtrl, "OLE.DataColumn[5]", StageColSize) StageColSize<1> = 50 Set_Property(EtchQCtrl, "OLE.DataColumn[6]", StageColSize) // Disable resizing of rows as there is no need for this on this form RowSizeProps = Get_Property(EtchQCtrl, "OLE.DataRow[1]") RowSizeProps<3> = False$ Set_Property(EtchQCtrl, "OLE.DataRow[All]", RowSizeProps) Set_Property(EtchQCtrl, "OLE.ScrollBarsVisible", 'Always':@FM:'Never') end else GoSub RefreshQueue HeaderFontArray = 'Segoe UI':@SVM:8:@SVM:700 HeaderColArray = 40:@FM:False$:@FM:False$:@FM:False$ Set_Property(EtchQCtrl, "OLE.CellFont[All; All]", 'Segoe UI':@SVM:8) Set_Property(EtchQCtrl, "OLE.CellFont[1;All]", HeaderFontArray) Set_Property(EtchQCtrl, "OLE.HeaderFont[All; 1]", HeaderFontArray) Set_Property(EtchQCtrl, "OLE.HeaderFont[1; All]", HeaderFontArray) Set_Property(EtchQCtrl, "OLE.HeaderColumn[1]", HeaderColArray) EtchHeaderTitles = "Reactor":@VM:"Start":@VM:"End":@VM:"Hours":@VM:"User" Set_Property(EtchQCtrl, "OLE.TitleList", EtchHeaderTitles) Set_Property(EtchQCtrl, "OLE.HeaderAlignment[All; 1]", 'C':@FM:'C':@FM:'C') Set_Property(EtchQCtrl, "OLE.CellAlignment[All; All]", 'C':@FM:'C':@FM:'C') Set_Property(EtchQCtrl, "OLE.AllowDeletions", False$) Set_Property(EtchQCtrl, "OLE.AllowInserts", False$) // Disable resizing of the header row and header column // Resize header column to fit contents HeaderRowArray = Get_Property(EtchQCtrl, "OLE.HeaderRow[1]") HeaderRowArray<3> = False$ Set_Property(EtchQCtrl, "OLE.HeaderRow[1]", HeaderRowArray) // Disable resizing of columns as there is no need for this on this form StageColSize = Get_Property(EtchQCtrl, "OLE.DataColumn[1]") StageColSize<3> = False$ Set_Property(EtchQCtrl, "OLE.DataColumn[All]", StageColSize) StageColSize<1> = 50 Set_Property(EtchQCtrl, "OLE.DataColumn[1]", StageColSize) StageColSize<1> = 120 Set_Property(EtchQCtrl, "OLE.DataColumn[2-3]", StageColSize) StageColSize<1> = 50 Set_Property(EtchQCtrl, "OLE.DataColumn[4]", StageColSize) StageColSize<1> = 140 Set_Property(EtchQCtrl, "OLE.DataColumn[5]", StageColSize) // Disable resizing of rows as there is no need for this on this form RowSizeProps = Get_Property(EtchQCtrl, "OLE.DataRow[1]") RowSizeProps<3> = False$ Set_Property(EtchQCtrl, "OLE.DataRow[All]", RowSizeProps) Set_Property(EtchQCtrl, "OLE.ScrollBarsVisible", 'Always':@FM:'Never') end return ClearCursors: For counter = 0 to 8 ClearSelect counter Next counter return RefreshQueue: FormMode = Get_Property(@Window, '@FORMMODE') If FormMode _EQC 'COMMIT' then EtchIDs = '' EtchQList = '' RowIndex = 1 GoSub ClearCursors Query = 'SELECT GAN_ETCH WITH AVAILABLE EQ ':True$:' AND WITH REACTOR EQ ':Reactor:' BY START_DTM' Rlist(Query, Target_ActiveList$, '', '', '') EOF = False$ If @RecCount then Loop ReadNext GaNEtchID then Database_Services('ActivateRecord', 'GAN_ETCH', GaNEtchID) EtchQList = {REACTOR} EtchQList = OConv({START_DTM}, 'DT') EtchQList = OConv({END_DTM}, 'DT') EtchQList = OConv({USER}, '[XLATE_CONV,LSL_USERS*FIRST_LAST]') EtchQList = {ELAP_HOURS} EtchIDs = GaNEtchID RowIndex += 1 end else EOF = True$ end Until EOF EQ True$ Repeat end NumEtchCols = 6 NumEtchRows = @RecCount EtchDimArray = NumEtchCols :@FM: NumEtchRows Set_Property(EtchQCtrl, "OLE.Dimension", EtchDimArray) Set_Property(@Window, '@ETCHIDS', EtchIDs) Set_Property(@Window:'.OLE_EDT_ETCH_Q', 'OLE.LIST', EtchQList) end else EtchIDs = '' EtchQList = '' RowIndex = 1 GoSub ClearCursors Query = 'SELECT GAN_ETCH WITH AVAILABLE EQ ':True$:' BY REACTOR BY START_DTM' Rlist(Query, Target_ActiveList$, '', '', '') EOF = False$ If @RecCount then Loop ReadNext GaNEtchID then Database_Services('ActivateRecord', 'GAN_ETCH', GaNEtchID) EtchQList = {REACTOR} EtchQList = OConv({START_DTM}, 'DT') EtchQList = OConv({END_DTM}, 'DT') EtchQList = OConv({USER}, '[XLATE_CONV,LSL_USERS*FIRST_LAST]') EtchQList = {ELAP_HOURS} EtchIDs = GaNEtchID RowIndex += 1 end else EOF = True$ end Until EOF EQ True$ Repeat end NumEtchCols = 5 NumEtchRows = @RecCount EtchDimArray = NumEtchCols :@FM: NumEtchRows Set_Property(EtchQCtrl, "OLE.Dimension", EtchDimArray) Set_Property(@Window, '@ETCHIDS', EtchIDs) Set_Property(@Window:'.OLE_EDT_ETCH_Q', 'OLE.LIST', EtchQList) end return