1
0
mirror of https://github.com/gryf/wicd.git synced 2025-12-19 20:38:00 +01:00

Added support for putting interfaces up/down through the gui.

This commit is contained in:
imdano
2008-03-04 14:06:04 +00:00
parent 7de302fa1c
commit a2dedaaa03
5 changed files with 192 additions and 40 deletions

View File

@@ -39,6 +39,7 @@ import sys
import time
import getopt
import ConfigParser
# DBUS
import gobject
import dbus
@@ -666,6 +667,11 @@ class ConnectionWizard(dbus.service.Object):
print 'automatically detected wireless interface', iface
return str(iface)
@dbus.service.method('org.wicd.daemon.wireless')
def IsWirelessUp(self):
""" Returns a boolean specifying if wireless is up or down. """
return self.wifi.IsUp()
@dbus.service.method('org.wicd.daemon.wireless')
def GetPrintableSignalStrength(self, iwconfig=None):
""" Assigns a signal strength appropriate for display
@@ -715,6 +721,18 @@ class ConnectionWizard(dbus.service.Object):
print 'returning -1, current network not found'
return -1
@dbus.service.method('org.wicd.daemon.wireless')
def EnableWirelessInterface(self):
""" Calls a method to enable the wireless interface. """
result = self.wifi.EnableInterface()
return result
@dbus.service.method('org.wicd.daemon.wireless')
def DisableWirelessInterface(self):
""" Calls a method to disable the wireless interface. """
result = self.wifi.DisableInterface()
return result
@dbus.service.method('org.wicd.daemon.wireless')
def ConnectWireless(self, id):
""" Connects the the wireless network specified by i"""
@@ -864,6 +882,23 @@ class ConnectionWizard(dbus.service.Object):
else:
return self.__printReturn("returning plugged in", None)
@dbus.service.method('org.wicd.daemon.wired')
def IsWiredUp(self):
""" Returns a boolean specifying if wired iface is up or down. """
return self.wired.IsUp()
@dbus.service.method('org.wicd.daemon.wired')
def EnableWiredInterface(self):
""" Calls a method to enable the wired interface. """
result = self.wired.EnableInterface()
return result
@dbus.service.method('org.wicd.daemon.wired')
def DisableWiredInterface(self):
""" Calls a method to disable the wired interface. """
result = self.wired.DisableInterface()
return result
@dbus.service.method('org.wicd.daemon.wired')
def ConnectWired(self):
"""connects to a wired network. """
@@ -1453,7 +1488,6 @@ Arguments:
\t-h\t--help\t\tPrint this help.
"""
def daemonize():
""" Disconnect from the controlling terminal.
@@ -1489,7 +1523,6 @@ def daemonize():
print >> sys.stderr, "Fork #2 failed: %d (%s)" % (e.errno, e.strerror)
sys.exit(1)
def main(argv):
""" The main daemon program.

View File

@@ -211,8 +211,77 @@
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="iface_menu_button">
<property name="visible">True</property>
<property name="label" translatable="yes">Enable/Disable Interfaces</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="iface_menu">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkImageMenuItem" id="iface_menu_enable_wired">
<property name="visible">True</property>
<property name="label" translatable="yes">Enable Wired Interface</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_iface_menu_enable_wired"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image6">
<property name="visible">True</property>
<property name="stock">gtk-yes</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="iface_menu_enable_wireless">
<property name="visible">True</property>
<property name="label" translatable="yes">Enable Wireless Interface</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_iface_menu_enable_wireless"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image5">
<property name="visible">True</property>
<property name="stock">gtk-yes</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="iface_menu_disable_wired">
<property name="visible">True</property>
<property name="label" translatable="yes">Disable Wired Interface</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_iface_menu_disable_wired"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image7">
<property name="visible">True</property>
<property name="stock">gtk-stop</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="iface_menu_disable_wireless">
<property name="visible">True</property>
<property name="label" translatable="yes">Disable Wireless Interface</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_iface_menu_disable_wireless"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image8">
<property name="visible">True</property>
<property name="stock">gtk-stop</property>
</widget>
</child>
</widget>
</child>
</widget>
</child>
</widget>

64
gui.py
View File

