From 36cbf9dcef04d9501ec32d06f1ab9bd33bf2c59b Mon Sep 17 00:00:00 2001 From: cxl Date: Fri, 26 Mar 2010 16:53:32 +0000 Subject: [PATCH] CtrlLib: RichEdit now supports dropping Image files git-svn-id: svn://ultimatepp.org/upp/trunk@2270 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CtrlCore/CtrlCore.h | 1 + uppsrc/CtrlCore/Win32Clip.cpp | 4 ++++ uppsrc/CtrlCore/X11Clip.cpp | 6 ++++++ uppsrc/RichEdit/Clip.cpp | 19 +++++++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/uppsrc/CtrlCore/CtrlCore.h b/uppsrc/CtrlCore/CtrlCore.h index 443b65970..27dc19f86 100644 --- a/uppsrc/CtrlCore/CtrlCore.h +++ b/uppsrc/CtrlCore/CtrlCore.h @@ -262,6 +262,7 @@ Image GetImage(PasteClip& clip); String GetImageClip(const Image& m, const String& fmt); void Append(VectorMap& data, const Image& img); +bool IsAvailableFiles(PasteClip& clip); bool AcceptFiles(PasteClip& clip); Vector GetFiles(PasteClip& clip); diff --git a/uppsrc/CtrlCore/Win32Clip.cpp b/uppsrc/CtrlCore/Win32Clip.cpp index a6f24b5d5..d867e5cf6 100644 --- a/uppsrc/CtrlCore/Win32Clip.cpp +++ b/uppsrc/CtrlCore/Win32Clip.cpp @@ -392,6 +392,10 @@ bool AcceptFiles(PasteClip& clip) return false; } +bool IsAvailableFiles(PasteClip& clip) +{ + return clip.IsAvailable("files"); +} struct sDROPFILES { DWORD offset; diff --git a/uppsrc/CtrlCore/X11Clip.cpp b/uppsrc/CtrlCore/X11Clip.cpp index 4348eb005..42779bc1b 100644 --- a/uppsrc/CtrlCore/X11Clip.cpp +++ b/uppsrc/CtrlCore/X11Clip.cpp @@ -342,6 +342,12 @@ bool AcceptFiles(PasteClip& clip) return clip.Accept("text/uri-list"); } +bool IsAvailableFiles(PasteClip& clip) +{ + GuiLock __; + return clip.IsAvailable("text/uri-list"); +} + int JustLf(int c) { return (byte)c >= 32 || c == '\n' ? c : 0; diff --git a/uppsrc/RichEdit/Clip.cpp b/uppsrc/RichEdit/Clip.cpp index 79ef742a0..43c1cd450 100644 --- a/uppsrc/RichEdit/Clip.cpp +++ b/uppsrc/RichEdit/Clip.cpp @@ -42,6 +42,25 @@ bool RichEdit::Accept(PasteClip& d, RichText& clip) return true; } } + if(AcceptFiles(d)) { + Vector s = GetFiles(d); + if(s.GetCount()) { + String fn = s[0]; + String ext = ToUpper(GetFileExt(fn)); + if(ext == ".PNG" || ext == ".JPG" || ext == ".JPEG" || ext == ".GIF" || ext == ".TIF" || ext == ".TIFF") { + if(d.Accept()) { + if(StreamRaster::LoadFileAny(fn)) { + RichPara p; + p.Cat(CreateRawImageObject(LoadFile(fn)), formatinfo); + clip.Cat(p); + } + return true; + } + return false; + } + } + d.Reject(); + } if(d.Accept("text/QTF")) clip = ParseQTF(~d, 0, context); else