Ejemplo n.º 1
0
        public virtual void UpdateStyle()
        {
            // This will get called again once this element gets added to the root.
            if (Root == null)
            {
                return;
            }

            if (
                Foreground.r == SGUIRoot.Main.Foreground.r &&
                Foreground.g == SGUIRoot.Main.Foreground.g &&
                Foreground.b == SGUIRoot.Main.Foreground.b
                )
            {
                Foreground = SGUIRoot.Main.Foreground.WithAlpha(Foreground.a);
            }
            if (
                Background.r == SGUIRoot.Main.Background.r &&
                Background.g == SGUIRoot.Main.Background.g &&
                Background.b == SGUIRoot.Main.Background.b
                )
            {
                Background = SGUIRoot.Main.Background.WithAlpha(Background.a);
            }

            Modifiers.ForEach(_ModifierUpdateStyle);
            OnUpdateStyle?.Invoke(this);
            UpdateChildrenStyles();
        }
Ejemplo n.º 2
0
        private static void Sort <T>(this BindingList <T> bindingList, IComparer <T> p_Comparer, Comparison <T> p_Comparison)
        {
            //Extract items and sort separately
            List <T> sortList = new List <T>();

            bindingList.ForEach(item => sortList.Add(item));//Extension method for this call
            if (p_Comparison == null)
            {
                sortList.Sort(p_Comparer);
            }//if
            else
            {
                sortList.Sort(p_Comparison);
            }//else

            //Disable notifications, rebuild, and re-enable notifications
            bool oldRaise = bindingList.RaiseListChangedEvents;

            bindingList.RaiseListChangedEvents = false;
            try
            {
                bindingList.Clear();
                sortList.ForEach(item => bindingList.Add(item));
            }
            finally
            {
                bindingList.RaiseListChangedEvents = oldRaise;
                bindingList.ResetBindings();
            }
        }
Ejemplo n.º 3
0
        public static BindingListWithEvents <T> WithEvents <T>(this BindingList <T> source, Func <T, int, Action <T, int> > handler)
        {
            var e = source.WithEvents();
            var c = new List <Action <T, int> >();

            Action <T, int> Added =
                (value, index) =>
            {
                c.Add(handler(value, index));
            };

            e.Added += Added;

            e.Removed +=
                (value, index) =>
            {
                var h = c[index];
                c.RemoveAt(index);
                h(value, index);
            };

            source.ForEach(Added);

            return(e);
        }
Ejemplo n.º 4
0
        public static BindingList <T> ForEachNewOrExistingItem <T>(this BindingList <T> source, Action <T, int> handler)
        {
            source.ForEach(handler);

            source.ListChanged +=
                (sender0, args0) =>
            {
                if (args0.ListChangedType == ListChangedType.ItemAdded)
                {
                    handler(source[args0.NewIndex], args0.NewIndex);
                }
            };

            return(source);
        }
Ejemplo n.º 5
0
        public virtual void UpdateStyle()
        {
            // This will get called again once this element gets added to the root.
            if (Root == null)
            {
                return;
            }

            if (
                Foreground.r == SGUIRoot.Main.Foreground.r &&
                Foreground.g == SGUIRoot.Main.Foreground.g &&
                Foreground.b == SGUIRoot.Main.Foreground.b
                )
            {
                Color color = SGUIRoot.Main.Foreground;
                color.a    = Foreground.a;
                Foreground = color;
            }
            if (
                Background.r == SGUIRoot.Main.Background.r &&
                Background.g == SGUIRoot.Main.Background.g &&
                Background.b == SGUIRoot.Main.Background.b
                )
            {
                Color color = SGUIRoot.Main.Background;
                color.a    = Background.a;
                Background = color;
            }

            Modifiers.ForEach(_ModifierUpdateStyle);
            if (OnUpdateStyle != null)
            {
                OnUpdateStyle(this);
            }
            UpdateChildrenStyles();
        }
Ejemplo n.º 6
0
        public static void AttachTo <T, F>(this BindingList <T> a, Func <T, BindingList <F> > selector, IAddChild c)
            where F : ISupportsContainer
        {
            var ea    = a.WithEvents();
            var cache = new List <BindingListWithEvents <F> >();

            Action <T, int> Added =
                (n, i) =>
            {
                var x = selector(n).WithEvents();

                x.Added +=
                    (k, j) =>
                {
                    k.AttachContainerTo(c);
                };

                x.Removed +=
                    (k, j) =>
                {
                    (k).OrphanizeContainer();
                };

                x.Source.ForEach(k => (k).AttachContainerTo(c));

                cache.Add(x);
            };

            ea.Added += Added;

            ea.Removed +=
                (n, i) =>
            {
                var x = cache[i];

                x.Source.ForEach(k => (k).OrphanizeContainer());

                cache.RemoveAt(i);

                x.Dispose();
            };

            a.ForEach(Added);
        }
Ejemplo n.º 7
0
        public UcDonHang(Define.LoaiDonHangEnum loaiDonHang, DonHang data = null)
        {
            InitializeComponent();

            DonHang_KhachHangId.DisplayMember = "Ten";
            DonHang_KhachHangId.ValueMember   = "Id";
            var lstKhachHang = new List <KhachHang>();

            if (loaiDonHang == Define.LoaiDonHangEnum.XuatKho)
            {
                lstKhachHang        = CRUD.DbContext.KhachHangs.Where(s => s.LoaiKhachHang != Define.LoaiKhachHangEnum.NhaCungCap.ToString()).ToList();
                lblKhachHangId.Text = "Khách Hàng";
            }
            else
            {
                lstKhachHang = CRUD.DbContext.KhachHangs.Where(s => s.LoaiKhachHang == Define.LoaiKhachHangEnum.NhaCungCap.ToString()).ToList();
            }
            DonHang_KhachHangId.DataSource = new BindingSource((lstKhachHang), null);

            DonHang_LoaiTienTe.DisplayMember = "Value";
            DonHang_LoaiTienTe.ValueMember   = "Key";
            DonHang_LoaiTienTe.DataSource    = new BindingSource(Define.LoaiTienTeDict, null);

            _loaiDonHang = loaiDonHang;
            _domainData  = data;
            if (_domainData == null)
            {
                _domainData             = new DonHang();
                _domainData.NgayLap     = TimeHelper.CurentDateTime();
                _domainData.LoaiDonHang = loaiDonHang.ToString();
                _domainData.TrangThai   = Define.TrangThaiDonHang.Moi.ToString();
                _domainData.LoaiTienTe  = Define.LoaiTienTeEnum.VND.ToString();
                _domainData.TyGia       = 1;

                btnDelete.Visible = false;
                btnIn.Visible     = false;
                GenerateMaDH();
            }
            else
            {
                _chiTietDonhang = new BindingList <ChiTietDonHang>(_domainData.ChiTietDonHangs.ToList());
                if (_domainData.KhachHangId == Define.KhachLeId)
                {
                    var khachLe = lstKhachHang.FirstOrDefault(s => s.Id == Define.KhachLeId);
                    if (khachLe != null)
                    {
                        khachLe.Ten = _domainData.Ten;
                    }
                }
                btnDelete.Visible = true;

                _chiTietDonhang.ForEach(s => s.ListChiTietHangHoa = s.ChiTietHangHoas.ToList());

                if (_domainData.TrangThai == Define.TrangThaiDonHang.ThanhToan.ToString())
                {
                    btnSave.Enabled        = false;
                    btnDelete.Visible      = false;
                    _domainData.ThanhToan += _domainData.CongNoes.Where(l => l.IsActived).Sum(l => l.ThanhToan);
                }
            }

            Init(_domainData);

            // Get list hang hoa
            var dataSource = CRUD.DbContext.KhoHangs
                             .Where(s => s.IsActived &&
                                    (loaiDonHang == Define.LoaiDonHangEnum.NhapKho || s.SoLuong > 0))
                             .Select(s => new { s.TenHang, s.Id })
                             .Union(CRUD.DbContext.ChiTietDonHangs
                                    .Where(s => _domainData.Id == s.DonHangId)
                                    .Join(CRUD.DbContext.KhoHangs, ctdh => ctdh.HangHoaId, kh => kh.Id,
                                          (ctdh, kh) => new { kh.TenHang, kh.Id })).ToList();

            FormBehavior.DecoreateLookEdit(listHangHoa, dataSource, "TenHang");
            listHangHoa.EditValueChanged += listHangHoa_EditValueChanged;

            gridControlChiTiet.DataSource      = _chiTietDonhang;
            gridViewChiTiet.ActiveFilterString = string.Format("[IsActived] = '{0}'", true);

            CheckDonHangUSD();

            btnDeleteRow.ButtonClick += btnDeleteRow_ButtonClick;

            UpdateTongTien();
            UpdateNo();
        }
Ejemplo n.º 8
0
        public FreeCellGame()
        {
            Width = DefaultWidth;
            Height = DefaultHeight;


            var Margin = (DefaultWidth - CardInfo.Width * 8) / 9;

            var GameOverBox = new TextBox
            {
                Width = DefaultWidth,
                TextAlignment = System.Windows.TextAlignment.Center,
                Foreground = Brushes.White,
                Background = Brushes.Transparent,
                BorderThickness = new Thickness(0),
                IsReadOnly = true,
                FontSize = 24,
            }.MoveTo(0, DefaultHeight / 2).AttachTo(this);

            GameOver += delegate
            {
                GameOverBox.Text = "Congratulations! You Won!";
            };

            #region king
            var KingCanvas = new Canvas
            {
                Width = 96,
                Height = 96
            }.AttachTo(this).MoveTo(
                (DefaultWidth - 32) / 2,
                Margin * 2 + (CardInfo.Height - 32) / 2
            );

            var KingRight = new kingbitm().AttachTo(KingCanvas);

            var KingLeft = new kingleft().AttachTo(KingCanvas);

            var KingSmile = new kingsmil().AttachTo(KingCanvas);

            KingSmile.Hide();

            #endregion

            this.MyDeck.Overlay.MouseMove +=
                (sender, args) =>
                {
                    var p = args.GetPosition(this.MyDeck.Overlay);

                    if (p.X < DefaultWidth / 2)
                    {
                        KingLeft.Show();
                        KingRight.Hide();
                    }
                    else
                    {
                        KingLeft.Hide();
                        KingRight.Show();
                    }
                };

            this.MyStatus = new StatusControl().AttachContainerTo(this).MoveContainerTo(
                (DefaultWidth - StatusControl.Width) / 2,
                (DefaultHeight - StatusControl.Height)
            );



            //this.MyStatus.Container.Hide();

            // add autoscroll ?
            this.MyDeck.SizeTo(DefaultWidth, DefaultHeight);
            this.MyDeck.AttachContainerTo(this);
            this.MyDeck.GetRank = e => (int)RankMapping[e];

            System.Console.WriteLine("--- freecell ---");

            System.Console.WriteLine("adding card infos... ");

            MyDeck.UnusedCards.AddRange(CardInfo.FullDeck());

            this.MyStatus.CardsLeft = MyDeck.UnusedCards.Count;
            this.MyStatus.Score = -1;
            this.MyStatus.Update();

            System.Console.WriteLine("creating stacklists... ");

            PlayStacks = MyDeck.CreateStackList();
            PlayStacks.ForEachNewItem(
                k =>
                {
                    k.CardMargin = new Vector { Y = 20 };
                    k.Update();
                }
            );

            TempStacks = MyDeck.CreateStackList();

            Func<bool> Rule_WinConditionMet =
                delegate
                {
                    if (PlayStacks.All(s => s.Cards.Count > 0))
                        return false;

                    if (TempStacks.All(s => s.Cards.Count == 0))
                        return false;

                    return true;
                };

            Action MyStatus_UpdateCardsLeft =
                delegate
                {

                    MyStatus.CardsLeft = 0;

                    PlayStacks.ForEach(q => MyStatus.CardsLeft += q.Cards.Count);
                    TempStacks.ForEach(q => MyStatus.CardsLeft += q.Cards.Count);
                };

            GoalStacks = MyDeck.CreateStackList();
            GoalStacks.ForEachNewItem(
                k =>
                {

                    k.CardMargin.Y = 0;

                    k.Cards.ForEachNewItem(
                        card =>
                        {
                            Console.WriteLine("GoalStacks ForEachNewItem " + new { k.CardMargin.Y });

                            if (card.Info.Rank == CardInfo.RankEnum.RankKing)
                            {
                                KingSmile.Show();

                                card.VisibleSide = Card.SideEnum.BackSide;


                                if (Rule_WinConditionMet())
                                {
                                    // winner!
                                    MyDeck.Sounds.win();

                                    if (this.GameOver != null)
                                        this.GameOver();
                                }
                                else
                                {
                                    600.AtDelay(KingSmile.Hide);
                                }
                            }


                            MyStatus_UpdateCardsLeft();
                            MyStatus.Update();
                        }
                    );
                }
            );

            Func<Card, Card, bool> RuleForStackingCardsInGoalStack =
                (Previous, Current) =>
                {
                    if (Cheat)
                        return true;

                    if (Previous == null)
                        return Current.Info.Rank == CardInfo.RankEnum.RankAce;

                    if (Previous.Info.Suit != Current.Info.Suit)
                        return false;

                    if (Previous.Rank != Current.Rank + 1)
                        return false;

                    return true;
                };

            Func<Card, Card, bool> RuleForStackingCardsInPlayStack =
                (Previous, Current) =>
                {
                    if (Cheat)
                        return true;

                    if (Previous.Info.SuitColor == Current.Info.SuitColor)
                        return false;

                    if (Previous.Rank + 1 != Current.Rank)
                        return false;

                    return true;
                };


            #region rules
            MyDeck.ApplyCardRules += delegate(Card card)
            {

                #region MovedByLocalPlayer
                card.MovedByLocalPlayer +=
                    delegate
                    {
                        var FrozenTokens = new
                        {
                            card.CurrentStack,
                            card.PreviousStack
                        };

                        Console.WriteLine(new { HistoryMove = card, StackedCards = card.StackedCards.Length, Previous = card.PreviousStack, Current = card.CurrentStack }.ToString());

                        History.History.Add(
                            delegate
                            {


                                // we already are at the state we want to be
                                if (card.CurrentStack == FrozenTokens.PreviousStack)
                                    return;

                                card.VisibleSide = Card.SideEnum.TopSide;
                                card.AnimatedMoveToStack(FrozenTokens.PreviousStack, null);


                                this.MyDeck.Sounds.deal();

                                MyStatus.Moves--;
                                MyStatus_UpdateCardsLeft();
                                MyStatus.Update();
                            },
                            delegate
                            {
                                MyStatus.Moves++;
                                MyStatus.Update();

                                // we already are at the state we want to be
                                if (card.CurrentStack == FrozenTokens.CurrentStack)
                                    return;



                                card.AnimatedMoveToStack(FrozenTokens.CurrentStack, null);
                                this.MyDeck.Sounds.deal();



                            }
                        );
                    };
                #endregion


                card.VisibleSide = Card.SideEnum.TopSide;

                card.ValidateDragStart =
                    delegate
                    {
                        if (Cheat)
                            return true;

                        // cannot remove cards from goal stack
                        if (GoalStacks.Contains(card))
                            return false;

                        // cannot drag a pile of cards unless alternate colors and descending numbers
                        return card.SelectedCards.AllWithPrevious(RuleForStackingCardsInPlayStack);
                    };

                card.ValidateDragStop =
                    CandidateStack =>
                    {
                        if (Cheat)
                            return true;

                        if (TempStacks.Contains(CandidateStack))
                        {
                            // temp only holds one card
                            if (CandidateStack.Cards.Count > 0)
                                return false;

                            // and only one card can be inserted
                            if (card.StackedCards.Length > 0)
                                return false;

                            return true;
                        }

                        if (PlayStacks.Contains(CandidateStack))
                        {
                            if (CandidateStack.Cards.Count == 0)
                                return true;


                            return (RuleForStackingCardsInPlayStack(CandidateStack.Cards.Last(), card));
                        }

                        if (GoalStacks.Contains(CandidateStack))
                        {
                            if (CandidateStack.Cards.Count == 0)
                            {

                                return (RuleForStackingCardsInGoalStack(null, card));
                            }

                            return (RuleForStackingCardsInGoalStack(CandidateStack.Cards.Last(), card));

                        }

                        return false;
                    };
            };
            #endregion


            System.Console.WriteLine("creating goalstack... ");


            GoalStacks.AddRange(
                Enumerable.Range(0, 4).ToArray(
                    i =>
                        new CardStack
                        {
                            Name = "GoalStack " + i
                        }.MoveTo(
                            DefaultWidth - Margin / 2 - ((CardInfo.Width + Margin / 2) * 4) + i * (CardInfo.Width + Margin / 2),
                            Margin * 2
                        )
                )
            );

            System.Console.WriteLine("creating tempstack... ");


            TempStacks.AddRange(
                Enumerable.Range(0, 4).ToArray(
                    i => new CardStack
                    {
                        Name = "TempStack " + i
                    }.MoveTo(
                        Margin + i * (CardInfo.Width + Margin / 2),
                        Margin * 2
                    )
                )
            );

            System.Console.WriteLine("creating playstack... ");

            PlayStacks.AddRange(
                Enumerable.Range(0, 8).ToArray(
                    i => new CardStack
                    {
                        Name = "PlayStack " + i
                    }.MoveTo(
                        Margin + (i) * (CardInfo.Width + Margin),
                        Margin * 4 + CardInfo.Height
                    ).Apply(
                        s =>
                        {
                            var Count = 6;

                            if (i < 4)
                                Count = 7;

                            s.Cards.AddRange(MyDeck.FetchCards(Count));
                        }
                    )
                )
            );

        }
