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.
106 lines
3.2 KiB
Plaintext
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.
|