public override void Bind(IEditorService service)
        {
            _edSvc = service;
            _edSvc.RegisterCustomNotifier(this);
            _wm = (IWatermarkDefinition)service.GetEditedResource();

            NumericBinder.BindValueChanged(numRotation, _wm.Appearance, "Rotation");
            NumericBinder.BindValueChanged(numTransparency, _wm.Appearance, "Transparency");

            if (_wm.Position.Type == PositionType.Tile)
                _tile = (ITilePosition)_wm.Position;
            else if (_wm.Position.Type == PositionType.XY)
                _xy = (IXYPosition)_wm.Position;

            if (_tile == null)
            {
                _tile = _wm.CreateTilePosition();
                rdXY.Checked = true;
            }
            else if (_xy == null)
            {
                _xy = _wm.CreateXYPosition();
                rdTile.Checked = true;
            }
        }
Exemple #2
0
        /// <summary>
        ///     Enumerates all positionf of the tiles adjacent to the current tile.
        /// </summary>
        /// <param name="tile">The postion of the tile.</param>
        /// <param name="index"></param>
        /// <param name="pattern">The pattern that is used.</param>
        /// <returns></returns>
        /// <remarks>
        ///     The first tile is usually the north tile. The only tiles in a triangular pattern, with one odd and one even
        ///     coordinate. In that case first title is the south located tile. The following tiltes are enumerated counter
        ///     clockwise.
        /// </remarks>
        public static TilePosition GetAdjacentTile(this ITilePosition tile, int index, TilePattern pattern)
        {
            if (index <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(index));
            }
            int x = tile.X;
            int y = tile.Y;

            switch (pattern)
            {
            case TilePattern.Triangular:
                // check for odd tiles
                return(((x & 1) ^ (y & 1)) == 1 ? _oddTriangularAdjacents[index % (int)pattern](tile) : _evenTriangularAdjacents[index % (int)pattern](tile));

            case TilePattern.Rectangular:
                return(_rectangularAdjacents[index % (int)pattern](tile));

            case TilePattern.Hexangular:
                return(_hexangularAdjacents[index % (int)pattern](tile));

            default:
                throw new ArgumentOutOfRangeException(nameof(pattern), pattern,
                                                      $"Pattern {pattern} not supported.");
            }
        }
Exemple #3
0
        public override void Bind(IEditorService service)
        {
            _edSvc = service;
            _edSvc.RegisterCustomNotifier(this);
            _wm = (IWatermarkDefinition)service.GetEditedResource();

            NumericBinder.BindValueChanged(numRotation, _wm.Appearance, "Rotation");
            NumericBinder.BindValueChanged(numTransparency, _wm.Appearance, "Transparency");

            if (_wm.Position.Type == PositionType.Tile)
            {
                _tile = (ITilePosition)_wm.Position;
            }
            else if (_wm.Position.Type == PositionType.XY)
            {
                _xy = (IXYPosition)_wm.Position;
            }

            if (_tile == null)
            {
                _tile        = _wm.CreateTilePosition();
                rdXY.Checked = true;
            }
            else if (_xy == null)
            {
                _xy            = _wm.CreateXYPosition();
                rdTile.Checked = true;
            }
        }
Exemple #4
0
        public TilePositionEditor(ITilePosition pos, IEditorService service)
        {
            InitializeComponent();
            _pos = pos;
            _edSvc = service;

            try
            {
                _init = true;

                cmbHorizontalAlignment.DataSource = Enum.GetValues(typeof(HorizontalAlignmentType));
                cmbVerticalAlignment.DataSource = Enum.GetValues(typeof(VerticalAlignmentType));
                cmbHorizontalUnits.DataSource = Enum.GetValues(typeof(UnitType));
                cmbVerticalUnits.DataSource = Enum.GetValues(typeof(UnitType));

                numTileWidth.Value = Convert.ToDecimal(_pos.TileWidth);
                numTileHeight.Value = Convert.ToDecimal(_pos.TileHeight);

                cmbVerticalAlignment.SelectedItem = _pos.VerticalPosition.Alignment;
                cmbVerticalUnits.SelectedItem = _pos.VerticalPosition.Unit;
                numVerticalOffset.Value = Convert.ToDecimal(_pos.VerticalPosition.Offset);

                cmbHorizontalUnits.SelectedItem = _pos.HorizontalPosition.Unit;
                cmbHorizontalAlignment.SelectedItem = _pos.HorizontalPosition.Alignment;
                numHorizontalOffset.Value = Convert.ToDecimal(_pos.HorizontalPosition.Offset);
            }
            finally
            {
                _init = false;
            }
        }
