' 'Class description: ' !short:Choice class structure: Class Choice: ~~~~~~~~~~~~~~ This class combines properties of simple window Win and clipper function AChoice. Common use: ~~~~~~~~~~~ LOCAL OBJECT Cho OF Choice Cho:Init(...) //or Cho:FastInit(...) n:=Cho:Process() Cho:Done() Due to inheritance the methods Hide() and Show() inherited from class Win can be used for an object of class Choice. The menu can be temporary saved and then redisplayed and after that by method Choice:Process() call can be started the menu choice. Source code of class Choice is in C_Choice.prg !seealso: c_win.ngo:Win c_box.ngo:Box c_mnu.ngo:Mnu c_menu.ngo:Menu ob_funct.ngo:AValid ob_funct.ngo:DbfValid c_color.ngo:Color ob_class.ngo:"Class hierarchy" !short:~~~~~~~~~~~~~~~~~~~~~~~~ !short:create class Choice from Win !short: export: !short: var Items //{"item1",...} ^BChoice:Items^N: public: array Array of data for AChoice(...) function, which should contain a selectable items in form of text strings. Example: {"choice1","choice2", ... ,"choiceN"} !short: var SelItems //{lSelectable,...} ^BChoice:SelItems^N: public: array Paralell array for Choice:Items used for selectable items marking. !short: var Cursor //(object of Cursor) ^BChoice:Cursor^N: private: object Class Cursor object for saving the cursor shape during the menu choice. !short: var Choice //1 ^BChoice:Choice^N: read-only: numeric Stores the item number of Choice:Items field, selected by user. If user instead of selecting by pressing Enter pressed ESC, the ^UNegative^N value of actual item number is returned! !short: var Top //1 ^BChoice:Top^N: private: numeric Stores the number of the first displayed item in a window. (the items could scroll). It is used for correct display in repeated activation of Choice:Process method. !short: var CanAppend //false ^BChoice:CanAppend^N: public: logical If true, user can by pressing Ins/Del keys activate the code block for adding/deletting of an item from Choice:Items. The menu can be dynamicaly modified. !short: var InsBlock //{|o|nil} ^BChoice:InsBlock^N: public: code_block This code block is activated from Choice:Process() when the Choice:Append is true and the user pressed Ins key during the selection. As parameter of this code block is passed the self object. The job of this code block is to add a new item to Choice:Items, or to reconfigure the instvar variables of this object. It enables during the selection the adition/deletion of menu items and dynamicaly modify the menu. !short: var DelBlock //{|o|nil} ^BChoice:DelBlock^N: public: code_block This code block is activated from Choice:Process() when the Choice:Append is true and the user pressed Del key during the selection. As parameter of this code block is passed the self object. The job of this code block is to delete an item from Choice:Items, or to reconfigure the instvar variables of this object. It enables during the selection the adition/deletion of menu items and dynamicaly modify the menu. !short: var InRow //0 ^BChoice:InRow^N: private: numeric Stores the init (row) position of Choice window on the screen for correct repainting after issuing code blocks Choice:InsBlock or Choice:DelBlock. !short: var InCol //0 ^BChoice:InCol^N: private: numeric Stores the init (column) position of Choice window on the screen for correct repainting after issuing code blocks Choice:InsBlock or Choice:DelBlock. !short: var InCurSize //0 ^BChoice:InCurSize^N: private: numeric Stores the value of CursorSize parameter for parrent method Box:GoodInit() for correct repainting after issuing code blocks Choice:InsBlock or Choice:DelBlock. !short: method New=ChoiceNew //o:New() --> self ^BChoice:New()^N: public: return self Object is filled with default values. !short: method Init=ChoiceInit //o:Init(Name,R,C,CurSize,Items,SelItems,Clr,Shd) --> true ^BChoice:Init(Name,R,C,CurSize,Items,SelItems,Clr,Shadow)^N: public: return true This method is used for initialising and reasonable window placement for clipper function Achoice on the screen, to be as near as possible to cursor but not to cover any desired text. (It starts on R,C position with length of CurSize). Off course the window must be placed to be whole visible. After all preparing job is done the menu is painted to the screen and the control goes to calling function. Parameter description: ~~~~~~~~~~~~~~~~~~~~~~ ^UName^N: text or code block : no default Text or code block as window title. ^UR^N: numeric: default is Row(). Text position -row- (of cursor) on the screen, which shouldn't be covered but the window should be as near as possible to this text. ^UC^N: numeric: default is Col(). Text position -column- (of cursor) on the screen, which shouldn't be covered but the window should be as near as possible to this text. ^UCurSize^N: numeric: default is 1. Text width, which shouldn't be covered but the window should be as near as possible to this text. ^UItems^N: array: no default must be entered It is an array of text strings, repersenting the menu. It is passed without any change as parameter to clipper function AChoice(). ^USelItems^N: array: default is an array filled with true-values. It is an array (of the same size as the "Items" parameter) controling if the items can be selected from menu or the selection of this items is not allowed. It is passed without any change as parameter to function AChoice(). ^UClr^N: character: default is m->Color:Edit. Window colors. ^UShadow^N: logical: default is true for color monitor, false for monochrom. If true the window shadow will be painted. !short: method FastInit=ChoiceFastInit //o:FastInit(Name,R,C,CurSize,Items,SelItems,Clr,Shd) --> true ^BChoice:FastInit(Name,R,C,CurSize,Items,SelItems,Clr,Shadow)^N: public: return: true It is the same as Choice:Init(...) but with diference of initialising jobs and the menu is not painted to the screen. The painting is done after activating of the method Choice:Process(). !short: method Process=ChoiceProcess //o:Process() --> nChoice ^BChoice:Process()^N: public: return nChoice This method is making the own choice from the menu, it returns the selected item number, if it is negative, the user instead of selecting and pressing the Enter key pressed ESC key (he doesn't want to select anything). This method can be called repeatedly unrestricted number of times. The selected item value is stored to instvar variable Choice:Choice. !short: method Done=ChoiceDone //o:Done() --> true ^BChoice:Done()^N: public: return true Stores the menu, i.e. restores the screen and the control goes to calling function. !short: endclass