eplan

MacroNavi

DanielPa hat einen sehr praktisches Script geschrieben, mit dem es möglich ist schnell und einfach Makros zu platzieren.

Anbei die Beschreibung von GitHub:
Mit diesem einfachen Werkzeug kann man Fenstermakros direkt (ohne Öffnen-Dialog) aus einem Navigator heraus finden und platzieren.

Anleitung: Die Scriptdatei aus dem Pfad MacroNavi/Templates/MacroNaviForm.cs in das Script_verzeichnis von P8 kopieren (“raw” anklicken um den rohen Text zu erhalten).
P8 starten und über das Manü Dienstprogramme>>Scripte>>Script Laden die zuvor gespeicherte Datei auswählen.
Im Menü Projektdaten erscheint nun der neue Eintrag “Fenstermakros” über dem Eintrag “Symbole”.

Features: mittels Baustruktur durch den standard Makropfad navigieren Makrovorschau wärend der Auswahl Makos mit Doppelklick, Eingabetaste oder mittels Ziehen&Ablegen platzieren gewünschte Darstellungsart über ein Kontextmenü auswählbar Pfad des ausgewählten Makroordners im Dateiexplorer anzeigen Makrobeschreibung als Tooltip anzeigen lassen.

Download (GitHub)

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
using System.Windows.Forms;
using Eplan.EplApi.Scripting;
using System.IO;
using System.Xml;
using Eplan.EplApi.Base;
using Eplan.EplApi.ApplicationFramework;
using System.Diagnostics;
using System.Drawing;
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;

namespace Eplanwiki.Scripting.MacroNavi
{

    public partial class MacroNavi : System.Windows.Forms.Form
    {
        private SplitContainer splitContainer1;
        private TreeView treeView1;
        private ListView listView1;
        private ColumnHeader columnHeader1;
        private ColumnHeader columnHeader2;
        private ColumnHeader columnHeader3;
        private ContextMenuStrip contextMenuStrip1;
        private ToolStripMenuItem expandAllToolStripMenuItem;
        private ToolStripMenuItem collapseAllToolStripMenuItem;
        private CheckBox checkBox1;
        private ContextMenuStrip contextMenuStrip2;
        private ToolStripMenuItem splitOrientationToolStripMenuItem;
        private ToolStripMenuItem horizontalToolStripMenuItem;
        private ToolStripMenuItem verticalToolStripMenuItem;
        private ContextMenuStrip contextMenuStrip3;
        private ToolStripMenuItem multiLineToolStripMenuItem;
        private ToolStripMenuItem singleLineToolStripMenuItem;
        private ToolStripMenuItem pairCrossReferenceToolStripMenuItem;
        private ToolStripMenuItem overviewToolStripMenuItem;
        private ToolStripMenuItem graphicsToolStripMenuItem;
        private ToolStripMenuItem articlePlacementToolStripMenuItem;
        private ToolStripMenuItem pi_FlowChartToolStripMenuItem;
        private ToolStripMenuItem fluid_MultiLineToolStripMenuItem;
        private ToolStripMenuItem articlePlacement3DToolStripMenuItem;
        private ToolStripMenuItem deleteUserSettingsToolStripMenuItem;       
        private string macropath;
        private bool userDeletedSettings = false;
        private string currentProject = string.Empty;
        private static string USER_SETTING_FORMLOCATION = "USER.SCRIPTS.MACRONAVI.FORMLOCATION";
        private static string USER_SETTING_FORMSIZE = "USER.SCRIPTS.MACRONAVI.FORMSIZE";
        private static string USER_SETTING_ORIENTATION = "USER.SCRIPTS.MACRONAVI.ORIENTATION";
        private static string USER_SETTING_SPLITDISTANCE = "USER.SCRIPTS.MACRONAVI.SPLITDISTANCE";
        private static string USER_SETTING_PREVIEW = "USER.SCRIPTS.MACRONAVI.PREVIEW";
        private static string[] USER_SETTINGS = {USER_SETTING_FORMLOCATION, 
                                                USER_SETTING_FORMSIZE,
                                                USER_SETTING_ORIENTATION,
                                                USER_SETTING_SPLITDISTANCE,
                                                USER_SETTING_PREVIEW};
        private ToolStripMenuItem refreshCurrentProjectToolStripMenuItem;
        private ToolStripMenuItem openPathToolStripMenuItem;
        private int nIndex = 0;
        private ToolStripMenuItem eigenschaftenToolStripMenuItem;

