394 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			394 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Compile function NDW_EDIT_MODE_CHANGE_HIST_EVENTS(CtrlEntId, Event, @PARAMS)
 | |
| /***********************************************************************************************************************
 | |
| 
 | |
|     Name        :   NDW_EDIT_MODE_CHANGE_HIST_EVENTS
 | |
| 
 | |
|     Description :   Commuter module for the NDW_EDIT_MODE_CHANGE_HIST form.
 | |
| 
 | |
|     Notes       :   Application errors should be logged using the Error Services module. There are a few methodological
 | |
|                     assumptions built into way errors are managed which are important to understand in order to properly
 | |
|                     work with Error Services:
 | |
| 
 | |
|                     - The term 'top' refers to the originating procedure of a call stack and the term 'bottom' refers to
 | |
|                       the last routine (or the current routine) within a call stack. Within the OpenInsight Debugger
 | |
|                       this will appear backwards since the originating procedure always appears at the bottom of the
 | |
|                       list and the current routine appears at the top of the list. We are using this orientation because
 | |
|                       it is common to refer to the process of calling other procedures as 'drilling down'.
 | |
| 
 | |
|                     - The reason for defining the orientation of the call stack is because Error_Services allows for
 | |
|                       multiple error conditions to be appended to an original error. In most cases this will happen when
 | |
|                       a procedure at the bottom of the stack generates an error condition and then returns to its
 | |
|                       calling procedure. This higher level procedure can optionally add more information relevant to
 | |
|                       itself. This continues as the call stack 'bubbles' its way back to the top to where the
 | |
|                       originating procedure is waiting.
 | |
| 
 | |
|                     - Native OpenInsight commands that handle errors (e.g., Set_Status, Set_FSError, Set_EventStatus)
 | |
|                       preserve their error state until explicitly cleared. This can hinder the normal execution of code
 | |
|                       since subsequent procedures (usually SSPs) will fail if a pre-existing error condition exists.
 | |
|                       Our philosophy is that error conditions should automatically be cleared before a new procedure
 | |
|                       is executed to avoid this problem. However, the nature of Basic+ does not make this easy to
 | |
|                       automate for any given stored procedure. Therefore, if a stored procedure wants to conform to our
 | |
|                       philosophy then it should include a call into the 'Clear' service request at the top of the
 | |
|                       program. Alternatively this can be done through a common insert (see SERVICE_SETUP for example.)
 | |
| 
 | |
|                     - Service modules will use the SERVICE_SETUP insert and therefore automatically clear out any
 | |
|                       error conditions that were set before.
 | |
| 
 | |
|     Parameters  :
 | |
|         Service         [in] -- Name of the service being requested
 | |
|         Param1-10   [in/out] -- Additional request parameter holders
 | |
|         Response       [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
 | |
| 
 | |
|     Metadata    :
 | |
| 
 | |
|     History     :   (Date, Initials, Notes)
 | |
|         12/07/20    djs     Original programmer.
 | |
| 
 | |
| ***********************************************************************************************************************/
 | |
| #pragma precomp SRP_PreCompiler
 | |
| #window NDW_EDIT_MODE_CHANGE_HIST
 | |
| 
 | |
| $Insert EVENT_SETUP
 | |
| $Insert APP_INSERTS
 | |
| $Insert POPUP_EQUATES
 | |
| $Insert MSG_EQUATES
 | |
| $Insert REACT_MODE_EQUATES
 | |
| 
 | |
| Common /NDW_EDIT_MODE_CHANGE_HIST/ OrigHistoryList@, ReactorModeCodes@, ReactorModeDescs@, OrigFormHeight@
 | |
| 
 | |
| Equ COL$START_DTM           to 1
 | |
| Equ COL$ELAP_HRS            to 2
 | |
| Equ COL$MODE                to 3
 | |
| Equ COL$NOTES               to 4
 | |
| Equ COL$RL_ID               to 5
 | |
| Equ COL$PROBLEM_CATEGORY    to 6
 | |
| Equ COL$SERVICE_DESCRIPTION to 7
 | |
| Equ COL$START_USER          to 8
 | |
| 
 | |
| Declare subroutine End_Window, Set_Property, Database_Services
 | |
| Declare function   Reactor_Services, SRP_Array, Database_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)
 | |
| 
 | |
|     ReactNo             = CreateParam
 | |
|     Set_Property(@Window:'.EDL_REACTOR', 'TEXT', ReactNo)
 | |
|     TypeOver            = ''
 | |
|     TypeOver<MCAPTION$> = 'Admin Reactor Mode History'
 | |
