Esempio n. 1
0
        public void Init(SRC src, ListBoxArgs args, int max_num)
        {
            SRC             = src;
            Text            = args.lb_caption;
            lblCaption.Text = " " + args.lb_info;
            cmdSort.Text    = "名称順に並べ替え";

            ListBoxItemSource = args.Items.Select(x => new MultiSelectListBoxItem(x)).ToList();
            ListBoxItems      = new BindingList <MultiSelectListBoxItem>(ListBoxItemSource);
            MaxListItem       = max_num;

            _lstItems.DataSource    = ListBoxItems;
            _lstItems.DisplayMember = "Text";
        }
Esempio n. 2
0
        public void Init(SRC src, ListBoxArgs args)
        {
            SRC  = src;
            Text = args.lb_caption;

            _lstItems.DataSource    = args.Items;
            _lstItems.DisplayMember = "TextWithFlag";

            // 先頭に表示するアイテムを設定
            if (SRC.GUI.TopItem > 0)
            {
                if (_lstItems.TopIndex != SRC.GUI.TopItem - 1)
                {
                    _lstItems.TopIndex = GeneralLib.MinLng(SRC.GUI.TopItem, _lstItems.Items.Count) - 1;
                }
            }
        }
Esempio n. 3
0
File: ListBox.cs Progetto: 7474/SRC
        public void ShowItems(frmMain MainForm, ListBoxArgs args)
        {
            ListBoxItems = args.Items;
            HasFlag      = args.HasFlag;
            var list       = args.Items;
            var lb_caption = args.lb_caption;
            var lb_info    = args.lb_info;
            var lb_mode    = args.lb_mode;

            // コメントウィンドウの処理
            if (Strings.InStr(lb_mode, "コメント") > 0)
            {
                if (!txtComment.Enabled)
                {
                    txtComment.Enabled = true;
                    txtComment.Visible = true;
                    txtComment.Width   = labCaption.Width;
                    txtComment.Text    = "";
                    txtComment.Top     = lstItems.Top + lstItems.Height + 5;
                    Height             = Height + 40;
                }
            }
            else if (txtComment.Enabled)
            {
                txtComment.Enabled = false;
                txtComment.Visible = false;
                Height             = Height - 40;
            }

            // キャプション
            Text = lb_caption;
            if (HasFlag)
            {
                labCaption.Text = "  " + lb_info;
            }
            else
            {
                labCaption.Text = lb_info;
            }

            // リストボックスにアイテムを追加
            lstItems.Visible = false;
            lstItems.Items.Clear();
            if (HasFlag)
            {
                var itemTexts = list.Select(x => x.ListItemFlag ? $"×{x.Text}" : $"  {x.Text}");
                foreach (var text in itemTexts)
                {
                    lstItems.Items.Add(text);
                }

                // XXX 後でクリアしてるから意味ないのでは?
                //i = (short)Information.UBound(list);
                //while (i > 0)
                //{
                //    if (!ListItemFlag[i])
                //    {
                //        lstItems.SelectedIndex = i - 1;
                //        break;
                //    }

                //    i = (short)(i - 1);
                //}
            }
            else
            {
                foreach (var text in list.Select(x => x.Text))
                {
                    lstItems.Items.Add(text);
                }
            }

            lstItems.SelectedIndex = -1;
            lstItems.Visible       = true;

            //// コメント付きのアイテム?
            //if (Information.UBound(ListItemComment) != Information.UBound(list))
            //{
            //    Array.Resize(ListItemComment, Information.UBound(list) + 1);
            //}

            // 先頭のアイテムを設定
            if (GUI.TopItem > 0)
            {
                if (lstItems.TopIndex != GUI.TopItem - 1)
                {
                    lstItems.TopIndex = GeneralLib.MaxLng(GeneralLib.MinLng(GUI.TopItem - 1, lstItems.Items.Count - 1), 0);
                }
                lstItems.SelectedIndex = Math.Min(lstItems.Items.Count, GUI.TopItem) - 1;
            }
            else if (lstItems.Items.Count > 0)
            {
                lstItems.SelectedIndex = 0;
            }

            // コメントウィンドウの表示
            if (txtComment.Enabled)
            {
                txtComment.Text = SelectedItem?.ListItemComment;
            }

            // 最小化されている場合は戻しておく
            if (WindowState != FormWindowState.Normal)
            {
                WindowState = FormWindowState.Normal;
                Show();
            }

            // 表示位置を設定
            // メインが表示されているのに画面中央に持っていかれると違和感があるので、
            // メインが表示されているときはそちらを基準にする
            if (MainForm.Visible)
            {
                if (HorizontalSize == "S")
                {
                    Left = MainForm.Left;
                }
                else
                {
                    Left = Math.Max(
                        MainForm.Left,
                        MainForm.Left + (MainForm.Width - Width) / 2);
                }
            }
            else
            {
                Left = (Screen.PrimaryScreen.Bounds.Width - Width) / 2;
            }

            if (MainForm.Visible)
            {
                if (MainForm.WindowState != FormWindowState.Minimized &&
                    VerticalSize == "M" &&
                    Strings.InStr(lb_mode, "中央表示") == 0)
                {
                    Top = MainForm.Top + MainForm.Height - Height;
                }
                else
                {
                    Top = Math.Max(
                        MainForm.Top,
                        MainForm.Top + (MainForm.Height - Height) / 2);
                }
            }
            else
            {
                Top = (Screen.PrimaryScreen.Bounds.Height - Height) / 2;
            }

            // XXX この辺からは親にいたほうがしっくりくる
            Commands.SelectedItem = 0;
            GUI.IsFormClicked     = false;
            Application.DoEvents();

            // リストボックスを表示
            if (Strings.InStr(lb_mode, "表示のみ") > 0)
            {
                // 表示のみを行う
                GUI.IsMordal = false;
                Show();
                lstItems.Focus();
                //SetWindowPos(Handle.ToInt32(), -1, 0, 0, 0, 0, 0x3);
                Refresh();
                //return ListBoxRet;
            }
            else if (Strings.InStr(lb_mode, "連続表示") > 0)
            {
                // 選択が行われてもリストボックスを閉じない
                GUI.IsMordal = false;
                if (!Visible)
                {
                    Show();
                    //SetWindowPos(Handle.ToInt32(), -1, 0, 0, 0, 0, 0x3);
                    lstItems.Focus();
                }

                if (Strings.InStr(lb_mode, "カーソル移動") > 0)
                {
                    if (SRC.AutoMoveCursor)
                    {
                        GUI.MoveCursorPos("ダイアログ");
                    }
                }

                while (!GUI.IsFormClicked)
                {
                    Application.DoEvents();
                    //// 右ボタンでのダブルクリックの実現
                    //if ((GetAsyncKeyState(RButtonID) && 0x8000) == 0)
                    //{
                    //    is_rbutton_released = true;
                    //}
                    //else if (is_rbutton_released)
                    //{
                    //    IsFormClicked = true;
                    //}

                    Thread.Sleep(50);
                }
            }
            else
            {
                // 選択が行われた時点でリストボックスを閉じる
                GUI.IsMordal = false;
                Show();
                //SetWindowPos(Handle.ToInt32(), -1, 0, 0, 0, 0, 0x3);
                lstItems.Focus();
                if (Strings.InStr(lb_mode, "カーソル移動") > 0)
                {
                    if (SRC.AutoMoveCursor)
                    {
                        GUI.MoveCursorPos("ダイアログ");
                    }
                }

                while (!GUI.IsFormClicked)
                {
                    Application.DoEvents();
                    //// 右ボタンでのダブルクリックの実現
                    //if ((GetAsyncKeyState(RButtonID) && 0x8000) == 0)
                    //{
                    //    is_rbutton_released = true;
                    //}
                    //else if (is_rbutton_released)
                    //{
                    //    IsFormClicked = true;
                    //}

                    Thread.Sleep(50);
                }

                Hide();
                if (Strings.InStr(lb_mode, "カーソル移動") > 0 &&
                    Strings.InStr(lb_mode, "カーソル移動(行きのみ)") == 0)
                {
                    if (SRC.AutoMoveCursor)
                    {
                        GUI.RestoreCursorPos();
                    }
                }

                if (txtComment.Enabled)
                {
                    txtComment.Enabled = false;
                    txtComment.Visible = false;
                    Height             = Height - 40;
                }
            }
        }
