Exemplo n.º 1
0
        private void AddCreature(CreatureAI employee, WidgetListView column, List <CreatureAI> creaturesA, List <CreatureAI> creaturesB)
        {
            var bar = Root.ConstructWidget(new Widget
            {
                Background          = new TileReference("basic", 0),
                TriggerOnChildClick = true,
                OnClick             = (sender, args) =>
                {
                    creaturesA.Remove(employee);
                    creaturesB.Add(employee);
                    ReconstructColumns();
                }
            });
            var employeeSprite = employee.GetRoot().GetComponent <LayeredSprites.LayeredCharacterSprite>();

            if (employeeSprite != null)
            {
                bar.AddChild(new EmployeePortrait
                {
                    AutoLayout      = AutoLayout.DockLeft,
                    MinimumSize     = new Point(48, 40),
                    MaximumSize     = new Point(48, 40),
                    Sprite          = employeeSprite.GetLayers(),
                    AnimationPlayer = new AnimationPlayer(employeeSprite.Animations["IdleFORWARD"])
                });
            }

            var title = employee.Stats.Title ?? employee.Stats.CurrentLevel.Name;

            bar.AddChild(new Widget
            {
                AutoLayout        = AutoLayout.DockFill,
                TextVerticalAlign = VerticalAlign.Center,
                MinimumSize       = new Point(128, 64),
                Text = (employee.Stats.FullName) + " (" + title + ")"
            });

            column.AddItem(bar);
        }
Exemplo n.º 2
0
        private void SetupList(WidgetListView listA, WidgetListView listB, List <TradeableItem> resourcesA,
                               List <TradeableItem> resourcesB)
        {
            foreach (var resource in resourcesA)
            {
                var lineItem = CreateLineItem(resource);

                var lambdaResource = resource;
                lineItem.TriggerOnChildClick = true;
                lineItem.EnableHoverClick();
                lineItem.OnClick = (sender, args) =>
                {
                    if (lambdaResource.Count <= 0)
                    {
                        return;
                    }
                    var toMove = 1;
                    if (args.Control)
                    {
                        toMove = lambdaResource.Count;
                    }
                    if (args.Shift)
                    {
                        toMove = Math.Min(5, lambdaResource.Count);
                    }
                    if (lambdaResource.Count - toMove < 0)
                    {
                        return;
                    }

                    var resourcesToMove = lambdaResource.Resources.Take(toMove).ToList();
                    lambdaResource.Resources.RemoveRange(0, toMove);
                    SoundManager.PlaySound(ContentPaths.Audio.Oscar.sfx_gui_change_selection, 0.1f, MathFunctions.Rand() * 0.25f);

                    var existingEntry = resourcesB.FirstOrDefault(r => r.ResourceType == lambdaResource.ResourceType);
                    if (existingEntry == null)
                    {
                        existingEntry = new TradeableItem {
                            ResourceType = lambdaResource.ResourceType, Resources = resourcesToMove, Prototype = resourcesToMove[0]
                        };
                        resourcesB.Add(existingEntry);
                        var rightLineItem = CreateLineItem(existingEntry);
                        rightLineItem.EnableHoverClick();
                        listA.AddItem(rightLineItem);

                        rightLineItem.TriggerOnChildClick = true;
                        rightLineItem.OnClick             = (_sender, _args) =>
                        {
                            var _toMove = 1;
                            if (_args.Control)
                            {
                                _toMove = existingEntry.Count;
                            }
                            if (_args.Shift)
                            {
                                _toMove = Math.Min(5, existingEntry.Count);
                            }
                            if (existingEntry.Count - _toMove < 0)
                            {
                                return;
                            }

                            var _resourcesTomove = existingEntry.Resources.Take(_toMove).ToList();
                            existingEntry.Resources.RemoveRange(0, _toMove);
                            SoundManager.PlaySound(ContentPaths.Audio.Oscar.sfx_gui_change_selection, 0.1f, MathFunctions.Rand() * 0.25f);

                            if (existingEntry.Count == 0)
                            {
                                var index = resourcesB.IndexOf(existingEntry);
                                if (index >= 0)
                                {
                                    resourcesB.RemoveAt(index);
                                    listA.RemoveChild(listA.GetChild(index + 1));
                                }
                            }

                            UpdateColumn(listA, resourcesB);

                            var sourceEntry = resourcesA.FirstOrDefault(r => r.ResourceType == existingEntry.ResourceType);
                            int idx         = resourcesA.IndexOf(sourceEntry);
                            sourceEntry.Resources.AddRange(_resourcesTomove);
                            if (idx >= 0)
                            {
                                UpdateLineItemText(
                                    listB.GetChild(resourcesA.IndexOf(sourceEntry) + 1),
                                    sourceEntry);
                            }
                            Root.SafeCall(OnTotalSelectedChanged, this);
                        };
                    }
                    else
                    {
                        existingEntry.Resources.AddRange(resourcesToMove);
                    }

                    UpdateColumn(listA, resourcesB);
                    UpdateLineItemText(lineItem, lambdaResource);

                    Root.SafeCall(OnTotalSelectedChanged, this);
                };

                listB.AddItem(lineItem);
            }
        }
Exemplo n.º 3
0
        public override void Construct()
        {
            Border = "border-fancy";

            OnConstruct = (sender) =>
            {
                sender.Root.RegisterForUpdate(sender);

                var topRow = AddChild(new Widget
                {
                    AutoLayout  = AutoLayout.DockTop,
                    MinimumSize = new Point(0, 24)
                });

                topRow.AddChild(new Widget
                {
                    AutoLayout         = AutoLayout.DockRight,
                    MinimumSize        = new Point(32, 0),
                    Text               = "Default Priorities",
                    ChangeColorOnHover = true,
                    Border             = "border-button",
                    OnClick            = (btn, args) =>
                    {
                        var screen = sender.Root.RenderData.VirtualScreen;
                        sender.Root.ShowModalPopup(new DefaultTaskPriority
                        {
                            Overworld   = World.Overworld,
                            MinimumSize = new Point(256, 512),
                            Border      = "border-fancy",
                            Rect        = new Rectangle(screen.Center.X - 128, screen.Center.Y - 256, 256, 512)
                        });
                    }
                });

                FilterBox = topRow.AddChild(new EditableTextField
                {
                    AutoLayout  = AutoLayout.DockFill,
                    MinimumSize = new Point(0, 24),
                    Text        = ""
                }) as EditableTextField;

                ListView = AddChild(new WidgetListView
                {
                    AutoLayout = AutoLayout.DockFill,
                    SelectedItemForegroundColor = new Vector4(0, 0, 0, 1),
                    Border     = null,
                    ItemHeight = 16
                }) as WidgetListView;

                ListView.Border = null; // Can't make WidgetListView stop defaulting its border without breaking everywhere else its used.
            };

            OnUpdate = (sender, time) =>
            {
                if (sender.Hidden)
                {
                    return;
                }

                var upperFilter    = FilterBox.Text.ToUpperInvariant();
                var tasksToDisplay = World.TaskManager.EnumerateTasks()
                                     .Where(t => !t.Hidden)
                                     .Where(t => String.IsNullOrEmpty(FilterBox.Text) ? true : t.Name.ToUpperInvariant().Contains(upperFilter));

                ListView.ClearItems();
                foreach (var task in tasksToDisplay)
                {
                    var tag        = task.GuiTag as Widget;
                    var lambdaCopy = task;

                    if (tag != null)
                    {
                        ListView.AddItem(tag);
                    }
                    else
                    {
                        #region Create gui row

                        tag = Root.ConstructWidget(new Widget
                        {
                            Text              = task.Name,
                            MinimumSize       = new Point(0, 16),
                            Padding           = new Margin(0, 0, 4, 4),
                            TextVerticalAlign = VerticalAlign.Center,
                            OnClick           = (_sender, args) =>
                            {
                                var loc = lambdaCopy.GetCameraZoomLocation();
                                if (loc.HasValue)
                                {
                                    World.Renderer.Camera.SetZoomTarget(loc.Value);
                                }
                            }
                        });

                        tag.AddChild(new Widget
                        {
                            Text              = "CANCEL",
                            AutoLayout        = AutoLayout.DockRight,
                            MinimumSize       = new Point(16, 0),
                            TextVerticalAlign = VerticalAlign.Center,
                            OnClick           = (_sender, args) =>
                            {
                                World.TaskManager.CancelTask(lambdaCopy);
                            }
                        });

                        Widget priorityDisplay = null;

                        tag.AddChild(new Gui.Widget
                        {
                            Background  = new TileReference("round-buttons", 3),
                            MinimumSize = new Point(16, 16),
                            MaximumSize = new Point(16, 16),
                            AutoLayout  = AutoLayout.DockRightCentered,
                            OnClick     = (_sender, args) =>
                            {
                                lambdaCopy.Priority  = (TaskPriority)(Math.Min(4, (int)lambdaCopy.Priority + 1));
                                priorityDisplay.Text = lambdaCopy.Priority.ToString();
                                priorityDisplay.Invalidate();
                            },
                            OnMouseEnter = (_sender, args) =>
                            {
                                _sender.BackgroundColor = GameSettings.Current.Colors.GetColor("Highlight", Color.DarkRed).ToVector4();
                                _sender.Invalidate();
                            },
                            OnMouseLeave = (_sender, args) =>
                            {
                                _sender.BackgroundColor = Vector4.One;
                                _sender.Invalidate();
                            }
                        });

                        priorityDisplay = tag.AddChild(new Gui.Widget
                        {
                            AutoLayout          = AutoLayout.DockRight,
                            MinimumSize         = new Point(64, 0),
                            Text                = lambdaCopy.Priority.ToString(),
                            TextHorizontalAlign = HorizontalAlign.Center,
                            TextVerticalAlign   = VerticalAlign.Center
                        });

                        tag.AddChild(new Gui.Widget
                        {
                            Background  = new TileReference("round-buttons", 7),
                            MinimumSize = new Point(16, 16),
                            MaximumSize = new Point(16, 16),
                            AutoLayout  = AutoLayout.DockRightCentered,
                            OnClick     = (_sender, args) =>
                            {
                                lambdaCopy.Priority  = (TaskPriority)(Math.Max(0, (int)lambdaCopy.Priority - 1));
                                priorityDisplay.Text = lambdaCopy.Priority.ToString();
                                priorityDisplay.Invalidate();
                            },
                            OnMouseEnter = (_sender, args) =>
                            {
                                _sender.BackgroundColor = GameSettings.Current.Colors.GetColor("Highlight", Color.DarkRed).ToVector4();
                                _sender.Invalidate();
                            },
                            OnMouseLeave = (_sender, args) =>
                            {
                                _sender.BackgroundColor = Vector4.One;
                                _sender.Invalidate();
                            }
                        });

                        #endregion

                        task.GuiTag = tag;
                        ListView.AddItem(tag);
                    }

                    tag.Text    = task.Name;
                    tag.Tooltip = task.FailureRecord.FormatTooltip();
                }

                ListView.Invalidate();
            };

            base.Construct();
        }