|     DaysToReport        = Msg(@Window, TypeOver, 'REPORT_DAYS')
 | |
|     If ( (DaysToReport NE '') and Num(DaysToReport) ) then
 | |
|         Set_Property(@Window:'.EDL_DAYS_TO_REPORT', 'TEXT', DaysToReport)
 | |
|         FormSize        = Get_Property(@Window, 'SIZE')
 | |
|         OrigFormHeight@ = FormSize<4>
 | |
|         GoSub Setup_OLE_Controls
 | |
|         GoSub EnableGetHistoryButton
 | |
|         GoSub FillModeChgEDT
 | |
|         GoSub EnableSaveButton    
 | |
|         SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, '', 1)
 | |
|     end else
 | |
|         End_Window(@Window)
 | |
|     end
 | |
|     
 | |
| End Event
 | |
| 
 | |
| 
 | |
| Event PUB_CANCEL.CLICK()
 | |
|     
 | |
|     End_Window(@Window)
 | |
|     
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event PUB_SAVE.CLICK()
 | |
|     
 | |
|     GoSub SaveData
 | |
|     
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event OLE_EDT_MODE_CHG.OnComboClicked(Cell, SelPos, Value)
 | |
|     
 | |
|     CurrHistoryList           = Get_Property(@Window:'.OLE_EDT_MODE_CHG', "OLE.LIST")
 | |
|     Col                       = Field(Cell, ';', 1)
 | |
|     Row                       = Field(Cell, ';', 2)
 | |
|     CurrHistoryList<Row, Col> = Value
 | |
|     Set_Property(@Window:'.OLE_EDT_MODE_CHG', "OLE.LIST", CurrHistoryList)
 | |
|     GoSub EnableSaveButton
 | |
|     GoSub ColorRows
 | |
|     
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event PUB_GET_HISTORY.CLICK()
 | |
|     
 | |
|     GoSub FillModeChgEDT
 | |
|     GoSub EnableSaveButton
 | |
|     
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event EDL_REACTOR.LOSTFOCUS(Flag, FocusID)
 | |
|     
 | |
|     GoSub EnableGetHistoryButton
 | |
|     
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event EDL_DAYS_TO_REPORT.LOSTFOCUS(Flag, FocusID)
 | |
|     
 | |
|     GoSub EnableGetHistoryButton
 | |
|     
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event EDL_REACTOR.CHAR(VirtCode, ScanCode, CtrlKey, ShiftKey, AltKey)
 | |
|     
 | |
|     GoSub EnableGetHistoryButton
 | |
|     
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event EDL_DAYS_TO_REPORT.CHAR(VirtCode, ScanCode, CtrlKey, ShiftKey, AltKey)
 | |
|     
 | |
|     GoSub EnableGetHistoryButton
 | |
|     
 | |
| end event
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Internal GoSubs
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| Setup_OLE_Controls:
 | |
|     
 | |
|     ModeChgCtrl = @Window:'.OLE_EDT_MODE_CHG'
 | |
| 
 | |
|     HeaderTitles  = 'Start DTM':@VM:'Elap Hrs':@VM:'Mode':@VM:'Notes':@VM:'RL ID':@VM:'Problem Category':@VM
 | |
|     HeaderTitles := 'Service Description':@VM:'Start User'
 | |
|     
 | |
|     NumCols         = DCount(HeaderTitles, @VM)
 | |
|     NumRows         = 50
 | |
|     DimArray        = NumCols:@FM:NumRows
 | |
|     HeaderFontArray = 'Segoe UI':@SVM:8:@SVM:700
 | |
|     
 | |
|     HeaderColArray    = Get_Property(ModeChgCtrl, "OLE.HeaderColumn[1]")
 | |
|     HeaderColArray<2> = False$
 | |
|     Set_Property(ModeChgCtrl, "OLE.HeaderColumn[1]", HeaderColArray)
 | |
|     Set_Property(ModeChgCtrl, "OLE.CellFont[All; All]", 'Segoe UI':@SVM:8)
 | |
|     Set_Property(ModeChgCtrl, "OLE.Dimension", DimArray)
 | |
|     Set_Property(ModeChgCtrl, "OLE.HeaderFont[All; 1]", HeaderFontArray)
 | |
|     Set_Property(ModeChgCtrl, "OLE.HeaderFont[1; All]", HeaderFontArray)
 | |
|     
 | |
|     Set_Property(ModeChgCtrl, "OLE.TitleList", HeaderTitles)
 | |
