Example #1
0
        /// <summary>
        /// Iterate through all functions on this control.
        /// </summary>
        /// </summary>
        /// <param name="tabletIndex_I">tablet index</param>
        /// <param name="extTagIndex_I">extension index tag</param>
        /// <param name="controlIndex_I">control index</param>
        /// <param name="functionIndex_I">control function index</param>
        /// <param name="setupFunc_I">function called to setup extension control layout</param>
        public void SetupPropertiesForFunctions(
            UInt32 tabletIndex_I,
            EWTXExtensionTag extTagIndex_I,
            UInt32 controlIndex_I,
            UInt32 functionIndex_I,
            UInt32 numControls_I,
            DrawControlsSetupFunction setupFunc_I)
        {
            bool bIsAvailable = false;

            try
            {
                WTPKT  propOverride  = 1; // true
                UInt32 ctrlAvailable = 0;
                UInt32 ctrlLocation  = 0;
                UInt32 ctrlMinRange  = 0;
                UInt32 ctrlMaxRange  = 0;
                String indexStr      = extTagIndex_I == EWTXExtensionTag.WTX_EXPKEYS2 ?
                                       Convert.ToString(controlIndex_I) :
                                       Convert.ToString(functionIndex_I);

                // NOTE - you can use strings in any language here.
                // The strings will be encoded to UTF8 before sent to the driver.
                // For example, you could use the string: "付録A" to indicate "EK" in Japanese.
                String ctrlname =
                    extTagIndex_I == EWTXExtensionTag.WTX_EXPKEYS2 ?   "EK: " + indexStr :
                    extTagIndex_I == EWTXExtensionTag.WTX_TOUCHRING ?  "TR: " + indexStr :
                    extTagIndex_I == EWTXExtensionTag.WTX_TOUCHSTRIP ? "TS: " + indexStr :
                    /* unknown control */ "UK: " + indexStr;

                do
                {
                    // Ask if control is available for override.
                    if (!CWintabExtensions.ControlPropertyGet(
                            mLogContext.HCtx,
                            (byte)extTagIndex_I,
                            (byte)tabletIndex_I,
                            (byte)controlIndex_I,
                            (byte)functionIndex_I,
                            (ushort)EWTExtensionTabletProperty.TABLET_PROPERTY_AVAILABLE,
                            ref ctrlAvailable))
                    {
                        throw new Exception("Oops - FAILED ControlPropertyGet for TABLET_PROPERTY_AVAILABLE");
                    }

                    bIsAvailable = (ctrlAvailable > 0);

                    if (!bIsAvailable)
                    {
                        Debug.WriteLine("Cannot override control");
                        break;
                    }

                    // Set flag indicating we're overriding the control.
                    if (!CWintabExtensions.ControlPropertySet(
                            mLogContext.HCtx,
                            (byte)extTagIndex_I,
                            (byte)tabletIndex_I,
                            (byte)controlIndex_I,
                            (byte)functionIndex_I,
                            (ushort)EWTExtensionTabletProperty.TABLET_PROPERTY_OVERRIDE,
                            propOverride))
                    {
                        throw new Exception("Oops - FAILED ControlPropertySet for TABLET_PROPERTY_OVERRIDE");
                    }

                    // Set the control name.
                    if (!CWintabExtensions.ControlPropertySet(
                            mLogContext.HCtx,
                            (byte)extTagIndex_I,
                            (byte)tabletIndex_I,
                            (byte)controlIndex_I,
                            (byte)functionIndex_I,
                            (ushort)EWTExtensionTabletProperty.TABLET_PROPERTY_OVERRIDE_NAME,
                            ctrlname))
                    {
                        throw new Exception("Oops - FAILED ControlPropertySet for TABLET_PROPERTY_OVERRIDE_NAME");
                    }

                    // Get the location of the control
                    if (!CWintabExtensions.ControlPropertyGet(
                            mLogContext.HCtx,
                            (byte)extTagIndex_I,
                            (byte)tabletIndex_I,
                            (byte)controlIndex_I,
                            (byte)functionIndex_I,
                            (ushort)EWTExtensionTabletProperty.TABLET_PROPERTY_LOCATION,
                            ref ctrlLocation))
                    {
                        throw new Exception("Oops - FAILED ControlPropertyGet for TABLET_PROPERTY_LOCATION");
                    }

                    if (!CWintabExtensions.ControlPropertyGet(
                            mLogContext.HCtx,
                            (byte)extTagIndex_I,
                            (byte)tabletIndex_I,
                            (byte)controlIndex_I,
                            (byte)functionIndex_I,
                            (ushort)EWTExtensionTabletProperty.TABLET_PROPERTY_MIN,
                            ref ctrlMinRange))
                    {
                        throw new Exception("Oops - FAILED ControlPropertyGet for TABLET_PROPERTY_MIN");
                    }

                    if (!CWintabExtensions.ControlPropertyGet(
                            mLogContext.HCtx,
                            (byte)extTagIndex_I,
                            (byte)tabletIndex_I,
                            (byte)controlIndex_I,
                            (byte)functionIndex_I,
                            (ushort)EWTExtensionTabletProperty.TABLET_PROPERTY_MAX,
                            ref ctrlMaxRange))
                    {
                        throw new Exception("Oops - FAILED ControlPropertyGet for TABLET_PROPERTY_MAX");
                    }

                    // Set tablet OLED with icon (if supported by the tablet).
                    // Ignore return value for now.
                    CWintabExtensions.SetDisplayProperty(
                        mLogContext,
                        extTagIndex_I,
                        tabletIndex_I,
                        controlIndex_I,
                        functionIndex_I,
                        mTestImageIconPath);

                    // Finally, call function to setup control layout for rendering.
                    // Control will be updated when WT_PACKETEXT packets received.
                    setupFunc_I(
                        (int)tabletIndex_I,
                        (int)controlIndex_I,
                        (int)functionIndex_I,
                        bIsAvailable,
                        (int)ctrlLocation,
                        (int)ctrlMinRange,
                        (int)ctrlMaxRange);

                    SetControlProperties(tabletIndex_I, extTagIndex_I, controlIndex_I, functionIndex_I, numControls_I, ctrlname);
                } while (false);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Example #2
0
        /// <summary>
        /// Remove application overrides for extension.
        /// </summary>
        /// <param name="tabletIndex_I"></param>
        /// <param name="extTagIndex_I"></param>
        void RemoveOverridesForExtension(
            UInt32 tabletIndex_I,
            EWTXExtensionTag extTagIndex_I)
        {
            UInt32 numCtrls     = 0;
            UInt32 numFuncs     = 0;
            UInt32 propOverride = 0;  // false

            try
            {
                // Get number of controls of this type.
                if (!CWintabExtensions.ControlPropertyGet(
                        mLogContext.HCtx,
                        (byte)extTagIndex_I,
                        (byte)tabletIndex_I,
                        0, // ignored
                        0, // ignored
                        (ushort)EWTExtensionTabletProperty.TABLET_PROPERTY_CONTROLCOUNT,
                        ref numCtrls))
                {
                    throw new Exception("Oops - Failed ControlPropertyGet for TABLET_PROPERTY_CONTROLCOUNT");
                }

                // All tablets should have ExpressKeys (we assume).
                if (numCtrls == 0 && EWTXExtensionTag.WTX_EXPKEYS2 == extTagIndex_I)
                {
                    throw new Exception("Oops - SetupControlsForExtension didn't find any ExpressKeys!");
                }

                // For each control, find its number of functions ...
                for (UInt32 controlIndex = 0; controlIndex < numCtrls; controlIndex++)
                {
                    if (!CWintabExtensions.ControlPropertyGet(
                            mLogContext.HCtx,
                            (byte)extTagIndex_I,
                            (byte)tabletIndex_I,
                            (byte)controlIndex,
                            0, // ignored
                            (ushort)EWTExtensionTabletProperty.TABLET_PROPERTY_FUNCCOUNT,
                            ref numFuncs))
                    {
                        throw new Exception("Oops - Failed ControlPropertyGet for TABLET_PROPERTY_FUNCCOUNT");
                    }

                    // ... and override our setting for each function.
                    for (UInt32 functionIndex = 0; functionIndex < numFuncs; functionIndex++)
                    {
                        if (!CWintabExtensions.ControlPropertySet(
                                mLogContext.HCtx,
                                (byte)extTagIndex_I,
                                (byte)tabletIndex_I,
                                (byte)controlIndex,
                                (byte)functionIndex,
                                (ushort)EWTExtensionTabletProperty.TABLET_PROPERTY_OVERRIDE,
                                propOverride))
                        {
                            throw new Exception("Oops - FAILED ControlPropertySet for TABLET_PROPERTY_OVERRIDE");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }