jvcllaz: Activate file info in JvThumbnail. Update demo.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6333 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2018-04-21 14:46:46 +00:00
parent 0c95b36891
commit fc5c3f8c5d
7 changed files with 431 additions and 230 deletions

View File

@ -64,6 +64,9 @@ type
02) SaveToStream(AStream: TStream; APos: Integer); Save the FileName to AStream
if APos > -1 then AStream.Seek(APos, 0);
SaveData;
wp: removed LongName and ShortName - seem to be old DOS-style filenames not
useful in Linux, are not used anywhere.
}
TProgressNotify = procedure(Sender: TObject; Position: Integer; var Stop: Boolean) of object;
TInvalidImageEvent = procedure(Sender: TObject; const AFileName: string) of object;
@ -74,13 +77,17 @@ type
{$M+}
TJvFileName = class(TObject) // was: TFileName, renamed to TJvFileName to avoid conflict with existing type
private
{ wp: removed -- not used anywhere
FLongName: string;
FShortName: string;
}
FFileName: string;
{ wp: not used anywhere
FCreated: TDateTime;
FAccessed: TDateTime;
FModified: TDateTime;
FFileSize: Longint;
}
protected
procedure SetName(NewName: string); virtual;
function GetLength: Integer;
@ -91,12 +98,14 @@ type
// both of this routines are inserting extract data to the stream its self
// like a header and data end string;
procedure SaveToStream(AStream: TStream; APos: Integer); // Save to a Stream
{ wp -- not used anywhere
// (rom) moved to public
property LongName: string read FLongName; // The LongName of this filename
property ShortName: string read FShortName; // shortname of this filename
}
published
property FileName: string read FFileName write SetName; // The FileName as given by the user
property Length: Integer read GetLength write SetLength;
//property Length: Integer read GetLength write SetLength;
end;
{$M-}
@ -185,8 +194,14 @@ function InRange(Min, Max, Value: Integer; WithBorder: Boolean = false): Boolean
implementation
uses
SysUtils, Types,
JvJCLUtils, JvThemes;
{$IFDEF WINDOWS}
Windows,
{$ENDIF}
{$IFDEF UNIX}
baseunix,
{$ENDIF}
SysUtils, Types, DateUtils,
JvThemes;
function ReplaceAllStr(const Str, SearchFor, ReplaceWith: string;
CaseSensitive: Boolean): string;
@ -627,55 +642,74 @@ begin
end;
}
//=== { TJvFileName } ==========================================================
procedure TJvFileName.SetName(NewName: string);
begin
if FFileName = NewName then exit;
FFileName := NewName;
{$IFDEF WINDOWS}
if (NewName <> LongName) and (NewName <> ShortName) then
{$ENDIF}
Init;
Init;
end;
{$IFDEF WINDOWS}
function FileTimeToDateTime(FileTime: TFileTime): TDateTime;
var
LocalTime: TFileTime;
DOSTime: Integer;
begin
FileTimeToLocalFileTime(FileTime, LocalTime);
FileTimeToDosDateTime(LocalTime, LongRec(DOSTime).Hi, LongRec(DOSTime).Lo);
Result := FileDateToDateTime(DOSTime);
end;
{$ENDIF}
procedure TJvFileName.Init;
var
{$IFDEF WINDOWS}
Dft: DWORD;
Lft: TFileTime;
sr: TSearchRec;
{$ENDIF}
{$IFDEF UNIX}
info: stat;
{$ENDIF}
begin
(* wp: not used anywhere...
{$IFDEF WINDOWS}
if FindFirst(FFileName, faAnyFile or faDirectory, sr) = 0 then
begin
FindClose(sr);
{$IFDEF WINDOWS}
FLongName := sr.FindData.cFileName;
FShortName := sr.FindData.cAlternateFileName;
if FLongName = '' then
FLongName := FShortName;
if FShortName = '' then
FShortName := FLongName;
// FIX ME !!!
(**************** NOT CONVERTED ***
//fdFileAccessed
FileTimeToLocalFileTime(sr.FindData.ftLastAccessTime, Lft);
FileTimeToDosDateTime(Lft, LongRec(Dft).Hi, LongRec(Dft).Lo);
FAccessed := Dft;
//fdFilechanged
FileTimeToLocalFileTime(sr.FindData.ftLastwriteTime, Lft);
FileTimeToDosDateTime(Lft, LongRec(Dft).Hi, LongRec(Dft).Lo);
FModified := Dft;
//fdFilecreated
FileTimeToLocalFileTime(sr.FindData.ftCreationTime, Lft);
FileTimeToDosDateTime(Lft, LongRec(Dft).Hi, LongRec(Dft).Lo);
FCreated := Dft;
**************)
FFileSize := (sr.FindData.nFileSizeHigh * MAXDWORD) + sr.FindData.nFileSizeLow;
//FFileName:=NewName;
{$ENDIF}
end;
{$ENDIF}
{$IFDEF UNIX}
if fpstat(FFileName, info) = 0 then begin
FAccessed := UnixToDateTime(info.st_atime);
FModified := UnixToDateTime(info.st_mtime);
FCreated := UnixToDateTime(info.st_ctime);
FFileSize := info.Size;
end;
{$ENDIF}
*)
end;
procedure TJvFileName.LoadFromStream(AStream: TStream; APos: Integer);

