449 lines
17 KiB
Plaintext
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
|
|
|
|
|