Exemplo n.º 4
0
        private void CreateLineItem(WidgetListView list, SteamUGCDetails_t mod)
        {
            var lineItem = Root.ConstructWidget(new Widget
            {
                MinimumSize    = new Point(1, 32),
                Background     = new TileReference("basic", 0),
                TextColor      = new Vector4(0, 0, 0, 1),
                InteriorMargin = new Margin(5, 5, 10, 10)
            });

            var statusMessage = Root.ConstructWidget(new Widget
            {
                MinimumSize       = new Point(128, 0),
                AutoLayout        = AutoLayout.DockRight,
                TextVerticalAlign = VerticalAlign.Center
            });

            if (!SubscribedItems.Contains(mod.m_nPublishedFileId))
            {
                lineItem.AddChild(new Button()
                {
                    Font       = "font10",
                    Text       = "Subscribe",
                    AutoLayout = AutoLayout.DockRight,
                    OnClick    = (sender, args) =>
                    {
                        if (!Steam.HasTransaction(t =>
                        {
                            var subscribe = t as UGCSubscribe;
                            return(subscribe != null && subscribe.FileID == mod.m_nPublishedFileId);
                        }))
                        {
                            sender.Hidden = true;
                            sender.Invalidate();

                            Steam.AddTransaction(new UGCTransactionProcessor
                            {
                                Transaction          = new UGCSubscribe(mod.m_nPublishedFileId),
                                StatusMessageDisplay = statusMessage,
                                OnSuccess            = (subscriber) =>
                                {
                                    SubscribedItems.Add(mod.m_nPublishedFileId);
                                    Owner.MadeSystemChanges();
                                }
                            });
                        }
                    }
                });
            }
            else
            {
                lineItem.AddChild(new Widget
                {
                    Font              = "font10",
                    Text              = "Subscribed!",
                    TextColor         = Color.Black.ToVector4(),
                    AutoLayout        = AutoLayout.DockRight,
                    TextVerticalAlign = VerticalAlign.Center
                });
            }

            lineItem.AddChild(statusMessage);

            var modWidget = lineItem.AddChild(new Widget()
            {
                AutoLayout = AutoLayout.DockFill,
                TextColor  = new Vector4(0, 0, 0, 1)
            });

            modWidget.AddChild(new Widget()
            {
                Font       = "font10",
                Text       = String.Format("{0}", mod.m_rgchTitle),
                AutoLayout = AutoLayout.DockTop,
                TextColor  = new Vector4(0, 0, 0, 1)
            });
            modWidget.AddChild(new Widget()
            {
                Font       = "font8",
                Text       = String.Format("by {0}. {1}", SteamFriends.GetFriendPersonaName(new CSteamID(mod.m_ulSteamIDOwner)), mod.m_rgchDescription),
                AutoLayout = AutoLayout.DockTop,
                TextColor  = new Vector4(0, 0, 0, 1)
            });

            lineItem.Tag = mod;
            list.AddItem(lineItem);
        }
