commit 49e3a50167299c61ed63b6b1955ae04d4cbd686f Author: Elena Date: Mon Jul 19 12:27:04 2021 +0200 Primer commit OliviaAddInPro diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1362a34 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.vs/* +/bin/* +/obj/* diff --git a/Button/ButtonConfig.cs b/Button/ButtonConfig.cs new file mode 100644 index 0000000..b4ec672 --- /dev/null +++ b/Button/ButtonConfig.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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.Internal.Framework.Controls; +using ArcGIS.Desktop.Framework.Dialogs; +using ArcGIS.Desktop.Framework.Threading.Tasks; +using ArcGIS.Desktop.Mapping; + +namespace OliviaAddInPro +{ + internal class ButtonConfig : Button + { + protected override void OnClick() + { + if (OliviaGlob.tipEjec == TiposEjecucion.Ninguno) + { + //OliviaGlob.tipEjec = TiposEjecucion.Config; + } + else + { + OliviaGlob.ponMsg(Resource1.String_existe_ejec, MessageType.Warning); + } + } + } +} diff --git a/Button/ButtonLimp.cs b/Button/ButtonLimp.cs new file mode 100644 index 0000000..0be0c66 --- /dev/null +++ b/Button/ButtonLimp.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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.Internal.Framework.Controls; +using ArcGIS.Desktop.Framework.Dialogs; +using ArcGIS.Desktop.Framework.Threading.Tasks; +using ArcGIS.Desktop.Mapping; + +namespace OliviaAddInPro +{ + internal class ButtonLimp : Button + { + protected override void OnClick() + { + if (OliviaGlob.tipEjec == TiposEjecucion.Ninguno) + { + OliviaGlob.tipEjec = TiposEjecucion.LimpiezaConfig; + DockpaneLimpiezaViewModel.Show(); + } + else + { + OliviaGlob.ponMsg(Resource1.String_existe_ejec, MessageType.Warning); + } + } + } +} diff --git a/Button/ButtonMaq.cs b/Button/ButtonMaq.cs new file mode 100644 index 0000000..f48e281 --- /dev/null +++ b/Button/ButtonMaq.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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.Internal.Framework.Controls; +using ArcGIS.Desktop.Framework.Dialogs; +using ArcGIS.Desktop.Framework.Threading.Tasks; +using ArcGIS.Desktop.Mapping; + +namespace OliviaAddInPro +{ + internal class ButtonMaq : Button + { + protected override void OnClick() + { + if (OliviaGlob.tipEjec == TiposEjecucion.Ninguno) + { + //OliviaGlob.tipEjec = TiposEjecucion.Maqueta; + } + else + { + OliviaGlob.ponMsg(Resource1.String_existe_ejec, MessageType.Warning); + } + } + } +} diff --git a/Button/ButtonRec.cs b/Button/ButtonRec.cs new file mode 100644 index 0000000..5df8c3d --- /dev/null +++ b/Button/ButtonRec.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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.Internal.Framework.Controls; +using ArcGIS.Desktop.Mapping; + +namespace OliviaAddInPro +{ + internal class ButtonRec : Button + { + protected override void OnClick() + { + if(OliviaGlob.tipEjec==TiposEjecucion.Ninguno) + { + OliviaGlob.tipEjec = TiposEjecucion.RecoConfig; + DockpaneRecogidaViewModel.Show(); + } + else + { + OliviaGlob.ponMsg(Resource1.String_existe_ejec, MessageType.Warning); + } + } + } +} diff --git a/Config.daml b/Config.daml new file mode 100644 index 0000000..d0c0405 --- /dev/null +++ b/Config.daml @@ -0,0 +1,59 @@ + + + OliviaAddInPro + AddIn de Optimización de la Limpieza Viaria para ArcGIs Pro + Images\AddinDesktop32.png + VSM + VSM - Narvaling + 08/07/2021 12:28:02, 2021 + Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DarkImages/AddInDesktop16.png b/DarkImages/AddInDesktop16.png new file mode 100644 index 0000000..0118942 Binary files /dev/null and b/DarkImages/AddInDesktop16.png differ diff --git a/DarkImages/AddInDesktop32.png b/DarkImages/AddInDesktop32.png new file mode 100644 index 0000000..9713e3b Binary files /dev/null and b/DarkImages/AddInDesktop32.png differ diff --git a/DarkImages/GenericButtonBlue16.png b/DarkImages/GenericButtonBlue16.png new file mode 100644 index 0000000..20b1187 Binary files /dev/null and b/DarkImages/GenericButtonBlue16.png differ diff --git a/DarkImages/GenericButtonBlue32.png b/DarkImages/GenericButtonBlue32.png new file mode 100644 index 0000000..e3b26ab Binary files /dev/null and b/DarkImages/GenericButtonBlue32.png differ diff --git a/DarkImages/GenericButtonGreen16.png b/DarkImages/GenericButtonGreen16.png new file mode 100644 index 0000000..c04d7f5 Binary files /dev/null and b/DarkImages/GenericButtonGreen16.png differ diff --git a/DarkImages/GenericButtonGreen32.png b/DarkImages/GenericButtonGreen32.png new file mode 100644 index 0000000..547ce96 Binary files /dev/null and b/DarkImages/GenericButtonGreen32.png differ diff --git a/DarkImages/GenericButtonPurple16.png b/DarkImages/GenericButtonPurple16.png new file mode 100644 index 0000000..013686b Binary files /dev/null and b/DarkImages/GenericButtonPurple16.png differ diff --git a/DarkImages/GenericButtonPurple32.png b/DarkImages/GenericButtonPurple32.png new file mode 100644 index 0000000..7d871f5 Binary files /dev/null and b/DarkImages/GenericButtonPurple32.png differ diff --git a/Images/AddInDesktop16.png b/Images/AddInDesktop16.png new file mode 100644 index 0000000..be3cdda Binary files /dev/null and b/Images/AddInDesktop16.png differ diff --git a/Images/AddInDesktop32.png b/Images/AddInDesktop32.png new file mode 100644 index 0000000..b3d5c8e Binary files /dev/null and b/Images/AddInDesktop32.png differ diff --git a/Images/BexDog32.png b/Images/BexDog32.png new file mode 100644 index 0000000..461fe91 Binary files /dev/null and b/Images/BexDog32.png differ diff --git a/Images/Dino32.png b/Images/Dino32.png new file mode 100644 index 0000000..4435f1a Binary files /dev/null and b/Images/Dino32.png differ diff --git a/Images/GenericButtonBlue16.png b/Images/GenericButtonBlue16.png new file mode 100644 index 0000000..ab6cad3 Binary files /dev/null and b/Images/GenericButtonBlue16.png differ diff --git a/Images/GenericButtonBlue32.png b/Images/GenericButtonBlue32.png new file mode 100644 index 0000000..4a573fd Binary files /dev/null and b/Images/GenericButtonBlue32.png differ diff --git a/Images/GenericButtonGreen16.png b/Images/GenericButtonGreen16.png new file mode 100644 index 0000000..213e0c1 Binary files /dev/null and b/Images/GenericButtonGreen16.png differ diff --git a/Images/GenericButtonGreen32.png b/Images/GenericButtonGreen32.png new file mode 100644 index 0000000..75ec735 Binary files /dev/null and b/Images/GenericButtonGreen32.png differ diff --git a/Images/GenericButtonPurple16.png b/Images/GenericButtonPurple16.png new file mode 100644 index 0000000..01b0895 Binary files /dev/null and b/Images/GenericButtonPurple16.png differ diff --git a/Images/GenericButtonPurple32.png b/Images/GenericButtonPurple32.png new file mode 100644 index 0000000..39f62db Binary files /dev/null and b/Images/GenericButtonPurple32.png differ diff --git a/Images/OliviaIconPro.ico b/Images/OliviaIconPro.ico new file mode 100644 index 0000000..ecd20f0 Binary files /dev/null and b/Images/OliviaIconPro.ico differ diff --git a/Images/OliviaIconPro16.png b/Images/OliviaIconPro16.png new file mode 100644 index 0000000..be3cdda Binary files /dev/null and b/Images/OliviaIconPro16.png differ diff --git a/Images/OliviaIconPro32.png b/Images/OliviaIconPro32.png new file mode 100644 index 0000000..b3d5c8e Binary files /dev/null and b/Images/OliviaIconPro32.png differ diff --git a/Images/OliviaIconPro32Web.png b/Images/OliviaIconPro32Web.png new file mode 100644 index 0000000..a7bc569 Binary files /dev/null and b/Images/OliviaIconPro32Web.png differ diff --git a/Images/Tiporeco.png b/Images/Tiporeco.png new file mode 100644 index 0000000..fceb0ec Binary files /dev/null and b/Images/Tiporeco.png differ diff --git a/Images/carrito.png b/Images/carrito.png new file mode 100644 index 0000000..73ac8da Binary files /dev/null and b/Images/carrito.png differ diff --git a/Images/config.png b/Images/config.png new file mode 100644 index 0000000..9d2c4e9 Binary files /dev/null and b/Images/config.png differ diff --git a/Images/contenedor.png b/Images/contenedor.png new file mode 100644 index 0000000..765af6d Binary files /dev/null and b/Images/contenedor.png differ diff --git a/Images/maqueta.png b/Images/maqueta.png new file mode 100644 index 0000000..8c699a3 Binary files /dev/null and b/Images/maqueta.png differ diff --git a/Images/openfolder.png b/Images/openfolder.png new file mode 100644 index 0000000..69685ba Binary files /dev/null and b/Images/openfolder.png differ diff --git a/Images/resReco/Tiporeco.png b/Images/resReco/Tiporeco.png new file mode 100644 index 0000000..110d08b Binary files /dev/null and b/Images/resReco/Tiporeco.png differ diff --git a/Images/resReco/control.png b/Images/resReco/control.png new file mode 100644 index 0000000..912f215 Binary files /dev/null and b/Images/resReco/control.png differ diff --git a/Images/resReco/tiempos.png b/Images/resReco/tiempos.png new file mode 100644 index 0000000..f7157dc Binary files /dev/null and b/Images/resReco/tiempos.png differ diff --git a/Images/resReco/zonificación.gif b/Images/resReco/zonificación.gif new file mode 100644 index 0000000..d3f2037 Binary files /dev/null and b/Images/resReco/zonificación.gif differ diff --git a/Module1.cs b/Module1.cs new file mode 100644 index 0000000..36e411c --- /dev/null +++ b/Module1.cs @@ -0,0 +1,74 @@ +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.Core.Events; +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 OliviaAddInPro +{ + internal class Module1 : Module + { + private static Module1 _this = null; + + /// + /// Retrieve the singleton instance to this module here + /// + public static Module1 Current + { + get + { + return _this ?? (_this = (Module1)FrameworkApplication.FindModule("OliviaAddInPro_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; + } + + protected override bool Initialize() + { + ProjectClosedEvent.Subscribe(OnProjectClosed); + return base.Initialize(); + } + + private void OnProjectClosed(ProjectEventArgs obj) + { + DockPane dockPane = FrameworkApplication.DockPaneManager.Find("OliviaAddInPro_DockpaneLimpieza"); + if (dockPane != null) + { + dockPane.IsVisible = false; + } + dockPane = FrameworkApplication.DockPaneManager.Find("OliviaAddInPro_DockpaneRecogida"); + if (dockPane != null) + { + dockPane.IsVisible = false; + } + } + + #endregion Overrides + + + } +} diff --git a/OliviaAddInPro.csproj b/OliviaAddInPro.csproj new file mode 100644 index 0000000..52f33ab --- /dev/null +++ b/OliviaAddInPro.csproj @@ -0,0 +1,284 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {10742570-CF59-42F2-BEA2-2A38002A06EE} + Library + Properties + OliviaAddInPro + OliviaAddInPro + v4.8 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + Program + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\ArcGISPro.exe + AnyCPU + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + Program + C:\Users\Elena\AppData\Local\Programs\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:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\ArcGIS.Desktop.Framework.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\ArcGIS.Core.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\Extensions\Core\ArcGIS.Desktop.Core.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\Extensions\Mapping\ArcGIS.Desktop.Mapping.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\Extensions\Catalog\ArcGIS.Desktop.Catalog.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\Extensions\Editing\ArcGIS.Desktop.Editing.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\Extensions\DesktopExtensions\ArcGIS.Desktop.Extensions.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\Extensions\GeoProcessing\ArcGIS.Desktop.GeoProcessing.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\Extensions\Layout\ArcGIS.Desktop.Layouts.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\ArcGIS.Desktop.Shared.Wpf.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\ArcGIS.Desktop.Ribbon.Wpf.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\ArcGIS.Desktop.DataGrid.Contrib.Wpf.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\ArcGIS.Desktop.Resources.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\ArcGIS.Desktop.Resources.dll + False + + + C:\Users\Elena\AppData\Local\Programs\ArcGIS\Pro\bin\ESRI.ArcGIS.ItemIndex.dll + False + + + + + + + + + + + + + + + + + + + + PaneLimpiezaSub2.xaml + + + PaneLimpiezaSub1.xaml + + + + PaneLimpieza.xaml + + + DockpaneLimpieza.xaml + + + + DockpaneRecogida.xaml + + + + + + + True + True + Resource1.resx + + + + + + + + + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + + + + + + + + + + + + + + + ResXFileCodeGenerator + Resource1.Designer.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BuildDefault + + + BuildDefault + + + + + + + + + \ No newline at end of file diff --git a/OliviaAddInPro.sln b/OliviaAddInPro.sln new file mode 100644 index 0000000..f426781 --- /dev/null +++ b/OliviaAddInPro.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30011.22 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliviaAddInPro", "OliviaAddInPro.csproj", "{10742570-CF59-42F2-BEA2-2A38002A06EE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {10742570-CF59-42F2-BEA2-2A38002A06EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {10742570-CF59-42F2-BEA2-2A38002A06EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {10742570-CF59-42F2-BEA2-2A38002A06EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {10742570-CF59-42F2-BEA2-2A38002A06EE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6CCE2E25-A66F-40A8-9AF1-552236F7E6D0} + EndGlobalSection +EndGlobal diff --git a/OliviaGlob.cs b/OliviaGlob.cs new file mode 100644 index 0000000..e826aa2 --- /dev/null +++ b/OliviaGlob.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ArcGIS.Desktop.Internal.Framework.Controls; + +namespace OliviaAddInPro +{ + enum TiposEjecucion + { + Ninguno, + LimpiezaConfig, + LimpiezaEjec, + RecoConfig, + RecoEjec, + Maqueta, + Config + } + static class OliviaGlob + { + public static TiposEjecucion tipEjec { get; set; } = TiposEjecucion.Ninguno; + public static ErrorMessageDialog msg; + + public static void ponMsg(String mensaje, MessageType tipo, String titulo="OLIVIA") + { + msg = new ErrorMessageDialog(titulo, mensaje, tipo); + msg.ShowDialog(); + } + } +} diff --git a/OliviaIconPro.ico b/OliviaIconPro.ico new file mode 100644 index 0000000..ecd20f0 Binary files /dev/null and b/OliviaIconPro.ico differ diff --git a/OptionsMenuItem.cs b/OptionsMenuItem.cs new file mode 100644 index 0000000..b53ec48 --- /dev/null +++ b/OptionsMenuItem.cs @@ -0,0 +1,69 @@ +/* + + Copyright 2019 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.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace OliviaAddInPro +{ + public class OptionsMenuItem : INotifyPropertyChanged + { + public OptionsMenuItem(BitmapImage imageUri, string optionString, PanelViewModelBase subPanelViewModel) + { + _imageSource = imageUri; + _optionString = optionString; + _subPanelViewModelBase = subPanelViewModel; + } + + public event PropertyChangedEventHandler PropertyChanged; + private void OnNotifyPropertyChanged(string propName) + { + if (PropertyChanged != null) + PropertyChanged(this, new PropertyChangedEventArgs(propName)); + } + private PanelViewModelBase _subPanelViewModelBase; + + public PanelViewModelBase SubPanelViewModel + { + get { return _subPanelViewModelBase; } + set { + _subPanelViewModelBase = value; + OnNotifyPropertyChanged("SubPanelViewModel"); + } + } + private ImageSource _imageSource; + public ImageSource ImageSource + { + get { return _imageSource; } + set { _imageSource = value; } + } + + private string _optionString; + public string OptionString + { + get { return _optionString; } + set { _optionString = value; } + } + } +} diff --git a/OptionsMenuItem_.cs b/OptionsMenuItem_.cs new file mode 100644 index 0000000..95384dc --- /dev/null +++ b/OptionsMenuItem_.cs @@ -0,0 +1,69 @@ +/* + + Copyright 2019 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.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace OliviaAddInPro +{ + public class OptionsMenuItem : INotifyPropertyChanged + { + public OptionsMenuItem(BitmapImage imageUri, string optionString, PaneLimpiezaSubBase subPanelViewModel) + { + _imageSource = imageUri; + _optionString = optionString; + _subPanelViewModelBase = subPanelViewModel; + } + + public event PropertyChangedEventHandler PropertyChanged; + private void OnNotifyPropertyChanged(string propName) + { + if (PropertyChanged != null) + PropertyChanged(this, new PropertyChangedEventArgs(propName)); + } + private PaneLimpiezaSubBase _subPanelViewModelBase; + + public PaneLimpiezaSubBase SubPanelViewModel + { + get { return _subPanelViewModelBase; } + set { + _subPanelViewModelBase = value; + OnNotifyPropertyChanged("SubPanelViewModel"); + } + } + private ImageSource _imageSource; + public ImageSource ImageSource + { + get { return _imageSource; } + set { _imageSource = value; } + } + + private string _optionString; + public string OptionString + { + get { return _optionString; } + set { _optionString = value; } + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6e7f78b --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("OliviaAddInPro")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Acme")] +[assembly: AssemblyProduct("OliviaAddInPro")] +[assembly: AssemblyCopyright("Copyright © Acme 2021")] +[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("10742570-cf59-42f2-bea2-2a38002a06ee")] + +// 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/Resource1.Designer.cs b/Resource1.Designer.cs new file mode 100644 index 0000000..6e571cc --- /dev/null +++ b/Resource1.Designer.cs @@ -0,0 +1,108 @@ +//------------------------------------------------------------------------------ +// +// Este código fue generado por una herramienta. +// Versión de runtime:4.0.30319.42000 +// +// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si +// se vuelve a generar el código. +// +//------------------------------------------------------------------------------ + +namespace OliviaAddInPro { + using System; + + + /// + /// Clase de recurso fuertemente tipado, para buscar cadenas traducidas, etc. + /// + // StronglyTypedResourceBuilder generó automáticamente esta clase + // a través de una herramienta como ResGen o Visual Studio. + // Para agregar o quitar un miembro, edite el archivo .ResX y, a continuación, vuelva a ejecutar ResGen + // con la opción /str o recompile su proyecto de VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resource1 { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resource1() { + } + + /// + /// Devuelve la instancia de ResourceManager almacenada en caché utilizada por esta clase. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OliviaAddInPro.Resource1", typeof(Resource1).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Reemplaza la propiedad CurrentUICulture del subproceso actual para todas las + /// búsquedas de recursos mediante esta clase de recurso fuertemente tipado. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Busca una cadena traducida similar a Ya existe una ejecución en marcha. + /// + internal static string String_existe_ejec { + get { + return ResourceManager.GetString("String_existe_ejec", resourceCulture); + } + } + + /// + /// Busca una cadena traducida similar a OLIVIA | Limpieza. + /// + internal static string String_header_limpieza { + get { + return ResourceManager.GetString("String_header_limpieza", resourceCulture); + } + } + + /// + /// Busca una cadena traducida similar a Seleccionar capa .... + /// + internal static string String_selec_capa { + get { + return ResourceManager.GetString("String_selec_capa", resourceCulture); + } + } + + /// + /// Busca una cadena traducida similar a Tratamiento. + /// + internal static string String_tto { + get { + return ResourceManager.GetString("String_tto", resourceCulture); + } + } + + /// + /// Busca una cadena traducida similar a Zonificación. + /// + internal static string String_zonif { + get { + return ResourceManager.GetString("String_zonif", resourceCulture); + } + } + } +} diff --git a/Resource1.resx b/Resource1.resx new file mode 100644 index 0000000..2677390 --- /dev/null +++ b/Resource1.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ya existe una ejecución en marcha + + + OLIVIA | Limpieza + + + Seleccionar capa ... + + + Tratamiento + + + Zonificación + + \ No newline at end of file diff --git a/Resources/Cat32.png b/Resources/Cat32.png new file mode 100644 index 0000000..46ab488 Binary files /dev/null and b/Resources/Cat32.png differ diff --git a/Resources/Dino32.png b/Resources/Dino32.png new file mode 100644 index 0000000..4435f1a Binary files /dev/null and b/Resources/Dino32.png differ diff --git a/Resources/Dog32.png b/Resources/Dog32.png new file mode 100644 index 0000000..461fe91 Binary files /dev/null and b/Resources/Dog32.png differ diff --git a/Resources/Panda32.png b/Resources/Panda32.png new file mode 100644 index 0000000..d2f9cee Binary files /dev/null and b/Resources/Panda32.png differ diff --git a/Resources/Pizza32.png b/Resources/Pizza32.png new file mode 100644 index 0000000..eeae8e3 Binary files /dev/null and b/Resources/Pizza32.png differ diff --git a/Resources/Rabbit32.png b/Resources/Rabbit32.png new file mode 100644 index 0000000..6101b76 Binary files /dev/null and b/Resources/Rabbit32.png differ diff --git a/View/DockpaneLimpieza.xaml b/View/DockpaneLimpieza.xaml new file mode 100644 index 0000000..1694b87 --- /dev/null +++ b/View/DockpaneLimpieza.xaml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/View/DockpaneLimpieza.xaml.cs b/View/DockpaneLimpieza.xaml.cs new file mode 100644 index 0000000..1b286b7 --- /dev/null +++ b/View/DockpaneLimpieza.xaml.cs @@ -0,0 +1,29 @@ +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 OliviaAddInPro +{ + /// + /// Interaction logic for DockpaneLimpiezaView.xaml + /// + public partial class DockpaneLimpiezaView : UserControl + { + public DockpaneLimpiezaView() + { + InitializeComponent(); + } + } +} diff --git a/View/DockpaneRecogida.xaml b/View/DockpaneRecogida.xaml new file mode 100644 index 0000000..bc39be8 --- /dev/null +++ b/View/DockpaneRecogida.xaml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/View/DockpaneRecogida.xaml.cs b/View/DockpaneRecogida.xaml.cs new file mode 100644 index 0000000..e0651c6 --- /dev/null +++ b/View/DockpaneRecogida.xaml.cs @@ -0,0 +1,29 @@ +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 OliviaAddInPro +{ + /// + /// Interaction logic for DockpaneRecogidaView.xaml + /// + public partial class DockpaneRecogidaView : UserControl + { + public DockpaneRecogidaView() + { + InitializeComponent(); + } + } +} diff --git a/View/PaneLimpieza.xaml b/View/PaneLimpieza.xaml new file mode 100644 index 0000000..046ea72 --- /dev/null +++ b/View/PaneLimpieza.xaml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/View/PaneLimpieza.xaml.cs b/View/PaneLimpieza.xaml.cs new file mode 100644 index 0000000..4871e2e --- /dev/null +++ b/View/PaneLimpieza.xaml.cs @@ -0,0 +1,29 @@ +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 OliviaAddInPro +{ + /// + /// Interaction logic for PaneLimpiezaView.xaml + /// + public partial class PaneLimpiezaView : UserControl + { + public PaneLimpiezaView() + { + InitializeComponent(); + } + } +} diff --git a/View/PaneLimpiezaSub1.xaml b/View/PaneLimpiezaSub1.xaml new file mode 100644 index 0000000..d5ac710 --- /dev/null +++ b/View/PaneLimpiezaSub1.xaml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/View/PaneLimpiezaSub1.xaml.cs b/View/PaneLimpiezaSub1.xaml.cs new file mode 100644 index 0000000..132b45b --- /dev/null +++ b/View/PaneLimpiezaSub1.xaml.cs @@ -0,0 +1,29 @@ +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 OliviaAddInPro +{ + /// + /// Interaction logic for PaneLimpiezaSub1View.xaml + /// + public partial class PaneLimpiezaSub1View : UserControl + { + public PaneLimpiezaSub1View() + { + InitializeComponent(); + } + } +} diff --git a/View/PaneLimpiezaSub2.xaml b/View/PaneLimpiezaSub2.xaml new file mode 100644 index 0000000..9109ae1 --- /dev/null +++ b/View/PaneLimpiezaSub2.xaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + diff --git a/View/PaneLimpiezaSub2.xaml.cs b/View/PaneLimpiezaSub2.xaml.cs new file mode 100644 index 0000000..de9932a --- /dev/null +++ b/View/PaneLimpiezaSub2.xaml.cs @@ -0,0 +1,29 @@ +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 OliviaAddInPro +{ + /// + /// Interaction logic for PaneLimpiezaSub2View.xaml + /// + public partial class PaneLimpiezaSub2View : UserControl + { + public PaneLimpiezaSub2View() + { + InitializeComponent(); + } + } +} diff --git a/View/openfolder.png b/View/openfolder.png new file mode 100644 index 0000000..69685ba Binary files /dev/null and b/View/openfolder.png differ diff --git a/ViewModel/DockpaneLimpiezaViewModel.cs b/ViewModel/DockpaneLimpiezaViewModel.cs new file mode 100644 index 0000000..19db573 --- /dev/null +++ b/ViewModel/DockpaneLimpiezaViewModel.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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.Controls; +using ArcGIS.Desktop.Framework.Contracts; +using ArcGIS.Desktop.Framework.Dialogs; +using ArcGIS.Desktop.Framework.Threading.Tasks; +using ArcGIS.Desktop.Mapping; + + +namespace OliviaAddInPro +{ + internal class DockpaneLimpiezaViewModel : DockPane + { + private bool firstTimeShow = true; + private const string _dockPaneID = "OliviaAddInPro_DockpaneLimpieza"; + private PaneLimpiezaViewModel _pane; + protected DockpaneLimpiezaViewModel() + { + _pane = new PaneLimpiezaViewModel(); + CurrentPage = _pane; + } + + /// + /// Show the DockPane. + /// + internal static void Show() + { + DockPane pane = FrameworkApplication.DockPaneManager.Find(_dockPaneID); + if (pane == null) + return; + + pane.Activate(); + } + + //The parameter passed to this method will be true if the Dockpane is being opened and it is false when you close the dockpane + protected override void OnShow(bool isVisible) + { + if (isVisible == false && !firstTimeShow) + { + //avisa de cerrar la ventana + OliviaGlob.tipEjec = TiposEjecucion.Ninguno; + } + if (firstTimeShow) + firstTimeShow = false; + } + + /// + /// Text shown near the top of the DockPane. + /// + private string _heading = Resource1.String_header_limpieza; + public string Heading + { + get { return _heading; } + set + { + SetProperty(ref _heading, value, () => Heading); + } + } + + private PanelViewModelBase _currentPage; + public PanelViewModelBase CurrentPage + { + get { return _currentPage; } + set + { + SetProperty(ref _currentPage, value, () => CurrentPage); + } + } + } + +} diff --git a/ViewModel/DockpaneRecogidaViewModel.cs b/ViewModel/DockpaneRecogidaViewModel.cs new file mode 100644 index 0000000..02234e4 --- /dev/null +++ b/ViewModel/DockpaneRecogidaViewModel.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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 OliviaAddInPro +{ + internal class DockpaneRecogidaViewModel : DockPane + { + private bool firstTimeShow = true; + private const string _dockPaneID = "OliviaAddInPro_DockpaneRecogida"; + + protected DockpaneRecogidaViewModel() { } + + /// + /// Show the DockPane. + /// + internal static void Show() + { + DockPane pane = FrameworkApplication.DockPaneManager.Find(_dockPaneID); + if (pane == null) + return; + + pane.Activate(); + } + + //The parameter passed to this method will be true if the Dockpane is being opened and it is false when you close the dockpane + //also false the first time + protected override void OnShow(bool isVisible) + { + if (isVisible == false && !firstTimeShow) + { + //avisa de cerrar la ventana + OliviaGlob.tipEjec = TiposEjecucion.Ninguno; + } + if (firstTimeShow) + firstTimeShow = false; + } + + /// + /// Text shown near the top of the DockPane. + /// + private string _heading = "My DockPane"; + public string Heading + { + get { return _heading; } + set + { + SetProperty(ref _heading, value, () => Heading); + } + } + } +} diff --git a/ViewModel/PaneLimpiezaSub1ViewModel.cs b/ViewModel/PaneLimpiezaSub1ViewModel.cs new file mode 100644 index 0000000..cf790d7 --- /dev/null +++ b/ViewModel/PaneLimpiezaSub1ViewModel.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +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 OliviaAddInPro +{ + internal class PaneLimpiezaSub1ViewModel : PanelViewModelBase + { + public PaneLimpiezaSub1ViewModel () + { + lblCapaLimp = Resource1.String_selec_capa; + } + + #region Properties + + public override string DisplayName + { + get { return Resource1.String_tto; } + } + + private string lblCapaLimp; + public string LblCapaLimp + { + get { return lblCapaLimp; } + set { LblCapaLimp=lblCapaLimp; } + } + #endregion Properties + + + } +} diff --git a/ViewModel/PaneLimpiezaSub2ViewModel.cs b/ViewModel/PaneLimpiezaSub2ViewModel.cs new file mode 100644 index 0000000..f9bf310 --- /dev/null +++ b/ViewModel/PaneLimpiezaSub2ViewModel.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +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 OliviaAddInPro +{ + internal class PaneLimpiezaSub2ViewModel : PanelViewModelBase + { + public override string DisplayName + { + get { return "Opción 2 se muestra"; } + } + } +} diff --git a/ViewModel/PaneLimpiezaViewModel.cs b/ViewModel/PaneLimpiezaViewModel.cs new file mode 100644 index 0000000..4f12973 --- /dev/null +++ b/ViewModel/PaneLimpiezaViewModel.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; + +namespace OliviaAddInPro +{ + class PaneLimpiezaViewModel : PanelViewModelBase + { + private PaneLimpiezaSub1ViewModel _subPanel1ViewModel; + private PaneLimpiezaSub2ViewModel _subPanel2ViewModel; + //private SubPanel3ViewModel _subPanel3ViewModel; + public PaneLimpiezaViewModel() + { + _subPanel1ViewModel = new PaneLimpiezaSub1ViewModel(); + _subPanel2ViewModel = new PaneLimpiezaSub2ViewModel(); + //_subPanel3ViewModel = new SubPanel3ViewModel(); + + OptionsMenu = new ObservableCollection + { + new OptionsMenuItem(new BitmapImage(new Uri("pack://application:,,,/OliviaAddInPro;component/Resources/Dog32.png")), Resource1.String_tto, _subPanel1ViewModel), + new OptionsMenuItem(new BitmapImage(new Uri("pack://application:,,,/OliviaAddInPro;component/Resources/Dino32.png")), Resource1.String_zonif, _subPanel2ViewModel), + //new OptionsMenuItem(new BitmapImage(new Uri("pack://application:,,,/CustomCatalog;component/Resources/panda-32.png")), "Option 3", _subPanel3ViewModel) + }; + SelectedOption = OptionsMenu[0]; + } + public override string DisplayName + { + get { return Resource1.String_header_limpieza; } + } + private ObservableCollection _optionsMenu = new ObservableCollection(); + public ObservableCollection OptionsMenu + { + get { return _optionsMenu; } + set { SetProperty(ref _optionsMenu, value, () => OptionsMenu); } + } + + private PanelViewModelBase _currentSubPanelPage; + public PanelViewModelBase CurrentSubPanelPage + { + get { return _currentSubPanelPage; } + set { SetProperty(ref _currentSubPanelPage, value, () => CurrentSubPanelPage); } + } + + private OptionsMenuItem _selectionOption; + public OptionsMenuItem SelectedOption + { + get { return _selectionOption; } + set { + SetProperty(ref _selectionOption, value, () => SelectedOption); + CurrentSubPanelPage = value.SubPanelViewModel; + } + } + } +} diff --git a/ViewModel/PanelViewModelBase.cs b/ViewModel/PanelViewModelBase.cs new file mode 100644 index 0000000..c329665 --- /dev/null +++ b/ViewModel/PanelViewModelBase.cs @@ -0,0 +1,20 @@ +using ArcGIS.Desktop.Framework.Contracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OliviaAddInPro +{ + public abstract class PanelViewModelBase : PropertyChangedBase + { + + #region Properties + + public abstract string DisplayName { get; } + + + #endregion Properties + } +}