|     Set_Property(ModeChgCtrl, "OLE.HeaderAlignment[All; 1]", 'C':@FM:'C':@FM:'L')
 | |
|     Set_Property(ModeChgCtrl, "OLE.CellAlignment[":COL$START_DTM:"; All]", 'C':@FM:'L':@FM:'L')
 | |
|     Set_Property(ModeChgCtrl, "OLE.CellAlignment[":COL$ELAP_HRS:"; All]", 'C':@FM:'R':@FM:'L')
 | |
|     Set_Property(ModeChgCtrl, "OLE.CellAlignment[":COL$MODE:"-":COL$NOTES:"; All]", 'C':@FM:'L':@FM:'L')
 | |
|     Set_Property(ModeChgCtrl, "OLE.CellAlignment[":COL$RL_ID:"; All]", 'C':@FM:'C':@FM:'L')
 | |
|     Set_Property(ModeChgCtrl, "OLE.CellAlignment[":COL$PROBLEM_CATEGORY:"-":COL$START_USER:"; All]", 'C':@FM:'L':@FM:'L')
 | |
|     Set_Property(ModeChgCtrl, "OLE.CellProtection[All; All]", 'SEL')
 | |
|     Set_Property(ModeChgCtrl, "OLE.CellProtection[":COL$MODE:"; All]", 'None')
 | |
|     Set_Property(ModeChgCtrl, "OLE.AllowDeletions", False$)
 | |
|     Set_Property(ModeChgCtrl, "OLE.AllowInserts", False$)
 | |
|     
 | |
|     // Qualify OLE events that we want to intercept
 | |
|     Qualifier    = ''
 | |
|     Qualifier<1> = 1
 | |
|     Qualifier<4> = 0 ; * process synchronously (i.e. immediately)
 | |
|     Send_Message(ModeChgCtrl, 'QUALIFY_EVENT', 'OLE.OnComboClicked', Qualifier)
 | |
| 
 | |
|     ReactorModeList   = Xlate('SYSREPOSPOPUPS', @APPID<1>:'**':'REACTOR_MODE', PDISPLAY$, 'X')  
 | |
|     Convert @VM to @FM in ReactorModeList
 | |
|     Convert @SVM to @VM in ReactorModeList
 | |
|     ReactorModeList   = SRP_Array('Rotate', ReactorModeList, @FM, @VM)
 | |
|     ReactorModeCodes@ = ReactorModeList<1>
 | |
|     ReactorModeDescs@ = ReactorModeList<2>
 | |
|     ComboBoxList      = ReactorModeDescs@
 | |
|     Convert @VM to @STM in ComboBoxList
 | |
|     
 | |
|     // Setup Tool ID and Wafer status/action combo boxes
 | |
|     CellTypeArray        = ""
 | |
|     CellTypeArray<1>     = "Combo"
 | |
|     CellTypeArray<2, 1>  = ''
 | |
|     CellTypeArray<2, 2>  = "L"
 | |
|     CellTypeArray<2, 3>  = ComboBoxList
 | |
|     CellTypeArray<2, 4>  = 1                         ;// Column 1 contains the values we care about
 | |
|     CellTypeArray<2, 5>  = 1                         ;// Auto fill on
 | |
|     CellTypeArray<2, 6>  = 0                         ;// Case sensitive on
 | |
|     CellTypeArray<2, 7>  = 10                        ;// 10 visible rows max
 | |
|     CellTypeArray<2, 8>  = 0                         ;// Don't fire the OnOptionClick
 | |
|     CellTypeArray<2, 9>  = 1                         ;// Reduce the list to partial matches
 | |
|     CellTypeArray<2, 10> = 0                         ;// Only show the drop down when the user types
 | |
|     CellTypeArray<2, 11> = 0                         ;// Do not use LIST Format
 | |
|     CellTypeArray<2, 12> = 1                         ;// Autofill on Tool ID name
 | |
|     CellTypeArray<2, 13> = 1                         ;// Hide dropdown when user clears cell
 | |
|     CellTypeArray<2, 14> = 0                         ;// Let navigation keys show the drop down
 | |
|     CellTypeArray<2, 15> = 0                         ;// Show the drop down regardless of the cell's contents
 | |
|     CellTypeArray<2, 16> = 0                         ;// Show the drop down during autofill
 | |
|     CellTypeArray<2, 17> = 1                         ;// Remove selection when user backspaces/deletes
 | |
|     CellTypeArray<2, 18> = 0                         ;// Show Popup while in read only mode
 | |
