/// <summary> /// Returns true if the Detail will be shown in the Tree /// </summary> /// <param name="lDetail"></param> /// <returns></returns> private bool CalculateShowInTree(IDetailController detail) { // If it has no role path, won't be shown in the Tree ExchangeInfoNavigation lNavInfo = detail.ExchangeInformation as ExchangeInfoNavigation; if (lNavInfo != null && lNavInfo.RolePath.Equals("")) { return(false); } // If it is a Master Detail and its Master is a Population with Filters, won't be shown in the Tree IUMasterDetailController lMasterDetail = detail as IUMasterDetailController; if (lMasterDetail != null) { IUPopulationController lPopulationController = lMasterDetail.Master as IUPopulationController; if (lPopulationController != null && lPopulationController.Filters.Count > 0) { return(false); } else { return(true); } } // It is not a Master Detail and its role path is not empty return(false); }
/// <summary> /// ANalize the Master Detail controller and creates the suitable nodes /// </summary> /// <param name="masterDetailController"></param> /// <param name="showDetailsGroupingNode"></param> private void InitializeMasterDetailNode(IUMasterDetailController masterDetailController, bool showDetailsGroupingNode) { // Keep the Master information. QueryContext = masterDetailController.Master.Context; // Initialize the DisplaySet information. mDisplaySetInfo = new DisplaySetInformation(masterDetailController.Master.DisplaySet.DisplaySetList[0].Name); // It has to be considered only the items that the agent is able to access. mDisplaySetInfo.DisplaySetItems = masterDetailController.Master.DisplaySet.DisplaySetList[0].GetVisibleDisplaySetItems(Logic.Agent.ClassName); QueryContext.DisplaySetAttributes = mDisplaySetInfo.GetDisplaySetItemsAsString(); Alias = CultureManager.TranslateString(masterDetailController.IdXMLDetailAlias, masterDetailController.DetailAlias); Action = masterDetailController.Master.Action; Navigation = masterDetailController.Master.Navigation; masterDetailController.Master.Action = null; masterDetailController.Master.Navigation = null; IUPopulationController lPopController = masterDetailController.Master as IUPopulationController; if (lPopController != null) { foreach (IUFilterController lFilter in lPopController.Filters) { Filters.Add(lFilter); } lPopController.Filters.Clear(); } // Analize every detail properties #region Details sub-nodes creation int nodeCounter = 0; TreeNodeController lSubNode = null; // Process all the Master-Detail details, in order to create the suitable sub-nodes. foreach (IDetailController lDetail in masterDetailController.Details) { bool lShowInTree = CalculateShowInTree(lDetail); lSubNode = new TreeNodeController(NodeId, NodeId + "_" + nodeCounter.ToString(), lDetail, null, false, showDetailsGroupingNode, lShowInTree); mSubNodes.Add(lSubNode); // Suscribe subnode events lSubNode.RefreshRequired += new EventHandler <RefreshNodeRequiredEventArgs>(HandleSubNodeRefreshRequired); lSubNode.ContextRequired += new EventHandler <ContextRequiredEventArgs>(HandleSubNodeContextRequired); nodeCounter++; // Special situation. If this Detail won't be shown in the Tree // assign the FinalNodeController. Only for the first one if (!lSubNode.ShowInTree && FinalNodeQueryController == null) { FinalNodeID = lSubNode.NodeId; FinalNodeQueryController = lDetail; lSubNode.ShowGroupingNode = false; } } #endregion Details sub-nodes creation // Empty the detail list masterDetailController.Details.Clear(); }
/// <summary> /// Load the internal infomration based on the Master-Detail controller /// </summary> /// <param name="masterDetailController"></param> public IUTreeController(IUMasterDetailController masterDetailController) : base() { mRefreshMenuItems = new List<ITriggerPresentation>(); // Get the information from the MasterDetail received and convert it ConvertMasterDetailInfo(masterDetailController); // Load the Exchange Information mMasterDetailExchangeInfo = masterDetailController.ExchangeInformation; // Copy Name and Context Name = masterDetailController.Name; Context = masterDetailController.Context; }
/// <summary> /// Calculate if the node representing the Master will require Intermedia nodes /// </summary> /// <param name="masterDetailController"></param> /// <returns></returns> private bool CalculateDetailsGroupingNode(IUMasterDetailController masterDetailController) { // If there is just one detail if (masterDetailController.Details.Count == 1) { return(false); } // If there is more than 2 if (masterDetailController.Details.Count > 2) { return(true); } // There is only 2 int lNumNoPath = 0; int lNumNoInTree = 0; foreach (IDetailController lDetail in masterDetailController.Details) { ExchangeInfoNavigation lNavInfo = lDetail.ExchangeInformation as ExchangeInfoNavigation; if (lNavInfo != null && lNavInfo.RolePath.Equals("")) { lNumNoPath++; } else { IUMasterDetailController lMasterDetail = lDetail as IUMasterDetailController; if (lMasterDetail != null) { // This detail won't de represented in the Tree if the Master is a population with filters IUPopulationController lPopController = lMasterDetail.Master as IUPopulationController; if (lPopController != null && lPopController.Filters.Count > 0) { lNumNoInTree++; } } else { lNumNoInTree++; } } } // Just one can be shown when this node is selected or both must appear in the tree if (lNumNoPath + lNumNoInTree != 1) { return(true); } return(false); }
/// <summary> /// Initializes the nodes controller. /// </summary> private void InitializeNode(IDetailController queryController) { if (ShowInTree) { IUMasterDetailController masterDetailController = queryController as IUMasterDetailController; if (masterDetailController != null) { InitializeMasterDetailNode(masterDetailController, CalculateDetailsGroupingNode(masterDetailController)); } } else { // It is a final node, will not be shown in the Tree. FinalNodeQueryController = queryController; Alias = CultureManager.TranslateString(FinalNodeQueryController.IdXMLDetailAlias, FinalNodeQueryController.DetailAlias); } }
/// <summary> /// Initialize pagination state, for detail of this master. /// </summary> /// <param name="controller">Detail pattern controller.</param> /// <returns></returns> private bool ClearLastOids(IDetailController controller) { if (controller != null) { switch (controller.Context.ContextType) { case ContextType.Population: IUPopulationController lPopulationController = controller as IUPopulationController; if (lPopulationController != null) { if (lPopulationController.Context != null) { lPopulationController.Context.LastOids.Clear(); return(true); } } return(false); case ContextType.MasterDetail: IUMasterDetailController masterDetailController = controller as IUMasterDetailController; if (masterDetailController != null) { ClearLastOids(masterDetailController.Master); foreach (IDetailController lDetail in masterDetailController.Details) { if (!ClearLastOids(lDetail as IUMasterDetailController)) { ClearLastOids(lDetail); } } return(true); } break; default: return(true); } } return(true); }
/// <summary> /// Calculate if the node representing the Master will require Intermedia nodes /// </summary> /// <param name="masterDetailController"></param> /// <returns></returns> private bool CalculateDetailsGroupingNode(IUMasterDetailController masterDetailController) { // If there is just one detail if (masterDetailController.Details.Count == 1) return false; // If there is more than 2 if (masterDetailController.Details.Count > 2) return true; // There is only 2 int lNumNoPath = 0; int lNumNoInTree = 0; foreach (IDetailController lDetail in masterDetailController.Details) { ExchangeInfoNavigation lNavInfo = lDetail.ExchangeInformation as ExchangeInfoNavigation; if (lNavInfo != null && lNavInfo.RolePath.Equals("")) { lNumNoPath++; } else { IUMasterDetailController lMasterDetail = lDetail as IUMasterDetailController; if (lMasterDetail != null) { // This detail won't de represented in the Tree if the Master is a population with filters IUPopulationController lPopController = lMasterDetail.Master as IUPopulationController; if (lPopController != null && lPopController.Filters.Count > 0) lNumNoInTree++; } else { lNumNoInTree++; } } } // Just one can be shown when this node is selected or both must appear in the tree if (lNumNoPath + lNumNoInTree != 1) return true; return false; }
/// <summary> /// ANalize the Master Detail controller and creates the suitable nodes /// </summary> /// <param name="masterDetailController"></param> /// <param name="showDetailsGroupingNode"></param> private void InitializeMasterDetailNode(IUMasterDetailController masterDetailController, bool showDetailsGroupingNode) { // Keep the Master information. QueryContext = masterDetailController.Master.Context; // Initialize the DisplaySet information. mDisplaySetInfo = new DisplaySetInformation(masterDetailController.Master.DisplaySet.DisplaySetList[0].Name); // It has to be considered only the items that the agent is able to access. mDisplaySetInfo.DisplaySetItems = masterDetailController.Master.DisplaySet.DisplaySetList[0].GetVisibleDisplaySetItems(Logic.Agent.ClassName); QueryContext.DisplaySetAttributes = mDisplaySetInfo.GetDisplaySetItemsAsString(); Alias = CultureManager.TranslateString(masterDetailController.IdXMLDetailAlias, masterDetailController.DetailAlias); Action = masterDetailController.Master.Action; Navigation = masterDetailController.Master.Navigation; masterDetailController.Master.Action = null; masterDetailController.Master.Navigation = null; IUPopulationController lPopController = masterDetailController.Master as IUPopulationController; if (lPopController != null) { foreach (IUFilterController lFilter in lPopController.Filters) { Filters.Add(lFilter); } lPopController.Filters.Clear(); } // Analize every detail properties #region Details sub-nodes creation int nodeCounter = 0; TreeNodeController lSubNode = null; // Process all the Master-Detail details, in order to create the suitable sub-nodes. foreach (IDetailController lDetail in masterDetailController.Details) { bool lShowInTree = CalculateShowInTree(lDetail); lSubNode = new TreeNodeController(NodeId, NodeId + "_" + nodeCounter.ToString(), lDetail, null, false, showDetailsGroupingNode, lShowInTree); mSubNodes.Add(lSubNode); // Suscribe subnode events lSubNode.RefreshRequired += new EventHandler<RefreshNodeRequiredEventArgs>(HandleSubNodeRefreshRequired); lSubNode.ContextRequired += new EventHandler<ContextRequiredEventArgs>(HandleSubNodeContextRequired); nodeCounter++; // Special situation. If this Detail won't be shown in the Tree // assign the FinalNodeController. Only for the first one if (!lSubNode.ShowInTree && FinalNodeQueryController == null) { FinalNodeID = lSubNode.NodeId; FinalNodeQueryController = lDetail; lSubNode.ShowGroupingNode = false; } } #endregion Details sub-nodes creation // Empty the detail list masterDetailController.Details.Clear(); }
/// <summary> /// Converts the Master-Detail structure to Tree-Node structure /// </summary> /// <param name="masterDetailController"></param> private void ConvertMasterDetailInfo(IUMasterDetailController masterDetailController) { // Assign the Alias and the IdXML properties from the IUMasterDetailController controller. this.Alias = masterDetailController.Alias; this.IdXML = masterDetailController.IdXML; // Main Master controller TreeNodeController lRootNode = null; // If the Main Master is a Instance if (masterDetailController.Master.GetType().Name.Equals("IUInstanceController")) { int nodeCounter = 0; // If there is more than one detail, show the grouping node bool showGroupingNode = masterDetailController.Details.Count > 1; foreach (IDetailController detail in masterDetailController.Details) { lRootNode = new TreeNodeController("", nodeCounter.ToString(), detail, (masterDetailController.Master as IUInstanceController), false, showGroupingNode); RootNodes.Add(lRootNode); lRootNode.RefreshRequired += new EventHandler<RefreshNodeRequiredEventArgs>(HandleRootNodeRefreshRequired); lRootNode.ContextRequired += new EventHandler<ContextRequiredEventArgs>(HandleRootNodeContextRequired); lRootNode.ExecuteFilter += new EventHandler<ExecuteFilterEventArgs>(HandleRootNodeExecuteFilter); nodeCounter++; } // Assign the Instance Main Master InstanceMasterController = masterDetailController.Master as IUInstanceController; } else { // Main master is a population lRootNode = new TreeNodeController("", "0", masterDetailController, null, true, false,true); RootNodes.Add(lRootNode); masterDetailController.Details.Clear(); lRootNode.RefreshRequired += new EventHandler<RefreshNodeRequiredEventArgs>(HandleRootNodeRefreshRequired); lRootNode.ContextRequired += new EventHandler<ContextRequiredEventArgs>(HandleRootNodeContextRequired); lRootNode.ExecuteFilter += new EventHandler<ExecuteFilterEventArgs>(HandleRootNodeExecuteFilter); } // Remove the existing details masterDetailController.Details.Clear(); }
/// <summary> /// Creates the specific IUMasterDetailController of the 'MDIU_PasajeroAeronave' IU pattern. /// </summary> /// <param name="exchangeInfo">Exchange information received.</param> /// <returns>Specific IUMasterDetailController of the 'MDIU_PasajeroAeronave' IU pattern.</returns> public static IUMasterDetailController MasterDetail_MDIU_PasajeroAeronave(ExchangeInfo exchangeInfo) { IUMasterDetailContext lContext = new IUMasterDetailContext("PasajeroAeronave", "MDIU_PasajeroAeronave"); IUMasterDetailController lController = new IUMasterDetailController("MDIU_PasajeroAeronave", "PasajeroAeronave", "Clas_1348178542592177UIMaDet_1_Alias", lContext, null); // Master interaction unit. lController.Master = Instance_IIU_PasajeroAeronave(exchangeInfo); // Detail interaction units. ExchangeInfoNavigation infoDetail0 = new ExchangeInfoNavigation("Pasajero", "", "PasajeroAeronave","", null, null, ""); lController.AddDetail(Pasajero.Population_PIU_Pasajero(infoDetail0), "Pasajero", "Clas_1348178542592177UIMaDet_1Det_2_Alias"); return lController; }
/// <summary> /// Initializes the 'MDIU_PasajeroAeronaveIT' instance form. /// </summary> /// <param name="exchangeInfo">Exchange information</param> /// <returns>IUMasterDetailController</returns> public IUMasterDetailController Initialize(ExchangeInfo exchangeInfo) { Controller = ControllerFactory.PasajeroAeronave.MasterDetail_MDIU_PasajeroAeronave(exchangeInfo); Controller.Scenario = new ScenarioPresentation(this, ScenarioType.MasterDetail); #region Master-Detail MDIU_PasajeroAeronave Links IUInstanceController ControllerMaster = Controller.Master as IUInstanceController; #region Instance IIU_PasajeroAeronave Links // DisplaySet ControllerMaster.DisplaySet.Viewer = new ListViewPresentation(lstViewDisplaySetMaster, MastertoolStripExportExcel, MastertoolStripExportWord, MastertoolStripRefresh, MastertoolStripHelp, MasteroptionsToolStripMenuItem, mnuNavigationsMaster); // OID Selector ControllerMaster.OidSelector.Label = new LabelPresentation(this.lOIDSelectorMaster); ControllerMaster.OidSelector.Editors[0] = new MaskedTextBoxPresentation(this.maskedTextBoxMasterid_PasajeroAeronave1); ControllerMaster.OidSelector.Trigger = new ButtonPresentation(this.bOIDSelectorMaster); if (ControllerMaster.OidSelector.SupplementaryInfo != null) { ControllerMaster.OidSelector.SupplementaryInfo.Viewer = new LabelDisplaySetPresentation(this.lSIOIDSelectorMaster); } // Actions ControllerMaster.Action.ActionItems[0].Trigger = new ToolStripButtonPresentation(this.toolstripActionsMaster_0, this.mnuActionsMaster_0); ControllerMaster.Action.ActionItems[1].Trigger = new ToolStripButtonPresentation(this.toolstripActionsMaster_1, this.mnuActionsMaster_1); ControllerMaster.Action.ActionItems[2].Trigger = new ToolStripButtonPresentation(this.toolstripActionsMaster_2, this.mnuActionsMaster_2); ControllerMaster.Action.ActionItems[3].Trigger = new ToolStripButtonPresentation(this.toolstripActionsMaster_3, this.mnuActionsMaster_3); ControllerMaster.Action.ActionItems[4].Trigger = new ToolStripButtonPresentation(this.toolstripActionsMaster_4, this.mnuActionsMaster_4); ControllerMaster.Action.ActionItems[5].Trigger = new ToolStripButtonPresentation(this.toolStripPrintMaster, this.mnuPrintMaster); // Navigations ControllerMaster.Navigation.NavigationItems[0].Trigger = new ToolStripButtonPresentation(this.toolstripNavigationsMaster_0, this.mnuNavigationsMaster_0); ControllerMaster.Navigation.NavigationItems[1].Trigger = new ToolStripButtonPresentation(this.toolstripNavigationsMaster_1, this.mnuNavigationsMaster_1); ControllerMaster.Navigation.NavigationItems[2].Trigger = new ToolStripButtonPresentation(this.toolstripNavigationsMaster_2, this.mnuNavigationsMaster_2); this.pnlDisplaySetMaster.ContextMenuStrip = MastercontextMenuStrip; ControllerMaster.DisplaySet.PreferencesTrigger = new ToolStripMenuItemPresentation(this.MastertoolStripPreferences); #endregion Instance IIU_PasajeroAeronave Links // Save position Controller.SavePositionTrigger = new ToolStripMenuItemPresentation(MastertoolStripSavePositions); IUPopulationController ControllerDetail0 = Controller.Details[0] as IUPopulationController; #region Population PIU_Pasajero Links // Displayset ControllerDetail0.DisplaySet.Population = new DataGridViewPresentation(this.gPopulationDetail0, this.Detail0toolStripExportExcel, this.Detail0toolStripExportWord, this.Detail0toolStripRetrieveAll, this.Detail0toolStripRefresh, this.Detail0toolStripHelp, this.Detail0optionsToolStripMenuItem, this.mnuNavigationsDetail0, exchangeInfo); ControllerDetail0.DisplaySet.NumberOfInstances = new ToolStripStatusLabelNumberInstancesPresentation(this.toolStripStatusLabelCountDetail0); ControllerDetail0.DisplaySet.First = null; ControllerDetail0.DisplaySet.Previous = null; ControllerDetail0.DisplaySet.Refresh = null; ControllerDetail0.DisplaySet.Next = null; ControllerDetail0.DisplaySet.ExecuteServiceTrigger = new ToolStripDropDownButtonPresentation(this.toolStripDropDownButtonSaveDetail0); ControllerDetail0.DisplaySet.PreferencesTrigger = new ToolStripMenuItemPresentation(this.Detail0toolStripPreferences); ControllerDetail0.DisplaySet.SaveColumnsWidthTrigger = new ToolStripMenuItemPresentation(this.Detail0toolStripSaveColumnWidth); // Order Criteria // Actions ControllerDetail0.Action.ActionItems[0].Trigger = new ToolStripButtonPresentation(this.toolstripActionsDetail0_0,this.mnuActionsDetail0_0); ControllerDetail0.Action.ActionItems[1].Trigger = new ToolStripButtonPresentation(this.toolstripActionsDetail0_1,this.mnuActionsDetail0_1); ControllerDetail0.Action.ActionItems[2].Trigger = new ToolStripButtonPresentation(this.toolstripActionsDetail0_2,this.mnuActionsDetail0_2); ControllerDetail0.Action.ActionItems[3].Trigger = new ToolStripButtonPresentation(this.toolstripActionsDetail0_3,this.mnuActionsDetail0_3); ControllerDetail0.Action.ActionItems[4].Trigger = new ToolStripButtonPresentation(this.toolStripPrintDetail0,this.mnuPrintDetail0); // Navigations ControllerDetail0.Navigation.NavigationItems[0].Trigger = new ToolStripButtonPresentation(this.toolstripNavigationsDetail0_0, this.mnuNavigationsDetail0_0); // Contextual Menu this.gPopulationDetail0.ContextMenuStrip = this.Detail0contextMenuStrip; #endregion Population PIU_Pasajero Links #endregion Master-Detail MDIU_PasajeroAeronave Links // Close button Controller.CancelTrigger = new ButtonPresentation(this.bCancel); // Initialize scenario Controller.Initialize(); return Controller; }