// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- /* * Copyright (C) 2011 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by: Jason Smith * */ #ifndef ABSTRACTLAUNCHERICON_H #define ABSTRACTLAUNCHERICON_H #include #include #include #include #include #include #include "DndData.h" #include #include "unity-shared/Introspectable.h" #include "unity-shared/IconTextureSource.h" #include "unity-shared/WindowManager.h" #include "LauncherEntryRemote.h" namespace unity { namespace launcher { struct ActionArg { enum class Source { LAUNCHER, LAUNCHER_KEYBINDING, SWITCHER, OTHER, }; ActionArg() : source(Source::OTHER) , button(0) , timestamp(0) , target(0) , monitor(-1) {} ActionArg(Source source, int button, unsigned long timestamp = 0, Window target = 0, int monitor = -1) : source(source) , button(button) , timestamp(timestamp) , target(target) , monitor(monitor) {} Source source; int button; unsigned long timestamp; Window target; int monitor; }; class AbstractLauncherIcon : public ui::IconTextureSource, public debug::Introspectable { NUX_DECLARE_OBJECT_TYPE(AbstractLauncherIcon, ui::IconTextureSource); public: typedef nux::ObjectPtr Ptr; typedef std::vector TransformVector; typedef std::vector> MenuItemsVector; enum class IconType { NONE, BEGIN, HOME, HUD, FAVORITE, APPLICATION, EXPO, DESKTOP, PLACE, DEVICE, SPACER, TRASH, END }; enum class Quirk { VISIBLE = 0, ACTIVE, RUNNING, URGENT, PRESENTED, UNFOLDED, STARTING, SHIMMER, DESAT, GLOW, PROGRESS, PULSE_ONCE, CENTER_SAVED, LAST }; enum class Position { BEGIN, FLOATING, END }; enum class ScrollDirection { UP, DOWN }; virtual ~AbstractLauncherIcon() = default; static nux::Property icon_size; static nux::Property scroll_inactive_icons; static nux::Property minimize_window_on_click; nux::Property tooltip_text; nux::Property tooltip_enabled; nux::Property position; nux::Property removed; virtual void ShowTooltip() = 0; virtual void HideTooltip() = 0; virtual void PromptHideTooltip() = 0; virtual void SetShortcut(guint64 shortcut) = 0; virtual guint64 GetShortcut() = 0; virtual void SetSortPriority(int priority) = 0; virtual bool OpenQuicklist(bool select_first_item = false, int monitor = -1, bool restore_input_focus = false) = 0; virtual void CloseQuicklist() = 0; virtual void SetCenter(nux::Point3 const& center, int monitor) = 0; virtual void ResetCenters(int monitor = -1) = 0; virtual nux::Point3 GetCenter(int monitor) = 0; virtual nux::Point3 GetSavedCenter(int monitor) = 0; virtual void SaveCenter() = 0; virtual void Activate(ActionArg arg) = 0; virtual void OpenInstance(ActionArg arg) = 0; virtual int SortPriority() = 0; virtual void SetOrder(int order) = 0; virtual WindowList Windows() = 0; virtual WindowList WindowsForMonitor(int monitor) = 0; virtual WindowList WindowsOnViewport() = 0; virtual bool WindowVisibleOnMonitor(int monitor) const = 0; virtual bool WindowVisibleOnViewport() const = 0; virtual size_t WindowsVisibleOnMonitor(int monitor) const = 0; virtual size_t WindowsVisibleOnViewport() const = 0; virtual float PresentUrgency() = 0; virtual float GetProgress() = 0; virtual bool ShowInSwitcher(bool current) = 0; virtual bool AllowDetailViewInSwitcher() const = 0; virtual uint64_t SwitcherPriority() = 0; virtual bool GetQuirk(Quirk quirk, int monitor = -1) const = 0; virtual void SetQuirk(Quirk quirk, bool value, int monitor = -1) = 0; virtual float GetQuirkProgress(Quirk quirk, int monitor) const = 0; virtual void SetQuirkDuration(Quirk quirk, unsigned duration, int monitor = -1) = 0; virtual void SkipQuirkAnimation(Quirk quirk, int monitor = -1) = 0; virtual IconType GetIconType() const = 0; virtual std::string RemoteUri() const = 0; virtual MenuItemsVector Menus() = 0; virtual nux::DndAction QueryAcceptDrop(DndData const& dnd_data) = 0; virtual bool ShouldHighlightOnDrag(DndData const& dnd_data) = 0; virtual void AcceptDrop(DndData const& dnd_data) = 0; virtual void SendDndEnter() = 0; virtual void SendDndLeave() = 0; virtual void InsertEntryRemote(LauncherEntryRemote::Ptr const& remote) = 0; virtual void RemoveEntryRemote(LauncherEntryRemote::Ptr const& remote) = 0; virtual std::string DesktopFile() const = 0; virtual bool IsSticky() const = 0; virtual bool IsVisible() const = 0; virtual bool IsVisibleOnMonitor(int monitor) const = 0; virtual void SetVisibleOnMonitor(int monitor, bool visible) = 0; virtual void AboutToRemove() = 0; virtual void Stick(bool save = true) = 0; virtual void UnStick() = 0; static int DefaultPriority(IconType type) { return static_cast(type) * 1000; } virtual void PerformScroll(ScrollDirection direction, Time timestamp) = 0; sigc::signal mouse_down; sigc::signal mouse_up; sigc::signal mouse_click; sigc::signal mouse_enter; sigc::signal mouse_leave; sigc::signal needs_redraw; sigc::signal remove; sigc::signal> tooltip_visible; sigc::signal visibility_changed; sigc::signal windows_changed; sigc::signal quirks_changed; sigc::signal position_saved; sigc::signal position_forgot; sigc::signal uri_changed; connection::Wrapper on_icon_removed_connection; }; } } #endif // LAUNCHERICON_H