mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-30 07:07:26 +01:00
Qt: introduced Drop Files Event feature.
git-svn-id: trunk@18615 -
This commit is contained in:
parent
deba377a63
commit
b5e43b5d77
@ -435,7 +435,10 @@ type
|
|||||||
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
||||||
function IsMdiChild: Boolean;
|
function IsMdiChild: Boolean;
|
||||||
procedure OffsetMousePos(APoint: PQtPoint); override;
|
procedure OffsetMousePos(APoint: PQtPoint); override;
|
||||||
procedure SlotWindowStateChange; cdecl;
|
function getAcceptDropFiles: Boolean;
|
||||||
|
procedure setAcceptDropFiles(AValue: Boolean);
|
||||||
|
function slotDropFiles(Sender: QObjectH; Event: QEventH): Boolean;
|
||||||
|
procedure slotWindowStateChange; cdecl;
|
||||||
procedure setShowInTaskBar(AValue: Boolean);
|
procedure setShowInTaskBar(AValue: Boolean);
|
||||||
public
|
public
|
||||||
procedure AttachEvents; override;
|
procedure AttachEvents; override;
|
||||||
@ -4061,6 +4064,14 @@ begin
|
|||||||
BeginEventProcessing;
|
BeginEventProcessing;
|
||||||
case QEvent_type(Event) of
|
case QEvent_type(Event) of
|
||||||
QEventWindowStateChange: SlotWindowStateChange;
|
QEventWindowStateChange: SlotWindowStateChange;
|
||||||
|
QEventDrop,
|
||||||
|
QEventDragMove,
|
||||||
|
QEventDragEnter:
|
||||||
|
begin
|
||||||
|
Result := getAcceptDropFiles;
|
||||||
|
if (Result) and (QEvent_type(Event) = QEventDrop) then
|
||||||
|
Result := slotDropFiles(Sender, Event);
|
||||||
|
end;
|
||||||
else
|
else
|
||||||
Result := inherited EventFilter(Sender, Event);
|
Result := inherited EventFilter(Sender, Event);
|
||||||
end;
|
end;
|
||||||
@ -4080,6 +4091,75 @@ begin
|
|||||||
inherited OffsetMousePos(APoint);
|
inherited OffsetMousePos(APoint);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TQtMainWindow.getAcceptDropFiles: Boolean;
|
||||||
|
begin
|
||||||
|
Result := QWidget_acceptDrops(Widget);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TQtMainWindow.setAcceptDropFiles(AValue: Boolean);
|
||||||
|
begin
|
||||||
|
QWidget_setAcceptDrops(Widget, AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TQtMainWindow.slotDropFiles(Sender: QObjectH; Event: QEventH
|
||||||
|
): Boolean;
|
||||||
|
var
|
||||||
|
MimeData: QMimeDataH;
|
||||||
|
QStrList: QStringListH;
|
||||||
|
ByteArr: QByteArrayH;
|
||||||
|
i: Integer;
|
||||||
|
WStr: WideString;
|
||||||
|
GotFiles: Boolean;
|
||||||
|
FilesList: TStrings;
|
||||||
|
Files: Array of String;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
GotFiles := False;
|
||||||
|
MimeData := QDropEvent_mimeData(QDropEventH(Event));
|
||||||
|
QStrList := QStringList_create();
|
||||||
|
try
|
||||||
|
QMimeData_formats(MimeData, QStrList);
|
||||||
|
for i := 0 to QStringList_size(QStrList) - 1 do
|
||||||
|
begin
|
||||||
|
QStringList_at(QStrList, @WStr, i);
|
||||||
|
GotFiles := WStr = 'text/uri-list';
|
||||||
|
if GotFiles then
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
QStringList_destroy(QStrList);
|
||||||
|
end;
|
||||||
|
if not GotFiles then
|
||||||
|
exit;
|
||||||
|
ByteArr := QByteArray_create();
|
||||||
|
try
|
||||||
|
QMimeData_data(MimeData, ByteArr, @WStr);
|
||||||
|
if not QByteArray_isNull(ByteArr) then
|
||||||
|
begin
|
||||||
|
WStr := '';
|
||||||
|
for i := 0 to QByteArray_size(ByteArr) - 1 do
|
||||||
|
WStr := WStr + QByteArray_at(ByteArr, i);
|
||||||
|
FilesList := TStringList.Create;
|
||||||
|
try
|
||||||
|
FilesList.Text := UTF8Encode(WStr);
|
||||||
|
{last member of TStringList always contains empty string
|
||||||
|
since QMimeData always have #13#10#0 at the end.So we cut it here.}
|
||||||
|
SetLength(Files, FilesList.Count - 1);
|
||||||
|
for i := 0 to High(Files) do
|
||||||
|
Files[i] := FilesList.Strings[i];
|
||||||
|
finally
|
||||||
|
FilesList.Free;
|
||||||
|
end;
|
||||||
|
QDropEvent_setDropAction(QDropEventH(Event), QtCopyAction);
|
||||||
|
QDropEvent_acceptProposedAction(QDropEventH(Event));
|
||||||
|
TCustomForm(LCLOBject).IntfDropFiles(Files);
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
QByteArray_destroy(ByteArr);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
Function: TQtMainWindow.SlotWindowStateChange
|
Function: TQtMainWindow.SlotWindowStateChange
|
||||||
Params: None
|
Params: None
|
||||||
|
|||||||
@ -80,6 +80,7 @@ type
|
|||||||
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
|
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||||
|
|
||||||
class procedure CloseModal(const ACustomForm: TCustomForm); override;
|
class procedure CloseModal(const ACustomForm: TCustomForm); override;
|
||||||
|
class procedure SetAllowDropFiles(const AForm: TCustomForm; AValue: Boolean); override;
|
||||||
class procedure SetFormBorderStyle(const AForm: TCustomForm; const AFormBorderStyle: TFormBorderStyle); override;
|
class procedure SetFormBorderStyle(const AForm: TCustomForm; const AFormBorderStyle: TFormBorderStyle); override;
|
||||||
class procedure SetFormStyle(const AForm: TCustomform; const AFormStyle: TFormStyle); override;
|
class procedure SetFormStyle(const AForm: TCustomform; const AFormStyle: TFormStyle); override;
|
||||||
class procedure SetIcon(const AForm: TCustomForm; const Small, Big: HICON); override;
|
class procedure SetIcon(const AForm: TCustomForm; const Small, Big: HICON); override;
|
||||||
@ -193,6 +194,18 @@ begin
|
|||||||
inherited CloseModal(ACustomForm);
|
inherited CloseModal(ACustomForm);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{------------------------------------------------------------------------------
|
||||||
|
Method: TQtWSCustomForm.SetAllowDropFiles
|
||||||
|
Params:
|
||||||
|
Returns: Nothing
|
||||||
|
------------------------------------------------------------------------------}
|
||||||
|
class procedure TQtWSCustomForm.SetAllowDropFiles(const AForm: TCustomForm;
|
||||||
|
AValue: Boolean);
|
||||||
|
begin
|
||||||
|
if AForm.HandleAllocated then
|
||||||
|
TQtMainWindow(AForm.Handle).setAcceptDropFiles(AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
Method: TQtWSCustomForm.SetFormBorderStyle
|
Method: TQtWSCustomForm.SetFormBorderStyle
|
||||||
Params:
|
Params:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user