//  TestProject for Windows application
Use DFAllEnt.pkg
// The code for the test program has been changed to be VDF 12 compliant.
//Use cCJStandardCommandBarSystem.pkg

Object oHtmlHelp is a cHtmlHelp
End_Object

Object oApplication is a cApplication
    Set pbPreserveEnvironment to True
    Set peHelpType to htHtmlHelp     
    Set psCompany to "RDC Tools International"
    Set psProduct to "RegCheck 2 Test Program"
    Set psVersion to "2012.1"
End_Object

// *** Must be used after the cApplication object!
Use RegCheck2.pkg                                                
// This is what you normally would put after the Use statement.
// In this test program we just want to _report_ what is
// needed to be changed on the machine. The checking is done
// in the view object.
//Send DoCheckRegistrySettings of ghoRegCheck2 // Start checking. (Main procedure)

#IF (FMAC_VERSION > 15)
    Use cToolTipController.pkg
    Object oToolTipController is a cToolTipController
        Move Self to ghoToolTipController
        Set pbBalloonStyle to False
        Set piIcon to TTI_INFO
        Set psTitle to "Information"
        Set piMaxWidth to 400
        Set piDurationPopup to 14000    // 14 seconds.
    End_Object
#ELSE
    Procedure Set psToolTip String sTooltip
    End_Procedure                          
    Function psToolTip Returns String
    End_Function
#ENDIF

//Use oEditContextMenu.pkg
//Use oDEOEditContextMenu17.pkg

Object oMain is a Panel
    Set Label to "RegCheck 2 Test Program"
    Set Location to 4 3
    Set Size to 333 486
    Set Icon to "RegCheck256N32.ico"

    Property Handle phoViewMenu 0
    Property Handle phoReportMenu 0

