private void toolStrip_Refresh(object sender, EventArgs e)
        {
            DFHackReply<ListUnitsOut> reply;

            using (var client = new DFHackClient())
            {
                client.Open();
                reply = client.ListUnits();
            }

            var dwarves = new ObjectBindingList<Dwarf>(reply.Data.ValueList
                .Where(u => u.Race == GameData.World.RaceId)
                .Select(u => new Dwarf(u)));

            GameData.UpdateLabors(dwarves);
            grid_dwarves.DataSource = dwarves;
            grid_labors.DataSource = new ObjectBindingList<DwarfLabor>(GameData.GetLabors());
            ApplyFilters();
        }
        private void ToolStrip_NewEncounter(object sender, EventArgs e)
        {
            TabPage page;
            DataGridView grid;
            ObjectBindingList<InitiativeTableEntry> entries;
            string name = "";

            // get a name for the new encounter
            if (InputDialog.ShowDialog(this, "New Encounter", "Encounter name?", ref name) != DialogResult.OK)
                return;

            // check the name is a name
            if (string.IsNullOrEmpty(name) || name.Trim().Length < 2)
            {
                MessageBox.Show(this, "Encounter names must be at least 2 characters long", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            // create entry list
            entries = new ObjectBindingList<InitiativeTableEntry>();
            entries.ApplySort(m_sorts);

            // create the grid
            grid = new DataGridView();
            grid.Name = "grid";
            GridHelper.Initialize(grid, true);
            grid.Dock = DockStyle.Fill;
            grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            grid.MultiSelect = false;
            grid.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            GridHelper.AddColumn(grid, "Initiative", "Init");
            GridHelper.AddColumn(grid, "InitiativeBonus", " ");
            GridHelper.AddColumn(grid, new DataGridViewImageColumn(), "Image", " ");
            GridHelper.AddColumn(grid, "Description", "Description");
            GridHelper.AddColumn(grid, "AC", "AC");
            GridHelper.AddColumn(grid, "Fortitude", "Fort");
            GridHelper.AddColumn(grid, "Reflex", "Ref");
            GridHelper.AddColumn(grid, "Will", "Will");
            grid.Columns["Initiative"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grid.Columns["InitiativeBonus"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grid.Columns["InitiativeBonus"].DefaultCellStyle.Format = "(+0)";
            grid.Columns["InitiativeBonus"].DefaultCellStyle.ForeColor = Color.Gray;
            grid.Columns["AC"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grid.Columns["Fortitude"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grid.Columns["Reflex"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grid.Columns["Will"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grid.Columns["Description"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            GridHelper.DisableClickToSort(grid, false);
            grid.CurrentCellChanged += new EventHandler(grid_CurrentCellChanged);
            grid.DataSource = entries;

            // create the tab page
            page = new TabPage(name);
            page.Controls.Add(grid);
            page.Tag = new EncounterStatus();

            // add it to the tab control
            encounter_tabs.TabPages.Add(page);

            // refresh some stuff
            UpdateButtons();
        }