diff --git a/Content/OpenItemDialogBrowseFilter/ItemFilter.cs b/Content/OpenItemDialogBrowseFilter/ItemFilter.cs index 38d23a16..049dc5ca 100644 --- a/Content/OpenItemDialogBrowseFilter/ItemFilter.cs +++ b/Content/OpenItemDialogBrowseFilter/ItemFilter.cs @@ -36,10 +36,6 @@ class ItemFilter : IComparable private string _parent; private string _id; private string _caption; - private string _condition; - private bool _hasImage = true; - private string _image; - private string _packURI = ""; private string _content; private List _filterFlags = new List(); private static string _currentControl; @@ -58,8 +54,6 @@ public ItemFilter(string damlFile, string elementName, XElement xElement, string _damlFileName = damlFile; _elementName = elementName; - _hasImage = false; - _parent = xElement.Parent.Name.LocalName; _container = container; _id = xElement.Attribute("id").Value; diff --git a/Content/OpenItemDialogBrowseFilter/OpenItemDialogBrowseFilter.csproj b/Content/OpenItemDialogBrowseFilter/OpenItemDialogBrowseFilter.csproj index 138f8eb5..69e8e700 100644 --- a/Content/OpenItemDialogBrowseFilter/OpenItemDialogBrowseFilter.csproj +++ b/Content/OpenItemDialogBrowseFilter/OpenItemDialogBrowseFilter.csproj @@ -262,6 +262,7 @@ BuildDefault bin\Debug\OpenItemDialogBrowseFilter.xml + 1591 BuildDefault diff --git a/Editing/CreatePointsAlongLine3D/CreatePointsAlongLine3D.csproj b/Editing/CreatePointsAlongLine3D/CreatePointsAlongLine3D.csproj index 19b0bdc7..8cc03de0 100644 --- a/Editing/CreatePointsAlongLine3D/CreatePointsAlongLine3D.csproj +++ b/Editing/CreatePointsAlongLine3D/CreatePointsAlongLine3D.csproj @@ -171,6 +171,7 @@ BuildDefault bin\Debug\CreatePointsAlongLine3D.xml + 1591 BuildDefault diff --git a/Editing/DemoUseSelection/DemoUseSelection.csproj b/Editing/DemoUseSelection/DemoUseSelection.csproj index a9225046..6a34a491 100644 --- a/Editing/DemoUseSelection/DemoUseSelection.csproj +++ b/Editing/DemoUseSelection/DemoUseSelection.csproj @@ -174,6 +174,7 @@ BuildDefault bin\Debug\DemoUseSelection.xml + 1591 BuildDefault diff --git a/Editing/GeometryControl/GeometryControl.csproj b/Editing/GeometryControl/GeometryControl.csproj index d0692a5a..d04a7b68 100644 --- a/Editing/GeometryControl/GeometryControl.csproj +++ b/Editing/GeometryControl/GeometryControl.csproj @@ -187,6 +187,7 @@ BuildDefault bin\Debug\GeometryControl.xml + 1591 BuildDefault diff --git a/Editing/GridScaleCADLayer/GridScaleCADLayer.csproj b/Editing/GridScaleCADLayer/GridScaleCADLayer.csproj index faa3cf40..83f953c0 100644 --- a/Editing/GridScaleCADLayer/GridScaleCADLayer.csproj +++ b/Editing/GridScaleCADLayer/GridScaleCADLayer.csproj @@ -192,6 +192,7 @@ BuildDefault bin\Debug\GridScaleCADLayer.xml + 1591 BuildDefault diff --git a/Editing/LayerSnapModes/LayerSnapModes.csproj b/Editing/LayerSnapModes/LayerSnapModes.csproj index 0e3a1337..7ab0a133 100644 --- a/Editing/LayerSnapModes/LayerSnapModes.csproj +++ b/Editing/LayerSnapModes/LayerSnapModes.csproj @@ -162,6 +162,7 @@ BuildDefault bin\Debug\LayerSnapModes.xml + 1591 BuildDefault diff --git a/Editing/MultipatchBuilder/MultipatchBuilder.csproj b/Editing/MultipatchBuilder/MultipatchBuilder.csproj index 737c5f2c..9fba5906 100644 --- a/Editing/MultipatchBuilder/MultipatchBuilder.csproj +++ b/Editing/MultipatchBuilder/MultipatchBuilder.csproj @@ -178,6 +178,7 @@ BuildDefault bin\Debug\MultipatchBuilder.xml + 1591 BuildDefault diff --git a/Editing/TransferAttributes/TransferAttributes.csproj b/Editing/TransferAttributes/TransferAttributes.csproj index fc152449..159c8722 100644 --- a/Editing/TransferAttributes/TransferAttributes.csproj +++ b/Editing/TransferAttributes/TransferAttributes.csproj @@ -186,6 +186,7 @@ BuildDefault bin\Debug\TransferAttributes.xml + 1591 BuildDefault diff --git a/Framework/ChromiumWebBrowserSample/ChromiumWebBrowserSample.csproj b/Framework/ChromiumWebBrowserSample/ChromiumWebBrowserSample.csproj index 31d1c5e3..213293fb 100644 --- a/Framework/ChromiumWebBrowserSample/ChromiumWebBrowserSample.csproj +++ b/Framework/ChromiumWebBrowserSample/ChromiumWebBrowserSample.csproj @@ -215,6 +215,7 @@ BuildDefault bin\x64\Debug\ChromiumWebBrowserSample.xml + 1591 BuildDefault diff --git a/Framework/ChromiumWebBrowserSample/Custom/CustomSchemes.cs b/Framework/ChromiumWebBrowserSample/Custom/CustomSchemes.cs index 08415dfd..77c40b12 100644 --- a/Framework/ChromiumWebBrowserSample/Custom/CustomSchemes.cs +++ b/Framework/ChromiumWebBrowserSample/Custom/CustomSchemes.cs @@ -30,8 +30,8 @@ limitations under the License. /// /// Note: Custom scheme names must conform to RFC 3986. -/// . Namely: -/// "Section 3.1 Scheme:
+/// <a href="https://tools.ietf.org/pdf/rfc3986.pdf"/>. Namely: +/// "Section 3.1 Scheme:<br/> /// .....Scheme names consist of a sequence of characters beginning with a ///letter and followed by any combination of letters, digits, plus /// ("+"), period ("."), or hyphen("-"). Although schemes are case- @@ -69,10 +69,19 @@ namespace ChromiumWebBrowserSample.Custom /// The custom scheme name is "resource" public class ImageResourceSchemeHandler : ResourceHandler { + /// + /// + /// public ImageResourceSchemeHandler() { } + /// + /// + /// + /// + /// + /// public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback callback) { using (callback) @@ -119,11 +128,19 @@ public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback c /// public class EmbeddedResourceSchemeHandler : ResourceHandler { + /// + /// + /// public EmbeddedResourceSchemeHandler() { } - + /// + /// + /// + /// + /// + /// public override CefReturnValue ProcessRequestAsync(IRequest request, ICallback callback) { using (callback) diff --git a/Framework/DockpaneWithHelp/DockpaneWithHelp.csproj b/Framework/DockpaneWithHelp/DockpaneWithHelp.csproj index 11e82d93..bfb96b43 100644 --- a/Framework/DockpaneWithHelp/DockpaneWithHelp.csproj +++ b/Framework/DockpaneWithHelp/DockpaneWithHelp.csproj @@ -165,6 +165,7 @@ BuildDefault bin\Debug\DockpaneWithHelp.xml + 1591 BuildDefault diff --git a/Framework/MapControl/ShowOverview.cs b/Framework/MapControl/ShowOverview.cs index 2c443177..0e865cfe 100644 --- a/Framework/MapControl/ShowOverview.cs +++ b/Framework/MapControl/ShowOverview.cs @@ -40,8 +40,10 @@ protected override void OnClick() { if (_isOpen) return; _overview = new OverviewWindow(); + var cam = MapView.Active.Camera; + cam.Heading = 90; _overview.ViewContent = MapControlContentFactory.Create( - MapView.Active.Map, MapView.Active.Extent, MapView.Active.ViewingMode); + MapView.Active.Map, cam, MapView.Active.ViewingMode); _overview.Closed += (s, e) => { _isOpen = false; lock (_lock) { diff --git a/Framework/ProIcons/AllProImagesPane.xaml b/Framework/ProIcons/AllProImagesPane.xaml new file mode 100644 index 00000000..468336a2 --- /dev/null +++ b/Framework/ProIcons/AllProImagesPane.xaml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + Show Pack URI + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Framework/ProIcons/AllProImagesPane.xaml.cs b/Framework/ProIcons/AllProImagesPane.xaml.cs new file mode 100644 index 00000000..bc29798a --- /dev/null +++ b/Framework/ProIcons/AllProImagesPane.xaml.cs @@ -0,0 +1,95 @@ +/* + + Copyright 2020 Esri + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + +*/ +using System.Windows.Controls; +using System.Windows.Input; + + +namespace ProIcons +{ + /// + /// Interaction logic for AllProImagesPaneView.xaml + /// + internal partial class AllProImagesPaneView : UserControl + { + private string _currentIconName; + + public AllProImagesPaneView() + { + InitializeComponent(); + } + + private void TextBox_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Return) + { + AllProImagesPaneViewModel vm = this.DataContext as AllProImagesPaneViewModel; + vm.InvokeSearchCommand(); + } + } + + private void Image_ToolTipOpening(object sender, ToolTipEventArgs e) + { + GetImageName(sender as Image); + } + + private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) + { + _currentIconName = GetImageName(sender as Image); + System.Windows.Clipboard.SetText(_currentIconName); + if (showPack.IsChecked.HasValue && showPack.IsChecked.Value == true) + { + string pack = @"pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/"; + IconText.Text = pack + _currentIconName + ".png"; + } + else + { + IconText.Text = _currentIconName; + } + + } + + private string GetImageName(Image img) + { + if (img == null || img.DataContext == null) + return string.Empty; + ProImage proImage = img.DataContext as ProImage; + img.ToolTip = proImage.Name; + return proImage.Name; + } + + private void showPack_Click(object sender, System.Windows.RoutedEventArgs e) + { + if (showPack.IsChecked.HasValue && showPack.IsChecked.Value == true) + { + if (!string.IsNullOrEmpty(IconText.Text)) + { + string pack = @"pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/"; + IconText.Text = pack + _currentIconName + ".png"; + } + IconText.Width = 550; + } + else + { + if (!string.IsNullOrEmpty(IconText.Text)) + IconText.Text = _currentIconName; + IconText.Width = 275; + } + } + } +} diff --git a/Framework/ProIcons/AllProImagesPaneViewModel.cs b/Framework/ProIcons/AllProImagesPaneViewModel.cs new file mode 100644 index 00000000..13f8a6f5 --- /dev/null +++ b/Framework/ProIcons/AllProImagesPaneViewModel.cs @@ -0,0 +1,190 @@ +/* + + Copyright 2020 Esri + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + +*/ +using ArcGIS.Desktop.Framework; +using ArcGIS.Desktop.Framework.Contracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Input; +using System.Windows.Media; + +namespace ProIcons +{ + internal class ProImage + { + public ImageSource Source {get; set;} + public string Name { get; set; } + } + + internal class AllProImagesPaneViewModel : Pane + { + private const string _viewPaneID = "ProIcons_AllProImagesPane"; + private ResourceDictionary _resournceXaml; + private List _images = new List(); + private ICommand _searchCmd; + private ICommand _clearCmd; + private string _searchText; + private bool _showingSearch; + + public AllProImagesPaneViewModel() : base() + { + if (FrameworkApplication.ApplicationTheme == ApplicationTheme.Dark) + _resournceXaml = new ResourceDictionary() { Source = new Uri("pack://application:,,,/ArcGIS.Desktop.Resources;component/DarkXamlImages.xaml") }; + else + _resournceXaml = new ResourceDictionary() { Source = new Uri("pack://application:,,,/ArcGIS.Desktop.Resources;component/XamlImages.xaml") }; + + foreach (string key in _resournceXaml.Keys) + { + ImageSource imgSource = _resournceXaml[key] as ImageSource; + if (imgSource != null) + { + ProImage proImage = new ProImage(); + proImage.Name = key; + proImage.Source = imgSource; + _images.Add(proImage); + } + } + _images = _images.OrderBy(o => o.Name).ToList(); + + } + + public List ProImages + { + get + { + return _images; + } + } + + /// + /// Create a new instance of the pane. + /// + internal static void Create() + { + FrameworkApplication.Panes.Create(_viewPaneID); + } + + #region Pane Overrides + + /// + /// Called when the pane is initialized. + /// + protected async override Task InitializeAsync() + { + await base.InitializeAsync(); + } + + /// + /// Called when the pane is uninitialized. + /// + protected async override Task UninitializeAsync() + { + await base.UninitializeAsync(); + } + + #endregion Pane Overrides + + public string SearchText + { + get { return _searchText; } + set + { + SetProperty(ref _searchText, value, () => SearchText); + } + } + + public ICommand SearchCmd + { + get + { + if (_searchCmd == null) + _searchCmd = new RelayCommand(new Action((p) => InvokeSearchCommand()), () => { return true; }, false, false); + + return _searchCmd; + } + } + + public ICommand ClearCmd + { + get + { + if (_clearCmd == null) + _clearCmd = new RelayCommand(new Action((p) => InvokeClearCommand()), () => { return true; }, false, false); + + return _clearCmd; + } + } + + internal void InvokeClearCommand() + { + // Clear the text + SearchText = string.Empty; + + // If we're actually showing results - reset + if (_showingSearch) + InvokeSearchCommand(); + + _showingSearch = false; + } + + internal void InvokeSearchCommand() + { + _showingSearch = true; + _images.Clear(); + + string iconName = _searchText; + + if (iconName.StartsWith("pack")) + iconName = System.IO.Path.GetFileNameWithoutExtension(iconName); + + foreach (string key in _resournceXaml.Keys) + { + if (string.IsNullOrEmpty(iconName) || Regex.IsMatch(key, Regex.Escape(iconName), RegexOptions.IgnoreCase)) + { + ImageSource imgSource = _resournceXaml[key] as ImageSource; + if (imgSource != null) + { + ProImage proImage = new ProImage(); + proImage.Name = key; + proImage.Source = imgSource; + _images.Add(proImage); + } + } + } + + // Sort by name + _images = _images.OrderBy(o => o.Name).ToList(); + NotifyPropertyChanged("ProImages"); + } + } + + /// + /// Button implementation to create a new instance of the pane and activate it. + /// + internal class AllProImagesPane_OpenButton : Button + { + protected override void OnClick() + { + AllProImagesPaneViewModel.Create(); + } + } +} diff --git a/Framework/ProIcons/Config.daml b/Framework/ProIcons/Config.daml new file mode 100644 index 00000000..69a9406c --- /dev/null +++ b/Framework/ProIcons/Config.daml @@ -0,0 +1,64 @@ + + + + + + ProIcons + ProIcons description + Images\AddinDesktop32.png + ArcGIS Pro SDK Team, arcgisprosdk@esri.com + esri, http://www.esri.com + 2/7/2020 11:08:19 AM, 2020 + Framework + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Framework/ProIcons/DarkImages/AddInDesktop16.png b/Framework/ProIcons/DarkImages/AddInDesktop16.png new file mode 100644 index 00000000..0118942a Binary files /dev/null and b/Framework/ProIcons/DarkImages/AddInDesktop16.png differ diff --git a/Framework/ProIcons/DarkImages/AddInDesktop32.png b/Framework/ProIcons/DarkImages/AddInDesktop32.png new file mode 100644 index 00000000..9713e3b1 Binary files /dev/null and b/Framework/ProIcons/DarkImages/AddInDesktop32.png differ diff --git a/Framework/ProIcons/DarkImages/GenericButtonGreen16.png b/Framework/ProIcons/DarkImages/GenericButtonGreen16.png new file mode 100644 index 00000000..c04d7f56 Binary files /dev/null and b/Framework/ProIcons/DarkImages/GenericButtonGreen16.png differ diff --git a/Framework/ProIcons/DarkImages/GenericButtonGreen32.png b/Framework/ProIcons/DarkImages/GenericButtonGreen32.png new file mode 100644 index 00000000..547ce961 Binary files /dev/null and b/Framework/ProIcons/DarkImages/GenericButtonGreen32.png differ diff --git a/Framework/ProIcons/Images/AddInDesktop16.png b/Framework/ProIcons/Images/AddInDesktop16.png new file mode 100644 index 00000000..5910bbf3 Binary files /dev/null and b/Framework/ProIcons/Images/AddInDesktop16.png differ diff --git a/Framework/ProIcons/Images/AddInDesktop32.png b/Framework/ProIcons/Images/AddInDesktop32.png new file mode 100644 index 00000000..1d19084a Binary files /dev/null and b/Framework/ProIcons/Images/AddInDesktop32.png differ diff --git a/Framework/ProIcons/Images/GenericButtonGreen16.png b/Framework/ProIcons/Images/GenericButtonGreen16.png new file mode 100644 index 00000000..213e0c18 Binary files /dev/null and b/Framework/ProIcons/Images/GenericButtonGreen16.png differ diff --git a/Framework/ProIcons/Images/GenericButtonGreen32.png b/Framework/ProIcons/Images/GenericButtonGreen32.png new file mode 100644 index 00000000..75ec735d Binary files /dev/null and b/Framework/ProIcons/Images/GenericButtonGreen32.png differ diff --git a/Framework/ProIcons/ImagesPane.xaml b/Framework/ProIcons/ImagesPane.xaml new file mode 100644 index 00000000..91483af6 --- /dev/null +++ b/Framework/ProIcons/ImagesPane.xaml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Png + + + + + + + + + + + Png Dark + + + + + + + + + + + Xaml + + + + + + + + + + + Xaml Dark + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Framework/ProIcons/ImagesPane.xaml.cs b/Framework/ProIcons/ImagesPane.xaml.cs new file mode 100644 index 00000000..44986a16 --- /dev/null +++ b/Framework/ProIcons/ImagesPane.xaml.cs @@ -0,0 +1,56 @@ +/* + + Copyright 2020 Esri + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + +*/ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +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; + + +namespace ProIcons +{ + /// + /// Interaction logic for ImagesPaneView.xaml + /// + internal partial class ImagesPaneView : UserControl + { + public ImagesPaneView() + { + InitializeComponent(); + } + + private void TextBox_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Return) + { + ImagesPaneViewModel vm = this.DataContext as ImagesPaneViewModel; + vm.InvokeSearchCommand(); + } + } + } +} diff --git a/Framework/ProIcons/ImagesPaneViewModel.cs b/Framework/ProIcons/ImagesPaneViewModel.cs new file mode 100644 index 00000000..76d58d91 --- /dev/null +++ b/Framework/ProIcons/ImagesPaneViewModel.cs @@ -0,0 +1,265 @@ +/* + + Copyright 2020 Esri + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + +*/ +using ArcGIS.Desktop.Framework; +using ArcGIS.Desktop.Framework.Contracts; +using System; +using System.Collections.ObjectModel; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Input; +using System.Windows.Media; + +namespace ProIcons +{ + internal class ImagesPaneViewModel : Pane + { + private const string _viewPaneID = "ProIcons_ImagesPane"; + private ICommand _searchCmd; + private string _searchText; + ResourceDictionary _resourncePng; + ResourceDictionary _resourncePngDark; + ResourceDictionary _resournceXaml; + ResourceDictionary _resournceXamlDark; + + /// + /// Consume the passed in CIMView. Call the base constructor to wire up the CIMView. + /// + public ImagesPaneViewModel() : base() + { + _resourncePng = new ResourceDictionary() { Source = new Uri("pack://application:,,,/ArcGIS.Desktop.Resources;component/Images.xaml") }; + _resourncePngDark = new ResourceDictionary() { Source = new Uri("pack://application:,,,/ArcGIS.Desktop.Resources;component/ImagesDark.xaml") }; + _resournceXaml = new ResourceDictionary() { Source = new Uri("pack://application:,,,/ArcGIS.Desktop.Resources;component/XamlImages.xaml") }; + _resournceXamlDark = new ResourceDictionary() { Source = new Uri("pack://application:,,,/ArcGIS.Desktop.Resources;component/DarkXamlImages.xaml") }; + } + + /// + /// Create a new instance of the pane. + /// + internal static void Create() + { + FrameworkApplication.Panes.Create(_viewPaneID); + } + + #region Pane Overrides + + public ICommand SearchCmd + { + get + { + if (_searchCmd == null) + _searchCmd = new RelayCommand(new Action((p) => InvokeSearchCommand()), () => { return true; }, false, false); + + return _searchCmd; + } + } + + internal void InvokeSearchCommand() + { + if (string.IsNullOrEmpty(_searchText)) + return; + + ImageSource png = _resourncePng[_searchText] as ImageSource; + SearchText = Search(_searchText); + + Update(); + } + + private double _scale = 1.0; + public double Scale + { + get { return _scale; } + set + { + _scale = value; + NotifyPropertyChanged(() => Scale); + } + } + + private void Update() + { + if (string.IsNullOrEmpty(_searchText)) + return; + + ImageSource png = _resourncePng[_searchText] as ImageSource; + ImageSource pngDark = _resourncePngDark[_searchText] as ImageSource; + ImageSource xaml = _resournceXaml[_searchText] as ImageSource; + ImageSource xamlDark = _resournceXamlDark[_searchText] as ImageSource; + + if (png != null) + this.Size = png.Height; + Png = png; + PngDark = pngDark; + Xaml = xaml; + XamlDark = xamlDark; + } + + private string Search(string iconName) + { + _targets.Clear(); + foreach (string key in _resournceXaml.Keys) + { + if (string.IsNullOrEmpty(iconName) || Regex.IsMatch(key, Regex.Escape(iconName), RegexOptions.IgnoreCase)) + { + _targets.Add(key); + } + } + + foreach (string key in _resournceXaml.Keys) + { + if (string.IsNullOrEmpty(iconName) || Regex.IsMatch(key, Regex.Escape(iconName), RegexOptions.IgnoreCase)) + { + return key; + } + } + + return string.Empty; + } + + public string SelectedItem + { + get { return _searchText; } + set + { + SearchText = value; + Update(); + } + } + + private ImageSource _png; + private ImageSource _pngDark; + private ImageSource _xaml; + private ImageSource _xamlDark; + + private double _size; + public double Size + { + get + { + return _size; + } + set + { + _size = value; + NotifyPropertyChanged(() => Size); + } + } + + public ImageSource Png + { + get + { + return _png; + } + set + { + _png = value; + NotifyPropertyChanged(() => Png); + } + } + + public ImageSource PngDark + { + get + { + return _pngDark; + } + set + { + _pngDark = value; + NotifyPropertyChanged(() => PngDark); + } + } + + public ImageSource Xaml + { + get + { + return _xaml; + } + set + { + _xaml = value; + NotifyPropertyChanged(() => Xaml); + } + } + + public ImageSource XamlDark + { + get + { + return _xamlDark; + } + set + { + _xamlDark = value; + NotifyPropertyChanged(() => XamlDark); + } + } + + public string SearchText + { + get { return _searchText; } + set + { + _searchText = value; + NotifyPropertyChanged(() => SearchText); + } + } + + private ObservableCollection _targets = new ObservableCollection(); + + public ObservableCollection Targets + { + get + { + return _targets; + } + } + + /// + /// Called when the pane is initialized. + /// + protected async override Task InitializeAsync() + { + await base.InitializeAsync(); + } + + /// + /// Called when the pane is uninitialized. + /// + protected async override Task UninitializeAsync() + { + await base.UninitializeAsync(); + } + + #endregion Pane Overrides + } + + /// + /// Button implementation to create a new instance of the pane and activate it. + /// + internal class ImagesPane_OpenButton : ArcGIS.Desktop.Framework.Contracts.Button + { + protected override void OnClick() + { + ImagesPaneViewModel.Create(); + } + } +} diff --git a/Framework/ProIcons/ProIcons (C#).md b/Framework/ProIcons/ProIcons (C#).md new file mode 100644 index 00000000..5ec43b86 --- /dev/null +++ b/Framework/ProIcons/ProIcons (C#).md @@ -0,0 +1,56 @@ +## ProIcons + + +This sample shows a list of all icons defined in ArcGIS Pro. It allows to get the pack URI for those icons and has a utility to inspect the icons using the light and dark themes. + + + +View it live + + +``` +Language: C# +Subject: Framework +Contributor: ArcGIS Pro SDK Team +Organization: Esri, http://www.esri.com +Date: 7/01/2020 +ArcGIS Pro: 2.6 +Visual Studio: 2017, 2019 +.NET Target Framework: 4.8 +``` + +## Resources + +* [API Reference online](https://pro.arcgis.com/en/pro-app/sdk/api-reference) +* ArcGIS Pro SDK for .NET (pro.arcgis.com) +* [arcgis-pro-sdk-community-samples](https://github.com/Esri/arcgis-pro-sdk-community-samples) +* [ArcGIS Pro DAML ID Reference](https://github.com/Esri/arcgis-pro-sdk/wiki/ArcGIS-Pro-DAML-ID-Reference) +* [FAQ](https://github.com/Esri/arcgis-pro-sdk/wiki/FAQ) +* [ArcGIS Pro SDK icons](https://github.com/Esri/arcgis-pro-sdk/releases/tag/2.4.0.19948) + +![ArcGIS Pro SDK for .NET Icons](https://Esri.github.io/arcgis-pro-sdk/images/Home/Image-of-icons.png "ArcGIS Pro SDK Icons") + +### Samples Data + +* Sample data for ArcGIS Pro SDK Community Samples can be downloaded from the [repo releases](https://github.com/Esri/arcgis-pro-sdk-community-samples/releases) page. + +## How to use the sample + +1. In Visual studio rebuild the solution. +1. Debug the add-in by clicking the "Start" button. +1. ArcGIS Pro opens, select any Map project +1. Under the "Pro Icons" tab there are two buttons that show the "Show All Icons" and "Verify Icon" Panes. +![UI](Screenshots/Screen1.png) + +1. The "Show All Icons" pane displays all icons defined in ArcGIS Pro. Click on any icon to get the icons name (or URI if you click the checkbox).. +![UI](Screenshots/Screen2.png) + +1. The "Verify Icon" pane allows you to enter an icon name (use the "Show All Icons" pane to get any icon name and verify the icon image using light and dark themes. + + + + + +      ArcGIS Pro SDK for Microsoft .NET Framework +             +[Home](https://github.com/Esri/arcgis-pro-sdk/wiki) | API Reference | [Requirements](https://github.com/Esri/arcgis-pro-sdk/wiki#requirements) | [Download](https://github.com/Esri/arcgis-pro-sdk/wiki#installing-arcgis-pro-sdk-for-net) | Samples diff --git a/Framework/ProIcons/ProIcons.csproj b/Framework/ProIcons/ProIcons.csproj new file mode 100644 index 00000000..112c2fbe --- /dev/null +++ b/Framework/ProIcons/ProIcons.csproj @@ -0,0 +1,187 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665} + Library + Properties + ProIcons + ProIcons + v4.8 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + Program + C:\Program Files\ArcGIS\Pro\bin\ArcGISPro.exe + AnyCPU + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + Program + C:\Program Files\ArcGIS\Pro\bin\ArcGISPro.exe + AnyCPU + + + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\ESRI\ArcGISPro', 'InstallDir', null, RegistryView.Registry64)) + $(registry:HKEY_CURRENT_USER\SOFTWARE\ESRI\ArcGISPro@InstallDir) + + + + + + + + + + + + + + + + C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Framework.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Core.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\Extensions\Core\ArcGIS.Desktop.Core.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\Extensions\Mapping\ArcGIS.Desktop.Mapping.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\Extensions\Catalog\ArcGIS.Desktop.Catalog.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\Extensions\Editing\ArcGIS.Desktop.Editing.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\Extensions\DesktopExtensions\ArcGIS.Desktop.Extensions.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\Extensions\GeoProcessing\ArcGIS.Desktop.GeoProcessing.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\Extensions\Layout\ArcGIS.Desktop.Layouts.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Shared.Wpf.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Ribbon.Wpf.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.DataGrid.Contrib.Wpf.dll + False + + + C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Resources.dll + False + + + + + Designer + + + + + + + + + AllProImagesPane.xaml + + + + ImagesPane.xaml + + + + + + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + + + + + + + + + + + + + + + + + + + + BuildDefault + bin\Debug\ProIcons.xml + + + BuildDefault + + + + + + + + + \ No newline at end of file diff --git a/Framework/ProIcons/ProIcons.sln b/Framework/ProIcons/ProIcons.sln new file mode 100644 index 00000000..b3bb0f9e --- /dev/null +++ b/Framework/ProIcons/ProIcons.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2027 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProIcons", "ProIcons.csproj", "{6DA0B756-6B7D-451F-8AFF-1ABD718C9665}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E5098C80-8C75-4AD5-A3EC-64C30034DB2A} + EndGlobalSection +EndGlobal diff --git a/Framework/ProIcons/ProIconsModule.cs b/Framework/ProIcons/ProIconsModule.cs new file mode 100644 index 00000000..3dead6f7 --- /dev/null +++ b/Framework/ProIcons/ProIconsModule.cs @@ -0,0 +1,83 @@ +/* + + Copyright 2020 Esri + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + +*/ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Input; +using System.Threading.Tasks; +using ArcGIS.Core.CIM; +using ArcGIS.Core.Data; +using ArcGIS.Core.Geometry; +using ArcGIS.Desktop.Catalog; +using ArcGIS.Desktop.Core; +using ArcGIS.Desktop.Editing; +using ArcGIS.Desktop.Extensions; +using ArcGIS.Desktop.Framework; +using ArcGIS.Desktop.Framework.Contracts; +using ArcGIS.Desktop.Framework.Dialogs; +using ArcGIS.Desktop.Framework.Threading.Tasks; +using ArcGIS.Desktop.Mapping; + +namespace ProIcons +{ + /// + /// This sample shows a list of all icons defined in ArcGIS Pro. It allows to get the pack URI for those icons and has a utility to inspect the icons using the light and dark themes. + /// + /// + /// 1. In Visual studio rebuild the solution. + /// 1. Debug the add-in by clicking the "Start" button. + /// 1. ArcGIS Pro opens, select any Map project + /// 1. Under the "Pro Icons" tab there are two buttons that show the "Show All Icons" and "Verify Icon" Panes. + /// ![UI](Screenshots/Screen1.png) + /// 1. The "Show All Icons" pane displays all icons defined in ArcGIS Pro. Click on any icon to get the icons name (or URI if you click the checkbox).. + /// ![UI](Screenshots/Screen2.png) + /// 1. The "Verify Icon" pane allows you to enter an icon name (use the "Show All Icons" pane to get any icon name and verify the icon image using light and dark themes. + /// + internal class ProIconsModule : Module + { + private static ProIconsModule _this = null; + + /// + /// Retrieve the singleton instance to this module here + /// + public static ProIconsModule Current + { + get + { + return _this ?? (_this = (ProIconsModule)FrameworkApplication.FindModule("ProIcons_Module")); + } + } + + #region Overrides + /// + /// Called by Framework when ArcGIS Pro is closing + /// + /// False to prevent Pro from closing, otherwise True + protected override bool CanUnload() + { + //TODO - add your business logic + //return false to ~cancel~ Application close + return true; + } + + #endregion Overrides + + } +} diff --git a/Framework/ProIcons/Properties/AssemblyInfo.cs b/Framework/ProIcons/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..8706fb7a --- /dev/null +++ b/Framework/ProIcons/Properties/AssemblyInfo.cs @@ -0,0 +1,54 @@ +/* + + Copyright 2020 Esri + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + +*/ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ProIcons")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Acme")] +[assembly: AssemblyProduct("ProIcons")] +[assembly: AssemblyCopyright("Copyright © Acme 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6da0b756-6b7d-451f-8aff-1abd718c9665")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Framework/ProIcons/ReadMe.md b/Framework/ProIcons/ReadMe.md new file mode 100644 index 00000000..5ec43b86 --- /dev/null +++ b/Framework/ProIcons/ReadMe.md @@ -0,0 +1,56 @@ +## ProIcons + + +This sample shows a list of all icons defined in ArcGIS Pro. It allows to get the pack URI for those icons and has a utility to inspect the icons using the light and dark themes. + + + +View it live + + +``` +Language: C# +Subject: Framework +Contributor: ArcGIS Pro SDK Team +Organization: Esri, http://www.esri.com +Date: 7/01/2020 +ArcGIS Pro: 2.6 +Visual Studio: 2017, 2019 +.NET Target Framework: 4.8 +``` + +## Resources + +* [API Reference online](https://pro.arcgis.com/en/pro-app/sdk/api-reference) +* ArcGIS Pro SDK for .NET (pro.arcgis.com) +* [arcgis-pro-sdk-community-samples](https://github.com/Esri/arcgis-pro-sdk-community-samples) +* [ArcGIS Pro DAML ID Reference](https://github.com/Esri/arcgis-pro-sdk/wiki/ArcGIS-Pro-DAML-ID-Reference) +* [FAQ](https://github.com/Esri/arcgis-pro-sdk/wiki/FAQ) +* [ArcGIS Pro SDK icons](https://github.com/Esri/arcgis-pro-sdk/releases/tag/2.4.0.19948) + +![ArcGIS Pro SDK for .NET Icons](https://Esri.github.io/arcgis-pro-sdk/images/Home/Image-of-icons.png "ArcGIS Pro SDK Icons") + +### Samples Data + +* Sample data for ArcGIS Pro SDK Community Samples can be downloaded from the [repo releases](https://github.com/Esri/arcgis-pro-sdk-community-samples/releases) page. + +## How to use the sample + +1. In Visual studio rebuild the solution. +1. Debug the add-in by clicking the "Start" button. +1. ArcGIS Pro opens, select any Map project +1. Under the "Pro Icons" tab there are two buttons that show the "Show All Icons" and "Verify Icon" Panes. +![UI](Screenshots/Screen1.png) + +1. The "Show All Icons" pane displays all icons defined in ArcGIS Pro. Click on any icon to get the icons name (or URI if you click the checkbox).. +![UI](Screenshots/Screen2.png) + +1. The "Verify Icon" pane allows you to enter an icon name (use the "Show All Icons" pane to get any icon name and verify the icon image using light and dark themes. + + + + + +      ArcGIS Pro SDK for Microsoft .NET Framework +             +[Home](https://github.com/Esri/arcgis-pro-sdk/wiki) | API Reference | [Requirements](https://github.com/Esri/arcgis-pro-sdk/wiki#requirements) | [Download](https://github.com/Esri/arcgis-pro-sdk/wiki#installing-arcgis-pro-sdk-for-net) | Samples diff --git a/Framework/ProIcons/Screenshots/Screen1.png b/Framework/ProIcons/Screenshots/Screen1.png new file mode 100644 index 00000000..db26905f Binary files /dev/null and b/Framework/ProIcons/Screenshots/Screen1.png differ diff --git a/Framework/ProIcons/Screenshots/Screen2.png b/Framework/ProIcons/Screenshots/Screen2.png new file mode 100644 index 00000000..271aacf4 Binary files /dev/null and b/Framework/ProIcons/Screenshots/Screen2.png differ diff --git a/Framework/ProWindowMVVM/ProWindowMVVM.csproj b/Framework/ProWindowMVVM/ProWindowMVVM.csproj index e02bbbe1..fef86b5c 100644 --- a/Framework/ProWindowMVVM/ProWindowMVVM.csproj +++ b/Framework/ProWindowMVVM/ProWindowMVVM.csproj @@ -166,6 +166,7 @@ BuildDefault bin\Debug\ProWindowMVVM.xml + 1591 BuildDefault diff --git a/Framework/README.md b/Framework/README.md index 5116f2f6..87c33fbc 100644 --- a/Framework/README.md +++ b/Framework/README.md @@ -41,6 +41,7 @@ This folder contains ArcGIS Pro Add-In Samples that fall under the 'Framework' t * [Notifications (c#)](../../../tree/master/Framework/Notifications) * [OpenMapViews (c#)](../../../tree/master/Framework/OpenMapViews) * [ProgressDialog (c#)](../../../tree/master/Framework/ProgressDialog) +* [ProIcons (c#)](../../../tree/master/Framework/ProIcons) * [ProWindowMVVM (c#)](../../../tree/master/Framework/ProWindowMVVM) * [QAReviewTool (c#)](../../../tree/master/Framework/QAReviewTool) * [RemoveAddins (c#)](../../../tree/master/Framework/RemoveAddins) diff --git a/Geodatabase/CalculateStatistics/CalculateStatistics.csproj b/Geodatabase/CalculateStatistics/CalculateStatistics.csproj index 7432e18f..4718aae5 100644 --- a/Geodatabase/CalculateStatistics/CalculateStatistics.csproj +++ b/Geodatabase/CalculateStatistics/CalculateStatistics.csproj @@ -158,6 +158,7 @@ BuildDefault bin\Debug\CalculateStatistics.xml + 1591 BuildDefault diff --git a/Geometry/MultipatchBuilderEx/MultipatchBuilderEx.csproj b/Geometry/MultipatchBuilderEx/MultipatchBuilderEx.csproj index 70cb8a2e..6840bee3 100644 --- a/Geometry/MultipatchBuilderEx/MultipatchBuilderEx.csproj +++ b/Geometry/MultipatchBuilderEx/MultipatchBuilderEx.csproj @@ -166,6 +166,7 @@ BuildDefault bin\Debug\MultipatchBuilderEx.xml + 1591 BuildDefault diff --git a/Layouts/CreateReport/CreateReportViewModel.cs b/Layouts/CreateReport/CreateReportViewModel.cs index 1fa8ddfa..31c17d4c 100644 --- a/Layouts/CreateReport/CreateReportViewModel.cs +++ b/Layouts/CreateReport/CreateReportViewModel.cs @@ -41,534 +41,538 @@ limitations under the License. namespace CreateReport { - internal class CreateReportViewModel : DockPane - { - private const string _dockPaneID = "CreateReport_CreateReport"; - private object _lock = new object(); - Map _activeMap; - - protected CreateReportViewModel() { - System.Windows.Data.BindingOperations.EnableCollectionSynchronization(_layers, _lock); - } - /// - /// Called when the dock pane is first initialized. - /// - protected override async Task InitializeAsync() - { - if (MapView.Active == null) - return; - - await UpdateCollectionsAsync(); - await base.InitializeAsync(); - } - - - #region Binding properties - /// - /// Show the DockPane. - /// - internal static void Show() - { - DockPane pane = FrameworkApplication.DockPaneManager.Find(_dockPaneID); - if (pane == null) - return; - - pane.Activate(); - } - - /// - /// Text shown near the top of the DockPane. - /// - private string _heading = "Create Report"; - public string Heading - { - get { return _heading; } - set - { - SetProperty(ref _heading, value, () => Heading); - } - } - private ObservableCollection _layers = new ObservableCollection(); - /// - /// Collection of layers in the active map - /// - public ObservableCollection Layers - { - get { return _layers; } - } - private FeatureLayer _selectedLayer; - /// - /// Selected feature layer - /// - public FeatureLayer SelectedLayer - { - get { return _selectedLayer; } - set - { - SetProperty(ref _selectedLayer, value, () => SelectedLayer); - GetFieldsAsync(); - } - } - private ObservableCollection _reportFields = new ObservableCollection(); - /// - /// Collection of fields in the layer used to generate the report - /// - public ObservableCollection ReportFields - { - get { return _reportFields; } - } - - - private string _reportName; - - /// - /// The name of the report project item created - /// - public string ReportName - { - get { return _reportName; } - set { SetProperty(ref _reportName, value, () => ReportName); } - } - private ObservableCollection _reportTemplates = new ObservableCollection(); - /// - /// Available report templates - /// - public ObservableCollection ReportTemplates - { - get { return _reportTemplates; } - set { SetProperty(ref _reportTemplates, value, () => ReportTemplates); } - } - private string _selectedReportTemplate; - /// - /// Selected report template - /// - public string SelectedReportTemplate - { - get { return _selectedReportTemplate; } - set { SetProperty(ref _selectedReportTemplate, value, () => SelectedReportTemplate); } - } - private ObservableCollection _reportStyles = new ObservableCollection(); - /// - /// Available Report styles - /// - public ObservableCollection ReportStyles - { - get { return _reportStyles; } - set { SetProperty(ref _reportStyles, value, () => ReportStyles); } - } - private string _selectedStyle; - /// - /// Selected Report Style - /// - public string SelectedReportStyle - { - get { return _selectedStyle; } - set { SetProperty(ref _selectedStyle, value, () => SelectedReportStyle); } - } - - private ObservableCollection _statsOptions = new ObservableCollection(); - /// - /// Stats options - /// - public ObservableCollection StatsOptions - { - get { return _statsOptions; } - set { SetProperty(ref _statsOptions, value, () => StatsOptions); } - } - - private string _selectedStatsOption; - /// - /// Selected statistics - /// - public string SelectedStatsOption - { - get { return _selectedStatsOption; } - set { SetProperty(ref _selectedStatsOption, value, () => SelectedStatsOption); } - - } - private ObservableCollection _selectedFields = new ObservableCollection(); - /// - /// Represents the selected fields which is a subset of the ReportFields. This is being used by the Group Fields and Stats Fields drop downs. - /// - public ObservableCollection SelectedFields - { - get { return _selectedFields; } - set { SetProperty(ref _selectedFields, value, () => SelectedFields); } - } - - private ReportField _selectedGroupField; - /// - /// Selected Group field - /// - public ReportField SelectedGroupField - { - get { return _selectedGroupField; } - set - { - SetProperty(ref _selectedGroupField, value, () => SelectedGroupField); - //Now make the set of templates to display only grouping types or non grouping types - ReportTemplates.Clear(); - if (SelectedGroupField == null) - ReportTemplates = new ObservableCollection(_nonGroupingTemplates); - else - ReportTemplates = new ObservableCollection(_groupingTemplates); - - SelectedReportTemplate = ReportTemplates[0]; - } - } - - private ReportField _selectedStatsField; - /// - /// Selected Statistic field - /// - public ReportField SelectedStatsField - { - get { return _selectedStatsField; } - set { - SetProperty(ref _selectedStatsField, value, () => SelectedStatsField); - //Gets stats collection - //Clear it first - StatsOptions.Clear(); - var statInfo = Enum.GetValues(typeof(FieldStatisticsFlag)); - foreach (FieldStatisticsFlag stat in statInfo) - { - //if (stat == FieldStatisticsFlag.NoStatistics) - // continue; - StatsOptions.Add(stat.ToString()); - } - SelectedStatsOption = StatsOptions[0]; - } - } - - - private bool _isUseSelection; - /// - /// Check box binding to use the selected features in map - /// - public bool IsUseSelection - { - get { return _isUseSelection; } - set { SetProperty(ref _isUseSelection, value, () => IsUseSelection); } - } - private bool _isSelectAll; - /// - /// Check box binding to select all the fields - /// - public bool IsSelectAll - { - get { return _isSelectAll; } - set { - SetProperty(ref _isSelectAll, value, () => IsSelectAll); - if (!IsSelectAll) - { - foreach (var rptFld in ReportFields) - { - rptFld.IsSelected = false; - } - } - else - { - foreach (var rptFld in ReportFields) - { - rptFld.IsSelected = true; - } - } - - - } - } - - private bool _isCreateReport; - - #endregion - #region Commands - - private ICommand _clearGroupingCommand; - public ICommand ClearGroupingCommand - { - get - { - _clearGroupingCommand = new RelayCommand(() => ClearGrouping(), () => { return SelectedGroupField != null; }); - return _clearGroupingCommand; - } - } - - private void ClearGrouping() - { - if (SelectedGroupField != null) - SelectedGroupField = null; - } - - private ICommand _clearStatsFieldsCommand; - public ICommand ClearStatsFieldsCommand - { - get - { - _clearStatsFieldsCommand = new RelayCommand(() => ClearStatsFields(), () => { return SelectedStatsField != null; }); - return _clearStatsFieldsCommand; - } - } - - private void ClearStatsFields() - { - if (SelectedStatsField != null) - SelectedStatsField = null; - StatsOptions.Clear(); - } - - private ICommand _createReportCmd; - /// - /// The button command to create the report - /// - public ICommand CreateReportCommand - { - get - { - _createReportCmd = new RelayCommand(() => CreateReport(), () => { return MapView.Active != null && SelectedLayer != null; }); - return _createReportCmd; - } - } - private ICommand _exportReportCmd; - - /// - /// The button command to export the report - /// - public ICommand ExportReportCommand - { - get - { - _exportReportCmd = new RelayCommand(() => ExportReport(), () => { return _isCreateReport; } ); - return _exportReportCmd; - } - } - #endregion - - - /// - /// Creates the report - /// - /// - private async Task CreateReport() - { - ReportDataSource reportDataSource = null; - Report report = null; - _isCreateReport = false; - var reportTemplate = await GetReportTemplate(SelectedReportTemplate); - await QueuedTask.Run(() => - { - //Adding all fields to the report - List reportFields = new List(); - var selectedReportFields = ReportFields.Where((fld) => fld.IsSelected); - foreach (var rfld in selectedReportFields) - { - var cimReportField = new CIMReportField() { Name = rfld.Name }; - reportFields.Add(cimReportField); - //Defining grouping field - if (rfld.Name == SelectedGroupField?.Name) - cimReportField.Group = true; - //To DO: Do sort info here. - } - - //Report field statistics - List reportFieldStats = new List(); - - if (SelectedStatsField != null) - { - ReportFieldStatistic reportStat = new ReportFieldStatistic(); - reportStat.Field = SelectedStatsField.Name; - reportStat.Statistic = (FieldStatisticsFlag)Enum.Parse(typeof(FieldStatisticsFlag), SelectedStatsOption); - reportFieldStats.Add(reportStat); - } - - //Set Datasource - reportDataSource = new ReportDataSource(SelectedLayer, "", IsUseSelection, reportFields); - - try - { - report = ReportFactory.Instance.CreateReport(ReportName, reportDataSource, null, reportFieldStats, reportTemplate, SelectedReportStyle); - _isCreateReport = true; - } - catch (System.InvalidOperationException e) - { - if (e.Message.Contains("Group field defined for a non-grouping template")) - { - MessageBox.Show("A group field cannot be defined for a non-grouping template."); - } - else if (e.Message.Contains("Grouping template specified but no group field defined")) - { - MessageBox.Show("A group field should be defined for a grouping template."); - } - } - }); - } - /// - /// Exports report - /// - /// - private async Task ExportReport() - { - ReportProjectItem reportProjItem = Project.Current.GetItems().FirstOrDefault(item => item.Name.Equals(ReportName)); - Report report = null; - await QueuedTask.Run(() => report = reportProjItem?.GetReport()); - if (report == null) - { - MessageBox.Show($"{ReportName} report not found."); - return; - } - - //Define Export Options - var exportOptions = new ReportExportOptions - { - ExportPageOption = ExportPageOptions.ExportAllPages, - TotalPageNumberOverride = 12, - StartingPageNumberLabelOffset = 0 - - }; - //Create PDF format with appropriate settings - PDFFormat pdfFormat = new PDFFormat(); - pdfFormat.Resolution = 300; - pdfFormat.OutputFileName = Path.Combine(Project.Current.HomeFolderPath, report.Name); - await ExportAReportToPdf(report, pdfFormat, exportOptions, IsUseSelection); - MessageBox.Show($"{ReportName} report exported to {pdfFormat.OutputFileName}"); - - - } - - #region Private methods and props - - private List _groupingTemplates = new List(); - private List _nonGroupingTemplates = new List(); - - private async Task ExportAReportToPdf(Report report, PDFFormat pdfFormat, ReportExportOptions reportExportOptions, bool isUseSelectionSet = true) - { - await QueuedTask.Run( () => { - - report?.ExportToPDF(ReportName, pdfFormat, reportExportOptions, isUseSelectionSet); - }); - } - private async Task GetReportTemplate(string reportName) - { - var reportTemplates = await ReportTemplateManager.GetTemplatesAsync(); - return reportTemplates.Where(r => r.Name == reportName).First(); - } - - private async Task GetFieldsAsync() - { - ReportFields.Clear(); - SelectedFields.Clear(); - if (SelectedLayer == null) - return; - - await QueuedTask.Run((Action)(() => - { - foreach (FieldDescription fd in SelectedLayer?.GetFieldDescriptions()) - { - string shapeField = SelectedLayer.GetFeatureClass().GetDefinition().GetShapeField(); - if (fd.Name == shapeField) continue; //filter out the shape field. - var defFieldAction = (Action)(() => - { - var field = new ReportField { IsSelected = false, DisplayName = fd.Alias, Name = fd.Name }; - ReportFields.Add(field); - field.FieldSelectionChanged += this.Field_FieldSelectionChanged; - //field.IsSelected = true; - }); - ActionOnGuiThread(defFieldAction); - } - })); - } - - private void Field_FieldSelectionChanged(object sender, FieldSelectionChangedEventArgs e) - { - var reportField = e.ChangedReportField; - if (reportField.IsSelected) - SelectedFields.Add(new ReportField { DisplayName = reportField.DisplayName, Name = reportField.Name }); - else - SelectedFields.Remove(SelectedFields.Where((fld) => fld.Name == reportField.Name).FirstOrDefault()); - } - - public async Task UpdateCollectionsAsync() - { - _activeMap = MapView.Active.Map; - //Get the layers in active map - GetLayers(); - - //Get the report Templates - await QueuedTask.Run(() => - { - //Creating a collection of grouping and non grouping report templates - foreach (ReportTemplate reportTemplate in ReportTemplateManager.GetTemplates()) - { - if (reportTemplate.Name.Contains("Grouping")) - _groupingTemplates.Add(reportTemplate.Name); - else - _nonGroupingTemplates.Add(reportTemplate.Name); - } - }); - //Initialize the report template collection with non grouping styles - since non grouping field is selected. - ReportTemplates = new ObservableCollection(_nonGroupingTemplates); - SelectedReportTemplate = ReportTemplates[0]; - //Get the report Styles - await QueuedTask.Run(() => - { - foreach (string reportStyle in ReportStylingManager.GetStylings()) - { - var defReportStyleAction = (Action)(() => - { - ReportStyles.Add(reportStyle); - }); - ActionOnGuiThread(defReportStyleAction); - } - }); - SelectedReportStyle = ReportStyles[0]; - - } - private void GetLayers() - { - Layers.Clear(); - if (_activeMap == null) - return; - ReportName = $"Report_{_activeMap.Name}"; - var layers = _activeMap.GetLayersAsFlattenedList().OfType(); - //if (layers.Count == 0) - // return; - lock (_lock) - { - foreach (var layer in layers) - { - lock (_lock) - Layers.Add(layer); - } - } - SelectedLayer = Layers.Count > 0 ? Layers[0] : null; - } - - /// - /// We have to ensure that GUI updates are only done from the GUI thread. - /// - private void ActionOnGuiThread(Action theAction) - { - if (System.Windows.Application.Current.Dispatcher.CheckAccess()) - { - //We are on the GUI thread - theAction(); - } - else - { - //Using the dispatcher to perform this action on the GUI thread. - ProApp.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, theAction); - } - } - #endregion - } - - /// - /// Button implementation to show the DockPane. - /// - internal class CreateReport_ShowButton : Button - { - protected override void OnClick() - { - CreateReportViewModel.Show(); - } - } + internal class CreateReportViewModel : DockPane + { + private const string _dockPaneID = "CreateReport_CreateReport"; + private object _lock = new object(); + Map _activeMap; + + protected CreateReportViewModel() + { + System.Windows.Data.BindingOperations.EnableCollectionSynchronization(_layers, _lock); + } + /// + /// Called when the dock pane is first initialized. + /// + protected override async Task InitializeAsync() + { + if (MapView.Active == null) + return; + + await UpdateCollectionsAsync(); + await base.InitializeAsync(); + } + + + #region Binding properties + /// + /// Show the DockPane. + /// + internal static void Show() + { + DockPane pane = FrameworkApplication.DockPaneManager.Find(_dockPaneID); + if (pane == null) + return; + + pane.Activate(); + } + + /// + /// Text shown near the top of the DockPane. + /// + private string _heading = "Create Report"; + public string Heading + { + get { return _heading; } + set + { + SetProperty(ref _heading, value, () => Heading); + } + } + private ObservableCollection _layers = new ObservableCollection(); + /// + /// Collection of layers in the active map + /// + public ObservableCollection Layers + { + get { return _layers; } + } + private FeatureLayer _selectedLayer; + /// + /// Selected feature layer + /// + public FeatureLayer SelectedLayer + { + get { return _selectedLayer; } + set + { + SetProperty(ref _selectedLayer, value, () => SelectedLayer); + _ = GetFieldsAsync(); + } + } + private ObservableCollection _reportFields = new ObservableCollection(); + /// + /// Collection of fields in the layer used to generate the report + /// + public ObservableCollection ReportFields + { + get { return _reportFields; } + } + + + private string _reportName; + + /// + /// The name of the report project item created + /// + public string ReportName + { + get { return _reportName; } + set { SetProperty(ref _reportName, value, () => ReportName); } + } + private ObservableCollection _reportTemplates = new ObservableCollection(); + /// + /// Available report templates + /// + public ObservableCollection ReportTemplates + { + get { return _reportTemplates; } + set { SetProperty(ref _reportTemplates, value, () => ReportTemplates); } + } + private string _selectedReportTemplate; + /// + /// Selected report template + /// + public string SelectedReportTemplate + { + get { return _selectedReportTemplate; } + set { SetProperty(ref _selectedReportTemplate, value, () => SelectedReportTemplate); } + } + private ObservableCollection _reportStyles = new ObservableCollection(); + /// + /// Available Report styles + /// + public ObservableCollection ReportStyles + { + get { return _reportStyles; } + set { SetProperty(ref _reportStyles, value, () => ReportStyles); } + } + private string _selectedStyle; + /// + /// Selected Report Style + /// + public string SelectedReportStyle + { + get { return _selectedStyle; } + set { SetProperty(ref _selectedStyle, value, () => SelectedReportStyle); } + } + + private ObservableCollection _statsOptions = new ObservableCollection(); + /// + /// Stats options + /// + public ObservableCollection StatsOptions + { + get { return _statsOptions; } + set { SetProperty(ref _statsOptions, value, () => StatsOptions); } + } + + private string _selectedStatsOption; + /// + /// Selected statistics + /// + public string SelectedStatsOption + { + get { return _selectedStatsOption; } + set { SetProperty(ref _selectedStatsOption, value, () => SelectedStatsOption); } + + } + private ObservableCollection _selectedFields = new ObservableCollection(); + /// + /// Represents the selected fields which is a subset of the ReportFields. This is being used by the Group Fields and Stats Fields drop downs. + /// + public ObservableCollection SelectedFields + { + get { return _selectedFields; } + set { SetProperty(ref _selectedFields, value, () => SelectedFields); } + } + + private ReportField _selectedGroupField; + /// + /// Selected Group field + /// + public ReportField SelectedGroupField + { + get { return _selectedGroupField; } + set + { + SetProperty(ref _selectedGroupField, value, () => SelectedGroupField); + //Now make the set of templates to display only grouping types or non grouping types + ReportTemplates.Clear(); + if (SelectedGroupField == null) + ReportTemplates = new ObservableCollection(_nonGroupingTemplates); + else + ReportTemplates = new ObservableCollection(_groupingTemplates); + + SelectedReportTemplate = ReportTemplates[0]; + } + } + + private ReportField _selectedStatsField; + /// + /// Selected Statistic field + /// + public ReportField SelectedStatsField + { + get { return _selectedStatsField; } + set + { + SetProperty(ref _selectedStatsField, value, () => SelectedStatsField); + //Gets stats collection + //Clear it first + StatsOptions.Clear(); + var statInfo = Enum.GetValues(typeof(FieldStatisticsFlag)); + foreach (FieldStatisticsFlag stat in statInfo) + { + //if (stat == FieldStatisticsFlag.NoStatistics) + // continue; + StatsOptions.Add(stat.ToString()); + } + SelectedStatsOption = StatsOptions[0]; + } + } + + + private bool _isUseSelection; + /// + /// Check box binding to use the selected features in map + /// + public bool IsUseSelection + { + get { return _isUseSelection; } + set { SetProperty(ref _isUseSelection, value, () => IsUseSelection); } + } + private bool _isSelectAll; + /// + /// Check box binding to select all the fields + /// + public bool IsSelectAll + { + get { return _isSelectAll; } + set + { + SetProperty(ref _isSelectAll, value, () => IsSelectAll); + if (!IsSelectAll) + { + foreach (var rptFld in ReportFields) + { + rptFld.IsSelected = false; + } + } + else + { + foreach (var rptFld in ReportFields) + { + rptFld.IsSelected = true; + } + } + + + } + } + + private bool _isCreateReport; + + #endregion + #region Commands + + private ICommand _clearGroupingCommand; + public ICommand ClearGroupingCommand + { + get + { + _clearGroupingCommand = new RelayCommand(() => ClearGrouping(), () => { return SelectedGroupField != null; }); + return _clearGroupingCommand; + } + } + + private void ClearGrouping() + { + if (SelectedGroupField != null) + SelectedGroupField = null; + } + + private ICommand _clearStatsFieldsCommand; + public ICommand ClearStatsFieldsCommand + { + get + { + _clearStatsFieldsCommand = new RelayCommand(() => ClearStatsFields(), () => { return SelectedStatsField != null; }); + return _clearStatsFieldsCommand; + } + } + + private void ClearStatsFields() + { + if (SelectedStatsField != null) + SelectedStatsField = null; + StatsOptions.Clear(); + } + + private ICommand _createReportCmd; + /// + /// The button command to create the report + /// + public ICommand CreateReportCommand + { + get + { + _createReportCmd = new RelayCommand(() => CreateReport(), () => { return MapView.Active != null && SelectedLayer != null; }); + return _createReportCmd; + } + } + private ICommand _exportReportCmd; + + /// + /// The button command to export the report + /// + public ICommand ExportReportCommand + { + get + { + _exportReportCmd = new RelayCommand(() => ExportReport(), () => { return _isCreateReport; }); + return _exportReportCmd; + } + } + #endregion + + + /// + /// Creates the report + /// + /// + private async Task CreateReport() + { + ReportDataSource reportDataSource = null; + Report report = null; + _isCreateReport = false; + var reportTemplate = await GetReportTemplate(SelectedReportTemplate); + await QueuedTask.Run(() => + { + //Adding all fields to the report + List reportFields = new List(); + var selectedReportFields = ReportFields.Where((fld) => fld.IsSelected); + foreach (var rfld in selectedReportFields) + { + var cimReportField = new CIMReportField() { Name = rfld.Name }; + reportFields.Add(cimReportField); + //Defining grouping field + if (rfld.Name == SelectedGroupField?.Name) + cimReportField.Group = true; + //To DO: Do sort info here. + } + + //Report field statistics + List reportFieldStats = new List(); + + if (SelectedStatsField != null) + { + ReportFieldStatistic reportStat = new ReportFieldStatistic(); + reportStat.Field = SelectedStatsField.Name; + reportStat.Statistic = (FieldStatisticsFlag)Enum.Parse(typeof(FieldStatisticsFlag), SelectedStatsOption); + reportFieldStats.Add(reportStat); + } + + //Set Datasource + reportDataSource = new ReportDataSource(SelectedLayer, "", IsUseSelection, reportFields); + + try + { + report = ReportFactory.Instance.CreateReport(ReportName, reportDataSource, null, reportFieldStats, reportTemplate, SelectedReportStyle); + _isCreateReport = true; + } + catch (System.InvalidOperationException e) + { + if (e.Message.Contains("Group field defined for a non-grouping template")) + { + MessageBox.Show("A group field cannot be defined for a non-grouping template."); + } + else if (e.Message.Contains("Grouping template specified but no group field defined")) + { + MessageBox.Show("A group field should be defined for a grouping template."); + } + } + }); + } + /// + /// Exports report + /// + /// + private async Task ExportReport() + { + ReportProjectItem reportProjItem = Project.Current.GetItems().FirstOrDefault(item => item.Name.Equals(ReportName)); + Report report = null; + await QueuedTask.Run(() => report = reportProjItem?.GetReport()); + if (report == null) + { + MessageBox.Show($"{ReportName} report not found."); + return; + } + + //Define Export Options + var exportOptions = new ReportExportOptions + { + ExportPageOption = ExportPageOptions.ExportAllPages, + TotalPageNumberOverride = 12, + StartingPageNumberLabelOffset = 0 + + }; + //Create PDF format with appropriate settings + PDFFormat pdfFormat = new PDFFormat(); + pdfFormat.Resolution = 300; + pdfFormat.OutputFileName = Path.Combine(Project.Current.HomeFolderPath, report.Name); + await ExportAReportToPdf(report, pdfFormat, exportOptions, IsUseSelection); + MessageBox.Show($"{ReportName} report exported to {pdfFormat.OutputFileName}"); + + + } + + #region Private methods and props + + private List _groupingTemplates = new List(); + private List _nonGroupingTemplates = new List(); + + private async Task ExportAReportToPdf(Report report, PDFFormat pdfFormat, ReportExportOptions reportExportOptions, bool isUseSelectionSet = true) + { + await QueuedTask.Run(() => + { + + report?.ExportToPDF(ReportName, pdfFormat, reportExportOptions, isUseSelectionSet); + }); + } + private async Task GetReportTemplate(string reportName) + { + var reportTemplates = await ReportTemplateManager.GetTemplatesAsync(); + return reportTemplates.Where(r => r.Name == reportName).First(); + } + + private async Task GetFieldsAsync() + { + ReportFields.Clear(); + SelectedFields.Clear(); + if (SelectedLayer == null) + return; + + await QueuedTask.Run((Action)(() => + { + foreach (FieldDescription fd in SelectedLayer?.GetFieldDescriptions()) + { + string shapeField = SelectedLayer.GetFeatureClass().GetDefinition().GetShapeField(); + if (fd.Name == shapeField) continue; //filter out the shape field. + var defFieldAction = (Action)(() => + { + var field = new ReportField { IsSelected = false, DisplayName = fd.Alias, Name = fd.Name }; + ReportFields.Add(field); + field.FieldSelectionChanged += this.Field_FieldSelectionChanged; + //field.IsSelected = true; + }); + ActionOnGuiThread(defFieldAction); + } + })); + } + + private void Field_FieldSelectionChanged(object sender, FieldSelectionChangedEventArgs e) + { + var reportField = e.ChangedReportField; + if (reportField.IsSelected) + SelectedFields.Add(new ReportField { DisplayName = reportField.DisplayName, Name = reportField.Name }); + else + SelectedFields.Remove(SelectedFields.Where((fld) => fld.Name == reportField.Name).FirstOrDefault()); + } + + public async Task UpdateCollectionsAsync() + { + _activeMap = MapView.Active.Map; + //Get the layers in active map + GetLayers(); + + //Get the report Templates + await QueuedTask.Run(() => + { + //Creating a collection of grouping and non grouping report templates + foreach (ReportTemplate reportTemplate in ReportTemplateManager.GetTemplates()) + { + if (reportTemplate.Name.Contains("Grouping")) + _groupingTemplates.Add(reportTemplate.Name); + else + _nonGroupingTemplates.Add(reportTemplate.Name); + } + }); + //Initialize the report template collection with non grouping styles - since non grouping field is selected. + ReportTemplates = new ObservableCollection(_nonGroupingTemplates); + SelectedReportTemplate = ReportTemplates[0]; + //Get the report Styles + await QueuedTask.Run(() => + { + foreach (string reportStyle in ReportStylingManager.GetStylings()) + { + var defReportStyleAction = (Action)(() => + { + ReportStyles.Add(reportStyle); + }); + ActionOnGuiThread(defReportStyleAction); + } + }); + SelectedReportStyle = ReportStyles[0]; + + } + private void GetLayers() + { + Layers.Clear(); + if (_activeMap == null) + return; + ReportName = $"Report_{_activeMap.Name}"; + var layers = _activeMap.GetLayersAsFlattenedList().OfType(); + //if (layers.Count == 0) + // return; + lock (_lock) + { + foreach (var layer in layers) + { + lock (_lock) + Layers.Add(layer); + } + } + SelectedLayer = Layers.Count > 0 ? Layers[0] : null; + } + + /// + /// We have to ensure that GUI updates are only done from the GUI thread. + /// + private void ActionOnGuiThread(Action theAction) + { + if (System.Windows.Application.Current.Dispatcher.CheckAccess()) + { + //We are on the GUI thread + theAction(); + } + else + { + //Using the dispatcher to perform this action on the GUI thread. + ProApp.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, theAction); + } + } + #endregion + } + + /// + /// Button implementation to show the DockPane. + /// + internal class CreateReport_ShowButton : Button + { + protected override void OnClick() + { + CreateReportViewModel.Show(); + } + } } diff --git a/Map-Exploration/WorkingWithQueryDefinitionFilters/WorkingWithQueryDefinitionFilters.csproj b/Map-Exploration/WorkingWithQueryDefinitionFilters/WorkingWithQueryDefinitionFilters.csproj index de72188f..58210ac0 100644 --- a/Map-Exploration/WorkingWithQueryDefinitionFilters/WorkingWithQueryDefinitionFilters.csproj +++ b/Map-Exploration/WorkingWithQueryDefinitionFilters/WorkingWithQueryDefinitionFilters.csproj @@ -191,6 +191,7 @@ BuildDefault bin\Debug\WorkingWithQueryDefinitionFilters.xml + 1591 BuildDefault diff --git a/Plugin/SimplePointPluginTest/SimplePointPlugin/SimplePointPlugin.csproj b/Plugin/SimplePointPluginTest/SimplePointPlugin/SimplePointPlugin.csproj index 4636d238..149e0c71 100644 --- a/Plugin/SimplePointPluginTest/SimplePointPlugin/SimplePointPlugin.csproj +++ b/Plugin/SimplePointPluginTest/SimplePointPlugin/SimplePointPlugin.csproj @@ -54,9 +54,6 @@ ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - ..\packages\System.Collections.Immutable.1.7.1\lib\net461\System.Collections.Immutable.dll - ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll @@ -65,9 +62,6 @@ ..\..\..\packages\System.Numerics.Vectors.4.6.0-preview5.19224.8\lib\net46\System.Numerics.Vectors.dll - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - diff --git a/README.md b/README.md index 7f3b87a4..52183713 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ Read the [ProGuide: Installation and Upgrade](https://github.com/Esri/arcgis-pro ## ArcGIS Pro Add-In Community Sample List -Below is the list of 194 ArcGIS Pro samples that are included in this repository. +Below is the list of 195 ArcGIS Pro samples that are included in this repository. #### Content @@ -153,6 +153,7 @@ Below is the list of 194 ArcGIS Pro samples that are included in this repository * [Notifications (c#)](../../tree/master/Framework/Notifications) * [OpenMapViews (c#)](../../tree/master/Framework/OpenMapViews) * [ProgressDialog (c#)](../../tree/master/Framework/ProgressDialog) +* [ProIcons (c#)](../../tree/master/Framework/ProIcons) * [ProWindowMVVM (c#)](../../tree/master/Framework/ProWindowMVVM) * [QAReviewTool (c#)](../../tree/master/Framework/QAReviewTool) * [RemoveAddins (c#)](../../tree/master/Framework/RemoveAddins) diff --git a/Samples.sln b/Samples.sln index 8423c5a9..08029263 100644 --- a/Samples.sln +++ b/Samples.sln @@ -416,6 +416,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GraphicsLayers", "Map-Autho EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ValidateChanges", "UtilityNetwork\ValidateChanges\ValidateChanges.csproj", "{0A907E31-89CA-439F-855C-81FC9375EEEF}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProIcons", "Framework\ProIcons\ProIcons.csproj", "{6DA0B756-6B7D-451F-8AFF-1ABD718C9665}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2048,6 +2050,14 @@ Global {0A907E31-89CA-439F-855C-81FC9375EEEF}.Release|Any CPU.Build.0 = Release|Any CPU {0A907E31-89CA-439F-855C-81FC9375EEEF}.Release|x64.ActiveCfg = Release|Any CPU {0A907E31-89CA-439F-855C-81FC9375EEEF}.Release|x64.Build.0 = Release|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Debug|x64.ActiveCfg = Debug|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Debug|x64.Build.0 = Debug|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Release|Any CPU.Build.0 = Release|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Release|x64.ActiveCfg = Release|Any CPU + {6DA0B756-6B7D-451F-8AFF-1ABD718C9665}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE