2 using System.Collections.Generic;
7 using System.Runtime.InteropServices;
8 using System.ComponentModel;
44 using System.Web.Script.Serialization;
46 namespace sage.ew.formul
392 #endregion ENUMERATIONS 398 System.Drawing.ToolboxBitmap(typeof(
System.Windows.Forms.Form)),
405 private bool _lConnectFallido =
false;
410 private bool _lAutomatico =
false;
414 private Timer _oTimerProperties;
416 private string _cPantalla =
"";
424 DefaultValue(typeof(
string),
""),
425 Description(
"Nombre del formulario equivalente de Eurowin."),
428 public virtual string _Pantalla
430 get {
return _cPantalla; }
433 bool llConstructor = (_cPantalla != value);
439 if (llConstructor && !
string.IsNullOrWhiteSpace(_cPantalla) && !DesignMode)
440 Constructor_Privado();
447 public virtual string _IDScreen {
get;}
454 public Dictionary<string, object> _ValoresAccesoDirecto =
new Dictionary<string, object>();
465 Description(
"Estilos revisados."),
467 public virtual bool _EstiloRevisado
469 get {
return estiloRevisado; }
470 set { estiloRevisado = value; }
472 private bool estiloRevisado =
false;
477 public string _Sufijo
479 get {
return _cSufijo; }
481 private string _cSufijo =
string.Empty;
486 public bool _SaveReuseFormSettings {
get;
set; } =
true;
491 protected bool _ReusingFormSettings {
get;
set; } =
false;
496 public Boolean _MostrarAcronimo
500 return _bMostrarAcronimo;
504 _bMostrarAcronimo = value;
505 Revisar_Titulo_Formulario();
508 private Boolean _bMostrarAcronimo =
true;
513 public Boolean _MostrarSufijo
517 return _bMostrarSufijo;
521 _bMostrarSufijo = value;
522 Revisar_Titulo_Formulario();
525 private Boolean _bMostrarSufijo =
true;
527 private String _Acronimo
531 String lcAcronimo = String.Empty;
533 if (EW_GLOBAL._Empresa is
Empresa && !String.IsNullOrEmpty(EW_GLOBAL._Empresa._Acronimo))
535 lcAcronimo = String.Format(
"{0} |", EW_GLOBAL._Empresa._Acronimo);
547 if (_oInfoToolTip == null)
550 _oInfoToolTip.
_Font = Font;
551 _oInfoToolTip.AutoPopDelay = 5000;
552 _oInfoToolTip.InitialDelay = 0;
553 _oInfoToolTip.ReshowDelay = 250;
554 _oInfoToolTip.ShowAlways =
true;
555 _oInfoToolTip.Active =
false;
558 return _oInfoToolTip;
569 String lcTitulo = Text;
571 if ((_MostrarAcronimo && tlAcronimo) || (!_MostrarAcronimo && !tlAcronimo))
577 lcTitulo = String.Format(
"{0} {1}", _Acronimo, Text);
579 else if (_MostrarAcronimo)
581 lcTitulo = _EliminarAcronimo(Text);
595 Description(
"Obtiene o establece si el formulario debe controlar los permisos de usuario."),
598 public virtual bool _Gestionar_permisos
600 get {
return _lGestionPermisos; }
601 set { _lGestionPermisos = value; }
603 private bool _lGestionPermisos =
true;
613 Description(
"Obtiene o establece si se tiene acceso al formulario en modo Listas previas"),
616 public bool AccesoListasPrevias
618 get {
return _lAccesoListasPrevias; }
619 set { _lAccesoListasPrevias = value; }
621 private bool _lAccesoListasPrevias =
false;
624 private ContextMenuStrip contextMenuStripPantalla;
625 private IContainer components;
626 private ToolStripMenuItem nombreFormularioToolStripMenuItem;
627 private ToolStripMenuItem gestiónDeFavoritosToolStripMenuItem;
628 private ToolStripMenuItem gestiónDeAccesosToolStripMenuItem;
629 private ToolStripMenuItem crearAccesoDirectoToolStripMenuItem;
630 private ToolStripMenuItem crearApunteCalendarioItem;
631 private ToolStripMenuItem listadosPersonalizablesEditarItem;
632 private ToolStripMenuItem listadosPersonalizablesDuplicarItem;
633 private ToolStripMenuItem ayudaPantallaToolStripMenuItem;
634 private ToolStripMenuItem crearTareaProgramadaItem;
635 private ToolStripMenuItem configuracionesUsuarioItem;
636 private ToolStripMenuItem toolConfiguracionesToolStripMenuItem;
637 private ToolStripSeparator configuracionesUsuarioItemSeparator;
638 private ToolStripMenuItem ShowPropertiesToolStripMenuItem;
645 private oResultadoAyuda _oResultadoAyuda =
new oResultadoAyuda();
647 private List<Control> lstOpcionesMenuAddon =
new List<Control>();
652 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
664 Description(
"Nivel de acceso del usuario en el formulario actual."),
669 get {
return _nNivelAcceso; }
670 set { _nNivelAcceso = value; }
683 [DllImport(
"user32.dll")]
684 public static extern int SendMessage(IntPtr hWnd, Int32 wMsg,
bool wParam, Int32 lParam);
690 private const int WM_SETREDRAW = 11;
692 [DllImport(
"user32.dll")]
693 internal static extern bool EnableWindow(IntPtr hwnd, Boolean bEnable);
695 [DllImport(
"user32.dll")]
696 static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter,
int X,
int Y,
int cx,
int cy, uint uFlags);
703 get {
return _eTipoFormulario; }
704 set { _eTipoFormulario = value; }
713 get {
return _oConfigUserForm; }
714 set { _oConfigUserForm = value; }
723 get {
return _oConfigUserFormPredet; }
724 set { _oConfigUserFormPredet = value; }
731 private Dictionary<string, IConfigUserOption> dicAllConfigUserOptions = null;
736 private Dictionary<string, Control> dicNoConfigUserOptions = null;
741 private List<string> listConfigUserOptionsDisabled = null;
743 private Color _eBackColor = SystemColors.Control, _eDefaultBackColor = SystemColors.Control;
749 Category(
"Varios_Apariencia"),
750 DefaultValue(typeof(Color),
"Control"),
751 Description(
"Obtiene o establece el color de fondo del control."),
753 DisplayName(
"Color del fondo")
755 public Color _BackColor
757 get {
return _eBackColor; }
769 protected bool _ConfigUserOptionsAllowed =
false;
774 protected bool _ConfigUserOptionsEditing =
false;
779 protected bool _ConfigUserOptionsLoading =
false;
788 protected bool _CargandoEstilo =
false;
793 protected bool _CambiarFuente {
get;
set; } =
true;
808 protected List<string> _AddonsExtVisualCreacionAplazada =
new List<string>();
810 private bool _bAplicarEstilos =
true;
815 Category(
"Varios_Apariencia"),
817 Description(
"Aplicar estilos visuales al control."),
818 DisplayName(
"Aplicar estilos")
820 public bool _AplicarEstilos
822 get {
return _bAplicarEstilos; }
825 _bAplicarEstilos = value;
836 _BackColor = _eDefaultBackColor;
852 Control loControl = null;
854 Control[] loControls = this.Controls.Find(tcControlName,
true);
856 if (loControls.Length > 0)
858 loControl = loControls[0];
864 private ToolTip _oToolTip;
871 DefaultValue(typeof(
string),
""),
872 Description(
"Permite asignar tooltips a los controles del formulario.\n Es necesario agregar una clase ToolTip al formulario y asignarla a esta propiedad."),
874 DisplayName(
"ToolTip")
876 public ToolTip _ToolTip
880 if (_oToolTip == null)
881 _oToolTip =
new ToolTip();
884 set { _oToolTip = value; }
888 private Dictionary<string, object> ldicBotons =
new Dictionary<string, object>();
891 private bool _oReadOnly =
false;
895 [DefaultValue(
false)]
896 public virtual bool _ReadOnly
898 get {
return _oReadOnly; }
902 setReadOnly(
this, _oReadOnly);
906 private bool _bMenuOpcionesBoton =
true;
915 Description(
"Muestra el botón opciones de pantalla en la barra de tÃtulo del formulario."),
917 DisplayName(
"MenuOpcionesBoton")
919 public bool _MenuOpcionesBoton
921 get {
return _bMenuOpcionesBoton; }
924 _bMenuOpcionesBoton = value;
933 private bool _bMostrarAccesoFavoritos =
true;
941 Description(
"Muestra el acceso a favoritos en el menú de opciones de la barra"),
943 DisplayName(
"MostrarAccesoFavoritos")
945 public bool _MostrarAccesoFavoritos
947 get {
return _bMostrarAccesoFavoritos; }
948 set { _bMostrarAccesoFavoritos = value; }
951 private bool _bMostrarCrearAccesoDirecto =
true;
959 Description(
"Muestra el acceso a crear accesos directos en el menú de opciones de la barra"),
961 DisplayName(
"MostrarCrearAccesoDirecto")
963 public bool _MostrarCrearAccesoDirecto
965 get {
return _bMostrarCrearAccesoDirecto; }
966 set { _bMostrarCrearAccesoDirecto = value; }
969 private bool _bMostrarGestionAccesos =
true;
974 public bool _MostrarCrearTareaProgramada
976 get {
return _bMostrarCrearTareaProgramada; }
977 set { _bMostrarCrearTareaProgramada = value; }
979 private bool _bMostrarCrearTareaProgramada =
false;
984 public bool _MostrarDuplicarListado
986 get {
return _bMostrarDuplicarListado; }
987 set { _bMostrarDuplicarListado = value; }
989 private bool _bMostrarDuplicarListado =
false;
998 Description(
"Muestra el acceso a gestión de accesos en el menú de opciones de la barra"),
1000 DisplayName(
"MostrarGestionAccesos")
1002 public bool _MostrarGestionAccesos
1004 get {
return _bMostrarGestionAccesos; }
1005 set { _bMostrarGestionAccesos = value; }
1016 Description(
"Muestra el triangulo para titulo, favoritos, accesos"),
1018 DisplayName(
"_TrianguloPantallaActivo")
1020 public bool _TrianguloPantallaActivo
1022 get {
return false; }
1042 Description(
"Muestra el botón ayuda en el tÃtulo del formulario"),
1044 DisplayName(
"_BotonAyuda")
1048 get {
return botonayuda; }
1060 private bool mostrarayudaf1 =
true;
1068 Description(
"Muestrar la ayuda de Sage50 al pulsar F1"),
1070 DisplayName(
"MostrarAyudaF1")
1072 public bool _MostrarAyudaF1
1074 get {
return mostrarayudaf1; }
1075 set { mostrarayudaf1 = value; }
1082 private bool _lMensajeAccesoMostrado =
false;
1087 public Dictionary<string, IDisposable> _BindForm
1089 get {
return _dictBindForm; }
1091 private Dictionary<string, IDisposable> _dictBindForm =
new Dictionary<string, IDisposable>();
1098 if (!EsPantalla0 && _MenuOpcionesBoton && FormBorderStyle != FormBorderStyle.None)
1100 if (_oFormSagePanel == null) _oFormSagePanel =
new FormSagePanel(
this);
1101 return _oFormSagePanel;
1113 public new FormWindowState WindowState
1117 return base.WindowState;
1121 if (value == FormWindowState.Maximized && _FormSagePanel is
FormSagePanel) MaximumSize = _FormSagePanel._GetMaximunSize(
this);
1122 base.WindowState = value;
1130 public bool _MessageBoxAutomatic
1132 get {
return _messageBoxAutomatic; }
1137 protected bool _messageBoxAutomatic =
false;
1139 #endregion Propiedades 1141 #region Eventos Messagebox 1147 public delegate
void onMessageBoxBefore_Handler(ref
MessageBoxParam toParam);
1158 public delegate
void onMessageBoxAfter_Handler(ref
MessageBoxParam toParam);
1169 public delegate
void onMessageBoxInvalidate_Handler(ref
MessageBoxParam toParam);
1177 #endregion Eventos Messagebox 1179 #region Eventos y delegados 1181 const int WM_SYSCOMMAND = 0x112;
1189 public delegate
bool _ExecuteCommandBeforeHandler(Form toForm, IntPtr toParam);
1201 public delegate
void GetOpciones_Handler(
EventArgsOpciones toEnventArgOpciones);
1212 public delegate
void GetOpcionesHerramientas_Handler(
EventArgsOpciones toEnventArgOpciones);
1219 #endregion Eventos y delegados 1221 #region Métodos privados 1222 private void _MostrarMenuOpcionesBoton()
1227 if (!_bMenuOpcionesBoton || this.FormBorderStyle == FormBorderStyle.None || IsDisposed || Disposing)
return;
1239 if (this.FormBorderStyle != FormBorderStyle.None && !IsDisposed && !Disposing)
1242 menu = ActiveMenu.GetInstance(
this);
1244 bool existeboton =
false;
1248 if (item.Name ==
"MenuPantalla")
1252 if (_bMenuOpcionesBoton ==
false)
1254 menu.
Items.Remove(item);
1261 if (_bMenuOpcionesBoton && existeboton ==
false && !EsPantalla0)
1265 buttonMenu.Name =
"MenuPantalla";
1266 buttonMenu.
Text =
" ";
1268 menu.
ToolTip.SetToolTip(buttonMenu,
"Opciones de pantalla ...");
1269 buttonMenu.Click +=
new EventHandler(buttonMenu_Click);
1272 menu.
Items.Add(buttonMenu);
1280 buttonHelp.Name =
"Help";
1281 buttonHelp.
Text =
" ";
1283 menu.
ToolTip.SetToolTip(buttonHelp,
"Ayuda (F1)");
1284 buttonHelp.Click +=
new EventHandler(buttonHelp_Click);
1287 menu.
Items.Add(buttonHelp);
1293 existeboton =
false;
1297 if (item.Name ==
"Ayuda")
1303 menu.
Items.Remove(item);
1310 if (botonayuda ==
eAyudaContextual.Si && existeboton ==
false && !EsPantalla0)
1314 buttonAyuda.Name =
"Ayuda";
1315 buttonAyuda.
Text =
" ";
1317 menu.
ToolTip.SetToolTip(buttonAyuda,
"Panel de notificaciones");
1318 buttonAyuda.Click += ButtonAyuda_Click;
1321 menu.
Items.Add(buttonAyuda);
1336 private Color GetPixel(Point position)
1338 using (var bitmap =
new Bitmap(1, 1))
1340 using (var graphics = Graphics.FromImage(bitmap))
1342 graphics.CopyFromScreen(position,
new Point(0, 0),
new Size(1, 1));
1344 return bitmap.GetPixel(0, 0);
1348 private void buttonHelp_Click(
object sender, EventArgs e)
1351 _MostrarAyudaPantalla();
1354 private void ButtonAyuda_Click(
object sender, EventArgs e)
1373 MostrarCfgUsabilidad();
1376 private void buttonMenu_Click(
object sender, EventArgs e)
1380 ActiveMenuImpl loFrm = (ActiveMenuImpl)loButton.Parent;
1382 loPoint =
new Point(loFrm.Location.X + loFrm.Size.Width, loFrm.Location.Y + loFrm.Size.Height);
1384 _MostrarOpcionesPantalla(loPoint);
1397 if (!_PresentarGestionAccesos())
1398 contextMenuStripPantalla.Items[
"gestiónDeAccesosToolStripMenuItem"].Visible =
false;
1402 if (!_PresentarAccesoFavoritos())
1403 contextMenuStripPantalla.Items[
"gestiónDeFavoritosToolStripMenuItem"].Visible =
false;
1406 contextMenuStripPantalla.Items[
"crearApunteCalendarioItem"].Visible = _PresentarApunteCalendario();
1409 contextMenuStripPantalla.Items[
"crearTareaProgramadaItem"].Visible = _PresentarTareaProgramada();
1412 contextMenuStripPantalla.Items[
"ayudaPantallaToolStripMenuItem"].Visible =
false;
1414 contextMenuStripPantalla.Items[
"ShowPropertiesToolStripMenuItem"].Visible = Debugger.IsAttached;
1416 GetOpcionesHerramientas();
1418 contextMenuStripPantalla.Show(toLocation, ToolStripDropDownDirection.Left);
1424 private void GetOpcionesHerramientas()
1426 if (_GetOpcionesHerramientas == null)
1430 List<ToolStripMenuItemBase> lstToolStripMenuItemsBase =
new List<ToolStripMenuItemBase>();
1432 contextMenuStripPantalla.Items.OfType<ToolStripMenuItem>().ToList<ToolStripMenuItem>().
1433 ForEach(item => lstToolStripMenuItemsBase.Add(
new ToolStripMenuItemBase(item.Text, item.Name, item.ToolTipText)));
1435 GetOpcionesHerramientasInvoke(contextMenuStripPantalla, lstToolStripMenuItemsBase);
1442 private void DisposeBindFormClass()
1444 if (_dictBindForm == null)
1448 if (_dictBindForm.Count > 0)
1452 foreach (KeyValuePair<string, IDisposable> loClassIDisposable
in _dictBindForm)
1453 loClassIDisposable.Value.Dispose();
1455 _dictBindForm.Clear();
1462 _dictBindForm = null;
1465 #endregion Métodos privados 1467 #region Métodos Protected 1483 return _bMostrarGestionAccesos;
1493 return _bMostrarCrearTareaProgramada;
1505 return _MostrarAccesoFavoritos;
1516 string lcError =
string.Empty;
1517 string lcPantalla = (
string.IsNullOrWhiteSpace(tcPantalla) ? _Pantalla : tcPantalla).ToUpper();
1519 List<string> lstExluirPantallas =
new List<string>() {
"CENTRO_USUARIOS" };
1521 if (!
string.IsNullOrWhiteSpace(lcPantalla) && !lstExluirPantallas.Contains(lcPantalla))
1522 llOk = FUNCTIONS._StateServiceForm(lcPantalla, out lcError);
1524 lstExluirPantallas.Clear();
1525 lstExluirPantallas = null;
1541 private bool ControlReadOnly(Control loCtrl)
1543 Type loType = loCtrl.GetType();
1545 List<string> loListNameTypes =
new List<string>() {
"Sage.ES.S50.Modelos.UserWebBrowserModelo",
"sage.addons.gestdoc.Visual.UserControls.usercontrolGestDoc" };
1547 return !(loListTypes.Any(f => f == loType || f.IsAssignableFrom(loType)) || loListNameTypes.Any(f => f == loType.FullName));
1555 private bool FormularioExcluidoReadOnly()
1557 bool llExcluido =
false;
1579 bool llPropOk =
false;
1582 if (FormularioExcluidoReadOnly())
1586 foreach (Control loCtrl
in toControl.Controls)
1590 if (!ControlReadOnly(loCtrl))
1593 PropertyInfo propInfo = loCtrl.GetType().GetProperty(
"_ReadOnly");
1594 if (propInfo != null)
1596 propInfo.SetValue(loCtrl, tbReadOnly, null);
1607 propInfo = loCtrl.GetType().GetProperty(
"Controls");
1608 llPropOk = (propInfo != null);
1610 catch (Exception loEx)
1612 if (loEx is AmbiguousMatchException)
1614 if (loCtrl.Controls.Count > 0) llPropOk =
true;
1621 if (llPropOk && loCtrl.Controls.Count > 0)
1623 setReadOnly(loCtrl, tbReadOnly);
1627 propInfo = loCtrl.GetType().GetProperty(
"ReadOnly");
1628 if (propInfo != null)
1630 propInfo.SetValue(loCtrl, tbReadOnly, null);
1635 propInfo = loCtrl.GetType().GetProperty(
"Enabled");
1636 if (propInfo != null && !(loCtrl is TabPage))
1638 propInfo.SetValue(loCtrl, !tbReadOnly, null);
1660 if (TengoAccesoCompleto())
1662 if (EvaluarRegistrosTabla(nombreTabla, maxRegistros))
1668 return nivelDeAcceso;
1683 if (TengoAccesoCompleto())
1685 if (documento._Es_Version_Evaluacion())
1691 return nivelDeAcceso;
1694 #endregion Métodos Protected 1697 private bool EvaluarRegistrosTabla(
string nombreTabla,
int registros = -1)
1701 return FUNCTIONS._Es_Version_Evaluacion(nombreTabla, tnRegistros: registros, tlPresentarMensaje:
false);
1704 return FUNCTIONS._Es_Version_Evaluacion(nombreTabla, tlPresentarMensaje:
false);
1716 private bool TengoAccesoCompleto()
1727 throw new Exception(
"Este formulario no se permite la personalización para Add-ons");
1746 InitializeComponent();
1757 SuscripcionEventosVisuales();
1759 if (EW_GLOBAL._EsEjecutable)
1761 SuscripcionEventosDeEjecutable();
1766 #endregion Constructor 1774 _AfterConstructorBase();
1775 base.OnCreateControl();
1778 private void _AfterConstructorBase()
1780 if (EW_GLOBAL._EsEjecutable)
1786 if (EW_GLOBAL._EsEjecutable)
1788 if (EW_GLOBAL._Moneda == null)
1790 EW_GLOBAL._Moneda =
new Divisa();
1791 EW_GLOBAL._Moneda._Codigo = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_moneda"));
1795 if (EW_GLOBAL._Empresa == null)
1797 EW_GLOBAL._Empresa =
new Empresa(Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa")));
1801 if (((
Empresa)EW_GLOBAL._Empresa)._Codigo != Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa")))
1803 ((
Empresa)EW_GLOBAL._Empresa)._Codigo = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa"));
1808 if (EW_GLOBAL._Terminal == null)
1810 EW_GLOBAL._Terminal =
new tpv.Clases.Terminal();
1813 Constructor_Privado();
1815 if (WindowState == FormWindowState.Maximized && _FormSagePanel is
FormSagePanel && !_ReusingFormSettings)
1817 WindowState = FormWindowState.Normal;
1818 MaximumSize = _FormSagePanel._GetMaximunSize(
this);
1819 WindowState = FormWindowState.Maximized;
1825 bool disposed =
false;
1839 CancelarSuscripcionEventosDeEjecutable();
1840 CancelarSuscripcionEventosVisuales();
1849 if (_oTimerProperties is Timer)
1851 _oTimerProperties.Tick -= _oTimerProperties_Tick;
1852 _oTimerProperties.Dispose();
1853 _oTimerProperties = null;
1856 DisposeToolStripMenuItems();
1858 lstOpcionesMenuAddon?.Clear();
1859 lstOpcionesMenuAddon = null;
1861 _ToolStripMenuItemsBase?.Clear();
1862 _ToolStripMenuItemsBase = null;
1864 _MenuContext_Opciones.Items.Clear();
1865 _MenuContext_Opciones.Dispose();
1866 _MenuContext_Opciones = null;
1868 _AddonsExtVisualCreacionAplazada?.Clear();
1869 _AddonsExtVisualCreacionAplazada = null;
1871 ldicBotons?.Clear();
1880 if (contextMenuStripPantalla != null)
1882 contextMenuStripPantalla.
Items.Clear();
1883 contextMenuStripPantalla?.Dispose();
1884 contextMenuStripPantalla = null;
1888 _oToolTip?.Dispose();
1890 _oErrorProvider?.Dispose();
1891 _oBackgroundWorker?.Dispose();
1892 _oBackgroundWorker = null;
1894 if (_oFormAyuda != null)
1895 _oFormAyuda._RefreshNoticiasPendientes -= FormAyuda__RefreshNoticiasPendientes;
1897 _oFormAyuda?.Dispose();
1900 if (_ConfigUserOptionsAllowed && _ConfigUserOptionsEditing) _SubcripcionEventosEdicionOpcionesUsuario(
false);
1902 DisposeBindFormClass();
1910 base.Dispose(disposing);
1917 private void SuscripcionEventosDeEjecutable()
1919 Load += FormBase_Load;
1920 KeyUp += FormBase_KeyUp;
1921 Activated += FormBase_Activated;
1922 FormClosed += FormBase_FormClosed;
1923 FormClosing += FormBase_FormClosing;
1924 Shown += FormBase_Shown;
1925 TextChanged += FormBase_TextChanged;
1926 Activated += Ayuda_Activated;
1927 Deactivate += Ayuda_Deactivate;
1933 private void CancelarSuscripcionEventosDeEjecutable()
1935 Load -= FormBase_Load;
1936 KeyUp -= FormBase_KeyUp;
1937 Activated -= FormBase_Activated;
1938 FormClosed -= FormBase_FormClosed;
1939 FormClosing -= FormBase_FormClosing;
1940 Shown -= FormBase_Shown;
1941 TextChanged -= FormBase_TextChanged;
1942 Activated -= Ayuda_Activated;
1943 Deactivate -= Ayuda_Deactivate;
1949 private void SuscripcionEventosVisuales()
1951 contextMenuStripPantalla.Opening +=
new CancelEventHandler(contextMenuStripPantalla_Opening);
1952 nombreFormularioToolStripMenuItem.Click += nombreFormularioToolStripMenuItem_Click;
1953 gestiónDeFavoritosToolStripMenuItem.Click += gestiónDeFavoritosToolStripMenuItem_Click;
1954 gestiónDeAccesosToolStripMenuItem.Click += gestiónDeAccesosToolStripMenuItem_Click;
1955 crearAccesoDirectoToolStripMenuItem.Click += crearAccesoDirectoToolStripMenuItem_Click;
1956 crearApunteCalendarioItem.Click += crearApunteCalendarioItem_Click;
1957 listadosPersonalizablesEditarItem.Click += listadosPersonalizablesEditarItem_Click;
1958 listadosPersonalizablesDuplicarItem.Click += listadosPersonalizablesDuplicarItem_Click;
1959 ayudaPantallaToolStripMenuItem.Click += ayudaPantallaToolStripMenuItem_Click;
1960 crearTareaProgramadaItem.Click += crearTareaProgramadaItem_Click;
1961 toolConfiguracionesToolStripMenuItem.Click += ConfiguracionesUsuarioItem_Click;
1962 ShowPropertiesToolStripMenuItem.Click += ShowPropertiesToolStripMenuItem_Click;
1968 private void CancelarSuscripcionEventosVisuales()
1970 contextMenuStripPantalla.Opening -=
new CancelEventHandler(contextMenuStripPantalla_Opening);
1971 nombreFormularioToolStripMenuItem.Click -= nombreFormularioToolStripMenuItem_Click;
1972 gestiónDeFavoritosToolStripMenuItem.Click -= gestiónDeFavoritosToolStripMenuItem_Click;
1973 gestiónDeAccesosToolStripMenuItem.Click -= gestiónDeAccesosToolStripMenuItem_Click;
1974 crearAccesoDirectoToolStripMenuItem.Click -= crearAccesoDirectoToolStripMenuItem_Click;
1975 crearApunteCalendarioItem.Click -= crearApunteCalendarioItem_Click;
1976 listadosPersonalizablesEditarItem.Click -= listadosPersonalizablesEditarItem_Click;
1977 listadosPersonalizablesDuplicarItem.Click -= listadosPersonalizablesDuplicarItem_Click;
1978 ayudaPantallaToolStripMenuItem.Click -= ayudaPantallaToolStripMenuItem_Click;
1979 crearTareaProgramadaItem.Click -= crearTareaProgramadaItem_Click;
1980 toolConfiguracionesToolStripMenuItem.Click -= ConfiguracionesUsuarioItem_Click;
1986 private void DisposeToolStripMenuItems()
1988 nombreFormularioToolStripMenuItem?.Dispose();
1989 nombreFormularioToolStripMenuItem = null;
1991 gestiónDeFavoritosToolStripMenuItem?.Dispose();
1992 gestiónDeFavoritosToolStripMenuItem = null;
1994 gestiónDeAccesosToolStripMenuItem?.Dispose();
1995 gestiónDeAccesosToolStripMenuItem = null;
1997 crearAccesoDirectoToolStripMenuItem?.Dispose();
1998 crearAccesoDirectoToolStripMenuItem = null;
2000 listadosPersonalizablesEditarItem?.Dispose();
2001 listadosPersonalizablesEditarItem = null;
2003 listadosPersonalizablesDuplicarItem?.Dispose();
2004 listadosPersonalizablesDuplicarItem = null;
2006 ayudaPantallaToolStripMenuItem?.Dispose();
2007 ayudaPantallaToolStripMenuItem = null;
2009 configuracionesUsuarioItem?.Dispose();
2010 configuracionesUsuarioItem = null;
2012 configuracionesUsuarioItemSeparator?.Dispose();
2013 configuracionesUsuarioItemSeparator = null;
2015 crearApunteCalendarioItem?.Dispose();
2016 crearApunteCalendarioItem = null;
2018 crearTareaProgramadaItem?.Dispose();
2019 crearTareaProgramadaItem = null;
2021 crearTareaProgramadaItem?.Dispose();
2022 crearTareaProgramadaItem = null;
2024 ShowPropertiesToolStripMenuItem?.Dispose();
2025 ShowPropertiesToolStripMenuItem = null;
2029 private void FormBase_TextChanged(
object sender, EventArgs e)
2031 if (!
String.IsNullOrWhiteSpace(_Sufijo) || !
String.IsNullOrWhiteSpace(_Acronimo))
2033 Revisar_Titulo_Formulario();
2040 private void Revisar_Titulo_Formulario()
2043 if (!
Text.Contains(
"(") && !
Text.Contains(
")") && (!_MostrarAcronimo || (_MostrarAcronimo && ((!
string.IsNullOrWhiteSpace(_Acronimo) && !
Text.Contains(_Acronimo)) ||
string.IsNullOrWhiteSpace(_Acronimo)))))
2045 _cTituloFormulario =
Text.Trim();
2049 if (_cTituloFormulario.Equals(
"FormFiltro"))
2050 _cTituloFormulario =
Text.Trim();
2055 bool llRevisarAcronimo = (!
Text.StartsWith(_Acronimo) && _MostrarAcronimo) || (
Text.StartsWith(_Acronimo) && !_MostrarAcronimo);
2056 bool llRevisarSufijo = (!
Text.Contains(_Sufijo) && _MostrarSufijo) || (
Text.Contains(_Sufijo) && !_MostrarSufijo);
2058 if (llRevisarAcronimo || llRevisarSufijo)
2061 TextChanged -=
new EventHandler(FormBase_TextChanged);
2064 Text =
String.Format(
"{0}{1}{2}", _MostrarAcronimo ? _Acronimo +
" " :
"", _cTituloFormulario, _MostrarSufijo ? _Sufijo :
"");
2067 TextChanged +=
new EventHandler(FormBase_TextChanged);
2079 private void FormBase_Shown(
object sender, EventArgs e)
2082 if (!
string.IsNullOrWhiteSpace(_Pantalla) && !_StateServiceForm())
2096 if (!_cSufijo.Contains(
"(SQL_LOG)") && Convert.ToString(EW_GLOBAL._GetVariable(
"wc_sql_log")).Trim().ToUpper() ==
"SI")
2098 _cSufijo +=
" (SQL_LOG)";
2099 Revisar_Titulo_Formulario();
2106 if (Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_sage50")))
2116 private Timer timer =
new Timer();
2117 private void timer_Tick(
object sender, EventArgs e)
2119 timer.Enabled =
false;
2123 if (EW_GLOBAL._EsEjecutable && !IsDisposed && !Disposing)
2126 _MostrarMenuOpcionesBoton();
2130 if (!_cSufijo.Contains(
"(SQL_LOG)") && Convert.ToString(EW_GLOBAL._GetVariable(
"wc_sql_log")).Trim().ToUpper() ==
"SI")
2132 _cSufijo +=
" (SQL_LOG)";
2133 Revisar_Titulo_Formulario();
2143 #region Asignar ErrorProvider a los controles 2154 _Asignar_ErrorProvider();
2157 ConfigUserOptionsUpdatePredet();
2158 ConfigUserOptionsLoad(ConfigUserOptionsGetPantalla());
2162 private void _Asignar_ErrorProvider()
2164 foreach (Control loControl
in Controls)
2166 _Asignar_ErrorProvider_Recursivo(loControl);
2175 private void _Asignar_ErrorProvider_Recursivo(Control toControl)
2178 PropertyInfo loPropiedad = toControl.GetType().GetProperty(
"_ErrorProvider", BindingFlags.Instance | BindingFlags.NonPublic);
2179 if (loPropiedad != null)
2181 loPropiedad.SetValue(toControl, _oErrorProvider, null);
2185 if (toControl.HasChildren)
2188 foreach (Control loChildControl
in toControl.Controls)
2190 _Asignar_ErrorProvider_Recursivo(loChildControl);
2195 #endregion Asignar ErrorProvider a los controles 2204 if (!EW_GLOBAL._EsEjecutable)
return;
2206 _CargandoEstilo =
true;
2209 XmlNode loNode = FUNCIONESESTILOS._Get_Aparence_Config(typeof(
FormBase),
"sage.ew.formul.FormBase");
2217 foreach (XmlElement element
in loNode)
2219 PropertyInfo propInfo = GetType().GetProperty(element.Name);
2220 if (propInfo != null)
2223 switch (element.Name)
2225 case "_AplicarEstilos":
2226 _AplicarEstilos = element.InnerText.Trim().ToLower() ==
"true";
2231 lcColor = element.InnerText;
2232 loColor = Name_To_Color(lcColor);
2233 _BackColor = loColor;
2242 _AplicarEstilos =
false;
2245 _CargandoEstilo =
false;
2254 if (!EW_GLOBAL._EsEjecutable)
return;
2256 if (_CargandoEstilo)
return;
2258 if (_AplicarEstilos)
2273 private void FormBase_FormClosing(
object sender, FormClosingEventArgs e)
2279 loFormManagerProperties.
_Save();
2283 FormBase_FormClosed_MenuItemsClear();
2287 if (Application.OpenForms.Count == 2)
2289 EnableWindow((IntPtr)EW_GLOBAL._nHandleVfp,
true);
2293 if (_ConfigUserOptionsAllowed)
2294 ConfigUserOptionsUpdateLastValues();
2307 base.OnFormClosing(e);
2310 FormBase_FormCling_OpemForms();
2318 private void FormBase_FormClosed(
object sender, FormClosedEventArgs e)
2320 FUNCTIONS._GarbageCollect();
2323 if (Name ==
"frmDocVentaTpv" || Name ==
"frmGestionPerfil" || Name ==
"frmDocVentaPed" || Name ==
"frmPerfilSeleccion" || Name ==
"frmSincroniza")
2325 EnableWindow((IntPtr)EW_GLOBAL._nHandleVfp,
true);
2332 private void FormBase_FormClosed_MenuItemsClear()
2350 private void FormBase_FormCling_OpemForms()
2353 if (EW_GLOBAL._OpenForms.Count > 1)
2355 List<Form> loOpenForms = EW_GLOBAL._OpenForms.AsEnumerable().Reverse().ToList();
2356 EW_GLOBAL._OpenForms.Clear();
2357 loOpenForms.Where(f => f !=
this).ToList().ForEach(f => EW_GLOBAL._OpenForms.Push(f));
2360 if (EW_GLOBAL._OpenForms.Count == 1 && !_lConnectFallido)
2365 MessageBox.Show(
Usuario.
_This.
_Error_Message, Convert.ToString(EW_GLOBAL._GetVariable(
"wc_nameproducto")), MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
2378 private void FormBase_Activated(
object sender, EventArgs e)
2384 _lConnectFallido =
true;
2387 MessageBox.Show(
Usuario.
_This.
_Error_Message, Convert.ToString(EW_GLOBAL._GetVariable(
"wc_nameproducto")), MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
2389 if (Name !=
"frmPrincipal")
2394 if (!Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_sage50")))
2397 lnHandle = (long)Handle;
2400 if (Name ==
"frmDocVentaTpv" || Name ==
"frmGestionPerfil" || Name ==
"frmDocVentaPed" || Name ==
"frmPerfilSeleccion" || Name ==
"frmSincroniza")
2403 if (Name ==
"frmPerfilSeleccion")
2405 IntPtr HWND_TOPMOST =
new IntPtr(-1);
2411 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
2415 EnableWindow((IntPtr)EW_GLOBAL._nHandleNet,
true);
2416 EnableWindow((IntPtr)EW_GLOBAL._nHandleVfp,
true);
2421 Dictionary<string, object> loParTmp;
2422 loParTmp = NETVFP._Parametros;
2426 NETVFP._Parametros[
"responder"] =
false;
2427 NETVFP._Parametros[
"opcion"] =
"newhandle";
2428 NETVFP._Parametros[
"tipo"] =
"valor";
2429 NETVFP._Parametros[
"valor"] = lnHandle;
2430 NETVFP._Parametros[
"paradi1"] =
"";
2431 NETVFP._Parametros[
"paradi2"] =
"";
2432 NETVFP._Parametros[
"paradi3"] =
"";
2434 NETVFP._SendMessageToVfp();
2435 NETVFP._Parametros.Clear();
2437 NETVFP._Parametros = loParTmp;
2441 private void FormBase_KeyUp(
object sender, KeyEventArgs e)
2444 if (EW_GLOBAL._EdicionPerfiles)
2448 string lcTecla =
"";
2451 if (e.KeyCode == Keys.F1)
2453 _MostrarAyudaPantalla();
2457 if (e.KeyCode == Keys.F2 ||
2458 e.KeyCode == Keys.F3 ||
2459 e.KeyCode == Keys.F4 ||
2460 e.KeyCode == Keys.F5 ||
2461 e.KeyCode == Keys.F6 ||
2462 e.KeyCode == Keys.F7 ||
2463 e.KeyCode == Keys.F8 ||
2464 e.KeyCode == Keys.F9 ||
2465 e.KeyCode == Keys.Escape)
2468 lcTecla =
"Shift_" + e.KeyCode.ToString();
2470 lcTecla =
"Control_" + e.KeyCode.ToString();
2472 lcTecla =
"Alt_" + e.KeyCode.ToString();
2474 lcTecla = e.KeyCode.ToString();
2476 else if (e.Control && !e.Alt)
2478 lcTecla =
"Control_" + e.KeyCode.ToString();
2481 if (!
string.IsNullOrWhiteSpace(lcTecla))
2484 if (ldicBotons.ContainsKey(lcTecla))
2486 object loCtrl = ldicBotons[lcTecla];
2502 loewButton.PerformClick();
2526 foreach (Control loCtrl
in toCtrl.Controls)
2528 if (loCtrl.Controls.Count > 0)
2530 Capturar_TeclesRapides(loCtrl,
false);
2535 PropertyInfo propInfo = loCtrl.GetType().GetProperty(
"_TeclaRapida");
2536 if (propInfo != null)
2539 object loTecla = propInfo.GetValue(loCtrl, null);
2541 if (loTecla != null)
2543 string lcTecla = loTecla.ToString();
2546 if (!ldicBotons.ContainsKey(loTecla.ToString()))
2548 ldicBotons.Add(loTecla.ToString(), loCtrl);
2551 if (_ToolTip != null)
2554 string lcToolTop = _ToolTip.GetToolTip(loCtrl);
2555 if (!
string.IsNullOrWhiteSpace(lcToolTop))
2557 string lcTeclaCtrl =
" (" + lcTecla.Trim().Replace(
"Control_",
"Ctrl+") +
")";
2559 if (lcToolTop.Substring(lcToolTop.Length - lcTeclaCtrl.Length) != lcTeclaCtrl)
2561 lcToolTop = lcToolTop +
" (" + lcTecla.Trim().Replace(
"Control_",
"Ctrl+") +
")";
2562 _ToolTip.SetToolTip(loCtrl, lcToolTop);
2572 propInfo = loCtrl.GetType().GetProperty(
"_TeclaFuncion");
2573 if (propInfo != null)
2576 object loTecla = propInfo.GetValue(loCtrl, null);
2578 if (loTecla != null)
2580 string lcTecla = loTecla.ToString();
2583 if (!ldicBotons.ContainsKey(loTecla.ToString()))
2585 ldicBotons.Add(loTecla.ToString(), loCtrl);
2588 if (_ToolTip != null)
2591 string lcToolTop = _ToolTip.GetToolTip(loCtrl);
2592 if (!
string.IsNullOrWhiteSpace(lcToolTop))
2594 string lcTeclaCtrl =
" (" + lcTecla.Trim() +
")";
2595 lcTeclaCtrl = lcTeclaCtrl.Replace(
"Control_",
"Ctrl + ");
2596 lcTeclaCtrl = lcTeclaCtrl.Replace(
"Shift_",
"Mayús. + ");
2597 lcTeclaCtrl = lcTeclaCtrl.Replace(
"Alt_",
"Alt + ");
2600 if (lcToolTop.Length <= lcTeclaCtrl.Length || lcToolTop.Substring(lcToolTop.Length - lcTeclaCtrl.Length) != lcTeclaCtrl)
2602 lcToolTop = lcToolTop + lcTeclaCtrl;
2603 _ToolTip.SetToolTip(loCtrl, lcToolTop);
2615 catch (Exception loEx)
2617 DB.Registrar_Error(loEx);
2640 DataGridView loTemp = (DataGridView)sender;
2641 loTemp.CommitEdit(DataGridViewDataErrorContexts.Commit);
2651 FUNCTIONS._GarbageCollect();
2654 if (EW_GLOBAL._EsEjecutable)
2659 _Addons_BindForms();
2662 EW_GLOBAL._OpenForms.Push(
this);
2669 protected String _cConfigUserOptionsPantalla =
"";
2677 return String.IsNullOrEmpty(_cConfigUserOptionsPantalla) ? _Pantalla : _cConfigUserOptionsPantalla;
2683 private void ConfigUserOptionsUpdatePredet()
2685 if (_ConfigUserOptionsAllowed)
2690 if (!_ConfigUserOptionsEditing)
2693 ConfigUserOptionsGetDictionaries();
2696 Dictionary<string, ConfigUserOption> dicUserOptionsAct = _ConfigUserOptionsGetCurrent();
2699 _oConfigUserFormPredet.
_Save(dicUserOptionsAct,
true);
2707 private void ConfigUserOptionsUpdateLastValues()
2709 if (!_ConfigUserOptionsAllowed || _ConfigUserOptionsEditing)
2716 Dictionary<string, ConfigUserOption> dicUserOptionsAct = _ConfigUserOptionsGetCurrent();
2719 loLast.
_Save(dicUserOptionsAct,
false,
false);
2729 if (!_ConfigUserOptionsAllowed)
2732 _cConfigUserOptionsPantalla = tcPantalla;
2735 ConfigUserOptionsGetDictionaries();
2748 private void ConfigUserOptionsDisabled(List<string> listOptionsDisabled)
2750 listConfigUserOptionsDisabled =
new List<string>();
2753 if (listOptionsDisabled != null && listOptionsDisabled.Count > 0)
2754 listConfigUserOptionsDisabled = listConfigUserOptionsDisabled.Concat(listOptionsDisabled).ToList();
2758 if (listOptionsAddonsDisabled != null && listOptionsAddonsDisabled.Count > 0)
2759 listConfigUserOptionsDisabled = listConfigUserOptionsDisabled.Concat(listOptionsAddonsDisabled).ToList();
2765 private void ConfigUserOptionsGetDictionaries()
2768 ConfigUserOptionsDisabled(_ConfigUserOptionsDisabled());
2772 dicAllConfigUserOptions =
new Dictionary<string, IConfigUserOption>();
2773 dicNoConfigUserOptions =
new Dictionary<string, Control>();
2774 ConfigUserOptionsGetAll(
this);
2795 if (!this._ConfigUserOptionsAllowed)
2799 if (dicUserOptions == null)
2803 _ConfigUserOptionsLoading =
true;
2805 Dictionary<string, ConfigUserOption> loDicConfigUserOptionPredet;
2807 loDicConfigUserOptionPredet = _oConfigUserFormPredet.
_dicOpciones;
2809 foreach (KeyValuePair<string, ConfigUserOption> loOption
in dicUserOptions)
2815 if (dicAllConfigUserOptions.TryGetValue(loOption.Key, out loConfigControl))
2819 loConfigUserOption = loOption.
Value;
2823 loConfigUserOption = loDicConfigUserOptionPredet[loOption.Key];
2827 loConfigControl._SetValueUserOption(loConfigUserOption.
Value);
2828 loConfigControl._UsuarioPermiteConfigUser = loConfigUserOption.
UserOptionalValue;
2831 catch (Exception loEx)
2833 DB.Registrar_Error(loEx);
2837 Dictionary<string, object> loDic = (from loOption in dicUserOptions.Values
2838 select loOption).ToDictionary(f => f.Key, f => f.Value);
2844 _ConfigUserOptionsLoading =
false;
2853 return !_ConfigUserOptionsAllowed || (_ConfigUserOptionsAllowed && _ConfigUserForm is
ConfigUserForm);
2867 lcName = ((Control)toConfigUserOption).Name;
2869 if (_ConfigUserForm._dicOpciones.ContainsKey(lcName))
2882 ConfigUserOptionsLoad(tcPantalla);
2892 if (!this._ConfigUserOptionsAllowed)
2896 _oConfigUserForm.
_Save(dicUserOptions);
2899 Dictionary<string, object> loDic = (from loOption in dicUserOptions.Values
2900 select loOption).ToDictionary(f => f.Key, f => f.Value);
2911 if (this._ConfigUserOptionsAllowed) _ConfigUserOptionsSave(_ConfigUserOptionsGetCurrent());
2921 Dictionary<string, ConfigUserOption> dicUserOptionsAct =
new Dictionary<string, ConfigUserOption>();
2923 foreach (KeyValuePair<string, IConfigUserOption> loOption
in dicAllConfigUserOptions)
2928 dicUserOptionsAct.Add(loOption.Key, loConfigUserOption);
2931 return dicUserOptionsAct;
2939 if (!_ConfigUserOptionsAllowed)
2942 _ConfigUserOptionsEditing = tlEditar;
2955 if (tlEditar) _SubcripcionEventosEdicionOpcionesUsuario();
2963 private void _SubcripcionEventosEdicionOpcionesUsuario(
bool tbSubscribirse =
true)
2965 if (_ConfigUserOptionsAllowed)
2969 foreach (Control loControl
in dicNoConfigUserOptions.Values)
2973 ((
ewbutton)loControl).OnClickInvalidate -= FormBase_OnClickInvalidate;
2974 if (tbSubscribirse) ((
ewbutton)loControl).OnClickInvalidate += FormBase_OnClickInvalidate;
2976 else if (loControl is TabPage)
2978 Control loTabControl = ((TabPage)loControl).Parent;
2979 if (loTabControl is TabControl)
2981 ((TabControl)loTabControl).Selecting -= FormBase_SelectingTabPage;
2982 if (tbSubscribirse) ((TabControl)loTabControl).Selecting += FormBase_SelectingTabPage;
2987 ((
ewcombobox)loControl).DropDown -= FormBase_DropDownComboBox;
2988 if (tbSubscribirse) ((
ewcombobox)loControl).DropDown += FormBase_DropDownComboBox;
2992 List<IConfigUserOption> loList = (from loConfigUser in dicAllConfigUserOptions.Values
2993 where loConfigUser._EsOpcionalConfigUser
2994 select loConfigUser).ToList();
3005 private void FormBase_OnConfigUserValueChanged(
object sender, EventArgs e)
3014 _ConfigUserOptionsLoading =
true;
3018 _ConfigUserOptionsLoading =
false;
3028 private void FormBase_DropDownComboBox(
object sender, EventArgs e)
3030 _MessageBox(
"Control no operativo en modo edición.",
"Configuraciones de usuario", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
3040 private void FormBase_SelectingTabPage(
object sender, TabControlCancelEventArgs e)
3042 if (listConfigUserOptionsDisabled.Contains(e.TabPage.Name))
3044 _MessageBox(
"Página no operativa en modo edición.",
"Configuraciones de usuario", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
3054 private void FormBase_OnClickInvalidate(
ewbutton toButton, ref
bool tlCancel)
3056 _MessageBox(
"Control no operativo en modo edición.",
"Configuraciones de usuario", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
3065 private void ConfigUserOptionsGetAll(Control toContainer)
3069 foreach (Control loControl
in toContainer.Controls)
3071 lcName = loControl.Name;
3074 if ((loControl is
ewbutton || listConfigUserOptionsDisabled.Contains(lcName)) && !dicNoConfigUserOptions.ContainsKey(lcName))
3075 dicNoConfigUserOptions.Add(lcName, loControl);
3078 if (!(loControl is
IConfigUserOption || listConfigUserOptionsDisabled.Contains(lcName)))
3079 ConfigUserOptionsGetAll(loControl);
3082 if (loControl is
IConfigUserOption && !dicAllConfigUserOptions.ContainsKey(lcName) && !listConfigUserOptionsDisabled.Contains(lcName))
3146 if (!_dictBindForm.ContainsValue(toClass))
3150 _dictBindForm.Add(
System.Guid.NewGuid().ToString(), toClass);
3161 private void Load_Privado()
3164 Capturar_TeclesRapides(
this,
true);
3173 private void Constructor_Privado()
3175 if (!EW_GLOBAL._EsEjecutable)
3183 if (!
string.IsNullOrEmpty(_Pantalla))
3186 determinarNivelAccesoDelUsuario();
3188 if (tengoElAccesoDenegadoParaEstaPantalla())
3196 if (!_lMensajeAccesoMostrado)
3198 string lcMessage =
string.Format(
"El usuario {0} no tiene acceso a {1}. Consulte con su supervisor.",
Usuario.
_This.
_Nombre, lcDescripcio);
3199 FUNCTIONS._MessageBox(lcMessage, MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
3200 _lMensajeAccesoMostrado =
true;
3204 Load += (s, e) => Close();
3207 AccesoListasPrevias =
false;
3213 if (!_cSufijo.Contains(
"(Sólo lectura)") && tengoElAccesoDeSoloLecturaParaEstaPantalla())
3216 _cSufijo +=
" (Sólo lectura)";
3217 Revisar_Titulo_Formulario();
3222 if (!_cSufijo.Contains(
"(Baja suscripción)") && tengoElAccesoEnBajaSuscripcionParaEstaPantalla())
3224 _cSufijo +=
" (Baja suscripción)";
3225 Revisar_Titulo_Formulario();
3230 AccesoListasPrevias =
true;
3236 if (!_Gestionar_permisos)
_ReadOnly =
false;
3240 FormBase loFrm = (FormBase)FindForm();
3249 catch (Exception loEx)
3251 db.DB.Registrar_Error(loEx);
3257 private bool tengoElAccesoEnBajaSuscripcionParaEstaPantalla()
3262 private bool tengoElAccesoDeSoloLecturaParaEstaPantalla()
3267 private bool tengoElAccesoDenegadoParaEstaPantalla()
3272 private void determinarNivelAccesoDelUsuario()
3280 private Color Name_To_Color(
string tcNomColor)
3285 if (tcNomColor.Substring(0, 1) ==
"#")
3286 loColor = ColorTranslator.FromHtml(tcNomColor);
3288 loColor =
Color.FromName(tcNomColor);
3307 string tcId,
int tnSegundos=15,
int tnAnchoMaxCampoPregunta = 600)
3311 Form loForm = this.FindForm();
3319 Control loControlMensajePopUp = loForm.__FindControlRecursive(
"oMensajePopUpAvisoRespAuto");
3320 if (loControlMensajePopUp == null)
3322 loMensajePopUp =
new PanelAvisoRespAuto(toTipoAviso, tcTitulo, tcPregunta, tcRespuesta, tcId, tnSegundos, tnAnchoMaxCampoPregunta);
3323 loMensajePopUp.Name =
"oMensajePopUpAvisoRespAuto";
3324 loForm.Controls.Add(loMensajePopUp);
3341 loMensajePopUp.Location =
new Point(this.Width - loMensajePopUp.Width - 25, 10);
3342 loMensajePopUp.Visible =
true;
3343 loMensajePopUp.BringToFront();
3348 DB.Registrar_Error(e);
3364 public DialogResult
_MessageBox(String tcMensaje, MessageBoxButtons toBotones, MessageBoxIcon toIcono,
3365 MessageBoxDefaultButton toBotonDefecto, DialogResult toResultadoDefecte)
3367 DialogResult toResultado;
3371 toResultado = _MessageBox(tcMensaje, toBotones, toIcono, toBotonDefecto, toResultadoDefecte, pantalla);
3388 public DialogResult
_MessageBox(String tcMensaje, MessageBoxButtons toBotones, MessageBoxIcon toIcono,
3389 MessageBoxDefaultButton toBotonDefecto, DialogResult toResultadoDefecte,
MessageBoxAutomatico toPantalla)
3391 DialogResult toResultado;
3393 if (Application.OpenForms.Count > 0 || Debugger.IsAttached)
3396 string lcTitulo =
"";
3397 if (!Text.__IsNumeric()) lcTitulo = Text;
3400 toResultado = _MessageBox(tcMensaje, lcTitulo, toBotones, toIcono, toBotonDefecto, toPantalla);
3404 Exception ex =
new Exception(
"Se ha lanzado este mensaje visual: '" + tcMensaje +
"'");
3425 public DialogResult
_MessageBox(String tcMensaje, MessageBoxButtons toBotones, MessageBoxIcon toIcono,
3426 MessageBoxDefaultButton toBotonDefecto, DialogResult toResultadoDefecte,
3429 DialogResult toResultado;
3432 toResultado = _MessageBox(tcMensaje, toBotones, toIcono, toBotonDefecto, toResultadoDefecte, toLink, pantalla);
3452 public DialogResult
_MessageBox(String tcMensaje, MessageBoxButtons toBotones, MessageBoxIcon toIcono,
3453 MessageBoxDefaultButton toBotonDefecto, DialogResult toResultadoDefecte,
3456 DialogResult toResultado;
3458 if (Application.OpenForms.Count > 0 || Debugger.IsAttached)
3461 string lcTitulo =
"";
3462 if (!Text.__IsNumeric()) lcTitulo = Text;
3465 toResultado = _MessageBox(tcMensaje, lcTitulo, toBotones, toIcono, toBotonDefecto, toLink, toPantalla);
3469 Exception ex =
new Exception(
"Se ha lanzado este mensaje visual: '" + tcMensaje +
"'");
3487 public DialogResult
_MessageBox(String tcMensaje, MessageBoxButtons toBotones, MessageBoxIcon toIcono,
3488 MessageBoxDefaultButton toBotonDefecto, DialogResult toResultadoDefecte,
3489 Dictionary<eBotonesMessagebox, string> tdicLiteralesBoton)
3491 DialogResult toResultado;
3494 toResultado = _MessageBox(tcMensaje, toBotones, toIcono, toBotonDefecto, toResultadoDefecte, tdicLiteralesBoton, pantalla);
3511 public DialogResult
_MessageBox(String tcMensaje, MessageBoxButtons toBotones, MessageBoxIcon toIcono,
3512 MessageBoxDefaultButton toBotonDefecto, DialogResult toResultadoDefecte,
3515 DialogResult toResultado;
3517 if (Application.OpenForms.Count > 0 || Debugger.IsAttached)
3520 string lcTitulo =
"";
3521 if (!this.Text.__IsNumeric()) lcTitulo = this.Text;
3524 toResultado = _MessageBox(tcMensaje, lcTitulo, toBotones, toIcono, toBotonDefecto, tdicLiteralesBoton, toPantalla);
3528 Exception ex =
new Exception(
"Se ha lanzado este mensaje visual: " + tcMensaje);
3547 public DialogResult
_MessageBox(String tcMensaje, MessageBoxButtons toBotones, MessageBoxIcon toIcono,
3548 MessageBoxDefaultButton toBotonDefecto, DialogResult toResultadoDefecte,
3549 Dictionary<eBotonesMessagebox, string> tdicLiteralesBoton,
3550 Dictionary<eBotonesMessagebox, Image> tdicImagenesBoton)
3552 DialogResult toResultado;
3555 toResultado = _MessageBox(tcMensaje, toBotones, toIcono, toBotonDefecto, toResultadoDefecte, tdicLiteralesBoton, tdicImagenesBoton, pantalla);
3573 public DialogResult
_MessageBox(String tcMensaje, MessageBoxButtons toBotones, MessageBoxIcon toIcono,
3574 MessageBoxDefaultButton toBotonDefecto, DialogResult toResultadoDefecte,
3575 Dictionary<eBotonesMessagebox, string> tdicLiteralesBoton,
3578 DialogResult toResultado;
3580 if (Application.OpenForms.Count > 0 || Debugger.IsAttached)
3582 string lcTitulo =
"";
3583 if (!Text.__IsNumeric()) lcTitulo = Text;
3585 toResultado = _MessageBox(tcMensaje, lcTitulo, toBotones, toIcono, toBotonDefecto, tdicLiteralesBoton, tdicImagenesBoton, toPantalla);
3589 Exception ex =
new Exception(
"Se ha lanzado este mensaje visual: " + tcMensaje);
3606 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
3607 MessageBoxDefaultButton defaultButton)
3613 loParam.
_DialogResult = _MessageBox(text, caption, buttons, icon, defaultButton, pantalla);
3629 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
3635 if (Application.OpenForms.Count > 0 || Debugger.IsAttached)
3637 onMessageBoxBefore?.Invoke(ref loParam);
3640 if (_ConfigUserOptionsLoading)
3641 return loParam._DialogResultDefecto;
3644 if (!EW_GLOBAL._lLoginFinalizado)
3646 loParam._DialogResult =
MessageBox.Show(loParam._Mensaje, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
3647 return loParam._DialogResult;
3651 onMessageBoxInvalidate?.Invoke(ref loParam);
3652 if (loParam._Cancel)
3653 return loParam._DialogResultDefecto;
3655 DialogResult dialogResult =
new DialogResult();
3656 if (_RespuestaEncontrada(toPantalla, ref dialogResult))
3658 loParam._DialogResult = dialogResult;
3668 loParam._DialogResult = frmMessage.
Show(loParam._Mensaje, _toPantalla, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
3678 onMessageBoxAfter?.Invoke(ref loParam);
3682 Exception ex =
new Exception(
"Se ha lanzado este mensaje visual: " + text);
3703 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
3704 MessageBoxDefaultButton defaultButton,
Link toLink)
3709 loParam.
_DialogResult = _MessageBox(text, caption, buttons, icon, defaultButton, toLink, pantalla);
3729 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
3735 if (Application.OpenForms.Count > 0 || Debugger.IsAttached)
3737 onMessageBoxBefore?.Invoke(ref loParam);
3740 if (_ConfigUserOptionsLoading)
3741 return loParam._DialogResultDefecto;
3744 if (!EW_GLOBAL._lLoginFinalizado)
3746 loParam._DialogResult =
MessageBox.Show(loParam._Mensaje, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
3747 return loParam._DialogResult;
3751 onMessageBoxInvalidate?.Invoke(ref loParam);
3752 if (loParam._Cancel)
3753 return loParam._DialogResultDefecto;
3755 DialogResult dialogResult =
new DialogResult();
3756 if (_RespuestaEncontrada(toPantalla, ref dialogResult))
3758 loParam._DialogResult = dialogResult;
3768 loParam._DialogResult = frmMessage.
Show(loParam._Mensaje, _toPantalla, loParam._Link, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
3777 onMessageBoxAfter?.Invoke(ref loParam);
3781 Exception ex =
new Exception(
"Se ha lanzado este mensaje visual: " + text);
3799 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
3800 MessageBoxDefaultButton defaultButton,
3801 Dictionary<eBotonesMessagebox, string> tdicLiteralesBoton)
3807 loParam.
_DialogResult = _MessageBox(text, caption, buttons, icon, defaultButton, tdicLiteralesBoton, pantalla);
3824 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
3825 MessageBoxDefaultButton defaultButton,
3831 if (Application.OpenForms.Count > 0 || Debugger.IsAttached)
3833 onMessageBoxBefore?.Invoke(ref loParam);
3836 if (_ConfigUserOptionsLoading)
3837 return loParam._DialogResultDefecto;
3840 if (!EW_GLOBAL._lLoginFinalizado)
3842 loParam._DialogResult =
MessageBox.Show(loParam._Mensaje, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
3843 return loParam._DialogResult;
3847 onMessageBoxInvalidate?.Invoke(ref loParam);
3848 if (loParam._Cancel)
3849 return loParam._DialogResultDefecto;
3851 DialogResult dialogResult =
new DialogResult();
3852 if (_RespuestaEncontrada(toPantalla, ref dialogResult))
3854 loParam._DialogResult = dialogResult;
3866 loParam._DialogResult = frmMessage.
Show(loParam._Mensaje, _toPantalla, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
3876 onMessageBoxAfter?.Invoke(ref loParam);
3880 Exception ex =
new Exception(
"Se ha lanzado este mensaje visual: " + text);
3902 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
3903 MessageBoxDefaultButton defaultButton,
3904 Dictionary<eBotonesMessagebox, string> tdicLiteralesBoton,
3911 loParam.
_DialogResult = _MessageBox(text, caption, buttons, icon, defaultButton, tdicLiteralesBoton, toLink, pantalla);
3932 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
3933 MessageBoxDefaultButton defaultButton,
3934 Dictionary<eBotonesMessagebox, string> tdicLiteralesBoton,
3940 if (Application.OpenForms.Count > 0 || Debugger.IsAttached)
3942 onMessageBoxBefore?.Invoke(ref loParam);
3945 if (_ConfigUserOptionsLoading)
3946 return loParam._DialogResultDefecto;
3949 if (!EW_GLOBAL._lLoginFinalizado)
3951 loParam._DialogResult =
MessageBox.Show(loParam._Mensaje, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
3952 return loParam._DialogResult;
3956 onMessageBoxInvalidate?.Invoke(ref loParam);
3957 if (loParam._Cancel)
3958 return loParam._DialogResultDefecto;
3960 DialogResult dialogResult =
new DialogResult();
3961 if (_RespuestaEncontrada(toPantalla, ref dialogResult))
3963 loParam._DialogResult = dialogResult;
3975 loParam._DialogResult = frmMessage.
Show(loParam._Mensaje, _toPantalla, loParam._Link, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
3985 onMessageBoxAfter?.Invoke(ref loParam);
3989 Exception ex =
new Exception(
"Se ha lanzado este mensaje visual: " + text);
4008 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
4009 MessageBoxDefaultButton defaultButton,
4010 Dictionary<eBotonesMessagebox, string> tdicLiteralesBoton,
4011 Dictionary<eBotonesMessagebox, Image> tdicImagenesBoton)
4014 MessageBoxParam loParam =
new MessageBoxParam(text, caption, buttons, icon, defaultButton,
new DialogResult(), tdicLiteralesBoton, tdicImagenesBoton);
4017 loParam.
_DialogResult = _MessageBox(text, caption, buttons, icon, defaultButton, tdicLiteralesBoton, tdicImagenesBoton, pantalla);
4035 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
4036 MessageBoxDefaultButton defaultButton,
4037 Dictionary<eBotonesMessagebox, string> tdicLiteralesBoton,
4041 MessageBoxParam loParam =
new MessageBoxParam(text, caption, buttons, icon, defaultButton,
new DialogResult(), tdicLiteralesBoton, tdicImagenesBoton);
4043 if (Application.OpenForms.Count > 0 || Debugger.IsAttached)
4045 onMessageBoxBefore?.Invoke(ref loParam);
4048 if (_ConfigUserOptionsLoading)
4049 return loParam._DialogResultDefecto;
4053 if (!EW_GLOBAL._lLoginFinalizado)
4055 loParam._DialogResult =
MessageBox.Show(loParam._Mensaje, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
4056 return loParam._DialogResult;
4060 onMessageBoxInvalidate?.Invoke(ref loParam);
4061 if (loParam._Cancel)
4062 return loParam._DialogResultDefecto;
4064 DialogResult dialogResult =
new DialogResult();
4065 if (_RespuestaEncontrada(toPantalla, ref dialogResult))
4067 loParam._DialogResult = dialogResult;
4080 loParam._DialogResult = frmMessage.
Show(loParam._Mensaje, _toPantalla, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
4090 onMessageBoxAfter?.Invoke(ref loParam);
4094 Exception ex =
new Exception(
"Se ha lanzado este mensaje visual: " + text);
4112 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
4113 MessageBoxDefaultButton defaultButton,
4114 Dictionary<MessageBoxButtons, List<string>> tdicTextoBotones)
4120 loParam.
_DialogResult = _MessageBox(text, caption, buttons, icon, defaultButton, tdicTextoBotones, pantalla);
4136 public DialogResult
_MessageBox(
string text,
string caption, MessageBoxButtons buttons, MessageBoxIcon icon,
4137 MessageBoxDefaultButton defaultButton,
4144 if (Application.OpenForms.Count > 0 || Debugger.IsAttached)
4146 onMessageBoxBefore?.Invoke(ref loParam);
4149 if (_ConfigUserOptionsLoading)
4150 return loParam._DialogResultDefecto;
4153 if (!EW_GLOBAL._lLoginFinalizado)
4155 loParam._DialogResult =
MessageBox.Show(loParam._Mensaje, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
4156 return loParam._DialogResult;
4160 onMessageBoxInvalidate?.Invoke(ref loParam);
4161 if (loParam._Cancel)
4162 return loParam._DialogResultDefecto;
4164 DialogResult dialogResult =
new DialogResult();
4165 if (_RespuestaEncontrada(toPantalla, ref dialogResult))
4167 loParam._DialogResult = dialogResult;
4177 loParam._DialogResult = frmMessage.
Show(loParam._Mensaje, _toPantalla, loParam._Caption, loParam._Botones, loParam._Icono, loParam._BotonDefecto);
4187 onMessageBoxAfter?.Invoke(ref loParam);
4191 Exception ex =
new Exception(
"Se ha lanzado este mensaje visual :" + text);
4198 private void _GuardarRespuesta(
MessageBoxAutomatico toPantalla, Dictionary<string, string> toDiccionarioBotonesRespuestas,
string toMensaje,
string toDialogResult)
4200 if( toPantalla != null && !
string.IsNullOrWhiteSpace(toPantalla.
_Guid) && !
string.IsNullOrWhiteSpace(toPantalla.
_Pantalla))
4202 string lcUsuario = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_usuario"));
4206 userMessageBox.
_Usuario = lcUsuario;
4209 userMessageBox.
_CargarOpciones(toDiccionarioBotonesRespuestas, toDialogResult);
4211 userMessageBox.
_Save();
4215 private bool _RespuestaEncontrada(
MessageBoxAutomatico toPantalla, ref DialogResult toDialogResult)
4217 bool respuestaEncontrada =
false;
4219 if (toPantalla != null && !
string.IsNullOrWhiteSpace(toPantalla.
_Guid) && !
string.IsNullOrWhiteSpace(toPantalla.
_Pantalla))
4221 string lcUsuario = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_usuario"));
4225 userMessageBox.
_Usuario = lcUsuario;
4227 if( userMessageBox.
_Load())
4231 toDialogResult = (DialogResult)Enum.Parse(typeof(DialogResult), resultDefault);
4232 respuestaEncontrada =
true;
4239 return respuestaEncontrada;
4254 SendMessage(Handle, WM_SETREDRAW, !tlBloquear, 0);
4266 return (
FormBase)Activator.CreateInstance(this.GetType());
4272 private void InitializeComponent()
4274 this.components =
new System.ComponentModel.Container();
4275 System.ComponentModel.ComponentResourceManager resources =
new System.ComponentModel.ComponentResourceManager(typeof(
FormBase));
4277 this.contextMenuStripPantalla =
new System.Windows.Forms.ContextMenuStrip(this.components);
4278 this.configuracionesUsuarioItem =
new System.Windows.Forms.ToolStripMenuItem();
4279 this.toolConfiguracionesToolStripMenuItem =
new System.Windows.Forms.ToolStripMenuItem();
4280 this.configuracionesUsuarioItemSeparator =
new System.Windows.Forms.ToolStripSeparator();
4281 this.nombreFormularioToolStripMenuItem =
new System.Windows.Forms.ToolStripMenuItem();
4282 this.ShowPropertiesToolStripMenuItem =
new System.Windows.Forms.ToolStripMenuItem();
4283 this.gestiónDeFavoritosToolStripMenuItem =
new System.Windows.Forms.ToolStripMenuItem();
4284 this.gestiónDeAccesosToolStripMenuItem =
new System.Windows.Forms.ToolStripMenuItem();
4285 this.crearAccesoDirectoToolStripMenuItem =
new System.Windows.Forms.ToolStripMenuItem();
4286 this.crearTareaProgramadaItem =
new System.Windows.Forms.ToolStripMenuItem();
4287 this.crearApunteCalendarioItem =
new System.Windows.Forms.ToolStripMenuItem();
4288 this.listadosPersonalizablesEditarItem =
new System.Windows.Forms.ToolStripMenuItem();
4289 this.listadosPersonalizablesDuplicarItem =
new System.Windows.Forms.ToolStripMenuItem();
4290 this.ayudaPantallaToolStripMenuItem =
new System.Windows.Forms.ToolStripMenuItem();
4292 ((
System.ComponentModel.ISupportInitialize)(this._oErrorProvider)).BeginInit();
4293 this.contextMenuStripPantalla.SuspendLayout();
4294 this.SuspendLayout();
4298 this._oErrorProvider._ErrorToolTipActive =
true;
4299 this._oErrorProvider.BlinkStyle =
System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
4300 this._oErrorProvider.ContainerControl =
this;
4301 this._oErrorProvider.Icon = ((
System.Drawing.Icon)(resources.GetObject(
"_oErrorProvider.Icon")));
4305 this.contextMenuStripPantalla.Items.AddRange(
new System.Windows.Forms.ToolStripItem[] {
4306 this.configuracionesUsuarioItem,
4307 this.configuracionesUsuarioItemSeparator,
4308 this.nombreFormularioToolStripMenuItem,
4309 this.gestià nDeFavoritosToolStripMenuItem,
this.gestiónDeAccesosToolStripMenuItem,
this.crearAccesoDirectoToolStripMenuItem,
this.crearTareaProgramadaItem,
this.crearApunteCalendarioItem,
this.listadosPersonalizablesEditarItem,
this.listadosPersonalizablesDuplicarItem,
this.ayudaPantallaToolStripMenuItem,
this.ShowPropertiesToolStripMenuItem});
this.contextMenuStripPantalla.Name = "contextMenuStripPantalla";
this.contextMenuStripPantalla.Size = new System.Drawing.Size(289, 230);
//
// configuracionesUsuarioItem
//
this.configuracionesUsuarioItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolConfiguracionesToolStripMenuItem});
this.configuracionesUsuarioItem.Name = "configuracionesUsuarioItem";
this.configuracionesUsuarioItem.Size = new System.Drawing.Size(288, 22);
this.configuracionesUsuarioItem.Text = "Configuraciones de usuario";
//
// toolConfiguracionesToolStripMenuItem
//
this.toolConfiguracionesToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.toolConfiguracionesToolStripMenuItem.Name = "toolConfiguracionesToolStripMenuItem";
this.toolConfiguracionesToolStripMenuItem.Size = new System.Drawing.Size(221, 22);
this.toolConfiguracionesToolStripMenuItem.Text = "Diseñador configuraciones";
//
// configuracionesUsuarioItemSeparator
//
this.configuracionesUsuarioItemSeparator.Name = "configuracionesUsuarioItemSeparator";
this.configuracionesUsuarioItemSeparator.Size = new System.Drawing.Size(285, 6);
//
// nombreFormularioToolStripMenuItem
//
this.nombreFormularioToolStripMenuItem.Name = "nombreFormularioToolStripMenuItem";
this.nombreFormularioToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.nombreFormularioToolStripMenuItem.Text = "Nombre del formulario";
//
// ShowPropertiesToolStripMenuItem
//
this.ShowPropertiesToolStripMenuItem.Name = "ShowPropertiesToolStripMenuItem";
this.ShowPropertiesToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.ShowPropertiesToolStripMenuItem.Text = "Mostrar propiedades controles";
//
// gestiónDeFavoritosToolStripMenuItem
//
this.gestiónDeFavoritosToolStripMenuItem.Name = "gestiónDeFavoritosToolStripMenuItem";
this.gestiónDeFavoritosToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.gestiónDeFavoritosToolStripMenuItem.Text = "Gestión de favoritos";
//
// gestiónDeAccesosToolStripMenuItem
//
this.gestiónDeAccesosToolStripMenuItem.Name = "gestiónDeAccesosToolStripMenuItem";
this.gestiónDeAccesosToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.gestiónDeAccesosToolStripMenuItem.Text = "Gestión de accesos";
//
// crearAccesoDirectoToolStripMenuItem
//
this.crearAccesoDirectoToolStripMenuItem.Name = "crearAccesoDirectoToolStripMenuItem";
this.crearAccesoDirectoToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.crearAccesoDirectoToolStripMenuItem.Text = "Crear acceso directo";
//
// crearTareaProgramadaItem
//
this.crearTareaProgramadaItem.Name = "crearTareaProgramadaItem";
this.crearTareaProgramadaItem.Size = new System.Drawing.Size(288, 22);
this.crearTareaProgramadaItem.Text = "Crear tarea programada";
//
// crearApunteCalendarioItem
//
this.crearApunteCalendarioItem.Name = "crearApunteCalendarioItem";
this.crearApunteCalendarioItem.Size = new System.Drawing.Size(288, 22);
this.crearApunteCalendarioItem.Text = "Nue&vo apunte calendario";
//
// listadosPersonalizablesEditarItem
//
this.listadosPersonalizablesEditarItem.Name = "listadosPersonalizablesEditarItem";
this.listadosPersonalizablesEditarItem.Size = new System.Drawing.Size(288, 22);
this.listadosPersonalizablesEditarItem.Text = "Editar el listado personalizable";
//
// listadosPersonalizablesDuplicarItem
//
this.listadosPersonalizablesDuplicarItem.Name = "listadosPersonalizablesDuplicarItem";
this.listadosPersonalizablesDuplicarItem.Size = new System.Drawing.Size(288, 22);
this.listadosPersonalizablesDuplicarItem.Text = "Duplicar y editar el listado personalizable";
//
// ayudaPantallaToolStripMenuItem
//
this.ayudaPantallaToolStripMenuItem.Name = "ayudaPantallaToolStripMenuItem";
this.ayudaPantallaToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.ayudaPantallaToolStripMenuItem.Text = "Ayuda";
//
// _MenuContext_Opciones
//
this._MenuContext_Opciones.Font = new System.Drawing.Font("Segoe UI", 9.5F);
this._MenuContext_Opciones.Name = "ewcontextmenustripOpcProc";
this._MenuContext_Opciones.Size = new System.Drawing.Size(61, 4);
//
// FormBase
//
this.ClientSize = new System.Drawing.Size(284, 262);
this.KeyPreview = true;
this.Name = "FormBase";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
((System.ComponentModel.ISupportInitialize)(this._oErrorProvider)).EndInit();
this.contextMenuStripPantalla.ResumeLayout(false);
this.ResumeLayout(false);
}
/// <summary>
/// Devuelve una lista de los controles del tipo especificado
/// Si no pasamos ningún control lo busca en todo el formulario
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="toControl"></param>
/// <returns></returns>
public List<T> _FindControl<T>(Control toControl = null)
{
if (toControl == null)
toControl = this;
List<T> lstControls = new List<T>();
lstControls = AllControls(toControl).OfType<T>().ToList();
return lstControls;
}
/// <summary>
/// Devuelve todos los controles
/// </summary>
/// <param name="container"></param>
/// <returns></returns>
private IEnumerable<Control> AllControls(Control container)
{
foreach (Control control in container.Controls)
{
yield return control;
foreach (var innerControl in AllControls(control))
yield return innerControl;
}
}
/// <summary>
/// Capturamos el metodo para capturar los posibles mensajes enviados desde Eurowin (VFP)
/// </summary>
/// <param name="msgEW"></param>
protected override void WndProc(ref Message msgEW)
{
if (msgEW.Msg != WM_SYSCOMMAND || (msgEW.Msg == WM_SYSCOMMAND && ( _ExecuteCommandBefore == null || _ExecuteCommandBefore.Invoke(this, msgEW.WParam))))
{
base.WndProc(ref msgEW);
if (EW_GLOBAL._EsEjecutable)
{
//TODO: Temporal hasta que veamos que pasa realmente
if (!System.Diagnostics.Debugger.IsAttached && !NETVFP._ReceiveMessageFromVfp(ref msgEW))
return;
}
}
}
/// <summary>
/// PE-77741
/// Evento para realizar las mismas comprobaciones que en el método análogo de la pantalla de fox
/// En los distintos formularios de .net donde se quiera realizar este control, habrá que sobreescribir este evento
/// teniendo en cuenta que el objeto "taParams" es un array de objetos con los mismos parámetros y valores que en el
/// formulario equivalente de fox.
/// </summary>
/// <param name="taParams"></param>
/// <returns></returns>
public virtual bool _Init(object[] taParams)
{
if (taParams.Count() > 0)
{
_lAutomatico = true; //Bug 206971: Para poder saber en el formbase si estamos en una tarea programada
}
return true;
}
// FI PE-77741
/// <summary>
/// Método virtual que se invoca siempre que se muestra un formulario.
/// Nos sirve para recuperar los parametros del acceso directo.
/// </summary>
/// <param name="taParams">Parametros de inicio</param>
public virtual bool _InitAccesoDirecto(object[] taParams)
{
// Obtención de los parámetros según pantalla
if (taParams != null && taParams.Length > 0)
{
foreach (object loItem in taParams)
{
//Si trobem un parametre que començi per "idparam:" es que tenin propietats guardades a COMUNES!ACDIRPARAM
if (loItem.ToString().StartsWith(FUNCTIONS._AccesoDirectoParametro))
{
//Recuperem les propietats que mes tard asignarem al OnShown
return FUNCTIONS._RecuperarParametrosAccesoDirecto(loItem.ToString(), ref this._ValoresAccesoDirecto);
}
}
}
return false;
}
/// <summary>
/// Método virtual genérico para asignar los valores de los parametros de acceso directo en los controls del formulario a partir de la propiedad _ValoresAccesoDirecto.
/// Se llama en el OnShown del formulario. Si se añade logica al OnShown del formulario hijo, recordar hacer la llamada al padre (base.OnShown())
/// al finalizar la asignación de valores en los controles del propio formulario, asà evitaremos que los parametros del A.D. se machaquen con los nuestros
/// </summary>
public virtual bool _EstablecerParametrosFormulario()
{
if (DesignMode)
return true;
bool llOk = false;
if (this._ValoresAccesoDirecto.Count > 0)
{
string lcControl = "", lcPropiedad = "";
object lcValor = "";
foreach (KeyValuePair<string, object> loItem in this._ValoresAccesoDirecto)
{
//La key estara composada del "nom_control:propietat_a_definir"
//El value contindra el valor de la propietat
if (loItem.Key.Contains(":"))
{
lcControl = loItem.Key.Substring(0, loItem.Key.IndexOf(":"));
lcPropiedad = loItem.Key.Substring(loItem.Key.IndexOf(":") + 1);
lcValor = loItem.Value;
//Recuperamos el control del formulario
Control loControl = this.__FindControlRecursive(lcControl);
if (loControl != null)
{
//Recuperamos la propiedad del Control
Type myType = loControl.GetType();
PropertyInfo myPropInfo = myType.GetProperty(lcPropiedad);
if (myPropInfo != null)
{
if (loControl is txtFiltroBase)
{
llOk = true;
if (lcPropiedad == "_Desde")
(loControl as txtFiltroBase)._oFiltroDesde._Codigo = Convert.ToString(lcValor);
else if (lcPropiedad == "_Hasta")
(loControl as txtFiltroBase)._oFiltroHasta._Codigo = Convert.ToString(lcValor);
else if (lcPropiedad == "_Todos")
(loControl as txtFiltroBase)._Todos = Convert.ToBoolean(lcValor);
else if (lcPropiedad == "_Lista")
(loControl as txtFiltroBase)._Lista = new List<string>(lcValor.ToString().Split(','));
}
else
{
//Tratamiento de valores
object lcRealValue = lcValor;
if (loControl is ewcombobox && lcPropiedad.ToLower() == "selectedindex")
lcRealValue = Convert.ToInt32(lcRealValue);
else if ((loControl is ewcheckbox || loControl is ewradiobutton) && lcPropiedad.ToLower() == "checked")
lcRealValue = Convert.ToBoolean(lcRealValue);
//Establecemos el valor a la propiedad
try
{
myPropInfo.SetValue(loControl, lcRealValue, null);
llOk = true;
}
catch (Exception)// loEx)
{
//TODO : Errores derivados de establecer propiedades con tipos que no corresponden?
//loEx = loEx;
}
}
}
}
}
}
}
return llOk;
}
//PE-85758
/// <summary>
/// Método especÃfico para disponer ShapeContainers
/// </summary>
/// <param name="toShapeContainer"></param>
protected void _DisposeShapeContainer(Microsoft.VisualBasic.PowerPacks.ShapeContainer toShapeContainer)
{
if (toShapeContainer != null && !toShapeContainer.IsDisposed)
{
if (toShapeContainer.Shapes != null)
{
List<Microsoft.VisualBasic.PowerPacks.Shape> llisShapes = new List<Microsoft.VisualBasic.PowerPacks.Shape>();
foreach (Microsoft.VisualBasic.PowerPacks.Shape tshape in toShapeContainer.Shapes)
{
llisShapes.Add(tshape);
}
toShapeContainer.Shapes.Clear();
toShapeContainer.Shapes.Dispose();
foreach (Microsoft.VisualBasic.PowerPacks.Shape loShape in llisShapes)
{
loShape.Dispose();
}
}
toShapeContainer.Dispose();
}
}
[DllImport("user32")]
private static extern IntPtr GetWindowDC(IntPtr hwnd);
/// <summary>
/// Método para el control de errores mediante objetos de tipo ErrorProvider.
/// Se muestra un icono de error junto al control, sin efecto Blink y
/// con el icono alineado al centro de la parte izquierda del control.
/// => Es equivalente a _oErrorProvider.SetError(NombreControl, TextoError) pero alineando al icono
/// Para liberar al control del error basta con repetir la llamada al método pero con el texto de
/// error en blanco.
/// </summary>
/// <param name="toControl">Control sobre el que se va a establecer un icono de error.</param>
/// <param name="tcMensaje">Mensaje de error. Si esta en blanco libera el control de la notificación de error</param>
/// <param name="toAlineamiento">Alineamiento de la imagen</param>
public virtual void _ControlError(Control toControl, string tcMensaje, ErrorIconAlignment toAlineamiento = ErrorIconAlignment.MiddleLeft)
{
_oErrorProvider.BlinkStyle = ErrorBlinkStyle.NeverBlink;
_oErrorProvider.SetIconAlignment(toControl, toAlineamiento); // PARTE 93189. Se ha añadido el parámetro para poder pasarle la alineación
_oErrorProvider.SetError(toControl, tcMensaje);
// PE-92786. Obtener si ya hay algun error y concatenarlo
string lcError = "";
if (!string.IsNullOrWhiteSpace(tcMensaje))
{
lcError = this._oErrorProvider.GetError(this);
lcError += (!string.IsNullOrWhiteSpace(lcError) ? Environment.NewLine : string.Empty) + tcMensaje;
//if (toControl is IValidationControl)
//{
// ((IValidationControl)toControl)._ErrorValidation = true;
//}
}
//else
//{
// if (toControl is IValidationControl)
// {
// ((IValidationControl)toControl)._ErrorValidation = false;
// }
//}
}
/// <summary>
/// PE92638
/// Fa el ShowDialog però abans comprova l'accès al formulari
/// </summary>
public virtual void _ShowDialog()
{
if(CanShow()) ShowDialog();
}
/// <summary>
/// PE92638
/// Fa el Show però abans comprova l'accès al formulari
/// </summary>
public virtual void _Show()
{
if (CanShow()) Show();
}
private bool CanShow()
{
if (this._NivelAcceso != _TiposAccesosPantalla.Denegado && !this.IsDisposed) //T114218
{
if (_SaveReuseFormSettings && Usuario._This._PosicionFormulario)
{
using (FormManagerProperties loFormManagerProperties = new FormManagerProperties(this))
{
_ReusingFormSettings = loFormManagerProperties._SetProperties();
}
}
return true;
}
return false;
}
private List<IButtonBarraHerram> _oListButtonsSagePanel = null;
/// <summary>
/// Lista de botones para el panel Sage50
/// </summary>
internal List<IButtonBarraHerram> _ButtonsSagePanel
{
get
{
List<IButtonBarraHerram> loListButtonsAddons;
if ( _oListButtonsSagePanel == null )
{
_oListButtonsSagePanel = new List<IButtonBarraHerram>();
//Si la ayuda esta activa y hay ayuda o noticias
if(AyudaActiva() && _oResultadoAyuda._Ayuda) _oListButtonsSagePanel.Add(new AyudaNoticiasPantalla(this, _oResultadoAyuda));
_oListButtonsSagePanel.Add(new AyudaPantalla(this));
_oListButtonsSagePanel.Add(new OpcionesPantalla(this));
// Comprobar si hay que mostrar la opción de configuración de mensajes por usuario/pantalla
if (_messageBoxAutomatic)
_oListButtonsSagePanel.Add(new CfgUsabilidad(this));
loListButtonsAddons = AddonsController.Instance.Methods.BindFormBarraHerram(_Pantalla);
if (loListButtonsAddons is List<IButtonBarraHerram> && loListButtonsAddons.Count > 0) _oListButtonsSagePanel.AddRange(loListButtonsAddons);
}
return _oListButtonsSagePanel;
}
}
/// <summary>
/// PE-87849: Mostrar formulario de accesos mediante el usuario actual
/// </summary>
protected virtual void _Show_Accesos()
{
_Show_Accesos(_Pantalla);
}
/// <summary>
/// Mostrar formulario de accesos mediante el usuario actual, para un formulario especÃfico
/// </summary>
/// <param name="lcPantalla"></param>
protected void _Show_Accesos(String lcPantalla)
{
// PE-92757. Usamos usuario estático
if (!Usuario._This._Show_Gestion_Accesos(lcPantalla, _EliminarAcronimo(this.Text))) //PE-90297: pasamos el tÃtulo de la pantalla también por si no existe en los accesos añadirlo
{
_MessageBox("El usuario activo no tiene permisos para gestionar accesos a pantallas.", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
}
}
/// <summary>
/// PE-87840: Mostrar formulario de favoritos mediante el usuario actual
/// </summary>
protected void _Show_Favoritos()
{
// PE-92757. Usamos usuario estático
Usuario._This._Show_Favoritos(this._Pantalla, _EliminarAcronimo(this.Text)); //PE-92094: pasamos el tÃtulo de la pantalla también, igual que en los accesos
}
/// <summary>
/// PE-86720: mostrar la gestión de favoritos
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gestiónDeFavoritosToolStripMenuItem_Click(object sender, EventArgs e)
{
this._Show_Favoritos();
}
/// <summary>
/// PE-86720: mostrar la gestión de accesos
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gestiónDeAccesosToolStripMenuItem_Click(object sender, EventArgs e)
{
this._Show_Accesos();
}
/// <summary>
/// Crear acceso directo al formulario
/// PE-95995
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void crearAccesoDirectoToolStripMenuItem_Click(object sender, EventArgs e)
{
this._AsignarValoresAccesoDirecto();
//Creem el acces directe
sage.ew.functions.FUNCTIONS._CrearAccesoDirecto(_EliminarAcronimo(this.Text), this._Pantalla.Trim(), this._ValoresAccesoDirecto);
}
/// <summary>
/// Método virtual que se invoca antes de crear el acceso directo y que nos servirá para definir
/// los parámetros que se guradaran para el acceso directo a esta pantalla.
/// </summary>
/// <returns></returns>
public virtual bool _AsignarValoresAccesoDirecto()
{
return false;
}
//PE-96746
/// <summary>
/// Respuesta al click de crear apunte de calendario
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void crearApunteCalendarioItem_Click(object sender, EventArgs e)
{
functions.FUNCTIONS._CrearNuevoApunteCalendario(this, _Pantalla);
}
// PARTE 101745
/// <summary>
/// Respuesta al click de ayuda de la pantalla
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ayudaPantallaToolStripMenuItem_Click(object sender, EventArgs e)
{
_MostrarAyudaPantalla();
}
/// <summary>
/// Mostrar la ayuda de la pantalla
/// </summary>
public void _MostrarAyudaPantalla()
{
// Bug 154751. Mostrar o no la ayuda
// _PantallaAyuda tiene el valor de _Pantalla inicialmente
// De este modo podemos tener una pantalla sin gestión de accesos con la ayuda correspondiente
if (_MostrarAyudaF1) FUNCTIONS._MostrarAyudaPantalla(this._PantallaAyuda);
}
// FPARTE 101745
/// <summary>
/// Task 104592: Evento para ejecutar la creación de tarea programada
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void crearTareaProgramadaItem_Click(object sender, EventArgs e)
{
_CrearTareaProgramada(this._Pantalla);
}
/// <summary>
/// Evento para cargar una configuración de usuario/pantalla
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ConfiguracionesUsuarioItem_Click(object sender, EventArgs e)
{
ConfigUserForm loConfig;
// Guardar "Última configuración" antes de abrir el editor de configuraciones
//ConfigUserOptionsUpdateLastValues();
FormBase loFormClon = this.Clone();
loFormClon._ConfigUserForm = this._ConfigUserForm;
loFormClon._ConfigUserOptionsEditing = true;
loConfig = ConfigurationDesignManager.ShowInDesign(loFormClon, this._ConfigUserForm);
if (loConfig is ConfigUserForm)
{
_ConfigUserForm = loConfig;
_ConfigUserOptionsLoad(_ConfigUserForm._dicOpciones);
}
loFormClon.Close();
loFormClon.Dispose();
loFormClon = null;
}
#region Opciones de menu para listados personalizables
/// <summary>
/// Task 104592: Método virtual para crear una tarea programada (principalmente para el FormListado)
/// </summary>
/// <param name="tcPantalla"></param>
protected virtual void _CrearTareaProgramada(string tcPantalla)
{
}
/// <summary>
/// Generar un nuevo listado personalizable a partir de un listado existente previamente
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listadosPersonalizablesDuplicarItem_Click(object sender, EventArgs e)
{
this.Close();
ListadosPersonalizables loList = new ListadosPersonalizables();
if (!loList._DuplicarListado(this._Pantalla))
{
sage.ew.functions.FUNCTIONS._MessageBox(loList._Error_Message, this.Text, //"Informes personalizables"
MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
/// <summary>
/// Editar un listado personalizable previamente creado
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listadosPersonalizablesEditarItem_Click(object sender, EventArgs e)
{
this.Close();
ListadosPersonalizables loList = new ListadosPersonalizables();
if (!loList._CargarListado(this._Pantalla))
{
sage.ew.functions.FUNCTIONS._MessageBox(loList._Error_Message, this.Text, //"Informes personalizables"
MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
#endregion Opciones de menu para listados personalizables
private void ShowPropertiesToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Debugger.IsAttached)
{
if (_oTimerProperties is Timer)
{
ShowPropertiesToolStripMenuItem.Text = "Mostrar propiedades controles";
_InfoToolTip.Active = false;
_oTimerProperties.Stop();
_oTimerProperties.Tick -= _oTimerProperties_Tick;
_oTimerProperties.Dispose();
_oTimerProperties = null;
}
else
{
ShowPropertiesToolStripMenuItem.Text = "Ocultar propiedades controles";
_InfoToolTip.Active = true;
_oTimerProperties = new Timer();
_oTimerProperties.Tick += _oTimerProperties_Tick;
_oTimerProperties.Interval = 500;
_oTimerProperties.Start();
}
}
}
private void _oTimerProperties_Tick(object sender, EventArgs e)
{
Control loControl;
Point loPos = Cursor.Position;
if (Bounds.Contains(loPos))
{
loControl = _GetChild(loPos, this);
if ((loControl is Control && string.IsNullOrEmpty(_ControlNameShowing)) || (loControl is Control && loControl.Name != _ControlNameShowing))
{
_ControlNameShowing = _InfoToolTip._GetControl(loControl).Name;
_CreateTooltipInfo(loControl, loControl.DataBindings.Count > 0 ? loControl.Name : "");
if(!loControl.Enabled) _InfoToolTip.Show(loControl.Name, this, PointToClient(loPos));
}
else if(loControl == null && !string.IsNullOrEmpty(_ControlNameShowing))
{
_InfoToolTip.Hide(this);
_ControlNameShowing = string.Empty;
}
}
else
{
_ControlNameShowing = string.Empty;
}
}
private void _CreateTooltipInfo(Control toControl, string tcText = "")
{
string lcText;
lcText = string.IsNullOrEmpty(tcText) ? toControl.DataBindings.Count > 0 ? toControl.Name : "" : tcText;
if (!string.IsNullOrEmpty(lcText)) _InfoToolTip._ControlToolTip(toControl, lcText);
if (toControl.Controls.Count > 0)
{
foreach (Control loControl in toControl.Controls)
{
lcText = string.IsNullOrEmpty(tcText) ? loControl.DataBindings.Count > 0 ? loControl.Name : "" : tcText;
if (!string.IsNullOrEmpty(lcText))
{
_InfoToolTip._ControlToolTip(loControl, lcText);
}
if (loControl.Controls.Count > 0)
{
_CreateTooltipInfo(loControl, lcText);
}
}
}
}
private string _ControlNameShowing;
/// <summary>
/// Obtener un Control situado en un point
/// </summary>
/// <param name="toPoint"></param>
/// <param name="toBase"></param>
/// <returns></returns>
public Control _GetChild(Point toPoint, Control toBase)
{
Control loControl = null;
if(toBase is Control) loControl = toBase.GetChildAtPoint(toBase.PointToClient(toPoint), GetChildAtPointSkip.Invisible | GetChildAtPointSkip.Transparent);
return loControl?.Controls.Count > 0 && loControl?.DataBindings.Count == 0? _GetChild(toPoint, loControl) : loControl;
}
/// <summary>
/// Mostrar la información relevante de la pantalla que llama este método.
/// Se presentara la siguiente información:
/// - Titulo del formulario
/// - Librearia en la que esta contenido
/// - Nombre de la clase del formulario
/// - Pantalla (en caso de que esta definida)
/// En mantenimientos y documentos se presentara también la información de los addons que modifiquen el formulario:
/// - Nombre del addon / Libreria que carga (Si esta o no firmada y por quien)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void nombreFormularioToolStripMenuItem_Click(object sender, EventArgs e)
{
frmInfoFormul loFormul = new frmInfoFormul();
//Cabecera Información
loFormul.AddHeader("Información");
//Titulo del formulario
loFormul.AddLine("TÃtulo", _EliminarAcronimo(this.Text));
//Libreria
loFormul.AddLine("LibrerÃa", System.Reflection.Assembly.GetAssembly(this.GetType()).Location);
//Clase
loFormul.AddLine("Clase", this.GetType().Name);
//Pantalla. Presentamos el valo de _PantallaAyuda
if (!string.IsNullOrWhiteSpace(_PantallaAyuda))
loFormul.AddLine("Pantalla", _PantallaAyuda.Trim().ToUpper());
//S50MIG-3188 Añadir namespace
loFormul.AddLine("Namespace", GetType().Namespace);
//Addons
Dictionary<string, object> loAddons = null;
if (this is FormMante && (this as FormMante)._ewMante != null && (this as FormMante)._ewMante._Addons != null)
{
loAddons = (this as FormMante)._ewMante._Addons;
}
else if (this is frmGestionPerfil && (this as frmGestionPerfil)._Documento != null && (this as frmGestionPerfil)._Documento._Addons != null)
{
loAddons = (this as frmGestionPerfil)._Documento._Addons;
}
else if (this is FormListado && (this as FormListado)._Addons != null)
{
loAddons = (this as FormListado)._Addons;
}
if (loAddons != null && loAddons.Count > 0)
{
//Cabecera addons
loFormul.AddHeader("Add-ons");
//Info de addons
string lcDllAddon = "", lcSubjectName = "";
foreach (KeyValuePair<string, object> loItem in loAddons)
{
try
{
// Obtenemos el objeto de extensiones y lo configuramos
//loExtension = (_ExtensionMante)loItem.Value;
string lcName = "", lcTmp = "";
if (AddonsController.Instance.AddonsManager.IsLoaded(loItem.Key))
{
//Ruta a la dll
lcDllAddon = (AddonsController.Instance.AddonsManager.GetAddon(loItem.Key) as IModulo)._Libreria + ".dll";
lcTmp = lcDllAddon;
//Qui la firma
lcSubjectName = FUNCTIONS.GetDllNameInfo(lcDllAddon);
if (!string.IsNullOrWhiteSpace(lcSubjectName))
lcTmp += " (" + lcSubjectName + ")";
else
lcTmp += " (Sin firmar)";
//Quin tipus es
int lnTipo = (AddonsController.Instance.AddonsManager.GetAddon(loItem.Key) as IModulo)._Tipo;
switch (lnTipo)
{
case 2:
lcTmp += " - Extensión contratable";
break;
case 3:
lcTmp += " - Extensión personalizada";
break;
case 1:
case 0:
default:
lcTmp += " - Extensión incluida";
break;
}
//Nom del addon a mostrar
lcName = (AddonsController.Instance.AddonsManager.GetAddon(loItem.Key) as IModulo)._Nombre2;
if (string.IsNullOrWhiteSpace(lcName))
lcName = loItem.Key;
//Afegim una linia per cada addon
loFormul.AddLine(lcName, lcTmp);
}
}
catch (Exception loError)
{
DB.Registrar_Error(loError);
}
}
}
//Mostramos el formulario
loFormul._ShowDialog();
}
/// <summary>
/// Elimina el acronimo del texto
/// </summary>
/// <param name="toText"></param>
/// <returns></returns>
protected string _EliminarAcronimo(String toText)
{
String lcText = toText;
if (!String.IsNullOrEmpty(_Acronimo)) lcText = lcText.Replace(_Acronimo, "");
lcText = lcText.TrimStart();
return lcText;
}
/// <summary>
/// Respuesta al click de "Reordenar pantallas" (PE-120903)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void reordenarPantallasToolStripMenuItem_Click(object sender, EventArgs e)
{
// PE-103085
//NETVFP._Reordenar_Pantallas();
//NETVFP._Ejecutar_Funcion_VFP("fPripals50.Reordenar_pantallas");
}
private void contextMenuStripPantalla_Opening(object sender, CancelEventArgs e)
{
contextMenuStripPantalla.Items["gestiónDeFavoritosToolStripMenuItem"].Image = sage.ew.images.Properties.Resources.favorite_16;
contextMenuStripPantalla.Items["gestiónDeAccesosToolStripMenuItem"].Image = sage.ew.images.Properties.Resources.access_16;
contextMenuStripPantalla.Items["crearAccesoDirectoToolStripMenuItem"].Image = sage.ew.images.Properties.Resources.link_16;
contextMenuStripPantalla.Items["crearTareaProgramadaItem"].Image = sage.ew.images.Properties.Resources.TimeProgram; //TODO: utilizar otro icono
contextMenuStripPantalla.Items["ShowPropertiesToolStripMenuItem"].Image = _oTimerProperties is null ? Resources.led_green_16 : Resources.led_red_16;
bool lbSage50 = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50"));
//Acces directe sols per a Sage50
if (!lbSage50)
contextMenuStripPantalla.Items["crearAccesoDirectoToolStripMenuItem"].Visible = false;
else
contextMenuStripPantalla.Items["crearAccesoDirectoToolStripMenuItem"].Visible = _MostrarCrearAccesoDirecto; // PE-99866. Comprobar si mostar el ménu crear acceos directos
//Task 104592: Crear tarea programada
if (!lbSage50)
contextMenuStripPantalla.Items["crearTareaProgramadaItem"].Visible = false;
else
contextMenuStripPantalla.Items["crearTareaProgramadaItem"].Visible = _MostrarCrearTareaProgramada;
//PE-96746
contextMenuStripPantalla.Items["crearApunteCalendarioItem"].Image = sage.ew.images.Properties.Resources.calendar_16;
//PE-103520 : listados personalizables
contextMenuStripPantalla.Items["listadosPersonalizablesEditarItem"].Image = sage.ew.images.Properties.Resources.mant_edit_16;
contextMenuStripPantalla.Items["listadosPersonalizablesDuplicarItem"].Image = sage.ew.images.Properties.Resources.duplicate_16;
if (this is sage.ew.formul.Forms.FormListado)
{
if (!((sage.ew.formul.Forms.FormListado)this)._Personalizado)
{
contextMenuStripPantalla.Items["listadosPersonalizablesEditarItem"].Visible = false;
if (!lbSage50)
{
contextMenuStripPantalla.Items["listadosPersonalizablesDuplicarItem"].Visible = false;
}
else
{
contextMenuStripPantalla.Items["listadosPersonalizablesDuplicarItem"].Visible = _MostrarDuplicarListado;
}
}
}
else
{
contextMenuStripPantalla.Items["listadosPersonalizablesEditarItem"].Visible = false;
contextMenuStripPantalla.Items["listadosPersonalizablesDuplicarItem"].Visible = false;
}
ConfigureConfigUserOptions();
//PE-104540 - PE-104527 : Amagar l'opció de "Duplicar y editar el listado personalizable"
//contextMenuStripPantalla.Items["listadosPersonalizablesDuplicarItem"].Visible = false;
}
/// <summary>
/// Preparar menú de Configuraciones de usuario
/// </summary>
private void ConfigureConfigUserOptions()
{
configuracionesUsuarioItem.Image = sage.ew.images.Properties.Resources.icon_wrench;
if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50")) && _ConfigUserOptionsAllowed)
{
// Guardar "Última configuración"
//ConfigUserOptionsUpdateLastValues();
configuracionesUsuarioItem.Visible = true;
configuracionesUsuarioItemSeparator.Visible = true;
configuracionesUsuarioItem.DropDownItems.Clear();
configuracionesUsuarioItem.DropDownItems.Add(toolConfiguracionesToolStripMenuItem);
// Mostrar configuraciones de usuario
IEnumerable<ConfigUserForm> loList = _ConfigUserForm._ListaConfiguraciones().AsEnumerable();
IEnumerable<ConfigUserForm> loListConfUsers = loList.Where(f => f._Tipo == ConfigUserForm.ConfigUserType.UserValuesConfig);
IEnumerable<ConfigUserForm> loListDefaultConfUsers = loList.Where(f => f._Tipo != ConfigUserForm.ConfigUserType.UserValuesConfig);
// Mostrar configuraciones del usuario
_GenerateMenuItemsConfigUser(loListConfUsers.Where(f => !f._Publico));
// Mostrar configuraciones públicas
_GenerateMenuItemsConfigUser(loListConfUsers.Where(f => f._Publico));
// Mostrar configuraciones base
_GenerateMenuItemsConfigUser(loListDefaultConfUsers);
}
else
{
configuracionesUsuarioItem.Visible = false;
configuracionesUsuarioItemSeparator.Visible = false;
}
}
private void _GenerateMenuItemsConfigUser(IEnumerable<ConfigUserForm> toListConfigUsers)
{
if (toListConfigUsers != null && toListConfigUsers.Count() > 0)
{
configuracionesUsuarioItem.DropDownItems.Add(new ToolStripSeparator());
foreach (ConfigUserForm loConfig in toListConfigUsers)
{
ToolStripMenuItem loMenuItem = new ToolStripMenuItem();
loMenuItem.Text = loConfig._Config;
loMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
loMenuItem.Click += LoadConfigUserMenuItem_Click;
loMenuItem.Tag = loConfig;
if (_ConfigUserForm._Config.Trim() == loConfig._Config.Trim()) loMenuItem.Image = sage.ew.images.Properties.Resources.icon_right;
configuracionesUsuarioItem.DropDownItems.Add(loMenuItem);
}
}
}
/// <summary>
/// Evento para cargar configuración de usuario/pantalla des del menú de opciones
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LoadConfigUserMenuItem_Click(object sender, EventArgs e)
{
if (sender is ToolStripMenuItem && ((ToolStripMenuItem)sender).Tag is ConfigUserForm)
{
ConfigUserForm loConfig = ((ToolStripMenuItem)sender).Tag as ConfigUserForm;
// Antes de cargar la nueva configuración, guardamos "Última configuración"
//ConfigUserOptionsUpdateLastValues();
// Cargar nueva configuración
_ConfigUserForm = loConfig;
_ConfigUserOptionsLoad(_oConfigUserForm._dicOpciones);
}
}
/// <summary>
/// PE-96746: Comprobamos si hay que mostrar o no el la opció de apunte de calendario
/// </summary>
/// <returns>True si es visible</returns>
protected bool _PresentarApunteCalendario()
{
return sage.ew.functions.FUNCTIONS._PermitirApunteCalendario(_Pantalla);
}
#region Forzar Fuente
/// <summary>
/// Override OnShown
/// </summary>
/// <param name="e"></param>
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
if (EW_GLOBAL._EsEjecutable && _CambiarFuente)
{
if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50")))
{
if (estiloRevisado == false)
{
foreach (Control loControl in Controls)
{
FUNCTIONS._Cambiar_Font(loControl, "Segoe UI");
}
}
}
else
{
foreach (Control loControl in Controls)
{
FUNCTIONS._Cambiar_Font(loControl, "Arial");
}
}
}
// Bug 111565. En caso de abrir un formulario en modo MODAL, no dejamos minimizarlo
if (this.Modal)
this.MinimizeBox = false;
//Asignem els parametres del formulari suposant que en tingui
this._EstablecerParametrosFormulario();
}
#endregion Forzar Fuente
/// <summary>
/// Lista de toolStripMenuItems privada que se utiliza para poder gestionar las opciones del botón de opciones
/// </summary>
protected List<ToolStripMenuItemBase> _ToolStripMenuItemsBase = new List<ToolStripMenuItemBase>();
/// <summary>
/// Nuevo Ãtems del menú de opciones
///
/// Añade el Ãtem a la lista lstToolStripMenuItemBase para su posterior personalización
/// </summary>
/// <param name="tcNombre">Text del toolStripIEtem</param>
/// <param name="tcNombre_Objeto">Nombre del objeto</param>
/// <param name="tcTooltip">Tooltip del toolStripIEtem</param>
/// <returns></returns>
protected internal ToolStripMenuItemBase _AddToolStripMenuItemBase(string tcNombre, string tcNombre_Objeto, string tcTooltip)
{
ToolStripMenuItemBase loToolStripMenuItem = new ToolStripMenuItemBase(tcNombre, tcNombre_Objeto, tcTooltip);
_ToolStripMenuItemsBase.Add(loToolStripMenuItem);
return loToolStripMenuItem;
}
/// <summary>
/// Notificamos a los subscriptores por si desean realizar una configuración de las opciones a presentar
///
/// NOTA: únicamente operativo en los documentos de perfiles y asientos
/// </summary>
/// <param name="sender">Referencia al objeto de opciones</param>
protected internal void _GetOpcionesInvoke(object sender)
{
if (this is frmGestionPerfil || this is contabilidad.frmAsientos || this is frmListasPrevias || this.Name == "frmPrincipal")
_GetOpciones?.Invoke(new EventArgsOpciones(sender, _ToolStripMenuItemsBase));
else
throw new Exception("Este formulario no tiene ningún botón de Opciones o no está preparado para acceder a él");
}
/// <summary>
/// Notificamos a los subscriptores por si desean añadir opciones en el botón de herramientas
/// </summary>
/// <param name="sender">Referencia al ContextMenu de opciones del botón de herramientas</param>
/// <param name="tlstToolStripMenuItemsBase">Lista de ToolStripMenuItemBase</param>
private void GetOpcionesHerramientasInvoke(object sender , List<ToolStripMenuItemBase> tlstToolStripMenuItemsBase)
{
_GetOpcionesHerramientas?.Invoke(new EventArgsOpciones(sender, tlstToolStripMenuItemsBase));
}
// Task 111119 - 115209
/// <summary>
/// Inserta un control a los formularios, actualmente solo implementado en el formulario de perfiles
/// </summary>
/// <param name="toControl">Control a añadir al formulario, ha de cumplir la interfaz IAddonTabDoc, IAddonBotonMenuDoc, ...</param>
/// <returns>Devuelve si ha agregado el control al formulario</returns>
public virtual bool _InsertarObjetoAddon(Control toControl)
{
bool lITabDocAddon = false, llOk = true;
Control loControlContenedor = this; // Asignamos donde vamos a agregar los controles
string lcNombre_Objeto = toControl.Name;
lITabDocAddon = toControl is IAddonTabDoc;
if (lITabDocAddon)
llOk = AddonInsertarTabDocAddon(toControl, ref loControlContenedor);
else if ((toControl is IAddonBotonMenuDoc) && (toControl is Button)) // Task 123210: Creación de botones en la barra de herramientas de los Mantes
llOk = AddonBotonMenuDoc(toControl);
if (llOk)
loControlContenedor.Controls.Add(toControl);
return llOk;
}
/// <summary>
/// Inserta un sage.ew.botones.ToolStripButtonAddonMante a la barra de botones en los FormMante
/// </summary>
/// <param name="toolStripButtonAddonMante"></param>
/// <returns></returns>
public virtual bool _InsertarObjetoAddon(ToolStripItem toolStripButtonAddonMante)
{
return true;
}
/// <summary>
/// Para agregar opciones mediante los Addons en los mantenimientos y en el formulario de asientos
/// </summary>
/// <param name="toMenuStrip"></param>
protected internal virtual void _AddonPrepararMenu(ewcontextmenustrip toMenuStrip)
{
if (this.lstOpcionesMenuAddon != null && this.lstOpcionesMenuAddon.Count > 0)
{
string lcTituloMenu, lcName;
bool llSeparador = true;
foreach (Control loControl in this.lstOpcionesMenuAddon)
{
lcTituloMenu = ((IAddonBotonMenuDoc)loControl)._TituloMenu.Trim();
if (llSeparador && toMenuStrip.Items.Count > 0) // Añadimos un separador
{
toMenuStrip.Items.Add("-");
llSeparador = false;
}
toMenuStrip.Items.Add(lcTituloMenu);
lcName = loControl.Name;
if (string.IsNullOrWhiteSpace(lcName)) // Si el botón no tiene nombre le voy a asignar uno. Luego se realizará una búsqueda por el nombre del control
{
lcName = Convert.ToString(Guid.NewGuid()).ToUpper();
loControl.Name = lcName;
}
toMenuStrip.Items[toMenuStrip.Items.Count - 1].Name = lcName;
toMenuStrip.Items[toMenuStrip.Items.Count - 1].Click += new EventHandler(FormManteOpcionesAddon_Click);
}
}
}
// FTask 123210: Creación de botones en la barra de herramientas de los Mantes
/// <summary>
/// Ejecutamos la acción del botón correspondiente añadido mediante los Addons
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormManteOpcionesAddon_Click(object sender, EventArgs e)
{
string lcName = (sender as ToolStripMenuItem).Name;
Control[] loControl = this.Controls.Find(lcName, true);
if (loControl != null)
{
try
{
((ewbutton)loControl[0]).Enabled = true;
((ewbutton)loControl[0]).PerformClick(); // No sabemos el código que se ha programado. Si da error ...
}
catch (Exception loEx)
{
if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_prueva")) || System.Diagnostics.Debugger.IsAttached) // Gestión de error
this._MessageBox("Se ha producido la siguiente incidencia en la ejecución de la opción " + (sender as ToolStripMenuItem).Text.Trim() + ": " + Environment.NewLine + Environment.NewLine + loEx.Message, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
}
}
}
/// <summary>
/// Configuramos la clase "clsElementos" para poder instanciar correctamente el control dque cumple la interfaz "IAddonBotonMenuDoc" que se añadirán en el botón de opciones correspondiente
/// </summary>
/// <param name="toControl"></param>
private bool AddonBotonMenuDoc(Control toControl)
{
IAddonBotonMenuDoc loIAddonBotonMenuDoc = (IAddonBotonMenuDoc)toControl;
this.lstOpcionesMenuAddon.Add(toControl); // Añadimos la opción a la lista
// La propiedad _Menu no la vamos a utilizar, únicamente es para los perfiles
if (string.IsNullOrWhiteSpace(loIAddonBotonMenuDoc._TituloMenu) && toControl is ewbutton && !string.IsNullOrWhiteSpace(toControl.Text)) // Si no tiene tÃtulo la opción, asignaremos el texto del botón
loIAddonBotonMenuDoc._TituloMenu = toControl.Text;
// Cambiamos la posición del control para que no se vea. No lo podemos hacer invisible o al hacer el PerformClick no se ejecutará
toControl.Left = -10000;
toControl.Top = -10000;
toControl.Width = 1;
toControl.Height = 1;
AddonBotonMenuDocDocumento(toControl);
return true;
}
/// <summary>
/// Asignamos la referencia al documento al botón para realizar las acciones pertinentes
/// </summary>
/// <param name="toControl">Control de tipo IAddonBotonMenuDoc</param>
private void AddonBotonMenuDocDocumento(Control toControl)
{
dynamic loDocumento = null;
if (toControl is IAddonBotonMenuDoc)
{
if (this is FormMante)
loDocumento = ((FormMante)this)._ewMante;
else if (this is FormBaseDocumento)
loDocumento = ((FormBaseDocumento)this)._Documento;
if (loDocumento != null)
{
IAddonBotonMenuDoc loIAddonBotonMenuDoc = ((IAddonBotonMenuDoc)toControl);
loIAddonBotonMenuDoc._Documento = loDocumento;
}
}
}
/// <summary>
/// Realizamos el refresco recursivamente de los controles
/// </summary>
/// <param name="toContenedor">Objeto que puede ser contenedor de otros objetos</param>
/// <param name="tlChild">Recorre si los diferentes controles del UserControl para ejecutar el _Refresh</param>
private void ControlRefreshRecursive(Control toContenedor, bool tlChild = false)
{
if (!toContenedor.HasChildren)
return;
foreach (Control loControlChild in toContenedor.Controls)
_ControlRefresh(loControlChild, tlChild);
}
/// <summary>
/// Ejercución del método _Refresh del control
/// </summary>
/// <param name="toControl">Control al que se ejecutará el _Refresh</param>
/// <param name="tlChild">Recorre si los diferentes controles del UserControl para ejecutar el _Refresh</param>
public void _ControlRefresh(Control toControl, bool tlChild = false)
{
if (toControl == null)
return;
dynamic loControlDynamic = toControl;
bool llRefresh = (toControl is IAddonTabDoc);
if (llRefresh)
{
Type ltType = Type.GetType(loControlDynamic.GetType().AssemblyQualifiedName);
MethodInfo objMethod = ltType.GetMethod("_Refresh"); // Busca la propiedad pública con el nombre especificado, si no la encuentra devuelve null
llRefresh = (objMethod != null);
}
if (llRefresh)
{
try
{
loControlDynamic._Refresh();
}
catch (Exception loEx)
{
if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_prueva")) || System.Diagnostics.Debugger.IsAttached)
this._MessageBox("Se ha producido la siguiente incidencia en la ejecución del método Refresh del control " + toControl.Name + ": " + Environment.NewLine + Environment.NewLine + loEx.Message, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
}
}
ControlRefreshRecursive(toControl);
}
/// <summary>
/// Asociación de la propiedad _Documento al Addon recursivamente
/// </summary>
/// <param name="toContenedor">Objeto que puede ser contenedor de otros objetos</param>
/// /// <param name="toDocumento"></param>
/// <param name="tlChild">Recorre si los diferentes controles del UserControl para asociar el _Documento</param>
private void ControlDocumentoRecursive(Control toContenedor, dynamic toDocumento, bool tlChild = false)
{
if (!toContenedor.HasChildren)
return;
foreach (Control loControlChild in toContenedor.Controls)
_ControlDocumento(loControlChild, toDocumento, tlChild);
}
/// <summary>
/// Asociación de la propiedad _Documento al Addon
/// </summary>
/// <param name="toControl">Control al que se asignará el _Documento</param>
/// <param name="toDocumento">Referencia al documento</param>
/// <param name="tlChild">Recorre si los diferentes controles del UserControl para asociar el _Documento</param>
public void _ControlDocumento(Control toControl, dynamic toDocumento, bool tlChild = false)
{
if (toControl == null || toDocumento == null)
return;
dynamic loControlDynamic = toControl;
bool llDocumento = (toControl is IAddonTabDoc);
if (!llDocumento)
{
Type ltType = Type.GetType(loControlDynamic.GetType().AssemblyQualifiedName);
MemberInfo[] objMember = ltType.GetMember("_Documento");
llDocumento = (objMember.Length > 0);
}
if (llDocumento)
{
try
{
loControlDynamic._Documento = toDocumento;
}
catch (Exception loEx)
{
if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_prueva")) || System.Diagnostics.Debugger.IsAttached)
this._MessageBox("Se ha producido la siguiente incidencia en la asignación del documento al control " + toControl.Name + ": " + Environment.NewLine + Environment.NewLine + loEx.Message, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
}
}
ControlDocumentoRecursive(toControl, toDocumento, tlChild);
}
/// <summary>
/// Añadimos una addon en la página de en un ewtabcontrol
/// </summary>
/// <param name="toControl"></param>
/// <param name="toControlContenedor"></param>
/// <returns></returns>
private bool AddonInsertarTabDocAddon(Control toControl, ref Control toControlContenedor)
{
bool llOk = false;
ewtabcontrol loewtabcontrol = null;
foreach (Control loControl in Controls) // De momento no es necesario realizarlo recursivamente
{
if (loControl is ewtabcontrol)
{
loewtabcontrol = (ewtabcontrol)loControl;
break;
}
}
if (loewtabcontrol != null)
{
Control loPagina = AddonNuevaPaginaTabDoc(toControl, loewtabcontrol);
ewFlowLayoutPanel loewFlowLayoutPanel = this.AddonNuevoFlowLayoutPanel();
loewFlowLayoutPanel.Size = loewtabcontrol.TabPages[0].Size; // Asignamos las dimensiones de la primera página
loewFlowLayoutPanel.Dock = DockStyle.Fill;
loPagina.Controls.Add(loewFlowLayoutPanel); // Agregamos el flowlayout a la página para la gestión de las barras
loPagina.Dock = DockStyle.Fill;
toControlContenedor = loewFlowLayoutPanel; // Agregaremos el addon en el flowlayout de la página, por tanto actualizamos el controlContenedor
llOk = true;
}
return llOk;
}
/// <summary>
/// Instanciación de un "ewFlowLayoutPanel" que para que presenta las barras de desplazamiento si no cabe la totalidad del control que se pueda añadir
/// </summary>
/// <returns>Devuelve un "ewFlowLayoutPanel" para añadirlo en la página</returns>
private ewFlowLayoutPanel AddonNuevoFlowLayoutPanel()
{
ewFlowLayoutPanel loewFlowLayoutPanel = new ewFlowLayoutPanel();
loewFlowLayoutPanel.AutoScroll = true;
loewFlowLayoutPanel.WrapContents = true;
//if llResizeAddon
// loewFlowLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; // MEJORA: _Resize: Si nos interesa que el usuario gestiona el resize
// loewFlowLayoutPanel.Size = toControl.Size; // Asignamos las dimensiones del control
return loewFlowLayoutPanel;
}
/// <summary>
/// Obtener el nombre de una página
/// </summary>
/// <param name="toewtabcontrol"></param>
/// <returns></returns>
private string AddonNombrePagina(ewtabcontrol toewtabcontrol)
{
string lcName = string.Empty;
lcName = "AddonPagina" + Convert.ToString(toewtabcontrol.TabPages.Count);
return lcName;
}
/// <summary>
/// Añadimos una nueva página en un tabcontrol
/// </summary>
/// <param name="toControl"></param>
/// <param name="toewtabcontrol"></param>
/// <returns></returns>
private Control AddonNuevaPaginaTabDoc(Control toControl, ewtabcontrol toewtabcontrol)
{
Control loControlewTabPage = null;
string lcewtabcontrol = toewtabcontrol.Name, lcTitulo = string.Empty, lcName = string.Empty;
IAddonTabDoc loIAddonTabDoc = (IAddonTabDoc)toControl;
loControlewTabPage = new ewTabPage();
lcName = toControl.Name;
if (string.IsNullOrWhiteSpace(lcName))
lcName = AddonNombrePagina(toewtabcontrol);
loControlewTabPage.Name = lcName;
loControlewTabPage.Text = loIAddonTabDoc._TituloPagina; // Indicamos el tÃtulo de la página
toewtabcontrol.Controls.Add(loControlewTabPage);
if (loIAddonTabDoc._Principal) // Añadimos el tabpage como página principal
{
ewTabPage loewTabPage = (ewTabPage)loControlewTabPage;
CambiarIndiceTabpage(toewtabcontrol, loewTabPage, 0);
}
return loControlewTabPage;
}
/// <summary>
/// Reordenamos las páginas
/// </summary>
/// <param name="toewtabcontrol"></param>
/// <param name="toewTabPage"></param>
/// <param name="tnNuevoIndice"></param>
private void CambiarIndiceTabpage(ewtabcontrol toewtabcontrol, ewTabPage toewTabPage, int tnNuevoIndice)
{
ewTabPage loewTabPage;
int lnIndiceTabPage = toewtabcontrol.TabPages.IndexOf(toewTabPage); // Buscamos el Ãndice de la página que hemos agregado
for (int lnIndice = 0; lnIndice < lnIndiceTabPage; lnIndice++)
{
loewTabPage = (ewTabPage)toewtabcontrol.TabPages[0];
toewtabcontrol.TabPages.Remove(loewTabPage);
toewtabcontrol.TabPages.Add(loewTabPage);
}
// toewtabcontrol.TabPages.Insert(tnNuevoIndice, toewTabPage); // De momento como no funciona, hemos realizado el recorrido de las diferentes páginas
}
// FTask 111119 - 115209
#region Ayuda contextual
private bool _lFormActivated = true;
private bool _lPresentandoAyuda = false;
private BackgroundWorker _oBackgroundWorker;
private FormPanelNotificaciones _oFormAyuda = null;
/// <summary>
/// Para guardar el tÃtulo del formulario sin acrónimo ni sufijos
/// </summary>
private string _cTituloFormulario = "";
/// <summary>
/// Estructura para gestionar el resultado del BakcGroundWorker
/// </summary>
public struct oResultadoAyuda
{
/// <summary>
/// Indica si ha de presentar la ayuda
/// </summary>
public bool _Ayuda
{
get { return _lAyuda; }
set { _lAyuda = value; }
}
bool _lAyuda;
/// <summary>
/// Instancia de la ayuda contextual
/// </summary>
public IAyudaContextual _AyudaContextual
{
get { return _oAyudaContextual; }
set { _oAyudaContextual = value; }
}
IAyudaContextual _oAyudaContextual;
/// <summary>
/// Instancia del OnBoardingController
/// </summary>
public IOnBoardingController _OnBoardingController
{
get { return _oOnBoardingController; }
set { _oOnBoardingController = value; }
}
IOnBoardingController _oOnBoardingController;
}
/// <summary>
/// Controlamos que tenemos la ayuda activa
/// </summary>
/// <returns></returns>
private bool AyudaActiva()
{
if (Usuario._This._Opcesp("5004")) // No presentar ayuda en pantallas de Sage 50c
return false;
bool llActiva = true;
object loObject = EW_GLOBAL._GetVariable("wl_DesactivarOnBoarding");
if (loObject != null)
{
try
{
llActiva = !Convert.ToBoolean(loObject); // Tendremos que "wl_DesactivarOnBoarding" es true por eso negamos
}
catch (Exception)
{
}
}
return llActiva;
}
/// <summary>
/// Indica que la pantalla relacionada con la ayuda contextual / ayuda de Sage 50
/// </summary>
/// <returns></returns>
protected virtual string _PantallaAyuda
{
get { return _Pantalla; }
}
/// <summary>
/// Indica si ha de presentar el WalkTrought de la pantalla 0
/// </summary>
private bool _lPantalla0Showed = false;
/// <summary>
/// Marcamos que ya ha realizado el Login y no teniamos cargada aún la ayuda contextual al entrar la primera vez
/// </summary>
private bool _lPantalla0ShowAfterLogin = false;
/// <summary>
/// Instanciación del BackgroundWorker de la ayuda contextual
/// </summary>
private void AyudaOnBoarding()
{
if (!IsDisposed && !Disposing )
{
if (BarrasAyudaActivas())
{
if (string.IsNullOrWhiteSpace(_PantallaAyuda) || !AyudaActiva() || botonayuda == eAyudaContextual.Desactivada)
{
_FormSagePanel?._Show(_ButtonsSagePanel, this);
}
else
{
// Declaro un nuevo elemento
_oBackgroundWorker = new BackgroundWorker();
_oBackgroundWorker.WorkerSupportsCancellation = true;
_oBackgroundWorker.WorkerReportsProgress = false;
// Declaro los procesos
_oBackgroundWorker.DoWork += new DoWorkEventHandler(_ExecuteRunWorkerAyuda);
_oBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_RunWorkerCompletedAyuda);
// Ejecución asÃncrona
_oBackgroundWorker.RunWorkerAsync();
}
}
}
}
private bool BarrasAyudaActivas()
{
DataTable loDt = new DataTable();
string lcDataBase, lcComunes, lcSql;
if (!EW_GLOBAL._ContainsKey("wl_barras_ayuda_form"))
{
lcComunes = GrupoEmpresa._DbComunesRealGrupoPripal();
lcDataBase = DB.SQLDatabaseReal(lcComunes, "VARIABLE");
lcSql = $"SELECT VALOR FROM {lcDataBase} WHERE VARIABLE = 'NO_AYUDA' ";
if(DB.SQLExec(lcSql, ref loDt)) EW_GLOBAL.ValorEnClave_VarGlob("wl_barras_ayuda_form", loDt.Rows.Count == 0);
}
return Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_barras_ayuda_form", true));
}
/// <summary>
/// Método que define el proceso que se va a ejecutar en segundo plano de la ayuda contextual
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _ExecuteRunWorkerAyuda(object sender, DoWorkEventArgs e)
{
oResultadoAyuda loResult = new oResultadoAyuda();
loResult._Ayuda = false; // Asignamos el false por defecto
try
{
IOnBoardingController loOnBoardingController = FUNCTIONS._OnBoardingController();
if (loOnBoardingController != null && !loOnBoardingController._PlayingVideo)
{
IAyudaContextual loAyudaContextual = new AyudaContextual(loOnBoardingController);
loAyudaContextual._Load(_PantallaAyuda.ToUpper());
if (loAyudaContextual != null && (loAyudaContextual._Categorias.Count > 0 || loAyudaContextual._NumeroTotalNoticias > 0))
{
loResult._OnBoardingController = loOnBoardingController;
loResult._AyudaContextual = loAyudaContextual;
loResult._Ayuda = true;
}
}
}
catch (Exception loEx)
{
DB.Registrar_Error(loEx);
}
e.Result = loResult; // Asignamos el retorno
}
/// <summary>
/// Método que se ejecutará al finalizar el proceso de consulta de la ayuda contextual
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _RunWorkerCompletedAyuda(object sender, RunWorkerCompletedEventArgs e)
{
if (!e.Cancelled && e.Error == null &&!FormDisposed()) // Si no he sido cancelado ni he registrado excepción
{
_oResultadoAyuda = ((oResultadoAyuda)e.Result);
if (_oResultadoAyuda._Ayuda)
_BotonAyuda = eAyudaContextual.Si;
//CambiarBotonAyudaMensaje();
if (PresentarAyudaNuevasNoticias(_oResultadoAyuda))
{
if (EsPantalla0)
{
_oResultadoAyuda._Ayuda = true;
if (_lPantalla0ShowAfterLogin && !_lPantalla0Showed && Ayuda_FormularioActivo()) // Si ha entrado el Usuario y no ha presentado aún el WalkTrought, ahora lo presentamos si no hay ninguna pantalla abierta
_WalkthroughsPantalla0();
}
//else
// MostrarAyuda(_oResultadoAyuda._AyudaContextual);
}
_FormSagePanel?._Show(_ButtonsSagePanel, this);
}
}
/// <summary>
/// Controlamos si es necesario presentar las noticias relacionadas con la pantalla
/// Tenemos dos casos:
///
/// 1. Si tenemos activada la ayuda y tenemos noticias
/// 2. Existe alguna noticia nueva. La presentamos igualmente
/// </summary>
/// <param name="toResultadoAyuda"></param>
/// <returns></returns>
private bool PresentarAyudaNuevasNoticias(oResultadoAyuda toResultadoAyuda)
{
// Si la pantalla no tiene ayuda podemos salir
if (!_oResultadoAyuda._Ayuda)
return false;
// Tenemos activada la ayuda
if ( _oResultadoAyuda._AyudaContextual._PresentacionAyuda != Presentacion.No)
return true;
// Existe alguna noticia nueva a partir de la fecha que el usuario marcó no volver a presentar la ayuda
if (_oResultadoAyuda._AyudaContextual._NoticiasNuevasPendientesLeer > 0)
return true;
return false;
}
/// <summary>
/// Devuelve si es la pantalla 0 donde presentaremos el formulario frmWalktrhoughs si es necesario
/// </summary>
private bool EsPantalla0
{
get { return _PantallaAyuda == "PANTALLA0"; }
}
/// <summary>
/// Presentamos la pantalla de los Walktrhough si es necesario
/// </summary>
/// <returns></returns>
protected bool _WalkthroughsPantalla0()
{
_lPantalla0ShowAfterLogin = true; // Marcamos que ya ha pasado por el AfterLogin que es el único lugar de donde se realiza la llamada
if (EsPantalla0 && !FUNCTIONS._CanUseWebView()) // No presentamos mensaje, validamos si tenemos el RunTime del WebView2 independientemente de que tengamos o no información de la pantalla 0
return false;
if (_oResultadoAyuda._Ayuda == false || !EsPantalla0 || _lPantalla0Showed)
return false;
_lPantalla0Showed = true; // De momento marcamos que ya se ha visto o podrian salir dos instancias
IOnBoardingController loOnBoardingController = FUNCTIONS._OnBoardingController();
if (loOnBoardingController != null)
{
_lPantalla0Showed = ((OnBoardingControllerSage50)loOnBoardingController)._ShowWalkthroughs(_oResultadoAyuda._AyudaContextual);
return _lPantalla0Showed;
}
else
return false;
}
/// <summary>
/// Calculamos la posición del formulario de ayuda del OnBoarding
/// </summary>
/// <param name="toRectangle">Rectangle del formualrio de ayuda</param>
/// <returns></returns>
private Point CalculateLocationAyuda(Rectangle toRectangle)
{
Rectangle loRectScreen = Screen.PrimaryScreen.WorkingArea;
Point loPoint = toRectangle.Location;
int lnOffsetX = 20, lnOffsetY = 50;
if (Location.X < 0) // Tenemos pantallas como los mantenimientos o perfiles donde el formulario se presenta en una posición fuera de la area visible
{
loPoint.X = (loRectScreen.Width / 2) + (Size.Width / 2) - lnOffsetX;
loPoint.Y = (loRectScreen.Height / 2) - (Size.Height / 2) + lnOffsetY;
}
else
{
loPoint.X = Location.X + Size.Width - lnOffsetX;
loPoint.Y = Location.Y + lnOffsetY;
}
if (loPoint.X + toRectangle.Size.Width > loRectScreen.Width)
loPoint.X = loRectScreen.Width - lnOffsetX - toRectangle.Width;
if (loPoint.Y + toRectangle.Size.Height > loRectScreen.Height)
loPoint.Y = (loRectScreen.Height / 2) - (toRectangle.Height / 2);
return loPoint;
}
/// <summary>
/// Posicionaremos la pantalla donde el usuario la dejó previamente
/// Controlamos que sea en una area visible
/// </summary>
/// <param name="toAyudaContextual">Referencia a la ayuda contextual</param>
private void LocationAyuda(IAyudaContextual toAyudaContextual)
{
Point loPoint = new Point(toAyudaContextual._Left, toAyudaContextual._Top);
if (loPoint == new Point(0, 0) ||
loPoint.X > Screen.PrimaryScreen.Bounds.Size.Width || loPoint.Y > Screen.PrimaryScreen.Bounds.Size.Height)
{
loPoint = CalculateLocationAyuda(_oFormAyuda.Bounds);
}
if (toAyudaContextual._Height > 0)
{
Size loSize = _oFormAyuda.Size;
loSize.Height = toAyudaContextual._Height;
if (_oFormAyuda.Size != loSize)
_oFormAyuda.Size = loSize;
}
_oFormAyuda.Location = loPoint;
}
/// <summary>
/// Controlamos si el formulario se está destruyendo
/// </summary>
/// <returns></returns>
protected virtual bool FormDisposed()
{
return (IsDisposed || Disposing);
}
private void CambiarBotonAyudaMensaje()
{
if (!EsPantalla0 && _oResultadoAyuda._AyudaContextual != null && !FormDisposed())
{
int numnoticias = _oResultadoAyuda._AyudaContextual._NoticiasPendientesLeer;
if(menu is IActiveMenu)
{
foreach (ActiveButton item in menu.Items)
{
if (item.Name == "Ayuda")
{
// NOTICIAS ONBOARDING. Si tenemos noticias, sustituimos icono de Info por la Campana
if (numnoticias > 0)
{
string lcTooltip = " Noticias";
item.ForeColor = Color.FromArgb(0, 129, 70);
item.Font = new Font("Segoe UI", 8.5F);
item._ModColors = false;
if (numnoticias == 1)
{
item.Text = "1";
lcTooltip = " Noticia";
}
else if (numnoticias < 100)
item.Text = numnoticias.ToString().Trim();
else
item.Text = "99+";
item.Image = sage.ew.images.Properties.Resources.bell_green_16;
menu.ToolTip.SetToolTip(item, item.Text+lcTooltip);
item.ChangeColors();
}
break;
}
}
}
}
}
/// <summary>
/// Gestión de la presentación del formulario de configuración de usabilidad
/// </summary>
private void MostrarCfgUsabilidad()
{
// En el formulario de configuración se comprueba si hay mensajes configurados en el formulario/usuario actual
// y se muestra mensaje sino hay y se cierra.
frmUserFormConfig frmCfg = new frmUserFormConfig(Usuario._This._Codigo, this._Pantalla, this._ObtenerText(false));
frmCfg._ShowDialog();
}
/// <summary>
/// Gestión de la presentación de la ayuda contextual
/// </summary>
/// <param name="toAyudaContextual">Instancia de la ayuda contextual cuando venimos del BackGroundWordker</param>
private void MostrarAyuda(IAyudaContextual toAyudaContextual = null)
{
if (_oFormAyuda != null && !_oFormAyuda.IsDisposed && !_oFormAyuda.Disposing)
{
ShowAyuda();
return;
}
if (FormDisposed())
return;
IOnBoardingController loOnBoardingController = FUNCTIONS._OnBoardingController();
if (toAyudaContextual == null) // Venimos del botón de opciones. Se ha de instanciar la ayuda contextual
{
toAyudaContextual = new AyudaContextual(loOnBoardingController);
toAyudaContextual._Load(_Pantalla.ToUpper());
((OnBoardingControllerSage50)loOnBoardingController)._WebService("mostrar", tcPantalla: _Pantalla.ToUpper()); // Acción de mostrar ayuda
}
if (FormDisposed())
return;
_oFormAyuda = new FormPanelNotificaciones(_Pantalla.ToUpper(), Text, loOnBoardingCont³nDeFavoritosToolStripMenuItem,
4310 this.gestià nDeAccesosToolStripMenuItem,
this.crearAccesoDirectoToolStripMenuItem,
this.crearTareaProgramadaItem,
this.crearApunteCalendarioItem,
this.listadosPersonalizablesEditarItem,
this.listadosPersonalizablesDuplicarItem,
this.ayudaPantallaToolStripMenuItem,
this.ShowPropertiesToolStripMenuItem});
this.contextMenuStripPantalla.Name = "contextMenuStripPantalla";
this.contextMenuStripPantalla.Size = new System.Drawing.Size(289, 230);
//
// configuracionesUsuarioItem
//
this.configuracionesUsuarioItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolConfiguracionesToolStripMenuItem});
this.configuracionesUsuarioItem.Name = "configuracionesUsuarioItem";
this.configuracionesUsuarioItem.Size = new System.Drawing.Size(288, 22);
this.configuracionesUsuarioItem.Text = "Configuraciones de usuario";
//
// toolConfiguracionesToolStripMenuItem
//
this.toolConfiguracionesToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.toolConfiguracionesToolStripMenuItem.Name = "toolConfiguracionesToolStripMenuItem";
this.toolConfiguracionesToolStripMenuItem.Size = new System.Drawing.Size(221, 22);
this.toolConfiguracionesToolStripMenuItem.Text = "Diseñador configuraciones";
//
// configuracionesUsuarioItemSeparator
//
this.configuracionesUsuarioItemSeparator.Name = "configuracionesUsuarioItemSeparator";
this.configuracionesUsuarioItemSeparator.Size = new System.Drawing.Size(285, 6);
//
// nombreFormularioToolStripMenuItem
//
this.nombreFormularioToolStripMenuItem.Name = "nombreFormularioToolStripMenuItem";
this.nombreFormularioToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.nombreFormularioToolStripMenuItem.Text = "Nombre del formulario";
//
// ShowPropertiesToolStripMenuItem
//
this.ShowPropertiesToolStripMenuItem.Name = "ShowPropertiesToolStripMenuItem";
this.ShowPropertiesToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.ShowPropertiesToolStripMenuItem.Text = "Mostrar propiedades controles";
//
// gestiónDeFavoritosToolStripMenuItem
//
this.gestiónDeFavoritosToolStripMenuItem.Name = "gestiónDeFavoritosToolStripMenuItem";
this.gestiónDeFavoritosToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.gestiónDeFavoritosToolStripMenuItem.Text = "Gestión de favoritos";
//
// gestiónDeAccesosToolStripMenuItem
//
this.gestiónDeAccesosToolStripMenuItem.Name = "gestiónDeAccesosToolStripMenuItem";
this.gestiónDeAccesosToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.gestiónDeAccesosToolStripMenuItem.Text = "Gestión de accesos";
//
// crearAccesoDirectoToolStripMenuItem
//
this.crearAccesoDirectoToolStripMenuItem.Name = "crearAccesoDirectoToolStripMenuItem";
this.crearAccesoDirectoToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.crearAccesoDirectoToolStripMenuItem.Text = "Crear acceso directo";
//
// crearTareaProgramadaItem
//
this.crearTareaProgramadaItem.Name = "crearTareaProgramadaItem";
this.crearTareaProgramadaItem.Size = new System.Drawing.Size(288, 22);
this.crearTareaProgramadaItem.Text = "Crear tarea programada";
//
// crearApunteCalendarioItem
//
this.crearApunteCalendarioItem.Name = "crearApunteCalendarioItem";
this.crearApunteCalendarioItem.Size = new System.Drawing.Size(288, 22);
this.crearApunteCalendarioItem.Text = "Nue&vo apunte calendario";
//
// listadosPersonalizablesEditarItem
//
this.listadosPersonalizablesEditarItem.Name = "listadosPersonalizablesEditarItem";
this.listadosPersonalizablesEditarItem.Size = new System.Drawing.Size(288, 22);
this.listadosPersonalizablesEditarItem.Text = "Editar el listado personalizable";
//
// listadosPersonalizablesDuplicarItem
//
this.listadosPersonalizablesDuplicarItem.Name = "listadosPersonalizablesDuplicarItem";
this.listadosPersonalizablesDuplicarItem.Size = new System.Drawing.Size(288, 22);
this.listadosPersonalizablesDuplicarItem.Text = "Duplicar y editar el listado personalizable";
//
// ayudaPantallaToolStripMenuItem
//
this.ayudaPantallaToolStripMenuItem.Name = "ayudaPantallaToolStripMenuItem";
this.ayudaPantallaToolStripMenuItem.Size = new System.Drawing.Size(288, 22);
this.ayudaPantallaToolStripMenuItem.Text = "Ayuda";
//
// _MenuContext_Opciones
//
this._MenuContext_Opciones.Font = new System.Drawing.Font("Segoe UI", 9.5F);
this._MenuContext_Opciones.Name = "ewcontextmenustripOpcProc";
this._MenuContext_Opciones.Size = new System.Drawing.Size(61, 4);
//
// FormBase
//
this.ClientSize = new System.Drawing.Size(284, 262);
this.KeyPreview = true;
this.Name = "FormBase";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
((System.ComponentModel.ISupportInitialize)(this._oErrorProvider)).EndInit();
this.contextMenuStripPantalla.ResumeLayout(false);
this.ResumeLayout(false);
}
/// <summary>
/// Devuelve una lista de los controles del tipo especificado
/// Si no pasamos ningún control lo busca en todo el formulario
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="toControl"></param>
/// <returns></returns>
public List<T> _FindControl<T>(Control toControl = null)
{
if (toControl == null)
toControl = this;
List<T> lstControls = new List<T>();
lstControls = AllControls(toControl).OfType<T>().ToList();
return lstControls;
}
/// <summary>
/// Devuelve todos los controles
/// </summary>
/// <param name="container"></param>
/// <returns></returns>
private IEnumerable<Control> AllControls(Control container)
{
foreach (Control control in container.Controls)
{
yield return control;
foreach (var innerControl in AllControls(control))
yield return innerControl;
}
}
/// <summary>
/// Capturamos el metodo para capturar los posibles mensajes enviados desde Eurowin (VFP)
/// </summary>
/// <param name="msgEW"></param>
protected override void WndProc(ref Message msgEW)
{
if (msgEW.Msg != WM_SYSCOMMAND || (msgEW.Msg == WM_SYSCOMMAND && ( _ExecuteCommandBefore == null || _ExecuteCommandBefore.Invoke(this, msgEW.WParam))))
{
base.WndProc(ref msgEW);
if (EW_GLOBAL._EsEjecutable)
{
//TODO: Temporal hasta que veamos que pasa realmente
if (!System.Diagnostics.Debugger.IsAttached && !NETVFP._ReceiveMessageFromVfp(ref msgEW))
return;
}
}
}
/// <summary>
/// PE-77741
/// Evento para realizar las mismas comprobaciones que en el método análogo de la pantalla de fox
/// En los distintos formularios de .net donde se quiera realizar este control, habrá que sobreescribir este evento
/// teniendo en cuenta que el objeto "taParams" es un array de objetos con los mismos parámetros y valores que en el
/// formulario equivalente de fox.
/// </summary>
/// <param name="taParams"></param>
/// <returns></returns>
public virtual bool _Init(object[] taParams)
{
if (taParams.Count() > 0)
{
_lAutomatico = true; //Bug 206971: Para poder saber en el formbase si estamos en una tarea programada
}
return true;
}
// FI PE-77741
/// <summary>
/// Método virtual que se invoca siempre que se muestra un formulario.
/// Nos sirve para recuperar los parametros del acceso directo.
/// </summary>
/// <param name="taParams">Parametros de inicio</param>
public virtual bool _InitAccesoDirecto(object[] taParams)
{
// Obtención de los parámetros según pantalla
if (taParams != null && taParams.Length > 0)
{
foreach (object loItem in taParams)
{
//Si trobem un parametre que començi per "idparam:" es que tenin propietats guardades a COMUNES!ACDIRPARAM
if (loItem.ToString().StartsWith(FUNCTIONS._AccesoDirectoParametro))
{
//Recuperem les propietats que mes tard asignarem al OnShown
return FUNCTIONS._RecuperarParametrosAccesoDirecto(loItem.ToString(), ref this._ValoresAccesoDirecto);
}
}
}
return false;
}
/// <summary>
/// Método virtual genérico para asignar los valores de los parametros de acceso directo en los controls del formulario a partir de la propiedad _ValoresAccesoDirecto.
/// Se llama en el OnShown del formulario. Si se añade logica al OnShown del formulario hijo, recordar hacer la llamada al padre (base.OnShown())
/// al finalizar la asignación de valores en los controles del propio formulario, asà evitaremos que los parametros del A.D. se machaquen con los nuestros
/// </summary>
public virtual bool _EstablecerParametrosFormulario()
{
if (DesignMode)
return true;
bool llOk = false;
if (this._ValoresAccesoDirecto.Count > 0)
{
string lcControl = "", lcPropiedad = "";
object lcValor = "";
foreach (KeyValuePair<string, object> loItem in this._ValoresAccesoDirecto)
{
//La key estara composada del "nom_control:propietat_a_definir"
//El value contindra el valor de la propietat
if (loItem.Key.Contains(":"))
{
lcControl = loItem.Key.Substring(0, loItem.Key.IndexOf(":"));
lcPropiedad = loItem.Key.Substring(loItem.Key.IndexOf(":") + 1);
lcValor = loItem.Value;
//Recuperamos el control del formulario
Control loControl = this.__FindControlRecursive(lcControl);
if (loControl != null)
{
//Recuperamos la propiedad del Control
Type myType = loControl.GetType();
PropertyInfo myPropInfo = myType.GetProperty(lcPropiedad);
if (myPropInfo != null)
{
if (loControl is txtFiltroBase)
{
llOk = true;
if (lcPropiedad == "_Desde")
(loControl as txtFiltroBase)._oFiltroDesde._Codigo = Convert.ToString(lcValor);
else if (lcPropiedad == "_Hasta")
(loControl as txtFiltroBase)._oFiltroHasta._Codigo = Convert.ToString(lcValor);
else if (lcPropiedad == "_Todos")
(loControl as txtFiltroBase)._Todos = Convert.ToBoolean(lcValor);
else if (lcPropiedad == "_Lista")
(loControl as txtFiltroBase)._Lista = new List<string>(lcValor.ToString().Split(','));
}
else
{
//Tratamiento de valores
object lcRealValue = lcValor;
if (loControl is ewcombobox && lcPropiedad.ToLower() == "selectedindex")
lcRealValue = Convert.ToInt32(lcRealValue);
else if ((loControl is ewcheckbox || loControl is ewradiobutton) && lcPropiedad.ToLower() == "checked")
lcRealValue = Convert.ToBoolean(lcRealValue);
//Establecemos el valor a la propiedad
try
{
myPropInfo.SetValue(loControl, lcRealValue, null);
llOk = true;
}
catch (Exception)// loEx)
{
//TODO : Errores derivados de establecer propiedades con tipos que no corresponden?
//loEx = loEx;
}
}
}
}
}
}
}
return llOk;
}
//PE-85758
/// <summary>
/// Método especÃfico para disponer ShapeContainers
/// </summary>
/// <param name="toShapeContainer"></param>
protected void _DisposeShapeContainer(Microsoft.VisualBasic.PowerPacks.ShapeContainer toShapeContainer)
{
if (toShapeContainer != null && !toShapeContainer.IsDisposed)
{
if (toShapeContainer.Shapes != null)
{
List<Microsoft.VisualBasic.PowerPacks.Shape> llisShapes = new List<Microsoft.VisualBasic.PowerPacks.Shape>();
foreach (Microsoft.VisualBasic.PowerPacks.Shape tshape in toShapeContainer.Shapes)
{
llisShapes.Add(tshape);
}
toShapeContainer.Shapes.Clear();
toShapeContainer.Shapes.Dispose();
foreach (Microsoft.VisualBasic.PowerPacks.Shape loShape in llisShapes)
{
loShape.Dispose();
}
}
toShapeContainer.Dispose();
}
}
[DllImport("user32")]
private static extern IntPtr GetWindowDC(IntPtr hwnd);
/// <summary>
/// Método para el control de errores mediante objetos de tipo ErrorProvider.
/// Se muestra un icono de error junto al control, sin efecto Blink y
/// con el icono alineado al centro de la parte izquierda del control.
/// => Es equivalente a _oErrorProvider.SetError(NombreControl, TextoError) pero alineando al icono
/// Para liberar al control del error basta con repetir la llamada al método pero con el texto de
/// error en blanco.
/// </summary>
/// <param name="toControl">Control sobre el que se va a establecer un icono de error.</param>
/// <param name="tcMensaje">Mensaje de error. Si esta en blanco libera el control de la notificación de error</param>
/// <param name="toAlineamiento">Alineamiento de la imagen</param>
public virtual void _ControlError(Control toControl, string tcMensaje, ErrorIconAlignment toAlineamiento = ErrorIconAlignment.MiddleLeft)
{
_oErrorProvider.BlinkStyle = ErrorBlinkStyle.NeverBlink;
_oErrorProvider.SetIconAlignment(toControl, toAlineamiento); // PARTE 93189. Se ha añadido el parámetro para poder pasarle la alineación
_oErrorProvider.SetError(toControl, tcMensaje);
// PE-92786. Obtener si ya hay algun error y concatenarlo
string lcError = "";
if (!string.IsNullOrWhiteSpace(tcMensaje))
{
lcError = this._oErrorProvider.GetError(this);
lcError += (!string.IsNullOrWhiteSpace(lcError) ? Environment.NewLine : string.Empty) + tcMensaje;
//if (toControl is IValidationControl)
//{
// ((IValidationControl)toControl)._ErrorValidation = true;
//}
}
//else
//{
// if (toControl is IValidationControl)
// {
// ((IValidationControl)toControl)._ErrorValidation = false;
// }
//}
}
/// <summary>
/// PE92638
/// Fa el ShowDialog però abans comprova l'accès al formulari
/// </summary>
public virtual void _ShowDialog()
{
if(CanShow()) ShowDialog();
}
/// <summary>
/// PE92638
/// Fa el Show però abans comprova l'accès al formulari
/// </summary>
public virtual void _Show()
{
if (CanShow()) Show();
}
private bool CanShow()
{
if (this._NivelAcceso != _TiposAccesosPantalla.Denegado && !this.IsDisposed) //T114218
{
if (_SaveReuseFormSettings && Usuario._This._PosicionFormulario)
{
using (FormManagerProperties loFormManagerProperties = new FormManagerProperties(this))
{
_ReusingFormSettings = loFormManagerProperties._SetProperties();
}
}
return true;
}
return false;
}
private List<IButtonBarraHerram> _oListButtonsSagePanel = null;
/// <summary>
/// Lista de botones para el panel Sage50
/// </summary>
internal List<IButtonBarraHerram> _ButtonsSagePanel
{
get
{
List<IButtonBarraHerram> loListButtonsAddons;
if ( _oListButtonsSagePanel == null )
{
_oListButtonsSagePanel = new List<IButtonBarraHerram>();
//Si la ayuda esta activa y hay ayuda o noticias
if(AyudaActiva() && _oResultadoAyuda._Ayuda) _oListButtonsSagePanel.Add(new AyudaNoticiasPantalla(this, _oResultadoAyuda));
_oListButtonsSagePanel.Add(new AyudaPantalla(this));
_oListButtonsSagePanel.Add(new OpcionesPantalla(this));
// Comprobar si hay que mostrar la opción de configuración de mensajes por usuario/pantalla
if (_messageBoxAutomatic)
_oListButtonsSagePanel.Add(new CfgUsabilidad(this));
loListButtonsAddons = AddonsController.Instance.Methods.BindFormBarraHerram(_Pantalla);
if (loListButtonsAddons is List<IButtonBarraHerram> && loListButtonsAddons.Count > 0) _oListButtonsSagePanel.AddRange(loListButtonsAddons);
}
return _oListButtonsSagePanel;
}
}
/// <summary>
/// PE-87849: Mostrar formulario de accesos mediante el usuario actual
/// </summary>
protected virtual void _Show_Accesos()
{
_Show_Accesos(_Pantalla);
}
/// <summary>
/// Mostrar formulario de accesos mediante el usuario actual, para un formulario especÃfico
/// </summary>
/// <param name="lcPantalla"></param>
protected void _Show_Accesos(String lcPantalla)
{
// PE-92757. Usamos usuario estático
if (!Usuario._This._Show_Gestion_Accesos(lcPantalla, _EliminarAcronimo(this.Text))) //PE-90297: pasamos el tÃtulo de la pantalla también por si no existe en los accesos añadirlo
{
_MessageBox("El usuario activo no tiene permisos para gestionar accesos a pantallas.", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
}
}
/// <summary>
/// PE-87840: Mostrar formulario de favoritos mediante el usuario actual
/// </summary>
protected void _Show_Favoritos()
{
// PE-92757. Usamos usuario estático
Usuario._This._Show_Favoritos(this._Pantalla, _EliminarAcronimo(this.Text)); //PE-92094: pasamos el tÃtulo de la pantalla también, igual que en los accesos
}
/// <summary>
/// PE-86720: mostrar la gestión de favoritos
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gestiónDeFavoritosToolStripMenuItem_Click(object sender, EventArgs e)
{
this._Show_Favoritos();
}
/// <summary>
/// PE-86720: mostrar la gestión de accesos
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gestiónDeAccesosToolStripMenuItem_Click(object sender, EventArgs e)
{
this._Show_Accesos();
}
/// <summary>
/// Crear acceso directo al formulario
/// PE-95995
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void crearAccesoDirectoToolStripMenuItem_Click(object sender, EventArgs e)
{
this._AsignarValoresAccesoDirecto();
//Creem el acces directe
sage.ew.functions.FUNCTIONS._CrearAccesoDirecto(_EliminarAcronimo(this.Text), this._Pantalla.Trim(), this._ValoresAccesoDirecto);
}
/// <summary>
/// Método virtual que se invoca antes de crear el acceso directo y que nos servirá para definir
/// los parámetros que se guradaran para el acceso directo a esta pantalla.
/// </summary>
/// <returns></returns>
public virtual bool _AsignarValoresAccesoDirecto()
{
return false;
}
//PE-96746
/// <summary>
/// Respuesta al click de crear apunte de calendario
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void crearApunteCalendarioItem_Click(object sender, EventArgs e)
{
functions.FUNCTIONS._CrearNuevoApunteCalendario(this, _Pantalla);
}
// PARTE 101745
/// <summary>
/// Respuesta al click de ayuda de la pantalla
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ayudaPantallaToolStripMenuItem_Click(object sender, EventArgs e)
{
_MostrarAyudaPantalla();
}
/// <summary>
/// Mostrar la ayuda de la pantalla
/// </summary>
public void _MostrarAyudaPantalla()
{
// Bug 154751. Mostrar o no la ayuda
// _PantallaAyuda tiene el valor de _Pantalla inicialmente
// De este modo podemos tener una pantalla sin gestión de accesos con la ayuda correspondiente
if (_MostrarAyudaF1) FUNCTIONS._MostrarAyudaPantalla(this._PantallaAyuda);
}
// FPARTE 101745
/// <summary>
/// Task 104592: Evento para ejecutar la creación de tarea programada
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void crearTareaProgramadaItem_Click(object sender, EventArgs e)
{
_CrearTareaProgramada(this._Pantalla);
}
/// <summary>
/// Evento para cargar una configuración de usuario/pantalla
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ConfiguracionesUsuarioItem_Click(object sender, EventArgs e)
{
ConfigUserForm loConfig;
// Guardar "Última configuración" antes de abrir el editor de configuraciones
//ConfigUserOptionsUpdateLastValues();
FormBase loFormClon = this.Clone();
loFormClon._ConfigUserForm = this._ConfigUserForm;
loFormClon._ConfigUserOptionsEditing = true;
loConfig = ConfigurationDesignManager.ShowInDesign(loFormClon, this._ConfigUserForm);
if (loConfig is ConfigUserForm)
{
_ConfigUserForm = loConfig;
_ConfigUserOptionsLoad(_ConfigUserForm._dicOpciones);
}
loFormClon.Close();
loFormClon.Dispose();
loFormClon = null;
}
#region Opciones de menu para listados personalizables
/// <summary>
/// Task 104592: Método virtual para crear una tarea programada (principalmente para el FormListado)
/// </summary>
/// <param name="tcPantalla"></param>
protected virtual void _CrearTareaProgramada(string tcPantalla)
{
}
/// <summary>
/// Generar un nuevo listado personalizable a partir de un listado existente previamente
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listadosPersonalizablesDuplicarItem_Click(object sender, EventArgs e)
{
this.Close();
ListadosPersonalizables loList = new ListadosPersonalizables();
if (!loList._DuplicarListado(this._Pantalla))
{
sage.ew.functions.FUNCTIONS._MessageBox(loList._Error_Message, this.Text, //"Informes personalizables"
MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
/// <summary>
/// Editar un listado personalizable previamente creado
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listadosPersonalizablesEditarItem_Click(object sender, EventArgs e)
{
this.Close();
ListadosPersonalizables loList = new ListadosPersonalizables();
if (!loList._CargarListado(this._Pantalla))
{
sage.ew.functions.FUNCTIONS._MessageBox(loList._Error_Message, this.Text, //"Informes personalizables"
MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
#endregion Opciones de menu para listados personalizables
private void ShowPropertiesToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Debugger.IsAttached)
{
if (_oTimerProperties is Timer)
{
ShowPropertiesToolStripMenuItem.Text = "Mostrar propiedades controles";
_InfoToolTip.Active = false;
_oTimerProperties.Stop();
_oTimerProperties.Tick -= _oTimerProperties_Tick;
_oTimerProperties.Dispose();
_oTimerProperties = null;
}
else
{
ShowPropertiesToolStripMenuItem.Text = "Ocultar propiedades controles";
_InfoToolTip.Active = true;
_oTimerProperties = new Timer();
_oTimerProperties.Tick += _oTimerProperties_Tick;
_oTimerProperties.Interval = 500;
_oTimerProperties.Start();
}
}
}
private void _oTimerProperties_Tick(object sender, EventArgs e)
{
Control loControl;
Point loPos = Cursor.Position;
if (Bounds.Contains(loPos))
{
loControl = _GetChild(loPos, this);
if ((loControl is Control && string.IsNullOrEmpty(_ControlNameShowing)) || (loControl is Control && loControl.Name != _ControlNameShowing))
{
_ControlNameShowing = _InfoToolTip._GetControl(loControl).Name;
_CreateTooltipInfo(loControl, loControl.DataBindings.Count > 0 ? loControl.Name : "");
if(!loControl.Enabled) _InfoToolTip.Show(loControl.Name, this, PointToClient(loPos));
}
else if(loControl == null && !string.IsNullOrEmpty(_ControlNameShowing))
{
_InfoToolTip.Hide(this);
_ControlNameShowing = string.Empty;
}
}
else
{
_ControlNameShowing = string.Empty;
}
}
private void _CreateTooltipInfo(Control toControl, string tcText = "")
{
string lcText;
lcText = string.IsNullOrEmpty(tcText) ? toControl.DataBindings.Count > 0 ? toControl.Name : "" : tcText;
if (!string.IsNullOrEmpty(lcText)) _InfoToolTip._ControlToolTip(toControl, lcText);
if (toControl.Controls.Count > 0)
{
foreach (Control loControl in toControl.Controls)
{
lcText = string.IsNullOrEmpty(tcText) ? loControl.DataBindings.Count > 0 ? loControl.Name : "" : tcText;
if (!string.IsNullOrEmpty(lcText))
{
_InfoToolTip._ControlToolTip(loControl, lcText);
}
if (loControl.Controls.Count > 0)
{
_CreateTooltipInfo(loControl, lcText);
}
}
}
}
private string _ControlNameShowing;
/// <summary>
/// Obtener un Control situado en un point
/// </summary>
/// <param name="toPoint"></param>
/// <param name="toBase"></param>
/// <returns></returns>
public Control _GetChild(Point toPoint, Control toBase)
{
Control loControl = null;
if(toBase is Control) loControl = toBase.GetChildAtPoint(toBase.PointToClient(toPoint), GetChildAtPointSkip.Invisible | GetChildAtPointSkip.Transparent);
return loControl?.Controls.Count > 0 && loControl?.DataBindings.Count == 0? _GetChild(toPoint, loControl) : loControl;
}
/// <summary>
/// Mostrar la información relevante de la pantalla que llama este método.
/// Se presentara la siguiente información:
/// - Titulo del formulario
/// - Librearia en la que esta contenido
/// - Nombre de la clase del formulario
/// - Pantalla (en caso de que esta definida)
/// En mantenimientos y documentos se presentara también la información de los addons que modifiquen el formulario:
/// - Nombre del addon / Libreria que carga (Si esta o no firmada y por quien)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void nombreFormularioToolStripMenuItem_Click(object sender, EventArgs e)
{
frmInfoFormul loFormul = new frmInfoFormul();
//Cabecera Información
loFormul.AddHeader("Información");
//Titulo del formulario
loFormul.AddLine("TÃtulo", _EliminarAcronimo(this.Text));
//Libreria
loFormul.AddLine("LibrerÃa", System.Reflection.Assembly.GetAssembly(this.GetType()).Location);
//Clase
loFormul.AddLine("Clase", this.GetType().Name);
//Pantalla. Presentamos el valo de _PantallaAyuda
if (!string.IsNullOrWhiteSpace(_PantallaAyuda))
loFormul.AddLine("Pantalla", _PantallaAyuda.Trim().ToUpper());
//S50MIG-3188 Añadir namespace
loFormul.AddLine("Namespace", GetType().Namespace);
//Addons
Dictionary<string, object> loAddons = null;
if (this is FormMante && (this as FormMante)._ewMante != null && (this as FormMante)._ewMante._Addons != null)
{
loAddons = (this as FormMante)._ewMante._Addons;
}
else if (this is frmGestionPerfil && (this as frmGestionPerfil)._Documento != null && (this as frmGestionPerfil)._Documento._Addons != null)
{
loAddons = (this as frmGestionPerfil)._Documento._Addons;
}
else if (this is FormListado && (this as FormListado)._Addons != null)
{
loAddons = (this as FormListado)._Addons;
}
if (loAddons != null && loAddons.Count > 0)
{
//Cabecera addons
loFormul.AddHeader("Add-ons");
//Info de addons
string lcDllAddon = "", lcSubjectName = "";
foreach (KeyValuePair<string, object> loItem in loAddons)
{
try
{
// Obtenemos el objeto de extensiones y lo configuramos
//loExtension = (_ExtensionMante)loItem.Value;
string lcName = "", lcTmp = "";
if (AddonsController.Instance.AddonsManager.IsLoaded(loItem.Key))
{
//Ruta a la dll
lcDllAddon = (AddonsController.Instance.AddonsManager.GetAddon(loItem.Key) as IModulo)._Libreria + ".dll";
lcTmp = lcDllAddon;
//Qui la firma
lcSubjectName = FUNCTIONS.GetDllNameInfo(lcDllAddon);
if (!string.IsNullOrWhiteSpace(lcSubjectName))
lcTmp += " (" + lcSubjectName + ")";
else
lcTmp += " (Sin firmar)";
//Quin tipus es
int lnTipo = (AddonsController.Instance.AddonsManager.GetAddon(loItem.Key) as IModulo)._Tipo;
switch (lnTipo)
{
case 2:
lcTmp += " - Extensión contratable";
break;
case 3:
lcTmp += " - Extensión personalizada";
break;
case 1:
case 0:
default:
lcTmp += " - Extensión incluida";
break;
}
//Nom del addon a mostrar
lcName = (AddonsController.Instance.AddonsManager.GetAddon(loItem.Key) as IModulo)._Nombre2;
if (string.IsNullOrWhiteSpace(lcName))
lcName = loItem.Key;
//Afegim una linia per cada addon
loFormul.AddLine(lcName, lcTmp);
}
}
catch (Exception loError)
{
DB.Registrar_Error(loError);
}
}
}
//Mostramos el formulario
loFormul._ShowDialog();
}
/// <summary>
/// Elimina el acronimo del texto
/// </summary>
/// <param name="toText"></param>
/// <returns></returns>
protected string _EliminarAcronimo(String toText)
{
String lcText = toText;
if (!String.IsNullOrEmpty(_Acronimo)) lcText = lcText.Replace(_Acronimo, "");
lcText = lcText.TrimStart();
return lcText;
}
/// <summary>
/// Respuesta al click de "Reordenar pantallas" (PE-120903)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void reordenarPantallasToolStripMenuItem_Click(object sender, EventArgs e)
{
// PE-103085
//NETVFP._Reordenar_Pantallas();
//NETVFP._Ejecutar_Funcion_VFP("fPripals50.Reordenar_pantallas");
}
private void contextMenuStripPantalla_Opening(object sender, CancelEventArgs e)
{
contextMenuStripPantalla.Items["gestiónDeFavoritosToolStripMenuItem"].Image = sage.ew.images.Properties.Resources.favorite_16;
contextMenuStripPantalla.Items["gestiónDeAccesosToolStripMenuItem"].Image = sage.ew.images.Properties.Resources.access_16;
contextMenuStripPantalla.Items["crearAccesoDirectoToolStripMenuItem"].Image = sage.ew.images.Properties.Resources.link_16;
contextMenuStripPantalla.Items["crearTareaProgramadaItem"].Image = sage.ew.images.Properties.Resources.TimeProgram; //TODO: utilizar otro icono
contextMenuStripPantalla.Items["ShowPropertiesToolStripMenuItem"].Image = _oTimerProperties is null ? Resources.led_green_16 : Resources.led_red_16;
bool lbSage50 = Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50"));
//Acces directe sols per a Sage50
if (!lbSage50)
contextMenuStripPantalla.Items["crearAccesoDirectoToolStripMenuItem"].Visible = false;
else
contextMenuStripPantalla.Items["crearAccesoDirectoToolStripMenuItem"].Visible = _MostrarCrearAccesoDirecto; // PE-99866. Comprobar si mostar el ménu crear acceos directos
//Task 104592: Crear tarea programada
if (!lbSage50)
contextMenuStripPantalla.Items["crearTareaProgramadaItem"].Visible = false;
else
contextMenuStripPantalla.Items["crearTareaProgramadaItem"].Visible = _MostrarCrearTareaProgramada;
//PE-96746
contextMenuStripPantalla.Items["crearApunteCalendarioItem"].Image = sage.ew.images.Properties.Resources.calendar_16;
//PE-103520 : listados personalizables
contextMenuStripPantalla.Items["listadosPersonalizablesEditarItem"].Image = sage.ew.images.Properties.Resources.mant_edit_16;
contextMenuStripPantalla.Items["listadosPersonalizablesDuplicarItem"].Image = sage.ew.images.Properties.Resources.duplicate_16;
if (this is sage.ew.formul.Forms.FormListado)
{
if (!((sage.ew.formul.Forms.FormListado)this)._Personalizado)
{
contextMenuStripPantalla.Items["listadosPersonalizablesEditarItem"].Visible = false;
if (!lbSage50)
{
contextMenuStripPantalla.Items["listadosPersonalizablesDuplicarItem"].Visible = false;
}
else
{
contextMenuStripPantalla.Items["listadosPersonalizablesDuplicarItem"].Visible = _MostrarDuplicarListado;
}
}
}
else
{
contextMenuStripPantalla.Items["listadosPersonalizablesEditarItem"].Visible = false;
contextMenuStripPantalla.Items["listadosPersonalizablesDuplicarItem"].Visible = false;
}
ConfigureConfigUserOptions();
//PE-104540 - PE-104527 : Amagar l'opció de "Duplicar y editar el listado personalizable"
//contextMenuStripPantalla.Items["listadosPersonalizablesDuplicarItem"].Visible = false;
}
/// <summary>
/// Preparar menú de Configuraciones de usuario
/// </summary>
private void ConfigureConfigUserOptions()
{
configuracionesUsuarioItem.Image = sage.ew.images.Properties.Resources.icon_wrench;
if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50")) && _ConfigUserOptionsAllowed)
{
// Guardar "Última configuración"
//ConfigUserOptionsUpdateLastValues();
configuracionesUsuarioItem.Visible = true;
configuracionesUsuarioItemSeparator.Visible = true;
configuracionesUsuarioItem.DropDownItems.Clear();
configuracionesUsuarioItem.DropDownItems.Add(toolConfiguracionesToolStripMenuItem);
// Mostrar configuraciones de usuario
IEnumerable<ConfigUserForm> loList = _ConfigUserForm._ListaConfiguraciones().AsEnumerable();
IEnumerable<ConfigUserForm> loListConfUsers = loList.Where(f => f._Tipo == ConfigUserForm.ConfigUserType.UserValuesConfig);
IEnumerable<ConfigUserForm> loListDefaultConfUsers = loList.Where(f => f._Tipo != ConfigUserForm.ConfigUserType.UserValuesConfig);
// Mostrar configuraciones del usuario
_GenerateMenuItemsConfigUser(loListConfUsers.Where(f => !f._Publico));
// Mostrar configuraciones públicas
_GenerateMenuItemsConfigUser(loListConfUsers.Where(f => f._Publico));
// Mostrar configuraciones base
_GenerateMenuItemsConfigUser(loListDefaultConfUsers);
}
else
{
configuracionesUsuarioItem.Visible = false;
configuracionesUsuarioItemSeparator.Visible = false;
}
}
private void _GenerateMenuItemsConfigUser(IEnumerable<ConfigUserForm> toListConfigUsers)
{
if (toListConfigUsers != null && toListConfigUsers.Count() > 0)
{
configuracionesUsuarioItem.DropDownItems.Add(new ToolStripSeparator());
foreach (ConfigUserForm loConfig in toListConfigUsers)
{
ToolStripMenuItem loMenuItem = new ToolStripMenuItem();
loMenuItem.Text = loConfig._Config;
loMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
loMenuItem.Click += LoadConfigUserMenuItem_Click;
loMenuItem.Tag = loConfig;
if (_ConfigUserForm._Config.Trim() == loConfig._Config.Trim()) loMenuItem.Image = sage.ew.images.Properties.Resources.icon_right;
configuracionesUsuarioItem.DropDownItems.Add(loMenuItem);
}
}
}
/// <summary>
/// Evento para cargar configuración de usuario/pantalla des del menú de opciones
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LoadConfigUserMenuItem_Click(object sender, EventArgs e)
{
if (sender is ToolStripMenuItem && ((ToolStripMenuItem)sender).Tag is ConfigUserForm)
{
ConfigUserForm loConfig = ((ToolStripMenuItem)sender).Tag as ConfigUserForm;
// Antes de cargar la nueva configuración, guardamos "Última configuración"
//ConfigUserOptionsUpdateLastValues();
// Cargar nueva configuración
_ConfigUserForm = loConfig;
_ConfigUserOptionsLoad(_oConfigUserForm._dicOpciones);
}
}
/// <summary>
/// PE-96746: Comprobamos si hay que mostrar o no el la opció de apunte de calendario
/// </summary>
/// <returns>True si es visible</returns>
protected bool _PresentarApunteCalendario()
{
return sage.ew.functions.FUNCTIONS._PermitirApunteCalendario(_Pantalla);
}
#region Forzar Fuente
/// <summary>
/// Override OnShown
/// </summary>
/// <param name="e"></param>
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
if (EW_GLOBAL._EsEjecutable && _CambiarFuente)
{
if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_sage50")))
{
if (estiloRevisado == false)
{
foreach (Control loControl in Controls)
{
FUNCTIONS._Cambiar_Font(loControl, "Segoe UI");
}
}
}
else
{
foreach (Control loControl in Controls)
{
FUNCTIONS._Cambiar_Font(loControl, "Arial");
}
}
}
// Bug 111565. En caso de abrir un formulario en modo MODAL, no dejamos minimizarlo
if (this.Modal)
this.MinimizeBox = false;
//Asignem els parametres del formulari suposant que en tingui
this._EstablecerParametrosFormulario();
}
#endregion Forzar Fuente
/// <summary>
/// Lista de toolStripMenuItems privada que se utiliza para poder gestionar las opciones del botón de opciones
/// </summary>
protected List<ToolStripMenuItemBase> _ToolStripMenuItemsBase = new List<ToolStripMenuItemBase>();
/// <summary>
/// Nuevo Ãtems del menú de opciones
///
/// Añade el Ãtem a la lista lstToolStripMenuItemBase para su posterior personalización
/// </summary>
/// <param name="tcNombre">Text del toolStripIEtem</param>
/// <param name="tcNombre_Objeto">Nombre del objeto</param>
/// <param name="tcTooltip">Tooltip del toolStripIEtem</param>
/// <returns></returns>
protected internal ToolStripMenuItemBase _AddToolStripMenuItemBase(string tcNombre, string tcNombre_Objeto, string tcTooltip)
{
ToolStripMenuItemBase loToolStripMenuItem = new ToolStripMenuItemBase(tcNombre, tcNombre_Objeto, tcTooltip);
_ToolStripMenuItemsBase.Add(loToolStripMenuItem);
return loToolStripMenuItem;
}
/// <summary>
/// Notificamos a los subscriptores por si desean realizar una configuración de las opciones a presentar
///
/// NOTA: únicamente operativo en los documentos de perfiles y asientos
/// </summary>
/// <param name="sender">Referencia al objeto de opciones</param>
protected internal void _GetOpcionesInvoke(object sender)
{
if (this is frmGestionPerfil || this is contabilidad.frmAsientos || this is frmListasPrevias || this.Name == "frmPrincipal")
_GetOpciones?.Invoke(new EventArgsOpciones(sender, _ToolStripMenuItemsBase));
else
throw new Exception("Este formulario no tiene ningún botón de Opciones o no está preparado para acceder a él");
}
/// <summary>
/// Notificamos a los subscriptores por si desean añadir opciones en el botón de herramientas
/// </summary>
/// <param name="sender">Referencia al ContextMenu de opciones del botón de herramientas</param>
/// <param name="tlstToolStripMenuItemsBase">Lista de ToolStripMenuItemBase</param>
private void GetOpcionesHerramientasInvoke(object sender , List<ToolStripMenuItemBase> tlstToolStripMenuItemsBase)
{
_GetOpcionesHerramientas?.Invoke(new EventArgsOpciones(sender, tlstToolStripMenuItemsBase));
}
// Task 111119 - 115209
/// <summary>
/// Inserta un control a los formularios, actualmente solo implementado en el formulario de perfiles
/// </summary>
/// <param name="toControl">Control a añadir al formulario, ha de cumplir la interfaz IAddonTabDoc, IAddonBotonMenuDoc, ...</param>
/// <returns>Devuelve si ha agregado el control al formulario</returns>
public virtual bool _InsertarObjetoAddon(Control toControl)
{
bool lITabDocAddon = false, llOk = true;
Control loControlContenedor = this; // Asignamos donde vamos a agregar los controles
string lcNombre_Objeto = toControl.Name;
lITabDocAddon = toControl is IAddonTabDoc;
if (lITabDocAddon)
llOk = AddonInsertarTabDocAddon(toControl, ref loControlContenedor);
else if ((toControl is IAddonBotonMenuDoc) && (toControl is Button)) // Task 123210: Creación de botones en la barra de herramientas de los Mantes
llOk = AddonBotonMenuDoc(toControl);
if (llOk)
loControlContenedor.Controls.Add(toControl);
return llOk;
}
/// <summary>
/// Inserta un sage.ew.botones.ToolStripButtonAddonMante a la barra de botones en los FormMante
/// </summary>
/// <param name="toolStripButtonAddonMante"></param>
/// <returns></returns>
public virtual bool _InsertarObjetoAddon(ToolStripItem toolStripButtonAddonMante)
{
return true;
}
/// <summary>
/// Para agregar opciones mediante los Addons en los mantenimientos y en el formulario de asientos
/// </summary>
/// <param name="toMenuStrip"></param>
protected internal virtual void _AddonPrepararMenu(ewcontextmenustrip toMenuStrip)
{
if (this.lstOpcionesMenuAddon != null && this.lstOpcionesMenuAddon.Count > 0)
{
string lcTituloMenu, lcName;
bool llSeparador = true;
foreach (Control loControl in this.lstOpcionesMenuAddon)
{
lcTituloMenu = ((IAddonBotonMenuDoc)loControl)._TituloMenu.Trim();
if (llSeparador && toMenuStrip.Items.Count > 0) // Añadimos un separador
{
toMenuStrip.Items.Add("-");
llSeparador = false;
}
toMenuStrip.Items.Add(lcTituloMenu);
lcName = loControl.Name;
if (string.IsNullOrWhiteSpace(lcName)) // Si el botón no tiene nombre le voy a asignar uno. Luego se realizará una búsqueda por el nombre del control
{
lcName = Convert.ToString(Guid.NewGuid()).ToUpper();
loControl.Name = lcName;
}
toMenuStrip.Items[toMenuStrip.Items.Count - 1].Name = lcName;
toMenuStrip.Items[toMenuStrip.Items.Count - 1].Click += new EventHandler(FormManteOpcionesAddon_Click);
}
}
}
// FTask 123210: Creación de botones en la barra de herramientas de los Mantes
/// <summary>
/// Ejecutamos la acción del botón correspondiente añadido mediante los Addons
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormManteOpcionesAddon_Click(object sender, EventArgs e)
{
string lcName = (sender as ToolStripMenuItem).Name;
Control[] loControl = this.Controls.Find(lcName, true);
if (loControl != null)
{
try
{
((ewbutton)loControl[0]).Enabled = true;
((ewbutton)loControl[0]).PerformClick(); // No sabemos el código que se ha programado. Si da error ...
}
catch (Exception loEx)
{
if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_prueva")) || System.Diagnostics.Debugger.IsAttached) // Gestión de error
this._MessageBox("Se ha producido la siguiente incidencia en la ejecución de la opción " + (sender as ToolStripMenuItem).Text.Trim() + ": " + Environment.NewLine + Environment.NewLine + loEx.Message, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
}
}
}
/// <summary>
/// Configuramos la clase "clsElementos" para poder instanciar correctamente el control dque cumple la interfaz "IAddonBotonMenuDoc" que se añadirán en el botón de opciones correspondiente
/// </summary>
/// <param name="toControl"></param>
private bool AddonBotonMenuDoc(Control toControl)
{
IAddonBotonMenuDoc loIAddonBotonMenuDoc = (IAddonBotonMenuDoc)toControl;
this.lstOpcionesMenuAddon.Add(toControl); // Añadimos la opción a la lista
// La propiedad _Menu no la vamos a utilizar, únicamente es para los perfiles
if (string.IsNullOrWhiteSpace(loIAddonBotonMenuDoc._TituloMenu) && toControl is ewbutton && !string.IsNullOrWhiteSpace(toControl.Text)) // Si no tiene tÃtulo la opción, asignaremos el texto del botón
loIAddonBotonMenuDoc._TituloMenu = toControl.Text;
// Cambiamos la posición del control para que no se vea. No lo podemos hacer invisible o al hacer el PerformClick no se ejecutará
toControl.Left = -10000;
toControl.Top = -10000;
toControl.Width = 1;
toControl.Height = 1;
AddonBotonMenuDocDocumento(toControl);
return true;
}
/// <summary>
/// Asignamos la referencia al documento al botón para realizar las acciones pertinentes
/// </summary>
/// <param name="toControl">Control de tipo IAddonBotonMenuDoc</param>
private void AddonBotonMenuDocDocumento(Control toControl)
{
dynamic loDocumento = null;
if (toControl is IAddonBotonMenuDoc)
{
if (this is FormMante)
loDocumento = ((FormMante)this)._ewMante;
else if (this is FormBaseDocumento)
loDocumento = ((FormBaseDocumento)this)._Documento;
if (loDocumento != null)
{
IAddonBotonMenuDoc loIAddonBotonMenuDoc = ((IAddonBotonMenuDoc)toControl);
loIAddonBotonMenuDoc._Documento = loDocumento;
}
}
}
/// <summary>
/// Realizamos el refresco recursivamente de los controles
/// </summary>
/// <param name="toContenedor">Objeto que puede ser contenedor de otros objetos</param>
/// <param name="tlChild">Recorre si los diferentes controles del UserControl para ejecutar el _Refresh</param>
private void ControlRefreshRecursive(Control toContenedor, bool tlChild = false)
{
if (!toContenedor.HasChildren)
return;
foreach (Control loControlChild in toContenedor.Controls)
_ControlRefresh(loControlChild, tlChild);
}
/// <summary>
/// Ejercución del método _Refresh del control
/// </summary>
/// <param name="toControl">Control al que se ejecutará el _Refresh</param>
/// <param name="tlChild">Recorre si los diferentes controles del UserControl para ejecutar el _Refresh</param>
public void _ControlRefresh(Control toControl, bool tlChild = false)
{
if (toControl == null)
return;
dynamic loControlDynamic = toControl;
bool llRefresh = (toControl is IAddonTabDoc);
if (llRefresh)
{
Type ltType = Type.GetType(loControlDynamic.GetType().AssemblyQualifiedName);
MethodInfo objMethod = ltType.GetMethod("_Refresh"); // Busca la propiedad pública con el nombre especificado, si no la encuentra devuelve null
llRefresh = (objMethod != null);
}
if (llRefresh)
{
try
{
loControlDynamic._Refresh();
}
catch (Exception loEx)
{
if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_prueva")) || System.Diagnostics.Debugger.IsAttached)
this._MessageBox("Se ha producido la siguiente incidencia en la ejecución del método Refresh del control " + toControl.Name + ": " + Environment.NewLine + Environment.NewLine + loEx.Message, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
}
}
ControlRefreshRecursive(toControl);
}
/// <summary>
/// Asociación de la propiedad _Documento al Addon recursivamente
/// </summary>
/// <param name="toContenedor">Objeto que puede ser contenedor de otros objetos</param>
/// /// <param name="toDocumento"></param>
/// <param name="tlChild">Recorre si los diferentes controles del UserControl para asociar el _Documento</param>
private void ControlDocumentoRecursive(Control toContenedor, dynamic toDocumento, bool tlChild = false)
{
if (!toContenedor.HasChildren)
return;
foreach (Control loControlChild in toContenedor.Controls)
_ControlDocumento(loControlChild, toDocumento, tlChild);
}
/// <summary>
/// Asociación de la propiedad _Documento al Addon
/// </summary>
/// <param name="toControl">Control al que se asignará el _Documento</param>
/// <param name="toDocumento">Referencia al documento</param>
/// <param name="tlChild">Recorre si los diferentes controles del UserControl para asociar el _Documento</param>
public void _ControlDocumento(Control toControl, dynamic toDocumento, bool tlChild = false)
{
if (toControl == null || toDocumento == null)
return;
dynamic loControlDynamic = toControl;
bool llDocumento = (toControl is IAddonTabDoc);
if (!llDocumento)
{
Type ltType = Type.GetType(loControlDynamic.GetType().AssemblyQualifiedName);
MemberInfo[] objMember = ltType.GetMember("_Documento");
llDocumento = (objMember.Length > 0);
}
if (llDocumento)
{
try
{
loControlDynamic._Documento = toDocumento;
}
catch (Exception loEx)
{
if (Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_prueva")) || System.Diagnostics.Debugger.IsAttached)
this._MessageBox("Se ha producido la siguiente incidencia en la asignación del documento al control " + toControl.Name + ": " + Environment.NewLine + Environment.NewLine + loEx.Message, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
}
}
ControlDocumentoRecursive(toControl, toDocumento, tlChild);
}
/// <summary>
/// Añadimos una addon en la página de en un ewtabcontrol
/// </summary>
/// <param name="toControl"></param>
/// <param name="toControlContenedor"></param>
/// <returns></returns>
private bool AddonInsertarTabDocAddon(Control toControl, ref Control toControlContenedor)
{
bool llOk = false;
ewtabcontrol loewtabcontrol = null;
foreach (Control loControl in Controls) // De momento no es necesario realizarlo recursivamente
{
if (loControl is ewtabcontrol)
{
loewtabcontrol = (ewtabcontrol)loControl;
break;
}
}
if (loewtabcontrol != null)
{
Control loPagina = AddonNuevaPaginaTabDoc(toControl, loewtabcontrol);
ewFlowLayoutPanel loewFlowLayoutPanel = this.AddonNuevoFlowLayoutPanel();
loewFlowLayoutPanel.Size = loewtabcontrol.TabPages[0].Size; // Asignamos las dimensiones de la primera página
loewFlowLayoutPanel.Dock = DockStyle.Fill;
loPagina.Controls.Add(loewFlowLayoutPanel); // Agregamos el flowlayout a la página para la gestión de las barras
loPagina.Dock = DockStyle.Fill;
toControlContenedor = loewFlowLayoutPanel; // Agregaremos el addon en el flowlayout de la página, por tanto actualizamos el controlContenedor
llOk = true;
}
return llOk;
}
/// <summary>
/// Instanciación de un "ewFlowLayoutPanel" que para que presenta las barras de desplazamiento si no cabe la totalidad del control que se pueda añadir
/// </summary>
/// <returns>Devuelve un "ewFlowLayoutPanel" para añadirlo en la página</returns>
private ewFlowLayoutPanel AddonNuevoFlowLayoutPanel()
{
ewFlowLayoutPanel loewFlowLayoutPanel = new ewFlowLayoutPanel();
loewFlowLayoutPanel.AutoScroll = true;
loewFlowLayoutPanel.WrapContents = true;
//if llResizeAddon
// loewFlowLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; // MEJORA: _Resize: Si nos interesa que el usuario gestiona el resize
// loewFlowLayoutPanel.Size = toControl.Size; // Asignamos las dimensiones del control
return loewFlowLayoutPanel;
}
/// <summary>
/// Obtener el nombre de una página
/// </summary>
/// <param name="toewtabcontrol"></param>
/// <returns></returns>
private string AddonNombrePagina(ewtabcontrol toewtabcontrol)
{
string lcName = string.Empty;
lcName = "AddonPagina" + Convert.ToString(toewtabcontrol.TabPages.Count);
return lcName;
}
/// <summary>
/// Añadimos una nueva página en un tabcontrol
/// </summary>
/// <param name="toControl"></param>
/// <param name="toewtabcontrol"></param>
/// <returns></returns>
private Control AddonNuevaPaginaTabDoc(Control toControl, ewtabcontrol toewtabcontrol)
{
Control loControlewTabPage = null;
string lcewtabcontrol = toewtabcontrol.Name, lcTitulo = string.Empty, lcName = string.Empty;
IAddonTabDoc loIAddonTabDoc = (IAddonTabDoc)toControl;
loControlewTabPage = new ewTabPage();
lcName = toControl.Name;
if (string.IsNullOrWhiteSpace(lcName))
lcName = AddonNombrePagina(toewtabcontrol);
loControlewTabPage.Name = lcName;
loControlewTabPage.Text = loIAddonTabDoc._TituloPagina; // Indicamos el tÃtulo de la página
toewtabcontrol.Controls.Add(loControlewTabPage);
if (loIAddonTabDoc._Principal) // Añadimos el tabpage como página principal
{
ewTabPage loewTabPage = (ewTabPage)loControlewTabPage;
CambiarIndiceTabpage(toewtabcontrol, loewTabPage, 0);
}
return loControlewTabPage;
}
/// <summary>
/// Reordenamos las páginas
/// </summary>
/// <param name="toewtabcontrol"></param>
/// <param name="toewTabPage"></param>
/// <param name="tnNuevoIndice"></param>
private void CambiarIndiceTabpage(ewtabcontrol toewtabcontrol, ewTabPage toewTabPage, int tnNuevoIndice)
{
ewTabPage loewTabPage;
int lnIndiceTabPage = toewtabcontrol.TabPages.IndexOf(toewTabPage); // Buscamos el Ãndice de la página que hemos agregado
for (int lnIndice = 0; lnIndice < lnIndiceTabPage; lnIndice++)
{
loewTabPage = (ewTabPage)toewtabcontrol.TabPages[0];
toewtabcontrol.TabPages.Remove(loewTabPage);
toewtabcontrol.TabPages.Add(loewTabPage);
}
// toewtabcontrol.TabPages.Insert(tnNuevoIndice, toewTabPage); // De momento como no funciona, hemos realizado el recorrido de las diferentes páginas
}
// FTask 111119 - 115209
#region Ayuda contextual
private bool _lFormActivated = true;
private bool _lPresentandoAyuda = false;
private BackgroundWorker _oBackgroundWorker;
private FormPanelNotificaciones _oFormAyuda = null;
/// <summary>
/// Para guardar el tÃtulo del formulario sin acrónimo ni sufijos
/// </summary>
private string _cTituloFormulario = "";
/// <summary>
/// Estructura para gestionar el resultado del BakcGroundWorker
/// </summary>
public struct oResultadoAyuda
{
/// <summary>
/// Indica si ha de presentar la ayuda
/// </summary>
public bool _Ayuda
{
get { return _lAyuda; }
set { _lAyuda = value; }
}
bool _lAyuda;
/// <summary>
/// Instancia de la ayuda contextual
/// </summary>
public IAyudaContextual _AyudaContextual
{
get { return _oAyudaContextual; }
set { _oAyudaContextual = value; }
}
IAyudaContextual _oAyudaContextual;
/// <summary>
/// Instancia del OnBoardingController
/// </summary>
public IOnBoardingController _OnBoardingController
{
get { return _oOnBoardingController; }
set { _oOnBoardingController = value; }
}
IOnBoardingController _oOnBoardingController;
}
/// <summary>
/// Controlamos que tenemos la ayuda activa
/// </summary>
/// <returns></returns>
private bool AyudaActiva()
{
if (Usuario._This._Opcesp("5004")) // No presentar ayuda en pantallas de Sage 50c
return false;
bool llActiva = true;
object loObject = EW_GLOBAL._GetVariable("wl_DesactivarOnBoarding");
if (loObject != null)
{
try
{
llActiva = !Convert.ToBoolean(loObject); // Tendremos que "wl_DesactivarOnBoarding" es true por eso negamos
}
catch (Exception)
{
}
}
return llActiva;
}
/// <summary>
/// Indica que la pantalla relacionada con la ayuda contextual / ayuda de Sage 50
/// </summary>
/// <returns></returns>
protected virtual string _PantallaAyuda
{
get { return _Pantalla; }
}
/// <summary>
/// Indica si ha de presentar el WalkTrought de la pantalla 0
/// </summary>
private bool _lPantalla0Showed = false;
/// <summary>
/// Marcamos que ya ha realizado el Login y no teniamos cargada aún la ayuda contextual al entrar la primera vez
/// </summary>
private bool _lPantalla0ShowAfterLogin = false;
/// <summary>
/// Instanciación del BackgroundWorker de la ayuda contextual
/// </summary>
private void AyudaOnBoarding()
{
if (!IsDisposed && !Disposing )
{
if (BarrasAyudaActivas())
{
if (string.IsNullOrWhiteSpace(_PantallaAyuda) || !AyudaActiva() || botonayuda == eAyudaContextual.Desactivada)
{
_FormSagePanel?._Show(_ButtonsSagePanel, this);
}
else
{
// Declaro un nuevo elemento
_oBackgroundWorker = new BackgroundWorker();
_oBackgroundWorker.WorkerSupportsCancellation = true;
_oBackgroundWorker.WorkerReportsProgress = false;
// Declaro los procesos
_oBackgroundWorker.DoWork += new DoWorkEventHandler(_ExecuteRunWorkerAyuda);
_oBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_RunWorkerCompletedAyuda);
// Ejecución asÃncrona
_oBackgroundWorker.RunWorkerAsync();
}
}
}
}
private bool BarrasAyudaActivas()
{
DataTable loDt = new DataTable();
string lcDataBase, lcComunes, lcSql;
if (!EW_GLOBAL._ContainsKey("wl_barras_ayuda_form"))
{
lcComunes = GrupoEmpresa._DbComunesRealGrupoPripal();
lcDataBase = DB.SQLDatabaseReal(lcComunes, "VARIABLE");
lcSql = $"SELECT VALOR FROM {lcDataBase} WHERE VARIABLE = 'NO_AYUDA' ";
if(DB.SQLExec(lcSql, ref loDt)) EW_GLOBAL.ValorEnClave_VarGlob("wl_barras_ayuda_form", loDt.Rows.Count == 0);
}
return Convert.ToBoolean(EW_GLOBAL._GetVariable("wl_barras_ayuda_form", true));
}
/// <summary>
/// Método que define el proceso que se va a ejecutar en segundo plano de la ayuda contextual
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _ExecuteRunWorkerAyuda(object sender, DoWorkEventArgs e)
{
oResultadoAyuda loResult = new oResultadoAyuda();
loResult._Ayuda = false; // Asignamos el false por defecto
try
{
IOnBoardingController loOnBoardingController = FUNCTIONS._OnBoardingController();
if (loOnBoardingController != null && !loOnBoardingController._PlayingVideo)
{
IAyudaContextual loAyudaContextual = new AyudaContextual(loOnBoardingController);
loAyudaContextual._Load(_PantallaAyuda.ToUpper());
if (loAyudaContextual != null && (loAyudaContextual._Categorias.Count > 0 || loAyudaContextual._NumeroTotalNoticias > 0))
{
loResult._OnBoardingController = loOnBoardingController;
loResult._AyudaContextual = loAyudaContextual;
loResult._Ayuda = true;
}
}
}
catch (Exception loEx)
{
DB.Registrar_Error(loEx);
}
e.Result = loResult; // Asignamos el retorno
}
/// <summary>
/// Método que se ejecutará al finalizar el proceso de consulta de la ayuda contextual
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _RunWorkerCompletedAyuda(object sender, RunWorkerCompletedEventArgs e)
{
if (!e.Cancelled && e.Error == null &&!FormDisposed()) // Si no he sido cancelado ni he registrado excepción
{
_oResultadoAyuda = ((oResultadoAyuda)e.Result);
if (_oResultadoAyuda._Ayuda)
_BotonAyuda = eAyudaContextual.Si;
//CambiarBotonAyudaMensaje();
if (PresentarAyudaNuevasNoticias(_oResultadoAyuda))
{
if (EsPantalla0)
{
_oResultadoAyuda._Ayuda = true;
if (_lPantalla0ShowAfterLogin && !_lPantalla0Showed && Ayuda_FormularioActivo()) // Si ha entrado el Usuario y no ha presentado aún el WalkTrought, ahora lo presentamos si no hay ninguna pantalla abierta
_WalkthroughsPantalla0();
}
//else
// MostrarAyuda(_oResultadoAyuda._AyudaContextual);
}
_FormSagePanel?._Show(_ButtonsSagePanel, this);
}
}
/// <summary>
/// Controlamos si es necesario presentar las noticias relacionadas con la pantalla
/// Tenemos dos casos:
///
/// 1. Si tenemos activada la ayuda y tenemos noticias
/// 2. Existe alguna noticia nueva. La presentamos igualmente
/// </summary>
/// <param name="toResultadoAyuda"></param>
/// <returns></returns>
private bool PresentarAyudaNuevasNoticias(oResultadoAyuda toResultadoAyuda)
{
// Si la pantalla no tiene ayuda podemos salir
if (!_oResultadoAyuda._Ayuda)
return false;
// Tenemos activada la ayuda
if ( _oResultadoAyuda._AyudaContextual._PresentacionAyuda != Presentacion.No)
return true;
// Existe alguna noticia nueva a partir de la fecha que el usuario marcó no volver a presentar la ayuda
if (_oResultadoAyuda._AyudaContextual._NoticiasNuevasPendientesLeer > 0)
return true;
return false;
}
/// <summary>
/// Devuelve si es la pantalla 0 donde presentaremos el formulario frmWalktrhoughs si es necesario
/// </summary>
private bool EsPantalla0
{
get { return _PantallaAyuda == "PANTALLA0"; }
}
/// <summary>
/// Presentamos la pantalla de los Walktrhough si es necesario
/// </summary>
/// <returns></returns>
protected bool _WalkthroughsPantalla0()
{
_lPantalla0ShowAfterLogin = true; // Marcamos que ya ha pasado por el AfterLogin que es el único lugar de donde se realiza la llamada
if (EsPantalla0 && !FUNCTIONS._CanUseWebView()) // No presentamos mensaje, validamos si tenemos el RunTime del WebView2 independientemente de que tengamos o no información de la pantalla 0
return false;
if (_oResultadoAyuda._Ayuda == false || !EsPantalla0 || _lPantalla0Showed)
return false;
_lPantalla0Showed = true; // De momento marcamos que ya se ha visto o podrian salir dos instancias
IOnBoardingController loOnBoardingController = FUNCTIONS._OnBoardingController();
if (loOnBoardingController != null)
{
_lPantalla0Showed = ((OnBoardingControllerSage50)loOnBoardingController)._ShowWalkthroughs(_oResultadoAyuda._AyudaContextual);
return _lPantalla0Showed;
}
else
return false;
}
/// <summary>
/// Calculamos la posición del formulario de ayuda del OnBoarding
/// </summary>
/// <param name="toRectangle">Rectangle del formualrio de ayuda</param>
/// <returns></returns>
private Point CalculateLocationAyuda(Rectangle toRectangle)
{
Rectangle loRectScreen = Screen.PrimaryScreen.WorkingArea;
Point loPoint = toRectangle.Location;
int lnOffsetX = 20, lnOffsetY = 50;
if (Location.X < 0) // Tenemos pantallas como los mantenimientos o perfiles donde el formulario se presenta en una posición fuera de la area visible
{
loPoint.X = (loRectScreen.Width / 2) + (Size.Width / 2) - lnOffsetX;
loPoint.Y = (loRectScreen.Height / 2) - (Size.Height / 2) + lnOffsetY;
}
else
{
loPoint.X = Location.X + Size.Width - lnOffsetX;
loPoint.Y = Location.Y + lnOffsetY;
}
if (loPoint.X + toRectangle.Size.Width > loRectScreen.Width)
loPoint.X = loRectScreen.Width - lnOffsetX - toRectangle.Width;
if (loPoint.Y + toRectangle.Size.Height > loRectScreen.Height)
loPoint.Y = (loRectScreen.Height / 2) - (toRectangle.Height / 2);
return loPoint;
}
/// <summary>
/// Posicionaremos la pantalla donde el usuario la dejó previamente
/// Controlamos que sea en una area visible
/// </summary>
/// <param name="toAyudaContextual">Referencia a la ayuda contextual</param>
private void LocationAyuda(IAyudaContextual toAyudaContextual)
{
Point loPoint = new Point(toAyudaContextual._Left, toAyudaContextual._Top);
if (loPoint == new Point(0, 0) ||
loPoint.X > Screen.PrimaryScreen.Bounds.Size.Width || loPoint.Y > Screen.PrimaryScreen.Bounds.Size.Height)
{
loPoint = CalculateLocationAyuda(_oFormAyuda.Bounds);
}
if (toAyudaContextual._Height > 0)
{
Size loSize = _oFormAyuda.Size;
loSize.Height = toAyudaContextual._Height;
if (_oFormAyuda.Size != loSize)
_oFormAyuda.Size = loSize;
}
_oFormAyuda.Location = loPoint;
}
/// <summary>
/// Controlamos si el formulario se está destruyendo
/// </summary>
/// <returns></returns>
protected virtual bool FormDisposed()
{
return (IsDisposed || Disposing);
}
private void CambiarBotonAyudaMensaje()
{
if (!EsPantalla0 && _oResultadoAyuda._AyudaContextual != null && !FormDisposed())
{
int numnoticias = _oResultadoAyuda._AyudaContextual._NoticiasPendientesLeer;
if(menu is IActiveMenu)
{
foreach (ActiveButton item in menu.Items)
{
if (item.Name == "Ayuda")
{
// NOTICIAS ONBOARDING. Si tenemos noticias, sustituimos icono de Info por la Campana
if (numnoticias > 0)
{
string lcTooltip = " Noticias";
item.ForeColor = Color.FromArgb(0, 129, 70);
item.Font = new Font("Segoe UI", 8.5F);
item._ModColors = false;
if (numnoticias == 1)
{
item.Text = "1";
lcTooltip = " Noticia";
}
else if (numnoticias < 100)
item.Text = numnoticias.ToString().Trim();
else
item.Text = "99+";
item.Image = sage.ew.images.Properties.Resources.bell_green_16;
menu.ToolTip.SetToolTip(item, item.Text+lcTooltip);
item.ChangeColors();
}
break;
}
}
}
}
}
/// <summary>
/// Gestión de la presentación del formulario de configuración de usabilidad
/// </summary>
private void MostrarCfgUsabilidad()
{
// En el formulario de configuración se comprueba si hay mensajes configurados en el formulario/usuario actual
// y se muestra mensaje sino hay y se cierra.
frmUserFormConfig frmCfg = new frmUserFormConfig(Usuario._This._Codigo, this._Pantalla, this._ObtenerText(false));
frmCfg._ShowDialog();
}
/// <summary>
/// Gestión de la presentación de la ayuda contextual
/// </summary>
/// <param name="toAyudaContextual">Instancia de la ayuda contextual cuando venimos del BackGroundWordker</param>
private void MostrarAyuda(IAyudaContextual toAyudaContextual = null)
{
if (_oFormAyuda != null && !_oFormAyuda.IsDisposed && !_oFormAyuda.Disposing)
{
ShowAyuda();
return;
}
if (FormDisposed())
return;
IOnBoardingController loOnBoardingController = FUNCTIONS._OnBoardingController();
if (toAyudaContextual == null) // Venimos del botón de opciones. Se ha de instanciar la ayuda contextual
{
toAyudaContextual = new AyudaContextual(loOnBoardingController);
toAyudaContextual._Load(_Pantalla.ToUpper());
((OnBoardingControllerSage50)loOnBoardingController)._WebService("mostrar", tcPantalla: _Pantalla.ToUpper()); // Acción de mostrar ayuda
}
if (FormDisposed())
return;
_oFormAyuda = new FormPanelNotificaciones(_Pantalla.ToUpper(), Text, loOnBoardingCont³nDeAccesosToolStripMenuItem,
4311 this.crearAccesoDirectoToolStripMenuItem,
4312 this.crearTareaProgramadaItem,
4313 this.crearApunteCalendarioItem,
4314 this.listadosPersonalizablesEditarItem,
4315 this.listadosPersonalizablesDuplicarItem,
4316 this.ayudaPantallaToolStripMenuItem,
4317 this.ShowPropertiesToolStripMenuItem});
4318 this.contextMenuStripPantalla.Name =
"contextMenuStripPantalla";
4319 this.contextMenuStripPantalla.Size =
new System.Drawing.Size(289, 230);
4323 this.configuracionesUsuarioItem.DropDownItems.AddRange(
new System.Windows.Forms.ToolStripItem[] {
4324 this.toolConfiguracionesToolStripMenuItem});
4325 this.configuracionesUsuarioItem.Name =
"configuracionesUsuarioItem";
4326 this.configuracionesUsuarioItem.Size =
new System.Drawing.Size(288, 22);
4327 this.configuracionesUsuarioItem.Text =
"Configuraciones de usuario";
4331 this.toolConfiguracionesToolStripMenuItem.Font =
new System.Drawing.Font(
"Segoe UI", 9F,
System.Drawing.FontStyle.Bold,
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
4332 this.toolConfiguracionesToolStripMenuItem.Name =
"toolConfiguracionesToolStripMenuItem";
4333 this.toolConfiguracionesToolStripMenuItem.Size =
new System.Drawing.Size(221, 22);
4334 this.toolConfiguracionesToolStripMenuItem.Text =
"Diseñador configuraciones";
4338 this.configuracionesUsuarioItemSeparator.Name =
"configuracionesUsuarioItemSeparator";
4339 this.configuracionesUsuarioItemSeparator.Size =
new System.Drawing.Size(285, 6);
4343 this.nombreFormularioToolStripMenuItem.Name =
"nombreFormularioToolStripMenuItem";
4344 this.nombreFormularioToolStripMenuItem.Size =
new System.Drawing.Size(288, 22);
4345 this.nombreFormularioToolStripMenuItem.Text =
"Nombre del formulario";
4349 this.ShowPropertiesToolStripMenuItem.Name =
"ShowPropertiesToolStripMenuItem";
4350 this.ShowPropertiesToolStripMenuItem.Size =
new System.Drawing.Size(288, 22);
4351 this.ShowPropertiesToolStripMenuItem.Text =
"Mostrar propiedades controles";
4355 this.gestiónDeFavoritosToolStripMenuItem.Name =
"gestiónDeFavoritosToolStripMenuItem";
4356 this.gestiónDeFavoritosToolStripMenuItem.Size =
new System.Drawing.Size(288, 22);
4357 this.gestiónDeFavoritosToolStripMenuItem.Text =
"Gestión de favoritos";
4361 this.gestiónDeAccesosToolStripMenuItem.Name =
"gestiónDeAccesosToolStripMenuItem";
4362 this.gestiónDeAccesosToolStripMenuItem.Size =
new System.Drawing.Size(288, 22);
4363 this.gestiónDeAccesosToolStripMenuItem.Text =
"Gestión de accesos";
4367 this.crearAccesoDirectoToolStripMenuItem.Name =
"crearAccesoDirectoToolStripMenuItem";
4368 this.crearAccesoDirectoToolStripMenuItem.Size =
new System.Drawing.Size(288, 22);
4369 this.crearAccesoDirectoToolStripMenuItem.Text =
"Crear acceso directo";
4373 this.crearTareaProgramadaItem.Name =
"crearTareaProgramadaItem";
4374 this.crearTareaProgramadaItem.Size =
new System.Drawing.Size(288, 22);
4375 this.crearTareaProgramadaItem.Text =
"Crear tarea programada";
4379 this.crearApunteCalendarioItem.Name =
"crearApunteCalendarioItem";
4380 this.crearApunteCalendarioItem.Size =
new System.Drawing.Size(288, 22);
4381 this.crearApunteCalendarioItem.Text =
"Nue&vo apunte calendario";
4385 this.listadosPersonalizablesEditarItem.Name =
"listadosPersonalizablesEditarItem";
4386 this.listadosPersonalizablesEditarItem.Size =
new System.Drawing.Size(288, 22);
4387 this.listadosPersonalizablesEditarItem.Text =
"Editar el listado personalizable";
4391 this.listadosPersonalizablesDuplicarItem.Name =
"listadosPersonalizablesDuplicarItem";
4392 this.listadosPersonalizablesDuplicarItem.Size =
new System.Drawing.Size(288, 22);
4393 this.listadosPersonalizablesDuplicarItem.Text =
"Duplicar y editar el listado personalizable";
4397 this.ayudaPantallaToolStripMenuItem.Name =
"ayudaPantallaToolStripMenuItem";
4398 this.ayudaPantallaToolStripMenuItem.Size =
new System.Drawing.Size(288, 22);
4399 this.ayudaPantallaToolStripMenuItem.Text =
"Ayuda";
4403 this._MenuContext_Opciones.Font =
new System.Drawing.Font(
"Segoe UI", 9.5F);
4404 this._MenuContext_Opciones.Name =
"ewcontextmenustripOpcProc";
4405 this._MenuContext_Opciones.Size =
new System.Drawing.Size(61, 4);
4409 this.ClientSize =
new System.Drawing.Size(284, 262);
4410 this.KeyPreview =
true;
4411 this.Name =
"FormBase";
4412 this.StartPosition =
System.Windows.Forms.FormStartPosition.CenterScreen;
4413 ((
System.ComponentModel.ISupportInitialize)(this._oErrorProvider)).EndInit();
4414 this.contextMenuStripPantalla.ResumeLayout(
false);
4415 this.ResumeLayout(
false);
4426 public List<T> _FindControl<T>(Control toControl = null)
4428 if (toControl == null)
4431 List<T> lstControls =
new List<T>();
4433 lstControls = AllControls(toControl).OfType<T>().ToList();
4443 private IEnumerable<Control> AllControls(Control container)
4445 foreach (Control control
in container.Controls)
4447 yield
return control;
4449 foreach (var innerControl
in AllControls(control))
4450 yield
return innerControl;
4459 protected override void WndProc(ref Message msgEW)
4461 if (msgEW.Msg != WM_SYSCOMMAND || (msgEW.Msg == WM_SYSCOMMAND && ( _ExecuteCommandBefore == null || _ExecuteCommandBefore.Invoke(
this, msgEW.WParam))))
4463 base.WndProc(ref msgEW);
4465 if (EW_GLOBAL._EsEjecutable)
4468 if (!
System.Diagnostics.Debugger.IsAttached && !NETVFP._ReceiveMessageFromVfp(ref msgEW))
4483 public virtual bool _Init(
object[] taParams)
4485 if (taParams.Count() > 0)
4487 _lAutomatico =
true;
4501 if (taParams != null && taParams.Length > 0)
4503 foreach (
object loItem
in taParams)
4506 if (loItem.ToString().StartsWith(FUNCTIONS._AccesoDirectoParametro))
4509 return FUNCTIONS._RecuperarParametrosAccesoDirecto(loItem.ToString(), ref this._ValoresAccesoDirecto);
4527 if (this._ValoresAccesoDirecto.Count > 0)
4529 string lcControl =
"", lcPropiedad =
"";
4530 object lcValor =
"";
4531 foreach (KeyValuePair<string, object> loItem
in this._ValoresAccesoDirecto)
4535 if (loItem.Key.Contains(
":"))
4537 lcControl = loItem.Key.Substring(0, loItem.Key.IndexOf(
":"));
4538 lcPropiedad = loItem.Key.Substring(loItem.Key.IndexOf(
":") + 1);
4539 lcValor = loItem.Value;
4541 Control loControl = this.__FindControlRecursive(lcControl);
4542 if (loControl != null)
4545 Type myType = loControl.GetType();
4546 PropertyInfo myPropInfo = myType.GetProperty(lcPropiedad);
4547 if (myPropInfo != null)
4552 if (lcPropiedad ==
"_Desde")
4553 (loControl as
txtFiltroBase)._oFiltroDesde._Codigo = Convert.ToString(lcValor);
4554 else if (lcPropiedad ==
"_Hasta")
4555 (loControl as
txtFiltroBase)._oFiltroHasta._Codigo = Convert.ToString(lcValor);
4556 else if (lcPropiedad ==
"_Todos")
4557 (loControl as
txtFiltroBase)._Todos = Convert.ToBoolean(lcValor);
4558 else if (lcPropiedad ==
"_Lista")
4559 (loControl as
txtFiltroBase)._Lista =
new List<string>(lcValor.ToString().Split(
','));
4564 object lcRealValue = lcValor;
4565 if (loControl is
ewcombobox && lcPropiedad.ToLower() ==
"selectedindex")
4566 lcRealValue = Convert.ToInt32(lcRealValue);
4568 lcRealValue = Convert.ToBoolean(lcRealValue);
4573 myPropInfo.SetValue(loControl, lcRealValue, null);
4597 if (toShapeContainer != null && !toShapeContainer.IsDisposed)
4599 if (toShapeContainer.Shapes != null)
4602 List<Microsoft.VisualBasic.PowerPacks.Shape> llisShapes =
new List<Microsoft.VisualBasic.PowerPacks.Shape>();
4603 foreach (Microsoft.VisualBasic.PowerPacks.Shape tshape in toShapeContainer.Shapes)
4605 llisShapes.Add(tshape);
4607 toShapeContainer.Shapes.Clear();
4608 toShapeContainer.Shapes.Dispose();
4610 foreach (Microsoft.VisualBasic.PowerPacks.Shape loShape in llisShapes)
4615 toShapeContainer.Dispose();
4619 [DllImport(
"user32")]
4620 private static extern IntPtr GetWindowDC(IntPtr hwnd);
4633 public virtual void _ControlError(Control toControl,
string tcMensaje, ErrorIconAlignment toAlineamiento = ErrorIconAlignment.MiddleLeft)
4635 _oErrorProvider.BlinkStyle = ErrorBlinkStyle.NeverBlink;
4636 _oErrorProvider.SetIconAlignment(toControl, toAlineamiento);
4637 _oErrorProvider.SetError(toControl, tcMensaje);
4640 string lcError =
"";
4641 if (!
string.IsNullOrWhiteSpace(tcMensaje))
4643 lcError = this._oErrorProvider.GetError(
this);
4644 lcError += (!
string.IsNullOrWhiteSpace(lcError) ? Environment.NewLine :
string.Empty) + tcMensaje;
4666 if(CanShow()) ShowDialog();
4675 if (CanShow())
Show();
4678 private bool CanShow()
4698 private List<IButtonBarraHerram> _oListButtonsSagePanel = null;
4703 internal List<IButtonBarraHerram> _ButtonsSagePanel
4707 List<IButtonBarraHerram> loListButtonsAddons;
4709 if ( _oListButtonsSagePanel == null )
4711 _oListButtonsSagePanel =
new List<IButtonBarraHerram>();
4714 if(AyudaActiva() && _oResultadoAyuda._Ayuda) _oListButtonsSagePanel.Add(
new AyudaNoticiasPantalla(
this, _oResultadoAyuda));
4720 if (_messageBoxAutomatic)
4724 if (loListButtonsAddons is List<IButtonBarraHerram> && loListButtonsAddons.Count > 0) _oListButtonsSagePanel.AddRange(loListButtonsAddons);
4727 return _oListButtonsSagePanel;
4736 _Show_Accesos(_Pantalla);
4748 _MessageBox(
"El usuario activo no tiene permisos para gestionar accesos a pantallas.", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, DialogResult.OK);
4766 private void gestiónDeFavoritosToolStripMenuItem_Click(
object sender, EventArgs e)
4768 this._Show_Favoritos();
4776 private void gestiónDeAccesosToolStripMenuItem_Click(
object sender, EventArgs e)
4778 this._Show_Accesos();
4787 private void crearAccesoDirectoToolStripMenuItem_Click(
object sender, EventArgs e)
4789 this._AsignarValoresAccesoDirecto();
4791 sage.
ew.
functions.
FUNCTIONS._CrearAccesoDirecto(_EliminarAcronimo(this.Text), this._Pantalla.Trim(), this._ValoresAccesoDirecto);
4810 private void crearApunteCalendarioItem_Click(
object sender, EventArgs e)
4812 functions.FUNCTIONS._CrearNuevoApunteCalendario(
this, _Pantalla);
4821 private void ayudaPantallaToolStripMenuItem_Click(
object sender, EventArgs e)
4823 _MostrarAyudaPantalla();
4834 if (_MostrarAyudaF1) FUNCTIONS._MostrarAyudaPantalla(this._PantallaAyuda);
4843 private void crearTareaProgramadaItem_Click(
object sender, EventArgs e)
4845 _CrearTareaProgramada(this._Pantalla);
4853 private void ConfiguracionesUsuarioItem_Click(
object sender, EventArgs e)
4860 FormBase loFormClon = this.Clone();
4861 loFormClon._ConfigUserForm = this._ConfigUserForm;
4862 loFormClon._ConfigUserOptionsEditing =
true;
4868 _ConfigUserForm = loConfig;
4869 _ConfigUserOptionsLoad(_ConfigUserForm._dicOpciones);
4873 loFormClon.Dispose();
4877 #region Opciones de menu para listados personalizables 4893 private void listadosPersonalizablesDuplicarItem_Click(
object sender, EventArgs e)
4901 MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
4910 private void listadosPersonalizablesEditarItem_Click(
object sender, EventArgs e)
4918 MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
4922 #endregion Opciones de menu para listados personalizables 4924 private void ShowPropertiesToolStripMenuItem_Click(
object sender, EventArgs e)
4926 if (Debugger.IsAttached)
4928 if (_oTimerProperties is Timer)
4930 ShowPropertiesToolStripMenuItem.Text =
"Mostrar propiedades controles";
4932 _InfoToolTip.Active =
false;
4934 _oTimerProperties.Stop();
4935 _oTimerProperties.Tick -= _oTimerProperties_Tick;
4936 _oTimerProperties.Dispose();
4937 _oTimerProperties = null;
4941 ShowPropertiesToolStripMenuItem.Text =
"Ocultar propiedades controles";
4943 _InfoToolTip.Active =
true;
4945 _oTimerProperties =
new Timer();
4946 _oTimerProperties.Tick += _oTimerProperties_Tick;
4947 _oTimerProperties.Interval = 500;
4948 _oTimerProperties.Start();
4953 private void _oTimerProperties_Tick(
object sender, EventArgs e)
4956 Point loPos = Cursor.Position;
4958 if (Bounds.Contains(loPos))
4960 loControl = _GetChild(loPos,
this);
4962 if ((loControl is Control &&
string.IsNullOrEmpty(_ControlNameShowing)) || (loControl is Control && loControl.Name != _ControlNameShowing))
4964 _ControlNameShowing = _InfoToolTip._GetControl(loControl).Name;
4965 _CreateTooltipInfo(loControl, loControl.DataBindings.Count > 0 ? loControl.Name :
"");
4966 if(!loControl.Enabled) _InfoToolTip.Show(loControl.Name,
this, PointToClient(loPos));
4968 else if(loControl == null && !
string.IsNullOrEmpty(_ControlNameShowing))
4970 _InfoToolTip.Hide(
this);
4971 _ControlNameShowing =
string.Empty;
4976 _ControlNameShowing =
string.Empty;
4980 private void _CreateTooltipInfo(Control toControl,
string tcText =
"")
4984 lcText =
string.IsNullOrEmpty(tcText) ? toControl.DataBindings.Count > 0 ? toControl.Name :
"" : tcText;
4986 if (!
string.IsNullOrEmpty(lcText)) _InfoToolTip._ControlToolTip(toControl, lcText);
4988 if (toControl.Controls.Count > 0)
4990 foreach (Control loControl
in toControl.Controls)
4992 lcText =
string.IsNullOrEmpty(tcText) ? loControl.DataBindings.Count > 0 ? loControl.Name :
"" : tcText;
4994 if (!
string.IsNullOrEmpty(lcText))
4996 _InfoToolTip._ControlToolTip(loControl, lcText);
4999 if (loControl.Controls.Count > 0)
5001 _CreateTooltipInfo(loControl, lcText);
5007 private string _ControlNameShowing;
5017 Control loControl = null;
5019 if(toBase is Control) loControl = toBase.GetChildAtPoint(toBase.PointToClient(toPoint), GetChildAtPointSkip.Invisible | GetChildAtPointSkip.Transparent);
5021 return loControl?.Controls.Count > 0 && loControl?.DataBindings.Count == 0? _GetChild(toPoint, loControl) : loControl;
5036 private void nombreFormularioToolStripMenuItem_Click(
object sender, EventArgs e)
5044 loFormul.
AddLine(
"TÃtulo", _EliminarAcronimo(this.Text));
5047 loFormul.
AddLine(
"LibrerÃa",
System.Reflection.Assembly.GetAssembly(
this.GetType()).Location);
5050 loFormul.
AddLine(
"Clase", this.GetType().Name);
5053 if (!
string.IsNullOrWhiteSpace(_PantallaAyuda))
5054 loFormul.
AddLine(
"Pantalla", _PantallaAyuda.Trim().ToUpper());
5057 loFormul.
AddLine(
"Namespace", GetType().Namespace);
5060 Dictionary<string, object> loAddons = null;
5063 loAddons = (
this as
FormMante)._ewMante._Addons;
5074 if (loAddons != null && loAddons.Count > 0)
5079 string lcDllAddon =
"", lcSubjectName =
"";
5080 foreach (KeyValuePair<string, object> loItem
in loAddons)
5086 string lcName =
"", lcTmp =
"";
5093 lcSubjectName = FUNCTIONS.GetDllNameInfo(lcDllAddon);
5094 if (!
string.IsNullOrWhiteSpace(lcSubjectName))
5095 lcTmp +=
" (" + lcSubjectName +
")";
5097 lcTmp +=
" (Sin firmar)";
5103 lcTmp +=
" - Extensión contratable";
5106 lcTmp +=
" - Extensión personalizada";
5111 lcTmp +=
" - Extensión incluida";
5116 if (
string.IsNullOrWhiteSpace(lcName))
5117 lcName = loItem.Key;
5120 loFormul.
AddLine(lcName, lcTmp);
5123 catch (Exception loError)
5125 DB.Registrar_Error(loError);
5141 String lcText = toText;
5143 if (!String.IsNullOrEmpty(_Acronimo)) lcText = lcText.Replace(_Acronimo,
"");
5144 lcText = lcText.TrimStart();
5155 private void reordenarPantallasToolStripMenuItem_Click(
object sender, EventArgs e)
5162 private void contextMenuStripPantalla_Opening(
object sender, CancelEventArgs e)
5170 bool lbSage50 = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_sage50"));
5174 contextMenuStripPantalla.Items[
"crearAccesoDirectoToolStripMenuItem"].Visible =
false;
5176 contextMenuStripPantalla.Items[
"crearAccesoDirectoToolStripMenuItem"].Visible = _MostrarCrearAccesoDirecto;
5180 contextMenuStripPantalla.Items[
"crearTareaProgramadaItem"].Visible =
false;
5182 contextMenuStripPantalla.Items[
"crearTareaProgramadaItem"].Visible = _MostrarCrearTareaProgramada;
5196 contextMenuStripPantalla.Items[
"listadosPersonalizablesEditarItem"].Visible =
false;
5199 contextMenuStripPantalla.Items[
"listadosPersonalizablesDuplicarItem"].Visible =
false;
5203 contextMenuStripPantalla.Items[
"listadosPersonalizablesDuplicarItem"].Visible = _MostrarDuplicarListado;
5209 contextMenuStripPantalla.Items[
"listadosPersonalizablesEditarItem"].Visible =
false;
5210 contextMenuStripPantalla.Items[
"listadosPersonalizablesDuplicarItem"].Visible =
false;
5213 ConfigureConfigUserOptions();
5222 private void ConfigureConfigUserOptions()
5226 if (Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_sage50")) && _ConfigUserOptionsAllowed)
5231 configuracionesUsuarioItem.Visible =
true;
5232 configuracionesUsuarioItemSeparator.Visible =
true;
5233 configuracionesUsuarioItem.DropDownItems.Clear();
5235 configuracionesUsuarioItem.DropDownItems.Add(toolConfiguracionesToolStripMenuItem);
5238 IEnumerable<ConfigUserForm> loList = _ConfigUserForm._ListaConfiguraciones().AsEnumerable();
5243 _GenerateMenuItemsConfigUser(loListConfUsers.Where(f => !f._Publico));
5245 _GenerateMenuItemsConfigUser(loListConfUsers.Where(f => f._Publico));
5247 _GenerateMenuItemsConfigUser(loListDefaultConfUsers);
5251 configuracionesUsuarioItem.Visible =
false;
5252 configuracionesUsuarioItemSeparator.Visible =
false;
5256 private void _GenerateMenuItemsConfigUser(IEnumerable<ConfigUserForm> toListConfigUsers)
5258 if (toListConfigUsers != null && toListConfigUsers.Count() > 0)
5260 configuracionesUsuarioItem.DropDownItems.Add(
new ToolStripSeparator());
5264 ToolStripMenuItem loMenuItem =
new ToolStripMenuItem();
5266 loMenuItem.Text = loConfig.
_Config;
5267 loMenuItem.Font =
new System.Drawing.Font(
"Segoe UI", 9F,
System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
5268 loMenuItem.Click += LoadConfigUserMenuItem_Click;
5269 loMenuItem.Tag = loConfig;
5273 configuracionesUsuarioItem.DropDownItems.Add(loMenuItem);
5283 private void LoadConfigUserMenuItem_Click(
object sender, EventArgs e)
5285 if (sender is ToolStripMenuItem && ((ToolStripMenuItem)sender).Tag is
ConfigUserForm)
5293 _ConfigUserForm = loConfig;
5307 #region Forzar Fuente 5317 if (EW_GLOBAL._EsEjecutable && _CambiarFuente)
5319 if (Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_sage50")))
5321 if (estiloRevisado ==
false)
5323 foreach (Control loControl
in Controls)
5325 FUNCTIONS._Cambiar_Font(loControl,
"Segoe UI");
5331 foreach (Control loControl
in Controls)
5333 FUNCTIONS._Cambiar_Font(loControl,
"Arial");
5340 this.MinimizeBox =
false;
5343 this._EstablecerParametrosFormulario();
5346 #endregion Forzar Fuente 5351 protected List<ToolStripMenuItemBase> _ToolStripMenuItemsBase =
new List<ToolStripMenuItemBase>();
5362 protected internal ToolStripMenuItemBase _AddToolStripMenuItemBase(
string tcNombre,
string tcNombre_Objeto,
string tcTooltip)
5366 _ToolStripMenuItemsBase.Add(loToolStripMenuItem);
5368 return loToolStripMenuItem;
5377 protected internal void _GetOpcionesInvoke(
object sender)
5382 throw new Exception(
"Este formulario no tiene ningún botón de Opciones o no está preparado para acceder a él");
5390 private void GetOpcionesHerramientasInvoke(
object sender , List<ToolStripMenuItemBase> tlstToolStripMenuItemsBase)
5392 _GetOpcionesHerramientas?.Invoke(
new EventArgsOpciones(sender, tlstToolStripMenuItemsBase));
5403 bool lITabDocAddon =
false, llOk =
true;
5404 Control loControlContenedor =
this;
5405 string lcNombre_Objeto = toControl.Name;
5410 llOk = AddonInsertarTabDocAddon(toControl, ref loControlContenedor);
5415 loControlContenedor.Controls.Add(toControl);
5436 if (this.lstOpcionesMenuAddon != null && this.lstOpcionesMenuAddon.Count > 0)
5438 string lcTituloMenu, lcName;
5439 bool llSeparador =
true;
5441 foreach (Control loControl
in this.lstOpcionesMenuAddon)
5445 if (llSeparador && toMenuStrip.Items.Count > 0)
5447 toMenuStrip.Items.Add(
"-");
5448 llSeparador =
false;
5451 toMenuStrip.Items.Add(lcTituloMenu);
5453 lcName = loControl.Name;
5455 if (
string.IsNullOrWhiteSpace(lcName))
5457 lcName = Convert.ToString(Guid.NewGuid()).ToUpper();
5458 loControl.Name = lcName;
5461 toMenuStrip.Items[toMenuStrip.Items.Count - 1].Name = lcName;
5462 toMenuStrip.Items[toMenuStrip.Items.Count - 1].Click +=
new EventHandler(FormManteOpcionesAddon_Click);
5473 private void FormManteOpcionesAddon_Click(
object sender, EventArgs e)
5475 string lcName = (sender as ToolStripMenuItem).Name;
5477 Control[] loControl = this.Controls.Find(lcName,
true);
5479 if (loControl != null)
5483 ((
ewbutton)loControl[0]).Enabled =
true;
5484 ((
ewbutton)loControl[0]).PerformClick();
5486 catch (Exception loEx)
5488 if (Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_prueva")) ||
System.Diagnostics.Debugger.IsAttached)
5489 this._MessageBox(
"Se ha producido la siguiente incidencia en la ejecución de la opción " + (sender as ToolStripMenuItem).
Text.Trim() +
": " + Environment.NewLine + Environment.NewLine + loEx.Message, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
5502 this.lstOpcionesMenuAddon.Add(toControl);
5505 if (
string.IsNullOrWhiteSpace(loIAddonBotonMenuDoc.
_TituloMenu) && toControl is
ewbutton && !
string.IsNullOrWhiteSpace(toControl.Text))
5506 loIAddonBotonMenuDoc.
_TituloMenu = toControl.Text;
5509 toControl.Left = -10000;
5510 toControl.Top = -10000;
5511 toControl.Width = 1;
5512 toControl.Height = 1;
5514 AddonBotonMenuDocDocumento(toControl);
5523 private void AddonBotonMenuDocDocumento(Control toControl)
5525 dynamic loDocumento = null;
5530 loDocumento = ((
FormMante)
this)._ewMante;
5531 else if (
this is FormBaseDocumento)
5532 loDocumento = ((FormBaseDocumento)
this)._Documento;
5534 if (loDocumento != null)
5537 loIAddonBotonMenuDoc.
_Documento = loDocumento;
5547 private void ControlRefreshRecursive(Control toContenedor,
bool tlChild =
false)
5549 if (!toContenedor.HasChildren)
5552 foreach (Control loControlChild
in toContenedor.Controls)
5553 _ControlRefresh(loControlChild, tlChild);
5563 if (toControl == null)
5566 dynamic loControlDynamic = toControl;
5571 Type ltType = Type.GetType(loControlDynamic.GetType().AssemblyQualifiedName);
5573 MethodInfo objMethod = ltType.GetMethod(
"_Refresh");
5574 llRefresh = (objMethod != null);
5581 loControlDynamic._Refresh();
5583 catch (Exception loEx)
5585 if (Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_prueva")) ||
System.Diagnostics.Debugger.IsAttached)
5586 this._MessageBox(
"Se ha producido la siguiente incidencia en la ejecución del método Refresh del control " + toControl.Name +
": " + Environment.NewLine + Environment.NewLine + loEx.Message, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
5590 ControlRefreshRecursive(toControl);
5599 private void ControlDocumentoRecursive(Control toContenedor, dynamic toDocumento,
bool tlChild =
false)
5601 if (!toContenedor.HasChildren)
5604 foreach (Control loControlChild
in toContenedor.Controls)
5605 _ControlDocumento(loControlChild, toDocumento, tlChild);
5616 if (toControl == null || toDocumento == null)
5619 dynamic loControlDynamic = toControl;
5624 Type ltType = Type.GetType(loControlDynamic.GetType().AssemblyQualifiedName);
5626 MemberInfo[] objMember = ltType.GetMember(
"_Documento");
5627 llDocumento = (objMember.Length > 0);
5634 loControlDynamic._Documento = toDocumento;
5636 catch (Exception loEx)
5638 if (Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_prueva")) ||
System.Diagnostics.Debugger.IsAttached)
5639 this._MessageBox(
"Se ha producido la siguiente incidencia en la asignación del documento al control " + toControl.Name +
": " + Environment.NewLine + Environment.NewLine + loEx.Message, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.OK);
5643 ControlDocumentoRecursive(toControl, toDocumento, tlChild);
5652 private bool AddonInsertarTabDocAddon(Control toControl, ref Control toControlContenedor)
5657 foreach (Control loControl
in Controls)
5666 if (loewtabcontrol != null)
5668 Control loPagina = AddonNuevaPaginaTabDoc(toControl, loewtabcontrol);
5671 loewFlowLayoutPanel.Size = loewtabcontrol.TabPages[0].Size;
5672 loewFlowLayoutPanel.Dock = DockStyle.Fill;
5673 loPagina.Controls.Add(loewFlowLayoutPanel);
5674 loPagina.Dock = DockStyle.Fill;
5676 toControlContenedor = loewFlowLayoutPanel;
5692 loewFlowLayoutPanel.AutoScroll =
true;
5693 loewFlowLayoutPanel.WrapContents =
true;
5699 return loewFlowLayoutPanel;
5707 private string AddonNombrePagina(
ewtabcontrol toewtabcontrol)
5709 string lcName =
string.Empty;
5711 lcName =
"AddonPagina" + Convert.ToString(toewtabcontrol.TabPages.Count);
5722 private Control AddonNuevaPaginaTabDoc(Control toControl,
ewtabcontrol toewtabcontrol)
5724 Control loControlewTabPage = null;
5725 string lcewtabcontrol = toewtabcontrol.Name, lcTitulo =
string.Empty, lcName =
string.Empty;
5730 lcName = toControl.Name;
5732 if (
string.IsNullOrWhiteSpace(lcName))
5733 lcName = AddonNombrePagina(toewtabcontrol);
5735 loControlewTabPage.Name = lcName;
5738 toewtabcontrol.Controls.Add(loControlewTabPage);
5744 CambiarIndiceTabpage(toewtabcontrol, loewTabPage, 0);
5747 return loControlewTabPage;
5756 private void CambiarIndiceTabpage(
ewtabcontrol toewtabcontrol,
ewTabPage toewTabPage,
int tnNuevoIndice)
5760 int lnIndiceTabPage = toewtabcontrol.TabPages.IndexOf(toewTabPage);
5762 for (
int lnIndice = 0; lnIndice < lnIndiceTabPage; lnIndice++)
5764 loewTabPage = (
ewTabPage)toewtabcontrol.TabPages[0];
5766 toewtabcontrol.TabPages.Remove(loewTabPage);
5767 toewtabcontrol.TabPages.Add(loewTabPage);
5775 #region Ayuda contextual 5776 private bool _lFormActivated =
true;
5777 private bool _lPresentandoAyuda =
false;
5778 private BackgroundWorker _oBackgroundWorker;
5784 private string _cTituloFormulario =
"";
5796 get {
return _lAyuda; }
5797 set { _lAyuda = value; }
5806 get {
return _oAyudaContextual; }
5807 set { _oAyudaContextual = value; }
5816 get {
return _oOnBoardingController; }
5817 set { _oOnBoardingController = value; }
5826 private bool AyudaActiva()
5832 bool llActiva =
true;
5834 object loObject = EW_GLOBAL._GetVariable(
"wl_DesactivarOnBoarding");
5836 if (loObject != null)
5840 llActiva = !Convert.ToBoolean(loObject);
5854 protected virtual string _PantallaAyuda
5856 get {
return _Pantalla; }
5862 private bool _lPantalla0Showed =
false;
5867 private bool _lPantalla0ShowAfterLogin =
false;
5872 private void AyudaOnBoarding()
5874 if (!IsDisposed && !Disposing )
5876 if (BarrasAyudaActivas())
5878 if (
string.IsNullOrWhiteSpace(_PantallaAyuda) || !AyudaActiva() || botonayuda ==
eAyudaContextual.Desactivada)
5880 _FormSagePanel?._Show(_ButtonsSagePanel,
this);
5885 _oBackgroundWorker =
new BackgroundWorker();
5886 _oBackgroundWorker.WorkerSupportsCancellation =
true;
5887 _oBackgroundWorker.WorkerReportsProgress =
false;
5890 _oBackgroundWorker.DoWork +=
new DoWorkEventHandler(_ExecuteRunWorkerAyuda);
5891 _oBackgroundWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(_RunWorkerCompletedAyuda);
5894 _oBackgroundWorker.RunWorkerAsync();
5900 private bool BarrasAyudaActivas()
5902 DataTable loDt =
new DataTable();
5903 string lcDataBase, lcComunes, lcSql;
5905 if (!EW_GLOBAL._ContainsKey(
"wl_barras_ayuda_form"))
5908 lcDataBase = DB.SQLDatabaseReal(lcComunes,
"VARIABLE");
5910 lcSql = $
"SELECT VALOR FROM {lcDataBase} WHERE VARIABLE = 'NO_AYUDA' ";
5911 if(DB.SQLExec(lcSql, ref loDt)) EW_GLOBAL.ValorEnClave_VarGlob(
"wl_barras_ayuda_form", loDt.Rows.Count == 0);
5914 return Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_barras_ayuda_form",
true));
5922 private void _ExecuteRunWorkerAyuda(
object sender, DoWorkEventArgs e)
5924 oResultadoAyuda loResult =
new oResultadoAyuda();
5925 loResult._Ayuda =
false;
5931 if (loOnBoardingController != null && !loOnBoardingController.
_PlayingVideo)
5934 loAyudaContextual.
_Load(_PantallaAyuda.ToUpper());
5938 loResult._OnBoardingController = loOnBoardingController;
5939 loResult._AyudaContextual = loAyudaContextual;
5940 loResult._Ayuda =
true;
5944 catch (Exception loEx)
5946 DB.Registrar_Error(loEx);
5949 e.Result = loResult;
5957 private void _RunWorkerCompletedAyuda(
object sender, RunWorkerCompletedEventArgs e)
5959 if (!e.Cancelled && e.Error == null &&!FormDisposed())
5961 _oResultadoAyuda = ((oResultadoAyuda)e.Result);
5963 if (_oResultadoAyuda._Ayuda)
5968 if (PresentarAyudaNuevasNoticias(_oResultadoAyuda))
5972 _oResultadoAyuda._Ayuda =
true;
5974 if (_lPantalla0ShowAfterLogin && !_lPantalla0Showed && Ayuda_FormularioActivo())
5975 _WalkthroughsPantalla0();
5981 _FormSagePanel?._Show(_ButtonsSagePanel,
this);
5994 private bool PresentarAyudaNuevasNoticias(oResultadoAyuda toResultadoAyuda)
5998 if (!_oResultadoAyuda._Ayuda)
6002 if ( _oResultadoAyuda._AyudaContextual._PresentacionAyuda !=
Presentacion.No)
6006 if (_oResultadoAyuda._AyudaContextual._NoticiasNuevasPendientesLeer > 0)
6015 private bool EsPantalla0
6017 get {
return _PantallaAyuda ==
"PANTALLA0"; }
6026 _lPantalla0ShowAfterLogin =
true;
6028 if (EsPantalla0 && !FUNCTIONS._CanUseWebView())
6031 if (_oResultadoAyuda._Ayuda ==
false || !EsPantalla0 || _lPantalla0Showed)
6034 _lPantalla0Showed =
true;
6038 if (loOnBoardingController != null)
6040 _lPantalla0Showed = ((
OnBoardingControllerSage50)loOnBoardingController)._ShowWalkthroughs(_oResultadoAyuda._AyudaContextual);
6042 return _lPantalla0Showed;
6053 private Point CalculateLocationAyuda(Rectangle toRectangle)
6055 Rectangle loRectScreen = Screen.PrimaryScreen.WorkingArea;
6056 Point loPoint = toRectangle.Location;
6057 int lnOffsetX = 20, lnOffsetY = 50;
6061 loPoint.X = (loRectScreen.Width / 2) + (Size.Width / 2) - lnOffsetX;
6062 loPoint.Y = (loRectScreen.Height / 2) - (Size.Height / 2) + lnOffsetY;
6066 loPoint.X = Location.X + Size.Width - lnOffsetX;
6067 loPoint.Y = Location.Y + lnOffsetY;
6070 if (loPoint.X + toRectangle.Size.Width > loRectScreen.Width)
6071 loPoint.X = loRectScreen.Width - lnOffsetX - toRectangle.Width;
6073 if (loPoint.Y + toRectangle.Size.Height > loRectScreen.Height)
6074 loPoint.Y = (loRectScreen.Height / 2) - (toRectangle.Height / 2);
6086 Point loPoint =
new Point(toAyudaContextual.
_Left, toAyudaContextual.
_Top);
6088 if (loPoint ==
new Point(0, 0) ||
6089 loPoint.X > Screen.PrimaryScreen.Bounds.Size.Width || loPoint.Y > Screen.PrimaryScreen.Bounds.Size.Height)
6091 loPoint = CalculateLocationAyuda(_oFormAyuda.Bounds);
6094 if (toAyudaContextual.
_Height > 0)
6096 Size loSize = _oFormAyuda.Size;
6097 loSize.Height = toAyudaContextual.
_Height;
6099 if (_oFormAyuda.Size != loSize)
6100 _oFormAyuda.Size = loSize;
6103 _oFormAyuda.Location = loPoint;
6112 return (IsDisposed || Disposing);
6115 private void CambiarBotonAyudaMensaje()
6117 if (!EsPantalla0 && _oResultadoAyuda._AyudaContextual != null && !FormDisposed())
6119 int numnoticias = _oResultadoAyuda._AyudaContextual._NoticiasPendientesLeer;
6126 if (item.Name ==
"Ayuda")
6129 if (numnoticias > 0)
6131 string lcTooltip =
" Noticias";
6132 item.ForeColor = Color.FromArgb(0, 129, 70);
6133 item.Font =
new Font(
"Segoe UI", 8.5F);
6136 if (numnoticias == 1)
6139 lcTooltip =
" Noticia";
6141 else if (numnoticias < 100)
6142 item.
Text = numnoticias.ToString().Trim();
6147 menu.
ToolTip.SetToolTip(item, item.
Text+lcTooltip);
6161 private void MostrarCfgUsabilidad()
6166 frmCfg._ShowDialog();
6175 if (_oFormAyuda != null && !_oFormAyuda.IsDisposed && !_oFormAyuda.Disposing)
6186 if (toAyudaContextual == null)
6189 toAyudaContextual.
_Load(_Pantalla.ToUpper());
6198 _oFormAyuda.Owner =
this;
6199 _oFormAyuda.Opacity = 0;
6204 LocationAyuda(toAyudaContextual);
6213 if (_lFormActivated)
6214 _oFormAyuda.Opacity = 1;
6216 _oFormAyuda.
_Hide();
6218 AyudaSubscripcionEventos();
6224 private void FormAyuda__RefreshNoticiasPendientes()
6226 CambiarBotonAyudaMensaje();
6232 private void DevolverFocusAyuda()
6237 RepaintActiveButton();
6243 private void RepaintActiveButton()
6245 foreach (Control loItem
in menu.
Items)
6255 private void AyudaSubscripcionEventos()
6257 FormClosed += Ayuda_FormClosed;
6258 SizeChanged += Ayuda_SizeChanged;
6266 private void Ayuda_SizeChanged(
object sender, EventArgs e)
6268 if (AyudaIsPlayingVideo())
6271 if (WindowState == FormWindowState.Minimized)
6273 if (_oFormAyuda != null && !_oFormAyuda.IsDisposed && !_oFormAyuda.Disposing && _oFormAyuda.Visible && !_lPresentandoAyuda)
6278 if (AyudaOcultada())
6288 private void Ayuda_FormClosed(
object sender, FormClosedEventArgs e)
6290 if (_oFormAyuda != null && !_oFormAyuda.IsDisposed && !_oFormAyuda.Disposing)
6291 _oFormAyuda.Close();
6299 private void OcultarAyuda()
6301 _oFormAyuda.
_Hide();
6309 private bool AyudaIsPlayingVideo()
6317 private void TimerAyuda()
6319 Timer loTimerAyuda =
new Timer();
6320 loTimerAyuda.Interval = 100;
6321 loTimerAyuda.Tick +=
new EventHandler(TimerAyuda_Tick);
6322 loTimerAyuda.Start();
6330 private void TimerAyuda_Tick(
object sender, EventArgs e)
6332 Timer loTimer = (Timer)sender;
6341 private void ShowAyuda()
6343 if (AyudaOcultada())
6345 _lPresentandoAyuda =
true;
6348 DevolverFocusAyuda();
6350 _lPresentandoAyuda =
false;
6359 private bool AyudaOcultada()
6361 return (!Disposing && !IsDisposed && _oFormAyuda != null && !_oFormAyuda.IsDisposed && !_oFormAyuda.Disposing && (!_oFormAyuda.Visible || _oFormAyuda.Opacity == 0) && !_oFormAyuda.
_OcultandoAyuda && (WindowState != FormWindowState.Minimized || Location.X > 0));
6370 private void Ayuda_Deactivate(
object sender, EventArgs e)
6372 if (_oFormAyuda == null || AyudaIsPlayingVideo() || Ayuda_FormularioActivo())
6375 _lFormActivated =
false;
6379 if (_oFormAyuda != null && !_oFormAyuda.IsDisposed && !_oFormAyuda.Disposing && _oFormAyuda.Visible && !_oFormAyuda.Focused && !_lPresentandoAyuda)
6381 Point loPoint =
new Point(Cursor.Position.X, Cursor.Position.Y);
6382 Rectangle loRect =
new Rectangle(loPoint,
new Size(10, 10));
6384 if (!_oFormAyuda.Bounds.IntersectsWith(loRect))
6395 private bool Ayuda_FormularioActivo()
6397 return (EW_GLOBAL._OpenForms.Count > 0 && EW_GLOBAL._OpenForms.Peek() ==
this);
6405 private void Ayuda_Activated(
object sender, EventArgs e)
6407 _lFormActivated =
true;
6409 if (_oFormAyuda == null || _lPresentandoAyuda)
6414 if (AyudaOcultada())
6417 #endregion Ayuda contextual 6420 #region classe O365CalendarEntryPoint 6455 public int _Id {
get;
set; }
6459 public new string _Pantalla {
get;
set; }
6463 public new string _Nombre {
get;
set; }
6467 public string _Valor {
get;
set; }
6471 public string _Propiedad {
get;
set; }
6477 private bool _LoadCalendarEntryPoint()
6480 DataTable ldtMante =
new DataTable();
6481 string lcClase =
string.Empty;
6482 string lcSql =
string.Empty;
6485 if (!
string.IsNullOrWhiteSpace(_Pantalla))
6488 lcSql =
"SELECT pantalla AS pantalla,MAX(id) AS id " +
6489 "FROM " + DB.SQLDatabase(
"comunes",
"calendar") +
" " +
6490 "WHERE pantalla = " + DB.SQLString(_Pantalla) +
" " +
6491 "GROUP BY pantalla ";
6493 DB.SQLExec(lcSql, ref ldtMante);
6496 if (ldtMante != null && ldtMante.Rows.Count > 0)
6498 int lnId = Convert.ToInt32(ldtMante.Rows[0][
"Id"]);
6501 lcSql =
"SELECT pantalla, clase, libreria, nombre, menu, lista " +
6502 "FROM " + DB.SQLDatabase(
"comunes",
"calendar") +
" " +
6503 "WHERE pantalla = " + DB.SQLString(this._Pantalla) +
" AND id = " + DB.SQLString(lnId) +
" ";
6505 DB.SQLExec(lcSql, ref ldtMante);
6508 if (ldtMante != null && ldtMante.Rows.Count > 0)
6510 lcClase = Convert.ToString(ldtMante.Rows[0][
"Clase"]).Trim() +
"," + Convert.ToString(ldtMante.Rows[0][
"Libreria"]).Trim();
6512 Type elementType = Type.GetType(lcClase);
6514 if (elementType != null)
6528 #endregion classe O365CalendarEntryPoint string _TituloPagina
Nos indica el tÃtulo de la página
Boolean _Show_Gestion_Accesos(String tcPantalla, string tcDescripcion="")
PE-86721 Este método presentará el formulario de Gestión de Accesos. PE-90297: añadimos el parámetro ...