Example #1
0
 private void OnZOrderChanged(object sender, ZOrderChangedEventArgs e)
 {
     //ZOrderChanged?.Invoke(sender, e);
     if (ZOrderChanged != null)
     {
         ZOrderChanged(sender, e);
     }
 }
Example #2
0
        private void Field_ZOrderChanged(object sender, ZOrderChangedEventArgs e)
        {
            // field.Zorder == e.newValue
            var field = sender as IField;

            if (field == null || e.PreviousValue == e.NewValue)
            {
                return;
            }
            // zorder should be THE key.

            fields.Remove(e.PreviousValue);

            var toBePosition = fields.Keys.IndexOf(e.NewValue);

            if (toBePosition == -1)
            {
                fields.Add(field.ZOrder, field);
                return;
            }
            //


            IField replacedItem  = null;
            IField replacingItem = field;

            field.ZOrderChanged -= this.Field_ZOrderChanged;

            Func <int, int> opp;

            // now i have to move previous item on a position
            if (e.NewValue < e.PreviousValue)
            {
                opp = (i) => i + 1;
            }
            else
            {
                opp = (i) => i - 1;
            }

            var prevPos = field.ZOrder;
            var pos     = toBePosition;

            while (pos != -1)
            {
                replacedItem = fields.Values[pos];
                replacedItem.ZOrderChanged -= this.Field_ZOrderChanged;

                //cleaning new space
                fields.Remove(replacingItem.ZOrder);
                // inserting on a new place
                replacingItem.ZOrderChanged += this.Field_ZOrderChanged;
                fields.Add(replacingItem.ZOrder, replacingItem);

                // setting new id that tepends on a direction.
                replacedItem.ZOrder = opp(replacedItem.ZOrder);//Everything should be handled recursively.
                pos = fields.Keys.IndexOf(replacedItem.ZOrder);

                replacingItem = replacedItem;
            }

            replacingItem.ZOrderChanged += this.Field_ZOrderChanged;
            fields.Add(replacingItem.ZOrder, replacingItem);
        }