mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
UPD: refactor in uDarwinClipboard
(cherry picked from commit aff2d61421)
This commit is contained in:
parent
d2069e04e8
commit
d6537aa308
2 changed files with 75 additions and 81 deletions
|
|
@ -549,7 +549,7 @@ var
|
|||
darwinOp: TDarwinClipboardOperation;
|
||||
begin
|
||||
darwinOp:= OperationToDarwin[ClipboardOp];
|
||||
Result:= TDarwinClipboardUtil.writeToClipboard( filenames, darwinOp );
|
||||
Result:= TDarwinClipboardUtil.setFiles( darwinOp, filenames );
|
||||
end;
|
||||
|
||||
function PasteFromClipboard(out ClipboardOp: TClipboardOperation; out filenames:TStringList):Boolean;
|
||||
|
|
@ -559,7 +559,7 @@ const
|
|||
var
|
||||
darwinOp: TDarwinClipboardOperation;
|
||||
begin
|
||||
Result:= TDarwinClipboardUtil.readFromClipboard( darwinOp, filenames );
|
||||
Result:= TDarwinClipboardUtil.getFiles( darwinOp, filenames );
|
||||
ClipboardOp:= OperationFromDarwin[darwinOp];
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ interface
|
|||
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
CocoaAll, CocoaUtils,
|
||||
CocoaAll,
|
||||
DCStrUtils,
|
||||
uDarwinUtil;
|
||||
|
||||
|
|
@ -19,45 +19,39 @@ type
|
|||
{ TDarwinClipboardUtil }
|
||||
|
||||
TDarwinClipboardUtil = class
|
||||
private
|
||||
class procedure addText( const value: String; const pbType: NSString );
|
||||
class procedure addText( const value: String );
|
||||
class procedure addFiles( const filenames: TStringList; const pb: NSPasteboard );
|
||||
class procedure addFiles( const filenames:TStringList );
|
||||
private
|
||||
class function filenamesToString( const filenames:TStringList ): String;
|
||||
public
|
||||
class function writeToClipboard(
|
||||
const filenames: TStringList;
|
||||
const clipboardOp: TDarwinClipboardOperation ): Boolean;
|
||||
class function readFromClipboard(
|
||||
class procedure setText( const value: String );
|
||||
class function getText( const pbType: String ): String;
|
||||
class function setFiles(
|
||||
const clipboardOp: TDarwinClipboardOperation;
|
||||
const filenames: TStringList ): Boolean;
|
||||
class function getFiles(
|
||||
out clipboardOp: TDarwinClipboardOperation;
|
||||
out filenames:TStringList):Boolean;
|
||||
out filenames:TStringList ): Boolean;
|
||||
class procedure clear;
|
||||
class procedure setText( const s: String );
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
const
|
||||
|
||||
OperationName : array[TDarwinClipboardOperation] of String =
|
||||
OPERATION_NAME: array[TDarwinClipboardOperation] of String =
|
||||
( 'copy', 'cut' );
|
||||
|
||||
darwinPasteboardOpMime = 'application/x-darwin-doublecmd-PbOp';
|
||||
PASTEBOARD_OP_MIME = 'application/x-darwin-doublecmd-PbOp';
|
||||
|
||||
// MacOs 10.5 compatibility
|
||||
// macOS 10.5 compatibility
|
||||
|
||||
function FilenamesToString(const filenames:TStringList): String;
|
||||
begin
|
||||
Result := TrimRightLineEnding( filenames.Text, filenames.TextLineBreakStyle);
|
||||
end;
|
||||
{ TDarwinClipboardUtil }
|
||||
|
||||
procedure NSPasteboardAddFiles(const filenames:TStringList; pb:NSPasteboard);
|
||||
begin
|
||||
pb.addTypes_owner(NSArray.arrayWithObject(NSFileNamesPboardType), nil);
|
||||
pb.setPropertyList_forType(ListToNSArray(filenames), NSFileNamesPboardType);
|
||||
end;
|
||||
|
||||
procedure NSPasteboardAddFiles(const filenames:TStringList);
|
||||
begin
|
||||
NSPasteboardAddFiles( filenames, NSPasteboard.generalPasteboard );
|
||||
end;
|
||||
|
||||
procedure NSPasteboardAddString(const value:String; const pbType:NSString );
|
||||
class procedure TDarwinClipboardUtil.addText( const value: String; const pbType: NSString );
|
||||
var
|
||||
pb: NSPasteboard;
|
||||
begin
|
||||
|
|
@ -66,95 +60,95 @@ begin
|
|||
pb.setString_forType(StringToNSString(value), pbType);
|
||||
end;
|
||||
|
||||
procedure NSPasteboardAddString(const value:String);
|
||||
class procedure TDarwinClipboardUtil.addText( const value:String );
|
||||
begin
|
||||
NSPasteboardAddString( value , NSStringPboardType );
|
||||
TDarwinClipboardUtil.addText( value , NSStringPboardType );
|
||||
end;
|
||||
|
||||
function getStringFromPasteboard( pbType : NSString ) : String;
|
||||
class procedure TDarwinClipboardUtil.setText( const value: String );
|
||||
begin
|
||||
TDarwinClipboardUtil.clear;
|
||||
TDarwinClipboardUtil.addText( value );
|
||||
end;
|
||||
|
||||
class function TDarwinClipboardUtil.getText( const pbType: String ): String;
|
||||
var
|
||||
pb : NSPasteboard;
|
||||
pb: NSPasteboard;
|
||||
begin
|
||||
pb := NSPasteboard.generalPasteboard;
|
||||
Result := NSStringToString( pb.stringForType( pbType ) );
|
||||
pb:= NSPasteboard.generalPasteboard;
|
||||
Result:= pb.stringForType(NSSTR(pbType)).UTF8String;
|
||||
end;
|
||||
|
||||
function getOpFromPasteboard() : TDarwinClipboardOperation;
|
||||
var
|
||||
opString : String;
|
||||
class procedure TDarwinClipboardUtil.addFiles( const filenames: TStringList; const pb: NSPasteboard );
|
||||
begin
|
||||
Result := TDarwinClipboardOperation.copy;
|
||||
opString := getStringFromPasteboard( StringToNSString(darwinPasteboardOpMime) );
|
||||
if OperationName[TDarwinClipboardOperation.cut].CompareTo(opString) = 0 then
|
||||
Result := TDarwinClipboardOperation.cut;
|
||||
pb.addTypes_owner(NSArray.arrayWithObject(NSFileNamesPboardType), nil);
|
||||
pb.setPropertyList_forType(ListToNSArray(filenames), NSFileNamesPboardType);
|
||||
end;
|
||||
|
||||
function getFilenamesFromPasteboard() : TStringList;
|
||||
var
|
||||
pb : NSPasteboard;
|
||||
filenameArray{, lClasses}: NSArray;
|
||||
class procedure TDarwinClipboardUtil.addFiles( const filenames:TStringList );
|
||||
begin
|
||||
Result := nil;
|
||||
pb := NSPasteboard.generalPasteboard;
|
||||
filenameArray := pb.propertyListForType(NSFilenamesPboardType);
|
||||
if filenameArray <> nil then Result := NSArrayToList( filenameArray );
|
||||
TDarwinClipboardUtil.addFiles( filenames, NSPasteboard.generalPasteboard );
|
||||
end;
|
||||
|
||||
procedure ClearClipboard( pb:NSPasteboard );
|
||||
class function TDarwinClipboardUtil.filenamesToString( const filenames:TStringList ): String;
|
||||
begin
|
||||
pb.clearContents;
|
||||
Result:= TrimRightLineEnding( filenames.Text, filenames.TextLineBreakStyle );
|
||||
end;
|
||||
|
||||
procedure ClearClipboard;
|
||||
begin
|
||||
ClearClipboard( NSPasteboard.generalPasteboard );
|
||||
end;
|
||||
|
||||
procedure ClipboardSetText(AText: String);
|
||||
begin
|
||||
ClearClipboard;
|
||||
NSPasteboardAddString(AText);
|
||||
end;
|
||||
|
||||
{ TDarwinClipboardUtil }
|
||||
|
||||
class function TDarwinClipboardUtil.writeToClipboard(
|
||||
const filenames: TStringList;
|
||||
const clipboardOp: TDarwinClipboardOperation ): Boolean;
|
||||
class function TDarwinClipboardUtil.setFiles(
|
||||
const clipboardOp: TDarwinClipboardOperation;
|
||||
const filenames: TStringList ): Boolean;
|
||||
begin
|
||||
Result:= False;
|
||||
if filenames.Count = 0 then Exit;
|
||||
|
||||
ClearClipboard;
|
||||
NSPasteboardAddFiles( filenames );
|
||||
NSPasteboardAddString( FilenamesToString(filenames) );
|
||||
NSPasteboardAddString( OperationName[ClipboardOp] , StringToNSString(darwinPasteboardOpMime) );
|
||||
TDarwinClipboardUtil.clear;
|
||||
TDarwinClipboardUtil.addFiles( filenames );
|
||||
TDarwinClipboardUtil.addText( filenamesToString(filenames) );
|
||||
TDarwinClipboardUtil.addText( OPERATION_NAME[ClipboardOp] , NSSTR(PASTEBOARD_OP_MIME) );
|
||||
|
||||
Result:= True;
|
||||
end;
|
||||
|
||||
class function TDarwinClipboardUtil.readFromClipboard(
|
||||
class function TDarwinClipboardUtil.getFiles(
|
||||
out clipboardOp: TDarwinClipboardOperation;
|
||||
out filenames: TStringList ): Boolean;
|
||||
|
||||
function getFilenamesFromPasteboard(): TStringList;
|
||||
var
|
||||
pb: NSPasteboard;
|
||||
filenameArray: NSArray;
|
||||
begin
|
||||
Result:= nil;
|
||||
pb:= NSPasteboard.generalPasteboard;
|
||||
filenameArray:= pb.propertyListForType(NSFilenamesPboardType);
|
||||
if filenameArray <> nil then
|
||||
Result:= NSArrayToList( filenameArray );
|
||||
end;
|
||||
|
||||
function getOpFromPasteboard(): TDarwinClipboardOperation;
|
||||
var
|
||||
opString: String;
|
||||
begin
|
||||
Result:= TDarwinClipboardOperation.copy;
|
||||
opString:= TDarwinClipboardUtil.getText( PASTEBOARD_OP_MIME );
|
||||
if OPERATION_NAME[TDarwinClipboardOperation.cut].CompareTo(opString) = 0 then
|
||||
Result:= TDarwinClipboardOperation.cut;
|
||||
end;
|
||||
|
||||
begin
|
||||
Result := False;
|
||||
clipboardOp := TDarwinClipboardOperation.copy;
|
||||
filenames := getFilenamesFromPasteboard();
|
||||
Result:= False;
|
||||
clipboardOp:= TDarwinClipboardOperation.copy;
|
||||
filenames:= getFilenamesFromPasteboard();
|
||||
if filenames <> nil then begin
|
||||
clipboardOp := getOpFromPasteboard();
|
||||
Result := True;
|
||||
clipboardOp:= getOpFromPasteboard();
|
||||
Result:= True;
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TDarwinClipboardUtil.clear;
|
||||
begin
|
||||
ClearClipboard( NSPasteboard.generalPasteboard );
|
||||
end;
|
||||
|
||||
class procedure TDarwinClipboardUtil.setText( const s: String );
|
||||
begin
|
||||
TDarwinClipboardUtil.clear;
|
||||
NSPasteboardAddString( s );
|
||||
NSPasteboard.generalPasteboard.clearContents;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue