~ubuntu-branches/ubuntu/karmic/eric/karmic

« back to all changes in this revision

Viewing changes to eric/Wizards/QRegExpWizard/QRegExpWizardCharactersDialog.py

  • Committer: Bazaar Package Importer
  • Author(s): Scott Kitterman
  • Date: 2008-01-28 18:02:25 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20080128180225-6nrox6yrworh2c4v
Tags: 4.0.4-1ubuntu1
* Add python-qt3 to build-depends becuase that's where Ubuntu puts 
  pyqtconfig
* Change maintainer to MOTU

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
Module implementing a dialog for entering character classes.
8
8
"""
9
9
 
10
 
from qt import *
11
 
from QRegExpWizardCharactersForm import QRegExpWizardCharactersForm
12
 
 
13
 
 
14
 
class QRegExpWizardCharactersDialog(QRegExpWizardCharactersForm):
 
10
from PyQt4.QtCore import *
 
11
from PyQt4.QtGui import *
 
12
 
 
13
from Ui_QRegExpWizardCharactersDialog import Ui_QRegExpWizardCharactersDialog
 
14
 
 
15
 
 
16
class QRegExpWizardCharactersDialog(QDialog, Ui_QRegExpWizardCharactersDialog):
15
17
    """
16
18
    Module implementing a dialog for entering character classes.
17
19
    """
32
34
        
33
35
        @param parent parent widget (QWidget)
34
36
        """
35
 
        QRegExpWizardCharactersForm.__init__(self,parent)
 
37
        QDialog.__init__(self,parent)
 
38
        self.setupUi(self)
36
39
        
37
40
        self.comboItems = QStringList()
38
41
        self.comboItems.append(self.trUtf8("Normal character"))
51
54
        self.octValidator = QRegExpValidator(QRegExp("[0-3]?[0-7]{0,2}"), self)
52
55
        
53
56
        # generate dialog part for single characters
54
 
        self.singlesBox.setColumnLayout(0,Qt.Vertical)
55
 
        self.singlesBox.layout().setSpacing(6)
56
 
        self.singlesBox.layout().setMargin(6)
57
 
        singlesBoxLayout = QVBoxLayout(self.singlesBox.layout())
58
 
        self.singlesView = QScrollView(self.singlesBox, "singlesView")
59
 
        singlesBoxLayout.addWidget(self.singlesView)
 
57
        self.singlesBoxLayout = QVBoxLayout(self.singlesBox)
 
58
        self.singlesBoxLayout.setObjectName("singlesBoxLayout")
 
59
        self.singlesBoxLayout.setSpacing(6)
 
60
        self.singlesBoxLayout.setMargin(6)
 
61
        self.singlesBox.setLayout(self.singlesBoxLayout)
 
62
        self.singlesView = QScrollArea(self.singlesBox)
 
63
        self.singlesView.setObjectName("singlesView")
 
64
        self.singlesBoxLayout.addWidget(self.singlesView)
60
65
        
61
 
        self.singlesItemsBox = QVBox(self.singlesView.viewport(), "singlesItemsBox")
62
 
        self.singlesItemsBox.setMargin(6)
63
 
        self.singlesItemsBox.setSpacing(6)
 
66
        self.singlesItemsBox = QWidget(self)
 
67
        self.singlesView.setWidget(self.singlesItemsBox)
 
68
        self.singlesItemsBox.setObjectName("singlesItemsBox")
 
69
        self.singlesItemsBoxLayout = QVBoxLayout(self.singlesItemsBox)
 
70
        self.singlesItemsBoxLayout.setMargin(6)
 
71
        self.singlesItemsBoxLayout.setSpacing(6)
 
72
        self.singlesItemsBox.setLayout(self.singlesItemsBoxLayout)
64
73
        self.singlesEntries = []
65
 
        self.addSinglesLine()
 
74
        self.__addSinglesLine()
66
75
        
67
 
        hlayout0 = QHBoxLayout(self.singlesBox, 0, 6, "hlayout0")
 
76
        hlayout0 = QHBoxLayout()
 
77
        hlayout0.setMargin(0)
 
78
        hlayout0.setSpacing(6)
 
79
        hlayout0.setObjectName("hlayout0")