Esempio n. 4
0
        // スペシャルパワー検索コマンド
        private void SearchSpecialPowerCommand()
        {
            GUI.LockGUI();

            // イベント専用のコマンドを除いた全スペシャルパワーのリストを作成
            var allSpList = SRC.SPDList.Items
                            .Where(x => x.ShortName != "非表示")
                            .OrderBy(x => x.KanaName)
                            .ToList();

            // 個々のスペシャルパワーに対して、そのスペシャルパワーを使用可能なパイロットが
            // いるかどうか判定
            var pilotMap = allSpList.Select(x => new
            {
                spName = x.Name,
                pilots = SRC.PList.Items
                         .Where(p => p.Party == "味方" &&
                                p.Unit != null &&
                                p.Unit.Status == "出撃" &&
                                !p.Unit.IsConditionSatisfied("憑依") &&
                                p.IsSpecialPowerAvailable(x.Name)
                                // 本当に乗っている?
                                && p.Unit.AllPilots.Any(up => up == p))
                         .ToList(),
            }).ToDictionary(x => x.spName, x => x.pilots);

            while (true)
            {
                var list = allSpList.Select(x => new ListBoxItem(x.Name, x.Name)
                {
                    // 選択出来ないスペシャルパワーをマスク
                    ListItemFlag = !pilotMap[x.Name].Any(),
                    // スペシャルパワーの解説を設定
                    ListItemComment = x.Comment,
                }).ToList();
                var listArgs = new ListBoxArgs
                {
                    lb_caption = Expression.Term("スペシャルパワー") + "検索",
                    Items      = list,
                    HasFlag    = true,
                };
                // 検索するスペシャルパワーを選択
                GUI.TopItem = 1;
                var ret = GUI.MultiColumnListBox(listArgs, true);
                if (ret == 0)
                {
                    CancelCommand();
                    GUI.UnlockGUI();
                    return;
                }

                var sel = list[ret - 1].ListItemID;
                SelectedSpecialPower = sel;

                // 選択されたスペシャルパワーを使用できるパイロットの一覧を作成
                var pilots = pilotMap.ContainsKey(sel) ? pilotMap[sel] : new List <Pilot>();
                var list2  = pilots.Select(p =>
                {
                    var msg = GeneralLib.RightPaddedString(p.get_Nickname(false), 19)
                              + GeneralLib.RightPaddedString(SrcFormatter.Format(p.SP) + "/" + SrcFormatter.Format(p.MaxSP), 10);

                    msg += GeneralLib.RightPaddedString(string.Join("", p.SpecialPowerNames
                                                                    .Where(x => p.IsSpecialPowerAvailable(x))
                                                                    .Select(x => SRC.SPDList.Item(x).ShortName)), 12);

                    if (p.SP < p.SpecialPowerCost(SelectedSpecialPower))
                    {
                        msg += " " + Expression.Term("SP", p.Unit) + "不足";
                    }

                    if (p.Unit.Action == 0)
                    {
                        msg += " 行動済";
                    }
                    return(new ListBoxItem(msg, p.ID)
                    {
                        // XXX ここはフラグ立たない?
                    });
                }).ToList();

                SelectedSpecialPower = "";

                // 検索をかけるパイロットの選択
                GUI.TopItem = 1;
                GUI.EnlargeListBoxHeight();
                string caption2;
                string info2;
                if (Expression.IsOptionDefined("等身大基準"))
                {
                    caption2 = "ユニット選択";
                    info2    = "ユニット           " + Expression.Term("SP", null, 2) + "/Max" + Expression.Term("SP", null, 2) + "  " + Expression.Term("スペシャルパワー");
                }
                else
                {
                    caption2 = "パイロット選択";
                    info2    = "パイロット         " + Expression.Term("SP", null, 2) + "/Max" + Expression.Term("SP", null, 2) + "  " + Expression.Term("スペシャルパワー");
                }
                var ret2 = GUI.ListBox(new ListBoxArgs
                {
                    lb_caption = caption2,
                    lb_info    = info2,
                    Items      = list2,
                });

                GUI.ReduceListBoxHeight();

                // パイロットの乗るユニットを画面中央に表示
                if (ret2 > 0)
                {
                    var p = SRC.PList.Item(list2[ret2 - 1].ListItemID);
                    GUI.Center(p.Unit.x, p.Unit.y);
                    GUI.RefreshScreen();
                    Status.DisplayUnitStatus(p.Unit);

                    // カーソル自動移動
                    if (SRC.AutoMoveCursor)
                    {
                        GUI.MoveCursorPos("ユニット選択", p.Unit);
                    }

                    GUI.UnlockGUI();
                    return;
                }
            }
        }