AutoSyncNavis
Mit diesem Script werden Navigatoren automatisch mit der aktuellen Selektion synchronisiert.
Vielen Dank an FrankS für das Erstellen 💖
Achtung: Je nachdem wie viele Navigatoren geöffnet sind und wie groß das Projekt ist, kann sich das Script negativ auf die Perfomance auswirken.
// AutoSyncNavis.cs
//
// Nachdem das Script geladen wurde kann das Synchronisieren aller Navigatoren mit dem
// ausgewählten Element im GED aktiviert werden.
//
// Es wird ein neuer Menüpunkt "AutoSync Navigatoren" in der Gruppe "Erweiterung" im Tab "Ansicht" angelegt,
// außerdem wird die aktuelle Einstellung gespeichert.
//
// Copyright by Frank Schöneck, 2024
//
// letzte Änderung:
// V1.0.0, 23.07.2024, Frank Schöneck, Projektbeginn
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Gui;
using Eplan.EplApi.Scripting;
using System.Linq;
public class AutoSyncNavis
{
private string sSettingName = "USER.SCRIPTS.AutoSyncNavis.AutoSyncState";
//RibbonBar Einträge definieren
string m_TabName = "Ansicht";
string m_commandGroupName = "Erweiterungen";
string m_commandName = "AutoSync";
string m_SVGstringIconNavigator = @"<svg fill='#464646' height='800px' width='800px' version='1.1' id='XMLID_85_' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 24 24' enable-background='new 0 0 24 24' xml:space='preserve'>
<path d='M21,24h-6v-6h6V24z M17,22h2v-2h-2V22z M15,22H6V8H3V0h8v8H8v4h7v2H8v6h7V22z M5,6h4V2H5V6z M21,16h-6v-6h6V16z M17,14h2 v-2h-2V14z'/>
</svg>";
[DeclareRegister]
public void registerRibbonItems()
{
RibbonBar ribbonBar = new RibbonBar();
var newTab = new Eplan.EplApi.Gui.RibbonBar().Tabs.FirstOrDefault(item => item.Name == m_TabName);
if (newTab == null) //Tab noch nicht vorhanden, dann neu erzeugen
{
newTab = new Eplan.EplApi.Gui.RibbonBar().AddTab(m_TabName);
}
var commandGroup = newTab.CommandGroups.FirstOrDefault(item => item.Name == m_commandGroupName);
if (commandGroup == null) //CommandGroup noch nicht vorhanden, dann neu erzeugen
{
commandGroup = newTab.AddCommandGroup(m_commandGroupName);
}
RibbonIcon ribbonIconNavigator = ribbonBar.AddIcon(m_SVGstringIconNavigator); //Icon festlegen
commandGroup.AddCommand(m_commandName, "AutoSyncNavis", m_commandName, "AutoSync der Navigatoren ein- / ausschalten", ribbonIconNavigator);
}
[DeclareUnregister]
public void unRegisterRibbonItems()
{
//Command entfernen
var vTab = new Eplan.EplApi.Gui.RibbonBar().Tabs.FirstOrDefault(item => item.Name == m_TabName);
if (vTab != null)
{
var commandGroup = vTab.CommandGroups.FirstOrDefault(item => item.Name == m_commandGroupName);
if (commandGroup != null)
{
var command = commandGroup.Commands.Values.FirstOrDefault(item => item.Text == m_commandName);
if (command != null)
{
command.Remove();
}
//Wenn CommandGroup leer ist diese auch entfernen
if (commandGroup.Commands.Count == 0)
{
commandGroup.Remove();
}
}
//Wenn Tab leer ist dieses auch entfernen
if (vTab.Commands.Count == 0)
{
vTab.Remove();
}
}
//Einstellungen löschen
DeleteSettings();
}
[DeclareAction("AutoSyncNavis")]
public void AutoSyncNavisAction()
{
Settings oSettings = new Settings();
string sAutoSyncState = string.Empty;
if (oSettings.ExistSetting(sSettingName))
{
sAutoSyncState = oSettings.GetStringSetting(sSettingName, 0);
}
//Prüfen ob AutoSync aktiviert ist
if (sAutoSyncState == string.Empty | sAutoSyncState.ToUpper() != "ON")
{
//nicht aktiviert
Decider eDecision = new Decider();
EnumDecisionReturn eAnswer = eDecision.Decide(
EnumDecisionType.eYesNoDecision,
"Soll das Auto-Synchronisieren der Navigatoren eingeschaltet werden?",
"AutoSyncNavis",
EnumDecisionReturn.eYES,
EnumDecisionReturn.eNO,
string.Empty,
false,
EnumDecisionIcon.eQUESTION);
if (eAnswer == EnumDecisionReturn.eYES)
{
//Einstellung speichern
SetSettings("ON");
}
}
else
{
Decider eDecision = new Decider();
EnumDecisionReturn eAnswer = eDecision.Decide(
EnumDecisionType.eYesNoDecision,
"Soll das Auto-Synchronisieren der Navigatoren ausgeschaltet werden?",
"AutoSyncNavis",
EnumDecisionReturn.eYES,
EnumDecisionReturn.eNO,
string.Empty,
false,
EnumDecisionIcon.eQUESTION);
if (eAnswer == EnumDecisionReturn.eYES)
{
//Einstellung speichern
SetSettings("OFF");
}
}
return;
}
//Einstellungen speichern
private void SetSettings(string AutoSyncActive)
{
Settings oSettings = new Settings();
if (!oSettings.ExistSetting(sSettingName))
{
oSettings.AddStringSetting(sSettingName,
new string[] { },
new string[] { },
ISettings.CreationFlag.Insert);
}
oSettings.SetStringSetting(sSettingName, AutoSyncActive, 0);
}
//Einstellungen löschen
public void DeleteSettings()
{
Settings oSettings = new Settings();
if (oSettings.ExistSetting(sSettingName))
{
oSettings.DeleteSetting(sSettingName);
new Decider().Decide(EnumDecisionType.eOkDecision,
"Die Einstellung [" + sSettingName + "] wurde gelöscht.",
"AutoSyncNavis",
EnumDecisionReturn.eOK,
EnumDecisionReturn.eOK,
string.Empty,
false,
EnumDecisionIcon.eINFORMATION);
}
else
{
new Decider().Decide(EnumDecisionType.eOkDecision,
"Die Einstellungen wurden nicht gefunden!",
"AutoSyncNavis",
EnumDecisionReturn.eOK,
EnumDecisionReturn.eOK,
string.Empty,
false,
EnumDecisionIcon.eFATALERROR);
}
}
//Eine Element wurde markiert
[DeclareEventHandler("onSelChanged")]
public void MyEventOnSelChanged()
{
Settings oSettings = new Settings();
string sAutoSyncState = string.Empty;
if (oSettings.ExistSetting(sSettingName))
{
sAutoSyncState = oSettings.GetStringSetting(sSettingName, 0);
}
//Prüfen ob AutoSync aktiviert ist
if (sAutoSyncState == string.Empty | sAutoSyncState.ToUpper() != "ON")
{
//Keine Aktion ausführen
return;
}
else
{
//Setting existiert und AutoSync soll aktiviert werden
new CommandLineInterpreter().Execute("XEsSyncPDDsAction");
}
return;
}
//Prüft ob Eplan gestartet wurde
[DeclareEventHandler("Eplan.EplApi.OnMainStart")]
public void MyEventEplanStart()
{
Settings oSettings = new Settings();
string sAutoSyncState = string.Empty;
//War AutoSync beim letzten mal aktiv?
if (oSettings.ExistSetting(sSettingName))
{
sAutoSyncState = oSettings.GetStringSetting(sSettingName, 0);
//wenn ja ("ON") dann AutoSync aktivieren
if (sAutoSyncState.ToUpper() == "ON")
{
new CommandLineInterpreter().Execute("XEsSyncPDDsAction");
}
}
return;
}
}
