/*++

Copyright (c) 1990-1998 Microsoft Corporation
All Rights Reserved


Module Name:

    cpsuidat.c


Abstract:

    This module contains all the predefined data


--*/


#include "precomp.h"
#pragma hdrstop

#define DBG_CPSUIFILENAME   DbgTVPage



#define DBG_TVTESTCB        0x00000001
#define DBG_PUSHDLGPROC     0x00000002

DEFINE_DBGVAR(0);




HINSTANCE   hInstApp = NULL;

TCHAR   TitleName[]       = TEXT("Common Property Sheet UI Sample");
TCHAR   ClassName[]       = TEXT("CPSUISampleClass");
TCHAR   MenuName[]        = TEXT("CPSUISampleMenu");
TCHAR   OptItemName[]     = TEXT("CPSUI TreeView Sample");
TCHAR   szWinSpool[]      = TEXT("WinSpool.Drv");
CHAR    szDocPropSheets[] = "DocumentPropertySheets";

BOOL    UpdatePermission = TRUE;
BOOL    UseStdAbout      = TRUE;


BOOL
APIENTRY
PushButtonProc(
    HWND    hDlg,
    UINT    Msg,
    UINT    wParam,
    LONG    lParam
    );

CPSUICALLBACK
TVTestCallBack(
    PCPSUICBPARAM   pCPSUICBParam
    );


OPTPARAM    NoYesOP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        (LPTSTR)IDS_CPSUI_NO,                   // pData
        IDI_CPSUI_NO,                           // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        (LPTSTR)IDS_CPSUI_YES,                  // pData
        IDI_CPSUI_YES,                          // IconID
        1                                       // lParam
    }
};

EXTCHKBOX   ECB_EP_ECB = {

        sizeof(EXTCHKBOX),
        0,
        TEXT("Include Icon"),
        (LPTSTR)IDS_CPSUI_SLASH_SEP,
        TEXT("Icon"),
        IDI_CPSUI_GRAPHIC };


OPTPARAM    ECB_EP_OP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("None"),                           // pData
        IDI_CPSUI_EMPTY,                        // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("Extended CheckBox"),              // pData
        IDI_CPSUI_EMPTY,                        // IconID
        1                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("Extended Push"),                  // pData
        IDI_CPSUI_EMPTY,                        // IconID
        0                                       // lParam
    }
};


OPTTYPE ECB_EP_OT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_3STATES,                           // Type
        0,                                      // Flags OPTTF_xxxx
        3,                                      // Count
        0,                                      // BegCtrlID
        ECB_EP_OP,                              // pOptParam
        0                                       // Style, OTS_xxxx
    };

OPTTYPE NoYesOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_2STATES,                           // Type
        0,                                      // Flags OPTTF_xxxx
        2,                                      // Count
        0,                                      // BegCtrlID
        NoYesOP,                                // pOptParam
        0                                       // Style, OTS_xxxx
    };

OPTPARAM    TVOT3StatesOP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("States 1"),                       // pData
        IDI_CPSUI_PORTRAIT,                     // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("States 2"),                       // pData
        IDI_CPSUI_LANDSCAPE,                    // IconID
        1                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("States 3"),                       // pData
        IDI_CPSUI_ROT_LAND,                     // IconID
        0                                       // lParam
    }
};

OPTTYPE TVOT2StatesOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_2STATES,                           // Type
        0,                                      // Flags OPTTF_xxxx
        2,                                      // Count
        0,                                      // BegCtrlID
        TVOT3StatesOP,                          // pOptParam
        0                                       // Style, OTS_xxxx
    };

OPTTYPE TVOT3StatesOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_3STATES,                           // Type
        0,                                      // Flags OPTTF_xxxx
        3,                                      // Count
        0,                                      // BegCtrlID
        TVOT3StatesOP,                          // pOptParam
        0                                       // Style, OTS_xxxx
    };

