Beispiel #1
0
        protected override void SetIcon(TrayIcons icon)
        {
            m_appIndicator.IconName = GetTrayIconFilename(icon);

            switch (icon)
            {
            case TrayIcons.Paused:
                m_appIndicator.IconDesc = "Paused";
                break;

            case TrayIcons.Running:
                m_appIndicator.IconDesc = "Running";
                break;

            case TrayIcons.IdleError:
                m_appIndicator.IconDesc = "Error";
                break;

            case TrayIcons.RunningError:
                m_appIndicator.IconDesc = "Running";
                break;

            case TrayIcons.PausedError:
                m_appIndicator.IconDesc = "Paused";
                break;

            case TrayIcons.Idle:
            default:
                m_appIndicator.IconDesc = "Ready";
                break;
            }
        }
Beispiel #2
0
        protected static string GetTrayIconFilename(TrayIcons icon)
        {
            switch (icon)
            {
            case TrayIcons.Paused:
                return("normal-pause");

            case TrayIcons.Running:
                return("normal-running");

            case TrayIcons.IdleWarning:
                return("normal-warning");

            case TrayIcons.IdleError:
                return("normal-error");

            case TrayIcons.RunningError:
                return("normal-running");

            case TrayIcons.PausedError:
                return("normal-pause");

            case TrayIcons.Idle:
            default:
                return("normal");
            }
        }
Beispiel #3
0
        protected static Pixbuf GetIcon(TrayIcons icon)
        {
            if (!_images.ContainsKey(icon))
            {
                switch (icon)
                {
                case TrayIcons.Paused:
                    _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.PauseIcon).ToBitmap());
                    break;

                case TrayIcons.Running:
                    _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WorkingIcon).ToBitmap());
                    break;

                case TrayIcons.IdleError:
                    _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.ErrorIcon).ToBitmap());
                    break;

                case TrayIcons.RunningError:
                    _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WorkingIcon).ToBitmap());
                    break;

                case TrayIcons.PausedError:
                    _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.PauseIcon).ToBitmap());
                    break;

                case TrayIcons.Idle:
                default:
                    _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.NormalIcon).ToBitmap());
                    break;
                }
            }

            return(_images[icon]);
        }
Beispiel #4
0
        protected override void SetIcon(TrayIcons icon)
        {
            switch (icon)
            {
            case TrayIcons.IdleError:
                m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.ErrorIcon, System.Windows.Forms.SystemInformation.SmallIconSize);
                break;

            case TrayIcons.Paused:
                m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.PauseIcon, System.Windows.Forms.SystemInformation.SmallIconSize);
                break;

            case TrayIcons.PausedError:
                m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.PauseIcon, System.Windows.Forms.SystemInformation.SmallIconSize);
                break;

            case TrayIcons.Running:
                m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.WorkingIcon, System.Windows.Forms.SystemInformation.SmallIconSize);
                break;

            case TrayIcons.RunningError:
                m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.WorkingIcon, System.Windows.Forms.SystemInformation.SmallIconSize);
                break;

            case TrayIcons.Idle:
            default:
                m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.NormalIcon, System.Windows.Forms.SystemInformation.SmallIconSize);
                break;
            }
        }
Beispiel #5
0
        protected static Pixbuf GetIcon(TrayIcons icon)
        {
            if (!_images.ContainsKey(icon))
            {
                if (Platform.IsClientOSX)
                {
                    switch (icon)
                    {
                    case TrayIcons.Paused:
                        _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.PauseIcon).ToBitmap());
                        break;

                    case TrayIcons.Running:
                        _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WorkingIcon).ToBitmap());
                        break;

                    case TrayIcons.IdleWarning:
                        _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WarningIcon).ToBitmap());
                        break;

                    case TrayIcons.IdleError:
                        _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.ErrorIcon).ToBitmap());
                        break;

                    case TrayIcons.RunningError:
                        _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WorkingIcon).ToBitmap());
                        break;

                    case TrayIcons.PausedError:
                        _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.PauseIcon).ToBitmap());
                        break;

                    case TrayIcons.Idle:
                    default:
                        _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.NormalIcon).ToBitmap());
                        break;
                    }
                }
                else
                {
                    _images[icon] = null;
                    var filename = System.IO.Path.Combine(m_svgfolder, System.IO.Path.ChangeExtension(GetTrayIconFilename(icon), ".svg"));
                    if (System.IO.File.Exists(filename))
                    {
                        _images[icon] = new Pixbuf(filename);
                    }
                }
            }

            return(_images[icon]);
        }
