Ejemplo n.º 1
0
        /// <summary>
        /// Sets the data to _dataContent, for all supported formats.
        /// </summary>
        /// <param name="Data">Data received in Drop event</param>
        public void SetDroppedData(IDataObject Data)
        {
            ClipFormats clipFormat = ClipFormats.FORMAT_UNKNOWN;
            String      tmpData;

            Clean(); // Clear the previously dropped data.
            foreach (String format in Data.GetFormats())
            {
                tmpData    = String.Empty;
                clipFormat = GetClipFormatFromFormat(format);
                if (clipFormat != ClipFormats.FORMAT_UNKNOWN)
                {
                    if (format.Equals(DataFormats.FileDrop))
                    {
                        if (Data.GetData(format) != null)
                        {
                            String[] files = (String[])Data.GetData(format);
                            tmpData = String.Join("|", files);
                        }
                    }
                    else
                    {
                        tmpData = Data.GetData(format).ToString();
                    }

                    // Update data to Dropped Data.
                    if (tmpData.Length != 0)
                    {
                        GuiUtils.DroppedData.SetData(tmpData, format);
                    }
                }
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 ///   check Magic specific format is supported or not.
 /// </summary>
 /// <param name = "format"></param>
 /// <returns></returns>
 public static bool IsFormatSupported(ClipFormats format)
 {
     if (GetFormatFromClipFormat(format) != null)
     {
         return(true);
     }
     return(false);
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Adds text.
        /// Returns this.
        /// </summary>
        /// <param name="text">Text.</param>
        /// <param name="format">
        /// Clipboard format id. Default: <see cref="ClipFormats.Text"/> (CF_UNICODETEXT).
        /// Text encoding (UTF-16, ANSI, etc) depends on format; default UTF-16. See <see cref="ClipFormats.Register"/>.
        /// </param>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="ArgumentException">Invalid format.</exception>
        /// <exception cref="Exception">Exceptions of <see cref="Encoding.GetBytes(string)"/>, which is called if encoding is not UTF-16.</exception>
        public AClipboardData AddText(string text, int format = ClipFormats.Text)
        {
            Encoding enc = ClipFormats.GetTextEncoding_(format, out bool unknown);

            if (enc == null)
            {
                return(_Add(text, format == 0 ? Api.CF_UNICODETEXT : format));
            }
            return(_Add(enc.GetBytes(text + "\0"), format));
        }
Ejemplo n.º 4
0
        /// <summary>
        ///  Translate the standard clipboard format into magic clip format.
        ///  It also check whether the UserFormat is supported or not.
        /// </summary>
        /// <param name = "format">Standard format</param>
        /// <returns>ClipFormat corrosponds to Standard format</returns>
        internal static ClipFormats GetClipFormatFromFormat(String format)
        {
            ClipFormats clipFormat = ClipFormats.FORMAT_UNKNOWN;

            if (format == DataFormats.UnicodeText)
            {
                clipFormat = ClipFormats.FORMAT_UNICODE_TEXT;
            }
            else if (format == DataFormats.Text)
            {
                clipFormat = ClipFormats.FORMAT_TEXT;
            }
            else if (format == DataFormats.OemText)
            {
                clipFormat = ClipFormats.FORMAT_OEM_TEXT;
            }
            else if (format == DataFormats.Rtf)
            {
                clipFormat = ClipFormats.FORMAT_RICH_TEXT;
            }
            else if (format == DataFormats.Html)
            {
                clipFormat = ClipFormats.FORMAT_HTML_TEXT;
            }
            else if (format == DataFormats.FileDrop)
            {
                clipFormat = ClipFormats.FORMAT_DROP_FILES;
            }
            else if (format == "HyperLink")
            {
                clipFormat = ClipFormats.FORMAT_HYPERLINK_TEXT;
            }
            else
            {
                // Format can be a User-defined format.
                // Get Environment to check whether a format is a user-defined format or not.
                String usrFormat = Events.GetDropUserFormats();
                if (usrFormat.Length > 0)
                {
                    String[] userFormats = usrFormat.Split(',');
                    foreach (String userStr in userFormats)
                    {
                        if (format == userStr)
                        {
                            clipFormat = ClipFormats.FORMAT_USER;
                            break;
                        }
                    }
                }
            }
            return(clipFormat);
        }
Ejemplo n.º 5
0
        /// <summary>
        ///   Check whether format is available in dropped data or not.
        /// </summary>
        /// <param name = "clipFormat"></param>
        /// <param name="userFormatStr">if userFormat is specified, then use it as a format string</param>
        /// <returns></returns>
        public bool CheckDropFormatPresent(ClipFormats clipFormat, String userFormatStr)
        {
            bool   DataPresent = false;
            String format      = GetFormatFromClipFormat(clipFormat);

            if (clipFormat == ClipFormats.FORMAT_USER && !String.IsNullOrEmpty(userFormatStr))
            {
                format = userFormatStr;
            }

            if (_dataContent != null && _dataContent.GetDataPresent(format))
            {
                DataPresent = true;
            }

            return(DataPresent);
        }
Ejemplo n.º 6
0
        /// <summary>
        ///   Returns the string format for a ClipFormat.
        /// </summary>
        /// <param name = "format">Magic specific format</param>
        /// <returns></returns>
        internal static String GetFormatFromClipFormat(ClipFormats format)
        {
            String Format = null;

            switch (format)
            {
            case ClipFormats.FORMAT_UNICODE_TEXT:
                Format = DataFormats.UnicodeText;
                break;

            case ClipFormats.FORMAT_TEXT:
                Format = DataFormats.Text;
                break;

            case ClipFormats.FORMAT_OEM_TEXT:
                Format = DataFormats.OemText;
                break;

            case ClipFormats.FORMAT_RICH_TEXT:
                Format = DataFormats.Rtf;
                break;

            case ClipFormats.FORMAT_HTML_TEXT:
                Format = DataFormats.Html;
                break;

            case ClipFormats.FORMAT_HYPERLINK_TEXT:
                Format = "HyperLink";
                break;

            case ClipFormats.FORMAT_DROP_FILES:
                Format = DataFormats.FileDrop;
                break;

            case ClipFormats.FORMAT_USER:
                Format = "UserFormat";
                break;
            }
            return(Format);
        }
Ejemplo n.º 7
0
        ///<summary>
        ///  Get the Data according to Format.
        ///</summary>
        ///<param name = "clipFormat">Magic specific format</param>
        /// <param name="userFormatStr">if userFormat is specified, then use it as a format string</param>
        ///<returns></returns>
        public String GetData(ClipFormats clipFormat, String userFormatStr)
        {
            String format  = null;
            String strData = null;

            if (_dataContent == null)
            {
                return("");
            }

            format = GetFormatFromClipFormat(clipFormat);
            if (clipFormat == ClipFormats.FORMAT_USER && !String.IsNullOrEmpty(userFormatStr))
            {
                format = userFormatStr;
            }

            if (format != null && _dataContent.GetDataPresent(format))
            {
                strData = _dataContent.GetData(format).ToString();
            }

            return(strData);
        }
Ejemplo n.º 8
0
        /// <summary>
        ///  Set the data to be dragged to DataObject with its format.
        /// </summary>
        /// <param name="Data"> data to be set for drag</param>
        /// <param name="Format"> magic format of the data </param>
        /// <param name="userFormatStr">if userFormat is specified, then use it as a format string</param>
        internal void SetData(String Data, ClipFormats clipFormat, String userFormatStr)
        {
            if (_DataContent == null)
            {
                _DataContent = new DataObject();
            }

            String formatStr = DroppedData.GetFormatFromClipFormat(clipFormat);

            if (clipFormat == ClipFormats.FORMAT_USER && !String.IsNullOrEmpty(userFormatStr))
            {
                formatStr = userFormatStr;
            }

            if (clipFormat == ClipFormats.FORMAT_DROP_FILES)
            {
                String[] files = Data.Split(',');
                GuiUtils.DraggedData._DataContent.SetData(formatStr, files);
            }
            else
            {
                GuiUtils.DraggedData._DataContent.SetData(formatStr, Data);
            }
        }
Ejemplo n.º 9
0
 private static extern IntPtr DdeClientTransaction(byte[] Bytes, int DataLen, IntPtr hConv, IntPtr ItemNameStr, ClipFormats Format, DDETransactionType Type, int TimeOut, out int Result);
Ejemplo n.º 10
0
        /// <summary>
        /// Gets clipboard text without open/close.
        /// If format is 0, tries CF_UNICODETEXT and CF_HDROP.
        /// </summary>
        internal static unsafe string GetText_(int format)
        {
            IntPtr h = default;

            if (format == 0)
            {
                h = Api.GetClipboardData(Api.CF_UNICODETEXT);
                if (h == default)
                {
                    format = Api.CF_HDROP;
                }
            }
            if (format == 0)
            {
                format = Api.CF_UNICODETEXT;
            }
            else
            {
                h = Api.GetClipboardData(format); if (h == default)
                {
                    return(null);
                }
                if (format == Api.CF_HDROP)
                {
                    return(string.Join("\r\n", _HdropToFiles(h)));
                }
            }

            using (new _GlobalLock(h, out var mem, out int len)) {
                if (mem == default)
                {
                    return(null);
                }
                var s = (char *)mem; var b = (byte *)s;

                Encoding enc = ClipFormats.GetTextEncoding_(format, out bool unknown);
                if (unknown)
                {
                    if ((len & 1) != 0 || Util.BytePtr_.Length(b, len) > len - 2)
                    {
                        enc = Encoding.Default;                                                                              //autodetect
                    }
                }

                if (enc == null)
                {
                    len /= 2; while (len > 0 && s[len - 1] == '\0')
                    {
                        len--;
                    }
                    return(new string(s, 0, len));
                }
                else
                {
                    //most apps add single '\0' at the end. Some don't add. Some add many, eg Dreamweaver. Trim all.
                    int charLen = enc.GetByteCount("\0");
                    switch (charLen)
                    {
                    case 1:
                        while (len > 0 && b[len - 1] == '\0')
                        {
                            len--;
                        }
                        break;

                    case 2:
                        for (int k = len / 2; k > 0 && s[k - 1] == '\0'; k--)
                        {
                            len -= 2;
                        }
                        break;

                    case 4:
                        var ip = (int *)s; for (int k = len / 4; k > 0 && ip[k - 1] == '\0'; k--)
                        {
                            len -= 4;
                        }
                        break;
                    }
                    return(enc.GetString(b, len));
                    //note: don't parse HTML format here. Let caller use GetHtml or parse itself.
                }
            }
        }