~ubuntu-branches/debian/experimental/spyder/experimental

« back to all changes in this revision

Viewing changes to spyderlib/widgets/colors.py

  • Committer: Package Import Robot
  • Author(s): Picca Frédéric-Emmanuel
  • Date: 2013-01-20 12:19:54 UTC
  • mfrom: (1.1.16)
  • Revision ID: package-import@ubuntu.com-20130120121954-1jt1xa924bshhvh0
Tags: 2.2.0~beta1+dfsg-2
fix typo ipython-qtconsol -> ipython-qtconsole

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: utf-8 -*-
2
 
 
3
 
from spyderlib.qt.QtGui import (QLineEdit, QIcon, QHBoxLayout, QColor,
4
 
                                QPushButton, QColorDialog, QPixmap)
5
 
from spyderlib.qt.QtCore import SIGNAL, QSize, Slot, Property
6
 
 
7
 
 
8
 
class ColorButton(QPushButton):
9
 
    """
10
 
    Color choosing push button
11
 
    """
12
 
    __pyqtSignals__ = ("colorChanged(QColor)",)
13
 
    
14
 
    def __init__(self, parent=None):
15
 
        QPushButton.__init__(self, parent)
16
 
        self.setFixedSize(20, 20)
17
 
        self.setIconSize(QSize(12, 12))
18
 
        self.connect(self, SIGNAL("clicked()"), self.choose_color)
19
 
        self._color = QColor()
20
 
    
21
 
    def choose_color(self):
22
 
        color = QColorDialog.getColor(self._color, self.parentWidget(),
23
 
                                      'Select Color',
24
 
                                      QColorDialog.ShowAlphaChannel)
25
 
        if color.isValid():
26
 
            self.set_color(color)
27
 
    
28
 
    def get_color(self):
29
 
        return self._color
30
 
    
31
 
    @Slot(QColor)
32
 
    def set_color(self, color):
33
 
        if color != self._color:
34
 
            self._color = color
35
 
            self.emit(SIGNAL("colorChanged(QColor)"), self._color)
36
 
            pixmap = QPixmap(self.iconSize())
37
 
            pixmap.fill(color)
38
 
            self.setIcon(QIcon(pixmap))
39
 
    
40
 
    color = Property("QColor", get_color, set_color)
41
 
 
42
 
 
43
 
def text_to_qcolor(text):
44
 
    """
45
 
    Create a QColor from specified string
46
 
    Avoid warning from Qt when an invalid QColor is instantiated
47
 
    """
48
 
    color = QColor()
49
 
    text = str(text)
50
 
    if not isinstance(text, (unicode, str)):
51
 
        return color
52
 
    if text.startswith('#') and len(text)==7:
53
 
        correct = '#0123456789abcdef'
54
 
        for char in text:
55
 
            if char.lower() not in correct:
56
 
                return color
57
 
    elif text not in list(QColor.colorNames()):
58
 
        return color
59
 
    color.setNamedColor(text)
60
 
    return color
61
 
 
62
 
 
63
 
class ColorLayout(QHBoxLayout):
64
 
    """Color-specialized QLineEdit layout"""
65
 
    def __init__(self, color, parent=None):
66
 
        QHBoxLayout.__init__(self)
67
 
        assert isinstance(color, QColor)
68
 
        self.lineedit = QLineEdit(color.name(), parent)
69
 
        self.connect(self.lineedit, SIGNAL("textChanged(QString)"),
70
 
                     self.update_color)
71
 
        self.addWidget(self.lineedit)
72
 
        self.colorbtn = ColorButton(parent)
73
 
        self.colorbtn.color = color
74
 
        self.connect(self.colorbtn, SIGNAL("colorChanged(QColor)"),
75
 
                     self.update_text)
76
 
        self.addWidget(self.colorbtn)
77
 
 
78
 
    def update_color(self, text):
79
 
        color = text_to_qcolor(text)
