//########################################################################################### // ESS - AutoSyncNavis //########################################################################################### // Auswahl automatisch in geöffneten Navigatoren Synchronisieren // EPLAN Software & Service GmbH & Co. KG / Florian Reiter / EPLAN Consulting // 2012-08-31 (c) Florian Reiter //########################################################################################### // ChangeLog: //------------------------------------------------------------------------------------------- // 2012-08-31 V1.0 REF EPLAN Software & Service GmbH & Co. KG // Ersterstellung Script // // 2012-09-09 V2.0 REF EPLAN Software & Service GmbH & Co. KG // Anpassungen für AddOn-Technik // Merken der letzten User-Einstellung (AutoSnyc ON/OFF) bei EPLAN-Neustart // // 2014-10-20 V2.1 REF EPLAN Software & Service GmbH & Co. KG // Anpassungen für V2.4 (geändertes Verhalten beim Löschen von Settings --> Default-Wert bleibt zurück) //########################################################################################### using System; using System.IO; using System.Collections; using Eplan.EplApi.Base; public class ESS_AutoSyncNavis { #region settings //user-defined STRING settings for AutoSync-utility public static string[] sarrUserDefiniedSettings = new string[] { "USER.Custom.ESS_AutoSyncNavis.Menu_ID", "USER.Custom.ESS_AutoSyncNavis.AutoSyncState", }; #endregion public static bool IsNumeric (System.Object Expression) { if(Expression == null || Expression is DateTime) return false; if(Expression is Int16 || Expression is Int32 || Expression is Int64 || Expression is Decimal || Expression is Single || Expression is Double || Expression is Boolean) return true; try { if(Expression is string) Double.Parse(Expression as string); else Double.Parse(Expression.ToString()); return true; } catch { } // just dismiss errors but return false return false; } [DeclareAction("ESS_ToggleAutoSync")] public void ESS_ToggleAutoSnyc(string sInitalization) { Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings(); string sSettingName = "USER.Custom.ESS_AutoSyncNavis.AutoSyncState"; //prüfe, ob Setting gültige Werte enthält oder nur Default werte (Verhatlen aus V2.3) bool bValidMenuID = false; if (oSettings.ExistSetting(sSettingName)) { if (!String.IsNullOrEmpty(oSettings.GetStringSetting("USER.Custom.ESS_AutoSyncNavis.Menu_ID", 0))) { if (IsNumeric(oSettings.GetStringSetting("USER.Custom.ESS_AutoSyncNavis.Menu_ID", 0))) { bValidMenuID = true; //wenn Setting mit Default-Wert vorhanden (Methode bei V2.3), dann ist der inhalt der MenuID leer --> kann komplett neu angelegt werden } } } if (bValidMenuID) { string sActualState = oSettings.GetStringSetting(sSettingName, 0); if ((sActualState == string.Empty) | (sActualState.ToUpper() != "ON" && sInitalization != "YES") | (sActualState.ToUpper() == "ON" && sInitalization == "YES")) { //activate auto-sync #region activate auto-sync oSettings.SetStringSetting(sSettingName, "ON", 0); Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu(); oMenu.RemoveMenuItem(Convert.ToUInt32(oSettings.GetStringSetting("USER.Custom.ESS_AutoSyncNavis.Menu_ID", 0))); uint uiGUI = oMenu.AddMenuItem( "Auto-Synchronisierung AUS", // Menüpunktname "ESS_ToggleAutoSync /sInitalization:NO", // Action "Automatisches Synchronisieren der Navigatoren deaktivieren", // Statustext 35196, // Menü-ID 1, //1 = Hinter Menüpunkt X false, // Seperator davor false // Seperator dahinter ); //save settings sSettingName = "USER.Custom.ESS_AutoSyncNavis.Menu_ID"; if (oSettings.ExistSetting(sSettingName)) { oSettings.SetStringSetting(sSettingName, Convert.ToString(uiGUI), 0); } else { //setting doesn't exist --> create new bool bOkCreated = oSettings.AddStringSetting(sSettingName, new string[] { }, new string[] { }, "User defined setting of ESS AutoSyncNavis-Utility", new string[] { Convert.ToString(uiGUI) }, ISettings.CreationFlag.Insert); } #endregion } else { //deactivate auto-sync #region deactivate auto-sync oSettings.SetStringSetting(sSettingName, "OFF", 0); Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu(); oMenu.RemoveMenuItem(Convert.ToUInt32(oSettings.GetStringSetting("USER.Custom.ESS_AutoSyncNavis.Menu_ID", 0))); uint uiGUI = oMenu.AddMenuItem( "Auto-Synchronisierung EIN", // Menüpunktname "ESS_ToggleAutoSync /sInitalization:NO", // Action "Automatisches Synchronisieren der Navigatoren aktivieren", // Statustext 35196, // Menü-ID 1, //1 = Hinter Menüpunkt X false, // Seperator davor false // Seperator dahinter ); //save settings sSettingName = "USER.Custom.ESS_AutoSyncNavis.Menu_ID"; if (oSettings.ExistSetting(sSettingName)) { oSettings.SetStringSetting(sSettingName, Convert.ToString(uiGUI), 0); } else { //setting doesn't exist --> create new bool bOkCreated = oSettings.AddStringSetting(sSettingName, new string[] { }, new string[] { }, "User defined setting of ESS AutoSyncNavis-Utility", new string[] { Convert.ToString(uiGUI) }, ISettings.CreationFlag.Insert); } #endregion } } else { new CommandLineInterpreter().Execute("AutoSync_CreateAllSettings"); //deactivate auto-sync #region deactivate auto-sync oSettings.SetStringSetting(sSettingName, "OFF", 0); Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu(); //oMenu.RemoveMenuItem(Convert.ToUInt32(oSettings.GetStringSetting("USER.Custom.ESS_AutoSyncNavis.Menu_ID", 0))); uint uiGUI = oMenu.AddMenuItem( "Auto-Synchronisierung EIN", // Menüpunktname "ESS_ToggleAutoSync /sInitalization:NO", // Action "Automatisches Synchronisieren der Navigatoren aktivieren", // Statustext 35196, // Menü-ID 1, //1 = Hinter Menüpunkt X false, // Seperator davor false // Seperator dahinter ); //save settings sSettingName = "USER.Custom.ESS_AutoSyncNavis.Menu_ID"; if (oSettings.ExistSetting(sSettingName)) { oSettings.SetStringSetting(sSettingName, Convert.ToString(uiGUI), 0); } else { //setting doesn't exist --> create new bool bOkCreated = oSettings.AddStringSetting(sSettingName, new string[] { }, new string[] { }, "User defined setting of ESS AutoSyncNavis-Utility", new string[] { Convert.ToString(uiGUI) }, ISettings.CreationFlag.Insert); } #endregion } } [DeclareAction("AutoSync_DeleteAllSettings")] public void AutoSync_DeleteAllSettings() { //remove user-defined settings form user-database Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings(); foreach (string sSettingPath in sarrUserDefiniedSettings) { //check, if settings already exists if (oSettings.ExistSetting(sSettingPath)) { //setting exists --> DELETE oSettings.DeleteSetting(sSettingPath); } else { //IBM ZUM TESTEN !! //global::System.Windows.Forms.MessageBox.Show("Setting '" + sSettingPath + "' FEHLT !"); } } } [DeclareAction("AutoSync_CreateAllSettings")] public void AutoSync_CreateAllSettings() { //check, if settings already exists Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings(); foreach (string sSettingPath in sarrUserDefiniedSettings) { if (!oSettings.ExistSetting(sSettingPath)) { //setting doesn't exist --> create new bool bOkCreated = oSettings.AddStringSetting(sSettingPath, new string[] { }, new string[] { }, "User defined setting of ESS AutoSyncNavis-Utility", new string[] { string.Empty }, ISettings.CreationFlag.Insert); } } } [DeclareRegister] public void ESS_AutoSyncNavis_Register() { new CommandLineInterpreter().Execute("AutoSync_CreateAllSettings"); } [DeclareUnregister] public void ESS_AutoSyncNavis_UnRegister() { new CommandLineInterpreter().Execute("AutoSync_DeleteAllSettings"); } [DeclareMenu] public void MenuFunction() { //run action once for correct intializing of menu new CommandLineInterpreter().Execute("ESS_ToggleAutoSync /sInitalization:YES"); } [DeclareEventHandler("onSelChanged")] public void MyEventHandlerAction() { #region check settings Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings(); string sSettingName = "USER.Custom.ESS_AutoSyncNavis.AutoSyncState"; string sAutoSyncState = string.Empty; sAutoSyncState = oSettings.GetStringSetting(sSettingName, 0); #endregion //check, if autosync is activeated if (sAutoSyncState == string.Empty | sAutoSyncState.ToUpper() != "ON") { //no action return; } else { //setting existing and activiated --> synchronize navigators new CommandLineInterpreter().Execute("XEsSyncPDDsAction"); } return; } }