/// <param name="playerUser">The session ID of the player who opened this session.</param> /// <param name="o">The object we represent.</param> /// <param name="sessionId"> /// The session ID for this session. This is what the server and client use to talk about this session. /// </param> /// <param name="host">The view variables host owning this session.</param> public ViewVariablesesSession(NetUserId playerUser, object o, uint sessionId, IViewVariablesHost host, IRobustSerializer robustSerializer) { PlayerUser = playerUser; Object = o; SessionId = sessionId; ObjectType = o.GetType(); Host = host; RobustSerializer = robustSerializer; var traitIds = Host.TraitIdsFor(ObjectType); if (traitIds.Contains(ViewVariablesTraits.Members)) { var trait = new ViewVariablesTraitMembers(this); _traits.Add(trait); } if (traitIds.Contains(ViewVariablesTraits.Enumerable)) { var trait = new ViewVariablesTraitEnumerable(this); _traits.Add(trait); } if (traitIds.Contains(ViewVariablesTraits.Entity)) { var trait = new ViewVariablesTraitEntity(this); _traits.Add(trait); } }
/// <param name="playerSession">The session ID of the player who opened this session.</param> /// <param name="o">The object we represent.</param> /// <param name="sessionId"> /// The session ID for this session. This is what the server and client use to talk about this session. /// </param> /// <param name="host">The view variables host owning this session.</param> public ViewVariablesSession(NetSessionId playerSession, object o, uint sessionId, IViewVariablesHost host) { PlayerSession = playerSession; Object = o; SessionId = sessionId; ObjectType = o.GetType(); Host = host; var traitIds = Host.TraitIdsFor(ObjectType); if (traitIds.Contains(ViewVariablesTraits.Members)) { var trait = new ViewVariablesTraitMembers(this); _traits.Add(trait); } if (traitIds.Contains(ViewVariablesTraits.Enumerable)) { var trait = new ViewVariablesTraitEnumerable(this); _traits.Add(trait); } if (traitIds.Contains(ViewVariablesTraits.Entity)) { var trait = new ViewVariablesTraitEntity(this); _traits.Add(trait); } }
public void Test() { var ser = new Mock <IRobustSerializer>(); ser.Setup(p => p.CanSerialize(It.IsAny <Type>())).Returns(true); var session = new Mock <IViewVariablesSession>(); session.SetupGet(p => p.Object).Returns(new C()); session.SetupGet(p => p.ObjectType).Returns(typeof(C)); session.SetupGet(p => p.RobustSerializer).Returns(ser.Object); var blob = new ViewVariablesTraitMembers(session.Object).DataRequest(new ViewVariablesRequestMembers()); Assert.That(blob, Is.TypeOf <ViewVariablesBlobMembers>()); var blobM = (ViewVariablesBlobMembers)blob !; Assert.That(blobM.MemberGroups, Has.Count.EqualTo(2)); var group0 = blobM.MemberGroups[0]; var group1 = blobM.MemberGroups[1]; Assert.That(group0.groupName, Does.EndWith("+C")); Assert.That(group1.groupName, Does.EndWith("+A")); Assert.That(group0.groupMembers, Has.Count.EqualTo(2)); Assert.That(group1.groupMembers, Has.Count.EqualTo(1)); Assert.That(group0.groupMembers[0].Name, Is.EqualTo("Y")); Assert.That(group0.groupMembers[1].Name, Is.EqualTo("Z")); Assert.That(group1.groupMembers[0].Name, Is.EqualTo("X")); }
private async void _tabsOnTabChanged(int tab) { if (tab == TabClientComponents) { // Repopulate client components in case something changed. PopulateClientComponents(); } if (_serverLoaded || tab != TabServerComponents && tab != TabServerVars) { return; } _serverLoaded = true; if (_entitySession == null) { try { _entitySession = await ViewVariablesManager.RequestSession(new ViewVariablesEntitySelector(_entity)); } catch (SessionDenyException e) { var text = $"Server denied VV request: {e.Reason}"; _serverVariables.AddChild(new Label { Text = text }); _serverComponents.AddChild(new Label { Text = text }); return; } } _membersBlob = await ViewVariablesManager.RequestData <ViewVariablesBlobMembers>(_entitySession, new ViewVariablesRequestMembers()); var otherStyle = false; var first = true; foreach (var(groupName, groupMembers) in _membersBlob !.MemberGroups) { ViewVariablesTraitMembers.CreateMemberGroupHeader(ref first, groupName, _serverVariables); foreach (var propertyData in groupMembers) { var propertyEdit = new ViewVariablesPropertyControl(ViewVariablesManager, _robustSerializer); propertyEdit.SetStyle(otherStyle = !otherStyle); var editor = propertyEdit.SetProperty(propertyData); var selectorChain = new object[] { new ViewVariablesMemberSelector(propertyData.PropertyIndex) }; editor.OnValueChanged += (o, r) => ViewVariablesManager.ModifyRemote(_entitySession, selectorChain, o, r); editor.WireNetworkSelector(_entitySession.SessionId, selectorChain); _serverVariables.AddChild(propertyEdit); } } PopulateServerComponents(); }
public override void Initialize(DefaultWindow window, object obj) { _entity = (EntityUid)obj; var scrollContainer = new ScrollContainer(); //scrollContainer.SetAnchorPreset(Control.LayoutPreset.Wide, true); window.Contents.AddChild(scrollContainer); var vBoxContainer = new BoxContainer { Orientation = LayoutOrientation.Vertical }; scrollContainer.AddChild(vBoxContainer); // Handle top bar displaying type and ToString(). { Control top; var stringified = PrettyPrint.PrintUserFacingWithType(obj, out var typeStringified); if (typeStringified != "") { //var smallFont = new VectorFont(_resourceCache.GetResource<FontResource>("/Fonts/CALIBRI.TTF"), 10); // Custom ToString() implementation. var headBox = new BoxContainer { Orientation = LayoutOrientation.Vertical, SeparationOverride = 0 }; headBox.AddChild(new Label { Text = stringified, ClipText = true }); headBox.AddChild(new Label { Text = typeStringified, // FontOverride = smallFont, FontColorOverride = Color.DarkGray, ClipText = true }); top = headBox; } else { top = new Label { Text = stringified }; } if (_entityManager.TryGetComponent(_entity, out ISpriteComponent? sprite)) { var hBox = new BoxContainer { Orientation = LayoutOrientation.Horizontal }; top.HorizontalExpand = true; hBox.AddChild(top); hBox.AddChild(new SpriteView { Sprite = sprite, OverrideDirection = Direction.South }); vBoxContainer.AddChild(hBox); } else { vBoxContainer.AddChild(top); } } _tabs = new TabContainer(); _tabs.OnTabChanged += _tabsOnTabChanged; vBoxContainer.AddChild(_tabs); var clientVBox = new BoxContainer { Orientation = LayoutOrientation.Vertical, SeparationOverride = 0 }; _tabs.AddChild(clientVBox); _tabs.SetTabTitle(TabClientVars, Loc.GetString("view-variable-instance-entity-client-variables-tab-title")); var first = true; foreach (var group in LocalPropertyList(obj, ViewVariablesManager, _robustSerializer)) { ViewVariablesTraitMembers.CreateMemberGroupHeader( ref first, TypeAbbreviation.Abbreviate(group.Key), clientVBox); foreach (var control in group) { clientVBox.AddChild(control); } } _clientComponents = new BoxContainer { Orientation = LayoutOrientation.Vertical, SeparationOverride = 0 }; _tabs.AddChild(_clientComponents); _tabs.SetTabTitle(TabClientComponents, Loc.GetString("view-variable-instance-entity-client-components-tab-title")); PopulateClientComponents(); if (!_entity.IsClientSide()) { _serverVariables = new BoxContainer { Orientation = LayoutOrientation.Vertical, SeparationOverride = 0 }; _tabs.AddChild(_serverVariables); _tabs.SetTabTitle(TabServerVars, Loc.GetString("view-variable-instance-entity-server-variables-tab-title")); _serverComponents = new BoxContainer { Orientation = LayoutOrientation.Vertical, SeparationOverride = 0 }; _tabs.AddChild(_serverComponents); _tabs.SetTabTitle(TabServerComponents, Loc.GetString("view-variable-instance-entity-server-components-tab-title")); PopulateServerComponents(false); } }
public override void Initialize(SS14Window window, object obj) { _entity = (IEntity)obj; var scrollContainer = new ScrollContainer(); //scrollContainer.SetAnchorPreset(Control.LayoutPreset.Wide, true); window.Contents.AddChild(scrollContainer); var vBoxContainer = new VBoxContainer { SizeFlagsHorizontal = SizeFlags.FillExpand, SizeFlagsVertical = SizeFlags.FillExpand, }; scrollContainer.AddChild(vBoxContainer); // Handle top bar displaying type and ToString(). { Control top; var stringified = PrettyPrint.PrintUserFacingWithType(obj, out var typeStringified); if (typeStringified != "") { //var smallFont = new VectorFont(_resourceCache.GetResource<FontResource>("/Fonts/CALIBRI.TTF"), 10); // Custom ToString() implementation. var headBox = new VBoxContainer { SeparationOverride = 0 }; headBox.AddChild(new Label { Text = stringified, ClipText = true }); headBox.AddChild(new Label { Text = typeStringified, // FontOverride = smallFont, FontColorOverride = Color.DarkGray, ClipText = true }); top = headBox; } else { top = new Label { Text = stringified }; } if (_entity.TryGetComponent(out ISpriteComponent? sprite)) { var hBox = new HBoxContainer(); top.SizeFlagsHorizontal = SizeFlags.FillExpand; hBox.AddChild(top); hBox.AddChild(new SpriteView { Sprite = sprite }); vBoxContainer.AddChild(hBox); } else { vBoxContainer.AddChild(top); } } _tabs = new TabContainer(); _tabs.OnTabChanged += _tabsOnTabChanged; vBoxContainer.AddChild(_tabs); var clientVBox = new VBoxContainer { SeparationOverride = 0 }; _tabs.AddChild(clientVBox); _tabs.SetTabTitle(TabClientVars, "Client Variables"); var first = true; foreach (var group in LocalPropertyList(obj, ViewVariablesManager, _resourceCache)) { ViewVariablesTraitMembers.CreateMemberGroupHeader( ref first, TypeAbbreviation.Abbreviate(group.Key), clientVBox); foreach (var control in group) { clientVBox.AddChild(control); } } _clientComponents = new VBoxContainer { SeparationOverride = 0 }; _tabs.AddChild(_clientComponents); _tabs.SetTabTitle(TabClientComponents, "Client Components"); _clientComponents.AddChild(_clientComponentsSearchBar = new LineEdit { PlaceHolder = Loc.GetString("Search"), SizeFlagsHorizontal = SizeFlags.FillExpand }); _clientComponentsSearchBar.OnTextChanged += OnClientComponentsSearchBarChanged; // See engine#636 for why the Distinct() call. var componentList = _entity.GetAllComponents().OrderBy(c => c.GetType().ToString()); foreach (var component in componentList) { var button = new Button { Text = TypeAbbreviation.Abbreviate(component.GetType()), TextAlign = Label.AlignMode.Left }; button.OnPressed += args => { ViewVariablesManager.OpenVV(component); }; _clientComponents.AddChild(button); } if (!_entity.Uid.IsClientSide()) { _serverVariables = new VBoxContainer { SeparationOverride = 0 }; _tabs.AddChild(_serverVariables); _tabs.SetTabTitle(TabServerVars, "Server Variables"); _serverComponents = new VBoxContainer { SeparationOverride = 0 }; _tabs.AddChild(_serverComponents); _tabs.SetTabTitle(TabServerComponents, "Server Components"); _serverComponents.AddChild(_serverComponentsSearchBar = new LineEdit { PlaceHolder = Loc.GetString("Search"), SizeFlagsHorizontal = SizeFlags.FillExpand }); _serverComponentsSearchBar.OnTextChanged += OnServerComponentsSearchBarChanged; } }
private async void _tabsOnTabChanged(int tab) { if (_serverLoaded || tab != TabServerComponents && tab != TabServerVars) { return; } _serverLoaded = true; if (_entitySession == null) { try { _entitySession = await ViewVariablesManager.RequestSession(new ViewVariablesEntitySelector(_entity.Uid)); } catch (SessionDenyException e) { var text = $"Server denied VV request: {e.Reason}"; _serverVariables.AddChild(new Label { Text = text }); _serverComponents.AddChild(new Label { Text = text }); return; } _membersBlob = await ViewVariablesManager.RequestData <ViewVariablesBlobMembers>(_entitySession, new ViewVariablesRequestMembers()); } var otherStyle = false; var first = true; foreach (var(groupName, groupMembers) in _membersBlob !.MemberGroups) { ViewVariablesTraitMembers.CreateMemberGroupHeader(ref first, groupName, _serverVariables); foreach (var propertyData in groupMembers) { var propertyEdit = new ViewVariablesPropertyControl(ViewVariablesManager, _resourceCache); propertyEdit.SetStyle(otherStyle = !otherStyle); var editor = propertyEdit.SetProperty(propertyData); var selectorChain = new object[] { new ViewVariablesMemberSelector(propertyData.PropertyIndex) }; editor.OnValueChanged += o => ViewVariablesManager.ModifyRemote(_entitySession, selectorChain, o); editor.WireNetworkSelector(_entitySession.SessionId, selectorChain); _serverVariables.AddChild(propertyEdit); } } var componentsBlob = await ViewVariablesManager.RequestData <ViewVariablesBlobEntityComponents>(_entitySession, new ViewVariablesRequestEntityComponents()); _serverComponents.DisposeAllChildren(); _serverComponents.AddChild(_serverComponentsSearchBar = new LineEdit { PlaceHolder = Loc.GetString("Search"), SizeFlagsHorizontal = SizeFlags.FillExpand }); _serverComponentsSearchBar.OnTextChanged += OnServerComponentsSearchBarChanged; componentsBlob.ComponentTypes.Sort(); var componentTypes = componentsBlob.ComponentTypes.AsEnumerable(); if (!string.IsNullOrEmpty(_serverComponentsSearchBar.Text)) { componentTypes = componentTypes .Where(t => t.Stringified.Contains(_serverComponentsSearchBar.Text, StringComparison.InvariantCultureIgnoreCase)); } componentTypes = componentTypes.OrderBy(t => t.Stringified); foreach (var componentType in componentTypes) { var button = new Button { Text = componentType.Stringified, TextAlign = Label.AlignMode.Left }; button.OnPressed += args => { ViewVariablesManager.OpenVV( new ViewVariablesComponentSelector(_entity.Uid, componentType.FullName)); }; _serverComponents.AddChild(button); } }