|     CellTypeArray<2, 19> = 1                         ;// Show Popup When Navigating
 | |
|     CellTypeArray<2, 20> = 1                         ;// Always Tab Out on Enter
 | |
|     CellTypeArray<2, 21> = -1                        ;// Always show the dropdown above when close to the screen bottom
 | |
|     CellTypeArray<2, 23> = 1                         ;// Limit possible values to those in dropdown
 | |
|      
 | |
|     Set_Property(ModeChgCtrl, "OLE.CellType[":COL$MODE:"; All]", CellTypeArray)
 | |
|     
 | |
|     ColSize    = Get_Property(ModeChgCtrl, "OLE.DataColumn[1]")
 | |
|     ColSize<1> = 120
 | |
|     ColSize<3> = True$
 | |
|     ColSize<4> = False$
 | |
|     Set_Property(ModeChgCtrl, "OLE.DataColumn[":COL$START_DTM:"]", ColSize)
 | |
|     ColSize<1> = 50
 | |
|     Set_Property(ModeChgCtrl, "OLE.DataColumn[":COL$ELAP_HRS:"]", ColSize)
 | |
|     ColSize<1> = 100
 | |
|     ColSize<4> = True$
 | |
|     Set_Property(ModeChgCtrl, "OLE.DataColumn[":COL$MODE:"]", ColSize)
 | |
|     ColSize<1> = 150
 | |
|     Set_Property(ModeChgCtrl, "OLE.DataColumn[":COL$NOTES:"]", ColSize)
 | |
|     ColSize<1> = 40
 | |
|     ColSize<4> = False$
 | |
|     Set_Property(ModeChgCtrl, "OLE.DataColumn[":COL$RL_ID:"]", ColSize)
 | |
|     ColSize<1> = 200
 | |
|     ColSize<4> = True$
 | |
|     Set_Property(ModeChgCtrl, "OLE.DataColumn[":COL$PROBLEM_CATEGORY:"]", ColSize)
 | |
|     ColSize<1> = 300
 | |
|     Set_Property(ModeChgCtrl, "OLE.DataColumn[":COL$SERVICE_DESCRIPTION:"]", ColSize)
 | |
|     ColSize<1> = 90
 | |
|     ColSize<4> = False$
 | |
|     Set_Property(ModeChgCtrl, "OLE.DataColumn[":COL$START_USER:"]", ColSize)
 | |
|     
 | |
| return
 | |
| 
 | |
| 
 | |
| FillModeChgEDT:
 | |
|     
 | |
|     ReactNo          = Get_Property(@Window:'.EDL_REACTOR', 'TEXT')
 | |
|     DaysToReport     = Get_Property(@Window:'.EDL_DAYS_TO_REPORT', 'TEXT')
 | |
|     HistoryList      = Reactor_Services('GetReactModeHistory', ReactNo, DaysToReport)
 | |
|     Set_Property(@Window:'.OLE_EDT_MODE_CHG', "OLE.LIST", '')
 | |
|     Set_Property(@Window:'.OLE_EDT_MODE_CHG', "OLE.LIST", HistoryList)
 | |
|     OrigHistoryList@ = HistoryList
 | |
|     GoSub ResizeForm
 | |
|     GoSub ColorRows
 | |
|     
 | |
| return
 | |
| 
 | |
| 
 | |
| EnableGetHistoryButton:
 | |
|     
 | |
|     ReactNo      = Get_Property(@Window:'.EDL_REACTOR', 'TEXT')
 | |
|     DaysToReport = Get_Property(@Window:'.EDL_DAYS_TO_REPORT', 'TEXT')
 | |
|     If ( (ReactNo NE '') and (DaysToReport NE '') ) then
 | |
|         Set_Property(@Window:'.PUB_GET_HISTORY', 'ENABLED', True$)
 | |
|     end else
 | |
|         Set_Property(@Window:'.PUB_GET_HISTORY', 'ENABLED', False$)
 | |
|     end
 | |
|     
 | |
| return
 | |
| 
 | |
| 
 | |
| EnableSaveButton:
 | |
|     
 | |
|     CurrHistoryList = Get_Property(@Window:'.OLE_EDT_MODE_CHG', "OLE.LIST")
 | |
|     ButtonEnabled   = (CurrHistoryList NE OrigHistoryList@)
 | |
|     Set_Property(@Window:'.PUB_SAVE', 'ENABLED', ButtonEnabled)
 | |
|     
 | |
| return
 | |
| 
 | |
| 
 | |
| ResizeForm:
 | |
|     
 | |