@@ -1083,9 +1083,8 @@ class WiredProfileChooser:
instruct_label.set_alignment(0, 0)
stoppopcheckbox.set_active(False)
# Remove widgets that were added to the normal
# WiredNetworkEntry so that they can be added to
# the pop-up wizard.
# Remove widgets that were added to the normal WiredNetworkEntry
# so that they can be added to the pop-up wizard.
wired_net_entry.vboxTop.remove(wired_net_entry.hbox_temp)
wired_net_entry.vboxTop.remove(wired_net_entry.profile_help)
@@ -1133,7 +1132,11 @@ class appGui:
"connect_clicked" : self.connect_hidden,
"preferences_clicked" : self.settings_dialog,
"about_clicked" : self.about_dialog,
"create_adhoc_network_button_button" : self.create_adhoc_network}
"create_adhoc_network_button_button" : self.create_adhoc_network,
"on_iface_menu_enable_wireless" : self.on_enable_wireless,
"on_iface_menu_disable_wireless" : self.on_disable_wireless,
"on_iface_menu_enable_wired" : self.on_enable_wired,
"on_iface_menu_disable_wired" : self.on_disable_wired,}
self.wTree.signal_autoconnect(dic)
# Set some strings in the GUI - they may be translated
@@ -1158,6 +1161,15 @@ class appGui:
self.window.connect('delete_event', self.exit)
if not wireless.IsWirelessUp():
self.wTree.get_widget("iface_menu_disable_wireless").hide()
else:
self.wTree.get_widget("iface_menu_enable_wireless").hide()
if not wired.IsWiredUp():
self.wTree.get_widget("iface_menu_disable_wired").hide()
else:
self.wTree.get_widget("iface_menu_enable_wired").hide()
size = config.ReadWindowSize()
width = size[0]
height = size[1]
@@ -1382,6 +1394,50 @@ class appGui:
else:
dialog.destroy()
def on_enable_wireless(self, widget):
""" Called when the Enable Wireless Interface button is clicked. """
success = wireless.EnableWirelessInterface()
if success:
enable_item = self.wTree.get_widget("iface_menu_enable_wireless")
disable_item = self.wTree.get_widget("iface_menu_disable_wireless")
enable_item.hide()
disable_item.show()
else:
misc.error(self.window, "Failed to enable wireless interface.")
def on_disable_wireless(self, widget):
""" Called when the Disable Wireless Interface button is clicked. """
success = wireless.DisableWirelessInterface()
if success:
enable_item = self.wTree.get_widget("iface_menu_enable_wireless")
disable_item = self.wTree.get_widget("iface_menu_disable_wireless")
enable_item.show()
disable_item.hide()
else:
misc.error(self.window, "Failed to disable wireless interface.")
def on_enable_wired(self, widget):
""" Called when the Enable Wired Interface button is clicked. """
success = wired.EnableWiredInterface()
if success:
enable_item = self.wTree.get_widget("iface_menu_enable_wired")
disable_item = self.wTree.get_widget("iface_menu_disable_wired")
enable_item.hide()
disable_item.show()
else:
misc.error(self.window, "Failed to enable wired interface.")
def on_disable_wired(self, widget):
""" Called when the Disable Wired Interface button is clicked. """
success = wired.DisableWiredInterface()
if success:
enable_item = self.wTree.get_widget("iface_menu_enable_wired")
disable_item = self.wTree.get_widget("iface_menu_disable_wired")
enable_item.show()
disable_item.hide()
else:
misc.error(self.window, "Failed to disable wired interface.")
def cancel_connect(self, widget):
""" Alerts the daemon to cancel the connection process. """
#should cancel a connection if there

View File

@@ -286,6 +286,10 @@ class Wireless(Controller):
""" Get the out of iwconfig. """
return self.wiface.GetIwconfig()
def IsUp(self):
""" Calls the IsUp method for the wireless interface. """
return self.wiface.IsUp()
def CreateAdHocNetwork(self, essid, channel, ip, enctype, key,
enc_used, ics):
""" Create an ad-hoc wireless network.
@@ -368,12 +372,11 @@ class Wireless(Controller):
wiface.Down()
wiface.Up()
def SetDriver(self):
self.driver = self.GetDriverName()
def EnableInterface(self):
return self.wiface.Up()
def GetDriverName(self):
""" Gets the driver associated with the wireless interface. """
return self.wiface.GetDriverName()
def DisableInterface(self):
return self.wiface.Down()
def SetWPADriver(self, driver):
self.wiface.SetWpaDriver(driver)
@@ -632,18 +635,9 @@ class Wired(Controller):
liface.Down()
liface.Up()
def SetDriver(self):
self.driver = self.GetDriverName()
def GetDriverName(self):
""" Get the driver associated with the wired interface. """
return self.liface.GetDriverName()
def LoadDriver(self):
return self.liface.LoadDriver(self.driver)
def UnloadDriver(self):
return self.liface.UnloadDriver(self.driver)
def IsUp(self):
""" Calls the IsUp method for the wired interface. """
return self.liface.IsUp()
def EnableInterface(self):
return self.liface.Up()

View File

@@ -393,6 +393,20 @@ class Interface(object):
output = misc.Run(cmd)
return misc.RunRegex(ip_pattern, output)
def IsUp(self):
""" Determines if the interface is up. """
cmd = "ifconfig " + self.iface
output = misc.Run(cmd)
lines = output.split('\n')
if len(lines) < 5:
return False
for line in lines[1:4]:
if line.strip().startswith('UP'):
return True
return False
class WiredInterface(Interface):
""" Control a wired network interface. """
@@ -452,20 +466,6 @@ class WiredInterface(Interface):
else:
return False
def IsUp(self):
""" Determines if the interface is up. """
cmd = "ifconfig " + self.iface
output = misc.Run(cmd)
lines = output.split('\n')
if len(lines) < 5:
return False
for line in lines[1:4]:
if line.strip().startswith('UP'):
return True
return False
class WirelessInterface(Interface):
""" Control a wireless network interface. """