From 13b0da86f54fe6b8ebf33fed26850353a132cf05 Mon Sep 17 00:00:00 2001 From: Igor Timofeev Date: Wed, 28 Jun 2023 19:19:48 +0000 Subject: [PATCH] Added a lot of icons to all context menus & separated Color/SoundSource (s) --- lib/ocelot-brain | 2 +- sprites/icons/Antenna.png | Bin 0 -> 2954 bytes sprites/icons/AspectRatio.png | Bin 0 -> 2708 bytes sprites/icons/Code.png | Bin 0 -> 2928 bytes sprites/icons/Copy.png | Bin 0 -> 2919 bytes sprites/icons/Cross.png | Bin 0 -> 2922 bytes sprites/icons/Delete.png | Bin 0 -> 3209 bytes sprites/icons/Edit.png | Bin 0 -> 2819 bytes sprites/icons/Eject.png | Bin 0 -> 2920 bytes sprites/icons/File.png | Bin 0 -> 2975 bytes sprites/icons/Folder.png | Bin 0 -> 2926 bytes sprites/icons/FolderSlash.png | Bin 0 -> 2965 bytes sprites/icons/Label.png | Bin 0 -> 2741 bytes sprites/icons/Link.png | Bin 0 -> 2976 bytes sprites/icons/LinkSlash.png | Bin 0 -> 2952 bytes sprites/icons/Microchip.png | Bin 0 -> 2945 bytes sprites/icons/NotificationError.psd | Bin 22480 -> 0 bytes sprites/icons/NotificationInfo.psd | Bin 22258 -> 0 bytes sprites/icons/NotificationWarning.psd | Bin 23004 -> 0 bytes sprites/icons/Plus.png | Bin 0 -> 2901 bytes sprites/icons/Power.png | Bin 0 -> 3419 bytes sprites/icons/Restart.png | Bin 0 -> 2744 bytes sprites/icons/Save.png | Bin 0 -> 2943 bytes sprites/icons/SaveAs.png | Bin 0 -> 2962 bytes sprites/icons/Tiers.png | Bin 0 -> 3234 bytes sprites/icons/Window.png | Bin 0 -> 2916 bytes sprites/window/rack/Motherboard.png | Bin 3556 -> 6685 bytes .../resources/ocelot/desktop/colorscheme.txt | 5 +- .../images/spritesheet/spritesheet.png | Bin 101963 -> 102511 bytes .../images/spritesheet/spritesheet.txt | 508 +++++++++--------- .../ocelot/desktop/audio/SoundSource.scala | 22 +- .../scala/ocelot/desktop/color/Color.scala | 20 +- .../ocelot/desktop/graphics/Graphics.scala | 10 +- .../ocelot/desktop/graphics/IconDef.scala | 14 - .../ocelot/desktop/graphics/IconSource.scala | 137 +++++ .../scala/ocelot/desktop/graphics/Icons.scala | 108 ---- .../scala/ocelot/desktop/inventory/Item.scala | 4 +- .../desktop/inventory/ItemFactory.scala | 4 +- .../ocelot/desktop/inventory/Items.scala | 6 +- .../desktop/inventory/SyncedInventory.scala | 2 +- .../desktop/inventory/item/ApuItem.scala | 4 +- .../inventory/item/ComponentBusItem.scala | 4 +- .../desktop/inventory/item/CpuItem.scala | 4 +- .../desktop/inventory/item/DataCardItem.scala | 4 +- .../item/DiskDriveMountableItem.scala | 5 +- .../desktop/inventory/item/EepromItem.scala | 72 ++- .../desktop/inventory/item/FloppyItem.scala | 6 +- .../inventory/item/GraphicsCardItem.scala | 4 +- .../desktop/inventory/item/HddItem.scala | 7 +- .../inventory/item/InternetCardItem.scala | 4 +- .../inventory/item/LinkedCardItem.scala | 6 +- .../desktop/inventory/item/MemoryItem.scala | 4 +- .../inventory/item/NetworkCardItem.scala | 4 +- .../inventory/item/RackMountableItem.scala | 2 +- .../inventory/item/RedstoneCardItem.scala | 58 +- .../item/SelfDestructingCardItem.scala | 4 +- .../desktop/inventory/item/ServerItem.scala | 4 +- .../inventory/item/SoundCardItem.scala | 26 +- .../item/WirelessNetworkCardItem.scala | 4 +- .../inventory/traits/ComponentItem.scala | 3 +- .../inventory/traits/CpuLikeItem.scala | 5 +- .../desktop/inventory/traits/DiskItem.scala | 50 +- .../inventory/traits/WindowProvider.scala | 25 - .../desktop/node/ComputerAwareNode.scala | 2 +- .../ocelot/desktop/node/EntityNode.scala | 3 +- .../ocelot/desktop/node/LabeledNode.scala | 4 +- src/main/scala/ocelot/desktop/node/Node.scala | 24 +- .../desktop/node/nodes/ComputerNode.scala | 5 +- .../ocelot/desktop/node/nodes/RackNode.scala | 19 +- .../desktop/node/nodes/ScreenNode.scala | 8 +- .../scala/ocelot/desktop/ui/UiHandler.scala | 1 - .../ocelot/desktop/ui/widget/Checkbox.scala | 1 + .../desktop/ui/widget/DiskEditWindow.scala | 29 +- .../scala/ocelot/desktop/ui/widget/Icon.scala | 20 +- .../ocelot/desktop/ui/widget/MenuBar.scala | 22 +- .../component/ComponentSelectorEntry.scala | 4 +- .../widget/contextmenu/ContextMenuEntry.scala | 67 ++- .../widget/contextmenu/ContextMenuIcon.scala | 10 + .../contextmenu/ContextMenuIconSize.scala | 5 + .../contextmenu/ContextMenuSubmenu.scala | 19 +- .../notification/NotificationDialog.scala | 4 +- .../ui/widget/settings/SettingsTab.scala | 4 +- .../ui/widget/settings/SoundSettingsTab.scala | 4 +- .../ui/widget/settings/UISettingsTab.scala | 4 +- .../ui/widget/slot/CardSlotWidget.scala | 4 +- .../widget/slot/ComponentBusSlotWidget.scala | 4 +- .../ui/widget/slot/CpuSlotWidget.scala | 4 +- .../ui/widget/slot/EepromSlotWidget.scala | 4 +- .../ui/widget/slot/FloppySlotWidget.scala | 4 +- .../ui/widget/slot/HddSlotWidget.scala | 4 +- .../desktop/ui/widget/slot/ItemChooser.scala | 18 +- .../ui/widget/slot/MemorySlotWidget.scala | 4 +- .../widget/slot/RackMountableSlotWidget.scala | 10 +- .../desktop/ui/widget/slot/SlotWidget.scala | 13 +- .../ui/widget/statusbar/StatusBar.scala | 10 +- .../verticalmenu/VerticalMenuButton.scala | 8 +- .../ocelot/desktop/util/ComputerAware.scala | 39 +- .../ocelot/desktop/util/DiskDriveAware.scala | 94 ++-- .../ocelot/desktop/windows/RackWindow.scala | 2 +- .../ocelot/desktop/windows/ScreenWindow.scala | 6 +- 100 files changed, 856 insertions(+), 782 deletions(-) create mode 100644 sprites/icons/Antenna.png create mode 100644 sprites/icons/AspectRatio.png create mode 100644 sprites/icons/Code.png create mode 100644 sprites/icons/Copy.png create mode 100644 sprites/icons/Cross.png create mode 100644 sprites/icons/Delete.png create mode 100644 sprites/icons/Edit.png create mode 100644 sprites/icons/Eject.png create mode 100644 sprites/icons/File.png create mode 100644 sprites/icons/Folder.png create mode 100644 sprites/icons/FolderSlash.png create mode 100644 sprites/icons/Label.png create mode 100644 sprites/icons/Link.png create mode 100644 sprites/icons/LinkSlash.png create mode 100644 sprites/icons/Microchip.png delete mode 100644 sprites/icons/NotificationError.psd delete mode 100644 sprites/icons/NotificationInfo.psd delete mode 100644 sprites/icons/NotificationWarning.psd create mode 100644 sprites/icons/Plus.png create mode 100644 sprites/icons/Power.png create mode 100644 sprites/icons/Restart.png create mode 100644 sprites/icons/Save.png create mode 100644 sprites/icons/SaveAs.png create mode 100644 sprites/icons/Tiers.png create mode 100644 sprites/icons/Window.png delete mode 100644 src/main/scala/ocelot/desktop/graphics/IconDef.scala create mode 100644 src/main/scala/ocelot/desktop/graphics/IconSource.scala delete mode 100644 src/main/scala/ocelot/desktop/graphics/Icons.scala delete mode 100644 src/main/scala/ocelot/desktop/inventory/traits/WindowProvider.scala create mode 100644 src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuIcon.scala create mode 100644 src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuIconSize.scala diff --git a/lib/ocelot-brain b/lib/ocelot-brain index 8222b12..db1a8c3 160000 --- a/lib/ocelot-brain +++ b/lib/ocelot-brain @@ -1 +1 @@ -Subproject commit 8222b1287c40965622fffcdeff4ae93f5d0418b5 +Subproject commit db1a8c3ac5ebc247086327303a47313456a4e987 diff --git a/sprites/icons/Antenna.png b/sprites/icons/Antenna.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe9165ec6a996a5dafc2959bd228814ca23aeda GIT binary patch literal 2954 zcmd5;Yitx%6rO@$DX$fjq7^z!jfKGMymohXMph`hrQL=tZCRm34V|62(+=#;3^UVq zA&_oFdC4PyL@*){qOn$L{6Pseq*Mh_2oaDpC`pNb{6Rvah(9EPclJej6j1r$W@mTi z-gD3S&N<&Xb2d~}mW|GPE)PMF(ZTXS4g7c5SMG55TX^l3fFL=n;`djTNLmD-HDzLJBtJte=6ST*!`+Zz9yqlUfR_xqkc?)fu02O_f~*R@>fuep|;c zr!MBpyM`nxcYWC0-h?=cmw!F6uRk}@8|u31I&q_wF8rusXiER{5jbF@JX3yEh7|@{C(Z#dp_NIhG_Yn!dtK+_6!{lAL*yUSF12ynW0M zb^YN}pMbh^S6?i7Ve6B-x13>)6t3G)G5*5Y>im=aL+h!+C_CxM!b6`Pz217$_f+pS zpzbZpojt>sUsn>}?`(Z#;!8WOM846V9n&wY3`X_V!hl*i@rdS{?CNs|Q05)_Hk zG*5bXH-n}>7_??cGG7yzo3;g?d|0Dp={!NSw6r)|7^h}55Rfb!LDB?G<4^)OSE!Z{ z$5pc^qagrH(NJ_t(NxsdC`7a-%ZEXvDHmdTR;_BL!vq6H#08z8oTTkiQcx1Ja(a^y zO&XU(0z^R!sFn$3sjRHts9BoXs12ezyM2cN7}`)MYvaCHVzI0V(<*I-ZlnWpUuiSE zLI*?*FtsK_1f|UoW>Ll))2actT!wWoLal$?_zb5)EmRBCoht)XS3$&v18$LcU3Y zB|KDE5_wrOVgiho5)&E#p{orTn#}?4*P@yM4MTLy!1W;PN`@vYQMhq;cS@oSh4`Rq zT7oKqV8Dk#SDlI?@xVj683wvZduhmd*~Q@zk(O{-jK~ZtxkZX%Gv@=E*ksekKA);2 zNfV)t+vr3uLwVh94tKdkH%_uHFCKAG5-w0c;36(gmMKq0+k8WT#VkYzYPC^GP$Mfa z3`GhI?iOSYr#&tPqGH{+%(5gYl5UTiVeOJhvXC!VOqk*o=^|VJmZ$Hc3YsJyFNk(Q z`7qHY1CX%vvT~nzJd)+~`Ibfil|FzZDeI;tTP=bCN*ZA7GT9lFgv4OrO`-Y0&>1%+ zM%-QrCux?(8Q_Y*xQin0aS1L-mSqkwkhm#K_d;iR8h*VQ(*7IhY29L@pf&*5oe6AE zXGBeH2F8F~=z<}@rVI?zhslN(Lj_%rDxzQ~j%Ze;bg#=&4Yf4%c7Y6PM*@a2AZ!Dz zWFerB(cVLoByzwj0s-I@!;!cbxI~cfxu}!K-!qqW zcydQv=N7l^{#H6z-MN0|=B>f=1&QLxJ*U?p)5lf!6!ac)OkcS1oa6H^_O32E?MUoA zaOs`!w2x<>oqT2FzWUE{<~fh<&#hk*SvqdiGnSS(vH8}QM56QH=nsZXnBJaq`6qkS N3zk*}I_A{B@i&6b(K7%5 literal 0 HcmV?d00001 diff --git a/sprites/icons/AspectRatio.png b/sprites/icons/AspectRatio.png new file mode 100644 index 0000000000000000000000000000000000000000..90f936078cf4675ea1b3b85799e60694b686dc89 GIT binary patch literal 2708 zcmcgueQXnD7{3kBF&GvxYyxxVp#sYFu6J#(J*Y6+v2~$iY!x=tzy|ya@Hk==^N!z>k zp7;6vp6B^J&%K)~D@yZnXXIiSmKQ7wRH1*H_072r{TB5P0u0OIWWT?%SW*RuSCuZo z=Q_Mz&pZs9yQ6)3Px%LxcWvsKS#o0E%A9Y$*5<6Jj9xsxCHUy`c+CO-&Ub?TcHvIt zVC!$TZA#%|Up|>Vr}TL7PZQUVJJI!w|JlhCUg-U$qt`p@Y*wdmsbk}cjr}zT;um%t z{O-)<{K)R?wu;^R;|Cfs+njYD7WDSzv|S2yUvZwi+R7BYQ9f?=+U}X~-sf^Z?K$6d zn`8XPukC%pc1K%R#pf>D^2J@duFkB?)d#Wi(*x^mYuYXwzM?JOW0UnYS<4C^Z)jV+ zbIND6ec>~2!P@gz9w@$V`|W$Son?;}ZQ5Ku?c%u=`KS8Et#uSdxx%9>55N81KqQIS1&q+GC5Hzt2Hoe(lqOvg}wZ00fyyt%HbNbCbWzf)tDVv`L!ov8nVW)g^Lmz z5F4P03$RXBd_-S&4}r^)k67gj(IL$b>*cZ*9agtggvFKy(JK*)9>y0Yc;p}kO@Jq2 zQN`dBJ|gLtN7vReMc_#jv%yEC3R)AY#Qmxcakrf&MVe-C&TDtLolcKuKF-h#P0<|X zphId6xW%@*8!l^hC&&P5xK--83@BHiK8&m2^rDa z2sdkxs)B~vsEe>9j%dyvipDUj;I({?VLLKUZq|6e4uPraVO5O|Rk?B~UYud)!i(^Q@0D**(lO+YoC6S_sbGW?F8F6{NL;C}&*k}pI+Mntn zNfnWgYwS2l@J7T4BsszDBwegiA_b2dk^(JqBI|Msg1`)UTdvEfjX`v{SBsT|JaT|# z9W-D`7l?RC#%-|@ITsn>IGPq|m)pg1RGlak|sXtk1$ z5G@%%iAXQYBjjUD$m#t}^$Sxd`+qA$SudDW&rmnEQ|dmDO5;+iFv%IrkJLD0RUaD4JQ^FBLGrg+K8>&b+tFc3 zCK>p!H|@|8dVO1$nR5fW$(%f(f|RYJb48;4&{OD45)KB6!=9}ts?X$Nc+Q0%2V0vv zvhzAOE?Lli?w&Vu7e83AzqfGww`Zf%2gcV-$hJ-WglJnQe$f#>|J8>40o$R&TMwN+ qe!u_4lkBfGGhXj}KW}iCoc+qV$@6=Dn6<|`^aM*P0tc6@efm$XcZJjd literal 0 HcmV?d00001 diff --git a/sprites/icons/Code.png b/sprites/icons/Code.png new file mode 100644 index 0000000000000000000000000000000000000000..68a7aebc5d15a524556c23e2a34ae90ee084bbf9 GIT binary patch literal 2928 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 XrEp%$xPhPCIj*X_CU|h+>h*sEfsVcF literal 0 HcmV?d00001 diff --git a/sprites/icons/Cross.png b/sprites/icons/Cross.png new file mode 100644 index 0000000000000000000000000000000000000000..2c50c723cb38b57ad3a095b48b27b28a5fda288c GIT binary patch literal 2922 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 t=3iNHE`rPR`*2JX(>ZAW%zhM8%* ztzZjU5JU(d4~e7@)KG!?iV!TO1qBHpK^`J%QiDG*(a=D}1X1gq-R)AK1$@L!c6a8^ zx#v6QJKs5TSLNmA^iLU)f?-&H?+i~q`cE~!$-U5TMq4|;umo0gyYsRH*$?sjoN4%Y zv(xFAfMMg;Z(7$h^V7UXRyK{yKDx6o`SSP5xH);j3y0TupI(g@?Qw6|=XG!Lr%4Uf zzoo8~(x3TmY2vt?!&%q*EJ-?A|DyY)em!4l`DJ^H^Rd$jyZjfoub8uIV@sW#S-<7h$h;J_9h-UL#*)+pHJ3D3#u{gHKXpOEtn_CW)y&^8 z;Cyjw!O3@E@!6|mv&O9J{rcL|mV+59SIr!J;mbKgkGCc*G-m|a^n-;T?fv9N^`EXm z7u%pzmy?`1$u+b%E4d+C4{!7N5ZjS?WV6D#RS0xhEs*74N0swB^2Hg(MC0S< ziIN~!XcG*y*aqkUI&=}JOlZ0F2I)hE&{N7GSLpDc)h%6m;&&Jc+84pXEz z0qEd?#sbd;WHkg3TVe>5KuVEH2s~Z`&MgOJ6#=8@ES=ZAXez04Kn$V>cTcBCv_2o_ zl{6hlJoI{81WMH;iUP-2c-G7ZSd#HGHZlOMR?;Exe$p)PcIXc<0X6_T_IqT$%#e?< zKiWxx%p)JSqhlGH*=BQ?Njqc!X``(I=`gbb$pGE~EOy#vwZ*;7Rz=jzAlTWf5tV>E zvcO_7)4)R7K)^{dcB_T-^DK&wWoeqHZFZZ5HCiU3LT-krp%Pcdns6>$9J>mNctm&{ z;EjfI5xgM=C=jt_u?s#P3OTmFq7)*h_Yp}HU6TWP1yEsD3F5A!I^Bwp>MnQcO*=?hutCxatbhcNp-F3iwmWPLB2;j8q<(MccZv3&gdU@XF9lKwMAMlfx=n_c zrE;its)YhnfQB+uH5U<3&KT39(rhmm03i`0WPi7Ds@p*on5zDDe>R z{}AtiMS8e?i?aVe7Kt)mHqp+Z?ry5+y(h}#bfY$rdCYayJ`bxwG@v;&JmTZzZ#8}l zU;eiP#86En@lJ2ujwSReH!kC62y_!ag+K|3TSaG#nv4&Yr`y!ypPbIOs- z)a;gZDa4S%QKv?Rv4J~^p6^NRSUBywYAsJ1@&Ft!dX8wH#4`|>u!FyH+b%e z4|0EQO8qhC%6aCswB0?IxR$*+obEA7-kPAizqBEJV%4$2z8jctH(Ps3`?bt#X%{xX zP_`|pa`(JR!DWlzJCoGVeB@Wxkx3zW%)Yu%Xv@t(&ASiv9B%X>c?F4rzLL8oMH!;OMaigwbv#}HD9&#`#62MamMmy=Xx5ZEnNN=(K5AU literal 0 HcmV?d00001 diff --git a/sprites/icons/Eject.png b/sprites/icons/Eject.png new file mode 100644 index 0000000000000000000000000000000000000000..abde562930931d9b92956814d57e1e0b6befaabd GIT binary patch literal 2920 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�Buc||gvr~jfQ8dQ8?GDcAbh&0?G(}S+#gh(- zplN~P1eU>4KOA|}rLa)#o15~5-aL4{X=(yVHa9ohn;E;R*O3S;Zjz!&nkJA0VYDbF zh!Ki0DQ&?A4N;dhQ&ttsvIs(Iqv^p>q{$SbTE?tmq{@T}M#g|fI_#8{QbJG?Gjdv^ z9!WTtL=r||6e^~HWE~kEmUMO}iE6&yE#o?g>ZH1DI#MD;0Zvq2Finr z78sy}rMYF=BuVdv8aA7O4vXth?b6*D5`^SX!5g6I&Y?pGpu=p4 zAtcG=KqYrNtm0Dy4ATHmkmq=YOQ(K&=)6Ev0?VfH{cl1~l|`%vN*zS(OyWZ(BdSUh z)CcrJ13EyY40XeUhjlfI0Zog@BCr}qHYrky>oQQoOclE^AVd0*pe_$6+dwaw5U_jb z@2*V}8JZO-h9dyOa)bz-ZX)DBTY?_>WjD6JwbZrv<=<;TV=P#}F9Vl73_HQ$E$Oixb literal 0 HcmV?d00001 diff --git a/sprites/icons/FolderSlash.png b/sprites/icons/FolderSlash.png new file mode 100644 index 0000000000000000000000000000000000000000..bba753262d5b2ac08b4155cc7141a19674e1e22b GIT binary patch literal 2965 zcmd5;eQeZZ81MLU3^t}1`Ixv`ltG}^UVFXXRZceU2He7J$2edE3B1?7-70r&X}j&V z%xt27C_;dsXdrwTO~%I({s2TmfG9}75Jd>Vm|zHjKSUNp5+eb8dtZ!?!Bqb6l3v@l z&-;A-p5Obd2v<(c&l{PCVOV}}TA&);3+*d+0QxV!aTj1%4zKwA;W9~!LcDtFWPGgC z>-CJou(4~_uRc`qb@=(^hlhMmTo%$jacn_wkw?{wh<~nw(jVb=3qVMR12a4d!@8x}e=yb;b zXTR^ZY<{zFNP9=+Ph4SDX~)O6io$uuU9957&DO#N?dMHj@k;OE!N!7|>7(W^YM;Bd z;7n~-^yk0?T+u+ zb2p&6d1`Ly1mCdQvcy(L+pOWQt@}0ltv;fl3$#R}1H8U3XVAX#y>plT{=&q9Htg`R zs@peaPCAYf$Va3KS`!N6e$9Zm+d-2eO*1&}bvWHFm&Y>!XK03|Xr6M? zB*O@_Ti{qc{UeYyLz0E+z?8Ht^yVY#ElU?Ds;Q~T(Zo75qmDvg@lrHHF${?$NV8eB zK!Q}w(HRW^Xo`lSTZ*RQwnh-u8Y~}yJWYiV*RyI>Go2=sFe(9b%ITo(kdlIun3dBT zj9AjRBvLR2<50CsBh+qXne|!^s9PR_--AkSs?2Q;z4hL62J z)k%^jA|3aap8`>?947}S2 zky%1>iT#)zh|o)Rq=G8yR09o6!ASdRG;Fm717#7y51AP73x&QzG literal 0 HcmV?d00001 diff --git a/sprites/icons/Label.png b/sprites/icons/Label.png new file mode 100644 index 0000000000000000000000000000000000000000..96663ae179828a502bc8171ce90a88d3552e5b7a GIT binary patch literal 2741 zcmcgueQeZZ81De_IKHM3HU+X$h_FDfz4q>UEu663jqN5k#&*Dl66m$>?dtB@(ssMs z0&YS16d_@4dpM38A)w{Phv|F&}Mx{mQB$M-C;1bf3@4vdNI)6|2yI!;yopQeTbFDb z^Q)jfE*y&%d=JiO?ukH5Ly@`vZC zi#{F1*VQN{ejv&LwnBN@aopWtTAc=^Eg3?*?5y*TOy`HYXq4!JE8JI zJuuJ^sFP$5*4^HLp_1sq7CQrEK=p!%RMxD4>gI}|&|ELDA~ySZbXJ0c4r0LI(L^jN z>s-QvCH->n+FT|uG-+bgd$3eNYXX(1SJ43KvXQtzk`&6YHoME=aJy%q6iJZ;$q;rD zrznneaZVade=vxqiD9nFH#dz1?>tzFLrZX?ZwY+uG$kxW;e&^#Q!?5>fb+|` z!OH^h`#cy-)h0%+p8Is2t6`9 zP1{MH#+`ha#VHr`6A~CF9%dMl6iBDbNi$~4Bvr_jNjfZXQ@RPO!HV=%R6>)&<9NYr zC=Vu>VgN9o)UwnE9|J;8?~g|Sbov(}Nx|q!*ogBQD5`_pWvbJ!2#NlJ*ZIcBgiZq| z>v9OV0J*~fZ~&a8L=tzC4gh#NOS%Oillr5fKP1|J5_*~zA;Qab08VED>o*xeksE>5 zs}?G+@o*>uP4{47O^KnrszxP&Hw#BJ%3^xfWu=B13VOdm`o$4}CiSANH%c}H^gqOV zY>@`mZz=Zw$08Bt%O=%1#KTRMy7#4+oNLx5IghzM+h>3pgaev`!y`LR{#N6s@s)o& zKupyn6Yurb%`CxJxp|pAL%^HtDFnz++!{P%eEwPSK6pNn{Jx@~`;EQlU$7#mWyslW zT`k~p@Yc?qo30F*G&<1P_1-HVd|6${4*JNqczxlj)zTWvobSdKA=C4)t>dQLv`$#R zr!()^S%991{5lRh^+jIPI)Z&`qX#R#Hg|vFY0J_Zm-A=dyqgyZ<}b{j^4s;3ar0E< MFRAbyEMC6)Pe!?n#sB~S literal 0 HcmV?d00001 diff --git a/sprites/icons/Link.png b/sprites/icons/Link.png new file mode 100644 index 0000000000000000000000000000000000000000..e3f447fb2d093bea1e122038b38d72921d972b67 GIT binary patch literal 2976 zcmc&$32YQ)6rO@&DTn0<)I#kz5LyDWbL`9>BMX$>(k`-XDHU3Tz`ry9wqti^hMDOp zrj2q4A_#;CM1m+NwL-j+5Khs`G>a8Nj-N~%b8UYKGnY3|Hvx5yw$sYx8J)lI8@ow^n3am zC2RhdkN3$bXwUnp|B}9kTAuVS9eDTCXMWjw#y$FY%1go1TbIvTeyO~*_S1EHzCG44 zGPJ2rbJ3=qwXHQ+dd}hxGR}0SHlGgczrY>7(!^%JJfrWJMf*p=2cAm%r0rx&KjyBF zU)c6&`n}C9MPKmg#Zz0JyE3XIO}~oG_~`PI^o7kGh9`Tq``|!*Vam*`1=Y>-)(`%y zqOiXf*WR;v&2js_>=i3#3_EpV*2trseHSs=VQ1F9Iq$r7;BwPno*}0% zL1kM(>ePvzkrjFM+igt`XFRy!``{7nzQLWKu}s?U)b^$f*qi_Eyk$R+m^8QvJ9xPG z&r7qX97UDvuN77p7&c&-^-aOHJfDHqmdIu0W_e(yAgU1?uQ_M5)-pxlQ4_P;L&O?d9w@=Rst$37jV48!W^t$6#yB|6<(i1IG)q&olVWI+ zWd+(H@OC`@Ay7133JImY>G4?T&O=n0rY2BSU0t26&TdonN(zz1P0=jHvLvz~jRwU8 z^`v5qNqF!lvM?{Jc6KFV|oaLG?qd{OS)Bzc$rYasCuALjE%NZiW*8{(oU<< z!_nZ9NWn0SK*cnWEt9m>s#H@os?;7_Cm&xI0F^cnNXFvw z3==3K^!q#nO4TOIlHg`IiMKl)q=OG}BrS4w5=bsUGIq#17@l@QE|l2sQ^gvKKGy!& zBuT1>d|X2Z?JRT$?LpGbI%pEG98J2|key^j-o@B?Q4$$P!dtN}qhSW&u3jxv67uK- zb~{4@JIRBPn`9jbRZw*DWXS2HX_4j~2(mRYQ5Fh?vVmIM5Ff(XaB=)9EaOq)2|%<4 z%0q}28K6YOm*sBi(W}Vu{dH9kIlTo*V$lsXWYz&4=2fEFCA!li38|jI8=&^q(0QKY zIH%|&c^7~r2y&2g0ntr5c~Nwu@=H)mrhYSYr@*)bCP~_V13g|Au?i@a5UDdo^q7pO zDz#AW(hCjf0Esfx4G$60)d&tWEi8+`Y8+LoNO7%8QVlm%{Mvx@7)OG-+@)+?qa-2V zcQD>4qVm6j94a7svBx=t3?Q@I3A2T?u~v-%Yx0GQAUz7?o~L<_4L( zbBv>`H)l)+s2dd`cJGVPV!B1N=*vauP78WFQ0Q$VASFy{<3CcdczpH0s-ZOk(ZstP zAredITw+}&4@BrDd8C30np7PfnBLe}d<-47R``8+Wv*v-Zg^;DGo9*fSo3R}K0i0} z#OK8w<|fD3lvO)2R?4YaL*B|cIN{kj9eQ%lFac)tCh zUoYSF=Ka$7W#0_Of7rh5mG{WAUvKTm8dp%%e&DMQ*YugZr6Tjp`o}gGo%@bBu}E?J p_I9DCWB0BRlaE}i%(T6Z6<@3vzNBX3cIyD>&oA=rnYQSOzX42K;GqBj literal 0 HcmV?d00001 diff --git a/sprites/icons/LinkSlash.png b/sprites/icons/LinkSlash.png new file mode 100644 index 0000000000000000000000000000000000000000..90810c970ce6d479dcd7053ae45039947340e11b GIT binary patch literal 2952 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 C`$k7PhnF%- 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 HUE2QuEd->t diff --git a/sprites/icons/NotificationInfo.psd b/sprites/icons/NotificationInfo.psd deleted file mode 100644 index f66aed8ab68261ec6685514da4f6cd3cc1fd8818..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22258 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 EFIri<2LJ#7 diff --git a/sprites/icons/Plus.png b/sprites/icons/Plus.png new file mode 100644 index 0000000000000000000000000000000000000000..b954938cbd0225f3b0b7a6a216c9c61f4b18019e GIT binary patch literal 2901 zcmd5;Yitx%6rNIrQXW<@6h+cukXP*NymohXN7hnyOS=tQN?D;r4cxtRryaXHGt5le zZG&m!gO>;aLqsD1Vl=4;{!&63Q;1TDC@4x0qrv#c7!!&X{s2<%?27^|RON@8o!yyx z&pqFHeCN#BR9jOysqoQ4f*>Y^t3q}7zsR`?#^T?Sfk8kJd7>H&)|Sh943Tw}i^zGL z-|w4G5c9V0+}2zDY3;)sdZ$+$+qa_Nm!FNf%WC6ij&2D*vze^lAKY;u9NZauNITeh zrD&@*X!#%G*X1AUeku6!#QR@8e`)u5|6?cf-ie*vy?)vHf%^Te-)=wn z>xpy4%C0e8HM`zz-QPkK&0YK1wDbK1U1uXb7u9>6wmZZY=z|_jLDI z?!GVg?s>lGfv)bFA3Q}%7k0mKb$V@~IY?B0ad}aKHEpk#~x$V78>-jW&5HFvGr zG5NcO{^*JKQN!sAbIKpzHtx->Cxyc$8#Yx>IrGi3;^Y1KYq*lQIOFh&k3RV1a_9BH zgJ%bjwx_aSVQHYap**?I)%omDLbJ7Bp4ER&|YZG=iAkVh1Q}Y1)N^kyEQ#nK0piF-c%BoQri_N(ss^Cug*n z@f5fW85Bneq}djh<#Mt{lWyx)lRkp#-1bcXIJA*S4r5qb5{VpyWmmLfH!=YkR@#cT z8;Gexmfm7QRMCpfoR#&)vg^=|c#h&Y7Ec{Eq@am_t(#F@k7u)7oAsCEc^6C0Td8WY z-e%2r&@u;52-qk<;gkzB>!o>Ll=DiQll3Q9QDWJ&XhfG)rTunMQS!JY-glEI=9>&` za93d&N{VhK0FIWL0F8(-v_^`|=V@ z_5j6C^Io?=$Drt;6;Wha$a=gUL3Bzc#X_k{wQ!2tGex)@t2TG^bRCRqg%RSw*eECH{#f3voj(InURdQK z@*+ZaLbCK_>q8#o3`n8(?yBL-yCWGjp-TPunB052zO_O8qpc3Ypuu} zk_!Wv05@f1S^-Ki^#lnFBd$W=B#vp-&2QH`{9@~S;urdDrrrnYcJP3YjFH81`RP{h6p literal 0 HcmV?d00001 diff --git a/sprites/icons/Power.png b/sprites/icons/Power.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e917a3dc9c40dfa3e16a1caa2cf93738433f5a GIT binary patch literal 3419 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 literal 0 HcmV?d00001 diff --git a/sprites/icons/SaveAs.png b/sprites/icons/SaveAs.png new file mode 100644 index 0000000000000000000000000000000000000000..383686783829f4093d3274d5f2d3aa0cba38c44a GIT binary patch literal 2962 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 CNKKpo delta 2021 zcmV3WpO?r zJTG`{a7|4*NNIC)Z*qB)Jq$p9F~r8Q000KwNklvA)<4Tc{8l-f+4`@hgQ zGgX%a`h$lhxhvb>B*AEGX+`n{K%6BH{%QJ+ME-^Kv3!#I=dvs!6;t^5W!?Z(RYXMO z>t!E6mdDqU%xA>Ru_g%#iR>$OUpgo~BfULyRn3(wG&I!xn{`0?!4fNfR_wJuK741Z zu6}aFrkyKDvSMXgm7W-Oq-~?C1BeJ%fPe!ShiH~X5ox!K^u+M#NaFxRy{!}i326Ek zp&l>wI*LKr`Q8OFj`hf5b+dETezIc4BTz&|JrD!zJ9X7F%L&rF)$*zSA-uS_I04Qh zG(!}FqJcC8#=Ru0ymU!_v>z@Z{o4U6@H+Qfu50bBBrYskwL=>05TI|ytys|z0g{9V zGT%wxpgTwoaq&s1uMiiP*@OpLe&r*3ctOp?Ji={e;+-Vqtn0mH_k0`S9FPcrGHklt ziOkBlbH?v{9Z4~CGOi_wW~z2A6SImokm^raceoZfX`cy&jzv`^p;`-eZ^eX5G9~(bJQR@QQF;6 zn?*IQWe$rq=mY+LN_tH(_X!3_B$;!JbQY3mCQ0O(iK8A8keh$@<&s1^pV=rR&chO+ zHLeT#grmE=g=Rw41MwAqh#b~6BbZ}(%SMA?gyQwdg9GUxuPS zve8;QB(ip`7XymcTT+SKzB3L)9gekjS*R`@*=Vu6)ME~REqGeSLF5sd+jkY*A+%Vr zez)5V$2bD>NCiR$NV^khsiX)-ftNajYB|Bl?(P}Tn*b%j$VQF`2wE*}+(`hAx(04E z>k>+Ia1Fo(NcOr4k|cR1CoNWT^QiK8UG8L&+CqC4={M|v2&$3(*Y(>xuUeObXWV=8 zZ)Qm%qJyY^qizlbkyi&?InK%>uvGP3x|)L0t@I|UzKg=KzMD+p6ysFDo za|K!LQs#0`AdtOS8x=rZ*nEA3%w*hib%!)@8I_}U`bm3Tuu=8(k?v24!WkgnQp}(M zXpJXLz#K?4f}G zTe$x*NkB}Jyb~n>sD<8K__tIAdx6&LKQN(1A1CNfK(zZ^t{|U~LRzv8E%m5R zx@Y#+kTNZ?7kz{maJP=b&EJbWQ4PS9i-16e3Z7;P$JMk+F5z@KYhwE`jsii z*(6EKX5Hrxd8&acBh!uOuv9U!Xu+P?k@D&vZzbtn`}`~bu`+amXsye$*4aQ{skXX*UE}2P>)4f^9O0Mh_S#=hq+!C|1hpn|K4-i! zvS^+Pp-HwkHHUK@Bi>75jrlrP>XMv#|HZ0i1{piMtn%PYRjVW^dW%0nU*63iec&$b zLu-U;_N$V}Qp4b|j1l8O1}FgB2KSbIjW=z6ixVYt}Ipk|vq5nrU;IRwXGn(X`UpNH&l+3tOGNH^3U; zy-K?8dSV`|B_^4Lh(OO+H50Iz&!Ad}cw>5&Bp#umTMUBVmvO31--~B*%?#7sepP$;xGIz`^~80#QE)Qiu?O0U4G^I2k8I#qnz&oro;yT00008NkvXXu0mjf DIM2p! diff --git a/src/main/resources/ocelot/desktop/colorscheme.txt b/src/main/resources/ocelot/desktop/colorscheme.txt index 94e3b25..4664a99 100644 --- a/src/main/resources/ocelot/desktop/colorscheme.txt +++ b/src/main/resources/ocelot/desktop/colorscheme.txt @@ -24,11 +24,12 @@ Connection = #909090 NodeSelectorRing = #4c7f66 NodeSelectorBackground = #00000066 -ContextMenuBackground = #222222cc +ContextMenuBackground = #222222ee ContextMenuBorder = #444444 ContextMenuText = #b0b0b0 -ContextMenuHover = #333333 +ContextMenuHover = #363636 ContextMenuSeparator = #444444 +ContextMenuIcon = #7F7F7F ComponentSelectorBackground = #222222cc ComponentSelectorBorder = #444444 diff --git a/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.png b/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.png index e37d4962db74c5036ec44cc20c64c12888344a68..017124e816105bc80a8711cc8185b744d8a0a153 100644 GIT binary patch literal 102511 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 btY;K=`~}UTeRpgC@T2rlRjxqB(C>c%Rp#;< literal 101963 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 IconSource = { tier => + IconSource(s"icons/Tier${tier.id}") + } + + val Cpu: Tier => IconSource = { tier => + IconSource(s"items/CPU${tier.id}") + } + + val Apu: Tier => IconSource = { tier => + IconSource(s"items/APU${tier.id}", animation = Some(Animations.Apu)) + } + + val GraphicsCard: Tier => IconSource = { tier => + IconSource(s"items/GraphicsCard${tier.id}") + } + + val NetworkCard: IconSource = IconSource("items/NetworkCard") + + val WirelessNetworkCard: Tier => IconSource = { tier => + IconSource(s"items/WirelessNetworkCard${tier.id}") + } + + val LinkedCard: IconSource = IconSource("items/LinkedCard", animation = Some(Animations.LinkedCard)) + + val InternetCard: IconSource = IconSource("items/InternetCard", animation = Some(Animations.InternetCard)) + + val RedstoneCard: Tier => IconSource = { tier => + IconSource(s"items/RedstoneCard${tier.id}") + } + + val DataCard: Tier => IconSource = { tier => + IconSource(s"items/DataCard${tier.id}", animation = Some(Animations.DataCard)) + } + + val SoundCard: IconSource = IconSource("items/SoundCard", animation = Some(Animations.DataCard)) + + val SelfDestructingCard: IconSource = IconSource("items/SelfDestructingCard", animation = Some(Animations.SelfDestructingCard)) + + val HardDiskDrive: Tier => IconSource = { tier => + IconSource(s"items/HardDiskDrive${tier.id}") + } + + val Eeprom: IconSource = IconSource("items/EEPROM") + + val FloppyDisk: DyeColor => IconSource = { color => + IconSource(s"items/FloppyDisk_${color.name}") + } + + val Memory: ExtendedTier => IconSource = { tier => + IconSource(s"items/Memory${tier.id}") + } + + val Server: Tier => IconSource = { tier => + IconSource(s"items/Server${tier.id}") + } + + val ComponentBus: Tier => IconSource = { tier => + IconSource(s"items/ComponentBus${tier.id}") + } + + val DiskDriveMountable: IconSource = IconSource("items/DiskDriveMountable") + + //noinspection ScalaWeakerAccess + object Animations { + val Apu: Animation = Array( + (0, 3f), (1, 3f), (2, 3f), (3, 3f), (4, 3f), (5, 3f), + (4, 3f), (3, 3f), (2, 3f), (1, 3f), (0, 3f)) + + val LinkedCard: Animation = + Array((0, 3f), (1, 3f), (2, 3f), (3, 3f), (4, 3f), (5, 3f)) + + val InternetCard: Animation = Array( + (0, 2f), (1, 7f), (0, 5f), (1, 4f), (0, 7f), (1, 2f), (0, 8f), + (1, 9f), (0, 6f), (1, 4f)) + + val DataCard: Animation = Array( + (0, 4f), (1, 4f), (2, 4f), (3, 4f), (4, 4f), (5, 4f), (6, 4f), (7, 4f)) + + val SelfDestructingCard: Animation = Array((0, 4f), (1, 4f)) + } + + // ----------------------- Ocelot interface icons ----------------------- + + + val Notification: NotificationType => IconSource = { notificationType => + IconSource(s"icons/Notification$notificationType") + } + + val SettingsSound: IconSource = IconSource("icons/SettingsSound") + val SettingsUI: IconSource = IconSource("icons/SettingsUI") + val Delete: IconSource = IconSource("icons/Delete") + val Label: IconSource = IconSource("icons/Label") + val Copy: IconSource = IconSource("icons/Copy") + val AspectRatio: IconSource = IconSource("icons/AspectRatio") + val Eject: IconSource = IconSource("icons/Eject") + val Restart: IconSource = IconSource("icons/Restart") + val Edit: IconSource = IconSource("icons/Edit") + val Folder: IconSource = IconSource("icons/Folder") + val FolderSlash: IconSource = IconSource("icons/FolderSlash") + val Code: IconSource = IconSource("icons/Code") + val File: IconSource = IconSource("icons/File") + val Link: IconSource = IconSource("icons/Link") + val LinkSlash: IconSource = IconSource("icons/LinkSlash") + val Power: IconSource = IconSource("icons/Power") + val Save: IconSource = IconSource("icons/Save") + val SaveAs: IconSource = IconSource("icons/SaveAs") + val Plus: IconSource = IconSource("icons/Plus") + val Cross: IconSource = IconSource("icons/Cross") + val Microchip: IconSource = IconSource("icons/Microchip") + val Antenna: IconSource = IconSource("icons/Antenna") + val Window: IconSource = IconSource("icons/Window") + val Tiers: IconSource = IconSource("icons/Tiers") +} diff --git a/src/main/scala/ocelot/desktop/graphics/Icons.scala b/src/main/scala/ocelot/desktop/graphics/Icons.scala deleted file mode 100644 index 2ffc3ed..0000000 --- a/src/main/scala/ocelot/desktop/graphics/Icons.scala +++ /dev/null @@ -1,108 +0,0 @@ -package ocelot.desktop.graphics - -import ocelot.desktop.graphics.IconDef.Animation -import ocelot.desktop.ui.widget.modal.notification.NotificationType.NotificationType -import totoro.ocelot.brain.util.DyeColor -import totoro.ocelot.brain.util.ExtendedTier.ExtendedTier -import totoro.ocelot.brain.util.Tier.Tier - -object Icons { - // Icons - val CardIcon: IconDef = IconDef("icons/Card") - val CpuIcon: IconDef = IconDef("icons/CPU") - val HddIcon: IconDef = IconDef("icons/HDD") - val EepromIcon: IconDef = IconDef("icons/EEPROM") - val FloppyIcon: IconDef = IconDef("icons/Floppy") - val MemoryIcon: IconDef = IconDef("icons/Memory") - val ServerIcon: IconDef = IconDef("icons/Server") - val ComponentBusIcon: IconDef = IconDef("icons/ComponentBus") - - val TierIcon: Tier => IconDef = { tier => - IconDef(s"icons/Tier${tier.id}") - } - - val NotificationIcon: NotificationType => IconDef = { notificationType => - IconDef(s"icons/Notification$notificationType", 4) - } - - val SettingsSound: IconDef = IconDef("icons/SettingsSound") - val SettingsUI: IconDef = IconDef("icons/SettingsUI") - - // Items - val Cpu: Tier => IconDef = { tier => - IconDef(s"items/CPU${tier.id}") - } - - val Apu: Tier => IconDef = { tier => - IconDef(s"items/APU${tier.id}", animation = Some(Animations.Apu)) - } - - val GraphicsCard: Tier => IconDef = { tier => - IconDef(s"items/GraphicsCard${tier.id}") - } - - val NetworkCard: IconDef = IconDef("items/NetworkCard") - - val WirelessNetworkCard: Tier => IconDef = { tier => - IconDef(s"items/WirelessNetworkCard${tier.id}") - } - - val LinkedCard: IconDef = IconDef("items/LinkedCard", animation = Some(Animations.LinkedCard)) - - val InternetCard: IconDef = IconDef("items/InternetCard", animation = Some(Animations.InternetCard)) - - val RedstoneCard: Tier => IconDef = { tier => - IconDef(s"items/RedstoneCard${tier.id}") - } - - val DataCard: Tier => IconDef = { tier => - IconDef(s"items/DataCard${tier.id}", animation = Some(Animations.DataCard)) - } - - val SoundCard: IconDef = IconDef("items/SoundCard", animation = Some(Animations.DataCard)) - - val SelfDestructingCard: IconDef = IconDef("items/SelfDestructingCard", animation = Some(Animations.SelfDestructingCard)) - - val HardDiskDrive: Tier => IconDef = { tier => - IconDef(s"items/HardDiskDrive${tier.id}") - } - - val Eeprom: IconDef = IconDef("items/EEPROM") - - val FloppyDisk: DyeColor => IconDef = { color => - IconDef(s"items/FloppyDisk_${color.name}") - } - - val Memory: ExtendedTier => IconDef = { tier => - IconDef(s"items/Memory${tier.id}") - } - - val Server: Tier => IconDef = { tier => - IconDef(s"items/Server${tier.id}") - } - - val ComponentBus: Tier => IconDef = { tier => - IconDef(s"items/ComponentBus${tier.id}") - } - - val DiskDriveMountable: IconDef = IconDef("items/DiskDriveMountable") - - //noinspection ScalaWeakerAccess - object Animations { - val Apu: Animation = Array( - (0, 3f), (1, 3f), (2, 3f), (3, 3f), (4, 3f), (5, 3f), - (4, 3f), (3, 3f), (2, 3f), (1, 3f), (0, 3f)) - - val LinkedCard: Animation = - Array((0, 3f), (1, 3f), (2, 3f), (3, 3f), (4, 3f), (5, 3f)) - - val InternetCard: Animation = Array( - (0, 2f), (1, 7f), (0, 5f), (1, 4f), (0, 7f), (1, 2f), (0, 8f), - (1, 9f), (0, 6f), (1, 4f)) - - val DataCard: Animation = Array( - (0, 4f), (1, 4f), (2, 4f), (3, 4f), (4, 4f), (5, 4f), (6, 4f), (7, 4f)) - - val SelfDestructingCard: Animation = Array((0, 4f), (1, 4f)) - } -} diff --git a/src/main/scala/ocelot/desktop/inventory/Item.scala b/src/main/scala/ocelot/desktop/inventory/Item.scala index bc2733b..926bac1 100644 --- a/src/main/scala/ocelot/desktop/inventory/Item.scala +++ b/src/main/scala/ocelot/desktop/inventory/Item.scala @@ -2,7 +2,7 @@ package ocelot.desktop.inventory import ocelot.desktop.ColorScheme import ocelot.desktop.color.Color -import ocelot.desktop.graphics.IconDef +import ocelot.desktop.graphics.IconSource import ocelot.desktop.ui.event.EventAware import ocelot.desktop.ui.widget.Updatable import ocelot.desktop.ui.widget.contextmenu.ContextMenu @@ -64,7 +64,7 @@ trait Item extends EventAware with Updatable with Disposable { /** * The icon used to draw the item in a slot. */ - def icon: IconDef = factory.icon + def icon: IconSource = factory.icon /** * The tier of the item (if it has one). diff --git a/src/main/scala/ocelot/desktop/inventory/ItemFactory.scala b/src/main/scala/ocelot/desktop/inventory/ItemFactory.scala index a451cd1..9dd9b3d 100644 --- a/src/main/scala/ocelot/desktop/inventory/ItemFactory.scala +++ b/src/main/scala/ocelot/desktop/inventory/ItemFactory.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory -import ocelot.desktop.graphics.IconDef +import ocelot.desktop.graphics.IconSource import totoro.ocelot.brain.util.Tier.Tier /** @@ -45,7 +45,7 @@ trait ItemFactory { * * Used by the [[ocelot.desktop.ui.widget.slot.ItemChooser ItemChooser]] in its entries. */ - def icon: IconDef + def icon: IconSource /** * Constructs a new item instance. diff --git a/src/main/scala/ocelot/desktop/inventory/Items.scala b/src/main/scala/ocelot/desktop/inventory/Items.scala index 964d5d7..85c9e82 100644 --- a/src/main/scala/ocelot/desktop/inventory/Items.scala +++ b/src/main/scala/ocelot/desktop/inventory/Items.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory -import ocelot.desktop.graphics.IconDef +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.item._ import ocelot.desktop.util.Logging import ocelot.desktop.util.ReflectionUtils.linearizationOrder @@ -60,7 +60,7 @@ object Items extends Logging { } } - def registerArbitrary(name: String, icon: IconDef, factories: IterableOnce[(String, ItemFactory)]): Unit = { + def registerArbitrary(name: String, icon: IconSource, factories: IterableOnce[(String, ItemFactory)]): Unit = { val group = ArbitraryItemGroup(name, icon, factories.iterator.toSeq) _groups += group @@ -93,7 +93,7 @@ object Items extends Logging { case class ExtendedTieredItemGroup(name: String, factories: Seq[(ExtendedTier, ItemFactory)]) extends ItemGroup - case class ArbitraryItemGroup(name: String, icon: IconDef, factories: Seq[(String, ItemFactory)]) extends ItemGroup + case class ArbitraryItemGroup(name: String, icon: IconSource, factories: Seq[(String, ItemFactory)]) extends ItemGroup ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/main/scala/ocelot/desktop/inventory/SyncedInventory.scala b/src/main/scala/ocelot/desktop/inventory/SyncedInventory.scala index bdc3f46..824210e 100644 --- a/src/main/scala/ocelot/desktop/inventory/SyncedInventory.scala +++ b/src/main/scala/ocelot/desktop/inventory/SyncedInventory.scala @@ -4,7 +4,7 @@ import ocelot.desktop.OcelotDesktop import ocelot.desktop.inventory.PersistedInventory.ItemLoadException import ocelot.desktop.inventory.SyncedInventory.SlotStatus.SlotStatus import ocelot.desktop.inventory.SyncedInventory.SyncDirection.SyncDirection -import ocelot.desktop.inventory.SyncedInventory.{SyncDirection, _} +import ocelot.desktop.inventory.SyncedInventory._ import ocelot.desktop.inventory.traits.ComponentItem import ocelot.desktop.ui.event.BrainEvent import ocelot.desktop.ui.widget.EventHandlers diff --git a/src/main/scala/ocelot/desktop/inventory/item/ApuItem.scala b/src/main/scala/ocelot/desktop/inventory/item/ApuItem.scala index 3a00fc8..341c4b9 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/ApuItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/ApuItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{ComponentItem, CpuLikeItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import totoro.ocelot.brain.entity.APU @@ -26,7 +26,7 @@ object ApuItem { // we keep the latter tier internally and increment it when dealing with the rest of the world override def tier: Option[Tier] = Some(_tier.saturatingAdd(1)) - override def icon: IconDef = Icons.Apu(_tier) + override def icon: IconSource = IconSource.Apu(_tier) override def build(): ApuItem = new ApuItem(new APU(_tier)) diff --git a/src/main/scala/ocelot/desktop/inventory/item/ComponentBusItem.scala b/src/main/scala/ocelot/desktop/inventory/item/ComponentBusItem.scala index 78a897a..95f282d 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/ComponentBusItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/ComponentBusItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.ComponentItem import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import totoro.ocelot.brain.entity.ComponentBus @@ -25,7 +25,7 @@ object ComponentBusItem { override def tier: Option[Tier] = Some(_tier) - override def icon: IconDef = Icons.ComponentBus(_tier) + override def icon: IconSource = IconSource.ComponentBus(_tier) override def build(): ComponentBusItem = new ComponentBusItem(new ComponentBus(_tier)) diff --git a/src/main/scala/ocelot/desktop/inventory/item/CpuItem.scala b/src/main/scala/ocelot/desktop/inventory/item/CpuItem.scala index 90d8e1a..cd2b57b 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/CpuItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/CpuItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{ComponentItem, CpuLikeItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import totoro.ocelot.brain.entity.CPU @@ -23,7 +23,7 @@ object CpuItem { override def tier: Option[Tier] = Some(_tier) - override def icon: IconDef = Icons.Cpu(_tier) + override def icon: IconSource = IconSource.Cpu(_tier) override def build(): CpuItem = new CpuItem(new CPU(_tier)) diff --git a/src/main/scala/ocelot/desktop/inventory/item/DataCardItem.scala b/src/main/scala/ocelot/desktop/inventory/item/DataCardItem.scala index 82b0cd5..4aa5696 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/DataCardItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/DataCardItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import totoro.ocelot.brain.entity.DataCard @@ -14,7 +14,7 @@ object DataCardItem { abstract class Factory extends ItemFactory { override def name: String = s"Data Card (${tier.get.label})" - override def icon: IconDef = Icons.DataCard(tier.get) + override def icon: IconSource = IconSource.DataCard(tier.get) } class Tier1(val dataCard: DataCard.Tier1) extends DataCardItem { diff --git a/src/main/scala/ocelot/desktop/inventory/item/DiskDriveMountableItem.scala b/src/main/scala/ocelot/desktop/inventory/item/DiskDriveMountableItem.scala index 956864f..35622e2 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/DiskDriveMountableItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/DiskDriveMountableItem.scala @@ -1,9 +1,8 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.{ItemFactory, ItemRecoverer} import ocelot.desktop.util.DiskDriveAware -import totoro.ocelot.brain.entity.traits.{Entity, RackMountable} import totoro.ocelot.brain.entity.{DiskDriveMountable, FloppyDiskDrive} import totoro.ocelot.brain.util.Tier.Tier @@ -27,7 +26,7 @@ object DiskDriveMountableItem { override def name: String = "Disk drive" - override def icon: IconDef = Icons.DiskDriveMountable + override def icon: IconSource = IconSource.DiskDriveMountable override def build(): DiskDriveMountableItem = new DiskDriveMountableItem(new DiskDriveMountable()) diff --git a/src/main/scala/ocelot/desktop/inventory/item/EepromItem.scala b/src/main/scala/ocelot/desktop/inventory/item/EepromItem.scala index 5401261..9f32865 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/EepromItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/EepromItem.scala @@ -1,11 +1,11 @@ package ocelot.desktop.inventory.item import ocelot.desktop.OcelotDesktop -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{ComponentItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import ocelot.desktop.ui.widget.InputDialog -import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry, ContextMenuSubmenu} +import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry, ContextMenuIcon, ContextMenuSubmenu} import ocelot.desktop.ui.widget.tooltip.ItemTooltip import totoro.ocelot.brain.entity.EEPROM import totoro.ocelot.brain.entity.traits.{Entity, Environment} @@ -32,47 +32,39 @@ class EepromItem(val eeprom: EEPROM) extends Item with ComponentItem with Persis } override def fillRmbMenu(menu: ContextMenu): Unit = { - menu.addEntry( - new ContextMenuSubmenu("External data source") { - addEntry( - ContextMenuEntry("Local file") { - OcelotDesktop.showFileChooserDialog(JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY) { file => - Try { - for (file <- file) { - eeprom.codePath = Some(file.toPath) - } - } + menu.addEntry(new ContextMenuSubmenu("External data source", Some(ContextMenuIcon(IconSource.Code))) { + addEntry(ContextMenuEntry("Local file", IconSource.File) { + OcelotDesktop.showFileChooserDialog(JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY) { file => + Try { + for (file <- file) { + eeprom.codePath = Some(file.toPath) } } - ) - - addEntry( - ContextMenuEntry("File via URL") { - new InputDialog( - title = "File via URL", - onConfirmed = { text => - eeprom.codeURL = Some(new URL(text)) - }, - inputValidator = text => - try { - new URL(text) - true - } catch { - case _: MalformedURLException => false - }, - ).show() - } - ) - - if (eeprom.codePath.nonEmpty || eeprom.codeURL.nonEmpty) { - addEntry( - ContextMenuEntry("Detach") { - eeprom.codeBytes = Some(Array.empty) - } - ) } + }) + + addEntry(ContextMenuEntry("File via URL", IconSource.Link) { + new InputDialog( + title = "File via URL", + onConfirmed = { text => + eeprom.codeURL = Some(new URL(text)) + }, + inputValidator = text => + try { + new URL(text) + true + } catch { + case _: MalformedURLException => false + }, + ).show() + }) + + if (eeprom.codePath.nonEmpty || eeprom.codeURL.nonEmpty) { + addEntry(ContextMenuEntry("Detach", IconSource.LinkSlash) { + eeprom.codeBytes = Some(Array.empty) + }) } - ) + }) super.fillRmbMenu(menu) } @@ -92,7 +84,7 @@ object EepromItem { override def tier: Option[Tier] = None - override def icon: IconDef = Icons.Eeprom + override def icon: IconSource = IconSource.Eeprom override def recoverers: Iterable[ItemRecoverer[_, _]] = Some(ItemRecoverer(new EepromItem(_))) } diff --git a/src/main/scala/ocelot/desktop/inventory/item/FloppyItem.scala b/src/main/scala/ocelot/desktop/inventory/item/FloppyItem.scala index 1e2a6f6..0d6aad6 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/FloppyItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/FloppyItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{ComponentItem, DiskItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import ocelot.desktop.ui.widget.contextmenu.ContextMenu @@ -65,7 +65,7 @@ class FloppyItem(var floppy: Floppy) extends Item with ComponentItem with Persis override def fillRmbMenu(menu: ContextMenu): Unit = { floppy match { - case floppy: FloppyManaged => addSetDirectoryEntry(menu, floppy) + case floppy: FloppyManaged => addRealPathContextMenuEntries(menu, floppy) case _ => // unmanaged floppies don't need any special entries } @@ -94,7 +94,7 @@ object FloppyItem { override def tier: Option[Tier] = None - override def icon: IconDef = Icons.FloppyDisk(color) + override def icon: IconSource = IconSource.FloppyDisk(color) override def recoverers: Iterable[ItemRecoverer[_, _]] = Some(ItemRecoverer(new FloppyItem(_))) } diff --git a/src/main/scala/ocelot/desktop/inventory/item/GraphicsCardItem.scala b/src/main/scala/ocelot/desktop/inventory/item/GraphicsCardItem.scala index d9f4801..9d7aa19 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/GraphicsCardItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/GraphicsCardItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import totoro.ocelot.brain.entity.GraphicsCard @@ -21,7 +21,7 @@ object GraphicsCardItem { override def name: String = s"Graphics Card (${_tier.label})" override def tier: Option[Tier] = Some(_tier) - override def icon: IconDef = Icons.GraphicsCard(_tier) + override def icon: IconSource = IconSource.GraphicsCard(_tier) override def build(): GraphicsCardItem = new GraphicsCardItem(new GraphicsCard(_tier)) diff --git a/src/main/scala/ocelot/desktop/inventory/item/HddItem.scala b/src/main/scala/ocelot/desktop/inventory/item/HddItem.scala index 47c4b2f..6f20dcc 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/HddItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/HddItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.item.HddItem.Hdd import ocelot.desktop.inventory.traits.{ComponentItem, DiskItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} @@ -64,10 +64,11 @@ class HddItem(var hdd: Hdd) extends Item with ComponentItem with PersistableItem override def fillRmbMenu(menu: ContextMenu): Unit = { hdd match { case Hdd.Managed(hdd) => - addSetDirectoryEntry(menu, hdd) + addRealPathContextMenuEntries(menu, hdd) case _ => // unmanaged HDDs don't need any special entries } + super.fillRmbMenu(menu) } @@ -87,7 +88,7 @@ object HddItem { override def tier: Option[Tier] = Some(_tier) - override def icon: IconDef = Icons.HardDiskDrive(_tier) + override def icon: IconSource = IconSource.HardDiskDrive(_tier) override def build(): HddItem = new HddItem( if (managed) Hdd(new HDDManaged(_tier)) else Hdd(new HDDUnmanaged(_tier)) diff --git a/src/main/scala/ocelot/desktop/inventory/item/InternetCardItem.scala b/src/main/scala/ocelot/desktop/inventory/item/InternetCardItem.scala index c644b16..535dc56 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/InternetCardItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/InternetCardItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import totoro.ocelot.brain.entity.InternetCard @@ -24,7 +24,7 @@ object InternetCardItem { override def tier: Option[Tier] = Some(Tier.Two) - override def icon: IconDef = Icons.InternetCard + override def icon: IconSource = IconSource.InternetCard override def build(): InternetCardItem = new InternetCardItem(new InternetCard) diff --git a/src/main/scala/ocelot/desktop/inventory/item/LinkedCardItem.scala b/src/main/scala/ocelot/desktop/inventory/item/LinkedCardItem.scala index 6844df5..18054b3 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/LinkedCardItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/LinkedCardItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import ocelot.desktop.ui.widget.TunnelDialog @@ -22,7 +22,7 @@ class LinkedCardItem(val linkedCard: LinkedCard) extends Item with ComponentItem override def fillRmbMenu(menu: ContextMenu): Unit = { menu.addEntry( - ContextMenuEntry("Set channel") { + ContextMenuEntry("Set channel", IconSource.Antenna) { new TunnelDialog( tunnel => linkedCard.tunnel = tunnel, linkedCard.tunnel, @@ -45,7 +45,7 @@ object LinkedCardItem { override def tier: Option[Tier] = Some(Tier.Three) - override def icon: IconDef = Icons.LinkedCard + override def icon: IconSource = IconSource.LinkedCard override def build(): LinkedCardItem = new LinkedCardItem(new LinkedCard) diff --git a/src/main/scala/ocelot/desktop/inventory/item/MemoryItem.scala b/src/main/scala/ocelot/desktop/inventory/item/MemoryItem.scala index 4d1e0f0..0731a23 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/MemoryItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/MemoryItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{ComponentItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import totoro.ocelot.brain.entity.Memory @@ -24,7 +24,7 @@ object MemoryItem { override def tier: Option[Tier] = Some(memoryTier.toTier) - override def icon: IconDef = Icons.Memory(memoryTier) + override def icon: IconSource = IconSource.Memory(memoryTier) override def build(): MemoryItem = new MemoryItem(new Memory(memoryTier)) diff --git a/src/main/scala/ocelot/desktop/inventory/item/NetworkCardItem.scala b/src/main/scala/ocelot/desktop/inventory/item/NetworkCardItem.scala index 030b9b5..1f3d4bc 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/NetworkCardItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/NetworkCardItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import totoro.ocelot.brain.entity.NetworkCard @@ -22,7 +22,7 @@ object NetworkCardItem { override def name: String = "Network Card" override def tier: Option[Tier] = Some(Tier.One) - override def icon: IconDef = Icons.NetworkCard + override def icon: IconSource = IconSource.NetworkCard override def build(): NetworkCardItem = new NetworkCardItem(new NetworkCard) diff --git a/src/main/scala/ocelot/desktop/inventory/item/RackMountableItem.scala b/src/main/scala/ocelot/desktop/inventory/item/RackMountableItem.scala index b1d6941..3982698 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/RackMountableItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/RackMountableItem.scala @@ -4,7 +4,7 @@ import ocelot.desktop.inventory.Item import ocelot.desktop.inventory.traits.ComponentItem import ocelot.desktop.node.nodes.RackNode import ocelot.desktop.ui.widget.contextmenu.ContextMenu -import totoro.ocelot.brain.entity.{Rack, result} +import totoro.ocelot.brain.entity.result import totoro.ocelot.brain.entity.traits.{Entity, RackMountable} trait RackMountableItem diff --git a/src/main/scala/ocelot/desktop/inventory/item/RedstoneCardItem.scala b/src/main/scala/ocelot/desktop/inventory/item/RedstoneCardItem.scala index 37cce12..a32b078 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/RedstoneCardItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/RedstoneCardItem.scala @@ -1,39 +1,41 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} -import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem, WindowProvider} +import ocelot.desktop.graphics.IconSource +import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import ocelot.desktop.ui.widget.card.{Redstone1Window, Redstone2Window} -import ocelot.desktop.ui.widget.contextmenu.ContextMenu +import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} import ocelot.desktop.ui.widget.tooltip.ItemTooltip -import ocelot.desktop.ui.widget.window.Window +import ocelot.desktop.ui.widget.window.{Window, Windowed} import totoro.ocelot.brain.entity.Redstone import totoro.ocelot.brain.entity.traits.{Entity, Environment} import totoro.ocelot.brain.util.Tier import totoro.ocelot.brain.util.Tier.Tier -abstract class RedstoneCardItem extends Item with ComponentItem with PersistableItem with CardItem +abstract class RedstoneCardItem extends Item with ComponentItem with PersistableItem with CardItem with Windowed { + def windowContextMenuEntryName: String + + override def fillRmbMenu(menu: ContextMenu): Unit = { + menu.addEntry(ContextMenuEntry(windowContextMenuEntryName, IconSource.Window) { + window.get.open() + }) + + menu.addSeparator() + + super.fillRmbMenu(menu) + } +} object RedstoneCardItem { abstract class Factory extends ItemFactory { override def name: String = s"Redstone Card (${tier.get.label})" - override def icon: IconDef = Icons.RedstoneCard(tier.get) + override def icon: IconSource = IconSource.RedstoneCard(tier.get) } class Tier1(val redstoneCard: Redstone.Tier1) extends RedstoneCardItem { - private val redstoneIoWindow: WindowProvider = new WindowProvider { - override def windowEntryLabel: String = "Redstone I/O" - - override def makeWindow(): Window = new Redstone1Window(redstoneCard) - } - override def component: Entity with Environment = redstoneCard - protected def addWindowEntries(menu: ContextMenu): Unit = { - redstoneIoWindow.fillRmbMenu(menu) - } - override def fillTooltip(tooltip: ItemTooltip): Unit = { super.fillTooltip(tooltip) @@ -42,12 +44,11 @@ object RedstoneCardItem { } } - override def fillRmbMenu(menu: ContextMenu): Unit = { - addWindowEntries(menu) - super.fillRmbMenu(menu) - } - override def factory: Factory = RedstoneCardItem.Tier1.Factory + + private lazy val _window = new Redstone1Window(redstoneCard) + override def window: Option[Window] = Some(_window) + override def windowContextMenuEntryName: String = "Redstone I/O" } object Tier1 { @@ -65,20 +66,13 @@ object RedstoneCardItem { } class Tier2(override val redstoneCard: Redstone.Tier2) extends RedstoneCardItem.Tier1(redstoneCard) { - private val bundledIoWindow: WindowProvider = new WindowProvider { - override def windowEntryLabel: String = "Bundled I/O" - - override def makeWindow(): Window = new Redstone2Window(redstoneCard) - } - override def component: Entity with Environment = redstoneCard - override def addWindowEntries(menu: ContextMenu): Unit = { - super.addWindowEntries(menu) - bundledIoWindow.fillRmbMenu(menu) - } - override def factory: Factory = RedstoneCardItem.Tier2.Factory + + private lazy val _window = new Redstone2Window(redstoneCard) + override def window: Option[Window] = Some(_window) + override def windowContextMenuEntryName: String = "Bundled I/O" } object Tier2 { diff --git a/src/main/scala/ocelot/desktop/inventory/item/SelfDestructingCardItem.scala b/src/main/scala/ocelot/desktop/inventory/item/SelfDestructingCardItem.scala index dc10530..362c2af 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/SelfDestructingCardItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/SelfDestructingCardItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import totoro.ocelot.brain.entity.SelfDestructingCard @@ -29,7 +29,7 @@ object SelfDestructingCardItem { override def tier: Option[Tier] = Some(Tier.Two) - override def icon: IconDef = Icons.SelfDestructingCard + override def icon: IconSource = IconSource.SelfDestructingCard override def build(): SelfDestructingCardItem = new SelfDestructingCardItem(new SelfDestructingCard) diff --git a/src/main/scala/ocelot/desktop/inventory/item/ServerItem.scala b/src/main/scala/ocelot/desktop/inventory/item/ServerItem.scala index 2d6ad97..eb4efe4 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/ServerItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/ServerItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.{ItemFactory, ItemRecoverer} import ocelot.desktop.ui.widget.slot._ import ocelot.desktop.util.ComputerAware @@ -113,7 +113,7 @@ object ServerItem { override def tier: Option[Tier] = Some(_tier) - override def icon: IconDef = Icons.Server(_tier) + override def icon: IconSource = IconSource.Server(_tier) override def build(): ServerItem = { val item = new ServerItem(new Server(_tier)) diff --git a/src/main/scala/ocelot/desktop/inventory/item/SoundCardItem.scala b/src/main/scala/ocelot/desktop/inventory/item/SoundCardItem.scala index a858053..6645aee 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/SoundCardItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/SoundCardItem.scala @@ -1,27 +1,29 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} -import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem, WindowProvider} +import ocelot.desktop.graphics.IconSource +import ocelot.desktop.inventory.traits.{CardItem, ComponentItem, PersistableItem} import ocelot.desktop.inventory.{Item, ItemFactory, ItemRecoverer} import ocelot.desktop.ui.widget.card.SoundCardWindow -import ocelot.desktop.ui.widget.contextmenu.ContextMenu -import ocelot.desktop.ui.widget.window.Window +import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} +import ocelot.desktop.ui.widget.window.{Window, Windowed} import totoro.ocelot.brain.entity.sound_card.SoundCard import totoro.ocelot.brain.entity.traits.{Entity, Environment} import totoro.ocelot.brain.util.Tier import totoro.ocelot.brain.util.Tier.Tier -class SoundCardItem(val soundCard: SoundCard) extends Item with ComponentItem with PersistableItem with CardItem { - private val window = new WindowProvider { - override def windowEntryLabel: String = "Open" - - override def makeWindow(): Window = new SoundCardWindow(soundCard) - } +class SoundCardItem(val soundCard: SoundCard) extends Item with ComponentItem with PersistableItem with CardItem with Windowed { + private lazy val _window = new SoundCardWindow(soundCard) + override def window: Option[Window] = Some(_window) override def component: Entity with Environment = soundCard override def fillRmbMenu(menu: ContextMenu): Unit = { - window.fillRmbMenu(menu) + menu.addEntry(ContextMenuEntry("Open card interface", IconSource.Window) { + window.get.open() + }) + + menu.addSeparator() + super.fillRmbMenu(menu) } @@ -38,7 +40,7 @@ object SoundCardItem { override def tier: Option[Tier] = Some(Tier.Two) - override def icon: IconDef = Icons.SoundCard + override def icon: IconSource = IconSource.SoundCard override def build(): SoundCardItem = new SoundCardItem(new SoundCard) diff --git a/src/main/scala/ocelot/desktop/inventory/item/WirelessNetworkCardItem.scala b/src/main/scala/ocelot/desktop/inventory/item/WirelessNetworkCardItem.scala index 553d4c0..487478a 100644 --- a/src/main/scala/ocelot/desktop/inventory/item/WirelessNetworkCardItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/item/WirelessNetworkCardItem.scala @@ -1,6 +1,6 @@ package ocelot.desktop.inventory.item -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.{ItemFactory, ItemRecoverer} import totoro.ocelot.brain.entity.WirelessNetworkCard import totoro.ocelot.brain.util.Tier @@ -14,7 +14,7 @@ object WirelessNetworkCardItem { abstract class Factory extends ItemFactory { override def name: String = s"Wireless Net. Card (${tier.get.label})" - override def icon: IconDef = Icons.WirelessNetworkCard(tier.get) + override def icon: IconSource = IconSource.WirelessNetworkCard(tier.get) } class Tier1(override val card: WirelessNetworkCard.Tier1) extends WirelessNetworkCardItem(card) { diff --git a/src/main/scala/ocelot/desktop/inventory/traits/ComponentItem.scala b/src/main/scala/ocelot/desktop/inventory/traits/ComponentItem.scala index bbd8d1e..aaab5ec 100644 --- a/src/main/scala/ocelot/desktop/inventory/traits/ComponentItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/traits/ComponentItem.scala @@ -1,6 +1,7 @@ package ocelot.desktop.inventory.traits import ocelot.desktop.OcelotDesktop +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.Item import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} @@ -58,7 +59,7 @@ trait ComponentItem extends Item with PersistableItem { } override def fillRmbMenu(menu: ContextMenu): Unit = { - menu.addEntry(ContextMenuEntry("Copy address") { + menu.addEntry(ContextMenuEntry("Copy address", IconSource.Copy) { UiHandler.clipboard = component.node.address }) diff --git a/src/main/scala/ocelot/desktop/inventory/traits/CpuLikeItem.scala b/src/main/scala/ocelot/desktop/inventory/traits/CpuLikeItem.scala index f13eb65..10b7a09 100644 --- a/src/main/scala/ocelot/desktop/inventory/traits/CpuLikeItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/traits/CpuLikeItem.scala @@ -1,8 +1,9 @@ package ocelot.desktop.inventory.traits +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.Item import ocelot.desktop.inventory.traits.CpuLikeItem.CpuArchitectureChangedNotification -import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry, ContextMenuSubmenu} +import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry, ContextMenuIcon, ContextMenuSubmenu} import totoro.ocelot.brain.entity.machine.MachineAPI import totoro.ocelot.brain.entity.traits.{Entity, GenericCPU} @@ -13,7 +14,7 @@ trait CpuLikeItem extends ComponentItem { override def component: Entity with GenericCPU override def fillRmbMenu(menu: ContextMenu): Unit = { - menu.addEntry(new ContextMenuSubmenu("Set architecture") { + menu.addEntry(new ContextMenuSubmenu("Set architecture", Some(ContextMenuIcon(IconSource.Microchip))) { for (arch <- component.allArchitectures) { val name = MachineAPI.getArchitectureName(arch) + (if (arch == component.architecture) " (current)" else "") diff --git a/src/main/scala/ocelot/desktop/inventory/traits/DiskItem.scala b/src/main/scala/ocelot/desktop/inventory/traits/DiskItem.scala index baedd62..7ea4545 100644 --- a/src/main/scala/ocelot/desktop/inventory/traits/DiskItem.scala +++ b/src/main/scala/ocelot/desktop/inventory/traits/DiskItem.scala @@ -1,10 +1,11 @@ package ocelot.desktop.inventory.traits import ocelot.desktop.OcelotDesktop +import ocelot.desktop.graphics.IconSource import ocelot.desktop.ui.widget.DiskEditWindow import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} import ocelot.desktop.ui.widget.tooltip.ItemTooltip -import ocelot.desktop.ui.widget.window.Window +import ocelot.desktop.ui.widget.window.{Window, Windowed} import totoro.ocelot.brain.entity.traits.{Disk, DiskManaged, DiskUnmanaged, Entity} import totoro.ocelot.brain.util.DyeColor @@ -14,7 +15,7 @@ import scala.util.Try /** * A utility mixin for HDDs and floppies. */ -trait DiskItem extends ComponentItem { +trait DiskItem extends ComponentItem with Windowed { override def component: Entity with Disk def diskKind: String @@ -35,33 +36,44 @@ trait DiskItem extends ComponentItem { component.setLocked(OcelotDesktop.player.nickname) } - protected def addSetDirectoryEntry(menu: ContextMenu, disk: DiskManaged): Unit = { - menu.addEntry( - ContextMenuEntry("Set directory") { - OcelotDesktop.showFileChooserDialog(JFileChooser.OPEN_DIALOG, JFileChooser.DIRECTORIES_ONLY) { dir => - Try { - for (dir <- dir) { - reinserting { - // trigger component_removed / component_added signals - disk.customRealPath = Some(dir.toPath.toAbsolutePath) - } + protected def addRealPathContextMenuEntries(menu: ContextMenu, disk: DiskManaged): Unit = { + menu.addEntry(ContextMenuEntry( + if (disk.customRealPath.isDefined) "Change directory" else "Set directory", + IconSource.Folder + ) { + OcelotDesktop.showFileChooserDialog(JFileChooser.OPEN_DIALOG, JFileChooser.DIRECTORIES_ONLY) { dir => + Try { + for (dir <- dir) { + reinserting { + // trigger component_removed / component_added signals + disk.customRealPath = Some(dir.toPath.toAbsolutePath) } } } } - ) + }) - // TODO: unset directory?????? anyone? + if (disk.customRealPath.isDefined) { + menu.addEntry( ContextMenuEntry("Reset directory", IconSource.FolderSlash) { + reinserting { + // trigger component_removed / component_added signals + disk.customRealPath = None + } + }) + } } - private val editWindow = new WindowProvider { - override def windowEntryLabel: String = "Edit" + private lazy val _window = new DiskEditWindow(DiskItem.this) - override def makeWindow(): Window = new DiskEditWindow(DiskItem.this) - } + override def window: Option[Window] = Some(_window) override def fillRmbMenu(menu: ContextMenu): Unit = { - editWindow.fillRmbMenu(menu) + menu.addEntry(ContextMenuEntry("Edit disk", IconSource.Edit) { + window.get.open() + }) + + menu.addSeparator() + super.fillRmbMenu(menu) } diff --git a/src/main/scala/ocelot/desktop/inventory/traits/WindowProvider.scala b/src/main/scala/ocelot/desktop/inventory/traits/WindowProvider.scala deleted file mode 100644 index 43de6ee..0000000 --- a/src/main/scala/ocelot/desktop/inventory/traits/WindowProvider.scala +++ /dev/null @@ -1,25 +0,0 @@ -package ocelot.desktop.inventory.traits - -import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} -import ocelot.desktop.ui.widget.window.Window - -/** - * Potentially manages the windows of an [[ocelot.desktop.inventory.Item Item]] that has them (e.g., the sound card). - * Though at the moment it just provides a convenient way to add an entry to the item's context menu - * for opening a window. - */ -trait WindowProvider { - def windowEntryLabel: String - - def makeWindow(): Window - - def fillRmbMenu(menu: ContextMenu): Unit = { - // TODO: disable the entry while the window is open - // TODO: serialize the window - menu.addEntry( - ContextMenuEntry(windowEntryLabel) { - makeWindow().open() - }, - ) - } -} diff --git a/src/main/scala/ocelot/desktop/node/ComputerAwareNode.scala b/src/main/scala/ocelot/desktop/node/ComputerAwareNode.scala index fbc2f6e..1c90ae3 100644 --- a/src/main/scala/ocelot/desktop/node/ComputerAwareNode.scala +++ b/src/main/scala/ocelot/desktop/node/ComputerAwareNode.scala @@ -9,7 +9,7 @@ import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.event.BrainEvent import ocelot.desktop.ui.event.handlers.DiskActivityHandler import ocelot.desktop.ui.widget.ComputerErrorMessageLabel -import ocelot.desktop.util.{Logging, Messages} +import ocelot.desktop.util.Messages import totoro.ocelot.brain.Settings import totoro.ocelot.brain.entity.traits.{Entity, Environment, WorkspaceAware} import totoro.ocelot.brain.event._ diff --git a/src/main/scala/ocelot/desktop/node/EntityNode.scala b/src/main/scala/ocelot/desktop/node/EntityNode.scala index 5129221..0bcd848 100644 --- a/src/main/scala/ocelot/desktop/node/EntityNode.scala +++ b/src/main/scala/ocelot/desktop/node/EntityNode.scala @@ -1,6 +1,7 @@ package ocelot.desktop.node import ocelot.desktop.OcelotDesktop +import ocelot.desktop.graphics.IconSource import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.event.ClickEvent import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} @@ -34,7 +35,7 @@ abstract class EntityNode(val entity: Entity with Environment) extends Node { override def setupContextMenu(menu: ContextMenu, event: ClickEvent): Unit = { if (exposeAddress && entity.node != null && entity.node.address != null) { menu.addEntry( - ContextMenuEntry("Copy address") { + ContextMenuEntry("Copy address", IconSource.Copy) { UiHandler.clipboard = entity.node.address } ) diff --git a/src/main/scala/ocelot/desktop/node/LabeledNode.scala b/src/main/scala/ocelot/desktop/node/LabeledNode.scala index 023d51f..a3b7644 100644 --- a/src/main/scala/ocelot/desktop/node/LabeledNode.scala +++ b/src/main/scala/ocelot/desktop/node/LabeledNode.scala @@ -1,7 +1,7 @@ package ocelot.desktop.node import ocelot.desktop.color.RGBAColor -import ocelot.desktop.graphics.Graphics +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.ui.event.ClickEvent import ocelot.desktop.ui.widget.InputDialog import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} @@ -26,7 +26,7 @@ trait LabeledNode extends Node { } override def setupContextMenu(menu: ContextMenu, event: ClickEvent): Unit = { - menu.addEntry(ContextMenuEntry("Set label") { + menu.addEntry(ContextMenuEntry("Set label", IconSource.Label) { new InputDialog( "Set label", text => { diff --git a/src/main/scala/ocelot/desktop/node/Node.scala b/src/main/scala/ocelot/desktop/node/Node.scala index df0c761..6dcd9cb 100644 --- a/src/main/scala/ocelot/desktop/node/Node.scala +++ b/src/main/scala/ocelot/desktop/node/Node.scala @@ -1,15 +1,15 @@ package ocelot.desktop.node +import ocelot.desktop.audio.SoundSource import ocelot.desktop.color.{Color, RGBAColor} import ocelot.desktop.geometry.{Rect2D, Size2D, Vector2D} -import ocelot.desktop.graphics.Graphics +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.node.Node._ import ocelot.desktop.ui.event.handlers.{ClickHandler, DragHandler, HoverHandler} import ocelot.desktop.ui.event.{ClickEvent, DragEvent, HoverEvent, MouseEvent} import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} import ocelot.desktop.ui.widget.window.Windowed import ocelot.desktop.ui.widget.{Widget, WorkspaceView} -import ocelot.desktop.util.Disposable import ocelot.desktop.util.animation.ColorAnimation import org.lwjgl.input.Keyboard import totoro.ocelot.brain.nbt.NBTTagCompound @@ -88,18 +88,14 @@ abstract class Node extends Widget with DragHandler with ClickHandler with Hover def setupContextMenu(menu: ContextMenu, event: ClickEvent): Unit = { if (ports.nonEmpty) { - menu.addEntry( - ContextMenuEntry("Disconnect") { - disconnectFromAll() - } - ) + menu.addEntry(ContextMenuEntry("Disconnect", IconSource.LinkSlash, SoundSource.InterfaceClickLow) { + disconnectFromAll() + }) } - menu.addEntry( - ContextMenuEntry("Delete") { - destroy() - } - ) + menu.addEntry(ContextMenuEntry("Remove", IconSource.Delete, SoundSource.InterfaceClickLow) { + destroy() + }) } override def update(): Unit = { @@ -290,10 +286,10 @@ abstract class Node extends Widget with DragHandler with ClickHandler with Hover } override def dispose(): Unit = { - super.dispose() - disconnectFromAll() window.foreach(_.closeAndDispose()) + + super.dispose() } } diff --git a/src/main/scala/ocelot/desktop/node/nodes/ComputerNode.scala b/src/main/scala/ocelot/desktop/node/nodes/ComputerNode.scala index 313efff..359cee7 100644 --- a/src/main/scala/ocelot/desktop/node/nodes/ComputerNode.scala +++ b/src/main/scala/ocelot/desktop/node/nodes/ComputerNode.scala @@ -2,18 +2,15 @@ package ocelot.desktop.node.nodes import ocelot.desktop.color.Color import ocelot.desktop.graphics.Graphics -import ocelot.desktop.inventory.SyncedInventory import ocelot.desktop.node.ComputerAwareNode import ocelot.desktop.node.Node.HighlightThickness import ocelot.desktop.ui.event.ClickEvent import ocelot.desktop.ui.widget.contextmenu.ContextMenu import ocelot.desktop.ui.widget.slot._ import ocelot.desktop.util.{ComputerAware, DrawUtils, TierColor} -import ocelot.desktop.windows.ComputerWindow import totoro.ocelot.brain.entity.Case -import totoro.ocelot.brain.entity.traits.{Computer, Inventory, TieredPersistable} +import totoro.ocelot.brain.entity.traits.Inventory import totoro.ocelot.brain.util.Tier -import totoro.ocelot.brain.util.Tier.Tier class ComputerNode(val computerCase: Case) extends ComputerAwareNode(computerCase) diff --git a/src/main/scala/ocelot/desktop/node/nodes/RackNode.scala b/src/main/scala/ocelot/desktop/node/nodes/RackNode.scala index d960c0d..abbb60b 100644 --- a/src/main/scala/ocelot/desktop/node/nodes/RackNode.scala +++ b/src/main/scala/ocelot/desktop/node/nodes/RackNode.scala @@ -1,9 +1,9 @@ package ocelot.desktop.node.nodes import ocelot.desktop.geometry.{Rect2D, Size2D, Vector2D} -import ocelot.desktop.graphics.{Graphics, Icons} +import ocelot.desktop.graphics.{Graphics, IconSource} +import ocelot.desktop.inventory.Item import ocelot.desktop.inventory.item.{DiskDriveMountableItem, RackMountableItem, ServerItem} -import ocelot.desktop.inventory.{Item, SyncedInventory} import ocelot.desktop.node.Node.{HighlightThickness, NoHighlightSize, Size, TexelCount} import ocelot.desktop.node.{ComputerAwareNode, NodePort} import ocelot.desktop.ui.event.ClickEvent @@ -12,7 +12,7 @@ import ocelot.desktop.ui.widget.window.Window import ocelot.desktop.util.DrawUtils import ocelot.desktop.windows.RackWindow import totoro.ocelot.brain.entity.Rack -import totoro.ocelot.brain.entity.traits.{ComponentInventory, Environment, Inventory, RackMountable, WorkspaceAware} +import totoro.ocelot.brain.entity.traits.{ComponentInventory, Environment, Inventory, RackMountable} import totoro.ocelot.brain.network import totoro.ocelot.brain.util.Direction @@ -108,7 +108,7 @@ class RackNode(val rack: Rack) override def dispose(): Unit = { for (i <- 0 until 4) { Slot(i).get match { - case Some(serverItem: ServerItem) => serverItem.dispose() + case Some(serverItem: ServerItem) => serverItem.onRemoved() case _=> } } @@ -174,17 +174,18 @@ object RackNode { def addContextMenuEntriesOfMountable(menu: ContextMenu, item: Option[RackMountableItem]): Unit = { item match { case Some(serverItem: ServerItem) => + menu.addEntry(ContextMenuEntry("Set up", IconSource.Window) { + serverItem.window.get.open() + }) + if (serverItem.isInRack) { - serverItem.addPowerContextMenuEntries(menu) menu.addSeparator() + + serverItem.addPowerContextMenuEntries(menu) } serverItem.addTierContextMenuEntries(menu) - menu.addEntry(ContextMenuEntry("Configure server") { - serverItem.window.get.open() - }) - menu.addSeparator() case Some(diskDriveMountableItem: DiskDriveMountableItem) => diff --git a/src/main/scala/ocelot/desktop/node/nodes/ScreenNode.scala b/src/main/scala/ocelot/desktop/node/nodes/ScreenNode.scala index 057f590..e131ac1 100644 --- a/src/main/scala/ocelot/desktop/node/nodes/ScreenNode.scala +++ b/src/main/scala/ocelot/desktop/node/nodes/ScreenNode.scala @@ -2,7 +2,7 @@ package ocelot.desktop.node.nodes import ocelot.desktop.color.{Color, IntColor} import ocelot.desktop.geometry.{Rect2D, Size2D} -import ocelot.desktop.graphics.Graphics +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.node.Node.{HighlightThickness, NoHighlightSize, Size} import ocelot.desktop.node.nodes.ScreenNode.{BorderSize, FontHeight, FontWidth} import ocelot.desktop.node.{EntityNode, LabeledEntityNode} @@ -66,11 +66,11 @@ class ScreenNode(val screen: Screen) extends EntityNode(screen) with LabeledEnti override def setupContextMenu(menu: ContextMenu, event: ClickEvent): Unit = { if (screen.getPowerState) - menu.addEntry(ContextMenuEntry("Turn off") { screen.setPowerState(false) }) + menu.addEntry(ContextMenuEntry("Turn off", IconSource.Power) { screen.setPowerState(false) }) else - menu.addEntry(ContextMenuEntry("Turn on") { screen.setPowerState(true) }) + menu.addEntry(ContextMenuEntry("Turn on", IconSource.Power) { screen.setPowerState(true) }) - menu.addEntry(ContextMenuEntry("Set aspect ratio") { + menu.addEntry(ContextMenuEntry("Set aspect ratio", IconSource.AspectRatio) { new ScreenAspectRatioDialog(this).show() }) diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index 644b326..b7a7db1 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -1,6 +1,5 @@ package ocelot.desktop.ui -import buildinfo.BuildInfo import ocelot.desktop.audio.{Audio, SoundBuffers} import ocelot.desktop.geometry.{Rect2D, Size2D, Vector2D} import ocelot.desktop.graphics.Graphics diff --git a/src/main/scala/ocelot/desktop/ui/widget/Checkbox.scala b/src/main/scala/ocelot/desktop/ui/widget/Checkbox.scala index 1152c1f..7216467 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/Checkbox.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/Checkbox.scala @@ -51,6 +51,7 @@ class Checkbox(val label: String, val initialValue: Boolean = false, val isSmall DrawUtils.ring(g, position.x, position.y, boxSize, boxSize, 2, ColorScheme("CheckboxBorder")) g.background = Color.Transparent + if (checked) { g.line(position.x + 1, position.y + boxSize / 2 + 1, position.x + boxSize / 4 + 1, position.y + boxSize / 4 * 3 + 1, 3, ColorScheme("CheckboxForeground")) diff --git a/src/main/scala/ocelot/desktop/ui/widget/DiskEditWindow.scala b/src/main/scala/ocelot/desktop/ui/widget/DiskEditWindow.scala index 5129266..6e705d4 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/DiskEditWindow.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/DiskEditWindow.scala @@ -3,14 +3,14 @@ package ocelot.desktop.ui.widget import ocelot.desktop.ColorScheme import ocelot.desktop.color.Color import ocelot.desktop.geometry.{Padding2D, Size2D} -import ocelot.desktop.graphics.Icons +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.DiskItem import ocelot.desktop.ui.layout.{AlignItems, LinearLayout} -import ocelot.desktop.ui.widget.DiskEditWindow.{ColorNames, Units} +import ocelot.desktop.ui.widget.DiskEditWindow.Units import ocelot.desktop.ui.widget.window.PanelWindow import ocelot.desktop.util.FuncUtils.composeN -import ocelot.desktop.util.Orientation import ocelot.desktop.util.animation.ColorAnimation +import ocelot.desktop.util.{DiskDriveAware, Orientation} import totoro.ocelot.brain.entity.traits.{DiskManaged, DiskUnmanaged} import totoro.ocelot.brain.util.DyeColor @@ -92,13 +92,13 @@ class DiskEditWindow(item: DiskItem) extends PanelWindow { for (dyeColor <- row) { def isColorSelected: Boolean = dyeColor == item.color.get - val floppyIcon = Icons.FloppyDisk(dyeColor).icon + val floppyIcon = IconSource.FloppyDisk(dyeColor).path children :+= new IconButton( floppyIcon, floppyIcon, mode = IconButton.Mode.Radio, drawBackground = true, - tooltip = Some(ColorNames(dyeColor)), + tooltip = Some(DiskDriveAware.ColorNames(dyeColor)), padding = 2, sizeMultiplier = 2f, model = IconButton.ReadOnlyModel(isColorSelected), @@ -174,23 +174,4 @@ object DiskEditWindow { 4 * 1024 -> "kiB", 1024 * 1024 -> "MiB", ) - - private val ColorNames = Map( - DyeColor.White -> "White", - DyeColor.Orange -> "Orange", - DyeColor.Magenta -> "Magenta", - DyeColor.LightBlue -> "LightBlue", - DyeColor.Yellow -> "Yellow", - DyeColor.Lime -> "Lime", - DyeColor.Pink -> "Pink", - DyeColor.Gray -> "Gray", - DyeColor.Silver -> "Silver", - DyeColor.Cyan -> "Cyan", - DyeColor.Purple -> "Purple", - DyeColor.Blue -> "Blue", - DyeColor.Brown -> "Brown", - DyeColor.Green -> "Green", - DyeColor.Red -> "Red", - DyeColor.Black -> "Black", - ) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/Icon.scala b/src/main/scala/ocelot/desktop/ui/widget/Icon.scala index 58fff11..88260fe 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/Icon.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/Icon.scala @@ -2,24 +2,24 @@ package ocelot.desktop.ui.widget import ocelot.desktop.color.Color import ocelot.desktop.geometry.Size2D -import ocelot.desktop.graphics.{Graphics, IconDef} +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.util.Spritesheet -class Icon(icon: IconDef) extends Widget { +class Icon(icon: IconSource) extends Widget { def this(name: String) { - this(IconDef(name)) + this(IconSource(name)) } - def this(name: String, color: Color) { - this(IconDef(name, color = color)) + def this(name: String, animation: IconSource.Animation) { + this(IconSource(name, animation = Some(animation))) } - def this(name: String, animation: IconDef.Animation) { - this(IconDef(name, animation = Some(animation))) - } + def iconColor: Color = Color.White + def iconSize: Size2D = Spritesheet.spriteSize(icon.path) override def minimumSize: Size2D = { - val size = Spritesheet.spriteSize(icon.icon) * icon.sizeMultiplier + val size = iconSize + icon.animation match { case None => size case Some(_) => size.copy(height = size.width) @@ -29,6 +29,6 @@ class Icon(icon: IconDef) extends Widget { override def maximumSize: Size2D = minimumSize override def draw(g: Graphics): Unit = { - g.sprite(icon.icon, bounds.x, bounds.y, bounds.w, bounds.h, icon.color, icon.animation) + g.sprite(icon.path, bounds.x, bounds.y, bounds.w, bounds.h, iconColor, icon.animation) } } \ No newline at end of file diff --git a/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala b/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala index 07b5f44..e3f8b9d 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/MenuBar.scala @@ -2,7 +2,7 @@ package ocelot.desktop.ui.widget import ocelot.desktop.audio.SoundSource import ocelot.desktop.geometry.{Padding2D, Size2D} -import ocelot.desktop.graphics.Graphics +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.ui.event.KeyEvent import ocelot.desktop.ui.widget.contextmenu.{ContextMenuEntry, ContextMenuSubmenu} import ocelot.desktop.{ColorScheme, OcelotDesktop} @@ -18,23 +18,25 @@ class MenuBar extends Widget { private def addEntry(w: Widget): Unit = entries.children :+= w addEntry(new MenuBarSubmenu("File", menu => { - menu.addEntry(ContextMenuEntry("New") { OcelotDesktop.newWorkspace() }) - menu.addEntry(ContextMenuEntry("Open") { OcelotDesktop.showOpenDialog() }) - menu.addEntry(ContextMenuEntry("Save") { OcelotDesktop.save() }) - menu.addEntry(ContextMenuEntry("Save as…") { OcelotDesktop.saveAs() }) + menu.addEntry(ContextMenuEntry("New", IconSource.Plus) { OcelotDesktop.newWorkspace() }) + menu.addEntry(ContextMenuEntry("Open", IconSource.Folder) { OcelotDesktop.showOpenDialog() }) + menu.addEntry(ContextMenuEntry("Save", IconSource.Save) { OcelotDesktop.save() }) + menu.addEntry(ContextMenuEntry("Save as", IconSource.SaveAs) { OcelotDesktop.saveAs() }) + menu.addSeparator() - menu.addEntry(ContextMenuEntry("Exit") { OcelotDesktop.exit() }) + + menu.addEntry(ContextMenuEntry("Exit", IconSource.Cross, SoundSource.InterfaceClickLow) { OcelotDesktop.exit() }) })) addEntry(new MenuBarSubmenu("Player", menu => { - menu.addEntry(ContextMenuEntry("Add...") { OcelotDesktop.showAddPlayerDialog() }) + menu.addEntry(ContextMenuEntry("Create new", IconSource.Plus) { OcelotDesktop.showAddPlayerDialog() }) menu.addSeparator() OcelotDesktop.players.foreach(player => { menu.addEntry(new ContextMenuSubmenu( - (if (player == OcelotDesktop.players.head) "● " else " ") + player.nickname, - () => OcelotDesktop.selectPlayer(player.nickname) + s"${if (player == OcelotDesktop.players.head) "● " else " "}${player.nickname}", + onClick = () => OcelotDesktop.selectPlayer(player.nickname) ) { - addEntry(ContextMenuEntry("Remove", sound = SoundSource.InterfaceClickLow) { + addEntry(ContextMenuEntry("Remove", IconSource.Delete, SoundSource.InterfaceClickLow) { OcelotDesktop.removePlayer(player.nickname) }) }) diff --git a/src/main/scala/ocelot/desktop/ui/widget/component/ComponentSelectorEntry.scala b/src/main/scala/ocelot/desktop/ui/widget/component/ComponentSelectorEntry.scala index 884457b..a258548 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/component/ComponentSelectorEntry.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/component/ComponentSelectorEntry.scala @@ -3,11 +3,11 @@ package ocelot.desktop.ui.widget.component import ocelot.desktop.ColorScheme import ocelot.desktop.color.Color import ocelot.desktop.geometry.Padding2D -import ocelot.desktop.graphics.IconDef +import ocelot.desktop.graphics.IconSource import ocelot.desktop.ui.layout.{AlignItems, Layout, LinearLayout} import ocelot.desktop.ui.widget.{Icon, Label, PaddingBox, Widget} -class ComponentSelectorEntry(label: String, icon: IconDef) extends Widget { +class ComponentSelectorEntry(label: String, icon: IconSource) extends Widget { children :+= new Widget { override val layout: Layout = new LinearLayout(this, alignItems = AlignItems.Center) diff --git a/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuEntry.scala b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuEntry.scala index b51ba96..abeda3c 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuEntry.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuEntry.scala @@ -4,7 +4,7 @@ import ocelot.desktop.ColorScheme import ocelot.desktop.audio.SoundSource import ocelot.desktop.color.Color import ocelot.desktop.geometry.{Padding2D, Size2D} -import ocelot.desktop.graphics.{Graphics, IconDef} +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.ui.event.handlers.{ClickHandler, HoverHandler} import ocelot.desktop.ui.event.{ClickEvent, HoverEvent, MouseEvent} import ocelot.desktop.ui.layout.{AlignItems, Layout, LinearLayout} @@ -13,11 +13,11 @@ import ocelot.desktop.util.animation.ValueAnimation import ocelot.desktop.util.animation.easing.{EaseInQuad, EaseOutQuad} class ContextMenuEntry( - label: String, - onClick: () => Unit = () => {}, - icon: Option[IconDef] = None, - sound: SoundSource = SoundSource.InterfaceClick, - soundDisabled: SoundSource = SoundSource.InterfaceClickLow + label: String, + icon: Option[ContextMenuIcon] = None, + onClick: () => Unit = () => {}, + sound: SoundSource = SoundSource.InterfaceClick, + soundDisabled: SoundSource = SoundSource.InterfaceClickLow ) extends Widget with ClickHandler with HoverHandler @@ -42,16 +42,26 @@ class ContextMenuEntry( icon match { case Some(icon) => - children :+= new PaddingBox(new Icon(icon), Padding2D(left = 8f, right = 6f)) + children :+= new PaddingBox( + new Icon(icon.source) { + override def iconColor: Color = icon.color.getOrElse(ColorScheme("ContextMenuIcon")) + + override def iconSize: Size2D = icon.size match { + case ContextMenuIconSize.Normal => Size2D(16, 16) + case _ => Size2D(32, 32) + } + }, + Padding2D(left = 8f, right = 8f) + ) case _ => } children :+= new PaddingBox( new Label { override def text: String = label - override def color: Color = ColorScheme("ContextMenuText") - }, Padding2D(top = 3f, bottom = 3f) + }, + Padding2D(top = 5f, bottom = 5f) ) }, Padding2D(left = padLeft, right = 16f, top = 2f, bottom = 2f) ) @@ -123,16 +133,43 @@ class ContextMenuEntry( object ContextMenuEntry { def apply( - label: String, - icon: Option[IconDef] = None, - sound: SoundSource = SoundSource.InterfaceClick, - soundDisabled: SoundSource = SoundSource.InterfaceClickLow + label: String, + icon: Option[ContextMenuIcon] = None )(onClick: => Unit): ContextMenuEntry = new ContextMenuEntry( label, onClick = onClick _, - icon = icon, + icon = icon + ) + + def apply( + label: String + )(onClick: => Unit): ContextMenuEntry = + new ContextMenuEntry( + label, + onClick = onClick _, + icon = None + ) + + def apply( + label: String, + icon: IconSource + )(onClick: => Unit): ContextMenuEntry = + new ContextMenuEntry( + label, + Some(ContextMenuIcon(icon)), + onClick = onClick _, + ) + + def apply( + label: String, + icon: IconSource, + sound: SoundSource + )(onClick: => Unit): ContextMenuEntry = + new ContextMenuEntry( + label, + Some(ContextMenuIcon(icon)), sound = sound, - soundDisabled = soundDisabled + onClick = onClick _ ) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuIcon.scala b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuIcon.scala new file mode 100644 index 0000000..f91e876 --- /dev/null +++ b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuIcon.scala @@ -0,0 +1,10 @@ +package ocelot.desktop.ui.widget.contextmenu + +import ocelot.desktop.color.Color +import ocelot.desktop.graphics.IconSource + +case class ContextMenuIcon( + source: IconSource, + size: ContextMenuIconSize.Value = ContextMenuIconSize.Normal, + color: Option[Color] = None +) diff --git a/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuIconSize.scala b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuIconSize.scala new file mode 100644 index 0000000..68bcf1f --- /dev/null +++ b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuIconSize.scala @@ -0,0 +1,5 @@ +package ocelot.desktop.ui.widget.contextmenu + +object ContextMenuIconSize extends Enumeration { + val Normal, Big = Value +} \ No newline at end of file diff --git a/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuSubmenu.scala b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuSubmenu.scala index 3ac623c..2625b62 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuSubmenu.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/contextmenu/ContextMenuSubmenu.scala @@ -3,15 +3,20 @@ package ocelot.desktop.ui.widget.contextmenu import ocelot.desktop.ColorScheme import ocelot.desktop.color.Color import ocelot.desktop.geometry.Vector2D -import ocelot.desktop.graphics.{Graphics, IconDef} +import ocelot.desktop.graphics.Graphics import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.event.HoverEvent -class ContextMenuSubmenu(label: String, - onClick: () => Unit = null, - icon: Option[IconDef] = None) - extends ContextMenuEntry(label + " ", if (onClick != null) onClick else () => {}, icon) -{ +class ContextMenuSubmenu( + label: String, + icon: Option[ContextMenuIcon] = None, + onClick: () => Unit = () => {}, +) +extends ContextMenuEntry( + label + " ", + icon, + onClick +) { private val parentEntry = this private val submenu = new ContextMenu { override def update(): Unit = { @@ -54,4 +59,4 @@ class ContextMenuSubmenu(label: String, contextMenus.open(submenu, position + Vector2D(width, -4), position.x, position.y + height + 4, isSubmenu = true) } -} +} \ No newline at end of file diff --git a/src/main/scala/ocelot/desktop/ui/widget/modal/notification/NotificationDialog.scala b/src/main/scala/ocelot/desktop/ui/widget/modal/notification/NotificationDialog.scala index f85622d..b1a1e33 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/modal/notification/NotificationDialog.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/modal/notification/NotificationDialog.scala @@ -3,7 +3,7 @@ package ocelot.desktop.ui.widget.modal.notification import ocelot.desktop.ColorScheme import ocelot.desktop.color.Color import ocelot.desktop.geometry.Padding2D -import ocelot.desktop.graphics.{Graphics, Icons} +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.ui.layout.LinearLayout import ocelot.desktop.ui.widget._ import ocelot.desktop.ui.widget.modal.ModalDialog @@ -30,7 +30,7 @@ class NotificationDialog(message: String, notificationType: NotificationType = N // Icon children :+= new PaddingBox( - new Icon(Icons.NotificationIcon(notificationType)), + new Icon(IconSource.Notification(notificationType)), Padding2D.equal(10) ) diff --git a/src/main/scala/ocelot/desktop/ui/widget/settings/SettingsTab.scala b/src/main/scala/ocelot/desktop/ui/widget/settings/SettingsTab.scala index a077ba7..c45848a 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/settings/SettingsTab.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/settings/SettingsTab.scala @@ -1,6 +1,6 @@ package ocelot.desktop.ui.widget.settings -import ocelot.desktop.graphics.IconDef +import ocelot.desktop.graphics.IconSource import ocelot.desktop.ui.layout.LinearLayout import ocelot.desktop.ui.widget.Widget import ocelot.desktop.util.Orientation @@ -8,7 +8,7 @@ import ocelot.desktop.util.Orientation trait SettingsTab extends Widget { override protected val layout = new LinearLayout(this, orientation = Orientation.Vertical) - val icon: IconDef + val icon: IconSource val label: String /** diff --git a/src/main/scala/ocelot/desktop/ui/widget/settings/SoundSettingsTab.scala b/src/main/scala/ocelot/desktop/ui/widget/settings/SoundSettingsTab.scala index 203c35b..bc715f0 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/settings/SoundSettingsTab.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/settings/SoundSettingsTab.scala @@ -2,11 +2,11 @@ package ocelot.desktop.ui.widget.settings import ocelot.desktop.Settings import ocelot.desktop.geometry.{Padding2D, Size2D} -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.ui.widget.{PaddingBox, Slider} class SoundSettingsTab extends SettingsTab { - override val icon: IconDef = Icons.SettingsSound + override val icon: IconSource = IconSource.SettingsSound override val label: String = "Sound" children :+= new PaddingBox(new Slider(Settings.get.volumeMaster, "Master Volume") { diff --git a/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala b/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala index 170769e..5a62da5 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/settings/UISettingsTab.scala @@ -2,12 +2,12 @@ package ocelot.desktop.ui.widget.settings import ocelot.desktop.Settings import ocelot.desktop.geometry.{Padding2D, Size2D} -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.widget.{Checkbox, PaddingBox, Slider} class UISettingsTab extends SettingsTab { - override val icon: IconDef = Icons.SettingsUI + override val icon: IconSource = IconSource.SettingsUI override val label: String = "UI" override def applySettings(): Unit = { diff --git a/src/main/scala/ocelot/desktop/ui/widget/slot/CardSlotWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/slot/CardSlotWidget.scala index a91fa31..9a53b0b 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/slot/CardSlotWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/slot/CardSlotWidget.scala @@ -1,11 +1,11 @@ package ocelot.desktop.ui.widget.slot -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.Inventory import ocelot.desktop.inventory.traits.CardItem import totoro.ocelot.brain.util.Tier.Tier class CardSlotWidget(slot: Inventory#Slot, _tier: Tier) extends SlotWidget[CardItem](slot) { - override def ghostIcon: Option[IconDef] = Some(Icons.CardIcon) + override def ghostIcon: Option[IconSource] = Some(IconSource.CardIcon) override def slotTier: Option[Tier] = Some(_tier) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/slot/ComponentBusSlotWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/slot/ComponentBusSlotWidget.scala index 54de0f6..573c25b 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/slot/ComponentBusSlotWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/slot/ComponentBusSlotWidget.scala @@ -1,6 +1,6 @@ package ocelot.desktop.ui.widget.slot -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.Inventory import ocelot.desktop.inventory.item.ComponentBusItem import totoro.ocelot.brain.util.Tier.Tier @@ -8,6 +8,6 @@ import totoro.ocelot.brain.util.Tier.Tier class ComponentBusSlotWidget(slot: Inventory#Slot, _tier: Tier) extends SlotWidget[ComponentBusItem](slot) { - override def ghostIcon: Option[IconDef] = Some(Icons.ComponentBusIcon) + override def ghostIcon: Option[IconSource] = Some(IconSource.ComponentBusIcon) override def slotTier: Option[Tier] = Some(_tier) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/slot/CpuSlotWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/slot/CpuSlotWidget.scala index e5c6829..d426eff 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/slot/CpuSlotWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/slot/CpuSlotWidget.scala @@ -1,13 +1,13 @@ package ocelot.desktop.ui.widget.slot -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.traits.CpuLikeItem import ocelot.desktop.inventory.{Inventory, Item} import ocelot.desktop.util.ComputerAware import totoro.ocelot.brain.util.Tier.Tier class CpuSlotWidget(slot: Inventory#Slot, computer: ComputerAware, _tier: Tier) extends SlotWidget[CpuLikeItem](slot) { - override def ghostIcon: Option[IconDef] = Some(Icons.CpuIcon) + override def ghostIcon: Option[IconSource] = Some(IconSource.CpuIcon) override def slotTier: Option[Tier] = Some(_tier) protected override def onItemNotification(notification: Item.Notification): Unit = { diff --git a/src/main/scala/ocelot/desktop/ui/widget/slot/EepromSlotWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/slot/EepromSlotWidget.scala index 1395088..58f91f2 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/slot/EepromSlotWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/slot/EepromSlotWidget.scala @@ -1,9 +1,9 @@ package ocelot.desktop.ui.widget.slot -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.Inventory import ocelot.desktop.inventory.item.EepromItem class EepromSlotWidget(slot: Inventory#Slot) extends SlotWidget[EepromItem](slot) { - override def ghostIcon: Option[IconDef] = Some(Icons.EepromIcon) + override def ghostIcon: Option[IconSource] = Some(IconSource.EepromIcon) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/slot/FloppySlotWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/slot/FloppySlotWidget.scala index 5681777..12176c1 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/slot/FloppySlotWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/slot/FloppySlotWidget.scala @@ -1,12 +1,12 @@ package ocelot.desktop.ui.widget.slot import ocelot.desktop.audio.{Audio, SoundSource} -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.Inventory import ocelot.desktop.inventory.item.FloppyItem class FloppySlotWidget(slot: Inventory#Slot) extends SlotWidget[FloppyItem](slot) { - override def ghostIcon: Option[IconDef] = Some(Icons.FloppyIcon) + override def ghostIcon: Option[IconSource] = Some(IconSource.FloppyIcon) override def onItemAdded(): Unit = { super.onItemAdded() diff --git a/src/main/scala/ocelot/desktop/ui/widget/slot/HddSlotWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/slot/HddSlotWidget.scala index cbd9252..b7bf786 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/slot/HddSlotWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/slot/HddSlotWidget.scala @@ -1,11 +1,11 @@ package ocelot.desktop.ui.widget.slot -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.Inventory import ocelot.desktop.inventory.item.HddItem import totoro.ocelot.brain.util.Tier.Tier class HddSlotWidget(slot: Inventory#Slot, _tier: Tier) extends SlotWidget[HddItem](slot) { - override def ghostIcon: Option[IconDef] = Some(Icons.HddIcon) + override def ghostIcon: Option[IconSource] = Some(IconSource.HddIcon) override def slotTier: Option[Tier] = Some(_tier) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/slot/ItemChooser.scala b/src/main/scala/ocelot/desktop/ui/widget/slot/ItemChooser.scala index 81ca0bb..f5795b5 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/slot/ItemChooser.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/slot/ItemChooser.scala @@ -1,9 +1,9 @@ package ocelot.desktop.ui.widget.slot -import ocelot.desktop.graphics.IconDef +import ocelot.desktop.color.Color import ocelot.desktop.inventory.Items.{ArbitraryItemGroup, ExtendedTieredItemGroup, SingletonItemGroup, TieredItemGroup} import ocelot.desktop.inventory._ -import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry, ContextMenuSubmenu} +import ocelot.desktop.ui.widget.contextmenu._ import totoro.ocelot.brain.util.ExtendedTier.ExtendedTier import totoro.ocelot.brain.util.Tier.Tier @@ -11,7 +11,10 @@ class ItemChooser[I <: Item](slot: SlotWidget[I]) extends ContextMenu { import ItemChooser._ private def makeMenuEntry(factory: ItemFactory, label: String): ContextMenuEntry = { - ContextMenuEntry(label, icon = Some(factory.icon)) { + ContextMenuEntry( + label, + Some(ContextMenuIcon(factory.icon, ContextMenuIconSize.Big, Some(Color.White))) + ) { slot.item = factory.build().asInstanceOf[I] } } @@ -19,7 +22,7 @@ class ItemChooser[I <: Item](slot: SlotWidget[I]) extends ContextMenu { private def addSubmenu[T: HasLabel]( name: String, factories: Seq[(T, ItemFactory)], - icon: Option[IconDef] = None + icon: Option[ContextMenuIcon] = None ): Unit = { val tierLabel = implicitly[HasLabel[T]].label _ @@ -27,7 +30,10 @@ class ItemChooser[I <: Item](slot: SlotWidget[I]) extends ContextMenu { if (acceptedFactories.nonEmpty) { addEntry( - new ContextMenuSubmenu(name, icon = Some(icon.getOrElse(acceptedFactories.last._2.icon))) { + new ContextMenuSubmenu( + name, + Some(icon.getOrElse(ContextMenuIcon(acceptedFactories.last._2.icon, ContextMenuIconSize.Big, Some(Color.White)))) + ) { for ((tier, factory) <- acceptedFactories) { addEntry(makeMenuEntry(factory, tierLabel(tier))) } @@ -47,7 +53,7 @@ class ItemChooser[I <: Item](slot: SlotWidget[I]) extends ContextMenu { case ExtendedTieredItemGroup(name, factories) => addSubmenu(name, factories) - case ArbitraryItemGroup(name, icon, factories) => addSubmenu(name, factories, Some(icon)) + case ArbitraryItemGroup(name, icon, factories) => addSubmenu(name, factories, Some(ContextMenuIcon(icon, ContextMenuIconSize.Big, Some(Color.White)))) } } } diff --git a/src/main/scala/ocelot/desktop/ui/widget/slot/MemorySlotWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/slot/MemorySlotWidget.scala index 109ecbf..e945b81 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/slot/MemorySlotWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/slot/MemorySlotWidget.scala @@ -1,11 +1,11 @@ package ocelot.desktop.ui.widget.slot -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.Inventory import ocelot.desktop.inventory.item.MemoryItem import totoro.ocelot.brain.util.Tier.Tier class MemorySlotWidget(slot: Inventory#Slot, _tier: Tier) extends SlotWidget[MemoryItem](slot) { - override def ghostIcon: Option[IconDef] = Some(Icons.MemoryIcon) + override def ghostIcon: Option[IconSource] = Some(IconSource.MemoryIcon) override def slotTier: Option[Tier] = Some(_tier) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/slot/RackMountableSlotWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/slot/RackMountableSlotWidget.scala index d62517a..98d2e0b 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/slot/RackMountableSlotWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/slot/RackMountableSlotWidget.scala @@ -1,17 +1,13 @@ package ocelot.desktop.ui.widget.slot -import ocelot.desktop.graphics.{IconDef, Icons} +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.Inventory -import ocelot.desktop.inventory.item.{DiskDriveMountableItem, RackMountableItem, ServerItem} -import ocelot.desktop.node.nodes.RackNode -import ocelot.desktop.ui.event.sources.KeyEvents -import ocelot.desktop.ui.widget.contextmenu.ContextMenu -import org.lwjgl.input.Keyboard +import ocelot.desktop.inventory.item.{RackMountableItem, ServerItem} class RackMountableSlotWidget(slot: Inventory#Slot) extends SlotWidget[RackMountableItem](slot) { - override def ghostIcon: Option[IconDef] = Some(Icons.ServerIcon) + override def ghostIcon: Option[IconSource] = Some(IconSource.ServerIcon) override def onItemRemoved(removedItem: RackMountableItem, replacedBy: Option[RackMountableItem]): Unit = { super.onItemRemoved(removedItem, replacedBy) diff --git a/src/main/scala/ocelot/desktop/ui/widget/slot/SlotWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/slot/SlotWidget.scala index 98343e8..760279b 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/slot/SlotWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/slot/SlotWidget.scala @@ -3,7 +3,7 @@ package ocelot.desktop.ui.widget.slot import ocelot.desktop.audio.SoundSource import ocelot.desktop.color.Color import ocelot.desktop.geometry.{Size2D, Vector2D} -import ocelot.desktop.graphics.{Graphics, IconDef, Icons} +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.inventory.{Inventory, Item, ItemFactory} import ocelot.desktop.ui.event.handlers.{ClickHandler, DragHandler, HoverHandler} import ocelot.desktop.ui.event.{ClickEvent, DragEvent, HoverEvent, MouseEvent} @@ -12,7 +12,6 @@ import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} import ocelot.desktop.ui.widget.itemdrag.DraggedItem import ocelot.desktop.ui.widget.slot.SlotWidget.{HighlightAlpha, HighlightAnimationHideSpeed, HighlightAnimationShowSpeed} import ocelot.desktop.ui.widget.tooltip.{ItemTooltip, Tooltip} -import ocelot.desktop.util.Disposable import ocelot.desktop.util.animation.ValueAnimation import totoro.ocelot.brain.util.Tier import totoro.ocelot.brain.util.Tier.Tier @@ -58,13 +57,13 @@ class SlotWidget[I <: Item](private val slot: Inventory#Slot)(implicit slotItemT disposed = true } - def ghostIcon: Option[IconDef] = None + def ghostIcon: Option[IconSource] = None def slotTier: Option[Tier] = None - def tierIcon: Option[IconDef] = slotTier.map(Icons.TierIcon) + def tierIcon: Option[IconSource] = slotTier.map(IconSource.TierIcon) - def itemIcon: Option[IconDef] = item.map(_.icon) + def itemIcon: Option[IconSource] = item.map(_.icon) def item: Option[I] = slot.get.filter(_ => !disposed).map(_.asInstanceOf[I]) @@ -111,7 +110,7 @@ class SlotWidget[I <: Item](private val slot: Inventory#Slot)(implicit slotItemT for (item <- item) { item.fillRmbMenu(menu) menu.addEntry( - ContextMenuEntry("Remove", sound = SoundSource.InterfaceClickLow) { + ContextMenuEntry("Remove", IconSource.Delete, SoundSource.InterfaceClickLow) { slot.remove() } ) @@ -255,7 +254,7 @@ class SlotWidget[I <: Item](private val slot: Inventory#Slot)(implicit slotItemT override def update(): Unit = { super.update() - + if (item.isDefined) item.get.update() } diff --git a/src/main/scala/ocelot/desktop/ui/widget/statusbar/StatusBar.scala b/src/main/scala/ocelot/desktop/ui/widget/statusbar/StatusBar.scala index a55d3c4..67b6167 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/statusbar/StatusBar.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/statusbar/StatusBar.scala @@ -2,7 +2,7 @@ package ocelot.desktop.ui.widget.statusbar import ocelot.desktop.color.Color import ocelot.desktop.geometry.{Padding2D, Size2D} -import ocelot.desktop.graphics.Graphics +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.event.handlers.ClickHandler import ocelot.desktop.ui.event.{ClickEvent, KeyEvent, MouseEvent} @@ -55,19 +55,23 @@ class StatusBar extends Widget { eventHandlers += { case ClickEvent(MouseEvent.Button.Right, pos) => val menu = new ContextMenu - menu.addEntry(ContextMenuEntry("Change simulation speed") { + menu.addEntry(ContextMenuEntry("Change simulation speed", IconSource.Edit) { new ChangeSimulationSpeedDialog().show() }) - menu.addEntry(ContextMenuEntry("Reset simulation speed") { + + menu.addEntry(ContextMenuEntry("Reset simulation speed", IconSource.Restart) { OcelotDesktop.ticker.tickInterval = 50.millis }) + if (OcelotDesktop.tickerIntervalHistory.nonEmpty) menu.addSeparator() + for (elem <- OcelotDesktop.tickerIntervalHistory.reverseIterator) { menu.addEntry(ContextMenuEntry((1_000_000f / elem.toMicros).toString) { OcelotDesktop.ticker.tickInterval = elem }) } + root.get.contextMenus.open(menu, pos) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/verticalmenu/VerticalMenuButton.scala b/src/main/scala/ocelot/desktop/ui/widget/verticalmenu/VerticalMenuButton.scala index 7655c0f..d3dcb2c 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/verticalmenu/VerticalMenuButton.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/verticalmenu/VerticalMenuButton.scala @@ -4,7 +4,7 @@ import ocelot.desktop.ColorScheme import ocelot.desktop.audio.SoundSource import ocelot.desktop.color.Color import ocelot.desktop.geometry.{Padding2D, Size2D} -import ocelot.desktop.graphics.{Graphics, IconDef} +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.ui.event.handlers.{ClickHandler, HoverHandler} import ocelot.desktop.ui.event.{ClickEvent, HoverEvent, MouseEvent} import ocelot.desktop.ui.layout.LinearLayout @@ -12,7 +12,7 @@ import ocelot.desktop.ui.widget._ import ocelot.desktop.util.Orientation import ocelot.desktop.util.animation.ColorAnimation -class VerticalMenuButton(icon: IconDef, label: String, handler: VerticalMenuButton => Unit = _ => {}) +class VerticalMenuButton(icon: IconSource, label: String, handler: VerticalMenuButton => Unit = _ => {}) extends Widget with ClickHandler with HoverHandler with ClickSoundSource { val colorAnimation: ColorAnimation = new ColorAnimation(ColorScheme("VerticalMenuBackground"), 0.6f) @@ -22,7 +22,9 @@ class VerticalMenuButton(icon: IconDef, label: String, handler: VerticalMenuButt override val layout = new LinearLayout(this, orientation = Orientation.Horizontal) children :+= new PaddingBox( - new Icon(icon.copy(sizeMultiplier = 1f, color = ColorScheme("VerticalMenuEntryIcon"))), + new Icon(icon) { + override def iconColor: Color = ColorScheme("VerticalMenuEntryIcon") + }, Padding2D(right = 8) ) diff --git a/src/main/scala/ocelot/desktop/util/ComputerAware.scala b/src/main/scala/ocelot/desktop/util/ComputerAware.scala index da2a0e6..e02e0fe 100644 --- a/src/main/scala/ocelot/desktop/util/ComputerAware.scala +++ b/src/main/scala/ocelot/desktop/util/ComputerAware.scala @@ -1,10 +1,11 @@ package ocelot.desktop.util import ocelot.desktop.audio._ +import ocelot.desktop.graphics.IconSource import ocelot.desktop.inventory.item._ import ocelot.desktop.inventory.traits.ComponentItem import ocelot.desktop.inventory.{Item, SyncedInventory} -import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry, ContextMenuSubmenu} +import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry, ContextMenuIcon, ContextMenuSubmenu} import ocelot.desktop.ui.widget.slot._ import ocelot.desktop.ui.widget.window.Windowed import ocelot.desktop.windows.ComputerWindow @@ -62,35 +63,25 @@ trait ComputerAware def addPowerContextMenuEntries(menu: ContextMenu): Unit = { if (computer.machine.isRunning) { - menu.addEntry(ContextMenuEntry("Turn off") { + menu.addEntry(ContextMenuEntry("Turn off", IconSource.Power) { turnOff() }) - menu.addEntry(ContextMenuEntry("Reboot") { + menu.addEntry(ContextMenuEntry("Reboot", IconSource.Restart) { turnOff() turnOn() }) } else { - menu.addEntry(ContextMenuEntry("Turn on") { + menu.addEntry(ContextMenuEntry("Turn on", IconSource.Power) { turnOn() }) } - - menu.addEntry( - new ContextMenuSubmenu("Set tier") { - for (tier <- Tier.One to Tier.Creative) { - addEntry(ContextMenuEntry(tier.label) { - changeTier(tier) - }) - } - } - ) } def addTierContextMenuEntries(menu: ContextMenu): Unit = { menu.addEntry( - new ContextMenuSubmenu("Set tier") { + new ContextMenuSubmenu("Change tier", Some(ContextMenuIcon(IconSource.Tiers))) { for (tier <- Tier.One to Tier.Creative) { addEntry(ContextMenuEntry(tier.label) { changeTier(tier) @@ -108,6 +99,8 @@ trait ComputerAware var diskSlots: Array[HddSlotWidget] = Array.empty var floppySlot: Option[FloppySlotWidget] = None + private var nextSlotIndex = 0 + protected def slots: IterableOnce[SlotWidget[I]] = ( // slots may be null during initialization Option(eepromSlot).iterator ++ @@ -119,7 +112,13 @@ trait ComputerAware floppySlot.iterator ).map(_.asInstanceOf[SlotWidget[I]]) - protected def insertItems(items: IterableOnce[I]): Unit = { + private def addSlot(): Slot = { + val result = Slot(nextSlotIndex) + nextSlotIndex += 1 + result + } + + private def insertItems(items: IterableOnce[I]): Unit = { def findBestSlot[A <: I](item: A, candidates: IterableOnce[SlotWidget[A]]): Option[SlotWidget[A]] = { candidates.iterator .filter(_.item.isEmpty) @@ -132,14 +131,6 @@ trait ComputerAware } } - private var nextSlotIndex = 0 - - private def addSlot(): Slot = { - val result = Slot(nextSlotIndex) - nextSlotIndex += 1 - result - } - protected def addSlotWidget[T <: SlotWidget[_]](factory: Slot => T): T = { val slot = addSlot() val widget = factory(slot) diff --git a/src/main/scala/ocelot/desktop/util/DiskDriveAware.scala b/src/main/scala/ocelot/desktop/util/DiskDriveAware.scala index 2a8b884..a53dc86 100644 --- a/src/main/scala/ocelot/desktop/util/DiskDriveAware.scala +++ b/src/main/scala/ocelot/desktop/util/DiskDriveAware.scala @@ -3,12 +3,13 @@ package ocelot.desktop.util import ocelot.desktop.audio.{Audio, SoundSource} import ocelot.desktop.color._ import ocelot.desktop.geometry.Rect2D -import ocelot.desktop.graphics.{Graphics, Icons} +import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.inventory.SyncedInventory import ocelot.desktop.inventory.item._ import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry} import ocelot.desktop.ui.widget.slot._ import ocelot.desktop.ui.widget.window.Windowed +import ocelot.desktop.util.DiskDriveAware.ColorValues import ocelot.desktop.windows.DiskDriveWindow import totoro.ocelot.brain.entity.FloppyDiskDrive import totoro.ocelot.brain.entity.traits.Inventory @@ -31,7 +32,61 @@ trait DiskDriveAware floppySlotWidget.item = new FloppyItem.Factory.Loot(Loot.OpenOsFloppy).build() } - protected val colorMap: Map[DyeColor, Int] = Map( + def drawActivityAndFloppy(g: Graphics, bounds: Rect2D, prefix: String): Unit = { + if (System.currentTimeMillis() - floppyDiskDrive.lastDiskAccess < 400 && Math.random() > 0.1) + g.sprite(s"${prefix}Activity", bounds) + + for (item <- floppySlotWidget.item) { + g.sprite( + s"${prefix}Floppy", + bounds.x, + bounds.y, + bounds.w, + bounds.h, + IntColor(ColorValues(item.color.value)) + ) + } + } + + def isFloppyItemPresent: Boolean = floppySlotWidget.item.isDefined + + def eject(): Unit = { + floppySlotWidget.item = None + + if (!Audio.isDisabled) + SoundSource.MachineFloppyEject.play() + } + + def addDiskDriveMenuEntries(menu: ContextMenu): Unit = { + menu.addEntry(ContextMenuEntry("Eject", IconSource.Eject) { + eject() + }) + } + + override val window: Option[DiskDriveWindow] = Some(new DiskDriveWindow(this)) +} + +object DiskDriveAware { + val ColorNames: Map[DyeColor, String] = Map( + DyeColor.White -> "White", + DyeColor.Orange -> "Orange", + DyeColor.Magenta -> "Magenta", + DyeColor.LightBlue -> "LightBlue", + DyeColor.Yellow -> "Yellow", + DyeColor.Lime -> "Lime", + DyeColor.Pink -> "Pink", + DyeColor.Gray -> "Gray", + DyeColor.Silver -> "Silver", + DyeColor.Cyan -> "Cyan", + DyeColor.Purple -> "Purple", + DyeColor.Blue -> "Blue", + DyeColor.Brown -> "Brown", + DyeColor.Green -> "Green", + DyeColor.Red -> "Red", + DyeColor.Black -> "Black", + ) + + val ColorValues: Map[DyeColor, Int] = Map( DyeColor.Black -> 0x444444, // 0x1E1B1B DyeColor.Red -> 0xB3312C, DyeColor.Green -> 0x339911, // 0x3B511A @@ -49,37 +104,4 @@ trait DiskDriveAware DyeColor.Orange -> 0xEB8844, DyeColor.White -> 0xF0F0F0 ) - - def drawActivityAndFloppy(g: Graphics, bounds: Rect2D, prefix: String): Unit = { - if (System.currentTimeMillis() - floppyDiskDrive.lastDiskAccess < 400 && Math.random() > 0.1) - g.sprite(s"${prefix}Activity", bounds) - - for (item <- floppySlotWidget.item) { - g.sprite( - s"${prefix}Floppy", - bounds.x, - bounds.y, - bounds.w, - bounds.h, - IntColor(colorMap(item.color.value)) - ) - } - } - - def isFloppyItemPresent: Boolean = floppySlotWidget.item.isDefined - - def eject(): Unit = { - floppySlotWidget.item = None - - if (!Audio.isDisabled) - SoundSource.MachineFloppyEject.play() - } - - def addDiskDriveMenuEntries(menu: ContextMenu): Unit = { - menu.addEntry(ContextMenuEntry("Eject") { - eject() - }) - } - - override val window: Option[DiskDriveWindow] = Some(new DiskDriveWindow(this)) -} +} \ No newline at end of file diff --git a/src/main/scala/ocelot/desktop/windows/RackWindow.scala b/src/main/scala/ocelot/desktop/windows/RackWindow.scala index 993df77..6215238 100644 --- a/src/main/scala/ocelot/desktop/windows/RackWindow.scala +++ b/src/main/scala/ocelot/desktop/windows/RackWindow.scala @@ -5,9 +5,9 @@ import ocelot.desktop.graphics.Graphics import ocelot.desktop.inventory.item.{NetworkCardItem, ServerItem} import ocelot.desktop.node.nodes.RackNode import ocelot.desktop.ui.layout.{Layout, LinearLayout} +import ocelot.desktop.ui.widget._ import ocelot.desktop.ui.widget.slot.RackMountableSlotWidget import ocelot.desktop.ui.widget.window.PanelWindow -import ocelot.desktop.ui.widget._ import ocelot.desktop.util.Orientation import totoro.ocelot.brain.util.Direction import totoro.ocelot.brain.util.Direction.Direction diff --git a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala index 14a403c..f1bf28a 100644 --- a/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala +++ b/src/main/scala/ocelot/desktop/windows/ScreenWindow.scala @@ -84,10 +84,12 @@ class ScreenWindow(screenNode: ScreenNode) extends BasicWindow with Logging { if (sentTouchEvent) { screen.mouseUp(lastMousePos.x, lastMousePos.y, event.button.id, OcelotDesktop.player) sentTouchEvent = false - } else if (pinButtonBounds.contains(UiHandler.mousePosition)) { + } + else if (pinButtonBounds.contains(UiHandler.mousePosition)) { if (isPinned) unpin() else pin() SoundSource.InterfaceClick.play() - } else if (closeButtonBounds.contains(UiHandler.mousePosition)) { + } + else if (closeButtonBounds.contains(UiHandler.mousePosition)) { close() SoundSource.InterfaceClick.play() }