One of the requirements we needed when developing the new IDE was the ability to detect when the state of a control changed in such a fashion that might affect the operations that could be performed on it.
A classic example of this is highlighting text in an edit control so that it can be cut or copied, or perhaps replaced with a paste operation: At this point an item like a Cut or a Paste button might need enabling so the UI is in sync with the state of the control.
To enable this functionality several controls now support a new event called EDITSTATECHANGED, which is fired when the “edit state” is changed. The edit state is defined as one of the following operations:
- Select All
So, if a user takes an action in the control that enables or disables one of these options you can respond to it via the EDITSTATECHANGED event.
The EDITSTATECHANGED event passes a single parameter called “NewEditState“, which is a dynamic array of Boolean flags with the following structure:
<1> CanUndo : TRUE$ if the control allows an UNDO operation <2> CanRedo : TRUE$ if the control allows a REDO operation <3> CanCut : TRUE$ if the control allows a CUT operation <4> CanCopy : TRUE$ if the control allows a COPY operation <5> CanPaste : TRUE$ if the control allows a PASTE operation <6> CanSelectAll : TRUE$ if the control allows a SELECTALL : operation
(You may notice that these flags closely follow the items in a standard “Edit” menu).
Here’s a simple example to set the state of some Cut/Copy/Paste buttons:
objxArray = @window : ".BTN_CUT" propArray = "ENABLED" dataArray = newEditState<3> objxArray := @rm : @window : ".BTN_COPY" propArray := @rm : "ENABLED" dataArray := @rm : newEditState<4> objxArray := @rm : @window : ".BTN_PASTE" propArray := @rm : "ENABLED" dataArray := @rm : newEditState<5> call Set_Property_Only( objxArray, propArray, dataArray )
The following controls support the EDITSTATECHANGED event:
(Disclaimer: This article is based on preliminary information and may be subject to change in the final release version of OpenInsight 10).