|     SystemSize      = Get_Property('SYSTEM', 'SIZE')
 | |
|     MaxClientHeight = SystemSize<4>    
 | |
|     ModeChgCtrl     = @Window:'.OLE_EDT_MODE_CHG'
 | |
|     CtrlSize        = Get_Property(ModeChgCtrl, 'SIZE')
 | |
|     OrigCtrlHeight  = CtrlSize<4>
 | |
|     DataRowArray    = Get_Property(ModeChgCtrl, "OLE.DataRow[1]")
 | |
|     RowHeight       = DataRowArray<1>
 | |
|     DimArray        = Get_Property(ModeChgCtrl, "OLE.Dimension")
 | |
|     NumRows         = DimArray<2>
 | |
|     NewCtrlHeight   = OrigCtrlHeight + (RowHeight * (NumRows) )   
 | |
|     SizeDiff        = NewCtrlHeight - OrigCtrlHeight
 | |
|     NewFormHeight   = OrigFormHeight@ + SizeDiff
 | |
|     If NewFormHeight GT MaxClientHeight then
 | |
|         MaxFormHeight = MaxClientHeight * 0.8
 | |
|         NewFormHeight = MaxFormHeight
 | |
|     end
 | |
|     FormSize    = Get_Property(@Window, 'SIZE')
 | |
|     FormSize<4> = NewFormHeight
 | |
|     FormSize<5> = -1 ; // Keep form invisible until we are ready to show it
 | |
|     Set_Property(@Window, 'SIZE', FormSize)
 | |
|     Send_Message(ModeChgCtrl, "OLE.Refresh")
 | |
|     
 | |
| return
 | |
| 
 | |
| 
 | |
| ColorRows:
 | |
|     
 | |
|     DefaultColorArray = 'None':@FM:'None':@FM:'None':@FM:'None':@FM:'None'
 | |
|     ChangedColorArray = 'None':@FM:'Yellow':@FM:'None':@FM:'Yellow':@FM:'None'
 | |
|     CurrHistoryList   = Get_Property(@Window:'.OLE_EDT_MODE_CHG', "OLE.LIST")
 | |
|     For each Row in CurrHistoryList using @FM setting RowIndex
 | |
|         OrigRow = OrigHistoryList@<RowIndex>
 | |
|         If Row NE OrigRow then
 | |
|             Set_Property(@Window:'.OLE_EDT_MODE_CHG', "OLE.CellColors[All;":RowIndex:"]", ChangedColorArray)
 | |
|         end else
 | |
|             Set_Property(@Window:'.OLE_EDT_MODE_CHG', "OLE.CellColors[All;":RowIndex:"]", DefaultColorArray)
 | |
|         end
 | |
|     Next Row
 | |
|     
 | |
| return
 | |
| 
 | |
| 
 | |
| SaveData:
 | |
| 
 | |
|     ReactNo         = Get_Property(@Window:'.EDL_REACTOR' , 'TEXT')
 | |
|     RowsToSave      = ''
 | |
|     CurrHistoryList = Get_Property(@Window:'.OLE_EDT_MODE_CHG', "OLE.LIST")
 | |
|     For each Row in CurrHistoryList using @FM setting RowIndex
 | |
|     OrigRow         = OrigHistoryList@<RowIndex>
 | |
|     If Row NE OrigRow then RowsToSave<-1> = RowIndex
 | |
|     Next Row
 | |
|     For each RowIndex in RowsToSave using @FM
 | |
|         Row                       = CurrHistoryList<RowIndex>
 | |
|         KeyDTM                    = Row<0, 1>
 | |
|         KeyDTM                    = IConv(KeyDTM, 'DT')
 | |
|         ModeKey                   = ReactNo:'*':KeyDTM
 | |
|         ModeRec                   = Database_Services('ReadDataRow', 'REACT_MODE', ModeKey)
 | |
|         NewModeDesc               = Row<0, COL$MODE>
 | |
|         Locate NewModeDesc in ReactorModeDescs@ using @VM setting ModePos then
 | |
|             NewModeCode = ReactorModeCodes@<0, ModePos>
 | |
|             ModeRec<REACT_MODE_MODE$> = NewModeCode
 | |
|         end       
 | |
|         Database_Services('WriteDataRow', 'REACT_MODE', ModeKey, ModeRec, True$, False$, True$)
 | |
|     Next RowIndex
 | |
|     OrigHistoryList@ = CurrHistoryList
 | |
|     GoSub ColorRows
 | |
|     GoSub EnableSaveButton
 | |
|     
 | |
| return
 | |
| 
 |