diff --git a/Helper/HelperGdb.cs b/Helper/HelperGdb.cs index 0eb5818..91b82d8 100644 --- a/Helper/HelperGdb.cs +++ b/Helper/HelperGdb.cs @@ -21,6 +21,7 @@ using OliviaAddInPro.Model; using System.IO; using System.Diagnostics; using OliviaAddInPro.View; +using OliviaAddInPro.Model.contract; namespace OliviaAddInPro.Helper { @@ -816,7 +817,7 @@ namespace OliviaAddInPro.Helper return res; } - public static bool ExportShp2(string pathLayerIn, SpatialQueryFilter filter, string nameShp, string outpath, CancelableProgressorSource cps, int incmax=100) + public static bool ExportShp2(string pathLayerIn, SpatialQueryFilter filter, string nameShp, string outpath, IprocessManager cps, int incmax=100) { if (!System.IO.Directory.Exists(outpath)) System.IO.Directory.CreateDirectory(outpath); @@ -858,9 +859,9 @@ namespace OliviaAddInPro.Helper ///Exporta string[] args = { pathLayerIn, outpath, nameShp, whereClause }; // execute the tool - uint valini = cps.Value; + double valini = cps.GetProgress(); ; IGPResult gpResult = Geoprocessing.ExecuteToolAsync("FeatureClassToFeatureClass_conversion", args, - null, cps.CancellationTokenSource.Token, + null, null, (event_name, o) => // implement delegate and handle events { @@ -885,7 +886,7 @@ namespace OliviaAddInPro.Helper var av = (int)o; if (av > 0) { - cps.Value += (uint)((float)av/100*Math.Min(incmax, cps.Max-valini)); + cps.SetProgress( cps.GetProgress()+ ((double)av/100*Math.Min(incmax, 100-valini))); } // if ((int)o < 0) //System.Windows.MessageBox.Show(msg2); @@ -897,7 +898,7 @@ namespace OliviaAddInPro.Helper if (gpResult.IsCanceled) { - cps.CancellationTokenSource.Cancel(); + cps.Setcancelled(); return false; } if(gpResult.IsFailed) diff --git a/Helper/HelperGlobal.cs b/Helper/HelperGlobal.cs index 910bfa5..b27f0d0 100644 --- a/Helper/HelperGlobal.cs +++ b/Helper/HelperGlobal.cs @@ -9,6 +9,7 @@ using ArcGIS.Desktop.Framework.Dialogs; using System.Windows; using System.IO; using ArcGIS.Desktop.Framework.Threading.Tasks; +using OliviaAddInPro.Model.contract; namespace OliviaAddInPro.Helper { @@ -85,22 +86,23 @@ namespace OliviaAddInPro.Helper public class MyCancelableProgressorSource { - public CancelableProgressorSource _ProgrSrc; - public MyCancelableProgressorSource(ProgressDialog prodlg) + public IprocessManager _ProgrSrc; + public MyCancelableProgressorSource(IprocessManager prodlg) { - _ProgrSrc = new CancelableProgressorSource(prodlg); - _ProgrSrc.Max = 100; + _ProgrSrc = prodlg; } public void Init(string stat) { - _ProgrSrc.Value = 0; - _ProgrSrc.Status = stat; + _ProgrSrc.SetProgress(0); + _ProgrSrc.SetProceso(stat); } public void IncMessage(uint inc, string mes) { - if ((_ProgrSrc.Value + inc) < _ProgrSrc.Max) - _ProgrSrc.Value += inc; - _ProgrSrc.Message = mes; + var prog = _ProgrSrc.GetProgress() + inc; + if (prog > 100) + prog = 100; + _ProgrSrc.SetProgress(prog); + _ProgrSrc.SetEstado(mes); } } diff --git a/Model/Limpieza.cs b/Model/Limpieza.cs index 62a0d36..4499b91 100644 --- a/Model/Limpieza.cs +++ b/Model/Limpieza.cs @@ -53,7 +53,7 @@ namespace OliviaAddInPro.Model Serv = new LimpiezaServ(this); LanzaSrv = new LanzaLimpSrv(); ProceSrv = new ProcesoEjecServ(); - ProgrSrc = new MyCancelableProgressorSource(OliviaGlob.progrDialog); + ProgrSrc = new MyCancelableProgressorSource(OliviaGlob.progrDialog.GetViewModel()); } public TareaRes Ejecuta(ModosEjec modo) diff --git a/Model/OliviaGlob.cs b/Model/OliviaGlob.cs index 66478d6..b5d88d7 100644 --- a/Model/OliviaGlob.cs +++ b/Model/OliviaGlob.cs @@ -35,6 +35,7 @@ namespace OliviaAddInPro.Model //ya al menos una primera vez //se pone este estado cuando ha terminado ya la primera vez } + static class OliviaGlob { /** @@ -102,7 +103,7 @@ namespace OliviaAddInPro.Model } public static EjecServ Serv { get; } = new EjecServ(); public static SpatialReference SpatRef { get; set; } = null; - public static ProgressDialog progrDialog { get; set; } = null; + public static MarchandoUnaDe progrDialog { get; set; } = null; #endregion Properties public static void Inicia() @@ -111,7 +112,7 @@ namespace OliviaAddInPro.Model IniDefault(); LimpiezaDef.iniciaLimpDef(); RecogidaDef.iniciaRecoDef(); - progrDialog = new ProgressDialog("Procesando", Resource1.String_cancel_progreso, 100, false); + progrDialog = new MarchandoUnaDe(); limp = new Limpieza(); reco = new Recogida(); SpatRef = ArcGIS.Core.Geometry.SpatialReferenceBuilder.CreateSpatialReference(GeneralDef.SpatRefDef); diff --git a/Model/Recogida.cs b/Model/Recogida.cs index 61d7a1c..2761042 100644 --- a/Model/Recogida.cs +++ b/Model/Recogida.cs @@ -72,7 +72,7 @@ namespace OliviaAddInPro.Model public Recogida() { Serv = new RecogidaServ(this); - ProgrSrc = new MyCancelableProgressorSource(OliviaGlob.progrDialog); + ProgrSrc = new MyCancelableProgressorSource(OliviaGlob.progrDialog.GetViewModel()); } diff --git a/Model/contract/IprocessManager.cs b/Model/contract/IprocessManager.cs new file mode 100644 index 0000000..6d7b9f9 --- /dev/null +++ b/Model/contract/IprocessManager.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OliviaAddInPro.Model.contract +{ + public interface IprocessManager + { + void SetProceso(string proceso); + void SetEstado(string estado);//estado del proceso + void SetProgress(double progresPorcent); + double GetProgress(); + bool Getcancelled(); + void Setcancelled(); + } +} diff --git a/OliviaAddInPro.csproj b/OliviaAddInPro.csproj index 36f8ea4..75e528b 100644 --- a/OliviaAddInPro.csproj +++ b/OliviaAddInPro.csproj @@ -140,6 +140,7 @@ + diff --git a/Services/EjecServ.cs b/Services/EjecServ.cs index ee34d11..82431fa 100644 --- a/Services/EjecServ.cs +++ b/Services/EjecServ.cs @@ -93,7 +93,7 @@ namespace OliviaAddInPro.Services ErrStr = "Error al exportar los ámbitos: " + HelperGdb.OutStr; return false; } - if (com.ProgrSrc._ProgrSrc.CancellationTokenSource.IsCancellationRequested) + if (com.ProgrSrc._ProgrSrc.Getcancelled()) { ErrStr = Resource1.String_cancel_progreso; return false; @@ -211,7 +211,7 @@ namespace OliviaAddInPro.Services } //guarda los nombres del shape OliviaGlob.Paths.PathNW = OliviaGlob.Paths.DirData + com.NombreShpExportNw; - if (com.ProgrSrc._ProgrSrc.CancellationTokenSource.IsCancellationRequested) + if (com.ProgrSrc._ProgrSrc.Getcancelled()) { ErrStr = Resource1.String_cancel_progreso; return false; diff --git a/Services/ProcesoEjecServ.cs b/Services/ProcesoEjecServ.cs index aec1ceb..a582373 100644 --- a/Services/ProcesoEjecServ.cs +++ b/Services/ProcesoEjecServ.cs @@ -1,6 +1,7 @@ using ArcGIS.Desktop.Framework.Threading.Tasks; using OliviaAddIn; using OliviaAddInPro.Model; +using OliviaAddInPro.Model.contract; using System; using System.Collections.Generic; using System.Linq; @@ -28,7 +29,7 @@ namespace OliviaAddInPro.Services string tarea = ""; public string err_str = ""; double x, y; - CancelableProgressorSource cps; + IprocessManager cps; enum TiposActu { ActuMal, @@ -50,7 +51,7 @@ namespace OliviaAddInPro.Services { } - public Respuesta start(string cfg, CancelableProgressorSource cps) + public Respuesta start(string cfg, IprocessManager cps) { this.cps = cps; soc = new Cstr_socket(); @@ -99,7 +100,7 @@ namespace OliviaAddInPro.Services first_send_cfg = false; } - if (cps.Progressor.CancellationToken.IsCancellationRequested) //mira a ver si ha cancelado el usuario + if (cps.Getcancelled()) //mira a ver si ha cancelado el usuario { //se ha cancelado, lo envía al OliviaTask envia_cancel(); @@ -441,7 +442,7 @@ namespace OliviaAddInPro.Services */ private void pon_texto(String txt) { - cps.Message = txt; + cps.SetEstado(txt); } /* * Para poder actualizar la barra de progreso hay que llamar a invoke @@ -463,14 +464,14 @@ namespace OliviaAddInPro.Services if ((actu == TiposActu.ActuMal) || (actu == TiposActu.ActuFinNOk)) - cps.Status = "Proceso Finalizado con errores."; + cps.SetProceso("Proceso Finalizado con errores."); else if(actu == TiposActu.ActuFinOk) - cps.Status = "Proceso Finalizado."; + cps.SetProceso("Proceso Finalizado."); if (actu > TiposActu.ActuFinOk) - cps.Status = "Calculando..."; + cps.SetEstado("Calculando..."); if ((actu == TiposActu.ActuPermu) && !cancela) - cps.Status = "Calculando Permutaciones..."; ; + cps.SetEstado("Calculando Permutaciones..."); } /* * Para poder actualizar la barra de progreso hay que llamar a invoke @@ -479,7 +480,7 @@ namespace OliviaAddInPro.Services */ private void pon_progr(int pro) { - cps.Value = (uint)pro; + cps.SetProgress( pro); } } } \ No newline at end of file diff --git a/ViewModel/Comun/MarchandoUnaDeViewModel.cs b/ViewModel/Comun/MarchandoUnaDeViewModel.cs index 365293e..088624c 100644 --- a/ViewModel/Comun/MarchandoUnaDeViewModel.cs +++ b/ViewModel/Comun/MarchandoUnaDeViewModel.cs @@ -1,4 +1,5 @@ using ArcGIS.Desktop.Framework.Contracts; +using OliviaAddInPro.Model.contract; using System; using System.Collections.Generic; using System.Linq; @@ -7,7 +8,7 @@ using System.Threading.Tasks; namespace OliviaAddInPro { - public class MarchandoUnaDeViewModel : PropertyChangedBase + public class MarchandoUnaDeViewModel : PropertyChangedBase, IprocessManager { private string textProceso; @@ -30,6 +31,35 @@ namespace OliviaAddInPro get { return progreso; } set { base.SetProperty(ref progreso, value, () => Progreso); } } - + + void IprocessManager.SetProceso(string proceso) + { + TextProceso = proceso; + } + + void IprocessManager.SetEstado(string estado) + { + TextEstado = estado; + } + + void IprocessManager.SetProgress(double progresPorcent) + { + Progreso = progresPorcent; + } + + double IprocessManager.GetProgress() + { + return Progreso; + } + + bool IprocessManager.Getcancelled() + { + return false; + } + + void IprocessManager.Setcancelled() + { + + } } } diff --git a/ViewModel/Limpieza/PaneLimpiezaViewModel.cs b/ViewModel/Limpieza/PaneLimpiezaViewModel.cs index cc92991..1070f90 100644 --- a/ViewModel/Limpieza/PaneLimpiezaViewModel.cs +++ b/ViewModel/Limpieza/PaneLimpiezaViewModel.cs @@ -177,32 +177,24 @@ namespace OliviaAddInPro public void Ejecuta(OliviaAddInPro.Services.ModosEjec modo) { string err = ""; - marchando = new MarchandoUnaDe(); - marchando.Show(); - var vm= marchando.GetViewModel(); //marchando - vm.Progreso = 50.0; - vm.TextProceso = "Proceso"; - vm.TextEstado = "Estado"; - using (var prog = new ProgressDialog("Procesando", Resource1.String_cancel_progreso, 100, false)) + + OliviaGlob.Limp.ProgrSrc = new MyCancelableProgressorSource(OliviaGlob.progrDialog.GetViewModel()); + OliviaGlob.progrDialog.Show(); + + //oculta la ventana + OliviaGlob.ShowHidePane(false); + + if (!Lee(out err)) { - OliviaGlob.progrDialog = prog; - OliviaGlob.Limp.ProgrSrc = new MyCancelableProgressorSource(OliviaGlob.progrDialog); - OliviaGlob.progrDialog.Show(); - - //oculta la ventana - OliviaGlob.ShowHidePane(false); - - if (!Lee(out err)) - { - HelperGlobal.ponMsg(err); - return; - } - - Action ac = OliviaGlob.finEjecuta; - OliviaGlob.Limp.EjecutaAsync2(modo, ac); + HelperGlobal.ponMsg(err); + return; } + + Action ac = OliviaGlob.finEjecuta; + OliviaGlob.Limp.EjecutaAsync(modo, ac); + } } }