Exemplo n.º 5
0
        public void UpdateList(CreatureAI Employee)
        {
            var tasksToDisplay = Employee.Tasks;

            ListView.ClearItems();
            foreach (var task in tasksToDisplay)
            {
                var tag        = task.GuiTag as Widget;
                var lambdaCopy = task;

                if (tag != null)
                {
                    ListView.AddItem(tag);
                }
                else
                {
                    #region Create gui row

                    tag = Root.ConstructWidget(new Widget
                    {
                        Text              = task.Name,
                        MinimumSize       = new Point(0, 16),
                        Padding           = new Margin(0, 0, 4, 4),
                        TextVerticalAlign = VerticalAlign.Center,
                        OnClick           = (_sender, args) =>
                        {
                            var loc = lambdaCopy.GetCameraZoomLocation();
                            if (loc.HasValue)
                            {
                                Employee.World.Renderer.Camera.SetZoomTarget(loc.Value);
                            }
                        }
                    });

                    tag.AddChild(new Widget
                    {
                        Text              = "CANCEL",
                        AutoLayout        = AutoLayout.DockRight,
                        MinimumSize       = new Point(16, 0),
                        TextVerticalAlign = VerticalAlign.Center,
                        OnClick           = (_sender, args) =>
                        {
                            Employee.World.TaskManager.CancelTask(lambdaCopy);
                        }
                    });

                    Widget priorityDisplay = null;

                    tag.AddChild(new Gui.Widget
                    {
                        Background  = new TileReference("round-buttons", 3),
                        MinimumSize = new Point(16, 16),
                        MaximumSize = new Point(16, 16),
                        AutoLayout  = AutoLayout.DockRightCentered,
                        OnClick     = (_sender, args) =>
                        {
                            lambdaCopy.Priority  = (TaskPriority)(Math.Min(4, (int)lambdaCopy.Priority + 1));
                            priorityDisplay.Text = lambdaCopy.Priority.ToString();
                            priorityDisplay.Invalidate();
                        },
                        OnMouseEnter = (_sender, args) =>
                        {
                            _sender.BackgroundColor = GameSettings.Current.Colors.GetColor("Highlight", Color.DarkRed).ToVector4();
                            _sender.Invalidate();
                        },
                        OnMouseLeave = (_sender, args) =>
                        {
                            _sender.BackgroundColor = Vector4.One;
                            _sender.Invalidate();
                        }
                    });

                    priorityDisplay = tag.AddChild(new Gui.Widget
                    {
                        AutoLayout          = AutoLayout.DockRight,
                        MinimumSize         = new Point(64, 0),
                        Text                = lambdaCopy.Priority.ToString(),
                        TextHorizontalAlign = HorizontalAlign.Center,
                        TextVerticalAlign   = VerticalAlign.Center
                    });

                    tag.AddChild(new Gui.Widget
                    {
                        Background  = new TileReference("round-buttons", 7),
                        MinimumSize = new Point(16, 16),
                        MaximumSize = new Point(16, 16),
                        AutoLayout  = AutoLayout.DockRightCentered,
                        OnClick     = (_sender, args) =>
                        {
                            lambdaCopy.Priority  = (TaskPriority)(Math.Max(0, (int)lambdaCopy.Priority - 1));
                            priorityDisplay.Text = lambdaCopy.Priority.ToString();
                            priorityDisplay.Invalidate();
                        },
                        OnMouseEnter = (_sender, args) =>
                        {
                            _sender.BackgroundColor = GameSettings.Current.Colors.GetColor("Highlight", Color.DarkRed).ToVector4();
                            _sender.Invalidate();
                        },
                        OnMouseLeave = (_sender, args) =>
                        {
                            _sender.BackgroundColor = Vector4.One;
                            _sender.Invalidate();
                        }
                    });

                    #endregion

                    task.GuiTag = tag;
                    ListView.AddItem(tag);
                }

                tag.Text = task.Name;
            }

            ListView.Invalidate();
        }
