summaryrefslogtreecommitdiff
path: root/examples/icons.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/icons.py')
-rw-r--r--examples/icons.py102
1 files changed, 86 insertions, 16 deletions
diff --git a/examples/icons.py b/examples/icons.py
index a6f0ada..673ca6f 100644
--- a/examples/icons.py
+++ b/examples/icons.py
@@ -2,7 +2,7 @@
# coding: utf-8
# /*##########################################################################
#
-# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
+# Copyright (c) 2016-2018 European Synchrotron Radiation Facility
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -24,12 +24,52 @@
#
# ###########################################################################*/
"""
-Display available project icons using Qt.
+Display icons available in silx.
"""
+
import functools
+import os.path
from silx.gui import qt
import silx.gui.icons
+import silx.resources
+
+
+class AnimatedToolButton(qt.QToolButton):
+ """ToolButton which support animated icons"""
+
+ def __init__(self, parent=None):
+ super(AnimatedToolButton, self).__init__(parent)
+ self.__animatedIcon = None
+
+ def setIcon(self, icon):
+ if isinstance(icon, silx.gui.icons.AbstractAnimatedIcon):
+ self._setAnimatedIcon(icon)
+ else:
+ self._setAnimatedIcon(None)
+ super(AnimatedToolButton, self).setIcon(icon)
+
+ def _setAnimatedIcon(self, icon):
+ if self.__animatedIcon is not None:
+ self.__animatedIcon.unregister(self)
+ self.__animatedIcon.iconChanged.disconnect(self.__updateIcon)
+ self.__animatedIcon = icon
+ if self.__animatedIcon is not None:
+ self.__animatedIcon.register(self)
+ self.__animatedIcon.iconChanged.connect(self.__updateIcon)
+ i = self.__animatedIcon.currentIcon()
+ else:
+ i = qt.QIcon()
+ super(AnimatedToolButton, self).setIcon(i)
+
+ def __updateIcon(self, icon):
+ super(AnimatedToolButton, self).setIcon(icon)
+
+ def icon(self):
+ if self.__animatedIcon is not None:
+ return self.__animatedIcon
+ else:
+ return super(AnimatedToolButton, self).icon()
class IconPreview(qt.QMainWindow):
@@ -66,6 +106,28 @@ class IconPreview(qt.QMainWindow):
button.setChecked(True)
return panel
+ def getAllAvailableIcons(self):
+ def isAnIcon(name):
+ if silx.resources.is_dir("gui/icons/" + name):
+ return False
+ _, ext = os.path.splitext(name)
+ return ext in [".svg", ".png"]
+ icons = silx.resources.list_dir("gui/icons")
+ # filter out sub-directories
+ icons = filter(isAnIcon, icons)
+ # remove extension
+ icons = [i.split(".")[0] for i in icons]
+ # remove duplicated names
+ icons = set(icons)
+ # sort by names
+ return icons
+
+ def getAllAvailableAnimatedIcons(self):
+ icons = silx.resources.list_dir("gui/icons")
+ icons = filter(lambda x: silx.resources.exists("gui/icons/%s/00.png" % x), icons)
+ icons = filter(lambda x: not silx.resources.is_dir("gui/icons/%s/00.png" % x), icons)
+ return icons
+
def createIconPanel(self, parent):
panel = qt.QWidget(parent)
layout = qt.QGridLayout()
@@ -74,25 +136,33 @@ class IconPreview(qt.QMainWindow):
self.tools = []
- import silx.resources
-
- icons = silx.resources.list_dir("gui/icons")
- # filter out sub-directories
- icons = filter(lambda x: not silx.resources.is_dir("gui/icons/" + x), icons)
- # remove extension
- icons = [i.split(".")[0] for i in icons]
- # remove duplicated names
- icons = set(icons)
- # sort by names
+ # Sort together animated and non animated icons
+ fix_icons = self.getAllAvailableIcons()
+ animated_icons = self.getAllAvailableAnimatedIcons()
+ icons = []
+ icons.extend([(i, "_") for i in fix_icons])
+ icons.extend([(i, "anim") for i in animated_icons])
icons = sorted(icons)
- for i, icon_name in enumerate(icons):
+ for i, icon_info in enumerate(icons):
+ icon_name, icon_kind = icon_info
col, line = i / 10, i % 10
- icon = silx.gui.icons.getQIcon(icon_name)
- tool = qt.QToolButton(panel)
+ if icon_kind == "anim":
+ tool = AnimatedToolButton(panel)
+ try:
+ icon = silx.gui.icons.getAnimatedIcon(icon_name)
+ except ValueError:
+ icon = qt.QIcon()
+ tool.setToolTip("Animated icon '%s'" % icon_name)
+ else:
+ tool = qt.QToolButton(panel)
+ try:
+ icon = silx.gui.icons.getQIcon(icon_name)
+ except ValueError:
+ icon = qt.QIcon()
+ tool.setToolTip("Icon '%s'" % icon_name)
tool.setIcon(icon)
tool.setIconSize(qt.QSize(32, 32))
- tool.setToolTip(icon_name)
layout.addWidget(tool, col, line)
self.tools.append(tool)