You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RnQ/RnQ/StatusForm.pas

106 lines
3.2 KiB
Plaintext

{
This file is part of R&Q.
Under same license
}
unit StatusForm;
{$I RnQConfig.inc}
interface
uses
Winapi.Windows, System.SysUtils, System.StrUtils,
SciterJS, SciterJSAPI, ICQSession;
{$I PubRTTI.inc}
type
TStatusData = record
img, caption, text: String;
code: Integer;
current: Boolean;
end;
{$I NoRTTI.inc}
TStatusMethods = class(TNativeMethods)
class procedure RegisterMethods(var ReturnValue: TSciterValue); override;
class procedure GetStatusMessage(argc: UINT; argv: PSciterValue; retval: PSciterValue); cdecl;
class procedure GetStatusMessages(argc: UINT; argv: PSciterValue; retval: PSciterValue); cdecl;
class procedure SaveXStatusAndMessage(argc: UINT; argv: PSciterValue; retval: PSciterValue); cdecl;
class procedure SetXStatusAndMessage(argc: UINT; argv: PSciterValue; retval: PSciterValue); cdecl;
end;
implementation
uses
SciterLib, GlobalLib, UtilLib,
RDUtils, RnQLangs, ICQConsts;
class procedure TStatusMethods.RegisterMethods(var ReturnValue: TSciterValue);
begin
AddMethod('GetStatusMessage', GetStatusMessage);
AddMethod('GetStatusMessages', GetStatusMessages);
AddMethod('SaveXStatusAndMessage', SaveXStatusAndMessage);
AddMethod('SetXStatusAndMessage', SetXStatusAndMessage);
inherited;
end;
class procedure TStatusMethods.GetStatusMessage(argc: UINT; argv: PSciterValue; retval: PSciterValue); cdecl;
var
Status: Integer;
begin
Status := 0;
API.ValueIntData(argv, Status);
V2S(ExtStsStrings[Status].Desc, retval);
end;
class procedure TStatusMethods.GetStatusMessages(argc: UINT; argv: PSciterValue; retval: PSciterValue); cdecl;
var
I, X, Pos: Integer;
StatusList: array of TStatusData;
StatusListVar: TParams;
Status: Byte;
begin
Status := Account.AccProto.GetXStatus;
for X := Low(XStatusArray) to High(XStatusArray) do
begin
SetLength(StatusList, Length(StatusList) + 1);
SetLength(StatusListVar, Length(StatusListVar) + 1);
Pos := Length(StatusList) - 1;
StatusList[Pos].code := X;
StatusList[Pos].current := Status = X;
StatusList[Pos].img := XStatusArray[X].Status;
StatusList[Pos].caption := IfThen(XStatusArray[X].Unofficial, '[' + GetTranslation('Unofficial') + '] ', '') + GetTranslation(XStatusArray[X].Text);
StatusList[Pos].text := ExtStsStrings[X].Desc;
end;
for I := 0 to Length(StatusList) - 1 do
StatusListVar[I] := UI.RecordToVar(StatusList[I]);
V2S(StatusListVar, retval);
end;
class procedure TStatusMethods.SaveXStatusAndMessage(argc: UINT; argv: PSciterValue; retval: PSciterValue); cdecl;
var
Text: PWideChar;
StrLen: UINT;
Status: Integer;
begin
Status := 0;
API.ValueIntData(argv, Status);
Inc(argv);
Text := '';
API.ValueStringData(argv, Text, StrLen);
ExtStsStrings[Status].Desc := Copy(String(Text), 1, MaxXStatusDescLen);
ActionManager.Execute(AK_SAVEXSTATUSES, SaveDelay);
end;
class procedure TStatusMethods.SetXStatusAndMessage(argc: UINT; argv: PSciterValue; retval: PSciterValue); cdecl;
var
Status: Integer;
begin
Status := 0;
API.ValueIntData(argv, Status);
Account.AccProto.SendStatus(Status, ExtStsStrings[Status].Desc);
end;
end.