blob: 19c2399908d43df1f3c10985f5f03594877bd2eb (
plain) (
tree)
|
|
{* UltraStar Deluxe - Karaoke Game
*
* UltraStar Deluxe is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UMain.pas $
* $Id: UMain.pas 1629 2009-03-07 22:30:04Z k-m_schindler $
*}
unit UPlugin;
interface
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
{$I switches.inc}
uses UPluginDefines;
// a basic implementation of IPlugin
type
TPlugin = class(TInterfacedObject, IUS_Plugin)
protected
Status: TUS_PluginStatus;
Handle: TUS_Handle;
UniqueID: TUS_Handle;
Filename: WideString;
ErrorReason: WideString;
procedure OnChangeStatus(Status: TUS_PluginStatus); virtual;
public
constructor Create(Handle: TUS_Handle; Filename: WideString); virtual;
function GetStatus: TUS_PluginStatus; virtual;
procedure SetStatus(Status: TUS_PluginStatus); virtual;
function GetHandle: TUS_Handle; virtual;
function GetUniqueID: TUS_Handle; virtual;
function GetFilename: WideString; virtual;
procedure Init; virtual;
procedure DeInit; virtual;
procedure SetError(Reason: WideString); virtual;
function GetErrorReason: WideString; virtual;
end;
implementation
uses UPluginManager, ULog;
constructor TPlugin.Create(Handle: TUS_Handle; Filename: WideString);
begin
inherited Create;
Self.Handle := Handle;
Self.Filename := Filename;
Self.Status := psNone;
Self.UniqueID := CalculateUSHash(Filename); //< this should be done another way ;) just for testing purposes
end;
function TPlugin.GetStatus: TUS_PluginStatus;
begin
Result := Status;
end;
procedure TPlugin.SetStatus(Status: TUS_PluginStatus);
begin
// OnChangeStatus has to change the status attribut
OnChangeStatus(Status);
end;
function TPlugin.GetHandle: TUS_Handle;
begin
Result := Handle;
end;
function TPlugin.GetUniqueID: TUS_Handle;
begin
Result := UniqueID;
end;
function TPlugin.GetFilename: WideString;
begin
Result := Filename;
end;
procedure TPlugin.Init;
begin
if (Status = psWaitingInit) then
SetStatus(psInited);
end;
procedure TPlugin.DeInit;
begin
if (Status = psInited) then
SetStatus(psDeInited);
end;
procedure TPlugin.SetError(Reason: WideString);
begin
ErrorReason := Reason;
SetStatus(psError);
PluginManager.ReportError(Handle);
Log.LogError(Filename + ': ' + Reason);
end;
function TPlugin.GetErrorReason: WideString;
begin
Result := ErrorReason;
end;
procedure TPlugin.OnChangeStatus(Status: TUS_PluginStatus);
begin
//do nothing here
//should be overwritten by the child classes
end;
end.
|