|
From: <nic...@us...> - 2014-05-03 17:38:34
|
Revision: 4793
http://sourceforge.net/p/mp-plugins/code/4793
Author: nicsergio
Date: 2014-05-03 17:38:29 +0000 (Sat, 03 May 2014)
Log Message:
-----------
Modified Paths:
--------------
trunk/plugins/ShortCuter&SkinEditor/Source/Common/Skin.cs
trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuter.cs
trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuterConfig.cs
trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuts.cs
Modified: trunk/plugins/ShortCuter&SkinEditor/Source/Common/Skin.cs
===================================================================
--- trunk/plugins/ShortCuter&SkinEditor/Source/Common/Skin.cs 2014-05-01 10:43:45 UTC (rev 4792)
+++ trunk/plugins/ShortCuter&SkinEditor/Source/Common/Skin.cs 2014-05-03 17:38:29 UTC (rev 4793)
@@ -8,199 +8,199 @@
namespace My.Common
{
internal class MediaPortalSkin //Classe per gestione elementare skin di MediaPortal
+ {
+ #region Dati
+ protected readonly string Name; //Nome della skin
+ protected struct Folders //Struttura di memorizzazione cartelle
{
- #region Dati
- protected readonly string Name; //Nome della skin
- protected struct Folders //Struttura di memorizzazione cartelle
- {
- public string Skin; //Percorso della skin
- public string Cache; //Percorso cache della skin
- public string Media; //Percorso file multimediali della skin
- public string Animations; //Percorso per animazioni (multi-image) della skin
- public string Icons; //Eventuale percorso icone di menu della skin
- public string Sounds; //Percorso effetti sonori
- }
- public class SkinFile //Classe file della skin (con ID)
- {
- public string Name = ""; //Nome del file
- public int Id = 0; //WindowID del file (link da MediaPortal)
- public override string ToString() { return Name; } //Override metodo ToString per riempire classi ListControl
- }
- public class SkinLink //Classe link per la skin
- {
- public string Context = ""; //Eventuale testo aggiuntivo ("guarda"-"ascolta"-ecc.)
- public string Caption = ""; //Titolo
- public string XmlFile = ""; //Nome del file xml della skin
- public int WindowID = 0; //Id finestra per visualizzazione in MediaPortal
- public string LoadParameter = ""; //Eventuali parametri aggiuntivi per visualizzazione (sotto-categorie, ecc.)
- public string BackgroundImage = ""; //File immagine di background
- public string BackgroundFolder = ""; //Cartella per multi-image di background
- public string FanartHandler = ""; //Tipologia di fanart per background
- public string Overlay = ""; //Eventuale riquadro visualizzato in sovrapposizione all'immagine di background
- public string IconList = ""; //Eventuale icona per rappresentazione in lista/treeview
- public bool IsFather = false; //Il link è un nodo padre (visualizzazione a treeview)
- public override string ToString() { return Caption; } //Override metodo ToString per riempire classi ListControl
- }
- protected Folders _paths = new Folders(); //Percorsi
- protected List<SkinFile> _skinFiles = new List<SkinFile>(); //Lista file della skin (con ID)
- protected List<SkinLink> _skinLinks = new List<SkinLink>(); //Lista link predefiniti per la skin
- protected bool _initialized; //Classe inizializzata
- #endregion
+ public string Skin; //Percorso della skin
+ public string Cache; //Percorso cache della skin
+ public string Media; //Percorso file multimediali della skin
+ public string Animations; //Percorso per animazioni (multi-image) della skin
+ public string Icons; //Eventuale percorso icone di menu della skin
+ public string Sounds; //Percorso effetti sonori
+ }
+ public class SkinFile //Classe file della skin (con ID)
+ {
+ public string Name = ""; //Nome del file
+ public int Id = 0; //WindowID del file (link da MediaPortal)
+ public override string ToString() { return Name; } //Override metodo ToString per riempire classi ListControl
+ }
+ public class SkinLink //Classe link per la skin
+ {
+ public string Context = ""; //Eventuale testo aggiuntivo ("guarda"-"ascolta"-ecc.)
+ public string Caption = ""; //Titolo
+ public string XmlFile = ""; //Nome del file xml della skin
+ public int WindowID = 0; //Id finestra per visualizzazione in MediaPortal
+ public string LoadParameter = ""; //Eventuali parametri aggiuntivi per visualizzazione (sotto-categorie, ecc.)
+ public string BackgroundImage = ""; //File immagine di background
+ public string BackgroundFolder = ""; //Cartella per multi-image di background
+ public string FanartHandler = ""; //Tipologia di fanart per background
+ public string Overlay = ""; //Eventuale riquadro visualizzato in sovrapposizione all'immagine di background
+ public string IconList = ""; //Eventuale icona per rappresentazione in lista/treeview
+ public bool IsFather = false; //Il link è un nodo padre (visualizzazione a treeview)
+ public override string ToString() { return Caption; } //Override metodo ToString per riempire classi ListControl
+ }
+ protected Folders _paths = new Folders(); //Percorsi
+ protected List<SkinFile> _skinFiles = new List<SkinFile>(); //Lista file della skin (con ID)
+ protected List<SkinLink> _skinLinks = new List<SkinLink>(); //Lista link predefiniti per la skin
+ protected bool _initialized; //Classe inizializzata
+ #endregion
- #region Costruttore
- public MediaPortalSkin(string skinName, string skinsPath, string cachesPath, bool onlyMenuItems)
- { //Costruttore
- Name = skinName; //--> nome della skin
- _paths.Skin = skinsPath + Name + @"\"; //--> percorso skin
- _paths.Cache = cachesPath + Name + @"\"; //--> percorso cache skin
- _paths.Media = _paths.Skin + @"Media\"; //--> percorso file multimediali skin
- _paths.Animations = _paths.Media + @"Animations\"; //--> percorso per animazioni (multi-image) skin
- _paths.Icons = _paths.Media + @"Icons\"; //--> eventuale percorso icone di menu della skin
- _paths.Sounds = _paths.Skin + @"Sounds\"; //--> percorso effetto sonori skin
+ #region Costruttore
+ public MediaPortalSkin(string skinName, string skinsPath, string cachesPath, bool onlyMenuItems)
+ { //Costruttore
+ Name = skinName; //--> nome della skin
+ _paths.Skin = skinsPath + Name + @"\"; //--> percorso skin
+ _paths.Cache = cachesPath + Name + @"\"; //--> percorso cache skin
+ _paths.Media = _paths.Skin + @"Media\"; //--> percorso file multimediali skin
+ _paths.Animations = _paths.Media + @"Animations\"; //--> percorso per animazioni (multi-image) skin
+ _paths.Icons = _paths.Media + @"Icons\"; //--> eventuale percorso icone di menu della skin
+ _paths.Sounds = _paths.Skin + @"Sounds\"; //--> percorso effetto sonori skin
- _initialized = GetSkinFiles(onlyMenuItems) && GetSkinLinks(onlyMenuItems); //--> raccolta file della skin (con ID) e link
- }
- #endregion
+ _initialized = GetSkinFiles(onlyMenuItems) && GetSkinLinks(onlyMenuItems); //--> raccolta file della skin (con ID) e link
+ }
+ #endregion
- #region Metodi Privati
- private bool GetSkinFiles(bool onlyMenuItems) //Raccolta dei file della skin
+ #region Metodi Privati
+ private bool GetSkinFiles(bool onlyMenuItems) //Raccolta dei file della skin
+ {
+ if (!Directory.Exists(_paths.Skin))
{
- if (!Directory.Exists(_paths.Skin))
+ Tools.ErrorMessage("Skin folder not found!", _paths.Skin);
+ return false;
+ }
+ string[] files = Directory.GetFiles(_paths.Skin); //--> lettura file da disco
+ foreach (string file in files) //Iterazione per applicazione filtro e memorizzazione dati
+ {
+ try
{
- Tools.ErrorMessage("Skin folder not found!", _paths.Skin);
- return false;
- }
- string[] files = Directory.GetFiles(_paths.Skin); //--> lettura file da disco
- foreach (string file in files) //Iterazione per applicazione filtro e memorizzazione dati
- {
- try
+ if (!file.ToLower().StartsWith("common") && !file.ToLower().Contains("dialog") && !file.ToLower().Contains("wizard") && !file.ToLower().Contains("overlay") && (!onlyMenuItems || (!file.ToLower().EndsWith("myhome.xml") && !file.ToLower().EndsWith("basichome.xml") && !file.ToLower().Contains("fullscreen"))) && file.ToLower().EndsWith(".xml"))
{
- if (!file.ToLower().StartsWith("common") && !file.ToLower().Contains("dialog") && !file.ToLower().Contains("wizard") && !file.ToLower().Contains("overlay") && (!onlyMenuItems || (!file.ToLower().EndsWith("myhome.xml") && !file.ToLower().EndsWith("basichome.xml") && !file.ToLower().Contains("fullscreen"))) && file.ToLower().EndsWith(".xml"))
+ XmlDocument xmlFile = new XmlDocument();
+ xmlFile.Load(file);
+ XmlNode node = xmlFile.DocumentElement.SelectSingleNode("/window/id");
+ if (node.InnerText.Length > 0)
{
- XmlDocument xmlFile = new XmlDocument();
- xmlFile.Load(file);
- XmlNode node = xmlFile.DocumentElement.SelectSingleNode("/window/id");
- if (node.InnerText.Length > 0)
- {
- SkinFile skF = new SkinFile();
- skF.Name = file.Remove(0, file.LastIndexOf(@"\") + 1).Replace(".xml", "");
- skF.Id = Convert.ToInt32(node.InnerText);
- if (skF.Id >= 0)
- _skinFiles.Add(skF); //--> aggiunta file nella lista
- }
+ SkinFile skF = new SkinFile();
+ skF.Name = file.Remove(0, file.LastIndexOf(@"\") + 1).Replace(".xml", "");
+ skF.Id = Convert.ToInt32(node.InnerText);
+ if (skF.Id >= 0)
+ _skinFiles.Add(skF); //--> aggiunta file nella lista
}
}
- catch { }
}
- if (_skinFiles.Count > 0)
- return true; //--> raccolta files effettuata
- else
+ catch { }
+ }
+ if (_skinFiles.Count > 0)
+ return true; //--> raccolta files effettuata
+ else
+ {
+ Tools.ErrorMessage("No skin files found.", _paths.Skin);
+ return false;
+ }
+ }
+ private bool GetSkinLinks(bool onlyMenuItems) //Raccolta dei link predefiniti per la skin
+ {
+ XmlDocument xmlFile = new XmlDocument();
+ try
+ {
+ using (Stream streamFile = Assembly.GetExecutingAssembly().GetManifestResourceStream(
+ Assembly.GetExecutingAssembly().GetManifestResourceNames().Where(name => name.Contains("PopularSkinLinks.xml")).ElementAt(0).ToString()))
{
- Tools.ErrorMessage("No skin files found.", _paths.Skin);
- return false;
+ xmlFile.Load(streamFile); //Links skin disponibili --> lettura file xml incapsulato
}
}
- private bool GetSkinLinks(bool onlyMenuItems) //Raccolta dei link predefiniti per la skin
+ catch (Exception e)
{
- XmlDocument xmlFile = new XmlDocument();
- try
- {
- using (Stream streamFile = Assembly.GetExecutingAssembly().GetManifestResourceStream(
- Assembly.GetExecutingAssembly().GetManifestResourceNames().Where(name => name.Contains("PopularSkinLinks.xml")).ElementAt(0).ToString()))
- {
- xmlFile.Load(streamFile); //Links skin disponibili --> lettura file xml incapsulato
- }
- }
- catch (Exception e)
- {
- Tools.ErrorMessage("Error loading PopularSkinLinks.xml.", e.Message);
- return false;
- }
+ Tools.ErrorMessage("Error loading PopularSkinLinks.xml.", e.Message);
+ return false;
+ }
- XmlNodeList nodeList = xmlFile.DocumentElement.SelectNodes("/Items/Item");
- foreach (XmlNode node in nodeList) //Iterazione per memorizzazione links
+ XmlNodeList nodeList = xmlFile.DocumentElement.SelectNodes("/Items/Item");
+ foreach (XmlNode node in nodeList) //Iterazione per memorizzazione links
+ {
+ if (AddLink(node, true, onlyMenuItems)) //Se nodo padre aggiunto
{
- if (AddLink(node, true, onlyMenuItems)) //Se nodo padre aggiunto
- {
- XmlNodeList subNodeList = node.SelectNodes("SubItems/SubItem");
- foreach (XmlNode subNode in subNodeList) //Iterazione per memorizzazione links figli
- AddLink(subNode, false, onlyMenuItems); //--> aggiunta nodi figli
- }
+ XmlNodeList subNodeList = node.SelectNodes("SubItems/SubItem");
+ foreach (XmlNode subNode in subNodeList) //Iterazione per memorizzazione links figli
+ AddLink(subNode, false, onlyMenuItems); //--> aggiunta nodi figli
}
- if (_skinLinks.Count > 0)
- return true; //--> raccolta links effettuata
- else
- {
- Tools.ErrorMessage("No skin links found loading PopularSkinLinks.xml.");
- return false;
- }
}
- private bool AddLink(XmlNode node, bool isFather, bool onlyMenuItems) //Aggiunta link
+ if (_skinLinks.Count > 0)
+ return true; //--> raccolta links effettuata
+ else
{
- XmlNode innerNode = node.SelectSingleNode("Menu");
- if (onlyMenuItems && (innerNode == null || innerNode.InnerText.ToLower() != "true" ))
- return false; //Nel caso di raccolta dei soli elementi di menu, si saltano gli elementi non corrispondenti
+ Tools.ErrorMessage("No skin links found loading PopularSkinLinks.xml.");
+ return false;
+ }
+ }
+ private bool AddLink(XmlNode node, bool isFather, bool onlyMenuItems) //Aggiunta link
+ {
+ XmlNode innerNode = node.SelectSingleNode("Menu");
+ if (onlyMenuItems && (innerNode == null || innerNode.InnerText.ToLower() != "true" ))
+ return false; //Nel caso di raccolta dei soli elementi di menu, si saltano gli elementi non corrispondenti
- SkinLink popularLink = new SkinLink();
- innerNode = node.SelectSingleNode("Context");
- if (innerNode != null)
- popularLink.Context = innerNode.InnerText;
- innerNode = node.SelectSingleNode("Caption");
- if (innerNode != null)
- popularLink.Caption = innerNode.InnerText;
- innerNode = node.SelectSingleNode("XmlFile");
- if (innerNode != null)
- popularLink.XmlFile = innerNode.InnerText;
- innerNode = node.SelectSingleNode("WindowID");
- if (innerNode != null)
- popularLink.WindowID = Convert.ToInt32(innerNode.InnerText);
- innerNode = node.SelectSingleNode("LoadParameter");
- if (innerNode != null)
- popularLink.LoadParameter = innerNode.InnerText;
- innerNode = node.SelectSingleNode("BackgroundImage");
- if (innerNode != null)
- popularLink.BackgroundImage = innerNode.InnerText;
- innerNode = node.SelectSingleNode("BackgroundFolder");
- if (innerNode != null)
- popularLink.BackgroundFolder = innerNode.InnerText;
- innerNode = node.SelectSingleNode("FanartHandler");
- if (innerNode != null)
- popularLink.FanartHandler = innerNode.InnerText;
- innerNode = node.SelectSingleNode("Overlay");
- if (innerNode != null)
- popularLink.Overlay = innerNode.InnerText;
- innerNode = node.SelectSingleNode("IconList");
- if (innerNode != null)
- popularLink.IconList = innerNode.InnerText;
- popularLink.IsFather = isFather;
- try
+ SkinLink popularLink = new SkinLink();
+ innerNode = node.SelectSingleNode("Context");
+ if (innerNode != null)
+ popularLink.Context = innerNode.InnerText;
+ innerNode = node.SelectSingleNode("Caption");
+ if (innerNode != null)
+ popularLink.Caption = innerNode.InnerText;
+ innerNode = node.SelectSingleNode("XmlFile");
+ if (innerNode != null)
+ popularLink.XmlFile = innerNode.InnerText;
+ innerNode = node.SelectSingleNode("WindowID");
+ if (innerNode != null)
+ popularLink.WindowID = Convert.ToInt32(innerNode.InnerText);
+ innerNode = node.SelectSingleNode("LoadParameter");
+ if (innerNode != null)
+ popularLink.LoadParameter = innerNode.InnerText;
+ innerNode = node.SelectSingleNode("BackgroundImage");
+ if (innerNode != null)
+ popularLink.BackgroundImage = innerNode.InnerText;
+ innerNode = node.SelectSingleNode("BackgroundFolder");
+ if (innerNode != null)
+ popularLink.BackgroundFolder = innerNode.InnerText;
+ innerNode = node.SelectSingleNode("FanartHandler");
+ if (innerNode != null)
+ popularLink.FanartHandler = innerNode.InnerText;
+ innerNode = node.SelectSingleNode("Overlay");
+ if (innerNode != null)
+ popularLink.Overlay = innerNode.InnerText;
+ innerNode = node.SelectSingleNode("IconList");
+ if (innerNode != null)
+ popularLink.IconList = innerNode.InnerText;
+ popularLink.IsFather = isFather;
+ try
+ {
+ SkinFile skF = _skinFiles.Find(x => x.Id == popularLink.WindowID);
+ if (skF != null || popularLink.XmlFile == "-") //Verifica se WindowID disponibile nei files della skin (o se non specificato file xml - link di sistema)
{
- SkinFile skF = _skinFiles.Find(x => x.Id == popularLink.WindowID);
- if (skF != null || popularLink.XmlFile == "-") //Verifica se WindowID disponibile nei files della skin (o se non specificato file xml - link di sistema)
- {
- _skinLinks.Add(popularLink); //--> aggiunta link nella lista
- return true; //--> link aggiunto
- }
- else
- return false; //--> link non aggiunto
+ _skinLinks.Add(popularLink); //--> aggiunta link nella lista
+ return true; //--> link aggiunto
}
- catch
- {
- return false; //--> link non aggiunto (errore nella verifica esistenza WindowID)
- }
+ else
+ return false; //--> link non aggiunto
}
- #endregion
+ catch
+ {
+ return false; //--> link non aggiunto (errore nella verifica esistenza WindowID)
+ }
+ }
+ #endregion
- #region Proprietà
- public bool Initialized { get { return this._initialized; } }
- public string SkinPath { get { return this._paths.Skin; } }
- public string CachePath { get { return this._paths.Cache; } }
- public string MediaPath { get { return this._paths.Media; } }
- public string AnimationsPath { get { return this._paths.Animations; } }
- public string IconsPath { get { return this._paths.Icons; } }
- public string SoundsPath { get { return this._paths.Sounds; } }
- public List<SkinFile> SkinFiles { get { return this._skinFiles; } }
- public List<SkinLink> SkinLinks { get { return this._skinLinks; } }
- #endregion
- }
+ #region Proprietà
+ public bool Initialized { get { return this._initialized; } }
+ public string SkinPath { get { return this._paths.Skin; } }
+ public string CachePath { get { return this._paths.Cache; } }
+ public string MediaPath { get { return this._paths.Media; } }
+ public string AnimationsPath { get { return this._paths.Animations; } }
+ public string IconsPath { get { return this._paths.Icons; } }
+ public string SoundsPath { get { return this._paths.Sounds; } }
+ public List<SkinFile> SkinFiles { get { return this._skinFiles; } }
+ public List<SkinLink> SkinLinks { get { return this._skinLinks; } }
+ #endregion
+ }
}
Modified: trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuter.cs
===================================================================
--- trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuter.cs 2014-05-01 10:43:45 UTC (rev 4792)
+++ trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuter.cs 2014-05-03 17:38:29 UTC (rev 4793)
@@ -16,10 +16,6 @@
#region Dati
private ShortCuts myShortCuts; //Istanza classe ShortCuts (dati relativi ai shortcuts configurati)
private static readonly string LogPrefix; //Prefisso per log eventi
- private const int TrailersPluginControlID = 11899; //Id controllo per attivazione plugin Trailers
- private const int InvalidWindowID = -1; //Id finestra invalido
- private int lastWindowID; //Id ultima finestra attivata dal plugin
- private string lastLoadParameter; //Eventuali ultimi parametri di caricamento usati dal plugin
#endregion
#region Costruttore
@@ -34,15 +30,15 @@
{
MpLog(false, "Plugin started");
- string settingsFile = Config.GetFile(Config.Dir.Config, Tools.MyAssembly.Name + ".xml");
- myShortCuts = new ShortCuts(settingsFile, false); //--> lettura configurazione relativa agli shortcuts
-
if (LockKeys.ChangeCapsLock(myShortCuts.GeneralForcingCapsLock))
MpLog(false, "CapsLock " + ((myShortCuts.GeneralForcingCapsLock == LockKeys.LockKeyActions.Off) ? "deactivated" : "activated"));
if (LockKeys.ChangeNumLock(myShortCuts.GeneralForcingNumLock))
MpLog(false, "NumLock " + ((myShortCuts.GeneralForcingNumLock == LockKeys.LockKeyActions.Off) ? "deactivated" : "activated"));
- if (myShortCuts.Initialized) //Se classe di gestione shortcut inizializzata
+ string settingsFile = Config.GetFile(Config.Dir.Config, Tools.MyAssembly.Name + ".xml");
+ myShortCuts = new ShortCuts(settingsFile); //Creazione classe per gestione shorcuts
+ myShortCuts.Log += new LogEventHandler(myShortCuts_Log); //--> sottoscrizione evento di log shortuts
+ if (myShortCuts.Initialize()) //Inizializzazione & lettura impostazioni shorcuts
{
try
{
@@ -73,107 +69,6 @@
}
#endregion
- #region Metodi Privati
- private void GoToScreen(ShortCut sc) //Esecuzione azione relativa allo shortcut
- {
- try
- {
- MpLog(false, "Go to screen accepted, " + sc.ToString());
-
- GUIGraphicsContext.ResetLastActivity();
- if (sc.SoundEffect.Length > 0 && !g_Player.Playing)
- Utils.PlaySound(sc.SoundEffect, false, true); //--> eventuale effetto sonoro
- if (sc.LoadParameter.Length > 0) //Se richiesti parametri di caricamento
- {
- bool loadParameterChange = false;
- string loadParameter = sc.LoadParameter;
- while (true) //Ricerca eventuali GUIProperties
- {
- int i = loadParameter.IndexOf("(#"), ii = 0;
- if (i >= 0)
- ii = loadParameter.IndexOf(")", i);
- if (i >= 0 && (ii > i))
- {
- string propName = loadParameter.Remove(ii).Remove(0, i + 1);
- if (propName.Length > 0)
- {
- loadParameter = loadParameter.Remove(i) + GUIPropertyManager.GetProperty(propName).Trim() + loadParameter.Remove(0, ii + 1);
- loadParameterChange = true;
- }
- else
- break;
- }
- else
- break;
- }
- if (loadParameterChange) //Eventuale log parametri di caricamento definitivi
- MpLog(false, "GUIProperties replaced, LoadParameter=[" + loadParameter + "]");
-
- GUIWindowManager.ActivateWindow(sc.WindowID, loadParameter, true); //--> richiamo schermata con parametri di caricamento
- }
- else //Richiamo schermata senza parametri di caricamento
- {
- GUIMessage msg;
- if (sc.WindowID == TrailersPluginControlID) //Se richiesta di attivazione plugin Trailers
- msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_CLICKED, 0, TrailersPluginControlID, TrailersPluginControlID, 0, 0, null);
- else //Caso normale di attivazione finesta MediaPortal
- msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_GOTO_WINDOW, 0, 0, 0, sc.WindowID, 0, null);
-
- GUIWindowManager.SendMessage(msg);
- //GUIGraphicsContext.SendMessage(msg); //Metodo usato dal vecchio plugin
- }
- lastWindowID = sc.WindowID; lastLoadParameter = sc.LoadParameter; //--> memorizzazione ultima destinazione visualizzata dal plugin
- }
- catch (Exception e)
- {
- MpLog(true, "Error going to screen", e);
- }
- }
- private void GoToPrevious(bool soundEffect) //Ritorno alla finestra precedente
- {
- try
- {
- MpLog(false, "Go to previous window");
-
- GUIGraphicsContext.ResetLastActivity();
- if (soundEffect)
- Utils.PlaySound("back.wav", false, true); //--> eventuale effetto sonoro (indietro)
-
- GUIWindowManager.ShowPreviousWindow(); //--> visualizzazione finestra precedente
- }
- catch (Exception e)
- {
- MpLog(true, "Error going to previous window", e);
- }
- }
- private bool AlreadyAtDestination(ShortCut sc) //Verifica se finestra attuale corrispondente a destinazione shortcut
- {
- if ((int)GUIWindowManager.ActiveWindow == sc.WindowID) //Prima verifica: da gestore finestre di mediaPortal
- {
- if (lastWindowID == sc.WindowID) //Seconda verifica: utilizzo dei parametri memorizzati dal plugin se attendibili
- if (lastLoadParameter == sc.LoadParameter) //--> verifica corrispondenza eventuali parametri di caricamento per visualizzazione
- {
- MpLog(false, "Actual window (ID & LoadParameter) corresponds to destination, " + sc.ToString());
- return true; //--> finestra attuale e parametri di caricamento corrispondenti a destinazione shortcut
- }
- else
- return false; //--> parametri di caricamento per visualizzazione non corrispondenti a destinazione shortcut
- else //Altrimenti parametri memorizzati dal plugin non attendibili (non si riescono a verificare i parametri di caricamento)
- {
- if (sc.LoadParameter.Length == 0) //Se destinazione senza parametri di caricamento
- {
- MpLog(false, "Actual window (ID) corresponds to destination, " + sc.ToString());
- return true; //--> finestra attuale corrispondente a destinazione shortcut
- }
- else
- return false; //--> finestra attuale non corrispondente a destinazione shortcut
- }
- }
- else
- return false; //--> finestra attuale non corrispondente a destinazione shortcut
- }
- #endregion
-
#region Metodi Pubblici
public static void MpLog(bool errorLog, string description) //Registrazione evento su log di MediaPortal (senza passare l'eccezione)
{
@@ -196,45 +91,27 @@
#region Consumazione Eventi
private void rawInput_KeyDown(object sender, KeyEventArgs e) //Evento di pressione tasto
{
- if (!KeyCombination.IsModifier(e.KeyCode)) //Verifica se il tasto premuto non corrisponde ad un modificatore
- {
- List<ShortCut> scList = myShortCuts.Items.ToList().FindAll(x =>
- x.Key == e.KeyCode.ToString()
- && x.Ctrl == e.Control
- && x.Alt == e.Alt
- && x.Shift == e.Shift); //--> raccolta lista shortcut associati alla combinazione di tasti attuale
- if (scList != null && scList.Count > 0) //Se trovato almeno uno shortcut
- {
- if (scList.Count == 1) //Shortcut a destinazione singola
- {
- if (scList[0].Return && AlreadyAtDestination(scList[0])) //Se impostato flag di ritorno e finestra attuale corrispondente a destinazione
- GoToPrevious(scList[0].SoundEffect.Length > 0); //--> visualizzazione finestra precedente
- else
- GoToScreen(scList[0]); //--> visualizzazione finestra di destinazione shortcut
- }
- else //Shortcut a destinazione multipla (ciclico)
- {
- int scIndex = 0;
- for (int i = 0; i < scList.Count; i++) //Iterazione di verifica se la finestra attuale corrisponde ad una delle destinazioni
- {
- if (AlreadyAtDestination(scList[i]))
- {
- scIndex = (i + 1) % scList.Count; //--> impostazione indice shortcut successivo
- break;
- }
- }
- GoToScreen(scList[scIndex]); //--> visualizzazione finestra di destinazione shortcut
- }
- }
- else //Combinazione di tasti non corrispondente a nessuno shortcut
- MpLog(false, "Key not mapped: Key=" + (e.Control ? "<CTRL>" : "") + (e.Alt ? "<ALT>" : "") + (e.Shift ? "<SHIFT>" : "") + "<" + e.KeyCode.ToString() + ">");
- }
+ myShortCuts.KeysReceiving(e); //--> pubblicazione a gestore shortcuts
}
private void GUIWindowManager_OnActivateWindow(int windowID) //Evento di attivazione finestra di MediaPortal
{
- if (windowID != lastWindowID) //Se attivata una finestra non corrispondente all'ultima destinazione del plugin
- lastWindowID = InvalidWindowID; //--> invalidazione parametri memorizzati dal plugin
+ myShortCuts.WindowChanged(windowID); //--> pubblicazione a gestore shortcuts
}
+ private void myShortCuts_Log(object sender, LogEventArgs e)
+ {
+ switch (e.LogLevel)
+ {
+ case LogEventArgs.LogLevels.Error:
+ if (e.LogException != null)
+ Tools.ErrorMessage(e.LogMessage, e.LogException.Message); //--> emissione finestra di errore (con descrizione errore)
+ else
+ Tools.ErrorMessage(e.LogMessage); //--> emissione finestra di errore
+ break;
+ case LogEventArgs.LogLevels.Info:
+ Tools.InfoMessage(e.LogMessage); //--> emissione finestra informativa
+ break;
+ }
+ }
#endregion
}
}
Modified: trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuterConfig.cs
===================================================================
--- trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuterConfig.cs 2014-05-01 10:43:45 UTC (rev 4792)
+++ trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuterConfig.cs 2014-05-03 17:38:29 UTC (rev 4793)
@@ -248,9 +248,10 @@
if (mySkin.Initialized)
{
string settingsFile = Config.GetFile(Config.Dir.Config, Tools.MyAssembly.Name + ".xml");
- //Lettura impostazioni e gestione shorcuts
- myShortCuts = new ShortCuts(settingsFile, true);
- if (myShortCuts.Initialized)
+
+ myShortCuts = new ShortCuts(settingsFile); //Creazione classe per gestione shorcuts
+ myShortCuts.Log += new LogEventHandler(myShortCuts_Log); //Sottoscrizione evento di log shortuts
+ if (myShortCuts.Initialize()) //Inizializzazione & lettura impostazioni shorcuts
{
//Sottoscrizione evento di modifica lista shortcuts
myShortCuts.Items.ListChanged += new ListChangedEventHandler(myShortCutsItems_ListChanged);
@@ -277,6 +278,23 @@
e.Cancel = true; //--> annullamento chiusura form
}
#endregion
+ #region Evento di Log Shortcuts
+ private void myShortCuts_Log(object sender, LogEventArgs e)
+ {
+ switch (e.LogLevel)
+ {
+ case LogEventArgs.LogLevels.Error:
+ if (e.LogException != null)
+ Tools.ErrorMessage(e.LogMessage, e.LogException.Message); //--> emissione finestra di errore (con descrizione errore)
+ else
+ Tools.ErrorMessage(e.LogMessage); //--> emissione finestra di errore
+ break;
+ case LogEventArgs.LogLevels.Info:
+ Tools.InfoMessage(e.LogMessage); //--> emissione finestra informativa
+ break;
+ }
+ }
+ #endregion
#region Eventi Modifica Griglia
private void shortCutsDataGridView_Enter(object sender, EventArgs e)
{
Modified: trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuts.cs
===================================================================
--- trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuts.cs 2014-05-01 10:43:45 UTC (rev 4792)
+++ trunk/plugins/ShortCuter&SkinEditor/Source/ShortCuter/ShortCuts.cs 2014-05-03 17:38:29 UTC (rev 4793)
@@ -3,15 +3,53 @@
using System.ComponentModel;
using MediaPortal.GUI.Library;
using System.IO;
+using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using MediaPortal.Profile;
+using MediaPortal.Util;
+using MediaPortal.Player;
using My.Common;
namespace ProcessPlugins.ShortCuter
{
+ #region Delegati/Classi
+ public delegate void LogEventHandler(object sender, LogEventArgs e); //Delegato per evento di log
+ public class LogEventArgs : EventArgs //Argomenti per evento di log
+ {
+ #region Dati
+ private LogLevels _logLevel; //Livello di log
+ private string _logMessage; //Messaggio di log
+ private Exception _logException; //Eventuale eccezione
+
+ public enum LogLevels //Tipologie di livelli di log
+ {
+ Debug = 0, //--> log per debug
+ Info = 1, //--> log informativo (necessario pubblicare all'utente)
+ Error = 2 //--> log di errore
+ }
+ #endregion
+
+ #region Costruttore
+ public LogEventArgs(LogLevels logLevel, string logMessage) : this(logLevel, logMessage, null) { }
+ public LogEventArgs(LogLevels logLevel, string logMessage, Exception logException)
+ {
+ _logLevel = logLevel; //--> inizializzazione livello di log
+ _logMessage = logMessage; //--> inizializzazione messaggio di log
+ _logException = logException; //--> inizializzazione eccezione relativa al log
+ }
+ #endregion
+
+ #region Proprietà
+ public LogLevels LogLevel { get { return this._logLevel; } }
+ public string LogMessage { get { return this._logMessage; } }
+ public Exception LogException { get { return this._logException; } }
+ #endregion
+ }
+ #endregion
+
internal class WindowLink //Classe collegamento ad una finestra di MediaPortal
{
#region Dati
@@ -20,7 +58,7 @@
private string _loadParameter; //Eventuali parametri di caricamento per visualizzazione (sotto-categorie, ecc.)
private const int TrailersPluginControlID = 11899; //Id controllo per attivazione plugin Trailers
- internal delegate void NotifyLoadParamChanged(string loadParam); //Delegato per notifica di modifica parametri di caricamento
+ private const int InvalidID = -1; //Id finestra invalido
#endregion
#region Costruttore
@@ -33,51 +71,87 @@
#endregion
#region Metodi Pubblici
- public void Go() //Visualizzazione finestra del collegamento (senza delegato per notifica di modifica parametri di caricamento)
+ public bool Go() { return Go(null); } //Visualizzazione finestra del collegamento (senza log)
+ public bool Go(LogEventHandler Log) //Visualizzazione finestra del collegamento
{
- Go(null);
- }
- public void Go(NotifyLoadParamChanged LoadParamChanged) //Visualizzazione finestra del collegamento
- {
- if (_loadParameter.Length > 0) //Se richiesti parametri di caricamento
+ if (_caption.Length > 0 && Log != null)
+ Log(this, new LogEventArgs(LogEventArgs.LogLevels.Info, "Go to link destination, " + this.ToString()));
+
+ try
{
- bool loadParameterChange = false;
- string loadParameter = _loadParameter;
- while (true) //Ricerca eventuali GUIProperties
+ GUIGraphicsContext.ResetLastActivity();
+
+ if (_loadParameter.Length > 0) //Se richiesti parametri di caricamento
{
- int i = loadParameter.IndexOf("(#"), ii = 0;
- if (i >= 0)
- ii = loadParameter.IndexOf(")", i);
- if (i >= 0 && (ii > i))
+ bool loadParameterChange = false;
+ string loadParameter = _loadParameter;
+ while (true) //Ricerca eventuali GUIProperties
{
- string propName = loadParameter.Remove(ii).Remove(0, i + 1);
- if (propName.Length > 0)
+ int i = loadParameter.IndexOf("(#"), ii = 0;
+ if (i >= 0)
+ ii = loadParameter.IndexOf(")", i);
+ if (i >= 0 && (ii > i))
{
- loadParameter = loadParameter.Remove(i) + GUIPropertyManager.GetProperty(propName).Trim() + loadParameter.Remove(0, ii + 1);
- loadParameterChange = true;
+ string propName = loadParameter.Remove(ii).Remove(0, i + 1);
+ if (propName.Length > 0)
+ {
+ loadParameter = loadParameter.Remove(i) + GUIPropertyManager.GetProperty(propName).Trim() + loadParameter.Remove(0, ii + 1);
+ loadParameterChange = true;
+ }
+ else
+ break;
}
else
- break;
+ break;
}
- else
- break;
+ if (loadParameterChange && Log != null)
+ Log(this, new LogEventArgs(LogEventArgs.LogLevels.Debug, "GUIProperties replaced, LoadParameter=[" + loadParameter + "]"));
+
+ GUIWindowManager.ActivateWindow(_windowID, loadParameter, true); //--> richiamo schermata con parametri di caricamento
}
- if (loadParameterChange && LoadParamChanged != null)
- LoadParamChanged(loadParameter); //--> notifica di modifica parametri di caricamento
+ else //Richiamo schermata senza parametri di caricamento
+ {
+ GUIMessage msg;
+ if (_windowID == TrailersPluginControlID) //Se richiesta di attivazione plugin Trailers
+ msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_CLICKED, 0, TrailersPluginControlID, TrailersPluginControlID, 0, 0, null);
+ else //Caso normale di attivazione finesta MediaPortal
+ msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_GOTO_WINDOW, 0, 0, 0, _windowID, 0, null);
- GUIWindowManager.ActivateWindow(_windowID, loadParameter, true); //--> richiamo schermata con parametri di caricamento
+ GUIWindowManager.SendMessage(msg); //--> invio messaggio per attivazione finestra
+ }
+ return true; //--> comando eseguito con successo
}
- else //Richiamo schermata senza parametri di caricamento
+ catch (Exception e)
{
- GUIMessage msg;
- if (_windowID == TrailersPluginControlID) //Se richiesta di attivazione plugin Trailers
- msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_CLICKED, 0, TrailersPluginControlID, TrailersPluginControlID, 0, 0, null);
- else //Caso normale di attivazione finesta MediaPortal
- msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_GOTO_WINDOW, 0, 0, 0, _windowID, 0, null);
+ if (Log != null)
+ Log(this, new LogEventArgs(LogEventArgs.LogLevels.Error, "Error going to window", e));
+ return false; //--> comando non completato
+ }
+ }
+ public bool GoPrevious() { return GoPrevious(null); } //Ritorno alla finestra precedente (senza log)
+ public bool GoPrevious(LogEventHandler Log) //Ritorno alla finestra precedente
+ {
+ if (_caption.Length > 0 && Log != null)
+ Log(this, new LogEventArgs(LogEventArgs.LogLevels.Info, "Go to previous window"));
- GUIWindowManager.SendMessage(msg); //--> invio messaggio per attivazione finestra
+ try
+ {
+ GUIGraphicsContext.ResetLastActivity();
+ GUIWindowManager.ShowPreviousWindow(); //--> visualizzazione finestra precedente
+ return true; //--> comando eseguito con successo
}
+ catch (Exception e)
+ {
+ if (Log != null)
+ Log(this, new LogEventArgs(LogEventArgs.LogLevels.Error, "Error going to previous window", e));
+ return false; //--> comando non completato
+ }
}
+ public void Reset() //Reset destinazione (invalidazione)
+ {
+ _windowID = InvalidID; //--> invalidazione window ID
+ _loadParameter = ""; //--> reset parametri di caricamento
+ }
public override string ToString() //Override metodo ToString per stampare le proprietà del link
{
return ((_caption.Length > 0) ? "Link " + _caption + " " : "") + "--> WindowID=" + _windowID.ToString() + ((_loadParameter.Length > 0) ? " LoadParameter=[" + _loadParameter + "]" : "");
@@ -97,7 +171,6 @@
public string LoadParameter { get { return this._loadParameter; } set { this._loadParameter = value; } }
#endregion
}
-
internal class KeyCombination //Classe combinazione di tasti
{
#region Dati
@@ -127,8 +200,15 @@
_key = "A"; //--> inizializzazione tasto
_ctrl = true; //--> inizializzazione utilizzo del modificatore "Ctrl"
_alt = false; //--> inizializzazione utilizzo del modificatore "Alt"
- _shift = true; //--> inizializzazione utilizzo del modificatore "Shift" }
+ _shift = true; //--> inizializzazione utilizzo del modificatore "Shift"
}
+ public KeyCombination(KeyEventArgs k) //Costruttore classe KeyCombination da evento di pressione tasto
+ {
+ _key = k.KeyCode.ToString(); //--> assegnazione tasto
+ _ctrl = k.Control; //--> utilizzo del modificatore "Ctrl"
+ _alt = k.Alt; //--> utilizzo del modificatore "Alt"
+ _shift = k.Shift; //--> utilizzo del modificatore "Shift"
+ }
#endregion
#region Metodi Pubblici
@@ -160,7 +240,6 @@
public bool Shift { get { return this._shift; } set { this._shift = value; } }
#endregion
}
-
internal class ShortCut : INotifyPropertyChanged //Classe shortcut (scorciatoia da tastiera) con notifica variazione proprietà
{
#region Dati
@@ -174,12 +253,12 @@
#region Costruttore
public ShortCut() //Costruttore classe ShortCut
{
- _caption = "ShortCut"; //--> inizializzazione titolo
- _keys = new KeyCombination(); //--> istanziazione classe KeyCombination
- _destination = new WindowLink(); //--> istanziazione classe WindowLink
+ _caption = "ShortCut"; //--> inizializzazione titolo
+ _keys = new KeyCombination(); //--> istanziazione classe KeyCombination
+ _destination = new WindowLink(); //--> istanziazione classe WindowLink
_destination.Caption = ""; //--> reset caption destinazione (gestita caption shortcut)
- _return = false; //--> inizializzazione ritorno a finestra ...
[truncated message content] |