OPTPARAM    MinRangeOP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT(""),                               // pData (postfix)
        IDI_CPSUI_EMPTY,                        // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        NULL,                                   // pData (help line)
        (DWORD)MIN_INT,                         // IconID
        MAX_INT                                 // lParam
    }
};

OPTTYPE MinRangeOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_UDARROW,                           // Type
        0,                                      // Flags OPTTF_xxxx
        2,                                      // Count
        0,                                      // BegCtrlID
        MinRangeOP,                             // pOptParam
        0                                       // Style, OTS_xxxx
    };

OPTPARAM    MaxRangeOP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT(""),                               // pData (postfix)
        IDI_CPSUI_EMPTY,                        // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        NULL,                                   // pData (help line)
        (DWORD)MIN_INT,                         // IconID
        MAX_INT                                 // lParam
    }
};

OPTTYPE MaxRangeOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_UDARROW,                           // Type
        0,                                      // Flags OPTTF_xxxx
        2,                                      // Count
        0,                                      // BegCtrlID
        MaxRangeOP,                             // pOptParam
        0                                       // Style, OTS_xxxx
    };


OPTPARAM    MinMaxRangeOP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("%"),                              // pData (postfix)
        IDI_CPSUI_SCALING,                      // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        NULL,                                   // pData (help line)
        (DWORD)MIN_INT,                         // IconID
        MAX_INT                                 // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        NULL,                                   // pData (help line)
        2,                                      // IconID
        50                                      // lParam
    }
};

OPTTYPE TVOTUDArrowOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_UDARROW,                           // Type
        0,                                      // Flags OPTTF_xxxx
        2,                                      // Count
        0,                                      // BegCtrlID
        MinMaxRangeOP,                          // pOptParam
        0                                       // Style, OTS_xxxx
    };

OPTTYPE TVOTTrackBarOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_TRACKBAR,                          // Type
        0,                                      // Flags OPTTF_xxxx
        3,                                      // Count
        0,                                      // BegCtrlID
        MinMaxRangeOP,                         // pOptParam
        0                                       // Style, OTS_xxxx
    };

OPTTYPE TVOTScrollBarOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_SCROLLBAR,                         // Type
        0,                                      // Flags OPTTF_xxxx
        3,                                      // Count
        0,                                      // BegCtrlID
        MinMaxRangeOP,                         // pOptParam
        0                                       // Style, OTS_xxxx
    };

OPTPARAM    TVOTLBCBOP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        (LPTSTR)IDS_CPSUI_NOTINSTALLED,         // pData
        IDI_CPSUI_SEL_NONE,                     // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT(" 1 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT(" 2 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT(" 4 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT(" 6 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },
    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT(" 8 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },
    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("10 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },
    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("12 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },
    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("14 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("16 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("18 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },
    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("20 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("24 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("32 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("48 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("64 MB"),                         // pData
        IDI_CPSUI_MEM,                          // IconID
        0                                       // lParam
    },
};


OPTTYPE TVOTListBoxOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_LISTBOX,                           // Type
        0,                                      // Flags OPTTF_xxxx
        COUNT_ARRAY(TVOTLBCBOP),                // Count
        0,                                      // BegCtrlID
        TVOTLBCBOP,                             // pOptParam
        0                                       // Style, OTS_xxxx
    };


OPTTYPE TVOTComboBoxOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_COMBOBOX,                           // Type
        0,                                      // Flags OPTTF_xxxx
        COUNT_ARRAY(TVOTLBCBOP),                // Count
        0,                                      // BegCtrlID
        TVOTLBCBOP,                             // pOptParam
        0                                       // Style, OTS_xxxx
    };

TCHAR   TVOTEditBoxBuf[128] = TEXT("Confidential");

OPTPARAM    TVOTEditBoxOP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("*Mark*"),                         // pData
        IDI_CPSUI_WATERMARK,                    // IconID
        0                                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("Type in WaterMark text"),         // pData
        COUNT_ARRAY(TVOTEditBoxBuf),            // IconID
        0                                       // lParam
    }
};


OPTTYPE TVOTEditBoxOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_EDITBOX,                           // Type
        0,                                      // Flags OPTTF_xxxx
        2,                                      // Count
        0,                                      // BegCtrlID
        TVOTEditBoxOP,                          // pOptParam
        0                                       // Style, OTS_xxxx
    };