        #region Vom Windows Form-Designer generierter Code

        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        /// <param name="disposing">True, wenn verwaltete Ressourcen
        /// gelöscht werden sollen; andernfalls False.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor
        /// geändert werden.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.splitContainer1 = new System.Windows.Forms.SplitContainer();
            this.treeView1 = new System.Windows.Forms.TreeView();
            this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
            this.expandAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.collapseAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.openPathToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.listView1 = new System.Windows.Forms.ListView();
            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.contextMenuStrip3 = new System.Windows.Forms.ContextMenuStrip(this.components);
            this.multiLineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.singleLineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.pairCrossReferenceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.overviewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.graphicsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.articlePlacementToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.pi_FlowChartToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.fluid_MultiLineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.articlePlacement3DToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.checkBox1 = new System.Windows.Forms.CheckBox();
            this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components);
            this.splitOrientationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.horizontalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.verticalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.deleteUserSettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.refreshCurrentProjectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.eigenschaftenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
            this.splitContainer1.Panel1.SuspendLayout();
            this.splitContainer1.Panel2.SuspendLayout();
            this.splitContainer1.SuspendLayout();
            this.contextMenuStrip1.SuspendLayout();
            this.contextMenuStrip3.SuspendLayout();
            this.contextMenuStrip2.SuspendLayout();
            this.SuspendLayout();
            // 
            // splitContainer1
            // 
            this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.splitContainer1.Location = new System.Drawing.Point(0, 43);
            this.splitContainer1.Margin = new System.Windows.Forms.Padding(4);
            this.splitContainer1.Name = "splitContainer1";
            this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
            // 
            // splitContainer1.Panel1
            // 
            this.splitContainer1.Panel1.Controls.Add(this.treeView1);
            // 
            // splitContainer1.Panel2
            // 
            this.splitContainer1.Panel2.Controls.Add(this.listView1);
            this.splitContainer1.Size = new System.Drawing.Size(345, 538);
            this.splitContainer1.SplitterDistance = 268;
            this.splitContainer1.SplitterWidth = 5;
            this.splitContainer1.TabIndex = 0;
            this.splitContainer1.TabStop = false;
            // 
            // treeView1
            // 
            this.treeView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.treeView1.ContextMenuStrip = this.contextMenuStrip1;
            this.treeView1.Location = new System.Drawing.Point(4, 14);
            this.treeView1.Margin = new System.Windows.Forms.Padding(4);
            this.treeView1.Name = "treeView1";
            this.treeView1.Size = new System.Drawing.Size(336, 240);
            this.treeView1.TabIndex = 0;
            this.treeView1.TabStop = false;
            this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
            this.treeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown);
            // 
            // contextMenuStrip1
            // 
            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.expandAllToolStripMenuItem,
            this.collapseAllToolStripMenuItem,
            this.openPathToolStripMenuItem});
            this.contextMenuStrip1.Name = "contextMenuStrip1";
            this.contextMenuStrip1.Size = new System.Drawing.Size(193, 76);
            // 
            // expandAllToolStripMenuItem
            // 
            this.expandAllToolStripMenuItem.Name = "expandAllToolStripMenuItem";
            this.expandAllToolStripMenuItem.Size = new System.Drawing.Size(192, 24);
            this.expandAllToolStripMenuItem.Text = "Alle erweitern";
            this.expandAllToolStripMenuItem.Click += new System.EventHandler(this.expandAllToolStripMenuItem_Click);
            // 
            // collapseAllToolStripMenuItem
            // 
            this.collapseAllToolStripMenuItem.Name = "collapseAllToolStripMenuItem";
            this.collapseAllToolStripMenuItem.Size = new System.Drawing.Size(192, 24);
            this.collapseAllToolStripMenuItem.Text = "Alle reduzieren";
            this.collapseAllToolStripMenuItem.Click += new System.EventHandler(this.collapseAllToolStripMenuItem_Click);
            // 
            // openPathToolStripMenuItem
            // 
            this.openPathToolStripMenuItem.Name = "openPathToolStripMenuItem";
            this.openPathToolStripMenuItem.Size = new System.Drawing.Size(192, 24);
            this.openPathToolStripMenuItem.Text = "Dateipfad öffnen";
            this.openPathToolStripMenuItem.Click += new System.EventHandler(this.openPathToolStripMenuItem_Click);
            // 
            // listView1
            // 
            this.listView1.AllowDrop = true;
            this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
            this.columnHeader1,
            this.columnHeader2,
            this.columnHeader3});
            this.listView1.ContextMenuStrip = this.contextMenuStrip3;
            this.listView1.Location = new System.Drawing.Point(4, 14);
            this.listView1.Margin = new System.Windows.Forms.Padding(4);
            this.listView1.MultiSelect = false;
            this.listView1.Name = "listView1";
            this.listView1.ShowItemToolTips = true;
            this.listView1.Size = new System.Drawing.Size(336, 238);
            this.listView1.TabIndex = 0;
            this.listView1.TabStop = false;
            this.listView1.UseCompatibleStateImageBehavior = false;
            this.listView1.View = System.Windows.Forms.View.Details;
            this.listView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.listView1_ItemDrag);
            this.listView1.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.listView1_ItemSelectionChanged);
            this.listView1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.listView1_KeyPress);
            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseDoubleClick);
            // 
            // columnHeader1
            // 
            this.columnHeader1.Text = "Name";
            // 
            // columnHeader2
            // 
            this.columnHeader2.Text = "Typ";
            // 
            // columnHeader3
            // 
            this.columnHeader3.Text = "letzte Änderung";
            // 
            // contextMenuStrip3
            // 
            this.contextMenuStrip3.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.multiLineToolStripMenuItem,
            this.singleLineToolStripMenuItem,
            this.pairCrossReferenceToolStripMenuItem,
            this.overviewToolStripMenuItem,
            this.graphicsToolStripMenuItem,
            this.articlePlacementToolStripMenuItem,
            this.pi_FlowChartToolStripMenuItem,
            this.fluid_MultiLineToolStripMenuItem,
            this.articlePlacement3DToolStripMenuItem,
            this.eigenschaftenToolStripMenuItem});
            this.contextMenuStrip3.Name = "contextMenuStrip3";
            this.contextMenuStrip3.Size = new System.Drawing.Size(214, 266);
            // 
            // multiLineToolStripMenuItem
            // 
            this.multiLineToolStripMenuItem.Name = "multiLineToolStripMenuItem";
            this.multiLineToolStripMenuItem.Size = new System.Drawing.Size(213, 24);
            this.multiLineToolStripMenuItem.Text = "Allpolig";
            this.multiLineToolStripMenuItem.Click += new System.EventHandler(this.repTypeToolStripMenuItem_Click);
            // 
            // singleLineToolStripMenuItem
            // 
            this.singleLineToolStripMenuItem.Name = "singleLineToolStripMenuItem";
            this.singleLineToolStripMenuItem.Size = new System.Drawing.Size(213, 24);
            this.singleLineToolStripMenuItem.Text = "Einpolig";
            this.singleLineToolStripMenuItem.Click += new System.EventHandler(this.repTypeToolStripMenuItem_Click);
            // 
            // pairCrossReferenceToolStripMenuItem
            // 
            this.pairCrossReferenceToolStripMenuItem.Name = "pairCrossReferenceToolStripMenuItem";
            this.pairCrossReferenceToolStripMenuItem.Size = new System.Drawing.Size(213, 24);
            this.pairCrossReferenceToolStripMenuItem.Text = "Paarquerverweis";
            this.pairCrossReferenceToolStripMenuItem.Click += new System.EventHandler(this.repTypeToolStripMenuItem_Click);
            // 
            // overviewToolStripMenuItem
            // 
            this.overviewToolStripMenuItem.Name = "overviewToolStripMenuItem";
            this.overviewToolStripMenuItem.Size = new System.Drawing.Size(213, 24);
            this.overviewToolStripMenuItem.Text = "Übersicht";
            this.overviewToolStripMenuItem.Click += new System.EventHandler(this.repTypeToolStripMenuItem_Click);
            // 
            // graphicsToolStripMenuItem
            // 
            this.graphicsToolStripMenuItem.Name = "graphicsToolStripMenuItem";
            this.graphicsToolStripMenuItem.Size = new System.Drawing.Size(213, 24);
            this.graphicsToolStripMenuItem.Text = "Grafik";
            this.graphicsToolStripMenuItem.Click += new System.EventHandler(this.repTypeToolStripMenuItem_Click);
            // 
            // articlePlacementToolStripMenuItem
            // 
            this.articlePlacementToolStripMenuItem.Name = "articlePlacementToolStripMenuItem";
            this.articlePlacementToolStripMenuItem.Size = new System.Drawing.Size(213, 24);
            this.articlePlacementToolStripMenuItem.Text = "Schaltschrankaufbau";
            this.articlePlacementToolStripMenuItem.Click += new System.EventHandler(this.repTypeToolStripMenuItem_Click);
            // 
            // pi_FlowChartToolStripMenuItem
            // 
            this.pi_FlowChartToolStripMenuItem.Name = "pi_FlowChartToolStripMenuItem";
            this.pi_FlowChartToolStripMenuItem.Size = new System.Drawing.Size(213, 24);
            this.pi_FlowChartToolStripMenuItem.Text = "RI-Fließbild";
            this.pi_FlowChartToolStripMenuItem.Click += new System.EventHandler(this.repTypeToolStripMenuItem_Click);
            // 
            // fluid_MultiLineToolStripMenuItem
            // 
            this.fluid_MultiLineToolStripMenuItem.Name = "fluid_MultiLineToolStripMenuItem";
            this.fluid_MultiLineToolStripMenuItem.Size = new System.Drawing.Size(213, 24);
            this.fluid_MultiLineToolStripMenuItem.Text = "Allpolig Fluid";
            this.fluid_MultiLineToolStripMenuItem.Click += new System.EventHandler(this.repTypeToolStripMenuItem_Click);
            // 
            // articlePlacement3DToolStripMenuItem
            // 
            this.articlePlacement3DToolStripMenuItem.Name = "articlePlacement3DToolStripMenuItem";
            this.articlePlacement3DToolStripMenuItem.Size = new System.Drawing.Size(213, 24);
            this.articlePlacement3DToolStripMenuItem.Text = "3D-Montageaufbau";
            this.articlePlacement3DToolStripMenuItem.Click += new System.EventHandler(this.repTypeToolStripMenuItem_Click);
            // 
            // checkBox1
            // 
            this.checkBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.checkBox1.AutoSize = true;
            this.checkBox1.Checked = true;
            this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked;
            this.checkBox1.Location = new System.Drawing.Point(255, 14);
            this.checkBox1.Margin = new System.Windows.Forms.Padding(4);
            this.checkBox1.Name = "checkBox1";
            this.checkBox1.Size = new System.Drawing.Size(90, 21);
            this.checkBox1.TabIndex = 1;
            this.checkBox1.TabStop = false;
            this.checkBox1.Text = "Vorschau";
            this.checkBox1.UseVisualStyleBackColor = true;
            this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
            // 
            // contextMenuStrip2
            // 
            this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.splitOrientationToolStripMenuItem,
            this.deleteUserSettingsToolStripMenuItem,
            this.refreshCurrentProjectToolStripMenuItem});
            this.contextMenuStrip2.Name = "contextMenuStrip2";
            this.contextMenuStrip2.Size = new System.Drawing.Size(221, 76);
            // 
            // splitOrientationToolStripMenuItem
            // 
            this.splitOrientationToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.horizontalToolStripMenuItem,
            this.verticalToolStripMenuItem});
            this.splitOrientationToolStripMenuItem.Name = "splitOrientationToolStripMenuItem";
            this.splitOrientationToolStripMenuItem.Size = new System.Drawing.Size(220, 24);
            this.splitOrientationToolStripMenuItem.Text = "Aufteilung";
            // 
            // horizontalToolStripMenuItem
            // 
            this.horizontalToolStripMenuItem.Name = "horizontalToolStripMenuItem";
            this.horizontalToolStripMenuItem.Size = new System.Drawing.Size(148, 24);
            this.horizontalToolStripMenuItem.Text = "Horizontal";
            this.horizontalToolStripMenuItem.Click += new System.EventHandler(this.horizontalToolStripMenuItem_Click);
            // 
            // verticalToolStripMenuItem
            // 
            this.verticalToolStripMenuItem.Name = "verticalToolStripMenuItem";
            this.verticalToolStripMenuItem.Size = new System.Drawing.Size(148, 24);
            this.verticalToolStripMenuItem.Text = "Vertikal";
            this.verticalToolStripMenuItem.Click += new System.EventHandler(this.verticalToolStripMenuItem_Click);
            // 
            // deleteUserSettingsToolStripMenuItem
            // 
            this.deleteUserSettingsToolStripMenuItem.Name = "deleteUserSettingsToolStripMenuItem";
            this.deleteUserSettingsToolStripMenuItem.Size = new System.Drawing.Size(220, 24);
            this.deleteUserSettingsToolStripMenuItem.Text = "Einstellungen löschen";
            this.deleteUserSettingsToolStripMenuItem.Click += new System.EventHandler(this.deleteUserSettingsToolStripMenuItem_Click);
            // 
            // refreshCurrentProjectToolStripMenuItem
            // 
            this.refreshCurrentProjectToolStripMenuItem.Name = "refreshCurrentProjectToolStripMenuItem";
            this.refreshCurrentProjectToolStripMenuItem.Size = new System.Drawing.Size(220, 24);
            this.refreshCurrentProjectToolStripMenuItem.Text = "Projekt aktualisieren";
            this.refreshCurrentProjectToolStripMenuItem.Click += new System.EventHandler(this.refreshCurrentProjectToolStripMenuItem_Click);
            // 
            // eigenschaftenToolStripMenuItem
            // 
            this.eigenschaftenToolStripMenuItem.Name = "eigenschaftenToolStripMenuItem";
            this.eigenschaftenToolStripMenuItem.Size = new System.Drawing.Size(213, 24);
            this.eigenschaftenToolStripMenuItem.Text = "Eigenschaften...";
            this.eigenschaftenToolStripMenuItem.Click += new System.EventHandler(this.eigenschaftenToolStripMenuItem_Click);
            // 
            // MacroNavi
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(345, 583);
            this.ContextMenuStrip = this.contextMenuStrip2;
            this.Controls.Add(this.checkBox1);
            this.Controls.Add(this.splitContainer1);
            this.Margin = new System.Windows.Forms.Padding(4);
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "MacroNavi";
            this.ShowIcon = false;
            this.ShowInTaskbar = false;
            this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
            this.Text = "Makros";
            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frm_FormClosing);
            this.Load += new System.EventHandler(this.frm_Load);
            this.splitContainer1.Panel1.ResumeLayout(false);
            this.splitContainer1.Panel2.ResumeLayout(false);
            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
            this.splitContainer1.ResumeLayout(false);
            this.contextMenuStrip1.ResumeLayout(false);
            this.contextMenuStrip3.ResumeLayout(false);
            this.contextMenuStrip2.ResumeLayout(false);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        public MacroNavi()
        {
            InitializeComponent();
        }

        #endregion

        /// <summary>
        /// Inserts menupoint above the "Symbole" (GER) entry in "Projektdaten"
        /// </summary>
        [DeclareMenu]
        public void MenuFunction()
        {
            Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu();
            uint presMenuId = oMenu.GetPersistentMenuId("Symbole");
            oMenu.AddMenuItem("Fenstermakros", "ShowMacroNavi", "Makros", presMenuId, 0, false, false);
        }      

        /// <summary>
        /// The action called from menu "Fenstermakros", shows the form
        /// </summary>
        [DeclareAction("ShowMacroNavi")]
        public void ShowMacroNavi()
        {              
            MacroNavi frm = new MacroNavi();
            Process oCurrent = Process.GetCurrentProcess();
            var ww = new WindowWrapper(oCurrent.MainWindowHandle);            

            setFormProperties(frm);                       

            if (!frm_IsLoaded(frm.Name))
            {
                frm.Show(ww);
            }                                    
        }

        /// <summary>
        /// Determines the current project via the Eplan-Action "SelectinSet". Doesn't work if the GED is not in focus.
        /// </summary>
        /// <returns>Absolute projectaname as string</returns>
        private string getCurrentProject()
        {
            CommandLineInterpreter oCli = new CommandLineInterpreter();
            ActionCallingContext acc = new ActionCallingContext();
            string project = string.Empty;
            acc.AddParameter("Type", "PROJECT");
            oCli.Execute("selectionset", acc);
            acc.GetParameter("PROJECT", ref project);
            return project;
        }

        /// <summary>
        /// Sets the form-size and location, orientation an size of the splitcontainer and the value of the checkbox from usersetting.
        /// </summary>
        /// <param name="_frm"></param>
        private void setFormProperties(MacroNavi _frm)
        {
            Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();

            if (oSettings.ExistSetting(USER_SETTING_FORMLOCATION))
            {
                _frm.Top = oSettings.GetNumericSetting(USER_SETTING_FORMLOCATION, 0);
                _frm.Left = oSettings.GetNumericSetting(USER_SETTING_FORMLOCATION, 1);
            }
            if (oSettings.ExistSetting(USER_SETTING_FORMSIZE))
            {
                _frm.Height = oSettings.GetNumericSetting(USER_SETTING_FORMSIZE, 0);
                _frm.Width = oSettings.GetNumericSetting(USER_SETTING_FORMSIZE, 1);
            }
            if (oSettings.ExistSetting(USER_SETTING_ORIENTATION))
            {
                _frm.splitContainer1.Orientation = (Orientation)oSettings.GetNumericSetting(USER_SETTING_ORIENTATION, 0);
            }
            if (oSettings.ExistSetting(USER_SETTING_SPLITDISTANCE))
            {
                _frm.splitContainer1.SplitterDistance = oSettings.GetNumericSetting(USER_SETTING_SPLITDISTANCE, 0);
            }
            if (oSettings.ExistSetting(USER_SETTING_PREVIEW))
            {
                _frm.checkBox1.Checked = oSettings.GetBoolSetting(USER_SETTING_PREVIEW, 0);
            }            
        }

        /// <summary>
        /// Determines if the form is already loaded
        /// </summary>
        /// <param name="sName">Name of the MacroNavi object</param>
        /// <returns></returns>
        private bool frm_IsLoaded(string sName)
        {
            bool bResult = false;
            foreach (Form oForm in Application.OpenForms)
            {
                if (oForm.Name.ToLower() == sName.ToLower())
                {
                    bResult = true;
                    break;
                }
            }
            return (bResult);
        }        

        /// <summary>
        /// first treeview population, preview visibility and current project set
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frm_Load(object sender, System.EventArgs e)
        {
            currentProject = getCurrentProject();
            setPreview("", currentProject, checkBox1.Checked);
            populateTreeView();
        }

        /// <summary>
        /// Populates the tree with foldernames of the eplan macropath.
        /// <seealso cref="http://msdn.microsoft.com/en-us/library/ms171645(v=vs.90).aspx"/>
        /// </summary>
        private void populateTreeView()
        {
            treeView1.Nodes.Clear();
            TreeNode rootNode;

            macropath = PathMap.SubstitutePath("$(MD_MACROS)");
            DirectoryInfo info = new DirectoryInfo(macropath + @"\");
            if (info.Exists)
            {                
                rootNode = new TreeNode(info.Name);
                rootNode.Tag = info;
                getDirectories(info.GetDirectories(), rootNode);
                treeView1.Nodes.Add(rootNode);
            }
            treeView1.Sort();
        }

        /// <summary>
        /// <see cref="http://msdn.microsoft.com/en-us/library/ms171645(v=vs.90).aspx"/>
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TreeNode newSelected = e.Node;
            listView1.Items.Clear();
            try
            {
                DirectoryInfo nodeDirInfo = (DirectoryInfo)newSelected.Tag;
                ListViewItem.ListViewSubItem[] subItems;
                ListviewFileItem item = null;

                foreach (DirectoryInfo dir in nodeDirInfo.GetDirectories())
                {
                    item = new ListviewFileItem(dir.Name, 0);
                    item.FullFilePath = dir.FullName;
                    subItems = new ListViewItem.ListViewSubItem[]
                    {new ListViewItem.ListViewSubItem(item, "Directory"), 
                     new ListViewItem.ListViewSubItem(item, 
						dir.LastAccessTime.ToShortDateString())};
                    item.SubItems.AddRange(subItems);
                    listView1.Items.Add(item);
                }
                foreach (FileInfo file in nodeDirInfo.GetFiles("*.ema"))
                {
                    item = new ListviewFileItem(file.Name, 1);
                    item.ToolTipText = getListViewItemToolTipText(file);
                    item.FullFilePath = file.FullName;
                    subItems = new ListViewItem.ListViewSubItem[]
                    { new ListViewItem.ListViewSubItem(item, "File"), 
                     new ListViewItem.ListViewSubItem(item, 
						file.LastAccessTime.ToShortDateString())};

                    item.SubItems.AddRange(subItems);
                    listView1.Items.Add(item);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fehlgeschlagen: " + ex.Message, "Pfad nicht gefunden", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        }

        /// <summary>
        /// <see cref="http://msdn.microsoft.com/en-us/library/ms171645(v=vs.90).aspx"/>
        /// </summary>
        /// <param name="subDirs"></param>
        /// <param name="nodeToAddTo"></param>
        private void getDirectories(DirectoryInfo[] subDirs, TreeNode nodeToAddTo)
        {
            TreeNode aNode;
            DirectoryInfo[] subSubDirs;
            foreach (DirectoryInfo subDir in subDirs)
            {
                aNode = new TreeNode(subDir.Name, 0, 0);
                aNode.Tag = subDir;
                //aNode.ImageKey = "folder";
                subSubDirs = subDir.GetDirectories();
                if (subSubDirs.Length != 0)
                {
                    getDirectories(subSubDirs, aNode);
                }
                nodeToAddTo.Nodes.Add(aNode);
            }
        }

        /// <summary>
        /// Called from event if the selected item in listview has changed.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            if (listView1.SelectedItems.Count > 0 && checkBox1.Checked)
            {                
                //string absoluteMacroName = macropath + treeView1.SelectedNode.FullPath.Replace(treeView1.Nodes[0].Text, "") + "\\" + listView1.SelectedItems[0].Text;                
                setPreview(((ListviewFileItem)e.Item).FullFilePath, currentProject, this.checkBox1.Checked);
            }
            listView1.Focus();
        }

        /// <summary>
        /// Opens or closes the preview window via the eplan action "XSDPreviewAction"
        /// </summary>
        /// <param name="_absoluteMacroName"></param>
        /// <param name="_absoluteProjectName"></param>
        /// <param name="_show"></param>
        private void setPreview(string _absoluteMacroName, string _absoluteProjectName, bool _show)
        {
            CommandLineInterpreter oCli = new CommandLineInterpreter();
            ActionCallingContext acc = new ActionCallingContext();            
            acc.AddParameter("PROJECTNAME", _absoluteProjectName);
            if (File.Exists(_absoluteMacroName))
            {
                acc.AddParameter("MACRONAME", _absoluteMacroName);
            }            
            acc.AddParameter("SHOW", Convert.ToInt16(_show).ToString());            
            oCli.Execute("XSDPreviewAction", acc);
        }

        /// <summary>
        /// Inserts macro by doubleclicking an item in listview.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            bool isDirectory;
            if (listView1.SelectedItems != null)
            {
                isDirectory = listView1.SelectedItems[0].SubItems[1].Text.Equals("Directory");
                string equals = listView1.SelectedItems[0].SubItems[0].Text;

                if (isDirectory)
                {                    
                    foreach (TreeNode node in treeView1.SelectedNode.Nodes)
                    {
                        if (node.Text.Equals(equals))
                        {
                            treeView1.SelectedNode = node;
                        }
                    }
                }
                if(!isDirectory)
                {                    
                    instertMacro(((ListviewFileItem)listView1.SelectedItems[0]).FullFilePath, WindowMacro.RepresentationType.MultiLine, 0);
                }
            }
        }

        /// <summary>
        /// Inserts macro by hittig enter on selected item in listview.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listView1_KeyPress(object sender, KeyPressEventArgs e)
        {

            if (e.KeyChar == (char)Keys.Return)
            {
                instertMacro(((ListviewFileItem)listView1.SelectedItems[0]).FullFilePath, WindowMacro.RepresentationType.MultiLine, 0);
            }

        }

        /// <summary>
        /// Inserts macro via the eplan interaction "XGedStartInteractionAction".
        /// </summary>
        /// <param name="reptype">Use the enumerators from the static class WindowMacro</param>
        /// <param name="variant">Variant_A = 0 Variant_B = 1 ... Variant_P = 15 </param>
        private void instertMacro(string absoluteMacroName, WindowMacro.RepresentationType reptype, Int32 variant)
        {

            if (listView1.SelectedItems.Count > 0 && File.Exists(absoluteMacroName))
            {                
                new CommandLineInterpreter().Execute("XGedStartInteractionAction /Name:XMIaInsertMacro /filename:"
                + "\"" + absoluteMacroName + "\"" +
                "/variant:" + variant.ToString() + " /RepresentationType:" + ((int)reptype).ToString());
            }
        }

        /// <summary>
        /// Returns the full filepath accumulated from macropath, selected treenode an listviewitem
        /// </summary>
        /// <returns></returns>        
        //private string getAbsoluteMacroPath()
        //{
        //    return macropath + treeView1.SelectedNode.FullPath.Replace(treeView1.Nodes[0].Text, "") + "\\" + listView1.SelectedItems[0].Text;
        //}

        /// <summary>
        /// Called by event if form is closing. Writes the current satus of the form to usersettigs
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!userDeletedSettings)
            {
                settingsWrite();
            }
            setPreview("", currentProject, false);
        }

        /// <summary>
        /// Shows and hides the preview
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            setPreview("", currentProject, checkBox1.Checked);
        }

        /// <summary>
        /// Expands the hole treeview.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void expandAllToolStripMenuItem_Click(object sender, EventArgs e)
        {
            treeView1.ExpandAll();
        }

        /// <summary>
        /// Collapses the hole treeview.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void collapseAllToolStripMenuItem_Click(object sender, EventArgs e)
        {
            treeView1.CollapseAll();
        }

        /// <summary>
        /// Reads the description of a windowmacro and returns one language
        /// </summary>
        /// <param name="file">has to be a macrofile</param>
        /// <returns>description from multilanguagestring</returns>
        private string getListViewItemToolTipText(FileInfo file)
        {
            string description = "keine Beschreibung";

            try
            {
                XmlTextReader xreader = new XmlTextReader(file.FullName);
                while (xreader.Read())
                {
                    if (xreader.HasAttributes)
                    {
                        while (xreader.MoveToNextAttribute())
                        {
                            if (xreader.Name == "P23004")
                            {
                                if (xreader.HasValue)
                                {
                                    MultiLangString mulangStr = new MultiLangString();
                                    mulangStr.SetAsString(xreader.Value);
                                    description = mulangStr.GetStringToDisplay(ISOCode.Language.L_de_DE);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lesen von Makro fehleschlagen \n" + ex.Message, "Fehler beim lesen von Makro", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                
            }
            return description;
        }

        /// <summary>
        /// Changes the oriantation of the splitcontainer to horizontal.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void horizontalToolStripMenuItem_Click(object sender, EventArgs e)
        {
            splitContainer1.Orientation = Orientation.Horizontal;
        }

        /// <summary>
        /// Changes the oriantation of the splitcontainer to vertical.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void verticalToolStripMenuItem_Click(object sender, EventArgs e)
        {
            splitContainer1.Orientation = Orientation.Vertical;
        }

        /// <summary>
        /// Inserts macro in representationtype MultiLine
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void repTypeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            WindowMacro.RepresentationType repType;
            WindowMacro.representaiontypes.TryGetValue(((ToolStripItem)sender).Text, out repType);            
            instertMacro(((ListviewFileItem)listView1.SelectedItems[0]).FullFilePath, repType, 0);
        }
        
        /// <summary>
        /// Writes the properties of the form to eplan user settings.
        /// <seealso cref="http://ww3.cad.de/foren/ubb/Forum467/HTML/005894.shtml"/>
        /// </summary>
        private void settingsWrite()
        {

            Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();
            if (!oSettings.ExistSetting(USER_SETTING_FORMLOCATION))
            {
                oSettings.AddNumericSetting(USER_SETTING_FORMLOCATION,
                    new int[] { 0 },
                    new Range[] { new Range { FromValue = -32768, ToValue = 32768 } },
                    "Default value of test setting",
                    new int[] { 0 },
                    ISettings.CreationFlag.Insert);
            }

            oSettings.SetNumericSetting(USER_SETTING_FORMLOCATION, this.Top, 0);
            oSettings.SetNumericSetting(USER_SETTING_FORMLOCATION, this.Left, 1);
            if (!oSettings.ExistSetting(USER_SETTING_FORMSIZE))
            {
                oSettings.AddNumericSetting(USER_SETTING_FORMSIZE,
                    new int[] { 0 },
                    new Range[] { new Range { FromValue = -32768, ToValue = 32768 } },
                    "Default value of test setting",
                    new int[] { 0 },
                    ISettings.CreationFlag.Insert);
            }
            oSettings.SetNumericSetting(USER_SETTING_FORMSIZE, this.Height, 0);
            oSettings.SetNumericSetting(USER_SETTING_FORMSIZE, this.Width, 1);


            if (!oSettings.ExistSetting(USER_SETTING_ORIENTATION))
            {
                oSettings.AddNumericSetting(USER_SETTING_ORIENTATION,
                    new int[] { 0 },
                    new Range[] { new Range { FromValue = 0, ToValue = 1 } },
                    "Default value of test setting",
                    new int[] { 0 },
                    ISettings.CreationFlag.Insert);
            }
            oSettings.SetNumericSetting(USER_SETTING_ORIENTATION, (int)this.splitContainer1.Orientation, 0);

            if (!oSettings.ExistSetting(USER_SETTING_SPLITDISTANCE))
            {
                oSettings.AddNumericSetting(USER_SETTING_SPLITDISTANCE,
                    new int[] { 0 },
                    new Range[] { new Range { FromValue = -32768, ToValue = 32768 } },
                    "Default value of test setting",
                    new int[] { 0 },
                    ISettings.CreationFlag.Insert);
            }
            oSettings.SetNumericSetting(USER_SETTING_SPLITDISTANCE, (int)this.splitContainer1.SplitterDistance, 0);

            if (!oSettings.ExistSetting(USER_SETTING_PREVIEW))
            {
                oSettings.AddBoolSetting(USER_SETTING_PREVIEW, new bool[] { false },
                    "Default value of test setting",
                    new bool[] { false },
                    ISettings.CreationFlag.Insert);
            }
            oSettings.SetBoolSetting(USER_SETTING_PREVIEW, this.checkBox1.Checked, 0);
        }

        /// <summary>
        /// Deletes the user settings of this script
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void deleteUserSettingsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Sollen die Einstellungen dieses Scripts aus den User-Settings gelöscht werden?", "Einstellungen löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (result == System.Windows.Forms.DialogResult.Yes)
            {
                Eplan.EplApi.Base.Settings oSettings = new Eplan.EplApi.Base.Settings();
                foreach (string setting in USER_SETTINGS)
                {
                    if (oSettings.ExistSetting(setting))
                    {
                        oSettings.DeleteSetting(setting);
                    }
                }
                userDeletedSettings = true;
            }

        }

        /// <summary>
        /// Initiates the DragDropEvent on the listview
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
        {            
            //string absoluteMacroName = macropath + treeView1.SelectedNode.FullPath.Replace(treeView1.Nodes[0].Text, "") + "\\" + ((ListViewItem)e.Item).Text;
            if (File.Exists(((ListviewFileItem)e.Item).FullFilePath))
            {
                string[] filesTodrag = { ((ListviewFileItem)e.Item).FullFilePath };
                DoDragDrop(new DataObject(DataFormats.FileDrop, filesTodrag), DragDropEffects.Copy);
            }                        
        }       

        /// <summary>
        /// workaround for currentProject value lost when form is active
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void refreshCurrentProjectToolStripMenuItem_Click(object sender, EventArgs e)
        {
            currentProject = getCurrentProject();
        }
        
        /// <summary>
        /// opens selected macropath in explorer-window
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void openPathToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string folderpath = macropath + treeView1.SelectedNode.FullPath.Replace(treeView1.Nodes[0].Text, "");

            try
            {
                Process.Start(folderpath);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Pfad konnte nicht geöffnet werden\n"+ ex.Message, "Fehler beim öffnen", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
        }

        /// <summary>
        /// Refresh treeview with F5 key
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F5)
            {              
                populateTreeView();
            }
        }

        private void eigenschaftenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            WindowMacro wm = new WindowMacro(((ListviewFileItem)listView1.SelectedItems[0]).FullFilePath);
        }        
    }

    public class ListviewFileItem : ListViewItem
    {
        private string p1;
        private int p2;

        public ListviewFileItem(string text, int imageIndex) : base(text, imageIndex) { }
        
        public string FullFilePath { get; set; }
    }

    /// <summary>
    /// Contains the enums of macro represetationtypes
    /// </summary>
    public class WindowMacro
    {
        private const string NAME_ATTRIBUTE = "EplanPxfRoot/@Name";
        private const string REPRESTYPE_ATTRIBUTE = "MacroVariant/@MacroFuncType";
        private const string VARIANT_ATTRIBUTE = "MacroVariant/@VariantId";
        private const string VERSION_ATTRIBUTE = "P11/@P23002";
        private const string SOURCE_ATTRIBUTE = "";
        private const string DESCRIPTION_ATTRIBUTE = "";
        private const string INSPOINTACTIVE_ATTRIBUTE = "";
        private const string INSPOINTX_ATTRIBUTE = "";
        private const string INSPOINTY_ATTRIBUTE = "";
        private const string REFERENCEACTIVE_ATTRIBUTE = "";
        private XmlDocument xmlDoc;
        private XmlNamespaceManager xmlNamSpaceMgr;
        private XmlAttribute xmlAttribute;

        public string Name { get; set; }
        public RepresentationType Representationtype { get; set; }
        public int[] Variants { get; set; }
        public string Version { get; set; }
        public string Source_Reference { get; set; }
        public string Description { get; set; }
        public bool InsertionPointActive { get; set; }
        public double InsertionPoint_X { get; set; }
        public double InsertionPoint_Y { get; set; }
        public bool ReferencesActive { get; set; }

         
        public WindowMacro(string filename)
        {
            xmlDoc = new XmlDocument();
            
            if (File.Exists(filename))
            {
                xmlDoc.Load(filename);
                xmlNamSpaceMgr = new XmlNamespaceManager(xmlDoc.NameTable);

                Name = ((XmlAttribute)xmlDoc.SelectSingleNode(NAME_ATTRIBUTE, xmlNamSpaceMgr)).Value;
                Variants = new int[xmlDoc.SelectNodes(VARIANT_ATTRIBUTE, xmlNamSpaceMgr).Count];
                for (int i = 0; i < xmlDoc.SelectNodes(VARIANT_ATTRIBUTE, xmlNamSpaceMgr).Count; i++)
                {
                    Variants[i] = Convert.ToInt32(xmlDoc.SelectNodes(VARIANT_ATTRIBUTE, xmlNamSpaceMgr).Item(i).Value);
                }
                
                MessageBox.Show(Name+Variants.Length);
            }
        }
        /// <summary>
        /// Dictionary with clear name and enum of representationtype of a macro
        /// </summary>
        public static SortedDictionary<string, WindowMacro.RepresentationType> representaiontypes = new SortedDictionary<string, WindowMacro.RepresentationType>()
        {
            {"Allpolig", WindowMacro.RepresentationType.MultiLine},
            {"Einpolig" ,WindowMacro.RepresentationType.SingleLine},
            {"Paarquerverweis", WindowMacro.RepresentationType.PairCrossReference},
            {"Übersicht", WindowMacro.RepresentationType.Overview},
            {"Grafik", WindowMacro.RepresentationType.Graphics},
            {"Schaltschrankaufbau", WindowMacro.RepresentationType.ArticlePlacement},
            {"RI-Fließbild", WindowMacro.RepresentationType.PI_FlowChart},
            {"Allpolig Fluid", WindowMacro.RepresentationType.Fluid_MultiLine},
            {"Cabeling", WindowMacro.RepresentationType.Cabling},
            {"3D-Montageaufbau", WindowMacro.RepresentationType.ArticlePlacement3D},
            {"Funktional", WindowMacro.RepresentationType.Functional}        
        };

        /// <summary>
        /// macro representationtypes enumerators
        /// </summary>
        public enum RepresentationType
        {
            MultiLine = 1,
            SingleLine = 2,
            PairCrossReference = 3,
            Overview = 4,
            Graphics = 5,
            ArticlePlacement = 6,
            PI_FlowChart = 7,
            Fluid_MultiLine = 8,
            Cabling = 9,
            ArticlePlacement3D = 10,
            Functional = 11
        }
    }

    /// <summary>
    /// Class to handle the owner of the form.
    /// </summary>
    public class WindowWrapper : System.Windows.Forms.IWin32Window
    {
        public WindowWrapper(IntPtr handle)
        {
            _hwnd = handle;
        }

        public IntPtr Handle
        {
            get { return _hwnd; }
        }
        private IntPtr _hwnd;
    }    
}

 

