private readonly FormOperations fo = new FormOperations(Vakiot.Selolaskuri_enum.WPF_XAML); // information and instruction windows etc. // -------------------------------------------------------------------------------- // LOMAKKEEN KENTTIEN ARVOJEN HAKEMINEN // -------------------------------------------------------------------------------- // Tietoja ei tarkisteta tässä // Miettimisaika on aina kelvollinen, mutta merkkijonot eivät välttämättä // Myös ottelun tulos voi/saa olla antamatta, joten silloin se on määrittelemätön // // Jos CSV-formaatti ja on liian monta arvoa, palauttaa null private Syotetiedot HaeSyotteetLomakkeelta() { // Remove all leading and trailing white spaces from the form selo_in.Text = selo_in.Text.Trim(); pelimaara_in.Text = pelimaara_in.Text.Trim(); // NOTE! In Java version this comboBox could return also null, so there have to check for null value vastustajanSelo_comboBox.Text = vastustajanSelo_comboBox.Text.Trim(); // trim opponents field -> updated on display if (string.IsNullOrWhiteSpace(vastustajanSelo_comboBox.Text) == false) { // poista ylimääräiset välilyönnit, korvaa yhdellä // poista myös välilyönnit pilkun molemmilta puolilta, jos on CSV-formaatti vastustajanSelo_comboBox.Text = so.SiistiVastustajatKentta(vastustajanSelo_comboBox.Text); // .Trim jo tehty } return(new Syotetiedot(HaeMiettimisaika(), selo_in.Text, pelimaara_in.Text, vastustajanSelo_comboBox.Text, HaeOttelunTulos())); }
// Kopioi leikekirjasta Vastustajat-historiaan tekstirivit // // Ei tarkisteta, että ovatko vastustajat/tulokset oikeassa formaatissa. // Vain tarkistukset, että pituus on vähintään seloluvun pituus (eli 4), eikä tule kahta samaa riviä. // Ei saa olla myöskään liian pitkä rivi eikä liian montaa riviä. // // Osa syötteestä on tarkoitus ajaa CSV-formaatissa (silloin täydellinen tai vain miettimisaika otetaan lomakkeelta) // Ja osa on tarkoitettu käytettäväksi erillisesti annetun miettimisajan, oman vahvuusluvun ja pelimäärän kanssa. // // Tekstistä poistetaan ylimääräiset välilyönnit. private void PasteVastustajatToolStripMenuItem_Click(object sender, EventArgs e) { // Haetaan data leikekirjasta IDataObject iData = Clipboard.GetDataObject(); SelolaskuriOperations so = new SelolaskuriOperations(); string[] leikekirja = null; int lisatytRivit = 0; // jos leikekirjassa on tekstiä, niin poista aiemmat vastustajat, // käsittele riveittäin, tarkista ja tallenna vastustajanSelo-kenttään if (iData.GetDataPresent(DataFormats.Text)) { // Tämä lisäisi kaikki rivit tarkistamatta: vastustajanSelo_comboBox.Items.AddRange(iData.GetData(DataFormats.Text).ToString().Split('\n')); // // Ei tallenneta liian pitkiä tai lyhyitä rivejä, eikä liian montaa riviä, eikä samaa riviä kahdesti. // Rivin on aloitettava numerolla (eli selo tai miettimisaika) tai ottelutuloksella (+, - tai =) leikekirja = iData.GetData(DataFormats.Text).ToString().Split('\n'); // Ei haittaa, jos on "\r\n", koska poistetaan tarkistuksessa foreach (string rivi in leikekirja) { // poista ylimääräiset välilyönnit ennen tarkistusta ja mahdollista tallennusta string rivi2 = so.SiistiVastustajatKentta(rivi.Trim()); if (rivi2.Length >= Vakiot.SELO_PITUUS && rivi2.Length <= Vakiot.LEIKEKIRJA_MAX_RIVINPITUUS && (rivi2[0] == '+' || rivi2[0] == '-' || rivi2[0] == '=' || (rivi2[0] >= '0' && rivi2[0] <= '9')) && !vastustajanSelo_comboBox.Items.Contains(rivi2)) { // vanhat tiedot poistetaan vain, jos on kelvollista lisättävää if (lisatytRivit == 0) { TyhjennaVastustajat(); } // on poistanut ylimääräiset välilyönnit ennen tallennusta vastustajanSelo_comboBox.Items.Add(rivi2); if (++lisatytRivit >= Vakiot.LEIKEKIRJA_MAX_RIVIMAARA) { break; } } } } if (lisatytRivit > 0 && null != leikekirja) { MessageBox.Show( "Vastustajiin lisätty " + lisatytRivit + (lisatytRivit == 1 ? " rivi." : " riviä.") + " Leikekirjassa oli " + leikekirja.Length + (leikekirja.Length == 1 ? " rivi." : " riviä.") + " Lisätään enintään " + Vakiot.LEIKEKIRJA_MAX_RIVIMAARA + " riviä." + Environment.NewLine + "Huom! Ei tarkistettu, onko kelvollista ottelutietoa. Tarkistettu vain, että rivi alkaa" + Environment.NewLine + "numerolla tai tuloksella (+-=), rivin pituus on välillä 4 (seloluvun pituus) - " + Vakiot.LEIKEKIRJA_MAX_RIVINPITUUS + Environment.NewLine + "eikä lisätä samoja rivejä."); } else { MessageBox.Show("Paste: Leikekirjan sisältöä ei hyväksytty. Ei muutettu vastustajia/ottelutietoja."); } }
public IActionResult OnPostLaskeVahvuusluku() { if (!ModelState.IsValid) { return(Page()); } // // HAE SYÖTTEET LOMAKKEELTA // Vakiot.Miettimisaika_enum aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN; if (miettimisaika_radiobutton_in <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN) { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN; } else if (miettimisaika_radiobutton_in <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN) { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN; } else if (miettimisaika_radiobutton_in <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN) { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN; } else { aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN; } string selo = selo_in; string pelimaara = pelimaara_in; string vastustajat = vastustajat_in; // Virhetilanne, jos vastustajat on tyhjä (jatketaan silti vielä) if (selo == null) { selo = ""; } if (pelimaara == null) { pelimaara = ""; } if (vastustajat == null) { vastustajat = ""; } // // KÄSITTELE JA TARKISTA SYÖTE // vastustajat = vastustajat.Trim(); if (string.IsNullOrWhiteSpace(vastustajat) == false) { // poista ylimääräiset välilyönnit, korvaa yhdellä // poista myös välilyönnit pilkun molemmilta puolilta, jos on CSV-formaatti vastustajat = so.SiistiVastustajatKentta(vastustajat); // .Trim jo tehty // näytölle siistitty versio (tämä ei toimikaan näin helposti, Ajax?) vastustajat_in = vastustajat; } Syotetiedot syotetiedot = new Syotetiedot(aika, selo, pelimaara, vastustajat, Vakiot.OttelunTulos_enum.TULOS_EI_ANNETTU); int status; if ((status = so.TarkistaSyote(syotetiedot)) == Vakiot.SYOTE_STATUS_OK) { // // LASKE // Selopelaaja tulokset = so.SuoritaLaskenta(syotetiedot); //// jos on CSV, voidaan ottaa sieltä oikeasti käytetty miettimisaika //// tosin se ei päivity näytölle näin //if (aika != tulokset.Miettimisaika) //{ // miettimisaika_radiobutton_in = (int)tulokset.Miettimisaika; //} // Viimeksi lasketut tulokset talteen HttpContext.Session.SetInt32("laskettu selo", tulokset.UusiSelo); if (tulokset.UusiPelimaara > 0) { HttpContext.Session.SetInt32("laskettu uusi pelimaara", tulokset.UusiPelimaara); } else { HttpContext.Session.SetInt32("laskettu uusi pelimaara", 0); } HttpContext.Session.SetInt32("miettimisaika", miettimisaika_radiobutton_in); // // NÄYTÄ TULOKSET // // XXX: järjestä tulokset näytölle paremmin! // ViewData["TULOKSET"] = "Tulokset"; ViewData["uusi_selo_nimi"] = "Uusi vahvuusluku (" + (tulokset.Miettimisaika == Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN ? "PELO" : "SELO") + "): "; ViewData["uusi_selo"] = tulokset.UusiSelo; //// Muista viimeisimmät arvot lomakkeen piilotetuilla kentillä //ViewData["viimeksi_laskettu_selo"] = tulokset.UusiSelo.ToString(); //if (tulokset.UusiPelimaara > 0) // ViewData["viimeksi_laskettu_pelimaara"] = tulokset.UusiPelimaara.ToString(); //else // ViewData["viimeksi_laskettu_pelimaara"] = ""; ViewData["selomuutos"] = " Muutos: " + (tulokset.UusiSelo - tulokset.AlkuperainenSelo).ToString("+#;-#;0") + ((tulokset.MinSelo < tulokset.MaxSelo) ? " Vaihteluväli: " + tulokset.MinSelo.ToString() + " - " + tulokset.MaxSelo.ToString() : ""); if (tulokset.UusiPelimaara > 0) { ViewData["uusi_pelimaara_nimi"] = "Uusi pelimäärä: "; ViewData["uusi_pelimaara"] = tulokset.UusiPelimaara; } if (tulokset.UudenPelaajanLaskenta || tulokset.UudenPelaajanPelitLKM > 0) { ViewData["odotustulos"] = ""; ViewData["uudenpelaajanlaskenta"] = (tulokset.UudenPelaajanPelitLKM > 0) ? " (uuden pelaajan laskentaa " + tulokset.AlkuperainenPelimaara + "+" + tulokset.UudenPelaajanPelitLKM + " peliä)" : " (uuden pelaajan laskenta) "; } else { ViewData["odotustulos"] = "Odotustulos: " + (tulokset.Odotustulos / 100F).ToString("0.00"); ViewData["uudenpelaajanlaskenta"] = ""; } ViewData["turnauksentulos"] = "Turnauksen tulos: " + (tulokset.TurnauksenTulos2x / 2F).ToString("0.0") + " / " + tulokset.VastustajienLkm; // Keskivahvuus ja piste-ero // Vastustajien vahvuuslukujen keskiarvo. Kumpi, ei desimaaleja vai yksi desimaali? // oman vahvuusluvun piste-ero turnauksen keskivahvuuteen nähden // näytetään etumerkki miinus, jos turnaus on heikompi //ViewData["keskivahvuus"] = "Keskivahvuus: " + (tulokset.TurnauksenKeskivahvuus10x / 10F).ToString("0.0") + " Piste-ero: " + (Math.Abs(10*tulokset.AlkuperainenSelo - tulokset.TurnauksenKeskivahvuus10x)/10F).ToString("0.0"); ViewData["keskivahvuus"] = "Keskivahvuus: " + tulokset.TurnauksenKeskivahvuus.ToString() + " Piste-ero: " + /*Math.Abs*/ (tulokset.TurnauksenKeskivahvuus - tulokset.AlkuperainenSelo).ToString("+#;-#;0"); if (tulokset.VastustajienLkm > 1) { ViewData["vastustajat_alue"] = "Vastustajat (min-max): " + tulokset.VastustajaMin + " - " + tulokset.VastustajaMax; } ViewData["suoritusluku"] = "Suoritusluku: " + tulokset.Suoritusluku; ViewData["suorituslukuFIDE"] = " Suoritusluku FIDE: " + tulokset.SuorituslukuFIDE; ViewData["suorituslukuLineaarinen"] = "Suoritusluku lineaarinen: " + tulokset.SuorituslukuLineaarinen; } else { //// Muista viimeisimmät arvot lomakkeen piilotetuilla kentillä //if (HttpContext.Session.GetInt32("laskettu selo") != null) // ViewData["viimeksi_laskettu_selo"] = HttpContext.Session.GetInt32("laskettu selo").ToString(); //if (HttpContext.Session.GetInt32("laskettu uusi pelimaara") != null) // ViewData["viimeksi_laskettu_pelimaara"] = HttpContext.Session.GetInt32("laskettu uusi pelimaara").ToString(); // virhestatus on negatiivinen luku, hae virheteksti if (Vakiot.SYOTE_STATUS_OK >= status && status >= Vakiot.SYOTE_VIRHE_MAX) { // requires <div asp-validation-summary... > ModelState.AddModelError(string.Empty, Vakiot.SYOTE_VIRHEET_text[Math.Abs(status)]); } } return(Page()); }