View File

@ -829,6 +829,7 @@ begin
// setfocus;
if Count > 0 then begin
SelNo := -1;
No := -1;
case ScrollMode of
smVertical, smBoth:
begin
@ -837,12 +838,6 @@ begin
if TempX >= FMaxX then TempX := FMaxX - 1;
if TempY < 0 then TempY := 0;
No := TempY * FMaxX + TempX;
if No < Count then begin
thumb := FThumbList.Thumbnail[No];
if thumb <> nil then
if InRange(thumb.Left, thumb.Left + thumb.Width, X) and
InRange(thumb.Top, thumb.Top + thumb.Height, Y) then SelNo := No;
end;
end;
smHorizontal:
begin
@ -851,14 +846,16 @@ begin
if TempY >= FMaxX then TempY := FMaxX - 1;
if TempX < 0 then TempX := 0;
No := TempX * FMaxX + TempY;
if No < Count then begin
thumb := TJvThumbnail(FThumbList.Objects[No]);
if thumb <> nil then
if InRange(thumb.Left, thumb.Left + thumb.Width, X) and
InRange(thumb.Top, thumb.Top + thumb.Height, Y) then SelNo := No;
end;
end;
end;
if (No > -1) and (No < Count) then begin
thumb := FThumblist.Thumbnail[No];
if thumb <> nil then
if InRange(thumb.Left, thumb.Left + thumb.Width, X) and
InRange(thumb.Top, thumb.Top + thumb.Height, Y)
then
SelNo := No;
end;
SetSelected(SelNo);
end;
inherited MouseDown(Button, Shift, X, Y);
@ -1132,6 +1129,7 @@ end;
procedure TJvThumbView.SetSelected(Number: Longint);
var
TN: TJvThumbnail;
scrolled: Boolean = false;
begin
if (Number < 0) or (Number >= FThumbList.Count) then
Number := -1;
@ -1151,19 +1149,21 @@ begin
TN.TitleFont.Color := clHighlightText;
if AutoScrolling then
begin
if (TN.Top + TN.Height > Height) or (TN.Top < 0) then
if (TN.Top + TN.Height > Height) or (TN.Top < 0) then begin
ScrollTo(Number);
if (TN.Left + TN.Width > Width) or (TN.Left < 0) then
scrolled := true;
end;
if (TN.Left + TN.Width > Width) or (TN.Left < 0) then begin
ScrollTo(Number);
scrolled := true;
end;
end
end;
if FSelected <> Number then
if (FSelected <> Number) or scrolled then
begin
if Assigned(FOnChanging) then
FOnChanging(Self);
FSelected := Number;
if Assigned(FOnChange) then
FOnChange(Self);
end;

View File