Beispiel #6
0
        protected void OnStatusUpdated(IServerStatus status)
        {
            this.UpdateUIState(() => {
                switch (status.SuggestedStatusIcon)
                {
                case SuggestedStatusIcon.Active:
                    Icon = TrayIcons.Running;
                    break;

                case SuggestedStatusIcon.ActivePaused:
                    Icon = TrayIcons.Paused;
                    break;

                case SuggestedStatusIcon.ReadyError:
                    Icon = TrayIcons.IdleError;
                    break;

                case SuggestedStatusIcon.ReadyWarning:
                    Icon = TrayIcons.IdleError;
                    break;

                case SuggestedStatusIcon.Paused:
                    Icon = TrayIcons.Paused;
                    break;

                case SuggestedStatusIcon.Ready:
                default:
                    Icon = TrayIcons.Idle;
                    break;
                }

                if (status.ProgramState == LiveControlState.Running)
                {
                    m_pauseMenu.Icon = MenuIcons.Pause;
                    m_pauseMenu.Text = "Pause";
                    m_stateIsPaused  = false;
                }
                else
                {
                    m_pauseMenu.Icon = MenuIcons.Resume;
                    m_pauseMenu.Text = "Resume";
                    m_stateIsPaused  = true;
                }
            });
        }
Beispiel #7
0
        /// <summary>
        ///     Hide all tray icons to prevent them hanging useless in the system tray
        /// </summary>
        /// <param name="cancellationToken">CancellationToken</param>
        /// <returns>Task</returns>
        public async Task ShutdownAsync(CancellationToken cancellationToken = default)
        {
            var trayIcons = TrayIcons.ToList();

            if (trayIcons.Any())
            {
                Log.Debug().WriteLine("Hiding all created tray-icons");

                await Execute.OnUIThreadAsync(() =>
                {
                    Log.Debug().WriteLine("Hiding {0} tray-icons", trayIcons.Count);
                    foreach (var trayIcon in trayIcons)
                    {
                        trayIcon.Hide();
                    }
                }).ConfigureAwait(false);
            }
            else
            {
                Log.Debug().WriteLine("No tray-icons to hide");
            }
        }
        private bool SysTrayCallback(uint message, SafeNotifyIconData nicData)
        {
            if (nicData.hWnd == IntPtr.Zero)
            {
                return(false);
            }

            NotifyIcon trayIcon = new NotifyIcon(this, nicData.hWnd);

            trayIcon.UID = nicData.uID;

            lock (_lockObject)
            {
                if ((NIM)message == NIM.NIM_ADD || (NIM)message == NIM.NIM_MODIFY)
                {
                    try
                    {
                        bool exists       = false;
                        bool titleChanged = false;

                        // hide icons while we are shell which require UWP support & we have a separate implementation for
                        if (nicData.guidItem == new Guid(VOLUME_GUID) && ((EnvironmentHelper.IsAppRunningAsShell && EnvironmentHelper.IsWindows10OrBetter) || GroupPolicyHelper.HideScaVolume))
                        {
                            return(false);
                        }

                        // hide icons per group policy
                        if ((nicData.guidItem == new Guid(HEALTH_GUID) && GroupPolicyHelper.HideScaHealth) ||
                            (nicData.guidItem == new Guid(MEETNOW_GUID) && GroupPolicyHelper.HideScaMeetNow) ||
                            (nicData.guidItem == new Guid(NETWORK_GUID) && GroupPolicyHelper.HideScaNetwork) ||
                            (nicData.guidItem == new Guid(POWER_GUID) && GroupPolicyHelper.HideScaPower))
                        {
                            return(false);
                        }

                        foreach (NotifyIcon ti in TrayIcons)
                        {
                            if (ti.Equals(nicData))
                            {
                                exists   = true;
                                trayIcon = ti;
                                break;
                            }
                        }

                        if ((NIF.STATE & nicData.uFlags) != 0)
                        {
                            trayIcon.IsHidden = nicData.dwState == 1;
                        }

                        if ((NIF.TIP & nicData.uFlags) != 0 && !string.IsNullOrEmpty(nicData.szTip))
                        {
                            trayIcon.Title = nicData.szTip;
                            titleChanged   = true;
                        }

                        if ((NIF.ICON & nicData.uFlags) != 0)
                        {
                            if (nicData.hIcon != IntPtr.Zero)
                            {
                                System.Windows.Media.ImageSource icon = IconImageConverter.GetImageFromHIcon(nicData.hIcon, false);

                                if (icon != null)
                                {
                                    trayIcon.Icon = icon;
                                }
                                else if (icon == null && trayIcon.Icon == null)
                                {
                                    // Use default only if we don't have a valid icon already
                                    trayIcon.Icon = IconImageConverter.GetDefaultIcon();
                                }
                            }
                            else
                            {
                                trayIcon.Icon = null;
                            }
                        }

                        trayIcon.HWnd = nicData.hWnd;
                        trayIcon.UID  = nicData.uID;

                        if ((NIF.GUID & nicData.uFlags) != 0)
                        {
                            trayIcon.GUID = nicData.guidItem;
                        }

                        if (nicData.uVersion > 0 && nicData.uVersion <= 4)
                        {
                            trayIcon.Version = nicData.uVersion;
                        }

                        if ((NIF.MESSAGE & nicData.uFlags) != 0)
                        {
                            trayIcon.CallbackMessage = nicData.uCallbackMessage;
                        }

                        if (!exists)
                        {
                            // default placement to a menu bar-like rect
                            trayIcon.Placement = defaultPlacement;

                            // set properties used for pinning
                            trayIcon.Path = ShellHelper.GetPathForWindowHandle(trayIcon.HWnd);
                            trayIcon.SetPinValues();

                            if (trayIcon.Icon == null)
                            {
                                trayIcon.Icon = IconImageConverter.GetDefaultIcon();
                            }

                            TrayIcons.Add(trayIcon);

                            if ((NIF.INFO & nicData.uFlags) != 0)
                            {
                                handleBalloonData(nicData, trayIcon);
                            }

                            ShellLogger.Debug($"NotificationArea: Added: {trayIcon.Title} Path: {trayIcon.Path} Hidden: {trayIcon.IsHidden} GUID: {trayIcon.GUID} UID: {trayIcon.UID} Version: {trayIcon.Version}");

                            if ((NIM)message == NIM.NIM_MODIFY)
                            {
                                // return an error to the notifyicon as we received a modify for an icon we did not yet have
                                return(false);
                            }
                        }
                        else
                        {
                            if ((NIF.INFO & nicData.uFlags) != 0)
                            {
                                handleBalloonData(nicData, trayIcon);
                            }

                            if (titleChanged && trayIcon.GUID == default && !trayIcon.IsPinned)
                            {
                                // set properties used for pinning
                                trayIcon.SetPinValues();
                            }

                            ShellLogger.Debug($"NotificationArea: Modified: {trayIcon.Title}");
                        }
                    }
                    catch (Exception ex)
                    {
                        ShellLogger.Error("NotificationArea: Unable to modify the icon in the collection.", ex);
                    }
                }
                else if ((NIM)message == NIM.NIM_DELETE)
                {
                    try
                    {
                        foreach (var icon in TrayIcons)
                        {
                            if (icon.Equals(trayIcon))
                            {
                                TrayIcons.Remove(trayIcon);

                                ShellLogger.Debug($"NotificationArea: Removed: {icon.Title}");

                                return(true);
                            }
                        }

                        return(false);
                    }
                    catch (Exception ex)
                    {
                        ShellLogger.Error("NotificationArea: Unable to remove the icon from the collection.", ex);
                    }
                }
                else if ((NIM)message == NIM.NIM_SETVERSION)
                {
                    if (nicData.uVersion > 4)
                    {
                        return(false);
                    }

                    foreach (NotifyIcon ti in TrayIcons)
                    {
                        if (ti.Equals(nicData))
                        {
                            ti.Version = nicData.uVersion;
                            ShellLogger.Debug($"NotificationArea: Modified version to {ti.Version} on: {ti.Title}");
                            break;
                        }
                    }
                }
            }
            return(true);
        }
        private bool SysTrayCallback(uint message, SafeNotifyIconData nicData)
        {
            if (nicData.hWnd == IntPtr.Zero)
            {
                return(false);
            }

            NotifyIcon trayIcon = new NotifyIcon(nicData.hWnd);

            trayIcon.UID = nicData.uID;

            lock (_lockObject)
            {
                if ((NIM)message == NIM.NIM_ADD || (NIM)message == NIM.NIM_MODIFY)
                {
                    try
                    {
                        bool exists = false;

                        // hide icons while we are shell which require UWP support & we have a separate implementation for
                        if (nicData.guidItem == new Guid(VOLUME_GUID) && ((Shell.IsCairoRunningAsShell && Shell.IsWindows10OrBetter) || GroupPolicyManager.Instance.HideScaVolume))
                        {
                            return(false);
                        }

                        foreach (NotifyIcon ti in TrayIcons)
                        {
                            if (ti.Equals(nicData))
                            {
                                exists   = true;
                                trayIcon = ti;
                                break;
                            }
                        }

                        if ((NIF.STATE & nicData.uFlags) != 0)
                        {
                            trayIcon.IsHidden = nicData.dwState == 1;
                        }

                        if ((NIF.TIP & nicData.uFlags) != 0 && !string.IsNullOrEmpty(nicData.szTip))
                        {
                            trayIcon.Title = nicData.szTip;
                        }

                        if ((NIF.ICON & nicData.uFlags) != 0)
                        {
                            if (nicData.hIcon != IntPtr.Zero)
                            {
                                try
                                {
                                    System.Windows.Media.Imaging.BitmapSource bs =
                                        System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
                                            nicData.hIcon, Int32Rect.Empty,
                                            System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                                    DestroyIcon(nicData.hIcon);

                                    if (bs != null)
                                    {
                                        bs.Freeze();
                                        trayIcon.Icon = bs;
                                    }
                                }
                                catch
                                {
                                    if (trayIcon.Icon == null)
                                    {
                                        trayIcon.Icon = Common.IconImageConverter.GetDefaultIcon();
                                    }
                                }
                            }
                            else
                            {
                                trayIcon.Icon = null;
                            }
                        }

                        trayIcon.HWnd = nicData.hWnd;
                        trayIcon.UID  = nicData.uID;

                        if ((NIF.GUID & nicData.uFlags) != 0)
                        {
                            trayIcon.GUID = nicData.guidItem;
                        }

                        // guess version in case we are receiving icons that aren't sending NIM_SETVERSION to new explorers
                        if ((NIF.VISTA_MASK & nicData.uFlags) != 0)
                        {
                            trayIcon.Version = 4;
                        }
                        else if ((NIF.XP_MASK & nicData.uFlags) != 0)
                        {
                            trayIcon.Version = 3;
                        }

                        if (nicData.uVersion > 0 && nicData.uVersion <= 4)
                        {
                            trayIcon.Version = nicData.uVersion;
                        }

                        if ((NIF.MESSAGE & nicData.uFlags) != 0)
                        {
                            trayIcon.CallbackMessage = nicData.uCallbackMessage;
                        }

                        if (!exists)
                        {
                            // default placement to a menu bar-like rect
                            trayIcon.Placement = defaultPlacement;

                            // set properties used for pinning
                            trayIcon.Path = Shell.GetPathForHandle(trayIcon.HWnd);
                            trayIcon.SetPinValues();

                            if (trayIcon.Icon == null)
                            {
                                trayIcon.Icon = Common.IconImageConverter.GetDefaultIcon();
                            }

                            TrayIcons.Add(trayIcon);
                            CairoLogger.Instance.Debug($"NotificationArea: Added: {trayIcon.Title} Path: {trayIcon.Path} Hidden: {trayIcon.IsHidden} GUID: {trayIcon.GUID} UID: {trayIcon.UID} Version: {trayIcon.Version}");

                            if ((NIM)message == NIM.NIM_MODIFY)
                            {
                                // return an error to the notifyicon as we received a modify for an icon we did not yet have
                                return(false);
                            }
                        }
                        else
                        {
                            CairoLogger.Instance.Debug($"NotificationArea: Modified: {trayIcon.Title}");
                        }
                    }
                    catch (Exception ex)
                    {
                        CairoLogger.Instance.Error("NotificationArea: Unable to modify the icon in the collection.", ex);
                    }
                }
                else if ((NIM)message == NIM.NIM_DELETE)
                {
                    try
                    {
                        if (!TrayIcons.Contains(trayIcon))
                        {
                            // Nothing to remove.
                            return(false);
                        }

                        TrayIcons.Remove(trayIcon);

                        CairoLogger.Instance.Debug($"NotificationArea: Removed: {nicData.szTip}");
                    }
                    catch (Exception ex)
                    {
                        CairoLogger.Instance.Error("NotificationArea: Unable to remove the icon from the collection.", ex);
                    }
                }
                else if ((NIM)message == NIM.NIM_SETVERSION)
                {
                    foreach (NotifyIcon ti in TrayIcons)
                    {
                        if (ti.Equals(nicData))
                        {
                            ti.Version = nicData.uVersion;
                            CairoLogger.Instance.Debug($"NotificationArea: Modified version to {ti.Version} on: {ti.Title}");
                            break;
                        }
                    }
                }
            }
            return(true);
        }
