Module Dfclient.pkg

     1//************************************************************************
     2//
     3// Copyright (c) 1997-2001 Data Access Corporation, Miami Florida,
     4// All rights reserved.
     5// DataFlex is a registered trademark of Data Access Corporation.
     6//
     7// 08/19/94 JJT - Blended Classes from CB and DAF
     8// 11/12/94  Added Save_Environment / Load_Environment support in views
     9// 11/16/94 JJT - Add define_sysmenu to end_construct_object
    10// 02/14/95 JJT - Added DFGSINI for 3.01/3.05 dual support of .ini name
    11//                and section name.
    12//
    13//************************************************************************
    14// 3.1 Changes
    15// 03/28/95 JJT - Removed 0 classes. Retained layer for nav & hlp mixin
    16//                Added DF navigate and Help DEO support.
    17//                Changed name to dfclient.pkg
    18//************************************************************************
    19// 07/23/96 JJT - New Class names
    20// 11/26/97 JJT - View_Changed now checks to see if any sub-views (tab view)
    21//                are changed
    22//************************************************************************
    23// VDF8 changes
    24// 10/23/2001 JJT/SWB - Added Application object support, removed workspace and KEY support.
    25//                      Removed internal messages Parse_complex, Complex_to_String
    26//                      Removed ghoWorkspace support
    27//
    28// User Classes:
    29//
    30// dbGroup
    31// dbContainer3d
    32// dbContainer
    33//
    34// dbView
    35//
    36// dbViewToolPanel  (use for EntryModalPanel)
    37//
    38// dbViewPanel  (not fully supported)
    39//
    40//
    41
    42Use Windows.pkg
    43Use DfPanel.pkg
    44Use EnClient.pkg
    45Use DFNav_mx.pkg      // Navigation changes for DF DEOs
    46Use dfConfrm.pkg
    47Use Dfdbmdpn.pkg // adds obsolete pointerButton for dbModalPanel
    48
    49Register_Procedure DoSaveEnvironment Handle hoContainer Boolean bProgram
    50Register_Procedure DoLoadEnvironment Handle hoContainer Boolean bProgram
    51
    52//
    53//  Grouping classes: Used within views to group objects
    54//
    55//  dbContainer3d_
    56//     dbContainer3d
    57//
    58{ ClassType=Abstract }
    59{ HelpTopic=dbContainer3d_ }
    60Class dbContainer3d_ is a Container3d STARTMAC ECstart
    61    // the startmac is used to catch old obsolete code at compiletime
    62    Import_Class_Protocol Entry_Client_mixin // mixin in CM DEO behaviors
    63
    64    //  Defeat the activating augmentation for auto-locate
    65    //
    66    { MethodType=Event  NoDoc=True }
    67    // as of 15.1 we changed all deactivating/activating signatures to not return values (see windows.pkg / ComboForm / Activating for more)
    68    Procedure Activating //Returns Integer
    69      integer RVal
    70      forward get MSG_activating to rVal
    71      Procedure_Return rVal
    72    End_Procedure
    73End_Class
    74
    75{ DataAware=True }
    76{ HelpTopic=dbContainer3d }
    77Class dbContainer3d is a dbContainer3d_
    78    Procedure Construct_Object
    79       Forward Send Construct_Object No_Image
    80       Send Define_DFNavigation  // GUI navigate changes
    81    End_Procedure // Construct_Object
    82    Import_Class_Protocol DFNavigate_Mixin
    83End_Class
    84
    85//
    86// Group Based containers
    87//
    88//  dbGroup_
    89//     dbGroup
    90//
    91{ ClassType=Abstract }
    92{ HelpTopic=dbGroup_ }
    93Class dbGroup_ is a Group STARTMAC ECstart
    94    // the startmac is used to catch old obsolete code at compiletime
    95
    96    Import_Class_protocol Entry_Client_mixin
    97
    98    //  Defeat the activating augmentation for auto-locate
    99    //
   100    { MethodType=Event  NoDoc=True }
   101    // as of 15.1 we changed all deactivating/activating signatures to not return values (see windows.pkg / ComboForm / Activating for more)
   102    Procedure Activating //Returns Integer
   103      integer RVal
   104      forward get MSG_activating to rVal
   105      Procedure_Return rVal
   106    End_Procedure
   107End_Class
   108
   109{ DataAware=True }
   110{ HelpTopic=dbGroup }
   111Class dbGroup is a dbGroup_
   112    Procedure Construct_Object
   113       Forward Send Construct_Object No_Image
   114       Send Define_DFNavigation  // GUI navigate changes
   115    End_Procedure // Construct_Object
   116    Import_Class_Protocol DFNavigate_Mixin
   117End_Class
   118
   119
   120//
   121// Invisible Grouping object
   122//
   123//   dbContainer - invisible container
   124//
   125
   126{ HelpTopic=dbContainer }
   127{ OverrideProperty=Bitmap DesignTime=False }
   128{ OverrideProperty=Bitmap_Style DesignTime=False }
   129{ OverrideProperty=Border_Style DesignTime=False }
   130{ OverrideProperty=Color DesignTime=False }
   131{ OverrideProperty=Focus_Mode DesignTime=False }
   132{ OverrideProperty=FontItalics DesignTime=False }
   133{ OverrideProperty=FontSize DesignTime=False }
   134{ OverrideProperty=FontUnderline DesignTime=False }
   135{ OverrideProperty=FontWeight DesignTime=False }
   136{ OverrideProperty=Location DesignTime=False }
   137{ OverrideProperty=OEM_Translate_State DesignTime=False }
   138{ OverrideProperty=peAnchors DesignTime=False }
   139{ OverrideProperty=piMaxSize DesignTime=False }
   140{ OverrideProperty=piMinSize DesignTime=False }
   141{ OverrideProperty=Size DesignTime=False }
   142{ OverrideProperty=TextColor DesignTime=False }
   143{ OverrideProperty=Transparent_State DesignTime=False }
   144{ OverrideProperty=View_Mode DesignTime=False }
   145{ OverrideProperty=Visible_State DesignTime=False }
   146Class dbContainer is an dbContainer3d
   147    Import_Class_Protocol NonVisual_Container_Mixin
   148End_Class
   149
   150//
   151// View Support (views are mdi dialogs)
   152//
   153//   dbAppClient_
   154//     dbAppView_
   155//       dbView
   156//
   157{ ClassType=Abstract }
   158{ OverrideProperty=Changed_State InitialValue=False }
   159{ HelpTopic=dbAppClient_ }
   160Class dbAppClient_ is a View  STARTMAC ECstart
   161    // the startmac is used to catch old obsolete code at compiletime
   162
   163    Import_Class_Protocol Entry_Client_mixin
   164
   165    //  Defeat the activating augmentation for auto-locate
   166    //
   167    { MethodType=Event  NoDoc=True }
   168    // as of 15.1 we changed all deactivating/activating signatures to not return values (see windows.pkg / ComboForm / Activating for more)
   169    Procedure Activating //Returns Integer
   170        Integer RVal
   171        forward get MSG_activating to rVal
   172        Procedure_Return rVal
   173    End_Procedure
   174End_Class
   175
   176{ ClassType=Abstract }
   177{ HelpTopic=dbAppView_ }
   178Class dbAppView_ is a dbAppClient_
   179    import_Class_protocol entry_view_Client_mixin
   180End_Class
   181
   182{ DDOHost=True }
   183{ DataAware=True }
   184{ HelpTopic=dbView }
   185Class dbView is a dbAppView_
   186
   187    Procedure Construct_Object
   188        Forward Send Construct_Object No_Image
   189
   190//        { Visibility=Private }
   191//        property string psWindowPlacement '' // used to keep track of window placment when deactivated object is reactivated.
   192
   193        Send Define_DFNavigation  // GUI navigate changes
   194        // dialog views get activated as popup objects.
   195        set Dso_Detach_Mode to Detach_Always
   196
   197        // set default verify messages. These are good defaults. The
   198        // developer may wish to change these in their object or sub-class.
   199        // Note: these messsages are defined in dfconfrm.pkg
   200        Set Verify_Data_Loss_Msg   to (RefFunc(Data_Loss_Confirmation))
   201        Set Verify_Delete_Msg      to (RefFunc(Delete_Confirmation))
   202        Set Verify_Save_Msg        to (RefFunc(Save_Confirmation))
   203        Set Verify_Exit_Msg        to (RefFunc(Exit_Loss_Confirmation))
   204        //
   205    End_Procedure // Construct_Object
   206
   207    Import_Class_Protocol DFNavigate_Mixin
   208
   209    //  Returns TRUE to indicate that this is a DEO. This is used by
   210    //  delegation to figure out if you are within a DEO and should therefore
   211    //  send a DEO message. DEO clients set this true
   212    //
   213    { MethodType=Property }
   214    Function DEO_Object Returns integer
   215        Function_Return 1
   216    End_Function // DEO_Object
   217
   218    //
   219    //  Activate message for views that:
   220    //  1. restores the view if it is minimized
   221    //  2. Maintains the current scope's focus.
   222    //
   223    { Visibility=Private }
   224    Procedure Activate_current_scope
   225        If ( View_mode(self)=VIEWMODE_ICONIZE ) ;
   226        Set view_mode to viewmode_normal
   227        Set Current_Scope to self
   228    End_Procedure // Activate_current_scope
   229
   230    // ------------deprecated....Use Object_label.
   231    //  Pass full object name - return the relative name
   232    //  e.g.,  Main.View.Obj1 --> Obj1
   233    { Visibility=Private Obsolete=True MethodType=Property }
   234    Function Local_Object_name string nm returns string
   235        integer ps
   236        Repeat
   237        pos "." in nm to ps
   238        If ps eq 0 function_return nm
   239        increment ps
   240        Mid Nm to Nm 255 ps
   241        Loop
   242    end_function
   243
   244    { MethodType=Property Visibility=Private }
   245    Function View_Changed returns Integer
   246        Integer Changed
   247        // first see if any DDOs at this level are changed.
   248        Broadcast Get Data_Set_Should_Save to Changed // Ask for changes in Data-sets
   249        // if no changes, see if we have any sub-views that are changed
   250        // This is used to catch tab-view pages.
   251        If not Changed broadcast get SubView_Changed to Changed
   252        Function_Return Changed
   253    End_Function
   254
   255// as of 15.0, these were moved to AppDialog super class
   256//    //
   257//    //  Save View information to dfwin.ini file. Save as:
   258//    //  View_ObjectName=LOC:Row,Col  e.g., Cust_Ent=LOC:10,20
   259//    //     Leaving room for growth here.
   260//    //
   261//    { Visibility=Private }
   262//    Procedure Save_Environment
   263//        String sWindowPlacement
   264//        Address aWindowPlacement
   265//        Boolean bSuccess
   266//        Integer eShowCmd
   267//        // save environment to the object, in case it is reactivated during the same run.
   268//        ZeroType tWindowPlacement To sWindowPlacement
   269//        Put tWindowPlacement_size To sWindowPlacement at tWindowPlacement.length
   270//        Move (AddressOf(sWindowPlacement)) To aWindowPlacement
   271//        Move (GetWindowPlacement(Window_Handle(self), aWindowPlacement)) To bSuccess
   272//        If bSuccess Begin
   273//            // if minimized, assume restored, as we don't want to restart minimized!
   274//            GetBuff from sWindowPlacement at tWindowPlacement.showCmd To eShowCmd
   275//            If (eShowCmd = SW_SHOWMINIMIZED) Begin
   276//                Put SW_SHOWNORMAL To sWindowPlacement at tWindowPlacement.showCmd
   277//            End
   278//            Set psWindowPlacement to sWindowPlacement
   279//        End
   280//        // also save environment to the application object, so it can be used when reloaded
   281//        If ghoApplication Send DoSaveEnvironment of ghoApplication self False
   282//    End_Procedure
   283//
   284//    // Augment to check for view string in .INI. Currently, if found
   285//    // set the location
   286//    //
   287//    { Visibility=Private }
   288//    Procedure Load_Environment
   289//        String sWindowPlacement
   290//        boolean bSuccess
   291//        // if view has alrady been activated and deactivated use the setting from windowplacement saved in the object
   292//        get psWindowPlacement to sWindowPlacement // Make sure we GET here and not Move. This thing can contain zeros which will get lost in expr.
   293//        If (length(sWindowPlacement)) begin // if length is zer0, assume it has never been deactivated.
   294//            Move (SetWindowPlacement(Window_Handle(self), addressof(sWindowPlacement))) To bSuccess
   295//        End
   296//        else Begin
   297//            If ghoApplication Send DoLoadEnvironment of ghoApplication self False
   298//        end
   299//    End_Procedure
   300
   301//    { MethodType=Event  NoDoc=True }
   302//    Procedure Notify_Exit_Application
   303//        Send Save_Environment
   304//    End_procedure
   305
   306//    { NoDoc=True }
   307//    Procedure Add_Focus Integer hoBase Returns Integer
   308//        Integer iretVal bState
   309//        get Visible_state to bState
   310//        Set Visible_state to False
   311//        Forward Get Msg_Add_Focus hoBase To iretVal
   312//        If (iRetVal=0) Send Load_Environment
   313//        Set Visible_state to bState
   314//        Procedure_Return iRetVal
   315//    End_Procedure
   316
   317    { Visibility=Private }
   318    Procedure Close_Client
   319        Send Exit_Function
   320    End_Procedure
   321
   322// as of 15.0, these were moved to AppDialog super class
   323//
   324//    { MethodType=Event  NoDoc=True }
   325//    Procedure Entering_Scope returns Integer
   326//        Integer rVal
   327//        Forward Get MSG_Entering_Scope to rVal
   328//        If not rVal send Show_View_Name (Label(self))
   329//    End_Procedure
   330//
   331//    { MethodType=Event  NoDoc=True }
   332//    Procedure Exiting_Scope integer whereto returns Integer
   333//        Integer rVal
   334//        Forward Get MSG_Exiting_Scope whereto to rVal
   335//        If not rVal Send Show_View_Name ''
   336//    End_Procedure
   337//
   338//    { Visibility=Private }
   339//    Procedure Show_view_Name string sHelp
   340//        Integer rVal Id
   341//        Get Statusbar_id to id
   342//        If Id Send Show_View_Name to Id sHelp
   343//    End_Procedure
   344//
   345//    { Visibility=Private }
   346//    Function Should_Save_Recursive returns integer
   347//        Function_return (View_Changed(self))
   348//    End_Function
   349//
   350//    // This is augmented to send save_environment during a view close (was in close_panel)
   351//    // we set view_mode to normal if it is zoomed. This is needed to make the MDI stuff work
   352//    // properly with the save/load environment. The Saved environment data will make it zoom if needed.
   353//    //
   354//    { NoDoc=True }
   355//    procedure deactivate integer eType returns integer
   356//       integer eArea iFail
   357//       Boolean bPreserveEnvironment
   358//       Move (if(num_arguments=0, AREA_TYPE, eType)) to eArea // in case no param is passed
   359//       if (eArea<>0) ;
   360//           Forward get msg_deactivate eArea to iFail
   361//       else Begin
   362//           send Save_environment
   363//           forward get msg_deactivate eArea to iFail
   364//           // this works around a problem where maximized MDI views get saved but don't come back
   365//           // correctly when loaded again without exiting. It turns out the the MDI client restores
   366//           // the view sometimes without telling view_mode. If view_mod is normal, it always works.
   367//           // This must happen after the view is deactivated!
   368//
   369//           If ghoApplication ;
   370//               Get pbPreserveEnvironment of ghoApplication to bPreserveEnvironment
   371//           // do these checks to have as small of an effect as possible.
   372//           if (bPreserveEnvironment and iFail=0 and view_mode(self)=VIEWMODE_ZOOM) ;
   373//               set view_mode to VIEWMODE_NORMAL
   374//       end
   375//       function_return iFail
   376//    end_procedure
   377
   378
   379
   380End_Class
   381
   382
   383
   384//
   385// ToolPanel Based Classes
   386//
   387//  dbFloatingPanel_
   388//     dbFloatingPanel
   389//        dbViewFloatingPanel
   390//           dbViewToolPanel
   391//           dbModalPanel <---this will get used
   392//
   393{ ClassType=Abstract }
   394{ HelpTopic=dbFloatingPanel_ }
   395Class dbFloatingPanel_ is a FloatingPanel STARTMAC ECstart
   396    // the startmac is used to catch old obsolete code at compiletime
   397
   398    Import_Class_Protocol Entry_Client_mixin
   399
   400    //  Defeat the activating augmentation for auto-locate
   401    //
   402    { MethodType=Event  NoDoc=True }
   403    // as of 15.1 we changed all deactivating/activating signatures to not return values (see windows.pkg / ComboForm / Activating for more)
   404    Procedure Activating //Returns Integer
   405      integer RVal
   406      forward get MSG_activating to rVal
   407      Procedure_Return rVal
   408    End_Procedure
   409End_Class
   410
   411{ ClassType=Abstract }
   412{ HelpTopic=dbFloatingPanel }
   413Class dbFloatingPanel is a dbFloatingPanel_
   414    Procedure Construct_Object
   415       Forward Send Construct_Object No_Image
   416       Send Define_DFNavigation  // GUI navigate changes
   417       Set Minimize_Icon to FALSE
   418       Set Maximize_Icon to FALSE
   419    End_Procedure // Construct_Object
   420
   421    Import_Class_Protocol DFNavigate_Mixin
   422
   423    //  Returns TRUE to indicate that this is a DEO. This is used by
   424    //  delegation to figure out if you are within a DEO and should therefore
   425    //  send a DEO message. DEO clients set this true
   426    //
   427    { MethodType=Property }
   428    Function DEO_Object Returns integer
   429        Function_Return 1
   430    End_Function // DEO_Object
   431
   432    // we Modify this not delegate and look for a parent verify exit msg if this msg is 0.
   433    // We assume that toolpanels and dbModalPanels are self contained in terms of opening and closing
   434    // and therefore should only use themselves to figure out if there is a verify exit msg. This is needed
   435    // in case a db modal panel physically placed inside of another DEO.
   436    { MethodType=Property  NoDoc=True }
   437    function Verify_Exit_msg returns integer
   438        integer msg#
   439        get private.verify_exit_msg to msg#
   440        // don't look at parent DEOs like we do elsewhere.
   441        //if (msg# = 0 AND Component_State(self)) ;
   442        //    delegate get verify_exit_msg to msg#
   443        function_return msg#
   444    end_function
   445
   446End_Class
   447
   448{ ClassType=Abstract }
   449{ HelpTopic=dbViewFloatingPanel }
   450Class dbViewFloatingPanel is a dbFloatingPanel
   451    import_Class_protocol entry_view_Client_mixin
   452End_Class
   453
   454{ ClassType=Abstract }
   455{ HelpTopic=dbViewToolPanel }
   456Class dbViewToolPanel is a dbViewFloatingPanel
   457
   458   Procedure Construct_Object
   459      Forward Send Construct_Object No_Image
   460      Set Extended_Window_Style To WS_EX_TOOLWINDOW True
   461   End_Procedure // Construct_Object
   462
   463End_Class
   464
   465//  EntryModalPanel
   466
   467{ DDOHost=True }
   468{ DataAware=True }
   469{ DesignerClass=cDTModalPanel }
   470{ OverrideProperty=Column_Offset DesignTime=True }
   471{ OverrideProperty=Row_Offset DesignTime=True }
   472{ OverrideProperty=StatusBar_Id DesignTime=False }
   473{ OverrideProperty=ToolBar_Id DesignTime=False }
   474{ OverrideProperty=Icon DesignTime=False }
   475{ ComponentType=SLClass }
   476{ HelpTopic=dbModalPanel }
   477Class dbModalPanel is a dbViewFloatingPanel
   478  Procedure Construct_Object
   479     Forward Send Construct_Object No_Image
   480
   481     Set Extended_Window_Style To WS_EX_DLGMODALFRAME True
   482     Set Modal_State to TRUE
   483
   484     { Obsolete=True }
   485     { DesignTime=False }
   486     Property Integer List_Object  0
   487
   488     { Obsolete=True }
   489     { DesignTime=False }
   490     Property Integer Button_Height     14
   491     { Obsolete=True }
   492     { DesignTime=False }
   493     Property Integer Button_Width      50
   494
   495     { Visibility=Private Obsolete=True }
   496     Property Integer Max_Text_Extent   0
   497
   498     Object Button_Ids is an array
   499     End_Object // Button_Ids
   500  End_Procedure // Construct_Object
   501
   502  { MethodType=Property Visibility=Private Obsolete=True }
   503  Function Button_Count returns integer
   504     Function_Return (Item_count(Button_Ids))
   505  End_Function // Button_Count
   506
   507  { Obsolete=True }
   508  Procedure Add_Button string sLabel integer hMsg integer hoTo
   509     integer hoBtn tx
   510     // 8.2 - use newer syntax for creating dynamic objects
   511     Get Create U_PointerButton to hoBtn
   512     set peAnchors of hoBtn to anBottomRight
   513     Set Value of hoBtn 0 to sLabel
   514     Set Message of hoBtn 0 to hMsg
   515     If (Num_Arguments>2) ;
   516         Set aux_value of hoBtn 0 to hoTo
   517     get Text_Extent of hoBtn sLabel to tx
   518     Move (low(tx)) to tx
   519     Set Array_Value of Button_Ids (Button_Count(self)) to hoBtn
   520     if (tx > Max_Text_Extent(self));
   521          Set Max_Text_Extent to tx
   522  End_Procedure // Add_Button
   523
   524  { Visibility=Private Obsolete=True }
   525  Procedure Size_Buttons
   526     integer bheight bwidth nb obj Bobj bt mt gsiz gwd
   527
   528     Get button_height to bheight
   529     Get button_width  to bwidth
   530     Get Button_count to nb
   531     decrement nb
   532
   533     Move Button_ids to obj
   534
   535     For bt from 0 to nb
   536         Get integer_value of obj bt to bobj // button id
   537         Set Size of bobj to bheight bwidth       // set dflt size
   538         If bt eq 0 Begin
   539            get Max_Text_Extent to mt
   540            Add 8 to mt
   541            get guisize of bobj to gsiz
   542            Move (low(gsiz)) to gwd
   543            if gwd lt mt Begin
   544               set guisize of bobj to (hi(gsiz)) mt
   545               send adjust_logicals to bobj
   546               Move (low(size(bobj))) to bwidth
   547               Set Button_width to bwidth
   548            end
   549         end
   550     Loop
   551  End_Procedure // Size_Buttons
   552
   553  { Visibility=Private Obsolete=True }
   554  Procedure Position_Child_Objects
   555     integer lsz psz wd pwd ht llc nb mt bobj obj cht col bt list_obj
   556     integer rmrgn swd
   557
   558    If (not(pbSizeToClientArea(Self))) Begin
   559         // if using old sizing, we have not changed anything for 14.0
   560         If (caption_bar(Self)) ;
   561            Move (Hi(Physical_fontsize(Self))+4+6) to cht
   562         Else Move 0 to cht
   563    
   564         Get GUISize to psz               // size of panel
   565         Get List_Object to List_obj      // id of the list object
   566         If list_obj Begin
   567            Get GUISize of list_obj to lSz
   568            Get GUIlocation of list_obj to llc
   569            Move (low(llc)+low(lsz)+2) to rmrgn
   570         End
   571         Else Move (low(psz)-8) to rmrgn
   572    
   573         Get Button_count to nb        // number of buttons
   574    
   575         If nb eq 0 ;
   576            Move ( hi(psz) - 4 - cht - 8) to ht
   577         Else Begin
   578            Move Button_ids to obj
   579            Get integer_value of obj 0 to bobj
   580            Get guisize of bobj to ht
   581            Move (low(ht)) to wd
   582            Move ( hi(ht)) to ht
   583            Move 8 to swd // width of each space
   584            If ( (rmrgn - ((wd+swd)*nb-swd)) < 0 ) ;
   585               Move 2 to swd
   586            Move ( hi(psz) - ht - 4 - cht - 8) to ht
   587    
   588            Move (rmrgn-wd) to col
   589            Decrement nb
   590            While nb ge 0
   591              Get integer_value of obj nb to bobj
   592              Set GUIlocation of bobj to ht col
   593              Send Adjust_Logicals to bobj
   594              Move (col - swd - wd) to col
   595              Decrement nb
   596            End
   597         End
   598    
   599         If list_obj Begin
   600            Get GUISize of list_obj to lSz
   601            //**get fx_GUISize of list_obj to lSz
   602            Get GUIlocation of list_obj to llc
   603            Move ( ht - Hi(llc) - 12 ) to ht
   604            Set GUIsize of list_obj to ht (low(lsz))
   605            Send Adjust_Logicals to list_obj
   606         End
   607    End
   608    Else Begin
   609
   610       // this is still obsolete, but we will make it work with client sizing, which makes it simpler actually
   611       // bote that 8 is used through out as the GUI spacing amount. This is legacy and will not be changed
   612
   613         Get GUISize to psz               // size of panel
   614         Get List_Object to List_obj      // id of the list object
   615         If list_obj Begin
   616            Get GUISize of list_obj to lSz
   617            Get GUIlocation of list_obj to llc
   618            Move (low(llc)+low(lsz)) to rmrgn
   619         End
   620         Else Begin
   621            Move (low(psz)-8) to rmrgn
   622         End
   623    
   624         Get Button_count to nb        // number of buttons
   625    
   626         If nb eq 0 ;
   627            Move ( hi(psz) ) to ht
   628         Else Begin
   629            Move Button_ids to obj
   630            Get integer_value of obj 0 to bobj
   631            Get guisize of bobj to ht
   632            Move (low(ht)) to wd
   633            Move ( hi(ht)) to ht
   634            Move 8 to swd // width of each space
   635            Move ( hi(psz) - ht - 8) to ht
   636    
   637            Move (rmrgn-wd) to col
   638            Decrement nb
   639            While (nb>=0)
   640              Get integer_value of obj nb to bobj
   641              Set GUIlocation of bobj to ht col
   642              Send Adjust_Logicals to bobj
   643              Move (col - swd - wd) to col
   644              Decrement nb
   645            End
   646         End
   647    
   648         If list_obj Begin
   649            Get GUISize of list_obj to lSz
   650            Get GUIlocation of list_obj to llc
   651            Move ( ht - Hi(llc) - 8 ) to ht
   652            Set GUIsize of list_obj to ht (low(lsz))
   653            Send Adjust_Logicals of list_obj
   654         End
   655     End
   656  End_Procedure
   657
   658  Procedure End_Construct_Object
   659     Send Size_Buttons
   660     Send Position_Child_Objects
   661     Forward Send end_construct_object
   662  end_Procedure
   663
   664  { Obsolete=True }
   665  Procedure Search
   666     integer Obj#
   667     Get List_Object to obj#
   668     If Obj# Send Search to Obj#
   669  End_Procedure // Search
   670
   671    // created for advanced CD_popup_object support. Returns the true handle of the
   672    // popup object whether it is a regular object or a CD popup object.
   673    Function Popup_Handle Returns Handle
   674        Function_Return Self
   675    End_Function
   676
   677End_Class
   678
   679//
   680// Panel Based Classes
   681//
   682//  dbPanel_
   683//     dbPanel
   684//        dbViewPanel_
   685//           dbViewPanel
   686//
   687// None of these are likely to be used
   688//
   689
   690{ ClassType=Abstract Visibility=Private }
   691{ HelpTopic=dbPanel_ }
   692Class dbPanel_ is a BasicPanel STARTMAC ECstart
   693    // the startmac is used to catch old obsolete code at compiletime
   694
   695    Import_Class_Protocol Entry_Client_mixin
   696
   697    //  Defeat the activating augmentation for auto-locate
   698    //
   699    { MethodType=Event  NoDoc=True }
   700    // as of 15.1 we changed all deactivating/activating signatures to not return values (see windows.pkg / ComboForm / Activating for more)
   701    Procedure Activating //Returns Integer
   702      integer RVal
   703      forward get MSG_activating to rVal
   704      Procedure_Return rVal
   705    End_Procedure
   706End_Class
   707
   708{ ClassType=Abstract  Visibility=Private }
   709{ HelpTopic=dbPanel }
   710Class dbPanel is a dbPanel_
   711    Procedure Construct_Object
   712       Forward Send Construct_Object No_Image
   713       Send Define_DFNavigation  // GUI navigate changes
   714    End_Procedure // Construct_Object
   715    Import_Class_Protocol DFNavigate_Mixin
   716End_Class
   717
   718{ ClassType=Abstract Visibility=Private }
   719{ HelpTopic=dbViewPanel_ }
   720Class dbViewPanel_ is a dbPanel
   721  import_Class_protocol entry_view_Client_mixin
   722End_Class
   723
   724{ Visibility=Private }
   725{ HelpTopic=dbViewPanel }
   726Class dbViewPanel is a dbViewPanel_
   727   Procedure Construct_Object
   728      Forward Send Construct_Object No_Image
   729   End_Procedure // Construct_Object
   730
   731  //  Returns TRUE to indicate that this is a DEO. This is used by
   732  //  delegation to figure out if you are within a DEO and should therefore
   733  //  send a DEO message. DEO clients set this true
   734  //
   735  { MethodType=Property }
   736  Function DEO_Object Returns integer
   737    Function_Return 1
   738  End_Function // DEO_Object
   739End_Class
   740