OPTPARAM    TVOTPushButtonOP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        PUSHBUTTON_TYPE_DLGPROC,                // style
        (LPTSTR)PushButtonProc,                 // pData
        IDI_CPSUI_RUN_DIALOG,                   // IconID
        PUSHBUTTON_DLG                          // lParam
    }
};


OPTTYPE TVOTPushButtonOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_PUSHBUTTON,                        // Type
        0,                                      // Flags OPTTF_xxxx
        1,                                      // Count
        0,                                      // BegCtrlID
        TVOTPushButtonOP,                       // pOptParam
        0                                       // Style, OTS_xxxx
    };

OPTPARAM    TVOTChkBoxOP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        CHKBOXS_FALSE_TRUE,                     // style
        TEXT("Let's do it!"),                   // pData
        IDI_CPSUI_TELEPHONE,                        // IconID
        0                                       // lParam
    }
};



OPTTYPE TVOTChkBoxOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_CHKBOX,                            // Type
        0,                                      // Flags OPTTF_xxxx
        1,                                      // Count
        0,                                      // BegCtrlID
        TVOTChkBoxOP,                           // pOptParam
        0                                       // Style, OTS_xxxx
    };


OPTPARAM    ChkBoxTypeOP[] = {

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("CHKBOXS_FALSE_TRUE"),             // pData
        IDI_CPSUI_EMPTY,                        // IconID
        CHKBOXS_FALSE_TRUE                      // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("CHKBOXS_NO_YES"),                 // pData
        IDI_CPSUI_EMPTY,                        // IconID
        CHKBOXS_NO_YES                          // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("CHKBOXS_OFF_ON"),                 // pData
        IDI_CPSUI_EMPTY,                        // IconID
        CHKBOXS_OFF_ON                          // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("CHKBOXS_FALSE_PDATA"),            // pData
        IDI_CPSUI_EMPTY,                        // IconID
        CHKBOXS_FALSE_PDATA                     // lParam
    },


    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("CHKBOXS_NO_PDATA"),               // pData
        IDI_CPSUI_EMPTY,                        // IconID
        CHKBOXS_NO_PDATA                        // lParam
    },


    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("CHKBOXS_OFF_PDATA"),              // pData
        IDI_CPSUI_EMPTY,                        // IconID
        CHKBOXS_OFF_PDATA                       // lParam
    },

    {
        sizeof(OPTPARAM),                       // cbSize
        0,                                      // OPTPF_xxx
        0,                                      // style
        TEXT("CHKBOXS_NONE_PDATA"),             // pData
        IDI_CPSUI_EMPTY,                        // IconID
        CHKBOXS_NONE_PDATA                      // lParam
    }
};


OPTTYPE ChkBoxTypeOT = {

        sizeof(OPTTYPE),                        // cbSize
        TVOT_LISTBOX,                           // Type
        0,                                      // Flags OPTTF_xxxx
        COUNT_ARRAY(ChkBoxTypeOP),              // Count
        0,                                      // BegCtrlID
        ChkBoxTypeOP,                           // pOptParam
        0                                       // Style, OTS_xxxx
    };

EXTCHKBOX   TV_ECB = {

        sizeof(EXTCHKBOX),
        ECBF_OVERLAY_WARNING_ICON,
        TEXT("Extended CheckBox Test"),
        (LPTSTR)IDS_CPSUI_SLASH_SEP,
        TEXT("Got Checked!!!"),
        IDI_APPLE };