Beispiel #10
0
 protected override void SetIcon(TrayIcons icon)
 {
     m_trayIcon.Pixbuf = GetIcon(icon);
 }
Beispiel #11
0
 public static void SetIcons(Application o, TrayIcons trayIcons) => o.SetValue(IconsProperty, trayIcons);
        private bool SysTrayCallback(uint message, NOTIFYICONDATA nicData)
        {
            TrayIcon trayIcon = new TrayIcon(nicData.hWnd);

            if (nicData.uID != null)
            {
                trayIcon.UID = nicData.uID;
            }

            lock (_lockObject)
            {
                switch ((NIM)message)
                {
                case NIM.NIM_ADD:
                    // Ensure the icon doesn't already exist.
                    if (TrayIcons.Contains(trayIcon))
                    {
                        return(false);
                    }

                    // Add the icon.
                    trayIcon.Title = nicData.szTip;
                    try
                    {
                        trayIcon.Icon = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(nicData.hIcon, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                    }
                    catch
                    {
                        trayIcon.Icon = null;
                    }
                    trayIcon.HWnd            = nicData.hWnd;
                    trayIcon.UID             = nicData.uID;
                    trayIcon.CallbackMessage = nicData.uCallbackMessage;

                    TrayIcons.Add(trayIcon);
                    break;

                case NIM.NIM_DELETE:
                    try
                    {
                        if (!TrayIcons.Contains(trayIcon))
                        {
                            // Nothing to remove.
                            return(false);
                        }

                        // Woo! Using Linq to avoid iterating!
                        TrayIcons.Remove(trayIcon);
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Unable to remove the icon from the collection. Error: " + ex.ToString());
                    }
                    break;

                case NIM.NIM_MODIFY:
                    try
                    {
                        bool exists = false;
                        if (TrayIcons.Contains(trayIcon))
                        {
                            exists   = true;
                            trayIcon = TrayIcons.Single(i => i.HWnd == nicData.hWnd && i.UID == nicData.uID);
                        }

                        trayIcon.Title           = nicData.szTip;
                        trayIcon.Icon            = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(nicData.hIcon, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                        trayIcon.HWnd            = nicData.hWnd;
                        trayIcon.UID             = nicData.uID;
                        trayIcon.CallbackMessage = nicData.uCallbackMessage;

                        if (!exists)
                        {
                            TrayIcons.Add(trayIcon);
                        }
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Unable to modify the icon in the collection. Error: " + ex.ToString());
                    }

                    break;
                }
            }
            return(true);
        }
        private bool SysTrayCallback(uint message, NOTIFYICONDATA nicData)
        {
            if (nicData.hWnd == 0)
            {
                return(false);
            }

            NotifyIcon trayIcon = new NotifyIcon((IntPtr)nicData.hWnd);

            trayIcon.UID = nicData.uID;

            lock (_lockObject)
            {
                if ((NIM)message == NIM.NIM_ADD || (NIM)message == NIM.NIM_MODIFY)
                {
                    try
                    {
                        bool exists = false;

                        if (nicData.dwState != 1)
                        {
                            if (nicData.guidItem == new Guid(VOLUME_GUID))
                            {
                                return(false);
                            }

                            foreach (NotifyIcon ti in TrayIcons)
                            {
                                if ((nicData.guidItem != Guid.Empty && nicData.guidItem == ti.GUID) || (ti.HWnd == (IntPtr)nicData.hWnd && ti.UID == nicData.uID))
                                {
                                    exists   = true;
                                    trayIcon = ti;
                                    break;
                                }
                            }

                            if ((NIF.TIP & nicData.uFlags) != 0 && !string.IsNullOrEmpty(nicData.szTip))
                            {
                                trayIcon.Title = nicData.szTip;
                            }

                            if ((NIF.ICON & nicData.uFlags) != 0)
                            {
                                if ((IntPtr)nicData.hIcon != IntPtr.Zero)
                                {
                                    try
                                    {
                                        System.Windows.Media.Imaging.BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon((IntPtr)nicData.hIcon, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

                                        if (bs != null)
                                        {
                                            trayIcon.Icon = bs;
                                        }
                                    }
                                    catch
                                    {
                                        if (trayIcon.Icon == null)
                                        {
                                            trayIcon.Icon = Common.IconImageConverter.GetDefaultIcon();
                                        }
                                    }
                                }
                                else
                                {
                                    trayIcon.Icon = null;
                                }
                            }

                            trayIcon.HWnd = (IntPtr)nicData.hWnd;
                            trayIcon.UID  = nicData.uID;
                            trayIcon.GUID = nicData.guidItem;

                            // guess version in case we are receiving icons that aren't sending NIM_SETVERSION to new explorers
                            if ((NIF.VISTA_MASK & nicData.uFlags) != 0)
                            {
                                trayIcon.Version = 4;
                            }
                            else if ((NIF.XP_MASK & nicData.uFlags) != 0)
                            {
                                trayIcon.Version = 3;
                            }

                            if (nicData.uVersion > 0 && nicData.uVersion <= 4)
                            {
                                trayIcon.Version = nicData.uVersion;
                            }

                            if ((NIF.MESSAGE & nicData.uFlags) != 0)
                            {
                                trayIcon.CallbackMessage = nicData.uCallbackMessage;
                            }

                            if (!exists)
                            {
                                // default placement to a menu bar like rect
                                trayIcon.Placement = defaultPlacement;

                                // set pinned item properties
                                trayIcon.Path = Shell.GetPathForHandle(trayIcon.HWnd);
                                trayIcon.SetPinValues();

                                if (trayIcon.Icon == null)
                                {
                                    trayIcon.Icon = Common.IconImageConverter.GetDefaultIcon();
                                }

                                TrayIcons.Add(trayIcon);
                                CairoLogger.Instance.Debug("Added tray icon: " + trayIcon.Title + " path: " + Shell.GetPathForHandle(trayIcon.HWnd) + " GUID: " + trayIcon.GUID + " UID: " + trayIcon.UID);

                                if ((NIM)message == NIM.NIM_MODIFY)
                                {
                                    // return an error to the notifyicon as we received a modify for an icon we did not yet have
                                    return(false);
                                }
                            }
                            else
                            {
                                CairoLogger.Instance.Debug("Modified tray icon: " + trayIcon.Title);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        CairoLogger.Instance.Error("Unable to modify the icon in the collection.", ex);
                    }
                }
                else if ((NIM)message == NIM.NIM_DELETE)
                {
                    try
                    {
                        if (!TrayIcons.Contains(trayIcon))
                        {
                            // Nothing to remove.
                            return(false);
                        }

                        TrayIcons.Remove(trayIcon);

                        CairoLogger.Instance.Debug("Removed tray icon: " + nicData.szTip);
                    }
                    catch (Exception ex)
                    {
                        CairoLogger.Instance.Error("Unable to remove the icon from the collection.", ex);
                    }
                }
                else if ((NIM)message == NIM.NIM_SETVERSION)
                {
                    foreach (NotifyIcon ti in TrayIcons)
                    {
                        if ((nicData.guidItem != Guid.Empty && nicData.guidItem == ti.GUID) || (ti.HWnd == (IntPtr)nicData.hWnd && ti.UID == nicData.uID))
                        {
                            ti.Version = nicData.uVersion;
                            CairoLogger.Instance.Debug("Modified version to " + ti.Version + " on tray icon: " + ti.Title);
                            break;
                        }
                    }
                }
            }
            return(true);
        }
Beispiel #14
0
 protected abstract void SetIcon(TrayIcons icon);
Beispiel #15
0
 protected static Pixbuf GetIcon(TrayIcons icon)
 {
     if (!_images.ContainsKey(icon))
     {
         switch(icon)
         {
         case TrayIcons.Paused:
             _images[icon] = ImageToPixbuf(ImageLoader.TrayNormalPause.ToBitmap());
             break;
         case TrayIcons.Running:
             _images[icon] = ImageToPixbuf(ImageLoader.TrayWorking.ToBitmap());
             break;
         case TrayIcons.IdleError:
             _images[icon] = ImageToPixbuf(ImageLoader.TrayNormalError.ToBitmap());
             break;
         case TrayIcons.RunningError:
             _images[icon] = ImageToPixbuf(ImageLoader.TrayWorking.ToBitmap());
             break;
         case TrayIcons.PausedError:
             _images[icon] = ImageToPixbuf(ImageLoader.TrayNormalPause.ToBitmap());
             break;
         case TrayIcons.Idle:
         default:
             _images[icon] = ImageToPixbuf(ImageLoader.TrayNormal.ToBitmap());
             break;
         }
     }
     
     return _images[icon];
 }
 public static void SetIcons(AvaloniaObject o, TrayIcons trayIcons) => o.SetValue(IconsProperty, trayIcons);
Beispiel #17
0
 protected override void SetIcon(TrayIcons icon)
 {
     m_statusItem.Image = GetIcon(icon);
 }
Beispiel #18
0
        protected void OnStatusUpdated(IServerStatus status)
        {
            this.UpdateUIState(() => {
                switch(status.SuggestedStatusIcon)
                {
                    case SuggestedStatusIcon.Active:
                        Icon = TrayIcons.Running;
                        break;
                    case SuggestedStatusIcon.ActivePaused:
                        Icon = TrayIcons.Paused;
                        break;
                    case SuggestedStatusIcon.ReadyError:
                        Icon = TrayIcons.IdleError;
                        break;
                    case SuggestedStatusIcon.ReadyWarning:
                        Icon = TrayIcons.IdleError;
                        break;
                    case SuggestedStatusIcon.Paused:
                        Icon = TrayIcons.Paused;
                        break;
                    case SuggestedStatusIcon.Ready:
                    default:
                        Icon = TrayIcons.Idle;
                        break;

                }

                if (status.ProgramState == LiveControlState.Running)
                {
                    m_pauseMenu.Icon = MenuIcons.Pause;
                    m_pauseMenu.Text = "Pause";
                    m_stateIsPaused = false;
                }
                else
                {
                    m_pauseMenu.Icon = MenuIcons.Resume;
                    m_pauseMenu.Text = "Resume";
                    m_stateIsPaused = true;
                }
            });
        }
Beispiel #19
0
 protected override void SetIcon(TrayIcons icon)
 {
     m_lastIcon = icon;
     m_toRumps.WriteNoWait(JsonConvert.SerializeObject(new { Action = "seticon", Image = GetIcon(icon) }));
 }
Beispiel #20
0
        private bool SysTrayCallback(uint message, NOTIFYICONDATA nicData)
        {
            Console.WriteLine(message + " - " + nicData.uID);

            lock (_lockObject)
            {
                TrayIcon trayIcon;
                switch ((NIM)message)
                {
                case NIM.NIM_ADD:
                    trayIcon     = new TrayIcon((IntPtr)nicData.hWnd);
                    trayIcon.UID = (uint)nicData.uID;

                    // Ensure the icon doesn't already exist.
                    if (TrayIcons.Contains(trayIcon))
                    {
                        return(false);
                    }

                    // Add the icon.
                    trayIcon.Title = nicData.szTip;
                    try
                    {
                        trayIcon.Icon = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon((IntPtr)nicData.hIcon, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                    }
                    catch
                    {
                        trayIcon.Icon = null;
                    }
                    trayIcon.HWnd            = (IntPtr)nicData.hWnd;
                    trayIcon.UID             = (uint)nicData.uID;
                    trayIcon.CallbackMessage = (uint)nicData.uCallbackMessage;

                    TrayIcon old = TrayIcons.FirstOrDefault(i => i.HWnd == (IntPtr)nicData.hWnd);
                    if (old != null)
                    {
                        TrayIcons.Remove(old);
                    }
                    TrayIcons.Add(trayIcon);
                    break;

                case NIM.NIM_DELETE:
                    try
                    {
                        TrayIcon oldTrayIcon = TrayIcons.FirstOrDefault(i => i.HWnd == (IntPtr)nicData.hWnd);
                        if (oldTrayIcon != null)
                        {
                            TrayIcons.Remove(oldTrayIcon);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Unable to remove the icon from the collection. Error: " + ex.ToString());
                    }
                    break;

                case NIM.NIM_MODIFY:
                    try
                    {
                        trayIcon = TrayIcons.Single(i => i.HWnd == (IntPtr)nicData.hWnd);
                        if (trayIcon == null)
                        {
                            break;
                        }
                        trayIcon.Title           = nicData.szTip;
                        trayIcon.Icon            = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon((IntPtr)nicData.hIcon, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                        trayIcon.HWnd            = (IntPtr)nicData.hWnd;
                        trayIcon.UID             = (uint)nicData.uID;
                        trayIcon.CallbackMessage = (uint)nicData.uCallbackMessage;
                        TrayIcons.Remove(trayIcon);
                        TrayIcons.Add(trayIcon);
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Unable to modify the icon in the collection. Error: " + ex.ToString());
                    }

                    break;
                }
            }
            return(true);
        }