Exemple #5
0
        public TilePositionEditor(ITilePosition pos, IEditorService service)
        {
            InitializeComponent();
            _pos   = pos;
            _edSvc = service;

            try
            {
                _init = true;

                cmbHorizontalAlignment.DataSource = Enum.GetValues(typeof(HorizontalAlignmentType));
                cmbVerticalAlignment.DataSource   = Enum.GetValues(typeof(VerticalAlignmentType));
                cmbHorizontalUnits.DataSource     = Enum.GetValues(typeof(UnitType));
                cmbVerticalUnits.DataSource       = Enum.GetValues(typeof(UnitType));

                numTileWidth.Value  = Convert.ToDecimal(_pos.TileWidth);
                numTileHeight.Value = Convert.ToDecimal(_pos.TileHeight);

                cmbVerticalAlignment.SelectedItem = _pos.VerticalPosition.Alignment;
                cmbVerticalUnits.SelectedItem     = _pos.VerticalPosition.Unit;
                numVerticalOffset.Value           = Convert.ToDecimal(_pos.VerticalPosition.Offset);

                cmbHorizontalUnits.SelectedItem     = _pos.HorizontalPosition.Unit;
                cmbHorizontalAlignment.SelectedItem = _pos.HorizontalPosition.Alignment;
                numHorizontalOffset.Value           = Convert.ToDecimal(_pos.HorizontalPosition.Offset);
            }
            finally
            {
                _init = false;
            }
        }
        public WatermarkInstanceEditor(IEditorService service, IWatermark watermark)
        {
            InitializeComponent();
            _edSvc = service;
            _watermark = watermark;

            try
            {
                _init = true;

                cmbUsage.DataSource = Enum.GetValues(typeof(UsageType));
                cmbUsage.SelectedItem = _watermark.Usage;
                txtResourceId.Text = _watermark.ResourceId;
                txtName.Text = _watermark.Name;

                _ovAppearance = _watermark.AppearanceOverride;

                chkOverrideAppearance.Checked = (_ovAppearance != null);
                chkOverridePosition.Checked = (_watermark.PositionOverride != null);

                if (_ovAppearance == null)
                    _ovAppearance = _watermark.CreateDefaultAppearance();

                //Init appearance
                numOvRotation.Value = Convert.ToDecimal(_ovAppearance.Rotation);
                numOvTransparency.Value = Convert.ToDecimal(_ovAppearance.Transparency);

                if (_watermark.PositionOverride == null)
                {
                    _ovTilePosition = _watermark.CreateDefaultTilePosition();
                    _ovXyPosition = _watermark.CreateDefaultXYPosition();
                }
                else
                {
                    if (_watermark.PositionOverride.Type == PositionType.Tile)
                    {
                        _ovXyPosition = _watermark.CreateDefaultXYPosition();
                        _ovTilePosition = (ITilePosition)_watermark.PositionOverride;

                        rdOvTilePos.Checked = true;
                    }
                    else
                    {
                        _ovXyPosition = (IXYPosition)_watermark.PositionOverride;
                        _ovTilePosition = _watermark.CreateDefaultTilePosition();

                        rdOvPosXY.Checked = true;
                    }
                    TilePos_CheckedChanged(this, EventArgs.Empty);
                }

                Debug.Assert(_ovTilePosition != null);
                Debug.Assert(_ovXyPosition != null);
            }
            finally
            {
                _init = false;
            }
        }
Exemple #7
0
        internal async Task MoveTile(ITilePosition from, ITilePosition to)
        {
            var tile = from.GetTile();

            from.RemoveTile();
            await to.AddTile(tile);

            if (to.GetTile() == '#')
            {
                // The user placed a blank tile, but then did not choose a letter
                RemoveBlankToRack(to);
            }
        }
Exemple #8
0
 /// <summary>
 ///     Gets the tile at a specific postion.
 /// </summary>
 /// <param name="position">The position of a tile</param>
 /// <returns>The tile at the specified position.</returns>
 public T this[ITilePosition position]
 {
     get
     {
         if (position == null)
         {
             throw new ArgumentNullException(nameof(position));
         }
         return(this[position.X, position.Y]);
     }
     set
     {
         if (position == null)
         {
             throw new ArgumentNullException(nameof(position));
         }
         this[position.X, position.Y] = value;
     }
 }
Exemple #9
0
        /// <summary>
        ///     Enumerates all positionf of the tiles adjacent to the current tile.
        /// </summary>
        /// <param name="tile">The postion of the tile.</param>
        /// <param name="pattern">The pattern that is used.</param>
        /// <returns></returns>
        /// <remarks>
        ///     The first tile is usually the north tile. The only tiles in a triangular pattern, with one odd and one even
        ///     coordinate. In that case first title is the south located tile. The following tiltes are enumerated counter
        ///     clockwise.
        /// </remarks>
        public static IEnumerable <TilePosition> GetAdjacentTiles(this ITilePosition tile, TilePattern pattern)
        {
            int x = tile.X;
            int y = tile.Y;

            switch (pattern)
            {
            case TilePattern.Triangular:
                // check for odd tiles
                return(((x & 1) ^ (y & 1)) == 1 ? _oddTriangularAdjacents.Select(t => t(tile)) : _evenTriangularAdjacents.Select(t => t(tile)));

            case TilePattern.Rectangular:
                return(_rectangularAdjacents.Select(t => t(tile)));

            case TilePattern.Hexangular:
                return(_hexangularAdjacents.Select(t => t(tile)));

            default:
                throw new ArgumentOutOfRangeException(nameof(pattern), pattern,
                                                      $"Pattern {pattern} not supported.");
            }
        }
Exemple #10
0
        public WatermarkInstanceEditor(IEditorService service, IWatermark watermark)
        {
            InitializeComponent();
            _edSvc     = service;
            _watermark = watermark;

            try
            {
                _init = true;

                cmbUsage.DataSource   = Enum.GetValues(typeof(UsageType));
                cmbUsage.SelectedItem = _watermark.Usage;
                txtResourceId.Text    = _watermark.ResourceId;
                txtName.Text          = _watermark.Name;

                _ovAppearance = _watermark.AppearanceOverride;

                chkOverrideAppearance.Checked = (_ovAppearance != null);
                chkOverridePosition.Checked   = (_watermark.PositionOverride != null);

                if (_ovAppearance == null)
                {
                    _ovAppearance = _watermark.CreateDefaultAppearance();
                }

                //Init appearance
                numOvRotation.Value     = Convert.ToDecimal(_ovAppearance.Rotation);
                numOvTransparency.Value = Convert.ToDecimal(_ovAppearance.Transparency);

                if (_watermark.PositionOverride == null)
                {
                    _ovTilePosition = _watermark.CreateDefaultTilePosition();
                    _ovXyPosition   = _watermark.CreateDefaultXYPosition();
                }
                else
                {
                    if (_watermark.PositionOverride.Type == PositionType.Tile)
                    {
                        _ovXyPosition   = _watermark.CreateDefaultXYPosition();
                        _ovTilePosition = (ITilePosition)_watermark.PositionOverride;

                        rdOvTilePos.Checked = true;
                    }
                    else
                    {
                        _ovXyPosition   = (IXYPosition)_watermark.PositionOverride;
                        _ovTilePosition = _watermark.CreateDefaultTilePosition();

                        rdOvPosXY.Checked = true;
                    }
                    TilePos_CheckedChanged(this, EventArgs.Empty);
                }

                Debug.Assert(_ovTilePosition != null);
                Debug.Assert(_ovXyPosition != null);
            }
            finally
            {
                _init = false;
            }
        }
Exemple #11
0
 private void RemoveBlankToRack(ITilePosition position)
 {
     position.RemoveTile();
     MyTiles[Array.IndexOf(MyTiles, ' ')] = '*';
 }