Tizen 2.1 base
[platform/upstream/hplip.git] / ui4 / aligndialog.py
1 # -*- coding: utf-8 -*-
2 #
3 # (c) Copyright 2001-2008 Hewlett-Packard Development Company, L.P.
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18 #
19 # Authors: Don Welch, Naga Samrat Chowdary Narla,
20 #
21
22 # StdLib
23 import operator
24
25 # Local
26 from base.g import *
27 from base import device, utils, maint, status
28 #from prnt import cups
29 from base.codes import *
30 from ui_utils import *
31
32 # Qt
33 from PyQt4.QtCore import *
34 from PyQt4.QtGui import *
35
36 # Ui
37 from aligndialog_base import Ui_Dialog
38
39 PAGE_START = 0
40 PAGE_LOAD_PAPER = 1
41 PAGE_EDGE = 2
42 PAGE_ALIGNMENT_NUMBER = 3
43 PAGE_COLOR_ADJ = 4 # types 4, 5 & 7
44 PAGE_LBOW = 5 # types 10 & 11
45 PAGE_AIO = 6 # Place on scanner, ...
46 PAGE_FRONT_PANEL = 7 # Use front panel menu
47
48 BUTTON_ALIGN = 0
49 BUTTON_NEXT = 1
50 BUTTON_FINISH = 2
51
52 ALIGN_TYPE_INITIAL = 1000
53 ALIGN_TYPE_TEST = 1001
54
55 # xBow offset types
56 ALIGN_TYPE_XBOW_OFFSET = 100
57 ALIGN_TYPE_XBOW_BLACK_ONLY = ALIGN_TYPE_XBOW_OFFSET + AGENT_CONFIG_BLACK_ONLY
58 ALIGN_TYPE_XBOW_PHOTO_ONLY = ALIGN_TYPE_XBOW_OFFSET + AGENT_CONFIG_PHOTO_ONLY
59 ALIGN_TYPE_XBOW_COLOR_ONLY =  ALIGN_TYPE_XBOW_OFFSET + AGENT_CONFIG_COLOR_ONLY
60 ALIGN_TYPE_XBOW_COLOR_AND_BLACK =  ALIGN_TYPE_XBOW_OFFSET + AGENT_CONFIG_COLOR_AND_BLACK
61 ALIGN_TYPE_XBOW_COLOR_AND_PHOTO = ALIGN_TYPE_XBOW_OFFSET + AGENT_CONFIG_COLOR_AND_PHOTO
62
63
64 def true():
65     return True
66
67
68 class AlignDialog(QDialog, Ui_Dialog):
69     def __init__(self, parent, device_uri):
70         QDialog.__init__(self, parent)
71         self.device_uri = device_uri
72         self.mq = {}
73         self.step_max = 0
74         self.align_type = ALIGN_TYPE_INITIAL
75         self.step = 1
76         self.a, self.b, self.c, self.d, self.zca = 0, 0, 0, 0, 0
77         self.e, self.f, self.g = 0, 0, 0
78         self.num_inks = 0 # type 8
79         self.pattern = 0 # type 10
80         self.values = [] # type 10
81         self.abort = False
82         self.seq_index = 0
83
84         self.max_steps = {
85             ALIGN_TYPE_UNSUPPORTED : 1,
86             ALIGN_TYPE_AUTO : 2,
87             ALIGN_TYPE_9XX : 7,
88             ALIGN_TYPE_8XX : 7,
89             ALIGN_TYPE_LIDIL_0_3_8 : 0,
90             ALIGN_TYPE_LIDIL_0_4_3 : 0,
91             ALIGN_TYPE_LIDIL_AIO : 3,
92             ALIGN_TYPE_LIDIL_VIP : 0,
93             ALIGN_TYPE_DESKJET_450 : 0,
94             ALIGN_TYPE_9XX_NO_EDGE_ALIGN : 6,
95             ALIGN_TYPE_LBOW : 0,
96             ALIGN_TYPE_LIDIL_0_5_4 : 0,
97             ALIGN_TYPE_OJ_PRO : 0,
98             ALIGN_TYPE_TEST : 0,
99             ALIGN_TYPE_AIO : 3,
100             ALIGN_TYPE_LIDIL_DJ_D1600: 0,
101             ALIGN_TYPE_LEDM: 0,
102             ALIGN_TYPE_LEDM_MANUAL: 0,
103             ALIGN_TYPE_LEDM_FF_CC_0: 0,
104             }
105
106         self.seq = { # (func|method, tuple of params|None)
107             ALIGN_TYPE_TEST : [ # testing only
108                                (self.showColorAdjustPage, ('F', 21)),
109                                (self.endColorAdjustPage, ('F',)),
110                                (self.showColorAdjustPage, ('G', 11)),
111                                (self.endColorAdjustPage, ('G',)),
112                                (self.close, None),
113                             ],
114
115             ALIGN_TYPE_INITIAL : [ # (used when starting up and align-type isn't known)
116                                (self.showStartPage, None),
117                                (self.endStartPage, None), # switch to a valid align-type here
118                             ],
119
120             ALIGN_TYPE_UNSUPPORTED : [ # -1
121                                 (self.showFrontPanelPage, None),
122                                 (self.endFronPanelPage, None),
123                                 (self.close, None),
124                             ],
125
126 #            ALIGN_TYPE_NONE : [ # 0
127 #                               (self.close, None)
128 #                            ],
129
130             ALIGN_TYPE_AUTO : [ # 1
131                                (self.showLoadPaperPage, None),
132                                (maint.AlignType1PML, (lambda : self.dev, lambda: true)),
133                                (self.closeAll, None),
134                                (self.close, None),
135                             ],
136
137             ALIGN_TYPE_8XX : [ # 2
138                                 (self.checkType2PenConfig, None),
139                                 (self.showLoadPaperPage, None),
140                                 (maint.alignType2Phase1, (lambda: self.dev,)),
141                                 (self.showAlignmentNumberPage, ('A', 'h', 'kc', 2, 11)),
142                                 (self.endAlignmentNumberPage, ('A',)),
143                                 (self.showAlignmentNumberPage, ('B', 'v', 'kc', 2, 11)),
144                                 (self.endAlignmentNumberPage, ('B',)),
145                                 (self.showAlignmentNumberPage, ('C', 'v', 'kc', 2, 5)),
146                                 (self.endAlignmentNumberPage, ('C',)),
147                                 (self.showAlignmentNumberPage, ('D', 'v', 'c', 2, 5)),
148                                 (self.endAlignmentNumberPage, ('D',)),
149                                 (self.setAlignButton, (BUTTON_ALIGN,)),
150                                 (self.showLoadPaperPage, (lambda: True,)),
151                                 (maint.alignType2Phase2, (lambda: self.dev, lambda: self.a, lambda: self.b,
152                                                           lambda: self.c, lambda: self.d)),
153                                 (self.close, None),
154                               ],
155
156             ALIGN_TYPE_9XX : [  # 3
157                                 (self.showLoadPaperPage, None),
158                                 (self.showAlignmentNumberPage, ('A', 'h', 'kc', 2, 11)),
159                                 (self.endAlignmentNumberPage, ('A',)),
160                                 (self.showAlignmentNumberPage, ('B', 'v', 'kc', 2, 11)),
161                                 (self.endAlignmentNumberPage, ('B',)),
162                                 (self.showAlignmentNumberPage, ('C', 'v', 'k', 2, 11)),
163                                 (self.endAlignmentNumberPage, ('C',)),
164                                 (self.setAlignButton, (BUTTON_ALIGN,)),
165                                 (self.showAlignmentNumberPage, ('D', 'v', 'kc', 2, 11)),
166                                 (self.endAlignmentNumberPage, ('D',)),
167                                 (maint.alignType3Phase2, (lambda: self.dev, lambda: self.a, lambda: self.b,
168                                                           lambda: self.c, lambda: self.d)),
169                                 (maint.alignType3Phase3, (lambda: self.dev,)),
170                                 (self.showPageEdgePage, None),
171                                 (self.endPageEdgePage, None),
172                                 (maint.alignType3Phase4, (lambda: self.dev, lambda: self.zca)),
173                                 (self.close, None),
174                              ],
175
176             ALIGN_TYPE_LIDIL_0_3_8 : [ # 4
177                                 (self.showLoadPaperPage, None),
178                                 (self.setPenConfig, None),
179                                 (maint.alignType4Phase1, (lambda: self.dev,)),
180                                 (self.setXBow, None),
181                                 # switches to offset align_type here
182                             ],
183
184             ALIGN_TYPE_LIDIL_0_4_3 : [ # 5
185                                 (self.showLoadPaperPage, None),
186                                 (self.setPenConfig, None),
187                                 (maint.alignType5Phase1, (lambda: self.dev,)),
188                                 (self.showPageEdgePage, ('A',)),
189                                 (self.endPageEdgePage, None),
190                                 (self.setXBow, None),
191                                 # switches to offset align_type here
192                             ],
193
194             ALIGN_TYPE_LIDIL_VIP : [ # 7
195                                 (self.showLoadPaperPage, None),
196                                 (self.setPenConfig, None),
197                                 (maint.alignType7Phase1, (lambda: self.dev,)),
198                                 (self.showPageEdgePage, ('A',)),
199                                 (self.endPageEdgePage, None),
200                                 (self.setXBow, None),
201                                 # switches to offset align_type here (next 5 types)
202                             ],
203
204             # xBow offset alignment type
205             ALIGN_TYPE_XBOW_BLACK_ONLY : [ # 4, 5 & 7
206                             (self.showAlignmentNumberPage, ('B', 'v', 'k', 2, 11)),
207                             (self.endAlignmentNumberPage, ('B',)),
208                             (self.setXBowValues, None),
209                             (self.close, None),
210                             ],
211
212             # xBow offset alignment type
213             ALIGN_TYPE_XBOW_PHOTO_ONLY : [ # 4, 5 & 7
214                             (self.showAlignmentNumberPage, ('B', 'v', 'k', 2, 11)),
215                             (self.endAlignmentNumberPage, ('B',)),
216                             (self.setXBowValues, None),
217                             (self.close, None),
218                             ],
219
220             # xBow offset alignment type
221             ALIGN_TYPE_XBOW_COLOR_ONLY : [ # 4, 5 & 7
222                             (self.showAlignmentNumberPage, ('B', 'v', 'kc', 2, 11)),
223                             (self.endAlignmentNumberPage, ('B',)),
224                             (self.setXBowValues, None),
225                             (self.close, None),
226                             ],
227
228             # xBow offset alignment type
229             ALIGN_TYPE_XBOW_COLOR_AND_BLACK : [ # 4, 5 & 7
230                             (self.showAlignmentNumberPage, ('B', 'h', 'kc', 2, 17)),
231                             (self.endAlignmentNumberPage, ('B',)),
232                             (self.showAlignmentNumberPage, ('C', 'v', 'kc', 2, 17)),
233                             (self.endAlignmentNumberPage, ('C',)),
234                             (self.showAlignmentNumberPage, ('D', 'v', 'k', 2, 11)),
235                             (self.endAlignmentNumberPage, ('D',)),
236                             (self.showAlignmentNumberPage, ('E', 'v', 'kc', 2, 11)),
237                             (self.endAlignmentNumberPage, ('E',)),
238                             (self.setXBowValues, None),
239                             (self.close, None),
240                             ],
241
242             # xBow offset alignment type
243             ALIGN_TYPE_XBOW_COLOR_AND_PHOTO : [ # 4, 5 & 7
244                             (self.showAlignmentNumberPage, ('B', 'h', 'kc', 2, 17)),
245                             (self.endAlignmentNumberPage, ('B',)),
246                             (self.showAlignmentNumberPage, ('C', 'v', 'kc', 2, 17)),
247                             (self.endAlignmentNumberPage, ('C',)),
248                             (self.showAlignmentNumberPage, ('D', 'v', 'k', 2, 11)),
249                             (self.endAlignmentNumberPage, ('D',)),
250                             (self.showAlignmentNumberPage, ('E', 'v', 'kc', 2, 11)),
251                             (self.endAlignmentNumberPage, ('E',)),
252                             (self.showColorAdjustPage, ('F', 21)),
253                             (self.endColorAdjustPage, ('F',)),
254                             (self.showColorAdjustPage, ('G', 21)),
255                             (self.endColorAdjustPage, ('G',)),
256                             (self.setXBowValues, None),
257                             (self.close, None),
258                             ],
259
260             ALIGN_TYPE_LIDIL_AIO : [ # 6 (semi-auto)
261                                 (self.showLoadPaperPage, None),
262                                 (maint.alignType6Phase1, (lambda: self.dev,)),
263                                 (self.setAlignButton, (BUTTON_FINISH,)),
264                                 (self.showAioPage, None),
265                                 (self.close, None),
266                             ],
267
268             ALIGN_TYPE_DESKJET_450 : [ # 8
269                                 (self.showLoadPaperPage, None),
270                                 (self.alignType8Phase1, None), # sets num_inks
271                                 (self.showAlignmentNumberPage, ('A', 'v', 'k', 3, 9)),
272                                 (self.endAlignmentNumberPage, ('A',)),
273                                 (self.showAlignmentNumberPage, ('B', 'v', 'c', 3, 9)),
274                                 (self.endAlignmentNumberPage, ('B',)),
275                                 (self.showAlignmentNumberPage, ('C', 'v', 'kc', 3, 9)),
276                                 (self.endAlignmentNumberPage, ('C',)),
277                                 (self.setAlignButton, (BUTTON_ALIGN,)),
278                                 (self.showAlignmentNumberPage, ('D', 'h', 'kc', 3, 9)),
279                                 (self.endAlignmentNumberPage, ('D',)),
280                                 (maint.alignType3Phase2, (lambda: self.dev, lambda: self.num_inks, lambda: self.a,
281                                                           lambda: self.b, lambda: self.c, lambda: self.d)),
282                                 (self.close, None),
283                             ],
284
285             ALIGN_TYPE_9XX_NO_EDGE_ALIGN : [  # 9
286                                 (self.showLoadPaperPage, None),
287                                 (self.showAlignmentNumberPage, ('A', 'h', 'kc', 2, 11)),
288                                 (self.endAlignmentNumberPage, ('A',)),
289                                 (self.showAlignmentNumberPage, ('B', 'v', 'kc', 2, 11)),
290                                 (self.endAlignmentNumberPage, ('B',)),
291                                 (self.showAlignmentNumberPage, ('C', 'v', 'k', 2, 11)),
292                                 (self.endAlignmentNumberPage, ('C',)),
293                                 (self.setAlignButton, (BUTTON_ALIGN,)),
294                                 (self.showAlignmentNumberPage, ('D', 'v', 'kc', 2, 11)),
295                                 (self.endAlignmentNumberPage, ('D',)),
296                                 (maint.alignType3Phase2, (lambda: self.dev, lambda: self.a, lambda: self.b,
297                                                           lambda: self.c, lambda: self.d)),
298                                 (self.close, None),
299                             ],
300
301             ALIGN_TYPE_LBOW : [ # 10
302                                (self.showLoadPaperPage, None),
303                                (maint.alignType10Phase1, (lambda: self.dev,)),
304                                (self.setAlignButton, (BUTTON_ALIGN,)),
305                                (self.showLBowPage, (lambda: self.pattern,)),
306                                (self.endLBowPage, None), # sets values
307                                (maint.alignType10Phase2, (lambda: self.dev, lambda: self.values,
308                                                           lambda: self.pattern)),
309                                (self.setAlignButton, (BUTTON_FINISH,)),
310                                (self.showLoadPaperPage, (lambda: True,)),
311                                (maint.alignType10Phase3, (lambda: self.dev,)),
312                                (self.close, None),
313                             ],
314
315             ALIGN_TYPE_LIDIL_0_5_4 : [ # 11
316                                (self.showLoadPaperPage, None),
317                                (maint.alignType11Phase1, (lambda: self.dev,)),
318                                (self.setAlignButton, (BUTTON_ALIGN,)),
319                                (self.showLBowPage, (lambda: self.pattern,)),
320                                (self.endLBowPage, None), # sets values
321                                (maint.alignType11Phase2, (lambda: self.dev, lambda: self.values,
322                                                           lambda: self.pattern, lambda: self.dev.pen_config)),
323                                (self.setAlignButton, (BUTTON_FINISH,)),
324                                (self.showLoadPaperPage, (lambda: True,)),
325                                (maint.alignType11Phase3, (lambda: self.dev,)),
326                                (self.close, None),
327                             ],
328
329             ALIGN_TYPE_OJ_PRO : [ # 12
330                                 (self.showLoadPaperPage, None),
331                                 (maint.AlignType12, (lambda : self.dev, lambda: true)),
332                                 (self.close, None),
333                             ],
334
335             ALIGN_TYPE_AIO : [ #13
336                               (self.showLoadPaperPage, None),
337                               (maint.alignType13Phase1, (lambda: self.dev,)),
338                               (self.setAlignButton, (BUTTON_FINISH,)),
339                               (self.showAioPage, None),
340                               (self.close, None),
341                             ],
342
343             ALIGN_TYPE_LIDIL_DJ_D1600 : [ # 14
344                                (self.showLoadPaperPage, None),
345                                (maint.alignType14Phase1, (lambda: self.dev,)),
346                                (self.setAlignButton, (BUTTON_ALIGN,)),
347                                (self.showLBowPage, (lambda: self.pattern,)),
348                                (self.endLBowPage, None), # sets values
349                                (maint.alignType14Phase2, (lambda: self.dev, lambda: self.values,
350                                                           lambda: self.pattern, lambda: self.dev.pen_config)),
351                                (self.setAlignButton, (BUTTON_FINISH,)),
352                                (self.showLoadPaperPage, (lambda: True,)),
353                                (maint.alignType14Phase3, (lambda: self.dev,)),
354                                (self.close, None),
355                             ],
356
357             ALIGN_TYPE_LEDM : [ # 15
358                                (self.showLoadPaperPage, None),
359                                (maint.AlignType15Phase1, (lambda : self.dev, lambda: self.showAioPage)),
360                                (self.close, None),
361                             ],
362
363             ALIGN_TYPE_LEDM_MANUAL : [ # 16
364                                (self.showLoadPaperPage, None),
365                                (maint.AlignType15Phase1, (lambda : self.dev, lambda: true)),
366                                (self.showAlignmentNumberPage, ('A', 'v', 'kc', 3, 23)),
367                                (self.endAlignmentNumberPage, ('A',)),
368                                (self.showAlignmentNumberPage, ('B', 'h', 'kc', 3, 11)),
369                                (self.endAlignmentNumberPage, ('B',)),
370                                (self.showAlignmentNumberPage, ('C', 'v', 'k', 3, 23)),
371                                (self.endAlignmentNumberPage, ('C',)),
372                                (self.showAlignmentNumberPage, ('D', 'v', 'c', 3, 23)),
373                                (self.endAlignmentNumberPage, ('D',)),
374                                (self.showAlignmentNumberPage, ('E', 'h', 'k', 3, 11)),
375                                (self.endAlignmentNumberPage, ('E',)),
376                                (self.showAlignmentNumberPage, ('F', 'h', 'k', 3, 11)),
377                                (self.endAlignmentNumberPage, ('F',)),
378                                (self.showAlignmentNumberPage, ('G', 'h', 'k', 3, 11)),
379                                (self.endAlignmentNumberPage, ('G',)),
380                                (self.showAlignmentNumberPage, ('H', 'v', 'k', 3, 9)),
381                                (self.endAlignmentNumberPage, ('H',)),
382                                (self.showAlignmentNumberPage, ('I', 'v', 'c', 3, 9)),
383                                (self.endAlignmentNumberPage, ('I',)),
384                                (maint.AlignType16Phase1, (lambda: self.dev, lambda: self.a, lambda: self.b,
385                                                           lambda: self.c, lambda: self.d, lambda: self.e,
386                                                           lambda: self.f, lambda: self.g, lambda: self.h,
387                                                           lambda: self.i)),
388                                (self.close, None),
389                             ],
390            ALIGN_TYPE_LEDM_FF_CC_0 : [ # 17
391                                (self.showLoadPaperPage, None),
392                                (maint.AlignType17Phase1, (lambda : self.dev, lambda: self.showAioPage)),
393                                (self.close, None),
394                             ],
395             }
396
397         self.setupUi(self)
398         self.initUi()
399
400         QTimer.singleShot(0, self.nextSequence)
401
402
403     def initUi(self):
404         # connect signals/slots
405         self.connect(self.CancelButton, SIGNAL("clicked()"), self.CancelButton_clicked)
406         self.connect(self.NextButton, SIGNAL("clicked()"), self.NextButton_clicked)
407         #self.connect(self.BackButton, SIGNAL("clicked()"), self.BackButton_clicked)
408         self.connect(self.DeviceComboBox, SIGNAL("DeviceUriComboBox_noDevices"), self.DeviceUriComboBox_noDevices)
409         self.connect(self.DeviceComboBox, SIGNAL("DeviceUriComboBox_currentChanged"), self.DeviceUriComboBox_currentChanged)
410         self.DeviceComboBox.setFilter({'align-type': (operator.gt, 0)})
411
412         # Application icon
413         self.setWindowIcon(QIcon(load_pixmap('hp_logo', '128x128')))
414
415         if self.device_uri:
416             self.DeviceComboBox.setInitialDevice(self.device_uri)
417
418
419     def DeviceUriComboBox_noDevices(self):
420         FailureUI(self, self.__tr("<b>No devices that support print cartridge alignment found.</b><p>Click <i>OK</i> to exit.</p>"))
421         self.close()
422
423
424     def DeviceUriComboBox_currentChanged(self, device_uri):
425         self.device_uri = device_uri
426
427
428     def CancelButton_clicked(self):
429         self.close()
430
431
432     def NextButton_clicked(self):
433         self.nextSequence()
434
435
436     def nextSequence(self):
437         while True:
438             try:
439                 seq, params = self.seq[self.align_type][self.seq_index]
440             except IndexError:
441                 break
442
443             if seq is None:
444                 self.seq_index += 1
445                 continue
446
447             self.new_page = False
448
449             t = []
450             if params is not None:
451                 for p in params:
452                     try:
453                         t.append(p())
454                     except:
455                         t.append(p)
456
457             try:
458                 log.debug("%s(%s)" % (seq.func_name, ','.join([repr(x) for x in t])))
459             except AttributeError:
460                 pass
461
462             try:
463                 seq(*t)
464             except Error:
465                 CheckDeviceUI(self)
466                 break
467
468             self.seq_index += 1
469
470             if self.new_page:
471                 break
472
473             if self.abort:
474                 self.close()
475
476
477
478     def showStartPage(self):
479 #       self.BackButton.setEnabled(False)
480         num_devices = self.DeviceComboBox.setDevices()
481
482         if num_devices == 1:
483             self.skipPage()
484             return
485
486         self.DeviceComboBox.updateUi()
487         self.displayPage(PAGE_START)
488
489
490     def endStartPage(self):
491         self.mq = device.queryModelByURI(self.device_uri)
492         self.align_type = self.mq.get('align-type', ALIGN_TYPE_NONE)
493         self.seq_index = -1
494
495         #self.align_type = ALIGN_TYPE_TEST# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
496
497         log.debug("align-type=%d" % self.align_type)
498         self.step_max = self.max_steps[self.align_type]
499
500         try:
501             self.dev = device.Device(self.device_uri)
502         except Error:
503             CheckDeviceUI(self)
504             return
505
506
507     def showLoadPaperPage(self, finish=False):
508         if finish:
509             self.LoadPaper.button_name = self.__tr("Finish >")
510         self.LoadPaper.updateUi()
511         self.displayPage(PAGE_LOAD_PAPER)
512
513
514     def endLoadPaperPage(self):
515         pass
516
517
518     def showAlignmentNumberPage(self, line_id, orientation, colors, line_count, choice_count):
519         # line_id: 'A', 'B', etc.
520         # orientation: 'v' or 'h'
521         # colors: 'k' or 'c' or 'kc'
522         # line_count: 2 or 3
523         # choice_count: 5, 7, 9, 11, etc. (odd)
524         self.AlignmentNumberTitle.setText(self.__tr("From the printed Alignment page, Choose the set of lines in group %1 where the line segments are <b>best</b> aligned.").arg(line_id))
525         self.AlignmentNumberIcon.setPixmap(load_pixmap('%s-%s-%d' % (orientation, colors, line_count), 'other'))
526         self.AlignmentNumberComboBox.clear()
527
528         for x in range(choice_count):
529             self.AlignmentNumberComboBox.addItem(QString("%1%2").arg(line_id).arg(x+1))
530
531         self.displayPage(PAGE_ALIGNMENT_NUMBER)
532         return
533
534
535     def endAlignmentNumberPage(self, line_id):
536         v = int(str(self.AlignmentNumberComboBox.currentText())[1:])
537
538         if line_id == 'A':
539             self.a = v
540             log.debug("A=%d" % v)
541
542         elif line_id == 'B':
543             self.b = v
544             log.debug("B=%d" % v)
545
546         elif line_id == 'C':
547             self.c = v
548             log.debug("C=%d" % v)
549
550         elif line_id == 'D':
551             self.d = v
552             log.debug("D=%d" % v)
553
554         elif line_id == 'E':
555             self.e = v
556             log.debug("E=%d" % v)
557
558         elif line_id == 'F':
559             self.f = v
560             log.debug("F=%d" % v)
561
562         elif line_id == 'G':
563             self.g = v
564             log.debug("G=%d" % v)
565
566         elif line_id == 'H':
567             self.h = v
568             log.debug("H=%d" % v)
569
570         elif line_id == 'I':
571             self.i = v
572             log.debug("I=%d" % v)
573
574     def showPageEdgePage(self, prefix=None, count=13):
575         self.PageEdgeTitle.setText(self.__tr("Choose the <b>numbered arrow</b> that <b>best </b>marks the edge of the paper."))
576         self.PageEdgeIcon.setPixmap(load_pixmap('zca.png', 'other'))
577
578         self.PageEdgeComboBox.clear()
579         for x in range(count):
580             if prefix is None:
581                 self.PageEdgeComboBox.addItem(QString("%1").arg(x+1))
582             else:
583                 self.PageEdgeComboBox.addItem(QString("%1%2").arg(prefix).arg(x+1)) # for xBow
584
585         self.displayPage(PAGE_EDGE)
586
587
588     def endPageEdgePage(self):
589         v = int(str(self.PageEdgeComboBox.currentText())[1:])
590         self.zca = v
591         log.debug("ZCA=%d" % v)
592
593
594     def showLBowPage(self, pattern):
595         self.LBowIcon.setPixmap(load_pixmap('align10', 'other'))
596
597         if self.align_type == ALIGN_TYPE_LBOW:
598             pattern = maint.alignType10SetPattern(self.dev)
599
600         elif self.align_type == ALIGN_TYPE_LIDIL_DJ_D1600:
601             pattern = maint.alignType14SetPattern(self.dev)
602
603         else: # ALIGN_TYPE_LIDIL_0_5_4
604             pattern = maint.alignType11SetPattern(self.dev)
605
606         if pattern is None:
607             log.error("Invalid pattern!")
608             # TODO: ...
609
610         self.controls = maint.align10and11and14Controls(pattern, self.align_type)
611         keys = self.controls.keys()
612         keys.sort()
613         max_line = 'A'
614         for line in keys:
615             if self.controls[line][0]:
616                 max_line = line
617             else:
618                 break
619
620         self.LBowTitle.setText(self.__tr("For each row A - %1, select the label representing the box in which in the inner lines are the <b>least</b> visible.").arg(max_line))
621
622         for line in self.controls:
623             if not self.controls[line][0]:
624                 eval('self.%sComboBox.setEnabled(False)' % line.lower())
625             else:
626                 for x in range(self.controls[line][1]):
627                     eval('self.%sComboBox.addItem("%s%d")' % (line.lower(), line, x + 1))
628
629         self.displayPage(PAGE_LBOW)
630
631
632
633     def endLBowPage(self):
634         self.values = []
635         controls = self.controls.keys()
636         controls.sort()
637
638         for line in controls:
639             if not self.controls[line][0]:
640                 self.values.append(0)
641             else:
642                 exec('selected = unicode(self.%sComboBox.currentText())' % line.lower())
643                 try:
644                     selected = int(selected[1:])
645                 except ValueError:
646                     selected = 0
647
648                 self.values.append(selected)
649
650
651     def showAioPage(self):
652         self.AioIcon.setPixmap(load_pixmap('aio_align', 'other'))
653         self.displayPage(PAGE_AIO)
654
655
656     def endAioPage(self):
657         pass
658
659
660     def showColorAdjustPage(self, line_id, count=21):
661         self.ColorAdjustComboBox.clear()
662         self.ColorAdjustIcon.setPixmap(load_pixmap('color_adj', 'other'))
663         self.ColorAdjustLabel.setText(self.__tr("Line %1:").arg(line_id))
664
665         for x in range(count):
666             self.ColorAdjustComboBox.addItem(QString("%1%2").arg(line_id).arg(x+1))
667
668         self.displayPage(PAGE_COLOR_ADJ)
669
670
671     def endColorAdjustPage(self, line_id):
672         v = int(str(self.ColorAdjustComboBox.currentText())[1:])
673
674         if line_id == 'F':
675             self.f = v
676             log.debug("F=%d" % v)
677
678         elif line_id == 'G':
679             self.g = v
680             log.debug("G=%d" % v)
681
682
683     def showFrontPanelPage(self):
684 #       self.BackButton.setEnabled(False)
685         self.setAlignButton(BUTTON_FINISH)
686         self.displayPage(PAGE_FRONT_PANEL)
687
688
689     def endFronPanelPage(self):
690         pass
691
692     #
693     #  ALIGN-TYPE SPECIFIC
694     #
695
696     def checkType2PenConfig(self):
697         pass
698         # TODO: set abort if problem
699
700
701     def alignType8Phase1(self):
702         self.num_inks = maint.alignType8Phase1(self.dev)
703
704
705     def setXBow(self):
706         # TODO: set abort if invalid pen config
707         self.real_align_type = self.align_type
708         self.align_type = ALIGN_TYPE_XBOW_OFFSET + self.dev.pen_config
709         self.seq_index = -1
710
711
712     def setXBowValues(self):
713         if self.real_align_type ==  ALIGN_TYPE_LIDIL_0_3_8:
714             maint.alignType4Phase2(self.dev, self.zca, self.b, self.c, self.d, self.e)
715             maint.alignType4Phase3(self.dev)
716
717         elif self.real_align_type == ALIGN_TYPE_LIDIL_0_4_3:
718             maint.alignType5Phase2(self.dev, self.zca, self.b, self.c, self.d, self.e, self.f, self.g)
719             maint.alignType5Phase3(self.dev)
720
721         elif self.real_align_type == ALIGN_TYPE_LIDIL_VIP:
722             maint.alignType7Phase2(self.dev, self.zca, self.b, self.c, self.d, self.e, self.f, self.g)
723             maint.alignType7Phase3(self.dev)
724
725
726     #
727     # Misc
728     #
729
730     def displayPage(self, page):
731         self.updateStepText(self.step)
732         self.step += 1
733         self.new_page = True
734         self.StackedWidget.setCurrentIndex(page)
735
736
737     def skipPage(self):
738         self.step += 1
739         self.new_page = False
740
741
742     def updateStepText(self, p=None):
743         if p is None or not self.step_max:
744             self.StepText.setText(QString(""))
745         else:
746             self.StepText.setText(self.__tr("Step %1 of %2").arg(p).arg(self.step_max))
747
748
749     def setAlignButton(self, typ=BUTTON_ALIGN):
750         if typ == BUTTON_ALIGN:
751             self.NextButton.setText(self.__tr("Align"))
752         elif typ == BUTTON_NEXT:
753             self.NextButton.setText(self.__tr("Next >"))
754         elif typ == BUTTON_FINISH:
755             self.NextButton.setText(self.__tr("Finish"))
756
757
758     def setPenConfig(self):
759         self.dev.pen_config = status.getPenConfiguration(self.dev.getStatusFromDeviceID())
760
761
762     def closeAll(self):
763         if self.dev is not None:
764             self.dev.close()
765
766
767     def __tr(self,s,c = None):
768         return qApp.translate("AlignDialog",s,c)