Von |2017-11-09T12:23:40+01:002015-03-05|EPLAN, EPLAN-Scripts|

XGedUpdateMacroAction

Werden Makros in EPLAN über die Funktion “Makro aktualisieren” erneuert, wird leider der Wertesatz auf den Ursprungswert gesetzt.

Mit diesem Script wird der Wertesatz nicht verändert.

Die Action überschreibt die eigentlich EPLAN-Action. Da es hier zu einem Bufferoverflow kommen würde muss die eigentliche Action mit dem ActionCallingContext ausgestattet werden.

XGedUpdateMacroAction

 

XGedUpdateMacroAction (1271 Downloads )

 

using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;

namespace ibKastl.Scripts.Global
{
    class XGedUpdateMacroAction_Overload
    {
        [DeclareAction("XGedUpdateMacroAction", 50)] // Overwrite with ordinal
        public void Action()
        {
            ActionCallingContext actionCallingContext = new ActionCallingContext();
            actionCallingContext.AddParameter("AutoAssignLastUsedRecord", "1");
            Eplan.EplApi.ApplicationFramework.Action action = new ActionManager().FindBaseActionFromFunctionAction(false); // Full Namespace, couse of compiler warning in EPLAN
            action.Execute(actionCallingContext);
        }
    }
}
Von |2017-11-09T12:23:41+01:002015-02-24|EPLAN, EPLAN-Scripts|

