CDS_P4deTriggers.il #2

  • //
  • guest/
  • robert_yu/
  • perforce/
  • cdsp4/
  • release/
  • 2.2/
  • Skill/
  • Triggers/
  • CDS_P4deTriggers.il
  • View
  • Commits
  • Open Download .zip Download (5 KB)
procedure(CDS_P4WindowTrigger(trigList)		  ;_Jun 29 01 sikand 1751

  prog((  client cellddid xto xt w wname fdata fdatav wnamev)

    
    when( ddGetObjDMSys(trigList->libId) == "p4"
       when( trigList->mode != 'close

	  client = CDS_P4GetClient(trigList->libId)
	  CDS_P4CurrentClient=client
	  cellddid = trigList->viewFileId


	  if( trigList->eip || !cellddid then
	     xto = ddGetObj(trigList->libName trigList->cellName trigList->viewName "*")
	     xt = xto~>writePath
	  else
	     xto=cellddid	
	     xt= xto~>writePath
	  ) ; ** if trigList **
	  
	  
	  when(xto->lib~>p4CheckinType == "Bulk"
	       return(t)
	      )
    
	  when((member(xto~>viewName CDS_P4ViewsUnManaged) ||
		member(xto~>view~>name CDS_P4ViewsUnManaged))
	     return(t)
	  )
	  
	  when((member(xto~>cellName CDS_P4CellsUnManaged) ||
		member(xto~>cell~>name CDS_P4CellsUnManaged))
	     return(t)
	  )
	  


	  w= trigList->window
	  wname = hiGetWindowName(w)
	  fdata = CDS_P4Fstat(xt)
	  if( trigList->accessMode == "a"
	     ;; make sure the file is opened
	     when( fdata~>action == 'unbound
		CDS_ErrorDialogBox("P4 Interface"
"This cell could not be opened correctly for edit.\nIt's possible the cell is UNIX r/w or an unmanaged object\nIf it is a managed object, you should do a chmod -w on the files in question.\nSeek HELP if you do not understand this message\n")
		hiCloseWindow(w)
	     )
	  ) ; ** if trigList **


	  
	  if(fdata~>headRev == 'unbound
	     then
	     fdatav = "0"
	  else
	     fdatav = fdata~>headRev
	  ) ; ** if fdata **
	  
	  wnamev = strcat(wname " #" fdatav)
	  hiSetWindowName(w wnamev)
       ) ; ** when trigList **
    ) ; ** when ddGetObjDMSys **
  ) ; ** prog **
) ; ** procedure CDS_P4WindowTrigger **



procedure(CDS_P4EditTrigger(arglist)		  ;_Nov  8 99 sikand 1499
  prog(( save mode action cellddid xt status client user validedit editname
	 xto cellview otheropen wlist)


    when( ddGetObjDMSys(arglist->libId) != "p4"
       return()
    )
    
    mode = arglist->accessMode
    action = arglist->action
    cellddid = arglist->viewFileId
    cellview = arglist->window~>cellView
    ;; is it a Perforce controlled object
    client = CDS_P4GetClient(arglist->libId)
    CDS_P4CurrentClient=client

        
    when( action == 'close && cellview~>modifiedButNotSaved
       if( hiGraphicMode() then
			;; handle modal dialog box hangup problem
	   if(arglist->eip then
			   wlist=hiGetWindowList()
			   ;; but ignore the current window
			   remd(arglist->window wlist)
			   otheropen=nil
			   foreach(el wlist
				      when(el~>cellView == cellview
				       ;; got a match
				       otheropen=el
				       )
				)
			   )
	   ;; check to see if this cellview is open in any other window
	   ;; if it is, ignore the modal dialog request
	   ;; if it is not, query

	   if(otheropen then
			warn(strcat("Unsaved changes in " cellview~>cell~>name " active in " sprintf(nil "%s" otheropen)))
			else
		  save = CDS_WarnDialogBox(strcat("Save Changes for "
					  cellview~>cell~>name " "
					  cellview~>view~>name)
	 strcat(cellview~>cell~>name " has been modified\nDo you want to save your changes ?"))
	  when( save
	     dbSave(cellview)
	  )
	  )
       ) ; ** if hiGraphicMode **
    ) ; ** when action **
    
    when( action != 'close
       when( mode == "a"
	  ;; make sure that no-one else has this cell checked
	  ;; out
	  if( arglist->eip || !cellddid then
	     xto = ddGetObj(arglist->libName arglist->cellName arglist->viewName "*")
	     xt = CDS_NFSSimplify(xto~>writePath)
	  else
	     xt= CDS_NFSSimplify(cellddid~>writePath)
	  ) ; ** if arglist **
	  status = CDS_P4IPCBufferProcess(strcat("opened -a " xt))
	  when( status
	     client = CDS_P4GetClient(arglist->libId)
	     user = getLogin()
	     validedit = strcat(user "@" client)
	     editname = car(reverse(parseString(CDS_IPCBuffer)))
	     unless( (rexMatchp("file(s) not opened anywhere" CDS_IPCBuffer) ||
		      ;; hack for 99.1 bug in opened -a
		      rexMatchp("file(s) not in client view" CDS_IPCBuffer))
		editname = car(reverse(parseString(CDS_IPCBuffer)))
		unless( editname == validedit
		   if( hiGraphicMode() then
		      CDS_ErrorDialogBox("P4 Interface"
					 strcat("File already being edited by " editname))
		   else
		      printf("Error: File already being edited by %s\n" editname)
		   ) ; ** if hiGraphicMode **
		   ;;hiCloseWindow(arglist->window)
		   geChangeEditMode("r" arglist->window)
		) ; ** unless editname **
	     ) ; ** unless rexMatchp **
	  ) ; ** when status **
       ) ; ** when mode **
    ) ; ** when action **
  ) ; ** prog **
) ; ** procedure CDS_P4EditTrigger **



deRegUserTriggers("maskLayout" nil nil 'CDS_P4WindowTrigger)
deRegUserTriggers("maskLayout" 'CDS_P4EditTrigger nil nil)

deRegUserTriggers("schematic" nil nil 'CDS_P4WindowTrigger)
deRegUserTriggers("schematic" 'CDS_P4EditTrigger nil nil)

deRegUserTriggers("schematicSymbol" nil nil 'CDS_P4WindowTrigger)
deRegUserTriggers("schematicSymbol" 'CDS_P4EditTrigger nil nil)
# Change User Description Committed
#2 4531 robert_yu Util changes: /usr/bin/perl instead of /usr/local/bin/perl
Skill changes: get it to work with schematic, layout, symbols for ic 5.0.33
#1 4529 robert_yu p4 integrate from public/perforce/cdsp4/release/2.2/...
//guest/perforce_software/cdsp4/release/2.2/Skill/Triggers/CDS_P4deTriggers.il
#3 2605 Shiv Sikand Stop asking for my mother
#2 1947 Shiv Sikand Restore eip unsaved changes modal dialog box
after working around hang bug in Cadence when
unsaved changes exist in other windows but get trapped
by eip modal dialog box.
#1 1675 Shiv Sikand New 2.2 tree