EXTPUSH TV_EP = {

        sizeof(EXTPUSH),
        0,
        TEXT("Extended Push Test"),
        (DLGPROC)NULL,
        IDI_APPLE,
        0 };



OPTITEM TVTestOptItems[] = {

    { sizeof(OPTITEM), LEVEL_0, 0, OPTIF_NONE, 0,
      (LPTSTR)TEXT("TreeView Test"), IDI_CPSUI_QUESTION,   NULL,
       NULL, 0, DMPUB_TVTEST },

        { sizeof(OPTITEM), LEVEL_1, 0, OPTIF_COLLAPSE, 0,
          (LPTSTR)TEXT("CPSUI Options"), 0,   NULL,
           NULL, 0, DMPUB_TVOPT },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
              (LPTSTR)TEXT("Extended Type"), 0,   &ECB_EP_ECB,
               &ECB_EP_OT, 0, DMPUB_TVOPT_ECB_EP },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  (LPTSTR)TEXT("Disabled Extended"), 0,   NULL,
                   &NoYesOT, 0, DMPUB_EXT_DISABLED },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  (LPTSTR)TEXT("Overlay 'Warning' Icon"), 0,   NULL,
                  &NoYesOT, 0, DMPUB_EXT_OVERLAY_WARNING },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  (LPTSTR)TEXT("Overlay 'Stop' Icon"), 0,   NULL,
                  &NoYesOT, 0, DMPUB_EXT_OVERLAY_STOP },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  (LPTSTR)TEXT("Overlay 'No' Icon"), 0,   NULL,
                  &NoYesOT, 0, DMPUB_EXT_OVERLAY_NO },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_COLLAPSE, 0,
              (LPTSTR)TEXT("OptItem/OptType"), 0,   NULL,
               NULL, 0, DMPUB_TVOPT },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  (LPTSTR)TEXT("Disabled OptType"), 0,   NULL,
                   &NoYesOT, 0, DMPUB_TVOPT_DISABLED },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  (LPTSTR)TEXT("Overlay 'Warning' Icon"), 0,   NULL,
                  &NoYesOT, 0, DMPUB_TVOPT_OVERLAY_WARNING },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  (LPTSTR)TEXT("Overlay 'Stop' Icon"), 0,   NULL,
                  &NoYesOT, 0, DMPUB_TVOPT_OVERLAY_STOP },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  (LPTSTR)TEXT("Overlay 'No' Icon"), 0,   NULL,
                  &NoYesOT, 0, DMPUB_TVOPT_OVERLAY_NO },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_COLLAPSE, 0,
              (LPTSTR)TEXT("ScrollBar/TrackBar Ranges"), 0,   NULL,
               NULL, 0, DMPUB_TVOPT },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  TEXT("Min Range"), MIN_INT, NULL,
                   &MinRangeOT, 0, DMPUB_MINRANGE },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  TEXT("Max. Range"), MAX_INT, NULL,
                   &MaxRangeOT, 0, DMPUB_MAXRANGE },

        { sizeof(OPTITEM), LEVEL_1, 0, OPTIF_NONE, 0,
          TEXT("TVOT Test"), IDI_CPSUI_QUESTION,   NULL,
           NULL, 0, DMPUB_TVOPT_TEST },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK, 0,
              (LPTSTR)TEXT("TVOT_2STATES"), 0, NULL,
               &TVOT2StatesOT, 0, DMPUB_2STATES },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK, 0,
              TEXT("TVOT_3STATES"), 0, NULL,
               &TVOT3StatesOT, 0, DMPUB_3STATES },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK, 0,
              TEXT("TVOT_UDARROW"), 55, NULL,
               &TVOTUDArrowOT, 0, DMPUB_UDARROW },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK, 0,
              TEXT("TVOT_TRACKBAR"), 100, NULL,
               &TVOTTrackBarOT, 0, DMPUB_TRACKBAR },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK, 0,
              TEXT("TVOT_SCROLLBAR"), 210, NULL,
               &TVOTScrollBarOT, 0, DMPUB_SCROLLBAR },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK, 0,
              TEXT("TVOT_LISTBOX"), 2, NULL,
               &TVOTListBoxOT, 0, DMPUB_LISTBOX },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  (LPTSTR)TEXT("Include 16x16 Icons"), 1,   NULL,
                  &NoYesOT, 0, DMPUB_TVOPT_ICONS },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK, 0,
              TEXT("TVOT_COMBOBOX"), 4, NULL,
               &TVOTComboBoxOT, 0, DMPUB_COMBOBOX },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK | OPTIF_COLLAPSE, 0,
                  (LPTSTR)TEXT("Include 16x16 Icons"), 1,   NULL,
                  &NoYesOT, 0, DMPUB_TVOPT_ICONS },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK, 0,
              TEXT("TVOT_EDITBOX"), 0, NULL,  // fill in TVOTEditBoxBuf later
               &TVOTEditBoxOT, 0, DMPUB_EDITBOX },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK, 0,
              TEXT("TVOT_PUSHBUTTON"), 0, NULL,
               &TVOTPushButtonOT, 0, DMPUB_PUSHBUTTON },

            { sizeof(OPTITEM), LEVEL_2, 0, OPTIF_CALLBACK, 0,
              TEXT("TVOT_CHKBOX"), 0, NULL,
               &TVOTChkBoxOT, 0, DMPUB_CHKBOX },

                { sizeof(OPTITEM), LEVEL_3, 0, OPTIF_CALLBACK, 0,
                  TEXT("CheckBox Type"), 0,   NULL,
                   &ChkBoxTypeOT, 0, DMPUB_CHKBOX_TYPE }

};