//    Object oCommandBarSystem is a cCJCommandBarSystem
//        Set pbTimerUpdate to True
//
//        Procedure OnCreateCommandBars
//            Handle hoOptions
//            Get OptionsObject to hoOptions
//            Forward Send OnCreateCommandBars
//        End_Procedure
//
//        Object oMenuBar is a cCJMenuBar
//
//            Object oFileMenu is a cCJMenuItem
//                Set peControlType to xtpControlPopup          
//                Set psCaption   to "&File"
//                Set psDescription to "Find, Save, Delete, Clear information or quit this application."
//                Set psCategory to "Menus"
//
//                Object oClearMenuItem is a cCJClearMenuItem
//                    Set pbAddToDesignerMenu to True
//                End_Object
//
//                Object oClearAllMenu is a cCJClearAllMenuItem
//                    Set pbAddToDesignerMenu to True
//                End_Object
//
//                Object oPromptMenuItem is a cCJPromptMenuItem
//                    Set pbAddToDesignerMenu to True
//                    Set pbControlBeginGroup to True
//                End_Object
//
//                Object oFindMenuItem is a cCJFindMenuItem
//                    Set pbAddToDesignerMenu to True
//                    Set pbControlBeginGroup to True
//                End_Object
//
//                Object oFindNextMenu is a cCJFindNextMenuItem
//                    Set pbAddToDesignerMenu to True
//                End_Object
//
//                Object oFindPreviousMenu is a cCJFindPreviousMenuItem
//                    Set pbAddToDesignerMenu to True
//                End_Object
//
//                Object oFindFirstMenu is a cCJFindFirstMenuItem
//                    Set pbAddToDesignerMenu to True
//                End_Object
//
//                Object oFindLastMenu is a cCJFindLastMenuItem
//                    Set pbAddToDesignerMenu to True
//                End_Object
//
//                Object oSaveMenuItem is a cCJSaveMenuItem
//                    Set pbAddToDesignerMenu to True
//                    Set pbControlBeginGroup to True
//                End_Object
//
//                Object oDeleteMenuItem is a cCJDeleteMenuItem
//                    Set pbAddToDesignerMenu to True
//                End_Object
//
//                Object oExitMenu is a cCJExitMenuItem
//                    Set pbControlBeginGroup to True
//                End_Object
//
//            End_Object
//
//            Object oViewMenu is a cCJMenuItem
//                Set peControlType to xtpControlPopup
//                Set psCaption to "&View"
//                Set psToolTip to "View"
//                Set psDescription to "Available Views"
//
//                Object ooRegCheck2ViewMenuItem is a cCJMenuItem
//                    Set psCaption to "oRegCheck2_View"
//                    Set psTooltip to "oRegCheck2_View"
//                
//                    Procedure OnExecute Variant vCommandBarControl
//                        Handle hoClient
//                        Get Client_Id to hoClient
//                        Send Activate_oRegCheck2_View of hoClient
//                    End_Procedure
//                End_Object
//
//                // for testing we define the view and report menus for auto activate
//                Delegate Set phoViewMenu to Self
//            End_Object
//            
//            Object oReportMenu is a cCJMenuItem
//                Set peControlType to xtpControlPopup          
//                Set psCaption to "&Report"
//                Set psToolTip to "Report"
//                Set psDescription to "Available Reports"
//            End_Object
//
//            Object oNavigateMenu is a cCJMenuItem
//                Set peControlType to xtpControlPopup      
//                Set psCaption to "&Navigate"    
//                Set psTooltip to "Navigate"    
//                Set psDescription to "Move to different areas of the application"
//
//                Object oNextAreaMenu is a cCJNextAreaMenu
//                End_Object
//
//                Object oPriorAreaMenu is a cCJPriorAreaMenu
//                End_Object
//
//                Object oNextViewMenu is a cCJNextViewMenu
//                End_Object
//
//                Object oPriorViewMenu is a cCJPriorViewMenu
//                End_Object
//
//                Object oPromptMenu is a cCJPromptMenuItem
//                    Set pbControlBeginGroup to True
//                End_Object
//
//                Object oZoomMenu is a cCJZoomMenuItem
//                End_Object
//
//            End_Object
//
//            Object oWindowMenu is a cCJMDIWindowsMenuItem
//                Set peControlType to xtpControlPopup
//                Set psCaption to "&Window"
//                Set psToolTip to "Window"
//                Set psDescription to "Display Current Views and set other display options."    
//
//                // These are the static windows items. More will be created in onInitPopup 
//                Object oDisplayOptionsMenu is a cCJMenuItem
//                    Set peControlType to xtpControlPopup          
//                    Set psCaption to "&Display Options"
//                    Set psToolTip to "Display Options"
//                    Set psDescription to "Set display options"
//
//                    Object oStatusbarMenu is a cCJStatusbarMenuItem
//                    End_Object
//
//                    Object oAutoArrangeIconsMenu is a cCJAutoArrangeIconsMenuItem
//                    End_Object
//
//                    Object oRestoreMenusMenu is a cCJRestoreMenusMenuItem
//                        Set pbControlBeginGroup to True
//                    End_Object
//
//                End_Object
//
//                Object oCascadeMenu is a cCJCascadeMenuItem
//                    Set pbControlBeginGroup to True
//                End_Object
//
//                Object oHorizTile is a cCJTileHorizontally
//                End_Object
//
//                Object oVertTile is a cCJTileVertically
//                End_Object
//
//                Object oMinimizeMenuItem is a cCJMinimizeWindowsMenuItem
//                    Set pbControlBeginGroup to True
//                End_Object
//
//                Object oRestoreMenuItem is a cCJRestoreWindowsMenuItem
//                End_Object
//
//                Object oArrangeIconsMenuItem is a cCJAutoArrangeIconsMenuItem
//                    Set pbControlBeginGroup to True
//                End_Object
//
//            End_Object
//
//            Object oHelpMenu is a cCJMenuItem
//                Set peControlType to xtpControlPopup    
//                Set psCaption to "&Help"
//                Set psDescription to "Access Information for learning and using this DataFlex application."
//                Set psToolTip to "Help"
//
//                Object oHelpMenuItem is a cCJHelpMenuItem 
//                End_Object
//
//                Object oAboutMenuItem is a cCJAboutMenuItem
//                End_Object
//
//            End_Object
//
//        End_Object
//
//        Object oFindToolBar is a cCJToolbar
//            Set psTitle to "Finding Toolbar"
//
//            Object oFindFirstTool is a cCJFindFirstMenuItem
//            End_Object
//
//            Object oFindPreviousTool is a cCJFindPreviousMenuItem
//            End_Object
//
//            Object oFindMenuTool is a cCJFindMenuItem
//            End_Object
//
//            Object oFindNextTool is a cCJFindNextMenuItem
//            End_Object
//
//            Object oFindLastTool is a cCJFindLastMenuItem
//            End_Object
//
//            Object oPromptToolItem is a cCJPromptMenuItem
//                Set pbControlBeginGroup to True
//            End_Object
//
//        End_Object
//
//        Object oFileToolBar is a cCJToolbar
//            Set psTitle to "Data Entry Toolbar"
//
//            Object oClearToolItem is a cCJClearMenuItem
//                Set peControlStyle to xtpButtonIconAndCaption
//            End_Object
//
//            Object oClearAllToolItem2 is a cCJClearAllMenuItem
//                Set peControlStyle to xtpButtonIconAndCaption
//            End_Object
//
//            Object oSaveToolItem is a cCJSaveMenuItem
//                Set peControlStyle to xtpButtonIconAndCaption
//                Set pbControlBeginGroup to True
//            End_Object
//
//            Object oDeleteToolItem is a cCJDeleteMenuItem
//                Set peControlStyle to xtpButtonIconAndCaption
//            End_Object
//
//        End_Object
//
//        Object oEditToolBar is a cCJToolbar
//            Set psTitle to "Edit Toolbar"
//
//            Object oCutToolbarItem is a cCJCutMenuItem
//            End_Object
//
//            Object oCopyToolbarItem is a cCJCopyMenuItem
//            End_Object
//
//            Object oPasteToolbarItem is a cCJPasteMenuItem
//            End_Object
//
//            Object oDeleteEditToolbarItem is a cCJDeleteEditMenuItem
//                Set pbControlBeginGroup to True
//            End_Object
//
//        End_Object
//
//        Object oStatusBar is a cCJStatusBar
//
//            Object oStatusPane1 is a cCJStatusBarPane
//                Set piID to sbpIDIdlePane
//                Set pbStyleStretch to True
//            End_Object
//
//            Object oStatusPane2 is a cCJStatusBarPane
//                Set phoViewPane to Self
//                Set pbStyleStretch to True
//            End_Object
//
//        End_Object
//
//    End_Object // oCommandBarSystem

    Object oClientArea is a ClientArea

