From 83ceead92009ae29981b54de7e85d91e68673e11 Mon Sep 17 00:00:00 2001 From: emkael Date: Sat, 30 Sep 2017 15:43:31 +0200 Subject: Loading names into specified sections, detecting sections for Teamy tournaments --- Aktywator/Bws.cs | 37 ++++++++-- Aktywator/MainForm.Designer.cs | 143 ++++++++++++++++++++++++-------------- Aktywator/MainForm.cs | 23 ++++++- Aktywator/MainForm.resx | 153 +++++++++++++++++++++-------------------- 4 files changed, 221 insertions(+), 135 deletions(-) (limited to 'Aktywator') diff --git a/Aktywator/Bws.cs b/Aktywator/Bws.cs index 700969c..05fcb83 100644 --- a/Aktywator/Bws.cs +++ b/Aktywator/Bws.cs @@ -200,7 +200,7 @@ namespace Aktywator return info; } - private int sectorLetterToNumber(string sector) + internal int sectorLetterToNumber(string sector) { return sector.ToUpper()[0] - 'A' + 1; } @@ -556,26 +556,32 @@ namespace Aktywator throw new InvalidCastException("Unable to read numeric value from BWS field"); } - public void syncNames(Tournament tournament, bool interactive, string startRounds, DataGridView grid) + public void syncNames(Tournament tournament, bool interactive, string startRounds, string section, DataGridView grid) { int count = 0, countNew = 0, SKOK_STOLOW = Convert.ToInt32(main.numTeamsTableOffset.Value); OleDbDataReader d; startRounds = startRounds.Trim(); string fromRound = sql.selectOne("SELECT min(`Round`) FROM RoundData WHERE NSPair>0"); + string sectionCondition = ""; + if (!("*".Equals(section))) + { + section = this.sectorLetterToNumber(section).ToString(); + sectionCondition = " AND `Section` = " + section; + } if (tournament.type != Tournament.TYPE_TEAMY) { if (tournament.type == Tournament.TYPE_PARY && startRounds.Length > 0) { - d = sql.select("SELECT `Section`, `Table`, NSPair, EWPair FROM RoundData WHERE NSPair>0 AND `Round` in (" + startRounds + ")"); + d = sql.select("SELECT `Section`, `Table`, NSPair, EWPair FROM RoundData WHERE NSPair>0 AND `Round` in (" + startRounds + ")" + sectionCondition); } else { - d = sql.select("SELECT `Section`, `Table`, NSPair, EWPair FROM RoundData WHERE `Round`=" + fromRound); + d = sql.select("SELECT `Section`, `Table`, NSPair, EWPair FROM RoundData WHERE `Round`=" + fromRound + sectionCondition); } } else { - d = sql.select("SELECT `Section`, `Table`, NSPair, EWPair FROM RoundData WHERE `Round`=" + fromRound + " AND `Table`<=" + SKOK_STOLOW); + d = sql.select("SELECT `Section`, `Table`, NSPair, EWPair FROM RoundData WHERE `Round`=" + fromRound + " AND `Table`<=" + SKOK_STOLOW + sectionCondition); } try @@ -584,7 +590,10 @@ namespace Aktywator while (d.Read()) { - string section = this.getBWSNumber(d, 0).ToString(); + if ("*".Equals(section)) + { + section = this.getBWSNumber(d, 0).ToString(); + } string table = this.getBWSNumber(d, 1).ToString(); int ns = this.getBWSNumber(d, 2); int ew = this.getBWSNumber(d, 3); @@ -815,5 +824,21 @@ namespace Aktywator return null; } } + + internal string detectTeamySection(string databaseName) + { + OleDbDataReader sections = this.sql.select("SELECT ID, custom_MySQL FROM `Section` WHERE custom_MySQL LIKE '%," + databaseName + ",%'"); + string section = null; + while (sections.Read()) { + string[] dbString = sections.GetString(1).Split(','); + if (dbString[3].Trim().Equals(databaseName)) + { + section = this.sectorNumberToLetter(this.getBWSNumber(sections, 0)); + break; + } + } + sections.Close(); + return section; + } } } diff --git a/Aktywator/MainForm.Designer.cs b/Aktywator/MainForm.Designer.cs index 11af8cb..c5ac4ad 100644 --- a/Aktywator/MainForm.Designer.cs +++ b/Aktywator/MainForm.Designer.cs @@ -89,6 +89,12 @@ this.xShowContract = new System.Windows.Forms.CheckBox(); this.xResultsOverview = new System.Windows.Forms.ComboBox(); this.tabPage2 = new System.Windows.Forms.TabPage(); + this.sectionToolStrip = new System.Windows.Forms.ToolStrip(); + this.eOomRounds = new System.Windows.Forms.ToolStripTextBox(); + this.lOomLabel = new System.Windows.Forms.ToolStripLabel(); + this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); + this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel(); + this.cbNamesSection = new System.Windows.Forms.ToolStripComboBox(); this.namesPanel = new System.Windows.Forms.Panel(); this.bTeamsNamesSettings = new System.Windows.Forms.Button(); this.checkBox1 = new System.Windows.Forms.CheckBox(); @@ -113,11 +119,8 @@ this.lTables = new System.Windows.Forms.Label(); this.syncToolStrip = new System.Windows.Forms.ToolStrip(); this.bSync = new System.Windows.Forms.ToolStripButton(); - this.bAutoSync = new System.Windows.Forms.ToolStripButton(); this.eInterval = new System.Windows.Forms.ToolStripTextBox(); - this.eOomRounds = new System.Windows.Forms.ToolStripTextBox(); - this.lOomLabel = new System.Windows.Forms.ToolStripLabel(); - this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); + this.bAutoSync = new System.Windows.Forms.ToolStripButton(); this.toolStrip4 = new System.Windows.Forms.ToolStrip(); this.toolStripSplitButton1 = new System.Windows.Forms.ToolStripSplitButton(); this.bMySQLTournament = new System.Windows.Forms.ToolStripMenuItem(); @@ -161,6 +164,7 @@ this.groupBox5.SuspendLayout(); this.groupBox4.SuspendLayout(); this.tabPage2.SuspendLayout(); + this.sectionToolStrip.SuspendLayout(); this.namesPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numNamesRefreshInterval)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numTeamsTableOffset)).BeginInit(); @@ -374,7 +378,7 @@ this.cbSettingsSection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cbSettingsSection.FormattingEnabled = true; this.cbSettingsSection.Items.AddRange(new object[] { - " * "}); + "*"}); this.cbSettingsSection.Location = new System.Drawing.Point(50, 7); this.cbSettingsSection.Name = "cbSettingsSection"; this.cbSettingsSection.Size = new System.Drawing.Size(42, 21); @@ -779,6 +783,7 @@ // // tabPage2 // + this.tabPage2.Controls.Add(this.sectionToolStrip); this.tabPage2.Controls.Add(this.namesPanel); this.tabPage2.Controls.Add(this.syncToolStrip); this.tabPage2.Controls.Add(this.toolStrip4); @@ -790,6 +795,70 @@ this.tabPage2.Text = "Nazwiska"; this.tabPage2.UseVisualStyleBackColor = true; // + // sectionToolStrip + // + this.sectionToolStrip.BackColor = System.Drawing.Color.White; + this.sectionToolStrip.Dock = System.Windows.Forms.DockStyle.Bottom; + this.sectionToolStrip.GripMargin = new System.Windows.Forms.Padding(0); + this.sectionToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.sectionToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.eOomRounds, + this.lOomLabel, + this.toolStripButton2, + this.toolStripLabel1, + this.cbNamesSection}); + this.sectionToolStrip.Location = new System.Drawing.Point(3, 458); + this.sectionToolStrip.Name = "sectionToolStrip"; + this.sectionToolStrip.Size = new System.Drawing.Size(563, 25); + this.sectionToolStrip.TabIndex = 30; + this.sectionToolStrip.Text = "toolStrip5"; + // + // eOomRounds + // + this.eOomRounds.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.eOomRounds.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.eOomRounds.Enabled = false; + this.eOomRounds.Name = "eOomRounds"; + this.eOomRounds.Size = new System.Drawing.Size(80, 25); + this.eOomRounds.ToolTipText = "Jeśli nie wiesz do czego to jest, to nic nie wpisuj!"; + // + // lOomLabel + // + this.lOomLabel.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.lOomLabel.Enabled = false; + this.lOomLabel.Name = "lOomLabel"; + this.lOomLabel.Size = new System.Drawing.Size(92, 22); + this.lOomLabel.Text = "Rundy dla OOM"; + this.lOomLabel.ToolTipText = "Jeśli nie wiesz do czego to jest, to nic nie wpisuj!"; + // + // toolStripButton2 + // + this.toolStripButton2.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.toolStripButton2.BackColor = System.Drawing.Color.Transparent; + this.toolStripButton2.CheckOnClick = true; + this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton2.Name = "toolStripButton2"; + this.toolStripButton2.Size = new System.Drawing.Size(23, 22); + this.toolStripButton2.Text = "‎✔"; + this.toolStripButton2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.toolStripButton2.ToolTipText = "Jeśli nie wiesz do czego to jest, to nic nie wpisuj!"; + this.toolStripButton2.CheckedChanged += new System.EventHandler(this.toolStripButton2_CheckedChanged); + // + // toolStripLabel1 + // + this.toolStripLabel1.Name = "toolStripLabel1"; + this.toolStripLabel1.Size = new System.Drawing.Size(43, 22); + this.toolStripLabel1.Text = "Sektor:"; + // + // cbNamesSection + // + this.cbNamesSection.BackColor = System.Drawing.Color.White; + this.cbNamesSection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbNamesSection.DropDownWidth = 75; + this.cbNamesSection.Name = "cbNamesSection"; + this.cbNamesSection.Size = new System.Drawing.Size(75, 25); + // // namesPanel // this.namesPanel.Controls.Add(this.bTeamsNamesSettings); @@ -812,7 +881,7 @@ this.namesPanel.Controls.Add(this.lTables); this.namesPanel.Location = new System.Drawing.Point(3, 31); this.namesPanel.Name = "namesPanel"; - this.namesPanel.Size = new System.Drawing.Size(562, 449); + this.namesPanel.Size = new System.Drawing.Size(562, 425); this.namesPanel.TabIndex = 29; // // bTeamsNamesSettings @@ -884,7 +953,7 @@ // label9 // this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(1, 418); + this.label9.Location = new System.Drawing.Point(3, 389); this.label9.Name = "label9"; this.label9.Size = new System.Drawing.Size(499, 13); this.label9.TabIndex = 31; @@ -940,7 +1009,7 @@ this.EastWest}); this.namesGridView.Location = new System.Drawing.Point(2, 98); this.namesGridView.Name = "namesGridView"; - this.namesGridView.Size = new System.Drawing.Size(557, 318); + this.namesGridView.Size = new System.Drawing.Size(557, 287); this.namesGridView.TabIndex = 28; this.namesGridView.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.namesGridView_CellMouseEnter); this.namesGridView.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.namesGridView_CellValueChanged); @@ -1019,7 +1088,7 @@ // label8 // this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(1, 432); + this.label8.Location = new System.Drawing.Point(5, 406); this.label8.Name = "label8"; this.label8.Size = new System.Drawing.Size(323, 13); this.label8.TabIndex = 12; @@ -1050,11 +1119,8 @@ this.syncToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; this.syncToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.bSync, - this.bAutoSync, this.eInterval, - this.eOomRounds, - this.lOomLabel, - this.toolStripButton2}); + this.bAutoSync}); this.syncToolStrip.Location = new System.Drawing.Point(3, 483); this.syncToolStrip.Name = "syncToolStrip"; this.syncToolStrip.Size = new System.Drawing.Size(563, 25); @@ -1071,8 +1137,16 @@ this.bSync.Text = "Synchronizuj teraz"; this.bSync.Click += new System.EventHandler(this.bSync_Click); // + // eInterval + // + this.eInterval.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.eInterval.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.eInterval.Name = "eInterval"; + this.eInterval.Size = new System.Drawing.Size(50, 25); + // // bAutoSync // + this.bAutoSync.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; this.bAutoSync.Image = ((System.Drawing.Image)(resources.GetObject("bAutoSync.Image"))); this.bAutoSync.ImageTransparentColor = System.Drawing.Color.Magenta; this.bAutoSync.Margin = new System.Windows.Forms.Padding(30, 1, 0, 2); @@ -1081,44 +1155,6 @@ this.bAutoSync.Text = "Synchronizuj co:"; this.bAutoSync.Click += new System.EventHandler(this.bAutoSync_Click); // - // eInterval - // - this.eInterval.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.eInterval.Name = "eInterval"; - this.eInterval.Size = new System.Drawing.Size(50, 25); - // - // eOomRounds - // - this.eOomRounds.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.eOomRounds.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.eOomRounds.Enabled = false; - this.eOomRounds.Name = "eOomRounds"; - this.eOomRounds.Size = new System.Drawing.Size(80, 25); - this.eOomRounds.ToolTipText = "Jeśli nie wiesz do czego to jest, to nic nie wpisuj!"; - // - // lOomLabel - // - this.lOomLabel.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.lOomLabel.Enabled = false; - this.lOomLabel.Name = "lOomLabel"; - this.lOomLabel.Size = new System.Drawing.Size(92, 22); - this.lOomLabel.Text = "Rundy dla OOM"; - this.lOomLabel.ToolTipText = "Jeśli nie wiesz do czego to jest, to nic nie wpisuj!"; - // - // toolStripButton2 - // - this.toolStripButton2.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.toolStripButton2.BackColor = System.Drawing.Color.Transparent; - this.toolStripButton2.CheckOnClick = true; - this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta; - this.toolStripButton2.Name = "toolStripButton2"; - this.toolStripButton2.Size = new System.Drawing.Size(23, 22); - this.toolStripButton2.Text = "‎✔"; - this.toolStripButton2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - this.toolStripButton2.ToolTipText = "Jeśli nie wiesz do czego to jest, to nic nie wpisuj!"; - this.toolStripButton2.CheckedChanged += new System.EventHandler(this.toolStripButton2_CheckedChanged); - // // toolStrip4 // this.toolStrip4.BackColor = System.Drawing.Color.White; @@ -1485,6 +1521,8 @@ this.groupBox4.PerformLayout(); this.tabPage2.ResumeLayout(false); this.tabPage2.PerformLayout(); + this.sectionToolStrip.ResumeLayout(false); + this.sectionToolStrip.PerformLayout(); this.namesPanel.ResumeLayout(false); this.namesPanel.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.numNamesRefreshInterval)).EndInit(); @@ -1624,6 +1662,9 @@ private System.Windows.Forms.Label label13; private System.Windows.Forms.Label label14; private System.Windows.Forms.Label label12; + private System.Windows.Forms.ToolStrip sectionToolStrip; + private System.Windows.Forms.ToolStripLabel toolStripLabel1; + private System.Windows.Forms.ToolStripComboBox cbNamesSection; } } diff --git a/Aktywator/MainForm.cs b/Aktywator/MainForm.cs index 8f8bba0..cd3f3f2 100644 --- a/Aktywator/MainForm.cs +++ b/Aktywator/MainForm.cs @@ -69,6 +69,12 @@ namespace Aktywator labelFilename.Text = filename; this.fillSectionSelector(bws.getSections()); + cbNamesSection.Items.Clear(); + foreach (object i in cbSettingsSection.Items) + { + cbNamesSection.Items.Add(i); + } + // cloning Setting List returned from Bws, because we're going to extend it for version tracking purposes this.bwsSettings = new List(bws.initSettings()); this.bwsSettings.Add(new Setting("BM2ShowPlayerNames", this.xShowPlayerNames, bws, new Version(2, 0, 0), new Version(1, 3, 1))); @@ -107,7 +113,7 @@ namespace Aktywator { cbSettingsSection.SelectedIndex = 0; foreach (string section in sections.Split(',')) { - cbSettingsSection.Items.Add(" " + bws.sectorNumberToLetter(Int32.Parse(section.Trim())) + " "); + cbSettingsSection.Items.Add(bws.sectorNumberToLetter(Int32.Parse(section.Trim()))); } } @@ -392,12 +398,23 @@ namespace Aktywator teamNames = new TeamNamesSettings(); teamNames.initTournament((TeamyTournament)tournament, this); bTeamsNamesSettings.Text = teamNames.getLabel(); + cbNamesSection.Items.Remove("*"); + string sectionForTournament = bws.detectTeamySection(tournament.getName()); + if (sectionForTournament != null) + { + cbNamesSection.SelectedItem = sectionForTournament; + } + else + { + cbNamesSection.SelectedItem = cbNamesSection.Items[0]; + } } else { lSkok.Visible = false; numTeamsTableOffset.Visible = false; bTeamsNamesSettings.Visible = false; + cbNamesSection.SelectedIndex = 0; } syncToolStrip.Visible = true; namesPanel.Visible = true; @@ -417,7 +434,7 @@ namespace Aktywator { try { - bws.syncNames(tournament, true, eOomRounds.Text, namesGridView); + bws.syncNames(tournament, true, eOomRounds.Text, cbNamesSection.SelectedItem.ToString(), namesGridView); } catch (Exception ee) { @@ -472,7 +489,7 @@ namespace Aktywator private void timer_Tick(object sender, EventArgs e) { - bws.syncNames(tournament, false, eOomRounds.Text, namesGridView); + bws.syncNames(tournament, false, eOomRounds.Text, cbNamesSection.SelectedItem.ToString(), namesGridView); } private void bForceSync_Click(object sender, EventArgs e) diff --git a/Aktywator/MainForm.resx b/Aktywator/MainForm.resx index 652834c..7bcd39e 100644 --- a/Aktywator/MainForm.resx +++ b/Aktywator/MainForm.resx @@ -175,6 +175,9 @@ EAdVRRzaJOwXoV/4N8D6AwpMvVRjyTFwAAAAAElFTkSuQmCC + + 564, 33 + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 @@ -331,56 +334,56 @@ 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 gg== @@ -408,34 +411,34 @@ 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 -- cgit v1.2.3