BOOL
APIENTRY
PushButtonProc(
    HWND    hDlg,
    UINT    Msg,
    UINT    wParam,
    LONG    lParam
    )
{
    switch (Msg) {

    case WM_INITDIALOG:                /* message: initialize dialog box */

        CPSUIDBG(DBG_PUSHDLGPROC,
                ("PushButtonProc lParam=%s", (LPSTR)lParam));
        break;

    case WM_COMMAND:

        switch(LOWORD(wParam)) {

        case IDOK:
        case IDCANCEL:

            EndDialog(hDlg, (BOOL)(LOWORD(wParam) == IDOK));
            return(TRUE);
        }
    }

    return(FALSE);
}




BOOL
APIENTRY
MyAboutProc(
    HWND    hDlg,
    UINT    Msg,
    UINT    wParam,
    LONG    lParam
    )

/*++

Routine Description:

    This is the about... callback which pop up appliation's own about


--*/
{
    PCOMPROPSHEETUI pCPSUI;
    TCHAR           Buf[128];

    switch (Msg) {

    case WM_INITDIALOG:                /* message: initialize dialog box */

        pCPSUI = (PCOMPROPSHEETUI)lParam;

        wsprintf(Buf, TEXT("About %s"), pCPSUI->pCallerName);

        SetWindowText(hDlg, Buf);

        wsprintf(Buf, TEXT("%s  Version %u.%u"),
                        pCPSUI->pCallerName,
                        (UINT)HIBYTE(pCPSUI->CallerVersion),
                        (UINT)LOBYTE(pCPSUI->CallerVersion));

        SetDlgItemText(hDlg, IDD_ABOUT1, Buf);

        wsprintf(Buf, TEXT("%s  Version %u.%u"),
                        pCPSUI->pOptItemName,
                        (UINT)HIBYTE(pCPSUI->OptItemVersion),
                        (UINT)LOBYTE(pCPSUI->OptItemVersion));

        SetDlgItemText(hDlg, IDD_ABOUT2, Buf);

        break;

    case WM_COMMAND:

        switch(LOWORD(wParam)) {

        case IDOK:
        case IDCANCEL:

            EndDialog(hDlg, (BOOL)(LOWORD(wParam) == IDOK));
            return(TRUE);
        }
    }

    return (FALSE);
}




