From 128a2dc369634d630119e6fd98443767cf3d3f58 Mon Sep 17 00:00:00 2001 From: Pavel <68122101+red-prig@users.noreply.github.com> Date: Mon, 19 Feb 2024 11:28:31 +0300 Subject: [PATCH] + --- gui/game_run.pas | 6 -- gui/main.lfm | 118 +++++++++++++++++++++++++++-- gui/main.pas | 124 ++++++++++++++++++++++++++++++- icons/211751_gear_icon.png | Bin 0 -> 972 bytes icons/211871_pause_icon.png | Bin 0 -> 287 bytes icons/211871_pause_icon_gray.png | Bin 0 -> 479 bytes icons/211876_play_icon.png | Bin 0 -> 576 bytes icons/211876_play_icon_gray.png | Bin 0 -> 653 bytes icons/211931_stop_icon.png | Bin 0 -> 203 bytes icons/211931_stop_icon_gray.png | Bin 0 -> 403 bytes 10 files changed, 233 insertions(+), 15 deletions(-) create mode 100644 icons/211751_gear_icon.png create mode 100644 icons/211871_pause_icon.png create mode 100644 icons/211871_pause_icon_gray.png create mode 100644 icons/211876_play_icon.png create mode 100644 icons/211876_play_icon_gray.png create mode 100644 icons/211931_stop_icon.png create mode 100644 icons/211931_stop_icon_gray.png diff --git a/gui/game_run.pas b/gui/game_run.pas index efe6c6fb..5ebb6c89 100644 --- a/gui/game_run.pas +++ b/gui/game_run.pas @@ -82,9 +82,6 @@ begin inherited; end; -var - runing:Boolean=False; - procedure re_init_tty; register; var i:Integer; @@ -244,8 +241,6 @@ begin Result:=nil; if Item.FLock then Exit; - if runing then Exit; - SetStdHandle(STD_OUTPUT_HANDLE,cfg.hOutput); SetStdHandle(STD_ERROR_HANDLE ,cfg.hError ); @@ -326,7 +321,6 @@ begin Result.g_ipc.kevent(@kev,1); - runing:=True; end; diff --git a/gui/main.lfm b/gui/main.lfm index ce352ba4..3385c0cb 100644 --- a/gui/main.lfm +++ b/gui/main.lfm @@ -1,7 +1,7 @@ object frmMain: TfrmMain - Left = 527 + Left = 396 Height = 343 - Top = 146 + Top = 211 Width = 623 Caption = 'fpPS4' ClientHeight = 343 @@ -11,8 +11,8 @@ object frmMain: TfrmMain OnCreate = FormCreate object Pages: TPageControl Left = 0 - Height = 343 - Top = 0 + Height = 275 + Top = 68 Width = 623 ActivePage = TabList Align = alClient @@ -20,12 +20,12 @@ object frmMain: TfrmMain TabOrder = 0 object TabList: TTabSheet Caption = 'Games' - ClientHeight = 315 + ClientHeight = 247 ClientWidth = 615 PopupMenu = MenuList object ListGrid: TStringGrid Left = 0 - Height = 315 + Height = 247 Top = 0 Width = 615 Align = alClient @@ -62,6 +62,44 @@ object frmMain: TfrmMain Caption = 'Log' end end + object MainToolBar: TToolBar + Left = 0 + Height = 68 + Top = 0 + Width = 623 + AutoSize = True + ButtonHeight = 64 + ButtonWidth = 64 + EdgeBorders = [ebLeft, ebTop, ebRight, ebBottom] + Images = MainImageList + ImagesWidth = 64 + TabOrder = 1 + object TBPlay: TToolButton + Left = 3 + Top = 2 + ImageIndex = 0 + Style = tbsCheck + OnClick = TBPlayClick + end + object TBPause: TToolButton + Left = 71 + Top = 2 + ImageIndex = 1 + OnClick = TBPauseClick + end + object TBStop: TToolButton + Left = 139 + Top = 2 + ImageIndex = 2 + OnClick = TBStopClick + end + object TBConfig: TToolButton + Left = 207 + Top = 2 + Caption = 'TBConfig' + ImageIndex = 6 + end + end object MenuList: TPopupMenu Left = 171 Top = 142 @@ -95,4 +133,72 @@ object frmMain: TfrmMain OnClick = MIDelClick end end + object MainImageList: TImageList + AllocBy = 7 + Height = 64 + Width = 64 + Left = 241 + Top = 144 + Bitmap = { + 4C7A070000004000000040000000340700000000000078DAEDDD6DA815451CC7 + F1311F8A527BF0018C2C82BCA18904051A61192589BDAB171156221244595448 + 3E5CEF3D57B4B0C84A2A8AD00CA10C312AACC427C42C7C119441655EA5A232B1 + C0EBF353EAE93F348B8B9D7BCFEC9E39BBB33BDF1FFC88E0B0673FE3EED9DDD9 + B1942284104208A99BABA51BA447A55BA4E302F3AF9356633D2B7D473A3410FF + F1F3FC51BBA44F4AFB94DC5FADD31DD28901FBA3AE910E0FD8AF7B44DA21BD30 + 507FD49DD24901FBE3E7C43501FBABE6BE419F131705EA8FBA4B7A4FC0FEF839 + 716DC07EDD63D245D2FE81FAA3FE2E7D38607FD48DD25101FB754F4997480704 + EA8FBAC7B373A29A53374B4707ECD7FDC79C130303F547FDD39C13BD02F547FD + 423A2660BFEE19E90AE9A040FD517F3373B3A1FA755706EEEFC2CFF11FF0EFDF + 70AE7F41F9B7047AFF13EAFDEFA9809F7F427DFEFD23D0F98F90E7BFF4FCE748 + E6BF837AFFD1A18AF14E90F75FEEDE7F4E56C58BABF7DF455D13C2FA8774EB5F + EE56E5489AF54FFD5479C2FAB79EBB5D3A5E9537DDAD7FDD2F9D21EDADCA9D75 + 35E69F964987A830A2DFB1AC37BF6D9BA4631521841042082184104248B9F39C + F4A4AA3F2FA83FB3C0627B0B1D6FAFD9B1D9D7A8272CB677C2F1F69A9DA4EF42 + B2DE1E7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFC + F8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8CFC5F57AE5A2AD7F5E60B9CFFA + 33F373D81E21841042082184104248BD2C57FFFD371EAB05EB69E95207FED305 + B4C7C7A0D1540B5EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F + 1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF843F287BEFE795941C7 + 40EFF3DB8A10420821841042082189D3D1D1D122ADC4DA12927DCE9C391BE49F + D5A8B366CDFA36947130CE6AADB6B6B67E5AF631E8C9AF2BC7C681F6F6F68565 + 1D877AFED839B1B38CE784AD3F763C6C28D33824F5479573E2FD328C415ABF39 + 273A8B7E2C34E28F9D131B8B3A0E2EFC51DBDADA56166D0C5CFACD39B1BB48C7 + 826B7FEC9CD85C847168963FEABC79F356F93C06CDF6EBCE9E3D7BAFAFC74216 + FED8387CE5DB3864E98F5D2756FB320679F87D3A27F2F2C7C6615B9EE390B73F + 769DF8308F31F0C51F3B273AB21C079FFC799C133EFA63F36F9F347B0C7CF6C7 + E65B5A42F59B56F0E3C7CFEF1FD73FEE7FB8FFE5F987E75FE63F98FF62FE93F9 + 6FBFFDBEBF13E4FD17EF3F5DD98BB82684F50F0DAD7F29FC9AB006D63FBD17E2 + FAA750D7BFC9B1FE7D88EB1FE5CFBBAB52A92C0871FD6B20EB9F835EFF1E8D41 + A87FFF81104208218410424898A9F12C6CD396ACB69781BFE2727D9AEBEDE1C7 + 8F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFC + F8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F9FB0F8410420821841042CA91 + 94CFA3BEB5A5017F11FE7F374D9B1FC18F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1 + E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F7EFCF8F1E3C78F1F3F + 7EFCF80BE20FFAEF3F1042082184104208212475A64B774ACF4AABB1EE912E92 + F62BB1FDDEF3CCB5FA5289FD6B2DFC07A51794D4FF83855FF78A02DA2E97F671 + E41F54673B433C72DF2CFDCEECF771E90BD2BE353ED74BBADFD27F4337DF3545 + BACF7C669FF9F73C33417AB8C6FEAFAE3106F75BDA755FADF15D4F75F3D96772 + B2DF253DDA83619B7492F446E95CE9B1047E7D6D7C4B3A563A4EBAB4CEE76766 + 6C1F6F8EF5AA479D91A17FB76776DD13D2AB32B00FF3D01EF5BE0CFC7D3D3CF6 + A38ECDE8F86FF5D0BED65C63B388FE9ED73DB27F9DC33DA31E83CF13EEE769E9 + C7D269D291D281D28BA5D79967A377A547126EF367E96539DD03DC96603FD74B + 475BFEBE2E4DB0DDBCEE7F74C658EEE3A214CF7453CD35ADDEB6A7E7E8EFB0D8 + BFC50D6C7F8AC5F63FCBC1DD5FFAB8F4649D7DDB2AEDDDE077BD613106AF35F1 + 99501FB74F48B79BE7B7FDE677CCE61EDEC5F578B0F480E57916ED9F9E5F9B6F + F13C6E9367535E93B63AFC335892721FDA1D7CF7AF29BFDBE5EFF21D29F7E127 + 07DF9DF69E648243FF8094FB702847FF08C7BF43870AE677BDEEEE70C1FC2E8F + FF81391EFFBFA4FC6E97735277A6DC871F1D7CF7CC025FFFE63A7ACE7B4CFA4D + 8AFB9F718EEE7F0E5A7ABBCCFE759A6B7F1FD59C5C6279FFFBA583FBDF372DDC + 2FAB7CDE89D83CFFBCD2C0F61FB2D8FE470578FE7D31C57130CDE2F8AA9A31CA + 2B49E63F3699F1AA972BA5CB3D9DF76F74FEEB8C748D99B31825BDD4CC7F8D30 + 73D72B54CFEF946AB5D3DC1F676DF769FE736BC663D0E6E1FC7756BF837A7D8E + AFEF3FC664E0F7F9FDD7E48C8E814E0FEDFA77736846FE5B55B2F7F959F4D18C + AF0113EB8C81BEF7D5EB1F6E925612FE6644EB1FF438DF2EFD40F9F90EA4BB35 + 20ABD4FFD7BF4C4DE05F9CE09AF3B4CA37B74877A873EB9F9EEFE6B9AB778239 + 9CEBBBF9AE47D4B935547F491F54FE64B0C5F3A6EDBA910175DE470C53D9BDEB + 761917FE22679385FD6F55DE3CA0ECDE159739FA3ABDAB867BAF2AFFFA774208 + 218478907F01A6F0B4E2 + } + end end diff --git a/gui/main.pas b/gui/main.pas index a899589c..75dea0dd 100644 --- a/gui/main.pas +++ b/gui/main.pas @@ -23,10 +23,15 @@ uses host_ipc; type + TMainButtonsState=(mbsStopped, + mdsStarted, + mdsRunned, + mdsSuspended); { TfrmMain } TfrmMain = class(TForm) + MainImageList: TImageList; MIDevide3: TMenuItem; MIRun: TMenuItem; MIEdit: TMenuItem; @@ -40,6 +45,11 @@ type ListGrid: TStringGrid; TabList: TTabSheet; TabLog: TTabSheet; + MainToolBar: TToolBar; + TBPlay: TToolButton; + TBPause: TToolButton; + TBStop: TToolButton; + TBConfig: TToolButton; procedure FormCreate(Sender: TObject); procedure OnIdleUpdate(Sender:TObject;var Done:Boolean); @@ -48,6 +58,9 @@ type procedure MIDelClick(Sender: TObject); procedure MIEditClick(Sender: TObject); procedure MIRunClick(Sender: TObject); + procedure TBPauseClick(Sender: TObject); + procedure TBPlayClick(Sender: TObject); + procedure TBStopClick(Sender: TObject); private public @@ -67,6 +80,8 @@ type FLogUpdateTime:QWORD; + FMainButtonsState:TMainButtonsState; + procedure ReadIniFile; procedure LoadItemIni(Item:TGameItem); procedure SaveItemIni(Item:TGameItem); @@ -79,6 +94,7 @@ type procedure DoEdit(Sender: TObject); procedure LogEnd; procedure ClearLog; + procedure SetButtonsState(s:TMainButtonsState); end; var @@ -163,7 +179,8 @@ begin end; if ((kev[i].fflags and NOTE_EXEC)<>0) then begin - ShowMessage('NOTE_EXEC pid:'+IntToStr(kev[i].ident)); + //ShowMessage('NOTE_EXEC pid:'+IntToStr(kev[i].ident)); + Form.SetButtonsState(mdsRunned); end; end; @@ -322,6 +339,8 @@ begin Pages.ActivePageIndex:=0; Application.AddOnIdleHandler(@OnIdleUpdate,False); + + SetButtonsState(mbsStopped); end; procedure TfrmMain.OnIdleUpdate(Sender:TObject;var Done:Boolean); @@ -338,9 +357,18 @@ begin end; if (FGameProcess<>nil) then - if (FGameProcess.g_ipc<>nil) then begin - FGameProcess.g_ipc.Update(IpcHandler); + + if (FGameProcess.g_ipc<>nil) then + begin + FGameProcess.g_ipc.Update(IpcHandler); + end; + + if FGameProcess.is_terminated then + begin + TBStopClick(Sender); + end; + end; end; @@ -430,6 +458,8 @@ var aRow:Integer; cfg:TGameRunConfig; begin + if (FGameProcess<>nil) then Exit; + aRow:=ListGrid.Row; if (aRow=0) then Exit; @@ -448,6 +478,46 @@ begin cfg.fork_proc:=True; FGameProcess:=run_item(cfg,Item); + + SetButtonsState(mdsStarted); +end; + +procedure TfrmMain.TBPlayClick(Sender: TObject); +begin + if (FGameProcess<>nil) then + begin + //resume + FGameProcess.resume; + SetButtonsState(mdsRunned); + end else + begin + //run + MIRunClick(Sender); + end; +end; + +procedure TfrmMain.TBPauseClick(Sender: TObject); +begin + if (FGameProcess<>nil) then + begin + //suspend + FGameProcess.suspend; + SetButtonsState(mdsSuspended); + end; +end; + +procedure TfrmMain.TBStopClick(Sender: TObject); +begin + if (FGameProcess<>nil) then + if (FGameProcess.g_fork) then //only forked + begin + //terminate + FGameProcess.stop; + SetButtonsState(mbsStopped); + FreeAndNil(FGameProcess); + // + Pages.ActivePage:=TabList; + end; end; procedure TfrmMain.MIDelClick(Sender: TObject); @@ -555,6 +625,54 @@ begin SaveItemIni(Item); end; +procedure TfrmMain.SetButtonsState(s:TMainButtonsState); +begin + FMainButtonsState:=s; + + case s of + mbsStopped: + begin + TBPlay .Enabled:=True; + TBPause.Enabled:=False; + TBStop .Enabled:=False; + // + TBPlay .ImageIndex:=0; + TBPause.ImageIndex:=1+3; + TBStop .ImageIndex:=2+3; + end; + mdsStarted: + begin + TBPlay .Enabled:=False; + TBPause.Enabled:=False; + TBStop .Enabled:=False; + // + TBPlay .ImageIndex:=0+3; + TBPause.ImageIndex:=1+3; + TBStop .ImageIndex:=2+3; + end; + mdsRunned: + begin + TBPlay .Enabled:=False; + TBPause.Enabled:=True; + TBStop .Enabled:=True; + // + TBPlay .ImageIndex:=0+3; + TBPause.ImageIndex:=1; + TBStop .ImageIndex:=2; + end; + mdsSuspended: + begin + TBPlay .Enabled:=True; + TBPause.Enabled:=False; + TBStop .Enabled:=True; + // + TBPlay .ImageIndex:=0; + TBPause.ImageIndex:=1+3; + TBStop .ImageIndex:=2; + end; + end; + +end; end. diff --git a/icons/211751_gear_icon.png b/icons/211751_gear_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a80988bd1be2a71ffe9a80e43c1e13c5dca35a GIT binary patch literal 972 zcmV;-12g=IP)TL<%#m3#Dm)qUZkNg<6gs9tM44XbH4qZeOr5fpX`7A9!~A{ zTK{#v_8lN7C@3f>C@9FET9Bv6FQhNVYor4ilwE4>wF1gbi#U*3b{=#c=VC1|4&$N)(j)dGx?^fSgPQ)bOU9zc}%H)J0&P|&Uhc@Js@n4S`=5$P(n z=_>xtR0ZS{Bn@1IWD!;g+NE(s5Nk_H+ii?~w6p~Il9Cj02U&*9LfVk8RoYfUQ{*Y6 z9%(>MOWL>89s2$w8r<^s`Io47 z=(|iiJQ>n~R+%*}O~*xnjypD_!(GT=^+-jyrkQ9jav52ROhxLD!N^32HcDra&zgO{ zK!&@unyv*336{8l%uwi)23gs>A1AYg5NT#gQkBp?Uw4Ps4AImk>$}C)gpJw-2~~2? zqW?yP{;yi}Z>*unM&ySixm!qo%UCBQF^FT}aEC~r?q=jZM7uenS0O1{&vVSnqmhpa z@%m!<(UIF8kZ;eGv|TZ{=-=nkQNtW|aRh&57@Tu-USycV6OP~}fr$b~@S z8Dp%K=c}>h4t4C&-WH;!I8>I&l zROp4sc}e@+y%MpfayU%a%yZH0@ r+G+Rpuj!ZByMJfRLUo`cKTQ)a7cMW%UVS76=s5;YS3j3^P6QK$!8;-MT+OLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwwYY*EXd9P4)M5aSW-5dpp~a%gK?)`G4k~W&fXLDXbPzu?#Ik$58Zz8vReK)`<=KeS3fqUJ`WpDrDr-eSsTm>}?A}gc=8y^48 zsFbpGM1*>Z|p@AY<@!^>bP0l+XkKuXw?S literal 0 HcmV?d00001 diff --git a/icons/211876_play_icon.png b/icons/211876_play_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..30be273273ecd56b01620b93f0b43b1a6a8a05c8 GIT binary patch literal 576 zcmV-G0>AxB^i6Q00M#LjJLHZBQq`A<4EX=A2my1ULfq|TRo`~N?g>gld3=M2Lz48t(GXA&O6 zXLtq|bmPc#2)|N(!d*D78A_5@_j3T=I^2YPdeLNPRX*({TvAIXK&JtC58#ASMpn8V z0Qm%~a6ls{7kLKYy@D$mVL2!=fb_Dc$VU!KnE{aW{!oR3!nuP{b^zXMxF(!E2%!d$ zUKUfL4N4Mv0OSkYf-)NU^_5<$0 zQO?q7v}VIwa-Xqx1MQMo)){*@&@O2M$S~?9Ko3EYU1;s1%|`tLeq8Y%m8ugFIZOOfJqMP^weEC+dt`%6;&8bP_p^K*~#n%o6kR7)p7 zyQ{K~a0B-0MU$cVvNUZ;?Z7e3P?FH;%aKbSaHnuyH;!Q#hG7^+F}?vg3Q@Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^XO*0N*(00I3;L_t(|UhP^E^%QJc zobs#kAz`bkdVu~U&StY$sE;BT^e=pybzR>>%Ps){cNQST?D$@-R_FL!W)TRsw}3<} zi+5;w%YvcQ&>H!BQBDyIqlVo_EQ?EM{v{y9zX}jyS$shAo(&A320WBl7LU+8i=c5e z*s)wLmsildN`T?c3J_vhd_wb?4K%BUIfYmjPf+_s(4-oo3oaImYpC54V6N8!g!B1) z1GPCDXiPQUHBrPf)K(ERq#EvvxLVvmZIl2bgBKt)vn*&rH8})P#0zx1A~?8eZb;&4 zaSI*31Pp4T03nx!V7MYMn3)0+2VE8%NHsDx>$<*!_FDo5Fk66-4`BK$0S7l-0NK!P z_mG2c4Q7#10PS`UIr!FK7U{PD*FS=8FN1Dxgk0YWyZtld_U|yK`*^_BoSM^cACqC%9HPJuGDm$r1EmFZP}4?2g8!Hxf^aB zG?Z*9iI<-!3)D^$m^b_1<}YR%hyFfW%G#jf`72#~gTe~DWM4f DSl%}8 literal 0 HcmV?d00001 diff --git a/icons/211931_stop_icon_gray.png b/icons/211931_stop_icon_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..68d0f9f1f9144c21c44695f110a5a3fb18e4f905 GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwwYY*EXd9O=b3UaSW-5dpmn0=V1l`X4~HDTg?5H0#q+`gmk@sa7x_cuRPGG4^w~d zJKukO$MV--EFPG?dunBC)wjV_@<3@-iA-X*QN!ymFDwp;r7~Q9d9koX_Y}jr%Znd# zL{DLiS?+#ZaGM764!{0B<(xpag1K_C?l%_kJQ!#L?0G-DY3F2MXsCZ?aWB;SpV8@m SOrb!JGI+ZBxvX