Exemplo n.º 6
0
        public override void Construct()
        {
            Border      = "border-one";
            Font        = "font10";
            OnConstruct = (sender) =>
            {
                sender.Root.RegisterForUpdate(sender);

                AddChild(new Widget
                {
                    AutoLayout         = AutoLayout.DockBottom,
                    MinimumSize        = new Point(0, 32),
                    Text               = "CLOSE",
                    ChangeColorOnHover = true,
                    OnClick            = (sender1, args) => sender.Close()
                });

                ComponentProperties = AddChild(new Widget
                {
                    AutoLayout  = AutoLayout.DockBottom,
                    MinimumSize = new Point(0, 128),
                });

                ListView = AddChild(new WidgetListView
                {
                    AutoLayout = AutoLayout.DockFill,
                    SelectedItemForegroundColor = new Vector4(0, 0, 0, 1),
                    ChangeColorOnSelected       = false,
                    Border     = null,
                    ItemHeight = 24
                }) as WidgetListView;

                ListView.Border = null; // Can't make WidgetListView stop defaulting its border without breaking everywhere else its used.
            };

            OnUpdate = (sender, time) =>
            {
                if (sender.Hidden)
                {
                    return;
                }
                if (SelectedEntity == null)
                {
                    SelectedComponent = null;
                    ListView.ClearItems();
                    return;
                }

                var components = SelectedEntity.EnumerateAll();

                int i = 0;
                ListView.ClearItems();
                foreach (var component in components)
                {
                    i++;
                    var tag        = component.GuiTag as Widget;
                    var lambdaCopy = component;

                    if (tag != null)
                    {
                        ListView.AddItem(tag);
                    }
                    else
                    {
                        #region Create gui row

                        tag = Root.ConstructWidget(new Widget
                        {
                            Text              = component.GetType().Name,
                            MinimumSize       = new Point(0, 16),
                            Padding           = new Margin(0, 0, 4, 4),
                            TextVerticalAlign = VerticalAlign.Center,
                            Tag = lambdaCopy
                        });

                        tag.OnClick = (sender1, args) =>
                        {
                            if (tag.IsAnyParentHidden())
                            {
                                return;
                            }
                            SelectedComponent = lambdaCopy;
                        };

                        #endregion

                        component.GuiTag = tag;
                        ListView.AddItem(tag);
                    }
                }

                ListView.Invalidate();

                if (SelectedComponent != null)
                {
                    Drawer3D.DrawBox(SelectedComponent.GetBoundingBox(), Color.White, 0.1f, true);
                    ComponentProperties.Text = SelectedComponent.GetType().Name
                                               + "\n" + SelectedComponent.Position.ToString()
                                               + "\nBB Extents: " + SelectedComponent.BoundingBoxSize.ToString()
                                               + "\nBB Offset: " + SelectedComponent.LocalBoundingBoxOffset.ToString();
                }
                else
                {
                    ComponentProperties.Text = "";
                }
            };

            base.Construct();
        }