POPTITEM
FindOptItem(
    POPTITEM    pOptItem,
    UINT        cOptItem,
    BYTE        DMPubID
    )
{
    while (cOptItem--) {

        if (pOptItem->DMPubID == DMPubID) {

            return(pOptItem);
        }

        ++pOptItem;
    }

    return(NULL);
}





CPSUICALLBACK
TVTestCallBack(
    PCPSUICBPARAM   pCPSUICBParam
    )
{
    POPTITEM    pCurItem = pCPSUICBParam->pCurItem;
    POPTITEM    pItem;
    BYTE        DMPubID;
    BYTE        Flags;
    LONG        Sel;
    LONG        Action = CPSUICB_ACTION_NONE;


    DMPubID = pCurItem->DMPubID;
    Sel     = pCurItem->Sel;

    switch (pCPSUICBParam->Reason) {

    case CPSUICB_REASON_OPTITEM_SETFOCUS:

        CPSUIDBG(DBG_TVTESTCB, ("Got OPTITEM_SETFOCUS CallBack now"));

        switch (DMPubID) {

        case DMPUB_MINRANGE:

            if (pItem = FindOptItem(pCPSUICBParam->pOptItem,
                                    pCPSUICBParam->cOptItem,
                                    DMPUB_MAXRANGE)) {

                pCurItem->pOptType->pOptParam[1].lParam = (LONG)pItem->Sel;
            }

            break;

        case DMPUB_MAXRANGE:

            if (pItem = FindOptItem(pCPSUICBParam->pOptItem,
                                    pCPSUICBParam->cOptItem,
                                    DMPUB_MINRANGE)) {

                pCurItem->pOptType->pOptParam[1].IconID = (DWORD)pItem->Sel;
            }

            break;

        }

        break;

    case CPSUICB_REASON_ABOUT:

        DialogBoxParam(hInstApp,
                       MAKEINTRESOURCE(DLGABOUT),
                       pCPSUICBParam->hDlg,
                       (DLGPROC)MyAboutProc,
                       (LPARAM)(pCPSUICBParam->pOldSel));

        break;

    case CPSUICB_REASON_ECB_CHANGED:

        CPSUIDBG(DBG_TVTESTCB, ("Got ECB_CHANGED CallBack now"));

        switch (DMPubID) {

        case DMPUB_TVOPT_ECB_EP:

            if (pCurItem->Flags & OPTIF_ECB_CHECKED) {

                TV_EP.IconID  =
                TV_ECB.IconID = IDI_APPLE;

            } else {

                TV_EP.IconID  =
                TV_ECB.IconID = 0;
            }

            Action = CPSUICB_ACTION_OPTIF_CHANGED;
            break;

        default:

            break;
        }

        break;

    case CPSUICB_REASON_SEL_CHANGED:

        CPSUIDBG(DBG_TVTESTCB, ("Got SEL_CHANGED CallBack now"));

        switch (DMPubID) {

        case DMPUB_CHKBOX_TYPE:

             if (pItem = FindOptItem(pCPSUICBParam->pOptItem,
                                     pCPSUICBParam->cOptItem,
                                     DMPUB_CHKBOX)) {

                pItem->pOptType->pOptParam[0].Style = (BYTE)pCurItem->Sel;

                pItem->Flags |= OPTIF_CHANGED;
                Action        = CPSUICB_ACTION_OPTIF_CHANGED;
            }

            break;

        case DMPUB_TVOPT_ICONS:

            pItem = pCurItem - 1;

            if (Sel) {

                pItem->pOptType->Style &= ~OTS_LBCB_NO_ICON16_IN_ITEM;

            } else {

                pItem->pOptType->Style |= OTS_LBCB_NO_ICON16_IN_ITEM;
            }

            break;

        case DMPUB_EXT_OVERLAY_WARNING:

            if (Sel) {

                TV_EP.Flags  |= EPF_OVERLAY_WARNING_ICON;
                TV_ECB.Flags |= ECBF_OVERLAY_WARNING_ICON;

            } else {

                TV_EP.Flags  &= ~EPF_OVERLAY_WARNING_ICON;
                TV_ECB.Flags &= ~ECBF_OVERLAY_WARNING_ICON;
            }

            break;

        case DMPUB_EXT_OVERLAY_STOP:

            if (Sel) {

                TV_EP.Flags  |= EPF_OVERLAY_STOP_ICON;
                TV_ECB.Flags |= ECBF_OVERLAY_STOP_ICON;

            } else {

                TV_EP.Flags  &= ~EPF_OVERLAY_STOP_ICON;
                TV_ECB.Flags &= ~ECBF_OVERLAY_STOP_ICON;
            }

            break;

        case DMPUB_EXT_OVERLAY_NO:

            if (Sel) {

                TV_EP.Flags  |= EPF_OVERLAY_NO_ICON;
                TV_ECB.Flags |= ECBF_OVERLAY_NO_ICON;

            } else {

                TV_EP.Flags  &= ~EPF_OVERLAY_NO_ICON;
                TV_ECB.Flags &= ~ECBF_OVERLAY_NO_ICON;
            }

            break;

        case DMPUB_MINRANGE:

            MinMaxRangeOP[1].IconID = (DWORD)Sel;
            break;

        case DMPUB_MAXRANGE:

            MinMaxRangeOP[1].lParam = (LONG)Sel;
            break;

        case DMPUB_TVOPT_OVERLAY_WARNING:
        case DMPUB_TVOPT_OVERLAY_STOP:
        case DMPUB_TVOPT_OVERLAY_NO:

            Action = CPSUICB_ACTION_REINIT_ITEMS;

        case DMPUB_TVOPT_ECB_EP:

            if (Sel) {

                pCurItem->Flags &= ~OPTIF_EXT_DISABLED;

            } else {

                pCurItem->Flags |= OPTIF_EXT_DISABLED;
            }

            pCurItem->Flags |= OPTIF_CHANGED;
            Action           = CPSUICB_ACTION_OPTIF_CHANGED;

            //
            // Fall through
            //

        case DMPUB_TVOPT_DISABLED:
        case DMPUB_EXT_DISABLED:

            if (pItem = FindOptItem(pCPSUICBParam->pOptItem,
                                    pCPSUICBParam->cOptItem,
                                    DMPUB_2STATES)) {

                do {

                    if ((pItem->DMPubID >= DMPUB_2STATES) &&
                        (pItem->DMPubID <= DMPUB_CHKBOX)) {

                        switch (DMPubID) {

                        case DMPUB_TVOPT_OVERLAY_WARNING:

                            if (Sel) {

                                pItem->Flags |= OPTIF_OVERLAY_WARNING_ICON;

                            } else {

                                pItem->Flags &= ~OPTIF_OVERLAY_WARNING_ICON;
                            }

                            break;

                        case DMPUB_TVOPT_OVERLAY_STOP:

                            if (Sel) {

                                pItem->Flags |= OPTIF_OVERLAY_STOP_ICON;

                            } else {

                                pItem->Flags &= ~OPTIF_OVERLAY_STOP_ICON;
                            }

                            break;

                        case DMPUB_TVOPT_OVERLAY_NO:

                            if (Sel) {

                                pItem->Flags |= OPTIF_OVERLAY_NO_ICON;

                            } else {

                                pItem->Flags &= ~OPTIF_OVERLAY_NO_ICON;
                            }

                            break;

                        case DMPUB_TVOPT_DISABLED:

                            if (Sel) {

                                pItem->pOptType->Flags |= OPTTF_TYPE_DISABLED;

                            } else {

                                pItem->pOptType->Flags &= ~OPTTF_TYPE_DISABLED;
                            }

                            break;

                        case DMPUB_EXT_DISABLED:

                            if (Sel) {

                                pItem->Flags |= OPTIF_EXT_DISABLED;

                            } else {

                                pItem->Flags &= ~OPTIF_EXT_DISABLED;
                            }

                            break;

                        case DMPUB_TVOPT_ECB_EP:

                            switch (Sel) {

                            case 0:

                                pItem->Flags |= OPTIF_EXT_HIDE;
                                break;

                            case 1:

                                pItem->Flags     &= ~(OPTIF_EXT_HIDE        |
                                                      OPTIF_EXT_IS_EXTPUSH);
                                pItem->pExtChkBox = &TV_ECB;

                                break;

                            case 2:

                                pItem->Flags    &= ~OPTIF_EXT_HIDE;
                                pItem->Flags    |= OPTIF_EXT_IS_EXTPUSH;
                                pItem->pExtPush  = &TV_EP;
                                break;
                            }
                        }
                    }

                    pItem->Flags |= OPTIF_CHANGED;

                } while ((pItem++)->DMPubID != DMPUB_CHKBOX);
            }

            break;

        default:

            break;
        }

        break;

    case CPSUICB_REASON_PUSHBUTTON:

        CPSUIDBG(DBG_TVTESTCB, ("Got PUSH Button CallBack now"));
        break;

    case CPSUICB_REASON_EXTPUSH:

        DialogBoxParam(hInstApp,
                       MAKEINTRESOURCE(EXTPUSH_DLG),
                       pCPSUICBParam->hDlg,
                       (DLGPROC)PushButtonProc,
                       (LPARAM)(pCPSUICBParam->pOldSel));
        break;

    default:

        break;
    }

    return(Action);
}





