From 595131466d31de84b3ebf8e07080f6433f0dc7a4 Mon Sep 17 00:00:00 2001 From: Ivan G Date: Wed, 10 Jan 2024 11:43:36 +0000 Subject: [PATCH] viewer experiments (#452) ui improvements --- .github/workflows/build.yml | 6 +- docs/release-history.md | 4 + .../Parquet.Floor.Desktop.csproj | 22 --- .../Properties/launchSettings.json | 16 --- src/Parquet.Floor.Desktop/icon.ico | Bin 5921 -> 0 bytes src/Parquet.Floor/App.axaml | 10 +- src/Parquet.Floor/App.axaml.cs | 10 +- .../Assets/icons/col/bytearray.png | Bin 0 -> 719 bytes src/Parquet.Floor/Assets/icons/col/list.png | Bin 0 -> 228 bytes src/Parquet.Floor/Assets/icons/col/map.png | Bin 0 -> 1203 bytes src/Parquet.Floor/Assets/icons/col/number.png | Bin 0 -> 285 bytes src/Parquet.Floor/Assets/icons/col/string.png | Bin 0 -> 261 bytes src/Parquet.Floor/Assets/icons/col/struct.png | Bin 0 -> 526 bytes src/Parquet.Floor/Assets/icons/diagram.png | Bin 5221 -> 0 bytes src/Parquet.Floor/Assets/icons/glasses.png | Bin 668 -> 0 bytes .../Assets/icons/information.png | Bin 5525 -> 0 bytes src/Parquet.Floor/Assets/icons/map.png | Bin 1847 -> 0 bytes src/Parquet.Floor/Assets/icons/open.png | Bin 1430 -> 0 bytes .../Assets/icons/raw-extension.png | Bin 5078 -> 0 bytes src/Parquet.Floor/Assets/icons/trophy.png | Bin 2362 -> 0 bytes src/Parquet.Floor/Extensions.cs | 74 ++++++++++ src/Parquet.Floor/Parquet.Floor.csproj | 30 ++-- .../Parquet.Floor.csproj.user} | 2 +- .../Program.cs | 9 +- src/Parquet.Floor/Styles.axaml | 79 ++++++----- src/Parquet.Floor/ViewModels/DataViewModel.cs | 12 +- src/Parquet.Floor/ViewModels/FieldModel.cs | 63 +-------- src/Parquet.Floor/ViewModels/MainViewModel.cs | 24 +++- .../ViewModels/SchemaViewModel.cs | 2 +- src/Parquet.Floor/Views/DataView.axaml | 47 +++---- src/Parquet.Floor/Views/DataView.axaml.cs | 22 +-- src/Parquet.Floor/Views/MainView.axaml | 128 ++++++++++++------ src/Parquet.Floor/Views/MainWindow.axaml | 2 +- src/Parquet.Floor/Views/MainWindow.axaml.cs | 2 - .../{ => Templates}/DataViewCellTemplate.cs | 34 ++--- .../Views/Templates/DataViewHeaderTemplate.cs | 86 ++++++++++++ .../app.manifest | 0 src/Parquet.sln | 10 -- 38 files changed, 415 insertions(+), 279 deletions(-) delete mode 100644 src/Parquet.Floor.Desktop/Parquet.Floor.Desktop.csproj delete mode 100644 src/Parquet.Floor.Desktop/Properties/launchSettings.json delete mode 100644 src/Parquet.Floor.Desktop/icon.ico create mode 100644 src/Parquet.Floor/Assets/icons/col/bytearray.png create mode 100644 src/Parquet.Floor/Assets/icons/col/list.png create mode 100644 src/Parquet.Floor/Assets/icons/col/map.png create mode 100644 src/Parquet.Floor/Assets/icons/col/number.png create mode 100644 src/Parquet.Floor/Assets/icons/col/string.png create mode 100644 src/Parquet.Floor/Assets/icons/col/struct.png delete mode 100644 src/Parquet.Floor/Assets/icons/diagram.png delete mode 100644 src/Parquet.Floor/Assets/icons/glasses.png delete mode 100644 src/Parquet.Floor/Assets/icons/information.png delete mode 100644 src/Parquet.Floor/Assets/icons/map.png delete mode 100644 src/Parquet.Floor/Assets/icons/open.png delete mode 100644 src/Parquet.Floor/Assets/icons/raw-extension.png delete mode 100644 src/Parquet.Floor/Assets/icons/trophy.png create mode 100644 src/Parquet.Floor/Extensions.cs rename src/{Parquet.Floor.Desktop/Parquet.Floor.Desktop.csproj.user => Parquet.Floor/Parquet.Floor.csproj.user} (86%) rename src/{Parquet.Floor.Desktop => Parquet.Floor}/Program.cs (80%) rename src/Parquet.Floor/Views/{ => Templates}/DataViewCellTemplate.cs (80%) create mode 100644 src/Parquet.Floor/Views/Templates/DataViewHeaderTemplate.cs rename src/{Parquet.Floor.Desktop => Parquet.Floor}/app.manifest (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f7682a1b..bf728d87 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,7 +14,7 @@ permissions: on: push: - branches: [ master, viewer-take-2 ] + branches: [ master ] pull_request: branches: [ master ] @@ -113,8 +113,8 @@ jobs: LATEST_NET_ONLY: true run: | envsubst < src/Parquet/Globals.cs > g.tmp && mv g.tmp src/Parquet/Globals.cs - dotnet restore src/Parquet.Floor.Desktop/Parquet.Floor.Desktop.csproj - dotnet publish src/Parquet.Floor.Desktop/Parquet.Floor.Desktop.csproj -c release -r ${{ matrix.rid }} -o floor-pub/${{ matrix.rid }} /p:Version=${{ env.VERSION }} /p:FileVersion=${{ env.VERSION }} /p:AssemblyVersion=${{ env.ASM_VERSION }} + dotnet restore src/Parquet.Floor/Parquet.Floor.csproj + dotnet publish src/Parquet.Floor/Parquet.Floor.csproj -c release -r ${{ matrix.rid }} -o floor-pub/${{ matrix.rid }} /p:Version=${{ env.VERSION }} /p:FileVersion=${{ env.VERSION }} /p:AssemblyVersion=${{ env.ASM_VERSION }} mkdir -p floor-dist zip -r -9 -j floor-dist/floor-${{ matrix.rid }}-${{ env.VERSION }}.zip floor-pub/${{ matrix.rid }}/* -x *.pdb *.xml diff --git a/docs/release-history.md b/docs/release-history.md index 12b2dcd2..ba0feeb2 100644 --- a/docs/release-history.md +++ b/docs/release-history.md @@ -8,6 +8,10 @@ - `NetBox` was exposing some internal types (#451) +### Experimental + +**Parquet Floor** (reference implementation of desktop viewer) user interface improvements. + ## 4.20.0 ### New features diff --git a/src/Parquet.Floor.Desktop/Parquet.Floor.Desktop.csproj b/src/Parquet.Floor.Desktop/Parquet.Floor.Desktop.csproj deleted file mode 100644 index 75e00be2..00000000 --- a/src/Parquet.Floor.Desktop/Parquet.Floor.Desktop.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - WinExe - net8.0 - enable - true - app.manifest - floor - true - true - true - ../Parquet.Floor/Assets/icon.ico - - - - - - - - - - diff --git a/src/Parquet.Floor.Desktop/Properties/launchSettings.json b/src/Parquet.Floor.Desktop/Properties/launchSettings.json deleted file mode 100644 index c1ff14d5..00000000 --- a/src/Parquet.Floor.Desktop/Properties/launchSettings.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "profiles": { - "WSL": { - "commandName": "WSL2", - "distributionName": "" - }, - "all_var": { - "commandName": "Project", - "commandLineArgs": "C:\\dev\\parquet-dotnet\\src\\Parquet.Test\\data\\all_var1.parquet" - }, - "customer": { - "commandName": "Project", - "commandLineArgs": "C:\\dev\\parquet-dotnet\\src\\Parquet.Test\\data\\customer.impala.parquet" - } - } -} \ No newline at end of file diff --git a/src/Parquet.Floor.Desktop/icon.ico b/src/Parquet.Floor.Desktop/icon.ico deleted file mode 100644 index f0485eb56311f1d80982ff60572807d1f0f3a922..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5921 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 - + xmlns:actipro="http://schemas.actiprosoftware.com/avaloniaui" + xmlns:generation="using:ActiproSoftware.UI.Avalonia.Themes.Generation"> @@ -10,5 +10,11 @@ + + + + + + diff --git a/src/Parquet.Floor/App.axaml.cs b/src/Parquet.Floor/App.axaml.cs index e9c5aea1..64e8ef46 100644 --- a/src/Parquet.Floor/App.axaml.cs +++ b/src/Parquet.Floor/App.axaml.cs @@ -18,14 +18,12 @@ public override void OnFrameworkInitializationCompleted() { // Without this line you will get duplicate validations from both Avalonia and CT BindingPlugins.DataValidators.RemoveAt(0); + var model = new MainViewModel(); + if(ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { - desktop.MainWindow = new MainWindow { - DataContext = new MainViewModel() - }; + desktop.MainWindow = new MainWindow() { DataContext = model }; } else if(ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform) { - singleViewPlatform.MainView = new MainView { - DataContext = new MainViewModel() - }; + singleViewPlatform.MainView = new MainView() { DataContext = model }; } base.OnFrameworkInitializationCompleted(); diff --git a/src/Parquet.Floor/Assets/icons/col/bytearray.png b/src/Parquet.Floor/Assets/icons/col/bytearray.png new file mode 100644 index 0000000000000000000000000000000000000000..009bedaf8b73802a7dcf656767919917565a8dd0 GIT binary patch literal 719 zcmV;=0xEkcE=WG{{O~&B#xY#VCoA zCef5{LCJ7M(% z?|aVo-0nT+{ftp46bgkxp-}ucI2OVE!dgXr4e`|4Uc|ctzpqAfb@>v0Me>7iO{um+ z_;H%G?-6?#FtCBYwaYpSc=)(a6TWF45Ap>VB=;D*5+R2RCVd&2T2DZ^0 zn?nYwP?eKYI|OZ_L9NAJs_#fyASNfLb`aWI(v}NXgL9!Bp!)V!GSCn03u)t&yAxV3 zY4cmjKponYaE7o=_?>c(Bkv^TwY8Fg!=%p^F2Q&V*GtGdi~Dym3sfCORXa(Jf!(Ap z60XJgIHIw3O@^9B5wftlUxJ7(=^3=*+3`hD}*O7 z-Yy(9#rI&pjhoQ##u#vi&lqV>g+0Q>8RmTk+DW(j`(=#ntMmY4+XuPxVlc*lLl0@A zcoL!7R09i0-zdC~@lxS6jBWGg+LiMu2IiRJJ#_lIgxc5~yCqIR-)f2n^+PyQ*av-w z@EOMS)CI1RKF|aM7Oo@RC;TdW0lgc#J;dH%?CnGwEzm{!H{(AAa}BtT^c1eQps&RJ z1>q-*y`5-iff0%wY=QyTk>1AjH1t`*pTaxl&uixGL_-T4q1Z?h47eTUHLiOoHbJ`E zsgf61Xo?TZ#T%Ui)0y9Or0ywqQf!EHOK&F{^CNCh{K{W8&|iwrqu9Ap%-e}t@V_S? zR#Ch!u{M;miDLCqY<;QL+leX^3WY+UP$>Q}{06~O*Sa|MzH0yg002ovPDHLkV1fh> BQnUa7 literal 0 HcmV?d00001 diff --git a/src/Parquet.Floor/Assets/icons/col/list.png b/src/Parquet.Floor/Assets/icons/col/list.png new file mode 100644 index 0000000000000000000000000000000000000000..7dc9051a3434758d7caa4fccef81a9e575652660 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?3oVGw3ym^DWNC^*g2 z#W5tK@$Gd(z6J%J) zKI5)PuW2a?7N6j@QB`EdssjQV3m#66eACIqU|^nE`c6|Z_2TZRxtF8`zN`yd9`fMI z?kMTc`i87kJGY;iR%B5reKp|sQl3`lYZtlS96IiQpK&WwT3W0VWA6I1i^RAX4*ZX0 YS*19~|EumcpbHs1UHx3vIVCg!07n;5<^TWy literal 0 HcmV?d00001 diff --git a/src/Parquet.Floor/Assets/icons/col/map.png b/src/Parquet.Floor/Assets/icons/col/map.png new file mode 100644 index 0000000000000000000000000000000000000000..d83adafc4b54f5d54554893e120d4ed7a36bd4fd GIT binary patch literal 1203 zcmV;k1WfyhP)%QeV`iJ*$6BlXthK-Ot?yg^zinkd_0<2b^?dL5 zzTf=4OQZ=+_$AOU3{qApUnswM5j-fEH5q@aoaa$K-3wV`eTnh|)$>Zq5Cnz|xBNqk12*LK zLJZ8Ee ztqkitFO`+P1`L=$_AWT+7n2^VU0$&d1nF zHkR3hT-od#qd1T~BE1Wz77U=0Y}j`4A2+F3n0L__<>~z1g3bd2$<8&Kkk38sbBt~v z?K$Pz45G^?i}|?iicVD56PvJ>gsm+)ICGn{6H9Q;1+A#A4>lnOU|XwsvwJQ%OIsPx zRvZK1A=J^LTSGcr4?CB|&1`g}`kvZ^Jc%nTx@nT^E$kT$8N_g^>$*+I%jm)!qtnGb zh=6o~o6iaGGJ4P^TtUJ!Qnwi`5c8Z!2Z7dUW6%XsS^&GK{BoOc90}9BB4Jmikq%<9 zK@&*v0I*?l8fJ`5jHUB`OAt8A;6#|-BX*N!wWou5m`Jv<;^n3!cTxcy6*ep1NHP#S zpA+eE5&uN*rW9~;l5(k-&r)Z}_I4Lz6_RXmT)_X7@J5vGkrNUoZR7vQ@A&Sxdkl6> z#D&H=k9s`Asaax93xdcUbDyVKsG@a}pFztCAnW;LNjBg*U*`cNldg~voC140mQ8nm zkf93<8eH68((}TJEdZIgr(_Hnv!M>O0>cA2?!Q zGT|!8T^;j|gqe)F5-!6XB1dtS!IcmjBy zc1ZZi)Yoww%o^=8YZ^Eq;+Pvqc;Ub002ovPDHLkV1lm9I(`5E literal 0 HcmV?d00001 diff --git a/src/Parquet.Floor/Assets/icons/col/number.png b/src/Parquet.Floor/Assets/icons/col/number.png new file mode 100644 index 0000000000000000000000000000000000000000..3c90624a47dfcbb9ab32d085a562745145258bc2 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?3oVGw3ym^DWND0tq} z#W5tK@$EEUu0sX_Zks>x$+_gGoHx{ddGL#xX!+gpP+5IF+zq1wp;$K_g{{G;mEh^X8I?mmD+{SS6qL4#&n6QF{1d~lP z>xBtR;(DxSw7Ko(*^sVWD9g&B?^{tQ_Wdtc+!U+8bLPAPaWgD8w|wJbRSCYXb6^1v zfBfTTwy9aJD|4k3Vx6+u^JeUhRxV^QIQus;rb>V50ymz`%kDA9RP!3_oo@cOmkHz~ ahiT&LCjb3A@w>1X&DG(xw5GUY`EgWfLncd$Wn~l(X(%+2y+yAh;W0ay01VIple@aX1Olz$5%)4VwH9jXIWn-!UE=Kl^&A;k<{t5OfqIS%uvs~4W0bss7BRjx*uXnk6LcGI z6XSh@4Lp!FTWI(ttsya9qDD)fcsoG7ifiH-+H93v6hGJY)bygY3La)iH9n`TYrT>@ z6Pxi@=wtoVItU1FNHsnwhc*lJLAwnc1s;}ad{T~!fCkQs+5bY#<68p{GOxvx^_kaY zrKXOsQOv$VW1F!O_anXn4{H<80H`C}INn9nh>lV2_*6AHqQLv!<)CVWpqanpKGo^x0~?h1k+2*TX+4Z|s`gk6^* QHvj+t07*qoM6N<$f`i865C8xG literal 0 HcmV?d00001 diff --git a/src/Parquet.Floor/Assets/icons/diagram.png b/src/Parquet.Floor/Assets/icons/diagram.png deleted file mode 100644 index 4ba7283ae423eece1bb55fe7f9a2c85573e839d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5221 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 LI?6SQwh{jaqDQ4M diff --git a/src/Parquet.Floor/Assets/icons/glasses.png b/src/Parquet.Floor/Assets/icons/glasses.png deleted file mode 100644 index 307c3ef86bd2e4c6fd806f1ccdb1752754b2a538..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmV;N0%QG&P);uVmJM9X^=aVoUW(;I@eX^DzJ zoRJ!@PpCq@w7?5+0}ka_xPc;An;U2uFA3UYNo;Q{*jE21S-IHrk7vf?br=Hx00000 z00000000009;it*%Y|-4LLc#1X&&p;GFp*P2lV@yH7}=zc7SY zSp8rh(kQbnucl3QXdK^HR6Ap_{>qwHFYo81oHD)>Oke0-uOLw5HbRN#vaw9#)4+^o z8B-r=&PsTF{mp6f*_rQkQm9idlXq4!rFu?reC}Uo5@01eJ+wk-)rc( z^@|@ubU&B>5YZ<+8L)ncJhwhGPsr?>y!XnWE6Q|fs{zx=P2>yW>W0Z=rt10`<_S5t zdzKhNH=M*Ppl_a|qjX+=hY}}Szu0D4`)Bk!PM9ZTp&Y%Up8X-w@E5Oueh2e}G|j_w zQ2JF4rKZ|*>&|Dc!ukLJ00000000000002~C++}w;92}2(wB|^000092)U`J>Yz3H|Q&&V5U#KUMjobI5fA`$85@sMg3=<9(yM{c1n2!K(1c4VT zh&}>mK*)m84Iqb?002b*;{ZwwDhsF`%rpYRv#jXP67I9;!w8)Ur-io_3)JcY=z#A> z-c8CC1bzpD-a+6c0L(y{UkdETW~N7o_+BQuPYU;bIu{cWi`+JJtN?fzhbbj4WTN*F z_(T9kBtyXkurCfXZ6NR+0_p}D#9t#@Y9SpZ0Dc^E+?sr!fV!ALr$I;gqYGdkXak6U zDp=h}1K6s|YTR^$0C)%|D2TNH1`sr~2Su9zc4LEZn}E8U`tg`{>zZk60q`*1#){T5 z(bR#Ef)X}<0!@AMgYgRqyWtqz$Ao6g{v;0)p({wB>(`3Ryucv_o7u1U{44?6&dw$dN)eVcim+8 zAsnuxSO?&!X8WF&b`ZcMPYbEep>y$EGo3c|6~G&Cq7veMv`gi;7e^~sJj6f8Tbt>$ zX#%i^jZ>8pcY`p$Sw1_EK1Jep_N~Udo8_=60&v#Le!=Qa0A0=S*Wu)ZQ0tuAOo3q@T32;<}9 z02oqDfZP&H=T(@s5hQ9ONYtJ~s{AOVDzxer0H7>{I-OSG!8nY^A^?5}hbtlOZ+?T1 zU?rEsN}UcnbqZ|rE%1BGO$xvRc9E(*gLG*|rUETnIwUsy^I|S4U8o<-K4Qm$w zKZstH5F5Z)tlM@yT;q+XW>=${9)xQg94fD`0QSMOUq*gx9lFNX!L(ismA4@nBO<9z zr1xS}r&+B6U{8?{QqumV@g1y3A=40B^vFN{I&mBz4(*oexT(oc|=sU7rGL`mktR0Fw|q=pMZZeOtc^ zp~_lp)}ba?okD|nM29gg0^p~RQ)TfOfWvgyn+_|n920$4!<7eVwW~`2Q<(N9EZDRb z>9UsknI6V-BBzemF?gho^-jIz(GCL2;^NIMTMr=%nYrFwt zbAJZccw^u^$%KJiCJECB_c<6u0DEFPF2;&wl&eYZM(6zkt`W?vX-IVCQlTq;im(Eh!m=IgD3oB?!RB?E z_RBbEM61h4ncQL755_T3 z^46o+bt$Z*|7@sa!f4r3Uk}reSlHK%bkbjtmFzO?T%dg}?9uLV@|-9cqrL(zjhJs* ztkkI}=Rf9~E|oMerz;aE3yK(U%W7M0w|NEiR8!(ATZI1#}5Ac+G@UO}vkR-V^W$zAMuJ(EhnkoqfP%XWp^ zfAd=9?}<{tEx&f~!pqZKY!K6s$Y;FQ#f){Y*5*$su`+1dzycufJE9b3Uleu2O4o0v z5D_vdy&Hi|@x-4TD34)%W?;ip@l5&d%6d0uOZj&~Nj>8PVd^T70C*TCgS2eeRLh*> zIiD|`G$CVZ_?0XEm0Ppo5r7l|S&y*`7D*Jl&d}nEK`VlO4hH+B6^@6d_kT5gw&(S9 zOiw=mEDX@dTf8W~PtKfAH}OPX+oIqc=Hu8P2?GhhC8=dSKf{ERtlx`lNEz!O&k1if zFt@jU1uvQ}aMH2y`A;TH&-<%pPXv>m2f$VG$ROzg34oXnZ>%_z*vX|}s^6=ZN=Do6 zHz=k_SaU%JM;&hL_5Di(oN%SEn#hWW2J)MY#kVIG@m+Z%%JxDq&(AmAcm}*=4)dA2x_Upocc7 z-n9t8@tEu}HEp|D57#)f?lsd8 zP3iL=dC5g(*Vh0uFgp6$cYihm9DP{4f|wF|tY<>R2S<7@7uL7x_Q9{sOS|?C` z6`D3xDf>UX{=d4RM*s@mBYR>$5`bS*M+q%`Za_ju1Q43``0=@^4xIB58NbD+EVK=S zYlr~4j%d-;!!;A|``TgBw%)HBdjp@Vi&x^IHXmbO^xGBLLxgAEoCi{WEde z6=%9BNqb=E+DpLDA%Nv50%*8)1Q#IG_PW>oew3Mn?bPq(Gn{R@B7nl9{_Qtk0T4j} zcv(k@4Cnc}*Bod65rAda@0~SuZ8b-DnZDxx;0Buy0RBtkB?6>f|1b>4b>Z#@QNUHo zGukC;dIUhs&jv{sY)&AN76F*nu;+ElZg>Es?eSV4008OAqgwnhDA3U}!TMhrfz;%O zS$)9sdc6^{nM9@Ly|+-h^sp{h`UJp4S_B~7O_0tDb+6YfXGVVxDy2LHkg!Hz*sp5w z#iTI;Na5;*gfWXTjXel@Eu6U`}ppOQWZ6;^Lhv?H5=ol`b)q7z_d4G z&bDiHx_yRLiFXd$QF677lB~aRG&BpezA}ZC^jT@A!7B+7m z4;+!^ZMht|!d=?S;j;X8)Vz@eKuhsFfS*OpUypR@I%Esq36yrKv#8k(M9X%tb#wyT z#wOsn!Tk1Z`#1FL)EYDa00h3<9B?9c(>K)5$`4_IlHwTvJ&o9zj!Nz$nCSTm!e}&^ zFpy0rkO;BSPnbias+NsH$-i@FZy0m8T!}e5{xd|Lz&JvvCA12WhY=g@Xpi&2=xU}P zg*jJ+URNlEKsse2l{9@foAwic<+vzUYbaG}p{K4B+gPyaGUN+)hRPS*0lq8y)n^(r z(I9*e43!tdVAS9Iw*e;4488`gJRnkjAqWZ6fN4k=Qb09T%?; zBA_r{h;%Hh7wO_3v2fEr!*KPV7CHrkK4c8I*EMQKTZOqp;z|H|&p_D=LM8V>l)5j4 zB7JA?={!ALssj49T!rq@TcByotRA<>0d>9(L)rwu!!TWz_Yv58Gr$H>q6ek!FQAgW z06L1VM*xic*sm~e>lLw_5xfu2i#X6@H7J?LS7c7HImt9vGjIgX+6FO~%q_bBDy`0M^D~yB;iZsHNY7 zN@g|e#BzXw^#ueK0KrA7G=#3P+mW02oz6`hg2DKK98{msZ8jDGFoV>v_zwUdj>EpM zf02isSPm=oHrUDKaE!z2Mu&O=5L`u~_B>LhVPr}VAzdDZ(6x0-NCFs)- zv>g+C3nU*(|IJMOarp=i!Ig`k%tPVIgP|NnuN>#I=(D$vn53x>( zrBhIm%3Z}E?{(p`ybcEaUMAhs;;eiiW&r>IEyoU-a90wu{&CP53K8Ea9rsLK-}+uO zWq(#W4kgO+IRI{MhQAKyCfdrY=sb^8B{b5s4SMO#u*6bz0f1|o<+B61Ry?jQ^xNWH zCoS2b*BO!*6Zi+vbP`!Zv`Zt9@O80DeVM4apB^pSqM3(rlwxr!fcodiG=tU)zyae^ za!_eqArh39?a@w4@rX2EezVd8TnY!c6Ohp-ygfF%@@QypwkE)CxAWSdtf+uV})S#UI1qSI0|9! zDINhRFupFHP+tqOWqT{>XaVdC52M?Gu|%+13c^w_j>Tl(LjB2t`UOy6q7NDUuD*@` zVq``MpdP#)eE<$}ArB_OS70(yOrlo+j|oE@ywHhP)g#h-%8KQd#v~u@<=o7&8 z!c-rl_o2zNMH?gRK7q5mo*D?Bk^Slitu9CuW(Cj)gcpTU=hJ|`g&NJKEye;m5dz;X zOm)1@RXVL;HUfmF2Etle#aFjemu^&M1rUyng4G8)Ippul>?t<_~|75l3IDqvhjC-K#EQs;N)Ho|@<0Aku8NL@n9@aI;Sr5*Tx XNnetLYlkQ;00000NkvXXu0mjfw1YQC diff --git a/src/Parquet.Floor/Assets/icons/map.png b/src/Parquet.Floor/Assets/icons/map.png deleted file mode 100644 index f406662d93842bcc56e7f60d4c50ea3c29229244..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1847 zcmV-72gvw|P)Mqt0TUZj zGaW6AZ$Ow=m(5oqY|c-I#eR?(QkoYsU%H|=#z zvnwP|xVSSeW8fWZf&y5RG-kT5Zy(s1r_$&D{7Kl&y*1Xfj*MHI4Yvei)#_pNRHu{S zwZ;5@ZE@oKmeHf+A%<~qHe9#BKiURWHObyk?L&5U0yJj{dh*8HxrboG&)^H5gYPF* zA(&Uj(eP4n$%cbY*}N!Q?kir_w}>#ZG_Jqr@D!V8c71_4FOo);&&NJQ2%C}|BM5Ir zP&4^s?eZB3uaXm3Sp10$y*=IeIOb=@;i-^l0*2oBwef{SXdBYT$MyF@ zUC?1J(WWK%^Mux`as44XG=jAFpe`+KfB?1zh`<>>p?^SNn8)kV0!LjSfvRl06jr={y}Sh}cmXuq}QUakNgHU&;jNVaZPYj71NfvEDTp9BeSGVZM&ZQnL->-_YB~IlNXN zO{7gs^8U`a(?CPY}yo-?`2&pwpZn3Q63n30Wwwe(CtPsL20GgkZ#B6n8#Jysq z zt1}jPD-{3`-#`|#QKyvME^uzx{qKnFzm*rgL^LEjn_f&nY`!@!dZ2Z;5Y?a3sWavZ zNIh4PykHC7A!JR*D|!g-7MAwvqG6h+sCfZ9hr`!;_sEcV+iU zSt2%5Co>o#v53;?ym|5erJ}v!uTokaRMN?$>|K07*2Lil@hP^ZwETsU{ z^A(~6J4S^#A?-Y#%{K26?WY16s}~qDfxPe z*WUEB=d}_ZVzmwbt#9xF6R2+kOyTIHvBR}_N76R}Adrt{t>cSA^XWW!+R9cXj-$mE z$oTMaWD#r59JGGut8#R~6N@Uee<5|gyx>2RVFNUa8|mpeiuT14H)u$m9CZir>bs1! zX9j#prsf7}I8(wWj7j@DgINn;<{2d_2;STB{rO6|EBVu9t~paQ?-jo%4$(%Bk2g!8 z>LbKVh9F`bRQ9?v1-|=HpS7~(Ay3?<@BmcydUJt8?g&xsLsUQUb?E;V=+S9WlY0F< zPW36Ugzfl0nWX~QRa$wwXh4Q|pCSOk?k#&=g`xRo;KLSQ@QLmX^Bw~{?>B!z{(Hl+ lPA+>rrNH~CEVMG$@Gpy)cVkTo{6YW#002ovPDHLkV1hP^eM0~M diff --git a/src/Parquet.Floor/Assets/icons/open.png b/src/Parquet.Floor/Assets/icons/open.png deleted file mode 100644 index fa35138638678831fdb701e00324533b40d03d1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1430 zcma)6X*3&H6n>FNP@%!7Z75Aw%Q4ka>qMNW#8E_)bf`pCbp~UJ4yq#baOkG7j8R)# zHA1IJtEWSiQmIKxs=A?VY_UWYt*wno%DnVn|Mi~p-n;jE@B8j||GfMFKX0s-i536= zOCgg2;mJ`g4K&<^KSlJw1I6;B1ZluHsc|F^)|v_AgDe1$H&qLiQHCF(|cSZs>8$_Xmv7A7m9}%uL#hFa*isU>u0}*X+83r_Wf01>Yq{{?#kpypgt2WK2p(QnpH}`Q zy@HA%Th=mTpG(HCXeG%i(`D}@Y0*=ww$XMh9dVHZYhGWEllOJZ{7c3(1?Qe|+#@?D zyamt>RkVr>r&yEG&bDYiV-K1?tND_M2cg!&uFdwQAa|>HI}XE|UvqF3l(-kT+~6WF zJL`7swE)_ZYnklSWzwr9-YGIzJM{6kL+>D~_fdhpkDVTvPMh*yl7FntDebNzy`&&` z+L%_>+_RgjjWTLfi4Ne5qZKEO#g}Ig9M;jan5bs@N4JKCMFi->BA0?+74aHeP(a7& zvuLI>GU`dq>0faG^wV2KaSsC&2obxaT+2)4=Fi_q(fW!a1nC^|lrmHJ`B< z&ZwO|7({uj28^2b{uA>4j$k$|$ZJjwFcX;j;{SlWyw)EXp`pwt;r#LhIzdCcxbWPy zU2gvOd25fCSmuYrPDvxZQd2*)$4-nH7OCLBPc#BuW)jvt5fdc4PNW0$r7U;Ysb*U%OsADH;%JtJ^O~KjfWpmE`P8_|*RM4@pztx@H7XxCAF1e4aIHPJKJ}k>E z1&C>#Dcn+>M!gxge9ReSRF~E*-!mtS+5*@!yWiK*xVZTKYq@1SV%l8l-@bbwaePWP zj%h=6(9irXkc~epE)iZ#TkF2QAPiT74wyEKwV=dpjY?$IJX{}qup?uc^sbGHoGllCeG0xCSY3u_=k$q!}g2#1J_2-6~i*nG=XAXAI z{@QNO*+pFgGmcJaW*l3jU)p|gIjd8RDFk!jb-W&`r3CYQttl`9(R_Dhe3-$->HKW5 zUlEXn7+n;IH%(3GhSX*7E`S?y>O)`ls>0tA!Ca_0PgjzYFr2Oe&mX!9@F{?<++je2 z5TW^?@|ZpYX4ioY+u&jV%+xudgyY)`358-6^VtKbccJr_%RnW0_XyFDFym{>#+Rve zNWE*`LNyvx;}!Ab+#}kcG&4%?J3`?L6*Hg{GF>3^1tm;L4pdil-+9`C(xCFT!)sv+ zWyL;vp=N&ze3q)NB6P#d2}u5{FKUr<@mk=FMM>Z$LLupkS}wet<~Pcz+i441%1nSE z!6eF>ji(`@k4iE0K?Kc8>!LeyuCF#^<|G*q3iDM=Kfcsk&lJAbnzUi#Z+;Q$g^+@y z>b@rRw&JVC+jU9K%|nd#`&W8GlXwUP?Yb)Gl2mhE&W6y0-z_;+=0k<8^f-6?-VD%- z^FwVL6=JZxt$mW^;WO!QYq@AZfx~tTSC)F$;6kz%8{eoeH{m$5H#MQBEuh95#b*S MC|-Ufz9%#Lf1~@1?f?J) diff --git a/src/Parquet.Floor/Assets/icons/raw-extension.png b/src/Parquet.Floor/Assets/icons/raw-extension.png deleted file mode 100644 index ed36e28c3f797e74ebecac69432b7bfacb6616c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5078 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 diff --git a/src/Parquet.Floor/Extensions.cs b/src/Parquet.Floor/Extensions.cs new file mode 100644 index 00000000..3c7fc426 --- /dev/null +++ b/src/Parquet.Floor/Extensions.cs @@ -0,0 +1,74 @@ +using System.Diagnostics; +using Parquet.Meta; + +namespace Parquet.Floor { + static class Extensions { + public static string ToSimpleString(this LogicalType? lt) { + if(lt == null) + return string.Empty; + + if(lt.UUID != null) + return "UUID"; + + if(lt.STRING != null) + return "STRING"; + + if(lt.MAP != null) + return "MAP"; + + if(lt.LIST != null) + return "LIST"; + + if(lt.ENUM != null) + return "ENUM"; + + if(lt.DECIMAL != null) + return $"DECIMAL (precision: {lt.DECIMAL.Precision}, scale: {lt.DECIMAL.Scale})"; + + if(lt.DATE != null) + return $"DATE"; + + if(lt.TIME != null) { + string unit = lt.TIME.Unit.MICROS != null + ? "MICROS" + : lt.TIME.Unit.MILLIS != null + ? "MILLIS" + : "NANOS"; + return $"TIME (unit: {unit}, isAdjustedToUTC: {lt.TIME.IsAdjustedToUTC})"; + } + + if(lt.TIMESTAMP != null) { + string unit = lt.TIMESTAMP.Unit.MICROS != null + ? "MICROS" + : lt.TIMESTAMP.Unit.MILLIS != null + ? "MILLIS" + : "NANOS"; + return $"TIMESTAMP (unit: {unit}, isAdjustedToUTC: {lt.TIMESTAMP.IsAdjustedToUTC})"; + } + + if(lt.INTEGER != null) + return $"INTEGER (bitWidth: {lt.INTEGER.BitWidth}, isSigned: {lt.INTEGER.IsSigned})"; + + if(lt.UNKNOWN != null) + return "UNKNOWN"; + + if(lt.JSON != null) + return "JSON"; + + if(lt.BSON != null) + return "BSON"; + + if(lt.UUID != null) + return "UUID"; + + return "?"; + } + + public static void OpenInBrowser(this string url) { + var p = new Process(); + p.StartInfo.UseShellExecute = true; + p.StartInfo.FileName = url; + p.Start(); + } + } +} diff --git a/src/Parquet.Floor/Parquet.Floor.csproj b/src/Parquet.Floor/Parquet.Floor.csproj index 94591a56..ce1eef76 100644 --- a/src/Parquet.Floor/Parquet.Floor.csproj +++ b/src/Parquet.Floor/Parquet.Floor.csproj @@ -1,9 +1,17 @@  + WinExe net8.0 enable latest true + true + app.manifest + floor + true + true + true + Assets/icon.ico @@ -15,12 +23,6 @@ - - - - - - @@ -29,15 +31,19 @@ + + + + + + - - - - + + @@ -50,4 +56,8 @@ DataView.axaml + + + + diff --git a/src/Parquet.Floor.Desktop/Parquet.Floor.Desktop.csproj.user b/src/Parquet.Floor/Parquet.Floor.csproj.user similarity index 86% rename from src/Parquet.Floor.Desktop/Parquet.Floor.Desktop.csproj.user rename to src/Parquet.Floor/Parquet.Floor.csproj.user index 89082262..24c31915 100644 --- a/src/Parquet.Floor.Desktop/Parquet.Floor.Desktop.csproj.user +++ b/src/Parquet.Floor/Parquet.Floor.csproj.user @@ -4,6 +4,6 @@ ProjectDebugger - all_var + clean \ No newline at end of file diff --git a/src/Parquet.Floor.Desktop/Program.cs b/src/Parquet.Floor/Program.cs similarity index 80% rename from src/Parquet.Floor.Desktop/Program.cs rename to src/Parquet.Floor/Program.cs index 5d0637a1..052cab80 100644 --- a/src/Parquet.Floor.Desktop/Program.cs +++ b/src/Parquet.Floor/Program.cs @@ -1,7 +1,9 @@ using System; using Avalonia; +using Projektanker.Icons.Avalonia.FontAwesome; +using Projektanker.Icons.Avalonia; -namespace Parquet.Floor.Desktop; +namespace Parquet.Floor; class Program { // Initialization code. Don't use any Avalonia, third-party APIs or any @@ -25,9 +27,12 @@ public static AppBuilder BuildAvaloniaApp() { Console.WriteLine(ex); } + IconProvider.Current + .Register(); + return AppBuilder.Configure() .UsePlatformDetect() - .WithInterFont() + //.WithInterFont() .LogToTrace(); } diff --git a/src/Parquet.Floor/Styles.axaml b/src/Parquet.Floor/Styles.axaml index 1436aa12..3713f2e2 100644 --- a/src/Parquet.Floor/Styles.axaml +++ b/src/Parquet.Floor/Styles.axaml @@ -1,17 +1,15 @@  + xmlns:system="clr-namespace:System" + xmlns:i="https://github.com/projektanker/icons.avalonia"> - - + - - - - - - - - + + + + + + + 0,0,20,0 + + + 0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Parquet.Floor/Views/MainWindow.axaml b/src/Parquet.Floor/Views/MainWindow.axaml index e06bd103..2b211dc0 100644 --- a/src/Parquet.Floor/Views/MainWindow.axaml +++ b/src/Parquet.Floor/Views/MainWindow.axaml @@ -8,5 +8,5 @@ x:Class="Parquet.Floor.Views.MainWindow" Icon="/Assets/icon.ico" Title="Floor"> - + diff --git a/src/Parquet.Floor/Views/MainWindow.axaml.cs b/src/Parquet.Floor/Views/MainWindow.axaml.cs index 0b1ffed5..d73aa1ca 100644 --- a/src/Parquet.Floor/Views/MainWindow.axaml.cs +++ b/src/Parquet.Floor/Views/MainWindow.axaml.cs @@ -5,7 +5,5 @@ namespace Parquet.Floor.Views; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); - - Title = $"Parquet Floor v{Parquet.Globals.Version}"; } } \ No newline at end of file diff --git a/src/Parquet.Floor/Views/DataViewCellTemplate.cs b/src/Parquet.Floor/Views/Templates/DataViewCellTemplate.cs similarity index 80% rename from src/Parquet.Floor/Views/DataViewCellTemplate.cs rename to src/Parquet.Floor/Views/Templates/DataViewCellTemplate.cs index 68bc684e..b7d57d14 100644 --- a/src/Parquet.Floor/Views/DataViewCellTemplate.cs +++ b/src/Parquet.Floor/Views/Templates/DataViewCellTemplate.cs @@ -7,12 +7,12 @@ using Avalonia.Layout; using Parquet.Schema; -namespace Parquet.Floor.Views { +namespace Parquet.Floor.Views.Templates { /// /// Implements pretty much all of the logic for rendering a parquet data cell, including complex types. /// - internal class DataViewCellTemplate : IDataTemplate { + class DataViewCellTemplate : IDataTemplate { private const string DataCellClassName = "data-cell"; private const string DataCellNullClassName = "data-cell-null"; @@ -47,16 +47,12 @@ private static TextBlock CreateTextBlock(string value, string? extraClassName = Text = value }; r.Classes.Add(DataCellClassName); - if(extraClassName != null) { - r.Classes.Add(extraClassName); - } + if(extraClassName != null) r.Classes.Add(extraClassName); return r; } public static Control BuildValue(object? value, Field f, int depth, string? extraClassName = null, bool forceData = false) { - if(value == null) { - return CreateNullTextBlock(); - } + if(value == null) return CreateNullTextBlock(); if(forceData || f.SchemaType == SchemaType.Data) { TextBlock tb = CreateTextBlock(value.ToString()!, extraClassName); @@ -68,8 +64,7 @@ public static Control BuildValue(object? value, Field f, int depth, string? extr }; var structField = (StructField)f; - if(value is IDictionary valueDictionary) { - foreach(Field field in structField.Fields) { + if(value is IDictionary valueDictionary) foreach(Field field in structField.Fields) { var vsp = new StackPanel { Orientation = Orientation.Horizontal @@ -82,7 +77,6 @@ public static Control BuildValue(object? value, Field f, int depth, string? extr valueDictionary.TryGetValue(field.Name, out object? fieldValue); vsp.Children.Add(BuildValue(fieldValue, field, depth + 1)); } - } return sp; } else if(f.SchemaType == SchemaType.Map) { @@ -92,8 +86,7 @@ public static Control BuildValue(object? value, Field f, int depth, string? extr var mapField = (MapField)f; - if(value is IDictionary valueDictionary) { - foreach(DictionaryEntry entry in valueDictionary) { + if(value is IDictionary valueDictionary) foreach(DictionaryEntry entry in valueDictionary) { var vsp = new StackPanel { Orientation = Orientation.Horizontal @@ -104,7 +97,6 @@ public static Control BuildValue(object? value, Field f, int depth, string? extr //vsp.Children.Add(CreateTextBlock(": ")); vsp.Children.Add(BuildValue(entry.Value, mapField.Value, depth + 1)); } - } return sp; } else if(f.SchemaType == SchemaType.List) { @@ -112,11 +104,7 @@ public static Control BuildValue(object? value, Field f, int depth, string? extr Orientation = Orientation.Vertical }; var listField = (ListField)f; - if(value is IEnumerable valueList) { - foreach(object? entry in valueList) { - sp.Children.Add(BuildValue(entry, listField.Item, depth + 1)); - } - } + if(value is IEnumerable valueList) foreach(object? entry in valueList) sp.Children.Add(BuildValue(entry, listField.Item, depth + 1)); return sp; } @@ -127,13 +115,7 @@ public static Control Build(object? param, Field f, int depth) { object? value = null; - if(param is Dictionary row) { - if(row.TryGetValue(f.Name, out object? mapValue)) { - if(mapValue != null) { - value = mapValue; - } - } - } + if(param is Dictionary row) if(row.TryGetValue(f.Name, out object? mapValue)) if(mapValue != null) value = mapValue; return BuildValue(value, f, depth); } diff --git a/src/Parquet.Floor/Views/Templates/DataViewHeaderTemplate.cs b/src/Parquet.Floor/Views/Templates/DataViewHeaderTemplate.cs new file mode 100644 index 00000000..54490c24 --- /dev/null +++ b/src/Parquet.Floor/Views/Templates/DataViewHeaderTemplate.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Parquet.Schema; +using Avalonia.Controls; +using Avalonia.Controls.Templates; +using Avalonia.Layout; +using Avalonia; +using Parquet.Floor.ViewModels; +using Avalonia.Platform; +using Avalonia.Media.Imaging; + +namespace Parquet.Floor.Views.Templates { + class DataViewHeaderTemplate : IDataTemplate { + private readonly Field _field; + + public DataViewHeaderTemplate(Field field) { + _field = field; + } + + private static bool IsNumeric(Type t) => + t == typeof(short) || t == typeof(int) || t == typeof(long) || t == typeof(decimal); + + private static bool IsByteArray(Type t) => + t == typeof(byte[]); + + private static bool IsString(Type t) => t == typeof(string); + + private Control CreateIcon() { + + string? name = null; + + switch(_field.SchemaType) { + case SchemaType.Data: + if(_field is DataField df) { + if(IsNumeric(df.ClrType)) { + name = "number"; + } else if(IsString(df.ClrType)) { + name = "string"; + } else if(IsByteArray(df.ClrType)) { + name = "bytearray"; + } + } + break; + case SchemaType.Struct: + name = "struct"; + break; + case SchemaType.Map: + name = "map"; + break; + case SchemaType.List: + name = "list"; + break; + } + + + if(name == null) + return new Control(); + + var image = new Image { + Source = new Bitmap(AssetLoader.Open(new Uri($"avares://floor/Assets/icons/col/{name}.png"))) + }; + image.Classes.Add("dt-icon"); + return image; + + } + + public Control? Build(object? param) { + + var r = new StackPanel { + Orientation = Orientation.Horizontal, + HorizontalAlignment = HorizontalAlignment.Stretch + }; + r.Children.Add(new TextBlock { + Text = _field.Name + }); + r.Children.Add(CreateIcon()); + + //r.SetValue(ToolTip.TipProperty, "..."); + return r; + } + public bool Match(object? data) => true; + } +} diff --git a/src/Parquet.Floor.Desktop/app.manifest b/src/Parquet.Floor/app.manifest similarity index 100% rename from src/Parquet.Floor.Desktop/app.manifest rename to src/Parquet.Floor/app.manifest diff --git a/src/Parquet.sln b/src/Parquet.sln index 11aa2164..7d2bd12f 100644 --- a/src/Parquet.sln +++ b/src/Parquet.sln @@ -37,12 +37,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Parquet.PerfRunner", "Parquet.PerfRunner\Parquet.PerfRunner.csproj", "{6325A9B7-32B4-464C-84F4-9B62BE630E90}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UI", "UI", "{712F0F85-C1D0-4176-BFCD-20F09CB59191}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Parquet.Floor", "Parquet.Floor\Parquet.Floor.csproj", "{882BE8ED-7F5F-4392-8884-CF602622E569}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Parquet.Floor.Desktop", "Parquet.Floor.Desktop\Parquet.Floor.Desktop.csproj", "{A6B74525-BDCB-4872-B530-3CBC50D11306}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -65,10 +61,6 @@ Global {882BE8ED-7F5F-4392-8884-CF602622E569}.Debug|Any CPU.Build.0 = Debug|Any CPU {882BE8ED-7F5F-4392-8884-CF602622E569}.Release|Any CPU.ActiveCfg = Release|Any CPU {882BE8ED-7F5F-4392-8884-CF602622E569}.Release|Any CPU.Build.0 = Release|Any CPU - {A6B74525-BDCB-4872-B530-3CBC50D11306}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A6B74525-BDCB-4872-B530-3CBC50D11306}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A6B74525-BDCB-4872-B530-3CBC50D11306}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A6B74525-BDCB-4872-B530-3CBC50D11306}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -78,8 +70,6 @@ Global {AB829BBB-EF87-4038-8D32-E1C1629F357C} = {60294E19-6F8D-4D78-9A62-C50489095484} {F28C5308-5410-4066-9DA8-4DDC8ACB0B5B} = {AB829BBB-EF87-4038-8D32-E1C1629F357C} {6325A9B7-32B4-464C-84F4-9B62BE630E90} = {3F47B841-9074-4317-8ACA-0F2EEA34FA62} - {882BE8ED-7F5F-4392-8884-CF602622E569} = {712F0F85-C1D0-4176-BFCD-20F09CB59191} - {A6B74525-BDCB-4872-B530-3CBC50D11306} = {712F0F85-C1D0-4176-BFCD-20F09CB59191} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B5C12140-A3BF-47C9-A4AD-91F7C4682804}