source upload
This commit is contained in:
208
contrib/mORMot/SQLite3/Samples/MainDemo/FileTables.pas
Normal file
208
contrib/mORMot/SQLite3/Samples/MainDemo/FileTables.pas
Normal file
@@ -0,0 +1,208 @@
|
||||
/// SynFile ORM definitions shared by both client and server
|
||||
unit FileTables;
|
||||
|
||||
interface
|
||||
|
||||
{$I Synopse.inc} // define HASINLINE CPU32 CPU64 OWNNORMTOUPPER
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
Classes,
|
||||
SynCommons,
|
||||
SynCrypto,
|
||||
SynZip,
|
||||
mORMot,
|
||||
mORMoti18n;
|
||||
|
||||
type
|
||||
/// the internal events/states, as used by the TSQLAuditTrail table
|
||||
TFileEvent = (
|
||||
feUnknownState,
|
||||
feServerStarted,
|
||||
feServerShutdown,
|
||||
feRecordCreated,
|
||||
feRecordModified,
|
||||
feRecordDeleted,
|
||||
feRecordDigitallySigned,
|
||||
feRecordImported,
|
||||
feRecordExported
|
||||
);
|
||||
|
||||
/// the internal available actions, as used by the User Interface
|
||||
TFileAction = (
|
||||
faNoAction,
|
||||
faMark,
|
||||
faUnmarkAll,
|
||||
faQuery,
|
||||
faRefresh,
|
||||
faCreate,
|
||||
faEdit,
|
||||
faCopy,
|
||||
faExport,
|
||||
faImport,
|
||||
faDelete,
|
||||
faSign,
|
||||
faPrintPreview,
|
||||
faExtract,
|
||||
faSettings
|
||||
);
|
||||
/// set of available actions
|
||||
TFileActions = set of TFileAction;
|
||||
|
||||
/// some actions to be used by the User Interface of a Preview window
|
||||
TPreviewAction = (
|
||||
paPrint, paAsPdf, paAsText,
|
||||
paWithPicture, paDetails
|
||||
);
|
||||
TPreviewActions = set of TPreviewAction;
|
||||
|
||||
/// an abstract class, with common fields
|
||||
TSQLFile = class(TSQLRecordSigned)
|
||||
public
|
||||
fName: RawUTF8;
|
||||
fModified: TTimeLog;
|
||||
fCreated: TTimeLog;
|
||||
fPicture: TSQLRawBlob;
|
||||
fKeyWords: RawUTF8;
|
||||
published
|
||||
property Name: RawUTF8 read fName write fName;
|
||||
property Created: TTimeLog read fCreated write fCreated;
|
||||
property Modified: TTimeLog read fModified write fModified;
|
||||
property Picture: TSQLRawBlob read fPicture write fPicture;
|
||||
property KeyWords: RawUTF8 read fKeyWords write fKeyWords;
|
||||
property SignatureTime;
|
||||
property Signature;
|
||||
end;
|
||||
|
||||
/// an uncrypted Memo table
|
||||
// - will contain some text
|
||||
TSQLMemo = class(TSQLFile)
|
||||
public
|
||||
fContent: RawUTF8;
|
||||
published
|
||||
property Content: RawUTF8 read fContent write fContent;
|
||||
end;
|
||||
|
||||
/// an uncrypted Data table
|
||||
// - can contain any binary file content
|
||||
// - is also used a parent for all cyphered tables (since the
|
||||
// content is crypted, it should be binary, i.e. a BLOB field)
|
||||
TSQLData = class(TSQLFile)
|
||||
public
|
||||
fData: TSQLRawBlob;
|
||||
published
|
||||
property Data: TSQLRawBlob read fData write fData;
|
||||
end;
|
||||
|
||||
/// a crypted SafeMemo table
|
||||
// - will contain some text after AES-256 cypher
|
||||
// - just a direct sub class ot TSQLData to create the "SafeMemo" table
|
||||
// with the exact same fields as the "Data" table
|
||||
TSQLSafeMemo = class(TSQLData);
|
||||
|
||||
/// a crypted SafeData table
|
||||
// - will contain some binary file content after AES-256 cypher
|
||||
// - just a direct sub class ot TSQLData to create the "SafeData" table
|
||||
// with the exact same fields as the "Data" table
|
||||
TSQLSafeData = class(TSQLData);
|
||||
|
||||
/// an AuditTrail table, used to track events and status
|
||||
TSQLAuditTrail = class(TSQLRecord)
|
||||
protected
|
||||
fStatusMessage: RawUTF8;
|
||||
fStatus: TFileEvent;
|
||||
fAssociatedRecord: TRecordReference;
|
||||
fTime: TTimeLog;
|
||||
published
|
||||
property Time: TTimeLog read fTime write fTime;
|
||||
property Status: TFileEvent read fStatus write fStatus;
|
||||
property StatusMessage: RawUTF8 read fStatusMessage write fStatusMessage;
|
||||
property AssociatedRecord: TRecordReference read fAssociatedRecord write fAssociatedRecord;
|
||||
end;
|
||||
|
||||
/// the type of custom main User Interface description of SynFile
|
||||
TFileRibbonTabParameters = object(TSQLRibbonTabParameters)
|
||||
/// the SynFile actions
|
||||
Actions: TFileActions;
|
||||
end;
|
||||
|
||||
const
|
||||
/// will define the first User Interface ribbon group, i.e. main tables
|
||||
GROUP_MAIN = 0;
|
||||
/// will define the 2nd User Interface ribbon group, i.e. uncrypted tables
|
||||
GROUP_CLEAR = 1;
|
||||
/// will define the 3d User Interface ribbon group, i.e. crypted tables
|
||||
GROUP_SAFE = 2;
|
||||
/// some default actions, available for all tables
|
||||
DEF_ACTIONS = [faMark..faPrintPreview,faSettings];
|
||||
/// actions available for data tables (not for TSQLAuditTrail)
|
||||
DEF_ACTIONS_DATA = DEF_ACTIONS+[faExtract]-[faImport,faExport];
|
||||
/// default fields available for User Interface Grid
|
||||
DEF_SELECT = 'Name,Created,Modified,KeyWords,SignatureTime';
|
||||
/// the TCP/IP port used for the HTTP server
|
||||
// - this is shared as constant by both client and server side
|
||||
// - in a production application, should be made customizable
|
||||
SERVER_HTTP_PORT = '888';
|
||||
|
||||
const
|
||||
/// this constant will define most of the User Interface property
|
||||
// - the framework will create most User Interface content from the
|
||||
// values stored within
|
||||
FileTabs: array[0..4] of TFileRibbonTabParameters = (
|
||||
(Table: TSQLAuditTrail;
|
||||
Select: 'Time,Status,StatusMessage'; Group: GROUP_MAIN;
|
||||
FieldWidth: 'gIZ'; ShowID: true; ReverseOrder: true; Layout: llClient;
|
||||
Actions: [faDelete,faMark,faUnmarkAll,faQuery,faRefresh,faPrintPreview,faSettings]),
|
||||
(Table: TSQLMemo;
|
||||
Select: DEF_SELECT; Group: GROUP_CLEAR; FieldWidth: 'IddId'; Actions: DEF_ACTIONS),
|
||||
(Table: TSQLData;
|
||||
Select: DEF_SELECT; Group: GROUP_CLEAR; FieldWidth: 'IddId'; Actions: DEF_ACTIONS_DATA),
|
||||
(Table: TSQLSafeMemo;
|
||||
Select: DEF_SELECT; Group: GROUP_SAFE; FieldWidth: 'IddId'; Actions: DEF_ACTIONS),
|
||||
(Table: TSQLSafeData;
|
||||
Select: DEF_SELECT; Group: GROUP_SAFE; FieldWidth: 'IddId'; Actions: DEF_ACTIONS_DATA)
|
||||
);
|
||||
/// used to map which actions/buttons must be grouped in the toolbar
|
||||
FileActionsToolbar: array[0..3] of TFileActions =
|
||||
( [faRefresh,faCreate,faEdit,faCopy,faExtract], [faExport..faPrintPreview],
|
||||
[faMark..faQuery], [faSettings] );
|
||||
/// FileActionsToolbar[FileActionsToolbar_MARKINDEX] will be the marked actions
|
||||
// i.e. [faMark..faQuery]
|
||||
FileActionsToolbar_MARKINDEX = 2;
|
||||
|
||||
resourcestring
|
||||
sFileTabsGroup = 'Main,Clear,Safe';
|
||||
sFileActionsToolbar = '%%,Record Managment,Select,Settings';
|
||||
sFileActionsHints =
|
||||
'Mark rows'#13+ { faMark }
|
||||
'UnMark all rows'#13+ { faUnmarkAll }
|
||||
'Perform a custom query on the list and mark resulting rows'#13+ { faQuery }
|
||||
'Refresh the current list from the database'#13+ { faRefresh }
|
||||
'Create a new empty %s'#13+ { faCreate }
|
||||
'Edit this %s'#13+ { faEdit }
|
||||
'Create a new %s, with the same initial values as in the current selected record'#13+ { faCopy }
|
||||
'Export one or more %s records report'#13+ { faExport }
|
||||
'Import one or multiple files as %s records'#13+ { faImport }
|
||||
'Delete the selected %s records'#13+ { faDelete }
|
||||
'Digitally sign the selected %s'#13+ { faSign }
|
||||
'Print one or more %s Reports'#13+ { faPrintPreview }
|
||||
'Extract the embedded file into any folder'#13+ { faExtract }
|
||||
'Change the Program''s settings'; { faSettings }
|
||||
|
||||
/// create the database model to be used
|
||||
// - shared by both client and server sides
|
||||
function CreateFileModel(Owner: TSQLRest): TSQLModel;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
function CreateFileModel(Owner: TSQLRest): TSQLModel;
|
||||
begin
|
||||
result := TSQLModel.Create(Owner,
|
||||
@FileTabs,length(FileTabs),sizeof(FileTabs[0]),[],
|
||||
TypeInfo(TFileAction),TypeInfo(TFileEvent));
|
||||
end;
|
||||
|
||||
initialization
|
||||
SetExecutableVersion('3.1');
|
||||
end.
|
Reference in New Issue
Block a user