#
#  Copyright (c) 1997-2002 The Protein Laboratory, University of Copenhagen
#  All rights reserved.
#
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that the following conditions
#  are met:
#  1. Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
#  2. Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
#  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
#  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
#  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
#  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
#  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
#  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
#  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
#  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
#  SUCH DAMAGE.
#
#
#  Main widget description
#
# $Id$

object Prima::Widget( Prima::Drawable)
{
# user variables
   Handle    accelTable;	            # accelerator table
   Handle    currentWidget;	         # current widget pointer
   int       cursorLock;               # cursor lock count
   NPoint    designScale;              # font width and height for view design
   char   *  helpContext;              # help context string
   char   *  hint;                     # hint tag text
   int       lockCount;                # lock count
   Font      popupFont;                # font for popup menu
   ColorSet  popupColor;               # colors for popup menu
   Handle    popupMenu;                # popup menu by default
   int       pointerType;              # pointer type, crXXX
   Point     pos;                      # last position
   int       selectingButtons;         # which mouse buttons can select a view
   Point     sizeMin;                  # default min size
   Point     sizeMax;                  # default max size
   int       tabOrder;                 # tab ordering number
   char   *  text;                     # caption text
   int       widgetClass;              # predefined system class
   List      widgets;		       # list of child widgets
   Handle *  enum_lists;               # list of currently running enumerators

#  geometry managers data
#  common:   
   int       geometry;                 # geometry manager, gtXXX
   Point     geomSize;                 # requested size, common to all managers
   GeomInfo  geomInfo;                 # managers options
#  growMode:
   int       growMode;                 # growing flags, see gmGrowXXX
   Point     virtualSize;              # fictive size not aware of size limits
#  pack:   
   Handle    packSlaves;               # first pack slave in linked list
#  place
   Handle    placeSlaves;              # first place slave in linked list

# properties
   property  SV *   accelItems;
   property  Handle accelTable;
   property  Bool   autoEnableChildren;
   property  Color  backColor;
   property  int    bottom;
   property  Bool   briefKeys;
   property  Bool   buffered;
   property  Bool   clipOwner;
   property  Color  color;
   property  Color  colorIndex( int index);
   property  Bool   current;
   property  Handle currentWidget;
   property  Point  cursorPos;
   property  Point  cursorSize;
   property  Bool   cursorVisible;
   property  NPoint designScale;
   property  Bool   enabled;
   property  int    geometry;
   property  int    geomHeight;
   property  Point  geomSize;
   property  int    geomWidth;
   property  int    growMode;
   property  Bool   firstClick;
   property  Bool   focused;
   property  SV *   helpContext;
   property  SV *   hint;
   property  int    hintVisible;
   property  int    left;
   property  Handle popup;
   property  SV *   popupItems;
   property  Bool   ownerBackColor;
   property  Bool   ownerColor;
   property  Bool   ownerFont;
   property  Bool   ownerHint;
   property  Bool   ownerShowHint;
   property  Bool   ownerPalette;
   property  Point  origin;
   property  SV  *  packInfo;
   property  SV  *  palette;
   property  SV  *  placeInfo;
   property  Point  pointerHotSpot;
   property  Handle pointerIcon;
   property  Point  pointerPos;
   property  int    pointerType;
   property  Color  popupColorIndex( int index);
   property  Bool   packPropagate;
   property  Rect   rect;
   property  int    right;
   property  Bool   scaleChildren;
   property  Bool   selectable;
   property  Bool   selected;
   property  Handle selectedWidget;
   property  int    selectingButtons;
   property  Handle shape;
   property  Bool   showHint;
   property  Point  size;
   property  Point  sizeMax;
   property  Point  sizeMin;
   property  Bool   syncPaint;
   property  int    tabOrder;
   property  Bool   tabStop;
   property  SV *   text;
   property  int    top;
   property  Bool   transparent;
   property  Bool   visible;
   property  int    widgetClass;

# direct call methods
   method   void     attach( Handle objectHandle);
   method   Bool     begin_paint();
   method   Bool     begin_paint_info();
   method   void     bring_to_front();
   method   Bool     can_close();
   method   void     cleanup();
   public   void     client_to_screen();
   method   Bool     close();
   c_only   Bool     custom_paint();
   method   void     detach( Handle objectHandle, Bool kill);
   method   void     done();
   method   void     end_paint();
   method   void     end_paint_info();
   method   Bool     exposed()                       => apc_widget_is_exposed;
   static   SV      *fetch_resource( char *className, char *name, char *classRes, char *res, Handle owner, int resType = frString);
   method   Handle   first();
   c_only   Handle   first_that( void * actionProc, void * params);
   c_only   void     handle_event ( PEvent event);
   method   void     hide();
   method   void     hide_cursor();
   import   Bool     help();
   method   void     init( HV * profile);
   method   void     insert_behind( Handle view);
   method   void     invalidate_rect( Rect rect);
   c_only   Bool     is_child( Handle possibleOwner);
   method   void     key_event( int command, int code, int key = kbNoKey, int mod = 0, int repeat = 1, Bool post = 0);
   method   Handle   last();
   method   Bool     lock();
   method   Color    map_color( Color color) => apc_widget_map_color;
   method   void     mouse_event( int command = cmMouseDown, int button = mbLeft, int mod = 0, int x = 0, int y = 0, Bool dblclk = 0, Bool post = 0);
   method   Handle   next();
   method   Handle   next_tab( Bool forward = true);
   method   Handle   next_positional( int dx, int dy);
   import   SV *     notification_types();
   method   void     post_message( SV * info1, SV * info2);
   c_only   Bool     process_accel( int key);
   import   SV *     profile_default ();
   method   Handle   prev();
   method   void     repaint();
   method   Bool     responsive()                    => apc_widget_is_responsive;
   public   void     screen_to_client();
   public   void     scroll( int dx, int dy, Rect *confine, Rect *clip, Bool withChildren);
   method   void     send_to_back();
   method   void     set( HV * profile);
   method   void     setup();
   method   void     show();
   method   void     show_cursor();
   method   Bool     showing()                       => apc_widget_is_showing;
   method   Bool     unlock();
   method   void     update_view();
   c_only   void     update_sys_handle( HV * profile);
   c_only   Bool     validate_owner( Handle * newOwner, HV * profile);
   method   Bool     validate_rect( Rect rect)       => apc_widget_validate_rect;

# properties read methods
   method   Bool     get_capture()                   => apc_widget_is_captured;
   static   Font     get_default_font( char * dummy = "");
   static   Font     get_default_popup_font( char * dummy = "");
   method   Rect     get_invalid_rect()              => apc_widget_get_invalid_rect;
   method   SV   *   get_handle();
   method   Bool     get_locked();
   method   int      get_mouse_state()               => apc_pointer_get_state;
   public   void     get_pack_slaves();
   method   Handle   get_parent();
   method   SV   *   get_parent_handle();
   public   void     get_place_slaves();
   static   Point    get_pointer_size( char * dummy = "");
   method   Font     get_popup_font();
   c_only   Handle   get_selectee();
   method   int      get_shift_state()               => apc_kbd_get_state;
   method   Point    get_virtual_size();
   public   void     get_widgets();

# properties write methods
   method   void     set_capture( Bool capture, Handle confineTo = nilHandle);
   method   void     set_centered( Bool x, Bool y);
   method   void     set_font( Font font);
   method   void     set_popup_font( Font font);

# other
   method   void     on_paint( SV * canvas);
}