68
80
        self.moreSinglesButton = QPushButton(self.trUtf8("Additional Entries"),
69
 
            self.singlesBox, "moreSinglesButton")
 
81
            self.singlesBox)
 
82
        self.moreSinglesButton.setObjectName("moreSinglesButton")
70
83
        hlayout0.addWidget(self.moreSinglesButton)
71
84
        hspacer0 = QSpacerItem(30,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
72
85
        hlayout0.addItem(hspacer0)
73
 
        singlesBoxLayout.addLayout(hlayout0)
74
 
        self.connect(self.moreSinglesButton, SIGNAL("clicked()"), self.addSinglesLine)
 
86
        self.singlesBoxLayout.addLayout(hlayout0)
 
87
        self.connect(self.moreSinglesButton, SIGNAL("clicked()"), self.__addSinglesLine)
75
88
        
76
89
        # generate dialog part for character ranges
77
 
        self.rangesBox.setColumnLayout(0,Qt.Vertical)
78
 
        self.rangesBox.layout().setSpacing(6)
79
 
        self.rangesBox.layout().setMargin(6)
80
 
        rangesBoxLayout = QVBoxLayout(self.rangesBox.layout())
81
 
        self.rangesView = QScrollView(self.rangesBox, "rangesView")
82
 
        rangesBoxLayout.addWidget(self.rangesView)
 
90
        self.rangesBoxLayout = QVBoxLayout(self.rangesBox)
 
91
        self.rangesBoxLayout.setObjectName("rangesBoxLayout")
 
92
        self.rangesBoxLayout.setSpacing(6)
 
93
        self.rangesBoxLayout.setMargin(6)
 
94
        self.rangesBox.setLayout(self.rangesBoxLayout)
 
95
        self.rangesView = QScrollArea(self.rangesBox)
 
96
        self.rangesView.setObjectName("rangesView")
 
97
        self.rangesBoxLayout.addWidget(self.rangesView)
83
98
        
84
 
        self.rangesItemsBox = QVBox(self.rangesView.viewport(), "rangesItemBox")
85
 
        self.rangesItemsBox.setMargin(6)
86
 
        self.rangesItemsBox.setSpacing(6)
 
99
        self.rangesItemsBox = QWidget(self)
 
100
        self.rangesView.setWidget(self.rangesItemsBox)
 
101
        self.rangesItemsBox.setObjectName("rangesItemsBox")
 
102
        self.rangesItemsBoxLayout = QVBoxLayout(self.rangesItemsBox)
 
103
        self.rangesItemsBoxLayout.setMargin(6)
 
104
        self.rangesItemsBoxLayout.setSpacing(6)
 
105
        self.rangesItemsBox.setLayout(self.rangesItemsBoxLayout)
87
106
        self.rangesEntries = []
88
 
        self.addRangesLine()
 
107
        self.__addRangesLine()
89
108
        
90
 
        hlayout1 = QHBoxLayout(self.rangesBox, 0, 6, "hlayout1")
 
109
        hlayout1 = QHBoxLayout()
 
110
        hlayout1.setMargin(0)
 
111
        hlayout1.setSpacing(6)
 
112
        hlayout1.setObjectName("hlayout1")
91
113
        self.moreRangesButton = QPushButton(self.trUtf8("Additional Entries"),
92
 
            self.rangesBox, "moreRangesButton")
 
114
            self.rangesBox)
 
115
        self.moreSinglesButton.setObjectName("moreRangesButton")
93
116
        hlayout1.addWidget(self.moreRangesButton)
