public static int GetEnumItemNumber(IMgaFCO IMgaFCO, string attributeName) { Contract.Requires(IMgaFCO != null); Contract.Requires(IMgaFCO.MetaBase is MgaMetaFCO); Contract.Requires(string.IsNullOrEmpty(attributeName) == false); try { MgaMetaFCO meta = (IMgaFCO.MetaBase as MgaMetaFCO); MgaMetaAttribute attr = meta.AttributeByName[attributeName]; string selectedItemValue = IMgaFCO.Attribute[attr].StringValue; int i = 0; foreach (MgaMetaEnumItem item in attr.EnumItems) { if (item.Value == selectedItemValue) { return(i); } i++; } throw new Exception("Attribute / selected item was not found."); } catch (Exception) { throw; } }
/// <summary> /// Get the meta object /// </summary> /// <param name="metaPart">MetaPart</param> /// <param name="metaFco">returns the MetaFCO</param> /// <returns>true if succeeded</returns> bool GetMetaFCO(MgaMetaPart metaPart, out MgaMetaFCO metaFco) { metaFco = null; if (metaPart == null) { return(false); } metaFco = metaPart.Role.Kind; return(metaFco != null); }
public static void SetEnumItem(IMgaFCO IMgaFCO, string attributeName, int index) { Contract.Requires(IMgaFCO != null); Contract.Requires(IMgaFCO.MetaBase is MgaMetaFCO); Contract.Requires(string.IsNullOrEmpty(attributeName) == false); try { MgaMetaFCO meta = (IMgaFCO.MetaBase as MgaMetaFCO); MgaMetaAttribute attr = meta.AttributeByName[attributeName]; IMgaFCO.Attribute[attr].StringValue = attr.EnumItems[index + 1].Value; } catch (Exception ex) { throw ex; } }
private void CreateMaterialObjects(MgaFolder materialFolder, List <string> materialsList) { List <string> existingMaterials = new List <string>(); foreach (MgaFCO item in materialFolder.ChildFCOs) { existingMaterials.Add(item.StrAttrByName["Name"]); } foreach (var materialName in materialsList) { if (!existingMaterials.Contains(materialName)) { MgaMetaFCO role = (materialFolder.MetaFolder as MgaMetaFolder).get_LegalRootObjectByName("Material"); MgaFCO aMaterial = materialFolder.CreateRootObject(role); aMaterial.Name = materialName; aMaterial.StrAttrByName["Name"] = materialName; } } }
/// <summary> /// Get the meta object /// </summary> /// <param name="metaPart">MetaPart</param> /// <param name="metaFco">returns the MetaFCO</param> /// <returns>true if succeeded</returns> bool GetMetaFCO(MgaMetaPart metaPart, out MgaMetaFCO metaFco) { metaFco = null; if (metaPart == null) return false; metaFco = metaPart.Role.Kind; return metaFco != null; }
public void Initialize( MgaProject project, MgaMetaPart meta, MgaFCO obj) { // only store temporarily, they might be unavailable later myobj = obj; mymetaobj = null; LastMetaKind = myobj.Meta.Name; // obtain the metaobject GetMetaFCO(meta, out mymetaobj); if (obj != null) { // concrete object name = myobj.Name; if (myobj.Meta.Name == "Task") { // task // get progid check whether it is already in the cache TaskProgId = myobj.StrAttrByName["COMName"]; if (interpreters.Keys.Contains(TaskProgId) == false) { // create an instance ComComponent task = new ComComponent(TaskProgId); interpreters.Add(TaskProgId, task); } // save parameters Parameters = myobj.StrAttrByName["Parameters"]; h = IconHeight; w = IconWidth; } else if (myobj.Meta.Name == "WorkflowRef") { // Workflow reference get the tasks // TODO: get those in the right order workflow.Clear(); MgaReference wfRef = myobj as MgaReference; Queue<string> items = new Queue<string>(); List<MgaAtom> tasks = new List<MgaAtom>(); List<MgaFCO> processed = new List<MgaFCO>(); if (wfRef.Referred != null) { tasks.AddRange(wfRef.Referred.ChildObjects.OfType<MgaAtom>()); MgaAtom StartTask = null; StartTask = tasks. Where(x => x.ExSrcFcos().Count() == 0). FirstOrDefault(); if (StartTask != null) { this.EnqueueTask(StartTask as MgaFCO); processed.Add(StartTask as MgaFCO); MgaFCO NextTask = StartTask.ExDstFcos().FirstOrDefault(); // avoid loops while (NextTask != null && processed.Contains(NextTask) == false) { processed.Add(NextTask as MgaFCO); this.EnqueueTask(NextTask); NextTask = NextTask.ExDstFcos().FirstOrDefault(); } } } h = IconHeight; if (workflow.Count > 0) { w = IconWidth * workflow.Count + TaskPadding * (workflow.Count - 1); } else { w = IconWidth; } } } else { // not a concreter object (maybe in part browser?) name = mymetaobj.DisplayedName; } // to handle color and labelColor settings in GME if (!GetColorPreference(out color, "color")) { color = Color.Black; } if (!GetColorPreference(out labelColor, "nameColor")) { labelColor = Color.Black; } // null them for sure // myobj = null; mymetaobj = null; }
public ReadOnlyDecorator(GenericDecorator decorator, IntPtr parentHwnd, MgaFCO fco, MgaMetaFCO metafco, MgaProject project, Type formType, IBackroundDraw bgdraw) : base(decorator, parentHwnd, fco, metafco, project, bgdraw, formType) { }
public DefaultBitmapDecorator(GenericDecorator decorator, IntPtr parentHwnd, MgaFCO fco, MgaMetaFCO metafco, MgaProject project, IBackroundDraw backgrounddraw, Type formType = null) : base(parentHwnd, fco, project, formType != null) { string iconName; decorator.GetPreference(out iconName, "icon"); string defaultIconName = iconName; if (fco != null) { string kind = fco.Meta.Name; if (kind == "ParkingSign") { iconName = GetParkingSignIcon(fco); } else if (kind == "FloodSign") { iconName = GetFloodSignIcon(fco); } else if (kind == "StreetSign") { iconName = GetStreetSignIcon(fco); } // else fall through to the default icon } this.backgrounddraw = backgrounddraw; this.formType = formType; string projectDir = Path.GetDirectoryName(project.ProjectConnStr.Substring(4)); string paradigmDir = Path.GetDirectoryName(project.ParadigmConnStr.Substring(4)); MgaRegistrar registrar = new MgaRegistrar(); StringBuilder iconPath = new StringBuilder(registrar.IconPath[regaccessmode_enum.REGACCESS_BOTH]); iconPath.Replace("$PROJECTDIR", projectDir); iconPath.Replace("$PARADIGMDIR", paradigmDir); search_paths = iconPath.ToString().Split(';'); foreach (string path in search_paths) { string fileName = Path.Combine(path, iconName); if (File.Exists(fileName)) { image = Image.FromFile(fileName); break; } } if (image == null) // look at the default { foreach (string path in search_paths) { string fileName = Path.Combine(path, defaultIconName); if (File.Exists(fileName)) { image = Image.FromFile(fileName); break; } } } if (image == null) { image = LoadImage(defaultIconStr); default_image = image; } if (fco != null) { fcoName = fco.Name; //fcoName = String.IsNullOrEmpty(metafco.DisplayedName) ? metafco.Name : metafco.DisplayedName; if (fco.ObjType == objtype_enum.OBJTYPE_REFERENCE) { MgaReference reference = fco as MgaReference; if (reference.Referred == null) { Embellish = EmbellishType.NullReference; } else { Embellish = EmbellishType.Reference; } } else if (fco.IsInstance) { // instance Embellish = EmbellishType.Instance; } else if (fco.DerivedFrom != null) { // Subtype Embellish = EmbellishType.SubType; } else if (fco.DerivedObjects.Count != 0) { Embellish = EmbellishType.Type; } else { Embellish = EmbellishType.None; } } else { fcoName = String.IsNullOrEmpty(metafco.DisplayedName) ? metafco.Name : metafco.DisplayedName; } }
public void Initialize( MgaProject project, MgaMetaPart meta, MgaFCO obj) { // only store temporarily, they might be unavailable later myobj = obj; mymetaobj = null; FCOKind = myobj?.Meta?.Name; MetaKind = meta.Name; // obtain the metaobject GetMetaFCO(meta, out mymetaobj); if (obj != null) { // concrete object name = myobj.Name; if (myobj.Meta.Name == "Task") { // task // get progid check whether it is already in the cache TaskProgId = myobj.StrAttrByName["COMName"]; if (interpreters.Keys.Contains(TaskProgId) == false) { // create an instance ComComponent task = new ComComponent(TaskProgId); interpreters.Add(TaskProgId, task); } // save parameters Parameters = myobj.StrAttrByName["Parameters"]; h = IconHeight; w = IconWidth; } else if (myobj.Meta.Name == "WorkflowRef") { // Workflow reference get the tasks // TODO: get those in the right order workflow.Clear(); MgaReference wfRef = myobj as MgaReference; Queue <string> items = new Queue <string>(); List <MgaAtom> tasks = new List <MgaAtom>(); List <MgaFCO> processed = new List <MgaFCO>(); if (wfRef.Referred != null) { HashSet <string> taskKinds = new HashSet <string>() { "ExecutionTask", "Task" }; tasks.AddRange(wfRef.Referred.ChildObjects.OfType <MgaAtom>().Where(atom => taskKinds.Contains(atom.Meta.Name))); MgaAtom StartTask = null; StartTask = tasks. Where(x => x.ExSrcFcos().Count() == 0). FirstOrDefault(); if (StartTask != null) { this.EnqueueTask(StartTask as MgaFCO); processed.Add(StartTask as MgaFCO); MgaFCO NextTask = StartTask.ExDstFcos().FirstOrDefault(); // avoid loops while (NextTask != null && processed.Contains(NextTask) == false) { processed.Add(NextTask as MgaFCO); this.EnqueueTask(NextTask); NextTask = NextTask.ExDstFcos().FirstOrDefault(); } } } h = IconHeight; if (workflow.Count > 0) { w = IconWidth * workflow.Count + TaskPadding * (workflow.Count - 1); } else { w = IconWidth; } } else if (myobj.Meta.Name == "MetricConstraint") { h = 40; w = 40; MetricConstraint_TargetType = myobj.GetStrAttrByNameDisp("TargetType"); } } else { // not a concreter object (maybe in part browser?) name = mymetaobj.DisplayedName; h = IconHeight; w = IconWidth; if (MetaKind == "MetricConstraint") { h = 40; w = 40; } } // to handle color and labelColor settings in GME if (!GetColorPreference(out color, "color")) { color = Color.Black; } if (!GetColorPreference(out labelColor, "nameColor")) { labelColor = Color.Black; } // null them for sure // myobj = null; mymetaobj = null; }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parent"></param> /// <param name="metaRef">meta ref of the new object</param> /// <param name="roleMetaRef">meta ref of the role (if the parent is a model)</param> /// <returns></returns> public static T CreateObject <T>( ISIS.GME.Common.Interfaces.Container parent, int metaRef, int roleMetaRef = 0) where T : ISIS.GME.Common.Classes.Base, new() { Contract.Requires(parent != null); T result = new T(); if (parent.Impl is MgaModel) { MgaModel model = parent.Impl as MgaModel; MgaMetaRole role = null; try { // try to use user defined role role = (model.MetaBase as MgaMetaModel). Roles. Cast <MgaMetaRole>(). FirstOrDefault(x => x.MetaRef == roleMetaRef); } catch (Exception ex) { StringBuilder sb = new StringBuilder(); sb.AppendLine("Role was not found in the container."); sb.AppendLine("Paradigm violation."); sb.AppendFormat("Container type: {0} Requested role: {1}", parent.Kind, result.GetType().Name); throw new Exception(sb.ToString(), ex); } try { IMgaFCO fco = model.CreateChildObject(role); result.Impl = fco as IMgaObject; return(result); } catch (Exception ex) { StringBuilder sb = new StringBuilder(); sb.AppendLine("New element could not be created."); sb.AppendFormat("Container type: {0} Requested role: {1}", parent.Kind, result.GetType().Name); throw new Exception(sb.ToString(), ex); } } else if (parent.Impl is MgaFolder) { try { MgaFolder folder = parent.Impl as MgaFolder; MgaMetaFolder item = folder.MetaFolder. LegalChildFolders. Cast <MgaMetaFolder>(). FirstOrDefault(x => x.MetaRef == metaRef); if (item != null) { // create new folder MgaFolder f = folder.CreateFolder(item); result.Impl = f as IMgaObject; return(result); } else { MgaMetaFCO itemFco = folder.MetaFolder. LegalRootObjects. Cast <MgaMetaFCO>(). FirstOrDefault(x => x.MetaRef == metaRef); if (itemFco != null) { IMgaFCO f = folder.CreateRootObject(itemFco); result.Impl = f as IMgaObject; return(result); } } } catch (Exception ex) { StringBuilder sb = new StringBuilder(); sb.AppendLine("New element could not be created in folder."); sb.AppendFormat("Container type: {0} Requested child type: {1}", parent.Kind, result.GetType().Name); throw new Exception(sb.ToString(), ex); } } return(null); }
public MgaMetaRole get_RoleByMeta(MgaModel parent, MgaMetaFCO p_kind, objtype_enum objtype, MgaMetaRole p_role, MgaMetaAspect aspect) { return(delegate_.RoleByMeta[parent, p_kind, objtype, p_role, aspect]); }
public MgaMetaRole GetRoleByMetaDisp(MgaModel parent, MgaMetaFCO p_kind, objtype_enum objtype, MgaMetaRole p_role, MgaMetaAspect aspect) { return(delegate_.GetRoleByMetaDisp(parent, p_kind, objtype, p_role, aspect)); }