From b935a223648e5014d780856903a1b421c7e84398 Mon Sep 17 00:00:00 2001 From: Jan Cermak Date: Sun, 8 Mar 2009 00:15:08 +0100 Subject: [PATCH] init --- README | 116 +++++++ abouttab.cc | 34 +++ abouttab.h | 25 ++ aspt.pro | 5 + clubtab.cc | 70 +++++ clubtab.h | 38 +++ configtab.cc | 185 ++++++++++++ configtab.h | 65 ++++ img/splash.jpg | Bin 0 -> 24675 bytes lang/tran_cs.qm | Bin 0 -> 11978 bytes lang/tran_cs.ts | 694 ++++++++++++++++++++++++++++++++++++++++++ lang/tran_lt.qm | Bin 0 -> 11176 bytes lang/tran_lt.ts | 703 ++++++++++++++++++++++++++++++++++++++++++ lang/tran_pl.qm | Bin 0 -> 10446 bytes lang/tran_pl.ts | 683 +++++++++++++++++++++++++++++++++++++++++ lang/tran_ro.qm | Bin 0 -> 9194 bytes lang/tran_ro.ts | 683 +++++++++++++++++++++++++++++++++++++++++ lang/tran_xx.ts | 678 +++++++++++++++++++++++++++++++++++++++++ loadtab.cc | 77 +++++ loadtab.h | 45 +++ main.cc | 790 ++++++++++++++++++++++++++++++++++++++++++++++++ main.h | 17 ++ mainwindow.cc | 56 ++++ mainwindow.h | 40 +++ performance.cc | 412 +++++++++++++++++++++++++ performance.h | 67 ++++ playerdetail.cc | 137 +++++++++ playerdetail.h | 47 +++ playertab.cc | 86 ++++++ playertab.h | 46 +++ proxyset.cc | 72 +++++ proxyset.h | 34 +++ stadiumtab.cc | 70 +++++ stadiumtab.h | 38 +++ staffmember.cc | 40 +++ staffmember.h | 42 +++ stafftab.cc | 39 +++ stafftab.h | 37 +++ 38 files changed, 6171 insertions(+) create mode 100755 README create mode 100644 abouttab.cc create mode 100644 abouttab.h create mode 100755 aspt.pro create mode 100644 clubtab.cc create mode 100644 clubtab.h create mode 100755 configtab.cc create mode 100755 configtab.h create mode 100644 img/splash.jpg create mode 100755 lang/tran_cs.qm create mode 100755 lang/tran_cs.ts create mode 100644 lang/tran_lt.qm create mode 100644 lang/tran_lt.ts create mode 100644 lang/tran_pl.qm create mode 100644 lang/tran_pl.ts create mode 100644 lang/tran_ro.qm create mode 100644 lang/tran_ro.ts create mode 100644 lang/tran_xx.ts create mode 100644 loadtab.cc create mode 100644 loadtab.h create mode 100644 main.cc create mode 100755 main.h create mode 100644 mainwindow.cc create mode 100644 mainwindow.h create mode 100644 performance.cc create mode 100644 performance.h create mode 100755 playerdetail.cc create mode 100755 playerdetail.h create mode 100755 playertab.cc create mode 100755 playertab.h create mode 100644 proxyset.cc create mode 100644 proxyset.h create mode 100644 stadiumtab.cc create mode 100644 stadiumtab.h create mode 100644 staffmember.cc create mode 100644 staffmember.h create mode 100644 stafftab.cc create mode 100644 stafftab.h diff --git a/README b/README new file mode 100755 index 0000000..0a39365 --- /dev/null +++ b/README @@ -0,0 +1,116 @@ +ANOTHER SOCCER PROJECT TOOL - ASPT +Jan Cermak | johniez + +23.12.2007 | v 0.2.7 + +http://www.soccerproject.com - just the game +http://aspt.johniez.com - this tool's home + +This is OpenSource, released under CreativeCommons(by-nc-nd 2.5) license. +CC 2.5 Attribution-NonCommercial-NoDerivs +http://creativecommons.org/licenses/by-nc-nd/2.5/ + +shortly: +You can use or share this product absolutely for free. +but no commercial usage is approved. +More on the license web. + +------------------------------------------------------- + +SUPPORT + +Based on Trolltech Qt 4.3 - OpenSource (http://trolltech.com) + +Supported platforms: +Windows, Linux, Mac + +Qt4 required. + +Compilation: + +1) qmake aspt.proj + +this will create your Makefile, depending on Your system + +2) make + +to compile the program + +3) make clean + +if you want to delete temporary build files + +If everything run without a problem, binary file is ready. + +run: ./aspt in linux platform + +program need directory "data" with writting permissions and directory "conf" with writting permissions. + +------------------------------------------------------- + +Creative Commons Legal Code + +Attribution-NonCommercial-NoDerivs 2.5 +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + 1. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License. + 2. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License. + 3. "Licensor" means the individual or entity that offers the Work under the terms of this License. + 4. "Original Author" means the individual or entity who created the Work. + 5. "Work" means the copyrightable work of authorship offered under the terms of this License. + 6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + +2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + 1. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works; + 2. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works; + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Derivative Works. All rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Sections 4(d) and 4(e). + +4. Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + 1. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by clause 4(c), as requested. + 2. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. + 3. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work, You must keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the Original Author and/or Licensor designate another party or parties (e.g. a sponsor institute, publishing entity, journal) for attribution in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; the title of the Work if supplied; and to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit. + 4. + + For the avoidance of doubt, where the Work is a musical composition: + 1. Performance Royalties Under Blanket Licenses. Licensor reserves the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work if that performance is primarily intended for or directed toward commercial advantage or private monetary compensation. + 2. Mechanical Rights and Statutory Royalties. Licensor reserves the exclusive right to collect, whether individually or via a music rights agency or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions), if Your distribution of such cover version is primarily intended for or directed toward commercial advantage or private monetary compensation. + 5. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor reserves the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions), if Your public digital performance is primarily intended for or directed toward commercial advantage or private monetary compensation. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + 1. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + 2. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + 3. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + 4. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + +Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + +Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. + +Creative Commons may be contacted at http://creativecommons.org/. +? Back to Commons Deed + diff --git a/abouttab.cc b/abouttab.cc new file mode 100644 index 0000000..7e7d500 --- /dev/null +++ b/abouttab.cc @@ -0,0 +1,34 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "abouttab.h" + +AboutTab::AboutTab(QWidget *parent) : QWidget(parent) { + init(); +} + +AboutTab::~AboutTab() { + delete label; + delete mainLayout; +} + +void AboutTab::init() { + mainLayout = new QVBoxLayout; + QString text; + text = "

Another SoccerProject Tool

"; + text += "v 0.2.7 | 23.12.2007