Ejemplo n.º 9
0
        public SpiderGame(CardInfo.SuitEnum[] level)
        {
            Width = DefaultWidth;
            Height = DefaultHeight;

            //this.ClipTo(0, 0, DefaultWidth, DefaultHeight);

            var GameOverBox = new TextBox
            {
                Width = DefaultWidth,
                TextAlignment = System.Windows.TextAlignment.Center,
                Foreground = Brushes.White,
                Background = Brushes.Transparent,
                BorderThickness = new Thickness(0),
                IsReadOnly = true,
                FontSize = 24,
            }.MoveTo(0, DefaultHeight / 2).AttachTo(this);

            GameOver += delegate
            {
                GameOverBox.Text = "Congratulations! You Won!";
            };


            // add autoscroll ?
            this.MyDeck.SizeTo(DefaultWidth, DefaultHeight);
            this.MyDeck.AttachContainerTo(this);
            this.MyDeck.GetRank = e => (int)RankMapping[e];
            this.MyDeck.CardCustomBackgroundSource = new Abstractatech.Avalon.Cards.Avalon.Images.spider().Source;


            //this.MyDeck.Overlay.Opacity = 0.6;

            MyStatus = new StatusControl().AttachContainerTo(this).MoveContainerTo(
                (DefaultWidth - StatusControl.Width) / 2,
                (DefaultHeight - StatusControl.Height)
            );
            MyStatus.Container.Hide();

            System.Console.WriteLine("--- spider ---");






            System.Console.WriteLine("adding card infos... ");

            MyDeck.UnusedCards.AddRange(CardInfo.By(2, level));




            System.Console.WriteLine("creating stacklists... ");

            DealStacks = MyDeck.CreateStackList();
            PlayStacks = MyDeck.CreateStackList();
            DeadStacks = MyDeck.CreateStackList();

            PlayStacks.ListChanged +=
                (sender, args) =>
                {
                    if (args.ListChangedType == ListChangedType.ItemAdded)
                    {
                        var s = PlayStacks[args.NewIndex];


                    }

                };



            DeadStacks.ListChanged +=
                (sender, args) =>
                {
                    if (args.ListChangedType == ListChangedType.ItemAdded)
                    {
                        var s = DeadStacks[args.NewIndex];

                        //s.Control.Hide();

                        s.CardMargin = new Vector { X = 2, Y = 0 };

                        s.Cards.ListChanged +=
                            (sender2, args2) =>
                            {
                                if (args2.ListChangedType == ListChangedType.ItemAdded)
                                {
                                    //s[args2.NewIndex].Enabled = false;
                                }

                            };

                    }
                };


            #region drag rules
            MyDeck.ApplyCardRules += delegate(Card c)
            {
                c.Moved +=
                     delegate
                     {
                         if (c.StackedCards.Length == 0)
                         {
                             CheckForGoodSuit(c.CurrentStack);

                             MyStatus.Moves++;
                             MyStatus.Score--;

                             MyStatus.Update();
                         }

                         CheckForWin();
                     };

                c.ValidateDragStart +=
                    delegate
                    {
                        if (Cheat)
                            return true;

                        return c.SelectedCards.AllWithPrevious(
                            (Previous, Current) =>
                            {
                                if (Previous.Info.Suit != Current.Info.Suit)
                                    return false;

                                return Previous.Rank + 1 == Current.Rank;
                            }
                        );
                    };

                c.ValidateDragStop +=
                    CandidateStack =>
                    {
                        if (Cheat)
                            return true;


                        if (PlayStacks.Contains(CandidateStack))
                        {
                            if (CandidateStack.Cards.Count == 0)
                                return true;

                            var Candidate = CandidateStack.Last();

                            // we do not care about the suit

                            if (c.Rank == Candidate.Rank + 1)
                                //if (c.Info.Suit == Candidate.Info.Suit)
                                return true;

                            return false;
                        }

                        return false;
                    };
            };

            #endregion

            System.Console.WriteLine("creating playstack... ");

            var Margin = (DefaultWidth - CardInfo.Width * 10) / 11;


            PlayStacks.AddRange(
                Enumerable.Range(0, 10).ToArray(
                i =>
                    new CardStack
                    {
                        Name = "PlayStack " + i,
                        CardMargin = new Vector { Y = 20 }
                    }.MoveTo(
                        Margin + i * (CardInfo.Width + Margin),
                        Margin + 40
                    ).Apply(
                        s =>
                        {
                            if (i < 4)
                                s.Cards.AddRange(MyDeck.FetchCards(5));
                            else
                                s.Cards.AddRange(MyDeck.FetchCards(4));

                            if (Cheat)
                                s.Cards.ForEach(k => k.VisibleSide = Card.SideEnum.TopSide);

                        }
                    )
                )
            );


            PlayStacks.ForEach(
                delegate(CardStack s)
                {

                    s.Cards.ListChanged +=
                        (sender, args) =>
                        {
                            if (args.ListChangedType == ListChangedType.ItemDeleted)
                                //if (MyStatus.Ready)
                                s.RevealLastCard();
                        };

                }
            );


            DealStacks.ListChanged +=
                (sender, args) =>
                {
                    if (args.ListChangedType == ListChangedType.ItemAdded)
                    {
                        var s = DealStacks[args.NewIndex];

                        s.CardMargin = new Vector { Y = 0, X = 0 };
                        s.Update();

                        s.Click +=
                            delegate
                            {
                                if (DealStacks.Contains(s))
                                {
                                    //if (MyStatus.Ready)
                                    DealRow(null);
                                }
                                else
                                {
                                    System.Console.WriteLine("whoops wrong stack click - " + args.NewIndex);

                                }
                            };
                    }
                };


            System.Console.WriteLine("creating dealstack... ");

            var dealpoint = new Point
            {
                X = DefaultWidth - CardInfo.Width - Margin,
                Y = DefaultHeight - CardInfo.Height - Margin - 17 - Margin
            };


            while (MyDeck.UnusedCards.Count > 0)
            {
                var s = new CardStack { MyDeck.FetchCards(10) };
                //s.Overlay.Opacity = 1;
                s.Name = "DealStack";

                DealStacks.Add(
                    s.MoveTo(Convert.ToInt32(dealpoint.X), Convert.ToInt32(dealpoint.Y))
                );

                dealpoint.X -= 10;
            }

            // we will collect cards here
            DeadStacks.Add(new CardStack().MoveTo(Margin, Convert.ToInt32(dealpoint.Y)));



            DealRow(
                delegate
                {

                    MyStatus.Score = 500;
                    MyStatus.Moves = 0;
                    MyStatus.Update();
                    MyStatus.Container.Show();
                }
            );



        }
Ejemplo n.º 10
0
        public SolitaireGame()
        {
            Width = DefaultWidth;
            Height = DefaultHeight;

            System.Console.WriteLine("--- solitare ---");

            this.MyStatus = new StatusControl().AttachContainerTo(this).MoveContainerTo(
                (DefaultWidth - StatusControl.Width) / 2,
                (DefaultHeight - StatusControl.Height)
            );


            var GameOverBox = new TextBox
            {
                Width = DefaultWidth,
                TextAlignment = System.Windows.TextAlignment.Center,
                Foreground = Brushes.White,
                Background = Brushes.Transparent,
                BorderThickness = new Thickness(0),
                IsReadOnly = true,
                FontSize = 24,
            }.MoveTo(0, DefaultHeight / 2).AttachTo(this);


            // add autoscroll ?
            this.MyDeck.SizeTo(DefaultWidth, DefaultHeight);
            this.MyDeck.AttachContainerTo(this);
            this.MyDeck.GetRank = e => (int)RankMapping[e];


            System.Console.WriteLine("adding card infos... ");

            MyDeck.UnusedCards.AddRange(CardInfo.FullDeck());

            this.MyStatus.Score = -1;
            this.MyStatus.CardsLeft = this.MyDeck.UnusedCards.Count;
            this.MyStatus.Update();


            MyDeck.Stacks.ListChanged +=
                (sender, args) =>
                {
                    if (args.ListChangedType == ListChangedType.ItemAdded)
                    {
                        // fixme: dynamically set backside for this card

                        //var s = MyDeck.Stacks[args.NewIndex];
                        //s.SetBackground(MyDeck.GfxPath + "/spider.empty.png");
                    }
                };


            System.Console.WriteLine("creating stacklists... ");

            PlayStacks = MyDeck.CreateStackList();
            TempStacks = MyDeck.CreateStackList();
            GoalStacks = MyDeck.CreateStackList();

            PlayStacks.ForEachNewItem(
                delegate(CardStack s)
                {
                    s.CardMargin = new Vector { Y = 20 };
                    s.Update();

                    s.Cards.ListChanged +=
                        (sender, args) =>
                        {
                            if (args.ListChangedType == ListChangedType.ItemDeleted)
                                s.RevealLastCard();
                        };

                }
            );



            GameOver += delegate
            {
                GameOverBox.Text = "Congratulations! You Won!";
            };


            System.Console.WriteLine("creating goalstack... ");

            var Margin = (DefaultWidth - CardInfo.Width * 7) / 8;

            var ReserveStack = new CardStack().MoveTo(Margin, Margin);
            var UsedChoiceStack = new CardStack().MoveTo(Margin + CardInfo.Width + Margin, Margin);
            var ChoiceStack = new CardStack().MoveTo(Margin + CardInfo.Width + Margin, Margin);


            TempStacks.AddRange(
                ReserveStack,
                UsedChoiceStack,
                ChoiceStack
            );


            ReserveStack.CardMargin.X = 0;
            ReserveStack.CardMargin.Y = 0;

            UsedChoiceStack.CardMargin.X = 0;
            UsedChoiceStack.CardMargin.Y = 0;

            ChoiceStack.CardMargin.X = 20;
            ChoiceStack.CardMargin.Y = 0;



            #region rules
            Func<bool> Rule_WinConditionMet =
                delegate
                {
                    if (PlayStacks.All(s => s.Cards.Count > 0))
                        return false;

                    if (TempStacks.All(s => s.Cards.Count == 0))
                        return false;

                    return true;
                };

            Func<Card, Card, bool> RuleForStackingCardsInGoalStack =
                (Previous, Current) =>
                {
                    if (Cheat)
                        return true;

                    if (Previous == null)
                        return Current.Info.Rank == CardInfo.RankEnum.RankAce;

                    if (Previous.Info.Suit != Current.Info.Suit)
                        return false;

                    if (Previous.Rank != Current.Rank + 1)
                        return false;

                    return true;
                };

            Func<Card, Card, bool> RuleForStackingCardsInPlayStack =
                (Previous, Current) =>
                {
                    if (Cheat)
                        return true;

                    if (Previous.Info.SuitColor == Current.Info.SuitColor)
                        return false;

                    if (Previous.Rank + 1 != Current.Rank)
                        return false;

                    return true;
                };

            #endregion

            MyDeck.ApplyCardRules += delegate(Card card)
            {
                card.MovedByLocalPlayer +=
                    delegate
                    {
                        MyStatus.Moves++;
                        MyStatus.Update();

                    };

                card.ValidateDragStart =
                    delegate
                    {
                        if (Cheat)
                            return true;

                        // cannot remove cards from goal stack
                        if (GoalStacks.Contains(card))
                            return false;

                        if (TempStacks.Contains(card))
                        {
                            return (card == ChoiceStack.LastOrDefault());
                        }

                        // cannot drag a pile of cards unless alternate colors and descending numbers
                        return card.SelectedCards.AllWithPrevious(RuleForStackingCardsInPlayStack);
                    };


                card.ValidateDragStop =
                    CandidateStack =>
                    {
                        if (Cheat)
                            return true;

                        if (TempStacks.Contains(CandidateStack))
                        {
                            return false;
                        }

                        if (PlayStacks.Contains(CandidateStack))
                        {
                            if (CandidateStack.Cards.Count == 0)
                                return card.Info.Rank == CardInfo.RankEnum.RankKing;


                            return (RuleForStackingCardsInPlayStack(CandidateStack.Cards.Last(), card));
                        }

                        if (GoalStacks.Contains(CandidateStack))
                        {
                            if (card.StackedCards.Length > 0)
                                return false;

                            return (RuleForStackingCardsInGoalStack(CandidateStack.Cards.LastOrDefault(), card));

                        }

                        return false;
                    };
            };



            GoalStacks.ForEachNewItem(
                s =>
                {
                    s.CardMargin.X = 0;
                    s.CardMargin.Y = 0;

                    s.Cards.ForEachNewItem(
                        card =>
                        {
                            this.MyStatus.CardsLeft--;
                            this.MyStatus.Update();

                            if (card.Info.Rank == CardInfo.RankEnum.RankKing)
                            {

                                card.VisibleSide = Card.SideEnum.BackSide;


                                if (Rule_WinConditionMet())
                                {
                                    // winner!
                                    MyDeck.Sounds.win();

                                    if (this.GameOver != null)
                                        this.GameOver();
                                }
                            }
                        }
                    );
                }
            );
            GoalStacks.AddRange(
                Enumerable.Range(0, 4).ToArray(
                    i => new CardStack().MoveTo(DefaultWidth - ((CardInfo.Width + Margin) * 4) + i * (CardInfo.Width + Margin), Margin)
                )
            );

            System.Console.WriteLine("creating playstack... ");

            PlayStacks.AddRange(
                Enumerable.Range(0, 7).ToArray(
                    i => new CardStack().MoveTo(Margin + i * (CardInfo.Width + Margin), Margin * 3 + CardInfo.Height).Apply(s => s.Cards.AddRange(MyDeck.FetchCards(i + 1)))
                )
            );

            ReserveStack.Cards.AddRange(MyDeck.FetchCards(MyDeck.UnusedCards.Count));
            ReserveStack.Update();

            PlayStacks.ForEach(k => k.Last().VisibleSide = Card.SideEnum.TopSide);


            UsedChoiceStack.Cards.ForEachNewItem(
                card => card.VisibleSide = Card.SideEnum.BackSide
            );

            ChoiceStack.Cards.ForEachNewItem(
                card => card.VisibleSide = Card.SideEnum.TopSide
            );

            ChoiceStack.Click +=
                delegate
                {
                    ChoiceStack.Update();
                }
            ;

            ReserveStack.Overlay.Cursor = Cursors.Hand;
            ReserveStack.Cards.ForEachNewItem(
                card => card.VisibleSide = Card.SideEnum.BackSide
            );





            var ReserveStackEnabled = true;

            ReserveStack.Click +=
                delegate
                {
                    if (!ReserveStackEnabled)
                        return;

                    if (ReserveStack.Cards.Count == 0)
                    {
                        MyDeck.Sounds.deal();

                        ChoiceStack.FirstOrDefault().Apply(
                            card =>
                            {

                                card.AnimatedMoveToStack(ReserveStack, null, null);
                            }
                        );

                        UsedChoiceStack.FirstOrDefault().Apply(
                            card =>
                            {

                                card.AnimatedMoveToStack(ReserveStack, null, null);
                            }
                        );
                    }
                    else
                    {
                        ReserveStackEnabled = false;


                        ChoiceStack.Cards.ToArray().ForEach(
                            card =>
                            {
                                card.AttachToStack(UsedChoiceStack);
                            }
                        );
                        UsedChoiceStack.Update();

                        3.Times(
                            SignalNext =>
                                ReserveStack.LastOrDefault().Apply(
                                    card =>
                                    {
                                        card.BringToFront();

                                        Console.WriteLine(card.ToString());

                                        card.AnimatedMoveToStack(ChoiceStack, null, null);

                                        MyDeck.Sounds.deal();

                                        200.AtDelay(SignalNext);
                                    }
                                )
                        );

                    }


                    // a timepoint when movements are done.. this should ba an event actually
                    2000.AtDelay(() => ReserveStackEnabled = true);

                };
        }