//        Use Dd_debug.dg // This Provides access to dd debugger by pressing ctrl+d within any view. Good for debugging

        Use StdAbout.pkg
        Use RegCheck2_View.vw

        Procedure Activate_About
            Send DoAbout (psProduct(ghoApplication)) (psVersion(ghoApplication)) (psCompany(ghoApplication)) "nils.svedmyr@rdctools.com" "RegCheck048N32.bmp/3d"
        End_Procedure

    End_Object


    // All of the code below are methods and augmentations which makes this work well as a test program. This:
    // 1. Supports an auto-activate feature where all dialogs in the view and report menu are activated upon startup
    // 2. forces the panel to resize if it is not large enough to accomodate all of the views.
    // This code was placed directly in the testproject template and, therefore, directly in the .src file so
    // a developer can easily modify this to fit their own needs. It is not expected that these techniques would
    // get used in actual deployed projects.

    // special test component code to activate all views and reports. For testing we assume
    // that you want to see everything.

//    Procedure AutoActivate
//        Handle hoMenu
//
//        // this activates all views from the view menu
//        Get phoViewMenu to hoMenu
//        If hoMenu Begin
//           Broadcast Send Execute of hoMenu
//        End
//
//        // this activates all views from the report view menu
//        Get phoReportMenu to hoMenu
//        If hoMenu Begin
//           Broadcast Send Execute of hoMenu
//        End
//    End_Procedure

    // This checks all views within the client area to make sure that they fit within
    // the client area. If not we will adjust the main panel so everything fits. This
    // can only be done after the objects are all activated.

//    Procedure MakeGoodPanelSize
//        Handle hoView hoClient
//        Integer iSize iLoc iHeight iWidth iOldHeight iOldWidth 
//        Integer iLeft iTop iRight iBottom
//        Get Client_Id to hoClient
//        If hoClient Begin
//            
//            // if not using commandbars or for some reason they are not created yet we
//            // will use whatever the client size is
//            If (ghoCommandBars=0 or not(IsComObjectCreated(ghoCommandBars))) Begin
//                Get GuiSize of hoClient to iSize  // starting size of client area
//                Move (Hi(iSize)) to iOldHeight
//                Move (Low(iSize)) to iOldWidth
//            End
//            Else Begin
//               // if commandbars are created, the actual size of the client area must be obtained
//               // from the commandbar 
//               Send ComGetClientRect of ghoCommandBars (&iLeft) (&iTop) (&iRight) (&iBottom)
//               Move (iRight-iLeft) to iOldWidth
//               Move (iBottom-iTop) to iOldHeight
//            End
//            
//            Move iOldHeight to iHeight
//            Move iOldWidth to iWidth
//            
//            // for each mdi client see if it fits, keep track of largest size needed
//            Get Next_Mdi_Dialog of hoClient True to hoView // find first
//            While (hoView)
//                Get GuiWindowSize of hoView to iSize    // size of view
//                Get GuiLocation of hoView to iLoc // location of view
//                Move (hi(iSize)+hi(iLoc)+10 max iHeight)  to iHeight // max height needed (+10 pixels is small border)
//                Move (low(iSize)+low(iLoc)+10 max iWidth) to iWidth  // max width needed
//                Get Next_Mdi_Dialog of hoClient False to hoView // find next view
//            Loop
//            Move (iHeight-iOldHeight  max 0) to iHeight // get delta compared to old size. We want delta
//            Move (iWidth-iOldWidth max 0) to iWidth     // only if the new size is bigger (i.e., > 0)
//            If  (iHeight>0 or iWidth>0) Begin
//                Get GuiSize to iSize // now add the delta to the panel size
//                Set GuiSize to (hi(iSize)+iHeight) (low(iSize)+iWidth)
//                Send Adjust_Logicals // adjust from gui to regular size
//            End
//        End
//    End_Procedure

    // special test program  augmentation which opens all views and report views and
    // makes sure that the size of the panel is big enough

//    Procedure End_Construct_Object
//        Boolean bAutoActivate
//        Get Auto_Activate_State to bAutoActivate
//        Forward Send End_Construct_Object
//        If bAutoActivate Begin
//            Send AutoActivate       // activate all views and report views
//            Send MakeGoodPanelSize  // make sure the panel is big enough for all of this
//        End
//    End_Procedure

End_Object

Send Activate_oRegCheck2_View of (oClientArea(oMain))
Start_UI
