Example #1
0
        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();
        }
Example #2
0
 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;
 }
Example #3
0
        private bool IsVisible(IRoomEditorFilter layer)
        {
            RoomEditNode node = _editAddressBar.RootNode.GetChild(layer.DisplayName, true) as RoomEditNode;

            if (node == null)
            {
                return(true);
            }
            return(node.IsVisible);
        }
Example #4
0
        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);
        }
Example #5
0
 private bool IsLocked(IRoomEditorFilter layer)
 {
     if (!layer.Visible)
     {
         return(true);
     }
     if (_layer != null && !_layer.AllowClicksInterception() && _layer != layer)
     {
         return(true);
     }
     return(layer.Locked);
 }
Example #6
0
        private void control_OnLockedChanged(object sender, EventArgs e)
        {
            if (Layer != null)
            {
                return;
            }
            IRoomEditorFilter parentFilter = FindFilter();

            if (parentFilter != null)
            {
                UpdateList(parentFilter.LockedItems, DisplayName, _control.IsLocked);
            }
        }
Example #7
0
        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();
            }
        }
Example #8
0
        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;
        }
Example #9
0
        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;
        }
Example #10
0
        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;
                }
            }
        }
Example #11
0
        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);
        }
Example #12
0
        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();
            }
        }
Example #13
0
        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);
        }
Example #14
0
        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;
        }
Example #15
0
        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
            }
        }
Example #16
0
        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);
        }
Example #17
0
        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...
        }
Example #18
0
        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();
            }
        }
Example #19
0
        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);
        }
Example #20
0
        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);
        }
Example #21
0
        /// <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);
        }
Example #22
0
 private bool IsVisible(IRoomEditorFilter layer)
 {
     return(layer.Visible);
 }
Example #23
0
 private string GetLayerItemUniqueID(IRoomEditorFilter layer, string itemName)
 {
     return(layer.DisplayName + itemName);
 }
Example #24
0
        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();
            }
        }