From 01b79047cd6607db6ffb1b4315af7c022c13858b Mon Sep 17 00:00:00 2001 From: Michal Cikatricis <xcikatr@mail.muni.cz> Date: Mon, 7 Jun 2021 19:47:11 +0200 Subject: [PATCH] reworked OnParticipantSubmitted event --- .../DesignTimeBuild/.dtbcache.v2 | Bin 73135 -> 73414 bytes .vs/TournamentManager/v16/.suo | Bin 41472 -> 41472 bytes ...amentManager.csprojAssemblyReference.cache | Bin 102912 -> 102912 bytes src/AddEntrantControl.cs | 10 +- src/GroupControl.cs | 2 +- src/ManageTournamentForm.cs | 97 +++++++++++------- src/ParticipantAddedEventArgs.cs | 14 +++ src/TournamentData.cs | 12 +++ 8 files changed, 93 insertions(+), 42 deletions(-) create mode 100644 src/ParticipantAddedEventArgs.cs create mode 100644 src/TournamentData.cs diff --git a/.vs/TournamentManager/DesignTimeBuild/.dtbcache.v2 b/.vs/TournamentManager/DesignTimeBuild/.dtbcache.v2 index e8e73d6227136f7bddc4bc618f9e9c0060654904..14abc66a026db82af534a2a836c1efea4dfa1f23 100644 GIT binary patch delta 1281 zcmb`E*-sNu6vppND^U}pNMunXpgw4fjb&-64~i5tJW!0SBqV*{cILKDoX(J0j69X_ zq|p~LFa7~8xS}@3C@v_(#JKPK?xRXk62T|GTNaDUn@xT_bI&>7Ip3Y>?Q>td=oUYU z-C}5yuQD#hsh?F=#b|X!rH}f(zBRJ1Dpp-pS;43*S5qm#ymAc-NZy$2_p`Xa!b_>_ z4@j&g9wS9{wxU|yy%Fc#zE#ektH9YH6l7yUD4t{3nx!O}q-${{;p`O}(N*Gn5!Pp8 zck@E0O$@lg@^+_33@yoTQY1q+^|<8;HAFl}lbIfi8VP2ZM03hr>TFddZp*M)_E?+U z**4@B7C51y!iD(}-8M9uWSZ4PHJV@saeHJ)TA^*l+SXJ@aBXz6p(hNQEZeB4%q&~6 zv&OeFI<>j1MKNuvmW3@_R`h7a8gC#P)RReDQ>>0?Q<z^@js|VRz?Nv8qWzM3c%QC$ zCW<Z0FclmpFR%rxQ~!B4DV;L@_w8g^P*+tZSzFs9dOe+CvEVkA?whguQ)-E6NYP-d z(PGIk<1I{X*nvxJFcPLmGRcB$T~D^#5b2s_=qgW-%ciI6nW-c+X7GAZj%?bz0$$+n zJcKW_QBUvsY6^?9)0(IyZ42A6q+;coaK3+QC@trz=Js}7gEjLHqfX7px>VNbW|ej{ z$K$^{{VkpAbU7bAQ6IPPx7RQ~rz>JG#_w1-EtkhwNS9f<Yoy%m42%}%ofZj6i%$7i zq30YP=Mh5ABOU{N;5aw|dcjF>3jC6+=8_UfE+Ae6m%wGv54ijaxC#cqprej0O5MQI zO>hR>0=K~(a2MPI_rctWi4XA1r#u9F!gcTnJO)p|Q;@5BhVyeEK+k)4e1Ygf<XY@Z zWd%I(ay&s^A?D%y8j&x119<aWz=zL5jT`xwiAe)!A@A__9`MB<cmltj%LvJku8fco pGp<aU{@7D0jGp~mBJ{hK4(}IhhYx^*;1K8mhrtnWRIKgn{0Xo(npFS* delta 1072 zcma*k$xjne90%~3X{ms$itLM34<4ir?F=JclpqH}K-9)SLPEyrOsSTcW@a#QFjNmF z9$^mp2e>OSu_{7EafxwP+?RtFj~-qGP0)+qM_Y}?ZIVx4e(!zXo8Rl)nsT2_y15n1 z2-n#sH}VaFAn_9K7Zg#^b~H(fze(gn4T2aF#gL>ayw;$G0(?l6q)<Q<c%c!c;FtV? zfV7TTyGgYoVO=%14(fJfKy4d{Mb!aSw`DtG=p%=M4)0pyPiK4~HD>vCT87T73L1l^ zF4JU(tjl55#A52Cg_P6A)|UP>!(^p)_Be#=ar)dnY`-&;U+%=oN@o{WT9IjF+h8na zn6}TB&9G`)OiLyuq-T1WnvRHK8kV8izRuR5@0XoS_V>L9SiCGcoN3HV-BB@gEfP+3 zQ~#HH{3gEof8$JUaH0P$+3t6OpOb7iI@###o-ZHfnADSxp#+veDU?AuR6r$EK{eDs zE!4qsV8ILYX$QjWCoJKJi@5iZtWkE9c$&!~;vv~2hvbsQBySc)J}DrDq=*z(H<Kl# z7>i3Yi^ZA6cs!BJI{3j`Vwp;B>mK?US`6Jbji^ttn3^B6&X(DV#KgzFth0Tt*_oVM zpI1N^yQ1>YW=%^Bee$}!M{v)ha14&a2{;L-;53|Z-p!ZQ7vTcuP|<V({<))r{ypcB zyZ{$r94-OfJpq%Dgv&4mSKum4!!@`LH{d3WIUBxI4Hu?QyoVWj%6*_G(DVa%2#??~ z+=e@F7iQoI&<{d0bbN}@g^}(Z1DdDxvvmC&qX+d1jPzYEIi_<V{0apP=U|aG@~0*; i4Isk2#?Kp|FMdlW@N_5IzaFk*$@u$9cG|_o<KF=4Su`sE diff --git a/.vs/TournamentManager/v16/.suo b/.vs/TournamentManager/v16/.suo index 879509338c32a17b7c9cd17b59ff62d149c10d69..fa0a33aac9d84d09ff11f04e77f6c36a0cb279c7 100644 GIT binary patch delta 1776 zcmb_c|4&<06o2>i3lDjvG!<4@SH6{R4z~ANzGYPRpdDaAK*5YGz$j4A2!YV*AZUDz zB%4|ic<0x}3C?LUO*UR)O#G!}{l&!y{$TtQOpJ+%=@RA->N%yAI!*8gZ~A%Xo^#K= z=X1`vw`!7Cll-QS+3r7U<yjt7^5vGLAHOdBYV-%@<v31-Rep_a!z1%B^cFR;TkyK! zZPPQj(g=?YXXU4H_6Lr9lm&=Bgn;-RZB~@DW=2_tC`PzoPq5og<E#+jNAw`<XzkdV zbig;p_C_ZfXj=efcV-?$*^77{F@Ufj&LBX_KhXI83~{ya;S<E~{5$cy)5RsYo1)Ml zvXqEG<X*^9H)cGt)E%gwLQtx9L^*;Ic?yv}Ci5ZQl?W<D&rxDRI<e9m$82I1Xv<BE z&Zt70F69?7<2KG9P}p2boIXT_<POS@5VsK@L&$n-YqB0j3w{=9FV&hP#O!X<8Y(GR zEn0(=I3n;lOAxgTS{OBiDw*8?Da*Pk9qQ;<-~V$gThSlc3V5wP2}#MP)kPuN5Z7FO zc)-i1d5mv_RacNS^8#wa2Kdbt6scNrF1cuVT=NA)8`|jZ{6#t{4O-G#wqcaJp7M!I zEAt<%H0Ai~(dIbYb^7_^@cOFjx@qSekH6gu0VYycse{KMI^voqDVoqG=Gs#p3{Cx~ z2XXA}jqkes4E)71L~G(&S+9_N3TbLYK$Cifle2)7??5E-=W@?aIh;`Bm;t5B2rI4q zkaXOGXdCvkHsh6LBGOf**GL1lApwaor6>}5BfJ#(vh=4<Di1sF)-E6?NgOtC9Fa6} zW)8+DszKUv!%VE3y#o^yRj3&?<$;AYq6?i)gK`1&k`WG-KJbTIV5PIq!f2%?<3%1? zwULSNxET9umO%+1<&u7p-jplH3sNORB0VU&`<cV*ArTNjJ%v52M{C{jid%dQmH(6& zDB}rGs=a5XUs+t7A6tHPCcM0~y#DC`OF55Apby3GG0l;_k(sh$D)dK0K{9;YkZRpO zsmPsU74T5A!nIgENX~rte!N0gCsd}rhs9S_P~vsqoakg5a5vTuZ*ADn^Q=|&yxAR^ zkA$ydw3?SAy5dYQVr}^wYq%d%@`mO^tAn$%un_Z@TACYW58RH8!Nscr2u>M(z3c|* zs@aZSPv!`nk>}vs4G+kp4SGXwpA(|Wex`3Xv{`(V7Y_b$^Y!RlKhqOk`NrB=&(w@3 z+}6@0d%e?5&5|TFg+eoJO;e%P_V#dSy1iX)<vA_5t#9_s6|hM-d})ur$>99J4f_(e z%q?<r_ziIjc$ufU2y~5H);}K^Ho<o<2KAu&g<<zf!psDHZ}KABiSs*CJXH3S!1?!W qun%7S%H|ytT)Nhw4Oq#WXP-g&)Vr`e?Z!X<U#iwmZm?nJ1LL2fM0~OU delta 2385 zcmbuAe{54#6vy9v>l+<=9h>W5Klr%}9AhPYYv~WAP`at3)ctTXjL9FcZe?Q-1zTiH zvM!pSrjqR)h+_CT5Cwn2(}{{$+?1aphz3OyNi_NoF&MWPf?<AdS?4n*{^MOfz4xAb z?m6$Ad+uFyP>c?WJ@eVbBc2H&%b^+KG}A@-hO)fj3bP4<5T_2YlU=1@v06^WJRgjp z(WUGn_7z1^x}-%A<<iZRIZFEIVj21=;6Y#nx3OUYdcM&-+NYsUrP?Xky(?ttE=)4+ zOkBpPm?(hG8(eN52IasH`1S`z`%3hSK^0g60>A|B1JxjtTcaB3PbTx2(lR%i#Ad`a zog!it4VV?S2Qk&rX>%#tg)kB_sRTO_%D95IJdC(M-uUP9R-lu4N5{#~l6lG1=@>B1 z23cSdm<)J2rhz*aM@Gie=AucoZF(tNcqjg1DG>&rWc@2xF4bIVMn>KYtHgcprrz<V zdRI)QhV<()-^mY&8|Mckbz<V94%u%K7=}5zH5!uZjT7~Pu<4WI)2dJ86Q3Oiy?1 zfnYD#2l~K%Z~(jv4uV&}tKbkg3|<4TgEzpN;4SbrI0B9W4ZH*11^wVXa16W;J^&wr z<KQEJAnApotYrfj4}wp@XW$e#4bFhG;2by)J_i@T7vLhe1il290Z-W1qx}{1-+*tC zz&)y5NtG$3(kBq`e08#uG%VK{c@}s}RC}BvrfQidi064s{INEil`g8KVU|si(k_-s z!}y&*5lffEm5p@M>8AlvA@6DfZFB`>UIV<ylO|}$RU`9BvcTZ3nBuFA6m^%ISTR&f zb?Q<(Ca|h>G80A0Mp!yUY;{InyGe^|JPljwj26A<1V!>kQo|61GiX!6CKl9&3#vpD zyBngJI!$Q}CaGG-)GgA{(sGvg^sptSng>h?2eM9=hRjjsrASVfv=Cx5-ON5GOQQ<O zuYppHEJDaHz?d+c6H`mVYym||>Wut~Bv+V+hD)kUY&>LzIyr^sMDzIbF_o{N@#9Ql zpkCag%pxQ1dv8&8CO61mmE=0r6jf;3rmtarvqUww(l`!lNrx29t;Un!QS-`qN71~f zS~4i>uQD$H8Y-#2^Hs?UoREg+#MHSJGIyrWw-(NiF}18h<}U+(49C2ATTupO0UFF- zK%(uWNtlIIeV`J58*#un{{K207|+x)i|tJ2CqF~)Av`;#=2j$1N*^a{qDU?h%fCc_ z$F-qcnW-)WuPai1UjL&=(-TDs8)(`{umWXdRw&#OJKB22FssGsvIpHEo5f*mvRmw- z;5^I9GR19~=WbDgEjD||p(vuD`uAx)YgeUfe>}7~iy0}>+{Gjsc09!b)X{Q_rBS5# zf+_Kw>ciK<s{(9s0FL>a$BS{x?RD#)TXAUh!n2BRabA4OFW<*f4j)&12W}fK--_MX zJ=CxG9$R_+$$s-syG~>L<1?Pr->)5eq89oBrL{TLHZMinqU3G$s_j0yzjY$6rx|!h z`&{bT-b&u~N)mUtDBix6Dp!}`!kZsy4qEJXo897eI#*hh<|bQcWzcGMyUPs19#(OW z6@Q&pm(O8$`dqxQZ>0!AQOFhyIhvXkOH+&0ZLvFD%@$Wk30Z<pm!l~daysTIZVCAb zQpZj=?X^qnMPmNt)Y#*pp0zuWIQ9|*O^M~%mFtpf21%$$F4WS&CHbjygO8W60y23D zXsgFV@m&RfTa{^&CtqYUu{u*6Q}T}aS}L+BRMTsw?;6uYX2!6dd#5#Op7#7=2gA;c z?FICMKP`p($k@J$ehU;LK7ncr=Nqp5iig!uHD3+n&_Mkh@&=R%>xH1OT)0=L7akQN z!g?(lh>xR7wSLVX?N1?ZeFH6OEM@{N?4F5W^ZOnawfOQlQ<rWqyBv!wR)@XJWeelk z<^Ojjfvn3^T04IMU0w7ub=!-0{AWm6)<E9wcwbEH+bPnFwG-(CRcMVp2PI;$P$G$q o4X3g9BIC-vu;8Y`WqZ-*vwrHH{4Du>8~$N$zqgxd-kovjFPvmR>i_@% diff --git a/obj/Debug/net5.0-windows/TournamentManager.csprojAssemblyReference.cache b/obj/Debug/net5.0-windows/TournamentManager.csprojAssemblyReference.cache index 00161d28bfa36275773cb5aeeabaddba6590f309..f94750e91f627e3ae7e8de71ee1c7ef20d9246b5 100644 GIT binary patch delta 12504 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 delta 12608 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 Yxy()H+)zpV=gT^n%d+Sei`m8h0h!tFhyVZp diff --git a/src/AddEntrantControl.cs b/src/AddEntrantControl.cs index 06abf17..ec259b7 100644 --- a/src/AddEntrantControl.cs +++ b/src/AddEntrantControl.cs @@ -17,7 +17,13 @@ namespace TournamentManager public Participant NewParticipant { get; private set; } - public event EventHandler SubmitParticipantClicked; + public delegate void ParticipantAddedDelegate(object sender, ParticipantAddedEventArgs e); + + public event ParticipantAddedDelegate SubmitParticipantClicked; + + protected void OnSubmitParticipantClicked(ParticipantAddedEventArgs e) => + SubmitParticipantClicked?.Invoke(this, e); + public AddEntrantControl() { InitializeComponent(); @@ -51,7 +57,7 @@ namespace TournamentManager Rating = int.TryParse(tbRating.Text, out int rating) ? rating : 0 }; - SubmitParticipantClicked?.Invoke(this, e); + OnSubmitParticipantClicked(new ParticipantAddedEventArgs(NewParticipant)); } private void btnReset_Click(object sender, EventArgs e) diff --git a/src/GroupControl.cs b/src/GroupControl.cs index fd57822..898b63c 100644 --- a/src/GroupControl.cs +++ b/src/GroupControl.cs @@ -84,7 +84,7 @@ namespace TournamentManager.src cbSecondOpponent.SelectedItem.ToString(), (firstScore, secondScore), index - 1)); } - protected void OnOpponentsSelected() + private void OnOpponentsSelected() { ClearTextBoxes(); if (cbFirstOpponent.SelectedItem == null || cbSecondOpponent.SelectedItem == null) diff --git a/src/ManageTournamentForm.cs b/src/ManageTournamentForm.cs index fbc7fc9..90ffc83 100644 --- a/src/ManageTournamentForm.cs +++ b/src/ManageTournamentForm.cs @@ -2,7 +2,9 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; +using System.IO; using System.Linq; +using System.Text.Json; using System.Threading.Tasks; using System.Windows.Forms; @@ -13,16 +15,36 @@ namespace TournamentManager private const string RemoveParticipantError = "Participant with this name is already signed in competition"; private const string EditParticipantError = "Participant with this name is already signed in competition"; private const string ErrorCaption = "Error"; - private readonly ObservableCollection<Participant> _participants = new(); - private List<Group> _groups; - private PlayOffTree _playOff; + private TournamentData _data; + private readonly string _path; + + // private readonly ObservableCollection<Participant> _data.Participants = new(); + // private List<Group> _data.Groups; + // private PlayOffTree _data.PlayOff; public ManageTournamentForm(string path) { InitializeComponent(); + _path = path; + AsignEventHandlers(); + AsignSaves(); + + foreach (var p in _data.Participants) + { + manageParticipantsControl.CbAddParticipant($"{p.FirstName} {p.Surname}"); + } + } + + private void AsignSaves() + { + enterantCntrl.SubmitParticipantClicked += OnSubmitParticipantClicked; + + } + + private void AsignEventHandlers() + { enterantCntrl.SubmitParticipantClicked += OnSubmitParticipantClicked; - _participants.CollectionChanged += HandleParticipantsChanged; manageParticipantsControl.ParticipantsModified += HandleOnParticipantRemovedClicked; computeControl.ComputeGroups += HandleOnComputeGroupsClicked; computeControl.ComputePlayOff += HandleOnComputePlayOffClicked; @@ -32,37 +54,34 @@ namespace TournamentManager playOffControl.RoundSelected += HandleOnRoundSelected; playOffControl.MatchSelected += HandleOnMatchSelected; playOffControl.SubmitPlayOffMatchClicked += HandleOnSubmitPlayOffMatchClicked; - - foreach (var p in _participants) + } + + private async Task Save() + { + var options = new JsonSerializerOptions { - manageParticipantsControl.CbAddParticipant($"{p.FirstName} {p.Surname}"); - } + WriteIndented = true, + }; + using var stream = File.Create(_path); + await JsonSerializer.SerializeAsync(stream, _data, options); + await stream.DisposeAsync(); + } #region eventHandlers - private void OnSubmitParticipantClicked(object sender, EventArgs e) + private void OnSubmitParticipantClicked(object sender, ParticipantAddedEventArgs e) { - if (_participants.Any(x => + if (_data.Participants.Any(x => x.FirstName.Equals(enterantCntrl.NewParticipant.FirstName) && x.Surname.Equals(enterantCntrl.NewParticipant.Surname))) { MessageBox.Show(RemoveParticipantError, ErrorCaption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } - _participants.Add(enterantCntrl.NewParticipant); + _data.Participants.Add(enterantCntrl.NewParticipant); enterantCntrl.ResetControl(); - } - - private void HandleParticipantsChanged(object sender, NotifyCollectionChangedEventArgs e) - { - if (e.Action == NotifyCollectionChangedAction.Add) - { - foreach (Participant p in e.NewItems ?? new List<Participant>()) - { - manageParticipantsControl.CbAddParticipant($"{p.FirstName} {p.Surname}"); - } - } + manageParticipantsControl.CbAddParticipant($"{e.Participant.FirstName} {e.Participant.Surname}"); } private void HandleOnParticipantRemovedClicked(object sender, ParticipantsModifiedEventArgs e) @@ -72,7 +91,7 @@ namespace TournamentManager var name = e.ParticipantName.Split(); - _participants.Remove(_participants.FirstOrDefault(x => + _data.Participants.Remove(_data.Participants.FirstOrDefault(x => x.FirstName.Equals(name[0]) && x.Surname.Equals(name[1]))); } @@ -89,15 +108,15 @@ namespace TournamentManager private void HandleOnComputeGroupsClicked(object sender, ComputeEventArgs e) { groupControl.ClearInputData(); - var numberOfGroups = (_participants.Count - 1) / e.Amount + 1; + var numberOfGroups = (_data.Participants.Count - 1) / e.Amount + 1; var groupIndex = 0; - var orderedParticipants = _participants.OrderBy(x => x.Rating); + var orderedParticipants = _data.Participants.OrderBy(x => x.Rating); groupControl.AddGroups(numberOfGroups); - _groups = new List<Group>(); + _data.Groups = new List<Group>(); for (int i = 0; i < numberOfGroups; i++) { - _groups.Add(new Group()); + _data.Groups.Add(new Group()); } foreach (var participant in orderedParticipants) @@ -107,10 +126,10 @@ namespace TournamentManager { groupIndex = 0; } - _groups[groupIndex].Members.Add(participant); + _data.Groups[groupIndex].Members.Add(participant); } - foreach (var group in _groups) + foreach (var group in _data.Groups) { var memberCount = group.Members.Count; group.Matches = new int[memberCount, memberCount]; @@ -122,10 +141,10 @@ namespace TournamentManager playOffControl.ResetInput(); try { - var toKeep = (int)Math.Round(((double)_participants.Count / (double)100) * (double)(100 - e.Amount), 0); + var toKeep = (int)Math.Round(((double)_data.Participants.Count / (double)100) * (double)(100 - e.Amount), 0); var sortedParticipants = (await ComputeAllGroupOrders()).Take(toKeep).ToList(); - _playOff = new PlayOffTree(sortedParticipants); - playOffControl.SetRounds(_playOff.Depth); + _data.PlayOff = new PlayOffTree(sortedParticipants); + playOffControl.SetRounds(_data.PlayOff.Depth); } catch (Exception ex) { @@ -144,7 +163,7 @@ namespace TournamentManager return; } - var groupMembers = _groups[result - 1].Members + var groupMembers = _data.Groups[result - 1].Members .Select(x => $"{x.FirstName} {x.Surname}").ToArray(); groupControl.AddToFirstOpponentList(groupMembers); groupControl.AddToSecondOpponentList(groupMembers); @@ -158,7 +177,7 @@ namespace TournamentManager return; } - var group = _groups[e.Index]; + var group = _data.Groups[e.Index]; var firstOpponent = group.ExtractGroupMember(e.FirstOpponent); var secondOpponent = group.ExtractGroupMember(e.SecondOpponent); @@ -172,7 +191,7 @@ namespace TournamentManager //TODO:ERROR MESSAGE return; } - var group = _groups[e.Index]; + var group = _data.Groups[e.Index]; Func<string[], Participant> matchOpponent = x => group.Members .FirstOrDefault(p => p.FirstName.Equals(x[0]) && p.Surname.Equals(x[1])); @@ -189,7 +208,7 @@ namespace TournamentManager { throw new Exception(); } - var matches = _playOff.GetRoundMatches(round); + var matches = _data.PlayOff.GetRoundMatches(round); playOffControl.SetMatches(matches); } @@ -200,14 +219,14 @@ namespace TournamentManager throw new Exception(); } - var match = _playOff.GetMatch(round, e.SelectedMatch); + var match = _data.PlayOff.GetMatch(round, e.SelectedMatch); playOffControl.SetMatch(match); } private void HandleOnSubmitPlayOffMatchClicked(object sender, MatchSubmittedEventArgs e) { - var matchNode = _playOff.GetMatchNode(e.FirstOpponent, e.SecondOpponent, e.Index); + var matchNode = _data.PlayOff.GetMatchNode(e.FirstOpponent, e.SecondOpponent, e.Index); matchNode.TreeMatch.Scores = e.Score; if (matchNode.IsRoot()) @@ -235,7 +254,7 @@ namespace TournamentManager { return Task.Factory.StartNew(() => { - return _groups.AsParallel().SelectMany(x => ComputeGroupOrder(x)) + return _data.Groups.AsParallel().SelectMany(x => ComputeGroupOrder(x)) .OrderByDescending(x => x.Item2) .ThenByDescending(x => x.Item3) .Select(x => x.Item1) diff --git a/src/ParticipantAddedEventArgs.cs b/src/ParticipantAddedEventArgs.cs new file mode 100644 index 0000000..eb4b32b --- /dev/null +++ b/src/ParticipantAddedEventArgs.cs @@ -0,0 +1,14 @@ +using System; + +namespace TournamentManager +{ + public class ParticipantAddedEventArgs : EventArgs + { + public Participant Participant { get; } + + public ParticipantAddedEventArgs(Participant participant) + { + Participant = participant; + } + } +} \ No newline at end of file diff --git a/src/TournamentData.cs b/src/TournamentData.cs new file mode 100644 index 0000000..361bd35 --- /dev/null +++ b/src/TournamentData.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace TournamentManager +{ + public class TournamentData + { + public readonly ObservableCollection<Participant> Participants = new(); + public List<Group> Groups { get; set; } + public PlayOffTree PlayOff { get; set; } + } +} \ No newline at end of file -- GitLab