private void SelectLayer(IRoomEditorFilter layer) { if (!_editorConstructed) { return; } if (layer == _layer) { return; } if (_layer != null) { _layer.FilterOff(); } _layer = layer ?? _emptyLayer; SetDefaultPropertyGridList(); SetPropertyGridObject(_room); lblTransparency.Visible = _layer.ShowTransparencySlider; sldTransparency.Visible = _layer.ShowTransparencySlider; chkCharacterOffset.Visible = _layer is CharactersEditorFilter; _layer.FilterOn(); bufferedPanel1.Invalidate(); // ensure that shortcut keys do not move the combobox bufferedPanel1.Focus(); }
private void SelectCursor(int x, int y, RoomEditorState state) { state.CurrentCursor = Cursors.Default; if (_layer != null) { state.CurrentCursor = _layer.GetCursor(x, y, state); } else { state.CurrentCursor = null; } if (state.CurrentCursor != null) { bufferedPanel1.Cursor = state.CurrentCursor; return; } for (int layerIndex = _layers.Count - 1; layerIndex >= 0; layerIndex--) { IRoomEditorFilter layer = _layers[layerIndex]; if (IsLocked(layer)) { continue; } Cursor tmpCursor = layer.GetCursor(x, y, state); if (tmpCursor != null) { state.CurrentCursor = tmpCursor; } } bufferedPanel1.Cursor = state.CurrentCursor ?? Cursors.Default; }
private bool IsVisible(IRoomEditorFilter layer) { RoomEditNode node = _editAddressBar.RootNode.GetChild(layer.DisplayName, true) as RoomEditNode; if (node == null) { return(true); } return(node.IsVisible); }
private void bufferedPanel1_Paint(object sender, PaintEventArgs e) { _state.UpdateScroll(bufferedPanel1.AutoScrollPosition); int scaleFactor = 1; if ((_room.Resolution == RoomResolution.LowRes) && (Factory.AGSEditor.CurrentGame.IsHighResolution)) { // low-res room in high-res game, scale up since object // co-ordinates will be high-res scaleFactor = 2; } int backgroundNumber = cmbBackgrounds.SelectedIndex; if (backgroundNumber < _room.BackgroundCount) { e.Graphics.SetClip(new Rectangle(0, 0, _state.RoomSizeToWindow(_room.Width), _state.RoomSizeToWindow(_room.Height))); IntPtr hdc = e.Graphics.GetHdc(); Factory.NativeProxy.CreateBuffer(bufferedPanel1.ClientSize.Width + SystemInformation.VerticalScrollBarWidth, bufferedPanel1.ClientSize.Height + SystemInformation.HorizontalScrollBarHeight); // Adjust co-ordinates using original scale factor so that it lines // up with objects, etc int drawOffsX = _state.RoomXToWindow(0); int drawOffsY = _state.RoomYToWindow(0); IRoomEditorFilter maskFilter = GetCurrentMaskFilter(); lock (_room) { Factory.NativeProxy.DrawRoomBackground(hdc, _room, drawOffsX, drawOffsY, backgroundNumber, _state.Scale * scaleFactor, maskFilter == null ? RoomAreaMaskType.None : maskFilter.MaskToDraw, (maskFilter == null || !maskFilter.Enabled) ? 0 : maskFilter.SelectedArea, sldTransparency.Value); } foreach (IRoomEditorFilter layer in _layers) { if (!IsVisible(layer)) { continue; } layer.PaintToHDC(hdc, _state); } Factory.NativeProxy.RenderBufferToHDC(hdc); e.Graphics.ReleaseHdc(hdc); foreach (IRoomEditorFilter layer in _layers) { if (!IsVisible(layer)) { continue; } layer.Paint(e.Graphics, _state); } } base.OnPaint(e); }
private bool IsLocked(IRoomEditorFilter layer) { if (!layer.Visible) { return(true); } if (_layer != null && !_layer.AllowClicksInterception() && _layer != layer) { return(true); } return(layer.Locked); }
private void control_OnLockedChanged(object sender, EventArgs e) { if (Layer != null) { return; } IRoomEditorFilter parentFilter = FindFilter(); if (parentFilter != null) { UpdateList(parentFilter.LockedItems, DisplayName, _control.IsLocked); } }
private void control_OnVisibleChanged(object sender, EventArgs e) { IRoomEditorFilter parentFilter = FindFilter(); if (parentFilter != null) { if (Layer == null) { UpdateList(parentFilter.VisibleItems, DisplayName, _control.IsVisible); } parentFilter.Invalidate(); } }
public RoomSettingsEditor(Room room) { this.SetStyle(ControlStyles.Selectable, true); InitializeComponent(); _room = room; if (_room.Resolution == RoomResolution.LowRes) { _state.ScaleFactor = 2; } else { _state.ScaleFactor = 1; } sldZoomLevel.Value = _state.ScaleFactor; _state.ScrollOffsetX = 0; _state.ScrollOffsetY = 0; _state.CurrentCursor = Cursors.Default; _filters.Add(new EmptyEditorFilter(bufferedPanel1, _room)); _filters.Add(new EdgesEditorFilter(bufferedPanel1, _room)); _filters.Add(new CharactersEditorFilter(bufferedPanel1, _room, Factory.AGSEditor.CurrentGame)); _filters.Add(new ObjectsEditorFilter(bufferedPanel1, _room)); _filters.Add(new HotspotsEditorFilter(bufferedPanel1, _room)); _filters.Add(new WalkableAreasEditorFilter(bufferedPanel1, _room)); _filters.Add(new WalkBehindsEditorFilter(bufferedPanel1, _room)); _filters.Add(new RegionsEditorFilter(bufferedPanel1, _room)); _filter = _filters[0]; _filter.FilterOn(); cmbViewType.Items.Add("Nothing"); cmbViewType.Items.Add("Edges"); cmbViewType.Items.Add("Characters"); cmbViewType.Items.Add("Objects"); cmbViewType.Items.Add("Hotspots"); cmbViewType.Items.Add("Walkable areas"); cmbViewType.Items.Add("Walk-behinds"); cmbViewType.Items.Add("Regions"); cmbViewType.SelectedIndex = 0; RepopulateBackgroundList(0); UpdateScrollableWindowSize(); this.MouseWheel += new MouseEventHandler(RoomSettingsEditor_MouseWheel); this.bufferedPanel1.MouseWheel += new MouseEventHandler(RoomSettingsEditor_MouseWheel); _editorConstructed = true; }
private void control_OnLockedChanged(object sender, EventArgs e) { IRoomEditorFilter parentFilter = FindFilter(); if (parentFilter != null) { if (Layer == null) { parentFilter.DesignItems[RoomItemID].Locked = _control.IsLocked; } else { Layer.Locked = _control.IsLocked; } } }
private void bufferedPanel1_Paint(object sender, PaintEventArgs e) { _state.UpdateScroll(bufferedPanel1.AutoScrollPosition); int scaleFactor = 1; int backgroundNumber = cmbBackgrounds.SelectedIndex; if (backgroundNumber < _room.BackgroundCount) { int bufWidth = _state.RoomSizeToWindow(_room.Width); int bufHeight = _state.RoomSizeToWindow(_room.Height); e.Graphics.SetClip(new Rectangle(0, 0, bufWidth, bufHeight)); IntPtr hdc = e.Graphics.GetHdc(); Factory.NativeProxy.CreateBuffer(bufWidth, bufHeight); // Adjust co-ordinates using original scale factor so that it lines // up with objects, etc int drawOffsX = _state.RoomXToWindow(0); int drawOffsY = _state.RoomYToWindow(0); IRoomEditorFilter maskFilter = GetCurrentMaskFilter(); lock (_room) { Factory.NativeProxy.DrawRoomBackground(hdc, _room, drawOffsX, drawOffsY, backgroundNumber, _state.Scale * scaleFactor, maskFilter == null ? RoomAreaMaskType.None : maskFilter.MaskToDraw, maskFilter == null ? 0 : maskFilter.SelectedArea, sldTransparency.Value); } foreach (IRoomEditorFilter layer in _layers) { if (!IsVisible(layer)) { continue; } layer.PaintToHDC(hdc, _state); } Factory.NativeProxy.RenderBufferToHDC(hdc); e.Graphics.ReleaseHdc(hdc); foreach (IRoomEditorFilter layer in _layers) { if (!IsVisible(layer)) { continue; } layer.Paint(e.Graphics, _state); } } base.OnPaint(e); }
private void control_OnVisibleChanged(object sender, EventArgs e) { IRoomEditorFilter parentFilter = FindFilter(); if (parentFilter != null) { if (Layer == null) { parentFilter.DesignItems[RoomItemID].Visible = _control.IsVisible; } else { Layer.Visible = _control.IsVisible; } parentFilter.Invalidate(); } }
public ToolStripItem CreateNodeUI(EventHandler nodeClicked) { RoomNodeControl control = new RoomNodeControl { DisplayName = DisplayName, IsVisible = _visibleByDefault }; if (_shouldHideCheckboxes) { control.HideCheckBoxes(true); } if (_control != null) { _control.OnNodeSelected -= nodeClicked; _control.OnIsVisibleChanged -= control_OnVisibleChanged; _control.OnIsLockedChanged -= control_OnLockedChanged; } control.OnNodeSelected += nodeClicked; control.OnIsVisibleChanged += control_OnVisibleChanged; control.OnIsLockedChanged += control_OnLockedChanged; ToolStripControlHost host = new ToolStripControlHost(control); control.Host = host; _control = control; if (VisibleGroup != null) { VisibleGroup.Register(_control); } if (Layer == null) { IRoomEditorFilter parentFilter = FindFilter(); if (parentFilter != null && !parentFilter.SupportVisibleItems) { control.HideCheckBoxes(false); } } else { Layer.VisibleItems.Clear(); Layer.VisibleItems.AddRange(Layer.GetItemsNames()); } return(host); //return new ToolStripMenuItem(DisplayName, null, nodeClicked); }
public RoomSettingsEditor(Room room) { if (LockedCursor == null) { LockedCursor = Resources.ResourceManager.GetCursor("lock_cur.cur"); } this.SetStyle(ControlStyles.Selectable, true); InitializeComponent(); Factory.GUIController.ColorThemes.Apply(LoadColorTheme); _room = room; sldZoomLevel.Maximum = ZOOM_MAX_VALUE / ZOOM_STEP_VALUE; sldZoomLevel.Value = 100 / ZOOM_STEP_VALUE; // TODO: choose default zoom based on the room size vs window size? SetZoomSliderToMultiplier(_room.Width <= 320 ? 2 : 1); _emptyLayer = new EmptyEditorFilter(bufferedPanel1, _room); _layers.Add(new EdgesEditorFilter(bufferedPanel1, _room)); _characterLayer = new CharactersEditorFilter(bufferedPanel1, this, _room, Factory.AGSEditor.CurrentGame); _layers.Add(_characterLayer); _layers.Add(new ObjectsEditorFilter(bufferedPanel1, this, _room)); _layers.Add(new HotspotsEditorFilter(bufferedPanel1, this, _room)); _layers.Add(new WalkableAreasEditorFilter(bufferedPanel1, this, _room)); _layers.Add(new WalkBehindsEditorFilter(bufferedPanel1, this, _room)); _layers.Add(new RegionsEditorFilter(bufferedPanel1, this, _room)); foreach (IRoomEditorFilter layer in _layers) { layer.OnItemsChanged += layer_OnItemsChanged; layer.OnSelectedItemChanged += layer_OnSelectedItemChanged; } RefreshLayersTree(); _editAddressBar.SelectionChange += editAddressBar_SelectionChange; _startNode = _editAddressBar.CurrentNode.UniqueID; RepopulateBackgroundList(0); UpdateScrollableWindowSize(); this.MouseWheel += new MouseEventHandler(RoomSettingsEditor_MouseWheel); this.bufferedPanel1.MouseWheel += new MouseEventHandler(RoomSettingsEditor_MouseWheel); this.sldZoomLevel.MouseWheel += new MouseEventHandler(RoomSettingsEditor_MouseWheel); _editorConstructed = true; }
private void control_OnVisibleChanged(object sender, EventArgs e) { IRoomEditorFilter parentFilter = FindFilter(); if (parentFilter != null) { if (Layer == null) { parentFilter.DesignItems[RoomItemID].Visible = _control.IsVisible; } else { Layer.Visible = _control.IsVisible; } parentFilter.Modified = true; parentFilter.Invalidate(); // repaint, since visibility changed } }
private bool IsLocked(IRoomEditorFilter layer) { RoomEditNode node = _editAddressBar.RootNode.GetChild(layer.DisplayName, true) as RoomEditNode; if (node == null) { return(false); } if (!node.IsVisible) { return(true); } if (_layer != null && !_layer.AllowClicksInterception() && _layer != layer) { return(true); } return(node.IsLocked); }
private void layer_OnSelectedItemChanged(object sender, SelectedRoomItemEventArgs e) { IRoomEditorFilter layer = sender as IRoomEditorFilter; if (layer == null) { SelectLayer(null); return; } IAddressNode node = _editAddressBar.RootNode.GetChild(GetLayerItemUniqueID(layer, e.Item), true); if (node == null) { SelectLayer(null); return; } _editAddressBar.CurrentNode = node; SelectLayer(layer); //selecting hotspot from designer Panel, then cant Draw more hotspots... }
private void cmbViewType_SelectedIndexChanged(object sender, EventArgs e) { if (_editorConstructed) { _filter.FilterOff(); _filter = _filters[cmbViewType.SelectedIndex]; SetDefaultPropertyGridList(); Factory.GUIController.SetPropertyGridObject(_room); lblTransparency.Visible = _filter.ShowTransparencySlider; sldTransparency.Visible = _filter.ShowTransparencySlider; chkCharacterOffset.Visible = ((string)cmbViewType.SelectedItem == "Characters"); _filter.FilterOn(); bufferedPanel1.Invalidate(); // ensure that shortcut keys do not move the combobox bufferedPanel1.Focus(); } }
public ToolStripItem CreateNodeUI(EventHandler nodeClicked) { RoomNodeControl control = new RoomNodeControl { DisplayName = DisplayName, IsVisible = _initVisible, IsLocked = _initLocked }; if (_shouldHideCheckboxes) { control.HideCheckBoxes(true); } if (_control != null) { _control.OnNodeSelected -= nodeClicked; _control.OnIsVisibleChanged -= control_OnVisibleChanged; _control.OnIsLockedChanged -= control_OnLockedChanged; } control.OnNodeSelected += nodeClicked; control.OnIsVisibleChanged += control_OnVisibleChanged; control.OnIsLockedChanged += control_OnLockedChanged; ToolStripControlHost host = new ToolStripControlHost(control); control.Host = host; _control = control; if (VisibleGroup != null) { VisibleGroup.Register(_control); } if (Layer == null) { IRoomEditorFilter parentFilter = FindFilter(); if (parentFilter != null && !parentFilter.SupportVisibleItems) { control.HideCheckBoxes(false); } } return(host); }
private void RefreshLayersTree() { IAddressNode currentNode = _editAddressBar.CurrentNode; IAddressNode[] layers = new IAddressNode[_layers.Count]; VisibleLayerRadioGroup visibleLayerRadioGroup = new VisibleLayerRadioGroup(); for (int layerIndex = 0; layerIndex < layers.Length; layerIndex++) { IRoomEditorFilter layer = _layers[layerIndex]; List <string> names = layer.GetItemsNames(); IAddressNode[] children = new IAddressNode[names.Count]; for (int index = 0; index < names.Count; index++) { string name = names[index]; children[index] = new RoomEditNode(GetLayerItemUniqueID(layer, name), name, new IAddressNode[0], true, false) { }; } RoomEditNode node = new RoomEditNode(layer.DisplayName, children, layer.VisibleByDefault); node.Layer = layer; if (layer is BaseAreasEditorFilter) { node.VisibleGroup = visibleLayerRadioGroup; } foreach (IAddressNode child in children) { child.Parent = node; } layers[layerIndex] = node; } _layersRoot = new RoomEditNode("Room", layers, true); foreach (IAddressNode layer in layers) { layer.Parent = _layersRoot; } _editAddressBar.InitializeRoot(_layersRoot); SelectOldNode(currentNode); }
/// <summary> /// Update the breadcrumb navigation bar, make all nodes correspond to the design-time state /// of the room layers and items. /// </summary> /// TODO: currently this is the only way to sync navbar with the design-time properties. /// find a better solution, perhaps tie each DesignTimeProperties object to a bar node. public void RefreshLayersTree() { IAddressNode currentNode = _editAddressBar.CurrentNode; IAddressNode[] layers = new IAddressNode[_layers.Count]; VisibleLayerRadioGroup visibleLayerRadioGroup = new VisibleLayerRadioGroup(); for (int layerIndex = 0; layerIndex < layers.Length; layerIndex++) { IRoomEditorFilter layer = _layers[layerIndex]; IAddressNode[] children = new IAddressNode[layer.DesignItems.Count]; int index = 0; foreach (var item in layer.DesignItems) { string id = item.Key; string name = layer.GetItemName(id); children[index++] = new RoomEditNode(GetLayerItemUniqueID(layer, name), name, id, new IAddressNode[0], item.Value.Visible, item.Value.Locked, false); } RoomEditNode node = new RoomEditNode(layer.DisplayName, children, layer.Visible, layer.Locked); node.Layer = layer; if (layer is BaseAreasEditorFilter) { node.VisibleGroup = visibleLayerRadioGroup; } foreach (IAddressNode child in children) { child.Parent = node; } layers[layerIndex] = node; } _layersRoot = new RoomEditNode("Room", layers, true, false); foreach (IAddressNode layer in layers) { layer.Parent = _layersRoot; } _editAddressBar.InitializeRoot(_layersRoot); SelectOldNode(currentNode); }
private bool IsVisible(IRoomEditorFilter layer) { return(layer.Visible); }
private string GetLayerItemUniqueID(IRoomEditorFilter layer, string itemName) { return(layer.DisplayName + itemName); }