1
# -*- coding: utf-8 -*-
3
# (c) Copyright 2001-2009 Hewlett-Packard Development Company, L.P.
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.
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.
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
27
from base import device, utils, models, wifi
28
from base.codes import *
29
from ui_utils import *
32
from PyQt4.QtCore import *
33
from PyQt4.QtGui import *
36
from wifisetupdialog_base import Ui_Dialog
40
PAGE_INTRO = 0 # Ask user to plugin temp USB connection
41
PAGE_DEVICES = 1 # Select a probed USB device
42
PAGE_NETWORK = 2 # Select a discovered SSID
43
PAGE_CONFIGURE_WIFI = 3 # Configure USB device on network
44
PAGE_EXIT = 4 # Tell user if successful, unplug USB onnection
51
SUCCESS_NOT_CONNECTED = 0
59
class DeviceTableWidgetItem(QTableWidgetItem):
60
def __init__(self, text, device_uri):
61
QTableWidgetItem.__init__(self, text, QTableWidgetItem.UserType)
62
self.device_uri = device_uri
65
class WifiSetupDialog(QDialog, Ui_Dialog):
66
def __init__(self, parent, device_uri=None, standalone=True):
67
QDialog.__init__(self, parent)
70
self.device_uri = device_uri
75
self.show_extended = False
78
self.max_page = PAGE_EXIT
79
self.location_cache = {} # { 'bssid' : <location>, ... }
81
self.success = SUCCESS_NOT_CONNECTED
84
self.standalone = standalone
87
if self.device_uri is None:
88
QTimer.singleShot(0, self.showIntroPage)
90
QTimer.singleShot(0, self.showNetworkPage)
98
self.setWindowIcon(QIcon(load_pixmap('hp_logo', '128x128')))
100
# connect signals/slots
101
self.connect(self.CancelButton, SIGNAL("clicked()"), self.CancelButton_clicked)
102
self.connect(self.BackButton, SIGNAL("clicked()"), self.BackButton_clicked)
103
self.connect(self.NextButton, SIGNAL("clicked()"), self.NextButton_clicked)
106
self.initDevicesPage()
107
self.initNetworkPage()
108
self.initConfigWifiPage()
115
def initIntroPage(self):
116
self.Picture.setPixmap(load_pixmap("usb_connection", "other"))
117
self.InfoIcon.setPixmap(load_pixmap("info", "16x16"))
120
self.MainTitleLabel.setText(self.__tr("""This utility allows you configure your wireless capable printer using a temporary USB connection. You will be prompted to disconnect the USB cable once wireless network setup is complete.
122
<p><i>Note: This configuration utility does not setup (install) your printer on this computer. Use hp-setup to setup your printer after it has been configured on the network by this utility.</i></p>
123
<p><i>Note: Only select wireless capable printers are supported by this utility.</i></p>"""))
125
self.MainTitleLabel.setText(self.__tr("""This utility allows you configure your wireless capable printer using a temporary USB connection. You will be prompted to disconnect the USB cable once wireless network setup is complete.
127
<p><i>Note: Printer setup (installation) will continue after your printer is configured on the network.</i></p>
128
<p><i>Note: Only select wireless capable printers are supported by this utility.</i></p>"""))
131
def showIntroPage(self):
132
self.BackButton.setEnabled(False)
133
self.NextButton.setEnabled(True)
135
self.displayPage(PAGE_INTRO)
142
def initDevicesPage(self):
143
self.connect(self.RefreshButton, SIGNAL("clicked()"), self.RefreshButton_clicked)
146
def showDevicesPage(self):
147
self.BackButton.setEnabled(True)
148
self.setNextButton(BUTTON_NEXT)
153
log.info("Searching on USB bus...")
154
filter_dict = {'wifi-config' : (operator.gt, WIFI_CONFIG_NONE)}
156
self.devices = device.probeDevices([self.bus], 0, 0, filter_dict, self.search)
160
self.clearDevicesTable()
163
self.NextButton.setEnabled(True)
164
self.DevicesFoundIcon.setPixmap(load_pixmap('info', '16x16'))
166
if len(self.devices) == 1:
167
self.DevicesFoundLabel.setText(self.__tr("<b>1 wireless capable device found.</b> Click <i>Next</i> to continue."))
169
self.DevicesFoundLabel.setText(self.__tr("<b>%1 wireless capable devices found.</b> Select the device to install and click <i>Next</i> to continue.").arg(len(self.devices)))
171
self.loadDevicesTable()
174
self.NextButton.setEnabled(False)
175
self.DevicesFoundIcon.setPixmap(load_pixmap('error', '16x16'))
176
log.error("No devices found on bus: %s" % self.bus)
177
self.DevicesFoundLabel.setText(self.__tr("<b>No wireless capable devices found.</b><br>Plug in your printer with a USB cable and click <i>Refresh</i> to search again."))
179
self.displayPage(PAGE_DEVICES)
182
def loadDevicesTable(self):
183
self.DevicesTableWidget.setSortingEnabled(False)
184
self.DevicesTableWidget.setRowCount(len(self.devices))
186
headers = [self.__tr('Model'), self.__tr('Device URI')]
189
self.DevicesTableWidget.setColumnCount(len(headers))
190
self.DevicesTableWidget.setHorizontalHeaderLabels(headers)
191
flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled
193
for row, d in enumerate(self.devices):
194
back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(d)
195
model_ui = models.normalizeModelUIName(model)
197
i = DeviceTableWidgetItem(QString(model_ui), d)
199
self.DevicesTableWidget.setItem(row, 0, i)
201
i = QTableWidgetItem(QString(d))
203
self.DevicesTableWidget.setItem(row, device_uri_col, i)
205
self.DevicesTableWidget.resizeColumnsToContents()
206
self.DevicesTableWidget.setSortingEnabled(True)
207
self.DevicesTableWidget.sortItems(0)
208
self.DevicesTableWidget.selectRow(0)
211
def clearDevicesTable(self):
212
self.DevicesTableWidget.clear()
213
self.DevicesTableWidget.setRowCount(0)
214
self.DevicesTableWidget.setColumnCount(0)
217
def RefreshButton_clicked(self):
218
self.clearDevicesTable()
220
QTimer.singleShot(0, self.showDevicesPage)
227
def initNetworkPage(self):
228
self.NetworksTableWidget.setIconSize(QSize(34, 20))
229
self.ShowExtendedCheckBox.setChecked(False)
230
self.connect(self.ShowExtendedCheckBox, SIGNAL("clicked(bool)"), self.ShowExtendedCheckBox_clicked)
231
self.connect(self.SearchPushButton, SIGNAL("clicked()"), self.SearchPushButton_clicked)
232
self.connect(self.UndirectedRadioButton, SIGNAL("clicked(bool)"), self.UndirectedRadioButton_clicked)
233
self.connect(self.DirectedRadioButton, SIGNAL("clicked(bool)"), self.DirectedRadioButton_clicked)
234
self.connect(self.NetworksTableWidget, SIGNAL("itemSelectionChanged()"), self.NetworksTableWidget_itemSelectionChanged)
237
def showNetworkPage(self):
240
self.dev = device.Device(self.device_uri)
242
FailureUI(self, self.__tr("<b>Error opening device:</b><p>%1</p><p>(%2)</p>").arg(self.device_uri).arg(QString(e[0])))
244
if self.dev is not None:
250
self.networks.clear()
251
self.num_networks = 0
254
self.adaptor_id, name, state, presence = wifi.getWifiAdaptorID(self.dev)
259
log.debug("Adaptor ID: %s" % self.adaptor_id)
260
log.debug("Adaptor name: %s" % name)
261
log.debug("Adaptor state: %s" % state)
262
log.debug("Adaptor presence: %s" % presence)
264
if self.adaptor_id == -1:
265
FailureUI(self, self.__tr("<b>Unable to locate wireless hardware on device.</b>"))
266
if self.dev is not None:
271
log.debug("Turning on wireless radio...")
273
wifi.setAdaptorPower(self.dev, self.adaptor_id)
279
self.setNextButton(BUTTON_NEXT)
280
self.displayPage(PAGE_NETWORK)
283
def performScan(self):
287
self.ssid = unicode(self.SSIDLineEdit.text())
288
if self.directed and self.ssid:
290
self.networks = wifi.performScan(self.dev, self.ssid)
296
self.networks = wifi.performScan(self.dev)
304
self.num_networks = self.networks['numberofscanentries']
305
self.clearNetworksTable()
307
if self.num_networks:
308
self.NextButton.setEnabled(True)
309
self.NetworksFoundIcon.setPixmap(load_pixmap('info', '16x16'))
311
if self.num_networks == 1:
312
self.NetworksFoundLabel.setText(self.__tr("<b>1 wireless network found. </b> If the wireless network you would like to connect to is not listed, try entering a wireless network name and/or press <i>Search</i> to search again."))
314
self.NetworksFoundLabel.setText(self.__tr("<b>%1 wireless networks found.</b> If the wireless network you would like to connect to is not listed, try entering a wireless network name and/or press <i>Search</i> to search again.").arg(self.num_networks))
316
self.loadNetworksTable()
319
self.NextButton.setEnabled(False)
320
self.NetworksFoundIcon.setPixmap(load_pixmap('error', '16x16'))
321
log.warning("No wireless networks found.")
322
self.NetworksFoundLabel.setText(self.__tr("<b>No wireless networks found.</b><br>Enter a wireless network name and/or press <i>Search</i> to search again."))
325
def ShowExtendedCheckBox_clicked(self, b):
326
self.show_extended = b
327
self.loadNetworksTable()
330
def SearchPushButton_clicked(self):
332
self.loadNetworksTable()
335
def UndirectedRadioButton_clicked(self, b):
336
self.directed = not b
337
self.SSIDLineEdit.setEnabled(not b)
340
def DirectedRadioButton_clicked(self, b):
342
self.SSIDLineEdit.setEnabled(b)
345
def loadNetworksTable(self):
346
self.n, self.network = 0, u''
347
if self.num_networks:
350
if self.show_extended:
351
for n in xrange(self.num_networks):
352
bssid = self.networks['bssid-%d' % n]
353
ss = self.networks['signalstrength-%d' % n]
355
self.location_cache[bssid]
357
location = wifi.getLocation(bssid, ss)
358
lat = self.networks['latitude-%d' % n] = location.get('latitude', 'Unknown')
359
lng = self.networks['longitude-%d' % n] = location.get('longitude', 'Unknown')
360
address = self.networks['address-%d' % n] = location.get('address', 'Unknown')
361
self.location_cache[bssid] = (lat, lng, address)
363
self.networks['latitude-%d' % n], self.networks['longitude-%d' % n], self.networks['address-%d' % n] = \
364
self.location_cache[bssid]
366
self.NetworksTableWidget.setSortingEnabled(False)
367
self.NetworksTableWidget.setRowCount(self.num_networks)
369
headers = [self.__tr('Network Name (SSID)'), self.__tr('Signal Strength'),
370
self.__tr("Security"), self.__tr("Mode")]
372
if self.show_extended:
373
headers.extend([self.__tr('Channel'),
374
self.__tr("Address (BSSID)"), self.__tr("Location"),
375
self.__tr("Lat/Long")])
377
self.NetworksTableWidget.setColumnCount(len(headers))
378
self.NetworksTableWidget.setHorizontalHeaderLabels(headers)
379
enabled_flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled
381
for n in xrange(self.num_networks):
382
name = self.networks['ssid-%d' % n]
384
if name == '(unknown)':
387
flags = enabled_flags
389
ss = self.networks['signalstrength-%d' % n]
390
sec = self.networks['encryptiontype-%d' % n]
391
mode = self.networks['communicationmode-%d' % n]
393
log.debug("%d: Name=%s, strength=%s, security=%s, mode=%s" % #, channel=%d bssid=%s" %
394
(n, name, ss, sec, mode))
396
if self.show_extended:
397
chn = self.networks['channel-%d' % n]
398
dbm = self.networks['dbm-%d' % n]
399
bssid = self.networks['bssid-%d' % n]
400
address = self.networks['address-%d' % n]
401
lat = self.networks['latitude-%d' % n]
402
lng = self.networks['longitude-%d' % n]
404
log.debug("%d: channel=%d bssid=%s dbm=%s lat=%s long=%s address=%s" %
405
(n, chn, bssid, dbm, lat, lng, address))
407
i = QTableWidgetItem(QString(name))
408
if flags is not None: i.setFlags(flags)
409
i.setData(Qt.UserRole, QVariant(n))
410
self.NetworksTableWidget.setItem(n, 0, i)
412
pixmap = load_pixmap('signal%d' % ss, 'other')
413
if self.show_extended:
414
i = QTableWidgetItem(QIcon(pixmap), self.__tr("%1/5 (%2 dBm)").arg(ss).arg(dbm))
416
i = QTableWidgetItem(QIcon(pixmap), self.__tr("%1/5").arg(ss))
417
if flags is not None: i.setFlags(flags)
418
self.NetworksTableWidget.setItem(n, 1, i)
420
i = QTableWidgetItem(QString(sec))
421
if flags is not None: i.setFlags(flags)
422
self.NetworksTableWidget.setItem(n, 2, i)
424
i = QTableWidgetItem(QString(mode))
425
if flags is not None: i.setFlags(flags)
426
self.NetworksTableWidget.setItem(n, 3, i)
428
if self.show_extended:
429
i = QTableWidgetItem(QString(str(chn)))
430
if flags is not None: i.setFlags(flags)
431
self.NetworksTableWidget.setItem(n, 4, i)
433
i = QTableWidgetItem(QString(bssid))
434
if flags is not None: i.setFlags(flags)
435
self.NetworksTableWidget.setItem(n, 5, i)
437
i = QTableWidgetItem(QString(address))
438
if flags is not None: i.setFlags(flags)
439
self.NetworksTableWidget.setItem(n, 6, i)
441
i = QTableWidgetItem(QString("%1/%2").arg(lat).arg(lng))
442
if flags is not None: i.setFlags(flags)
443
self.NetworksTableWidget.setItem(n, 7, i)
446
self.NetworksTableWidget.resizeColumnsToContents()
447
self.NetworksTableWidget.setSortingEnabled(True)
448
self.NetworksTableWidget.sortItems(1, Qt.DescendingOrder)
449
self.NetworksTableWidget.selectRow(0)
450
self.NetworksTableWidget.emit(SIGNAL("itemSelectionChanged()"))
454
self.NextButton.setEnabled(True)
457
self.NextButton.setEnabled(False)
460
def NetworksTableWidget_itemSelectionChanged(self):
461
row = self.NetworksTableWidget.currentRow()
462
item = self.NetworksTableWidget.item(row, 0)
463
n, ok = item.data(Qt.UserRole).toInt()
465
sec = self.networks['encryptiontype-%d' % n]
466
if sec.lower() == 'none':
467
self.setNextButton(BUTTON_CONNECT)
469
self.setNextButton(BUTTON_NEXT)
472
def clearNetworksTable(self):
473
self.DevicesTableWidget.clear()
474
self.DevicesTableWidget.setRowCount(0)
475
self.DevicesTableWidget.setColumnCount(0)
478
def RefreshButton2_clicked(self):
479
self.clearNetworksTable()
481
QTimer.singleShot(0, self.showNetworkPage)
488
def initConfigWifiPage(self):
489
self.connect(self.ShowKeyCheckBox, SIGNAL("toggled(bool)"), self.ShowKeyCheckBox_toggled)
492
def showConfigWifiPage(self):
493
self.setNextButton(BUTTON_CONNECT)
494
self.SSIDLabel.setText(self.network)
496
font.setPointSize(12)
497
self.SSIDLabel.setFont(font)
498
self.KeyLineEdit.setText(QString())
499
self.ShowKeyCheckBox.setChecked(False)
500
self.StrengthIcon.setPixmap(load_pixmap('signal%d' % self.ss, 'other'))
501
self.ConfigureIcon.setPixmap(load_pixmap('info', '16x16'))
502
self.KeysIcon.setPixmap(load_pixmap('keys', '32x32'))
504
if 'wpa' in self.security.lower():
505
self.WPARadioButton.setChecked(True)
507
elif 'wep' in self.security.lower():
508
self.WEPRadioButton.setChecked(True)
510
self.KeyLineEdit.setFocus()
511
self.KeyLineEdit.setEchoMode(QLineEdit.Password)
512
self.displayPage(PAGE_CONFIGURE_WIFI)
515
def ShowKeyCheckBox_toggled(self, b):
517
self.KeyLineEdit.setEchoMode(QLineEdit.Normal)
519
self.KeyLineEdit.setEchoMode(QLineEdit.Password)
526
def initExitPage(self):
527
self.connect(self.PageSpinBox, SIGNAL("valueChanged(int)"), self.PageSpinBox_valueChanged)
528
self.RefreshTimer = QTimer(self)
529
self.connect(self.RefreshTimer, SIGNAL('timeout()'), self.RefreshTimer_timeout)
532
self.PageSpinBox.setMinimum(1)
535
def showExitPage(self):
536
self.setNextButton(BUTTON_FINISH)
537
self.NextButton.setEnabled(False)
538
self.CancelButton.setEnabled(True)
539
self.SSIDLabel_2.setText(QString(self.network))
542
self.success = SUCCESS_NOT_CONNECTED
547
self.ip, _, addressmode, subnetmask, gateway, pridns, sec_dns = wifi.getIPConfiguration(self.dev, self.adaptor_id)
548
vsa_codes = wifi.getVSACodes(self.dev)
549
ss_max, ss_min, ss_val, ss_dbm = wifi.getSignalStrength(self.dev, self.adaptor_id)
550
self.hn = wifi.getHostname(self.dev)
558
if addressmode.lower() == 'dhcp':
559
self.success = SUCCESS_CONNECTED
561
elif addressmode.lower() == 'autoip':
562
self.success = SUCCESS_AUTO_IP
564
if self.ip == '0.0.0.0':
565
self.success = SUCCESS_NOT_CONNECTED
569
if self.success == SUCCESS_NOT_CONNECTED:
570
self.pages.append((self.__tr("<b>Your printer has not been connected to the wireless network.</b> A valid connection to a wireless network can take up to 2 minutes. This screen will automatically refresh every %1 seconds.<p>If your printer fails to connect within a reasonable time, there may be a problem with your configuration.").arg(REFRESH_INTERVAL), load_pixmap('error', '16x16')))
571
self.RefreshTimer.start(REFRESH_INTERVAL * 1000)
573
elif self.success == SUCCESS_AUTO_IP:
574
self.pages.append((self.__tr("Your printer has been connected to the wireless network, but it has been assigned an address which may not be usable."), load_pixmap('warning', '16x16')))
575
self.RefreshTimer.start(REFRESH_INTERVAL * 1000)
577
else: # SUCCESS_CONNECTED
579
self.pages.append((self.__tr("Your printer has been successfully configured on the wireless network. You may now unplug the USB cable. To setup the printer, now run <pre>hp-setup.</pre>"), load_pixmap('info', '16x16')))
581
self.pages.append((self.__tr("Your printer has been successfully configured on the wireless network. You may now unplug the USB cable."), load_pixmap('info', '16x16')))
582
self.CancelButton.setEnabled(False)
583
self.BackButton.setEnabled(False)
584
self.RefreshTimer.stop()
586
if addressmode is None:
587
self.AddressModeLabel.setText(self.__tr("Unknown"))
589
self.AddressModeLabel.setText(QString(addressmode))
592
self.HostnameLabel.setText(self.__tr("Unknown"))
594
self.HostnameLabel.setText(QString(self.hn))
596
self.IPAddressLabel.setText(QString(self.ip))
597
self.GatewayLabel.setText(QString(gateway))
598
self.DNSLabel.setText(QString(pridns))
599
self.NextButton.setEnabled(True)
601
self.SignalStrengthLabel.setText(QString("%1/%2 (%3 dBm)").arg(ss_val).arg(ss_max).arg(ss_dbm))
602
self.SignalStrengthIcon.setPixmap(load_pixmap('signal%d' % ss_val, 'other'))
604
for c, s in vsa_codes:
606
if ss.startswith("info"):
607
pixmap = load_pixmap('info', '16x16')
609
elif ss.startswith("warn"):
610
pixmap = load_pixmap('warning', '16x16')
612
elif ss.startswith("crit"):
613
pixmap = load_pixmap('error', '16x16')
616
pixmap = load_pixmap('info', '16x16')
618
self.pages.append((device.queryString("vsa_%s" % str(c).zfill(3)), pixmap))
620
num_pages = len(self.pages)
621
self.PageSpinBox.setMaximum(num_pages)
622
self.PageSpinBox.setEnabled(num_pages>1)
623
self.PageSpinBox.setValue(1)
624
self.PageLabel.setEnabled(num_pages>1)
625
self.PageLabel2.setEnabled(num_pages>1)
626
self.PageLabel.setText(self.__tr("of %1").arg(num_pages))
628
self.ExitLabel.setText(self.pages[self.page_index][0])
629
self.ExitIcon.setPixmap(self.pages[self.page_index][1])
630
self.displayPage(PAGE_EXIT)
633
def PageSpinBox_valueChanged(self, i):
634
self.page_index = i-1
635
self.ExitLabel.setText(self.pages[self.page_index][0])
636
self.ExitIcon.setPixmap(self.pages[self.page_index][1])
639
def RefreshTimer_timeout(self):
647
def associate(self, key=u''):
651
alg, mode, secretid = wifi.getCryptoSuite(self.dev)
656
log.debug("Crypto algorithm: %s" % alg)
657
log.debug("Crypto mode: %s" % mode)
664
ret = wifi.associate(self.dev, self.network, self.mode, self.security, key)
676
def NextButton_clicked(self):
677
p = self.StackedWidget.currentIndex()
679
self.showDevicesPage()
681
elif p == PAGE_DEVICES:
682
row = self.DevicesTableWidget.currentRow()
684
self.device_uri = self.DevicesTableWidget.item(row, 0).device_uri
685
self.mq = device.queryModelByURI(self.device_uri)
686
back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(self.device_uri)
687
self.model = models.normalizeModelName(model).lower()
689
self.showNetworkPage()
691
elif p == PAGE_NETWORK:
692
self.security = 'None'
693
self.mode = 'Infrastructure'
695
row = self.NetworksTableWidget.currentRow()
697
i = self.NetworksTableWidget.item(row, 0)
699
self.network = unicode(i.text())
700
log.debug("Selected network SSID: %s" % self.network)
701
self.n, ok = i.data(Qt.UserRole).toInt()
703
self.security = self.networks['encryptiontype-%d' % self.n]
704
log.debug("Security: %s" % self.security)
706
self.mode = self.networks['communicationmode-%d' % self.n]
707
log.debug("Mode: %s" % self.mode)
709
self.ss = self.networks['signalstrength-%d' % self.n]
710
log.debug("Signal strength: %s" % self.ss)
712
if self.security.lower() != 'none':
713
self.showConfigWifiPage()
715
# Skip config page if no security to setup
717
self.showAssociateProgressDialog()
720
elif p == PAGE_CONFIGURE_WIFI:
721
key = unicode(self.KeyLineEdit.text())
723
self.showAssociateProgressDialog()
727
if self.dev is not None:
733
log.error("Invalid page!") # shouldn't happen!
736
def showAssociateProgressDialog(self):
737
AssociateProgressDialog = QProgressDialog(self.__tr("Waiting for printer to connect to the wireless network..."), self.__tr("Cancel"), 0, ASSOCIATE_DELAY, self)
738
AssociateProgressDialog.setWindowTitle(self.__tr("HP Device Manager - Please wait..."))
739
AssociateProgressDialog.setWindowModality(Qt.WindowModal)
740
AssociateProgressDialog.setMinimumDuration(0)
741
AssociateProgressDialog.forceShow()
743
for x in range(ASSOCIATE_DELAY):
744
AssociateProgressDialog.setValue(x)
748
if AssociateProgressDialog.wasCanceled():
752
AssociateProgressDialog.setValue(ASSOCIATE_DELAY)
753
AssociateProgressDialog.close()
756
if self.dev is not None:
762
def BackButton_clicked(self):
763
p = self.StackedWidget.currentIndex()
764
if p == PAGE_DEVICES:
768
elif p == PAGE_NETWORK:
769
self.showDevicesPage()
771
elif p == PAGE_CONFIGURE_WIFI:
772
self.showNetworkPage()
775
self.RefreshTimer.stop()
776
if self.security.lower() != 'none':
777
self.showConfigWifiPage()
779
self.showNetworkPage()
782
log.error("Invalid page!") # shouldn't happen!
785
def CancelButton_clicked(self):
786
if self.dev is not None:
792
def displayPage(self, page):
793
self.StackedWidget.setCurrentIndex(page)
794
self.updateStepText(page)
797
def setNextButton(self, typ=BUTTON_FINISH):
798
if typ == BUTTON_NEXT:
799
self.NextButton.setText(self.__tr("Next >"))
801
elif typ == BUTTON_FINISH:
802
self.NextButton.setText(self.__tr("Finish"))
804
elif typ == BUTTON_CONNECT:
805
self.NextButton.setText(self.__tr("Connect"))
808
def updateStepText(self, p):
809
self.StepText.setText(self.__tr("Step %1 of %2").arg(p+1).arg(self.max_page+1))
812
def showIOError(self, e):
813
FailureUI(self, self.__tr("<b>An I/O error occurred.</b><p>Please check the USB connection to your printer and try again.</p>(%1)").arg(QString(e[0])))
815
if self.dev is not None:
821
def __tr(self,s,c = None):
822
return qApp.translate("WifiSetupDialog",s,c)