"; + text += "johniez | aspt homepage"; + text += "
"; + text += "" + tr("Translators") + ":
"; + text += "UniCool [RO]
"; + text += "Gladiator [PL]
"; + text += "arsportas [LT]
"; + text += "
"; + text += "Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license"; + label = new QLabel(text); + mainLayout->addWidget(label); + setLayout(mainLayout); +} diff --git a/abouttab.h b/abouttab.h new file mode 100644 index 0000000..fb2e7c7 --- /dev/null +++ b/abouttab.h @@ -0,0 +1,25 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef ABOUTTAB__H__ +#define ABOUTTAB__H__ + +#include +#include +#include + +class AboutTab: public QWidget { + Q_OBJECT + QVBoxLayout *mainLayout; + QLabel *label; +public: + AboutTab(QWidget *parent = 0); + ~AboutTab(); +private: + void init(); +}; + +#endif diff --git a/aspt.pro b/aspt.pro new file mode 100755 index 0000000..102ebe7 --- /dev/null +++ b/aspt.pro @@ -0,0 +1,5 @@ +CONFIG += qt release +SOURCES += main.cc mainwindow.cc configtab.cc playertab.cc playerdetail.cc staffmember.cc stafftab.cc stadiumtab.cc clubtab.cc loadtab.cc proxyset.cc abouttab.cc performance.cc +HEADERS += mainwindow.h configtab.h playertab.h playerdetail.h staffmember.h stafftab.h stadiumtab.h clubtab.h loadtab.h proxyset.h abouttab.h performance.h +QT += xml network +TRANSLATIONS += lang/tran_cs.ts lang/tran_ro.ts lang/tran_pl.ts lang/tran_xx.ts lang/tran_lt.ts diff --git a/clubtab.cc b/clubtab.cc new file mode 100644 index 0000000..8418ee9 --- /dev/null +++ b/clubtab.cc @@ -0,0 +1,70 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "clubtab.h" + +ClubTab::ClubTab(QWidget *parent) : QWidget(parent) { + init(); +} + +ClubTab::~ClubTab() { + delete label; + delete mainLayout; +} + +void ClubTab::init() { + mainLayout = new QVBoxLayout; + QString text; + text = ""; + text += ""; + text += ""; + text += ""; + text += ""; + QString division; + if(club.curdiv.toInt()<=1) { + division = "A"; + } else if(club.curdiv.toInt()<=4) { + int number = club.curdiv.toInt() - 1; + division = "B." + QString().setNum(number); + } else if(club.curdiv.toInt()<=13) { + int number = club.curdiv.toInt() - 4; + division = "C." + QString().setNum(number); + } else if(club.curdiv.toInt()<=40) { + int number = club.curdiv.toInt() - 13; + division = "D." + QString().setNum(number); + } else if(club.curdiv.toInt()<=121) { + int number = club.curdiv.toInt() - 40; + division = "E." + QString().setNum(number); + } else if(club.curdiv.toInt()<=364) { + int number = club.curdiv.toInt() - 121; + division = "F." + QString().setNum(number); + } else if(club.curdiv.toInt()<=1093) { + int number = club.curdiv.toInt() - 364; + division = "G." + QString().setNum(number); + } else if(club.curdiv.toInt()<=3280) { + int number = club.curdiv.toInt() - 1093; + division = "H." + QString().setNum(number); + } else if(club.curdiv.toInt()<=9841) { + int number = club.curdiv.toInt() - 3280; + division = "I." + QString().setNum(number); + } + text += ""; + text += ""; + text += "
" + tr("Club") + "" + club.name + "
" + tr("Budget") + "" + club.budget + "€
" + tr("Rating") + "" + QString().setNum((float)club.rat.toInt()/10) + "%
" + tr("Team spirit") + "" + QString().setNum((float)club.spirit.toInt()/10) + "%
" + tr("Current position") + "" + club.curpos + ". " + division + "
" + tr("Form") + "" + club.form + "
"; + label = new QLabel(text); + mainLayout->addWidget(label); + setLayout(mainLayout); +} + +void ClubTab::dataChanged() { + rebuildUI(); +} + +void ClubTab::rebuildUI() { + label->clear(); + delete mainLayout; + init(); +} diff --git a/clubtab.h b/clubtab.h new file mode 100644 index 0000000..54e0b1a --- /dev/null +++ b/clubtab.h @@ -0,0 +1,38 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef CLUBTAB__H__ +#define CLUBTAB__H__ + +#include +#include +#include +#include + +struct ClubStruct { + QString name, budget, rat, fndd, spirit, curpos, curdiv, totgmade, totgrecv, curgmade, curgrecv, curlgmade, curlgrecv, tothgames, totwins, totdraws, totlosts, curhgames, curwins, curdraws, curlosts, curlwins, curldraws, curllosts, totmaxatt, curmaxatt, totavgatt, curavgatt, form, for_a, tactic_a, attstyle_a, agr_a, cap_a; + bool incup; +}; + +extern void parse(const QString &); +extern ClubStruct club; + +class ClubTab: public QWidget { + Q_OBJECT + QVBoxLayout *mainLayout; + QLabel *label; +public: + ClubTab(QWidget *parent = 0); + ~ClubTab(); + + void rebuildUI(); +private: + void init(); +public slots: + void dataChanged(); +}; + +#endif diff --git a/configtab.cc b/configtab.cc new file mode 100755 index 0000000..841dd04 --- /dev/null +++ b/configtab.cc @@ -0,0 +1,185 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "configtab.h" + +ConfigTab::ConfigTab(QWidget *parent): QWidget(parent) { + file = 0; + http = new QHttp; + QSettings settings("config/global.ini", QSettings::IniFormat); + langToSave = settings.value("lang", 0).toInt(); + useProxy = settings.value("Network/proxyUsed", 0).toInt(); + num = settings.value("nextXmlId", "0").toString(); + //old data count + int val = num.toInt(); val--; + QString old; + old.setNum(val); + parse("data/data_"+old+".xml"); + + connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(httpRequestFinished(int, bool))); + connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), this, SLOT(readResponseHeader(const QHttpResponseHeader &))); + + msgbox = new QLabel(""); + connect(this, SIGNAL(errMsgBox(const QString &)), this, SLOT(showMsgBox(const QString &))); + + nick = new QLineEdit(""); + pass = new QLineEdit(""); + nick->setText(settings.value("username", "").toString()); + warnLabel = new QLabel(tr("Warning:
You can download data file only once between simulations.
Data files could be used for building statistics, do not delete them.
If you want to download your data, type your soccerproject.com login details.
Bugs or feature requests on: http://flyspray.johniez.com/proj2")); + nickLabel = new QLabel(tr("soccerproject.com nickname:")); + passLabel = new QLabel(tr("soccerproject.com password:")); + pass->setEchoMode(QLineEdit::Password); + butDown = new QPushButton(tr("Download")); + connect(butDown, SIGNAL(clicked()), this, SLOT(downloadLatest())); + butProxy = new QPushButton(tr("Proxy server settings")); + connect(butProxy, SIGNAL(clicked()), this, SLOT(openProxy())); + proxyWin = 0; + + group1 = new QGroupBox(tr("Users data download")); + group1Layout = new QVBoxLayout; + group1Layout->addWidget(warnLabel); + row1 = new QHBoxLayout(); + row1->addWidget(nickLabel); + row1->addWidget(nick); + group1Layout->addLayout(row1); + row2 = new QHBoxLayout(); + row2->addWidget(passLabel); + row2->addWidget(pass); + group1Layout->addLayout(row2); + group1Layout->addWidget(butDown); + group1Layout->addWidget(butProxy); + group1Layout->addWidget(msgbox); + group1->setLayout(group1Layout); + group2 = new QGroupBox(tr("Language selection")); + group2Layout = new QVBoxLayout; + lang = new QComboBox(); + lang->addItem(tr("English"), "en"); + lang->addItem(tr("Czech"), "cs"); + lang->addItem(tr("Romanian"), "ro"); + lang->addItem(tr("Polish"), "pl"); + lang->addItem(tr("Lithuanian"), "lt"); + lang->setCurrentIndex(lang->findData(settings.value("lang", "en").toString())); + setLang = new QPushButton(tr("save change")); + langWarn = new QLabel(tr("Language selection take effect after application restart.")); + group2Layout->addWidget(langWarn); + group2Layout->addWidget(lang); + group2Layout->addWidget(setLang); + connect(lang, SIGNAL(activated(int)), this, SLOT(changeLang(int))); + connect(setLang, SIGNAL(clicked()), this, SLOT(saveSettings())); + group2->setLayout(group2Layout); + mainLayout = new QVBoxLayout; + mainLayout->addWidget(group1); + mainLayout->addWidget(group2); + setLayout(mainLayout); +} + +ConfigTab::~ConfigTab() { + if(file) delete file; + delete http; + delete nick; + delete pass; + delete butDown; + delete butProxy; + delete msgbox; + if(proxyWin) delete proxyWin; + delete warnLabel; + delete nickLabel; + delete passLabel; + delete lang; + delete setLang; + delete langWarn; + delete row1; + delete row2; + delete group1Layout; + delete group1; + delete group2Layout; + delete group2; + delete mainLayout; +} + +void ConfigTab::changeLang(int langId) { + langToSave = langId; +} + +void ConfigTab::openProxy() { + proxyWin = new ProxySet(); +} + +void ConfigTab::saveSettings() { + const char* langs[5] = {"en", "cs", "ro", "pl", "lt"}; + QSettings settings("config/global.ini", QSettings::IniFormat); + if(langs) { + settings.setValue("lang", langs[langToSave]); + settings.sync(); + } +} + +void ConfigTab::downloadLatest() { + QSettings settings("config/global.ini", QSettings::IniFormat); + useProxy = settings.value("Network/proxyUsed", 0).toInt(); + butDown->setEnabled(false); + msgbox->setText("downloading..."); + file = new QFile("data/data_"+num+".xml"); + file->open(QIODevice::WriteOnly); + QUrl url("http://www.soccerproject.com/sptd.php"); + int p_port = settings.value("Network/proxyPort", 80).toInt(); + if(useProxy) http->setProxy(settings.value("Network/proxyAddr", "").toString(), p_port, settings.value("Network/proxyName", "").toString(), settings.value("Network/proxyPass", "").toString()); + http->setHost(url.host(), 80); + //QTextStream out(stdout); out << "log"; + httpId = http->get(url.path() + "?login=" + QUrl::toPercentEncoding(nick->text()) + "&pw=" + QUrl::toPercentEncoding(pass->text()) + "&sptdid=8&sptdpw=Cerm12", file); + settings.setValue("username", nick->text()); + settings.sync(); +} + +void ConfigTab::httpRequestFinished(int requestId, bool error) { + if (requestId != httpId) return; + + file->close(); + + if (error) { + file->remove(); + emit errMsgBox(tr("Download failed: %1.").arg(http->errorString())); + } else { + QFile control("data/data_"+num+".xml"); + control.open(QIODevice::ReadOnly); + char c; + control.getChar(&c); + if(c == '<') { + control.close(); + QSettings settings("config/global.ini", QSettings::IniFormat); + QString parseNum = num; + int val = num.toInt(); + num.setNum(++val); + settings.setValue("nextXmlId", num); + settings.sync(); + emit errMsgBox(QString("") + tr("Download OK") + ""); + parse("data/data_"+parseNum+".xml"); + emit dataLoaded(); + } else { + char err[512]; + control.ungetChar(c); + control.readLine(err, sizeof(err)); + control.close(); + emit errMsgBox(QString("") + tr("Error: ") + err + ""); + butDown->setEnabled(true); + } + } + delete file; + file = 0; +} + +void ConfigTab::readResponseHeader(const QHttpResponseHeader &responseHeader) { + if (responseHeader.statusCode() != 200) { + QMessageBox::information(this, tr("HTTP"), tr("Download failed: %1.").arg(responseHeader.reasonPhrase())); + http->abort(); + return; + } +} + +void ConfigTab::showMsgBox(const QString &text) { + msgbox->clear(); + msgbox->setText(text); +} diff --git a/configtab.h b/configtab.h new file mode 100755 index 0000000..047a4a3 --- /dev/null +++ b/configtab.h @@ -0,0 +1,65 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef CONFIGTAB__H__ +#define CONFIGTAB__H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include + +#include "proxyset.h" + +extern void parse(const QString &); + +class ConfigTab: public QWidget { + Q_OBJECT + QVBoxLayout *mainLayout, *group1Layout, *group2Layout; + QHBoxLayout *row1, *row2; + QFile *file; + QHttp *http; + QString num; + int httpId; + QLineEdit *nick, *pass; + QPushButton *butDown, *butProxy; + int langToSave; + QLabel *msgbox; + int useProxy; + ProxySet *proxyWin; + QLabel *warnLabel, *nickLabel, *passLabel; + QGroupBox *group1, *group2; + QComboBox *lang; + QPushButton *setLang; + QLabel *langWarn; +public: + ConfigTab(QWidget *parent = 0); + ~ConfigTab(); +private slots: + void httpRequestFinished(int requestId, bool error); + void readResponseHeader(const QHttpResponseHeader &responseHeader); + void downloadLatest(); + + void changeLang(int langId); + void saveSettings(); + + void showMsgBox(const QString &); + void openProxy(); +signals: + void dataLoaded(); + void errMsgBox(const QString &); +}; + +#endif diff --git a/img/splash.jpg b/img/splash.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb72e542909069e72e981b61b513b1adae374aca GIT binary patch literal 24675 zcmb5Vb95!o6E}S0Y_PFy=ex0O+jeejZgykb*tT(FI~&`!H{95G@_WyD&-3?Fb7szT zS54PvW~zIttEN9!K6e19vXU~A00;;Ofb`b}_}m3xOLze-0RROB06hQzfdAUR=yM$) z27rNrhK7cM`8vSBz`(*G!NYwK3L@e+Bs3IsbTkw+Gz@G)91Ki+EHpG+GF*HjA`%i3 z3>w(_-|iqNmKwN1QZkmEEMb)`Y-qZ2uLUZG#UTD~1 zxrmAhCaW_Xg=#>2K9*=*A3UY$ESt;j6?R}k0TsJg{k58UP~qHHJA@E`|4+;RRRaMD zfP(&d81P?QcC;@LUuqyB5&j3}e@Gx8(V(Eel!&OnV33=@erfqqQP($1aix0ACi-Xh za}9v>CHWJvQxhH@+!y;}8aS42halH&_{T8&S6BcKKg7lSO^rltvIb6v z5kgFpotdP}fr|wkkUedu*{sn#hPwvlRc`)JSeMkrMZxzI0CcA{N5P};l-Ejoxa4eW zsgK6WW%v(j*=7HAF`o8kE{iR}(r$7?oK52~*psMx#*^r)AC^FYn)elPfXnH&Sz7sL`Sgw7xUtU^7#EFylI@ z>e`=)jNm|DFZOSdB%d%Mdg@qLdx1(%Pc(M> zn9z(5xQgRXK=LQx73ci~5uq8Z_SkN4m?f&0CT^`b<5_-u!yblL#)J-A(u9du7+%j^ zuwp%jq{&lG0)G^EoB`2bJ9?&P*_(ek_+5uPpUjT%##?nD&c?wLKW1Jw7!eU4sK+2H zSt>v`qDCH+m*?=U)D86)$FD{+_fzvP2;(%)?EZmg>AK`Nn7*W6`NnW`hYH4ZM4`Qs#yfI zjzFZsw%%n>dL#D*qB^CGg%LgUHE>xP&9T@gKHkc)Di$+!*|DCZSQ31emM_a9-e_pg z%L25oN5uD(()AoY^b@9qIY30@A4l~i4D_fEmwmwa=>}4*+7n(%)GFrL8YK9!<;VvT zO*zwm6(p_dRga9#oe<9$>Eqj~QEZ3qV#CrhDKl?!Y{d3ciRmRV{g}e_GRZ<0t0Xqc zsPJ#QkXcARZj;LIB@f|b?bb!t;DHeDPk>Gh{Q`%A;D=SK@2I``F9W`Uom_s?nqa#U zrNm`EiS^oXpa(T>0w-K92lw>9S1qBMhuzXSJ5kwP3-n8fx(*~*lolG$O_!Ml4l<#W zqcoX9d?~;_HGvgJLL;E2XHxj<-eYN3zWjQ?~s_9`hZtFbi%(fdz589sY46 z4IR~6d=~4fbngoqNOtNPLu!F6MX57su+GnEAY&5$lvd)=XV-I$-}Z7C7jujq(ue&v z+h$EFd2>rc($Z80dM~JwRzdOv)0lAzZU#ed&O&^FsmKGNl9dhP00IlFFsFBxZpI^( zysF3&Co_nE>1q(Av^MO2MVY`Mlu=g6FwWW9?X;GXOX!?kH*jlz*}IQ>Qz77ULSmS5 zxh6b@C;NlgMCuXqO{v&uVi|psDrLPk!VychA2(!LLg1Gyrg;jePd)+sp^yk}<00{1QQrqwo@Xglxf@~3qWys|z zAk)_;Q9T9zl?v`C(`vusI!KaST^QFQ>8DIqa3>>(5aNFTJA zeC-upY8s9v$LNcn714`1_l$^c3s0;r0iht(g`3ZxwFu-C$gkhW9Lnf5C?{@Gx8N>3 znYV9O^#kq`3m^8Ktod4E2`rH~OGMqWtq ze!+qP$-utOtWIxVZv(VONoH@oEnq;XP&FxHZ0;{%`28K?L_Q3#l-^fy5nrUZ#mu1f z1Cm!A-LDi(M5O}{y-$P5G`OOnoP_Nn$18zpcX^JbAt^(Xhk03AXmsLf4=mTw*U>M7 zDaav@fxv@<%Xq0guWS%Vn7w<)*trYNc{t~v-%`v!fRTYv&rPy|1KsJZ3&1sMEw4F% zi*>gtS?GKG5E9r%`i6YW@@w!aUtA+$Jz-$?+Ph=HZoFuB&-TsFg0QHrbG7SGhX()F ze}xo2SY6N$xtrunI>_{3_hUy z>bqfnV;aG-){)L{Rb|oDlw=~$r(mGZ6*C~Jo1i$+_#X6Iwy_1SeSfYdvQcx9wN&R5 z5Ka%SnAU=G*Wf7?=4dYg3v*D}sldA(4!U*a2wR*S>QA;!6tr(mQolw)Owp533Y3?u zJXOm&f0zt+dFmE7c>3{IhISA*9KbE5hzAsK=f|sU4hm<@QR~`rS5;APB-vpaQr9q| zhenSKx@j78`08dQXZAS?Js-F)Uh~&ETkC8Yxb!gfrhLvg&LW&g zPEZg@jY+oifo%6@SXSgW>Br^qNeORPyxQXyM5OezpyQVi?He0Y^1;-g3g>T{6e z&YGHKRI4CZ)cpiOgNJqfT|t-=Hc4&B>7Aix5=?DC*0))%YsEc8%BLz_0wE4cCj~5X zYBp_H8!^}x5Vk0l^^2SDrSM~3UCEutCxE+0*ZLm1oj4+YomKDq|IGEIg>qSDcvujXiCzUZ(gc}5JH&08<+-Ps=09i}nLNgmTNH(k9N;e6%a$y) zofIAGNiex4#a{}~r(m2{Uw?W{HZA1&e#89jY+x9HpR@ju0I?`Y@)%S8F_up<#2(DB z*D`0tbZ)rw`vW*NzUA<0e_;`cw%^#CEH&?vdtrpLc%td(A_x9`*VE9&U(LFHBdGBS zKu7H~vh~U2bf(n2>`^>~yNB&Oro?}Ay!I<-sQzK&y!?iWMYE1|u-EyE|kCx|jY%!*wK8bPOzU(1r(7ap97 zN0`NcI-yNOYuKO5!m`p*QIS4yZzG>$%b=G?2}`O>`$}53PWl^R;gz#8Y;H%Ru@Yuv zA>Dx*s_Afgh^IiL@bUmjzrJExTSiCqK}^>uda4@mRJrWV z|HkLXFw7@BVAFu&qZvV**K*X1{2v;-`-zN1SsKMseP};yeK9ntfBam-Zq_G&$?f{& zCscDxhVroN)IFM*J@-5HP$xOk)tfwwM-2D&{rUnbm;Fni)E_bIZE zdb=oApRS}mCgCoyuu_zpkfSSz1Pybvmit-J791(NKD1_hQrW`iT`AavO3N089ik+= z8ZgXV-FhONo03nR!fRjnuS6m0h&)vDZ%N4mTL*xG|5eM(tf-n-W3W0Ezdgke2E|*O zlb1V^cv^`RrjSQ~HZ?>1!HhACME0JKft%9-VE&!Hu<-=PMJsAAbEDqAaI6LuQW}>% z$Gb9H5pDa2VY2>=tCA_Fs30&cH6u#JbuKHEUgk#uJ$K#|-8Ia2IZYZ+v7jV<+Rjq? z2uI=U~*$_`TUM05lT^IT`r|odEt3YED{pz6m3nQr6 zn(a_MyILdJg+aVj1&v~I3mc9bTz%z(--B%<>8vUT^G06x8j)I-q-PK&CLXgT`4`z} z(73P+^S-M{7zMt_8y!#lz^XCnduSL@XWL)f`kW=EE*P4tYliPI5^*u`C31KOR#<07 zX1sJUYuFao8}jBnZw$R3!5{7u52kAj(Uwb0`Tl+bemozGr#|Y_W-gY^2t{-vyE~BZ zLQ9=Ja|(7T|CtIH(a4E}IBf6S_tbwG$sXUzx{z~;Zp_aX9GXWgv4T?)ln>f}#{5iM zX==AxG%rvFpMceZ+&B6LX(-tp^aB^4=f&pi)eC$Dnft_&_1|dvrf0_ggpVma^<8Xx zfgD;DDU{$T=I;AXfTlr?oLlBI#kkNQoYfF`Rj*BjjiXF%<%);TB?0A~5#>YoS#BqE zEBOU+?Lv@9O0vDt&8RzIj|cBLDd^pHCo}ZNG$k`hzA4`8WKJ z3Ej}5q;8F8%=wkwcIBmB68gsEgAv`qNsMfyw4+ZX#iTK6v4%lhO32fgfLph;Yd(BBw0+6_b`aJrdO5E| zCyn;N&Yp;p25ZTK8*9OP9|Wmaq6jEuAJWqUe-vWno9~Ss#I!$!wot5fCK@)lR?15Y z*v?I^bsE@yb#<9beEIJ-n~4n3<_rIYfxtZifhV0dQ-jr2y)i{_@A4f6Z8A20+~(JXu3+8d2qJ3GhG4l6k!2$dHxpauJoYpeUxJgrJ1}p6rMUZM$j8xv| zfhxtqZlmo~M@rXMrul2rSmi_E`g5hoywi0q#7Xf@Qwq&y7Pkmw&`|qIzwHd(Q2Yci z{`feEJxBJ5t{ovhYE^0=5DJ^Sv>HO13n7spx##$c@8gg`b#KgY{LztYz9{ox^oMT^ z_hP8qY9>1@vhBPIG0IEpMN6z8H(e>MB4>Jd^Di3h9myP+-8GbB$B)zf)GPD)wdFms z>`?9>Vg=2{hsKrE+GY??2*~>$N1)+oF!Q^3>iYFZO%DglqxNuoP1Nr}%M82jdF*>F zL_aIS;FtPCl=FhFGGIoEEE_BV=*C4s*-1L~2>Gf^fg57!w2 zjp;6I8q=i2?tH-TB*Iyh1I=*{N@kIY@rYI2s6|lo-lvF8G@!stlsj%khpmF@u<6m#1GdB-8?J*EnvLfuu=TmN)carr z0QeZI*trF^DNYf_1sOV(Q36%+%ZU+{=`?`RCm_{2tR#yb)rFar^}j1D>#b^yY|pi~ zLz7;_5uX5M`6|H%zI#=v1qs_CQX0F;=#w88v)*KxCS^aDMna*d186Y6VeVz{=h)g~ z?}D0GJXRHWv*vIRgsE$+f&kYVEkDqajbhX_Xj#*z`4^-&<@H6?GYnixv8owMIs?5T zZt^-M!4wMPb0Pd`VwW;r{zKKN&S>m6SsTY)43CQkb_z~&jiR{DB5SoPmbNoa0*PWWc zML&D5>O9K^^Pu`gdDk9#>rmxU=}Bru2_%J}s6}7K%rgGSwv$YCee*e@$86#yGsbcR z!iHL9fzhIoEHmS%4W*JCOVo0w z-qa8Tyy~8-KL58foS6JyXZ?bt@kmYTCt!#(`$JB2G4L&6+~N4c81MJ1Zg+m}pxxr0 z&|aY;*KZ50`H*oPCFI^uz+&ykl=%s$hWn&0`6{l1ek$My&U*>0FCCZq;BUI}!m~)9~)fa_sDWy$bmesnssL}XU zbvY6K0FT`=`+HfU#O@VHRr)|{l)EJ18vaZLh%PzhRk7PXl%Ou*X@8s{d99O)c@Wbx zW^HAw(Pkl9wgQq=zb`Bw)@6yL2oSZ-%1PEdLsp>(q(?`E!=%G2JS zpj0Mi%e8S}iJz-mFa^00z@O=yiy z8S0s1fGQFo35wmdP|e*c#yi9o5ay8@)wq+LiLz~J`pPE}V*q9FMHJ8)6>{YoAldYz zC!1*(ay3-Q1}u{+)?fHRIm^;!v;OU#7G95!ex1Khk1j z_w*O$XY4|0iyWs8hE7azG41K}30n@ID&wqGNCi*naYaYxif zHoJn0jobS~LCcLh9T~pglHp#O(R*64HYA;-?<=wufAlSeir{jr+((NS)LO=B3$3ov z{Yh?|o|tEVBX8MiI~@Xd01Fk09vU>}JGW-^HlQ9r#_trT3HTi9tg3}G=`o)+i7fx+4G_U&v3`?fmFqi0ahWV4Y z462WkygD%Bn2<~?{|h|RsYW$}!^+;j(k)U_6UJOrl?e*cNX;2d zkdL~md7YSJ{8xn~{D~%^rpi{YnoJ4Zhi>4B4ayk()jk$6?Q1=b4Q&mRy}dE88jnKc z$R^v}fTkK^3jPF!fymRcdM#H#ma)ls-P=y(SDN?l{17- z30Da0&axk6hT`%eG$Z-4Y}&`(Isy$tdIMh&%_Ib0t-EftxXEN^7p^IRR)&Dvv&^x6 zGU>A9oVg(0IvhndQneQ4?c`U|6Ti0*{5wSINy7RBE%y-1Ngrl(M~eXLQE$d4RuZDU zu-|2puq`r=nMRSxUjd!6a?i9b6?+9*zViA6z*p;i0x)cUe>@6(O@Dtk8Ca{@taZ+A z7)fhRQ6ph8&r*EPRYnGmmrR2AN~uI?aAv&z&VHb&@G@FG!|2)IG%sNv`If@_?|3Kp z!Dz0Yp`ZE=rQ3%nBDKIFpwtrPuGJ47C3!OENR`DIpbPb>@v{H+*HG*z^N5sB$JZ;% zpm~;euHG)CV4vXKyv$$i7%ecoyxb_?BoSr(#{B}7(X%qyq#(mS*m_6wfkLu_mD@Le zg-{gRtQCohYzxIr*epGLC^xw_sjC+Ln$|FH?)}kLsw<%O`yR9~ zKKC5P73h)Vn#OA5AyKIt3ewj!__gqN1Hw(z^1L6E9^+On$aD3-@gUBEZx$AGU(!p< zGD`hgqRq%20?*HMYoLJQ(gaY@3H6`_bPpYwpdwFZJ z7&jXKRCKw^|BYm-NW75?_3LQmCR-@^{E}&c*c8{qErvKM!CiDC_^#VX9MmD`4ql)o z2=xTb#wl~*$Lwb$$>F06+HqPVcvb!5FM}Q8((G5}T8OW=f$VnxI}S?3Vv>88$>IKE zkoZehVH~8KVmGQyoVS5LMUVa`P`Zo{)z-PTDiK;8J}L!UZ8NgmzR)|AU)-uxkypdf z_Ruz@c`l!H+?kZphxY#M6Hu&Yq%US=^T@`D2J1I^hcy9Qu47tg-zs|YX04TkRph_E zILrk*%ndod#b$R2er&JmXZ+OylDr8uI#a%Rx}=T199TWp2#?kXU0`iy-;ZtThH05Z zKr!>W2|b<|cv?9QexwsdttRuM`$^>()yvdOT9;baKc<=EU1vz_d(ebu;zDF}R z>vv*Ly>4w$JF5C;r2TYai0)~>;P9WgY3_SF1&zP#zbxij+yiU&6BrVZ>UJ)n2m(q+ zi?WyxCdhDn57m>6)gqzPm49!Vw7(<%L#^{Crf9E2&m2MYdw3qgL1Xyq zq$JE&z~Q%|ZA}Yd;y-;7tz4Ff*_q)mviMut#~R&Nj#&F(E3AVuHu_kbhhM$J^+ROm z341YcXKlcmPSw3Li57@T3p&KHaHt!J(+Aaj3!>J3s2Za;U-A8 z^$4KAnSa^O-GdE(HM?iDXFA?_ewq6VRvt&<+k=JBri2%~iIMVqyUtIm)v3~elwivK zbz7v5)tcn=DcjX|gy~D4U(-*`J-G*^niarjF@iI_FRPceT}eCV+}C5Y=Bv}2k`P{H zJzi?*4)${uqY5aK!`uF+tq3$8AZ`@y$AU~3SOhPSZ!Gndz=R?XT6*VOZ8ef?C2Z~x5#!PfByx&H>Cr_F!nJ&TD-(RG9lsJ?AGx#Pup z`VTG)nd6?UXpWd7NM_~3J;#$8XZRKi_^mxnA*E3xRDYu4R!4EG`>Y6{cA}zoqRxq-4p+F!xDdkVPZl-kjDyZw#@=*({|5xZuvi!2_ zMvVltwqrDD_Z_*2w{nsB)tS?J_g2xVJ2p&f-r@(jQ{#Wj*wz2Y=et>Id6|AQsmc_Z z@69&tOQFkPq6@!G)_c!$TcX&3++F8t;kC!ET0%n+qmGVpERkzCmoGYWVlF605}r|k zIvE>2T;oIGY?gpZVMeFyPqf}{w$*kyqF1Tp>y3U9vQZ?q&hrVd(L7V>xMdY&ITH^*l!3?Brwy;YTEn2QnIz0lz$uD&|qvFG*BXNQXi!QAVOjK#y5x&%EZ__8qnXr_sYGQ&IdA*FX(gj2a$@+ zF~VY1vhadZM0E9yq7ulN$l8>Toa1!l>kUr1kwB#zvUdfyhw&XOvDLav9rHJN%wI+y zwnZVFL&)C0ReWzbc1}+;H>|S@E<02%VSF9U)a)C@R zeDsH?pZr2S>T?ld?`FUO4C0y3zYoh-#OI{ug57QxP8UeQ%XcpN%|j!tS14c`LsNFS z{95A~v`32nimAbjt|@fx1yadYJnM);vFDe?rjov|KnjwKcq9DLZ<_QHel2cX41O#| zgbxMVJHAq7tMM^MN7BPHELdwV-!ijWQ%64mNW85Zrepcv2p57ai?_gXorX4OQo#8K~X2@>O3Hf#niGQMDm(pO;mS>CD;fJ z&+}&(Rhk=wK9alHiQ!`qa>*7M_^|pcm@n;9fF%Nd!EEKa7Dgn2q9(8^vtkX@e{!^ota+g?TC5>xQc+DRFX4%40=#a^X5nW+iAZwnIP$)gn- zOUD0rLH76K?uxkTUo4Qy<#2Nn517x~y~u2FCkd?;fqYxzfyH>5L^skQ7t= zS5Ak(F^BM1W7iNEp&6^fF46B>8wJM&w2eHoak5z&66bC|%45Z=;iyapmli|I)e!H8 z)qBO-vRd>@ZRyqnjIbwYo=Eej(@HyJ!De7XL*Uf+Q}|?@X(FYC=UKICHeo+WNaxO9 zO&qO}L9O^Bk6d;R`9ykSp&H9svoHhRQxZ0M;p_QWJmLlLPXaa;ts`ZkWe3@RBB%#N z*~Bqz*it50;Spv3z-}C<5Nj`@kO!GW z3B&i5C)%_K{2^LE6;Ef;92s1aCN4H&nHq|+>^8Y^KCgY5|6ocj=6@CAEOT7=WfDV^ z$X-tkQ@dk5V4Zj65K?*N>ZP2Q6Zi<9OOF~AYoE~9tyTLpkwzxo=`tpIic-Rjbs6Oy zhK30()iV^!T>}XT%O~w6n~K+5_)n{8uFaOJIUI>9e%xY-f+HBF-dW^O%4LR&%0Fx- z@s%R+zO~~&b6pg`*1yUw?jwf8FR6S2(jkPpZO`z2o*koH6WG)~Y!L)@Dp{8b7O|n6 zfRyr{AAEufKLM1V05`!3uE=ZtVoJ-ODuFF(de+XVDuea}F+VHMmRx+?5n9)$b;DJM zgTx3EC-IS7*q)XD@_N|OK^C~6=x$8cf^>cTz2GuHBS&#-(iOZ5@}Ny1bkcDK^L69x zBz76`j#iQtru2pxd%`gfyTS@oMiTPA!QV;S9?HGs?!iUjPc?%g#vSiA=7E%Njr#=LN!beRoCC3Y z!MR?7b+AAEx6u;`=ye|QM%NY|jvx5}gSP(kkduF^_x){E3u|;u=Zu2_^s<98nCM|Z zWTg8XKL&j;w6Ej5$}Wa=p*gFL1u67Y_v3~N@=|&W!$)u(*o1?X>yDkv*|_#NkXRF7 z#F!=(;aL#db8r_9GUTrgR3j+<)7|#czAJC~u?;afFvjEhvcPwOdr-##3loAuB}HDc zkOr%|XTgJH4fb;y4?IfH8Xc4mU6b)3{yRj&wfF5{>~jMsu_tF*-|BRBU2PgKQ%0?w~wCgu>SgqIuGV)EG?gn z4iB`LGcixS3v%97U_YN;!v16LzfgB^I%@p{$Q9Lh^87x;dZA~UtJvtalv(OzcvD(0 z=#KT;u8vuvlGw zD)Qp)4C`2vE}kf)3>tLJtY+1tE+jhqBdva%@jATt#ujvGq?X4Py)pt@N*D#Z<4xUG zUfd33?Sz`d=8G)oV6`4sk}DUOQq0HcjCCb$n1kGjWC(fL)| zjCSF;6p_Wi;}&6CU?go00pU}Q#Ks9T7UKC?Ez%Md>IFr*UvaLnEXrC{vhZami&Lm+ zf9cM|r!^~)SFCaFM)%2Zlog|p0q%;ZT6aKL4c#9oG-EMa5UuqY``@MHHI?z1e@bPH z$%&T}n(A@(?;fSHjHHicoSlQ?&0u;tD!W)LoTTBwbM0u0l_eT2LFtVR3GU2=4&*Prw$j$aVfNDlkP2wHk07TQ=ApbG>0U z{$0)*H#!yE30MFG4RF&;LI~jmzTG72&?#_yl7sw;^cd^6O}KhTK+jktQKmf6*fEEG zlZ#yp6JhN)>6mG~@F9;|QnINY?zSXH*=n2h_3cG>I3V(l?6 zW`m^Y2N(vteT4tDVKRJ|fHh}L_ICESeh1cGNMN?BM`g|s6_mOcVMXJ9Z6F+o&)Q5B$`U`vU_WYgIMXtvpJ~)5PlEbVp;GX;R+84m#yfFQSR9HwuL>D`#}hJJsyS*Hn$bK@Fx=(Bke6eT@fW5S3KTSouMgjQ?LG4{kp|R} zUsF{=@i$E{VA)Lz)jc(nUc?vO@?)T}mJdJ(bY4(pQg4T|&zip4r|gja%I#QL6~ zs5uXbR7&s0woyqs0mEsYJn4T9Qr@HI{b8Sy-B)DTrGVqeo|E_n;eB5nBSJK|^`{^$ zSE(gq*Vv$y;ZW*~xea#QEyfg)x;55eV_r-?hT-SM5tw*G*IwNY-C1#*&~k%LpXE$c zH+2z4s(~k|F+|^CpJUYnVG8#jP4*Aj!4@I4Pk?N3XQM%X42tY2AENEX>V(f@Ldcu{ zCje}^eDtgTxV%s%_O0yh`_y2&u=9)xM-SHQCqTM{k2ftkcPV+1Uy0(So8kB-=j|c~ zL|@>R9V|~P*mT-XBT>U~uI_89W|&&&+}v4HK6d*-RdY_HV<$m!sFBg|JA-CLt$N!N zN6_7%g43bWvC@VM`0&16H#tAN|2FRTMHUD6CCNO-b!L% zy<<@szg&4r#n>uC&_5|Rpane~scOB!Aa&l~gk34wB>aG<=rDqSAqgwzROONcl2B4J zc*$i#P5sq;AusRZlJ;~Ooir1OGl`UYi(j`+!^QL+jchhSxEZ+J7x2h(qd0CMJ?ZTW zpMVIAA4rm0{+h?`IilazV}#46U7V?UBgH9up^y~p*2Xa_M9LIABAhVqh)uJbvJLHI zZiquO_oS2Jag&QiO-4A9bPi(Z5I|#?qrFv{_2p0QjKcgZm56#gR%Q;v&Kgq+FvV%~ zEifV@C5CsN9gDsVQN-3RLuKKJst!8e#!+OGH%kWKIw^>NW%7uwt>Y2eB*lwK&R@H27`vJq+tJXs$=0AAFZR@CPY zvKM}cR_^oMl@ClJ;aM`|1ZHGx5oG^xFs{kEe8{gCk1LCptL-%e5@sV))&x+cniu=i zET!W>_a3-EmNU}pSJr9@(Q6hrxksBKrn>Gz&4CUi5JWw{4^bt^TM;Usv#?iK5JUQ? zT<(QVVqF#jDb0e7$nL>9270Koc9$!JpMa-Id|#O+ZMiemYO7$v|B|VA$2-3%;zsR( z3)^BYSLdCi#IjyMhBzR-AU@R7Ab$ayV&)0^c!tu5*FJ=&jTjh*u^~C0j`3oI<2d@0 z1T1GdWhH|<#LCuVV{?^`aRCLxTi&&Hn5(jy1w*U$h<#4o^D@XJU=E zV__rXfk=P2rR>nFb8dg9Bp{K=gsgBX2`(S{1J2S zHA%uJ$PP>tomn4Yh8D-@$gu_z)*3X zjXPR?P?TX|rfEnei8n|<2>~#&d|%Xc45bG`eoBpHSjC+4_7+I0wFb0sTR8lpsAG_$a$kDv+A={@!N%A;T6Us6d=9YNoo($6<6YoQuY=5d85 zGvpAQDNzkRKzqBeG-b)w##<_{DUW%JT~YKLGg6N z|AnRT-d1f@sUU^UWo@EnWnc84r%A4gMoV6u#J$~OSL7(0d*BKa82Y6@Jz*y^T{nD1s!fB-bYi;r0| zc+WfXJ^?5z{h=J>!xBPn+p?;UA3P+ofiPjM~2s>$eel~OO5HrwA+e`vvi5?EsS_-|#&kO4pW(NY);dM; z2GnDejjeK_r&8$!y1JVi?%p+c)&@}v4RYOUVe-7)Z}_tvQ)XJ0y>L= zj)Ko)jd6U)SVnpDWr|4liXlpqhjcE=Mx8i6PwBfwgsi>eNZFqfNw5&9a-(WXqlc2wm%AxC8 zkk_e{`M$<}feo3t&wX{=W;HBHAa z>3?I;(U-knVmM9no6pXgwVMuvxSzxty)4@BN!W)(0Zh?N#_4dUDK-{3d|Mru%(N-S zXvrFGot3SR1JE>8D5ntXZY1)6DY4FsDtXFbzwp`iVL6f3U-OL9-&_g#*3pMcOntvU zme}3G7&nQ=GEx*lZZ_jS$s5HR>0*G$*Y%4aQhUwXQ)bJG`>O2jW$tEs$n9xQI_%dC zj-*ll5gqU%`vQB5g7{g6%y}7_@Yh{Q;3K*LuWS?=KVra5OU>*2MPzgVk4!2KI-+M- zQE*Kpa340L%cD<_oE4TH+uEYRn<}@xWixtZ{0DK+ z>#Vk!W?J+4nOo&k&H16k<`&s&&wZ>cUu?KVJmUG0@fsD>ek&K~>f0Q|UNdQp zIYUd>+}n8p3sm((`;7?avj{#9`hZD2NxM zTkG0cKUv0-`t3?ol24fO!4(qb+mf$uUP~NQR_U?8ls;iGn(J`&)cYJh^ecC+sE!?s z2GfzQ`fxxu-U9le$ghqPAZJw-#M~FoOR@d9?clBnMA=P9`NscA8f`gh~%SWeXn3tU{=AXpBvfGouCOsud5II8mD-l_a96CAvdB|)xjpy z*!laE9oL*_?5l$G94?A5$jf3lRYrP8UXa`$i@)Y_~5nuPvc3`m-1Uf6iCG&U^;MLG1zO;YJ|xQA3YxNx_4@6x4iCqc!N zNg%Rhgtj=YDgGy+2YP;cW|5yUT~(uO4r*PAw75I0L8Bzul4BpZ4&*u4qtS}E?xemN zIM*JT8qHseyS`&2{t5a79Q;al^>eg$_hsw|R{lo{V<>$Va3blnsu$pKfzszvBIgeJ zp{WB|PLZReX7G?qY{+uDS`8&4o~RnQ-r)$bg^1$7FxMFV378n_7VTUHPuoi!xZeq( z+nvhpElSWhl6e2VtEAIHjV(r$3iI2w^Iir;oib&+#q@|7#Fu^jcI!FDkTp;KCx)SL zeh3rcW^Gl!%G-?@PP~{o#)5t4S$)ps=BQ#}Y>w6JRQtpXmE}HvtA?k9QF7f84Exud z1nkyi)2JLfGKuq{Ignb8g(nqS`nFg~jA7{P&Pg+R6SlsU8ryi*w9>UX15#B=4Tkyz ztl3U#N(AnjuZ^fYsm#R6KKysBXHV5)!wwcD{{;Bin9=hf*F~IMba%#3#%D8UXa~ZO zN`3-<&^(9ueFA1&eYX znXTQu$aY9_$Qt?QMXxlXIyU?0FlZ!*OWJlHY5a?np24lY>*myCyIJTkup%3>K-te@%_$O%2tgn3(R{lp5HLT$O8BArr^$E zmooUfec)Sn5jXVpt0JLpIs`8jyGd-Co;+d|Bl*QEw29O2i;H zpOx=X_7FA)4hq8ij7#}30tH(K;jVwu+L!a06sF0KMNq4}@eGSeZ?iwl=}VeWVGs!b zBa1>2;i=@}yR-|%3kQ76ZjZ4tsuIAhj0Bx)h`Hpl*Y_nF#y0V0NQjOW*7Es9$$U%7 zUK*o2ANmW`4&Z|{+$0Q=V2BYjb(f}rS*dUFg~XWrcRRlqRNO|Y@g*Y}@Knbe?=?yO ziCK9NEww{u2V|O!C@w&ojq_9$Q<>YQt6D!K+xdUz=1AIFX(Ihc=z%ebAwxjv72XEt z7*_sb9xpeBO?D06Cm$msTuSPWE7 zvcw6rO|u6XN}ez^%7vFoA~`o{+Y7Kwv9c+gpkVr#`{eYotccMWwy6gER`$M|F8(G_ zX<|UTl1{9n%Dsq|1qi6+BvyJqYED5n+UzH^8_QqRSkL3xrzyo$m}h>SsjVzu13(Q) z4*_0C#zE2k2?iSMJ>geaeL^2qMF$^Z0bidfS6~0aS!^yXWOglTo{qGM0<1)9h}3aX zw-L;c&CXk(ni#)@mJ{0LUmclA9i4TVE9upkQ_dXCv^E4q3{o>eYup1j^2+1*J@ZYr zQD}KAZS#ME$G21T-D*YJCoZy>sB(l7Q3=w2^F@E=?L(cZEQ3i~V!hT`(y&zXV(yOn zW0z9rnM;zl9+)Dpsth@%r|FDfT}Mf49mh)Bv5AfO$>C4*?aVK1_D($TXb*`)*m!`uv_E^5cy{dfhxT46ELvrn%E=;&VBA@&FiJU&fik89h0xp>878Lv{PCT)l%T zs=Dp0Dw_|zPb7UdPl~WuGz}fwW}4a=5wn_h?C_J{=YG27OtK?>4$7(druuLf?Wb@~ zr#B(gQc)qpj>1y7ZG7jFvS(Y%M!1E-K?1i*jzGhZ7dzrQ=^rd*S3J?#{a(xjNu_GQ zJ1{s#FH%k}GMHsIz*=eNB$SZSk6q)2e*(#5N@bO9PGDv;H%OG&uC|!;- zlW|Bp`6|?i(BD|9aS7}g_GfC8BFNSqe^)6Y z-6QJuB5NsOr_Z_u|G!_XnZf`7TVwpQW!0kr1m!jjpQkPVykQk3zePW%BIog|I)|s_ zkzS;qpMWkMA~6l~N(pF>llr}*Q%lE?Xq{x&X3>6t!_6>M?uBe@L>4S*ow;g&YYLyX z^Yh}w1D6mKq(V~UktJd)3jm_;=H?|)3ws1dEUY_(YiJi+;+L{97DYZITcc&>wp@ZF z=lQNXB9Lj9fKrXzi%LM)E-LQlm7-wYOadO0S&CGuP2~l2R64FZ)cR8UD-r#ij)Q%$ zMB$V7qH>_<=w_|HPt;S-KlZ8Y6$L8;ucay4jrBZ`^nr0y%`ydlR*cdd_+H6De` zvh!NZh$bhqc!p%QTw|5KGlkq*FnTCWc+NU zh%f1YFBTD;(z$HnvNRPXy-J+%{OqG%#hd4 zcZRl^!q<(xZs)r&a-CAF^`M!*6xy@DxnJYxrl!~Zj`nEniSJZEowH02{?3L3f(ET? zyyZA4XvPR_P4cD*4e}709{U-$I>&YxZeekjEV9W|UtX98pCMxZ9ns=bRDViKRetxox1}1IqYZ$>?I$CgXW38dPugj%EVnFk8rwzRw55&)4+HhU`r@C9OL)66 zq`@`3vfnRW_*vbR(8O`fAr)FxeKill~pUi6zXcLHow@2L~q@13q4q?RXVK zj!t`2c?5CW9J)#b$|PN-@(IcO$OH1M(;*XSGTvRYEU+q%5#VKj4UGK6WPVk7B%Pns zuOPU;k>GivSk_Pel3;?E2PETY&rZ1OOj>A>-1dRe!5Tv>p&AJ=(L7+1ubwup(n%-K znnfPSvBuvgHEpBZ%JE49+f2$BG6_^jyc}U01oiUGSUeEi>dW!)%WrNc5D&X7=zM_~ z&pE=ZM2kT!Y+tnRM!SpiwEh$=rDvTq*Mh_N=STHY;1}PW=+z z)bHBHS4A#Du6fAF2Q`%YB2CQms|Sa@Nw%{Rs=HSJ5rx?!z(RlvUm4uR=PFqOGlGfk6a#^qy zLYxA8@OF>Ng51++4c`GY-6$BY%PdS>kOQ{Vg>&;BobYf4b5;fv}dl^>FR5HgScY%5mSwTWE)p^et{pp)6J#V5{ifJOaSkHM7Y=e$Y z)*UmEk?ZF}Beb_Lt``FOjf|G|KNBU$mBgtT2r+^|Bn%v$K_8_(qsq4OMR4}c&lw|W z;AD^p9@r!GseCG3+ccVe(>!k@u-K7hvkjaTy%#C&**ak^9wBz8VZ& zekAn$I!L2=9l&85GZh$67dbid;}sd=hHV$(ZNq$AbM6Ywoty#)rHD~b-WsPd#6qDcM%}(&@RsC^bLdafyX0(o<}uhNjqS1 zq*m(^rTxLYRPGglW{fug{KNzG9D09D7Pk^zrOmjGCN7|3mF1LV4=_h0WPeds3#IB0 z*@<-^!4~OocBhCY;7fDUqT|fv$CVb|J3DPE0R8O77j{QSImwMO2|YjqJvcOEw$knj z_^pWQ$s+1u%apgs|_F{EpI9)0QZBH z=iFd@LwZ$(o}Vhc*tL!suWVsOj#N#{AZ!-SNE{VnTdyb6HEY@J9hNtWM0u@c8zzy4 zOp}0I6dCExGv~OUY6?A(Ivg&oq%^jW?Yod$2S^0FHw4coch_M6d6VUe5r{EKEjoz8 zw1~qFcd!^eK3od!bkilap7!^)HwBhf7Z65(?%Nv>SQGN{4s*sc)Ky%1O}Ja6f)#ia zsxVE#^39x#anvY1IXqNqqLTuS?u9&2+=pnbpmP(tZb**r7*almjGt~zOHh*KWw{>% z62uZV!weJ)f_O9m%sOnNpd1>5Tosc7;&-^v;67XICCtm3od8LqmD8&7~0uhJo(S= zeW|TySxrvoW&B}Hv_CmHGC6i~!vl6s?w&voN)5tEjH2VgQ>S*{wUJ)hSxu+PVYknB zjJRWhf-*7AazAS5legCGr~Fo}qpT7x_IONXA7YTZyghtb82VBnmf{p?8O^K?C554j zB_Aq4etK|uJOk6I6iIa^yN1?F_2S2a6t{6buM@_Su_!td;`BTpsH-@;L8INS*!B4WpXHJ@as6x0^vxpL z(@>LFzPO$U8as&6ExS;o@g!=h21!;Nk`75bxTh5{COoG$&K}xz8p_g8g`#{%=Y@FnQUc>u|xV`ie5g?-^*^75njOY zvIaP1Bn)TQ`&XS>T7*(&&trWi6?owGQfz~=Z~g3Ri2ln zPXXM;cJl642Lslgx9xtc=`4wHaU3v$fS!d( z;1GI@5zk(D^R7O>((~%vr0V`gj9Q3eN{?o=w=c2A3Xm{r{{T-wfC4MPfAQ|QJ+zUk zG(s6;F~~4OD(=pHhZSLO_OYo(y9`Rw1yT%)j=p3LnDhOs%j*7&YNVFVeqIf**FoL0 z=!;^c4r%CE3i-y@?UrjcFLbRWPZV;7C`T>nkNmuTwRflewCVD_y1E~}3RH3qP6j_y zisEX1iEHBBM$#Ya5T6!(0~Ck{EGl;LMjOPySC7N?so9I0Q1NO|;0q2q_ zX^cNINUWq}5ObRH8;`U;&)jJmeZ9rj9!2S{s2hjUc9j5zCv4Zwn zO(#%>Nv+h9;&mw^cu41sHb~2{Ke;S@c=o3BucDi=N_vRa z@6CPRh||j$J*$)In0rs9>-N({YQ!T(NH2k$WE1oRV?K4j>l(PzZU=iLMH#kaF(*9o z2cNzx&HFdnvma`rYv$Qwv$&b9nS!uY{$58d#!s$Dp!TD-O?$7}!EL8U@bH{Ot~@{m zDqo(t&*VqFcl|5U<>}IvJZZSTdsqF5lPo72eUC!8?K&w`w^4B`kf^8#$vrtguhW`5 zx7Qc8l1B}s?%)Otk&}WBLHvlXHHWm?t*)tWdv9z0QrPc|ssbZma!JP-V7TO*Wct&c zt@}ysGRbc`UP}*o0FA_JfW7_1-r%=@IbqkAYJ9{}r z{8AZvvM@nFL#WT0<$p8jQ`WCE$feS)FH8h#C+^*)1w!t@X23lSd7iJ@8REVs#z_0t z1*UQW?PbR!10KCS`ev%`n^R*Hrs7A50Kij&8k3wZIT&UgJpAhULo};&lK%jIvb89t z(nq}MJ&4dQbhc~B^yV-*iI=-l7>=Y9fym^2YmM!uquG55Jxu7VE^gUY)mt10+A+CE z>*_O}4hKVCd2MTOmR-d1q?0IbyqSqRbK+(>&NIe(nom-+Wx7i-BJPQanc)~kK3F4y zI&|`^`h5<3d40*{ZFowC$(B26F*DIR`y0zqRq~L7Cld3NRIP*N?1Jm`R%u2xj z01Go2C3SWf&Q5Xq%sa7N9uDmKNK=Q%j*!mpoS&pXr* zNDbtd?FE;5OUEpQm;g&{$m9ag)(2uQk&bDVxc%ivyjOP>ghZzC93z`O(VGX*SQhQ=$cx#Ec1B%3*m0!p_$f$G@ae*<$L8^a8*Z7 zG63Y)Q*Ws?)veM_WVK@=?IAPW$PQGI>U>zFXRwa()Ge*u-Sn=`uPNBl1CNw@?G*VP zHAJiEQo8!PAp@9_Qf?5slIasVJ_ zE05R8y30eUXqWNY-q>6mX>mb&rrl01`@P5R6yyTu zINGPCIR`i#W}mX2(p0t(Y2xPbVq{dFQdErOE;^o%dvdnNC z1yFOq83dj)pFDGAVS04yJ8=P)MQFzPGlYDQN&p9u_wu7^`ieS1r;C`(GGaoCKJ8y5 zPb|a1SC97R;vU`0%Tsw(WnBau%*sNQ2M?;cFJay|z-`K@#rO7;#{{WW^ zhF6IOVPeA@MlsHEe7XvH>g--ygDlG>tA-u!cF7ZC865RFCmk{LswcB^I*6|vss;@k zc+~PXvGWJi?bC zKZn=?D8Xmj$sWB;RJAR|CKn2}h}!D1TFEuEAf$6f#}33~^u`8x$GPkEs{z^;QDbd0 zIEo}Pw|A1>VVslv#~^(=RZO#zV!4f41xLp99xQpDIv!6HiH<0vCR?kCjNRcelZI@Z zkFF@gJ0exV&}*Hq66$95HzGOLGsKu6zD`HDIA7kVuk}ZQc;vTzhrS@}1wqShBR4{$wzJzTQ6Slsz{untIph0e)h?e8b>G_po#QTJ&s=(E z*NSG!Ib(VCBQvCyafN7KjliEF>s2g`J{e+7)r{I|Z6&0ErIs7$w}Zw2V%grU<_R4t zp?*G9nhV>e4Im(u7*p4u)DO~`iXQgqJLHiin1YFnVMsnAJt@$(u)Uz3S6~;pm=TaZ zhwD;Oe4xfD^29VkP}{=Cb1#ZQ3CT>7K>C68t0*Oc`&phv3{q0Kh%W@^#CYk~^c1i~ zuzvDs+jMfU%KWUSfzO{5cQHV%s9QF|3MfPYa@p(ks;id#lB%z;)VFD2EVkD3nMrJv zRPZJ^13qMRKU!i&hgPwM-6Sh@Xis{IG2VhlkDjCj{i~n4zB67+a-w4%?DO)2j(YaEG>r>Sbnh*stbWoCAtWQ;ym06i2y9 zUmn799^4kjPZ{H%tq-(MW-r>^VPO=Jyr*jJRD9$Be1&tGPNOBYNMr9qxh*Zc zEfu!IZ-op-3#rC`dJe47TUpw~s^IKq9Q^H`DQ-=TG^>Kf#i46Nx>pT`Snx^15A_NK z&Z#B4U&9vh3&=!d4DBP&9VsYfxbKSIOoP1*w{Jzl{{X)ktu@usS{%l!60((FGIN8U z%bJmkLOJok_K252$dY}4DQzBD^xa16 zTr84X;|!qZCnErRj=z;NXLA{j0T0kWFcxNn8CghZgMu-POz6U5RpQxjQPnUIRgOt^UVhATN|6FUE(Ru zBO`&gJ%7DRQ@j^fUkr${NxO9C9;5!1q=J1xyQp^RWn3aONs2*i8o;Jf(Cg%O!?Ec z^ILZ-b*S9Gg+UM^i$R3Ixqzp$mv^G$Um zmo^ZXK?Fq~3;`dAc>&UpnXIhF+ezhM`H{=7Do?5Nq?~suu0^`#7uxmm&u1WsoJDaU zMwT_f0Y*T{^6GQ!D!Wg2F*Gnp$sACSBVmKr%;TOibMH+i^|yvArALZp-xMP|m3ick z&XkG8jl|3$$znF)bL+>yy-TR=NHddsk<(;dI(aT-SCVO5B7!n@oNzPe_4cFRG&cqB z1ae!c!n7*GAdWZ#>S|4=U&DReG~!7LtCc()k-I&7y=jOv`+Z^=q_}m82#K0Q$!0%= zea$-B<;fJCYyovPbajz!g}kG{WX>`a=RDwK{{Uf4*vA`KPj_@!sz^*TGk?TTF}odc zo}Rrvm1%1n7Xwcg@=tHOy>*ee3ywut-pQt2ZjvN2!x-8l&xaTsW80+(dv|?<8hpOQ z<9pp*-So*}g4Hp%e8`)L>Od#jvZ-|a770X>K@_rXY_PxqPoS)(tR7$F4{;3YdW15_ zi`}zB6M{Dn444D^(`U4o&_vKYWLrw?cDT%F2^{0s8KkvI40cw~C|!#qV(N>@YVVl_vp!9DDhZO@9`-XSBNlAwPSN3iyEF^`!6g zyAqbu_aI50qJehA!3aNzx$~x+xJ?GBQPOsoTerJgY2uj8E6nk_k;;tZRYZ#R@H(l) zk}ER?JLQq# zZKr-tIr7KWmbjlFs9;E9a((*Jwk}#pV_+F}4hW|kY$bQdPGi*t#e*Ny=}Pv>;%j|ED|lR_X&;0Nk&~0!2NaT#eWG3guG@Hr!`dm68O}}* z@0zdFFA{6Cy6;Y1+rib9$^Mi_MOU*`8+*unM0GqGrqGdI;hI6clrsW)=bB{{m6B3v z(Pqm$*GmKhx(-fG2iFvx))IK-krG9T_NZa<^T_`ItrxRo&uMof{OgP`;ErmqU!GAQ zh&LVP?D^+3F{+l*wI?1MLN+Gycaj%dm-Qrq#L$Wh~hIP4>tLEh|l6ZN4< z3P(6q&I_F6)mOXl45hcBWFt36xnR43?NA4mb60S@TAac%vLryODvX`pwbFKFLDkwb zovaRh_@qQp+eL9SC>7dcxcc+wQWALEzIuM6dumWj%|1r{6tSpdERtbc8Nl-%)SjlL zZARwhbBvsjJ*vg-=95jCvZ`W@LTykno~P?cv`Ft0wn=2`5v}H)rFTdsyzK zf=OdY_Mpx)=fR|}B$8Xagewpj?wPp+`qkNy;ko!o&LJ_652w88i03A@t->bcl{T>9tEs;u=p%bUN4jKVGV_+%-PxgBZi_>fshfOuK?s=*q= za}vjp2^p)_G?kHcqTWDkROz>I2@!!|GM+*8p$$Ut=*?uZ7mh=)NUAcxbOiOKF0Lh# z={GicHD%eNvcWKT(Cwd&I#p^n$ZAWY32Ip&Smm7=;5&nr+7XK5r7UckRKC^B$(iYR_l!LiP9PlV95k}Yrhi;wR!x@i0UV^Y&maW1C9YMFVS)yiF2ZNelPc3tPW|`TFk%68EW}bfFh{T9CWb=?JhVl!8A%zh0Co&KS%{6-EEn|^zt&XCF1oF#!CA+uXwlW1p zY1#|rP~atZO*E`-m~26sE6H#!Be#9gAYMr1lk9w{OVtT?1_|oDYIm1&cQNujSn$wTGEZqboWuZS`Hncjq*uPQw~d0ijBF}%W~)DY-XLLqrjD8u|3qw-P>B3M1M0D+sWtitgYTLQ5M6uE6yt_x-3yg|JkAt BVJZLs literal 0 HcmV?d00001 diff --git a/lang/tran_cs.qm b/lang/tran_cs.qm new file mode 100755 index 0000000000000000000000000000000000000000..10bc0353ca997ac70ac0f0e55d16a843fe80996f GIT binary patch literal 11978 zcmcIq4UikO z7yP$k@(e!riJp5N2L0U@eN6Ox=VSQ(x}u4TM9)hf7a}nwdVkIXt%=^#YeD}&^uG84 z=+ok7?H57c521^Uj4 zk9`Th_uaJO%%k4}eQ?E#A3P>RW~!%mMGo}to9Y@dhXl%7U*|-?)&Rc36VR$=Z_zp1$|%7^H1BL$9oTd0{hK9(R<|MUjTilcYYJ( z(0{!5j)!gp{alN_plCkdd*`?QN{IYa@0pMM0JPcr`!_uR`dIRso3O8eWb*wV=>gr6 zH14?z)J-nzgPaDhO@36v{svDZPkxs4;TC-(dG`kJb^f~KXCIsZ)swGo2H)qOPQLog zPS9tP|B?n@L&?<2ukHrDF}3c$VGl#Eq_!L%6XJrQ)GvJidcNSJsn7rPKZ8D=`ufRJ zLJa3qXCM6$=v61c?jQ7=k2G3n|d*7cu^B+R2yu9z_e|Qu0U?%fVn1AIrGUZ1N(6=(y z?bye~*JbM0gTIT9XMXdJlc0Z;x!Z)CE`BF-|3j|}vFer(gW7+e5jOSMU zSN7KN?+dYdDqE=hCFo*y;U(;Q^`B<%==p8Xx3Z`9z!ye0WM9#q1ATw?%`)s^^fS4! zf5r2o|C!sr>FA@F4e|g|{uDb#B69ZrQHSBBs3j>dj9u;Ck|G*Ew`0JoI zoA~&>74URTObcDOVoo?>9#;kUenC`lzly86@E|5Q82<9px;tmuWvyoE1*48-MdpyF z7tKa>MxRZn$qsXfXo#Ay#cP85?ew2RJy=t_&*&?yK81vxeJZVj55CA(izU(aZ7A4ujcwDT`T*(4cTvH2pO)++bCwwz*Pt zzbnOIaaPPGR%4hZj$w*L(S!{JVjbG6+vNt9*Xo946g<XG318?g+RA}uz=JCT= zgC6GiE2MVYb+cTN^GDS+2rFtzx3;jWuv7OQsu_l~yy&PAaSIg!CDW&ET-%t#^w;c_ z1{kNFVPWFgqL`4%ZOPFemw`i0Xii&{`Dw!~!3TA_V6?qtL~Mh87ctz!vUB(}sSJOL zfg`3@fqXPihiMgLFp8U}2G$)gUBGN^%g&DBx_}uc@ae$bG_eIw)#Uaxxz#2ePFyF} z$R{W=S4`s1z?QDX-Rt2lv_AeaiP0PV@z?ttUR!qx1;eem&M{d3M8T9_4)$jF}YVaO+x8_jC=B(6(B!rYkaCAx)mszK*5ZUU>qBL#a@H^ZfL8IEZOA z?C(SqF7D1NzerE>#v#L#5$W6F$~a5FT@A{mMOEc~=rL3ay~dHhP2zLE6ns_sE%!W* zdk650A)^(u3h(R!W4tEA96Ogdif4;bh5UUQ-_6#Dc^Z)%g&>UIxUE_I@wq)1P5WjV zJd5xA{V={+xJ&*RqG%Qqz5tq6?)DA&O08-@xsGjUPH9rxPkXk;HO5g*w;a11zSb5H zSX(ztPlFxf3v58%J+NSFg$kWvT$|C|vf;rqG~F(0Q?6lXE~5Vg4J6LoC$J03N5iff zt*b?FPvfrRt`m};9oosIM=FMEXicX9)+~z|zNvW?L#ygup|b39m&)|6;xJRbDb>JK zvV;s5q^tqgklrrmg()t_zKVk~T=+sx-PEYomd!)M9d1GO9}om~3bAB&w5(k_uqVc+ z)+BBPMk#@5x;F6&lUWs7UZR}nYyMRIN1>$(^x%54!Z z3T3$qrOUK@2*mTST`8k32i@PXfCkQ6SO!*WN*mT?5~V^I8K{m1c0^0|m4dLh1=it; zAXIIDyJ|85GfR(adb#WxutrCj9gP7>o7ghz%E%OFcpI=tQHrrHms@t%V$v6BUd0Z* zSmbJxR8VL1$U_&*BPM7=RQ-Xes%e{WFOKL&padpVL4ZIlj4y|PNp4yqPs`BD4T+7q zr&uE)*CI67txFGqfvf}}U|`13tAXs6^^_5@17_u5Y(>IiVCxPK>D!ACp>5MGxv4k_ zGle?{nh0_n84B;oZH*$L1f|h|i-$VQMcSh;!lVMFQi2i0xd&{zVln)1!>z~T$Q(9C zhxKTS!H6AB!E@r>WDPXbY;A*yhNyz^mH7)86nB>Vc?NgZJ!sl9irOx-STrPri~^Ox z?o{DVkW_(~`-~2oMDAcjWX>T#P!7wSpoz_56aKHo)gt(6By{<^#7?wIe}UBpb-F9U zCZfaUO`Fzg#)+E2s-_?X7F|^#OH1xI05r*I$1>}2=yfQ{rN4SotsbNL$j;)%M45Y+ zi$!8z4%TTPATdFn2rXrlEaODH^qJpT2ob&5GUF1eq1>Y-0aj`LH2o}&U;-u6GA1>- zS>9=5#bMwUCTC*AxAEDTKl=BWg*ll%-G-9ya^8gygXQfm#iS292>PZjO|L5;=aGGw zF32`&XP@CTyvuWeOv!6RR{vj^lzfzB!2G|!q&CE6>s8|%m~=z}Mi2OkD5@b59JCpT z0Xb8%TjfP}l%>{!zJmz|^AfB5p{Z7{fdcFvITVF-;c*g1aa^39-|g6_XXIrx^&z9b zVkW?ATr@gR`THUigBarvOHVs>vt1NN2MtPGvxIEH;1sS4(``({)w=9)P*&yaKIS2=7W*bAa5Dl31s^o(AZvzEov8CiEThT8s+{0^gJpt}I|FPsCQtb&8E!$KfP z#5s?@7GUzH%1XFYubHkH#Vdno&Jhei$}pq3M9|zwPoV;u)fEKk4hK2k=xd<{LEnvz zZp|TvNgy4S*&r&VuziMuw_ei=rWf0j98vX#+*}2LuRCrHOqm8WUU2N9@7>)D55v2H zlB|gRhTD;Svi7PtRS6&B3}vKays9(+QG6k*8T18R?jUZ4d}py6jP&cxctiURnudte z;F#)VM}R0>F5mQhOaZ{v3z9z%bj-?-2yg9060#iwvd!Wm#Pc!mLkt)|x?6IIYF zFhABVS|ESrmrOUD!^8g?;KD}yC;n){@L7H6xSGH-^jnq?>?XB4J{vKHmD(J}Y!+Ah z`=6bum~{=E3|adW9nE$;t!CJ|WiF!Cp+bhHd)k6axL#|8@G(|KhfteWJg+vnabwA9 z)@!cboH*uGY|~g|^Jk-{*XK5FzIr+DpB7sqwVN($I$~>zRs|pScZgMauO&iUE1?Hw z74A}OkUkgGbmLkbXijgK0&{f$S5w;>rIO)E=jyiatD}Gw40gk6 zM$~po7F+Xma8U$MSJ|aq222k^Y%F$ZC4`Yd#_QV(AW-)VJ066MB3c&`&s@q+0n|j_JZ7?`lj}e$R`Y&^%p)=r>4pTnC*3JzjNJ zK#a6N)i|Vk#q?-G-HNOdXU%cF*jB|1X3(WM0mAsIOwBkbTH^g=SmBbE`|_X+c*7ql zk6={mFn$BW&|aiF=@0Mon}zYCa|q>r*UKN3g5{a^GX1SI^!YlC)_**G$a4+5?8&k< zYUv}eE()0epWWSVP@1a)wbe`P;H$%-ZVOr`wjMML`d&O~Zs-Xuhz2&CNsa^xB3N$bL3HltQMTwP{8<&Uuvi(Y= z+cC1(M%l}a9Kjf#k%rs5@C$$KY>?xnsN)2Y2gYs!37OzKd=#3RGCdnzSgsv)fO2(df2|tyqvp%t8&L_xZjAFro z_5&0`kg7)c$I+qi@{7?!ZJa>P8JYpL7d%Zbd4{X$wVGuXWJRi>we9Jy7ZZcd+wmUG z9S?(b=Bgk9cAP%?D0v5-BTk=}-R7Valm{FMhKM$V3`bRtQ3=1%LiXxVj-i{)*(Lcq zkL=japy*URb*kbu@bxRjn5qe7q4MfRy52phtQRpK}(y^Itb4{ z`3$*rqyj0Ze8rvt_sC|ZlISAlCl~4nvQ_cm>GxK@v<>^Jw)ZEtE_=FsM0afz{Ov{_ zixoEJ3aF{ur@`uMnEh3>R;(sI@NUkm;Vl>jIxS|k-CvPsKs$Jj%x6RW4WLZ)XB}6Y zZJ1V(?HZUpk~`1l$FYp8q>6YE#4~uVSd|m)E~yhoosrxLn87imD>)k1yk<=vOS)S0 zINfr}s9cKjB^-4+wXIREws&r+vTVAv19Tt(vw`OsHDAo$pvLE6BtbPjC&Z zH(@tR@R7ES1$M<|Ihj%(q{i{sR~@FSYP;RXV!^>^%+3RGFI(;bZaPS-*ySu})kdL$ z!q&7YwNf~@suwou8qVv+`84G08dV2fA+y9VhlZDi>e)8RQ2e|)qmHJMHCT8_%(vn# zD<{6Ku!K*(q@lx+gM>Dsd#K-vJPOy!m=g9@&?jVW>qd&JWGlMWWW{7`K2gr-PqaNm z3~q0@fUBtJL#@}26SEQeY(h^MV1yBbv12UM*XwK86$JO@m~7&8^Dqn?7|GB6>U~?~ zscH-9Mg{X6;tq|B_TYhc^^TYat?>@~BPvp>L?-(sQj@`+WrYpFwtFZ%tK?jac#O84 z9T!GW&dm%#OwAbFZZ+`r2ma16NUw;aY%Qwsx`gs<+U~_`RqZ&Yt{G$b($D&kWff#k zWwzmYY}%sR0Mb@KT^*aXx+$`~qCDPXA4c_C#9PsLOd-rh?d}1DNVq(2a zu5oB*5V(c82}j`)?}U)~E(7i3<=$>v)#{J&#Q^#%jkNp3wx5T!Z1j0}BV(DD$YeDu z^Oglq4cAS8nLIX(hg++nbvfARtik(K4Zck2JqYEn>rULmIzHHVW-ksZ8_OMNjkb=X|5%vsZFHA$n!Jc>lh6a`P0zyPMhK&HIjpC@;t3lv|R YGYmj@ilQTM-hms*vBZxrKd + + + + AboutTab + + + Translators + Překladatelé + + + + ClubTab + + + Club + Klub + + + + Budget + Rozpočet + + + + Rating + Hodnocení + + + + Team spirit + Nálada v týmu + + + + Current position + Pozice v lize + + + + Form + Forma + + + + ConfigTab + + + <span style="color:red;">Warning:</span><br>You can download data file only once between simulations.<br>Data files could be used for building statistics, do not delete them.<br>If you want to download your data, type your soccerproject.com login details.<br>This is just the beta version ;-) + <span style="color:red;">Varování:</span><br>Datový soubor můžete stahovat pouze jedenkrát mezi simulacemi!<br>Datový soubor nemažte, bude využit k tvoření statistik.<br>Ke stažení dat vyplňte jméno a heslo soccerproject.com<br>chyby nebo pozadavky na http://flyspray.johniez.com + + + + soccerproject.com <span style="color:red;">nickname:</span> + soccerproject.com <span style="color:red;">login:</span> + + + + soccerproject.com <span style="color:red;">password:</span> + soccerproject.com <span style="color:red;">heslo:</span> + + + + Download + Stáhnout + + + + HTTP + HTTP + + + + Download failed: %1. + Chyba stahování: %1. + + + + Download OK + Staženo OK + + + + Users data download + Stažení uživatelských dat + + + + Language selection + Výběr jazyka + + + + English + Anglicky + + + + Czech + Česky + + + + save change + uložit změny + + + + Language selection take effect after application restart. + Výběr jazyka se projeví po dalším spuštění programu. + + + + Error: + Chyba: + + + + Proxy server settings + Nastavení proxy serveru + + + + Romanian + Rumunsky + + + + Polish + Polsky + + + + <span style="color:red;">Warning:</span><br>You can download data file only once between simulations.<br>Data files could be used for building statistics, do not delete them.<br>If you want to download your data, type your soccerproject.com login details.<br>Bugs or feature requests on: http://flyspray.johniez.com/proj2 + <span style="color:red;">Varování:</span><br>Datové soubor můžete stahovat pouze jedenkrát mezi simulacemi!<br>Datové soubor nemažte, bude využit k tvoření statistik.<br>Ke stažení dat vyplňte jméno a SPTD heslo soccerproject.com<br>chyby nebo pozadavky na http://flyspray.johniez.com/proj2 + + + + Lithuanian + Litevsky + + + + LoadTab + + + Loaded file: + Načtený soubor: + + + + MainWindow + + + Config + Nastavení + + + + Players + Hráči + + + + Staff + Zaměstnanci + + + + Stadium + Stadion + + + + Club + Klub + + + + Load + Načíst + + + + About + O programu + + + + Performance + Výkonost + + + + PerformanceTab + + + aggression + agresivita + + + + play home + zápas doma + + + + play away + zápas venku + + + + count team performance + vypočítat výkonost týmu + + + + Results could be inaccurate! + Výsledky mohou být nepřesné! + + + + Choose a formation + Vyberte formaci + + + + Long Ball + Dlouhé míče + + + + Without tactics + Bez taktiky + + + + Kick and rush + Protiútoky + + + + Passing + Přihrávky + + + + Defensive wall + Beton + + + + normal + normální + + + + Set formation, aggression and players.<br> + Nastav formaci, agresivitu a hráče.<br> + + + + offensive + útočný + + + + defensive + obranný + + + + This version do not penalize players at wrong position!<br>See http://flyspray.johniez.com/task/14 + Tato verze nebere v úvahu horší výkon hráče na špatném postu!<br>Sleduj http://flyspray.johniez.com/task/14 + + + + Team formation. + Rozestavení týmu. + + + + reorder players + přeskupit hráče + + + + This button set on positions with wrong player type this player, who plays there (LM on LM post..). + Toto tlačítko nastaví na pozice se špatným typem hráče takového, který tam běžně hraje (LM na LM atd.). + + + + Team aggression, same as you set in match. + Agresivita, kterou chcete hrát v zápase. + + + + Where you will play the match. + Kde bude zápas odehrán. + + + + 'Ind. order' mean one of: Normal, Play along, Play along wing, Play it out, Passing, Own chance, Targetman and Free role. + 'ind. pokyn' znamená jedno z: Normální, Odehrát, Hrát po křídle, Přihrávky, Na sebe, Koncový a Volná role. + + + + ind. order + ind. pokyn + + + + PlayerDetail + + + Position + Pozice + + + + Rating + Hodnocení + + + + Aggresion + Agresivita + + + + Fitness + Fyzička + + + + Experience + Zkušenosti + + + + Best rate + Nejlepší výkon + + + + Form + Forma + + + + Speed + Rychlost + + + + Courage + Odvaha + + + + Play along + Hrát vpřed + + + + Reflex + Reflex + + + + Passing + Přihrávky + + + + Shooting + Střelba + + + + Play it out + Odehrát + + + + Strength + Síla + + + + Heading + Hlavičky + + + + Tackling + Bránění / souboje + + + + Playmaking + Tvorba hry + + + + Insight + Vápno + + + + Order + Pokyny + + + + Play along wing + Hrát po křídle + + + + Own chance + Na sebe + + + + Targetman + Koncový + + + + Free role + Volná role + + + + Moral + Morálka + + + + Stamina + Energie + + + + Ball controll + Kontrola míče + + + + Flexibility + Přizpůsobivost + + + + Jumping + Skoky + + + + Goalkicks + Výkopy + + + + Estimated Hidden + Vypočítaná skrytá + + + + Rating with 100% morale + Hodnocení se 100% morálkou + + + + Rating with 100% experience and morale + Hodnocení se 100% morálkou i zkušenostmi + + + + Rating with 100% experience + Hodnocení se 100% zkušenostmi + + + + Normal + Normální + + + + <br>How much points of performance orders add,<br>or remove if result is negative. + <br>Kolik bodů výkonu pokyn přidá,<br>nebo ubere, pokud je výsledek záporný. + + + + ProxySet + + + Use proxy server + Použít proxy server + + + + proxy address: + adresa proxy serveru: + + + + proxy port: + port proxy serveru: + + + + proxy username: + proxy uživatel: + + + + proxy password: + heslo proxy serveru: + + + + Save changes + Uložit změny + + + + StadiumTab + + + Stadium + Stadion + + + + Field condition + Stav hřiště + + + + Fan base + Fanoušků + + + + satisfaction + spokojenost + + + + Capacity + Kapacita + + + + Parking + Parkoviště + + + + unhappy!! + nešťastní!! + + + + Toilets + Toalety + + + + Buffets + Bary + + + + minimal + minimum + + + + Price league + Vstupné liga + + + + attendance gives cca. + návštěva dá cca. + + + + Price cup + Vstupné pohár + + + + Price friendly + Vstupné přátelák + + + + Price friendly cup + Vstupné přátelský pohár + + + + Increasing 1000 places on stadium (calculations) + Zvýšení kapacity o 1000 míst (výpočty) + + + + You need + Potřebujete + + + + Parking places + Parkovacích míst + + + + StaffMember + + + Role + Role + + + + Wage + Plat + + + + Contract + Smlouva + + + + days left + zbývá dní + + + + Birthday + Narozeniny + + + + Course + Kurz + + + + Rating + Hodnocení + + + + Trainer + Trenér + + + + Scout + Skaut + + + + Doctor + Doktor + + + + Groundkeeper + Správce hřiště + + + + Assistent + Asistent + + + + Physiotherapy + Fyzioterapeut + + + + Youth manager + Šéftrenér mládeže + + + diff --git a/lang/tran_lt.qm b/lang/tran_lt.qm new file mode 100644 index 0000000000000000000000000000000000000000..31ff2695ef6a61d51f5f04c7d7bffef9c9ca276c GIT binary patch literal 11176 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 QL#nCG{~y2ys}hO-1$t&h*#H0l literal 0 HcmV?d00001 diff --git a/lang/tran_lt.ts b/lang/tran_lt.ts new file mode 100644 index 0000000..84b7736 --- /dev/null +++ b/lang/tran_lt.ts @@ -0,0 +1,703 @@ + + + + AboutTab + + + Translators + Vertėjai + + + + ClubTab + + + Club + Klubas + + + + Budget + Biudžetas + + + + Rating + Reitingas + + + + Team spirit + Komandinė dvasia + + + + Current position + Užimama pozicija + + + + Form + Forma + + + + ConfigTab + + + soccerproject.com <span style="color:red;">nickname:</span> + soccerproject.com <span style="color:red;">vartotojo vardas:</span> + + + + soccerproject.com <span style="color:red;">password:</span> + soccerproject.com <span style="color:red;">slaptažodis:</span> + + + + Download + Jungtis + + + + Users data download + Vartotojo duomenų atsiuntimas + + + + Language selection + Kalbos pasirinkimas + + + + English + Anglų + + + + Czech + Čekų + + + + save change + Išsaugoti pakeitimus + + + + Language selection take effect after application restart. + Kalba bus pakeista kitą kartą paleidus programą. + + + + Download failed: %1. + Duomenys neatsiųsti: %1. + + + + Download OK + Duomenys atsiųsti + + + + Error: + Klaida: + + + + HTTP + HTTP + + + + Proxy server settings + Proxy serverio nustatymai + + + + Romanian + Rumunų + + + + Polish + Lenkų + + + + <span style="color:red;">Warning:</span><br>You can download data file only once between simulations.<br>Data files could be used for building statistics, do not delete them.<br>If you want to download your data, type your soccerproject.com login details.<br>Bugs or feature requests on: http://flyspray.johniez.com/proj2 + <span style="color:red;">Warning:</span><br>Duomenis galite atsisiųsti tik vieną kartą tarp rungtynių simuliacijų.<br>Duomenų laikmena bus naudojama statistikai, neištrinkite jos!<br>Jei norite atsisiųsti duomenis, įveskite savo soccerproject.com vartotojo vardą ir slaptažodį.<br>Naujienos apie programos bug‘us: http://flyspray.johniez.com/proj2 + + + + Lithuanian + Lithuanian + + + + Error: + Klaida: + + + + LoadTab + + + Loaded file: + Duomenys atsiųsti: + + + + Loaded file: + Duomenys atsiųsti: + + + + MainWindow + + + Config + Nustatymai + + + + Players + Žaidėjai + + + + Staff + Personalas + + + + Stadium + Stadionas + + + + Club + Klubas + + + + Load + Duomenys + + + + About + Apie + + + + Performance + Pasirodymas + + + + PerformanceTab + + + aggression + agresija + + + + play home + rungtynės namuose + + + + play away + rungtynės išvykoje + + + + count team performance + perskaičiuoti komandos pasirodymą + + + + Results could be inaccurate! + Rezultatai gali būti netikslūs! + + + + Choose a formation + Pasirinkite išsidėstymą + + + + Long Ball + Tolimi spyriai + + + + Without tactics + Be taktikos + + + + Kick and rush + Spirk ir bėk + + + + Passing + Pasavimas + + + + Defensive wall + Gynybinė siena + + + + normal + Normaliai + + + + Set formation, aggression and players.<br> + Pasirinkite išsidėstymą, agresiją ir žaidėjus.<br> + + + + offensive + Puolimas + + + + defensive + Gynyba + + + + This version do not penalize players at wrong position!<br>See http://flyspray.johniez.com/task/14 + Ši versija neįvertina žaidėjų žaidimo ne savo pozicijoje!<br>Žiūrėti: http://flyspray.johniez.com/task/14 + + + + aggression + agresija + + + + Team formation. + + + + + reorder players + + + + + This button set on positions with wrong player type this player, who plays there (LM on LM post..). + + + + + Team aggression, same as you set in match. + + + + + Where you will play the match. + + + + + 'Ind. order' mean one of: Normal, Play along, Play along wing, Play it out, Passing, Own chance, Targetman and Free role. + + + + + ind. order + + + + + PlayerDetail + + + Position + Pozicija + + + + Rating + Reitingas + + + + Moral + Moralė + + + + Aggresion + Agresija + + + + Fitness + Fizinis pasiruošimas + + + + Experience + Patirtis + + + + Stamina + Ištvermė + + + + Best rate + Geriausias pasirodymas + + + + Form + Forma + + + + Speed + Greitis + + + + Ball controll + Kamuolio valdymas + + + + Courage + Drąsa + + + + Flexibility + Lankstumas + + + + Jumping + Šuoliai + + + + Goalkicks + Smūgiai nuo vartų + + + + Play along + Žaidimas aikštėje + + + + Reflex + Refleksai + + + + Passing + Pasavimas + + + + Shooting + Smūgiai + + + + Play it out + Sprendimai + + + + Strength + Jėga + + + + Heading + Smūgiai galva + + + + Tackling + Kamuolio atkovojimas + + + + Playmaking + Kombinacijos + + + + Insight + Nuovoka + + + + Estimated Hidden + Paslėptas įgūdis + + + + Order + Nurodymas + + + + Play along wing + Varytis pirmyn kraštuose + + + + Own chance + Pulk pats + + + + Targetman + Pagrindinis vyras + + + + Free role + Spręsk pats + + + + Rating with 100% morale + Reitingas su 100% morale + + + + Rating with 100% experience and morale + Reitingas su 100% patirtimi ir morale + + + + Rating with 100% experience + Reitingas su 100% patirtimi + + + + Normal + + + + + <br>How much points of performance orders add,<br>or remove if result is negative. + + + + + ProxySet + + + Use proxy server + Vartotojo proxy serveris + + + + proxy address: + proxy adresas: + + + + proxy port: + proxy prievadas: + + + + proxy username: + proxy vartotojo vardas: + + + + proxy password: + proxy slaptažodis: + + + + Save changes + Išsaugoti pakeitimus + + + + StadiumTab + + + Stadium + Stadionas + + + + Field condition + Dangos būklė + + + + Fan base + Sirgalių skaičius + + + + satisfaction + Sirgalių pasitenkinimas + + + + Capacity + Talpa + + + + Parking + Automobilių aikštelė + + + + minimal + ne mažiau kaip + + + + unhappy!! + nepatenkinti!! + + + + Toilets + Tualetai + + + + Buffets + Barai + + + + Price league + Lygos bilieto kaina + + + + attendance gives cca. + pajamos. + + + + Price cup + Taurės bilieto kaina + + + + Price friendly + Dr. rungtynių bilieto kaina + + + + Price friendly cup + Dr. taurės bilieto kaina + + + + Increasing 1000 places on stadium (calculations) + Padidinti stadioną 1000 vietų (skaičiavimai) + + + + You need + jums reikia + + + + Parking places + Automobilių stovėjimo vietos + + + + attendance gives cca. + pajamos. + + + + StaffMember + + + Role + Darbuotojas + + + + Trainer + Treneris + + + + Scout + Talentų skautas + + + + Doctor + Gydytojas + + + + Groundkeeper + Aikštelės prižiūrėtojas + + + + Assistent + Pavaduotojas + + + + Physiotherapy + Fizioterapeutas + + + + Youth manager + Jaunių vadovas + + + + Wage + Alga + + + + Contract + Sutartis + + + + days left + liko dienų + + + + Course + Kursai + + + + Rating + Reitingas + + + diff --git a/lang/tran_pl.qm b/lang/tran_pl.qm new file mode 100644 index 0000000000000000000000000000000000000000..d526c2c4c3cbbaa6771b7e7b7433d026e905e902 GIT binary patch literal 10446 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 literal 0 HcmV?d00001 diff --git a/lang/tran_pl.ts b/lang/tran_pl.ts new file mode 100644 index 0000000..57eb8cf --- /dev/null +++ b/lang/tran_pl.ts @@ -0,0 +1,683 @@ + + + + AboutTab + + + Translators + Tłumacze + + + + ClubTab + + + Club + Klub + + + + Budget + Budżet + + + + Rating + Ocena + + + + Team spirit + Atmosfera w drużynie + + + + Current position + Aktualna pozycja + + + + Form + Forma + + + + ConfigTab + + + <span style="color:red;">Warning:</span><br>You can download data file only once between simulations.<br>Data files could be used for building statistics, do not delete them.<br>If you want to download your data, type your soccerproject.com login details.<br>This is just the beta version ;-) + <span style="color:red;">Uwaga:</span><br>Możesz pobrać plik z danymi tylko raz pomiędzy symulacjami.<br>Pliki z danymi mogą zostać użyte do tworzenia statystyk, dlatego ich nie usuwaj.<br>Jeśli chcesz pobrać dane dla swojego zespołu, wpisz dane jak przy logowaniu w soccerproject.com.<br>To jest dopiero wersja beta ;-) + + + + soccerproject.com <span style="color:red;">nickname:</span> + soccerproject.com <span style="color:red;">użytkownik:</span> + + + + soccerproject.com <span style="color:red;">password:</span> + soccerproject.com <span style="color:red;">hasło:</span> + + + + Download + Pobierz + + + + Users data download + Pobieranie danych użytkowników + + + + Language selection + Wybór języka + + + + English + Angielski + + + + Czech + Czeski + + + + save change + Zapisz zmiany + + + + Language selection take effect after application restart. + Zmiany w wyborze języka będą obowiązywać dopiero po ponownym uruchomieniu aplikacji. + + + + Download failed: %1. + Pobieranie nie powiodło się: %1. + + + + Download OK + Pobieranie zakończone sukcesem + + + + Error: + Błąd: + + + + HTTP + HTTP + + + + Proxy server settings + Ustawienia serwera proxy + + + + Romanian + Rumuński + + + + Polish + Polski + + + + <span style="color:red;">Warning:</span><br>You can download data file only once between simulations.<br>Data files could be used for building statistics, do not delete them.<br>If you want to download your data, type your soccerproject.com login details.<br>Bugs or feature requests on: http://flyspray.johniez.com/proj2 + <span style="color:red;">Uwaga:</span><br>Możesz pobrać plik z danymi tylko raz pomiędzy symulacjami.<br>Pliki z danymi mogą zostać użyte do tworzenia statystyk, dlatego ich nie usuwaj.<br>Jeśli chcesz pobrać dane dla swojego zespołu, wpisz dane jak przy logowaniu w soccerproject.com.<br>Bugs or feature requests on: http://flyspray.johniez.com/proj2 + + + + Lithuanian + + + + + LoadTab + + + Loaded file: + Załadowano plik: + + + + MainWindow + + + Config + Konfiguracja + + + + Players + Zawodnicy + + + + Staff + Pracownicy + + + + Stadium + Stadion + + + + Club + Klub + + + + Load + Wczytaj + + + + About + Około + + + + Performance + + + + + PerformanceTab + + + aggression + + + + + play home + + + + + play away + + + + + count team performance + + + + + Results could be inaccurate! + + + + + Choose a formation + + + + + Long Ball + + + + + Without tactics + + + + + Kick and rush + + + + + Passing + Podania + + + + Defensive wall + + + + + Set formation, aggression and players.<br> + + + + + offensive + + + + + defensive + + + + + This version do not penalize players at wrong position!<br>See http://flyspray.johniez.com/task/14 + + + + + Team formation. + + + + + reorder players + + + + + This button set on positions with wrong player type this player, who plays there (LM on LM post..). + + + + + Team aggression, same as you set in match. + + + + + Where you will play the match. + + + + + 'Ind. order' mean one of: Normal, Play along, Play along wing, Play it out, Passing, Own chance, Targetman and Free role. + + + + + ind. order + + + + + PlayerDetail + + + Position + Pozycja + + + + Rating + Ocena + + + + Moral + Morale + + + + Aggresion + Agresja + + + + Fitness + Kondycja + + + + Experience + Doświadczenie + + + + Stamina + Wytrzymałość + + + + Best rate + Najlepszy występ + + + + Form + Forma + + + + Speed + Szybkość + + + + Ball controll + Panowanie nad piłką + + + + Courage + Odwaga + + + + Flexibility + Zwinność + + + + Jumping + Skoczność + + + + Goalkicks + Wybijanie piłki + + + + Play along + Wyprowadzanie piłki przez bramkarza + + + + Reflex + Refleks + + + + Passing + Podania + + + + Shooting + Strzał + + + + Play it out + Wyprowadzenie piłki + + + + Strength + Siła + + + + Heading + Gra głową + + + + Tackling + Odbiór piłki + + + + Playmaking + Rozgrywanie + + + + Insight + Przegląd gry + + + + Estimated Hidden + Szacowana ukryta umiejętność + + + + Order + Rozkazy + + + + Play along wing + Gra skrzydłami + + + + Own chance + Własna szansa + + + + Targetman + Król pola karnego + + + + Free role + Wolna rola + + + + Rating with 100% morale + Ocena przy 100% morale + + + + Rating with 100% experience and morale + Ocena przy 100% doświadczenia i morale + + + + Rating with 100% experience + Ocena przy 100% doświadczenia + + + + Normal + + + + + <br>How much points of performance orders add,<br>or remove if result is negative. + + + + + ProxySet + + + Use proxy server + Użyj serwera proxy + + + + proxy address: + adres proxy: + + + + proxy port: + port proxy: + + + + proxy username: + nazwa użytkownika proxy: + + + + proxy password: + hasło proxy: + + + + Save changes + Zapisz zmiany + + + + StadiumTab + + + Stadium + Stadion + + + + Field condition + Status nawierzchni + + + + Fan base + Liczba fanów zespołu + + + + satisfaction + Zadowolenie fanów + + + + Capacity + Pojemność + + + + Parking + Parking + + + + minimal + minimalnie + + + + unhappy!! + niezadowoleni!! + + + + Toilets + Toalety + + + + Buffets + Bary + + + + Price league + Cena biletów (Liga) + + + + attendance gives cca. + frekwencja daje. + + + + Price cup + Cena biletów (Puchar) + + + + Price friendly + Cena biletów (Mecz towarzyski) + + + + Price friendly cup + Cena biletów (Turniej towarzyski) + + + + Increasing 1000 places on stadium (calculations) + Zwiększ ilość miejsc na stadionie o 1000 (szacowanie) + + + + You need + Potrzebujesz + + + + Parking places + Miejsca parkingowe + + + + StaffMember + + + Role + Rola + + + + Trainer + Trener + + + + Scout + Wyszukiwacz talentów + + + + Doctor + Lekarz + + + + Groundkeeper + Opiekun boiska + + + + Assistent + Asystent + + + + Physiotherapy + Fizykoterapeuta + + + + Youth manager + Opiekun młodzieży + + + + Wage + Pensja + + + + Contract + Kontrakt + + + + days left + dni do końca kontraktu + + + + Course + Kurs + + + + Rating + Ocena + + + diff --git a/lang/tran_ro.qm b/lang/tran_ro.qm new file mode 100644 index 0000000000000000000000000000000000000000..c3bb1e44aa29bb0772b28720fb68a890b72afdc8 GIT binary patch literal 9194 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 + + + AboutTab + + + Translators + Traducatori + + + + ClubTab + + + Club + Club + + + + Budget + Buget + + + + Rating + Rating + + + + Team spirit + Spiritul Echipei + + + + Current position + Pozitia Curenta + + + + Form + Forma + + + + ConfigTab + + + <span style="color:red;">Warning:</span><br>You can download data file only once between simulations.<br>Data files could be used for building statistics, do not delete them.<br>If you want to download your data, type your soccerproject.com login details.<br>This is just the beta version ;-) + <span style="color:red;">Warning:</span><br>Puteti downloada date numai intre simulari.<br>Datele pot fi folosite pentru a face statistici,nu le stergeti.<br>Daca doriti sa downloadati datele voastre,tastati detaliile de logare pe soccerproject.com.<br>Aceasta este doar versiunea beta ;-) + + + + soccerproject.com <span style="color:red;">nickname:</span> + soccerproject.com <span style="color:red;">nickname:</span> + + + + soccerproject.com <span style="color:red;">password:</span> + soccerproject.com <span style="color:red;">parola:</span> + + + + Download + Download + + + + Users data download + Downloadeaza datele + + + + Language selection + Alege limba + + + + English + Engleza + + + + Czech + Ceha + + + + save change + Salveaza schimbarile + + + + Language selection take effect after application restart. + Selectia limbii va avea effect dupa restartarea aplicatiei. + + + + Download failed: %1. + Download intrerupt: %1. + + + + Download OK + Download OK + + + + Error: + Eroare: + + + + HTTP + HTTP + + + + Proxy server settings + Setari server proxy + + + + Romanian + + + + + Polish + + + + + <span style="color:red;">Warning:</span><br>You can download data file only once between simulations.<br>Data files could be used for building statistics, do not delete them.<br>If you want to download your data, type your soccerproject.com login details.<br>Bugs or feature requests on: http://flyspray.johniez.com/proj2 + + + + + Lithuanian + + + + + LoadTab + + + Loaded file: + Fisiere incarcate: + + + + MainWindow + + + Config + Configurare + + + + Players + Jucatori + + + + Staff + Personal + + + + Stadium + Stadion + + + + Club + Club + + + + Load + Incarca + + + + About + Despre + + + + Performance + + + + + PerformanceTab + + + aggression + + + + + play home + + + + + play away + + + + + count team performance + + + + + Results could be inaccurate! + + + + + Choose a formation + + + + + Long Ball + + + + + Without tactics + + + + + Kick and rush + + + + + Passing + Pase + + + + Defensive wall + + + + + Set formation, aggression and players.<br> + + + + + offensive + + + + + defensive + + + + + This version do not penalize players at wrong position!<br>See http://flyspray.johniez.com/task/14 + + + + + Team formation. + + + + + reorder players + + + + + This button set on positions with wrong player type this player, who plays there (LM on LM post..). + + + + + Team aggression, same as you set in match. + + + + + Where you will play the match. + + + + + 'Ind. order' mean one of: Normal, Play along, Play along wing, Play it out, Passing, Own chance, Targetman and Free role. + + + + + ind. order + + + + + PlayerDetail + + + Position + Pozitie + + + + Rating + Rating + + + + Moral + Moral + + + + Aggresion + Agresivitate + + + + Fitness + Conditie + + + + Experience + Experienta + + + + Stamina + Rezistenta + + + + Best rate + Cea mai buna prestatie + + + + Form + Forma + + + + Speed + Viteza + + + + Ball controll + Tehnica + + + + Courage + Curaj + + + + Flexibility + Flexibilitate + + + + Jumping + Detenta + + + + Goalkicks + Degajari + + + + Play along + Joc De Picior + + + + Reflex + Reflex + + + + Passing + Pase + + + + Shooting + Suturi + + + + Play it out + Respingeri + + + + Strength + Forta + + + + Heading + Cap + + + + Tackling + Deposedari + + + + Playmaking + Viziune + + + + Insight + Intuitie + + + + Estimated Hidden + Calitate ascunsa estimata + + + + Order + Ordin + + + + Play along wing + Extrema Ofensiva + + + + Own chance + Individualism + + + + Targetman + Finalizator + + + + Free role + Libero + + + + Rating with 100% morale + Calitate cu 100% moral + + + + Rating with 100% experience and morale + Calitate cu 100% experienta si moral + + + + Rating with 100% experience + Calitate cu 100% experienta + + + + Normal + + + + + <br>How much points of performance orders add,<br>or remove if result is negative. + + + + + ProxySet + + + Use proxy server + Foloseste server proxy + + + + proxy address: + adresa proxy: + + + + proxy port: + Port proxy: + + + + proxy username: + user proxy: + + + + proxy password: + parola proxy: + + + + Save changes + Salveaza modificarile + + + + StadiumTab + + + Stadium + Stadion + + + + Field condition + starea terenului + + + + Fan base + Baza fanilor + + + + satisfaction + Satisfactia + + + + Capacity + Capacitate + + + + Parking + Parcari + + + + minimal + Minim + + + + unhappy!! + Nemultumiti!! + + + + Toilets + Toalete + + + + Buffets + Baruri + + + + Price league + Pret liga + + + + attendance gives cca. + Venit estimate pe meci. + + + + Price cup + Pret cupa + + + + Price friendly + Pret amicale + + + + Price friendly cup + Pret cupa amicala + + + + Increasing 1000 places on stadium (calculations) + Cresterea cu 1000 de locuri a stadionului(calcule) + + + + You need + Ai nevoie + + + + Parking places + Locuri de parcare + + + + StaffMember + + + Role + Functia + + + + Trainer + Antrenor + + + + Scout + Scout + + + + Doctor + Doctor + + + + Groundkeeper + Ingrijitor + + + + Assistent + Asistent + + + + Physiotherapy + Maseur + + + + Youth manager + Coordonator tineret + + + + Wage + Salariu + + + + Contract + Contract + + + + days left + Zile ramase + + + + Course + Curs + + + + Rating + Rating + + + diff --git a/lang/tran_xx.ts b/lang/tran_xx.ts new file mode 100644 index 0000000..1f2c9d6 --- /dev/null +++ b/lang/tran_xx.ts @@ -0,0 +1,678 @@ + + + + AboutTab + + + Translators + + + + + ClubTab + + + Club + + + + + Budget + + + + + Rating + + + + + Team spirit + + + + + Current position + + + + + Form + + + + + ConfigTab + + + soccerproject.com <span style="color:red;">nickname:</span> + + + + + soccerproject.com <span style="color:red;">password:</span> + + + + + Download + + + + + Users data download + + + + + Language selection + + + + + English + + + + + Czech + + + + + save change + + + + + Language selection take effect after application restart. + + + + + Download failed: %1. + + + + + Download OK + + + + + Error: + + + + + HTTP + + + + + Proxy server settings + + + + + Romanian + + + + + Polish + + + + + <span style="color:red;">Warning:</span><br>You can download data file only once between simulations.<br>Data files could be used for building statistics, do not delete them.<br>If you want to download your data, type your soccerproject.com login details.<br>Bugs or feature requests on: http://flyspray.johniez.com/proj2 + + + + + Lithuanian + + + + + LoadTab + + + Loaded file: + + + + + MainWindow + + + Config + + + + + Players + + + + + Staff + + + + + Stadium + + + + + Club + + + + + Load + + + + + About + + + + + Performance + + + + + PerformanceTab + + + aggression + + + + + play home + + + + + play away + + + + + count team performance + + + + + Results could be inaccurate! + + + + + Choose a formation + + + + + Long Ball + + + + + Without tactics + + + + + Kick and rush + + + + + Passing + + + + + Defensive wall + + + + + Set formation, aggression and players.<br> + + + + + offensive + + + + + defensive + + + + + This version do not penalize players at wrong position!<br>See http://flyspray.johniez.com/task/14 + + + + + Team formation. + + + + + reorder players + + + + + This button set on positions with wrong player type this player, who plays there (LM on LM post..). + + + + + Team aggression, same as you set in match. + + + + + Where you will play the match. + + + + + 'Ind. order' mean one of: Normal, Play along, Play along wing, Play it out, Passing, Own chance, Targetman and Free role. + + + + + ind. order + + + + + PlayerDetail + + + Position + + + + + Rating + + + + + Moral + + + + + Aggresion + + + + + Fitness + + + + + Experience + + + + + Stamina + + + + + Best rate + + + + + Form + + + + + Speed + + + + + Ball controll + + + + + Courage + + + + + Flexibility + + + + + Jumping + + + + + Goalkicks + + + + + Play along + + + + + Reflex + + + + + Passing + + + + + Shooting + + + + + Play it out + + + + + Strength + + + + + Heading + + + + + Tackling + + + + + Playmaking + + + + + Insight + + + + + Estimated Hidden + + + + + Order + + + + + Play along wing + + + + + Own chance + + + + + Targetman + + + + + Free role + + + + + Rating with 100% morale + + + + + Rating with 100% experience and morale + + + + + Rating with 100% experience + + + + + Normal + + + + + <br>How much points of performance orders add,<br>or remove if result is negative. + + + + + ProxySet + + + Use proxy server + + + + + proxy address: + + + + + proxy port: + + + + + proxy username: + + + + + proxy password: + + + + + Save changes + + + + + StadiumTab + + + Stadium + + + + + Field condition + + + + + Fan base + + + + + satisfaction + + + + + Capacity + + + + + Parking + + + + + minimal + + + + + unhappy!! + + + + + Toilets + + + + + Buffets + + + + + Price league + + + + + attendance gives cca. + + + + + Price cup + + + + + Price friendly + + + + + Price friendly cup + + + + + Increasing 1000 places on stadium (calculations) + + + + + You need + + + + + Parking places + + + + + StaffMember + + + Role + + + + + Trainer + + + + + Scout + + + + + Doctor + + + + + Groundkeeper + + + + + Assistent + + + + + Physiotherapy + + + + + Youth manager + + + + + Wage + + + + + Contract + + + + + days left + + + + + Course + + + + + Rating + + + + diff --git a/loadtab.cc b/loadtab.cc new file mode 100644 index 0000000..62fdc47 --- /dev/null +++ b/loadtab.cc @@ -0,0 +1,77 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "loadtab.h" + +LoadTab::LoadTab(QWidget * parent) : QWidget(parent) { + init(); +} + +LoadTab::~LoadTab() { + delete label; + delete older; + delete mainLayout; +} + +void LoadTab::init() { + QSettings settings("config/global.ini", QSettings::IniFormat); + QString num = settings.value("nextXmlId", "0").toString(); + + QDate initDay(2004, 7, 5); + + older = new QComboBox(); + + int j = 0; + for(int i=num.toInt()-1; i>=0; i--) { + quickparse("data/data_"+QString().setNum(i)+".xml"); + if(globSlot) { + dataParsed[j][0] = globSlot; + dataParsed[j][1] = curSlot; + dataParsed[j][2] = curSeason; + dataParsed[j][3] = i; + } + QDate cDate = initDay.addDays((dataParsed[j][0]-1)/5); + QString time; + switch((dataParsed[j][0]-1)%5) { + case 0: time = " 4:00-10:00"; break; + case 1: time = " 10:00-14:00"; break; + case 2: time = " 14:00-18:00"; break; + case 3: time = " 18:00-22:00"; break; + case 4: time = " 22:00-4:00"; break; + } + older->addItem("S:" + QString().setNum(dataParsed[j][2]) + " - " + cDate.toString("d.M.yyyy") + time, ""); + j++; + if(j>=20) break; + } + + mainLayout = new QVBoxLayout; + QString text; + + label = new QLabel(text); + mainLayout->addWidget(older); + mainLayout->addWidget(label); + setLayout(mainLayout); + connect(older, SIGNAL(currentIndexChanged(int)), this, SLOT(indexChanged(int))); +} + +void LoadTab::dataChanged() { + rebuildUI(); +} + +void LoadTab::indexChanged(int i) { + int fileNum = dataParsed[i][3]; + parse("data/data_" + QString().setNum(fileNum) + ".xml"); + emit loaded(); + label->clear(); + label->setText(tr("Loaded file: ") + "data_" + QString().setNum(fileNum) + ".xml"); +} + +void LoadTab::rebuildUI() { + delete older; + delete label; + delete mainLayout; + init(); +} diff --git a/loadtab.h b/loadtab.h new file mode 100644 index 0000000..d72debf --- /dev/null +++ b/loadtab.h @@ -0,0 +1,45 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef LOADOLD__H__ +#define LOADOLD__H__ + +#include +#include +#include +#include +#include +#include +#include + +extern int dataParsed[20][4]; // glob slot || slot || seazon || data # +extern int globSlot; +extern int curSlot; +extern int curSeason; + +extern void parse(const QString &); +extern void quickparse(const QString &); + +class LoadTab: public QWidget { + Q_OBJECT + QVBoxLayout *mainLayout; + QLabel *label; + QComboBox *older; +public: + LoadTab(QWidget *parent = 0); + ~LoadTab(); + + void rebuildUI(); +private: + void init(); +public slots: + void dataChanged(); + void indexChanged(int i); +signals: + void loaded(); +}; + +#endif diff --git a/main.cc b/main.cc new file mode 100644 index 0000000..f112a34 --- /dev/null +++ b/main.cc @@ -0,0 +1,790 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "main.h" + +void parse(const QString &data); + +int playerCnt; +Player pls[45]; +int staffCnt; +StaffMemberStruct staff[7]; +StadiumStruct stadium; +ClubStruct club; +int dataParsed[20][4]; +int globSlot, curSlot, curSeason; + +void parse(const QString &data) { + QDomDocument doc("spdt"); + QFile file( data ); + file.open( QIODevice::ReadOnly ); + doc.setContent( &file ); + file.close(); + + playerCnt = 0; + staffCnt = 0; + + QDomElement root = doc.documentElement(); + if( root.tagName() == "SoccerProject" ) { + QDomNode n = root.firstChild(); + + while( !n.isNull() ) { + QDomElement e = n.toElement(); + if( !e.isNull() ) { + if( e.tagName() == "GlobalInfo" ) { + QDomNode ID = e.firstChild(); + while( !ID.isNull() ) { + QDomElement IDD = ID.toElement(); + if(IDD.tagName() == "cur_globalslot" ) { + QDomElement pl = IDD.toElement(); + globSlot = pl.text().toInt(); + } + if(IDD.tagName() == "cur_slot" ) { + QDomElement pl = IDD.toElement(); + curSlot = pl.text().toInt(); + } + if(IDD.tagName() == "cur_season" ) { + QDomElement pl = IDD.toElement(); + curSeason = pl.text().toInt(); + } + ID = ID.nextSibling(); + } + } + if( e.tagName() == "Club" ) { + QDomNode ID = e.firstChild(); + while( !ID.isNull() ) { + QDomElement IDD = ID.toElement(); + if(IDD.tagName() == "name" ) { + QDomElement pl = IDD.toElement(); + club.name = pl.text(); + } + if(IDD.tagName() == "budg" ) { + QDomElement pl = IDD.toElement(); + club.budget = pl.text(); + } + if(IDD.tagName() == "rat" ) { + QDomElement pl = IDD.toElement(); + club.rat = pl.text(); + } + if(IDD.tagName() == "incup" ) { + QDomElement pl = IDD.toElement(); + club.incup = pl.text().toInt(); + } + if(IDD.tagName() == "fndd" ) { + QDomElement pl = IDD.toElement(); + club.fndd = pl.text(); + } + if(IDD.tagName() == "spirit" ) { + QDomElement pl = IDD.toElement(); + club.spirit = pl.text(); + } + if(IDD.tagName() == "curpos" ) { + QDomElement pl = IDD.toElement(); + club.curpos = pl.text(); + } + if(IDD.tagName() == "curdiv" ) { + QDomElement pl = IDD.toElement(); + club.curdiv = pl.text(); + } + if(IDD.tagName() == "totgmade" ) { + QDomElement pl = IDD.toElement(); + club.totgmade = pl.text(); + } + if(IDD.tagName() == "totgrecv" ) { + QDomElement pl = IDD.toElement(); + club.totgrecv = pl.text(); + } + if(IDD.tagName() == "curgmade" ) { + QDomElement pl = IDD.toElement(); + club.curgmade = pl.text(); + } + if(IDD.tagName() == "curgrecv" ) { + QDomElement pl = IDD.toElement(); + club.curgrecv = pl.text(); + } + if(IDD.tagName() == "curlgmade" ) { + QDomElement pl = IDD.toElement(); + club.curlgmade = pl.text(); + } + if(IDD.tagName() == "curlgrecv" ) { + QDomElement pl = IDD.toElement(); + club.curlgrecv = pl.text(); + } + if(IDD.tagName() == "tothgames" ) { + QDomElement pl = IDD.toElement(); + club.tothgames = pl.text(); + } + if(IDD.tagName() == "totwins" ) { + QDomElement pl = IDD.toElement(); + club.totwins = pl.text(); + } + if(IDD.tagName() == "totdraws" ) { + QDomElement pl = IDD.toElement(); + club.totdraws = pl.text(); + } + if(IDD.tagName() == "totlosts" ) { + QDomElement pl = IDD.toElement(); + club.totlosts = pl.text(); + } + if(IDD.tagName() == "curhgames" ) { + QDomElement pl = IDD.toElement(); + club.curhgames = pl.text(); + } + if(IDD.tagName() == "curwins" ) { + QDomElement pl = IDD.toElement(); + club.curwins = pl.text(); + } + if(IDD.tagName() == "curdraws" ) { + QDomElement pl = IDD.toElement(); + club.curdraws = pl.text(); + } + if(IDD.tagName() == "curlosts" ) { + QDomElement pl = IDD.toElement(); + club.curlosts = pl.text(); + } + if(IDD.tagName() == "curlwins" ) { + QDomElement pl = IDD.toElement(); + club.curlwins = pl.text(); + } + if(IDD.tagName() == "curldraws" ) { + QDomElement pl = IDD.toElement(); + club.curldraws = pl.text(); + } + if(IDD.tagName() == "curllosts" ) { + QDomElement pl = IDD.toElement(); + club.curllosts = pl.text(); + } + if(IDD.tagName() == "totmaxatt" ) { + QDomElement pl = IDD.toElement(); + club.totmaxatt = pl.text(); + } + if(IDD.tagName() == "curmaxatt" ) { + QDomElement pl = IDD.toElement(); + club.curmaxatt = pl.text(); + } + if(IDD.tagName() == "totavgatt" ) { + QDomElement pl = IDD.toElement(); + club.totavgatt = pl.text(); + } + if(IDD.tagName() == "curavgatt" ) { + QDomElement pl = IDD.toElement(); + club.curavgatt = pl.text(); + } + if(IDD.tagName() == "form" ) { + QDomElement pl = IDD.toElement(); + club.form = pl.text(); + } + if(IDD.tagName() == "for_a" ) { + QDomElement pl = IDD.toElement(); + club.for_a = pl.text(); + } + if(IDD.tagName() == "tactic_a" ) { + QDomElement pl = IDD.toElement(); + club.tactic_a = pl.text(); + } + if(IDD.tagName() == "attstyle_a" ) { + QDomElement pl = IDD.toElement(); + club.attstyle_a = pl.text(); + } + if(IDD.tagName() == "agr_a" ) { + QDomElement pl = IDD.toElement(); + club.agr_a = pl.text(); + } + if(IDD.tagName() == "cap_a" ) { + QDomElement pl = IDD.toElement(); + club.cap_a = pl.text(); + } + ID = ID.nextSibling(); + } + } + if( e.tagName() == "Stadium" ) { + QDomNode ID = e.firstChild(); + while( !ID.isNull() ) { + QDomElement IDD = ID.toElement(); + if(IDD.tagName() == "stadiumID" ) { + QDomElement pl = IDD.toElement(); + stadium.id = pl.text(); + } + if(IDD.tagName() == "name" ) { + QDomElement pl = IDD.toElement(); + stadium.name = pl.text(); + } + if(IDD.tagName() == "field_status" ) { + QDomElement pl = IDD.toElement(); + stadium.field_status = pl.text(); + } + if(IDD.tagName() == "price_league" ) { + QDomElement pl = IDD.toElement(); + stadium.priceLeague = pl.text(); + } + if(IDD.tagName() == "price_cup" ) { + QDomElement pl = IDD.toElement(); + stadium.priceCup = pl.text(); + } + if(IDD.tagName() == "price_friendly" ) { + QDomElement pl = IDD.toElement(); + stadium.priceFriendly = pl.text(); + } + if(IDD.tagName() == "price_friendlycup" ) { + QDomElement pl = IDD.toElement(); + stadium.priceFriendlyCup = pl.text(); + } + if(IDD.tagName() == "fanpot" ) { + QDomElement pl = IDD.toElement(); + stadium.fans = pl.text(); + } + if(IDD.tagName() == "fansatis" ) { + QDomElement pl = IDD.toElement(); + stadium.fanSatis = pl.text(); + } + if(IDD.tagName() == "cap_n" ) { + QDomElement pl = IDD.toElement(); + stadium.cap_n = pl.text(); + } + if(IDD.tagName() == "cap_e" ) { + QDomElement pl = IDD.toElement(); + stadium.cap_e = pl.text(); + } + if(IDD.tagName() == "cap_w" ) { + QDomElement pl = IDD.toElement(); + stadium.cap_w = pl.text(); + } + if(IDD.tagName() == "cap_s" ) { + QDomElement pl = IDD.toElement(); + stadium.cap_s = pl.text(); + } + if(IDD.tagName() == "lights_ne" ) { + QDomElement pl = IDD.toElement(); + stadium.lights_ne = pl.text(); + } + if(IDD.tagName() == "lights_se" ) { + QDomElement pl = IDD.toElement(); + stadium.lights_se = pl.text(); + } + if(IDD.tagName() == "lights_nw" ) { + QDomElement pl = IDD.toElement(); + stadium.lights_nw = pl.text(); + } + if(IDD.tagName() == "lights_sw" ) { + QDomElement pl = IDD.toElement(); + stadium.lights_sw = pl.text(); + } + if(IDD.tagName() == "sb1" ) { + QDomElement pl = IDD.toElement(); + stadium.sb1 = pl.text(); + } + if(IDD.tagName() == "sb2" ) { + QDomElement pl = IDD.toElement(); + stadium.sb2 = pl.text(); + } + if(IDD.tagName() == "field" ) { + QDomElement pl = IDD.toElement(); + stadium.field = pl.text(); + } + if(IDD.tagName() == "parking" ) { + QDomElement pl = IDD.toElement(); + stadium.parking = pl.text(); + } + if(IDD.tagName() == "wc" ) { + QDomElement pl = IDD.toElement(); + stadium.wc = pl.text(); + } + if(IDD.tagName() == "kantine" ) { + QDomElement pl = IDD.toElement(); + stadium.bar = pl.text(); + } + if(IDD.tagName() == "youth_centre" ) { + QDomElement pl = IDD.toElement(); + stadium.youth_center = pl.text(); + } + if(IDD.tagName() == "ds_n" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_n = pl.text(); + } + if(IDD.tagName() == "ds_e" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_e = pl.text(); + } + if(IDD.tagName() == "ds_w" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_w = pl.text(); + } + if(IDD.tagName() == "ds_sn" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_s = pl.text(); + } + if(IDD.tagName() == "ds_lights_ne" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_lights_ne = pl.text(); + } + if(IDD.tagName() == "ds_lights_se" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_lights_se = pl.text(); + } + if(IDD.tagName() == "ds_lights_nw" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_lights_nw = pl.text(); + } + if(IDD.tagName() == "ds_lights_sw" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_lights_sw = pl.text(); + } + if(IDD.tagName() == "ds_sb1" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_sb1 = pl.text(); + } + if(IDD.tagName() == "ds_sb2" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_sb2 = pl.text(); + } + if(IDD.tagName() == "ds_bar" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_bar = pl.text(); + } + if(IDD.tagName() == "ds_wc" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_wc = pl.text(); + } + if(IDD.tagName() == "ds_park" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_park = pl.text(); + } + if(IDD.tagName() == "ds_field" ) { + QDomElement pl = IDD.toElement(); + stadium.ds_field = pl.text(); + } + if(IDD.tagName() == "park_fu" ) { + QDomElement pl = IDD.toElement(); + stadium.park_fu = pl.text().toInt(); + } + if(IDD.tagName() == "wc_fu" ) { + QDomElement pl = IDD.toElement(); + stadium.wc_fu = pl.text().toInt(); + } + if(IDD.tagName() == "bar_fu" ) { + QDomElement pl = IDD.toElement(); + stadium.bar_fu = pl.text().toInt(); + } + if(IDD.tagName() == "sb_fu" ) { + QDomElement pl = IDD.toElement(); + stadium.sb_fu = pl.text().toInt(); + } + if(IDD.tagName() == "lights_fu" ) { + QDomElement pl = IDD.toElement(); + stadium.lights_fu = pl.text().toInt(); + } + ID = ID.nextSibling(); + } + } + if( e.tagName() == "StaffMembers" ) { + QDomNode p = e.firstChild(); + int curStaff = 0; + while( !p.isNull() ) { + QDomElement pp = p.toElement(); + if( pp.tagName() == "Staff" ) { + QDomNode ID = pp.firstChild(); + while( !ID.isNull() ) { + QDomElement IDD = ID.toElement(); + if(IDD.tagName() == "staffID" ) { + QDomElement pl = IDD.toElement(); + staff[curStaff].id = pl.text(); + } + if(IDD.tagName() == "role" ) { + QDomElement pl = IDD.toElement(); + staff[curStaff].role = pl.text(); + } + if(IDD.tagName() == "name" ) { + QDomElement pl = IDD.toElement(); + staff[curStaff].name = pl.text(); + } + if(IDD.tagName() == "wage" ) { + QDomElement pl = IDD.toElement(); + staff[curStaff].wage = pl.text(); + } + if(IDD.tagName() == "contr" ) { + QDomElement pl = IDD.toElement(); + staff[curStaff].contr = pl.text(); + } + if(IDD.tagName() == "age" ) { + QDomElement pl = IDD.toElement(); + staff[curStaff].age = pl.text(); + } + if(IDD.tagName() == "bd" ) { + QDomElement pl = IDD.toElement(); + staff[curStaff].birth = pl.text(); + } + if(IDD.tagName() == "inservice" ) { + QDomElement pl = IDD.toElement(); + staff[curStaff].inservice = pl.text(); + } + if(IDD.tagName() == "course_slot" ) { + QDomElement pl = IDD.toElement(); + staff[curStaff].course = pl.text(); + } + if(IDD.tagName() == "rat" ) { + QDomElement pl = IDD.toElement(); + staff[curStaff].rating = pl.text(); + } + ID = ID.nextSibling(); + } + } + p = p.nextSibling(); + curStaff++; + staffCnt++; + } + } + if( e.tagName() == "Players" ) { + QDomNode p = e.firstChild(); + int curPlayer = 0; + while( !p.isNull() ) { + QDomElement pp = p.toElement(); + if( pp.tagName() == "Player" ) { + QDomNode ID = pp.firstChild(); + while( !ID.isNull() ) { + QDomElement IDD = ID.toElement(); + if(IDD.tagName() == "id" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].id = pl.text(); + } + if(IDD.tagName() == "fn" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].fname = pl.text(); + } + if(IDD.tagName() == "ln" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].lname = pl.text(); + } + if(IDD.tagName() == "pos" ) { + QDomElement pl = IDD.toElement(); + switch(pl.text().toInt()) { + case 0: pls[curPlayer].position = "GK"; break; + case 1: pls[curPlayer].position = "LB"; break; + case 2: pls[curPlayer].position = "CB"; break; + case 3: pls[curPlayer].position = "SW"; break; + case 4: pls[curPlayer].position = "RB"; break; + case 5: pls[curPlayer].position = "LM"; break; + case 6: pls[curPlayer].position = "CM"; break; + case 7: pls[curPlayer].position = "RM"; break; + case 8: pls[curPlayer].position = "LF"; break; + case 9: pls[curPlayer].position = "CF"; break; + case 10: pls[curPlayer].position = "RF"; break; + case 11: pls[curPlayer].position = "SB1"; break; + case 12: pls[curPlayer].position = "SB2"; break; + case 13: pls[curPlayer].position = "SB3"; break; + case 14: pls[curPlayer].position = "SB4"; break; + case 15: pls[curPlayer].position = "SB5"; break; + case 16: pls[curPlayer].position = "--"; break; + } + } + if(IDD.tagName() == "rat" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].rating = pl.text(); + } + if(IDD.tagName() == "mor" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].morale = pl.text(); + } + if(IDD.tagName() == "agr" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].aggresion = pl.text(); + } + if(IDD.tagName() == "fit" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].fitness = pl.text(); + } + if(IDD.tagName() == "exp" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].experience = pl.text(); + } + if(IDD.tagName() == "con" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].condition = pl.text(); + } + if(IDD.tagName() == "sp" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].speed = pl.text(); + } + if(IDD.tagName() == "bc" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].ballCntrl = pl.text(); + } + if(IDD.tagName() == "sk1" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].skill[0] = pl.text(); + } + if(IDD.tagName() == "sk2" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].skill[1] = pl.text(); + } + if(IDD.tagName() == "sk3" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].skill[2] = pl.text(); + } + if(IDD.tagName() == "sk4" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].skill[3] = pl.text(); + } + if(IDD.tagName() == "ssk1" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].specSkill[0] = pl.text(); + } + if(IDD.tagName() == "ssk2" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].specSkill[1] = pl.text(); + } + if(IDD.tagName() == "nr" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].number = pl.text(); + } + if(IDD.tagName() == "bd" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].birth = pl.text(); + } + if(IDD.tagName() == "age" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].age = pl.text(); + } + if(IDD.tagName() == "h" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].height = pl.text(); + } + if(IDD.tagName() == "w" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].weight = pl.text(); + } + if(IDD.tagName() == "f" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].foot = pl.text(); + } + if(IDD.tagName() == "injured" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].injured = pl.text(); + } + if(IDD.tagName() == "injury" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].injury = pl.text(); + } + if(IDD.tagName() == "l_sus" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].leagueSusp = pl.text(); + } + if(IDD.tagName() == "c_sus" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].cupSusp = pl.text(); + } + if(IDD.tagName() == "contr" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].contract = pl.text(); + } + if(IDD.tagName() == "wage" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].wage = pl.text(); + } + if(IDD.tagName() == "house" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].house = pl.text(); + } + if(IDD.tagName() == "car" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].car = pl.text(); + } + if(IDD.tagName() == "s_bonus" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].signBonus = pl.text(); + } + if(IDD.tagName() == "w_bonus" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].winBonus = pl.text(); + } + if(IDD.tagName() == "t_games" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].totalGames = pl.text(); + } + if(IDD.tagName() == "t_g_l" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].leagueGoals = pl.text(); + } + if(IDD.tagName() == "t_g_c" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].cupGoals = pl.text(); + } + if(IDD.tagName() == "t_y_l" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].leagueCardsY = pl.text(); + } + if(IDD.tagName() == "t_y_c" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].cupCardsY = pl.text(); + } + if(IDD.tagName() == "t_r_l" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].leagueCardsR = pl.text(); + } + if(IDD.tagName() == "t_r_c" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].cupCardsR = pl.text(); + } + if(IDD.tagName() == "t_g_f" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].friendlyGoals = pl.text(); + } + if(IDD.tagName() == "t_y_f" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].friendlyCardsY = pl.text(); + } + if(IDD.tagName() == "t_r_f" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].friendlyCardsR = pl.text(); + } + if(IDD.tagName() == "t_bles" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].totalInjuries = pl.text(); + } + if(IDD.tagName() == "c_games" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curGames = pl.text(); + } + if(IDD.tagName() == "c_g_l" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curLeagueGoals = pl.text(); + } + if(IDD.tagName() == "c_g_c" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curCupGoals = pl.text(); + } + if(IDD.tagName() == "c_y_l" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curLeagueCardsY = pl.text(); + } + if(IDD.tagName() == "c_y_c" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curCupCardsY = pl.text(); + } + if(IDD.tagName() == "c_r_l" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curLeagueCardsR = pl.text(); + } + if(IDD.tagName() == "c_r_c" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curCupCardsR = pl.text(); + } + if(IDD.tagName() == "c_g_f" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curFriendlyGoals = pl.text(); + } + if(IDD.tagName() == "c_y_f" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curFriendlyCardsY = pl.text(); + } + if(IDD.tagName() == "c_r_f" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curFriendlyCardsR = pl.text(); + } + if(IDD.tagName() == "c_inj" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].curInjuries = pl.text(); + } + if(IDD.tagName() == "b_rat" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].bestRate = pl.text(); + } + if(IDD.tagName() == "form" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].form = pl.text(); + } + if(IDD.tagName() == "nick" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].nick = pl.text(); + } + if(IDD.tagName() == "ctr" ) { + QDomElement pl = IDD.toElement(); + pls[curPlayer].country = pl.text(); + } + ID = ID.nextSibling(); + } + } + p = p.nextSibling(); + curPlayer++; + playerCnt++; + } + } + } + n = n.nextSibling(); + } + } +} + +void quickparse(const QString &data) { + QDomDocument doc("spdt"); + QFile file( data ); + file.open( QIODevice::ReadOnly ); + doc.setContent( &file ); + file.close(); + + QDomElement root = doc.documentElement(); + if( root.tagName() == "SoccerProject" ) { + QDomNode n = root.firstChild(); + + while( !n.isNull() ) { + QDomElement e = n.toElement(); + if( !e.isNull() ) { + if( e.tagName() == "GlobalInfo" ) { + QDomNode ID = e.firstChild(); + while( !ID.isNull() ) { + QDomElement IDD = ID.toElement(); + if(IDD.tagName() == "cur_globalslot" ) { + QDomElement pl = IDD.toElement(); + globSlot = pl.text().toInt(); + } else if(IDD.tagName() == "cur_slot" ) { + QDomElement pl = IDD.toElement(); + curSlot = pl.text().toInt(); + } else if(IDD.tagName() == "cur_season" ) { + QDomElement pl = IDD.toElement(); + curSeason = pl.text().toInt(); + } + ID = ID.nextSibling(); + } + } + } + n = n.nextSibling(); + } + } +} + +int main(int argc, char **argv) { + QSettings settings("config/global.ini", QSettings::IniFormat); + QString lang = settings.value("lang", "en").toString(); + + QApplication app(argc, argv); + QPixmap pixmap(453,300); + QByteArray bArray; + QFile PixmapFile("./img/splash.jpg"); + if(!PixmapFile.open(QIODevice::ReadOnly)) + { + qDebug("Error loading Pixmap"); + return false; + } + + bArray=PixmapFile.readAll().toBase64(); + + if(!pixmap.loadFromData( bArray.fromBase64(bArray))) + { + qDebug()<<"Error pixmap processing"; + return 0; + } + + QSplashScreen splash(pixmap); + splash.show(); + splash.showMessage("[0.2.7] please wait parsing data files..", Qt::AlignBottom | Qt::AlignCenter, Qt::white); + QTranslator translator; + translator.load("lang/tran_"+lang); + app.installTranslator(&translator); + MainWindow win; + win.show(); + splash.finish(&win); + return app.exec(); +} + diff --git a/main.h b/main.h new file mode 100755 index 0000000..e9db62b --- /dev/null +++ b/main.h @@ -0,0 +1,17 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef MAIN__H__ +#define MAIN__H__ + +#include +#include +#include +#include +#include +#include "mainwindow.h" + +#endif diff --git a/mainwindow.cc b/mainwindow.cc new file mode 100644 index 0000000..ad44c8d --- /dev/null +++ b/mainwindow.cc @@ -0,0 +1,56 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "mainwindow.h" + +MainWindow::MainWindow(QWidget * parent) : QWidget(parent) { + tabWidget = new QTabWidget; + conf = new ConfigTab(this); + player = new PlayerTab(this); + perform = new PerformanceTab(this); + staff = new StaffTab(this); + stadium = new StadiumTab(this); + club = new ClubTab(this); + load = new LoadTab(this); + about = new AboutTab(this); + + tabWidget->addTab(conf, tr("Config")); + tabWidget->addTab(player, tr("Players")); + tabWidget->addTab(perform, tr("Performance")); + tabWidget->addTab(staff, tr("Staff")); + tabWidget->addTab(stadium, tr("Stadium")); + tabWidget->addTab(club, tr("Club")); + tabWidget->addTab(load, tr("Load")); + tabWidget->addTab(about, tr("About")); + connect(conf, SIGNAL(dataLoaded()), player, SLOT(dataChanged())); + connect(conf, SIGNAL(dataLoaded()), staff, SLOT(dataChanged())); + connect(conf, SIGNAL(dataLoaded()), stadium, SLOT(dataChanged())); + connect(conf, SIGNAL(dataLoaded()), club, SLOT(dataChanged())); + connect(conf, SIGNAL(dataLoaded()), perform, SLOT(dataChanged())); + + connect(load, SIGNAL(loaded()), player, SLOT(dataChanged())); + connect(load, SIGNAL(loaded()), staff, SLOT(dataChanged())); + connect(load, SIGNAL(loaded()), stadium, SLOT(dataChanged())); + connect(load, SIGNAL(loaded()), club, SLOT(dataChanged())); + connect(load, SIGNAL(loaded()), perform, SLOT(dataChanged())); + + mainLayout = new QVBoxLayout; + mainLayout->addWidget(tabWidget); + setLayout(mainLayout); +} + +MainWindow::~MainWindow() { + delete conf; + delete player; + delete perform; + delete staff; + delete stadium; + delete club; + delete load; + delete about; + delete tabWidget; + delete mainLayout; +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..df0a47f --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,40 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef MAINWINDOW__H__ +#define MAINWINDOW__H__ + +#include +#include +#include +#include "configtab.h" +#include "playertab.h" +#include "stafftab.h" +#include "stadiumtab.h" +#include "clubtab.h" +#include "loadtab.h" +#include "abouttab.h" +#include "performance.h" + +class MainWindow: public QWidget { + Q_OBJECT + QVBoxLayout *mainLayout; + QTabWidget *tabWidget; + QWidget *conf; + QWidget *player; + QWidget *perform; + QWidget *staff; + QWidget *stadium; + QWidget *club; + QWidget *load; + QWidget *about; +public: + MainWindow(QWidget *parent = 0); + ~MainWindow(); +}; + + +#endif diff --git a/performance.cc b/performance.cc new file mode 100644 index 0000000..9da30aa --- /dev/null +++ b/performance.cc @@ -0,0 +1,412 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "performance.h" + +void PerformanceTab::init() { + QSettings settings("config/formation.ini", QSettings::IniFormat); + + format = new QComboBox(); + format->addItem("---", QVariant(0)); + format->addItem("5-4-1", QVariant(1)); + format->addItem("5-3-2", QVariant(2)); + format->addItem("4-3-3", QVariant(3)); + format->addItem("4-4-2", QVariant(4)); + format->addItem("4-5-1", QVariant(5)); + format->addItem("3-4-3", QVariant(6)); + format->addItem("3-5-2", QVariant(7)); + format->setToolTip(tr("Team formation.")); + + reorderPl = new QPushButton(tr("reorder players")); + reorderPl->setToolTip(tr("This button set on positions with wrong player type this player, who plays there (LM on LM post..).")); + + aggression = new QComboBox(); + for(int i=0; i<=100; i+=5) { + aggression->addItem(tr("aggression ") + QString().setNum(i) + "%", i); + } + aggression->setCurrentIndex(settings.value("aggr", 0).toInt()/5); + aggression->setToolTip(tr("Team aggression, same as you set in match.")); + aggress = settings.value("aggr", 0).toInt(); + + home = new QComboBox(); + home->addItem(tr("play home"), 0.0); + home->addItem(tr("play away"), 0.1); + home->setToolTip(tr("Where you will play the match.")); + + for(int j=0; j<11; ++j) { + plCont[j] = new QHBoxLayout(); + player[j] = new QComboBox(); + orders[j] = new QComboBox(); + orders[j]->setToolTip(tr("'Ind. order' mean one of: Normal, Play along, Play along wing, Play it out, Passing, Own chance, Targetman and Free role.")); + orders[j]->addItem(tr("ind. order"), 0); + for(int i=0; i 30) { + oldPenale = (age-30)*3; // 3 points penale per each year over 30 + perf -= oldPenale; + } + player[j]->addItem("[" + pls[i].position + "] " + pls[i].fname + " " + pls[i].lname, QVariant(perf)); + } + player[j]->setCurrentIndex(settings.value("Player/"+QString().setNum(j), 0).toInt()); + postLabel[j] = new QLabel("pos"); + plPerfLabel[j] = new QLabel(QString().setNum(player[j]->itemData(player[j]->currentIndex()).toDouble(), 'f', 2)); + plCont[j]->addWidget(postLabel[j]); + plCont[j]->addWidget(player[j]); + plCont[j]->addWidget(orders[j]); + plCont[j]->addWidget(plPerfLabel[j]); + } + + container = new QHBoxLayout(); + + container->addWidget(format); + container->addWidget(reorderPl); + container->addWidget(aggression); + container->addWidget(home); + mainLayout->addLayout(container); + for(int j=0; j<11; ++j) mainLayout->addLayout(plCont[j]); + + cButt = new QPushButton(tr("count team performance")); + mainLayout->addWidget(cButt); + + result = new QLabel(tr("Set formation, aggression and players.
") + "" + tr("Results could be inaccurate!") + "
" + tr("This version do not penalize players at wrong position!
See http://flyspray.johniez.com/task/14")); + mainLayout->addWidget(result); + + format->setCurrentIndex(settings.value("form", 0).toInt()); + formatChange(settings.value("form", 0).toInt()); + + connect(format, SIGNAL(currentIndexChanged(int)), this, SLOT(formatChange(int))); + connect(aggression, SIGNAL(currentIndexChanged(int)), this, SLOT(aggressChange(int))); + connect(cButt, SIGNAL(clicked()), this, SLOT(recount())); + for(int i=0; i<11; i++) { + connect(player[i], SIGNAL(currentIndexChanged(int)), this, SLOT(playerChange(int))); + } + connect(reorderPl, SIGNAL(clicked()), this, SLOT(reorderPlayers())); + mainLayout->update(); +} + +PerformanceTab::PerformanceTab(QWidget *parent): QWidget(parent), defs(0), mids(0), fors(0) { + mainLayout = new QVBoxLayout; + setLayout(mainLayout); + init(); +} + +PerformanceTab::~PerformanceTab() { + for(int i=0; i<11; ++i) { + delete player[i]; + delete postLabel[i]; + delete plPerfLabel[i]; + delete orders[i]; + delete plCont[i]; + } + delete format; + delete aggression; + delete home; + delete result; + delete cButt; + delete container; + delete reorderPl; + delete mainLayout; +} + +void PerformanceTab::dataChanged() { + container->removeWidget(format); + delete format; + container->removeWidget(aggression); + delete aggression; + container->removeWidget(home); + delete home; + container->removeWidget(reorderPl); + delete reorderPl; + mainLayout->removeWidget(reinterpret_cast(container)); + delete container; + + for(int i=0; i<11; ++i) { + mainLayout->removeWidget(reinterpret_cast(plCont[i])); + delete plCont[i]; + delete player[i]; + delete plPerfLabel[i]; + delete postLabel[i]; + delete orders[i]; + } + mainLayout->removeWidget(cButt); + delete cButt; + mainLayout->removeWidget(result); + delete result; + mainLayout->update(); + init(); +} + +void PerformanceTab::postLabels() { + int LMpos = 0; + if(!defsC) { + for(int i=0; i<11; ++i) { + postLabel[i]->setText("??"); + } + } + postLabel[0]->setText("GK"); + postLabel[1]->setText("LB"); + orders[1]->clear(); + orders[1]->addItem(tr("ind. order"), 0); + orders[1]->addItem(tr("offensive"), 2); + postLabel[2]->setText("CB"); + switch(defsC) { + case 5: + postLabel[3]->setText("SW"); + orders[3]->clear(); + orders[3]->addItem(tr("ind. order"), 0); + postLabel[4]->setText("CB"); + orders[4]->clear(); + orders[4]->addItem(tr("ind. order"), 0); + postLabel[5]->setText("RB"); + orders[5]->clear(); + orders[5]->addItem(tr("ind. order"), 0); + orders[5]->addItem(tr("offensive"), 2); + LMpos = 6; + break; + case 4: + postLabel[3]->setText("CB"); + orders[3]->clear(); + orders[3]->addItem(tr("ind. order"), 0); + postLabel[4]->setText("RB"); + orders[4]->clear(); + orders[4]->addItem(tr("ind. order"), 0); + orders[4]->addItem(tr("offensive"), 2); + LMpos = 5; + break; + case 3: + postLabel[3]->setText("RB"); + orders[3]->clear(); + orders[3]->addItem(tr("ind. order"), 0); + orders[3]->addItem(tr("offensive"), 2); + LMpos = 4; + break; + } + switch(midsC) { + case 5: + postLabel[LMpos]->setText("LM"); + postLabel[LMpos+1]->setText("CM"); + postLabel[LMpos+2]->setText("CM"); + postLabel[LMpos+3]->setText("CM"); + postLabel[LMpos+4]->setText("RM"); + break; + case 4: + postLabel[LMpos]->setText("LM"); + postLabel[LMpos+1]->setText("CM"); + postLabel[LMpos+2]->setText("CM"); + postLabel[LMpos+3]->setText("RM"); + break; + case 3: + postLabel[LMpos]->setText("LM"); + postLabel[LMpos+1]->setText("CM"); + postLabel[LMpos+2]->setText("RM"); + } + for(int i=LMpos; iclear(); + orders[i]->addItem(tr("ind. order"), 0); + orders[i]->addItem(tr("defensive"), 1); + orders[i]->addItem(tr("offensive"), 2); + } + switch(forsC) { + case 3: + postLabel[8]->setText("LF"); + orders[8]->clear(); + orders[8]->addItem(tr("ind. order"), 0); + orders[8]->addItem(tr("defensive"), 1); + postLabel[9]->setText("CF"); + orders[9]->clear(); + orders[9]->addItem(tr("ind. order"), 0); + postLabel[10]->setText("RF"); + orders[10]->clear(); + orders[10]->addItem(tr("ind. order"), 0); + orders[10]->addItem(tr("defensive"), 1); + break; + case 2: + postLabel[9]->setText("CF"); + orders[9]->clear(); + orders[9]->addItem(tr("ind. order"), 0); + postLabel[10]->setText("CF"); + orders[10]->clear(); + orders[10]->addItem(tr("ind. order"), 0); + break; + case 1: + postLabel[10]->setText("CF"); + orders[10]->clear(); + orders[10]->addItem(tr("ind. order"), 0); + break; + } +} + +void PerformanceTab::countPerf() { + defs = 0; + mids = 0; + fors = 0; + double perf; + for(int i=0; i<=defsC; ++i) { + perf = player[i]->itemData(player[i]->currentIndex()).toDouble(); + if(orders[i]->itemData(orders[i]->currentIndex()).toInt()==0) { + defs += perf; + } else { + defs += (0.78 * perf); + mids += (0.22 * perf); + } + } + for(int i=defsC+1; i<=defsC+midsC; ++i) { + perf = player[i]->itemData(player[i]->currentIndex()).toDouble(); + if(orders[i]->itemData(orders[i]->currentIndex()).toInt()==0) { + mids += perf; + } else if(orders[i]->itemData(orders[i]->currentIndex()).toInt()==1) { + defs += (0.22 * perf); + mids += (0.78 * perf); + } else { + fors += (0.22 * perf); + mids += (0.78 * perf); + } + } + for(int i=defsC+midsC+1; i<11; ++i) { + perf = player[i]->itemData(player[i]->currentIndex()).toDouble(); + if(orders[i]->itemData(orders[i]->currentIndex()).toInt()==0) { + fors += perf; + } else { + fors += (0.78 * perf); + mids += (0.22 * perf); + } + } +} + +void PerformanceTab::recount() { + double homeMod = home->itemData(home->currentIndex()).toDouble(); + double pre = (1.0+((double)aggress/1000))/(7.0 - (club.spirit.toDouble()/1000) + homeMod); + + countPerf(); + QString text; + if(!defsC) text = tr("Choose a formation"); + else { + double O = pre*defs; + double M = pre*mids; + double F = pre*fors; + text = "
----"+tr("Long Ball")+""+tr("Without tactics")+""+tr("Kick and rush")+""+tr("Passing")+""+tr("Defensive wall")+"
D"+QString().setNum(O*1.05,'f',2)+""+QString().setNum(O,'f',2)+""+QString().setNum(O*0.9,'f',2)+""+QString().setNum(O*0.9,'f',2)+""+QString().setNum(O*1.08,'f',2)+"
M"+QString().setNum(M*0.9,'f',2)+""+QString().setNum(M,'f',2)+""+QString().setNum(M*0.9,'f',2)+""+QString().setNum(M*1.1,'f',2)+""+QString().setNum(M*0.9,'f',2)+"
F"+QString().setNum(F*1.05,'f',2)+""+QString().setNum(F,'f',2)+""+QString().setNum(F*1.27,'f',2)+""+QString().setNum(F*0.9,'f',2)+""+QString().setNum(F*0.9,'f',2)+"
Sum"+QString().setNum((O*1.05+M*0.9+F*1.05),'f',2)+""+QString().setNum((O+M+F),'f',2)+""+QString().setNum((O*0.9+M*0.9+F*1.27),'f',2)+""+QString().setNum((O*0.9+M*1.1+F*0.9),'f',2)+""+QString().setNum((O*1.08+M*0.9+F*0.9),'f',2)+"
"; + } + result->setText(text); +} + +void PerformanceTab::aggressChange(int a) { + aggress = a*5; + QSettings settings("config/formation.ini", QSettings::IniFormat); + settings.setValue("aggr", aggress); + settings.sync(); +} + +void PerformanceTab::formatChange(int t) { + QSettings settings("config/formation.ini", QSettings::IniFormat); + if(t<8 && t>=0) { settings.setValue("form", t); settings.sync(); } + switch(t) { + case 0: + defsC = 0; midsC = 0; forsC = 0; + break; + case 1: + defsC = 5; midsC = 4; forsC = 1; + break; + case 2: + defsC = 5; midsC = 3; forsC = 2; + break; + case 3: + defsC = 4; midsC = 3; forsC = 3; + break; + case 4: + defsC = 4; midsC = 4; forsC = 2; + break; + case 5: + defsC = 4; midsC = 5; forsC = 1; + break; + case 6: + defsC = 3; midsC = 4; forsC = 3; + break; + case 7: + defsC = 3; midsC = 5; forsC = 2; + break; + } + postLabels(); + reorderPlayers(); +} + +void PerformanceTab::playerChange(int id) { + id = 1; //avoid warning :-D + QSettings settings("config/formation.ini", QSettings::IniFormat); + for(int i=0; i<11; ++i) { + settings.setValue("Player/"+QString().setNum(i), player[i]->currentIndex()); + plPerfLabel[i]->setText(QString().setNum(player[i]->itemData(player[i]->currentIndex()).toDouble(), 'f', 2)); //player[i]->itemData(player[i]->currentIndex()).toInt() + } + settings.sync(); +} + +void PerformanceTab::reorderPlayers() { + int i; + int from = 0; + for(i=1; i<=defsC; ++i) { // defenders + if(i==1) { // LB + if(pls[player[i]->currentIndex()].position != "LB") { + player[i]->setCurrentIndex(findFirstOnPost("LB")); + } + } else if(i==defsC) { // RB + if(pls[player[i]->currentIndex()].position != "RB") { + player[i]->setCurrentIndex(findFirstOnPost("RB")); + } + // RB is last managed from defenders, should set finding from him + from = player[i]->currentIndex(); + } else if(defsC == 5 && i==3) { // SW + if(pls[player[i]->currentIndex()].position != "SW") { + player[i]->setCurrentIndex(findFirstOnPost("SW")); + } + } else { // CB + if(pls[player[i]->currentIndex()].position != "CB") { + player[i]->setCurrentIndex(findFirstOnPost("CB")); + } + } + } + for(i=defsC+1; i<=defsC+midsC; ++i) { + if(i==defsC+1) { // LM + if(pls[player[i]->currentIndex()].position != "LM") { + player[i]->setCurrentIndex(findFirstOnPost("LM")); + } + } else if(i==defsC+midsC) { // RM + if(pls[player[i]->currentIndex()].position != "RM") { + player[i]->setCurrentIndex(findFirstOnPost("RM")); + } + // RM is last managed from midfields, should set finding from him + from = player[i]->currentIndex(); + } else { // CM + if(pls[player[i]->currentIndex()].position != "CM") { + player[i]->setCurrentIndex(findFirstOnPost("CM")); + } + } + } + for(i=defsC+midsC+1; i<=defsC+midsC+forsC; ++i) { + if(forsC==3) { + if(i==defsC+midsC+1) { // LF + if(pls[player[i]->currentIndex()].position != "LF") { + player[i]->setCurrentIndex(findFirstOnPost("LF")); + } + } else if(i==10) { // RF + if(pls[player[i]->currentIndex()].position != "RF") { + player[i]->setCurrentIndex(findFirstOnPost("RF")); + } + } + } else { // always CF + if(pls[player[i]->currentIndex()].position != "CF") { + player[i]->setCurrentIndex(findFirstOnPost("CF")); + } + } + } +} + +int PerformanceTab::findFirstOnPost(const QString &post) { + for(int i=0; i +#include +#include +#include +#include +#include +#include + +#include "playerdetail.h" +#include "clubtab.h" + +extern void parse(const QString &); +extern int playerCnt; +extern Player pls[]; + +extern ClubStruct club; + +class PerformanceTab: public QWidget { + Q_OBJECT + QVBoxLayout *mainLayout; + QComboBox *player[11]; + QLabel *postLabel[11]; + QLabel *plPerfLabel[11]; + QComboBox *orders[11]; + QComboBox *format; + QComboBox *aggression; + QComboBox *home; + QHBoxLayout *plCont[11]; + QLabel *result; + QPushButton *cButt; + QHBoxLayout *container; + QPushButton *reorderPl; + + double defs; //defender points count + int defsC; //count of defenders + double mids; //midfield points count + int midsC; + double fors; //forward points count + int forsC; + int aggress; //aggression + + void countPerf(); + void postLabels(); //redraw position labels + void init(); + int findFirstOnPost(const QString &); // find first player of +public: + PerformanceTab(QWidget *parent = 0); + ~PerformanceTab(); +protected slots: + void formatChange(int); + void recount(); + void aggressChange(int); + void playerChange(int); + void dataChanged(); + void reorderPlayers(); +}; + +#endif diff --git a/playerdetail.cc b/playerdetail.cc new file mode 100755 index 0000000..a97361b --- /dev/null +++ b/playerdetail.cc @@ -0,0 +1,137 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "playerdetail.h" + +PlayerDetail::PlayerDetail(int idx, QWidget * parent): QWidget(parent), i(idx) { + mainLayout = new QVBoxLayout; + QString info = ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + if(pls[i].position=="GK") { + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + } else if(pls[i].position == "LB" || pls[i].position == "CB" || pls[i].position == "RB" || pls[i].position == "SW") { + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + } else if(pls[i].position == "LM" || pls[i].position == "CM" || pls[i].position == "RM") { + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + } else if(pls[i].position == "LF" || pls[i].position == "CF" || pls[i].position == "RF") { + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + info += ""; + } + info += "
" + pls[i].fname + " " + pls[i].lname + "[" + pls[i].age + "]
" + tr("Position") + "" + pls[i].position + "" + tr("Rating") + "" + pls[i].rating + "%
" + tr("Moral") + "" + pls[i].morale + "%" + tr("Aggresion") + "" + pls[i].aggresion + "%
" + tr("Fitness") + "" + pls[i].fitness + "%" + tr("Experience") + "" + pls[i].experience + "%
" + tr("Stamina") + "" + pls[i].condition + "%" + tr("Best rate") + "" + pls[i].bestRate + "
" + tr("Form") + "" + pls[i].form + "
" + tr("Speed") + "" + pls[i].speed + "%" + tr("Ball controll") + "" + pls[i].ballCntrl + "%
" + tr("Courage") + "" + pls[i].skill[0] + "%" + tr("Flexibility") + "" + pls[i].skill[1] + "%
" + tr("Jumping") + "" + pls[i].skill[2] + "%" + tr("Goalkicks") + "" + pls[i].skill[3] + "%
" + tr("Play along") + "" + pls[i].specSkill[0] + "%" + tr("Reflex") + "" + pls[i].specSkill[1] + "%
" + tr("Passing") + "" + pls[i].skill[0] + "%" + tr("Shooting") + "" + pls[i].skill[1] + "%
" + tr("Play it out") + "" + pls[i].skill[2] + "%" + tr("Strength") + "" + pls[i].skill[3] + "%
" + tr("Heading") + "" + pls[i].specSkill[0] + "%" + tr("Tackling") + "" + pls[i].specSkill[1] + "%
" + tr("Heading") + "" + pls[i].skill[0] + "%" + tr("Shooting") + "" + pls[i].skill[1] + "%
" + tr("Tackling") + "" + pls[i].skill[2] + "%" + tr("Strength") + "" + pls[i].skill[3] + "%
" + tr("Passing") + "" + pls[i].specSkill[0] + "%" + tr("Playmaking") + "" + pls[i].specSkill[1] + "%
" + tr("Passing") + "" + pls[i].skill[0] + "%" + tr("Tackling") + "" + pls[i].skill[1] + "%
" + tr("Insight") + "" + pls[i].skill[2] + "%" + tr("Strength") + "" + pls[i].skill[3] + "%
" + tr("Heading") + "" + pls[i].specSkill[0] + "%" + tr("Shooting") + "" + pls[i].specSkill[1] + "%


