OnBeginValueChange (GridData)


Description

Fired before applying modifications to a grid data parameter. The callback can prevent the value change with a return value.


Applies To

GridData parameters on Custom Properties implemented in a scripting language.


Syntax

function <property_name>_<parameter_name>_OnBeginValueChange()

{ 

	... 

}
def <property_name>_<parameter_name>_OnBeginValueChange():

				...
Function <property_name>_<parameter_name>_OnBeginValueChange()

				...

End Function
sub <property_name>_<parameter_name>_OnBeginValueChange 

{ 

	... 

}

<property_name> is the name specified in the call to PluginRegistrar.RegisterProperty, with any spaces converted to underscores. For example, if you register a property with the name "My Property", the callback function names start with "My_Property".

<parameter_name> is the name specified in the call to CustomProperty.AddGridParameter, with any spaces converted to underscores. For example, if you added a grid parameter with the name "My Grid", the callback function names start with "<property_name>_My_Grid".


Parameters

Parameter Language Type Description
extra_param Scripting Array The first item is another Array containing the column and row indices of the selected cells. Indices are arranged as [col1, row1, col2, row2, ...].

Examples

import win32com.client

from win32com.client import constants



def XSILoadPlugin( in_reg ):

	in_reg.Author = "Autodesk"

	in_reg.Name = "MyPropertyPlugin"

	in_reg.Major = 1

	in_reg.Minor = 0



	in_reg.RegisterProperty("MyProperty")

	#RegistrationInsertionPoint - do not remove this line



	return True



def XSIUnloadPlugin( in_reg ):

	strPluginName = in_reg.Name

	return True



def MyProperty_Define( in_ctxt ):

	oCustomProperty = in_ctxt.Source

	oCustomProperty.AddGridParameter("MyGrid")

	return True



def MyProperty_DefineLayout( in_ctxt ):

	oLayout = in_ctxt.Source

	oLayout.Clear()

	oItem = oLayout.AddItem("MyGrid")

	return True



def MyProperty_OnInit( ):

	Application.LogMessage("MyProperty_OnInit called",constants.siVerbose)

	param = PPG.MyGrid



	# Basic population of the grid data

	gridData = param.Value

	gridData.ColumnCount = 3

	gridData.RowCount = 3

	

	for col in range( gridData.ColumnCount ):

		gridData.SetColumnLabel( col, "Col %d"%col )

		gridData.SetColumnDef( col, constants.siColumnStandard )

		for row in range( gridData.RowCount ):

			if col == 0:

				gridData.SetRowLabel( row, "Row %d"%row )

			gridData.SetCell( col, row, "%d,%d"%(col, row) )



def MyProperty_OnClosed( ):

	pass



def MyProperty_MyGrid_OnBeginValueChange( in_ExtraParams ):

	param = PPG.MyGrid

	gridData = param.Value

	

	# Retrieve the set of cells that are about to get modified

	columnRowPairs = []

	columnRowPairs.extend( in_ExtraParams[0] )

	

	returnArray = []

	while len( columnRowPairs ) >= 2:

		col = columnRowPairs.pop(0)

		row = columnRowPairs.pop(0)

		

		# For the sake of the example, we demonstrate returning a single accept flag

		# and a per-cell flag

		if col == 2:

			# As soon as the modification affects the last column, we reject the

			# whole value change

			return False

		

		if row == 1:

			# Do not allow modification of row 1

			returnArray.append( False )

		else:

			returnArray.append( True )

	

	return returnArray

See Also