ScriptTest

Es macht keinen Spaß Scripte zu testen… Immer wieder entladen, laden… die Fehlersuche wird somit noch schwieriger.
Ich habe lange überlegt, wie hier der Workflow optimiert werden kann.

Natürlich mit einem Script :)

Mit diesem Script, welches in EPLAN geladen werden muss, können verschiedene andere Scripte automatisch aus Visual Studio heraus in EPLAN getestet werden.

Der Ablauf ist wie folgt:

  • ScriptTest.cs in EPLAN laden
  • Visual Studio Projekt Startoptionen einstellen
  • Parameter angeben

In Visual Studio sehen die Startoptionen wie folgt aus:

Eigenschaften

C:\Program Files (x86)\EPLAN\Platform\2.4.4\Bin\EPLAN.exe
/Variant:"Electric P8" ScriptTest /parameter:'' /execute:"true" /scriptPath:"C:\Test\Script\Test.cs"

Leere Parameter müssen auch mit angegeben werden.

Hinweis für Nutzer von Visual Studio Express: Dort gibt es den Einstellungsdialog für Startoptionen nicht. Ein Workaround ist hier beschrieben.

Freu mich sehr über die Arbeitserleichterung… und darüber dass ich ein Einhorn bzw. Drache sein kann!

using System;
using System.Windows.Forms;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;
using System.IO;