Ejemplo n.º 11
0
        public UcDonHang(Define.LoaiDonHangEnum loaiDonHang, DonHang data = null)
        {
            InitializeComponent();

            DonHang_KhachHangId.DisplayMember = "Ten";
            DonHang_KhachHangId.ValueMember   = "Id";
            var lstKhachHang = new List <KhachHang>();

            if (loaiDonHang == Define.LoaiDonHangEnum.XuatKho)
            {
                lstKhachHang        = CRUD.DbContext.KhachHangs.Where(s => s.LoaiKhachHang != Define.LoaiKhachHangEnum.NhaCungCap.ToString()).ToList();
                lblKhachHangId.Text = "Khách Hàng";
            }
            else
            {
                lstKhachHang = CRUD.DbContext.KhachHangs.Where(s => s.LoaiKhachHang == Define.LoaiKhachHangEnum.NhaCungCap.ToString()).ToList();
            }
            DonHang_KhachHangId.DataSource = new BindingSource((lstKhachHang), null);
            _loaiDonHang = loaiDonHang;
            _domainData  = data;
            if (_domainData == null)
            {
                _domainData = new DonHang();
            }

            Init(_domainData);
            if (_domainData.Id > 0)
            {
                _chiTietDonhang = new BindingList <ChiTietDonHang>(_domainData.ChiTietDonHangs.ToList());
                if (_domainData.KhachHangId == Define.KhachLeId)
                {
                    var khachLe = lstKhachHang.FirstOrDefault(s => s.Id == Define.KhachLeId);
                    if (khachLe != null)
                    {
                        khachLe.Ten = _domainData.Ten;
                    }
                }
                btnDelete.Visible = true;

                _chiTietDonhang.ForEach(s => s.ListChiTietHangHoa = s.ChiTietHangHoas.ToList());
            }
            else
            {
                btnDelete.Visible   = false;
                _domainData.NgayLap = TimeHelper.CurentDateTime();
            }

            // Get list hang hoa
            var dataSource = CRUD.DbContext.KhoHangs
                             .Where(s => s.IsActived == null || s.IsActived == true)
                             .Select(s => new { s.TenHang, s.Id })
                             .Union(CRUD.DbContext.ChiTietDonHangs.Join(CRUD.DbContext.KhoHangs, ctdh => ctdh.HangHoaId, kh => kh.Id,
                                                                        (ctdh, kh) => new { kh.TenHang, kh.Id })).ToList();

            FormBehavior.DecoreateLookEdit(listHangHoa, dataSource, "TenHang");
            listHangHoa.EditValueChanged += listHangHoa_EditValueChanged;

            gridControlChiTiet.DataSource = _chiTietDonhang;
            btnDeleteRow.ButtonClick     += btnDeleteRow_ButtonClick;

            UpdateTongTien();
            UpdateNo();
        }