@ -50,7 +50,13 @@ unit JvThumbnails;
interface
uses
LCLIntf, LCLType, LMessages,
{$IFDEF WINDOWS}
Windows,
{$ENDIF}
{$IFDEF UNIX}
baseunix,
{$ENDIF}
LCLIntf, LCLType, LMessages, Types,
Classes, Controls, ExtCtrls, SysUtils, Graphics, Forms,
JvThumbImage, JvBaseThumbnail, Dialogs;
@ -71,9 +77,9 @@ type
FTitleColor: TColor;
FTitleFont: TFont;
FStreamFileKind: TGRFKind;
FDFileCreated: string;
FDFileChanged: string;
FDFileAccessed: string;
FDFileCreated: TDateTime;
FDFileChanged: TDateTime;
FDFileAccessed: TDateTime;
FShowTitle: Boolean;
FDFileSize: Longint;
FStream: TStream;
@ -172,17 +178,17 @@ type
property TitlePlacement: TTitlePos read FTitlePlacement write SetTitlePlacement default tpUp;
property OnGetTitle: TTitleNotify read FOnGetTitle write FOnGetTitle;
{ Do not store dummies }
property FileSize: Longint read FDFileSize write SetDummyCard stored False;
property FileAccessed: string read FDFileAccessed write SetDummyStr stored False;
property FileCreated: string read FDFileCreated write SetDummyStr stored False;
property FileChanged: string read FDFileChanged write SetDummyStr stored False;
property FileSize: Longint read FDFileSize stored false; // write SetDummyCard stored False;
property FileAccessed: TDateTime read FDFileAccessed stored false; // write SetDummyStr stored False;
property FileCreated: TDateTime read FDFileCreated stored false; // write SetDummyStr stored False;
property FileChanged: TDateTime read FDFileChanged stored false; // write SetDummyStr stored False;
end;
implementation
uses
FileUtil,
FileUtil, DateUtils,
JvThumbViews, JvResources;
constructor TJvThumbnail.Create(AOwner: TComponent);
@ -321,50 +327,60 @@ end;
procedure TJvThumbnail.GetFileInfo(AName: String);
var
FileInfo: TSearchRec;
begin
if FileExists(AName) then begin
FDFilesize := FileUtil.FileSize(AName);
// Other fields not supported
end;
end;
{ wp ----------- partly replaced by above
procedure TJvThumbnail.GetFileInfo(AName: string);
var
FileInfo: TWin32FindData;
{$IFDEF WINDOWS}
info: TWin32FindDataW;
dft: DWORD;
lft: TFileTime;
H: THandle;
Dft: DWORD;
Lft: TFileTime;
ws: WideString;
{$ENDIF}
{$IFDEF UNIX}
info: stat;
{$ENDIF}
begin
H := Windows.FindFirstFile(PChar(AName), FileInfo);
{$IFDEF WINDOWS}
ws := UTF8Decode(AName);
H := Windows.FindFirstFileW(PWideChar(ws), info);
if H <> INVALID_HANDLE_VALUE then
begin
Windows.FindClose(H);
FileTimeToLocalFileTime(FileInfo.ftLastAccessTime, Lft);
FileTimeToDosDateTime(Lft, LongRec(Dft).Hi, LongRec(Dft).Lo);
//fdFileAccessed
FileTimeToLocalFileTime(info.ftLastAccessTime, lft);
FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
try
FDFileAccessed := DateTimeToStr(FileDateToDateTime(Dft));
FDFileAccessed := FileDateToDateTime(dft);
except
FDFileAccessed := RsUnknown;
FDFileAccessed := 0;
end;
FileTimeToLocalFileTime(FileInfo.ftLastwriteTime, Lft);
FileTimeToDosDateTime(Lft, LongRec(Dft).Hi, LongRec(Dft).Lo);
//fdFilechanged
FileTimeToLocalFileTime(info.ftLastwriteTime, lft);
FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
try
FDFileChanged := DateTimeToStr(FileDateToDateTime(Dft));
FDFileChanged := FileDateToDateTime(dft);
except
FDFileChanged := RsUnknown;
FDFileChanged := 0;
end;
FileTimeToLocalFileTime(FileInfo.ftCreationTime, Lft);
FileTimeToDosDateTime(Lft, LongRec(Dft).Hi, LongRec(Dft).Lo);
//fdFileCreated
FileTimeToLocalFileTime(info.ftCreationTime, lft);
FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
try
FDFileCreated := DateTimeToStr(FileDateToDateTime(Dft));
FDFileCreated := FileDateToDateTime(dft);
except
FDFileCreated := RsUnknown;
FDFileCreated := 0;
end;
FDFileSize := (FileInfo.nFileSizeHigh * MAXDWORD) + FileInfo.nFileSizeLow;
FDFileSize := info.nFileSizeHigh * MAXDWORD + info.nFileSizeLow;
end;
{$ENDIF}
{$IFDEF UNIX}
if fpstat(AName, info) = 0 then begin
FDFileAccessed := UnixToDateTime(info.st_atime);
FDFileChanged := UnixToDateTime(info.st_mtime);
FDFileCreated := UnixToDateTime(info.st_ctime);
FDFileSize := info.Size;
end;
{$ENDIF}
end;
---------------- }
function TJvThumbnail.GetFileName: string;
begin
@ -731,3 +747,4 @@ begin
end;
end.