MediaPortal Windows Media Center
MediaPortal Wiki > MediaPortal 1 > Contribute > Plugins > Tips & Tricks

Tips & Tricks

Was this page helpful?

    Read Documentation & source code

    Using an on-screen keyboard

    VirtualKeyboard keyboard = (VirtualKeyboard)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_VIRTUAL_KEYBOARD);
    if (null == keyboard)
      return;
    
    keyboard.Reset();
    keyboard.Text = strLine;
    keyboard.DoModal(GetID);
    if (keyboard.IsConfirmed)
    {
      // Do something here. The typed value is stored in "keyboard.Text"
    }

    Use the following code do display the web keyboard:

    DialogWebKeyboard keyboard = (DialogWebKeyboard)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_VIRTUAL_WEB_KEYBOARD);
    ...

    Activating other window and returning back

    //Activate new window
    GUIWindowManager.ActivateWindow(YOUR_TO_BE_ACTIVATED_WINDOW_ID);
    
    ...
    
    //Show the previous window (go back)
    GUIWindowManager.ShowPreviousWindow();
    • FYI: still looking how to transfer data other than strings between the windows. If you know - shoot me a message..
    • See the "properties" or "configuration" tips if you want to transfer strings

    Logging

    Use class Log for logging. You can log Info, Error, Warn and Debug. There are a lot of different methods for additional formatting.

    Log.Info("My plugin: started");

    Configuration

    Note: you can have as many as you need configuration files. Use common sence - do not create separate file for each setting. laugh Example:

    // Read configuration settings
    using (Settings reader = new Settings(Config.GetFile(Config.Dir.Config, "mediaportal.xml")))
    {
      setting = reader.GetValue("section_name", "setting_name");
    }

    Properties

    You can store and read string properties.

    // Save a property
    GUIPropertyManager.SetProperty("#status", "Ready");
    
    // Read a property value
    string strUrl = GUIPropertyManager.GetProperty("#urltonavigate");

    Creating a new element

    • You can dynamically create and render new elements and then access them as if they were in the XML-file.

     

    public override void AllocResources()
    {
      base.AllocResources();
      mylabel = new GUILabelControl(5678, 999, 300, 400, 200, 100, string.Empty, "This is a new string to render in a label", 0xFFFFFFFF, GUIControl.Alignment.Left, false);
      mylabel.AllocResources();
    }
    
    public override void Render(float timePassed)
    {
      base.Render(timePassed);
      mylabel.Render(timePassed);
    }

    Dialogs

    Message/Error Box

    This is how to present an "OK" dialog (it can be used do display error messages as well":

    /// <summary>
       /// Shows the Error Dialog
       /// </summary>
       private void ShowErrorDialog(string messsage)
       {
          GUIDialogOK dlgOK = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK);
          if (dlgOK != null)
          {
             dlgOK.SetHeading("Error" /* or Message */);
             dlgOK.SetLine(1, messsage);
             dlgOK.SetLine(2, "");
             dlgOK.DoModal(PARENT_WINDOW_ID);
          }
       }

    Context Menu

    To show a context menu (in the middle of the screen):

    private int ShowContextMenu()
       {
          GUIDialogMenu dlgMenu = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
          if (dlgMenu != null)
          {
             dlgMenu.Reset();
             dlgMenu.SetHeading("Header");
             dlgMenu.Add("line 1");
             dlgMenu.Add("line 2");
             ...
             dlgMenu.DoModal(PARENT_WINDOW_ID);
    
             if (dlgMenu.SelectedLabel == -1) // Nothing was selected
                return EventAction.Nothing;
    
             return dlgMenu.SelectedLabel;
          }
       }

    Enum Selection Dialog

    To show a selection Dialog for values from a given Enum and returns the selected value. (using generics) T must be of Enum type...

    public T ShowEnumSelectionDialog<T>() {
        GUIDialogSelect2 dlgSelect =
            (GUIDialogSelect2)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_SELECT2);
        dlgSelect.Reset();
        dlgSelect.SetHeading("Selection: " + typeof(T).ToString());
        Enum.GetNames(typeof(T)).ToList().ForEach(dlgSelect.Add);
        dlgSelect.DoModal(GUIWindowManager.ActiveWindow);
        try {
            return Enum<T>.Parse(dlgSelect.SelectedLabelText);
        } catch {
            return default (T);
        }
    }

     

    Helper class for parsing enum value:

    public static class Enum<T> {
        public static T Parse(string value) {
            return (T)Enum.Parse(typeof(T), value);
        }
        public static IList<T> GetValues() {
            IList<T> list = new List<T>();
            foreach (object value in Enum.GetValues(typeof(T))) {
                list.Add((T)value);
            }
            return list;
        }
    }

     

    Usage:

    MyEnum myEnumValue = ShowEnumSelectionDialog<MyEnum>();

    Unconfirmed Tips & Tricks

    Interface for NON-GUI plugins

    namespace MediaPortal.GUI.Library
    {
      public interface IPlugin
      {
        void Start();
        void Stop();
      }
    }

    The actual plugin is run from the plugin/process folder, but to get it to show up in the configuration window (and get to the plugins setup screens) you have to have a copy in the plugins/windows folder too.




    Tag page (Edit tags)
    • No tags
    Running the latest version?

    V1.7.0 - released April 2014
    Releasenews | Download
    Changelog
     | Requirements
    HTPC
    Team-MediaPortal
     
    About
    Contact |  Press
    Partners