open-insight/LSL2/STPROC/NDW_GAN_ETCH_EVENTS.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

449 lines
17 KiB
Plaintext

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<RowIndex>
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<COL$SELECT>)
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<COL$SELECT>
For each Checkmark in RowsSelected using @VM setting vPos
If Checkmark EQ True$ then
SelEtchIDs<0, -1> = EtchIDList<vPos>
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<RowIndex, 1> = {REACTOR}
EtchQList<RowIndex, 2> = OConv({START_DTM}, 'DT')
EtchQList<RowIndex, 3> = OConv({END_DTM}, 'DT')
EtchQList<RowIndex, 5> = OConv({USER}, '[XLATE_CONV,LSL_USERS*FIRST_LAST]')
EtchQList<RowIndex, 4> = {ELAP_HOURS}
EtchIDs<RowIndex> = 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<RowIndex, 1> = {REACTOR}
EtchQList<RowIndex, 2> = OConv({START_DTM}, 'DT')
EtchQList<RowIndex, 3> = OConv({END_DTM}, 'DT')
EtchQList<RowIndex, 5> = OConv({USER}, '[XLATE_CONV,LSL_USERS*FIRST_LAST]')
EtchQList<RowIndex, 4> = {ELAP_HOURS}
EtchIDs<RowIndex> = 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