80
 
        if color.isValid():
81
 
            self.colorbtn.color = color
82
 
 
83
 
    def update_text(self, color):
84
 
        self.lineedit.setText(color.name())
85
 
        
86
 
    def text(self):
87
 
        return self.lineedit.text()
 
1
# -*- coding: utf-8 -*-
 
2
 
 
3
from spyderlib.qt.QtGui import (QLineEdit, QIcon, QHBoxLayout, QColor,
 
4
                                QPushButton, QColorDialog, QPixmap)
 
5
from spyderlib.qt.QtCore import SIGNAL, QSize, Slot, Property
 
6
 
 
7
 
 
8
class ColorButton(QPushButton):
 
9
    """
 
10
    Color choosing push button
 
11
    """
 
12
    __pyqtSignals__ = ("colorChanged(QColor)",)
 
13
    
 
14
    def __init__(self, parent=None):
 
15
        QPushButton.__init__(self, parent)
 
16
        self.setFixedSize(20, 20)
 
17
        self.setIconSize(QSize(12, 12))
 
18
        self.connect(self, SIGNAL("clicked()"), self.choose_color)
 
19
        self._color = QColor()
 
20
    
 
21
    def choose_color(self):
 
22
        color = QColorDialog.getColor(self._color, self.parentWidget(),
 
23
                                      'Select Color',
 
24
                                      QColorDialog.ShowAlphaChannel)
 
25
        if color.isValid():
 
26
            self.set_color(color)
 
27
    
 
28
    def get_color(self):
 
29
        return self._color
 
30
    
 
31
    @Slot(QColor)
 
32
    def set_color(self, color):
 
33
        if color != self._color:
 
34
            self._color = color
 
35
            self.emit(SIGNAL("colorChanged(QColor)"), self._color)
 
36
            pixmap = QPixmap(self.iconSize())
 
37
            pixmap.fill(color)
 
38
            self.setIcon(QIcon(pixmap))
 
39
    
 
40
    color = Property("QColor", get_color, set_color)
 
41
 
 
42
 
 
43
def text_to_qcolor(text):
 
44
    """
 
45
    Create a QColor from specified string
 
46
    Avoid warning from Qt when an invalid QColor is instantiated
 
47
    """
 
48
    color = QColor()
 
49
    text = str(text)
 
50
    if not isinstance(text, (unicode, str)):
 
51
        return color
 
52
    if text.startswith('#') and len(text)==7:
 
53
        correct = '#0123456789abcdef'
 
54
        for char in text:
 
55
            if char.lower() not in correct:
 
56
                return color
 
57
    elif text not in list(QColor.colorNames()):
 
58
        return color
 
59
    color.setNamedColor(text)
 
60
    return color
 
61
 
 
62
 
 
63
class ColorLayout(QHBoxLayout):
 
64
    """Color-specialized QLineEdit layout"""
 
65
    def __init__(self, color, parent=None):
 
66
        QHBoxLayout.__init__(self)
 
67
        assert isinstance(color, QColor)
 
68
        self.lineedit = QLineEdit(color.name(), parent)
 
69
        self.connect(self.lineedit, SIGNAL("textChanged(QString)"),
 
70
                     self.update_color)
 
71
        self.addWidget(self.lineedit)
 
72
        self.colorbtn = ColorButton(parent)
 
73
        self.colorbtn.color = color
 
74
        self.connect(self.colorbtn, SIGNAL("colorChanged(QColor)"),
 
75
                     self.update_text)
 
76
        self.addWidget(self.colorbtn)
 
77
 
 
78
    def update_color(self, text):
 
79
        color = text_to_qcolor(text)
 
80
        if color.isValid():
 
81
            self.colorbtn.color = color
 
82
 
 
83
    def update_text(self, color):
 
84
        self.lineedit.setText(color.name())
 
85
        
 
86
    def text(self):
 
87
        return self.lineedit.text()