BOOL
SetupComPropSheetUI(
    PCOMPROPSHEETUI pCPSUI
    )
{
    static BOOL UpdateEditBox = TRUE;
    UINT        i;


    ZeroMemory(pCPSUI, sizeof(COMPROPSHEETUI));

    pCPSUI->cbSize         = sizeof(COMPROPSHEETUI);
    pCPSUI->hInstCaller    = hInstApp;
    pCPSUI->pCallerName    = (LPTSTR)TitleName;
    pCPSUI->CallerVersion  = 0x100;
    pCPSUI->pOptItemName   = (LPTSTR)OptItemName;
    pCPSUI->OptItemVersion = 0x400;
    pCPSUI->UserData       = (ULONG_PTR)pCPSUI;
    pCPSUI->pHelpFile      = (LPTSTR)TEXT("CPSUISam.hlp");
    pCPSUI->pfnCallBack    = TVTestCallBack;
    pCPSUI->pOptItem       = TVTestOptItems;
    pCPSUI->cOptItem       = COUNT_ARRAY(TVTestOptItems);
    pCPSUI->Flags          = 0;
    pCPSUI->pDlgPage       = CPSUI_PDLGPAGE_TREEVIWONLY;
    pCPSUI->cDlgPage       = 0;


    if (UpdateEditBox) {

        //
        // Fixup compiler warning for the LPSTR and LONG
        //

        for (i = 0; i < COUNT_ARRAY(TVTestOptItems); i++) {

            if (TVTestOptItems[i].DMPubID == DMPUB_EDITBOX) {

                TVTestOptItems[i].pSel = (LPTSTR)TVOTEditBoxBuf;
                UpdateEditBox = FALSE;
                break;
            }
        }
    }

    if (UpdatePermission) {

        pCPSUI->Flags |= CPSUIF_UPDATE_PERMISSION;
    }

    if (!UseStdAbout) {

        pCPSUI->Flags |= CPSUIF_ABOUT_CALLBACK;
    }

    return(TRUE);
}

