using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using windows = System.Windows;
using acad = Autodesk.AutoCAD.ApplicationServices.Application;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
namespace .AddinExtension
{
class DataDisplay
{
const Int32 offset_x = 0;
const Int32 offset_y = 40;
static Double _x, _y;
windows.Window win;
public DataDisplay(List<EquipCableSymbolData> displayData)
{
// Create new WPF window for using its as context menu
win
= new windows
.Window(); win.KeyUp += Win_KeyUp;
windows
.Controls.StackPanel sp
= new windows
.Controls.StackPanel(); foreach (var item in displayData)
{
windows
.Controls.MenuItem menuItem
= new windows
.Controls.MenuItem(); menuItem.Header = GetTag(item);
menuItem.Tag = item;
menuItem
.ToolTip = new windows
.Controls.StackPanel(); menuItem.ToolTipOpening += MenuItem_ToolTipOpening;
menuItem.Click += MenuItem_Click;
sp.Children.Add(menuItem);
}
win.Content = sp;
win.SizeToContent = windows.SizeToContent.WidthAndHeight;
win.WindowStyle = windows.WindowStyle.None;
win.ResizeMode = windows.ResizeMode.NoResize;
win.WindowStartupLocation = windows.WindowStartupLocation.Manual;
_x = windows.Forms.Cursor.Position.X;
_y = windows.Forms.Cursor.Position.Y;
win.Activated += win_Activated;
win.Deactivated += win_Deactivated;
acad.ShowModelessWindow(win);
}
private void Win_KeyUp(object sender, windows.Input.KeyEventArgs e)
{
if (e.Key == windows.Input.Key.Escape)
{
win.Deactivated -= win_Deactivated;
win.Close();
}
}
private void MenuItem_ToolTipOpening(object sender, windows.Controls.ToolTipEventArgs e)
{
var menuItem = (windows.Controls.MenuItem)sender;
var sp = (windows.Controls.StackPanel)menuItem.ToolTip;
if (sp.Children.Count > 0) return;
var equip = (EquipCableSymbolData)menuItem.Tag;
windows
.Controls.Image image
= new windows
.Controls.Image(); windows
.Media.Imaging.BitmapImage bitmap
= new windows
.Media.Imaging.BitmapImage(); bitmap.BeginInit();
bitmap
.UriSource = new Uri
(equip
.GetFullDrawingPicName(), UriKind
.RelativeOrAbsolute); bitmap.EndInit();
image.Stretch = windows.Media.Stretch.Fill;
image.Source = bitmap;
sp.Children.Add(image);
}
private void MenuItem_Click(object sender, windows.RoutedEventArgs e)
{
//queue that up!
var item = (windows.Controls.MenuItem)sender;
var equip = (EquipCableSymbolData)item.Tag;
QueueUp(equip);
win.Deactivated -= win_Deactivated;
win.Close();
}
void win_Activated(object sender, EventArgs e)
{
windows.Window win = (windows.Window)sender;
win.Left = _x - win.ActualWidth - offset_x;
win.Top = _y - win.ActualHeight - offset_y;
}
void win_Deactivated(object sender, EventArgs e)
{
((windows.Window)sender).Close();
}
}
}