Exemplo n.º 7
0
        public override void Construct()
        {
            Border      = "border-fancy";
            Font        = "font10";
            OnConstruct = (sender) =>
            {
                sender.Root.RegisterForUpdate(sender);

                FilterBox = AddChild(new EditableTextField
                {
                    AutoLayout  = AutoLayout.DockTop,
                    MinimumSize = new Point(0, 24),
                    Text        = ""
                }) as EditableTextField;

                ListView = AddChild(new WidgetListView
                {
                    AutoLayout = AutoLayout.DockFill,
                    SelectedItemForegroundColor = new Vector4(0, 0, 0, 1),
                    ChangeColorOnSelected       = false,
                    Border     = null,
                    ItemHeight = 24
                }) as WidgetListView;

                ListView.Border = null; // Can't make WidgetListView stop defaulting its border without breaking everywhere else its used.
            };

            OnUpdate = (sender, time) =>
            {
                if (sender.Hidden)
                {
                    return;
                }

                var roomsToDisplay = World.EnumerateZones().Where(r => !String.IsNullOrEmpty(FilterBox.Text) ? r.ID.Contains(FilterBox.Text) : true);

                int i = 0;
                ListView.ClearItems();
                foreach (var room in roomsToDisplay)
                {
                    i++;
                    var tag        = room.GuiTag as Widget;
                    var lambdaCopy = room;

                    if (tag != null)
                    {
                        ListView.AddItem(tag);
                    }
                    else
                    {
                        #region Create gui row

                        tag = Root.ConstructWidget(new Widget
                        {
                            Text              = room.GetDescriptionString(),
                            MinimumSize       = new Point(0, 16),
                            Padding           = new Margin(0, 0, 4, 4),
                            TextVerticalAlign = VerticalAlign.Center,
                            Background        = new TileReference("basic", 0),
                            BackgroundColor   = i % 2 == 0 ? new Vector4(0.0f, 0.0f, 0.0f, 0.1f) : new Vector4(0, 0, 0, 0.25f)
                        });

                        tag.OnUpdate = (sender1, args) =>
                        {
                            if (tag.IsAnyParentHidden())
                            {
                                return;
                            }

                            if (sender1.ComputeBoundingChildRect().Contains(Root.MousePosition))
                            {
                                Drawer3D.DrawBox(lambdaCopy.GetBoundingBox(), Color.White, 0.1f, true);
                            }
                        };

                        Root.RegisterForUpdate(tag);

                        tag.AddChild(new Button
                        {
                            Text               = "Destroy",
                            AutoLayout         = AutoLayout.DockRight,
                            MinimumSize        = new Point(16, 0),
                            ChangeColorOnHover = true,
                            TextVerticalAlign  = VerticalAlign.Center,
                            OnClick            = (_sender, args) =>
                            {
                                World.UserInterface.Gui.ShowModalPopup(new Gui.Widgets.Confirm
                                {
                                    Text    = "Do you want to destroy this " + lambdaCopy.Type.Name + "?",
                                    OnClose = (_sender2) => DestroyZoneTool.DestroyRoom((_sender2 as Gui.Widgets.Confirm).DialogResult, lambdaCopy, World)
                                });
                            }
                        });

                        tag.AddChild(new Widget {
                            MinimumSize = new Point(4, 0), AutoLayout = AutoLayout.DockRight
                        });

                        tag.AddChild(new Button
                        {
                            Text               = "Go to",
                            AutoLayout         = AutoLayout.DockRight,
                            ChangeColorOnHover = true,
                            MinimumSize        = new Point(16, 0),
                            TextVerticalAlign  = VerticalAlign.Center,
                            OnClick            = (_sender, args) =>
                            {
                                World.Renderer.Camera.SetZoomTarget(lambdaCopy.GetBoundingBox().Center());
                            }
                        });

                        if (lambdaCopy is Stockpile stock && stock.SupportsFilters)
                        {
                            tag.AddChild(new Button
                            {
                                Text               = "Resources...",
                                AutoLayout         = AutoLayout.DockRight,
                                ChangeColorOnHover = true,
                                MinimumSize        = new Point(16, 0),
                                TextVerticalAlign  = VerticalAlign.Center,
                                OnClick            = (_sender, args) =>
                                {
                                    var savePaused = World.Paused;
                                    World.Paused   = true;

                                    Root.ShowModalPopup(new StockpilePropertiesDialog
                                    {
                                        Stockpile = lambdaCopy as Stockpile,
                                        OnClose   = (_sen2) => World.Paused = savePaused
                                    });
                                }
                            });
                        }

                        #endregion

                        room.GuiTag = tag;
                        ListView.AddItem(tag);
                    }

                    tag.Text = room.GetDescriptionString();
                }

                ListView.Invalidate();
            };

            base.Construct();
        }