Click or drag to resize

ProfileOptionsExtension Class

Base implementation of interface type ctExtensionInterfaceProfileSettings. Inheritant must implement at least GetParent(), CreateControl(), LoadData(Byte[]), GetSaveData(Boolean), Validate() and Refresh(). Override GetInterface2(ctExtensionInterface) in your extension and return your implementation of this class when requested type is ctExtensionInterfaceProfileSettings. This wiil add your extension to CUSTOMTOOLS' profile options page.
Inheritance Hierarchy
System.Object
  CTExtensions.Interfaces.ProfileOptionsExtension
    CTExtensions.ExportCore.EXTs.ProfileOptions<PROFILESETTINGSTYPE>

Namespace: CTExtensions.Interfaces
Assembly: CTInterface (in CTInterface.dll) Version: 25.0
Syntax
public abstract class ProfileOptionsExtension : IExtensionInterface

The ProfileOptionsExtension type exposes the following members.

Constructors
 NameDescription
Protected methodProfileOptionsExtensionInitializes a new instance of the ProfileOptionsExtension class
Top
Methods
 NameDescription
Public methodCreateControl Provide the control for your options page. This is called in lazy-load manner, when the user selects this profile options extension from the tree.
Public methodCreateSettingsControl Create and return window handle for custom options page. Default implementation handles control lifetime and inheritant may just enjoy from CreateControl().
Public methodDispose Called when the settings page is closed. Disposes the control if not disposed already. Inheriants can ignore this if also CreateSettingsControl() is left in default implementation.
Public methodGetParent Return parent CTExtension of this options extension.
Public methodGetSaveData Called after Validate(). Provide the data you wish to save.
Public methodLoadData Called after CreateControl(). Setup the control you created with this stored data.
Public methodPageName Name that is shown in profile options tree. By default this is parents FriendlyName().
Public methodReadProfileData Helper function to read parent extension's data from given profile.
Public methodRefresh Notification that occurs when user re-enters to this extension's options page.
Public methodSave Called when user clicks OK at export profile settings and all pages have returned true on Validate(). Inheriants can ignore this and just return data at GetSaveData(Boolean) when called.
Public methodStoreProfileData Helper function to store parent extension's data to given profile.
Public methodTabPress Called when TAB is pressed. Handles control focusing.
Public methodValidate Validate settings use has mede to your control. Show error message if needed.
Top
Example
Example extension that provides its own profile options page. This example creates an item to profile options tree with the extension's name 'MyAddin'. The settings page contains one textbox -control and requires user to type either 'hello' or 'world' to it before letting user to successfully exit the options. The value is also stored to and retrieved from DB.
C#
// @AUTO-REFERENCE { [CT_INSTALL_PATH]\CTInterface.dll }
// @AUTO-REFERENCE { [CT_INSTALL_PATH]\Interop.CTEngineLib.dll }
// @AUTO-REFERENCE { C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Windows.Forms.dll }

using ATR.CT.CTInterface;
using CTExtensions;
using CTEngineLib;
using CTExtensions.Interfaces;
using System;
using System.Windows.Forms;

public class MyAddin : CTExtension
{

  private MyProfileSettingsPage moProfileSettingsPage;

  public override bool Hook(CTInterface oCTInterface)
  {
    return false; // We don't care about events.
  }

  public override void UnHook(CTInterface oCTInterface)
  {

  }

  /// <summary>
  /// Return the custom interface on request.
  /// </summary>
  public override IExtensionInterface GetInterface(ctExtensionInterface eType)
  {
    if (eType == ctExtensionInterface.ctExtensionInterfaceProfileSettings)
    {
      if (moProfileSettingsPage == null)
        moProfileSettingsPage = new MyProfileSettingsPage(this);
      return moProfileSettingsPage;
    }

    return null;
  }

  /// <summary>
  /// Create custom implementation for ProfileOptionsExtension.
  /// </summary>
  class MyProfileSettingsPage : ProfileOptionsExtension
  {

    private MyAddin moParent;
    private Panel moMyControl;
    private TextBox MyTextBox;

    public MyProfileSettingsPage(MyAddin oParent)
    {
      moParent = oParent;
    }

    public override ICTExtension GetParent()
    {
      return moParent;
    }

    /// <summary>
    /// Create panel with label and text field.
    /// </summary>
    /// <returns></returns>
    public override Control CreateControl()
    {
      moMyControl = new Panel();
      MyTextBox = new TextBox() { Dock = DockStyle.Top };

      moMyControl.Controls.Add(MyTextBox);
      moMyControl.Controls.Add(new Label() { Text = "My control", Dock = DockStyle.Top });
      return moMyControl;
    }

    /// <summary>
    /// Return the data we want to save.
    /// </summary>
    /// <param name="bCancelSave">Return false here.</param>
    public override byte[] GetSaveData(out bool bCancelSave)
    {
      bCancelSave = false;
      return System.Text.Encoding.UTF8.GetBytes(MyTextBox.Text);
    }

    /// <summary>
    /// Load the previously saved data for the control if any.
    /// </summary>
    /// <param name="storedData"></param>
    public override void LoadData(byte[] storedData)
    {
      try
      {
        MyTextBox.Text = System.Text.Encoding.UTF8.GetString(storedData);
      }
      catch
      {
        MyTextBox.Text = "";
      }
    }

    /// <summary>
    /// Must implement, but we can just return true here.
    /// </summary>
    /// <returns></returns>
    public override bool Refresh()
    {
      return true;
    }

    /// <summary>
    /// Validate the values before allowing user to exit. This function requires that the text box value must be either 'hello' or 'world'.
    /// </summary>
    /// <returns>True if data is valid, false otherwise.</returns>
    public override bool Validate()
    {
      if (String.Compare(MyTextBox.Text, "hello", true) != 0 && String.Compare(MyTextBox.Text, "world", true) != 0)
      {
        MessageBox.Show("You should type either 'hello' or 'world' to My control", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
        return false;
      }

      return true;
    }
  }

}
Revision History
DateVersionDescription
-2017 SP2First Release
See Also