namespace ibKastl.Scripts.Test
{
    class ScriptTest
    {
        /// <summary>
        /// Start Visual Studio with the given Script
        /// </summary>
        /// <param name="scriptPath">Full Path to .cs or .vb File</param>
        /// <param name="parameter">Parameters for the Action</param>
        /// <param name="execute">Excute after EPLAN started</param>
        [DeclareAction("ScriptTest")]               
        public void Action(string scriptPath, string parameter, string execute)
        {
            // Check file
            if (!File.Exists(scriptPath))
            {
                MessageBox.Show("Scriptdatei wurde nicht gefunden:"
                                + Environment.NewLine + scriptPath + Environment.NewLine +
                                "Das Script wurde nicht geladen.",
                                "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                string actionName = Path.GetFileNameWithoutExtension(scriptPath);
                CommandLineInterpreter commandLineInterpreter = new CommandLineInterpreter();

                // Unload if Action exists
                ActionCallingContext actionCallingContextUnregister = new ActionCallingContext();
                actionCallingContextUnregister.AddParameter("DontShowErrorMessage", "1");
                actionCallingContextUnregister.AddParameter("ScriptFile", scriptPath);
                commandLineInterpreter.Execute("UnregisterScript", actionCallingContextUnregister);

                // Load Script 
                ActionCallingContext actionCallingContextRegister = new ActionCallingContext();
                actionCallingContextRegister.AddParameter("ScriptFile", scriptPath);
                commandLineInterpreter.Execute("RegisterScript", actionCallingContextRegister);

                // Execute
                if (execute.ToLower().Equals("true"))
                {
                    if (!string.IsNullOrEmpty(parameter))
                    {
                        commandLineInterpreter.Execute(actionName + " " + parameter); 
                    }
                    else
                    {
                        commandLineInterpreter.Execute(actionName); 
                    }
                }
            }

        }
    }
}

ScriptTest

Von |2017-11-09T12:23:41+01:002014-10-15|EPLAN, EPLAN-Scripts|

EplanCOMApplication

Oftmals muss man aus einer Applikation heraus EPLAN befeuern aufrufen und Actions ausführen.

Mit der COM Api von EPLAN ist dies möglich.

In Visual Studio müsst ihr den Verweis herstellen:

Verweise

Aufgerufen wird das ganze wie folgt:

EplanApplication eplanApplication = new EplanApplication();
eplanApplication.Show();
eplanApplication.ExecuteCommand("edit " +
                                "/PROJECTNAME:" + EplanProject +
                                " /DEVICENAME:" + SelectedFunction);

Zu beachten:

  • Ist EPLAN geöffnet wird dieser Prozess verwendet.
  • Ist EPLAN nicht geöffnet wird ein Prozess im Hintergrund gestartet und erst mit Show() sichtbar gemacht.
  • Wird beim Start des COM Objektes keine gültige Lizenz für EPLAN gefunden, bleibt das Programm stehen (muss abgeschossen werden).
Von |2017-11-09T12:23:42+01:002014-09-25|EPLAN, EPLAN-Scripts|
Nach oben