Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48f56e76d4 | ||
|
|
05e6c40a57 | ||
|
|
58464b8a0d | ||
|
|
1785f3e34d | ||
|
|
33aeb6b7ba | ||
|
|
d8fbfb49e8 | ||
|
|
4803c66506 | ||
|
|
046a0ad9c8 | ||
|
|
3f292e87da | ||
|
|
7c8a801407 | ||
|
|
4c7949ff8d | ||
|
|
fdf727a52a | ||
|
|
035911d126 | ||
|
|
58b16a4b2c | ||
|
|
6e9fd68ac4 | ||
|
|
c5289a5416 | ||
|
|
b33fe6c8cc | ||
|
|
bd95b87798 | ||
|
|
8132cb003d | ||
|
|
9e59f0c5a2 | ||
|
|
e1e0565fbd | ||
|
|
f69ec8d32b | ||
|
|
c3fdf8cb4f | ||
|
|
1670443b0f | ||
|
|
73fa2b669e | ||
|
|
2d3f576764 | ||
|
|
56b855ea83 | ||
|
|
8512b40f50 | ||
|
|
1983835588 | ||
|
|
cf6a9ac4fa | ||
|
|
c59569310f | ||
|
|
a86b231581 | ||
|
|
46365c4f2e | ||
|
|
c56adb2dc0 | ||
|
|
643482bb09 | ||
|
|
038946eddc | ||
|
|
07348a9ec8 | ||
|
|
0e29a141bf | ||
|
|
fdefad6a73 | ||
|
|
89ee079320 | ||
|
|
5f37bd5d14 | ||
|
|
892ba478fd | ||
|
|
ab88cd7920 | ||
|
|
02fedc577a | ||
|
|
87568a6a53 | ||
|
|
8440e144b4 | ||
|
|
11cbd7440d | ||
|
|
d59bb5ed0d | ||
|
|
d30c857e50 | ||
|
|
37aa7088a9 | ||
|
|
b92ad91799 | ||
|
|
6d8ee84813 | ||
|
|
05ac067b23 | ||
|
|
8e7163c5c6 | ||
|
|
763beda95c | ||
|
|
472e2b2f0c | ||
|
|
2998a2b753 | ||
|
|
036550aaae | ||
|
|
4378947e44 | ||
|
|
bd7a698259 | ||
|
|
65341ee35d | ||
|
|
e57a3d37f7 | ||
|
|
437e92b361 | ||
|
|
a9c3c41d6e | ||
|
|
5a12a973f3 | ||
|
|
639b2dfe09 | ||
|
|
8cdbf873cd | ||
|
|
7990c97921 | ||
|
|
fce22c28d1 | ||
|
|
339cd017d5 | ||
|
|
3380d2ba0b | ||
|
|
d18d8dcf37 | ||
|
|
6bf628da5f | ||
|
|
bbcc92c38c | ||
|
|
0ad1f73293 | ||
|
|
1b100bccf7 | ||
|
|
7a74c5852a | ||
|
|
49f3c8b329 | ||
|
|
9514a10c27 | ||
|
|
e6a7db2c61 | ||
|
|
f69039c043 | ||
|
|
40d6727b02 | ||
|
|
796c39988f | ||
|
|
0f2a8cd746 | ||
|
|
55d05ecd12 | ||
|
|
8b61a63634 | ||
|
|
3431ffc480 | ||
|
|
c22ce4b886 | ||
|
|
eab2852773 | ||
|
|
77d47fd387 | ||
|
|
eccd965ce1 | ||
|
|
ca8b691160 | ||
|
|
bcaf65d7c6 | ||
|
|
fa7725eba2 | ||
|
|
34aa1d20f2 | ||
|
|
85643adcf3 | ||
|
|
4b9e046046 | ||
|
|
4bafada602 | ||
|
|
701e883aea | ||
|
|
7e54eea62f | ||
|
|
b2eeddc628 | ||
|
|
9b2a4ca6b1 | ||
|
|
9488620041 | ||
|
|
0ad78b75ca | ||
|
|
c99a3c9fe9 | ||
|
|
bc4643fbf3 | ||
|
|
792801f936 | ||
|
|
dd4ef2429e | ||
|
|
0af6290566 | ||
|
|
7e8b804fa0 | ||
|
|
df769d55e4 | ||
|
|
1ea65185bd | ||
|
|
8d068221dc | ||
|
|
d3f2ecc78e | ||
|
|
38f212e633 | ||
|
|
97e73a23b0 | ||
|
|
7546c5f2e2 | ||
|
|
324d1a3d74 | ||
|
|
f9c15a4d44 | ||
|
|
68fb8dade4 | ||
|
|
ee1230c5f9 | ||
|
|
1c98cfab0d | ||
|
|
376e2c3af8 | ||
|
|
bbce4bd05c | ||
|
|
c98559beb6 | ||
|
|
c13c8ba16f | ||
|
|
4d9f26af90 | ||
|
|
23a732d6da | ||
|
|
7b2186261a | ||
|
|
63d88993a7 | ||
|
|
152c02e45e | ||
|
|
7bf4abf38d | ||
|
|
3ab3259f9a | ||
|
|
cf0916379c | ||
|
|
e8b4567e60 | ||
|
|
a0e86faa78 | ||
|
|
2cbd5510e2 | ||
|
|
b9de5602cd | ||
|
|
96369aa5ee | ||
|
|
2115ef9b74 | ||
|
|
75ee9a954b | ||
|
|
7ed0167c4e | ||
|
|
b5220050f2 | ||
|
|
875f32b980 | ||
|
|
e9e0d017aa | ||
|
|
1d065678d2 | ||
|
|
bb54a8b448 | ||
|
|
0629875c3a | ||
|
|
38e8463717 | ||
|
|
7a30b58cea | ||
|
|
e406f463de | ||
|
|
59d68503a8 | ||
|
|
909336ccbd | ||
|
|
7d45bc9a36 | ||
|
|
23c8b60ea3 | ||
|
|
4dc7fb0bea | ||
|
|
4ea08c09ee | ||
|
|
6ec39a9276 | ||
|
|
4a74066319 | ||
|
|
80fde10cd5 | ||
|
|
58c3303004 | ||
|
|
c58b6fee77 | ||
|
|
b8b284441c | ||
|
|
07e89ff972 | ||
|
|
da90ffef12 | ||
|
|
b12f7cac6d | ||
|
|
c40dfdd171 | ||
|
|
b8163c7f1e | ||
|
|
7693933a7b | ||
|
|
675f3e0675 | ||
|
|
44454ef4c0 | ||
|
|
f6f59adcc5 | ||
|
|
dad1e40f93 | ||
|
|
ab950cba91 | ||
|
|
4f32e86fbd | ||
|
|
132516b0a7 | ||
|
|
b95fd9e604 | ||
|
|
72fa852208 | ||
|
|
609bd05734 | ||
|
|
9dbf6cafbd | ||
|
|
3ae7a3976f | ||
|
|
5aff485890 | ||
|
|
430511e4a8 | ||
|
|
a2403c643d | ||
|
|
1bd2b4c601 | ||
|
|
4cd6da6c30 | ||
|
|
c2a5be6d67 | ||
|
|
9d70906aca | ||
|
|
8e0bbbc312 | ||
|
|
e52fc2d196 | ||
|
|
47b1e8f64d | ||
|
|
ae3b94d6f4 | ||
|
|
44cf948d5a | ||
|
|
d983db75c4 | ||
|
|
ba02db4e40 | ||
|
|
68ca16103d | ||
|
|
e36cb26bec | ||
|
|
74bc669083 | ||
|
|
986f228113 | ||
|
|
92b02833df | ||
|
|
96754066bd | ||
|
|
c6ed7a46cd | ||
|
|
8a05c1dbf7 | ||
|
|
5fcd2a08b2 | ||
|
|
6483a58351 | ||
|
|
69c64b47f1 | ||
|
|
b2fb253969 | ||
|
|
5967a7c1e7 | ||
|
|
b908c576ba | ||
|
|
56497df68a | ||
|
|
b89c561490 | ||
|
|
7794aa89c2 | ||
|
|
f11215df36 | ||
|
|
5c2a1fa48e | ||
|
|
29876ec04a | ||
|
|
513f7e1310 | ||
|
|
867a52024a | ||
|
|
9d6b985400 | ||
|
|
706b3b151d | ||
|
|
e1f6c27a94 | ||
|
|
cdaf9e9875 | ||
|
|
71993d4a2d | ||
|
|
84115df405 | ||
|
|
5407279504 | ||
|
|
e0b211d002 | ||
|
|
ec6d4936f1 | ||
|
|
135803b2ce | ||
|
|
2fb91e8dd9 | ||
|
|
b12fc408b5 | ||
|
|
7193122a73 | ||
|
|
1ea8a1c093 | ||
|
|
b7200c0581 | ||
|
|
1ab5b65060 | ||
|
|
ac53734052 | ||
|
|
cdbce6b141 | ||
|
|
f18235bf96 | ||
|
|
f8e638d74a | ||
|
|
32dd64fca7 | ||
|
|
395f686e19 | ||
|
|
62f91d6ebb | ||
|
|
2de2189710 | ||
|
|
51aa3edb17 | ||
|
|
01fb88a525 | ||
|
|
cd52dad334 | ||
|
|
f1a7fdf5cd | ||
|
|
96de949ac5 | ||
|
|
23a860f7bb | ||
|
|
2cb539508a | ||
|
|
7059edc0b6 | ||
|
|
d417d99357 | ||
|
|
abc400e8c4 | ||
|
|
52fd21c933 | ||
|
|
d93e7a9f84 | ||
|
|
bd8b15bbd9 | ||
|
|
8ac6993fd8 | ||
|
|
b518ae3eca | ||
|
|
64f19a93ad | ||
|
|
dad45f736a | ||
|
|
2b6a60a79f | ||
|
|
a0306a412d | ||
|
|
afae51012b | ||
|
|
eaa12d0788 | ||
|
|
a5c3d5cf09 | ||
|
|
1d9333724f | ||
|
|
fb48fd82c7 | ||
|
|
bf13115a14 | ||
|
|
4bf147eee4 | ||
|
|
39be08432c | ||
|
|
0474ea1d53 | ||
|
|
78090ab15c | ||
|
|
2d37f88553 | ||
|
|
97447fe634 | ||
|
|
e11835d654 | ||
|
|
7797cf7435 | ||
|
|
71071edd05 | ||
|
|
1fb38badfb | ||
|
|
bd3399560b | ||
|
|
1ef5c670bf | ||
|
|
095f258edf | ||
|
|
5da057dc50 | ||
|
|
0a84cb0c81 | ||
|
|
d8bc3c757f | ||
|
|
80cbb9869b | ||
|
|
4a517adefb | ||
|
|
18e12f47b8 | ||
|
|
b1687f92e0 | ||
|
|
a9fb92e1d2 | ||
|
|
4781f0ba06 | ||
|
|
122451c20f | ||
|
|
08efcf9737 | ||
|
|
fad111314d | ||
|
|
8c368affd9 | ||
|
|
730d43bfd8 | ||
|
|
13e95023af | ||
|
|
283a90bc50 | ||
|
|
3d33efd7a7 | ||
|
|
8bf0ed7536 | ||
|
|
1b2c0e03e0 | ||
|
|
1a7e9776dd | ||
|
|
61d297293d | ||
|
|
e9aec2aad6 | ||
|
|
96d76d26b5 | ||
|
|
c0bc773bbc | ||
|
|
c0cfd6e167 | ||
|
|
b44fec29b1 | ||
|
|
425b1a82fd | ||
|
|
2cdf21455e | ||
|
|
fd523a645d | ||
|
|
32ff893f99 | ||
|
|
5927be56a2 | ||
|
|
b35cfbd824 | ||
|
|
3f1d98a613 | ||
|
|
e8423ee11e | ||
|
|
6cca33841a | ||
|
|
11468548c2 | ||
|
|
402abafaca | ||
|
|
664a46d438 | ||
|
|
098fbb1a23 | ||
|
|
38e32c645d | ||
|
|
6de4d74d87 | ||
|
|
b27a54e0fb | ||
|
|
3040516f84 | ||
|
|
5262cb4966 | ||
|
|
5a4199bf93 | ||
|
|
4eb2790ee4 | ||
|
|
860640cda5 | ||
|
|
354c3e04bf | ||
|
|
ac6a5cd88d | ||
|
|
7384a11070 | ||
|
|
cc4bc755ae | ||
|
|
a907675a41 | ||
|
|
b25121d94a | ||
|
|
70eed209e5 | ||
|
|
868aa305d1 | ||
|
|
82d59252ec | ||
|
|
aa921a22b7 | ||
|
|
a5152fa4cc | ||
|
|
5208be6cd1 | ||
|
|
b764726d99 | ||
|
|
3170574272 | ||
|
|
6b557b1f88 | ||
|
|
be062cc014 | ||
|
|
f4a2b788ff | ||
|
|
b773e801f7 | ||
|
|
7bf099060a | ||
|
|
0120c58ed4 | ||
|
|
c791dd81d6 | ||
|
|
141e0a64d4 | ||
|
|
ab57fac1a8 | ||
|
|
0cda9ec9ae | ||
|
|
fefa659150 | ||
|
|
3ea77974d4 | ||
|
|
70e264e693 | ||
|
|
6f9d0c4897 | ||
|
|
198d006e6d | ||
|
|
0cbe1a6988 | ||
|
|
6bd8f1d1ac | ||
|
|
7fed123f99 | ||
|
|
c6e468aba4 | ||
|
|
2d96a7e9c4 | ||
|
|
aa345e2dd7 | ||
|
|
0946c528a9 | ||
|
|
0f8ce93a21 | ||
|
|
5106f99870 | ||
|
|
eaa09435c8 | ||
|
|
18f77215f0 | ||
|
|
2b29a6ae17 | ||
|
|
73544c13a7 | ||
|
|
b1f1fe682f | ||
|
|
4aa8818cb0 | ||
|
|
048d8d1882 | ||
|
|
60adb8b55b | ||
|
|
da5ebf27c8 | ||
|
|
5dfd0ffbdd | ||
|
|
12e4e3ad8d | ||
|
|
115bc16b12 | ||
|
|
7b2a81c51d | ||
|
|
75ccf5a1af | ||
|
|
09bc617859 | ||
|
|
f4890e0adc | ||
|
|
1fed3a0ccf | ||
|
|
075fbff042 | ||
|
|
88073c6c4f | ||
|
|
53d32753f1 | ||
|
|
10e62d1ce7 | ||
|
|
013153add7 | ||
|
|
cb53e1eb31 | ||
|
|
1d94edd4b9 | ||
|
|
7dcb1e67d9 | ||
|
|
19cc2c4ed8 | ||
|
|
83cb900c1c | ||
|
|
340c270e8a | ||
|
|
1263b91cfd | ||
|
|
4e27cc6140 | ||
|
|
688e0d650e | ||
|
|
d591420054 | ||
|
|
8b0dad3d61 | ||
|
|
f0605f1e96 | ||
|
|
be523c1848 | ||
|
|
6d721fa186 | ||
|
|
905f079757 | ||
|
|
e53c186ea9 | ||
|
|
3d08755ffe | ||
|
|
d3422010df | ||
|
|
70a768e475 | ||
|
|
2503dd414f | ||
|
|
30f5a56a8d | ||
|
|
3d42ef609e | ||
|
|
4ad679b65d | ||
|
|
fc8f55930f | ||
|
|
8d7c7fc742 | ||
|
|
3ffa831a4e | ||
|
|
3d6326502d | ||
|
|
8ec01e5930 | ||
|
|
ebe0c1e6ec | ||
|
|
8bbfcd7734 | ||
|
|
68bd4b5a73 | ||
|
|
16d02f30c5 | ||
|
|
1f0cf2b3f5 | ||
|
|
9a3b806d9e | ||
|
|
5e4e56dab6 | ||
|
|
8925db961b | ||
|
|
4b0c22b2fa | ||
|
|
ed4d50a2fd | ||
|
|
18a60d854d | ||
|
|
44caaf6b4c | ||
|
|
bc7f1af5be | ||
|
|
d7b3f5df7c | ||
|
|
31ba0f22e9 | ||
|
|
c0cfb63d7b | ||
|
|
945ea04102 | ||
|
|
b3bf25f81d | ||
|
|
8c4a7ae0f0 | ||
|
|
d739d19a42 | ||
|
|
663dd92751 | ||
|
|
a14ec89b4f | ||
|
|
e821548a5d | ||
|
|
0dc6c16e6b | ||
|
|
3bb527247d | ||
|
|
2290c955ef | ||
|
|
d28e8a2eab | ||
|
|
b8674fcbb9 | ||
|
|
adcaee1480 | ||
|
|
c748149174 | ||
|
|
65fd36e9ae | ||
|
|
e2a3055046 | ||
|
|
2d9a61ca15 | ||
|
|
0fe6da7eab | ||
|
|
01660153c0 | ||
|
|
95d0d17bcf | ||
|
|
9009678f7c | ||
|
|
d55c52df62 | ||
|
|
24a128d041 | ||
|
|
cd699d5ad7 | ||
|
|
51b62ac66f | ||
|
|
fed0427cbc | ||
|
|
fb498adffe | ||
|
|
eb84ba8371 | ||
|
|
ab078bdad3 | ||
|
|
6f0da78530 | ||
|
|
8a0daed378 | ||
|
|
2636f5dde4 | ||
|
|
3f1aa74bbb | ||
|
|
af0152b945 | ||
|
|
a2d83a79ff | ||
|
|
e0f2b7e2ed | ||
|
|
cc919a08d0 | ||
|
|
b515e55378 | ||
|
|
c2b8e9c382 | ||
|
|
e553e5fa1e | ||
|
|
1aee8d4920 | ||
|
|
07629cadcb | ||
|
|
f3adfc142d | ||
|
|
554ff8ea6f | ||
|
|
ff66c3767d | ||
|
|
af2504b9cd | ||
|
|
535b901d6f | ||
|
|
e45952ea2c | ||
|
|
f85dbc4b5f | ||
|
|
96d59d1885 | ||
|
|
9df77f7d70 | ||
|
|
7346b99371 | ||
|
|
47f9c837f0 | ||
|
|
3d88d5b2a6 | ||
|
|
a9dee31c41 | ||
|
|
5abd9879fc | ||
|
|
6fe3d1664d | ||
|
|
2edd509635 | ||
|
|
7340753458 | ||
|
|
330cd2ba6d | ||
|
|
f935c7109f | ||
|
|
284ed47ddc | ||
|
|
e5262ed44f | ||
|
|
8b812735fb | ||
|
|
98524ee1e4 | ||
|
|
141aa3b0ba | ||
|
|
d81d13b40a | ||
|
|
cc300a7a2d | ||
|
|
a852423f4b | ||
|
|
c9e875540b | ||
|
|
b020349fe3 | ||
|
|
bf13877750 | ||
|
|
2408c8dcc7 | ||
|
|
7a329522bb | ||
|
|
fca0489085 | ||
|
|
70aa95ba36 | ||
|
|
d36b2c6dab | ||
|
|
32a9a3c425 | ||
|
|
bd15bb43fe | ||
|
|
ff49178dff | ||
|
|
d9f1c17053 | ||
|
|
55dbccfb35 | ||
|
|
630a7aef17 | ||
|
|
eca65db215 | ||
|
|
8214f838b4 | ||
|
|
270e882c04 | ||
|
|
e3ca3143be | ||
|
|
43e68cd43c | ||
|
|
242784ab3d | ||
|
|
71913cfe83 | ||
|
|
ec7a4df5ee | ||
|
|
be918fc3b1 | ||
|
|
a5421dbe2d | ||
|
|
450a7a8c86 | ||
|
|
431bed6819 | ||
|
|
02cf1fbed9 | ||
|
|
6b3a88905c | ||
|
|
fc5ebd2cb0 | ||
|
|
703d03d24a | ||
|
|
ed4fdf4284 | ||
|
|
10252ba7c0 | ||
|
|
49e462b54d | ||
|
|
9bd6c53642 | ||
|
|
27940b65ee | ||
|
|
7db16e87f4 | ||
|
|
9929f38f4d | ||
|
|
ccef457e41 | ||
|
|
f169991241 | ||
|
|
15c8ecc3e6 | ||
|
|
dfbc319926 | ||
|
|
6541ca2685 | ||
|
|
a3b94a3cf3 | ||
|
|
5fbdedfdca | ||
|
|
25c793e232 | ||
|
|
e141800e60 | ||
|
|
b15f4cebf1 | ||
|
|
a444e71f70 | ||
|
|
ed1b3aca92 | ||
|
|
a8aa62aaaa | ||
|
|
245b48cb0a | ||
|
|
3dc8dd7acb | ||
|
|
ba4c04f55a | ||
|
|
799f06247d | ||
|
|
e4b155b270 | ||
|
|
fcffe2ad11 | ||
|
|
ce44f015e5 | ||
|
|
f3a2525b8d | ||
|
|
783a71217f | ||
|
|
49d16a3e03 | ||
|
|
9f624d54b3 | ||
|
|
643cd33762 | ||
|
|
cdc0831ca6 | ||
|
|
40d808ed7a | ||
|
|
2eb1468781 | ||
|
|
d223929caa | ||
|
|
c6783383ef | ||
|
|
9b776c52f7 | ||
|
|
627f228e4e | ||
|
|
720695b613 | ||
|
|
c7e89a8e0a | ||
|
|
1704abcd47 | ||
|
|
3ba69bfdbc | ||
|
|
d8ba3e1198 | ||
|
|
2b4ee75393 | ||
|
|
eaf6e27c56 | ||
|
|
d104a6b3b7 | ||
|
|
f188869413 | ||
|
|
6c9ec7238d | ||
|
|
d2fb9f2b7b | ||
|
|
dad7fe654a | ||
|
|
f6522db4f1 | ||
|
|
5ca1c87ba8 | ||
|
|
c05be5e6a1 | ||
|
|
9f4bed9cfe | ||
|
|
e1ccbfb672 | ||
|
|
ef65163ed8 | ||
|
|
fa290833ce | ||
|
|
8b75a6fdc3 | ||
|
|
4df93163f7 | ||
|
|
5867fba95d | ||
|
|
1f68d1d7a0 | ||
|
|
050057e43f | ||
|
|
4a327411d4 | ||
|
|
62bc828e79 | ||
|
|
cb9a9bdd92 | ||
|
|
5ac21f14fb | ||
|
|
3cc78e6f72 | ||
|
|
a4091cc47f | ||
|
|
e61be98c61 | ||
|
|
9413e89ce5 | ||
|
|
a1ba9579fc | ||
|
|
59467becf9 | ||
|
|
1073ff84e9 | ||
|
|
d819e440dd | ||
|
|
d76f465086 | ||
|
|
ca6e11715d | ||
|
|
2c976f0ad1 | ||
|
|
9e8e10fce8 | ||
|
|
ac5df69c67 | ||
|
|
671ef41a5b | ||
|
|
33b69b09a0 | ||
|
|
6e8c1df339 | ||
|
|
65c873da9a | ||
|
|
0480405291 | ||
|
|
03e317f1c5 | ||
|
|
2e4dbd4431 | ||
|
|
9a32a5ec67 | ||
|
|
3bbc42941b | ||
|
|
0d9abc047b | ||
|
|
53d8c12e3f | ||
|
|
98e9dd33b8 | ||
|
|
467858b101 | ||
|
|
f37cbbe0ee | ||
|
|
de2b4ae6fd | ||
|
|
5e490f7243 | ||
|
|
633b636c57 | ||
|
|
25c9ab908d | ||
|
|
6e415700c0 | ||
|
|
58ab793534 | ||
|
|
5985d1196e | ||
|
|
e5cf7ae712 | ||
|
|
96655304ff | ||
|
|
55194f0830 | ||
|
|
c285cbafa8 | ||
|
|
ff20d27f41 | ||
|
|
f46c271194 | ||
|
|
aac84e99e2 | ||
|
|
2a9c8f5342 | ||
|
|
d32e766561 | ||
|
|
7f5f3b496a | ||
|
|
6e066e5031 | ||
|
|
773ac8ffa0 | ||
|
|
a13be3156b | ||
|
|
d2123bef10 | ||
|
|
1a9d340db1 | ||
|
|
f99e6e9188 | ||
|
|
2c9c0f8563 | ||
|
|
91939df1e6 | ||
|
|
aa2bb376b1 | ||
|
|
c251e589c5 | ||
|
|
8ca84522ac | ||
|
|
7a18a58f5d | ||
|
|
00d7c5777c | ||
|
|
31bc2a8b9b | ||
|
|
756ffdcea8 | ||
|
|
e10b5e21a5 | ||
|
|
999d28c906 | ||
|
|
69e0968c35 | ||
|
|
71c4214cb3 | ||
|
|
786689ecfc | ||
|
|
45e8e8a9b7 | ||
|
|
2116149a30 | ||
|
|
674ee6144e | ||
|
|
b5006ff520 | ||
|
|
a6e7d77d1d | ||
|
|
46e80e277a | ||
|
|
194b947e1b | ||
|
|
e34e3194df | ||
|
|
9aeab69581 | ||
|
|
d7186b7052 | ||
|
|
3c51b091b9 | ||
|
|
5e86462676 | ||
|
|
36103452da | ||
|
|
fa2f08ba75 | ||
|
|
7251abdd60 | ||
|
|
80d87c4139 | ||
|
|
7eace1a892 | ||
|
|
44684e9377 | ||
|
|
fe7bf108f3 | ||
|
|
16bf0a7236 | ||
|
|
48491d6b90 | ||
|
|
4d3a0375aa | ||
|
|
f50118fb45 | ||
|
|
03773e52ca | ||
|
|
001d1aa5b4 | ||
|
|
87df2c4d6d | ||
|
|
59321c0e46 | ||
|
|
5ee027020b | ||
|
|
4c81f3bb1e | ||
|
|
83dd20dd55 | ||
|
|
f59a2f6f48 | ||
|
|
8388768edc | ||
|
|
38e8c9a0c8 | ||
|
|
03bf7212a0 | ||
|
|
84dca4a714 | ||
|
|
c14ffe900a | ||
|
|
4428e74d10 | ||
|
|
386b5f9b6b | ||
|
|
2394f0abc4 | ||
|
|
4a4a30b0fd | ||
|
|
d530108854 | ||
|
|
5836855636 | ||
|
|
6ecbe8c951 | ||
|
|
50a6cc3223 | ||
|
|
3caee644ab | ||
|
|
021f79ff8c | ||
|
|
419de81457 | ||
|
|
fe8cb76d52 | ||
|
|
f52516b49f | ||
|
|
70e66927a6 | ||
|
|
18a0ed75c4 | ||
|
|
c62490d410 | ||
|
|
3602fd479b | ||
|
|
335d590106 | ||
|
|
a9d8a3929e | ||
|
|
b814a23a57 | ||
|
|
d6aeda8cfd | ||
|
|
c95b402683 | ||
|
|
ebecef31f4 | ||
|
|
cc815c0778 | ||
|
|
6a5cde8a33 | ||
|
|
d58c1b5fca | ||
|
|
dd729f815d | ||
|
|
49f3ad6304 | ||
|
|
7c20402bd5 | ||
|
|
09f96d4cce | ||
|
|
04d0e82ea8 | ||
|
|
d855a7025e | ||
|
|
bdb7dfb8c6 | ||
|
|
a64001a333 | ||
|
|
07a406142a | ||
|
|
7523e812ea | ||
|
|
a008bac794 | ||
|
|
904cea0389 | ||
|
|
005073060a | ||
|
|
eafd648a19 | ||
|
|
964ad04e94 | ||
|
|
c082f181c6 | ||
|
|
747cc872ea | ||
|
|
ab00a4dc98 | ||
|
|
8045be92bf | ||
|
|
e6ff41428f | ||
|
|
f6bc4c953a | ||
|
|
a449ff23a4 | ||
|
|
8e5db104a2 | ||
|
|
dc4d3a9ea3 | ||
|
|
a8ffb45529 | ||
|
|
2532c2b2a1 | ||
|
|
3897dbc6e5 | ||
|
|
d1daf73086 | ||
|
|
4a02df82a4 | ||
|
|
3b73cb6e99 | ||
|
|
c891c3dd30 | ||
|
|
f318dffdeb | ||
|
|
9bc7edb246 | ||
|
|
ac2fa9b7bc | ||
|
|
9abf59170a | ||
|
|
fec3c68958 | ||
|
|
90fd7bfd1b | ||
|
|
9544b69047 | ||
|
|
9beb8e0035 | ||
|
|
27558a3dca | ||
|
|
8852671151 | ||
|
|
19b9eb69f1 | ||
|
|
b5869e348c | ||
|
|
2ed0a14c29 | ||
|
|
be751c0443 | ||
|
|
557e539fad | ||
|
|
057e41342b | ||
|
|
96f35493a4 | ||
|
|
2f65e3d257 | ||
|
|
dcffc8b2db | ||
|
|
04873b5847 | ||
|
|
076e81c529 | ||
|
|
1dc4293eb5 | ||
|
|
01d1753620 | ||
|
|
669da60852 | ||
|
|
7e46267e43 | ||
|
|
fde007bf30 | ||
|
|
1fdaf6933d | ||
|
|
522ba48c85 | ||
|
|
70fcc09b02 | ||
|
|
bfd72eb2b2 | ||
|
|
0e1352e99b | ||
|
|
feeb3348bf | ||
|
|
5dcee95c6b | ||
|
|
4b3e67cae9 | ||
|
|
3751569ac5 | ||
|
|
a667ffd671 | ||
|
|
2495f0c9de | ||
|
|
540e92d42a | ||
|
|
063df2cbea | ||
|
|
3c44f0746b | ||
|
|
081fd61793 | ||
|
|
05c0fc4430 | ||
|
|
8cbe874f22 | ||
|
|
841a8071d0 | ||
|
|
7c8da47f6e | ||
|
|
890143c806 | ||
|
|
01293cfb8c | ||
|
|
a2dce0febb | ||
|
|
172b13e931 | ||
|
|
421386fb32 | ||
|
|
e256bba2a2 | ||
|
|
24fec0bcfe | ||
|
|
344d0f966a | ||
|
|
f337146a4d | ||
|
|
4cfa7b0ccf | ||
|
|
cf7561ccc7 | ||
|
|
b0101bfbcb | ||
|
|
5ff62baf85 | ||
|
|
18a42eb892 | ||
|
|
06bab721c0 | ||
|
|
4b66c70985 | ||
|
|
ffaddb47e9 | ||
|
|
72a30ad03f | ||
|
|
4971364b69 | ||
|
|
c2cce08f5b | ||
|
|
264b76ae20 | ||
|
|
dcef963710 | ||
|
|
c30f3afdfd | ||
|
|
46f4163e5c | ||
|
|
e07982ad9a | ||
|
|
51b8603fbb | ||
|
|
2934ed642d | ||
|
|
20405ec715 | ||
|
|
335faa121f | ||
|
|
5978ebe865 | ||
|
|
6fed369b57 | ||
|
|
387116b320 | ||
|
|
17b0f71bac | ||
|
|
269c354154 | ||
|
|
bd43f5633e | ||
|
|
3244ffcf97 | ||
|
|
1d60ae7749 | ||
|
|
9392ba47e6 | ||
|
|
bf01d8254e | ||
|
|
92ffe729a6 | ||
|
|
7439c2474e | ||
|
|
1e3e1d5da0 | ||
|
|
08f63724b4 | ||
|
|
2437c27402 | ||
|
|
e0e9b451ca | ||
|
|
29ce8b804b | ||
|
|
0e15784a43 | ||
|
|
c8d1952e60 | ||
|
|
cefd8501c8 | ||
|
|
e00975bf4a | ||
|
|
f50098ee91 | ||
|
|
877e915969 | ||
|
|
7e1fc8fe46 | ||
|
|
cd5801a9b2 | ||
|
|
873045826b | ||
|
|
d5a3e5c5f1 | ||
|
|
bbdccf62b1 | ||
|
|
ecd036e6e7 | ||
|
|
2fb0e9c478 | ||
|
|
74aca81322 | ||
|
|
1646516b68 | ||
|
|
be9d94dd6f | ||
|
|
087aa8e889 | ||
|
|
cce8c5912f | ||
|
|
c8e48310c7 | ||
|
|
f9df53533c | ||
|
|
267d0e08a2 | ||
|
|
1d38fbe356 | ||
|
|
f255c2f713 | ||
|
|
e500bb57dd | ||
|
|
0c3dde7663 | ||
|
|
c0e25d6422 | ||
|
|
c4ffe98eff | ||
|
|
186a546708 | ||
|
|
834b94f3f3 | ||
|
|
1be0aee9b8 | ||
|
|
f40fbb476e | ||
|
|
6327972ecf | ||
|
|
85f79ac3ca | ||
|
|
57389b35d6 | ||
|
|
6ab053ab10 | ||
|
|
4a7e009422 | ||
|
|
8e156deb35 | ||
|
|
ceb683838b | ||
|
|
603f90dadb | ||
|
|
1cba4483eb | ||
|
|
59ef7d6ff5 | ||
|
|
df996c00b3 | ||
|
|
3e8f21e843 | ||
|
|
b890eef52d | ||
|
|
f3b49ae1db | ||
|
|
939e2b4444 | ||
|
|
d864a773c3 | ||
|
|
f246f21277 | ||
|
|
0bf9fe6b9f | ||
|
|
92a538ac17 | ||
|
|
0ac6c0c62c | ||
|
|
cb3dd642d2 | ||
|
|
1afe75b6cf | ||
|
|
c1b4392ac1 | ||
|
|
c95533a7ea | ||
|
|
b76db3b06e | ||
|
|
e3190bade5 | ||
|
|
5f5257f000 | ||
|
|
c50fdd9f6e | ||
|
|
bb93cf4944 | ||
|
|
4caaa36d26 | ||
|
|
da3956764c | ||
|
|
3f9ce2fa11 | ||
|
|
91bde6eab5 | ||
|
|
c0025b08c5 | ||
|
|
6f8f57ca4a | ||
|
|
ba15f8c74c | ||
|
|
42a02274d9 | ||
|
|
fb58703e64 | ||
|
|
5b152ace97 | ||
|
|
e9a258bb8c | ||
|
|
31d43ae8e6 | ||
|
|
9dd2b83b8c | ||
|
|
0fad22d5fc | ||
|
|
a32fc2ed17 | ||
|
|
d5f90772fe | ||
|
|
247365d762 | ||
|
|
6079d7f02d | ||
|
|
c3cb14a351 | ||
|
|
381e277eb9 | ||
|
|
6e6b9faa38 | ||
|
|
6ff4f0a992 | ||
|
|
fcf4c9f187 | ||
|
|
81941cba4e | ||
|
|
69e337bcd2 | ||
|
|
418f626023 | ||
|
|
3da33aba84 | ||
|
|
2f6c665c5c | ||
|
|
54252f8e0c | ||
|
|
e270d6ae15 | ||
|
|
79a543cab3 | ||
|
|
bdf8e2c2ff | ||
|
|
ec2e293095 | ||
|
|
0169ffd39e | ||
|
|
3b51c8e6ad | ||
|
|
2a26b587a7 | ||
|
|
cbbf1221e6 | ||
|
|
45d9434965 | ||
|
|
498d992661 | ||
|
|
1a88d99aed | ||
|
|
c5a69bc637 | ||
|
|
664f0fa519 | ||
|
|
86e42c0d0b | ||
|
|
8cadbeda17 | ||
|
|
3d644f9a36 | ||
|
|
0988eae87c | ||
|
|
1e78ef1aba | ||
|
|
89c07ebc0e | ||
|
|
75a9c73d0f | ||
|
|
222aa771c2 | ||
|
|
55c7526e90 | ||
|
|
aa9fb87556 | ||
|
|
aad88dfb01 | ||
|
|
036a008e2b | ||
|
|
afe35b3875 | ||
|
|
66dd47f4ae | ||
|
|
faf4da04ad | ||
|
|
5a41cafc5d | ||
|
|
56e49ab0e1 | ||
|
|
d7c028048d | ||
|
|
fdcd7d1b84 | ||
|
|
bea629ed42 | ||
|
|
17c9fa0520 | ||
|
|
c4112aea66 | ||
|
|
51f2710f57 | ||
|
|
5c19957288 | ||
|
|
c07bf453e9 | ||
|
|
8390f87352 | ||
|
|
5096784a7d | ||
|
|
696713eccf | ||
|
|
1a5e3531f5 | ||
|
|
7abe18f595 | ||
|
|
50a0b56a86 | ||
|
|
df85c4651b | ||
|
|
7c55bd9060 | ||
|
|
2c6b10d398 | ||
|
|
84216ffa7d | ||
|
|
d82f564794 | ||
|
|
8dee3b7686 | ||
|
|
89cea9bb03 | ||
|
|
fe91360921 | ||
|
|
5c36bcea8e | ||
|
|
7f6fa9ada0 | ||
|
|
37a4bed317 | ||
|
|
f715d196b0 | ||
|
|
13f6268082 | ||
|
|
21526c5f83 | ||
|
|
c1d62d6c60 | ||
|
|
ae46e7475c | ||
|
|
9199aeb1c3 | ||
|
|
3f2f140646 | ||
|
|
fdbff50cf4 | ||
|
|
92335be733 | ||
|
|
b4e134599c | ||
|
|
4f5f072bb5 | ||
|
|
d3099a42fe | ||
|
|
75627d0fb3 | ||
|
|
7e00d8cce3 | ||
|
|
02cc555cc0 | ||
|
|
d2a2de0a4d | ||
|
|
e086982ad9 | ||
|
|
38a7a8040b | ||
|
|
30a4fb90bc | ||
|
|
33e170c392 | ||
|
|
0555c5e05e | ||
|
|
60b3a36577 | ||
|
|
69d6264d0a | ||
|
|
ccbc5f24b9 | ||
|
|
fed03435b2 | ||
|
|
3650d37f50 | ||
|
|
8a3e1b9862 | ||
|
|
d12423b458 | ||
|
|
42e15b3434 | ||
|
|
136acec4ba | ||
|
|
3bef2e64ec | ||
|
|
cb03605690 | ||
|
|
67b124bc96 | ||
|
|
8bea201396 | ||
|
|
adfe774efb | ||
|
|
ace38507db | ||
|
|
793f2b7f3c | ||
|
|
312d745755 | ||
|
|
9bc6b02fab | ||
|
|
17979c04bc | ||
|
|
693ef4a12a | ||
|
|
571998ab24 | ||
|
|
b04bea7093 | ||
|
|
d08e102410 | ||
|
|
3ebec942df | ||
|
|
77e804a9dc | ||
|
|
93da66765a | ||
|
|
be19e5153a | ||
|
|
970d4756e3 | ||
|
|
6e93eb6938 | ||
|
|
d6bd67b601 | ||
|
|
4be3471f42 | ||
|
|
1c34fa2a1f | ||
|
|
3df7716a84 | ||
|
|
cdc68663bf | ||
|
|
e652435890 | ||
|
|
1653671764 | ||
|
|
1ae2efca79 | ||
|
|
5d6b2e185b | ||
|
|
f34800ffed | ||
|
|
a1b39aaa2d | ||
|
|
0754fc7947 | ||
|
|
d48584fffe | ||
|
|
eafc5c80cc | ||
|
|
a5d09b5b7d | ||
|
|
aac0d7799a | ||
|
|
9d981a1041 | ||
|
|
c22a711fc7 | ||
|
|
8b23690b3d | ||
|
|
3bf8ce700a | ||
|
|
bec1282f43 | ||
|
|
a918d1e40d | ||
|
|
b7ae23fb07 | ||
|
|
73b8bf3458 | ||
|
|
3e074b3ff7 | ||
|
|
77168c86b3 | ||
|
|
987db8ea6a | ||
|
|
bfe73d7a6a | ||
|
|
6c0fe62c91 | ||
|
|
b339e456e4 | ||
|
|
69140002ed | ||
|
|
6272be98a5 | ||
|
|
2388711d4a | ||
|
|
e59587a0ea | ||
|
|
6cfc519d2d | ||
|
|
7a1e8f9570 | ||
|
|
53c669d14e | ||
|
|
72230209dc | ||
|
|
16b941344a | ||
|
|
d40b6c0092 | ||
|
|
9dbc482f31 | ||
|
|
d97a126d64 | ||
|
|
f441c1f649 | ||
|
|
d3b00b1a6f | ||
|
|
85b282479d | ||
|
|
e4d25506f6 | ||
|
|
501e6db786 | ||
|
|
becbee5af7 | ||
|
|
9e60aed4c4 | ||
|
|
e40354bf4f | ||
|
|
9089936b83 | ||
|
|
4f94f4d6cf | ||
|
|
55fc66512b | ||
|
|
6c6cc79002 | ||
|
|
11696884d9 | ||
|
|
7d2f65425b | ||
|
|
c910e522a7 | ||
|
|
2d875c18b9 | ||
|
|
c8302c35a7 | ||
|
|
d116a03ef5 | ||
|
|
611f5c723d | ||
|
|
8e1d4e9e27 | ||
|
|
b6e6c70f4d | ||
|
|
ca52530b63 | ||
|
|
30b4293483 | ||
|
|
574def08b7 | ||
|
|
8f57c5f5e8 | ||
|
|
cd2a5641de | ||
|
|
20d4ba0279 | ||
|
|
03611efecb | ||
|
|
0201b01d34 | ||
|
|
da2888eecc | ||
|
|
8c0aff349b | ||
|
|
21d7cb8d4f | ||
|
|
ed6d92dd64 | ||
|
|
b82065b094 | ||
|
|
bae0633c51 | ||
|
|
161cffeeae | ||
|
|
f141ff6135 | ||
|
|
d224527a3c | ||
|
|
cf35dd1711 | ||
|
|
63a628e4cd | ||
|
|
3a4e49938c | ||
|
|
0f28a7f1c2 | ||
|
|
d4230502ec | ||
|
|
f275385aa4 | ||
|
|
970bf44751 | ||
|
|
fab0388ae1 | ||
|
|
cf2582a25b | ||
|
|
cf8faf8c4e | ||
|
|
58be751faa | ||
|
|
2db2af67a0 | ||
|
|
87918da433 | ||
|
|
b89825876b | ||
|
|
c91fe35310 | ||
|
|
5a72a44d72 | ||
|
|
1e2920c8ae | ||
|
|
92be59e0df | ||
|
|
457e899dff | ||
|
|
20404c0ecf | ||
|
|
7398a353b5 | ||
|
|
3b413cd36a | ||
|
|
84f04fb3f0 | ||
|
|
db1966b775 | ||
|
|
1692d0c7c7 | ||
|
|
d19c6894b6 | ||
|
|
13cf14d859 | ||
|
|
bb1449c55e | ||
|
|
c59cb19fea | ||
|
|
a3b850b06d | ||
|
|
8d62eaf15e | ||
|
|
206f2d3c3c | ||
|
|
dc6bce362f | ||
|
|
9939857f17 | ||
|
|
06551dc327 | ||
|
|
c3490ea5a3 | ||
|
|
bdd00be747 | ||
|
|
f8d25bf305 | ||
|
|
e0a8dc62c4 | ||
|
|
d7c92855e9 | ||
|
|
809d739116 | ||
|
|
fdef25b860 | ||
|
|
dac8031c81 | ||
|
|
e4f63464a1 | ||
|
|
97ed5dad20 | ||
|
|
cf705553df | ||
|
|
6d1ab82d63 | ||
|
|
c3340b4389 | ||
|
|
bdd49ed19e | ||
|
|
31e1789fa3 | ||
|
|
24670bfada | ||
|
|
56ee3679ee | ||
|
|
53f88e4c60 | ||
|
|
6466c8b727 | ||
|
|
7ec535ae3e | ||
|
|
c04c9bbd44 | ||
|
|
9ef66991af | ||
|
|
2de8c98b57 | ||
|
|
6126c9eefc | ||
|
|
2ce50a17f9 | ||
|
|
36bd9744ef | ||
|
|
88a90a724d | ||
|
|
03d11c6e69 | ||
|
|
ef98da320b | ||
|
|
c7675ef2b6 | ||
|
|
34163a720d | ||
|
|
09c9431374 | ||
|
|
9400f7e622 | ||
|
|
998fb33b59 | ||
|
|
ca3b91afb5 | ||
|
|
d3b86b607b | ||
|
|
86ee057e13 | ||
|
|
57b9cfa8d1 | ||
|
|
bbf3726241 | ||
|
|
8f34552f2d | ||
|
|
ffb31b5944 | ||
|
|
69aba23d2c | ||
|
|
11e0c87ee4 | ||
|
|
4db5399b13 | ||
|
|
3b50864b18 | ||
|
|
ed148d2673 | ||
|
|
c5eb597965 | ||
|
|
6d54a25765 | ||
|
|
c1d168c605 | ||
|
|
b1dc722b43 | ||
|
|
c0aee087bd | ||
|
|
e033ceb0a8 | ||
|
|
6e629119f7 | ||
|
|
21ae8ab78f | ||
|
|
60ea25e7f9 | ||
|
|
0f9fc84085 | ||
|
|
06a1d937dc | ||
|
|
96e5c5b00e | ||
|
|
0888d7066f | ||
|
|
2cc62fb9d2 | ||
|
|
af2c284b4a | ||
|
|
18120e3ab5 | ||
|
|
e1fbd84b26 | ||
|
|
53a59e5f53 | ||
|
|
701ed71681 | ||
|
|
1011e196c4 | ||
|
|
9fab67e938 | ||
|
|
408bff4c82 | ||
|
|
3ae413a983 | ||
|
|
c01ae5afa2 | ||
|
|
8ac385c53b | ||
|
|
ccc135ef80 | ||
|
|
20d3c2ad58 | ||
|
|
f83028ab98 | ||
|
|
e63e3c76d3 | ||
|
|
6526a9760c | ||
|
|
54ad149b6f | ||
|
|
f1c28bf200 | ||
|
|
3c595bc4b5 | ||
|
|
bcb2e068d2 | ||
|
|
a62718765e | ||
|
|
fa6e72b1e6 | ||
|
|
a261c55060 | ||
|
|
a89624ca90 | ||
|
|
e18af921d9 | ||
|
|
155835e5f2 | ||
|
|
0d443e579e | ||
|
|
82cdc9fc32 | ||
|
|
bdf15fb383 | ||
|
|
3f098f36b9 | ||
|
|
4f3bd66dac | ||
|
|
a671890487 | ||
|
|
572a6f1178 | ||
|
|
55bf38703e | ||
|
|
437dbd3fb9 | ||
|
|
50623c3039 | ||
|
|
4e1f18c02c | ||
|
|
49122cfb20 | ||
|
|
6685ae671f | ||
|
|
e8a49ecf18 | ||
|
|
5dedd45a35 | ||
|
|
0525f3ba0b | ||
|
|
d9974f50e0 | ||
|
|
c8d81725cb | ||
|
|
52b69df5f4 | ||
|
|
00b35d9d07 | ||
|
|
e6239e878b | ||
|
|
2800c2bae3 | ||
|
|
6d9242b355 | ||
|
|
51bf57eff4 | ||
|
|
bde83aa111 | ||
|
|
7bf8e77999 | ||
|
|
3669d878db | ||
|
|
0f086fdd59 | ||
|
|
3e367eca59 | ||
|
|
fb76def8ce | ||
|
|
705bf5b167 | ||
|
|
06aed6e411 | ||
|
|
b1dbf5e3ba | ||
|
|
0022b63ab7 | ||
|
|
347f5357d0 | ||
|
|
e17888a044 | ||
|
|
efa8616f69 | ||
|
|
f49ec1db03 | ||
|
|
84b8eeac75 | ||
|
|
f30055ccfb | ||
|
|
a63deaac45 | ||
|
|
00f44217a4 | ||
|
|
87b41b286f | ||
|
|
c7fd14808e | ||
|
|
72865994ae | ||
|
|
c0adb038ab | ||
|
|
d525c33c2d | ||
|
|
b71ae5477b | ||
|
|
40d5bee934 | ||
|
|
6dda712a61 | ||
|
|
78644f9f4d | ||
|
|
50aaef5516 | ||
|
|
e2c90bebe2 | ||
|
|
c218f2ef23 | ||
|
|
fce22cfacd | ||
|
|
82f059d0f6 | ||
|
|
b95965684d | ||
|
|
90181c9137 | ||
|
|
e7348cb2bb | ||
|
|
d6a310c5b5 | ||
|
|
23e3d5e5ee | ||
|
|
2bdd8b517d | ||
|
|
d2cd4e233a | ||
|
|
2aadab900d | ||
|
|
5328560827 | ||
|
|
bcfcb2a089 | ||
|
|
82996efd62 | ||
|
|
5ef126462f | ||
|
|
4b4d85c303 | ||
|
|
6d7067637f | ||
|
|
07b1b73606 | ||
|
|
5f896555fc | ||
|
|
74b0afd943 | ||
|
|
c8121a54d3 | ||
|
|
804c574d4d | ||
|
|
54aa5592af | ||
|
|
9226809781 | ||
|
|
758ce36539 | ||
|
|
240730de68 | ||
|
|
a7d295051c | ||
|
|
3311a29d6d | ||
|
|
1168c37d59 | ||
|
|
05b188030f | ||
|
|
07621ba838 | ||
|
|
3d80cf7115 | ||
|
|
0f69e1a959 | ||
|
|
c21dd8d96c | ||
|
|
1b4651ca24 | ||
|
|
430029b4a0 | ||
|
|
37d5a7d96b | ||
|
|
df965f9a10 | ||
|
|
e236bafde1 | ||
|
|
97f652576e | ||
|
|
21b4476689 | ||
|
|
5ba3e74ab9 | ||
|
|
4c36fbc79a | ||
|
|
6b19cd60af | ||
|
|
7a2d24cf54 | ||
|
|
8a05326f74 | ||
|
|
ac0463a631 | ||
|
|
0ad42b5049 | ||
|
|
175fe92f08 | ||
|
|
239d641989 | ||
|
|
2a4923cbed | ||
|
|
4caf48347e | ||
|
|
e17cb03108 | ||
|
|
7890f76b03 | ||
|
|
172d186daa | ||
|
|
949a98ac67 | ||
|
|
66cf280f1b | ||
|
|
76620647ae | ||
|
|
1a984a3fda | ||
|
|
528690ab34 | ||
|
|
30d9893d10 | ||
|
|
33a79cc636 | ||
|
|
94f689e94d | ||
|
|
4d44e32b34 | ||
|
|
7feda2a1c5 | ||
|
|
4ad9384f9b | ||
|
|
9f744bbd75 | ||
|
|
014971295b | ||
|
|
045577bbd1 | ||
|
|
cb7cb56518 | ||
|
|
beb6bd000c | ||
|
|
98112386fa | ||
|
|
6f1160a2ec | ||
|
|
a27abfb6d4 | ||
|
|
1b918278f6 | ||
|
|
37191ca2bb | ||
|
|
cd050b5a00 | ||
|
|
2acec803c5 | ||
|
|
4f5cfc743f | ||
|
|
cf47f29a14 | ||
|
|
8f5c4c6ea5 | ||
|
|
dcbfadb413 | ||
|
|
707b445e31 | ||
|
|
045b750314 | ||
|
|
8099f36cb6 | ||
|
|
737b55abb4 | ||
|
|
cbd0104f25 | ||
|
|
3825c52d08 | ||
|
|
16a2f303f1 | ||
|
|
fbb0518ba4 | ||
|
|
da647680d3 | ||
|
|
026e0686be | ||
|
|
749f8e8fb4 | ||
|
|
42a0695b71 | ||
|
|
cdb90f370c | ||
|
|
3f04a5ab46 | ||
|
|
f849086397 | ||
|
|
46abf5ae59 | ||
|
|
c600cc0caf | ||
|
|
5c66666be9 | ||
|
|
7732d80e10 | ||
|
|
c60103d654 | ||
|
|
11a01c895c | ||
|
|
198b11efc0 | ||
|
|
76baa88f40 | ||
|
|
bbb340c1a0 | ||
|
|
3f250b40f2 | ||
|
|
5f01bf5ea8 | ||
|
|
8b01c57691 | ||
|
|
82424aebe2 | ||
|
|
4adaddbdb7 | ||
|
|
011165e129 | ||
|
|
ae7229478e | ||
|
|
a360b37e82 | ||
|
|
cfa4f8b8b7 | ||
|
|
28e97640a1 | ||
|
|
c824ceed2a | ||
|
|
3d8409fd14 | ||
|
|
d67fe21c9c | ||
|
|
bf5e4dbdd3 | ||
|
|
33ad27882c | ||
|
|
4c2a68cb4b | ||
|
|
c7bd026457 | ||
|
|
487b533c3a | ||
|
|
1387a8bcf0 | ||
|
|
228b00e218 | ||
|
|
31bc756173 | ||
|
|
25051fedb5 | ||
|
|
c5297185aa | ||
|
|
ecaf1c13db | ||
|
|
88aebd949b | ||
|
|
d7d56a7b33 | ||
|
|
0e1be68093 | ||
|
|
6920738f0c | ||
|
|
ae1d66ef1e | ||
|
|
a9744228a0 | ||
|
|
1732388b23 | ||
|
|
93b83d2158 | ||
|
|
f48c2ed80e | ||
|
|
d9bc3348c2 | ||
|
|
d5b0ee5eab | ||
|
|
b5c75e6cef | ||
|
|
e6023b27e7 | ||
|
|
1589355e27 | ||
|
|
75ed72dd0c | ||
|
|
3b5aaca062 | ||
|
|
7f817a47dc | ||
|
|
c6be6f63f6 | ||
|
|
826f69dcdc | ||
|
|
0aa5ccda18 | ||
|
|
045ac9143a | ||
|
|
c515129d20 | ||
|
|
dd7a400e2d | ||
|
|
1b41f69939 | ||
|
|
64c51c64be | ||
|
|
7be1bbccfd | ||
|
|
1a2cc6280d | ||
|
|
c98c6cca76 | ||
|
|
1f59438363 | ||
|
|
2378b3cb05 | ||
|
|
3d7efd5686 | ||
|
|
1745a327e7 | ||
|
|
88d09a1cf8 | ||
|
|
db47b28cbd | ||
|
|
1d2a21a636 | ||
|
|
3b6e8e0076 | ||
|
|
d73932f7af | ||
|
|
8b9bd244fe | ||
|
|
aa24b881fc | ||
|
|
6e9d733355 | ||
|
|
d5fec688af | ||
|
|
c78232554e | ||
|
|
0ca4379859 | ||
|
|
fb61c8522f | ||
|
|
7cd3d4653b | ||
|
|
cf0d8f7801 | ||
|
|
67026489ac | ||
|
|
5058e3ffae | ||
|
|
a0bf258fc6 | ||
|
|
1b89dae918 | ||
|
|
fbe2f57148 | ||
|
|
eb80dde5e2 | ||
|
|
a7d9352755 | ||
|
|
87b0232caf | ||
|
|
529c55e0db | ||
|
|
019cbbbdda | ||
|
|
4f5b0ee1b5 | ||
|
|
5a3a815cd6 | ||
|
|
9895c01de8 | ||
|
|
4b0d08d59f | ||
|
|
494cd327fc | ||
|
|
459e6b5044 | ||
|
|
c441b942bb | ||
|
|
9b50ec699d | ||
|
|
af1629007f | ||
|
|
1b88903610 | ||
|
|
1e533fe4eb | ||
|
|
e5fbb7a8df | ||
|
|
0a18fba52d | ||
|
|
210faa3d1e | ||
|
|
5ee5cb97db | ||
|
|
4d6903301a | ||
|
|
17354c1c07 | ||
|
|
c401b77f9b | ||
|
|
74fb77cd0a | ||
|
|
2ad25c13f9 | ||
|
|
5f7d90d320 | ||
|
|
6b09d1a4d0 | ||
|
|
5f3a5e1834 | ||
|
|
a30e140555 | ||
|
|
560e54075c | ||
|
|
551ac20aaf | ||
|
|
842829b4a3 | ||
|
|
6ae3f62150 | ||
|
|
961328c82c | ||
|
|
6f1af3eeff | ||
|
|
d2a1f8dab3 | ||
|
|
63b87260fc | ||
|
|
24777a4040 | ||
|
|
bd99b770ed | ||
|
|
d3229b9756 | ||
|
|
0d8a7d948b | ||
|
|
345c98a5bb | ||
|
|
1a6ab53f61 | ||
|
|
06ac964e0f | ||
|
|
d94bf2d569 | ||
|
|
d259f9824f | ||
|
|
482a76ae3a | ||
|
|
a1146adbd3 | ||
|
|
9fdf52141e | ||
|
|
3d4d0fc75d | ||
|
|
719703b6e3 | ||
|
|
a269d82ee5 | ||
|
|
9c59420b3c | ||
|
|
8c7b11ae5b | ||
|
|
b00bbbb582 | ||
|
|
707bcf82f3 | ||
|
|
54245295b9 | ||
|
|
317f3a8e71 | ||
|
|
69cd3a97a3 | ||
|
|
c8d8c97e1b | ||
|
|
dedce259ec | ||
|
|
5d43b033e6 | ||
|
|
73e60fe62c | ||
|
|
e5a10ea875 | ||
|
|
c968b46d83 | ||
|
|
4e329d0baf | ||
|
|
0aaaeb6687 | ||
|
|
c221b427b2 | ||
|
|
4761b24517 | ||
|
|
35c6844501 | ||
|
|
7ba2062e21 | ||
|
|
4ac7753a4e | ||
|
|
7f6e26edea | ||
|
|
fe67971a9a | ||
|
|
c03cf06738 | ||
|
|
aec57a13c3 | ||
|
|
6f311a6278 | ||
|
|
a2be509df6 | ||
|
|
6a949a4d5a | ||
|
|
0ac00e54d5 | ||
|
|
df4ff8caf9 | ||
|
|
7352468f7d | ||
|
|
d7f847ec91 | ||
|
|
37f915892e | ||
|
|
709e0ad06f | ||
|
|
855ae306f6 | ||
|
|
ae2f5e6742 | ||
|
|
8dde742f29 | ||
|
|
0b974f56b6 | ||
|
|
9998069280 | ||
|
|
ca099313ab | ||
|
|
6c7dc36c4c | ||
|
|
1db63f12da | ||
|
|
d53ac06f6b | ||
|
|
949de3752d | ||
|
|
1090396286 | ||
|
|
563d973023 | ||
|
|
b13c55ed28 | ||
|
|
36f93f1df3 | ||
|
|
407f329965 | ||
|
|
903303e542 | ||
|
|
855499c5b4 | ||
|
|
7db43fa2cb | ||
|
|
78bcca871c | ||
|
|
5ea0f5010f | ||
|
|
144be5e816 | ||
|
|
cf8a79201d | ||
|
|
0882966138 | ||
|
|
1aa4d4d69d | ||
|
|
74528bfa8f | ||
|
|
ca5faa206f | ||
|
|
1f56d89c33 | ||
|
|
2f3ed3f621 | ||
|
|
84e145f0be | ||
|
|
87d562a753 | ||
|
|
0ce9d86e4b | ||
|
|
c258f57385 | ||
|
|
4b230f489c | ||
|
|
5089bdc702 | ||
|
|
9ca2a479e6 | ||
|
|
e71b6bbb73 | ||
|
|
7a712fbaf2 | ||
|
|
332b7380be | ||
|
|
2ec26b390f | ||
|
|
41c925f593 | ||
|
|
a14b8642cc | ||
|
|
ac427f5102 | ||
|
|
afe100455c | ||
|
|
9307eceb0e | ||
|
|
969253dbc9 | ||
|
|
af6356f2f7 | ||
|
|
f51bbf0c3d | ||
|
|
4af07c358b | ||
|
|
205de4cc54 | ||
|
|
ff217c2007 | ||
|
|
51ddea62d1 | ||
|
|
798fc8f7ff | ||
|
|
6b6721d93f | ||
|
|
4d8a08fa66 | ||
|
|
4c5b0e5a66 | ||
|
|
117dae64c9 | ||
|
|
1695150841 | ||
|
|
18c17f938d | ||
|
|
8638c807e4 | ||
|
|
d3916bf41a | ||
|
|
b87b4eaa07 | ||
|
|
94fab05f83 | ||
|
|
1d51e2170b | ||
|
|
16429d4e61 | ||
|
|
51cf21b424 | ||
|
|
e11d85021f | ||
|
|
9a5375a4f2 | ||
|
|
2cb372211d | ||
|
|
b71789574d | ||
|
|
75e9c2349d | ||
|
|
5993d21bfc | ||
|
|
db93d35c95 | ||
|
|
4b9b37f6df | ||
|
|
3440af355f | ||
|
|
225fb2b595 | ||
|
|
ca5ec59db3 | ||
|
|
0efcec43a0 | ||
|
|
d884114fc2 | ||
|
|
5654e79535 | ||
|
|
01d10b516b | ||
|
|
a4e62f6af5 | ||
|
|
2902eb5f6c | ||
|
|
c504229532 | ||
|
|
fd395cbd27 | ||
|
|
9524f16798 | ||
|
|
0ec4061868 | ||
|
|
b44d3c869e | ||
|
|
8c24936702 | ||
|
|
1ecc33fb6c | ||
|
|
2bcaab2fd6 | ||
|
|
24f7519beb | ||
|
|
9cf100650c | ||
|
|
ff82df6e99 | ||
|
|
70aa373a8f | ||
|
|
5c3799e2aa | ||
|
|
752556d716 | ||
|
|
cfaad8ee01 | ||
|
|
985e3d57fd | ||
|
|
c2180c1e71 | ||
|
|
8123512269 | ||
|
|
235e8b397f | ||
|
|
a0bfedce82 | ||
|
|
a1c1e7e8d7 | ||
|
|
1b8cbc1127 | ||
|
|
69a6d97852 | ||
|
|
cfa868921a | ||
|
|
2282a814d8 | ||
|
|
4834647e56 | ||
|
|
23067caf89 | ||
|
|
9dcf4cb530 | ||
|
|
df779af56a | ||
|
|
343727e862 | ||
|
|
6c8135ec93 | ||
|
|
2681dd5b35 | ||
|
|
525e11fb32 | ||
|
|
0319667b2d | ||
|
|
55f67cd54b | ||
|
|
e0c31e8749 | ||
|
|
f1e479503f | ||
|
|
336f171d08 | ||
|
|
ab02ef44e5 | ||
|
|
ec563ab5ab | ||
|
|
61a55c4d0a | ||
|
|
0c49c1fc93 | ||
|
|
68b407387c | ||
|
|
7cd7358b60 | ||
|
|
96223b5d61 | ||
|
|
12bdbd3e04 | ||
|
|
70a8993234 | ||
|
|
748cccedca | ||
|
|
ba49bb854e | ||
|
|
815d073a72 | ||
|
|
1ff6dae378 | ||
|
|
b390000dd5 | ||
|
|
c8a6aa68ae | ||
|
|
8af2a7fa1c | ||
|
|
bb8298e306 | ||
|
|
f5d6a968e3 | ||
|
|
582fbec3d4 | ||
|
|
6cfa22c96b | ||
|
|
108b5056b6 | ||
|
|
8a39f08634 | ||
|
|
4e6e97abe1 | ||
|
|
6d256ffa7f | ||
|
|
dc42247c57 | ||
|
|
97ef233dfe | ||
|
|
5f7d4df386 | ||
|
|
29597855c0 | ||
|
|
643677b3b0 | ||
|
|
7540617425 | ||
|
|
5323394cb4 | ||
|
|
a1676c74af | ||
|
|
4dafd0da9c | ||
|
|
59702d4562 | ||
|
|
508161f12b | ||
|
|
e22090c76c | ||
|
|
8495c3ecf1 | ||
|
|
b2033cf52e | ||
|
|
1dc084ac93 | ||
|
|
7656810934 | ||
|
|
5d930d40bf | ||
|
|
750b166d82 | ||
|
|
2935368f66 | ||
|
|
162cd66fee | ||
|
|
5ed39dee62 | ||
|
|
2b74fe79f6 | ||
|
|
7bb3758bae | ||
|
|
1549c4d4f4 | ||
|
|
af5ffad7aa | ||
|
|
b384afb8e4 | ||
|
|
c01b630222 | ||
|
|
f766edbbb7 | ||
|
|
19230dac85 | ||
|
|
074f0cbeea | ||
|
|
c3f7fdaa6f | ||
|
|
7cfc556ea2 | ||
|
|
1b48adfc99 | ||
|
|
013f8ed184 | ||
|
|
6ec7443677 | ||
|
|
415dc4f580 | ||
|
|
6e9857379c | ||
|
|
26cfafd6b0 | ||
|
|
70181f1158 | ||
|
|
5d97bde3bf | ||
|
|
0c48b7f0b2 | ||
|
|
9d62b4592e | ||
|
|
ae5820f187 | ||
|
|
1b7cb04b5b | ||
|
|
dba3c541be | ||
|
|
3afe48a446 | ||
|
|
3b14feae59 | ||
|
|
1d8891e23b | ||
|
|
d0d5706a03 | ||
|
|
a2b215091a | ||
|
|
ea64fad8f1 | ||
|
|
e6f7cc9842 | ||
|
|
0d5bf06587 | ||
|
|
4a84764dde | ||
|
|
e7ecf32423 | ||
|
|
5b4996295b | ||
|
|
fcc29ec2d1 | ||
|
|
ff613f8d5c | ||
|
|
7e5211ad59 | ||
|
|
638ff85b3a | ||
|
|
0e7f911b22 | ||
|
|
e397816a84 | ||
|
|
1926802a7b | ||
|
|
a7f93091e8 | ||
|
|
d97b4db80a | ||
|
|
4a6e31deb6 | ||
|
|
90f5a5d078 | ||
|
|
279fbc9f13 | ||
|
|
40627ffee7 | ||
|
|
d1861cb404 | ||
|
|
8fe166633d | ||
|
|
7316757164 | ||
|
|
606e62ab69 | ||
|
|
1a79dcbfe0 | ||
|
|
207b7d7c52 | ||
|
|
7bf24f01c4 | ||
|
|
d7761125ff | ||
|
|
0737e2af58 | ||
|
|
8b12d7c475 | ||
|
|
b01d7bc1c1 | ||
|
|
8c851283e2 | ||
|
|
994580a40e | ||
|
|
672aa14990 | ||
|
|
07a3f99f78 | ||
|
|
e981bfb7ba | ||
|
|
a066e44da7 | ||
|
|
0e6f37d6ee | ||
|
|
67342349d5 | ||
|
|
2f47dd8bcf | ||
|
|
0a21fcdebd | ||
|
|
c879e5b52a | ||
|
|
79681c7bdf | ||
|
|
8f6b94ddd6 | ||
|
|
1e69d8967e | ||
|
|
e2d77e684c | ||
|
|
b4f1615ee9 | ||
|
|
2d049e0dce | ||
|
|
dc32824373 | ||
|
|
bac1f12665 | ||
|
|
cd914d6cbf | ||
|
|
caf32dda5c | ||
|
|
180ece821a | ||
|
|
663555ffca | ||
|
|
2a18362735 | ||
|
|
1c97648562 | ||
|
|
a73d1e3fb9 | ||
|
|
04405be4a8 | ||
|
|
4ecb2eacb4 | ||
|
|
39434506dc | ||
|
|
0223bcd817 | ||
|
|
868c4e0e6d | ||
|
|
4093654258 | ||
|
|
6dca404da2 | ||
|
|
97eefceec0 | ||
|
|
7e721bed08 | ||
|
|
4f1ac553de | ||
|
|
d40a9a9a68 | ||
|
|
b37d1822cf | ||
|
|
cdae8e1fb3 | ||
|
|
48556e958e | ||
|
|
e22f8d6c28 | ||
|
|
850c38601a | ||
|
|
b76bec20ad | ||
|
|
a68ff5342c | ||
|
|
8ca60dd822 | ||
|
|
919ab75fe5 | ||
|
|
4c4c3b4394 | ||
|
|
8c925b46e1 | ||
|
|
4b2be30348 | ||
|
|
53748ceb0f | ||
|
|
78b6036708 | ||
|
|
9ecd076b92 | ||
|
|
4668fa126d | ||
|
|
dac73c4cdb | ||
|
|
747c4d2dda | ||
|
|
6fc59d37ff | ||
|
|
3cff22eba1 | ||
|
|
796bd30972 | ||
|
|
bff5e1e3c6 | ||
|
|
e085cf83e4 | ||
|
|
a89fa7fc33 | ||
|
|
c4c9101353 | ||
|
|
1016f6e320 | ||
|
|
c7018ce54c | ||
|
|
48c75f5345 | ||
|
|
8b7d24aa40 | ||
|
|
630a781c02 | ||
|
|
c9991818ac | ||
|
|
e9adf17b2c | ||
|
|
6b51cf2bb4 | ||
|
|
df76553ead | ||
|
|
1c9c632533 | ||
|
|
4389984542 | ||
|
|
6acfdc68bb | ||
|
|
c509a2ab83 | ||
|
|
3b0c45e2d7 | ||
|
|
482199f4b2 | ||
|
|
065481e6bf | ||
|
|
a0fcf326d3 | ||
|
|
8bb9b32811 | ||
|
|
42b318e83a | ||
|
|
bf85b6c596 | ||
|
|
e457a4b3a6 | ||
|
|
b1b0e128ec | ||
|
|
cc23cf0d4c | ||
|
|
c1aa9a2068 | ||
|
|
ae03b515a0 | ||
|
|
0440c8fb6f | ||
|
|
c2984972a6 | ||
|
|
355b29458b | ||
|
|
652ef37147 | ||
|
|
ce2208218b | ||
|
|
deb8f8e440 | ||
|
|
dba051e374 | ||
|
|
fea0ec2279 | ||
|
|
abef2b94f1 | ||
|
|
20c4cb912d | ||
|
|
1f9ccafa16 | ||
|
|
645b80caf5 | ||
|
|
a2442baf6c | ||
|
|
f0458d9f7e | ||
|
|
fd2a422468 | ||
|
|
199a7a2da3 | ||
|
|
4afe973eb2 | ||
|
|
38b5ebecc4 | ||
|
|
dbc7ba5598 | ||
|
|
ed2f42f91a | ||
|
|
b04ec71146 | ||
|
|
bd5bb0716b | ||
|
|
533132b4c1 | ||
|
|
753134cbc5 | ||
|
|
8ccd3ee96d | ||
|
|
6b87c2ea78 | ||
|
|
6316c28f57 | ||
|
|
718c4620b0 | ||
|
|
2010f59029 | ||
|
|
f4f9baa7b4 | ||
|
|
d15d8a3db7 | ||
|
|
20ec9094b4 | ||
|
|
5b6e76f9ae | ||
|
|
7334f10c7b | ||
|
|
705e61f2cf | ||
|
|
3c3c94b4c3 | ||
|
|
8086059272 | ||
|
|
4b8f3418f0 | ||
|
|
c3abd88794 | ||
|
|
9f6c1e7435 | ||
|
|
079d6f125f | ||
|
|
71413f6543 | ||
|
|
4d1f500559 | ||
|
|
1b670b8852 | ||
|
|
18abe69558 | ||
|
|
f73085d9c0 | ||
|
|
d3792fa2c8 | ||
|
|
3693453e21 | ||
|
|
9659a0c9e4 | ||
|
|
9fa64e6e1f | ||
|
|
01bef02822 | ||
|
|
8df6ccbae5 | ||
|
|
4584da8459 | ||
|
|
d2b43c794b | ||
|
|
94785a3a80 | ||
|
|
42854afd2b | ||
|
|
c6b5d2d11d | ||
|
|
326411f942 | ||
|
|
e513f73881 | ||
|
|
039314e7c3 | ||
|
|
e763c65694 | ||
|
|
0e4490d991 | ||
|
|
7151a196fc | ||
|
|
849ddba4de | ||
|
|
4fd3dd38ea | ||
|
|
50bd7aff0e | ||
|
|
4e86357645 | ||
|
|
48bcab1818 | ||
|
|
23e297ed4d | ||
|
|
9fb23d9e36 | ||
|
|
838f4cacb2 | ||
|
|
8502d2a6aa | ||
|
|
5622efbb93 | ||
|
|
bc1a364808 | ||
|
|
96c3233bb1 | ||
|
|
a5b2f0519c | ||
|
|
1d70aa55a6 | ||
|
|
2397bde141 | ||
|
|
f4360d7abe | ||
|
|
89f3f86c92 | ||
|
|
4a39ce13e6 | ||
|
|
d1c7a7e228 | ||
|
|
90cd63d726 | ||
|
|
4257772130 | ||
|
|
3f5447d7d9 | ||
|
|
9ad8a11ac7 | ||
|
|
1f5537e8ee | ||
|
|
f75ee3324b | ||
|
|
80884e7b27 | ||
|
|
c4827fe9cf | ||
|
|
7e8fb900a8 | ||
|
|
50929d1a69 | ||
|
|
a05c0c0f22 | ||
|
|
396996f707 | ||
|
|
17b2ec8ae5 | ||
|
|
d1f23ba4e2 | ||
|
|
da5bca5349 | ||
|
|
ec849ad79c | ||
|
|
6faeaed7f2 | ||
|
|
81fda682b3 | ||
|
|
cb7a5c1d54 | ||
|
|
78eda54c05 | ||
|
|
e6a570db07 | ||
|
|
de898a6228 | ||
|
|
0141e8e057 | ||
|
|
f5e09ccb4f | ||
|
|
f82951ad48 | ||
|
|
8614759433 | ||
|
|
c4deae2b0f | ||
|
|
361431a144 | ||
|
|
4a6cc10a39 | ||
|
|
e498348b03 | ||
|
|
128c071563 | ||
|
|
fd9521b66b | ||
|
|
6d56a8f057 | ||
|
|
8a244d89b2 | ||
|
|
a25f518679 | ||
|
|
9fc0c55e48 | ||
|
|
38f582615e | ||
|
|
2638927ef1 | ||
|
|
e3d9081d76 | ||
|
|
a4296f1b79 | ||
|
|
c191158e0e | ||
|
|
6c56959e4c | ||
|
|
cbd2a58b5c | ||
|
|
3da394552b | ||
|
|
01a22b00e3 | ||
|
|
77b76e3b75 | ||
|
|
b607a53edd | ||
|
|
07ba7a8f59 | ||
|
|
13adbb1d42 | ||
|
|
31392df28d | ||
|
|
d2b9f6d620 | ||
|
|
ef68015e05 | ||
|
|
81bb056dba | ||
|
|
6141d2969e | ||
|
|
02a0279903 | ||
|
|
682350aef1 | ||
|
|
7e84dc628d | ||
|
|
f05603f6ba | ||
|
|
cac172ff1d | ||
|
|
f478a4621b | ||
|
|
2a793e63ab | ||
|
|
225134d4e4 | ||
|
|
8761e7420a | ||
|
|
336e85bf97 | ||
|
|
3039c51032 | ||
|
|
a573a63a62 | ||
|
|
fa4274aa9f | ||
|
|
c29aef63e0 | ||
|
|
5c5b96af83 | ||
|
|
448c7fe2a8 | ||
|
|
115371e039 | ||
|
|
ae40deb941 | ||
|
|
0f081d29a8 | ||
|
|
055ced0590 | ||
|
|
299d513102 | ||
|
|
76c9eae2cf | ||
|
|
724c3549fb | ||
|
|
f6996e6b49 | ||
|
|
afc4139458 | ||
|
|
2396ee0a64 | ||
|
|
cd45576fb0 | ||
|
|
9e5c0e9c68 | ||
|
|
2ca4a3ea75 | ||
|
|
c0d1e91a8a | ||
|
|
d49e4ce234 | ||
|
|
76fed35a76 | ||
|
|
01afc3a2f1 | ||
|
|
4484056c98 | ||
|
|
c64abce1b9 | ||
|
|
8ccf75a7fe | ||
|
|
c5678e894e | ||
|
|
58522154b7 | ||
|
|
98437807c8 | ||
|
|
a4b282834a | ||
|
|
08b2294145 | ||
|
|
8c16ddfbc4 | ||
|
|
d4b0520dc6 | ||
|
|
4cdad2c60a | ||
|
|
fec0eab8ce | ||
|
|
512d907d54 | ||
|
|
bca935e446 | ||
|
|
3797e6784e | ||
|
|
e3f9b2a078 | ||
|
|
10d7d5a801 | ||
|
|
d5910673c3 | ||
|
|
83a7fb54aa | ||
|
|
95ee540724 | ||
|
|
2f2bbe60c1 | ||
|
|
90dac39122 | ||
|
|
51e178c6b5 | ||
|
|
d4ee0cfc97 | ||
|
|
cd681b9ab5 | ||
|
|
240e255b8d | ||
|
|
590231799d | ||
|
|
0d72bb47d4 | ||
|
|
3f5ba37aca | ||
|
|
23b0b637f9 | ||
|
|
cdb0b8312d | ||
|
|
e85e648510 | ||
|
|
967d47858c | ||
|
|
de1b74cd92 | ||
|
|
30db05a722 | ||
|
|
9eed4d1275 | ||
|
|
d270847b27 | ||
|
|
df0134d7b4 | ||
|
|
2b58c0b425 | ||
|
|
800f87fca7 | ||
|
|
27b66cac06 | ||
|
|
63d784feaa | ||
|
|
b26a2ef784 | ||
|
|
27418a9cbc | ||
|
|
ec7bd46cbb | ||
|
|
2c4bceca45 | ||
|
|
79e578c0ac | ||
|
|
fb55a676c1 | ||
|
|
9ab1911838 | ||
|
|
ba997e67ba | ||
|
|
32ddfe1848 | ||
|
|
0908a56eda | ||
|
|
7f2138b308 | ||
|
|
d6e10e1ffc | ||
|
|
0a6102cc77 | ||
|
|
010b22fb9f | ||
|
|
75a5872632 | ||
|
|
7ea0c395a1 | ||
|
|
26daef09af | ||
|
|
5b677125bb | ||
|
|
bf6dfba165 | ||
|
|
c48beff9da | ||
|
|
c5c5e35670 | ||
|
|
27fe42e906 | ||
|
|
954bb59392 | ||
|
|
45a58d6735 | ||
|
|
7acbacfbf9 | ||
|
|
3c5facf934 | ||
|
|
32be7accad | ||
|
|
387c225851 | ||
|
|
87e1d1bf37 | ||
|
|
0614333213 | ||
|
|
4f1585f15f | ||
|
|
40e9c4a151 | ||
|
|
0bb0a4ed34 | ||
|
|
08a62988f0 | ||
|
|
4f77edbe93 | ||
|
|
812ba5cd0f | ||
|
|
c33473a5f0 | ||
|
|
6eeaf21d9c | ||
|
|
c04bc9db6a | ||
|
|
ff363d1398 | ||
|
|
3670313d2a | ||
|
|
a8050617c5 | ||
|
|
6b770ea137 | ||
|
|
6790b6cf34 | ||
|
|
5f1432057d | ||
|
|
712b3dee1c | ||
|
|
eb69640394 | ||
|
|
1afb53a951 | ||
|
|
d03574ccc7 | ||
|
|
20a344a0a5 | ||
|
|
6e77ccf152 | ||
|
|
f3658e5a45 | ||
|
|
59d960af31 | ||
|
|
440c33a267 | ||
|
|
ff8c4abc49 | ||
|
|
dc06d44f82 | ||
|
|
4781fdac1e | ||
|
|
94a738129e | ||
|
|
7f7fec6ae2 | ||
|
|
501f3ff4f2 | ||
|
|
fb48b84504 | ||
|
|
377695716d | ||
|
|
93af8949fa | ||
|
|
c44282085e | ||
|
|
ae5a6d2493 | ||
|
|
0514b84f42 | ||
|
|
3e025f1805 | ||
|
|
6b5efceb60 | ||
|
|
7bd1302f22 | ||
|
|
36ab9439a2 | ||
|
|
cd5c329bab | ||
|
|
1eee21118f | ||
|
|
4b4eed91f0 | ||
|
|
fa19edb6ba | ||
|
|
a37483f146 | ||
|
|
5998b599be | ||
|
|
0da87235de | ||
|
|
cf80d06e07 | ||
|
|
eafa6ed68d | ||
|
|
b7b3cbb59d | ||
|
|
a1793af2f4 | ||
|
|
b2a4ae0bc0 | ||
|
|
3066c234f6 | ||
|
|
11c3982fce | ||
|
|
801819838d | ||
|
|
885b22102f | ||
|
|
423041c472 | ||
|
|
85fb331fd9 | ||
|
|
f9a954494d | ||
|
|
78c8da8652 | ||
|
|
cd08199dae | ||
|
|
d7cbeab1d7 | ||
|
|
fb9f6544b4 | ||
|
|
48301936b2 | ||
|
|
7fdece2991 | ||
|
|
5fb7a4547d | ||
|
|
1cfd724839 | ||
|
|
761b1301f8 | ||
|
|
c324eec7c1 | ||
|
|
f787a9018e | ||
|
|
7de639eb66 | ||
|
|
7ab3258383 | ||
|
|
3d96274508 | ||
|
|
8f7ad5b947 | ||
|
|
037b5ab19a | ||
|
|
8f3a6b0fa0 | ||
|
|
2596c4a2b8 | ||
|
|
626bc903d6 | ||
|
|
4422292ff5 | ||
|
|
ae99bb3f03 | ||
|
|
4f850c85a7 | ||
|
|
dccb675d18 | ||
|
|
a12d9471ef | ||
|
|
6829f3e384 | ||
|
|
69bd47322e | ||
|
|
cfe51b38df | ||
|
|
fbeeefe7cf | ||
|
|
82964b713c | ||
|
|
a60b3838b9 | ||
|
|
b9795a0fd7 | ||
|
|
d6a83c1c7f | ||
|
|
595570a518 | ||
|
|
e35a152f25 | ||
|
|
5dc43562e5 | ||
|
|
54c6160795 | ||
|
|
394852a492 | ||
|
|
e02d22eead | ||
|
|
1c66f1c6f3 | ||
|
|
8d579c2f0b | ||
|
|
3258021c42 | ||
|
|
9792f7d0a1 | ||
|
|
d4f49279e1 | ||
|
|
b1b4a8b5ea | ||
|
|
b20207cdd0 | ||
|
|
6aaf85bb1c | ||
|
|
fc21f1224e | ||
|
|
682aaac9bc | ||
|
|
931577038b | ||
|
|
788c767a5f | ||
|
|
dd0238b4b5 | ||
|
|
ea118e41e6 | ||
|
|
734c7f07e3 | ||
|
|
580f8c3b98 | ||
|
|
966897bfc6 | ||
|
|
6274015cb3 | ||
|
|
281cd705f0 | ||
|
|
21356c17f7 | ||
|
|
ab21552386 | ||
|
|
5a38269d16 | ||
|
|
a3a5748ed9 | ||
|
|
0a2ed5f7e0 | ||
|
|
b5a054632e | ||
|
|
b98a2750f4 | ||
|
|
b7e2e1536f | ||
|
|
b7bf9ba2d4 | ||
|
|
9b9616c4bf | ||
|
|
51ec0dbb07 | ||
|
|
6e82155d86 | ||
|
|
73282f5e7b | ||
|
|
493586a0ca | ||
|
|
4740eb5879 | ||
|
|
7637c872b6 | ||
|
|
8be0c3e03e | ||
|
|
2dc57b6809 | ||
|
|
ffeb86dd8c | ||
|
|
cc9fcb4b59 | ||
|
|
e2cd9820af | ||
|
|
f421296812 | ||
|
|
9aca77729c | ||
|
|
2521352737 | ||
|
|
149d68b805 | ||
|
|
4884981837 | ||
|
|
0d11726104 |
No files matched your search
@@ -0,0 +1 @@
|
||||
IndentWidth: 3
|
||||
@@ -1,4 +1,7 @@
|
||||
nohup.out
|
||||
build/
|
||||
cmake-build-debug/
|
||||
.idea/
|
||||
.dir-locals.el
|
||||
*.pyc
|
||||
.vscode/*
|
||||
@@ -6,7 +9,15 @@ build/
|
||||
.vs
|
||||
obj/
|
||||
*.csproj.user
|
||||
*.vspx
|
||||
*.psess
|
||||
msbuild.log
|
||||
*.orig
|
||||
vcxproj.user
|
||||
src/client/spark/Properties/launchSettings.json
|
||||
compile_commands.json
|
||||
.cquery_cached_index/
|
||||
src/client/sparkcmd/Properties/launchSettings.json
|
||||
node_modules
|
||||
paket-files
|
||||
project.lock.json
|
||||
@@ -1,66 +1,102 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"includePath": [
|
||||
"/usr/include",
|
||||
"/usr/local/include",
|
||||
"${workspaceRoot}"
|
||||
],
|
||||
"defines": [],
|
||||
"intelliSenseMode": "clang-x64",
|
||||
"browse": {
|
||||
"path": [
|
||||
"/usr/include",
|
||||
"/usr/local/include",
|
||||
"${workspaceRoot}"
|
||||
],
|
||||
"limitSymbolsToIncludedHeaders": true,
|
||||
"databaseFilename": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Windows",
|
||||
"intelliSenseMode": "clang-x64",
|
||||
"includePath": [
|
||||
"${workspaceRoot}/src",
|
||||
"${workspaceRoot}/build/src",
|
||||
"${workspaceRoot}/build/gcc_debug/src",
|
||||
"${workspaceRoot}/externals/windows/include",
|
||||
"${workspaceRoot}/externals/linux/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include"
|
||||
],
|
||||
"defines": [
|
||||
"__linux__",
|
||||
"__x86_64__"
|
||||
],
|
||||
"browse": {
|
||||
"path": [
|
||||
"${workspaceRoot}/src",
|
||||
"${workspaceRoot}/build/src",
|
||||
"${workspaceRoot}/build/gcc_debug/src",
|
||||
"${workspaceRoot}/externals/windows/include",
|
||||
"${workspaceRoot}/externals/linux/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/*"
|
||||
],
|
||||
"limitSymbolsToIncludedHeaders": true,
|
||||
"databaseFilename": ""
|
||||
}
|
||||
}
|
||||
],
|
||||
"version": 3
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"includePath": [
|
||||
"/usr/include",
|
||||
"/usr/local/include",
|
||||
"${workspaceRoot}"
|
||||
],
|
||||
"defines": [],
|
||||
"intelliSenseMode": "clang-x64",
|
||||
"browse": {
|
||||
"path": [
|
||||
"/usr/include",
|
||||
"/usr/local/include",
|
||||
"${workspaceRoot}"
|
||||
],
|
||||
"limitSymbolsToIncludedHeaders": true,
|
||||
"databaseFilename": ""
|
||||
},
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++17"
|
||||
},
|
||||
{
|
||||
"name": "Windows",
|
||||
"intelliSenseMode": "clang-x64",
|
||||
"includePath": [
|
||||
"${workspaceRoot}/src",
|
||||
"${workspaceRoot}/build/src",
|
||||
"${workspaceRoot}/build/ninja_debug/src",
|
||||
"${workspaceRoot}/externals/windows/include",
|
||||
"${workspaceRoot}/externals/linux/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include"
|
||||
],
|
||||
"defines": [
|
||||
"__linux__",
|
||||
"__x86_64__"
|
||||
],
|
||||
"browse": {
|
||||
"path": [
|
||||
"${workspaceRoot}/src",
|
||||
"${workspaceRoot}/build/src",
|
||||
"${workspaceRoot}/build/ninja_debug/src",
|
||||
"${workspaceRoot}/externals/windows/include",
|
||||
"${workspaceRoot}/externals/linux/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/*"
|
||||
],
|
||||
"limitSymbolsToIncludedHeaders": true,
|
||||
"databaseFilename": ""
|
||||
},
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++17"
|
||||
},
|
||||
{
|
||||
"name": "WindowsQuick",
|
||||
"intelliSenseMode": "clang-x64",
|
||||
"includePath": [
|
||||
"${workspaceRoot}/src",
|
||||
"${workspaceRoot}/build/src",
|
||||
"${workspaceRoot}/build/ninja_debug/src",
|
||||
"${workspaceRoot}/externals/windows/include",
|
||||
"${workspaceRoot}/externals/linux/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
|
||||
"${workspaceRoot}/externals/windows/vscode/usr/include"
|
||||
],
|
||||
"defines": [
|
||||
"__linux__",
|
||||
"__x86_64__"
|
||||
],
|
||||
"browse": {
|
||||
"path": [
|
||||
"${workspaceRoot}/src"
|
||||
],
|
||||
"limitSymbolsToIncludedHeaders": true,
|
||||
"databaseFilename": "${workspaceRoot}/.vscode/browse.vc.db"
|
||||
},
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++17"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
@@ -1,164 +1,315 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "(gdb) Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/gcc_debug/src/server/sparkd/sparkd",
|
||||
"args": ["run"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceRoot}/build/gcc_debug/src/server/sparkd",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Client Launch",
|
||||
"type": "clr",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/Debug/bin/net462/spark.exe",
|
||||
"args": [],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"stopAtEntry": false,
|
||||
"externalConsole": true
|
||||
},
|
||||
{
|
||||
"name": "Client Attach",
|
||||
"type": "clr",
|
||||
"request": "attach",
|
||||
"processId":"${command:pickProcess}"
|
||||
},
|
||||
{
|
||||
"name": "SparkVM Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["configcheck", "System"],
|
||||
"stopAtEntry": true,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"logging": {
|
||||
"engineLogging": false
|
||||
},
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Docker Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/bts/build/gcc_debug/src/server/sparkd/sparkd",
|
||||
"args": ["test"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/bts/build/gcc_debug/src/server/sparkd",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["-p 2000","root@localhost"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/bts/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Docker attach",
|
||||
"type": "cppdbg",
|
||||
"request": "attach",
|
||||
"program": "/bts/build/gcc_debug/src/server/sparkd/sparkd",
|
||||
"processId": "${command:pickRemoteProcess}",
|
||||
"MIMode": "gdb",
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["-p 2000","root@localhost"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/bts/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Python",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"stopOnEntry": false,
|
||||
"pythonPath": "${config:python.pythonPath}",
|
||||
"program": "${file}",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"env": {},
|
||||
"envFile": "${workspaceRoot}/.env",
|
||||
"args": [ "DEBUG" ],
|
||||
"debugOptions": [
|
||||
"WaitOnAbnormalExit",
|
||||
"WaitOnNormalExit",
|
||||
"RedirectOutput"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "edge-asp051",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/sparkd",
|
||||
"args": ["run"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@edge-asp051"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/bts/": "${workspaceRoot}"
|
||||
}
|
||||
}
|
||||
]
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
|
||||
{
|
||||
"name": "(gdb) Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["run"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceRoot}/build/ninja_debug/src/server/sparkd",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Client Launch",
|
||||
"type": "clr",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/Debug/bin/net471/spark.exe",
|
||||
"args": [],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"stopAtEntry": false,
|
||||
"externalConsole": true,
|
||||
"requireExactSource": false
|
||||
},
|
||||
{
|
||||
"name": "SDK Launch",
|
||||
"type": "clr",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/Debug/bin/net471/spark_sdk.exe",
|
||||
"args": ["md","GLBX","Future","ES","ESM8"],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"stopAtEntry": false,
|
||||
"externalConsole": true,
|
||||
"requireExactSource": false
|
||||
},
|
||||
{
|
||||
"name": "Client Attach",
|
||||
"type": "clr",
|
||||
"request": "attach",
|
||||
"processId":"${command:pickProcess}"
|
||||
},
|
||||
{
|
||||
"name": "SparkVM Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["run"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"logging": {
|
||||
"engineLogging": false
|
||||
},
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
},
|
||||
{
|
||||
"description": "Skip STL",
|
||||
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Spreader Tests",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["test", "[spreader]"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"logging": {
|
||||
"engineLogging": false
|
||||
},
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Admin Service Tests",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["test", "[admin_service]"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"logging": {
|
||||
"engineLogging": false
|
||||
},
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Limiter Tests",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["test", "[limiter]"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"logging": {
|
||||
"engineLogging": false
|
||||
},
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "MD Tests",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["test", "[md]"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"logging": {
|
||||
"engineLogging": false
|
||||
},
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
},
|
||||
{
|
||||
"description": "Skip STL",
|
||||
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "SparkVM attach",
|
||||
"type": "cppdbg",
|
||||
"request": "attach",
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"processId": "${command:pickRemoteProcess}",
|
||||
"MIMode": "gdb",
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Python",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"stopOnEntry": false,
|
||||
"pythonPath": "${config:python.pythonPath}",
|
||||
"program": "${file}",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"env": {},
|
||||
"envFile": "${workspaceRoot}/.env",
|
||||
"args": [ "DEBUG" ],
|
||||
"debugOptions": [
|
||||
"WaitOnAbnormalExit",
|
||||
"WaitOnNormalExit",
|
||||
"RedirectOutput"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "edge-asp051",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/sparkd",
|
||||
"args": ["run"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@edge-asp051"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/bts/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Docker Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/bts/build/gcc_debug/src/server/sparkd/sparkd",
|
||||
"args": ["test"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/bts/build/gcc_debug/src/server/sparkd",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["-p 2000","root@localhost"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/bts/": "${workspaceRoot}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -4,9 +4,9 @@
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"taskName": "client_build",
|
||||
"label": "client_build",
|
||||
"type": "shell",
|
||||
"command": ".\\tools\\clientbuild.cmd",
|
||||
"command": ".\\tools\\buildspark.cmd",
|
||||
"problemMatcher":"$msCompile",
|
||||
"presentation": {
|
||||
"echo": true,
|
||||
@@ -20,22 +20,30 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"taskName": "server_build",
|
||||
"label": "server_build",
|
||||
"type": "shell",
|
||||
"command": ".\\tools\\ssh_serverbuild.cmd",
|
||||
|
||||
"problemMatcher": {
|
||||
"base": "$gcc",
|
||||
"command": ".\\tools\\buildsparkd.cmd",
|
||||
"problemMatcher": {
|
||||
"base": "$gcc",
|
||||
"owner": "cpp",
|
||||
"fileLocation": [
|
||||
"relative",
|
||||
"${workspaceFolder}"
|
||||
]
|
||||
"${workspaceFolder}"
|
||||
],
|
||||
"pattern": {
|
||||
"regexp": "(.?)(home)(.?)(bts)(.?)(spark)(.?)(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)",
|
||||
"file": 8,
|
||||
"line": 9,
|
||||
"column": 10,
|
||||
"severity": 11,
|
||||
"message": 12
|
||||
}
|
||||
},
|
||||
"presentation": {
|
||||
"echo": true,
|
||||
"reveal": "always",
|
||||
"focus": false,
|
||||
"panel": "shared"
|
||||
"panel": "new"
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
|
||||
@@ -28,14 +28,14 @@ if (WIN32)
|
||||
|
||||
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
|
||||
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF /LTCG")
|
||||
|
||||
add_subdirectory(src/lib)
|
||||
else ()
|
||||
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \
|
||||
-Wall -pedantic -Wextra -Werror -Wno-missing-braces --std=c++14 -fdiagnostics-color")
|
||||
-Wall -pedantic -Wextra -Werror -Wno-missing-braces -Wno-ignored-qualifiers --std=c++14 -fdiagnostics-color")
|
||||
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} -DNDEBUG -O3")
|
||||
add_subdirectory(src/lib)
|
||||
add_subdirectory(src/server/sparkd)
|
||||
add_subdirectory(src/web)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.26730.12
|
||||
VisualStudioVersion = 15.0.27130.2024
|
||||
MinimumVisualStudioVersion = 15.0.26124.0
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_api", "src\client\spark_api\spark_api.csproj", "{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spark_lib", "build\src\lib\spark_lib.vcxproj", "{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spark_lib", "build\src\lib\spark_lib.vcxproj", "{502FD050-679A-3B50-B438-098500700919}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spark", "src\client\spark\Spark.csproj", "{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}"
|
||||
EndProject
|
||||
@@ -12,7 +12,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sparkcmd", "src\client\spar
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_core", "src\client\spark_core\spark_core.csproj", "{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "build\ZERO_CHECK.vcxproj", "{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "build\ZERO_CHECK.vcxproj", "{2256015B-E7D5-3614-8F39-814CA68A4444}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_sdk", "src\client\spark_sdk\spark_sdk.csproj", "{6963C314-83C4-4667-B0D0-C2F7AE208C29}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{502FD050-679A-3B50-B438-098500700919} = {502FD050-679A-3B50-B438-098500700919}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -50,22 +55,22 @@ Global
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.ActiveCfg = Release|x64
|
||||
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.Build.0 = Release|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Debug|x64.Build.0 = Debug|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Debug|x86.ActiveCfg = Debug|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Release|x64.ActiveCfg = Release|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Release|x64.Build.0 = Release|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Release|x86.ActiveCfg = Release|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
|
||||
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.Debug|x64.Build.0 = Debug|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.Debug|x86.ActiveCfg = Debug|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.Release|x64.ActiveCfg = Release|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.Release|x64.Build.0 = Release|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.Release|x86.ActiveCfg = Release|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
|
||||
{502FD050-679A-3B50-B438-098500700919}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x64.Build.0 = Debug|x64
|
||||
@@ -126,22 +131,42 @@ Global
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.ActiveCfg = Release|x64
|
||||
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.Build.0 = Release|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Debug|x64.Build.0 = Debug|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Debug|x86.ActiveCfg = Debug|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Release|x64.ActiveCfg = Release|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Release|x64.Build.0 = Release|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Release|x86.ActiveCfg = Release|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
|
||||
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|x64.Build.0 = Debug|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|x86.ActiveCfg = Debug|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|x64.ActiveCfg = Release|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|x64.Build.0 = Release|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|x86.ActiveCfg = Release|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
|
||||
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x64.Build.0 = Debug|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x86.ActiveCfg = Debug|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|Any CPU.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|Any CPU.Build.0 = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x86.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x86.Build.0 = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x64.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x64.Build.0 = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x86.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x86.ActiveCfg = Release|x64
|
||||
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x86.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -149,4 +174,7 @@ Global
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {422D1620-0166-4C26-9A81-CA8A2EB1AB58}
|
||||
EndGlobalSection
|
||||
GlobalSection(Performance) = preSolution
|
||||
HasPerformanceSessions = true
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"chrono": "cpp",
|
||||
"future": "cpp",
|
||||
"system_error": "cpp",
|
||||
"ios": "cpp",
|
||||
"utility": "cpp",
|
||||
"iosfwd": "cpp",
|
||||
"xhash": "cpp",
|
||||
"xstring": "cpp",
|
||||
"xtree": "cpp",
|
||||
"xutility": "cpp",
|
||||
"exception": "cpp",
|
||||
"bitset": "cpp",
|
||||
"xlocale": "cpp"
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Label="Output">
|
||||
<BaseOutputPath>$(SparkRoot)\build\$(Configuration)\$(SolutionName)</BaseOutputPath>
|
||||
<BaseOutputPath>$(SparkRoot)\build\$(Configuration)</BaseOutputPath>
|
||||
<OutputPath>$(BaseOutputPath)\bin</OutputPath>
|
||||
<BaseIntermediateOutputPath>$(BaseOutputPath)\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath>
|
||||
<IntermediateOutputPath>$(BaseOutputPath)\obj\$(MSBuildProjectName)</IntermediateOutputPath>
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
using bts.api;
|
||||
using bts.api.admin;
|
||||
using bts.api.core;
|
||||
using bts.spark;
|
||||
using mbts.spark.utilities;
|
||||
using mbts.utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace mbts.spark {
|
||||
[Export]
|
||||
class AdminModel {
|
||||
readonly AdminService _service;
|
||||
|
||||
[ImportingConstructor]
|
||||
private AdminModel(AdminService service) {
|
||||
_service = service;
|
||||
|
||||
on_admin_data = _service.subscribei_admin_data().Table().Replay(1).RefCount();
|
||||
}
|
||||
|
||||
public IObservable<TableUpdate<AdminDataImmutable, int>> on_admin_data { get; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
using bts.api;
|
||||
using mbts;
|
||||
using mbts.config;
|
||||
using mbts.spark;
|
||||
using mbts.ui;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace bts.ui {
|
||||
[Export, Export(typeof(IShellDaemon))]
|
||||
class AboutDaemon : IShellDaemon, IDisposable {
|
||||
readonly string _user;
|
||||
readonly IBrowserWindowManager _browser;
|
||||
IDisposable _dispose;
|
||||
|
||||
[ImportingConstructor]
|
||||
public AboutDaemon(IBus bus, [Import("username")]string username, IBrowserWindowManager browser) {
|
||||
_user = username;
|
||||
_browser = browser;
|
||||
_dispose = bus.subscribe(SparkTags.About).ObserveOnDispatcher().Subscribe(_ => show_about());
|
||||
}
|
||||
|
||||
[Conditional("DEBUG")]
|
||||
private void enable_crash_on_dblclick(Window w) {
|
||||
w.MouseDoubleClick += (o,e) => {
|
||||
throw new DebugException("Too many or too few clicks on BTS logo.");
|
||||
};
|
||||
}
|
||||
|
||||
void show_about() {
|
||||
Window about = Application.LoadComponent(new Uri("/view/Shell/About.xaml", UriKind.Relative)) as Window;
|
||||
enable_crash_on_dblclick(about);
|
||||
if (about != null) {
|
||||
about.DataContext = new { Version = Configuration.get<bts.config.System>().version, User = _user };
|
||||
about.Topmost = true;
|
||||
about.CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, (a, b) => about.Close()));
|
||||
about.CommandBindings.Add(new CommandBinding(ApplicationCommands.Open, (arg, e) => {
|
||||
if (e.Parameter != null) {
|
||||
string param = e.Parameter.ToString();
|
||||
if (!string.IsNullOrEmpty(param) && param.IndexOf("http") == 0) {
|
||||
Process.Start(param);
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(param)) {
|
||||
Uri address = new Uri("bts://" + param);
|
||||
_browser.Pages.Add(address);
|
||||
}
|
||||
}
|
||||
}));
|
||||
about.Show();
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
Disposable.dispose(ref _dispose);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
using bts.api;
|
||||
using bts.log;
|
||||
using mbts;
|
||||
using mbts.spark;
|
||||
using mbts.ui;
|
||||
using System;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
|
||||
namespace bts {
|
||||
[Export, Export(typeof(IShellDaemon))]
|
||||
class DeleteSyntheticDaemon : IShellDaemon, IDisposable {
|
||||
readonly OrdersModel _orders_model;
|
||||
IDisposable _dispose;
|
||||
|
||||
[ImportingConstructor]
|
||||
public DeleteSyntheticDaemon(IBus bus, OrdersModel orders_model) {
|
||||
_orders_model = orders_model;
|
||||
_dispose = bus.subscribe(SparkTags.SyntheticDeleteTag)
|
||||
.ObserveOnDispatcher()
|
||||
.Subscribe(_delete_synthetic);
|
||||
}
|
||||
|
||||
public void Dispose() =>
|
||||
Disposable.dispose(ref _dispose);
|
||||
|
||||
async void _delete_synthetic(uint id) {
|
||||
var (orders, orders_success) = await _orders_model.on_orders.FirstAsyncTask(SparkUtils.DefaultTimeOut);
|
||||
if (!orders_success) {
|
||||
Logger.warn(Subsystem.Ui, $"Ignoring request to delete synthetic security ({id}) because the orders lookup timed out (must confirm no working orders).");
|
||||
} else if (orders.state.Values.Any(o => o.Def.SecurityKey == id && o.is_non_terminal())) {
|
||||
Logger.warn(Subsystem.Ui, $"Ignoring request to delete synthetic security ({id}) because non-terminal-orders were detected.");
|
||||
} else {
|
||||
var (strategy, strategy_success) = await _orders_model.spreader.lookup_strategy_async(id);
|
||||
if (strategy_success) {
|
||||
var deleted_strategy = strategy.with(deleted: true);
|
||||
await _orders_model.spreader.save_strategy(id, deleted_strategy);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using bts.api.core;
|
||||
using bts.api.diagnostic;
|
||||
using mbts.ui;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.ComponentModel.Composition.Hosting;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace bts.spark {
|
||||
[Export(typeof(IShellDaemon))]
|
||||
class DiagnosticDaemon : IShellDaemon {
|
||||
readonly ShellDiagnosticsServiceServer _service;
|
||||
[ImportingConstructor]
|
||||
public DiagnosticDaemon(ServiceContext context, CompositionContainer container) {
|
||||
_service = new ShellDiagnosticsServiceServer(container, context);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
using bts.api;
|
||||
using bts.api.core;
|
||||
using bts.support;
|
||||
using mbts;
|
||||
using mbts.spark;
|
||||
using mbts.ui;
|
||||
using System;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Reactive.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
||||
namespace bts.spark
|
||||
{
|
||||
[Export, Export(typeof(IShellDaemon))]
|
||||
public class ErrorReporter : IShellDaemon, IDisposable {
|
||||
readonly ErrorReportService _svc;
|
||||
readonly string _username;
|
||||
IDisposable _dispose;
|
||||
|
||||
[ImportingConstructor]
|
||||
public ErrorReporter(ErrorReportService svc, IBus bus, [Import("username")] string username) {
|
||||
_svc = svc;
|
||||
_username = username;
|
||||
_dispose = bus.subscribe(SparkTags.Support).ObserveOnDispatcher().Subscribe(msg => show_support_window(msg, "Report a problem"));
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
Disposable.dispose(ref _dispose);
|
||||
}
|
||||
|
||||
public async Task report_error(string message, string title = null, MessageBoxImage? image = null) {
|
||||
var result = await BTSMessageBox.ShowAsync(message, title = "Error", BTSMessageBoxButtons.OK | BTSMessageBoxButtons.Support, image ?? MessageBoxImage.Error);
|
||||
if (result == BTSMessageBoxButtons.Support) {
|
||||
show_support_window(message, title);
|
||||
}
|
||||
}
|
||||
|
||||
public void show_support_window(string message, string title) {
|
||||
view.controls.SupportRequestWindow.Show(_svc, new ErrorReport() {
|
||||
User = _username,
|
||||
ErrorTitle = title,
|
||||
ErrorMessage = message,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
static class ErrorReporterExtensions
|
||||
{
|
||||
public static bool handle_error<T, TError>(this ErrorReporter error_reporter, Result<T> result, string template, TError error, bool error_ok) =>
|
||||
handle_error(error_reporter, result, template, error, error_ok, false, true);
|
||||
|
||||
public static TRV handle_error<T, TError, TRV>(this ErrorReporter error_reporter, Result<T> result, string template, TError error, bool error_ok, TRV successful_rv, TRV unsuccessful_rv = default) =>
|
||||
handle_error(error_reporter, result, template, _ => error, _ => error_ok, _ => successful_rv, () => unsuccessful_rv).result;
|
||||
|
||||
public static bool handle_error<T, TError>(this ErrorReporter error_reporter, Result<T> result, string template, Func<T, TError> get_error, Func<TError, bool> get_error_ok) =>
|
||||
handle_error(error_reporter, result, template, get_error, get_error_ok, _ => true, () => false).result;
|
||||
|
||||
public static (TRV result, string error) handle_error<T, TError, TRV>(this ErrorReporter error_reporter, Result<T> result, string template, Func<T, TError> get_error, Func<TError, bool> get_error_ok, Func<T, TRV> get_successful_rv) =>
|
||||
handle_error(error_reporter, result, template, get_error, get_error_ok, get_successful_rv, () => default);
|
||||
|
||||
public static (TRV result, string error) handle_error<T, TError, TRV>(
|
||||
this ErrorReporter error_reporter, Result<T> result, string template,
|
||||
Func<T, TError> get_error, Func<TError, bool> get_error_ok,
|
||||
Func<T, TRV> get_successful_rv, Func<TRV> get_unsuccessful_rv
|
||||
) {
|
||||
if (result.success) {
|
||||
TError error = get_error(result.value);
|
||||
if (get_error_ok(error))
|
||||
return (get_successful_rv(result.value), string.Empty);
|
||||
else {
|
||||
string error_msg = template.fmt(error);
|
||||
error_reporter.report_error(error_msg).ignore();
|
||||
return (get_unsuccessful_rv(), error_msg);
|
||||
}
|
||||
} else {
|
||||
error_reporter.report_error(result.error_message).ignore();
|
||||
return (get_unsuccessful_rv(), result.error_message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
using bts.api;
|
||||
using bts.api.synthetic;
|
||||
using bts.log;
|
||||
using mbts;
|
||||
using mbts.co2;
|
||||
using mbts.spark;
|
||||
using mbts.ui;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Reactive.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Linq;
|
||||
using SecurityKey = System.UInt32;
|
||||
|
||||
namespace bts {
|
||||
[Export(typeof(IShellDaemon))]
|
||||
class MDSource : IObserver<List<SecurityAndHandle>>, IShellDaemon, IDisposable {
|
||||
readonly IBus _bus;
|
||||
readonly MDConsumer _consumer = new MDConsumer();
|
||||
readonly Co2RelayControl _relay;
|
||||
HashSet<SecurityKey> _deleted_synthetics = new HashSet<SecurityKey>();
|
||||
List<IDisposable> _dispose = new List<IDisposable>();
|
||||
IReadOnlyDictionary<SecurityKey, SecurityMD> _exchange_sec_map = new Dictionary<SecurityKey, SecurityMD>();
|
||||
|
||||
[ImportingConstructor]
|
||||
public MDSource(IBus bus, SyntheticSecurityService ss) {
|
||||
_bus = bus;
|
||||
_relay = new Co2RelayControl(_consumer);
|
||||
_relay.preload_securities((co2.MDRequest.Types.Flags)0xff).ignore();
|
||||
_dispose.Add(_consumer.on_security.Subscribe(this));
|
||||
_dispose.Add(
|
||||
ss.subscribei_metadata()
|
||||
.Select(upd => upd.all.ToDictionary(i => i.SecurityKey, i => i.Strategy))
|
||||
.Subscribe(t => {
|
||||
_deleted_synthetics = new HashSet<uint>(t.Where(kv => kv.Value.Deleted).Select(kv => kv.Key));
|
||||
_bus.post(SparkTags.SyntheticstrategiesTag, t);
|
||||
}));
|
||||
new DataPersistor(_bus);
|
||||
Task.Run(run);
|
||||
}
|
||||
|
||||
[Export]
|
||||
MDConsumer consumer => _consumer;
|
||||
|
||||
public void OnCompleted() { }
|
||||
public void OnError(Exception error) => Logger.error(Subsystem.gen, error.ToString());
|
||||
public void OnNext(List<SecurityAndHandle> values) {
|
||||
if (values.Count > 0) {
|
||||
var temp = _exchange_sec_map.ToDictionary(k => k.Key, k => k.Value);
|
||||
foreach (var v in values) {
|
||||
temp.Add(v.security.Id, new SecurityMD(v.security, v.handle));
|
||||
}
|
||||
_exchange_sec_map = temp;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose() => Disposable.dispose(_dispose);
|
||||
|
||||
async Task run() {
|
||||
int exch_sec_count = 0, deleted_synth_count = 0;
|
||||
while (true) {
|
||||
var exch = _exchange_sec_map;
|
||||
var deleted_synths = _deleted_synthetics;
|
||||
if (exch.Count > exch_sec_count || deleted_synths.Count != deleted_synth_count) {
|
||||
exch_sec_count = exch.Count;
|
||||
deleted_synth_count = deleted_synths.Count;
|
||||
exch = exch.Where(kv => !deleted_synths.Contains(kv.Key)).ToDictionary();
|
||||
try {
|
||||
Logger.log(Level.Info, Subsystem.gen, String.Format("MDSource publishing {0} securities", exch.Count));
|
||||
_bus.post(SparkTags.SecuritiesTag, exch);
|
||||
} catch (Exception e) {
|
||||
Logger.error(Subsystem.md, $"Error in publish_securities: {e}");
|
||||
}
|
||||
}
|
||||
await Task.Delay(TimeSpan.FromSeconds(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using mbts;
|
||||
using mbts.ui;
|
||||
using System;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using bts.api;
|
||||
using mbts.spark;
|
||||
using bts.spark;
|
||||
using bts.api.orderman;
|
||||
using System.Windows;
|
||||
|
||||
namespace bts
|
||||
{
|
||||
[Export, Export(typeof(IShellDaemon))]
|
||||
class ModifyOrderDaemon : IShellDaemon, IDisposable {
|
||||
readonly IBus _bus;
|
||||
IDisposable _dispose;
|
||||
|
||||
[ImportingConstructor]
|
||||
public ModifyOrderDaemon(IBus bus) {
|
||||
_bus = bus;
|
||||
//_dispose = Disposable.Create(
|
||||
// bus.subscribe(SparkTags.ShowModifyOrderTag).Subscribe(show_modify_order)
|
||||
//);
|
||||
_dispose = null;
|
||||
}
|
||||
|
||||
void show_modify_order(OrderRecordImmutable record) {
|
||||
// lauch the order ticket
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
Disposable.dispose(ref _dispose);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
using bts.api;
|
||||
using bts.api.core;
|
||||
using bts.api.orderman;
|
||||
using bts.spark;
|
||||
using mbts;
|
||||
using mbts.spark;
|
||||
using mbts.ui;
|
||||
using mbts.ui.spark;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows;
|
||||
|
||||
namespace bts.shell {
|
||||
[Export(typeof(IShellDaemon))]
|
||||
class OrderTicketDaemon : IShellDaemon {
|
||||
readonly IBus _bus;
|
||||
readonly OrdersModel _model;
|
||||
readonly ErrorReporter _error_reporter;
|
||||
IReadOnlyDictionary<uint, SecurityMD> _md_map;
|
||||
TableUpdate<OrderRecordImmutable, uint> _orders;
|
||||
IDisposable _dispose;
|
||||
|
||||
[ImportingConstructor]
|
||||
public OrderTicketDaemon(IBus bus, OrdersModel model, ErrorReporter error_reporter) {
|
||||
_bus = bus;
|
||||
_model = model;
|
||||
_error_reporter = error_reporter;
|
||||
_dispose = Disposable.Create(
|
||||
model.on_orders.ObserveOnDispatcher().Subscribe(o => _orders = o),
|
||||
bus.subscribe(SparkTags.SecuritiesTag).ObserveOnDispatcher().Subscribe(m =>_md_map = m),
|
||||
bus.subscribe(SparkTags.ShowOrderTicketFromSecurityTag).ObserveOnDispatcher().Subscribe(_show_order_ticket),
|
||||
bus.subscribe(SparkTags.ShowOrderTicketTag).ObserveOnDispatcher().Subscribe(_show_order_ticket),
|
||||
bus.subscribe(SparkTags.ShowModifyOrderTag).ObserveOnDispatcher().Subscribe(_show_modify_order)
|
||||
);
|
||||
}
|
||||
|
||||
public void Dispose() =>
|
||||
Disposable.dispose(ref _dispose);
|
||||
|
||||
static void _show_order_window(Window window) =>
|
||||
window.Show(-200, -160, true);
|
||||
|
||||
void _show_order_ticket(SecurityMD smd) =>
|
||||
_show_order_window(new OrderTicket {
|
||||
DataContext = new NewOrderTicketVM(_model, smd,
|
||||
Observable.Return(_model.factory.default_ladder_settings(smd.security)))
|
||||
});
|
||||
|
||||
void _show_order_ticket((OrderDefinitionImmutable def, double price, uint size) ops) {
|
||||
if (_md_map.TryGetValue(ops.def.SecurityKey, out SecurityMD smd))
|
||||
_show_order_window(new OrderTicket {
|
||||
DataContext = new NewOrderTicketVM(_model, smd, ops.def, ops.price, ops.size,
|
||||
Observable.Return(_model.factory.default_ladder_settings(smd.security).calculator_buttons))
|
||||
});
|
||||
}
|
||||
|
||||
void _show_modify_order(uint order_key) {
|
||||
if (_orders.state.TryGetValue(order_key, out OrderRecordImmutable ori) && _md_map.TryGetValue(ori.Def.SecurityKey, out SecurityMD smd)
|
||||
&& (ori.HasDef && ori.Def.HasCustomDef && !(ori.Def.CustomDef.HasStop || ori.Def.CustomDef.HasStopLimit)))
|
||||
_show_order_window(new OrderModificationDialog {
|
||||
DataContext = new ExistingOrderTicketVM(_model,
|
||||
Observable.Return(new OrderRecordTuple(ori, smd)),
|
||||
Observable.Return(_model.factory.default_ladder_settings(smd.security).calculator_buttons)
|
||||
)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using bts.api;
|
||||
using mbts.spark;
|
||||
using mbts.ui;
|
||||
using System.ComponentModel.Composition;
|
||||
using mbts;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using bts.spark;
|
||||
using System.Reactive.Linq;
|
||||
|
||||
namespace bts {
|
||||
[Export, Export(typeof(IShellDaemon))]
|
||||
class SecurityPickerDaemon : IShellDaemon, IDisposable {
|
||||
readonly IBus _bus;
|
||||
IDisposable _dispose;
|
||||
|
||||
[ImportingConstructor]
|
||||
public SecurityPickerDaemon(IBus bus) {
|
||||
_bus = bus;
|
||||
_dispose = Disposable.Create(
|
||||
bus.subscribe(SparkTags.ShowPickOne).ObserveOnDispatcher().Subscribe(show_pick_one),
|
||||
bus.subscribe(SparkTags.FilterPickOne).ObserveOnDispatcher().Subscribe(show_filtered_pick_one),
|
||||
bus.subscribe(SparkTags.ShowPickMultiple).ObserveOnDispatcher().Subscribe(show_pick_multiple),
|
||||
bus.subscribe(SparkTags.ShowAndEditPickMultiple).ObserveOnDispatcher().Subscribe(show_and_edit_pick_multiple)
|
||||
);
|
||||
}
|
||||
|
||||
void show_pick_one(PartialCommand<SecurityMD> message) {
|
||||
var vm = new ContractPickerModel(_bus, false, null);
|
||||
var view = new ContractPickerView(vm);
|
||||
|
||||
Window picker = new Window {
|
||||
Content = view,
|
||||
Title = $"Select a Security for {message.title}",
|
||||
Icon = message.icon,
|
||||
Height = view.Height,
|
||||
Width = view.Width
|
||||
};
|
||||
picker.Style = picker.TryFindResource("BTSWindow") as Style;
|
||||
view.Height = Double.NaN;
|
||||
view.Width = Double.NaN;
|
||||
|
||||
vm.ok_action = () => {
|
||||
picker.Close();
|
||||
message.complete(vm.result).execute(_bus);
|
||||
};
|
||||
picker.move_to_mouse();
|
||||
picker.Show();
|
||||
}
|
||||
|
||||
void show_filtered_pick_one((PartialCommand<SecurityMD> message, SecurityCriteria global_filter) message_and_filter) {
|
||||
var vm = new ContractPickerModel(_bus, false, null, message_and_filter.global_filter);
|
||||
var view = new ContractPickerView(vm);
|
||||
|
||||
Window picker = new Window {
|
||||
Content = view,
|
||||
Title = $"Select a Security for {message_and_filter.message.title}",
|
||||
Icon = message_and_filter.message.icon,
|
||||
Height = view.Height,
|
||||
Width = view.Width
|
||||
};
|
||||
picker.Style = picker.TryFindResource("BTSWindow") as Style;
|
||||
view.Height = Double.NaN;
|
||||
view.Width = Double.NaN;
|
||||
|
||||
vm.ok_action = () => {
|
||||
picker.Close();
|
||||
message_and_filter.message.complete(vm.result).execute(_bus);
|
||||
};
|
||||
picker.move_to_mouse();
|
||||
picker.Show();
|
||||
}
|
||||
|
||||
void show_pick_multiple(PartialCommand<SecurityCriteria> message) {
|
||||
var vm = new ContractPickerModel(_bus, true, null);
|
||||
var view = new ContractPickerView(vm);
|
||||
|
||||
Window picker = new Window
|
||||
{
|
||||
Content = view,
|
||||
Title = $"Select Securities for {message.title}",
|
||||
Icon = message.icon,
|
||||
Height = view.Height,
|
||||
Width = view.Width,
|
||||
};
|
||||
picker.Style = picker.TryFindResource("BTSWindow") as Style;
|
||||
view.Height = Double.NaN;
|
||||
view.Width = Double.NaN;
|
||||
|
||||
vm.ok_action = () => {
|
||||
picker.Close();
|
||||
message.complete(vm.result_criteria).execute(_bus);
|
||||
};
|
||||
picker.move_to_mouse();
|
||||
picker.Show();
|
||||
}
|
||||
|
||||
void show_and_edit_pick_multiple((PartialCommand<SecurityCriteria> message, SecurityCriteria existing_criteria) message_and_data) {
|
||||
var vm = new ContractPickerModel(_bus, true, message_and_data.existing_criteria);
|
||||
var view = new ContractPickerView(vm);
|
||||
|
||||
Window picker = new Window {
|
||||
Content = view,
|
||||
Title = $" {message_and_data.message.title} security selection",
|
||||
Icon = message_and_data.message.icon,
|
||||
Height = view.Height,
|
||||
Width = view.Width,
|
||||
};
|
||||
picker.Style = picker.TryFindResource("BTSWindow") as Style;
|
||||
view.Height = Double.NaN;
|
||||
view.Width = Double.NaN;
|
||||
|
||||
vm.ok_action = () => {
|
||||
picker.Close();
|
||||
message_and_data.message.complete(vm.result_criteria).execute(_bus);
|
||||
};
|
||||
picker.move_to_mouse();
|
||||
picker.Show();
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
Disposable.dispose(ref _dispose);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,12 +7,16 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using bts.api.user;
|
||||
using bts.api.persistence;
|
||||
using bts.support;
|
||||
using bts.api.orderman;
|
||||
using bts.api.synthetic;
|
||||
using bts.api.diagnostic;
|
||||
using bts.api.admin;
|
||||
|
||||
namespace Spark
|
||||
{
|
||||
public class ShellServices
|
||||
{
|
||||
|
||||
[Export]
|
||||
public static ServiceContext context { get; } = new ServiceContext();
|
||||
|
||||
@@ -25,5 +29,17 @@ namespace Spark
|
||||
[Export]
|
||||
public PersistenceService generic_settings => context.locate<PersistenceService>();
|
||||
|
||||
[Export]
|
||||
public ErrorReportService error_service => context.locate<ErrorReportService>();
|
||||
|
||||
[Export]
|
||||
public OrderService order_service => context.locate<OrderService>();
|
||||
|
||||
[Export]
|
||||
public AdminService admin_service => context.locate<AdminService>();
|
||||
|
||||
[Export]
|
||||
public SyntheticSecurityService synthetic_security_service => context.locate<SyntheticSecurityService>();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using mbts.ui.shell;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace mbts.ui {
|
||||
interface IMenuItemVM {
|
||||
string name { get; }
|
||||
string group { get; }
|
||||
ImageSource icon { get; }
|
||||
ICommand command { get; }
|
||||
object parameter { get; }
|
||||
}
|
||||
|
||||
class MenuItemVM : ViewModelBase, IMenuItemVM {
|
||||
object _parameter;
|
||||
|
||||
public MenuItemVM(string name, ICommand command, ImageSource icon = null, string group = null, object parameter = null) {
|
||||
this.name = name;
|
||||
this.group = group;
|
||||
this.command = command;
|
||||
this.icon = icon;
|
||||
_parameter = parameter;
|
||||
}
|
||||
|
||||
public string name { get; }
|
||||
public string group { get; }
|
||||
public ImageSource icon { get; }
|
||||
public ICommand command { get; }
|
||||
public object parameter {
|
||||
get => _parameter;
|
||||
set {
|
||||
_parameter = value;
|
||||
command.TryRaiseCanExecuteChanged();
|
||||
RaisePropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 326 B |
|
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 326 B |
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@@ -10,8 +10,8 @@ namespace mbts.ui
|
||||
{
|
||||
public class Icons
|
||||
{
|
||||
static readonly string base_uri = "pack://application:,,,/uicore/Images/Icons/";
|
||||
private static ResourceDictionary _resources = (ResourceDictionary)Application.LoadComponent(new Uri("/uicore/Images/Vector/Icons.xaml", UriKind.RelativeOrAbsolute));
|
||||
static readonly string base_uri = "pack://application:,,,/Images/Icons/";
|
||||
private static ResourceDictionary _resources = (ResourceDictionary)Application.LoadComponent(new Uri("/Images/Vector/Icons.xaml", UriKind.RelativeOrAbsolute));
|
||||
|
||||
private static Uri uri(string filename) {
|
||||
return new Uri(base_uri + filename);
|
||||
@@ -30,26 +30,22 @@ namespace mbts.ui
|
||||
public static ImageSource Sheets { get { return (DrawingImage)_resources["Sheets"]; } }
|
||||
public static ImageSource Trades { get { return (DrawingImage)_resources["Trades"]; } }
|
||||
public static ImageSource Depth { get { return (DrawingImage)_resources["Depth"]; } }
|
||||
public static ImageSource Ladder { get { return (DrawingImage)_resources["Ladder"]; } }
|
||||
public static ImageSource SheetsRed { get { return load_image("SheetsRed.png"); } }
|
||||
public static ImageSource SheetsGreen { get { return load_image("SheetsGreen.png"); } }
|
||||
public static ImageSource Spreads { get { return (DrawingImage)_resources["Spreads"]; } }
|
||||
public static ImageSource BlueSpreads { get { return load_image("BlueSpread.ico"); } }
|
||||
public static ImageSource MMTN { get { return load_image("mmtn.ico"); } }
|
||||
public static ImageSource Reports { get { return (DrawingImage)_resources["Reports"]; } }
|
||||
public static ImageSource Risk { get { return (DrawingImage)_resources["Risk"]; } }
|
||||
public static ImageSource Eye { get { return (DrawingImage)_resources["Eye"]; } }
|
||||
public static ImageSource Coins { get { return (DrawingImage)_resources["Coins"]; } }
|
||||
|
||||
|
||||
public static ImageSource Loading { get { return load_image("loading.ico"); } }
|
||||
public static ImageSource DataCopy { get { return load_image("DataCopy.ico"); } }
|
||||
public static ImageSource Import { get { return load_image("Import.ico"); } }
|
||||
public static ImageSource Refresh { get { return load_image("Refresh.png"); } }
|
||||
public static ImageSource FavoriteWindow { get { return load_image("FavoriteWindow.png"); } }
|
||||
public static ImageSource RubberStamp { get { return load_image("RubberStamp.png"); } }
|
||||
public static ImageSource Ticket { get { return load_image("Ticket.png"); } }
|
||||
//public static ImageSource Ticket { get { return load_image("Ticket.png"); } } // replaced with AddOrders
|
||||
public static ImageSource Date { get { return load_image("Date.png"); } }
|
||||
public static ImageSource RFQArrows { get { return load_image("RFQArrows.png"); } }
|
||||
|
||||
public static ImageSource Cube3d { get { return (DrawingImage)_resources["Cube"]; /*return load_image("Cube-Molecule.png");*/ } }
|
||||
public static ImageSource Algo { get { return Cube3d; } }
|
||||
@@ -57,7 +53,6 @@ namespace mbts.ui
|
||||
public static ImageSource Math { get { return (DrawingImage)_resources["Surface"]; } }
|
||||
public static ImageSource Abacus { get { return load_image("Abacus.png"); } }
|
||||
|
||||
public static ImageSource Add_New { get { return load_image("Add-New.png"); } }
|
||||
public static ImageSource Delete { get { return load_image("Delete.png"); } }
|
||||
public static ImageSource Up_Arrow { get { return load_image("Arrowhead-Up.png"); } }
|
||||
public static ImageSource Down_Arrow { get { return load_image("Arrowhead-Down.png"); } }
|
||||
@@ -73,20 +68,48 @@ namespace mbts.ui
|
||||
public static ImageSource Window { get { return (DrawingImage)_resources["Window"]; } }
|
||||
public static ImageSource ActiveWindow { get { return (DrawingImage)_resources["ActiveWindow"]; } }
|
||||
public static ImageSource Trash { get { return (DrawingImage)_resources["Trash"]; } }
|
||||
public static ImageSource Trash2 { get { return (DrawingImage)_resources["Trash2"]; } }
|
||||
public static ImageSource Crucible { get { return (DrawingImage)_resources["Crucible"]; } }
|
||||
|
||||
public static ImageSource Accounting { get { return (DrawingImage)_resources["Accounting"]; } }
|
||||
public static ImageSource Add { get { return (DrawingImage)_resources["Add"]; } }
|
||||
public static ImageSource AddEncircled { get { return (DrawingImage)_resources["AddEncircled"]; } }
|
||||
public static ImageSource Beaker { get { return (DrawingImage)_resources["Beaker"]; } }
|
||||
public static ImageSource Book { get { return (DrawingImage)_resources["Book"]; } }
|
||||
|
||||
public static ImageSource AddOrders { get { return (DrawingImage)_resources["AddOrders"]; } }
|
||||
public static ImageSource CancelOrders { get { return (DrawingImage)_resources["CancelOrders"]; } }
|
||||
public static ImageSource CancelBuys { get { return (DrawingImage)_resources["CancelBuys"]; } }
|
||||
public static ImageSource CancelSells { get { return (DrawingImage)_resources["CancelSells"]; } }
|
||||
public static ImageSource CancelSelected { get { return (DrawingImage)_resources["CancelSelected"]; } }
|
||||
|
||||
public static ImageSource LadderCancelOrders { get { return (DrawingImage)_resources["LadderCancelOrders"]; } }
|
||||
public static ImageSource LadderCancelBuys { get { return (DrawingImage)_resources["LadderCancelBuys"]; } }
|
||||
public static ImageSource LadderCancelSells { get { return (DrawingImage)_resources["LadderCancelSells"]; } }
|
||||
|
||||
public static ImageSource Synthetics { get { return (DrawingImage)_resources["Synthetics"]; } }
|
||||
public static ImageSource AddSynthetic { get { return (DrawingImage)_resources["AddSynthetic"]; } }
|
||||
public static ImageSource RemoveSynthetic { get { return (DrawingImage)_resources["RemoveSynthetic"]; } }
|
||||
public static ImageSource ModifySynthetic { get { return (DrawingImage)_resources["ModifySynthetic"]; } }
|
||||
public static ImageSource CloneSynthetic { get { return (DrawingImage)_resources["CloneSynthetic"]; } }
|
||||
|
||||
public static ImageSource ModifyOrder { get { return (DrawingImage)_resources["ModifyOrder"]; } }
|
||||
public static ImageSource Clock { get { return (DrawingImage)_resources["Clock"]; } }
|
||||
public static ImageSource Defrag { get { return (DrawingImage)_resources["Defrag"]; } }
|
||||
public static ImageSource Display { get { return (DrawingImage)_resources["Display"]; } }
|
||||
public static ImageSource Export => (DrawingImage)_resources["Export"];
|
||||
public static ImageSource Filter { get { return (DrawingImage)_resources["Filter"]; } }
|
||||
public static ImageSource FilterActive { get { return (DrawingImage)_resources["FilterActive"]; } }
|
||||
public static ImageSource FilterError { get { return (DrawingImage)_resources["FilterError"]; } }
|
||||
public static ImageSource Import => (DrawingImage)_resources["Import"];
|
||||
public static ImageSource Knight { get { return (DrawingImage)_resources["Knight"]; } }
|
||||
public static ImageSource Payment { get { return (DrawingImage)_resources["Payment"]; } }
|
||||
public static ImageSource Spawn { get { return (DrawingImage)_resources["Spawn"]; } }
|
||||
public static ImageSource Target { get { return (DrawingImage)_resources["Target"]; } }
|
||||
public static ImageSource Tetris { get { return (DrawingImage)_resources["Tetris"]; } }
|
||||
public static ImageSource ViewSettings => (DrawingImage)_resources["ViewSettings"];
|
||||
public static ImageSource Wrench { get { return (DrawingImage)_resources["Wrench"]; } }
|
||||
|
||||
public static ImageSource Support => (DrawingImage)_resources["SupportIcon"];
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 245 B After Width: | Height: | Size: 245 B |
|
Before Width: | Height: | Size: 448 B After Width: | Height: | Size: 448 B |
|
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 442 B |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 399 B After Width: | Height: | Size: 399 B |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 750 B After Width: | Height: | Size: 750 B |
|
Before Width: | Height: | Size: 677 B After Width: | Height: | Size: 677 B |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,778 @@
|
||||
<ResourceDictionary
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:mbts="clr-namespace:mbts.ui">
|
||||
<DrawingImage x:Key="FavoritesGold">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Geometry="M1540.22,2082.07L1546.95,2102.78 1568.73,2102.78 1551.11,2115.58 1557.84,2136.29 1540.22,2123.49 1522.6,2136.29 1529.33,2115.58 1511.71,2102.78 1533.49,2102.78 1540.22,2082.07z">
|
||||
<GeometryDrawing.Pen>
|
||||
<Pen Thickness="1" Brush="Black" />
|
||||
</GeometryDrawing.Pen>
|
||||
<GeometryDrawing.Brush>
|
||||
<SolidColorBrush Color="#ffd932" />
|
||||
</GeometryDrawing.Brush>
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="FavoritesWhite">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Geometry="M1540.22,2082.07L1546.95,2102.78 1568.73,2102.78 1551.11,2115.58 1557.84,2136.29 1540.22,2123.49 1522.6,2136.29 1529.33,2115.58 1511.71,2102.78 1533.49,2102.78 1540.22,2082.07z">
|
||||
<GeometryDrawing.Pen>
|
||||
<Pen Thickness="1" Brush="Black" />
|
||||
</GeometryDrawing.Pen>
|
||||
<GeometryDrawing.Brush>
|
||||
<SolidColorBrush Color="#ffd932" />
|
||||
</GeometryDrawing.Brush>
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Window">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Geometry="
|
||||
M 32.868601,3.8869994 C31.026201,3.8869996 29.534,5.3791947 29.534,7.2190399 29.534,9.0588851 31.026201,10.553 32.868601,10.553 34.7085,10.553 36.202,9.0588851 36.202,7.2190399 36.202,5.3791947 34.7085,3.8869996 32.868601,3.8869994z
|
||||
M 42.868601,3.8869994 C41.026201,3.8869996 39.534,5.3791947 39.534,7.2190399 39.534,9.0588851 41.026201,10.553 42.868601,10.553 44.7085,10.553 46.202,9.0588851 46.202,7.2190399 46.202,5.3791947 44.7085,3.8869996 42.868601,3.8869994z
|
||||
M 52.868601,3.8869994 C51.026201,3.8869996 49.534,5.3791947 49.534,7.2190399 49.534,9.0588851 51.026201,10.553 52.868601,10.553 54.7085,10.553 56.202,9.0588851 56.202,7.2190399 56.202,5.3791947 54.7085,3.8869996 52.868601,3.8869994z
|
||||
M5.2010002,14.812L5.2010002,43.573997 56.098,43.573997 56.098,14.812z
|
||||
M0,0L63.999001,0 63.999001,48.792999 0,48.792999z">
|
||||
<GeometryDrawing.Pen>
|
||||
<Pen Thickness="1" Brush="Black" />
|
||||
</GeometryDrawing.Pen>
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="ActiveWindow">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="
|
||||
M 32.868601,3.8869994 C31.026201,3.8869996 29.534,5.3791947 29.534,7.2190399 29.534,9.0588851 31.026201,10.553 32.868601,10.553 34.7085,10.553 36.202,9.0588851 36.202,7.2190399 36.202,5.3791947 34.7085,3.8869996 32.868601,3.8869994z
|
||||
M 42.868601,3.8869994 C41.026201,3.8869996 39.534,5.3791947 39.534,7.2190399 39.534,9.0588851 41.026201,10.553 42.868601,10.553 44.7085,10.553 46.202,9.0588851 46.202,7.2190399 46.202,5.3791947 44.7085,3.8869996 42.868601,3.8869994z
|
||||
M 52.868601,3.8869994 C51.026201,3.8869996 49.534,5.3791947 49.534,7.2190399 49.534,9.0588851 51.026201,10.553 52.868601,10.553 54.7085,10.553 56.202,9.0588851 56.202,7.2190399 56.202,5.3791947 54.7085,3.8869996 52.868601,3.8869994z
|
||||
M5.2010002,14.812L5.2010002,43.573997 56.098,43.573997 56.098,14.812z
|
||||
M0,0L63.999001,0 63.999001,48.792999 0,48.792999z">
|
||||
<GeometryDrawing.Pen>
|
||||
<Pen Thickness="1" Brush="Black" />
|
||||
</GeometryDrawing.Pen>
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Trash">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M33.978,27.679999L33.978,58.098995 41.374,58.098995 41.374,27.679999z M14.841001,27.679999L14.841001,58.098995 22.237,58.098995 22.237,27.679999z M4.0320003,22.430001L52.183002,22.430001 52.183002,63.995998 4.0320003,63.995998z M15.974001,0L40.194999,0 40.194999,7.7200003 56.166999,7.7200003 56.166999,15.995 0,15.995 0,7.7200003 15.974001,7.7200003z">
|
||||
<!--<GeometryDrawing.Pen>
|
||||
<Pen Thickness="1" Brush="Black" />
|
||||
</GeometryDrawing.Pen>-->
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Trash2">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Transparent" Geometry="M0,12.568994L23.662999,12.568994 20.910989,31.999999 2.7520113,31.999999z M8.0689915,1.6269979L8.0689915,4.6679968 15.594984,4.6679968 15.594984,1.6269979z M6.4420097,0L17.221997,0 17.221997,4.6679968 23.662999,4.6679968 23.662999,8.7949938 0,8.7949938 0,4.6679968 6.4420097,4.6679968z">
|
||||
<GeometryDrawing.Pen>
|
||||
<Pen Brush="Black" Thickness="2"/>
|
||||
</GeometryDrawing.Pen>
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Undo">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="F1M-198.67,4280.19C-197.609,4277.78 -197.035,4275.17 -197.035,4272.46 -197.035,4267.33 -199.032,4262.51 -202.665,4258.88 -206.286,4255.25 -211.107,4253.26 -216.235,4253.26 -221.365,4253.26 -226.186,4255.25 -229.811,4258.88 -232.498,4261.57 -234.282,4264.92 -235.032,4268.56L-225.835,4278.86 -252.503,4278.86 -250.373,4251.38 -241.577,4261.22C-240.214,4258.14 -238.303,4255.3 -235.844,4252.85 -230.61,4247.61 -223.644,4244.72 -216.235,4244.72 -208.822,4244.72 -201.861,4247.61 -196.627,4252.85 -191.39,4258.08 -188.503,4265.05 -188.503,4272.46 -188.503,4275.11 -188.894,4277.71 -189.617,4280.19L-198.67,4280.19z">
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Crucible">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="m 430.4375 225.625 c -1.92352 0.0276 -3.82501 0.82944 -5.1875 2.1875 L 330.0625 323 288 280.9375 c -1.38915 -1.39371 -3.34472 -2.2056 -5.3125 -2.2056 -1.96778 0 -3.92335 0.81189 -5.3125 2.2056 l -23.9375 23.9375 c -1.3844 1.38804 -2.18997 3.33646 -2.18997 5.29687 0 1.96042 0.80557 3.90884 2.18997 5.29688 l 71.3125 71.3125 c 1.38804 1.3844 3.33646 2.18997 5.29687 2.18997 1.96042 0 3.90884 -0.80557 5.29688 -2.18997 l 4.34375 -4.34375 19.59375 -19.59375 100.5 -100.5 c 1.3844 -1.38804 2.18997 -3.33646 2.18997 -5.29688 0 -1.96041 -0.80557 -3.90883 -2.18997 -5.29687 l -23.9375 -23.9375 c -1.41413 -1.40955 -3.40982 -2.21706 -5.40625 -2.1875 z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Cube">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M37.063741,37.405188L33.240929,50.771959 33.345182,50.829412C33.743126,51.061163,34.109612,51.337603,34.437061,51.651468L34.468327,51.682901 44.707291,44.003126 44.641921,43.880777C44.347813,43.295671,44.183001,42.63962,44.183001,41.946699L44.185978,41.833834z M24.591099,31.982382L10.519234,39.24213 10.504738,39.424831C10.479679,39.661278,10.436295,39.892527,10.375957,40.117252L10.337856,40.24584 10.451912,40.307037C10.495525,40.332783,10.538376,40.360497,10.58033,40.390192L26.361021,51.547636 26.448517,51.467699C27.339916,50.69132,28.485014,50.17779,29.750544,50.054647L30.015249,50.035364 34.145618,35.590685 29.192999,32.51112C29.04261,32.417593,28.908485,32.31176,28.79232,32.197899L28.716364,32.117622 28.685419,32.139805C28.132467,32.49791 27.465902,32.706999 26.748449,32.706999 26.030621,32.706999 25.363836,32.49791 24.810755,32.139805z M28.780092,24.040133L28.448082,26.492748 28.685419,26.630915C29.607006,27.227547 30.212999,28.238197 30.212999,29.385599 30.212999,29.614918 30.188759,29.838802 30.142603,30.055031L30.080193,30.287708 30.111809,30.297695C30.268356,30.353413,30.424189,30.42791,30.574446,30.521399L34.837221,33.172018 35.327473,31.457518C35.410911,31.165865,35.525216,30.895145,35.662153,30.652515L35.756067,30.497255 35.710442,30.474535C33.991901,29.570229,32.844,27.933699,32.844,26.065052L32.845716,26.006275z M53.770291,20.119031L44.688253,25.319921 44.720247,25.537884C44.740581,25.711212 44.750998,25.887079 44.750998,26.065052 44.750998,28.912514 42.084275,31.221001 38.797749,31.221001L38.67025,31.218208 38.672958,31.305962C38.671358,31.615515,38.625373,31.944508,38.53014,32.277802L37.755445,34.986586 44.966217,39.470285 44.977812,39.451984C45.814164,38.264851 47.230547,37.483999 48.837201,37.483999 49.078189,37.483999 49.314904,37.501568 49.546028,37.535442L49.656656,37.554392 54.505396,20.597714 54.402527,20.541037C54.290171,20.475618,54.180146,20.40689,54.0726,20.334991z M9.6452522,14.786494L9.5807686,14.857854C9.0475883,15.420187,8.3894768,15.871748,7.6484566,16.172216L7.5149994,16.222663 7.5149994,34.615192 7.5420074,34.625397C8.4930382,35.010883,9.2904701,35.676405,9.8216705,36.51416L9.9140587,36.668142 23.306246,29.758877 23.300888,29.725224C23.289059,29.61356 23.282999,29.500257 23.282999,29.385599 23.282999,27.893976 24.307062,26.633465 25.717823,26.213213L26.001564,26.143343 26.439465,22.908201z M25.594164,6.962996L10.989891,11.757046 10.982574,11.849259C10.963779,12.026639,10.935814,12.201424,10.899147,12.373173L10.896881,12.382581 26.821791,20.083639 28.28179,9.2974239 28.12504,9.2381914C27.074772,8.8124379,26.207533,8.0535914,25.667171,7.0996943z M34.637348,6.8116302L34.599276,6.8923512C33.894737,8.2938632,32.502018,9.3174334,30.841724,9.5606082L30.738474,9.5731842 29.162455,21.21555 33.69524,23.407539 33.705906,23.391473C34.750082,21.903184 36.639784,20.909001 38.797749,20.909001 40.441011,20.909001 41.929324,21.486123 43.006821,22.41919L43.020344,22.431472 51.760321,17.426437 51.737371,17.368303C51.521266,16.762437 51.403998,16.112631 51.403998,15.436536 51.403998,14.921415 51.472072,14.421554 51.600069,13.944759L51.681425,13.670171z M30.077951,0C32.588049,0,34.668222,1.7676992,35.036192,4.0752702L35.064489,4.2886443 52.961684,11.489869 53.021899,11.423252C54.161165,10.222043 55.804663,9.4679997 57.631995,9.4679992 61.070987,9.4680003 63.858998,12.139764 63.858998,15.436536 63.858998,18.733305 61.070987,21.405001 57.631995,21.405001L57.456546,21.40075 52.402265,39.080206 52.428996,39.108406C53.093061,39.879898 53.492,40.868822 53.492,41.946699 53.492,44.410421 51.407745,46.407999 48.837201,46.407999 48.033874,46.407999 47.278115,46.212923 46.618644,45.869505L46.615751,45.867823 35.872695,53.925859 35.950705,54.189234C36.069708,54.632677 36.132998,55.097586 36.132998,55.5767 36.132998,58.641745 33.540598,61.126001 30.342699,61.126001 27.144098,61.126001 24.550999,58.641745 24.550999,55.5767 24.550999,55.193407 24.591516,54.819208 24.668669,54.457815L24.711109,54.281561 8.605793,42.894129C8.5577812,42.860109,8.5120659,42.824305,8.4686737,42.786901L8.4553757,42.77429 8.3729744,42.833338C7.5921974,43.338846 6.6510086,43.634001 5.6380043,43.634001 2.935627,43.634001 0.74499893,41.535135 0.74499893,38.9454 0.74499893,36.841322 2.1911545,35.061296 4.1829567,34.467758L4.2889977,34.438908 4.2889977,16.456114 4.1295319,16.420828C1.7547989,15.835048 0,13.768469 0,11.309781 0,8.3958501 2.4649048,6.0340006 5.5053978,6.0339997 7.5959015,6.0340006 9.4142189,7.1503434 10.346516,8.7949429L10.425873,8.9434187 25.113558,4.1221313 25.119768,4.0752702C25.48749,1.7676992,27.566404,0,30.077951,0z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Risk">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M3.3500004,28.921999L16.410999,28.921999 16.410999,29.396999 16.410999,32.959999 16.410999,38.421999 25.514,38.421999 25.514,42.458 25.495,42.458 25.495,47.602999 34.698,47.602999 34.698,51.640999 25.495,51.640999 25.495,51.671 21.458,51.671 21.458,42.458 16.410999,42.458 12.453001,42.458 12.374001,42.458 12.374001,32.959999 3.3500004,32.959999z M54.794001,20.069L59.39695,23.324425 64,26.580851 59.39695,29.837375 54.794001,33.094 54.794001,30.650999 33.583,30.650999 33.583,22.698998 54.794001,22.698998z M14.7162,0.3409996L24.9141,0.3409996C25.97705,0.3409996,26.865667,1.1746159,27.071213,2.1986313L27.086924,2.3030968 27.124624,2.3546333C27.940995,3.4717503 29.881758,6.1571293 30.565413,7.3636971 30.565413,7.3636971 34.096944,13.338465 34.877442,15.061705L34.890623,15.092 40.170837,15.092C41.324416,15.092 42.257998,16.195044 42.257998,17.396999 42.257998,18.600256 41.324416,19.702 40.170837,19.702L33.450961,19.702C32.370606,19.702,31.482553,18.733671,31.375766,17.621177L31.37387,17.581701 29.230907,13.962816 22.261399,18.123934 26.40747,22.377669C27.150276,23.141019,27.230264,24.306093,26.654201,25.155003L26.643522,25.169146 26.636381,25.286112C26.628118,25.36014,26.616044,25.434453,26.600019,25.508835L24.851152,33.574084C24.592043,34.765377 23.418798,35.519273 22.228654,35.261475 21.03861,35.004976 20.280681,33.829283 20.53979,32.64039L22.288656,24.57524 22.309726,24.495231 17.488041,19.548167 17.480572,19.539678 17.253374,19.529043C16.366886,19.445599,15.589428,19.018761,15.078829,18.394262L15.074381,18.388281 12.282196,21.977999 12.216562,21.901865 12.1124,21.994324C11.720974,22.306216,11.1803,22.469,10.5833,22.469L2.1626606,22.469C0.96679688,22.469 0,21.817864 0,20.624998 0,19.428434 0.96679688,18.779999 2.1626606,18.779999L9.5252495,18.779999 9.3850002,18.617311 14.600033,11.548028C14.600033,11.548028,15.127697,11.125361,15.599133,10.798839L15.614553,10.78836 15.604,10.776026 24.149192,5.6036739 23.803184,4.9510002 14.7162,4.9510002C13.500099,4.9510002 12.514999,3.8623199 12.514999,2.6472778 12.514999,1.4298038 13.500099,0.3409996 14.7162,0.3409996z M34.6091,0C36.912666,0 38.780001,1.8671761 38.780001,4.1704998 38.780001,6.4739532 36.912666,8.3409996 34.6091,8.3409996 32.304335,8.3409996 30.437,6.4739532 30.437,4.1704998 30.437,1.8671761 32.304335,0 34.6091,0z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Reports">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M55.859353,59.282085C56.00929,59.285538,56.143475,59.392647,56.172002,59.547607L55.789193,65.810493C55.674588,66.466682,55.295579,65.802589,55.295579,65.802589L54.473962,64.431519C51.7422,68.327347 47.221295,70.881996 42.101273,70.881996 36.226228,70.881996 31.13625,67.53186 28.632329,62.638653 28.382323,62.158161 28.059378,61.686871 27.969502,61.146481 27.66084,59.337914 29.858891,59.01112 30.614098,59.864002 30.926646,60.216797 31.299044,60.827484 31.563321,61.306576 33.567227,65.081306 37.533479,67.649055 42.101273,67.649055 46.122369,67.649055 49.669251,65.651596 51.828099,62.602253L50.338567,62.323559C50.338567,62.323559,49.473847,62.210258,50.067658,61.849567L55.794392,59.287113C55.816193,59.283215,55.837933,59.28159,55.859353,59.282085z M40.764077,45.717999L43.468282,45.717999 43.468282,47.945969C44.940877,48.043633,45.939504,48.464172,46.57486,48.781933L46.850839,48.919876 45.9889,51.849625 45.591931,51.649216C44.965676,51.336708 43.994244,50.849598 42.497052,50.849598 41.307038,50.849598 40.589589,51.340611 40.589589,52.155632 40.589589,52.883549 41.269242,53.390064 43.278195,54.159683 46.150391,55.237812 47.377004,56.67535 47.377004,58.964413 47.377004,61.232674 45.806714,62.99192 43.348592,63.516731L43.348592,66.047997 40.616887,66.047997 40.616887,63.706738C39.216088,63.607735,37.791692,63.200325,36.902394,62.633808L36.672002,62.482704 37.5286,59.474827 37.945279,59.724831C38.568932,60.09864 39.856541,60.726257 41.489224,60.726257 42.825127,60.726257 43.684468,60.136341 43.684468,59.230118 43.684468,58.503498 43.274297,57.873283 41.294038,57.157166 39.122395,56.362843 36.898515,55.19091 36.898515,52.516441 36.898515,50.313221 38.372449,48.646427 40.764077,48.112602z M42.010037,40.691002C47.882275,40.691002 52.973134,44.039906 55.477063,48.93552 55.725755,49.413418 56.051247,49.888626 56.139745,50.42767 56.447038,52.237579 54.249299,52.563072 53.493916,51.708893 53.181527,51.354805 52.809136,50.742821 52.546143,50.264954 50.543599,46.492958 46.577512,43.922722 42.010037,43.922722 37.98795,43.922722 34.44249,45.919983 32.28362,48.96946L33.773167,49.248013C33.773167,49.248013,34.636472,49.363979,34.044091,49.72456L28.316394,52.28698C28.141854,52.318275,27.969985,52.199879,27.940001,52.026585L28.322789,45.767639C28.43744,45.104939,28.815036,45.774227,28.815036,45.774227L29.632752,47.140041C32.366937,43.245621,36.88775,40.691002,42.010037,40.691002z M21.804616,0L44.531026,0C48.257512,0,51.280999,3.0222199,51.280999,6.7460904L51.280999,38.274937 50.537671,37.898952C49.215222,37.269638,47.812577,36.778652,46.348977,36.444992L45.879922,36.344151 45.879922,6.7460904C45.879922,6.0039101,45.273122,5.3972201,44.531026,5.3972206L22.158713,5.3972206 21.794215,17.167999C21.794215,17.167999,21.325417,24.9519,12.747249,24.0117L5.3957184,23.8125 5.3957184,57.253899C5.3957189,57.998699,6.0024966,58.602901,6.7473038,58.602901L21.820422,58.602901 21.860354,58.884754C22.115357,60.533066,22.574946,62.114872,23.212727,63.604115L23.393945,64 6.7473038,64C3.0207885,64,2.9307267E-07,60.980499,0,57.253899L0,23.0051 2.6718498,20.1863 2.6743804,20.1094 16.677035,5.3972206 16.637936,5.3972206 12.89565,9.3464394 16.817534,5.1914101 16.872334,5.1914101 16.997233,5.0612788 17.007634,5.0612788z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Spreads">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="F1M70.546875,54.3758316040039L77.484375,54.3758316040039 77.484375,89.0633316040039 70.546875,89.0633316040039 70.546875,54.3758316040039z M48.5625,54.3758316040039L65.90625,71.7195816040039 48.5625,89.0633316040039 48.5625,75.1883316040039 8.109375,75.1883316040039 8.109375,68.2508316040039 48.5625,68.2508316040039 48.5625,54.3758316040039z M37.03125,19.6883316040039L37.03125,33.5633316040039 77.484375,33.5633316040039 77.484375,40.5008316040039 37.03125,40.5008316040039 37.03125,54.3758316040039 19.6875,37.0320816040039 37.03125,19.6883316040039z M8.109375,19.6883316040039L15.046875,19.6883316040039 15.046875,54.3758316040039 8.109375,54.3758316040039 8.109375,19.6883316040039z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Depth">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M0,27.006001L37.806999,27.006001 37.806999,31.806 0,31.806z M0,18.003L37.806999,18.003 37.806999,22.806 0,22.806z M0,8.9999999L37.806999,8.9999999 37.806999,13.803 0,13.803z M0,0L37.806999,0 37.806999,4.8030009 0,4.8030009z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Ladder" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M -2.7407407 21.999952 V 25 H 11.37037 v -3.000048 z m 0 -4.999952 v 2.999952 H 11.37037 V 17 Z m 0 -5 v 3 H 11.37037 v -3 z m 0 -5 v 3 H 11.37037 V 7 Z m -1 -7 c 0.552 0 1.0810413 0.45297098 1 1 V 5 H 11.37037 V 1 c 0 -0.5529995 0.448 -1 1 -1 0.552 0 1 0.4470005 1 1 0 11.544484 0 19.62158 0 30 0 0.553 -0.448 1 -1 1 -0.552 0 -0.918958 -0.45297 -1 -1 V 27 H -2.7407407 v 4 c 0 0.553 -0.448 1 -1 1 -0.552 0 -1 -0.447 -1 -1 0 -11.54448 0 -19.621581 0 -30 0 -0.5529995 0.448 -1 1 -1 z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Trades">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M50.14375,33.389126C50.416863,33.394688,50.653496,33.587773,50.705998,33.864617L50.015995,45.114388C49.810295,46.291462,49.130394,45.097489,49.130394,45.097489L47.65659,42.640538C42.747776,49.635197 34.633152,54.221001 25.433924,54.221001 14.884193,54.221001 5.7437552,48.204125 1.2449617,39.419205 0.80087067,38.552021 0.21358696,37.705738 0.052086769,36.736958 -0.49735315,33.490925 3.4507786,32.901036 4.8049124,34.432404 5.3674143,35.067692 6.034036,36.16407 6.5079177,37.026051 10.106778,43.799416 17.2321,48.413819 25.433924,48.413819 32.656544,48.413819 39.026364,44.826695 42.903977,39.351506L40.229367,38.854115C40.229367,38.854115,38.677464,38.647118,39.742466,37.996033L50.024895,33.398526C50.064972,33.391365,50.104733,33.388333,50.14375,33.389126z M23.030291,9.0310004L27.889918,9.0310004 27.889918,13.028299C30.539786,13.205498,32.324932,13.958096,33.464161,14.528294L33.964176,14.775793 32.417435,20.038878 31.706417,19.68068C30.579987,19.11958 28.839241,18.244583 26.149073,18.244583 24.006916,18.244583 22.723183,19.122181 22.723183,20.590876 22.723183,21.894272 23.943314,22.804369 27.551308,24.187165 32.706444,26.124659 34.911,28.702853 34.911,32.817341 34.911,36.892929 32.090527,40.05172 27.673611,40.989117L27.673611,45.540001 22.767485,45.540001 22.767485,41.330414C20.252919,41.155815,17.695551,40.424118,16.101811,39.404721L15.683999,39.137619 17.221739,33.731438 17.969059,34.180634C19.088988,34.851235 21.402748,35.97873 24.340325,35.97873 26.734886,35.97873 28.276728,34.921635 28.276728,33.291336 28.276728,31.986641 27.547409,30.853846 23.986016,29.57255 20.083815,28.144253 16.095511,26.04406 16.095511,21.239174 16.095511,17.280985 18.737379,14.291395 23.030291,13.329098z M25.268765,0C35.819447,2.7347414E-07 44.961449,6.0155495 49.458798,14.804573 49.902695,15.669173 50.490094,16.516972 50.651287,17.48427 51.198281,20.734265 47.255726,21.318962 45.901341,19.789065 45.336346,19.153567 44.669552,18.051968 44.19566,17.19517 40.5957,10.421881 33.473275,5.8072398 25.268765,5.8072393 18.047545,5.8072398 11.678013,9.3918336 7.8003562,14.867073L10.474627,15.367072C10.474627,15.367072,12.026909,15.574172,10.962921,16.223872L0.67933281,20.826762C0.36037083,20.880062,0.057029126,20.669165,0.00099972012,20.354063L0.69093342,9.1118043C0.89552094,7.9296158,1.5738537,9.124924,1.5738539,9.124924L3.0452772,11.583379C7.9566038,4.584462,16.073666,2.7347414E-07,25.268765,0z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Sheets" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M22.1575,13.53399L21.794301,25.304994C21.794301,25.304994,21.3242,33.088695,12.747401,32.148692L5.3958107,31.949492 5.3958107,65.390895C5.3958107,66.135493,6.0026208,66.7391,6.7473808,66.7391L44.5313,66.7391C45.2734,66.7391,45.8802,66.135493,45.8802,65.390895L45.8802,14.883091C45.8802,14.140891,45.2734,13.53399,44.5313,13.53399z M21.804701,8.1369996L44.5313,8.1369996C48.257802,8.1370001,51.279999,11.15899,51.279999,14.883091L51.279999,65.390895C51.279999,69.117496,48.257802,72.136996,44.5313,72.136996L6.7473808,72.136996C3.0208105,72.136996,5.8073994E-07,69.117496,0,65.390895L0,31.142392 2.6718808,28.322993 2.6745006,28.246392 16.6771,13.53399 16.638001,13.53399 12.8945,17.483192 16.816401,13.328391 16.872401,13.328391 16.9961,13.19799 17.0078,13.19799z M30.352,0L55.255002,0 60.581002,0 60.581002,4.747 60.581002,55.207999 55.255002,55.207999 55.255002,4.747 30.352,4.747z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Surface">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="m 127.71875,0.03125 c 1.96953,0.68706766 3.77873,1.728511 5.53125,2.84375 5.68444,-0.1664634 11.35972,0.1351305 17.03125,0.46875 -1.73194,-1.1492389 -3.57847,-2.1023993 -5.53125,-2.8125 -5.6651,-0.45913017 -11.34995,-0.58354857 -17.03125,-0.5 z m -4.25,0.125 c -5.70361,0.2336956 -11.37548,0.81394241 -17.03125,1.5625 1.95847,0.6900238 3.78385,1.7005175 5.53125,2.8125 C 117.61899,3.7613446 123.30363,3.2513106 129,3 127.28567,1.8094865 125.39256,0.94326338 123.46875,0.15625 z M 149,0.90625 c 1.96418,0.6694319 3.78573,1.7017145 5.53125,2.8125 5.71276,0.5944911 11.3908,1.4529283 17.03125,2.53125 C 169.85207,5.0455955 167.95676,4.1939604 166.03125,3.40625 160.39919,2.2891664 154.71106,1.4856327 149,0.90625 z m -46.8125,1.4375 C 96.464888,3.3096165 90.767826,4.4520829 85.15625,5.9375 87.106815,6.6380546 88.941831,7.6391195 90.6875,8.75 96.310308,7.3225043 101.99157,6.1139557 107.71875,5.1875 106.00019,4.0048872 104.11138,3.1307925 102.1875,2.34375 z m 32.46875,1.5 c 2.00275,1.4247295 3.75993,3.1494432 5.53125,4.84375 5.68351,-0.080003 11.36274,0.089238 17.03125,0.5 -1.73044,-1.7529327 -3.58348,-3.3699033 -5.53125,-4.875 -5.66508,-0.4641114 -11.35053,-0.55229 -17.03125,-0.46875 z m -4.28125,0.125 C 124.103,4.2953783 119.00738,4.7504024 113.34375,5.5 c 1.99941,1.4415661 3.79164,3.1353901 5.53125,4.875 5.65135,-0.7706117 11.33386,-1.2798945 17.03125,-1.53125 -1.66132,-1.8295873 -3.58341,-3.3698478 -5.53125,-4.875 z m 39.9375,0.34375 c 1.96346,0.6759081 3.78484,1.7011488 5.53125,2.8125 5.74468,1.2638733 11.4064,2.8505892 17.03125,4.5625 -1.72987,-1.168721 -3.60534,-2.0558794 -5.53125,-2.84375 C 181.73627,7.0795573 176.0521,5.5785891 170.3125,4.3125 z m -14.375,0.375 c 1.9717,1.4743322 3.79243,3.136185 5.53125,4.875 5.71797,0.542825 11.39215,1.453188 17.03125,2.53125 -1.6913,-1.79287 -3.58414,-3.3704114 -5.53125,-4.875 C 167.33901,6.0657565 161.63964,5.35834 155.9375,4.6875 z m -46.84375,1.46875 c -5.72932,0.9221197 -11.402883,2.1554082 -17.03125,3.5625 1.99347,1.451281 3.791265,3.135015 5.53125,4.875 5.62016,-1.451631 11.30209,-2.635724 17.03125,-3.5625 -1.69439,-1.7852366 -3.54058,-3.4272419 -5.53125,-4.875 z M 80.90625,7.0625 c -5.768034,1.593637 -11.417957,3.561289 -17.03125,5.625 1.930762,0.74325 3.819326,1.676529 5.53125,2.84375 5.568779,-2.194858 11.293752,-3.937501 17.03125,-5.625 C 84.697913,8.7506893 82.833288,7.8508336 80.90625,7.0625 z m 96.3125,1.03125 c 2.01998,1.5283684 3.9853,3.332564 5.53125,4.875 5.75001,1.241656 11.41327,2.827536 17.03125,4.5625 -1.70386,-1.770251 -3.54256,-3.428678 -5.53125,-4.875 -5.59469,-1.822363 -11.3081,-3.215876 -17.03125,-4.5625 z M 141.5625,10.1875 c 1.98812,2.171216 3.79154,4.502672 5.53125,6.875 5.68335,-0.07635 11.3631,0.08322 17.03125,0.5 -1.70296,-2.41177 -3.58181,-4.690977 -5.53125,-6.90625 -5.82598,-0.440889 -11.98586,-0.537879 -17.03125,-0.46875 z m -4.25,0.125 c -5.69916,0.210199 -11.37949,0.783222 -17.03125,1.53125 1.96864,2.199545 3.78641,4.526916 5.53125,6.90625 5.65033,-0.779208 11.33395,-1.279899 17.03125,-1.53125 -1.7175,-2.400101 -3.58197,-4.691155 -5.53125,-6.90625 z m -49.5,0.5625 c -5.756209,1.627414 -11.443914,3.488666 -17.03125,5.625 1.986252,1.443163 3.797302,3.109802 5.53125,4.84375 C 81.914775,19.260145 87.586406,17.35867 93.34375,15.75 91.661607,13.944308 89.760517,12.380286 87.8125,10.875 z m 75.03125,0.15625 c 1.99219,2.183637 3.78522,4.525295 5.53125,6.90625 6.28774,0.687745 11.37979,1.450824 17.03125,2.53125 -1.68349,-2.427307 -3.58184,-4.691013 -5.53125,-6.90625 -5.63506,-1.107989 -11.31933,-1.943258 -17.03125,-2.53125 z M 116,12.5 c -5.73799,0.878008 -11.39825,2.174659 -17.03125,3.5625 2.03956,2.148921 3.76403,4.56042 5.5625,6.90625 5.61994,-1.453285 11.29946,-2.648737 17.03125,-3.5625 C 119.8176,17.015603 118.00451,14.67882 116,12.5 z m -56.40625,1.84375 c -5.792814,2.278458 -11.419014,4.940887 -17.03125,7.625 1.967004,0.694041 3.777949,1.728013 5.53125,2.84375 5.58415,-2.744879 11.247417,-5.328478 17.03125,-7.625 -1.725645,-1.141384 -3.572016,-2.162277 -5.53125,-2.84375 z M 184.125,14.4375 c 2.02152,2.155746 3.78605,4.526439 5.53125,6.90625 5.75343,1.228401 11.41327,2.827536 17.03125,4.5625 C 205.01516,23.467587 203.10649,21.216187 201.15625,19 195.55578,17.209943 189.86603,15.703904 184.125,14.4375 z m -89.40625,2.78125 c -5.757378,1.612569 -11.421181,3.531225 -17.03125,5.59375 2.013414,2.164294 3.785804,4.526096 5.53125,6.90625 C 88.826875,27.652066 94.492577,25.733692 100.25,24.125 98.572893,21.691803 96.66853,19.434409 94.71875,17.21875 z m -28.1875,0.9375 c -5.809395,2.239258 -11.434051,4.908712 -17.03125,7.625 1.996367,1.448111 3.791108,3.134858 5.53125,4.875 C 60.587618,27.843081 66.305928,25.370353 72.0625,23 70.325483,21.271546 68.515383,19.599256 66.53125,18.15625 z m 81.9375,0.90625 C 150.4643,21.946692 152.27759,24.946629 154,28 c 5.68473,-0.186058 11.35951,0.135118 17.03125,0.46875 -1.70966,-3.061344 -3.58704,-6.02118 -5.53125,-8.9375 -5.66815,-0.423667 -11.34913,-0.552311 -17.0Line truncated
|
||||
<GeometryDrawing.Pen>
|
||||
<Pen Brush="White" Thickness="2" />
|
||||
</GeometryDrawing.Pen>
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Analytics">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M17.9349,52.632801L13.5176,60.285198 22.3529,60.285198z M4.1452103,50.3647L4.1452103,52.622398 59.855499,52.622398 59.855499,50.3647z M17.062819,7.9790001L21.601147,36.012657 25.301687,19.424307 28.011845,37.14275 33.26696,12.41387 36.744106,37.14275 40.357449,27.929331 43.067604,37.14275 46.822746,19.489307 50.89698,37.14275 56.015999,23.676769 56.015999,42.608997 8.1710005,42.608997 8.1710005,23.135174 13.86557,31.999594z M4.1452103,3.8098803L4.1452103,45.6199 59.855499,45.6199 59.855499,3.8098803z M0,0L64,0 64,64 0,64z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Orders">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M50.14375,33.389126C50.416863,33.394688,50.653496,33.587773,50.705998,33.864617L50.015995,45.114388C49.810295,46.291462,49.130394,45.097489,49.130394,45.097489L47.65659,42.640538C42.747776,49.635197 34.633152,54.221001 25.433924,54.221001 14.884193,54.221001 5.7437552,48.204125 1.2449617,39.419205 0.80087067,38.552021 0.21358696,37.705738 0.052086769,36.736958 -0.49735315,33.490925 3.4507786,32.901036 4.8049124,34.432404 5.3674143,35.067692 6.034036,36.16407 6.5079177,37.026051 10.106778,43.799416 17.2321,48.413819 25.433924,48.413819 32.656544,48.413819 39.026364,44.826695 42.903977,39.351506L40.229367,38.854115C40.229367,38.854115,38.677464,38.647118,39.742466,37.996033L50.024895,33.398526C50.064972,33.391365,50.104733,33.388333,50.14375,33.389126z M23.030291,9.0310004L27.889918,9.0310004 27.889918,13.028299C30.539786,13.205498,32.324932,13.958096,33.464161,14.528294L33.964176,14.775793 32.417435,20.038878 31.706417,19.68068C30.579987,19.11958 28.839241,18.244583 26.149073,18.244583 24.006916,18.244583 22.723183,19.122181 22.723183,20.590876 22.723183,21.894272 23.943314,22.804369 27.551308,24.187165 32.706444,26.124659 34.911,28.702853 34.911,32.817341 34.911,36.892929 32.090527,40.05172 27.673611,40.989117L27.673611,45.540001 22.767485,45.540001 22.767485,41.330414C20.252919,41.155815,17.695551,40.424118,16.101811,39.404721L15.683999,39.137619 17.221739,33.731438 17.969059,34.180634C19.088988,34.851235 21.402748,35.97873 24.340325,35.97873 26.734886,35.97873 28.276728,34.921635 28.276728,33.291336 28.276728,31.986641 27.547409,30.853846 23.986016,29.57255 20.083815,28.144253 16.095511,26.04406 16.095511,21.239174 16.095511,17.280985 18.737379,14.291395 23.030291,13.329098z M25.268765,0C35.819447,2.7347414E-07 44.961449,6.0155495 49.458798,14.804573 49.902695,15.669173 50.490094,16.516972 50.651287,17.48427 51.198281,20.734265 47.255726,21.318962 45.901341,19.789065 45.336346,19.153567 44.669552,18.051968 44.19566,17.19517 40.5957,10.421881 33.473275,5.8072398 25.268765,5.8072393 18.047545,5.8072398 11.678013,9.3918336 7.8003562,14.867073L10.474627,15.367072C10.474627,15.367072,12.026909,15.574172,10.962921,16.223872L0.67933281,20.826762C0.36037083,20.880062,0.057029126,20.669165,0.00099972012,20.354063L0.69093342,9.1118043C0.89552094,7.9296158,1.5738537,9.124924,1.5738539,9.124924L3.0452772,11.583379C7.9566038,4.584462,16.073666,2.7347414E-07,25.268765,0z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Admin" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M18.660349,20.393C14.879011,20.393 11.806,23.468643 11.806,27.249899 11.806,31.026154 14.879011,34.103001 18.660349,34.103001 22.444386,34.103001 25.519998,31.026154 25.519998,27.249899 25.519998,23.468643 22.444386,20.393 18.660349,20.393z M50.07317,8.7561953C49.408178,8.7706149 48.735172,8.9156297 48.090648,9.2053407 45.51765,10.359123 44.36155,13.394207 45.51765,15.96858 46.671449,18.541552 49.709146,19.691384 52.283444,18.540251 54.856342,17.378819 56.012442,14.352736 54.856342,11.771862 53.990993,9.8450501 52.068145,8.7129386 50.07317,8.7561953z M15.597473,8.6000007L21.868224,8.6000007 22.20032,14.327933 22.20032,14.531032C23.236712,14.816134,24.218506,15.221134,25.133898,15.736836L25.253695,15.615635 29.675461,11.900828 34.111725,16.338337 30.296556,20.624846 30.165057,20.758946C30.683352,21.674349,31.08955,22.659951,31.378649,23.696451L31.544045,23.696451 37.293999,24.196451 37.293999,30.468565 31.566147,30.803267 31.378649,30.803267C31.08955,31.836972,30.683352,32.821373,30.165057,33.736874L30.280955,33.853974 33.993225,38.274582 29.558261,42.709496 25.271895,38.896988 25.133898,38.758988C24.218506,39.274586,23.236712,39.678185,22.20032,39.963387L22.20032,40.146988 21.868224,45.897 15.597473,45.897 15.093578,40.166485 15.093578,39.959488C14.064985,39.671688,13.084595,39.265385,12.174301,38.749787L12.040102,38.881485 7.7381763,42.709496 3.3033104,38.274582 6.9999428,33.869675 7.1522102,33.721176C6.6379356,32.807072,6.2343292,31.83057,5.9464817,30.803267L5.7499523,30.803267 0,30.468565 0,24.196451 5.7278118,23.696451 5.9464817,23.696451C6.2343292,22.665051,6.6379356,21.687248,7.1522102,20.775946L7.0128822,20.640444 3.1874237,16.338337 7.6209869,11.900828 12.027203,15.600036 12.174301,15.744536C13.084595,15.231535,14.064985,14.825334,15.093578,14.537533L15.093578,14.350033z M52.888157,0L57.259197,1.6601361 56.091211,5.7941664 56.035212,5.937414C56.665401,6.3971274,57.240894,6.9413698,57.753986,7.5533617L57.878984,7.4947021 61.949226,6.0845716 63.865797,10.35405 60.071657,12.331821 59.933659,12.393021C60.053354,13.18731,60.075457,13.977598,60.003952,14.758987L60.12245,14.803286 63.999998,16.682059 62.337223,21.053194 58.253977,19.771912 58.12108,19.721113C57.656389,20.352705,57.112095,20.928097,56.496105,21.441189L56.549604,21.556988 57.962284,25.627228 53.691446,27.541302 51.712375,23.744456 51.653774,23.615557C50.862186,23.736756,50.066597,23.760056,49.285309,23.687157L49.241009,23.800455 47.366036,27.678 42.991099,26.017823 44.277584,21.928082 44.325682,21.799183C43.696789,21.334391,43.121297,20.784899,42.607106,20.171606L42.487208,20.225006 38.469066,21.753483 36.553693,17.486847 40.297138,15.390477 40.441637,15.327978C40.321941,14.53499,40.299839,13.744601,40.372736,12.963413L40.24384,12.915114 36.321998,11.158738 37.984774,6.7851217 42.113513,7.9530752 42.263212,8.009104C42.728206,7.3840535,43.269797,6.8124616,43.879186,6.3033789L43.82189,6.1652506 42.29051,2.1496897 46.562749,0.22918414 48.656518,3.977782 48.722916,4.1289099C49.511906,4.0091622,50.299695,3.9843827,51.075585,4.0534113L51.127785,3.9218233z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Eye">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M33.597977,10.759002C37.946865,10.759002 41.485962,14.285001 41.485962,18.649 41.485962,23 37.946865,26.535 33.597977,26.535 29.23909,26.535 25.709992,23 25.709992,18.649 25.709992,17.784 25.849955,16.953001 26.109888,16.174002 26.779719,16.881001 27.70948,17.327002 28.759213,17.327002 30.778696,17.327002 32.418278,15.691001 32.418278,13.668001 32.418278,12.663001 32.008381,11.748001 31.348551,11.087002 32.058369,10.876001 32.818176,10.759002 33.597977,10.759002z M33.606682,4.3679962C25.92741,4.3679957 19.698065,10.594956 19.698065,18.27293 19.698065,25.953894 25.92741,32.177862 33.606682,32.177862 41.295838,32.177862 47.515175,25.953894 47.515175,18.27293 47.515175,10.594956 41.295838,4.3679957 33.606682,4.3679962z M34.867642,1.546141E-09C36.890393,2.6508449E-05 58.705193,0.41938579 68.893006,18.299923 68.893006,18.299923 57.1442,36.139837 34.44656,34.768854 34.44656,34.768854 14.428583,36.59984 0,18.299923 0,18.299923 9.0791523,0.4590019 34.716553,0.0010111886 34.716553,0.0010114873 34.768162,-1.4442128E-06 34.867642,1.546141E-09z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Coins">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M3.3390064,47.374004L26.00104,47.374004C26.17504,47.881321 26.361041,48.388939 26.575041,48.889757 27.610043,51.333344 29.086045,53.523722 30.968048,55.406689 31.135048,55.573593 31.309048,55.733997 31.476048,55.894005L3.3390064,55.894005C1.4960022,55.894005,0,54.398552,0,52.555387L0,50.712622C0,48.869556,1.4960022,47.374004,3.3390064,47.374004z M8.6740417,35.422004L25.713049,35.422004C25.220049,37.198282 24.972049,39.03446 24.972049,40.910738 24.972049,41.932125 25.046049,42.947113 25.193049,43.942001L8.6740417,43.942001C6.8310413,43.942001,5.3350391,42.44632,5.3350391,40.60354L5.3350391,38.760464C5.3350391,36.917886,6.8310413,35.422004,8.6740417,35.422004z M44.333998,28.91725L44.333998,31.014374C42.649975,31.25297 41.419993,31.901375 40.634958,32.963784 39.852975,34.026392 39.458993,35.225903 39.458993,36.554114 39.458993,37.565422 39.677987,38.455833 40.118966,39.221838 40.555979,39.98354 41.125986,40.573252 41.829967,40.99555 42.53297,41.425255 43.508984,41.850658 44.758986,42.28466 46.149979,42.776463 47.048965,43.183067 47.451004,43.502871 47.852982,43.819578 48.055986,44.291979 48.055986,44.913282 48.055986,45.51469 47.852982,46.022491 47.451004,46.448399 47.048965,46.874603 46.41597,47.0849 45.560011,47.0849 43.728954,47.0849 42.649975,46.093193 42.325999,44.11248L38.810005,45.030586C39.521005,48.178713,41.360971,49.909225,44.333998,50.214329L44.333998,52.91765 46.607986,52.91765 46.607986,50.202824C48.391985,50.015223 49.755999,49.390217 50.701008,48.33131 51.646992,47.273104 52.118979,45.952789 52.118979,44.36648 52.118979,43.331467 51.888998,42.429262 51.431965,41.65526 50.970966,40.886349 50.360981,40.276442 49.59096,39.839542 48.826006,39.401939 47.763016,38.933239 46.41597,38.440628 45.185011,37.991329 44.384962,37.612823 44.008986,37.307821 43.633984,36.999621 43.446972,36.561912 43.446972,35.991115 43.446972,35.429106 43.641979,34.952402 44.032972,34.558096 44.419996,34.163196 44.935011,33.967896 45.576002,33.967896 46.85701,33.967896 47.797989,34.850602 48.407976,36.612617L51.545002,35.327107C50.795002,32.756988,49.14699,31.319575,46.607986,31.015068L46.607986,28.91725z M3.3390026,23.690004L34.347016,23.690004C33.139015,24.471167 32.010015,25.379241 30.975014,26.414426 29.286014,28.103764 27.917013,30.053523 26.909013,32.203998L3.3390026,32.203998C1.4960022,32.203998,0,30.708376,0,28.865226L0,27.028776C0,25.185925,1.4960022,23.690004,3.3390026,23.690004z M45.470961,22.415C55.686974,22.415 63.96701,30.694868 63.959991,40.924053 63.959991,51.140034 55.680992,59.419998 45.464003,59.419998 41.41096,59.419998 37.659003,58.110893 34.613955,55.900974 31.696961,53.777658 29.412962,50.819633 28.130979,47.380901 27.716977,46.285692 27.408993,45.137482 27.215939,43.948774 27.055966,42.96047 26.96899,41.952459 26.968991,40.917248 26.96899,39.007633 27.255978,37.164823 27.796994,35.428709 28.150998,34.306995 28.597959,33.23199 29.145994,32.210482 31.195984,28.371248 34.553958,25.346428 38.626961,23.723612 40.743967,22.882503 43.053967,22.415 45.470961,22.415z M3.3390045,11.952L38.153052,11.952C39.996056,11.952,41.492057,13.448001,41.492057,15.290001L41.492057,17.133002C41.492057,18.976003,39.996056,20.472003,38.153052,20.472004L3.3390045,20.472004C1.4960022,20.472003,0,18.976003,0,17.133002L0,15.290001C0,13.448001,1.4960022,11.952,3.3390045,11.952z M8.6735134,0L43.487543,0C45.330534,0,46.826027,1.4958782,46.826027,3.3386841L46.826027,5.1814384C46.826027,7.0245428,45.330534,8.5200005,43.487543,8.5200005L8.6735134,8.5200005C6.8304424,8.5200005,5.3350277,7.0245428,5.3350277,5.1814384L5.3350277,3.3386841C5.3350277,1.4958782,6.8304424,0,8.6735134,0z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="BombIcon">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black"
|
||||
Geometry="M14.200889,0C15.299896,0 16.59991,0.50000046 17.998923,1.4989944 19.597936,2.5990016 20.397944,4.5970043 21.196948,6.4960083 22.495954,9.6950015 23.495961,11.693005 26.093989,11.594006 26.793992,11.594006 27.293996,12.093014 27.293996,12.693005 27.293996,13.393002 26.793992,13.892012 26.193997,13.892012 21.896949,14.092009 20.297938,10.394007 19.097932,7.3960032 18.398921,5.6969966 17.698918,4.0979957 16.699916,3.3979983 15.899907,2.8979978 14.600901,1.9989949 13.700884,2.4989952 12.701883,2.9980039 12.30187,5.0970048 12.20188,6.3960022L13.900898,6.2959961C14.600901,6.2959961,15.100904,6.6960057,15.199904,7.3960032L15.399903,9.6950015C16.799909,10.19401 18.098929,10.894008 19.197938,11.893001 23.995965,15.991012 24.494979,23.287025 20.397944,28.084026 16.099906,32.78203 8.8038569,33.381029 4.0068054,29.184019 -0.79122243,25.086023 -1.3902263,17.79001 2.8067985,12.993009 3.9068136,11.693005 5.405819,10.594005 7.0048309,9.9940128L6.9048391,7.9960098C6.9048391,7.3960032,7.3048363,6.7959966,8.0038471,6.6960057L9.9028645,6.5959992C9.9028645,5.3970083 10.302861,1.6989915 12.701883,0.50000046 13.10188,0.099990942 13.700884,0 14.200889,0z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="CancelMail">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M10.659519,13.581999C10.787763,13.581999 10.916255,13.630751 11.01375,13.728755 11.207739,13.924762 11.207739,14.241775 11.01175,14.435782L8.5898266,16.850518 11.012901,19.265967C11.20889,19.460974 11.20889,19.776986 11.013901,19.972994 10.916906,20.070997 10.787913,20.119999 10.65992,20.119999 10.531927,20.119999 10.403934,20.070997 10.30694,19.973994L7.8819971,17.556247 5.4570541,19.973994C5.3600597,20.070997 5.2320671,20.119999 5.1040735,20.119999 4.9760809,20.119999 4.8470879,20.070997 4.7500935,19.972994 4.5551033,19.776986 4.5551033,19.460974 4.7510929,19.265967L7.1741672,16.850518 4.752244,14.435782C4.5562544,14.241775 4.5562544,13.924762 4.7502441,13.728755 4.9452333,13.532748 5.2642155,13.533748 5.4572048,13.727755L7.8819966,16.144916 10.306789,13.727755C10.403284,13.630751,10.531276,13.582,10.659519,13.581999z M7.7229891,10.151996C4.0159941,10.151996 0.99999809,13.156997 0.99999809,16.850998 0.99999809,20.544999 4.0159941,23.55 7.7229891,23.55 10.503235,23.55 12.895357,21.859687 13.917652,19.456124L14.034025,19.162648 14.034025,18.772999 14.164453,18.772999 14.191419,18.682897C14.357855,18.100457 14.44698,17.485905 14.44698,16.850998 14.44698,13.156997 11.429984,10.151996 7.7229891,10.151996z M28.477001,10.135L31.999016,13.663 28.424001,17.244999 27.716998,16.538999 29.693872,14.558 21.322995,14.558 21.322995,13.558 30.482195,13.558 27.769998,10.841z M7.4592972,5.1720018L15.45899,8.869 22.849004,5.1720018z M4.6849804,4.1720018L25.465012,4.1720018 25.465012,10.408002 24.465011,10.408002 24.465011,5.4821377 15.476991,9.9780006 5.6849813,5.4540205 5.6849813,9.4246554 5.7953281,9.3948154C6.4117265,9.2363219 7.0576777,9.1519957 7.7229891,9.1519957 11.981983,9.1519957 15.446978,12.605997 15.446978,16.850998 15.446978,17.514279 15.362384,18.158249 15.203383,18.772749L24.465023,18.772999 24.465023,16.665997 25.465026,16.665997 25.465026,19.772997 14.868521,19.772997 14.839026,19.844827C13.664856,22.607125 10.917235,24.550001 7.7229891,24.550001 3.4649954,24.550001 0,21.095999 0,16.850998 0,13.733575 1.8686953,11.042744 4.5478315,9.8331947L4.6849804,9.7732801z M7.8089724,0L29.631012,0 29.631012,7.2790012 28.63101,7.2790012 28.63101,1 8.8089738,1 8.8089738,3.1080008 7.8089724,3.1080008z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Display">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M2,2L2,25 30,25 30,2z M1,0L31,0C31.552002,0,32,0.44702148,32,1L32,26C32,26.552979,31.552002,27,31,27L17,27 17,30 25,30 25,32 7,32 7,30 15,30 15,27 1,27C0.44799805,27,0,26.552979,0,26L0,1C0,0.44702148,0.44799805,0,1,0z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Target">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M16.2,11.1C19,11.1 21.2,13.3 21.2,16.1 21.2,18.9 19,21.1 16.2,21.1 13.4,21.1 11.2,18.9 11.2,16.1 11.2,13.4 13.4,11.1 16.2,11.1z M16.2,6C10.6,6 6,10.6 6,16.1 6,21.7 10.5,26.2 16.1,26.2 21.7,26.2 26.2,21.7 26.2,16.1 26.3,10.6 21.7,6 16.2,6z M15.3,0L16.8,0 16.8,5.1999998C22.2,5.5,26.6,9.6999998,27.1,15L32,15 32,16.5 27.1,16.5 27.1,16.7C26.8,22.3,22.3,26.8,16.7,27.1L16.7,32 15.2,32 15.2,27.1 15.5,27.1 16,27.1C10.2,27,5.5,22.5,5.1999998,16.7L5.1999998,16.5 5.1999998,16.4 0,16.4 0,15 5.3000002,15C5.9000001,9.6999998,10.3,5.5,15.7,5.1999998L15.6,5.1999998 15.3,5.1999998z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Wrench">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M5.5803752,0C7.1813383,0 8.8833761,0.6000061 10.084373,1.8009948 11.785374,3.5029907 12.285377,5.8049927 11.685397,7.9060059L24.094478,20.31601C26.096505,19.714996 28.398524,20.216003 30.099524,21.916992 31.500535,23.317993 32.101552,25.320007 31.901538,27.121002L28.998504,24.118988C27.69753,22.817993 25.496465,22.817993 24.094478,24.118988 22.693467,25.519989 22.693467,27.622009 24.094478,29.02301L26.997514,31.924988C25.195498,32.225006 23.194447,31.625 21.793437,30.123993 20.191436,28.522003 19.591456,26.119995 20.191436,24.118988L7.7823553,11.709015C5.6803512,12.309998 3.3783338,11.80899 1.6773333,10.108002 0.37629925,8.7070007 -0.224718,6.8049927 0.076309212,5.0039978L2.978307,7.9060059C4.2793407,9.2070007 6.4813823,9.2070007 7.8823928,7.9060059 9.2834034,6.605011 9.2834034,4.4030151 7.8823928,3.0020142L4.9803342,0.10000607C5.1803479,0,5.3803615,0,5.5803752,0z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Clock" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M25.700012,16.000016L28.800019,16.000016 28.800019,17.099989 25.700012,17.099989z M23.200012,8.599998L17.200012,16.300004C17.200012,16.500016,17.100006,16.800002,17,17.000014L20.100006,22.50001 15.700012,17.699965C15,17.599989 14.5,17.000014 14.5,16.300004 14.5,15.599991 15,15.000017 15.700012,14.89998L15.800019,14.89998z M15.700012,2.9999971C8.7000124,3.2000091,3.0000002,9.0000224,3,16.000016L6.1000063,16.000016 6.1000063,17.099989 3.1000061,17.099989 3.1000061,17.300002C3.7000124,23.699959,9.1000063,28.79999,15.700012,29.000002L15.800019,29.000002 15.800019,26.000006 16.900025,26.000006 16.900025,29.000002 17.100006,29.000002C23.800019,28.500004 29.100006,22.899971 29.100006,16.099991 29.100006,9.3000092 23.800019,3.7000086 17.100006,3.2000089L16.900025,3.2000089 16.900025,6.2000065 15.800019,6.2000065 15.800019,2.9999971z M16,0C24.800019,0 32,7.2000055 32,16.000016 32,24.799994 24.800019,32 16,32 7.2000124,32 2.3106986E-07,24.799994 0,16.000016 2.3106986E-07,7.2000055 7.2000124,0 16,0z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Payment" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M28.000001,6.0000026L28.000001,15 6.0010006,15 6.0010006,17.000003 30.001,17.000003 30.001,6.0000026z M14.231,2.9540056L14.979999,2.9540056 14.979999,3.987005C15.704998,4.009005,16.200997,4.178005,16.550998,4.3600049L16.248998,5.0620046C15.994998,4.9340047 15.499998,4.7010047 14.725999,4.7010047 13.796,4.7010047 13.445001,5.1900046 13.445001,5.6160046 13.445001,6.1710043 13.893,6.4470041 14.943999,6.8310037 16.187998,7.2780037 16.816998,7.8320036 16.816998,8.7800031 16.816998,9.6210027 16.151998,10.409003 14.907999,10.591002L14.907999,11.698002 14.146,11.698002 14.146,10.622003C13.445001,10.611002,12.720001,10.420002,12.297002,10.154003L12.587001,9.4400029C13.022001,9.696003 13.651,9.8980026 14.328,9.8980026 15.185999,9.8980026 15.765998,9.4620028 15.765998,8.8540034 15.765998,8.2680035 15.293999,7.9060035 14.4,7.5870035 13.167001,7.1610038 12.406001,6.6710041 12.406001,5.7440041 12.406001,4.8600047 13.119,4.189005 14.231,4.0290052z M2,2.0000002L2,13 26.000001,13 26.000001,2.0000002z M0,0L28.000001,0 28.000001,4.0000031 32.001,4.0000031 32.001,19.000003 4.0010006,19.000003 4.0010006,15 0,15z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Accounting">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M7,26L19,26 19,28 7,28z M12.732999,14.533003L13.867999,14.533003 13.867999,15.486002C14.643999,15.519002,15.164999,15.671002,15.546999,15.844003L15.210999,17.068001C14.909999,16.949001 14.376999,16.700003 13.543999,16.700003 12.790999,16.700003 12.547999,17.003002 12.547999,17.307001 12.547999,17.664001 12.952999,17.892002 13.936999,18.238001 15.315999,18.693001 15.870998,19.289001 15.870998,20.264 15.870998,21.228001 15.141998,22.052 13.809999,22.268999L13.809999,23.372999 12.674999,23.372999 12.674999,22.344C11.898999,22.310999,11.146,22.116999,10.705999,21.878L11.052999,20.610001C11.539999,20.860001 12.223,21.087999 12.975999,21.087999 13.635999,21.087999 14.087999,20.85 14.087999,20.416 14.087999,20.004 13.716999,19.744001 12.859999,19.474001 11.620999,19.083 10.775999,18.542002 10.775999,17.490002 10.775999,16.537003 11.492999,15.790002 12.732999,15.562002z M2,12L2,30 24,30 24,12z M2,7L2,10 24,10 24,7z M2,2L2,5 24,5 24,2z M0,0L26,0 26,32 0,32z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Add">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M12.099998,0L19.799995,0 19.799995,12.1 32,12.1 32,19.799996 19.900002,19.799996 19.900002,31.999999 12.199997,31.999999 12.199997,19.900003 0,19.900003 0,12.199999 12.099998,12.199999z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="AddEncircled">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Transparent" Geometry="M14.100037,6L14.100037,14.099998 6,14.099998 6,18 14.100037,18 14.100037,26.099998 18,26.099998 18,18 26,18 26,14.099998 17.900024,14.099998 17.900024,6z M16,0C24.800049,0 32,7.1999969 32,16 32,24.800003 24.800049,32 16,32 7.2000122,32 0,24.800003 0,16 0,7.1999969 7.2000122,0 16,0z">
|
||||
<GeometryDrawing.Pen>
|
||||
<Pen Thickness="2" Brush="Black"/>
|
||||
</GeometryDrawing.Pen>
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Beaker">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M454.352,398.431L331,190.879V87.42c17.459-6.192,30-22.865,30-42.42c0-24.813-20.187-45-45-45H196
|
||||
c-24.813,0-45,20.187-45,45c0,19.555,12.541,36.228,30,42.42v103.459L57.659,398.413c-14.085,23.476-14.442,51.715-0.953,75.539
|
||||
C70.196,497.776,94.594,512,121.972,512h268.055c27.378,0,51.776-14.224,65.266-38.048
|
||||
C468.779,450.134,468.427,421.903,454.352,398.431z M196,30h120c8.271,0,15,6.729,15,15s-6.729,15-15,15H196
|
||||
c-8.271,0-15-6.729-15-15S187.729,30,196,30z M208.895,202.664c1.378-2.319,2.105-4.966,2.105-7.664V90h90v30h-15
|
||||
c-8.284,0-15,6.716-15,15s6.716,15,15,15h15v30h-15c-8.284,0-15,6.716-15,15s6.716,15,15,15h21.466l65.8,110.716
|
||||
C362.112,326.413,347.079,332,331,332c-34.968,0-64.739-25.95-65.036-26.213c0,0-0.001-0.001-0.002-0.001
|
||||
C264.139,304.162,227.422,272,181,272c-4.587,0-9.215,0.321-13.872,0.94L208.895,202.664z M429.187,459.171
|
||||
C421.094,473.466,406.454,482,390.027,482H121.972c-16.427,0-31.066-8.534-39.16-22.829c-8.093-14.295-7.88-31.238,0.604-45.377
|
||||
l61.501-103.482C157.353,304.799,169.477,302,181,302c34.968,0,64.74,25.951,65.006,26.186C247.551,329.566,284.39,362,331,362
|
||||
c22.25,0,42.237-7.287,57.631-15.43l39.953,67.224c0.011,0.018,0.021,0.036,0.032,0.054
|
||||
C437.067,427.933,437.281,444.876,429.187,459.171z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Book">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Transparent" Geometry="M16.378574,2.0941912E-05C17.053625,-0.0029775997,17.669592,0.31702943,17.669592,0.31702964L27.747614,10.181254C30.078613,11.977292,28.301632,12.163302,28.301632,12.163302L14.005584,15.500376C11.924586,18.496447,15.130586,19.519465,15.130586,19.519465L30.870606,16.081391C32.66065,16.035383,31.786623,17.428421,31.786623,17.428421L15.130586,21.214503C12.353603,22.20553,10.869592,20.092476,10.869592,20.092476L0.76355401,8.8182232C-1.4574583,4.6071207,1.8735417,3.616101,1.8735417,3.616101L16.08762,0.023016395C16.184605,0.0080166093,16.282566,2.082104E-05,16.378574,2.0941912E-05z">
|
||||
<GeometryDrawing.Pen>
|
||||
<Pen Brush="Black" Thickness="2"/>
|
||||
</GeometryDrawing.Pen>
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Defrag">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M26.84801,26.411987L31.841998,26.411987 31.841998,31.915009 26.84801,31.915009z M10.497003,26.411987L18.709003,26.411987 18.709003,31.915009 10.497003,31.915009z M20.052005,18.708984L25.386005,18.708984 25.386005,31.915009 20.052005,31.915009z M10.497003,14.221985L18.709003,14.221985 18.709003,25.057983 10.497003,25.057983z M20.052005,9.5660095L25.386005,9.5660095 25.386005,17.18399 20.052005,17.18399z M26.84801,7.07901L31.841998,7.07901 31.841998,25.057983 26.84801,25.057983z M10.497003,1.9949951L18.709003,1.9949951 18.709003,12.686005 10.497003,12.686005z M0,0L9.2280055,0 9.2280055,32 0,32z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Knight">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Geometry="M38.642,39.289c-3.895-3.373-2.645-7.564-0.338-13.896c1.898-5.21,4.051-11.118,1.445-16.945 c-1.789-4.001-6.2-8.319-13.215-8.442L25.963,0c-2.518,0-6.289,0.283-9.953,2.734c-0.286,0.191-0.462,0.51-0.472,0.855 c-0.01,0.345,0.148,0.672,0.424,0.879c0.583,0.438,0.94,1.313,1.138,2.049c-2.711,0.486-3.37,1.934-4.01,3.34 c-0.676,1.486-1.443,3.17-5.15,4.794c-1.008,0.442-1.693,1.499-1.789,2.757c-0.092,1.221,0.412,2.334,1.315,2.905 c0.385,0.244,0.778,0.269,1.094,0.289c0.382,0.025,0.657,0.043,1.07,0.409c0.327,0.292,0.593,0.621,0.827,0.912 c0.388,0.481,0.722,0.896,1.268,1.021c0.77,0.181,1.694-0.278,2.761-0.843c0.693-0.368,1.479-0.784,2.073-0.904 c0.754-0.15,1.721-0.323,2.52-0.323c0.684,0,0.909,0.134,0.928,0.114c0.18,1.047-1.972,2.48-3.87,3.745 c-3.333,2.224-7.481,4.988-6.394,9.455c0.17,0.699,0.523,2.123,3.82,3.819C6.66,39.331,1.21,41.742,1.21,43.609 c0,1.244,1.142,2.041,7.165,2.703C12.421,46.757,17.793,47,23.5,47s11.079-0.243,15.125-0.688 c6.022-0.662,7.165-1.459,7.165-2.703C45.79,42.247,42.89,40.596,38.642,39.289z">
|
||||
<GeometryDrawing.Pen>
|
||||
<Pen Brush="Black" Thickness="3"/>
|
||||
</GeometryDrawing.Pen>
|
||||
</GeometryDrawing>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Spawn">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M27,22.000013C25.346001,22.000013 24,23.345991 24,25.000013 24,26.654005 25.346001,28.000013 27,28.000013 28.653999,28.000013 30,26.654005 30,25.000013 30,23.345991 28.653999,22.000013 27,22.000013z M5,22C3.3460007,22 2,23.346 2,25 2,26.654 3.3460007,28 5,28 6.6540003,28 8,26.654 8,25 8,23.346 6.6540003,22 5,22z M16,2C14.346,2 13,3.3460007 13,5 13,6.6540003 14.346,8 16,8 17.654,8 19,6.6540003 19,5 19,3.3460007 17.654,2 16,2z M16,0C18.757,0 21,2.243 21,5 21,6.2061872 20.570676,7.3139925 19.856814,8.178627L19.749571,8.3023939 26.702677,20.009615 26.74309,20.006532C26.828189,20.002204 26.913844,20.000013 27,20.000013 29.757004,20.000013 32,22.242994 32,25.000013 32,27.757002 29.757004,30.000013 27,30.000013 24.242996,30.000013 22,27.757002 22,25.000013 22,23.104563 23.060166,21.452075 24.618662,20.604373L24.703606,20.560808 18.143555,9.5162544 17.944359,9.6064529C17.346375,9.8598127 16.68925,10 16,10 15.224594,10 14.489846,9.8225756 13.834221,9.5061913L13.749143,9.4625559 7.9581623,20.972196 7.9896793,20.994624C9.2092552,21.907268 10,23.363032 10,25 10,27.757 7.757,30 5,30 2.243,30 0,27.757 0,25 0,22.243 2.243,20 5,20 5.3446255,20 5.6812191,20.035047 6.0064049,20.101764L6.1420031,20.133139 12.151809,8.1885796 12.143186,8.178627C11.429324,7.3139925 11,6.2061872 11,5 11,2.243 13.243,0 16,0z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Tetris">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black" Geometry="M106.965,252.716H262.11c5.522,0,10-4.477,10-10v-77.572c0-5.523-4.478-10-10-10h-67.572V10c0-5.523-4.478-10-10-10 h-77.572c-5.522,0-10,4.477-10,10v232.716C96.965,248.239,101.443,252.716,106.965,252.716z M116.965,20h57.572v145.144 c0,5.523,4.478,10,10,10h67.572v57.572H116.965V20z"/>
|
||||
<GeometryDrawing Brush="Black" Geometry="M417.253,193.93h-77.571c-5.522,0-10,4.477-10,10v67.572H262.11c-5.522,0-10,4.477-10,10v67.572H29.393 c-5.522,0-10,4.477-10,10v77.572c0,5.523,4.478,10,10,10h387.86c5.522,0,10-4.477,10-10V203.93 C427.253,198.407,422.776,193.93,417.253,193.93z M39.393,369.075h290.289v57.572H39.393V369.075z M407.253,426.646h-57.571 v-67.572c0-5.523-4.478-10-10-10H272.11v-57.572h67.572c5.522,0,10-4.477,10-10V213.93h57.571V426.646z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Filter">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="White" Geometry="M0,0L32,0 21.306,17.372993 21.272003,17.372993 21.272003,31.352 10.692001,31.352 10.692001,17.372993z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="FilterActive">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="PaleGreen" Geometry="M0,0L32,0 21.306,17.372993 21.272003,17.372993 21.272003,31.352 10.692001,31.352 10.692001,17.372993z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="FilterError">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Red" Geometry="M0,0L32,0 21.306,17.372993 21.272003,17.372993 21.272003,31.352 10.692001,31.352 10.692001,17.372993z"/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="CancelIcon">
|
||||
<DrawingImage.Drawing>
|
||||
<GeometryDrawing>
|
||||
<GeometryDrawing.Pen>
|
||||
<Pen Brush="Black" Thickness="1" />
|
||||
</GeometryDrawing.Pen>
|
||||
<GeometryDrawing.Geometry>
|
||||
<GeometryGroup>
|
||||
<EllipseGeometry Center="3.5,3.5" RadiusX="7" RadiusY="7" />
|
||||
<LineGeometry StartPoint="0.5,0.5" EndPoint="7,7" />
|
||||
<LineGeometry StartPoint="0.5,7" EndPoint="7,0.5" />
|
||||
</GeometryGroup>
|
||||
</GeometryDrawing.Geometry>
|
||||
</GeometryDrawing>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="PauseIcon">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black"
|
||||
Geometry="M18.51899,0L29.981999,0 29.981999,32 18.51899,32z M0,0L11.464992,0 11.464992,32 0,32z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="PlayIcon">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black"
|
||||
Geometry="M0,0L25.194,16 0,32z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<!-- help / support -->
|
||||
<DrawingImage x:Key="SupportIcon">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black"
|
||||
Geometry="M23.679005,26.495C23.99901,26.495 24.265014,26.59 24.475017,26.78 24.685019,26.967 24.79102,27.204 24.79102,27.491 24.79102,27.783 24.68802,28.024 24.481016,28.214 24.271013,28.405 24.00301,28.5 23.679005,28.5 23.354001,28.5 23.085997,28.403 22.870994,28.208 22.655991,28.006 22.54899,27.766 22.54899,27.491 22.54899,27.207 22.655991,26.97 22.870994,26.78 23.085997,26.59 23.354001,26.495 23.679005,26.495z M23.734006,19.5C24.110011,19.5 24.460016,19.541 24.785021,19.625 25.110025,19.708 25.392029,19.839 25.632032,20.017 25.874036,20.195 26.062038,20.422 26.19904,20.7 26.333042,20.978 26.401043,21.311 26.401043,21.7 26.401043,21.947 26.373043,22.171 26.316042,22.371 26.259041,22.572 26.17704,22.762 26.067039,22.94 25.958037,23.118 25.822035,23.289 25.660033,23.453 25.498031,23.617 25.311028,23.786 25.101026,23.961 24.959023,24.078 24.835021,24.187 24.72802,24.289 24.620018,24.39 24.531017,24.49 24.460016,24.589 24.389015,24.689 24.335014,24.794 24.299014,24.905 24.262013,25.017 24.244013,25.144 24.244013,25.285 24.244013,25.383 24.257013,25.482 24.283013,25.583 24.310014,25.685 24.345015,25.77 24.390016,25.838L22.791993,25.838C22.751992,25.733 22.719992,25.615 22.697992,25.483 22.674991,25.351 22.663991,25.226 22.663991,25.109 22.663991,24.922 22.681992,24.752 22.718992,24.599 22.754992,24.445 22.809993,24.3 22.882994,24.164 22.955995,24.029 23.046997,23.898 23.155998,23.775 23.266,23.652 23.393002,23.529 23.539003,23.407 23.694005,23.278 23.828007,23.157 23.943009,23.046 24.059011,22.935 24.157012,22.823 24.238013,22.712 24.320014,22.6 24.380015,22.485 24.420015,22.365 24.460016,22.246 24.481016,22.113 24.481016,21.967 24.481016,21.841 24.459016,21.725 24.414016,21.618 24.369015,21.51 24.306014,21.419 24.222013,21.341 24.140012,21.264 24.03901,21.203 23.918009,21.159 23.799007,21.115 23.667005,21.092 23.521003,21.092 23.204998,21.092 22.876994,21.158 22.536989,21.29 22.195985,21.422 21.87398,21.621 21.569976,21.888L21.569976,20.059C21.88298,19.872 22.222985,19.733 22.59099,19.64 22.959995,19.547 23.341001,19.5 23.734006,19.5z M23.985949,18C20.670016,18 17.972007,20.69101 17.972007,24 17.972007,27.309021 20.670016,30 23.985949,30 27.302003,30 30.000989,27.309021 30.000989,24 30.000989,20.69101 27.302003,18 23.985949,18z M14,2C10.968,2 8.5,4.467 8.5,7.5 8.5,10.438219 10.81616,12.84526 13.717461,12.992831L13.973991,12.99934 13.99997,12.999012 14.027442,12.999304 14.28254,12.992831C17.18384,12.84526 19.5,10.438219 19.5,7.5 19.5,4.467 17.032,2 14,2z M14,0C18.136,0 21.5,3.3640003 21.5,7.5 21.5,9.95575 20.314059,12.13934 18.484733,13.508212L18.265061,13.664531 18.342722,13.68891C19.921902,14.202736,21.408062,14.995103,22.721599,16.037384L22.786062,16.089699 22.966662,16.064397C23.300515,16.021905 23.640717,16 23.985949,16 28.405035,16 32.000998,19.588989 32.000998,24 32.000998,28.411011 28.405035,32 23.985949,32 19.566984,32 15.971998,28.411011 15.971998,24 15.971998,20.96743 17.671191,18.323394 20.169134,16.967021L20.4065,16.845489 20.189965,16.712549C18.448412,15.669154,16.455822,15.076083,14.409823,15.006025L14.033219,14.999578 14,15 13.960834,14.999503 13.690718,15.00291C7.2160797,15.166433,1.9999962,20.449734,1.9999962,26.921989L0,26.928989 0,26.921989C0,20.80439,3.9878531,15.595488,9.51441,13.731782L9.7309766,13.661711 9.5152669,13.508212C7.6859417,12.13934 6.5,9.95575 6.5,7.5 6.5,3.3640003 9.8640003,0 14,0z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<!-- 'menu' three dots -->
|
||||
<DrawingImage x:Key="MenuIcon">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="M23,14C24.10498,14 25,14.89502 25,16 25,17.10498 24.10498,18 23,18 21.89502,18 21,17.10498 21,16 21,14.89502 21.89502,14 23,14z M16,14C17.105,14 18,14.895 18,16 18,17.105 17.105,18 16,18 14.895,18 14,17.105 14,16 14,14.895 14.895,14 16,14z M9,14C10.105,14 11,14.895 11,16 11,17.105 10.105,18 9,18 7.8950005,18 7,17.105 7,16 7,14.895 7.8950005,14 9,14z M16,2C8.2799997,2 2,8.2800002 2,16 2,23.72 8.2799997,30 16,30 23.72,30 30,23.72 30,16 30,8.2800002 23.72,2 16,2z M16,0C24.822,0 32,7.178 32,16 32,24.822 24.822,32 16,32 7.1780005,32 0,24.822 0,16 0,7.178 7.1780005,0 16,0z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<!-- expander arrow -->
|
||||
<DrawingImage x:Key="ArrowIcon">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="M299.152955025434,0L496.426178902388,0 268.890046089888,280.247772216797 198.190201729536,367.407897949219 199.87503144145,369.495361328125 271.502137154341,457.706451416016 498.999970406294,738 301.717621773481,738 101.234124153852,491.008697509766 99.5304498374462,488.936553955078 98.6409082114697,490.003173828125 0,368.488952636719 98.6409082114697,246.945526123047z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="CancelBuys">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="{mbts:BTSColor MarketData.bid}"
|
||||
Geometry="m 24.706673 31.196264 -3.086182 3.086182 5.965481 5.963348 -5.965481 5.96548 3.086182 3.084049 5.963348 -5.963348 5.96548 5.963348 3.084049 -3.084049 -5.963347 -5.96548 5.963347 -5.963348 -3.084049 -3.086182 -5.96548 5.965481 z M 5.3507926 32.045363 H 17.816449 v 2.401501 H 5.3507926 Z m 0 -4.937233 H 24.132994 v 2.401501 H 5.3507926 Z m 0 9.874466 h 5.5381524 v 2.401501 H 5.3507926 Z M 1.3730469 0 A 1.3741374 1.3741374 0 0 0 0 1.3730469 V 45.630859 a 1.3741374 1.3741374 0 0 0 1.3730469 1.373047 H 16.853516 a 17.906029 17.906029 0 0 1 -0.05859 -1.373047 17.906029 17.906029 0 0 1 0.06836 -1.375 H 2.7480469 V 2.7480469 H 33.326172 V 27.783203 a 17.906029 17.906029 0 0 1 1.375 -0.05859 17.906029 17.906029 0 0 1 1.373047 0.06836 V 1.3730469 A 1.3741374 1.3741374 0 0 0 34.701172 0 Z M 10.662215 24.759265 V 5.1202697 h 7.148923 q 3.286862 0 5.05355 1.2051818 1.766687 1.2051838 1.766687 3.3964241 0 1.5886494 -1.081924 2.7801354 -1.068231 1.191488 -2.739053 1.657126 v 0.05479 q 2.095375 0.26021 3.341644 1.547564 1.259962 1.287354 1.259962 3.136214 0 2.697964 -1.93103 4.286613 -1.931032 1.574956 -5.272673 1.574956 z M 15.085783 8.3797408 v 4.6563852 h 1.944726 q 1.369526 0 2.150155 -0.657372 0.794325 -0.671068 0.794325 -1.835164 0 -2.1638492 -3.23208 -2.1638492 z m 0 7.9432472 v 5.176805 h 2.39667 q 1.533868 0 2.39667 -0.712152 0.876495 -0.712155 0.876495 -1.944728 0 -1.17779 -0.862802 -1.848858 -0.849105 -0.671067 -2.382974 -0.671067 z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="CancelSells">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="{mbts:BTSColor MarketData.ask}"
|
||||
Geometry="m 19.060265 26.797642 v -2.144583 q 0.583058 0.489233 1.266644 0.737201 0.683586 0.241265 1.380576 0.241265 0.408811 0 0.710393 -0.07372 0.308284 -0.07372 0.509339 -0.201055 0.207756 -0.134036 0.308284 -0.308283 0.100527 -0.18095 0.100527 -0.388706 0 -0.281477 -0.160844 -0.502637 -0.160844 -0.22116 -0.44232 -0.408811 -0.274775 -0.187651 -0.656779 -0.361898 -0.382004 -0.174248 -0.824324 -0.355197 -1.125906 -0.469128 -1.682158 -1.146012 -0.549549 -0.676884 -0.549549 -1.635245 0 -0.750604 0.301582 -1.28675 0.301582 -0.542847 0.817622 -0.891342 0.522743 -0.348495 1.206328 -0.509339 0.683586 -0.167545 1.447594 -0.167545 0.750604 0 1.326961 0.09383 0.583059 0.08712 1.072292 0.274775 v 2.003845 q -0.241266 -0.167545 -0.529444 -0.29488 -0.281477 -0.127335 -0.583059 -0.207757 -0.301582 -0.08712 -0.603164 -0.127334 -0.29488 -0.04021 -0.562953 -0.04021 -0.3686 0 -0.670182 0.07372 -0.301582 0.06702 -0.509339 0.194353 -0.207756 0.127334 -0.321687 0.308284 -0.113931 0.174247 -0.113931 0.395407 0 0.241266 0.127334 0.435619 0.127335 0.187651 0.361899 0.361898 0.234564 0.167546 0.569655 0.335091 0.335091 0.160844 0.757306 0.335091 0.576356 0.241266 1.03208 0.516041 0.462426 0.268073 0.790816 0.609866 0.328389 0.341793 0.502636 0.784113 0.174248 0.435618 0.174248 1.018677 0 0.804219 -0.308284 1.353768 -0.301582 0.542848 -0.824324 0.884641 -0.522743 0.335091 -1.219732 0.482531 -0.690288 0.14744 -1.460998 0.14744 -0.790815 0 -1.50791 -0.134036 -0.710393 -0.134037 -1.233135 -0.40211 z m 6.620223 3.788289 -1.556212 1.556212 3.008102 3.007026 -3.008102 3.008101 1.556212 1.555136 3.007026 -3.007026 3.008101 3.007026 1.555136 -1.555136 -3.007026 -3.008101 3.007026 -3.007026 -1.555136 -1.556212 -3.008101 3.008102 z m -9.76023 2.917766 h 2.792621 v 1.21096 h -2.792621 z m 0 -2.489606 h 6.285825 v 1.21096 h -6.285825 z m 0 -2.489607 h 9.470951 v 1.210961 H 15.920258 Z M 13.914475 14.855173 a 0.69291063 0.69291063 0 0 0 -0.692361 0.692361 v 22.317061 a 0.69291063 0.69291063 0 0 0 0.692361 0.692361 h 7.806047 a 9.0291392 9.0291392 0 0 1 -0.02954 -0.692361 9.0291392 9.0291392 0 0 1 0.03447 -0.693345 H 14.60782 V 16.24088 h 15.419061 v 12.624011 a 9.0291392 9.0291392 0 0 1 0.693346 -0.02954 9.0291392 9.0291392 0 0 1 0.692361 0.03447 V 15.547534 a 0.69291063 0.69291063 0 0 0 -0.692361 -0.692361 z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="AddOrders" x:Shared="False">
|
||||
<!-- Ticket icon -->
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="M 5.3507926 32.045363 H 17.81645 v 2.401501 H 5.3507926 Z m 0 -4.937233 H 24.132995 v 2.401501 H 5.3507926 Z M 18.799228 22.222041 v 2.32929 h -1.567173 v -2.264886 q -2.179014 -0.01073 -4.057475 -0.987533 v -2.973336 q 0.622575 0.504501 1.856993 0.933864 1.234417 0.429362 2.200482 0.493766 v -3.907198 q -2.511771 -0.933863 -3.4349 -2.018003 -0.912395 -1.094874 -0.912395 -2.662047 0 -1.685248 1.191482 -2.8659947 1.19148 -1.1914807 3.155813 -1.3846939 V 4.918734 h 1.567173 v 1.9535992 q 2.264887 0.1073411 3.38123 0.7299162 V 10.500446 Q 20.677689 9.5880506 18.799228 9.3841034 v 4.0682086 q 2.35076 0.847992 3.370495 1.942866 1.019736 1.08414 1.019736 2.629845 0 1.781854 -1.137811 2.876728 -1.13781 1.08414 -3.25242 1.32029 z M 17.232055 12.829737 V 9.4270397 q -1.492034 0.2683516 -1.492034 1.5564393 0 1.105608 1.492034 1.846258 z m 1.567173 3.628113 v 3.25242 q 1.53497 -0.236149 1.53497 -1.53497 0 -1.051939 -1.53497 -1.71745 z m 13.258587 13.65074 h -3.954117 l 0.0014 7.641804 -7.643169 -10e-7 0.0014 3.952751 h 7.640439 l 0.0014 7.641803 h 3.951385 l 0.0014 -7.641802 7.640437 -10e-7 0.0014 -3.952751 -7.643169 10e-7 z M 5.3507926 36.982596 h 5.5381524 v 2.401501 H 5.3507926 Z M 1.3730469 0 A 1.3741374 1.3741374 0 0 0 0 1.3730469 V 45.630859 a 1.3741374 1.3741374 0 0 0 1.3730469 1.373047 H 16.853516 a 17.906029 17.906029 0 0 1 -0.05859 -1.373047 17.906029 17.906029 0 0 1 0.06836 -1.375 H 2.7480469 V 2.7480469 H 33.326172 V 27.783203 a 17.906029 17.906029 0 0 1 1.375 -0.05859 17.906029 17.906029 0 0 1 1.373047 0.06836 V 1.3730469 A 1.3741374 1.3741374 0 0 0 34.701172 0 Z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="CancelOrders">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="m 26.463403 27.963318 h -2.359042 l -0.683586 -2.137882 h -3.417929 l -0.676884 2.137882 h -2.345638 l 3.498351 -9.610414 h 2.566798 z M 22.92484 24.163384 21.89276 20.933106 q -0.113931 -0.361899 -0.160844 -0.864535 h -0.05361 q -0.03351 0.422214 -0.167545 0.837727 l -1.045485 3.257086 z m 2.065112 7.055953 -1.51223 1.51223 2.923087 2.922042 -2.923087 2.923086 1.51223 1.511185 2.922042 -2.922042 2.923086 2.922042 1.511185 -1.511185 -2.922041 -2.923086 2.922041 -2.922042 -1.511185 -1.51223 -2.923086 2.923087 z m -9.484387 0.416058 h 6.108175 v 1.176737 h -6.108175 z m 0 -2.419244 h 9.203284 v 1.176735 h -9.203284 z m 0 4.83849 h 2.713696 v 1.176736 H 15.505565 Z M 13.556469 15.93316 a 0.67332766 0.67332766 0 0 0 -0.672794 0.672793 v 21.686339 a 0.67332766 0.67332766 0 0 0 0.672794 0.672793 h 7.585433 a 8.7739586 8.7739586 0 0 1 -0.02871 -0.672793 8.7739586 8.7739586 0 0 1 0.0335 -0.673751 H 14.230219 V 17.279703 h 14.983289 v 12.267233 a 8.7739586 8.7739586 0 0 1 0.67375 -0.02871 8.7739586 8.7739586 0 0 1 0.672794 0.0335 V 16.605953 A 0.67332766 0.67332766 0 0 0 29.887258 15.93316 Z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="CancelSelected">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="m 24.706673 31.196264 -3.086181 3.086182 5.96548 5.963348 -5.96548 5.96548 3.086181 3.084049 5.963348 -5.963348 5.96548 5.963348 3.084049 -3.084049 -5.963347 -5.96548 5.963347 -5.963348 -3.084049 -3.086182 -5.96548 5.965481 z M 5.3507926 32.045363 H 17.81645 v 2.401501 H 5.3507926 Z m 0 -4.937233 H 24.132994 v 2.401501 H 5.3507926 Z M 26.434166 6.0031559 14.993666 17.443656 9.6399578 12.089946 6.0100982 15.719802 c 2.9622322 2.959826 6.0772448 6.092263 8.9969908 8.970151 L 30.064121 9.6329208 Z M 5.3507926 36.982596 h 5.5381524 v 2.401501 H 5.3507926 Z M 1.3730469 0 A 1.3741374 1.3741374 0 0 0 0 1.3730469 V 45.630859 a 1.3741374 1.3741374 0 0 0 1.3730469 1.373047 H 16.853516 a 17.906029 17.906029 0 0 1 -0.05859 -1.373047 17.906029 17.906029 0 0 1 0.06836 -1.375 H 2.7480469 V 2.7480469 H 33.326172 V 27.783203 a 17.906029 17.906029 0 0 1 1.375 -0.05859 17.906029 17.906029 0 0 1 1.373047 0.06836 V 1.3730469 A 1.3741374 1.3741374 0 0 0 34.701172 0 Z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="ModifyOrder">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing Brush="Black"
|
||||
Geometry="m 18.887708 18.355738 v 1.910329 h -1.285291 v -1.857509 q -1.787082 -0.0088 -3.327671 -0.809909 v -2.438532 q 0.510595 0.413758 1.522982 0.765893 1.012387 0.352134 1.804689 0.404954 V 13.12654 q -2.059987 -0.765892 -2.817076 -1.655032 -0.748286 -0.897943 -0.748286 -2.1832341 0 -1.382128 0.977174 -2.3504979 0.977173 -0.9771733 2.588188 -1.1356339 V 4.1647166 h 1.285291 v 1.6022121 q 1.85751 0.088034 2.77306 0.5986287 v 2.376908 Q 20.428297 7.9941795 18.887708 7.8269156 V 11.16339 q 1.927937 0.695466 2.764256 1.593409 0.83632 0.88914 0.83632 2.156824 0 1.461358 -0.933157 2.359301 -0.933156 0.88914 -2.667419 1.082814 z M 17.602417 10.652795 V 7.8621291 q -1.223667 0.2200841 -1.223667 1.2764876 0 0.9067463 1.223667 1.5141783 z m 1.285291 2.975537 v 2.667419 q 1.258881 -0.193674 1.258881 -1.258881 0 -0.86273 -1.258881 -1.408538 z M 7.8581956 26.412174 H 18.081699 v 1.969551 H 7.8581956 Z m 0 -4.04919 H 23.262109 v 1.969551 H 7.8581956 Z m 23.8237084 -0.610988 -12.064762 12.064763 4.39301 4.393009 12.064761 -12.064762 z m -0.0014 3.48158 0.91143 0.91143 -8.583182 8.583183 -0.91143 -0.91143 z m -12.817392 9.398532 -1.583992 5.915617 5.914283 -1.585326 z M 7.8581956 30.461364 H 12.40022 v 1.969551 H 7.8581956 Z M 4.5959132 0.13069836 A 1.1269761 1.1269761 0 0 0 3.4698314 1.2567801 V 37.554094 a 1.1269761 1.1269761 0 0 0 1.1260818 1.126082 H 15.310509 a 8.0150307 8.0150307 0 0 1 -0.01762 -0.337985 8.0150307 8.0150307 0 0 1 0.240273 -1.915781 H 5.7235967 V 2.3844637 H 30.801741 V 20.486667 a 8.0150307 8.0150307 0 0 1 0.863383 -0.04966 8.0150307 8.0150307 0 0 1 1.390383 0.12334 V 1.2567801 A 1.1269761 1.1269761 0 0 0 31.929425 0.13069836 Z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<!--DrawingImage x:Key="LadderCancelBuys">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="{mbts:BTSColor MarketData.bid}"
|
||||
Geometry="M 9.9417804 -0.02293875 1.9154138 8.0034278 17.4301 23.512569 1.9154138 39.027256 9.9417804 47.048077 25.450922 31.538936 40.965607 47.048077 48.986428 39.027256 33.47729 23.512569 48.986428 8.0034278 40.965607 -0.02293875 25.450922 15.491746 Z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="LadderCancelSells">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="{mbts:BTSColor MarketData.ask}"
|
||||
Geometry="M 9.9417804 -0.02293875 1.9154138 8.0034278 17.4301 23.512569 1.9154138 39.027256 9.9417804 47.048077 25.450922 31.538936 40.965607 47.048077 48.986428 39.027256 33.47729 23.512569 48.986428 8.0034278 40.965607 -0.02293875 25.450922 15.491746 Z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="LadderCancelOrders">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="M 9.9417804 -0.02293875 1.9154138 8.0034278 17.4301 23.512569 1.9154138 39.027256 9.9417804 47.048077 25.450922 31.538936 40.965607 47.048077 48.986428 39.027256 33.47729 23.512569 48.986428 8.0034278 40.965607 -0.02293875 25.450922 15.491746 Z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage-->
|
||||
|
||||
<DrawingImage x:Key="Synthetics" x:Shared="False">
|
||||
<!-- Spreads icon -->
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="m 69.641861 87.129943 a 36.813842 36.813842 0 0 0 -36.813776 36.813767 36.813842 36.813842 0 0 0 31.044618 36.31355 l 1.208194 21.35839 1.804543 31.90967 a 41.092964 41.092964 0 0 0 -29.828154 39.50509 41.092964 41.092964 0 0 0 41.09258 41.0931 41.092964 41.092964 0 0 0 41.093104 -41.0931 41.092964 41.092964 0 0 0 -0.10284 -2.9068 41.092964 41.092964 0 0 0 -38.048841 -38.03902 l -2.962092 -52.36321 a 36.813842 36.813842 0 0 0 20.093347 -12.61939 l 33.150946 15.70705 v 5.3e-4 a 27.542416 27.542416 0 0 0 -0.12557 2.49907 27.542416 27.542416 0 0 0 27.54251 27.54249 27.542416 27.542416 0 0 0 27.5425 -27.5425 27.542416 27.542416 0 0 0 -27.5425 -27.5425 27.542416 27.542416 0 0 0 -22.44618 11.61479 l -31.44563 -14.89935 a 36.813842 36.813842 0 0 0 1.55701 -10.53786 36.813842 36.813842 0 0 0 -36.813769 -36.813767 z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="AddSynthetic" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="M 36.50044 86.999995 A 36.813842 36.813842 0 0 0 -0.3133356 123.81377 36.813842 36.813842 0 0 0 30.731282 160.12732 l 1.208194 21.35839 1.804543 31.90967 a 41.092964 41.092964 0 0 0 -29.8281546 39.50509 41.092964 41.092964 0 0 0 41.0925806 41.0931 41.092964 41.092964 0 0 0 41.093099 -41.0931 41.092964 41.092964 0 0 0 -0.102836 -2.9068 41.092964 41.092964 0 0 0 -38.04884 -38.03902 l -2.962092 -52.36321 a 36.813842 36.813842 0 0 0 20.093347 -12.61939 l 33.150948 15.70705 v 5.3e-4 a 27.542416 27.542416 0 0 0 -0.125574 2.49907 27.542416 27.542416 0 0 0 27.542513 27.54249 27.542416 27.542416 0 0 0 27.5425 -27.5425 27.542416 27.542416 0 0 0 -27.5425 -27.5425 27.542416 27.542416 0 0 0 -22.44618 11.61479 L 71.757201 134.35163 A 36.813842 36.813842 0 0 0 73.314213 123.81377 36.813842 36.813842 0 0 0 36.50044 86.999995 Z m 116.60981 115.628085 0.007 37.48967 h -37.49716 l 0.007 19.39257 h 37.48344 L 153.11751 297 h 19.38493 l 0.007 -37.48968 h 37.48342 L 210 240.11775 h -37.49727 l 0.007 -37.48967 z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="RemoveSynthetic" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="M 37.03498 86.999995 A 36.813842 36.813842 0 0 0 0.22120379 123.81377 36.813842 36.813842 0 0 0 31.265822 160.12731 l 1.208194 21.35839 1.804543 31.90967 a 41.092964 41.092964 0 0 0 -29.8281552 39.50509 41.092964 41.092964 0 0 0 41.0925812 41.0931 41.092964 41.092964 0 0 0 41.093099 -41.0931 41.092964 41.092964 0 0 0 -0.102836 -2.9068 41.092964 41.092964 0 0 0 -38.04884 -38.03902 l -2.962092 -52.36321 a 36.813842 36.813842 0 0 0 20.093346 -12.61938 l 33.150949 15.70704 v 5.3e-4 a 27.542416 27.542416 0 0 0 -0.125574 2.49907 27.542416 27.542416 0 0 0 27.542503 27.54249 27.542416 27.542416 0 0 0 27.5425 -27.5425 27.542416 27.542416 0 0 0 -27.5425 -27.54249 27.542416 27.542416 0 0 0 -22.44618 11.61479 L 72.29174 134.35163 A 36.813842 36.813842 0 0 0 73.848752 123.81377 36.813842 36.813842 0 0 0 37.03498 86.999995 Z m 94.72671 153.117755 0.008 18.80608 c 0 0 -6.42588 -1.1e-4 78.75576 1.3e-4 l 0.009 -18.80621 c 0 0 4.48208 0 -78.77178 0 z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
|
||||
<DrawingImage x:Key="ModifySynthetic" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="M 37.03498 86.999995 A 36.813842 36.813842 0 0 0 0.2212037 123.81377 36.813842 36.813842 0 0 0 31.265822 160.12732 l 1.208194 21.35839 1.804543 31.90967 a 41.092964 41.092964 0 0 0 -29.8281553 39.50509 41.092964 41.092964 0 0 0 41.0925813 41.0931 41.092964 41.092964 0 0 0 41.093099 -41.0931 41.092964 41.092964 0 0 0 -0.102836 -2.9068 41.092964 41.092964 0 0 0 -38.04884 -38.03902 l -2.962092 -52.36321 a 36.813842 36.813842 0 0 0 20.093347 -12.61939 l 33.150948 15.70705 v 5.3e-4 a 27.542416 27.542416 0 0 0 -0.125574 2.49907 27.542416 27.542416 0 0 0 27.542503 27.54249 27.542416 27.542416 0 0 0 27.5425 -27.5425 27.542416 27.542416 0 0 0 -27.5425 -27.5425 27.542416 27.542416 0 0 0 -22.44618 11.61479 L 72.291741 134.35163 A 36.813842 36.813842 0 0 0 73.848753 123.81377 36.813842 36.813842 0 0 0 37.03498 86.999995 Z m 145.03189 90.486735 -76.71431 76.71435 27.93311 27.93293 L 210 205.41986 Z m -0.008 22.13769 5.79522 5.79544 -54.57645 54.57644 -5.7952 -5.79522 z m -81.50016 59.76108 -10.071854 37.61451 37.606034 -10.0803 z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="CloneSynthetic" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="m 139.80129 180.78831 a 20.783495 20.783495 0 0 0 -20.78345 20.78346 20.783495 20.783495 0 0 0 17.52643 20.50105 l 0.68209 12.05803 1.01877 18.01482 a 23.1993 23.1993 0 0 0 -16.83968 22.30284 23.1993 23.1993 0 0 0 23.1991 23.19938 23.1993 23.1993 0 0 0 23.19935 -23.19938 23.1993 23.1993 0 0 0 -0.058 -1.64105 23.1993 23.1993 0 0 0 -21.4807 -21.47518 l -1.67225 -29.56198 a 20.783495 20.783495 0 0 0 11.34383 -7.12437 l 18.71558 8.86752 v 3.1e-4 a 15.549251 15.549251 0 0 0 -0.0708 1.41086 15.549251 15.549251 0 0 0 15.5493 15.54927 15.549251 15.549251 0 0 0 15.54931 -15.54927 15.549251 15.549251 0 0 0 -15.54931 -15.54932 15.549251 15.549251 0 0 0 -12.67213 6.5572 l -17.75282 -8.41152 a 20.783495 20.783495 0 0 0 0.87902 -5.94921 20.783495 20.783495 0 0 0 -20.78345 -20.78346 z M 31.983713 88.265691 A 30.676234 30.676234 0 0 0 1.3075339 118.94187 30.676234 30.676234 0 0 0 27.17639 149.20122 l 1.006764 17.79752 1.503689 26.58969 A 34.241941 34.241941 0 0 0 4.8316412 226.50722 34.241941 34.241941 0 0 0 39.073263 260.74928 34.241941 34.241941 0 0 0 73.315316 226.50722 34.241941 34.241941 0 0 0 73.229625 224.08505 34.241941 34.241941 0 0 0 41.524291 192.3879 L 39.05604 148.75469 A 30.676234 30.676234 0 0 0 55.799422 138.2392 l 27.624018 13.08837 v 4.4e-4 a 22.950541 22.950541 0 0 0 -0.104638 2.08242 22.950541 22.950541 0 0 0 22.950618 22.9506 22.950541 22.950541 0 0 0 22.95062 -22.9506 22.950541 22.950541 0 0 0 -22.95062 -22.95061 22.950541 22.950541 0 0 0 -18.703946 9.67837 L 61.362463 127.72286 A 30.676234 30.676234 0 0 0 62.65989 118.94187 30.676234 30.676234 0 0 0 31.983713 88.265691 Z" />
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="ViewSettings" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="M22.889013,19.178117C23.365026,19.178117 23.75202,19.56508 23.75202,20.040055 23.75202,20.516007 23.365026,20.904069 22.889013,20.904069 22.413031,20.904069 22.02503,20.516007 22.02503,20.040055 22.02503,19.56508 22.413031,19.178117 22.889013,19.178117z M22.889013,15.528093C20.40003,15.528092 18.375006,17.552018 18.375006,20.040055 18.375006,22.529069 20.40003,24.554093 22.889013,24.554093 25.37702,24.554093 27.402014,22.529069 27.402014,20.040055 27.402014,17.552018 25.37702,15.528092 22.889013,15.528093z M22.167028,12.426042L23.834021,12.426042 23.834021,13.935075 23.981024,13.958024C24.912024,14.12404,25.772009,14.500016,26.509008,15.03505L26.62702,15.12404 27.757025,13.993058 28.935034,15.171037 27.806005,16.301042 27.940008,16.484025C28.422033,17.167008,28.769018,17.950089,28.943029,18.796037L28.996008,19.093034 30.500006,19.093034 30.500006,20.759049 29.02503,20.759049 28.997015,20.980119C28.848028,21.952043,28.472021,22.85109,27.924017,23.619035L27.805029,23.779069 28.935034,24.909074 27.757025,26.088029 26.62702,24.958024 26.61701,24.966081C25.866034,25.536027,24.981024,25.938004,24.019018,26.117082L23.834021,26.147111 23.834021,27.426042 22.167028,27.426042 22.167028,26.177018 21.949011,26.149064C20.942022,25.995011,20.014013,25.596086,19.228033,25.016007L19.151007,24.957047 18.019018,26.088029 16.841009,24.909074 17.972021,23.779069 17.863013,23.633073C17.294012,22.839005,16.908026,21.905046,16.767034,20.894059L16.75202,20.759049 15.500006,20.759049 15.500006,19.093034 16.783026,19.093034 16.812017,18.91005C16.991034,17.947038,17.393011,17.063004,17.963019,16.312028L17.972021,16.301042 16.841009,15.171037 18.019018,13.993058 19.15003,15.123063 19.310034,15.005021C20.078009,14.458024,20.977026,14.081071,21.949011,13.932023L22.167028,13.905046z M16.000014,6.0000114C14.346014,6.0000114 13.000014,7.3460112 13.000014,9.0000114 13.000014,10.654011 14.346014,12.000011 16.000014,12.000011 17.654014,12.000011 19.000014,10.654011 19.000014,9.0000114 19.000014,7.3460112 17.654014,6.0000114 16.000014,6.0000114z M16.000014,4.0000114C18.757014,4.0000114 21.000014,6.2430115 21.000014,9.0000114 21.000014,11.757011 18.757014,14.000011 16.000014,14.000011 13.243014,14.000011 11.000014,11.757011 11.000014,9.0000114 11.000014,6.2430115 13.243014,4.0000114 16.000014,4.0000114z M16.000123,0C24.651189,0 31.47924,8.0160384 31.765244,8.3580403 32.078245,8.7290418 32.078245,9.2720447 31.765244,9.6440461 31.700243,9.7220466 30.130231,11.580056 27.56321,13.533065L26.352201,11.941058C27.853213,10.798052 29.000222,9.6770465 29.645226,9.0010433 27.881213,7.1610341 22.366171,2.0000095 16.000123,2.0000095 9.6350741,2.0000095 4.1210318,7.1590343 2.3550186,9.0000434 4.013031,10.731052 8.9770689,15.388074 14.846114,15.946077L14.657112,17.936087C6.6410513,17.175083 0.49200439,9.9510479 0.23400211,9.6430461 -0.078000069,9.2720447 -0.078000069,8.7290418 0.23400211,8.3580403 0.52000427,8.0160384 7.3480568,0 16.000123,0z"
|
||||
/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Export" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="M23.471008,4.2230202L32,12.800012 23.471008,20.360005 23.471008,16.322012C23.471008,16.322012 8.7430115,12.294 5.0610046,20.360005 5.0610046,18.343985 6.3990173,8.2560073 23.471008,8.2560073z M0,0L21.334015,0 21.334015,2.1340014 21.334015,4.2690102 19.200012,4.2690102 19.200012,2.1340014 2.1340027,2.1340014 2.1340027,23.466997 19.200012,23.466997 19.200012,21.331989 21.334015,21.331989 21.334015,23.466997 21.334015,25.601 19.200012,25.601 0,25.601 0,23.466997 0,2.1340014z"
|
||||
/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="Import" x:Shared="False">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<DrawingGroup.Children>
|
||||
<GeometryDrawing
|
||||
Brush="Black"
|
||||
Geometry="M13.594002,4.2219891L13.594002,8.255989C30.661003,8.255989 32,18.345018 32,20.360004 28.319,12.293011 13.594002,16.32399 13.594002,16.32399L13.594002,20.360004 5.0610008,12.798993z M0,0L21.333,0 21.333,2.1329974 21.333,4.2670025 19.201,4.2670025 19.201,2.1329974 2.1330032,2.1329974 2.1330032,23.467003 19.201,23.467003 19.201,21.332998 21.333,21.332998 21.333,23.467003 21.333,25.6 19.201,25.6 0,25.6 0,23.467003 0,2.1329974z"
|
||||
/>
|
||||
</DrawingGroup.Children>
|
||||
</DrawingGroup>
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<!-- Pin
|
||||
<Path Data="F1M3,11L3,7 0,7 0,6 1,6 1,1 1,0 6,0 6,1 6,6 7,6 7,7 4,7 4,11 3,11z M2,1L2,6 4,6 4,1 2,1z" />
|
||||
Unpin
|
||||
<Path Data="F1M0,3L4,3 4,0 5,0 5,1 10,1 11,1 11,6 10,6 5,6 5,7 4,7 4,4 0,4 0,3z M10,2L5,2 5,4 10,4 10,2z" />
|
||||
-->
|
||||
|
||||
</ResourceDictionary>
|
||||
@@ -0,0 +1,56 @@
|
||||
using bts.api;
|
||||
using bts.spark;
|
||||
using mbts;
|
||||
using mbts.co2;
|
||||
using mbts.spark;
|
||||
using mbts.ui;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Media;
|
||||
using static mbts.ui.shell.ProtoBufSerializationHelper;
|
||||
|
||||
namespace bts.shell
|
||||
{
|
||||
[Export(typeof(IShellModule))]
|
||||
class MarketShellModule : IShellModule
|
||||
{
|
||||
[ImportingConstructor]
|
||||
public MarketShellModule(IBus bus, MDConsumer consumer, OrdersModel orders_model, [Import("username")]string user_name) {
|
||||
_tsf = new TimeAndSalesWindowFactory(this, bus, consumer);
|
||||
_mvf = new MarketViewWindowFactory(this, bus, orders_model);
|
||||
}
|
||||
|
||||
TimeAndSalesWindowFactory _tsf;
|
||||
MarketViewWindowFactory _mvf;
|
||||
|
||||
#region IShellModule
|
||||
|
||||
public ImageSource icon => Icons.Date;
|
||||
|
||||
public string name => "Market";
|
||||
|
||||
public int priority => 10;
|
||||
|
||||
public IEnumerable<SparkCommand> actions => new [] {
|
||||
SparkCommands.PickMarketView,
|
||||
SparkCommands.PickTimeAndSales
|
||||
};
|
||||
|
||||
public Task<IShellWindow> create(Stream load_stream) {
|
||||
if (try_deserialize(load_stream, out ShellSerializationHeader header)) {
|
||||
if (header.name == _tsf.name) return _tsf.load_window(load_stream, header.version);
|
||||
if (header.name == _mvf.name) return _mvf.load_window(load_stream, header.version);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
Disposable.dispose(ref _tsf);
|
||||
Disposable.dispose(ref _mvf);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,307 @@
|
||||
using bts.api;
|
||||
using bts.api.orderman;
|
||||
using mbts.co2;
|
||||
using mbts.collections;
|
||||
using mbts.spark.utilities;
|
||||
using mbts.ui;
|
||||
using mbts.ui.controls;
|
||||
using mbts.ui.spark;
|
||||
using mbts.ui.utility;
|
||||
using mbts.utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace mbts.spark {
|
||||
partial class MarketViewVM {
|
||||
public class Row : SecurityMDRow, IDisposable, IEquatable<Row>, DIYGrid.IRowVM, DIYGrid.IActionableRowVM {
|
||||
readonly IBus _bus;
|
||||
readonly OrdersModel _orders_model;
|
||||
readonly AnimationManager _animation = new AnimationManager();
|
||||
readonly ObservableCollection<OrderRecordImmutable> _orders = new ObservableCollection<OrderRecordImmutable>();
|
||||
readonly ObservableFilterCollection<OrderRecordImmutable> _working_orders, _working_bids, _working_asks;
|
||||
readonly string _security_text, _security_key_text;
|
||||
readonly Property<double> _bid_price, _ask_price, _last_price, _day_change, _settlement, _session_high, _session_low;
|
||||
readonly Property<ushort> _bid_size, _ask_size;
|
||||
readonly CellProperty<int> _position;
|
||||
readonly CellProperty<ushort> _last_size;
|
||||
readonly CellProperty<ulong> _volume;
|
||||
readonly CellProperty<bool> _inside_bids, _inside_asks;
|
||||
readonly CellProperty<int> _working_bid_volume, _working_ask_volume;
|
||||
readonly CellProperty<double> _working_best_bid, _working_best_ask;
|
||||
readonly CellProperty<string> _working_bids_text, _working_asks_text;
|
||||
readonly MyOrderSummarizer _order_summarizer = new MyOrderSummarizer();
|
||||
ulong _bbo_ref, _last_ref;
|
||||
|
||||
public Row(IBus bus, SecurityMD smd, OrdersModel orders_model) : base(smd) {
|
||||
_bus = bus;
|
||||
_orders_model = orders_model;
|
||||
_security_text = smd.security.ToString();
|
||||
_security_key_text = security_key.ToString();
|
||||
string format_price(double price) => security.ContractSpec.format(price);
|
||||
_position = new CellProperty<int>(0);
|
||||
_bid_price = backing(nameof(bid_price), double.NaN);
|
||||
_ask_price = backing(nameof(ask_price), double.NaN);
|
||||
_bid_size = backing<ushort>(nameof(bid_size), 0);
|
||||
_ask_size = backing<ushort>(nameof(ask_size), 0);
|
||||
_last_price = backing(nameof(last_price), double.NaN);
|
||||
_last_size = new CellProperty<ushort>(0);
|
||||
_day_change = backing(nameof(day_change), double.NaN);
|
||||
_session_low = backing(nameof(session_low), double.NaN);
|
||||
_session_high = backing(nameof(session_high), double.NaN);
|
||||
_settlement = backing(nameof(settlement), double.NaN);
|
||||
_volume = new CellProperty<ulong>(0);
|
||||
_inside_bids = new CellProperty<bool>();
|
||||
_inside_asks = new CellProperty<bool>();
|
||||
_working_bid_volume = new CellProperty<int>();
|
||||
_working_ask_volume = new CellProperty<int>();
|
||||
//
|
||||
_working_orders = new ObservableFilterCollection<OrderRecordImmutable>(_orders, o => o.is_active());
|
||||
_working_bids = new ObservableFilterCollection<OrderRecordImmutable>(_working_orders, o => o.Def.Side == Side.Buy);
|
||||
_working_asks = new ObservableFilterCollection<OrderRecordImmutable>(_working_orders, o => o.Def.Side == Side.Sell);
|
||||
_working_best_bid = new CellProperty<double>(format_price, double.NaN);
|
||||
_working_best_ask = new CellProperty<double>(format_price, double.NaN);
|
||||
_working_bids_text = new CellProperty<string>(string.Empty);
|
||||
_working_asks_text = new CellProperty<string>(string.Empty);
|
||||
//
|
||||
default_command = new DelegateCommand(_show_ladder);
|
||||
bid_price_click = new DelegateCommand(() => _show_order_ticket(MarketViewView.Columns.Bid));
|
||||
bid_size_click = new DelegateCommand(() => _show_order_ticket(MarketViewView.Columns.BidSize));
|
||||
working_bids_click = new DelegateCommand(() => _show_order_book(MarketViewView.Columns.WorkingBids));
|
||||
ask_price_click = new DelegateCommand(() => _show_order_ticket(MarketViewView.Columns.Ask));
|
||||
ask_size_click = new DelegateCommand(() => _show_order_ticket(MarketViewView.Columns.AskSize));
|
||||
working_asks_click = new DelegateCommand(() => _show_order_book(MarketViewView.Columns.WorkingAsks));
|
||||
_animation.AnimationsChanged += on_animations_changed;
|
||||
void on_animations_changed() => RaisePropertyChanged(nameof(animations));
|
||||
_dispose = Disposable.Create(
|
||||
_orders_model.on_security_orders(security.Id).ObserveOnDispatcher().Subscribe(_on_orders),
|
||||
_position.ObserveOnDispatcher().Subscribe(v => _animation.animate_position(v.newval > v.oldval)),
|
||||
_inside_bids.ObserveOnDispatcher().Subscribe(v => _animation.animate_working_bids_inside(v.newval)),
|
||||
_inside_asks.ObserveOnDispatcher().Subscribe(v => _animation.animate_working_asks_inside(v.newval)),
|
||||
_day_change.ObserveOnDispatcher().Subscribe(v => _animation.animate_day_change(v.newval > v.oldval)),
|
||||
Disposable.Create(() => _animation.AnimationsChanged -= on_animations_changed)
|
||||
);
|
||||
}
|
||||
|
||||
public event Action invalidated;
|
||||
|
||||
#region Bound Properties
|
||||
public bool inside_bids => _inside_bids.value;
|
||||
public bool inside_asks => _inside_asks.value;
|
||||
public int position => _position.value;
|
||||
public double last_price => _last_price.Value;
|
||||
public ushort last_size => _last_size.value;
|
||||
public double bid_price => _bid_price.Value;
|
||||
public ushort bid_size => _bid_size.Value;
|
||||
public double ask_price => _ask_price.Value;
|
||||
public ushort ask_size => _ask_size.Value;
|
||||
public ulong volume => _volume.value;
|
||||
public double settlement => _settlement.Value;
|
||||
public double day_change => _day_change.Value;
|
||||
public double session_low => _session_low.Value;
|
||||
public double session_high => _session_high.Value;
|
||||
public int working_bid_volume => _working_bid_volume.value;
|
||||
public int working_ask_volume => _working_ask_volume.value;
|
||||
public string working_bids_text => OrderUtils.order_collection_summary(_order_summarizer.best_working_bid, _order_summarizer.best_working_bid_qty, _order_summarizer.working_bid_qty, security.ContractSpec);
|
||||
public string working_asks_text => OrderUtils.order_collection_summary(_order_summarizer.best_working_ask, _order_summarizer.best_working_ask_qty, _order_summarizer.working_ask_qty, security.ContractSpec);
|
||||
public double working_best_bid => _working_best_bid.value;
|
||||
public double working_best_ask => _working_best_ask.value;
|
||||
public IList<CellAnimation> animations => _animation.get_animations().ToList();
|
||||
public ICommand bid_price_click { get; }
|
||||
public ICommand bid_size_click { get; }
|
||||
public ICommand working_bids_click { get; }
|
||||
public ICommand ask_price_click { get; }
|
||||
public ICommand ask_size_click { get; }
|
||||
public ICommand working_asks_click { get; }
|
||||
public ICommand default_command { get; }
|
||||
#endregion
|
||||
|
||||
public void refresh() {
|
||||
bool dirty = false;
|
||||
if (md.md.get_bbo(ref _bbo_ref, out NativePriceSize b, out NativePriceSize a)) {
|
||||
_bid_price.set(b.price);
|
||||
_bid_size.set(b.size);
|
||||
_ask_price.set(a.price);
|
||||
_ask_size.set(a.size);
|
||||
_inside_bids.on_next_distinct(_bid_price.Value >= _working_best_bid.value, ref dirty);
|
||||
_inside_asks.on_next_distinct(_ask_price.Value <= _working_best_ask.value, ref dirty);
|
||||
}
|
||||
if (md.md.get_last_trade(ref _last_ref, out NativePriceSize ps, out DateTime ts, out ulong v)) {
|
||||
_last_price.set(ps.price);
|
||||
_last_size.on_next_distinct(ps.size, ref dirty);
|
||||
_volume.on_next_distinct(v, ref dirty);
|
||||
}
|
||||
_settlement.set(md.md.settlement_price);
|
||||
_session_low.set(md.md.session_low);
|
||||
_session_high.set(md.md.session_high);
|
||||
_day_change.set(last_price - settlement);
|
||||
if (dirty)
|
||||
invalidated?.Invoke();
|
||||
}
|
||||
|
||||
public bool Equals(Row other) =>
|
||||
other != null &&
|
||||
other.security_key == security_key;
|
||||
|
||||
public override bool Equals(object obj) =>
|
||||
Equals(obj as Row);
|
||||
|
||||
public override int GetHashCode() =>
|
||||
security_key.GetHashCode();
|
||||
|
||||
#region Show Windows
|
||||
void _show_ladder() => _bus.post(SparkTags.ShowLadderTag, md);
|
||||
|
||||
void _show_order_book(MarketViewView.Columns col) {
|
||||
switch (col) {
|
||||
case MarketViewView.Columns.WorkingBids: _show_order_book(Side.Buy); break;
|
||||
case MarketViewView.Columns.WorkingAsks: _show_order_book(Side.Sell); break;
|
||||
}
|
||||
}
|
||||
|
||||
void _show_order_book(Side side) =>
|
||||
_bus.post(SparkTags.ShowOrderBookTag, new bts.shell.OrderBookWindowFactory.OrderBookStartupData(
|
||||
new List<SortingCriteria>(),
|
||||
new bts.shell.OrderBookWindowFactory.FilterStates {
|
||||
statuses = new[] { OrderStatus.Working },
|
||||
sides = new[] { side },
|
||||
security_criteria = new SecurityCriteria(security)
|
||||
}));
|
||||
|
||||
void _show_order_ticket(MarketViewView.Columns col) {
|
||||
var order = _orders_model.factory.order(security);
|
||||
switch (col) {
|
||||
case MarketViewView.Columns.Bid:
|
||||
order.Side = Side.Sell;
|
||||
_bus.post(SparkTags.ShowOrderTicketTag, (order, bid_price, 0u));
|
||||
break;
|
||||
case MarketViewView.Columns.BidSize:
|
||||
order.Side = Side.Sell;
|
||||
_bus.post(SparkTags.ShowOrderTicketTag, (order, bid_price, bid_size));
|
||||
break;
|
||||
case MarketViewView.Columns.Ask:
|
||||
order.Side = Side.Buy;
|
||||
_bus.post(SparkTags.ShowOrderTicketTag, (order, ask_price, 0u));
|
||||
break;
|
||||
case MarketViewView.Columns.AskSize:
|
||||
order.Side = Side.Buy;
|
||||
_bus.post(SparkTags.ShowOrderTicketTag, (order, ask_price, ask_size));
|
||||
break;
|
||||
case MarketViewView.Columns.Last:
|
||||
_bus.post(SparkTags.ShowOrderTicketTag, (order, last_price, 0u));
|
||||
break;
|
||||
case MarketViewView.Columns.LastSize:
|
||||
_bus.post(SparkTags.ShowOrderTicketTag, (order, last_price, last_size));
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Callbacks
|
||||
void _on_orders(ITableUpdateTransform<OrderRecordImmutable, uint> orders) {
|
||||
foreach (var o in orders.removed)
|
||||
_order_summarizer.remove_order(o);
|
||||
foreach (var o in orders.added)
|
||||
_order_summarizer.add_order(o);
|
||||
bool dirty = false;
|
||||
_refresh_orders(ref dirty);
|
||||
if (dirty)
|
||||
invalidated?.Invoke();
|
||||
}
|
||||
|
||||
void _refresh_orders(ref bool dirty) {
|
||||
_position.on_next_distinct(_order_summarizer.position, ref dirty);
|
||||
_working_bid_volume.on_next_distinct(_order_summarizer.working_bid_qty, ref dirty);
|
||||
_working_ask_volume.on_next_distinct(_order_summarizer.working_ask_qty, ref dirty);
|
||||
_working_best_bid.on_next_distinct(_order_summarizer.best_working_bid, ref dirty);
|
||||
_working_best_ask.on_next_distinct(_order_summarizer.best_working_ask, ref dirty);
|
||||
_inside_bids.on_next_distinct(_order_summarizer.best_working_bid >= bid_price, ref dirty);
|
||||
_inside_asks.on_next_distinct(_order_summarizer.best_working_ask <= ask_price, ref dirty);
|
||||
RaisePropertyChanged(nameof(working_bids_text), nameof(working_asks_text));
|
||||
}
|
||||
#endregion
|
||||
|
||||
class MyOrderSummarizer {
|
||||
SortedSetMap<double, OrderRecordImmutable> _bids, _asks;
|
||||
int _best_bid_working_qty, _best_ask_working_qty, _position, _working_bid_qty, _working_ask_qty;
|
||||
|
||||
public MyOrderSummarizer() {
|
||||
_bids = new SortedSetMap<double, OrderRecordImmutable>(
|
||||
OrderDataHelper.CompareUtils.bid_price_comparer,
|
||||
OrderDataHelper.CompareUtils.order_record_id_eq_comparer);
|
||||
_asks = new SortedSetMap<double, OrderRecordImmutable>(
|
||||
OrderDataHelper.CompareUtils.ask_price_comparer,
|
||||
OrderDataHelper.CompareUtils.order_record_id_eq_comparer);
|
||||
}
|
||||
|
||||
// bid
|
||||
public double best_working_bid => _bids.Count > 0 ? _bids.at_index(0).Key : double.NaN;
|
||||
public int best_working_bid_qty => _best_bid_working_qty;
|
||||
public int working_bid_qty => _working_bid_qty;
|
||||
// ask
|
||||
public double best_working_ask => _asks.Count > 0 ? _asks.at_index(0).Key : double.NaN;
|
||||
public int best_working_ask_qty => _best_ask_working_qty;
|
||||
public int working_ask_qty => _working_ask_qty;
|
||||
// pos
|
||||
public int position => _position;
|
||||
|
||||
public void add_order(OrderRecordImmutable o) {
|
||||
// This is a market data form - not an orders form - so just show data for root/non-child orders.
|
||||
if (o.has_parent())
|
||||
return;
|
||||
switch (o.side()) {
|
||||
case Side.Buy:
|
||||
_position += (int)o.filled();
|
||||
if (o.is_active()) {
|
||||
_working_bid_qty += o.working_quantity();
|
||||
_bids.add(o.price(), o);
|
||||
}
|
||||
break;
|
||||
case Side.Sell:
|
||||
_position -= (int)o.filled();
|
||||
if (o.is_active()) {
|
||||
_working_ask_qty += o.working_quantity();
|
||||
_asks.add(o.price(), o);
|
||||
}
|
||||
break;
|
||||
default: return;
|
||||
}
|
||||
_refresh();
|
||||
}
|
||||
|
||||
public void remove_order(OrderRecordImmutable o) {
|
||||
// This is a market data form - not an orders form - so just show data for root/non-child orders.
|
||||
if (o.has_parent())
|
||||
return;
|
||||
switch (o.side()) {
|
||||
case Side.Buy:
|
||||
_position -= (int)o.filled();
|
||||
if (o.is_active()) {
|
||||
_working_bid_qty -= o.working_quantity();
|
||||
_bids.remove(o.price(), o);
|
||||
}
|
||||
break;
|
||||
case Side.Sell:
|
||||
_position += (int)o.filled();
|
||||
if (o.is_active()) {
|
||||
_working_ask_qty -= o.working_quantity();
|
||||
_asks.remove(o.price(), o);
|
||||
}
|
||||
break;
|
||||
default: return;
|
||||
}
|
||||
_refresh();
|
||||
}
|
||||
|
||||
void _refresh() {
|
||||
_best_bid_working_qty = _bids.Count > 0 ? _bids.at_index(0).Sum(o => o.working_quantity()) : 0;
|
||||
_best_ask_working_qty = _asks.Count > 0 ? _asks.at_index(0).Sum(o => o.working_quantity()) : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
using bts.api;
|
||||
using mbts.spark.filters;
|
||||
using mbts.ui;
|
||||
using mbts.ui.utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Media;
|
||||
using System.Reactive.Linq;
|
||||
using static bts.shell.MarketViewWindowFactory;
|
||||
using static mbts.ui.controls.DIYGrid;
|
||||
using static mbts.ui.spark.MarketViewView;
|
||||
|
||||
namespace mbts.spark {
|
||||
partial class MarketViewVM : SecurityMDGrid<MarketViewVM.Row, SecurityMD> {
|
||||
readonly IBus _bus;
|
||||
readonly OrdersModel _orders_model;
|
||||
|
||||
public MarketViewVM(IBus bus, OrdersModel orders_model, IObservable<StartupData> state)
|
||||
: base(RXCollection.Create(state.SelectMany(s => s.security_criteria.subscribe_md(bus)), SecurityDataHelper.EqualityComparer.MDComparer), null) {
|
||||
_bus = bus;
|
||||
_orders_model = orders_model;
|
||||
security_filter = new RegexFilterVM<Row>(r => r.security.ToString(), nameof(Row.security));
|
||||
// Columns
|
||||
const string size_col_header = "Qty", working_col_header = "Working";
|
||||
const double working_orders_col_width = 105;
|
||||
IMultiValueConverter price_converter = new ui.spark.converters.TickDisplayConverter();
|
||||
add_col(Columns.Security, "Security", r => r.security.ToString(), nameof(Row.security), DefaultColumnWidths.Security, security_filter, DataGridFilterKnownTemplates.Regex);
|
||||
add_col(Columns.Volume, "Volume", r => r.volume.ToString(), nameof(Row.volume), 64, volume_filter, DataGridFilterKnownTemplates.ULongMinMax);
|
||||
add_col(Columns.Last, "Last", r => r.format_price(r.last_price), nameof(Row.last_price), DefaultColumnWidths.Price, last_price_filter, DataGridFilterKnownTemplates.DoubleMinMax);
|
||||
add_col(Columns.LastSize, size_col_header, r => r.last_size.ToString(), nameof(Row.last_size), DefaultColumnWidths.Size, last_size_filter, DataGridFilterKnownTemplates.UShortMinMax);
|
||||
add_col(Columns.Position, "Pos", r => r.position.ToString(), nameof(Row.position), DefaultColumnWidths.Size, position_filter, DataGridFilterKnownTemplates.IntMinMax, true);
|
||||
add_hl_working_orders_col(Columns.WorkingBids, working_col_header, nameof(Row.working_bids_text), nameof(Row.working_best_bid), nameof(Row.working_bids_click), working_bid_volume_filter, BTSColors.MarketData.bid_brush);
|
||||
add_hl_size_col(Columns.BidSize, size_col_header, nameof(Row.bid_size), nameof(Row.bid_size_click), bid_size_filter, BTSColors.MarketData.bid_brush);
|
||||
add_hl_price_col(Columns.Bid, "Bid", nameof(Row.bid_price), nameof(Row.bid_price_click), bid_price_filter, BTSColors.header_text_brush, BTSColors.MarketData.bid_brush);
|
||||
add_hl_price_col(Columns.Ask, "Ask", nameof(Row.ask_price), nameof(Row.ask_price_click), ask_price_filter, BTSColors.header_text_brush, BTSColors.MarketData.ask_brush);
|
||||
add_hl_size_col(Columns.AskSize, size_col_header, nameof(Row.ask_size), nameof(Row.ask_size_click), ask_size_filter, BTSColors.MarketData.ask_brush);
|
||||
add_hl_working_orders_col(Columns.WorkingAsks, working_col_header, nameof(Row.working_asks_text), nameof(Row.working_best_ask), nameof(Row.working_asks_click), working_ask_volume_filter, BTSColors.MarketData.ask_brush);
|
||||
add_col(Columns.Settlement, "Settlement", r => r.format_price(r.settlement), nameof(Row.settlement), DefaultColumnWidths.Price, settlement_filter, DataGridFilterKnownTemplates.DoubleMinMax);
|
||||
add_col(Columns.DayChange, "Change", r => r.format_price(r.day_change), nameof(Row.day_change), DefaultColumnWidths.Price, day_change_filter, DataGridFilterKnownTemplates.DoubleMinMax, true);
|
||||
add_col(Columns.SessionLow, "Low", r => r.format_price(r.session_low), nameof(Row.session_low), DefaultColumnWidths.Price, session_low_filter, DataGridFilterKnownTemplates.DoubleMinMax);
|
||||
add_col(Columns.SessionHigh, "High", r => r.format_price(r.session_high), nameof(Row.session_high), DefaultColumnWidths.Price, session_high_filter, DataGridFilterKnownTemplates.DoubleMinMax);
|
||||
add_col(Columns.SecurityKey, "Security Key", r => r.security_key.ToString(), nameof(Row.security_key), DefaultColumnWidths.SecurityKey, security_key_filter, DataGridFilterKnownTemplates.Regex);
|
||||
//
|
||||
void add_col(Columns col_key, string header, Func<Row, string> get_text, string prop, double width, IDataGridColumnFilter filter, string filter_template, bool is_animatable = false) =>
|
||||
columns.Add(new RenderTextColumn<Row, Columns>(col_key, get_text, filter, filter_template) {
|
||||
Header = header,
|
||||
sort_member_path = prop,
|
||||
Width = width,
|
||||
padding = is_animatable ? AnimatableCellPadding : DefaultCellPadding
|
||||
});
|
||||
|
||||
void add_hl_price_col(Columns col_key, string header, string prop, string command_prop, IDataGridColumnFilter filter, Brush foreground, Brush background) =>
|
||||
add_hl_col(col_key, header, price_binding(prop), prop, command_prop, filter, DataGridFilterKnownTemplates.DoubleMinMax, DefaultColumnWidths.Price, foreground, background, SelectionFill);
|
||||
|
||||
void add_hl_size_col(Columns col_key, string header, string prop, string command_prop, IDataGridColumnFilter filter, Brush foreground) =>
|
||||
add_hl_col(col_key, header, new Binding(prop), prop, command_prop, filter, DataGridFilterKnownTemplates.UShortMinMax, DefaultColumnWidths.Size, foreground, null, null);
|
||||
|
||||
void add_hl_working_orders_col(Columns col_key, string header, string text_prop, string sort_prop, string command_prop, IDataGridColumnFilter filter, Brush foreground) =>
|
||||
add_hl_col(col_key, header, new Binding(text_prop), sort_prop, command_prop, filter, DataGridFilterKnownTemplates.IntMinMax, working_orders_col_width, foreground, null, null);
|
||||
|
||||
void add_hl_col(
|
||||
Columns col_key, string header, BindingBase binding, string prop, string command_prop,
|
||||
IDataGridColumnFilter filter, string filter_template, double width, Brush foreground, Brush background, Brush background_overlay) =>
|
||||
columns.Add(new HyperlinkElementColumn<Row, Columns>(
|
||||
col_key, binding, new Binding(command_prop), filter, filter_template) {
|
||||
Header = header,
|
||||
sort_member_path = prop,
|
||||
foreground = foreground,
|
||||
background = background,
|
||||
background_overlay = background_overlay,
|
||||
Width = DefaultColumnWidths.Price
|
||||
});
|
||||
|
||||
BindingBase price_binding(string prop) {
|
||||
var mb = new MultiBinding { Converter = price_converter };
|
||||
mb.Bindings.Add(new Binding(prop) { Mode = BindingMode.OneWay });
|
||||
mb.Bindings.Add(new Binding($"{nameof(Row.security)}.{nameof(SecurityImmutable.ContractSpec)}") { Mode = BindingMode.OneWay });
|
||||
return mb;
|
||||
}
|
||||
//
|
||||
_resources.AddRange(
|
||||
state.ObserveOnDispatcher().Subscribe(s => {
|
||||
using (rows_view.DeferRefresh()) {
|
||||
rows_view.SetSortingCriteria(s.sorting_criteria);
|
||||
var filters = s.filters;
|
||||
if (filters != null) {
|
||||
security_filter.load_state(filters.security);
|
||||
bid_price_filter.load_state(filters.bid_price);
|
||||
bid_size_filter.load_state(filters.bid_size);
|
||||
ask_price_filter.load_state(filters.ask_price);
|
||||
ask_size_filter.load_state(filters.ask_size);
|
||||
last_price_filter.load_state(filters.last_price);
|
||||
last_size_filter.load_state(filters.last_size);
|
||||
day_change_filter.load_state(filters.day_change);
|
||||
settlement_filter.load_state(filters.settlement);
|
||||
session_low_filter.load_state(filters.session_low);
|
||||
session_high_filter.load_state(filters.session_high);
|
||||
position_filter.load_state(filters.position);
|
||||
working_bid_volume_filter.load_state(filters.working_bid_volume);
|
||||
working_ask_volume_filter.load_state(filters.working_ask_volume);
|
||||
volume_filter.load_state(filters.volume);
|
||||
security_key_filter.load_state(filters.security_key);
|
||||
}
|
||||
}
|
||||
}), DataGridFilterHelper.hook_filters(rows_view,
|
||||
security_filter, bid_price_filter, bid_size_filter, ask_price_filter, ask_size_filter, last_price_filter, last_size_filter, day_change_filter, settlement_filter,
|
||||
session_low_filter, session_high_filter, position_filter, working_bid_volume_filter, working_ask_volume_filter, volume_filter, security_key_filter),
|
||||
WorkLoop.Start("MarketView", _refresh)
|
||||
);
|
||||
}
|
||||
|
||||
public ObservableCollection<ColumnBase> columns { get; } = new ObservableCollection<ColumnBase>();
|
||||
|
||||
#region Filters
|
||||
public IDataGridColumnPersistentFilter<Row, string> security_filter { get; }
|
||||
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> bid_price_filter { get; } = new DoubleMinMax<Row>(r => r.bid_price, nameof(Row.bid_price));
|
||||
public IDataGridColumnPersistentFilter<Row, UShortMinMaxState> bid_size_filter { get; } = new UShortMinMax<Row>(r => r.bid_size, nameof(Row.bid_size));
|
||||
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> ask_price_filter { get; } = new DoubleMinMax<Row>(r => r.ask_price, nameof(Row.ask_price));
|
||||
public IDataGridColumnPersistentFilter<Row, UShortMinMaxState> ask_size_filter { get; } = new UShortMinMax<Row>(r => r.ask_size, nameof(Row.ask_size));
|
||||
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> last_price_filter { get; } = new DoubleMinMax<Row>(r => r.last_price, nameof(Row.last_price));
|
||||
public IDataGridColumnPersistentFilter<Row, UShortMinMaxState> last_size_filter { get; } = new UShortMinMax<Row>(r => r.last_size, nameof(Row.last_size));
|
||||
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> day_change_filter { get; } = new DoubleMinMax<Row>(r => r.day_change, nameof(Row.day_change));
|
||||
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> settlement_filter { get; } = new DoubleMinMax<Row>(r => r.settlement, nameof(Row.settlement));
|
||||
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> session_low_filter { get; } = new DoubleMinMax<Row>(r => r.session_low, nameof(Row.session_low));
|
||||
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> session_high_filter { get; } = new DoubleMinMax<Row>(r => r.session_high, nameof(Row.session_high));
|
||||
public IDataGridColumnPersistentFilter<Row, IntMinMaxState> position_filter { get; } = new IntMinMax<Row>(r => r.position, nameof(Row.position));
|
||||
public IDataGridColumnPersistentFilter<Row, IntMinMaxState> working_bid_volume_filter { get; } = new IntMinMax<Row>(r => r.working_bid_volume, nameof(Row.working_bid_volume));
|
||||
public IDataGridColumnPersistentFilter<Row, IntMinMaxState> working_ask_volume_filter { get; } = new IntMinMax<Row>(r => r.working_ask_volume, nameof(Row.working_ask_volume));
|
||||
public IDataGridColumnPersistentFilter<Row, ULongMinMaxState> volume_filter { get; } = new ULongMinMax<Row>(r => r.volume, nameof(Row.volume));
|
||||
public IDataGridColumnPersistentFilter<Row, string> security_key_filter { get; } = new RegexFilterVM<Row>(r => r.security_key.ToString(), nameof(Row.security_key));
|
||||
|
||||
public FilterStates get_filter_states() {
|
||||
return new FilterStates {
|
||||
security = security_filter.get_state(),
|
||||
bid_price = bid_price_filter.get_state(),
|
||||
bid_size = bid_size_filter.get_state(),
|
||||
ask_price = ask_price_filter.get_state(),
|
||||
ask_size = ask_size_filter.get_state(),
|
||||
last_price = last_price_filter.get_state(),
|
||||
last_size = last_size_filter.get_state(),
|
||||
day_change = day_change_filter.get_state(),
|
||||
settlement = settlement_filter.get_state(),
|
||||
session_low = session_low_filter.get_state(),
|
||||
session_high = session_high_filter.get_state(),
|
||||
position = position_filter.get_state(),
|
||||
working_bid_volume = working_bid_volume_filter.get_state(),
|
||||
working_ask_volume = working_ask_volume_filter.get_state(),
|
||||
volume = volume_filter.get_state(),
|
||||
security_key = security_key_filter.get_state()
|
||||
};
|
||||
}
|
||||
#endregion
|
||||
|
||||
protected override Row row_factory(SecurityMD smd) => new Row(_bus, smd, _orders_model);
|
||||
protected override void on_row_removed(Row row) => row.Dispose();
|
||||
protected override IEnumerable<SortingCriteria> get_default_sorting() { yield return new SortingCriteria(nameof(Row.security), true); }
|
||||
|
||||
void _refresh() {
|
||||
foreach (var r in _row_vms) r.refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<UserControl
|
||||
x:Class="mbts.ui.spark.MarketViewView"
|
||||
x:ClassModifier="internal"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:c="clr-namespace:mbts.ui.controls"
|
||||
xmlns:usp="clr-namespace:mbts.ui.spark"
|
||||
FocusManager.IsFocusScope="True"
|
||||
Background="{StaticResource CommonBackground}"
|
||||
>
|
||||
<UserControl.Resources>
|
||||
<ResourceDictionary>
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="/view/Controls/DataGridEx/Filters/Views/FilterTemplates.xaml"/>
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
<AdornerDecorator>
|
||||
<c:DIYGrid
|
||||
x:Name="_grid"
|
||||
Columns="{Binding columns}"
|
||||
CurrentRow="{Binding current_row}"
|
||||
Rows="{Binding rows_view}"
|
||||
>
|
||||
<c:DIYGrid.InputBindings>
|
||||
<MouseBinding MouseAction="LeftDoubleClick" Command="{x:Static c:DIYGrid.DefaultRowCommand}"/>
|
||||
<KeyBinding Key="Return" Command="{x:Static c:DIYGrid.DefaultRowCommand}"/>
|
||||
</c:DIYGrid.InputBindings>
|
||||
<c:DIYGrid.CommandBindings>
|
||||
<CommandBinding
|
||||
Command="{x:Static c:DIYGrid.DefaultRowCommand}"
|
||||
Executed="{x:Static c:DIYGrid.DefaultRowActionExecuted}"
|
||||
CanExecute="{x:Static c:DIYGrid.DefaultRowActionCanExecute}"
|
||||
/>
|
||||
</c:DIYGrid.CommandBindings>
|
||||
<c:DIYGrid.RowTemplate>
|
||||
<DataTemplate>
|
||||
<usp:MarketViewRowView usp:GridAnimation.RowAnimation="{Binding animations}"/>
|
||||
</DataTemplate>
|
||||
</c:DIYGrid.RowTemplate>
|
||||
</c:DIYGrid>
|
||||
</AdornerDecorator>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,23 @@
|
||||
using mbts.spark;
|
||||
using mbts.ui.controls;
|
||||
using System.Linq;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace mbts.ui.spark {
|
||||
/// <summary>
|
||||
/// Interaction logic for MarketSheetsView.xaml
|
||||
/// </summary>
|
||||
partial class MarketViewView : UserControl {
|
||||
public enum Columns { Security, Volume, Last, LastSize, Position, WorkingBids, Bid, BidSize, Ask, AskSize, WorkingAsks, Settlement, DayChange, SessionLow, SessionHigh, SecurityKey }
|
||||
|
||||
public MarketViewView() {
|
||||
InitializeComponent();
|
||||
AdornerHelper.attach_continuously_on_loaded(
|
||||
() => new GridAnimation.DIYGridAnimationAdorner<Columns>(
|
||||
_grid, _grid.descendants_of_type<DIYGridRowsPresenter>().First()),
|
||||
_grid);
|
||||
}
|
||||
}
|
||||
|
||||
class MarketViewRowView : DIYGrid.HighPerformanceRow<MarketViewVM.Row, MarketViewView.Columns> { }
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
using bts.api;
|
||||
using bts.shell;
|
||||
using bts.spark;
|
||||
using mbts.ui;
|
||||
using mbts.ui.spark;
|
||||
using mbts.utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows;
|
||||
|
||||
namespace mbts.spark {
|
||||
class MarketViewWindow : SparkWindow<MarketViewWindowFactory.StartupData>, ISharedWindow {
|
||||
const string _window_type = "MarketView", _thread_id = "MarketView";
|
||||
readonly OrdersModel _orders_model;
|
||||
readonly AllowOnce _init_guard = new AllowOnce("MarketView");
|
||||
MarketViewVM _vm;
|
||||
MarketViewView _view;
|
||||
MarketViewWindowFactory.StartupData _state;
|
||||
IReadOnlyList<SparkCommand> _commands;
|
||||
IDisposable _subscriptions;
|
||||
|
||||
public MarketViewWindow(MarketViewWindowFactory factory, IBus bus, OrdersModel orders_model, MarketViewWindowFactory.StartupData state)
|
||||
: base("Market View", bus, factory, SparkCommands.ShowMarketView.icon) {
|
||||
_orders_model = orders_model;
|
||||
_state = state;
|
||||
Icon.Freeze();
|
||||
}
|
||||
|
||||
event Action<MarketViewWindowFactory.StartupData> _state_changed;
|
||||
|
||||
public override string window_type => _window_type;
|
||||
public override UIElement Content => _view;
|
||||
public override IEnumerable<SparkCommand> Commands => _commands;
|
||||
public override MarketViewWindowFactory.StartupData SaveState => _state = new MarketViewWindowFactory.StartupData(_state.security_criteria, _vm.rows_view.GetSortingCriteria(), _vm.get_filter_states());
|
||||
public override double MinWidth => 1035 + SPARK_MENU_COLLAPSED_WIDTH + LAUNCHER_BUTTON_BORDER_WIDTH;
|
||||
public string thread_id => _thread_id;
|
||||
|
||||
public void thread_init() {
|
||||
_init_guard.check_access();
|
||||
Logger.notnull(_state);
|
||||
var state_src = Observable.FromEvent<Action<MarketViewWindowFactory.StartupData>, MarketViewWindowFactory.StartupData>(cb => _state_changed += cb, cb => _state_changed -= cb).StartWith(_state);
|
||||
_vm = new MarketViewVM(_bus, _orders_model, state_src);
|
||||
_view = new MarketViewView { DataContext = _vm };
|
||||
var update_securities_tag = new SparkTags.SparkTag<SecurityCriteria>("MarketView Callback");
|
||||
var update_securities_cmd = SparkCommand.create("Update Market View", Icon, update_securities_tag);
|
||||
_commands = new List<SparkCommand> {
|
||||
SparkCommand.create("Change Securities", Icons.Admin, SparkTags.ShowAndEditPickMultiple, () => (update_securities_cmd, _state.security_criteria)),
|
||||
SparkCommands.ShowLadders.complete(_vm.selected_security_mds_observable(), smds => smds.Count > 0),
|
||||
SparkCommands.ShowOrderTicketFromSecurity.complete(_vm.current_security_md, md => md.HasValue, ObjectHelper.ValueOrDefault),
|
||||
SparkCommands.ShowFills.complete(_vm.selected_securities_observable(), _ => true,
|
||||
secs => new FillsWindowFactory.StartupData(new FillsWindowFactory.FilterStates {
|
||||
security = secs.Count > 0 ? new SecurityCriteria(secs) : _state.security_criteria
|
||||
})
|
||||
),
|
||||
SparkCommands.ShowTimeAndSales.complete(_vm.selected_securities_observable(), _ => true, secs => secs.Count > 0 ? new SecurityCriteria(secs) : _state.security_criteria),
|
||||
SparkCommands.ShowSyntheticCreate.complete(_vm.selected_securities_observable(), secs => secs.Count > 0 && secs.Count < 3, secs => new SecurityCriteria(secs))
|
||||
};
|
||||
_subscriptions = _bus.subscribe(update_securities_tag).ObserveOnDispatcher().Subscribe(c =>
|
||||
_state_changed?.Invoke(_state = new MarketViewWindowFactory.StartupData(c, _vm.rows_view.GetSortingCriteria(), _vm.get_filter_states())));
|
||||
}
|
||||
|
||||
public override void Dispose() {
|
||||
Disposable.dispose(ref _subscriptions);
|
||||
_vm.Dispose();
|
||||
Commands.OfType<IDisposable>().DisposeAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
using bts.api;
|
||||
using mbts.spark;
|
||||
using mbts.spark.filters;
|
||||
using mbts.ui;
|
||||
using ProtoBuf;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reactive.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace bts.shell {
|
||||
class MarketViewWindowFactory : ShellWindowFactory<MarketViewWindowFactory.StartupData> {
|
||||
readonly IBus _bus;
|
||||
readonly OrdersModel _orders_model;
|
||||
|
||||
public MarketViewWindowFactory(MarketShellModule module, IBus bus, OrdersModel orders_model) : base(module, "MarketView") {
|
||||
_bus = bus;
|
||||
_orders_model = orders_model;
|
||||
_dispose = bus.subscribe(SparkTags.ShowMarketViewTag).ObserveOnDispatcher().Subscribe(_show);
|
||||
}
|
||||
|
||||
public override Task<IShellWindow> load(StartupData state) =>
|
||||
Task.FromResult(_create(state));
|
||||
|
||||
void _show(SecurityCriteria criteria) =>
|
||||
_bus.post(SparkTags.ShowWindow, _create(new StartupData(criteria, new List<SortingCriteria> { new SortingCriteria(nameof(MarketViewVM.Row.security), true) }, null)));
|
||||
|
||||
IShellWindow _create(StartupData state) => new MarketViewWindow(this, _bus, _orders_model, state);
|
||||
|
||||
[ProtoContract]
|
||||
public class StartupData {
|
||||
public const int Version = 1;
|
||||
|
||||
[ProtoMember(1)]
|
||||
public readonly SecurityCriteria security_criteria;
|
||||
[ProtoMember(2)]
|
||||
public readonly List<SortingCriteria> sorting_criteria;
|
||||
[ProtoMember(3)]
|
||||
public readonly FilterStates filters;
|
||||
|
||||
StartupData() { }
|
||||
|
||||
public StartupData(SecurityCriteria security_criteria)
|
||||
: this (security_criteria, new List<SortingCriteria>(), null) { }
|
||||
|
||||
public StartupData(SecurityCriteria security_criteria, List<SortingCriteria> sorting_criteria, FilterStates filters) {
|
||||
this.security_criteria = security_criteria;
|
||||
this.sorting_criteria = sorting_criteria;
|
||||
this.filters = filters;
|
||||
}
|
||||
}
|
||||
|
||||
[ProtoContract]
|
||||
public class FilterStates {
|
||||
[ProtoMember(1)]
|
||||
public string security;
|
||||
[ProtoMember(2)]
|
||||
public DoubleMinMaxState bid_price;
|
||||
[ProtoMember(3)]
|
||||
public UShortMinMaxState bid_size;
|
||||
[ProtoMember(4)]
|
||||
public DoubleMinMaxState ask_price;
|
||||
[ProtoMember(5)]
|
||||
public UShortMinMaxState ask_size;
|
||||
[ProtoMember(6)]
|
||||
public DoubleMinMaxState last_price;
|
||||
[ProtoMember(7)]
|
||||
public UShortMinMaxState last_size;
|
||||
[ProtoMember(8)]
|
||||
public DoubleMinMaxState day_change;
|
||||
[ProtoMember(9)]
|
||||
public DoubleMinMaxState settlement;
|
||||
[ProtoMember(10)]
|
||||
public DoubleMinMaxState session_low;
|
||||
[ProtoMember(11)]
|
||||
public DoubleMinMaxState session_high;
|
||||
[ProtoMember(12)]
|
||||
public IntMinMaxState position;
|
||||
[ProtoMember(13)]
|
||||
public IntMinMaxState working_bid_volume;
|
||||
[ProtoMember(14)]
|
||||
public IntMinMaxState working_ask_volume;
|
||||
[ProtoMember(15)]
|
||||
public ULongMinMaxState volume;
|
||||
[ProtoMember(16)]
|
||||
public string security_key;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
using bts.api;
|
||||
using bts.co2;
|
||||
using mbts.co2;
|
||||
using mbts.collections.extensions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
|
||||
namespace mbts.spark {
|
||||
struct TradeInfo {
|
||||
public readonly SecurityImmutable security;
|
||||
public readonly TradeMessageImmutable trade;
|
||||
|
||||
public TradeInfo(SecurityImmutable security, TradeMessageImmutable trade) {
|
||||
this.security = security;
|
||||
this.trade = trade;
|
||||
}
|
||||
}
|
||||
|
||||
class TimeAndSalesModel {
|
||||
static readonly TimeSpan _poll_interval = TimeSpan.FromSeconds(0.4);
|
||||
|
||||
public TimeAndSalesModel(IBus bus, MDConsumer consumer, SecurityCriteria security_criteria) {
|
||||
trades = security_criteria.subscribe_md_map(bus)
|
||||
.Scan(new Dictionary<ChannelKey, ChannelConsumer>(),
|
||||
(cache, md_map) => {
|
||||
var copy = new Dictionary<ChannelKey, ChannelConsumer>(cache);
|
||||
copy.sync_with_demux(md_map, get_channel_key, get_channel_consumer, update_channel_consumer);
|
||||
return copy;
|
||||
}
|
||||
).Select(cache =>
|
||||
Observable.Interval(_poll_interval)
|
||||
.Select(_ => new List<TradeInfo>(cache.Values.SelectMany(c => c.read_trades())))
|
||||
).SelectMany(_ => _);
|
||||
|
||||
ChannelKey get_channel_key(KeyValuePair<uint, SecurityMD> md_kv) =>
|
||||
new ChannelKey(md_kv.Value.security.Symbol, md_kv.Value.security.security_type(), md_kv.Value.security.Exchange);
|
||||
|
||||
ChannelConsumer get_channel_consumer(IGrouping<ChannelKey, KeyValuePair<uint, SecurityMD>> channel_sec_group) {
|
||||
var key = channel_sec_group.Key;
|
||||
var rv = new ChannelConsumer(consumer.get_channel(key.symbol, key.type, key.exchange));
|
||||
rv.set_securities(channel_sec_group);
|
||||
return rv;
|
||||
}
|
||||
|
||||
void update_channel_consumer(KeyValuePair<ChannelKey, ChannelConsumer> channel_kv, IEnumerable<KeyValuePair<uint, SecurityMD>> security_kvs) =>
|
||||
channel_kv.Value.set_securities(security_kvs);
|
||||
}
|
||||
|
||||
public IObservable<IReadOnlyList<TradeInfo>> trades { get; }
|
||||
|
||||
private class ChannelKey : IEquatable<ChannelKey> {
|
||||
public readonly string symbol;
|
||||
public readonly SecurityType type;
|
||||
public readonly Venue exchange;
|
||||
|
||||
public ChannelKey(string symbol, SecurityType type, Venue exchange) {
|
||||
this.symbol = symbol;
|
||||
this.type = type;
|
||||
this.exchange = exchange;
|
||||
}
|
||||
|
||||
public bool Equals(ChannelKey other) =>
|
||||
other != null &&
|
||||
other.symbol == symbol &&
|
||||
other.type == type &&
|
||||
other.exchange == exchange;
|
||||
|
||||
public override bool Equals(object obj) =>
|
||||
Equals(obj as ChannelKey);
|
||||
|
||||
public override int GetHashCode() =>
|
||||
symbol.GetHashCode() ^
|
||||
type.GetHashCode() ^
|
||||
exchange.GetHashCode();
|
||||
}
|
||||
|
||||
private class ChannelConsumer {
|
||||
readonly MDConsumerChannel _channel;
|
||||
Dictionary<uint, SecurityImmutable> _securities = new Dictionary<uint, SecurityImmutable>();
|
||||
long _cursor = 0;
|
||||
|
||||
public ChannelConsumer(MDConsumerChannel channel) =>
|
||||
_channel = channel;
|
||||
|
||||
public void set_securities(IEnumerable<KeyValuePair<uint, SecurityMD>> securities) =>
|
||||
_securities = securities.ToDictionary(kv => kv.Key, kv => kv.Value.security);
|
||||
|
||||
public IEnumerable<TradeInfo> read_trades() {
|
||||
var copy = _securities;
|
||||
foreach (var tm in _channel.read_trades(ref _cursor)) {
|
||||
if (copy.TryGetValue(tm.Key, out SecurityImmutable sec))
|
||||
yield return new TradeInfo(sec, tm);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
using bts.api;
|
||||
using bts.co2;
|
||||
using mbts.spark.filters;
|
||||
using mbts.ui;
|
||||
using mbts.ui.controls;
|
||||
using mbts.ui.spark;
|
||||
using mbts.ui.utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using static bts.shell.TimeAndSalesWindowFactory;
|
||||
|
||||
namespace mbts.spark {
|
||||
class TimeAndSalesVM : SecurityGrid<TimeAndSalesVM.Row, TradeInfo> {
|
||||
readonly IBus _bus;
|
||||
|
||||
public TimeAndSalesVM(IBus bus, TimeAndSalesModel model, IReadOnlyCollection<SortingCriteria> sorting_criteria, FilterStates filters)
|
||||
: base(RXCollection.CreateBuffer(model.trades, 1000), sorting_criteria) {
|
||||
_bus = bus;
|
||||
show_ladder = DelegateCommandParamObserver.Create(current_row_observable, r => _show_ladder_async(r).ignore(), r => r != null);
|
||||
security_filter = new RegexFilterVM<Row>(r => r.security.ToString(), nameof(Row.security));
|
||||
if (filters != null) {
|
||||
time_filter.load_state(filters.time);
|
||||
security_filter.load_state(filters.security);
|
||||
price_filter.load_state(filters.price);
|
||||
size_filter.load_state(filters.size);
|
||||
trade_key_filter.load_state(filters.trade_key);
|
||||
security_key_filter.load_state(filters.security_key);
|
||||
}
|
||||
// Columns
|
||||
add_column(TimeAndSalesView.Columns.Security, "Security", DIYGrid.DefaultColumnWidths.Security, security_filter, DataGridFilterKnownTemplates.Regex);
|
||||
add_column(TimeAndSalesView.Columns.Time, "Time", DIYGrid.DefaultColumnWidths.Time, time_filter, DataGridFilterKnownTemplates.TimeFilter);
|
||||
add_column(TimeAndSalesView.Columns.Price, "Price", DIYGrid.DefaultColumnWidths.Price, price_filter, DataGridFilterKnownTemplates.DoubleMinMax);
|
||||
add_column(TimeAndSalesView.Columns.Size, "Size", DIYGrid.DefaultColumnWidths.Size, size_filter, DataGridFilterKnownTemplates.UIntMinMax);
|
||||
add_column(TimeAndSalesView.Columns.TradeKey, "Trade Key", DIYGrid.DefaultColumnWidths.TradeKey, trade_key_filter, DataGridFilterKnownTemplates.Regex);
|
||||
add_column(TimeAndSalesView.Columns.SecurityKey, "Security Key", DIYGrid.DefaultColumnWidths.SecurityKey, security_key_filter, DataGridFilterKnownTemplates.Regex);
|
||||
void add_column(TimeAndSalesView.Columns col_key, string header, double width, IDataGridColumnFilter filter, string filter_template) =>
|
||||
columns.Add(new DIYGrid.RenderTextColumn<Row>(r => r[col_key], filter, filter_template) { Header = header, Width = width });
|
||||
//
|
||||
_resources.AddRange(
|
||||
show_ladder,
|
||||
DataGridFilterHelper.hook_filters(
|
||||
rows_view, time_filter, security_filter, price_filter, size_filter, trade_key_filter, security_key_filter
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public ObservableCollection<DIYGrid.ColumnBase> columns { get; } = new ObservableCollection<DIYGrid.ColumnBase>();
|
||||
public DelegateCommandParamObserver<Row> show_ladder { get; }
|
||||
|
||||
#region Filters
|
||||
public IDataGridColumnPersistentFilter<Row, TimeFilterTuple> time_filter { get; } = new TimeFilterVM<Row>(r => r.time, nameof(Row.time));
|
||||
public IDataGridColumnPersistentFilter<Row, string> security_filter { get; }
|
||||
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> price_filter { get; } = new DoubleMinMax<Row>(r => r.price, nameof(Row.price));
|
||||
public IDataGridColumnPersistentFilter<Row, UIntMinMaxState> size_filter { get; } = new UIntMinMax<Row>(r => r.size, nameof(Row.size));
|
||||
public IDataGridColumnPersistentFilter<Row, string> security_key_filter { get; } = new RegexFilterVM<Row>(r => r.security_key.ToString(), nameof(Row.security_key));
|
||||
public IDataGridColumnPersistentFilter<Row, string> trade_key_filter { get; } = new RegexFilterVM<Row>(r => r.trade_key.ToString(), nameof(Row.trade_key));
|
||||
|
||||
public FilterStates get_filter_states() =>
|
||||
new FilterStates {
|
||||
time = time_filter.get_state(),
|
||||
security = security_filter.get_state(),
|
||||
price = price_filter.get_state(),
|
||||
size = size_filter.get_state(),
|
||||
trade_key = trade_key_filter.get_state(),
|
||||
security_key = security_key_filter.get_state()
|
||||
};
|
||||
#endregion
|
||||
|
||||
protected override IEnumerable<SortingCriteria> get_default_sorting() {
|
||||
yield return new SortingCriteria(nameof(Row.time), false);
|
||||
}
|
||||
|
||||
protected override Row row_factory(TradeInfo row_model) =>
|
||||
new Row(this, row_model.security, row_model.trade);
|
||||
|
||||
|
||||
async Task _show_ladder_async(Row row) {
|
||||
var smd_lookup = await SparkUtils.get_security_md_async(_bus, row.security.Id);
|
||||
if (smd_lookup.success) _bus.post(SparkTags.ShowLadderTag, smd_lookup.result);
|
||||
}
|
||||
|
||||
public class Row : SecurityRow, DIYGrid.IRowVM {
|
||||
readonly uint _trade_key;
|
||||
|
||||
readonly string
|
||||
_security_text,
|
||||
_time_text,
|
||||
_price_text,
|
||||
_size_text,
|
||||
_trade_key_text,
|
||||
_security_key_text;
|
||||
|
||||
public Row(TimeAndSalesVM parent, SecurityImmutable security, TradeMessageImmutable trade) : base(security) {
|
||||
_trade_key = trade.Key;
|
||||
time = trade.Time.lldatetime();
|
||||
price = trade.Mantissa * Math.Pow(10, trade.Exponent);
|
||||
size = trade.Size;
|
||||
show_ladder = new DelegateCommand(() => parent._show_ladder_async(this).ignore());
|
||||
_security_text = security.ToString();
|
||||
_time_text = time.ToString("M/d h:mm:ss tt");
|
||||
_price_text = security.ContractSpec.format(price);
|
||||
_size_text = size.ToString();
|
||||
_trade_key_text = _trade_key.ToString();
|
||||
_security_key_text = security_key.ToString();
|
||||
}
|
||||
|
||||
public event Action invalidated;
|
||||
|
||||
public uint trade_key => _trade_key;
|
||||
public DateTime time { get; }
|
||||
public double price { get; }
|
||||
public uint size { get; }
|
||||
public ICommand show_ladder { get; }
|
||||
|
||||
public string this[TimeAndSalesView.Columns col] {
|
||||
get {
|
||||
switch (col) {
|
||||
case TimeAndSalesView.Columns.Security: return _security_text;
|
||||
case TimeAndSalesView.Columns.Time: return _time_text;
|
||||
case TimeAndSalesView.Columns.Price: return _price_text;
|
||||
case TimeAndSalesView.Columns.Size: return _size_text;
|
||||
case TimeAndSalesView.Columns.TradeKey: return _trade_key_text;
|
||||
case TimeAndSalesView.Columns.SecurityKey: return _security_key_text;
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _invalidate() =>
|
||||
invalidated?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<UserControl
|
||||
x:Class="mbts.ui.spark.TimeAndSalesView"
|
||||
x:ClassModifier="internal"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:c="clr-namespace:mbts.ui.controls"
|
||||
xmlns:usp="clr-namespace:mbts.ui.spark"
|
||||
FocusManager.IsFocusScope="True"
|
||||
Background="{StaticResource CommonBackground}"
|
||||
>
|
||||
<UserControl.Resources>
|
||||
<ResourceDictionary>
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="/view/Resources/Converters.xaml"/>
|
||||
<ResourceDictionary Source="/view/Controls/DataGridEx/Filters/Views/FilterTemplates.xaml"/>
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
<AdornerDecorator>
|
||||
<Grid>
|
||||
<c:DIYGrid Columns="{Binding columns}" Rows="{Binding rows_view}" CurrentRow="{Binding current_row}">
|
||||
<c:DIYGrid.InputBindings>
|
||||
<MouseBinding MouseAction="LeftDoubleClick" Command="{x:Static c:DIYGrid.DefaultRowCommand}"/>
|
||||
<KeyBinding Key="Return" Command="{x:Static c:DIYGrid.DefaultRowCommand}"/>
|
||||
</c:DIYGrid.InputBindings>
|
||||
<c:DIYGrid.CommandBindings>
|
||||
<CommandBinding
|
||||
Command="{x:Static c:DIYGrid.DefaultRowCommand}"
|
||||
Executed="{x:Static c:DIYGrid.DefaultRowActionExecuted}"
|
||||
CanExecute="{x:Static c:DIYGrid.DefaultRowActionCanExecute}"
|
||||
/>
|
||||
</c:DIYGrid.CommandBindings>
|
||||
<c:DIYGrid.RowTemplate>
|
||||
<DataTemplate>
|
||||
<usp:TimeAndSalesRowView/>
|
||||
</DataTemplate>
|
||||
</c:DIYGrid.RowTemplate>
|
||||
</c:DIYGrid>
|
||||
</Grid>
|
||||
</AdornerDecorator>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,17 @@
|
||||
using mbts.spark;
|
||||
using mbts.ui.controls;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace mbts.ui.spark {
|
||||
/// <summary>
|
||||
/// Interaction logic for TimeAndSalesView.xaml
|
||||
/// </summary>
|
||||
partial class TimeAndSalesView : UserControl {
|
||||
public enum Columns { Time, Security, Price, Size, OrderType, TradeKey, SecurityKey }
|
||||
|
||||
public TimeAndSalesView() =>
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
class TimeAndSalesRowView : DIYGrid.HighPerformanceRow<TimeAndSalesVM.Row, TimeAndSalesView.Columns> { }
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
using bts.api;
|
||||
using bts.shell;
|
||||
using bts.spark;
|
||||
using mbts.co2;
|
||||
using mbts.ui;
|
||||
using mbts.ui.spark;
|
||||
using mbts.utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
using static bts.shell.TimeAndSalesWindowFactory;
|
||||
|
||||
namespace mbts.spark {
|
||||
class TimeAndSalesWindow : SparkWindow<StartupData>, ISlowWindow {
|
||||
const string _window_type = "TimeAndSales";
|
||||
readonly MDConsumer _consumer;
|
||||
readonly TimeAndSalesWindowFactory _factory;
|
||||
SingleValuePump<TimeAndSalesVM> _vm;
|
||||
StartupData _state;
|
||||
TimeAndSalesView _view;
|
||||
SparkCommand[] _commands;
|
||||
IDisposable _subscriptions;
|
||||
|
||||
public TimeAndSalesWindow(TimeAndSalesWindowFactory factory, IBus bus, MDConsumer consumer, StartupData state, ImageSource icon)
|
||||
: base("Time And Sales", bus, factory, SparkCommands.ShowTimeAndSales.icon) {
|
||||
Logger.assert(state != null);
|
||||
_consumer = consumer;
|
||||
_factory = factory;
|
||||
_state = state;
|
||||
Icon.Freeze();
|
||||
}
|
||||
|
||||
public override string window_type => _window_type;
|
||||
public override IEnumerable<SparkCommand> Commands => _commands;
|
||||
public override UIElement Content => _view;
|
||||
public override double MinWidth => 444 + SPARK_MENU_COLLAPSED_WIDTH + LAUNCHER_BUTTON_BORDER_WIDTH;
|
||||
public override StartupData SaveState => _state = new StartupData(_state.security_criteria, _vm.value.rows_view.GetSortingCriteria(), _vm.value.get_filter_states());
|
||||
|
||||
public override void Dispose() =>
|
||||
_dispose_resources();
|
||||
|
||||
public void thread_init() {
|
||||
_dispose_resources();
|
||||
_vm = new SingleValuePump<TimeAndSalesVM>();
|
||||
var update_securities_tag = new SparkTags.SparkTag<SecurityCriteria>("TimeAndSales Callback");
|
||||
var update_securities_cmd = SparkCommand.create("Update Time and Sales", Icon, update_securities_tag);
|
||||
var current_smd_source = _vm.observable.SelectMany(vm => vm.current_security_md_observable(_bus)).ObserveOnDispatcher();
|
||||
var selected_secs_source = _vm.observable.SelectMany(vm => vm.selected_securities_observable()).ObserveOnDispatcher();
|
||||
_commands = new SparkCommand[] {
|
||||
SparkCommand.create("Change Securities", Icons.Admin, SparkTags.ShowAndEditPickMultiple, () => (update_securities_cmd, _state.security_criteria)),
|
||||
SparkCommands.ShowLadder.complete(current_smd_source, md => md.HasValue, ObjectHelper.ValueOrDefault),
|
||||
SparkCommands.ShowOrderTicketFromSecurity.complete(current_smd_source, md => md.HasValue, ObjectHelper.ValueOrDefault),
|
||||
SparkCommands.ShowFills.complete(selected_secs_source, always_true, get_fills_startup_data),
|
||||
SparkCommands.ShowMarketView.complete(selected_secs_source, always_true, secs => secs.Count > 0 ? new SecurityCriteria(secs) : _state.security_criteria)
|
||||
};
|
||||
_subscriptions = _bus.subscribe(update_securities_tag).ObserveOnDispatcher().Subscribe(update_criteria);
|
||||
_initialize();
|
||||
|
||||
bool always_true<T>(T _) => true;
|
||||
FillsWindowFactory.StartupData get_fills_startup_data(IReadOnlyList<SecurityImmutable> secs) =>
|
||||
new FillsWindowFactory.StartupData(new FillsWindowFactory.FilterStates {
|
||||
security = secs.Count > 0 ? new SecurityCriteria(secs) : _state.security_criteria
|
||||
});
|
||||
void update_criteria(SecurityCriteria c) {
|
||||
_state = new StartupData(c, _vm.value.rows_view.GetSortingCriteria(), _vm.value.get_filter_states());
|
||||
_initialize();
|
||||
}
|
||||
}
|
||||
|
||||
void _dispose_resources() {
|
||||
Disposable.dispose(ref _subscriptions);
|
||||
Disposable.dispose(ref _vm);
|
||||
if (_commands != null) {
|
||||
_commands.OfType<IDisposable>().DisposeAll();
|
||||
_commands = null;
|
||||
}
|
||||
}
|
||||
|
||||
void _initialize() {
|
||||
var model = new TimeAndSalesModel(_bus, _consumer, _state.security_criteria);
|
||||
_vm.value = new TimeAndSalesVM(_bus, model, _state.sorting_criteria, _state.filters);
|
||||
if (_view == null)
|
||||
_view = new TimeAndSalesView();
|
||||
_view.DataContext = _vm.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
using bts.api;
|
||||
using bts.spark;
|
||||
using mbts;
|
||||
using mbts.co2;
|
||||
using mbts.spark;
|
||||
using mbts.spark.filters;
|
||||
using mbts.ui;
|
||||
using ProtoBuf;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reactive.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace bts.shell {
|
||||
class TimeAndSalesWindowFactory : ShellWindowFactory<TimeAndSalesWindowFactory.StartupData> {
|
||||
readonly IBus _bus;
|
||||
readonly MDConsumer _consumer;
|
||||
IReadOnlyDictionary<uint, SecurityMD> _securities = new Dictionary<uint, SecurityMD>();
|
||||
|
||||
public TimeAndSalesWindowFactory(IShellModule module, IBus bus, MDConsumer consumer) : base(module, "TimeAndSales") {
|
||||
_bus = bus;
|
||||
_consumer = consumer;
|
||||
|
||||
_dispose = Disposable.Create(
|
||||
bus.subscribe(SparkTags.SecuritiesTag).Subscribe(s => _securities = s),
|
||||
bus.subscribe(SparkTags.ShowTimeAndSalesTag).ObserveOnDispatcher().Subscribe(show)
|
||||
);
|
||||
}
|
||||
|
||||
public override Task<IShellWindow> load(StartupData state) =>
|
||||
Task.FromResult<IShellWindow>(new TimeAndSalesWindow(this, _bus, _consumer, state, SparkCommands.PickTimeAndSales.icon));
|
||||
|
||||
public async void show(SecurityCriteria criteria) {
|
||||
var w = await load(new StartupData(criteria));
|
||||
_bus.post(SparkTags.ShowWindow, w);
|
||||
}
|
||||
|
||||
[ProtoContract]
|
||||
public class StartupData {
|
||||
[ProtoMember(1)]
|
||||
public readonly SecurityCriteria security_criteria;
|
||||
[ProtoMember(2)]
|
||||
public readonly List<SortingCriteria> sorting_criteria;
|
||||
[ProtoMember(3)]
|
||||
public FilterStates filters;
|
||||
|
||||
StartupData() { }//for ptorobuf
|
||||
|
||||
public StartupData(SecurityCriteria security_criteria)
|
||||
: this (security_criteria, new List<SortingCriteria>(), null) { }
|
||||
|
||||
public StartupData(SecurityCriteria security_criteria, List<SortingCriteria> sorting_criteria, FilterStates filters) {
|
||||
this.security_criteria = security_criteria;
|
||||
this.sorting_criteria = sorting_criteria;
|
||||
this.filters = filters;
|
||||
}
|
||||
}
|
||||
|
||||
[ProtoContract]
|
||||
public class FilterStates {
|
||||
[ProtoMember(1)]
|
||||
public TimeFilterTuple time;
|
||||
[ProtoMember(2)]
|
||||
public string security;
|
||||
[ProtoMember(3)]
|
||||
public DoubleMinMaxState price;
|
||||
[ProtoMember(4)]
|
||||
public UIntMinMaxState size;
|
||||
[ProtoMember(5)]
|
||||
public string trade_key;
|
||||
[ProtoMember(6)]
|
||||
public string security_key;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
using mbts;
|
||||
using mbts.ui;
|
||||
using mbts.ui.shell;
|
||||
using mbts.spark;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using bts.spark;
|
||||
using System.IO;
|
||||
using System.Windows.Media;
|
||||
using bts.api;
|
||||
using System.ComponentModel.Composition;
|
||||
|
||||
|
||||
namespace bts.ui {
|
||||
[Export(typeof(IShellModule))]
|
||||
class SettingsShellModule : IShellModule {
|
||||
readonly IBus _bus;
|
||||
IDisposable _dispose;
|
||||
|
||||
WorkspacesModel ws_model;
|
||||
|
||||
[ImportingConstructor]
|
||||
public SettingsShellModule(IBus bus, WorkspacesModel ws) {
|
||||
// todo: settings dialog
|
||||
ws_model = ws;
|
||||
_dispose = bus.subscribe(SparkTags.ShowWorkspaces).Subscribe(_ => show_workspaces_dialog());
|
||||
|
||||
_bus = bus;
|
||||
}
|
||||
public ImageSource icon => Icons.Admin;
|
||||
|
||||
public string name => "Settings";
|
||||
|
||||
public int priority => 40;
|
||||
|
||||
public IEnumerable<SparkCommand> actions => new []{
|
||||
SparkCommands.ShowWorkspaces
|
||||
//SparkCommands.ShowSettings
|
||||
};
|
||||
|
||||
public Task<IShellWindow> create(Stream load_stream) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void show_workspaces_dialog()
|
||||
{
|
||||
WorkspacesDialogView ws_dialog = new WorkspacesDialogView(ws_model);
|
||||
ws_dialog.Show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void Dispose() {
|
||||
Disposable.dispose(ref _dispose);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,436 @@
|
||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:sp="clr-namespace:bts.spark;assembly=spark_api"
|
||||
xmlns:msp="clr-namespace:mbts.spark"
|
||||
xmlns:u="clr-namespace:mbts.ui"
|
||||
xmlns:c="clr-namespace:mbts.ui.controls"
|
||||
xmlns:cv="clr-namespace:mbts.ui.converters"
|
||||
xmlns:usp="clr-namespace:mbts.ui.spark"
|
||||
xmlns:sys="clr-namespace:System;assembly=mscorlib">
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="/view/Resources/Converters.xaml"/>
|
||||
<ResourceDictionary Source="/view/Resources/ComboBoxes.xaml"/>
|
||||
<ResourceDictionary Source="/view/Resources/DataGrid.xaml"/>
|
||||
<ResourceDictionary Source="/view/Resources/DataTemplates.xaml"/>
|
||||
<ResourceDictionary Source="/view/Controls/Popup/PopupControl.xaml"/>
|
||||
<ResourceDictionary Source="/Modules/Spreader/ParameterSectionView.xaml"/>
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
<sys:Double x:Key="GroupLevelIndent">18</sys:Double>
|
||||
<sys:Double x:Key="RowHeaderWidth">285</sys:Double>
|
||||
<sys:Double x:Key="RowHeight">16</sys:Double>
|
||||
<sys:Double x:Key="NegativeRowHeight">-16</sys:Double>
|
||||
<sys:Double x:Key="ItemsHostCanBeDisabledCollapsedHeight">15</sys:Double>
|
||||
<Thickness
|
||||
x:Key="GroupLevelMargin"
|
||||
Left="{StaticResource GroupLevelIndent}"
|
||||
/>
|
||||
<Thickness
|
||||
x:Key="GroupContentAlignedWithHeaderMargin"
|
||||
Left="{StaticResource GroupLevelIndent}"
|
||||
Top="{StaticResource NegativeRowHeight}"
|
||||
/>
|
||||
<cv:SyntheticPriceCalcDisplayTextConverter x:Key="SyntheticPriceCalcDisplayConverter"/>
|
||||
<cv:TickFactorsTextConverter x:Key="TickFactorsTextConverter"/>
|
||||
<usp:RowHeaderGroupIndentConverter
|
||||
x:Key="RowHeaderGroupIndentConverter"
|
||||
Indent="{StaticResource GroupLevelIndent}"
|
||||
/>
|
||||
<usp:RowHeaderGroupIndentConverter
|
||||
x:Key="ReverseRowHeaderGroupIndentConverter"
|
||||
Indent="{StaticResource GroupLevelIndent}"
|
||||
Reverse="True"
|
||||
/>
|
||||
<usp:RowGroupExpanderWidthConverter
|
||||
x:Key="RowGroupExpanderWidthConverter"
|
||||
Indent="{StaticResource GroupLevelIndent}"
|
||||
Offset="{StaticResource RowHeight}"
|
||||
RowHeaderWidth="{StaticResource RowHeaderWidth}"
|
||||
/>
|
||||
<usp:DataGridParameterCellTemplateConverter x:Key="ParameterCellTemplateConverter">
|
||||
<usp:DataGridParameterCellTemplateConverter.BooleanTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox HorizontalAlignment="Left" IsChecked="{Binding value}"/>
|
||||
</DataTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter.BooleanTemplate>
|
||||
<usp:DataGridParameterCellTemplateConverter.DoubleTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding value}"/>
|
||||
</DataTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter.DoubleTemplate>
|
||||
<usp:DataGridParameterCellTemplateConverter.IntTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding value}"/>
|
||||
</DataTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter.IntTemplate>
|
||||
<usp:DataGridParameterCellTemplateConverter.UIntTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding value}"/>
|
||||
</DataTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter.UIntTemplate>
|
||||
<usp:DataGridParameterCellTemplateConverter.QuantityMeasureTemplate>
|
||||
<DataTemplate>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="3*"/>
|
||||
<ColumnDefinition Width="2*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock x:Name="AbsoluteLabel" Text="{x:Static cv:QuantityMeasureCaseDisplayTextConverter.ABSOLUTE_TEXT}" FontSize="10" FontStyle="Italic"/>
|
||||
<TextBlock x:Name="RatioLabel" Text="{x:Static cv:QuantityMeasureCaseDisplayTextConverter.RATIO_TEXT}" FontSize="10" FontStyle="Italic"/>
|
||||
<TextBlock x:Name="AbsoluteValue" Grid.Column="1" HorizontalAlignment="Left" Text="{Binding absolute}"/>
|
||||
<TextBlock x:Name="RatioValue" Grid.Column="1" HorizontalAlignment="Left" Text="{Binding ratio}"/>
|
||||
</Grid>
|
||||
<DataTemplate.Triggers>
|
||||
<DataTrigger Binding="{Binding quantity_case}" Value="{u:Enum absolute, Type={u:Nested sp:QuantityMeasure.QuantityOneofCase}}">
|
||||
<Setter Property="Visibility" TargetName="AbsoluteLabel" Value="Visible"/>
|
||||
<Setter Property="Visibility" TargetName="AbsoluteValue" Value="Visible"/>
|
||||
<Setter Property="Visibility" TargetName="RatioLabel" Value="Collapsed"/>
|
||||
<Setter Property="Visibility" TargetName="RatioValue" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding quantity_case}" Value="{u:Enum Ratio, Type={u:Nested sp:QuantityMeasure.QuantityOneofCase}}">
|
||||
<Setter Property="Visibility" TargetName="RatioLabel" Value="Visible"/>
|
||||
<Setter Property="Visibility" TargetName="RatioValue" Value="Visible"/>
|
||||
<Setter Property="Visibility" TargetName="AbsoluteLabel" Value="Collapsed"/>
|
||||
<Setter Property="Visibility" TargetName="AbsoluteValue" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
</DataTemplate.Triggers>
|
||||
</DataTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter.QuantityMeasureTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter>
|
||||
<usp:DataGridParameterCellTemplateConverter x:Key="ParameterCellEditingTemplateConverter">
|
||||
<usp:DataGridParameterCellTemplateConverter.BooleanTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox HorizontalAlignment="Left" IsChecked="{Binding value}" IsEnabled="{Binding enabled}"/>
|
||||
</DataTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter.BooleanTemplate>
|
||||
<usp:DataGridParameterCellTemplateConverter.DoubleTemplate>
|
||||
<DataTemplate>
|
||||
<c:TickUpDownDouble Value="{Binding value}" IsEnabled="{Binding enabled}" Increment="{Binding tick_increment, FallbackValue={u:Double 1}}"/>
|
||||
</DataTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter.DoubleTemplate>
|
||||
<usp:DataGridParameterCellTemplateConverter.IntTemplate>
|
||||
<DataTemplate>
|
||||
<c:TickUpDownInt Value="{Binding value}" IsEnabled="{Binding enabled}"/>
|
||||
</DataTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter.IntTemplate>
|
||||
<usp:DataGridParameterCellTemplateConverter.UIntTemplate>
|
||||
<DataTemplate>
|
||||
<c:TickUpDownUInt Value="{Binding value}" IsEnabled="{Binding enabled}"/>
|
||||
</DataTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter.UIntTemplate>
|
||||
<usp:DataGridParameterCellTemplateConverter.QuantityMeasureTemplate>
|
||||
<DataTemplate>
|
||||
<Grid IsEnabled="{Binding enabled}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="3*"/>
|
||||
<ColumnDefinition Width="2*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<ComboBox
|
||||
VerticalAlignment="Center" Margin="-2,0,0,0" Padding="3,3,0,3"
|
||||
ItemsSource="{u:EnumBindingSource {u:Nested sp:QuantityMeasure.QuantityOneofCase}, Except=None}"
|
||||
SelectedItem="{Binding quantity_case}"
|
||||
>
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Converter={StaticResource QuantityMeasureCaseDisplayConverter}}" FontSize="10" FontStyle="Italic"/>
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
<c:TickUpDownDouble x:Name="AbsoluteTickUpDown" Grid.Column="1" HorizontalAlignment="Stretch" Margin="0,0,-2,0" Value="{Binding absolute}"/>
|
||||
<c:TickUpDownDouble x:Name="RatioTickUpDown" Grid.Column="1" HorizontalAlignment="Stretch" Value="{Binding ratio}"/>
|
||||
</Grid>
|
||||
<DataTemplate.Triggers>
|
||||
<DataTrigger Binding="{Binding quantity_case}" Value="{u:Enum absolute, Type={u:Nested sp:QuantityMeasure.QuantityOneofCase}}">
|
||||
<Setter Property="Visibility" TargetName="AbsoluteTickUpDown" Value="Visible"/>
|
||||
<Setter Property="Visibility" TargetName="RatioTickUpDown" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding quantity_case}" Value="{u:Enum Ratio, Type={u:Nested sp:QuantityMeasure.QuantityOneofCase}}">
|
||||
<Setter Property="Visibility" TargetName="RatioTickUpDown" Value="Visible"/>
|
||||
<Setter Property="Visibility" TargetName="AbsoluteTickUpDown" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
</DataTemplate.Triggers>
|
||||
</DataTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter.QuantityMeasureTemplate>
|
||||
</usp:DataGridParameterCellTemplateConverter>
|
||||
<Style x:Key="ExpanderToggleButton" TargetType="ToggleButton">
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="ToggleButton">
|
||||
<Grid Background="Transparent">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="12" />
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Path
|
||||
x:Name="arrow"
|
||||
Data="M0,0L3.5,3.5 0,7"
|
||||
HorizontalAlignment="Center"
|
||||
Margin="0,5,0,0"
|
||||
SnapsToDevicePixels="False"
|
||||
Stroke="#77333333"
|
||||
StrokeThickness="2"
|
||||
VerticalAlignment="Top"
|
||||
/>
|
||||
<ContentPresenter
|
||||
Grid.Column="1"
|
||||
ContentSource="{TemplateBinding Content}"
|
||||
Margin="3,0,0,0"
|
||||
/>
|
||||
</Grid>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsChecked" Value="True">
|
||||
<Setter Property="Data" TargetName="arrow" Value="M0,0L3.5,3.5 7,0"/>
|
||||
</Trigger>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Setter Property="Stroke" TargetName="arrow" Value="Black"/>
|
||||
</Trigger>
|
||||
<Trigger Property="IsPressed" Value="True">
|
||||
<Setter Property="Stroke" TargetName="arrow" Value="Black"/>
|
||||
</Trigger>
|
||||
<Trigger Property="IsEnabled" Value="False">
|
||||
<Setter Property="Stroke" TargetName="arrow" Value="#FF707070"/>
|
||||
<Setter Property="Foreground" Value="Gray"/>
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
<ControlTemplate x:Key="GroupItemTemplate" TargetType="GroupItem">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
<ToggleButton
|
||||
x:Name="ExpanderToggle"
|
||||
HorizontalAlignment="Left"
|
||||
IsChecked="True"
|
||||
Style="{StaticResource ExpanderToggleButton}"
|
||||
Width="{Binding Name.level, Converter={StaticResource RowGroupExpanderWidthConverter}}"
|
||||
Panel.ZIndex="1"
|
||||
>
|
||||
<usp:ParameterSectionView SectionTitle="{Binding Name.name}" Description="{Binding Name.description}"/>
|
||||
</ToggleButton>
|
||||
<ItemsPresenter x:Name="ItemsHost" Grid.Row="1" Margin="{StaticResource GroupLevelMargin}"/>
|
||||
</Grid>
|
||||
<ControlTemplate.Triggers>
|
||||
<DataTrigger Binding="{Binding Name}" Value="{x:Null}">
|
||||
<Setter Property="Visibility" TargetName="ExpanderToggle" Value="Collapsed"/>
|
||||
<Setter Property="Margin" TargetName="ItemsHost" Value="0"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding Name.can_be_disabled}" Value="{u:True}">
|
||||
<Setter Property="Margin" TargetName="ItemsHost" Value="{StaticResource GroupContentAlignedWithHeaderMargin}"/>
|
||||
</DataTrigger>
|
||||
<MultiDataTrigger>
|
||||
<MultiDataTrigger.Conditions>
|
||||
<Condition Binding="{Binding IsChecked, ElementName=ExpanderToggle}" Value="False"/>
|
||||
<Condition Binding="{Binding Name.can_be_disabled}" Value="{u:True}"/>
|
||||
</MultiDataTrigger.Conditions>
|
||||
<Setter Property="Height" TargetName="ItemsHost" Value="{StaticResource ItemsHostCanBeDisabledCollapsedHeight}"/>
|
||||
</MultiDataTrigger>
|
||||
<MultiDataTrigger>
|
||||
<MultiDataTrigger.Conditions>
|
||||
<Condition Binding="{Binding IsChecked, ElementName=ExpanderToggle}" Value="False"/>
|
||||
<Condition Binding="{Binding Name.can_be_disabled}" Value="{u:False}"/>
|
||||
</MultiDataTrigger.Conditions>
|
||||
<Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
|
||||
</MultiDataTrigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
<Style x:Key="GroupItemStyle" TargetType="GroupItem">
|
||||
<Setter Property="Template" Value="{StaticResource GroupItemTemplate}"/>
|
||||
</Style>
|
||||
<ControlTemplate x:Key="DataGridRowTemplate" TargetType="DataGridRow">
|
||||
<Border
|
||||
x:Name="DGR_Border"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}"
|
||||
Background="{TemplateBinding Background}"
|
||||
SnapsToDevicePixels="True"
|
||||
>
|
||||
<SelectiveScrollingGrid Margin="{Binding section_count, Converter={StaticResource ReverseRowHeaderGroupIndentConverter}}">
|
||||
<SelectiveScrollingGrid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition/>
|
||||
</SelectiveScrollingGrid.ColumnDefinitions>
|
||||
<DataGridRowHeader
|
||||
Background="Transparent"
|
||||
Padding="{Binding section_count, Converter={StaticResource RowHeaderGroupIndentConverter}}"
|
||||
Content="{Binding display_name}"
|
||||
SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"
|
||||
Visibility="{Binding
|
||||
HeadersVisibility,
|
||||
ConverterParameter={x:Static DataGridHeadersVisibility.Row},
|
||||
Converter={x:Static DataGrid.HeadersVisibilityConverter},
|
||||
RelativeSource={RelativeSource AncestorType=DataGrid}}"
|
||||
/>
|
||||
<DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
|
||||
</SelectiveScrollingGrid>
|
||||
</Border>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="usp:ExecutionStrategyEditor.RowHasErrors" Value="True">
|
||||
<Setter Property="BorderBrush" Value="Red"/>
|
||||
<Setter Property="BorderThickness" Value="1"/>
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
<Style x:Key="DataGridRowStyle" TargetType="DataGridRow">
|
||||
<Setter Property="BorderThickness" Value="1,0"/>
|
||||
<Setter Property="BorderBrush" Value="Transparent"/>
|
||||
<Setter Property="Template" Value="{StaticResource DataGridRowTemplate}"/>
|
||||
<Setter Property="usp:ExecutionStrategyEditor.RowHasErrors" Value="{Binding has_errors}"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding read_only}" Value="True">
|
||||
<Setter Property="TextElement.Foreground" Value="{u:BTSColor UI.input_disabled_text_dark}"/>
|
||||
<Setter Property="ToolTip">
|
||||
<Setter.Value>
|
||||
<TextBlock Foreground="Black" Text="{Binding display_name, StringFormat='{}Can\'t change \'{0}\' after creation'}"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding display_name}" Value="{x:Static sys:String.Empty}">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
<DataGridTextColumn x:Key="AddColumnPlaceholder" x:Shared="False" IsReadOnly="True">
|
||||
<DataGridTextColumn.Header>
|
||||
<c:PopupControl
|
||||
ShowExpanderArrow="False" PopupPlacement="Right" Header="Add Leg" Padding="6,0"
|
||||
Background="{StaticResource Button.Static.BackgroundBrush}"
|
||||
IsOpen="{Binding IsNewLegPopupOpen, RelativeSource={RelativeSource AncestorType=usp:ExecutionStrategyEditor}, Mode=TwoWay}"
|
||||
IsEnabled="{Binding CanUserAddNewLeg, RelativeSource={RelativeSource AncestorType=usp:ExecutionStrategyEditor}}"
|
||||
>
|
||||
<msp:ContractPickerView
|
||||
CloseOnOK="False" CloseOnCancel="False"
|
||||
DataContext="{Binding ContractPickerModel, RelativeSource={RelativeSource AncestorType=usp:ExecutionStrategyEditor}}"
|
||||
/>
|
||||
</c:PopupControl>
|
||||
</DataGridTextColumn.Header>
|
||||
</DataGridTextColumn>
|
||||
<DataTemplate x:Key="RemovableColumnHeaderTemplate">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Button
|
||||
Command="{Binding RemoveLegCommand, RelativeSource={RelativeSource AncestorType=usp:ExecutionStrategyEditor}}"
|
||||
CommandParameter="{Binding}" Style="{StaticResource RoundCloseButton}"
|
||||
/>
|
||||
<TextBlock Grid.Column="1" Margin="4,0,0,0" Text="{Binding Converter={StaticResource SecurityTextConverter}}"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
|
||||
<ControlTemplate x:Key="ExecutionStrategyEditorTemplate" TargetType="usp:ExecutionStrategyEditor">
|
||||
<Border
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}"
|
||||
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
|
||||
VerticalAlignment="{TemplateBinding VerticalAlignment}"
|
||||
Width="{TemplateBinding Width}"
|
||||
Height="{TemplateBinding Height}"
|
||||
Padding="{TemplateBinding Padding}"
|
||||
>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="7*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="3*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="5*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock VerticalAlignment="Center" IsEnabled="{TemplateBinding IsNew}">Name</TextBlock>
|
||||
<TextBox
|
||||
x:Name="PART_Name_TextBox" Grid.Column="1" Margin="6,0,0,0" HorizontalAlignment="Stretch" IsEnabled="{TemplateBinding IsNew}"
|
||||
Text="{Binding SyntheticName, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, ValidatesOnDataErrors=True, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}"
|
||||
>
|
||||
<u:Behavior.BindingUpdateGroups>
|
||||
<u:BindingUpdateGroupCollection>
|
||||
<u:BindingUpdateGroup Source="{Binding DataContext, Source={u:DirectReference PART_Name_TextBox}}" Target="{Binding Source={u:DirectReference PART_Name_TextBox}}">
|
||||
<u:PropertyTuple PropertyName="Text" Type="{x:Type TextBox}"/>
|
||||
</u:BindingUpdateGroup>
|
||||
</u:BindingUpdateGroupCollection>
|
||||
</u:Behavior.BindingUpdateGroups>
|
||||
</TextBox>
|
||||
<TextBlock
|
||||
Grid.Column="2" VerticalAlignment="Center" Margin="6,0,0,0" Text="Ticks" IsEnabled="{TemplateBinding IsNew}"
|
||||
Visibility="{Binding LegTuples.Count, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource IntNotZeroVisibilityConverter}}"
|
||||
/>
|
||||
<ComboBox
|
||||
x:Name="PART_Tick_ComboBox" Grid.Column="3" Margin="6,0,0,0" IsEnabled="{TemplateBinding IsNew}" HorizontalAlignment="Stretch"
|
||||
ItemsSource="{TemplateBinding AvailableTickFactors}" SelectedItem="{Binding TickFactors, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
Visibility="{Binding LegTuples.Count, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource IntNotZeroVisibilityConverter}}"
|
||||
>
|
||||
<ComboBox.GroupStyle>
|
||||
<GroupStyle ContainerStyle="{StaticResource ComboBox.DelineatedGroupContainerStyle}"/>
|
||||
</ComboBox.GroupStyle>
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Converter={StaticResource TickFactorsTextConverter}}"/>
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
<TextBlock Grid.Column="4" VerticalAlignment="Center" Margin="6,0,0,0">Pricing</TextBlock>
|
||||
<ComboBox
|
||||
Grid.Column="5" Margin="6,0,0,0" IsEnabled="False"
|
||||
ItemsSource="{x:Static usp:ExecutionStrategyEditor.PriceCalcItems}" SelectedItem="{Binding PriceCalc, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
>
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Converter={StaticResource SyntheticPriceCalcDisplayConverter}}"/>
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
<c:HelpButton Grid.Column="6" Margin="3,0,0,0"/>
|
||||
</Grid>
|
||||
<c:DataGridEx
|
||||
x:Name="PART_DataGrid"
|
||||
Grid.Row="1"
|
||||
Margin="0,4,0,0"
|
||||
BorderBrush="Transparent"
|
||||
BorderThickness="0"
|
||||
GridLinesVisibility="None"
|
||||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
VerticalAlignment="{TemplateBinding VerticalAlignment}"
|
||||
HeadersVisibility="All"
|
||||
RowHeaderWidth="{StaticResource RowHeaderWidth}"
|
||||
RowStyle="{StaticResource DataGridRowStyle}"
|
||||
ItemsSource="{Binding ParameterRowsView, RelativeSource={RelativeSource TemplatedParent}}"
|
||||
>
|
||||
<DataGrid.Resources>
|
||||
<Style x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}" TargetType="Button">
|
||||
<Setter Property="IsEnabled" Value="False"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="Button">
|
||||
<Rectangle Fill="{u:BTSColor header}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</DataGrid.Resources>
|
||||
<DataGrid.GroupStyle>
|
||||
<GroupStyle ContainerStyle="{StaticResource GroupItemStyle}"/>
|
||||
</DataGrid.GroupStyle>
|
||||
</c:DataGridEx>
|
||||
</Grid>
|
||||
</Border>
|
||||
</ControlTemplate>
|
||||
<Style TargetType="usp:ExecutionStrategyEditor">
|
||||
<Setter Property="ParameterCellTemplateConverter" Value="{StaticResource ParameterCellTemplateConverter}"/>
|
||||
<Setter Property="ParameterCellEditingTemplateConverter" Value="{StaticResource ParameterCellEditingTemplateConverter}"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch"/>
|
||||
<Setter Property="VerticalAlignment" Value="Stretch"/>
|
||||
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
|
||||
<Setter Property="Template" Value="{StaticResource ExecutionStrategyEditorTemplate}"/>
|
||||
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
@@ -0,0 +1,319 @@
|
||||
using bts.api;
|
||||
using bts.spark;
|
||||
using mbts.spark;
|
||||
using mbts.ui.adorners;
|
||||
using mbts.ui.controls;
|
||||
using mbts.ui.utility;
|
||||
using mbts.user.settings;
|
||||
using mbts.utils;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Specialized;
|
||||
using System.ComponentModel;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using static mbts.spark.SyntheticEditorVM;
|
||||
|
||||
namespace mbts.ui.spark {
|
||||
/// <summary>
|
||||
/// Interaction logic for ExecutionStrategyEditor.xaml
|
||||
/// </summary>
|
||||
partial class ExecutionStrategyEditor : Control {
|
||||
static ExecutionStrategyEditor() =>
|
||||
DefaultStyleKeyProperty.OverrideMetadata(typeof(ExecutionStrategyEditor), new FrameworkPropertyMetadata(typeof(ExecutionStrategyEditor)));
|
||||
|
||||
public ExecutionStrategyEditor() =>
|
||||
AdornerHelper.attach_continuously_on_loaded(() => new ExecutionStrategyErrorAdorner(this), this);
|
||||
|
||||
#region SyntheticName
|
||||
public static readonly DependencyProperty SyntheticNameProperty = DependencyProperty.Register("SyntheticName", typeof(string), typeof(ExecutionStrategyEditor),
|
||||
new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
|
||||
public string SyntheticName { get => GetValue(SyntheticNameProperty) as string; set => SetValue(SyntheticNameProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region TickFactors
|
||||
public static readonly DependencyProperty TickFactorsProperty = DependencyProperty.Register("TickFactors", typeof(TickFactors), typeof(ExecutionStrategyEditor),
|
||||
new FrameworkPropertyMetadata(new TickFactors(), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
|
||||
public TickFactors TickFactors { get => GetValue(TickFactorsProperty) as TickFactors; set => SetValue(TickFactorsProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region AvailableTickFactors
|
||||
public static readonly DependencyProperty AvailableTickFactorsProperty = DependencyProperty.Register(
|
||||
nameof(AvailableTickFactors), typeof(IEnumerable), typeof(ExecutionStrategyEditor), new PropertyMetadata(new TickFactors[0]));
|
||||
|
||||
public IEnumerable AvailableTickFactors { get => GetValue(AvailableTickFactorsProperty) as IEnumerable; set => SetValue(AvailableTickFactorsProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region IsNew
|
||||
public static readonly DependencyProperty IsNewProperty =
|
||||
DependencyProperty.Register(
|
||||
nameof(IsNew),
|
||||
typeof(bool),
|
||||
typeof(ExecutionStrategyEditor),
|
||||
new PropertyMetadata(false, OnIsNewChanged));
|
||||
|
||||
static void OnIsNewChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) =>
|
||||
d.CoerceValue(CanUserAddNewLegProperty);
|
||||
|
||||
public bool IsNew {
|
||||
get => (bool)GetValue(IsNewProperty);
|
||||
set => SetValue(IsNewProperty, value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CanUserAddNewLeg
|
||||
public static readonly DependencyProperty CanUserAddNewLegProperty =
|
||||
DependencyProperty.Register(
|
||||
nameof(CanUserAddNewLeg),
|
||||
typeof(bool),
|
||||
typeof(ExecutionStrategyEditor),
|
||||
new PropertyMetadata(false, null, CoerceCanUserAddNewLeg));
|
||||
|
||||
static object CoerceCanUserAddNewLeg(DependencyObject d, object baseValue) {
|
||||
var value = (bool)baseValue;
|
||||
if (value) {
|
||||
if (!((ExecutionStrategyEditor)d).IsNew)
|
||||
return false;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
public bool CanUserAddNewLeg {
|
||||
get => (bool)GetValue(CanUserAddNewLegProperty);
|
||||
set => SetValue(CanUserAddNewLegProperty, value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region IsNewLegPopupOpen
|
||||
public static readonly DependencyProperty IsNewLegPopupOpenProperty = DependencyProperty.Register("IsNewLegPopupOpen", typeof(bool), typeof(ExecutionStrategyEditor),
|
||||
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
|
||||
public bool IsNewLegPopupOpen { get => (bool)GetValue(IsNewLegPopupOpenProperty); set => SetValue(IsNewLegPopupOpenProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region PriceCalc
|
||||
public static readonly DependencyProperty PriceCalcProperty = DependencyProperty.Register("PriceCalc", typeof(SyntheticContract.Types.PriceCalc), typeof(ExecutionStrategyEditor),
|
||||
new FrameworkPropertyMetadata(SyntheticContract.Types.PriceCalc.Diff, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
|
||||
public SyntheticContract.Types.PriceCalc PriceCalc { get => (SyntheticContract.Types.PriceCalc)GetValue(PriceCalcProperty); set => SetValue(PriceCalcProperty, value); }
|
||||
|
||||
public static readonly IEnumerable<SyntheticContract.Types.PriceCalc> PriceCalcItems = EnumHelper.get_values<SyntheticContract.Types.PriceCalc>();
|
||||
#endregion
|
||||
|
||||
#region LegTuples
|
||||
public static readonly DependencyProperty LegTuplesProperty = DependencyProperty.Register("LegTuples", typeof(IReadOnlyCollection<LegSpreaderParamsTuple>), typeof(ExecutionStrategyEditor),
|
||||
new FrameworkPropertyMetadata(new LegSpreaderParamsTuple[0], FrameworkPropertyMetadataOptions.AffectsMeasure, ConnectLegTuples, CoerceLegTuples));
|
||||
static object CoerceLegTuples(DependencyObject d, object baseValue) =>
|
||||
baseValue as IReadOnlyCollection<LegSpreaderParamsTuple> ?? new LegSpreaderParamsTuple[0];
|
||||
public IReadOnlyCollection<LegSpreaderParamsTuple> LegTuples { get => GetValue(LegTuplesProperty) as IReadOnlyCollection<LegSpreaderParamsTuple>; set => SetValue(LegTuplesProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region ParameterRows
|
||||
public static readonly DependencyProperty ParameterRowsProperty = DependencyProperty.Register("ParameterRows", typeof(IEnumerable<IParameterRowVM>), typeof(ExecutionStrategyEditor),
|
||||
new PropertyMetadata(Enumerable.Empty<IParameterRowVM>(), OnParameterRowsChanged));
|
||||
static void OnParameterRowsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
|
||||
ExceptionAssert.Argument.IsNot<INotifyCollectionChanged>(e.NewValue, nameof(ParameterRows));
|
||||
((ExecutionStrategyEditor)d)._on_new_parameter_rows(e.NewValue as IEnumerable<IParameterRowVM>);
|
||||
}
|
||||
ObservableCollection<IParameterRowVM> _rows;
|
||||
|
||||
void _on_new_parameter_rows(IEnumerable<IParameterRowVM> new_rows) {
|
||||
if (_rows == null) {
|
||||
_rows = new ObservableCollection<IParameterRowVM>(new_rows);
|
||||
var rows_view = ParameterRowsView = CollectionViewSource.GetDefaultView(_rows);
|
||||
Action set_group_descriptions = () => {
|
||||
int n_groups = _rows.Count == 0 ? 0 : _rows.Max(r => r.section_path.Length);
|
||||
for (int i = 0; i < n_groups; i++)
|
||||
rows_view.GroupDescriptions.Add(new PropertyGroupDescription($"[{i}]"));
|
||||
};
|
||||
set_group_descriptions();
|
||||
_rows.CollectionChanged += (s, e) => {
|
||||
rows_view.GroupDescriptions.Clear();
|
||||
set_group_descriptions();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<IParameterRowVM> ParameterRows { get => GetValue(ParameterRowsProperty) as IEnumerable<IParameterRowVM>; set => SetValue(ParameterRowsProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region ParameterRowsView (ReadOnly)
|
||||
static readonly DependencyPropertyKey ParameterRowsViewPropertyKey = DependencyProperty.RegisterReadOnly("ParameterRowsView", typeof(ICollectionView), typeof(ExecutionStrategyEditor),
|
||||
new PropertyMetadata());
|
||||
public static readonly DependencyProperty ParameterRowsViewProperty = ParameterRowsViewPropertyKey.DependencyProperty;
|
||||
public ICollectionView ParameterRowsView { get => GetValue(ParameterRowsViewProperty) as ICollectionView; set => SetValue(ParameterRowsViewPropertyKey, value); }
|
||||
#endregion
|
||||
|
||||
#region ParameterCellTemplateConverter
|
||||
public static readonly DependencyProperty ParameterCellTemplateConverterProperty = DependencyProperty.Register("ParameterCellTemplateConverter", typeof(IValueConverter), typeof(ExecutionStrategyEditor),
|
||||
new PropertyMetadata(ConnectLegTuples));
|
||||
public IValueConverter ParameterCellTemplateConverter { get => GetValue(ParameterCellTemplateConverterProperty) as IValueConverter; set => SetValue(ParameterCellTemplateConverterProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region ParameterCellEditingTemplateConverter
|
||||
public static readonly DependencyProperty ParameterCellEditingTemplateConverterProperty = DependencyProperty.Register("ParameterCellEditingTemplateConverter", typeof(IValueConverter), typeof(ExecutionStrategyEditor),
|
||||
new PropertyMetadata(ConnectLegTuples));
|
||||
public IValueConverter ParameterCellEditingTemplateConverter { get => GetValue(ParameterCellEditingTemplateConverterProperty) as IValueConverter; set => SetValue(ParameterCellEditingTemplateConverterProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region RowHasError
|
||||
public static readonly DependencyProperty RowHasErrorsProperty = DependencyProperty.RegisterAttached("RowHasErrors", typeof(bool), typeof(ExecutionStrategyEditor), new PropertyMetadata(false));
|
||||
public static bool GetRowHasErrors(DependencyObject d) { return (bool)d.GetValue(RowHasErrorsProperty); }
|
||||
public static void SetRowHasErrors(DependencyObject d, bool value) { d.SetValue(RowHasErrorsProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region CellDataType
|
||||
public static readonly DependencyProperty CellDataTypeProperty = DependencyProperty.RegisterAttached("CellDataType", typeof(Type), typeof(ExecutionStrategyEditor), new PropertyMetadata(null));
|
||||
public static Type GetCellDataType(DependencyObject d) { return d.GetValue(CellDataTypeProperty) as Type; }
|
||||
public static void SetCellDataType(DependencyObject d, Type value) { d.SetValue(CellDataTypeProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region RemoveLegCommand
|
||||
public static readonly DependencyProperty RemoveLegCommandProperty = DependencyProperty.Register("RemoveLegCommand", typeof(ICommand), typeof(ExecutionStrategyEditor));
|
||||
public ICommand RemoveLegCommand { get => GetValue(RemoveLegCommandProperty) as ICommand; set => SetValue(RemoveLegCommandProperty, value); }
|
||||
#endregion
|
||||
|
||||
#region ContractPickerModel
|
||||
public static readonly DependencyProperty ContractPickerModelProperty = DependencyProperty.Register(nameof(ContractPickerModel), typeof(mbts.spark.ContractPickerModel), typeof(ExecutionStrategyEditor));
|
||||
public mbts.spark.ContractPickerModel ContractPickerModel { get => GetValue(ContractPickerModelProperty) as mbts.spark.ContractPickerModel; set => SetValue(ContractPickerModelProperty, value); }
|
||||
#endregion
|
||||
|
||||
public override void OnApplyTemplate() =>
|
||||
_connect_leg_tuples();
|
||||
|
||||
static void ConnectLegTuples(DependencyObject d, DependencyPropertyChangedEventArgs e) =>
|
||||
((ExecutionStrategyEditor)d)._connect_leg_tuples();
|
||||
|
||||
void _connect_leg_tuples() {
|
||||
Disposable.dispose(ref _dg_line_adorner);
|
||||
Disposable.dispose(ref _legs_collection_changed_sub);
|
||||
var dg = (DataGridEx)GetTemplateChild("PART_DataGrid");
|
||||
if (dg != null) {
|
||||
var legs = LegTuples;
|
||||
dg.Columns.SetItems(legs.Select(_column_factory));
|
||||
if (IsNew) dg.Columns.Add((DataGridColumn)FindResource("AddColumnPlaceholder"));
|
||||
_dg_line_adorner = AdornerHelper.attach_continuously_on_loaded(() => new ExecutionStrategyGridLineAdorner(dg), dg);
|
||||
_legs_collection_changed_sub = (legs as INotifyCollectionChanged)?.Subscribe((s, e) => dg.Columns.ReflectChange(legs, _column_factory, e));
|
||||
}
|
||||
}
|
||||
|
||||
DataGridColumn _column_factory(LegSpreaderParamsTuple l) {
|
||||
var col = new DataGridColumnInternal(l.leg.Security, ParameterCellTemplateConverter, ParameterCellEditingTemplateConverter) { Width = 75, };
|
||||
if (IsNew) col.HeaderTemplate = (DataTemplate)FindResource("RemovableColumnHeaderTemplate");
|
||||
DataGridEx.SetRightBorder(col, new DataGridExVerticalLine(false, true, Colors.DarkGray, 1));
|
||||
return col;
|
||||
}
|
||||
|
||||
IDisposable _legs_collection_changed_sub, _dg_line_adorner;
|
||||
|
||||
private class DataGridColumnInternal : DataGridDynamicColumn {
|
||||
readonly IValueConverter _cell_template_converter, _cell_editing_template_converter;
|
||||
|
||||
public DataGridColumnInternal(Security security, IValueConverter cell_template_converter, IValueConverter cell_editing_template_converter) {
|
||||
Header = security;
|
||||
SetValue(DataGridEx.CellKeyProperty, security);
|
||||
_cell_template_converter = cell_template_converter;
|
||||
_cell_editing_template_converter = cell_editing_template_converter;
|
||||
}
|
||||
|
||||
// I decided this was an easy and simple enough solution to justify breaking the mvvm paradigm
|
||||
// The alternative - within strict bounds of the paradigm - is to change the DataGridParameterCellTemplateConverter into an IMultiValueConverter, bound to data_type AND read_only
|
||||
protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem) {
|
||||
if (dataItem is SyntheticEditorVM.RowVM row_vm) {
|
||||
if (row_vm.read_only || row_vm.get_cell(Header) is SyntheticEditorVM.ICell cell_vm && !cell_vm.enabled)
|
||||
return base.GenerateElement(cell, dataItem);
|
||||
}
|
||||
return base.GenerateEditingElement(cell, dataItem);
|
||||
}
|
||||
|
||||
protected override FrameworkElement generate_element_internal() =>
|
||||
_generate_element(_cell_template_converter);
|
||||
|
||||
protected override FrameworkElement generate_editing_element_internal() =>
|
||||
_generate_element(_cell_editing_template_converter);
|
||||
|
||||
FrameworkElement _generate_element(IValueConverter cell_template_converter) {
|
||||
var rv = new ContentControl();
|
||||
rv.SetBinding(ContentControl.ContentProperty, new Binding());
|
||||
rv.SetBinding(ContentControl.ContentTemplateProperty, new Binding("data_type") { Converter = cell_template_converter });
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
class ExecutionStrategyErrorAdorner : NotifyDataErrorAdorner<ExecutionStrategyEditor, SyntheticEditorVM>, IDisposable {
|
||||
readonly ChildProperty<TextBox> _name_text_box;
|
||||
readonly ChildProperty<ComboBox> _tick_combo_box;
|
||||
|
||||
public ExecutionStrategyErrorAdorner(ExecutionStrategyEditor editor) : base(editor) {
|
||||
_name_text_box = child_property<TextBox>("PART_Name_TextBox");
|
||||
_tick_combo_box = child_property<ComboBox>("PART_Tick_ComboBox");
|
||||
}
|
||||
|
||||
protected override void OnRender(DrawingContext drawing_context) {
|
||||
const double y_offset = 10;
|
||||
string leg_count_msg = _vm.GetErrors(nameof(SyntheticEditorVM.leg_count)).Cast<string>().FirstOrDefault();
|
||||
if (leg_count_msg != null) {
|
||||
this.draw_relative_text(RelativePosition.Below, leg_count_msg, drawing_context, _name_text_box.value, new SolidColorBrush(BTSColors.MarketData.driver_background), 0, y_offset);
|
||||
} else {
|
||||
if (_vm != null && _vm.GetErrors(nameof(SyntheticEditorVM.name)).Cast<string>().Any())
|
||||
this.draw_border(drawing_context, _name_text_box.value, null, new Pen(Brushes.Red, 1));
|
||||
if (_vm != null && _vm.GetErrors(nameof(SyntheticEditorVM.tick_factors)).Cast<string>().Any())
|
||||
this.draw_border(drawing_context, _tick_combo_box.value, null, new Pen(Brushes.Red, 1));
|
||||
string error_text = string.Join(", ", _vm.AllErrors);
|
||||
this.draw_relative_text(RelativePosition.Below, error_text, drawing_context, _name_text_box.value, BTSColors.header_error_text_brush, 0, y_offset);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[ValueConversion(typeof(int), typeof(Thickness))]
|
||||
class RowHeaderGroupIndentConverter : IValueConverter {
|
||||
public double Indent { get; set; }
|
||||
public bool Reverse { get; set; }
|
||||
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) =>
|
||||
new Thickness(((int)value + 1) * (Reverse ? -Indent : Indent), 0, 0, 0);
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) =>
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
[ValueConversion(typeof(int), typeof(double))]
|
||||
class RowGroupExpanderWidthConverter : IValueConverter {
|
||||
public double Indent { get; set; }
|
||||
public double RowHeaderWidth { get; set; }
|
||||
public double Offset { get; set; }
|
||||
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) =>
|
||||
RowHeaderWidth - (int)value * Indent - Offset;
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
|
||||
}
|
||||
|
||||
[ValueConversion(typeof(Type), typeof(DataTemplate))]
|
||||
class DataGridParameterCellTemplateConverter : IValueConverter {
|
||||
public DataTemplate DoubleTemplate { get; set; }
|
||||
public DataTemplate BooleanTemplate { get; set; }
|
||||
public DataTemplate IntTemplate { get; set; }
|
||||
public DataTemplate UIntTemplate { get; set; }
|
||||
public DataTemplate QuantityMeasureTemplate { get; set; }
|
||||
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
|
||||
Type t = (Type)value;
|
||||
if (t == typeof(double)) return DoubleTemplate;
|
||||
else if (t == typeof(bool)) return BooleanTemplate;
|
||||
else if (t == typeof(int)) return IntTemplate;
|
||||
else if (t == typeof(uint)) return UIntTemplate;
|
||||
else if (t == typeof(QuantityMeasure)) return QuantityMeasureTemplate;
|
||||
else return null;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) =>
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@@ -8,12 +8,11 @@ using System.Windows.Media;
|
||||
|
||||
namespace mbts.ui.spark
|
||||
{
|
||||
internal partial class SyntheticEditor : Control {
|
||||
internal class SyntheticEditorGridLineAdorner : DataGridExVerticalLineAdorner
|
||||
{
|
||||
public SyntheticEditorGridLineAdorner(DataGridEx grid) : base(grid) { }
|
||||
internal partial class ExecutionStrategyEditor : Control {
|
||||
internal class ExecutionStrategyGridLineAdorner : DataGridExVerticalLineAdorner {
|
||||
public ExecutionStrategyGridLineAdorner(DataGridEx grid) : base(grid) { }
|
||||
|
||||
private ItemsPresenter _items_presenter;
|
||||
ItemsPresenter _items_presenter;
|
||||
|
||||
protected override IEnumerable<IDisposable> get_other_hooks() {
|
||||
_items_presenter = _grid.visual_children_where(el => el is ItemsPresenter).Cast<ItemsPresenter>().FirstOrDefault();
|
||||
@@ -23,7 +22,7 @@ namespace mbts.ui.spark
|
||||
}
|
||||
}
|
||||
|
||||
private void _items_presenter_SizeChanged(object sender, SizeChangedEventArgs e) { InvalidateVisual(); }
|
||||
void _items_presenter_SizeChanged(object sender, SizeChangedEventArgs e) { InvalidateVisual(); }
|
||||
|
||||
protected override void draw_vertical_line(DrawingContext dc, double x, DataGridExVerticalLine line) {
|
||||
if (_items_presenter != null) dc.DrawLine(line.pen.Value, new Point(x - 10, 58), new Point(x - 10, _items_presenter.ActualHeight + 58));
|
||||