'
'Class description:
'
!short:Frame class structure:
Class Frame:
~~~~~~~~~~~~
The frame is defined on the screen, enabled is it to paint, move  and delete.

Common use:
~~~~~~~~~~~
LOCAL OBJECT Frame OF Frame
Frame:Init(Row,Col,RowSize,ColSize)
Frame:Drag()
Frame:Done()

Source code is in the C_Frame.prg

!seealso: c_loc.ngo:Loc c_box.ngo:Box c_win.ngo:Win c_window.ngo:Window c_color.ngo:Color ob_class.ngo:"Class hierarchy"

!short:~~~~~~~~~~~~~~~~~~~~~~
!short:create class Frame from Loc
!short:  export:
!short:  var RowSize  //MaxRow()-7
^BFrame:RowSize^N: public: numeric
  Actual frame height in number of rows.

!short:  var ColSize  //MaxCol()-9
^BFrame:ColSize^N: public: numeric
  Actual frame width in number of columns.

!short:  var MaxRows  //MaxRow()-3
^BFrame:MaxRows^N: public: numeric
  Maximal allowed frame height in rows. The method Frame:Drag() can change
  the frame sizes only in the range from Frame:MinRows to Frame:MaxRows.

!short:  var MaxCols  //MaxCol()-1
^BFrame:MaxCols^N: public: numeric
  Maximal allowed frame width in columns.The method Frame:Drag() can change
  the frame sizes only in the range from Frame:MinCols to Frame:MaxCols.

!short:  var MinRows  //1
^BFrame:MinRows^N: public: numeric
  Minimal allowed frame height in rows. The method Frame:Drag() can change
  the frame sizes only in the range from Frame:MinRows to Frame:MaxRows.

!short:  var MinCols  //5
^BFrame:MinCols^N: public: numeric
  Minimal allowed frame width in columns.The method Frame:Drag() can change
  the frame sizes only in the range from Frame:MinCols to Frame:MaxCols.

!short:  var Screen   //""
^BFrame:Screen^N: private: character
  The frame background is saved to restore the screen after its deleting.

!short:  var Color    //ListAsArray(m->Color:Edit)[nEnhanced]
^BFrame:Color^N: public: character
  Frame painting color.

!short:  var Visible  //false
^BFrame:Visible^N: read-only: logical
  If true, the frame is painted directly to screen, if false the frame is
  hidden.

!short:  method New=FrameNew              //o:New() --> self
^BFrame:New()^N: public: return self
  The object is filled with default values.

!short:  method Init=FrameInit            //o:Init(R,C,Rs,Cs,Clr) --> true
^BFrame:Init(R,C,Rs,Cs,Clr)^N: public: return true
  If the parameter values are not nil, they are saved to instvar variables
  of the object.

!short:  method Paint=FramePaint          //o:Paint() --> true
^BFrame:Paint()^N: public: return true
  If Frame:Visible==false the frame is painted to the screen and instvar
  variable Frame:Visible is set to true.

!short:  method Hide=FrameHide            //o:Hide() --> true
^BFrame:Hide()^N: public: return true
  If the frame is painted to the screen, it is saved and the further screen
  is refreshed.

!short:  method Move=FrameMove            //o:Move(dR,dC) --> true
^BFrame:Move(dR,dC)^N: public: return true
  The frame is move to new position on the screen. The parameters dR and dC
  are setting the relative move of the frame to old coordinates.

!short:  method Size=FrameSize            //o:Size(dR,dC) --> true
^BFrame:Size(dR,dC)^N: public: return true
  The frame size is changed. The parameters dR and dC are setting the
  relative change of the size to old values. The size change is accepted
  only if the new values are in the allowed range.

!short:  method Drag=FrameDrag            //o:Drag(lCanSize) --> true/false
^BFrame:Drag(lCanSize)^N: public: return true/false
  Reads the keyboard, after the users commands changes the frame size.
  If there was a change it returns true otherwise false.

!short:  method Done=FrameDone            //o:Done() --> true
^BFrame:Done()^N: public: return true
  If the frame is on the sreen it is saved.

!short:  endclass