"; + int hidden = ((pls[i].rating.toInt() * 15) - pls[i].morale.toInt() - pls[i].experience.toInt() - pls[i].condition.toInt() - pls[i].speed.toInt() - pls[i].ballCntrl.toInt() - pls[i].skill[0].toInt() - pls[i].skill[1].toInt() - pls[i].skill[2].toInt() - pls[i].skill[3].toInt() - 2*pls[i].specSkill[0].toInt() - 2*pls[i].specSkill[1].toInt())/2; + info += ""; + if(pls[i].morale.toInt()<100) { + int rating_mor = ((pls[i].rating.toInt() * 15) + (100 - pls[i].morale.toInt())) / 15; + info += ""; + } + if(pls[i].experience.toInt()<100 && pls[i].morale.toInt()<100) { + int rating_all = ((pls[i].rating.toInt() * 15) + (100 - pls[i].experience.toInt()) + (100 - pls[i].morale.toInt())) / 15; + info += ""; + } else if(pls[i].experience.toInt()<100) { + int rating_exp = ((pls[i].rating.toInt() * 15) + (100 - pls[i].experience.toInt())) / 15; + info += ""; + } + info += ""; + info += ""; + if(pls[i].position=="GK") { + int plus = pls[i].specSkill[0].toInt() + pls[i].speed.toInt(); + int minus = pls[i].specSkill[1].toInt() + pls[i].skill[0].toInt(); + QString temp; + temp.setNum((float)(plus-minus)/20, 'f', 2); + info += ""; + } else if(pls[i].position == "LB" || pls[i].position == "RB") { + int plus = pls[i].skill[0].toInt() + pls[i].speed.toInt(); + int minus = pls[i].specSkill[0].toInt() + pls[i].skill[3].toInt(); + QString temp; + temp.setNum((float)(plus-minus)/20, 'f', 2); + QString text = ""; + plus = pls[i].skill[0].toInt(); + minus = pls[i].specSkill[1].toInt(); + temp.setNum((float)(plus-minus)/20, 'f', 2); + info += text + ""; + } else if(pls[i].position == "CB") { + int plus = pls[i].skill[0].toInt(); + int minus = pls[i].specSkill[1].toInt(); + QString temp; + temp.setNum((float)(plus-minus)/20, 'f', 2); + info += ""; + } else if(pls[i].position == "LM" || pls[i].position == "RM") { + int plus = pls[i].specSkill[0].toInt() + pls[i].speed.toInt(); + int minus = pls[i].skill[3].toInt() + pls[i].skill[0].toInt(); + QString temp, text; + temp.setNum((float)(plus-minus)/20, 'f', 2); + text = ""; + plus = pls[i].specSkill[0].toInt() + pls[i].specSkill[1].toInt(); + minus = pls[i].skill[0].toInt() + pls[i].skill[1].toInt(); + temp.setNum((float)(plus-minus)/20, 'f', 2); + info += text + ""; + } else if(pls[i].position == "CM") { + int plus = pls[i].specSkill[0].toInt() + pls[i].specSkill[1].toInt(); + int minus = pls[i].skill[0].toInt() + pls[i].skill[1].toInt(); + QString temp; + temp.setNum((float)(plus-minus)/20, 'f', 2); + info += ""; + } else if(pls[i].position == "LF" || pls[i].position == "CF" || pls[i].position == "RF") { + int plus = pls[i].specSkill[1].toInt() + pls[i].skill[1].toInt(); + int minus = pls[i].specSkill[0].toInt() + pls[i].skill[0].toInt(); + QString temp, text; + temp.setNum((float)(plus-minus)/20, 'f', 2); + text = ""; + if(pls[i].position == "CF") { + plus = pls[i].specSkill[0].toInt() + pls[i].skill[3].toInt(); + minus = pls[i].specSkill[1].toInt() + pls[i].skill[1].toInt(); + temp.setNum((float)(plus-minus)/20, 'f', 2); + text += ""; + } + plus = pls[i].skill[2].toInt(); + minus = pls[i].skill[1].toInt(); + temp.setNum((float)(plus-minus)/20, 'f', 2); + info += text + ""; + } + info += "
" + tr("Estimated Hidden") + "" + QString().setNum(hidden) + "%
" + tr("Rating with 100% morale") + "" + QString().setNum(rating_mor) + "%
" + tr("Rating with 100% experience and morale") + "" + QString().setNum(rating_all) + "%
" + tr("Rating with 100% experience") + "" + QString().setNum(rating_exp) + "%
" + tr("Order") + " - " + tr("Normal") + "0.00%
" + tr("Order") + " - " + tr("Play along") + "" + temp + "%
" + tr("Order") + " - " + tr("Play along wing") + "" + temp + "%
" + tr("Order") + " - " + tr("Play it out") + "" + temp + "%
" + tr("Order") + " - " + tr("Play it out") + "" + temp + "%
" + tr("Order") + " - " + tr("Play along wing") + "" + temp + "%
" + tr("Order") + " - " + tr("Passing") + "" + temp + "%
" + tr("Order") + " - " + tr("Passing") + "" + temp + "%
" + tr("Order") + " - " + tr("Own chance") + "" + temp + "%
" + tr("Order") + " - " + tr("Targetman") + "" + temp + "%
" + tr("Order") + " - " + tr("Free role") + "" + temp + "%
"; + info += tr("
How much points of performance orders add,
or remove if result is negative."); + + player = new QLabel(info); + mainLayout->addWidget(player); + setLayout(mainLayout); +} + +PlayerDetail::~PlayerDetail() { + delete player; + delete mainLayout; +} + diff --git a/playerdetail.h b/playerdetail.h new file mode 100755 index 0000000..9d1663e --- /dev/null +++ b/playerdetail.h @@ -0,0 +1,47 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef PLAYERDETAIL__H__ +#define PLAYERDETAIL__H__ + +#include +#include +#include +#include +#include + +struct Player { + QString id; + QString fname; + QString lname; + QString position; + QString rating; + QString morale; + QString aggresion; + QString fitness; + QString experience; + QString condition; + QString speed; + QString ballCntrl; + QString skill[4]; + QString specSkill[2]; + QString number, birth, age, height, weight, foot, injured, injury, leagueSusp, cupSusp, contract, wage, house, car, signBonus, winBonus, totalGames, leagueGoals, cupGoals, leagueCardsY, cupCardsY, leagueCardsR, cupCardsR, friendlyGoals, friendlyCardsY, friendlyCardsR, totalInjuries, curGames, curLeagueGoals, curCupGoals, curLeagueCardsY, curCupCardsY, curLeagueCardsR, curCupCardsR, curFriendlyGoals, curFriendlyCardsY, curFriendlyCardsR, curInjuries, bestRate, form, nick, country; +}; + +extern Player pls[]; +extern int playerCnt; + +class PlayerDetail: public QWidget { + Q_OBJECT + QVBoxLayout *mainLayout; + QLabel *player; + int i; +public: + PlayerDetail(int idx, QWidget *parent = 0); + ~PlayerDetail(); +}; + +#endif diff --git a/playertab.cc b/playertab.cc new file mode 100755 index 0000000..9c05369 --- /dev/null +++ b/playertab.cc @@ -0,0 +1,86 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "playertab.h" + +PlayerCont::PlayerCont(int pos, QWidget *parent) : QWidget(parent) { + tabWidget = new QTabWidget; + tabWidget->setTabPosition(QTabWidget::West); + for(int i=0; iaddTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } else if(pos==1) { + if(pls[i].position=="LB") tabWidget->addTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } else if(pos==2) { + if(pls[i].position=="CB") tabWidget->addTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } else if(pos==3) { + if(pls[i].position=="SW") tabWidget->addTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } else if(pos==4) { + if(pls[i].position=="RB") tabWidget->addTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } else if(pos==5) { + if(pls[i].position=="LM") tabWidget->addTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } else if(pos==6) { + if(pls[i].position=="CM") tabWidget->addTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } else if(pos==7) { + if(pls[i].position=="RM") tabWidget->addTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } else if(pos==8) { + if(pls[i].position=="LF") tabWidget->addTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } else if(pos==9) { + if(pls[i].position=="CF") tabWidget->addTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } else if(pos==10) { + if(pls[i].position=="RF") tabWidget->addTab(new PlayerDetail(i, this), pls[i].fname + " " + pls[i].lname); + } + } + mainLayout = new QVBoxLayout; + mainLayout->addWidget(tabWidget); + setLayout(mainLayout); +} + +PlayerCont::~PlayerCont() { + delete tabWidget; + delete mainLayout; +} + +PlayerTab::PlayerTab(QWidget *parent) : QWidget(parent) { + initTabs(); +} + +PlayerTab::~PlayerTab() { + delete tabWidget; + delete mainLayout; +} + +void PlayerTab::initTabs() { + tabWidget = new QTabWidget; + tabWidget->setTabPosition(QTabWidget::North); + tabWidget->addTab(new PlayerCont(0), "GK"); + tabWidget->addTab(new PlayerCont(1), "LB"); + tabWidget->addTab(new PlayerCont(2), "CB"); + tabWidget->addTab(new PlayerCont(3), "SW"); + tabWidget->addTab(new PlayerCont(4), "RB"); + tabWidget->addTab(new PlayerCont(5), "LM"); + tabWidget->addTab(new PlayerCont(6), "CM"); + tabWidget->addTab(new PlayerCont(7), "RM"); + tabWidget->addTab(new PlayerCont(8), "LF"); + tabWidget->addTab(new PlayerCont(9), "CF"); + tabWidget->addTab(new PlayerCont(10), "RF"); + + mainLayout = new QVBoxLayout; + mainLayout->addWidget(tabWidget); + setLayout(mainLayout); +} + +void PlayerTab::dataChanged() { + rebuildUI(); +} + +void PlayerTab::rebuildUI() { + delete tabWidget; + delete mainLayout; + + initTabs(); +} + diff --git a/playertab.h b/playertab.h new file mode 100755 index 0000000..f09a6f4 --- /dev/null +++ b/playertab.h @@ -0,0 +1,46 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef PLAYERTAB__H__ +#define PLAYERTAB__H__ + +#include +#include +#include +#include +#include + +#include "playerdetail.h" + +extern void parse(const QString &); +extern int playerCnt; +extern Player pls[]; + +class PlayerCont: public QWidget { + Q_OBJECT + QTabWidget *tabWidget; + QVBoxLayout *mainLayout; +public: + PlayerCont(int pos, QWidget *parent = 0); + ~PlayerCont(); +}; + +class PlayerTab: public QWidget { + Q_OBJECT + QTabWidget *tabWidget; + QVBoxLayout *mainLayout; +public: + PlayerTab(QWidget *parent = 0); + ~PlayerTab(); + + void rebuildUI(); +private: + void initTabs(); +public slots: + void dataChanged(); +}; + +#endif diff --git a/proxyset.cc b/proxyset.cc new file mode 100644 index 0000000..51de32b --- /dev/null +++ b/proxyset.cc @@ -0,0 +1,72 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "proxyset.h" + +ProxySet::ProxySet(QWidget *parent) : QWidget(parent) { + QSettings settings("config/global.ini", QSettings::IniFormat); + useProxy = settings.value("Network/proxyUsed", 0).toInt(); + QString addrS = settings.value("Network/proxyAddr", "").toString(); + QString portS = settings.value("Network/proxyPort", "").toString(); + QString nameS = settings.value("Network/proxyName", "").toString(); + QString passS = settings.value("Network/proxyPass", "").toString(); + + mainLayout = new QVBoxLayout; + proxy = new QCheckBox(tr("Use proxy server")); + proxy->setCheckState((Qt::CheckState) useProxy); + connect(proxy, SIGNAL(stateChanged(int)), this, SLOT(checkChange(int))); + addr = new QLabel(tr("proxy address:")); + port = new QLabel(tr("proxy port:")); + name = new QLabel(tr("proxy username:")); + pass = new QLabel(tr("proxy password:")); + addrP = new QLineEdit(addrS); + portP = new QLineEdit(portS); + nameP = new QLineEdit(nameS); + passP = new QLineEdit(passS); + passP->setEchoMode(QLineEdit::Password); + saveButt = new QPushButton(tr("Save changes")); + connect(saveButt, SIGNAL(clicked()), this, SLOT(save())); + mainLayout->addWidget(proxy); + mainLayout->addWidget(addr); + mainLayout->addWidget(addrP); + mainLayout->addWidget(port); + mainLayout->addWidget(portP); + mainLayout->addWidget(name); + mainLayout->addWidget(nameP); + mainLayout->addWidget(pass); + mainLayout->addWidget(passP); + mainLayout->addWidget(saveButt); + setLayout(mainLayout); + this->show(); +} + +ProxySet::~ProxySet() { + delete addrP; + delete portP; + delete nameP; + delete passP; + delete proxy; + delete addr; + delete port; + delete name; + delete pass; + delete saveButt; + delete mainLayout; +} + +void ProxySet::save() { + QSettings settings("config/global.ini", QSettings::IniFormat); + settings.setValue("Network/proxyUsed", useProxy); + settings.setValue("Network/proxyAddr", addrP->text()); + settings.setValue("Network/proxyPort", portP->text()); + settings.setValue("Network/proxyName", nameP->text()); + settings.setValue("Network/proxyPass", passP->text()); + settings.sync(); +} + +void ProxySet::checkChange(int state) { + useProxy = state; +} diff --git a/proxyset.h b/proxyset.h new file mode 100644 index 0000000..a9d388c --- /dev/null +++ b/proxyset.h @@ -0,0 +1,34 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef PROXYSET__H__ +#define PROXYSET__H__ + +#include +#include +#include +#include +#include +#include +#include + +class ProxySet: public QWidget { + Q_OBJECT + QVBoxLayout *mainLayout; + QLineEdit *addrP, *portP, *nameP, *passP; + QCheckBox *proxy; + QLabel *addr, *port, *name, *pass; + QPushButton *saveButt; + int useProxy; +public: + ProxySet(QWidget *parent = 0); + ~ProxySet(); +public slots: + void save(); + void checkChange(int state); +}; + +#endif diff --git a/stadiumtab.cc b/stadiumtab.cc new file mode 100644 index 0000000..97f027b --- /dev/null +++ b/stadiumtab.cc @@ -0,0 +1,70 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "stadiumtab.h" + +StadiumTab::StadiumTab(QWidget *parent) : QWidget(parent) { + mainLayout = new QVBoxLayout; + setLayout(mainLayout); + init(); +} + +StadiumTab::~StadiumTab() { + delete label; + delete mainLayout; +} + +void StadiumTab::init() { + int cap = stadium.cap_n.toInt() + stadium.cap_e.toInt() + stadium.cap_w.toInt() + stadium.cap_s.toInt(); + QString text; + text = ""; + text += ""; + text += ""; + text += ""; + text += ""; + text += ""; + text += ""; + text += ""; + text += ""; + text += ""; + text += "
" + tr("Stadium") + "" + stadium.name + "
" + tr("Field condition") + "" + stadium.field_status + "%
" + tr("Fan base") + "" + stadium.fans + "
" + tr("satisfaction") + "" + stadium.fanSatis + "%
" + tr("Capacity") + "" + QString().setNum(cap) + "
" + tr("Parking") + "" + stadium.parking + "(" + tr("minimal") + " " + QString().setNum((int)((float)cap/3)) + ")"; + if(stadium.park_fu) text += " " + tr("unhappy!!") + ""; + text += "
" + tr("Toilets") + "" + stadium.wc + "(" + tr("minimal") + " " + QString().setNum(cap*0.01) + ")"; + if(stadium.wc_fu) text += " " + tr("unhappy!!") + ""; + text += "
" + tr("Buffets") + "" + stadium.bar + "(" + tr("minimal") + " " + QString().setNum((int)(cap*0.0044)) + ")"; + if(stadium.bar_fu) text += " " + tr("unhappy!!") + ""; + text += "

"; + text += ""; + text += ""; + text += ""; + text += ""; + text += ""; + text += "
" + tr("Price league") + "" + stadium.priceLeague + "€ (" + QString().setNum(cap) + " " + tr("attendance gives cca. ") + QString().setNum(stadium.priceLeague.toInt()*(0.9*cap)) + "€)
" + tr("Price cup") + "" + stadium.priceCup + "€ (" + QString().setNum(cap) + " " + tr("attendance gives cca. ") + QString().setNum(stadium.priceCup.toInt()*(0.9*cap)) + "€)
" + tr("Price friendly") + "" + stadium.priceFriendly + "€ (" + QString().setNum(cap/10) + " " + tr("attendance gives cca. ") + QString().setNum(stadium.priceFriendly.toInt()*(0.09*cap)) + "€)
" + tr("Price friendly cup") + "" + stadium.priceFriendlyCup + "€ (" + QString().setNum(cap/10) + " " + tr("attendance gives cca. ") + QString().setNum(stadium.priceFriendlyCup.toInt()*(0.09*cap)) + "€)

"; + text += tr("Increasing 1000 places on stadium (calculations)") + ":
"; + if(stadium.parking.toInt() < ((cap+1000)/3)) { + text += tr("You need") + " " + QString().setNum((int)((float)(cap+1000)/3)) + " " + tr("Parking places") + "
"; + } + if(stadium.wc.toInt() < ((cap+1000)*0.01)) { + text += tr("You need") + " " + QString().setNum((cap+1000)*0.01) + " " + tr("Toilets") + "
"; + } + if(stadium.bar.toInt() < ((cap+1000)*0.0044)) { + text += tr("You need") + " " + QString().setNum((cap+1000)*0.0044) + " " + tr("Buffets") + "
"; + } + label = new QLabel(text); + mainLayout->addWidget(label); + mainLayout->update(); +} + +void StadiumTab::dataChanged() { + rebuildUI(); +} + +void StadiumTab::rebuildUI() { + mainLayout->removeWidget(label); + delete label; + mainLayout->update(); + init(); +} diff --git a/stadiumtab.h b/stadiumtab.h new file mode 100644 index 0000000..7db1513 --- /dev/null +++ b/stadiumtab.h @@ -0,0 +1,38 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef STADIUMTAB__H__ +#define STADIUMTAB__H__ + +#include +#include +#include +#include + +struct StadiumStruct { + QString id, name, field_status, priceLeague, priceCup, priceFriendly, priceFriendlyCup, fans, fanSatis, cap_n, cap_e, cap_s, cap_w, lights_ne, lights_se, lights_nw, lights_sw, sb1, sb2, field, parking, wc, bar, youth_center, ds_s, ds_n, ds_e, ds_w, ds_lights_ne, ds_lights_se, ds_lights_nw, ds_lights_sw, ds_sb1, ds_sb2, ds_field, ds_park, ds_wc, ds_bar; + bool park_fu, wc_fu, bar_fu, sb_fu, lights_fu; +}; + +extern void parse(const QString &); +extern StadiumStruct stadium; + +class StadiumTab: public QWidget { + Q_OBJECT + QVBoxLayout *mainLayout; + QLabel *label; +public: + StadiumTab(QWidget *parent = 0); + ~StadiumTab(); + + void rebuildUI(); +private: + void init(); +public slots: + void dataChanged(); +}; + +#endif diff --git a/staffmember.cc b/staffmember.cc new file mode 100644 index 0000000..afb512b --- /dev/null +++ b/staffmember.cc @@ -0,0 +1,40 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "staffmember.h" + +StaffMember::StaffMember(int idx, QWidget *parent): QWidget(parent), i(idx) { + mainLayout = new QVBoxLayout; + QString info = ""; + info += ""; + info += ""; + info += ""; + info += ""; + //info += tr("Birthday") + ": " + staff[i].birth + "
"; + info += ""; + info += ""; + info += "
" + staff[i].name + "[" + staff[i].age + "]
" + tr("Role") + ""; + switch(staff[i].role.toInt()) { + case 0: info += tr("Trainer"); break; + case 1: info += tr("Scout"); break; + case 2: info += tr("Doctor"); break; + case 3: info += tr("Groundkeeper"); break; + case 4: info += tr("Assistent"); break; + case 5: info += tr("Physiotherapy"); break; + case 6: info += tr("Youth manager"); break; + default: info += staff[i].role; + } + info += "
" + tr("Wage") + "" + staff[i].wage + "€
" + tr("Contract") + "" + staff[i].contr + " (" + tr("days left") + ")
" + tr("Course") + "" + staff[i].course + "
" + tr("Rating") + "" + staff[i].rating + "%
"; + + player = new QLabel(info); + mainLayout->addWidget(player); + setLayout(mainLayout); +} + +StaffMember::~StaffMember() { + delete player; + delete mainLayout; +} diff --git a/staffmember.h b/staffmember.h new file mode 100644 index 0000000..fbf3dc9 --- /dev/null +++ b/staffmember.h @@ -0,0 +1,42 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef STAFFMEMBER__H__ +#define STAFFMEMBER__H__ + +#include +#include +#include +#include +#include + +struct StaffMemberStruct { + QString id; + QString role; + QString name; + QString wage; + QString contr; + QString age; + QString birth; + QString inservice; + QString course; + QString rating; +}; + +extern StaffMemberStruct staff[]; +extern int staffCnt; + +class StaffMember: public QWidget { + Q_OBJECT + QVBoxLayout *mainLayout; + QLabel *player; + int i; +public: + StaffMember(int idx, QWidget *parent = 0); + ~StaffMember(); +}; + +#endif diff --git a/stafftab.cc b/stafftab.cc new file mode 100644 index 0000000..da5a965 --- /dev/null +++ b/stafftab.cc @@ -0,0 +1,39 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#include "stafftab.h" + +StaffTab::StaffTab(QWidget *parent) : QWidget(parent) { + initTabs(); +} + +StaffTab::~StaffTab() { + delete tabWidget; + delete mainLayout; +} + +void StaffTab::initTabs() { + tabWidget = new QTabWidget; + tabWidget->setTabPosition(QTabWidget::West); + for(int i=0; iaddTab(new StaffMember(i, this), staff[i].name); + } + + mainLayout = new QVBoxLayout; + mainLayout->addWidget(tabWidget); + setLayout(mainLayout); +} + +void StaffTab::dataChanged() { + rebuildUI(); +} + +void StaffTab::rebuildUI() { + delete tabWidget; + delete mainLayout; + + initTabs(); +} diff --git a/stafftab.h b/stafftab.h new file mode 100644 index 0000000..1818a57 --- /dev/null +++ b/stafftab.h @@ -0,0 +1,37 @@ +/******************************************************************* +Jan Cermak | johniez | aspt.johniez.com +Creative Commons 2.5 Attribution-NonCommercial-NoDerivs 2.5 license +http://creativecommons.org/licenses/by-nc-nd/2.5/legalcode +*******************************************************************/ + +#ifndef STAFFTAB__H__ +#define STAFFTAB__H__ + +#include +#include +#include +#include +#include + +#include "staffmember.h" + +extern void parse(const QString &); +extern int staffCnt; +extern StaffMemberStruct staff[]; + +class StaffTab: public QWidget { + Q_OBJECT + QTabWidget *tabWidget; + QVBoxLayout *mainLayout; +public: + StaffTab(QWidget *parent = 0); + ~StaffTab(); + + void rebuildUI(); +private: + void initTabs(); +public slots: + void dataChanged(); +}; + +#endif -- 2.20.1