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; } }