pas2js/demo/atom/pas2jsdemopackage.lpr
2020-12-22 10:52:30 +00:00

100 lines
2.3 KiB
ObjectPascal

program pas2jsdemopackage;
{$mode objfpc}
uses
JS, Classes, SysUtils, libAtom, atomapp, Web, demoview;
Type
{ TMyAtomApplication }
TMyAtomApplication = Class(TAtomApplication)
Private
FOurView: TPas2jsdemopackageView;
FModalPanel : TAtomPanel;
procedure DoDismiss(Sender: TObject);
procedure DoToggle;
Protected
procedure DoActivate(aState : TJSObject); override;
procedure DoDeactivate; override;
procedure DoSerialize(aState : TJSObject); override;
Public
// Add function handlers here
end;
// Do not change the name of this procedure, the Javascript glue code depends on it.
// If you do want to change it, change the glue code as well.
Procedure InitAtom(aAtom : TAtomEnvironment; aCallBacks : TAtomPackageCallBacks);
begin
If Application=Nil then
Application:=TMyAtomApplication.Create(Nil);
Application.SaveAtomEnvironment(aAtom,aCallBacks);
end;
{ TMyAtomApplication }
procedure TMyAtomApplication.DoDismiss(Sender : TObject);
begin
FModalPanel.hide;
atom.notifications.addInfo('Panel dismissed from pas2js');
end;
procedure TMyAtomApplication.DoActivate(aState: TJSObject);
Var
cmds : TJSObject;
opts : TAtomPanelOptions;
VState: TJSObject;
begin
inherited DoActivate(aState);
if Assigned(aState) then
VState:=TJSObject(aState['yourNameWordCountViewState'])
else
VState:=nil;
FOurView:=TPas2jsdemopackageView.Create(VState);
FOurView.OnDismiss:=@DoDismiss;
opts:=TAtomPanelOptions.New;
opts.item:=FourView.getElement;
opts.visible:=False;
FModalPanel:=atom.workspace.addModalPanel(opts);
cmds:=TJSObject.New;
cmds['pas2jsdemopackage:toggle']:=@DoToggle;
subscriptions.add(atom.commands.add('atom-workspace', cmds));
end;
procedure TMyAtomApplication.DoToggle;
begin
if FModalPanel.isVisible then
fModalPanel.hide
else
fModalPanel.show;
end;
procedure TMyAtomApplication.DoDeactivate();
begin
FModalpanel.destroy;
FModalpanel:=Nil;
inherited DoDeactivate();
end;
procedure TMyAtomApplication.DoSerialize(aState: TJSObject);
begin
inherited DoSerialize(aState);
if Assigned(FourView) then
aState['yourNameWordCountViewState']:=FourView.Serialize;
end;
// This code is needed to prevent the pas2js compiler from removing the InitAtom call.
var
dummy : JSValue;
begin
Application:=TMyAtomApplication.Create(Nil);
dummy:=@InitAtom;
end.