public DialogShipGroupColumnFilter(DataGridView target, ShipGroupData group)
        {
            InitializeComponent();


            var rows = new LinkedList <DataGridViewRow>();
            var row  = new DataGridViewRow();

            row.CreateCells(ColumnView);
            row.SetValues("(全て)", null, null, "-");
            row.Cells[ColumnView_Width.Index].ReadOnly = true;
            rows.AddLast(row);

            foreach (var c in group.ViewColumns.Values.OrderBy(c => c.DisplayIndex))
            {
                row = new DataGridViewRow();
                row.CreateCells(ColumnView);
                row.SetValues(target.Columns[c.Name].HeaderText, c.Visible, c.AutoSize, c.Width);
                row.Cells[ColumnView_Width.Index].ValueType = typeof(int);
                row.Tag = c.Name;
                rows.AddLast(row);
            }

            ColumnView.Rows.AddRange(rows.ToArray());


            ScrLkColumnCount.Minimum = 0;
            ScrLkColumnCount.Maximum = group.ViewColumns.Count;
            ScrLkColumnCount.Value   = group.ScrollLockColumnCount;
        }
Beispiel #2
0
        public DialogShipGroupSortOrder(DataGridView target, ShipGroupData group)
        {
            InitializeComponent();

            var rows_enabled  = new LinkedList <DataGridViewRow>();
            var rows_disabled = new LinkedList <DataGridViewRow>();

            var columns = target.Columns.Cast <DataGridViewColumn>();
            var names   = columns.Select(c => c.Name);

            if (group.SortOrder == null)
            {
                group.SortOrder = new List <KeyValuePair <string, ListSortDirection> >();
            }

            foreach (var sort in group.SortOrder.Where(s => names.Contains(s.Key)))
            {
                var row = new DataGridViewRow();

                row.CreateCells(EnabledView);
                row.SetValues(target.Columns[sort.Key].HeaderText, sort.Value);
                row.Cells[EnabledView_Name.Index].Tag = sort.Key;
                row.Tag = columns.FirstOrDefault(c => c.Name == sort.Key).DisplayIndex;

                rows_enabled.AddLast(row);
            }

            foreach (var name in columns.Where(c => c.SortMode != DataGridViewColumnSortMode.NotSortable && !group.SortOrder.Any(s => c.Name == s.Key))
                     .Select(c => c.Name))
            {
                var row = new DataGridViewRow();

                row.CreateCells(DisabledView);
                row.SetValues(target.Columns[name].HeaderText);
                row.Cells[DisabledView_Name.Index].Tag = name;
                row.Tag = columns.FirstOrDefault(c => c.Name == name).DisplayIndex;

                rows_disabled.AddLast(row);
            }

            EnabledView.Rows.AddRange(rows_enabled.ToArray());
            DisabledView.Rows.AddRange(rows_disabled.ToArray());


            AutoSortFlag.Checked = group.AutoSortEnabled;
        }
        private void FormShipGroup_Load(object sender, EventArgs e)
        {
            ShipGroupManager groups = KCDatabase.Instance.ShipGroup;


            if (!groups.ShipGroups.ContainsKey(-1))
            {
                var master = new ShipGroupData(-1);
                master.Name         = "全所属艦";
                master.ColumnFilter = Enumerable.Repeat <bool>(true, ShipView.Columns.Count).ToList();
                master.ColumnWidth  = ShipView.Columns.OfType <DataGridViewColumn>().Select(c => c.Width).ToList();

                groups.ShipGroups.Add(master);
            }


            foreach (var g in groups.ShipGroups.Values)
            {
                TabPanel.Controls.Add(CreateTabLabel(g.GroupID));
            }


            {
                int columnCount = ShipView.Columns.Count;
                for (int i = 0; i < columnCount; i++)
                {
                    ShipView.Columns[i].Visible = false;
                }
            }


            ConfigurationChanged();


            APIObserver o = APIObserver.Instance;

            o.APIList["api_port/port"].ResponseReceived        += APIUpdated;
            o.APIList["api_get_member/ship2"].ResponseReceived += APIUpdated;


            Utility.Configuration.Instance.ConfigurationChanged += ConfigurationChanged;

            Icon = ResourceManager.ImageToIcon(ResourceManager.Instance.Icons.Images[(int)ResourceManager.IconContent.FormShipGroup]);
        }
        private void MenuMember_AddToGroup_Click(object sender, EventArgs e)
        {
            using (var dialog = new DialogTextSelect("グループの選択", "追加するグループを選択してください:",
                                                     KCDatabase.Instance.ShipGroup.ShipGroups.Values.Where(g => g.GroupID >= 0).ToArray())) {
                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    ShipGroupData group = (ShipGroupData)dialog.SelectedItem;
                    if (group != null && group.GroupID >= 0)
                    {
                        List <int> members = new List <int>(ShipView.Rows.GetRowCount(DataGridViewElementStates.Selected));

                        foreach (DataGridViewRow row in ShipView.SelectedRows.OfType <DataGridViewRow>().OrderBy(r => r.Tag))
                        {
                            members.Add((int)row.Cells[ShipView_ID.Index].Value);
                        }

                        group.Members.AddRange(members);
                        group.CheckMembers();
                    }
                }
            }
        }
        private void MenuMember_ColumnFilter_Click(object sender, EventArgs e)
        {
            ShipGroupData group = SelectedTab != null ? KCDatabase.Instance.ShipGroup[(int)SelectedTab.Tag] : null;

            if (group == null)
            {
                MessageBox.Show("このグループは変更できません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }


            using (var dialog = new DialogShipGroupColumnFilter(ShipView)) {
                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    bool[] checkedList = dialog.CheckedList;

                    group.ColumnFilter = checkedList.ToList();
                    for (int i = 0; i < checkedList.Length; i++)
                    {
                        ShipView.Columns[i].Visible = checkedList[i];
                    }
                }
            }
        }
        private void MenuMember_Delete_Click(object sender, EventArgs e)
        {
            ShipGroupData group = SelectedTab != null ? KCDatabase.Instance.ShipGroup[(int)SelectedTab.Tag] : null;


            if (group == null || group.GroupID < 0)
            {
                MessageBox.Show("このグループは変更できません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }

            List <int> list = new List <int>(ShipView.Rows.GetRowCount(DataGridViewElementStates.Selected));

            foreach (DataGridViewRow row in ShipView.SelectedRows)
            {
                list.Add((int)row.Cells[ShipView_ID.Index].Value);
                ShipView.Rows.Remove(row);
            }

            if (group != null)
            {
                group.Members = group.Members.Except(list).ToList();
            }
        }
        private void MenuMember_CSVOutput_Click(object sender, EventArgs e)
        {
            IEnumerable <ShipData> ships;
            ImageLabel             senderLabel = MenuGroup.SourceControl as ImageLabel;

            if (senderLabel == null)
            {
                ships = KCDatabase.Instance.Ships.Values;
            }
            else
            {
                ShipGroupData group = KCDatabase.Instance.ShipGroup[(int)senderLabel.Tag];
                if (group != null && group.GroupID >= 0)
                {
                    ships = group.MembersInstance;
                }
                else
                {
                    ships = KCDatabase.Instance.Ships.Values;
                }
            }



            using (var dialog = new DialogShipGroupCSVOutput()) {
                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    try {
                        using (StreamWriter sw = new StreamWriter(dialog.OutputPath, false, Utility.Configuration.Config.Log.FileEncoding)) {
                            string[] header = dialog.OutputFormat == DialogShipGroupCSVOutput.OutputFormatConstants.User ? ShipCSVHeaderUser : ShipCSVHeaderData;

                            sw.WriteLine(string.Join(",", header));

                            string arg = string.Format("{{{0}}}", string.Join("},{", Enumerable.Range(0, header.Length)));

                            foreach (ShipData ship in ships)
                            {
                                if (ship == null)
                                {
                                    continue;
                                }


                                if (dialog.OutputFormat == DialogShipGroupCSVOutput.OutputFormatConstants.User)
                                {
                                    sw.WriteLine(arg,
                                                 ship.MasterID,
                                                 ship.MasterShip.ShipTypeName,
                                                 ship.MasterShip.NameWithClass,
                                                 ship.Level,
                                                 ship.ExpTotal,
                                                 ship.ExpNext,
                                                 ship.ExpNextRemodel,
                                                 ship.HPCurrent,
                                                 ship.HPMax,
                                                 ship.Condition,
                                                 ship.Fuel,
                                                 ship.Ammo,
                                                 GetEquipmentString(ship, 0),
                                                 GetEquipmentString(ship, 1),
                                                 GetEquipmentString(ship, 2),
                                                 GetEquipmentString(ship, 3),
                                                 GetEquipmentString(ship, 4),
                                                 DateTimeHelper.ToTimeRemainString(DateTimeHelper.FromAPITimeSpan(ship.RepairTime)),
                                                 ship.FirepowerBase,
                                                 ship.FirepowerRemain,
                                                 ship.TorpedoBase,
                                                 ship.TorpedoRemain,
                                                 ship.AABase,
                                                 ship.AARemain,
                                                 ship.ArmorBase,
                                                 ship.ArmorRemain,
                                                 ship.ASWBase,
                                                 ship.EvasionBase,
                                                 ship.LOSBase,
                                                 ship.LuckBase,
                                                 ship.LuckRemain,
                                                 Constants.GetRange(ship.Range),
                                                 ship.IsLocked ? "❤" : "-",
                                                 ship.SallyArea);
                                }
                                else                                                    //data

                                {
                                    sw.WriteLine(arg,
                                                 ship.MasterID,
                                                 ship.MasterShip.ShipType,
                                                 ship.MasterShip.NameWithClass,
                                                 ship.ShipID,
                                                 ship.Level,
                                                 ship.ExpTotal,
                                                 ship.ExpNext,
                                                 ship.ExpNextRemodel,
                                                 ship.HPCurrent,
                                                 ship.HPMax,
                                                 ship.Condition,
                                                 ship.Fuel,
                                                 ship.Ammo,
                                                 GetEquipmentOnlyString(ship, 0),                                               //undone: IDにしたいけどよく考えたら強化値が反映されない
                                                 GetEquipmentOnlyString(ship, 1),
                                                 GetEquipmentOnlyString(ship, 2),
                                                 GetEquipmentOnlyString(ship, 3),
                                                 GetEquipmentOnlyString(ship, 4),
                                                 ship.Aircraft[0],
                                                 ship.Aircraft[1],
                                                 ship.Aircraft[2],
                                                 ship.Aircraft[3],
                                                 ship.Aircraft[4],
                                                 ship.RepairTime * 10000,
                                                 ship.FirepowerBase,
                                                 ship.FirepowerRemain,
                                                 ship.TorpedoBase,
                                                 ship.TorpedoRemain,
                                                 ship.AABase,
                                                 ship.AARemain,
                                                 ship.ArmorBase,
                                                 ship.ArmorRemain,
                                                 ship.ASWBase,
                                                 ship.EvasionBase,
                                                 ship.LOSBase,
                                                 ship.LuckBase,
                                                 ship.LuckRemain,
                                                 ship.Range,
                                                 ship.IsLocked ? 1 : 0,
                                                 ship.SallyArea
                                                 );
                                }
                            }
                        }
                    } catch (Exception ex) {
                        Utility.ErrorReporter.SendErrorReport(ex, "艦船グループ CSVの出力に失敗しました。");
                        MessageBox.Show("艦船グループ CSVの出力に失敗しました。\r\n" + ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }