#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

187 lines
4.8 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Markup;
using SharpDevelop.XamlDesigner.Controls;
using System.Collections;
using Microsoft.Win32;
using SharpDevelop.XamlDesigner.Dom;
namespace SharpDevelop.XamlDesigner.Palette
{
public partial class PaletteView : UserControl, IHasContext
{
public PaletteView()
{
InitializeComponent();
InitializeContextMenu();
AllowDrop = true;
}
PaletteData paletteData;
OpenFileDialog openFileDialog;
public static readonly DependencyProperty ContextProperty =
DependencyProperty.Register("Context", typeof(DesignContext), typeof(PaletteView));
public DesignContext Context
{
get { return (DesignContext)GetValue(ContextProperty); }
set { SetValue(ContextProperty, value); }
}
//protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
//{
// base.OnPropertyChanged(e);
// if (e.Property == ContextProperty) {
// if (e.NewValue != null) {
// (e.NewValue as DesignContext).AttachedPaletteData = paletteData;
// }
// }
//}
public void LoadData(string xaml)
{
paletteData = XamlReader.Parse(xaml) as PaletteData;
uxDataContextHolder.DataContext = paletteData;
(Resources["PaletteData"] as ObjectDataProvider).ObjectInstance = DataContext;
}
public void ResetData()
{
LoadData(DesignResources.GetString("Palette/DefaultPaletteData.xaml"));
}
public string SaveData()
{
if (paletteData == null) {
throw new Exception();
}
return XamlWriter.Save(paletteData);
}
protected override void OnDragEnter(DragEventArgs e)
{
ProcessDrag(e);
}
protected override void OnDragOver(DragEventArgs e)
{
ProcessDrag(e);
}
protected override void OnDrop(DragEventArgs e)
{
ProcessPaths(e.Data.Paths());
}
void ProcessDrag(DragEventArgs e)
{
e.Effects = DragDropEffects.None;
e.Handled = true;
foreach (var path in e.Data.Paths()) {
if (path.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase) ||
path.EndsWith(".exe", StringComparison.InvariantCultureIgnoreCase)) {
e.Effects = DragDropEffects.Copy;
break;
}
}
}
void ProcessPaths(IEnumerable<string> paths)
{
foreach (var path in paths) {
if (path.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase) ||
path.EndsWith(".exe", StringComparison.InvariantCultureIgnoreCase)) {
paletteData.AddAssembly(path);
}
}
}
void InitializeContextMenu()
{
ContextMenuOpening += new ContextMenuEventHandler(PaletteView_ContextMenuOpening);
uxInclude.Click += new RoutedEventHandler(uxInclude_Click);
uxExclude.Click += new RoutedEventHandler(uxExclude_Click);
uxAddAssembly.Click += new RoutedEventHandler(uxAddAssembly_Click);
uxRemoveAssembly.Click += new RoutedEventHandler(uxRemoveAssembly_Click);
uxResetPalette.Click += new RoutedEventHandler(uxResetPalette_Click);
}
IEnumerable<PaletteNode> GetSelectedNodes()
{
foreach (var item in uxTree.SelectedItems) {
yield return (item as TreeBoxItemCore).Item as PaletteNode;
}
}
void uxAddAssembly_Click(object sender, RoutedEventArgs e)
{
if (openFileDialog == null) {
openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Assemblies (*.dll; *.exe)|*.dll;*.exe";
}
if (openFileDialog.ShowDialog().Value) {
paletteData.AddAssembly(openFileDialog.FileName);
}
}
void uxResetPalette_Click(object sender, RoutedEventArgs e)
{
ResetData();
}
void uxInclude_Click(object sender, RoutedEventArgs e)
{
paletteData.Include(GetSelectedNodes());
}
void uxExclude_Click(object sender, RoutedEventArgs e)
{
paletteData.Exclude(GetSelectedNodes());
}
void uxRemoveAssembly_Click(object sender, RoutedEventArgs e)
{
paletteData.Remove(GetSelectedNodes());
}
void PaletteView_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
uxInclude.Visibility = Visibility.Collapsed;
uxExclude.Visibility = Visibility.Collapsed;
uxRemoveAssembly.Visibility = Visibility.Collapsed;
bool onlyAssemblies = true;
foreach (var node in GetSelectedNodes()) {
var paletteItem = node as PaletteItem;
if (paletteItem != null) {
if (paletteItem.IsIncluded) {
uxExclude.Visibility = Visibility.Visible;
}
else {
uxInclude.Visibility = Visibility.Visible;
}
onlyAssemblies = false;
}
}
if (onlyAssemblies) {
uxRemoveAssembly.Visibility = Visibility.Visible;
}
}
}
}