94
117
        hspacer1 = QSpacerItem(30,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
95
118
        hlayout1.addItem(hspacer1)
96
 
        rangesBoxLayout.addLayout(hlayout1)
97
 
        self.connect(self.moreRangesButton, SIGNAL("clicked()"), self.addRangesLine)
 
119
        self.rangesBoxLayout.addLayout(hlayout1)
 
120
        self.connect(self.moreRangesButton, SIGNAL("clicked()"), self.__addRangesLine)
98
121
        
99
 
    def addSinglesLine(self):
 
122
    def __addSinglesLine(self):
100
123
        """
101
124
        Private slot to add a line of entry widgets for single characters.
102
125
        """
103
 
        hbox = QHBox(self.singlesItemsBox)
104
 
        hbox.setMargin(0)
105
 
        hbox.setSpacing(6)
106
 
        cb1 = QComboBox(0, hbox)
107
 
        cb1.insertStringList(self.comboItems)
 
126
        hbox = QWidget(self.singlesItemsBox)
 
127
        hboxLayout = QHBoxLayout(hbox)
 
128
        hboxLayout.setMargin(0)
 
129
        hboxLayout.setSpacing(6)
 
130
        hbox.setLayout(hboxLayout)
 
131
        cb1 = QComboBox(hbox)
 
132
        cb1.setEditable(False)
 
133
        cb1.addItems(self.comboItems)
 
134
        hboxLayout.addWidget(cb1)
108
135
        le1 = QLineEdit(hbox)
109
136
        le1.setValidator(self.charValidator)
110
 
        cb2 = QComboBox(0, hbox)
111
 
        cb2.insertStringList(self.comboItems)
 
137
        hboxLayout.addWidget(le1)
 
138
        cb2 = QComboBox(hbox)
 
139
        cb2.setEditable(False)
 
140
        cb2.addItems(self.comboItems)
 
141
        hboxLayout.addWidget(cb2)
112
142
        le2 = QLineEdit(hbox)
113
143
        le2.setValidator(self.charValidator)
 
144
        hboxLayout.addWidget(le2)
 
145
        self.singlesItemsBoxLayout.addWidget(hbox)
114
146
        
115
 
        self.connect(cb1, SIGNAL('activated(int)'), self.handleSinglesCharTypeSelected)
116
 
        self.connect(cb2, SIGNAL('activated(int)'), self.handleSinglesCharTypeSelected)
 
147
        self.connect(cb1, SIGNAL('activated(int)'), self.__singlesCharTypeSelected)
 
148
        self.connect(cb2, SIGNAL('activated(int)'), self.__singlesCharTypeSelected)
117
149
        hbox.show()
118
150
        
119
151
        self.singlesItemsBox.adjustSize()
120
 
        self.singlesView.resizeContents(self.singlesItemsBox.width(),
121
 
            self.singlesItemsBox.height())
122
152
        
123
153
        self.singlesEntries.append([cb1, le1])
124
154
        self.singlesEntries.append([cb2, le2])
125
155
        
126
 
    def addRangesLine(self):
 
156
    def __addRangesLine(self):
127
157
        """
128
158
        Private slot to add a line of entry widgets for character ranges.
129
159
        """
130
 
        hbox = QHBox(self.rangesItemsBox)
131
 
        hbox.setMargin(0)
132
 
        hbox.setSpacing(6)
 
160
        hbox = QWidget(self.rangesItemsBox)
 
161
        hboxLayout = QHBoxLayout(hbox)
 
162
        hboxLayout.setMargin(0)
 
163
        hboxLayout.setSpacing(6)
 
164
        hbox.setLayout(hboxLayout)
133
165
        l1 = QLabel(self.trUtf8("Between:"), hbox)
134
 
        cb1 = QComboBox(0, hbox)
135
 
        cb1.insertStringList(self.comboItems)
 
166
        hboxLayout.addWidget(l1)
 
167
        cb1 = QComboBox(hbox)
 
168
        cb1.setEditable(False)
 
169
        cb1.addItems(self.comboItems)
 
170
        hboxLayout.addWidget(cb1)
136
171
        le1 = QLineEdit(hbox)
137
172
        le1.setValidator(self.charValidator)
 
173
        hboxLayout.addWidget(le1)
138
174
        l2 = QLabel(self.trUtf8("And:"), hbox)
139
 
        cb2 = QComboBox(0, hbox)
140
 
        cb2.insertStringList(self.comboItems)
 
175
        hboxLayout.addWidget(l2)
 
176
        cb2 = QComboBox(hbox)
 
177
        cb2.setEditable(False)
 
178
        cb2.addItems(self.comboItems)
 
179
        hboxLayout.addWidget(cb2)
141
180
        le2 = QLineEdit(hbox)
142
181
        le2.setValidator(self.charValidator)
 
182
        hboxLayout.addWidget(le2)
 
183
        self.rangesItemsBoxLayout.addWidget(hbox)
143
184
        
144
 
        self.connect(cb1, SIGNAL('activated(int)'), self.handleRangesCharTypeSelected)
145
 
        self.connect(cb2, SIGNAL('activated(int)'), self.handleRangesCharTypeSelected)
 
185
        self.connect(cb1, SIGNAL('activated(int)'), self.__rangesCharTypeSelected)
 
186
        self.connect(cb2, SIGNAL('activated(int)'), self.__rangesCharTypeSelected)
146
187
        hbox.show()
147
188
        
148
189
        self.rangesItemsBox.adjustSize()
149
 
        self.rangesView.resizeContents(self.rangesItemsBox.width(),
150
 
            self.rangesItemsBox.height())
151
190
        
152
191
        self.rangesEntries.append([cb1, le1, cb2, le2])
153
192
        
154
 
    def performSelectedAction(self, index, lineedit):
 
193
    def __performSelectedAction(self, index, lineedit):
155
194
        """
156
195
        Private method performing some actions depending on the input.
157
196
        
159
198
        @param lineedit line edit widget to act on (QLineEdit)
160
199
        """
161
200
        if index < 3:
162
 
            lineedit.setEnabled(1)
 
201
            lineedit.setEnabled(True)
163
202
            if index == 0:
164
203
                lineedit.setValidator(self.charValidator)
165
204
            elif index == 1:
167
206
            elif index == 2:
168
207
                lineedit.setValidator(self.octValidator)
169
208
        elif index > 3:
170
 
            lineedit.setEnabled(0)
 
209
            lineedit.setEnabled(False)
171
210
        lineedit.clear()
172
211
        
173
 
    def handleSinglesCharTypeSelected(self, index):
 
212
    def __singlesCharTypeSelected(self, index):
174
213
        """
175
214
        Private slot to handle the activated(int) signal of the single chars combo boxes.
176
215
        
179
218
        combo = self.sender()
180
219
        for entriesList in self.singlesEntries:
181
220
            if combo == entriesList[0]:
182
 
                self.performSelectedAction(index, entriesList[1])
 
221
                self.__performSelectedAction(index, entriesList[1])
183
222
        
184
 
    def handleRangesCharTypeSelected(self, index):
 
223
    def __rangesCharTypeSelected(self, index):
185
224
        """
186
225
        Private slot to handle the activated(int) signal of the char ranges combo boxes.
187
226
        
190
229
        combo = self.sender()
191
230
        for entriesList in self.rangesEntries:
192
231
            if combo == entriesList[0]:
193
 
                self.performSelectedAction(index, entriesList[1])
 
232
                self.__performSelectedAction(index, entriesList[1])
194
233
            elif combo == entriesList[2]:
195
 
                self.performSelectedAction(index, entriesList[3])
 
234
                self.__performSelectedAction(index, entriesList[3])
196
235
        
197
 
    def formatCharacter(self, index, char):
 
236
    def __formatCharacter(self, index, char):
198
237
        """
199
238
        Private method to format the characters entered into the dialog.
200
239
        
242
281
            
243
282
        # single characters
244
283
        for entrieslist in self.singlesEntries:
245
 
            index = entrieslist[0].currentItem()
 
284
            index = entrieslist[0].currentIndex()
246
285
            char = unicode(entrieslist[1].text())
247
 
            regexp += self.formatCharacter(index, char)
 
286
            regexp += self.__formatCharacter(index, char)
248
287
        
249
288
        # character ranges
250
289
        for entrieslist in self.rangesEntries:
251
290
            if entrieslist[1].text().isEmpty() or \
252
291
               entrieslist[3].text().isEmpty():
253
292
                continue
254
 
            index = entrieslist[0].currentItem()
 
293
            index = entrieslist[0].currentIndex()
255
294
            char = unicode(entrieslist[1].text())
256
 
            regexp += "%s-" % self.formatCharacter(index, char)
257
 
            index = entrieslist[2].currentItem()
 
295
            regexp += "%s-" % self.__formatCharacter(index, char)
 
296
            index = entrieslist[2].currentIndex()
258
297
            char = unicode(entrieslist[3].text())
259
 
            regexp += self.formatCharacter(index, char)
 
298
            regexp += self.__formatCharacter(index, char)
260
299
        
261
300
        if regexp:
262
301
            if len(regexp) == 2 and regexp in self.predefinedClasses: