static public ChatParticipantEntry ListEntryParticipantConstruct(
            UINodeInfoInTree ast,
            IColumnHeader[] listHeader,
            RectInt?regionConstraint)
        {
            var ListEntry = SictAuswertGbsListViewport <IListEntry> .ListEntryKonstruktSctandard(ast, listHeader, regionConstraint);

            if (null == ListEntry)
            {
                return(null);
            }

            var StatusIconSprite =
                ast.MengeChildAstTransitiiveHüle()
                ?.OfType <UINodeInfoInTree>()
                ?.FirstOrDefault(k => k.PyObjTypNameIsSprite() && (k.PyObjTypName?.ToLower().Contains("status") ?? false))
                ?.AlsSprite();

            var SetFlagWithStateIconNode =
                ast?.MengeChildAstTransitiiveHüle()
                ?.OfType <UINodeInfoInTree>()
                ?.Where(k => k?.PyObjTypNameMatchesRegexPatternIgnoreCase("FlagIconWithState") ?? false)
                ?.ToArray();

            var SetFlagWithStateIcon =
                SetFlagWithStateIconNode
                ?.Select(flagNode =>
            {
                var FlagIcon = flagNode.AlsSprite();

                var childSprite =
                    flagNode?.MengeChildAstTransitiiveHüle()?.OfType <UINodeInfoInTree>()
                    ?.Where(k => k.PyObjTypNameIsSprite())
                    ?.Select(k => k?.AlsSprite())?.WhereNotDefault()?.FirstOrDefault();

                if (null != FlagIcon)
                {
                    FlagIcon.Texture0Id  = FlagIcon.Texture0Id ?? childSprite?.Texture0Id;
                    FlagIcon.TexturePath = FlagIcon.TexturePath ?? childSprite?.TexturePath;
                    FlagIcon.Color       = FlagIcon.Color ?? childSprite?.Color;
                }

                return(FlagIcon);
            })
                ?.WhereNotDefault()
                ?.ToArrayIfNotEmpty();

            return(new ChatParticipantEntry(ListEntry)
            {
                NameLabel = ast.LargestLabelInSubtree().AsUIElementTextIfTextNotEmpty(),
                StatusIcon = StatusIconSprite,
                FlagIcon = SetFlagWithStateIcon,
            });
        }
Exemplo n.º 2
0
        virtual public void Berecne()
        {
            if (null == TabAst)
            {
                return;
            }

            if (!(true == TabAst.VisibleIncludingInheritance))
            {
                return;
            }

            LabelAst = TabAst.LargestLabelInSubtree(3);

            if (null == LabelAst)
            {
                return;
            }

            LabelColor = ColorORGB.VonVal(LabelAst.Color);
            LabelText  = LabelAst.LabelText();

            if (null == LabelText || null == LabelColor)
            {
                return;
            }

            var LabelColorOpazitäätMili = LabelColor.OMilli;

            var Label = new UIElementText(LabelAst.AsUIElementIfVisible(), LabelText);

            Ergeebnis = new Tab(TabAst.AsUIElementIfVisible())
            {
                Label = Label,
                LabelColorOpacityMilli = LabelColorOpazitäätMili,
            };
        }
		virtual public void Berecne()
		{
			var Container = EntryAst.AlsContainer(regionConstraint: RegionConstraint);

			if (null == Container)
				return;

			LabelAst = EntryAst.LargestLabelInSubtree();

			FläceFürMenuAst = LabelAst;

			LabelGrenzeLinx = (int?)LabelAst.LaagePlusVonParentErbeLaageA();

			/*
			 * 2014.11.08
			 * 
			 * Änderung für Release "Rhea":
			 * "PyObjTypName": "GlowSprite"
			 * 
			ExpanderAst =
				EntryAst.SuuceFlacMengeAstFrüheste(
				(Kandidaat) =>
					AuswertGbs.Glob.GbsAstTypeIstEveIcon(Kandidaat) &&
					Regex.Match(Kandidaat.Name	?? "", "expander", RegexOptions.IgnoreCase).Success);
			 * */
			ExpanderAst =
					EntryAst.FirstMatchingNodeFromSubtreeBreadthFirst(
					(kandidaat) =>
						(AuswertGbs.Glob.GbsAstTypeIstEveIcon(kandidaat) ||
						AuswertGbs.Glob.GbsAstTypeIstSprite(kandidaat)) &&
						Regex.Match(kandidaat.Name ?? "", "expander", RegexOptions.IgnoreCase).Success);

			IstGroup = ((null == ExpanderAst) ? null : ExpanderAst.VisibleIncludingInheritance) ?? false;

			var MengeIconOderSpriteAst =
				EntryAst.MatchingNodesFromSubtreeBreadthFirst(
				(kandidaat) =>
					(AuswertGbs.Glob.GbsAstTypeIstEveIcon(kandidaat) ||
					Regex.Match(kandidaat.PyObjTypName ?? "", "sprite", RegexOptions.IgnoreCase).Success) &&
					(kandidaat.VisibleIncludingInheritance ?? false));

			IstItem =
				(!MengeIconOderSpriteAst.IsNullOrEmpty() || null != LabelAst) &&
				!(IstGroup ?? false);

			var MengeIconOderSpriteGrenzeLinx =
				MengeIconOderSpriteAst
				?.Select((iconAst) => iconAst.LaagePlusVonParentErbeLaageA())
				?.Where((kandidaat) => kandidaat.HasValue)
				?.Select((iconAstGrenzeLinx) => iconAstGrenzeLinx.Value)
				?.ToArray();

			if (!MengeIconOderSpriteGrenzeLinx.IsNullOrEmpty())
				InhaltGrenzeLinx = (int)Math.Min(InhaltGrenzeLinx ?? int.MaxValue, MengeIconOderSpriteGrenzeLinx.Min());

			if (LabelGrenzeLinx.HasValue)
				InhaltGrenzeLinx = (int)Math.Min(InhaltGrenzeLinx ?? int.MaxValue, LabelGrenzeLinx.Value);

			var ListEntryInZeleTrenung = this.ListEntryInZeleTrenung();

			if (ListEntryTrenungZeleTypEnum.Ast == ListEntryInZeleTrenung)
			{
				//	genuzt z.B. für "OverviewScrollEntry".
				var EntryListeZeleLabel =
					EntryAst.ExtraktMengeLabelString()?.ToArray();

				ListeZuHeaderZeleString =
					EntryListeZeleLabel
					?.Select(zeleLabel => new KeyValuePair<IColumnHeader, string>(
						HeaderBestFit(zeleLabel, ListeColumnHeader),
						zeleLabel?.Text))
					?.ToArray();
			}
			else
			{
				Label = LabelAst.AsUIElementTextIfTextNotEmpty();

				var Bescriftung = Label?.Text;

				if (null != Bescriftung)
				{
					if (!(IstGroup ?? false))
					{
						ItemListeZeleTextMitFormat = Bescriftung.Split(new string[] { "<t>" }, StringSplitOptions.None);

						var ItemListeZeleText =
							ItemListeZeleTextMitFormat
							?.Select((zeleTextMitFormat) => ZeleTextAusZeleTextMitFormat(zeleTextMitFormat))
							?.ToArray();

						ListeZuHeaderZeleString =
							ItemListeZeleText
							?.Select((zeleText, index) => new KeyValuePair<IColumnHeader, string>(
								ListeColumnHeader?.FirstOrDefault(kandidaat => kandidaat.ColumnIndex == index),
								zeleText))
							?.ToArray();
					}
				}
			}

			var backgroundColorNode =
				EntryAst?.FirstMatchingNodeFromSubtreeBreadthFirst(node =>
					(node?.PyObjTypNameMatchesRegexPatternIgnoreCase("fill") ?? false) &&
					(node?.Name?.RegexMatchSuccessIgnoreCase("bgColor") ?? false));

			var ListBackgroundColor =
				EntryAst?.BackgroundList
				?.Select(background => background.Color.AlsColorORGB())
				.ConcatNullable(new[] { backgroundColorNode?.Color.AlsColorORGB() })
				?.WhereNotDefault()
				?.ToArrayIfNotEmpty();

			var SetSprite =
				EntryAst.SetSpriteFromChildren()
				?.ToArrayIfNotEmpty();

			ErgeebnisListEntry = new ListEntry(Container)
			{
				ContentBoundLeft = InhaltGrenzeLinx,

				ListColumnCellLabel = ListeZuHeaderZeleString,

				GroupExpander = ExpanderAst?.AsUIElementIfVisible(),

				IsGroup = IstGroup,
				IsExpanded = ExpanderSpriteIsExpanded(ExpanderAst),
				IsSelected = EntryAst.isSelected,

				ListBackgroundColor = ListBackgroundColor,
				SetSprite = SetSprite,
			};
		}
        /// <summary>
        /// 2015.07.28
        /// Bescriftung für Item welces meerere Drone repräsentiirt:
        /// "Hobgoblin I (2)"
        /// </summary>
        /// <param name="entryAst"></param>
        /// <param name="listeScrollHeader"></param>
        /// <returns></returns>
        static public DroneViewEntry DroneEntryKonstrukt(
            UINodeInfoInTree entryAst,
            IColumnHeader[] listeScrollHeader,
            RectInt?regionConstraint)
        {
            if (!(entryAst?.VisibleIncludingInheritance ?? false))
            {
                return(null);
            }

            var listEntryAuswert = new SictAuswertGbsListEntry(entryAst, listeScrollHeader, regionConstraint, ListEntryTrenungZeleTypEnum.Ast);

            listEntryAuswert.Berecne();

            var listEntry = listEntryAuswert.ErgeebnisListEntry;

            if (null == listEntry)
            {
                return(null);
            }

            var LabelGröösteAst = entryAst?.LargestLabelInSubtree();

            var labelGrööste = LabelGröösteAst.AsUIElementTextIfTextNotEmpty();

            var isGroup = listEntry?.IsGroup ?? false;

            if (isGroup)
            {
                var Caption = labelGrööste;

                return(new DroneViewEntryGroup(listEntry)
                {
                    Caption = labelGrööste,
                });
            }
            else
            {
                var MengeContainerAst =
                    entryAst.MatchingNodesFromSubtreeBreadthFirst(
                        kandidaat => kandidaat.PyObjTypNameIsContainer(),
                        null,
                        3, 1);

                var GaugesAst =
                    MengeContainerAst.SuuceFlacMengeAstFrüheste(
                        kandidaat => string.Equals("gauges", kandidaat.Name, StringComparison.InvariantCultureIgnoreCase),
                        1, 0);

                var MengeGaugeScpezContainerAst =
                    GaugesAst.MatchingNodesFromSubtreeBreadthFirst(
                        kandidaat => kandidaat.PyObjTypNameIsContainer(),
                        null,
                        1, 1,
                        true);

                var DictZuTypSictStringTreferpunkte = new Dictionary <string, int?>();

                if (null != MengeGaugeScpezContainerAst)
                {
                    foreach (var GaugeScpezContainerAst in MengeGaugeScpezContainerAst)
                    {
                        if (null == GaugeScpezContainerAst)
                        {
                            continue;
                        }

                        var GaugeScpezContainerAstName = GaugeScpezContainerAst.Name;

                        if (null == GaugeScpezContainerAstName)
                        {
                            continue;
                        }

                        var nameMatch = GaugeScpezContainerAstName?.RegexMatchIfSuccess(DroneEntryGaugeScpezAstNameRegexPattern, RegexOptions.IgnoreCase);

                        var typSictString = nameMatch?.Groups[1].Value;

                        if (null == typSictString)
                        {
                            continue;
                        }

                        DictZuTypSictStringTreferpunkte[typSictString] = AusDroneEntryGaugeTreferpunkteRelMili(GaugeScpezContainerAst);
                    }
                }

                var TreferpunkteStruct = DictZuTypSictStringTreferpunkte.FirstOrDefault(kandidaat => kandidaat.Key.ToLower().Contains("struct"));
                var TreferpunkteArmor  = DictZuTypSictStringTreferpunkte.FirstOrDefault(kandidaat => kandidaat.Key.ToLower().Contains("armor"));
                var TreferpunkteShield = DictZuTypSictStringTreferpunkte.FirstOrDefault(kandidaat => kandidaat.Key.ToLower().Contains("shield"));

                var Treferpunkte = new ShipHitpointsAndEnergy
                {
                    Struct = TreferpunkteStruct.Value,
                    Armor  = TreferpunkteArmor.Value,
                    Shield = TreferpunkteShield.Value,
                };

                return(new DroneViewEntryItem(listEntry)
                {
                    Hitpoints = Treferpunkte,
                });
            }
        }