Source code for camelot.view.art
# ============================================================================
#
# Copyright (C) 2007-2013 Conceptive Engineering bvba. All rights reserved.
# www.conceptive.be / info@conceptive.be
#
# This file is part of the Camelot Library.
#
# This file may be used under the terms of the GNU General Public
# License version 2.0 as published by the Free Software Foundation
# and appearing in the file license.txt included in the packaging of
# this file. Please review this information to ensure GNU
# General Public Licensing requirements will be met.
#
# If you are unsure which license is appropriate for your use, please
# visit www.python-camelot.com or contact info@conceptive.be
#
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
# For use of this library in commercial applications, please contact
# info@conceptive.be
#
# ============================================================================
"""Manages icons and artworks"""
import os
import logging
logger = logging.getLogger('camelot.view.art')
from PyQt4 import QtGui
def file_(name):
from camelot.core.resources import resource_filename
import camelot
return resource_filename(camelot.__name__, 'art/%s'%name)
def read(fname):
import camelot
from camelot.core.resources import resource_string
return resource_string(
camelot.__name__,
'art/%s' % fname,
)
[docs]class Pixmap(object):
"""Load pixmaps from the camelot art library"""
def __init__(self, path, module=None):
""":param path: the path of the pixmap relative to the art directory, use
'/' as a path separator
:param module: the module that contains the art directory, if None is given
this will be camelot"""
self._path = path
self._cached_pixmap = None
if not module:
import camelot
self._module_name = camelot.__name__
else:
self._module_name = module.__name__
def __unicode__(self):
return self._path
def __repr__(self):
return self.__class__.__name__ + "('" + self._path + "')"
[docs] def fullpath(self):
"""Obsolete : avoid this method, since it will copy the resource file
from its package and copy it to a temp folder if the resource is
packaged."""
from camelot.core.resources import resource_filename
pth = resource_filename(self._module_name, 'art/%s'%(self._path))
if os.path.exists(pth):
return pth
else:
return ''
[docs] def getQPixmap(self):
"""QPixmaps can only be used in the gui thread"""
if self._cached_pixmap:
return self._cached_pixmap
from camelot.core.resources import resource_string
from PyQt4.QtGui import QPixmap
qpm = QPixmap()
p = os.path.join('art', self._path)
try:
# For some reason this throws a unicode error if the path contains an accent (cf windows username)
# this happens only here, not for icons further on in the application
# so they see no splash screen, tant pis
r = resource_string(self._module_name, p)
qpm.loadFromData(r)
except Exception, e:
logger.warn(u'Could not load pixmap "%s" from module: %s, encountered exception' % (p, self._module_name), exc_info=e)
self._cached_pixmap = qpm
return qpm
[docs]class Icon(Pixmap):
"""Manages paths to the icons images"""
[docs] def getQIcon(self):
"""QPixmaps can only be used in the gui thread"""
from PyQt4.QtGui import QIcon
return QIcon(self.getQPixmap())
[docs]class ColorScheme(object):
"""The default color scheme for camelot, based on the Tango icon set
see http://tango.freedesktop.org/Generic_Icon_Theme_Guidelines
"""
yellow = QtGui.QColor('#ffff00')
yellow_0 = yellow
yellow_1 = QtGui.QColor('#fce94f')
yellow_2 = QtGui.QColor('#edd400')
yellow_3 = QtGui.QColor('#c4a000')
orange_1 = QtGui.QColor('#fcaf3e')
orange_2 = QtGui.QColor('#f57900')
orange_3 = QtGui.QColor('#cd5c00')
brown_1 = QtGui.QColor('#e9b96e')
brown_2 = QtGui.QColor('#c17d11')
brown_3 = QtGui.QColor('#8f5902')
red = QtGui.QColor('#ff0000')
red_0 = red
red_1 = QtGui.QColor('#ef2929')
red_2 = QtGui.QColor('#cc0000')
red_3 = QtGui.QColor('#a40000')
blue = QtGui.QColor('#0000ff')
blue_0 = blue
blue_1 = QtGui.QColor('#000080')
green = QtGui.QColor('#00ff00')
green_0 = green
cyan = QtGui.QColor('#00ffff')
cyan_0 = cyan
cyan_1 = QtGui.QColor('#008080')
magenta = QtGui.QColor('#ff00ff')
magenta_0 = magenta
magenta_1 = QtGui.QColor('#800080')
pink_1 = QtGui.QColor('#f16c6c')
pink_2 = QtGui.QColor('#f13c3c')
aluminium_0 = QtGui.QColor('#eeeeec')
aluminium_1 = QtGui.QColor('#d3d7cf')
aluminium_2 = QtGui.QColor('#babdb6')
aluminium = aluminium_0
grey_0 = QtGui.QColor('#eeeeee')
grey_1 = QtGui.QColor('#cccccc')
grey_2 = QtGui.QColor('#333333')
grey_3 = QtGui.QColor('#666666')
grey_4 = QtGui.QColor('#999999')
grey = grey_0
VALIDATION_ERROR = red_1
NOTIFICATION = yellow_1
"""
for consistency with QT:
Qt::white 3 White (#ffffff)
Qt::black 2 Black (#000000)
Qt::red 7 Red (#ff0000)
Qt::darkRed 13 Dark red (#800000)
Qt::green 8 Green (#00ff00)
Qt::darkGreen 14 Dark green (#008000)
Qt::blue 9 Blue (#0000ff)
Qt::darkBlue 15 Dark blue ()
Qt::cyan 10 Cyan (#00ffff)
Qt::darkCyan 16 Dark cyan (#008080)
Qt::magenta 11 Magenta (#ff00ff)
Qt::darkMagenta 17 Dark magenta (#800080)
Qt::yellow 12 Yellow (#ffff00)
Qt::darkYellow 18 Dark yellow (#808000)
Qt::gray 5 Gray (#a0a0a4)
Qt::darkGray 4 Dark gray (#808080)
Qt::lightGray 6 Light gray (#c0c0c0)
Qt::transparent 19 a transparent black value (i.e., QColor(0, 0, 0, 0))
Qt::color0 0 0 pixel value (for bitmaps)
Qt::color1 1 1 pixel value (for bitmaps)
"""