lazarus/lcl/widgetset
2004-09-14 15:48:28 +00:00
..
README Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsactnlist.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsarrow.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsbuttons.pp convert LM_BTNDEFAULT_CHANGED message to interface method 2004-09-11 14:54:01 +00:00
wscalendar.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wschecklst.pp convert LM_CLB_G/SETCHECKED to interface methods 2004-09-10 20:19:13 +00:00
wsclistbox.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wscomctrls.pp convert LM_INSERTTOOLBUTTON and LM_DELETETOOLBUTTON messages to interface methods; warning: still very ugly code, as if it is "OldToolbar" so probably, obsolete 2004-09-14 14:41:17 +00:00
wscontrols.pp convert LM_INVALIDATE message to interface method 2004-09-14 15:48:28 +00:00
wsdbctrls.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsdbgrids.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsdialogs.pp convert LM_SHOWMODAL to interface methods 2004-09-13 13:13:47 +00:00
wsdirsel.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wseditbtn.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsextctrls.pp convert LM_SETTABPOSITION message to interface method 2004-09-14 12:45:29 +00:00
wsextdlgs.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsfilectrl.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsforms.pp convert LM_SHOWMODAL to interface methods 2004-09-13 13:13:47 +00:00
wsgrids.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsimglist.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wslclclasses.pp implemented very rudimentary TTabControl 2004-09-10 16:28:51 +00:00
wsmaskedit.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsmenus.pp convert LM_POPUPSHOW message to interface method 2004-09-11 17:29:10 +00:00
wspairsplitter.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00
wsproc.pp + Added WSBitBtn interface 2004-05-16 23:24:41 +00:00
wsspin.pp convert lcl messages to new interface using methods: LM_{G,S}ETSELSTART, LM_{G,S}ETSELLEN, LM_{G,S}ETLIMITTEXT 2004-09-07 09:44:46 +00:00
wsstdctrls.pp convert LM_APPENDTEXT to interface method 2004-09-10 17:59:58 +00:00
wstoolwin.pp Modified WS class hierarchy on registration 2004-05-01 16:50:57 +00:00

This directory contains all sceleton widgetset component 
classes. These classes will never get instantiated and may 
only contain class functions.
  
=========  
IMPORTANT
=========  

Derivation and inheritance of classes is different then one
might be used to. It wil be explained by the following 
examples.

Suppose the following LCL class hierarchy:

 TLCLComponent
     |
  TControl
     |
 TWinControl
 
the corresponding WS skeleton would be

 TWSLCLComponent
      |
  TWSControl
      |
 TWSWinControl


When method X of TWSControl gets implemented by 
widgetset Q the hierarchy looks like

 TWSLCLComponent
      |
  TWSControl.X --> TQWSControl.X
      |
 TWSWinControl


Calling TWSWinControl.X doesn't call TQWSControl.X since
it's parent is TWSControl. This problem is solved by 
modifying the class hierarchy at runtime.
When a ComponentClass is registered by RegisterWSComponent,
the class is copied and the vmt entries are adjusted so 
that the hierarchy looks like:


 TWSLCLComponent
      |
  TWSControl.X --> TQWSControl.X
                        |
                   TWSWinControl

In this case, calling TWSWinControl.X will call the overriden 
TQWSControl.X. The only thing which doesn't get handled is the 
inherited statement. Suppose there is also a TQWSWinControl.X 
which implements a few extra steps. In a normal situation one 
would have called "inherited". The call to inherited is
resolved at compiletime and would in this example to a call to
TWSControl.X. That is not what we want.
To get around this, call the parent yourself:
  TWSWinControlClass(ClassParent).X