small gui command order fix when diseqc 1.1 is selected and a uncommitted
[enigma2.git] / lib / python / Screens / NetworkSetup.py
1 from Screen import Screen
2 from Components.ActionMap import ActionMap,NumberActionMap
3 from Screens.MessageBox import MessageBox
4 from Screens.Standby import *
5 from Components.ConfigList import ConfigListScreen
6 from Components.config import config, getConfigListEntry
7 from Components.Network import iNetwork
8 from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
9 from Components.Label import Label
10 from Components.Pixmap import Pixmap
11 from Tools.LoadPixmap import LoadPixmap
12 from Components.MenuList import MenuList
13 from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigNothing, ConfigSubsection, ConfigText, ConfigSelection, getConfigListEntry
14 from Components.PluginComponent import plugins
15 from Plugins.Plugin import PluginDescriptor
16 #from Plugins.SystemPlugins.WirelessLan.plugin import *
17 #from Plugins.SystemPlugins.WirelessLan.Wlan import *
18 from enigma import eTimer, eConsoleAppContainer,gRGB
19 import time, os, re
20
21
22 Black = "#000000"
23 Grey = "#8c8c93"
24 Green = "1cff1c"
25 nextstep = None
26 activebutton = None
27
28 def getColor(str):
29         return gRGB(int(str[1:], 0x10))
30
31 class NetworkAdapterSelection(Screen):
32         def __init__(self, session):
33                 Screen.__init__(self, session)
34
35                 self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
36                 if len(self.adapters) == 0:
37                         #Reset Network to defaults if network broken
38                         iNetwork.resetNetworkConfig('lan')
39                         
40                 self["adapterlist"] = MenuList(self.adapters)
41                 self["actions"] = ActionMap(["OkCancelActions"],
42                 {
43                         "ok": self.okbuttonClick,
44                         "cancel": self.close
45                 })
46
47                 if len(self.adapters) == 1:
48                         self.onFirstExecBegin.append(self.okbuttonClick)
49
50         def okbuttonClick(self):
51                 selection = self["adapterlist"].getCurrent()
52                 if selection is not None:
53                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, selection[1])
54         def AdapterSetupClosed(self, *ret):
55                 if len(self.adapters) == 1: # just one network adapter.. close selection
56                         self.close()
57
58 class NameserverSetup(Screen, ConfigListScreen):
59
60         def __init__(self, session):
61                 Screen.__init__(self, session)
62                 self.backupNameserverList = iNetwork.getNameserverList()[:]
63                 print "backup-list:", self.backupNameserverList
64
65                 self["ButtonGreentext"] = Label(_("Add"))
66                 self["ButtonYellowtext"] = Label(_("Delete"))
67                 self["ButtonRedtext"] = Label(_("Close"))               
68                 self.createConfig()
69
70                 self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
71                 {
72                         "ok": self.ok,
73                         "cancel": self.cancel,
74                         "red": self.cancel,
75                         "green": self.add,
76                         "yellow": self.remove
77                 }, -2)
78
79                 self.list = []
80                 ConfigListScreen.__init__(self, self.list)
81                 self.createSetup()
82
83         def createConfig(self):
84                 self.nameservers = iNetwork.getNameserverList()
85                 self.nameserverEntries = []
86
87                 for nameserver in self.nameservers:
88                         self.nameserverEntries.append(NoSave(ConfigIP(default=nameserver)))
89
90         def createSetup(self):
91                 self.list = []
92
93                 for i in range(len(self.nameserverEntries)):
94                         self.list.append(getConfigListEntry(_("Nameserver %d") % (i + 1), self.nameserverEntries[i]))
95
96                 self["config"].list = self.list
97                 self["config"].l.setList(self.list)
98
99         def ok(self):
100                 iNetwork.clearNameservers()
101                 for nameserver in self.nameserverEntries:
102                         iNetwork.addNameserver(nameserver.value)
103                 iNetwork.writeNameserverConfig()
104                 self.close()
105
106         def cancel(self):
107                 iNetwork.clearNameservers()
108                 print "backup-list:", self.backupNameserverList
109                 for nameserver in self.backupNameserverList:
110                         iNetwork.addNameserver(nameserver)
111                 self.close()
112
113         def add(self):
114                 iNetwork.addNameserver([0,0,0,0])
115                 self.createConfig()
116                 self.createSetup()
117
118         def remove(self):
119                 print "currentIndex:", self["config"].getCurrentIndex()
120
121                 index = self["config"].getCurrentIndex()
122                 if index < len(self.nameservers):
123                         iNetwork.removeNameserver(self.nameservers[index])
124                         self.createConfig()
125                         self.createSetup()
126
127
128 class AdapterSetup(Screen, ConfigListScreen):
129         def __init__(self, session, iface):
130                 Screen.__init__(self, session)
131                 self.session = session
132                 ## FIXME , workaround against current wizzard not able to send arguments
133                 if iface == 0:
134                         self.iface = "eth0"
135                 elif iface == 1:
136                         self.iface = "wlan0"
137                 else:
138                         self.iface = iface
139
140                 if self.iface == 'wlan0':
141                         from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant
142                         self.ws = wpaSupplicant()
143                         list = []
144                         list.append(_("WEP"))
145                         list.append(_("WPA"))
146                         list.append(_("WPA2"))
147
148                         config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
149                         config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
150                         config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = _("WPA")))
151                         config.plugins.wlan.encryption.psk = NoSave(ConfigText(default = "mysecurewlan", fixed_size = False))
152                         self.ws.loadConfig()
153
154                 self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False))
155                 self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=True))
156                 self.ipConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0])
157                 self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0]))
158                 self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0]))
159                 nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2]
160                 self.primaryDNS = NoSave(ConfigIP(default=nameserver[0]))
161                 self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1]))
162
163                 self["actions"] = ActionMap(["SetupActions","ShortcutActions"],
164                 {
165                         "ok": self.ok,
166                         "cancel": self.cancel,
167                         "red": self.cancel,
168                         "blue": self.KeyBlue,
169                 }, -2)
170
171                 self.list = []
172                 ConfigListScreen.__init__(self, self.list)
173                 self.createSetup()
174                 self.onLayoutFinish.append(self.layoutFinished)
175                 
176                 self["DNS1text"] = Label(_("Primary DNS"))
177                 self["DNS2text"] = Label(_("Secondary DNS"))
178                 self["DNS1"] = Label()
179                 self["DNS2"] = Label()
180                 
181                 self["introduction"] = Label(_("Current settings:"))
182                 
183                 self["IPtext"] = Label(_("IP Address"))
184                 self["Netmasktext"] = Label(_("Netmask"))
185                 self["Gatewaytext"] = Label(_("Gateway"))
186                 
187                 self["IP"] = Label()
188                 self["Mask"] = Label()
189                 self["Gateway"] = Label()
190                 
191                 self["BottomBG"] = Pixmap()
192                 self["Adaptertext"] = Label(_("Network:"))
193                 self["Adapter"] = Label()
194                 self["introduction2"] = Label(_("Press OK to activate the settings."))
195                 self["ButtonRed"] = Pixmap()
196                 self["ButtonRedtext"] = Label(_("Close"))
197                 self["ButtonBlue"] = Pixmap()
198                 self["ButtonBluetext"] = Label(_("Edit DNS"))
199
200         def layoutFinished(self):
201                 self["DNS1"].setText(self.primaryDNS.getText())
202                 self["DNS2"].setText(self.secondaryDNS.getText())
203                 self["IP"].setText(self.ipConfigEntry.getText())
204                 self["Mask"].setText(self.netmaskConfigEntry.getText())
205                 self["Gateway"].setText(self.gatewayConfigEntry.getText())              
206                 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
207                 
208         def createSetup(self):
209                 self.list = []
210
211                 self.dhcpEntry = getConfigListEntry(_("Use DHCP"), self.dhcpConfigEntry)
212                 self.list.append(self.dhcpEntry)
213                 if not self.dhcpConfigEntry.value:
214                         self.list.append(getConfigListEntry(_('IP Address'), self.ipConfigEntry))
215                         self.list.append(getConfigListEntry(_('Netmask'), self.netmaskConfigEntry))
216                         self.list.append(getConfigListEntry(_('Use a gateway'), self.hasGatewayConfigEntry))
217                         if self.hasGatewayConfigEntry.value:
218                                 self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry))
219
220                 self.extended = None
221                 self.extendedSetup = None
222                 for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
223                         callFnc = p.__call__["ifaceSupported"](self.iface)
224                         if callFnc is not None:
225                                 self.extended = callFnc
226                                 print p.__call__
227                                 if p.__call__.has_key("configStrings"):
228                                         self.configStrings = p.__call__["configStrings"]
229                                 else:
230                                         self.configStrings = None
231
232                                 self.list.append(getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid))
233                                 self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled)
234                                 self.list.append(self.encryptionEnabled)
235                 
236                                 if config.plugins.wlan.encryption.enabled.value:
237                                         self.list.append(getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type))
238                                         self.list.append(getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk))
239
240
241                 self["config"].list = self.list
242                 self["config"].l.setList(self.list)
243
244         def KeyBlue(self):
245                 self.session.open(NameserverSetup)
246
247         def newConfig(self):
248                 print self["config"].getCurrent()
249                 if self["config"].getCurrent() == self.dhcpEntry:
250                         self.createSetup()
251
252         def keyLeft(self):
253                 ConfigListScreen.keyLeft(self)
254                 self.createSetup()
255
256         def keyRight(self):
257                 ConfigListScreen.keyRight(self)
258                 self.createSetup()
259
260         def ok(self):
261                 selection = self["config"].getCurrent()
262                 if selection == self.extendedSetup:
263                         self.extended(self.session, self.iface)
264                 else:
265                         iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value)
266                         iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value)
267                         iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value)
268                         if self.hasGatewayConfigEntry.value:
269                                 iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
270                         else:
271                                 iNetwork.removeAdapterAttribute(self.iface, "gateway")
272
273                         if self.extended is not None and self.configStrings is not None:
274                                 iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface))
275                                 self.ws.writeConfig()
276                         
277                         iNetwork.deactivateNetworkConfig()
278                         iNetwork.writeNetworkConfig()
279                         iNetwork.activateNetworkConfig()
280                         #if self.iface == 'wlan0':
281                         #       iNetwork.restartNetwork()
282                         self.close()
283
284         def cancel(self):
285                 iNetwork.getInterfaces()
286                 self.close()
287
288         def run(self):
289                 self.ok()
290
291
292 class AdapterSetupConfiguration(Screen):
293         
294         def __init__(self, session,iface):
295                 Screen.__init__(self, session)
296                 self.iface = iface
297                 self.session = session
298                 #self.ethtool_bin = "/usr/sbin/ethtool"
299                 #self.output = None
300                 #self.container = eConsoleAppContainer()
301                 self.mainmenu = self.genMainMenu()
302                 self["menulist"] = MenuList(self.mainmenu)
303                 self["description"] = Label()
304                 self["IFtext"] = Label()
305                 self["IF"] = Label()
306                 self["BottomBG"] = Label()
307                 self["Statustext"] = Label()
308                 self["statuspic_active"] = Pixmap()
309                 self["statuspic_active"].hide()
310                 self["statuspic_inactive"] = Pixmap()
311                 self["statuspic_inactive"].hide()
312                 self["BottomBG"] = Pixmap()
313                 self["ButtonRed"] = Pixmap()
314                 self["ButtonRedtext"] = Label(_("Close"))
315
316                 self.oktext = _("Press OK on your remote control to continue.")
317                 self.reboottext = _("Your Dreambox will restart after pressing OK on your remote control.")
318                 
319                 self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
320                 {
321                         "ok": self.ok,
322                         "back": self.close,
323                         "up": self.up,
324                         "down": self.down,
325                         "red": self.close,
326                         "left": self.left,
327                         "right": self.right,                    
328                 }, -2)
329
330                 iNetwork.getInterfaces()
331                 self.onLayoutFinish.append(self.layoutFinished)
332                 self.updateStatusbar()
333
334         def ok(self):
335                 if self["menulist"].getCurrent()[1] == 'edit':
336                         self.session.open(AdapterSetup,self.iface)
337                 if self["menulist"].getCurrent()[1] == 'test':
338                         self.session.open(NetworkAdapterTest,self.iface)
339                 if self["menulist"].getCurrent()[1] == 'dns':
340                         self.session.open(NameserverSetup)
341                 if self["menulist"].getCurrent()[1] == 'scanwlan':
342                         from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan
343                         self.session.open(WlanScan,self.iface)
344                 if self["menulist"].getCurrent()[1] == 'wlanstatus':
345                         from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus
346                         self.session.open(WlanStatus,self.iface)
347                 if self["menulist"].getCurrent()[1] == 'lanrestart':
348                         self.session.openWithCallback(self.restartLan, MessageBox, (_("Are you sure you want to restart your network interfaces?\n\n") + self.oktext ) )
349                 if self["menulist"].getCurrent()[1] == 'enablewlan':
350                         self.session.openWithCallback(self.enablewlan, MessageBox, (_("Are you sure you want to enable WLAN support?\nConnect your Wlan USB Stick to your Dreambox and press OK.\n\n") + self.reboottext ) )
351                 if self["menulist"].getCurrent()[1] == 'resetconfig':
352                         self.session.openWithCallback(self.resetconfig, MessageBox, (_("Are you sure you want to reset \nyour network configuration to defaults?\n\n") + self.reboottext ) )
353                 
354         def up(self):
355                 self["menulist"].up()
356                 self.loadDescription()
357
358         def down(self):
359                 self["menulist"].down()
360                 self.loadDescription()
361
362         def left(self):
363                 self["menulist"].pageUp()
364                 self.loadDescription()
365
366         def right(self):
367                 self["menulist"].pageDown()
368                 self.loadDescription()
369
370         def layoutFinished(self):
371                 idx = 0
372                 self["menulist"].moveToIndex(idx)
373                 self.loadDescription()
374
375         def loadDescription(self):
376                 if self["menulist"].getCurrent()[1] == 'edit':
377                         self["description"].setText(_("Edit the network configuration of your Dreambox.\n" ) + self.oktext )
378                 if self["menulist"].getCurrent()[1] == 'test':
379                         self["description"].setText(_("Test the network configuration of your Dreambox.\n" ) + self.oktext )
380                 if self["menulist"].getCurrent()[1] == 'resetconfig':
381                         self["description"].setText(_("Reset the network configuration of your Dreambox.\n\n" ) + self.reboottext )
382                 if self["menulist"].getCurrent()[1] == 'dns':
383                         self["description"].setText(_("Edit the Nameserver configuration of your Dreambox.\n" ) + self.oktext )
384                 if self["menulist"].getCurrent()[1] == 'scanwlan':
385                         self["description"].setText(_("Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n" ) + self.oktext )
386                 if self["menulist"].getCurrent()[1] == 'wlanstatus':
387                         self["description"].setText(_("Shows the state of your wireless LAN connection.\n" ) + self.oktext )
388                 if self["menulist"].getCurrent()[1] == 'lanrestart':
389                         self["description"].setText(_("Restart your network connection and interfaces.\n" ) + self.oktext )
390                 if self["menulist"].getCurrent()[1] == 'enablewlan':
391                         self["description"].setText(_("Pressing OK enables the built in wireless LAN support of your Dreambox.\nWlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are supported.\nConnect your Wlan USB Stick to your Dreambox before pressing OK.\n\n" ) + self.reboottext )
392
393
394         def updateStatusbar(self):
395                 self["IFtext"].setText(_("Network:"))
396                 self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
397                 self["Statustext"].setText(_("Link:"))
398
399                 if self.iface == 'wlan0':
400                         from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan, WlanList, wpaSupplicant
401                         w = Wlan(self.iface)
402                         stats = w.getStatus()
403                         if stats['BSSID'] == "00:00:00:00:00:00":
404                                 self["statuspic_active"].hide()
405                                 self["statuspic_inactive"].show()
406                         else:
407                                 self["statuspic_active"].show()
408                                 self["statuspic_inactive"].hide()
409                 else:
410                         self.getLinkState(self.iface)
411                 
412         def doNothing(self):
413                 pass
414
415         def genMainMenu(self):
416                 menu = []
417                 menu.append((_("Adapter settings"), "edit"));
418                 menu.append((_("Nameserver settings"), "dns"));
419                 menu.append((_("Network test"), "test"));
420                 menu.append((_("Restart network"), "lanrestart"));
421                 menu.append((_("Reset configuration"), "resetconfig"));
422
423                 self.extended = None
424                 self.extendedSetup = None
425                 for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
426                         callFnc = p.__call__["ifaceSupported"](self.iface)
427                         if callFnc is not None:
428                                 menu.append((_("Scan Wireless Networks"), "scanwlan"));
429                                 menu.append((_("Show WLAN Status"), "wlanstatus"));
430                         if callFnc is None and iNetwork.ifaces.has_key('wlan0') is False:
431                                 menu.append((_("Enable WLAN Support"), "enablewlan"));
432                 return menu
433
434         
435         def enablewlan(self, ret = False):
436                 if (ret == True):
437                         iNetwork.resetNetworkConfig('wlan')
438                         TryQuitMainloop(self.session,2)
439                 
440         def resetconfig(self, ret = False):
441                 if (ret == True):
442                         iNetwork.resetNetworkConfig('lan')
443                         TryQuitMainloop(self.session,2)
444
445         def restartLan(self, ret = False):
446                 if (ret == True):
447                         iNetwork.restartNetwork()
448
449         def getLinkState(self,iface):
450                 iNetwork.getLinkState(iface,self.dataAvail)
451
452         def dataAvail(self,data):
453                 self.output = data.strip()
454                 result = self.output.split('\n')
455                 pattern = re.compile("Link detected: yes")
456                 for item in result:
457                         if re.search(pattern, item):
458                                 self["statuspic_active"].show()
459                                 self["statuspic_inactive"].hide()
460                         else:
461                                 self["statuspic_active"].hide()
462                                 self["statuspic_inactive"].show()
463         
464
465 class NetworkAdapterTest(Screen):       
466
467         def __init__(self, session,iface):
468                 Screen.__init__(self, session)
469                 self.iface = iface
470
471                 self.setLabels()
472         
473                 self["updown_actions"] = NumberActionMap(["WizardActions"],
474                 {
475                         "ok": self.KeyOK,
476                         "up": lambda: self.updownhandler('up'),
477                         "down": lambda: self.updownhandler('down'),
478         
479                 }, -2)
480
481                 self["shortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
482                 {
483                         "red": self.close,
484                         "back": self.close,
485                 }, -2)
486                 self["infoshortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
487                 {
488                         "red": self.closeInfo,
489                         "back": self.closeInfo,
490                 }, -2)
491                 self["shortcutsgreen"] = ActionMap(["ShortcutActions"],
492                 {
493                         "green": self.KeyGreen,
494                 }, -2)
495                 self["shortcutsgreen_restart"] = ActionMap(["ShortcutActions"],
496                 {
497                         "green": self.KeyGreenRestart,
498                 }, -2)
499                 self["shortcutsyellow"] = ActionMap(["ShortcutActions"],
500                 {
501                         "yellow": self.KeyYellow,
502                 }, -2)
503
504                 self["shortcutsgreen_restart"].setEnabled(False)
505                 self["updown_actions"].setEnabled(False)
506                 self["infoshortcuts"].setEnabled(False)
507                 self.onClose.append(self.delTimer)      
508                 self.onLayoutFinish.append(self.layoutFinished)
509                 self.steptimer = False
510                 global nextstep
511                 nextstep = 0
512                 global activebutton
513                 activebutton = 0                
514                 self.nextStepTimer = eTimer()
515                 self.nextStepTimer.callback.append(self.nextStepTimerFire)
516
517         def closeInfo(self):
518                 self["shortcuts"].setEnabled(True)              
519                 self["infoshortcuts"].setEnabled(False)
520                 self["InfoText"].hide()
521                 self["InfoTextBorder"].hide()
522                 self["ButtonRedtext"].setText(_("Close"))
523                 
524         def delTimer(self):
525                 del self.steptimer
526                 del self.nextStepTimer
527
528         def nextStepTimerFire(self):
529                 global nextstep
530                 self.nextstep= nextstep
531                 self.nextStepTimer.stop()
532                 self.steptimer = False
533                 self.runTest(self.nextstep)
534
535         def updownhandler(self,direction):
536                 global activebutton
537                 if direction == 'up':
538                         if activebutton >=2:
539                                 activebutton = activebutton -1
540                         self.setActiveButton(activebutton)
541                 if direction == 'down':
542                         if activebutton <=5:
543                                 activebutton = activebutton +1
544                         self.setActiveButton(activebutton)
545
546         def setActiveButton(self,button):
547                 if button == 1:
548                         self["NetworkInfo"].show()
549                         self["NetworkInfo_selected"].hide()
550                         self["AdapterInfo"].hide()
551                         self["AdapterInfo_selected"].show()
552                 if button == 2:
553                         self["AdapterInfo"].show()
554                         self["AdapterInfo_selected"].hide()
555                         self["DhcpInfo"].show()
556                         self["DhcpInfo_selected"].hide()
557                         self["NetworkInfo"].hide()
558                         self["NetworkInfo_selected"].show()             
559                 if button == 3:
560                         self["NetworkInfo"].show()
561                         self["NetworkInfo_selected"].hide()
562                         self["IPInfo"].show()
563                         self["IPInfo_selected"].hide()
564                         self["DhcpInfo"].hide()
565                         self["DhcpInfo_selected"].show()
566                 if button == 4:
567                         self["DhcpInfo"].show()
568                         self["DhcpInfo_selected"].hide()
569                         self["DNSInfo"].show()
570                         self["DNSInfo_selected"].hide()
571                         self["IPInfo"].hide()
572                         self["IPInfo_selected"].show()
573                 if button == 5:
574                         self["IPInfo"].show()
575                         self["IPInfo_selected"].hide()
576                         self["EditSettingsButton"].show()
577                         self["EditSettingsButton_selected"].hide()
578                         self["DNSInfo"].hide()
579                         self["DNSInfo_selected"].show()
580                 if button == 6:
581                         self["DNSInfo"].show()
582                         self["DNSInfo_selected"].hide()
583                         self["EditSettingsButton"].hide()
584                         self["EditSettingsButton_selected"].show()
585                         
586         def runTest(self,next):
587                 global nextstep
588                 if next == 0:
589                         nextstep = next + 1
590                         self.doStep1()
591                 if next == 1:
592                         nextstep = next + 1
593                         self.doStep2()          
594                 if next == 2:
595                         nextstep = next + 1
596                         self.doStep3()
597                 if next == 3:
598                         nextstep = next + 1
599                         self.doStep4()
600                 if next == 4:
601                         nextstep = next + 1
602                         self.doStep5()
603                 if next == 5:
604                         nextstep = next + 1
605                         self.doStep6()                  
606                 
607         def doStep1(self):
608                 self.steptimer = True
609                 self.nextStepTimer.start(3000)
610
611         def doStep2(self):
612                 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
613                 self["Adapter"].instance.setForegroundColor(getColor(Green))
614                 self["AdapterInfo_Text"].instance.setForegroundColor(getColor(Black))
615                 self["AdapterInfo_OK"].show()           
616                 self.steptimer = True
617                 self.nextStepTimer.start(3000)          
618
619         def doStep3(self):
620                 self.getLinkState(self.iface)
621                 self["NetworkInfo_Text"].instance.setForegroundColor(getColor(Black))
622                 self.steptimer = True
623                 self.nextStepTimer.start(3000)                  
624
625         def doStep4(self):
626                 if iNetwork.getAdapterAttribute(self.iface, 'dhcp') is True:
627                         self["Dhcp"].instance.setForegroundColor(getColor(Green))
628                         self["Dhcp"].setText(_("enabled"))
629                         self["DhcpInfo_OK"].show()
630                         self["DhcpInfo_NOK"].hide()
631                 else:
632                         self["Dhcp"].instance.setForegroundColor(getColor(Grey))
633                         self["Dhcp"].setText(_("disabled"))             
634                         self["DhcpInfo_NOK"].show()
635                         self["DhcpInfo_OK"].hide()
636                 self["DhcpInfo_Text"].instance.setForegroundColor(getColor(Black))      
637                 self.steptimer = True
638                 self.nextStepTimer.start(3000)
639
640         def doStep5(self):
641                 if len(iNetwork.getAdapterAttribute(self.iface,'ip')) != 0:
642                         self["IP"].instance.setForegroundColor(getColor(Green))
643                         self["IP"].setText(_("confirmed"))
644                         self["IPInfo_OK"].show()
645                         self["IPInfo_NOK"].hide()
646                 else:
647                         self["IP"].instance.setForegroundColor(getColor(Grey))
648                         self["IP"].setText(_("unconfirmed"))                    
649                         self["IPInfo_NOK"].show()
650                         self["IPInfo_OK"].hide()
651                 self["IPInfo_Text"].instance.setForegroundColor(getColor(Black))        
652                 self.steptimer = True
653                 self.nextStepTimer.start(3000)
654
655         def doStep6(self):
656                 self.steptimer = False
657                 self.nextStepTimer.stop()
658                 if len (iNetwork.getNameserverList()) != 0:
659                         self["DNS"].instance.setForegroundColor(getColor(Green))
660                         self["DNS"].setText(_("confirmed"))
661                         self["DNSInfo_OK"].show()
662                         self["DNSInfo_NOK"].hide()
663                 else:
664                         self["DNS"].instance.setForegroundColor(getColor(Grey))
665                         self["DNS"].setText(_("unconfirmed"))
666                         self["DNSInfo_NOK"].show()
667                         self["DNSInfo_OK"].hide()
668                         
669                 self["DNSInfo_Text"].instance.setForegroundColor(getColor(Black))
670                 self["EditSettings_Text"].show()
671                 self["EditSettingsButton_selected"].show()
672                 self["ButtonYellow_off"].show()
673                 self["ButtonYellow"].hide()
674                 self["ButtonGreentext"].setText(_("Restart test"))
675                 self["ButtonGreen"].show()              
676                 self["ButtonGreen_off"].hide()
677                 self["shortcutsgreen"].setEnabled(False)
678                 self["shortcutsgreen_restart"].setEnabled(True)
679                 self["shortcutsyellow"].setEnabled(False)
680                 self["updown_actions"].setEnabled(True)
681                 global activebutton
682                 activebutton = 6
683                 
684         def KeyGreen(self):
685                 self["shortcutsgreen"].setEnabled(False)
686                 self["shortcutsyellow"].setEnabled(True)
687                 self["updown_actions"].setEnabled(False)
688                 self["ButtonYellow_off"].hide()
689                 self["ButtonYellow"].show()
690                 self["ButtonGreen"].hide()              
691                 self["ButtonGreen_off"].show()
692                 self.steptimer = True
693                 self.nextStepTimer.start(1000)
694
695         def KeyGreenRestart(self):
696                 global nextstep
697                 nextstep = 0            
698                 self.layoutFinished()
699                 self["Adapter"].setText((""))
700                 self["Network"].setText((""))
701                 self["Dhcp"].setText((""))
702                 self["IP"].setText((""))
703                 self["DNS"].setText((""))
704                 self["AdapterInfo_Text"].instance.setForegroundColor(getColor(Grey))
705                 self["NetworkInfo_Text"].instance.setForegroundColor(getColor(Grey))
706                 self["DhcpInfo_Text"].instance.setForegroundColor(getColor(Grey))
707                 self["IPInfo_Text"].instance.setForegroundColor(getColor(Grey))
708                 self["DNSInfo_Text"].instance.setForegroundColor(getColor(Grey))
709                 self["shortcutsgreen_restart"].setEnabled(False)
710                 self["shortcutsgreen"].setEnabled(False)
711                 self["shortcutsyellow"].setEnabled(True)
712                 self["updown_actions"].setEnabled(False)
713                 self["ButtonYellow_off"].hide()
714                 self["ButtonYellow"].show()
715                 self["ButtonGreen"].hide()              
716                 self["ButtonGreen_off"].show()
717                 self.steptimer = True
718                 self.nextStepTimer.start(1000)
719                 
720         def KeyOK(self):
721                 global activebutton
722                 self["infoshortcuts"].setEnabled(True)
723                 self["shortcuts"].setEnabled(False)
724                 if activebutton == 1: # Adapter Check
725                         self["InfoText"].setText(_("This test detects your configured LAN-Adapter."))
726                         self["InfoTextBorder"].show()
727                         self["InfoText"].show()
728                         self["ButtonRedtext"].setText(_("Back"))
729                 if activebutton == 2: #LAN Check
730                         self["InfoText"].setText(_("This test checks whether a network cable is connected to your LAN-Adapter.\nIf you get a \"disconnected\" message:\n- verify that a network cable is attached\n- verify that the cable is not broken"))
731                         self["InfoTextBorder"].show()
732                         self["InfoText"].show()
733                         self["ButtonRedtext"].setText(_("Back"))
734                 if activebutton == 3: #DHCP Check
735                         self["InfoText"].setText(_("This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\nIf you get a \"disabled\" message:\n - then your LAN Adapter is configured for manual IP Setup\n- verify thay you have entered correct IP informations in the AdapterSetup dialog.\nIf you get an \"enabeld\" message:\n-verify that you have a configured and working DHCP Server in your network."))
736                         self["InfoTextBorder"].show()
737                         self["InfoText"].show()
738                         self["ButtonRedtext"].setText(_("Back"))
739                 if activebutton == 4: # IP Check
740                         self["InfoText"].setText(_("This test checks whether a valid IP Address is found for your LAN Adapter.\nIf you get a \"unconfirmed\" message:\n- no valid IP Address was found\n- please check your DHCP, cabling and adapter setup"))
741                         self["InfoTextBorder"].show()
742                         self["InfoText"].show()
743                         self["ButtonRedtext"].setText(_("Back"))
744                 if activebutton == 5: # DNS Check
745                         self["InfoText"].setText(_("This test checks for configured Nameservers.\nIf you get a \"unconfirmed\" message:\n- please check your DHCP, cabling and Adapter setup\n- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration"))
746                         self["InfoTextBorder"].show()
747                         self["InfoText"].show()
748                         self["ButtonRedtext"].setText(_("Back"))
749                 if activebutton == 6: # Edit Settings
750                         self.session.open(AdapterSetup,self.iface)
751
752         def KeyYellow(self):
753                 global nextstep
754                 nextstep = 0
755                 self["shortcutsgreen_restart"].setEnabled(True)
756                 self["shortcutsgreen"].setEnabled(False)
757                 self["shortcutsyellow"].setEnabled(False)
758                 self["ButtonGreentext"].setText(_("Restart test"))
759                 self["ButtonYellow_off"].show()
760                 self["ButtonYellow"].hide()
761                 self["ButtonGreen"].show()              
762                 self["ButtonGreen_off"].hide()
763                 self.steptimer = False
764                 self.nextStepTimer.stop()
765                 
766         def layoutFinished(self):
767                 self["shortcutsyellow"].setEnabled(False)
768                 self["AdapterInfo_selected"].hide()
769                 self["AdapterInfo_OK"].hide()
770                 
771                 self["NetworkInfo_selected"].hide()
772                 self["NetworkInfo_OK"].hide()
773                 self["NetworkInfo_NOK"].hide()
774                 
775                 self["DhcpInfo_selected"].hide()
776                 self["DhcpInfo_OK"].hide()
777                 self["DhcpInfo_NOK"].hide()
778                 
779                 self["IPInfo_selected"].hide()
780                 self["IPInfo_OK"].hide()
781                 self["IPInfo_NOK"].hide()
782                 
783                 self["DNSInfo_selected"].hide()
784                 self["DNSInfo_OK"].hide()
785                 self["DNSInfo_NOK"].hide()
786                 
787                 self["EditSettings_Text"].hide()
788                 self["EditSettingsButton"].hide()
789                 self["EditSettingsButton_selected"].hide()
790                 self["ButtonYellow"].hide()
791                 self["ButtonGreen_off"].hide()
792                 self["InfoText"].hide()
793                 self["InfoTextBorder"].hide()
794                 
795         def setLabels(self):
796                 self["Adaptertext"] = Label(_("LAN Adapter"))
797                 self["Adapter"] = Label()
798                 self["AdapterInfo"] = Pixmap()
799                 self["AdapterInfo_selected"] = Pixmap()
800                 self["AdapterInfo_Text"] = Label(_("Show Info"))
801                 self["AdapterInfo_OK"] = Pixmap()
802                 
803                 if self.iface == 'wlan0':
804                         self["Networktext"] = Label(_("Wireless Network"))
805                 else:
806                         self["Networktext"] = Label(_("Local Network"))
807                 
808                 self["Network"] = Label()
809                 self["NetworkInfo"] = Pixmap()
810                 self["NetworkInfo_selected"] = Pixmap()
811                 self["NetworkInfo_Text"] = Label(_("Show Info"))
812                 self["NetworkInfo_OK"] = Pixmap()
813                 self["NetworkInfo_NOK"] = Pixmap()
814                 
815                 self["Dhcptext"] = Label(_("DHCP"))
816                 self["Dhcp"] = Label()
817                 self["DhcpInfo"] = Pixmap()
818                 self["DhcpInfo_selected"] = Pixmap()
819                 self["DhcpInfo_Text"] = Label(_("Show Info"))
820                 self["DhcpInfo_OK"] = Pixmap()
821                 self["DhcpInfo_NOK"] = Pixmap()
822                 
823                 self["IPtext"] = Label(_("IP Address"))
824                 self["IP"] = Label()
825                 self["IPInfo"] = Pixmap()
826                 self["IPInfo_selected"] = Pixmap()
827                 self["IPInfo_Text"] = Label(_("Show Info"))
828                 self["IPInfo_OK"] = Pixmap()
829                 self["IPInfo_NOK"] = Pixmap()
830                 
831                 self["DNStext"] = Label(_("Nameserver"))
832                 self["DNS"] = Label()
833                 self["DNSInfo"] = Pixmap()
834                 self["DNSInfo_selected"] = Pixmap()
835                 self["DNSInfo_Text"] = Label(_("Show Info"))
836                 self["DNSInfo_OK"] = Pixmap()
837                 self["DNSInfo_NOK"] = Pixmap()
838                 
839                 self["EditSettings_Text"] = Label(_("Edit settings"))           
840                 self["EditSettingsButton"] = Pixmap()
841                 self["EditSettingsButton_selected"] = Pixmap()
842                 
843                 self["ButtonRedtext"] = Label(_("Close"))
844                 self["ButtonRed"] = Pixmap()
845                 self["ButtonGreentext"] = Label(_("Start test"))
846                 self["ButtonGreen"] = Pixmap()
847                 self["ButtonGreen_off"] = Pixmap()
848                 self["ButtonYellowtext"] = Label(_("Stop test"))
849                 self["ButtonYellow"] = Pixmap()         
850                 self["ButtonYellow_off"] = Pixmap()
851                 
852                 self["InfoTextBorder"] = Pixmap()
853                 self["InfoText"] = Label()
854
855         def getLinkState(self,iface):
856                 iNetwork.getLinkState(iface,self.dataAvail)
857
858         def dataAvail(self,data):
859                 self.output = data.strip()
860                 result = self.output.split('\n')
861                 pattern = re.compile("Link detected: yes")
862                 for item in result:
863                         if re.search(pattern, item):
864                                 self["Network"].instance.setForegroundColor(getColor(Green))
865                                 self["Network"].setText(_("connected"))
866                                 self["NetworkInfo_OK"].show()
867                                 self["NetworkInfo_NOK"].hide()
868                         else:
869                                 self["Network"].instance.setForegroundColor(getColor(Grey))
870                                 self["Network"].setText(_("disconnected"))
871                                 self["NetworkInfo_OK"].hide()
872                                 self["NetworkInfo_NOK"].show()
873
874