Ejemplo n.º 12
0
        public Spider(IHTMLElement spawn)
        //: base(spawn)
        {
            MyStatus.Visible = false;

            System.Console.WriteLine("--- spider ---");

            BackgroundImage.ToDocumentBackground();

            Native.Document.body.style.overflow = IStyle.OverflowEnum.hidden;

            var level = LevelEasy;

            if (Native.Document.location.search == "?hard")
                level = LevelHard;

            if (Native.Document.location.search == "?medium")
                level = LevelMedium;

            var top = CardInfo.Height / 2 + 12;
            var bottom = 500;



            MyStatus.MoveTo(new Point(500, bottom));
            var usesound_cookie = Storage["usesound"];

            MyStatus.Update();
            MyStatus.SoundSettingChanged +=
                delegate
                {
                    MySounds.Enabled = MyStatus.UseSounds;
                    usesound_cookie.BooleanValue = MyStatus.UseSounds;
                };

            MyStatus.UseSounds = usesound_cookie.BooleanValue;

            Native.Window.onresize +=
                delegate
                {
                    MyStatus.MoveTo(new Point(500, BottomY));

                    foreach (CardStack v in DealStacks)
                    {
                        v.MoveTo(new Point(v.Position.X, BottomY));
                    }

                };

            System.Console.WriteLine("adding card infos... ");

            MyDeck.UnusedCards.AddRange(CardInfo.By(2, level));

            MyDeck.RankConverter = RankConverter;

            System.Console.WriteLine("creating stacklists... ");

            DealStacks = MyDeck.CreateStackList();
            PlayStacks = MyDeck.CreateStackList();
            DeadStacks = MyDeck.CreateStackList();

            PlayStacks.ListChanged +=
                (sender, args) =>
                {
                    if (args.ListChangedType == ListChangedType.ItemAdded)
                    {
                        var s = PlayStacks[args.NewIndex];

                        s.SetBackground(MyDeck.GfxPath + "/spider.empty.png");

                    }
                };

            DeadStacks.ListChanged +=
                (sender, args) =>
                {
                    if (args.ListChangedType == ListChangedType.ItemAdded)
                    {
                        var s = DeadStacks[args.NewIndex];

                        s.Control.Hide();

                        s.CardMargin = new Point(2, 0);

                        s.Cards.ListChanged +=
                            (sender2, args2) =>
                            {
                                if (args2.ListChangedType == ListChangedType.ItemAdded)
                                    s[args2.NewIndex].Enabled = false;

                            };

                    }
                };





            #region drag rules
            MyDeck.ApplyCardRules += delegate(Card c)
            {
                c.Info.CustomBackground = "spider";
                c.Update();

                c.Moved +=
                    delegate
                    {
                        if (!this.MyStatus.Ready)
                            return;

                        //AddScore(1);

                        // check for good suit

                        var s = c.CurrentStack;

                        CheckForGoodSuit(s);

                    };

                #region sounds
                c.Drag.DragStop +=
                    delegate
                    {
                        MySounds.PlaySoundDrop();
                    };

                c.Drag.DragStart +=
                    delegate
                    {
                        MySounds.PlaySoundDrag();

                    };
                #endregion

                #region automove
                c.DoubleClick += delegate
                {
                    TryAutoMove(c);
                };

                c.Drag.MiddleClick += delegate
                {
                    TryAutoMove(c);
                };


                #endregion

                // rules for starting a drag
                c.Drag.DragStartValidate +=
                    delegate(Predicate p)
                    {
                        if (!MyStatus.Ready)
                        {
                            p.Value = false;

                            return;
                        }

                        if (CheatNoValidation)
                            return;

                        p.Value = Predicate.Invoke(c, IsDraggableFormPlayStack);


                    };

                // rules for ending a drag
                c.ValidateDragStop +=
                    delegate(Predicate<CardStack> p)
                    {
                        if (CheatNoValidation)
                            return;


                        if (Predicate.Invoke(p.Target, c, IsFitForPlayStack))
                        {
                            return;
                        }

                        p.Target = null;
                    };
            };
            #endregion



            System.Console.WriteLine("creating playstack... ");

            PlayStacks.Add(
                new CardStack(new Point(50, top), MyDeck.FetchCards(5)),
                new CardStack(new Point(150, top), MyDeck.FetchCards(5)),
                new CardStack(new Point(250, top), MyDeck.FetchCards(5)),
                new CardStack(new Point(350, top), MyDeck.FetchCards(5)),
                new CardStack(new Point(450, top), MyDeck.FetchCards(4)),
                new CardStack(new Point(550, top), MyDeck.FetchCards(4)),
                new CardStack(new Point(650, top), MyDeck.FetchCards(4)),
                new CardStack(new Point(750, top), MyDeck.FetchCards(4)),
                new CardStack(new Point(850, top), MyDeck.FetchCards(4)),
                new CardStack(new Point(950, top), MyDeck.FetchCards(4))
                );


            PlayStacks.ForEach(
                (System.Action<CardStack>)
                delegate(CardStack s)
                {
                    s.Cards.ListChanged +=
                        (sender, args) =>
                        {
                            if (args.ListChangedType == ListChangedType.ItemDeleted)
                                if (MyStatus.Ready)
                                    s.RevealLastCard();
                        };


                    s.CardsMovedToStack +=
                        delegate
                        {
                            if (MyStatus.Ready)
                            {
                                MyStatus.Score--;
                                MyStatus.Moves++;

                                MyStatus.Update();
                            }
                        };
                }
            );



            DealStacks.ListChanged +=
                (sender, args) =>
                {
                    if (args.ListChangedType == ListChangedType.ItemAdded)
                    {
                        var s = DealStacks[args.NewIndex];

                        s.CardMargin *= 0;
                        s.Update();

                        s.Click +=
                            delegate
                            {
                                if (DealStacks.Contains(s))
                                {
                                    if (MyStatus.Ready)
                                        DealRow(null);
                                }
                                else
                                {
                                    System.Console.WriteLine("whoops wrong stack click ");

                                }
                            };
                    }
                };

            System.Console.WriteLine("creating dealstack... ");

            var dealpoint = new Point(860, bottom);

            while (MyDeck.UnusedCards.Count > 0)
            {
                DealStacks.Add(
                    new CardStack(dealpoint, MyDeck.FetchCards(10))
                );

                dealpoint -= new Point(10, 0);
            }

            DeadStacks.Add(new CardStack(new Point(150, bottom)));

            if (CheatReveal)
                DoCheatRevealAllCards();


            MyDeck.ToConsole();




            DealRow(
                delegate
                {

                    MyStatus.Ready = true;
                    MyStatus.Score = 500;
                    MyStatus.Moves = 0;
                    MyStatus.Visible = true;
                    MyStatus.Update();
                }
            );
        }
Ejemplo n.º 13
0
 private void mnuChSelectAll_Click(object sender, RoutedEventArgs e)
 {
     mangaChapters.ForEach((ch) => ch.IsChecked = true);
 }
Ejemplo n.º 14
0
        private async Task LoadTorrentQueryModels()
        {
            var result = (await TorrentsQuery.GetTorrentQueryModelsAsync());
            
            Torrents = new BindingList<TorrentQueryModel>(result);

            var totalFileSize = new FileSize();
            
            Torrents.ForEach(it => { totalFileSize += it.FileSize; });

            TotalSize = totalFileSize.RawValue;
        }