diff --git a/tests/uitests/createnet.py b/tests/uitests/createnet.py index 07579f95..4423fc83 100644 --- a/tests/uitests/createnet.py +++ b/tests/uitests/createnet.py @@ -22,13 +22,9 @@ class CreateNet(uiutils.UITestCase): # Create a simple default network newname = "a-test-new-net" - forward = win.find("Forward", "push button") finish = win.find("Finish", "push button") - name = win.find("Network Name:", "text") + name = win.find("Name:", "text") name.text = newname - forward.click() - forward.click() - forward.click() finish.click() # Select the new network in the host window, then do diff --git a/ui/createnet.ui b/ui/createnet.ui index 05b13e5b..25c3b3ec 100644 --- a/ui/createnet.ui +++ b/ui/createnet.ui @@ -68,20 +68,6 @@ 0 - - - True - False - start - <span color='#59B0E2'>Step foo of bar</span> - True - - - False - True - 1 - - True @@ -113,755 +99,636 @@ vertical 12 - + True - True - False - + False - + True False vertical 12 - + True False - start - Choose a name for your virtual network: - True - True - - - False - False - 0 - - - - - True - False - 15 + 6 + 6 - + True False - True - 3 - 4 - - - True - True - 16 - 25 - False - False - - - - Net Name Field - - - - - 1 - 0 - - - - - True - False - - - True - False - gtk-dialog-info - - - False - True - 0 - - - - - True - False - <b>Example:</b> network1 - True - - - False - False - 1 - - - - - 1 - 1 - - - - - True - False - end - Network _Name: - True - True - right - net-name - - - 0 - 0 - - - - - True - False - - - - - - 0 - 1 - - - - - - - False - True - 1 - - - - - - - True - False - Name - - - False - - - - - True - False - vertical - 6 - - - True - False - start - Choose <b>IPv4</b> address space for the virtual network: - True - True - 45 - - - False - True - 0 - - - - - Enable IPv4 network address space definition - True - True - False - start - True - - - - False - True - 1 - - - - - True - False - 15 - - - True - False - vertical - 18 - - - True - False - vertical - 3 - - - True - False - 6 - - - True - False - end - _Network: - True - - - False - True - 0 - - - - - True - True - start - 20 - - 25 - False - False - - - - False - True - 1 - - - - - False - True - 0 - - - - - False - True - 0 - - - - - True - False - 3 - 6 - - - True - True - 15 - - 25 - False - False - - - - 1 - 1 - - - - - True - True - 15 - - False - False - - - - 1 - 2 - - - - - True - False - end - Start: - - - 0 - 1 - - - - - True - False - end - End: - - - 0 - 2 - - - - - Enable DHCPv4 - True - True - False - start - True - - - - 0 - 0 - 2 - - - - - False - True - 1 - - - - - - - True - True - 2 - - - - - 1 - - - - - True - False - IPv4 - - - 1 - False - - - - - True - False - vertical - 6 - - - True - False - start - Choose <b>IPv6</b> address space for the virtual network: - True - True - 45 - - - False - True - 0 - - - - - Enable IPv6 network address space definition - True - True - False - start - True - - - - False - True - 1 - - - - - True - False - 15 - - - True - False - vertical - 18 - - - True - False - vertical - 3 - - - True - False - 6 - - - True - False - end - _Network: - True - - - False - True - 0 - - - - - True - True - start - 40 - - 25 - False - False - - - - False - True - 1 - - - - - False - True - 0 - - - - - False - False - 0 - - - - - True - False - 3 - 6 - - - True - True - 40 - - 25 - False - False - - - - 1 - 1 - - - - - True - True - 40 - - False - False - - - - 1 - 2 - - - - - True - False - end - Start: - - - 0 - 1 - - - - - True - False - start - End: - - - 0 - 2 - - - - - Enable DHCPv6 - True - True - False - start - True - - - - 0 - 0 - 2 - - - - - False - True - 1 - - - - - - - True - True - 2 - - - - - 2 - - - - - True - False - IPv6 - - - 2 - False - - - - - True - False - vertical - 6 - - - True - False - vertical - 24 - - - True - False - 6 - 6 - - - True - False - start - - - - 1 - 0 - - - - - True - False - start - Network _mode: - True - - - 0 - 0 - - - - - True - False - end - Fo_rward to: - True - net-forward-device - - - 0 - 1 - - - - - True - False - end - Device _List: - True - net-forward-device - - - 0 - 2 - - - - - True - False - - - Physical Network - - - - - 1 - 1 - - - - - 200 - True - False - start - - - 1 - 2 - - + start + - False - True - 0 + 1 + 1 - + True False + end + _Mode: + True + + + 0 + 1 + + + + + True + False + end + Fo_rward to: + True + net-forward-device + + + 0 + 2 + + + + + True + False + end + Device _List: + True + net-forward-device + + + 0 + 3 + + + + + True + False + + + Physical Network + + + + + 1 + 2 + + + + + 200 + True + False + start + + + 1 + 3 + + + + + True + False + end + _Name: + True + True + right + net-name + + + 0 + 0 + + + + + True + True + 16 + 25 + + + Net Name Field + + + + + 1 + 0 + + + + + False + True + 0 + + + + + True + True + + + True + False + vertical 6 - + + _Enable IPv4 True - False + True + False start - _DNS Domain: True - net-domain-name + True + True + False - False + True 0 - + True - True - 20 - - 20 - False - False + False + 15 + + + True + False + vertical + 6 + + + True + False + vertical + 3 + + + True + False + 6 + + + True + False + end + _Network: + True + + + False + True + 0 + + + + + True + True + start + 20 + + 25 + + + + False + True + 1 + + + + + False + True + 0 + + + + + False + True + 0 + + + + + True + False + 3 + 6 + + + True + True + 1 + 1 + 15 + + 25 + + + + 1 + 1 + + + + + True + True + 15 + + + + + 1 + 2 + + + + + True + False + end + Start: + + + 0 + 1 + + + + + True + False + end + End: + + + 0 + 2 + + + + + Enable DHCPv4 + True + True + False + start + True + True + + + + 0 + 0 + 2 + + + + + False + True + 1 + + + + False - False + True 1 - - False - True - 2 - + + + + True + False + <b>IPv_4 configuration</b> + True + True + net-ipv4-expander + False True - 0 + 1 + + + + + True + True + + + True + False + vertical + 6 + + + _Enable IPv6 + True + True + False + start + True + True + True + + + + False + True + 0 + + + + + True + False + 15 + + + True + False + vertical + 6 + + + True + False + vertical + 3 + + + True + False + 6 + + + True + False + end + _Network: + True + + + False + True + 0 + + + + + True + True + start + 40 + + 25 + + + + False + True + 1 + + + + + False + True + 0 + + + + + False + False + 0 + + + + + True + False + 3 + 6 + + + True + True + 40 + + 25 + + + + 1 + 1 + + + + + True + True + 40 + + + + + 1 + 2 + + + + + True + False + end + Start: + + + 0 + 1 + + + + + True + False + start + End: + + + 0 + 2 + + + + + Enable DHCPv6 + True + True + False + start + True + True + + + + 0 + 0 + 2 + + + + + False + True + 1 + + + + + + + False + True + 1 + + + + + + + True + False + <b>IPv_6 configuration</b> + True + True + net-ipv6-expander + + + + + False + True + 2 + + + + + True + True + + + True + False + 15 + + + True + False + 6 + 6 + + + True + True + 20 + + 20 + + + 1 + 1 + + + + + Use net_work name + True + True + False + start + True + True + True + net-dns-use-custom + + + 0 + 0 + 2 + + + + + Cust_om + True + True + False + True + True + + + + 0 + 1 + + + + + + + + + True + False + <b>DNS domain name</b> + True + + + + + False + True + 4 - - 3 - - - - - True - False - Misc - - - 3 - False - - True + False True - 1 + 0 @@ -882,43 +749,13 @@ False False - 1 - - - - - gtk-go-back - True - True - True - True - - - - False - False - 2 - - - - - gtk-go-forward - True - True - True - True - True - - - - False - False - 3 + 0 _Finish + True True True image2 @@ -928,7 +765,7 @@ False False - 4 + 2 diff --git a/virtManager/createnet.py b/virtManager/createnet.py index 02a78c42..5193f825 100644 --- a/virtManager/createnet.py +++ b/virtManager/createnet.py @@ -17,13 +17,6 @@ from . import uiutil from .asyncjob import vmmAsyncJob from .baseclass import vmmGObjectUI -(PAGE_NAME, -PAGE_IPV4, -PAGE_IPV6, -PAGE_MISC) = range(4) - -PAGE_MAX = PAGE_MISC - _green = Gdk.Color.parse("#c0ffc0")[1] _red = Gdk.Color.parse("#ffc0c0")[1] _black = Gdk.Color.parse("#000000")[1] @@ -45,15 +38,12 @@ class vmmCreateNetwork(vmmGObjectUI): self.conn = conn self.builder.connect_signals({ - "on_create_pages_switch_page": self.page_changed, "on_create_cancel_clicked": self.close, "on_vmm_create_delete_event": self.close, - "on_create_forward_clicked": self.forward, - "on_create_back_clicked": self.back, "on_create_finish_clicked": self.finish, - "on_net_name_activate": self.forward, "on_net_forward_mode_changed": self._net_forward_mode_changed_cb, + "on_net_dns_use_toggled": self._net_dns_use_toggled_cb, "on_net-ipv4-enable_toggled": self.change_ipv4_enable, "on_net-ipv4-network_changed": self.change_ipv4_network, @@ -91,9 +81,6 @@ class vmmCreateNetwork(vmmGObjectUI): self.conn = None def set_initial_state(self): - notebook = self.widget("create-pages") - notebook.set_show_tabs(False) - blue = Gdk.Color.parse("#0072A8")[1] self.widget("header").modify_bg(Gtk.StateType.NORMAL, blue) @@ -123,13 +110,18 @@ class vmmCreateNetwork(vmmGObjectUI): mode_model.append(["hostdev", _("SR-IOV pool")]) def reset_state(self): - notebook = self.widget("create-pages") - notebook.set_current_page(0) + default_name = Network.find_free_name( + self.conn.get_backend(), "network") + self.widget("net-name").set_text(default_name) - self.page_changed(None, None, 0) + self.widget("net-dns-use-netname").set_active(True) - self.widget("net-name").set_text("") - self.widget("net-domain-name").set_text("") + self.widget("net-ipv4-expander").set_visible(True) + self.widget("net-ipv4-expander").set_expanded(False) + self.widget("net-ipv6-expander").set_visible(True) + self.widget("net-ipv6-expander").set_expanded(False) + self.widget("net-dns-expander").set_visible(True) + self.widget("net-dns-expander").set_expanded(False) self.widget("net-ipv4-enable").set_active(True) self.widget("net-ipv4-network").set_text("192.168.100.0/24") @@ -138,10 +130,8 @@ class vmmCreateNetwork(vmmGObjectUI): self.widget("net-dhcpv4-end").set_text("192.168.100.254") self.widget("net-ipv6-enable").set_active(False) - self.widget("net-ipv6-enable").toggled() self.widget("net-ipv6-network").set_text("") self.widget("net-dhcpv6-enable").set_active(False) - self.widget("net-dhcpv6-enable").toggled() self.widget("net-dhcpv6-start").set_text("") self.widget("net-dhcpv6-end").set_text("") @@ -196,14 +186,25 @@ class vmmCreateNetwork(vmmGObjectUI): ################## def get_config_ipv4_enable(self): - return self.widget("net-ipv4-enable").get_active() + return (self.widget("net-ipv4-expander").is_visible() and + self.widget("net-ipv4-enable").get_active()) def get_config_ipv6_enable(self): - return self.widget("net-ipv6-enable").get_active() + return (self.widget("net-ipv6-expander").is_visible() and + self.widget("net-ipv6-enable").get_active()) def get_config_dhcpv4_enable(self): return self.widget("net-dhcpv4-enable").get_active() def get_config_dhcpv6_enable(self): return self.widget("net-dhcpv6-enable").get_active() + def get_config_domain_name(self): + widget = self.widget("net-domain-name") + if not widget.is_visible(): + return None + + if self.widget("net-dns-use-netname").get_active(): + return self.widget("net-name").get_text() + return widget.get_text() + def _get_network_helper(self, widgetname): widget = self.widget(widgetname) if not widget.is_visible() or not widget.is_sensitive(): @@ -239,7 +240,7 @@ class vmmCreateNetwork(vmmGObjectUI): # Page validation # ################### - def validate_name(self): + def _validate_name(self): try: name = self.widget("net-name").get_text() Network.validate_name(self.conn.get_backend(), name) @@ -248,7 +249,7 @@ class vmmCreateNetwork(vmmGObjectUI): return True - def validate_ipv4(self): + def _validate_ipv4(self): if not self.get_config_ipv4_enable(): return True ip = self.get_config_ip4() @@ -296,7 +297,7 @@ class vmmCreateNetwork(vmmGObjectUI): return True - def validate_ipv6(self): + def _validate_ipv6(self): if not self.get_config_ipv6_enable(): return True ip = self.get_config_ip6() @@ -340,74 +341,33 @@ class vmmCreateNetwork(vmmGObjectUI): return True - def validate_miscellaneous(self): - return True - - def validate(self, page_num): - if page_num == PAGE_NAME: - return self.validate_name() - elif page_num == PAGE_IPV4: - return self.validate_ipv4() - elif page_num == PAGE_IPV6: - return self.validate_ipv6() - elif page_num == PAGE_MISC: - return self.validate_miscellaneous() - return True + def _validate(self): + return (self._validate_name() and + self._validate_ipv4() and + self._validate_ipv6()) ############# # Listeners # ############# - def forward(self, ignore=None): - notebook = self.widget("create-pages") - if self.validate(notebook.get_current_page()) is not True: - return - - self.widget("create-forward").grab_focus() - notebook.next_page() - - def back(self, ignore=None): - notebook = self.widget("create-pages") - notebook.prev_page() - - def page_changed(self, ignore1, ignore2, page_number): - page_lbl = ("%s" % - _("Step %(current_page)d of %(max_page)d") % - {'current_page': page_number + 1, - 'max_page': PAGE_MISC + 1}) - self.widget("header-pagenum").set_markup(page_lbl) - - if page_number == PAGE_NAME: - name_widget = self.widget("net-name") - name_widget.set_sensitive(True) - name_widget.grab_focus() - elif page_number == PAGE_MISC: - name = self.widget("net-name").get_text() - if self.widget("net-domain-name").get_text() == "": - self.widget("net-domain-name").set_text(name) - - self.widget("create-back").set_sensitive(page_number != 0) - - is_last_page = ( - page_number == (self.widget("create-pages").get_n_pages() - 1)) - self.widget("create-forward").set_visible(not is_last_page) - self.widget("create-finish").set_visible(is_last_page) - if is_last_page: - self.widget("create-finish").grab_focus() - def _net_forward_mode_changed_cb(self, src): mode = uiutil.get_list_selection(self.widget("net-forward-mode")) fw_visible = mode not in ["open", "isolated", "hostdev"] - hostdevs_visible = mode in ["hostdev"] - dns_sensitive = mode not in ["hostdev"] + is_hostdev = mode in ["hostdev"] uiutil.set_grid_row_visible( self.widget("net-forward-device"), fw_visible) - uiutil.set_grid_row_visible( - self.widget("net-hostdevs"), hostdevs_visible) - self.widget("dns-domain-name-box").set_sensitive(dns_sensitive) + uiutil.set_grid_row_visible(self.widget("net-hostdevs"), is_hostdev) + + self.widget("net-ipv4-expander").set_visible(not is_hostdev) + self.widget("net-ipv6-expander").set_visible(not is_hostdev) + self.widget("net-dns-expander").set_visible(not is_hostdev) + + def _net_dns_use_toggled_cb(self, src): + custom = self.widget("net-dns-use-custom").get_active() + self.widget("net-domain-name").set_sensitive(custom) def change_ipv4_enable(self, ignore): enabled = self.get_config_ipv4_enable() @@ -509,7 +469,7 @@ class vmmCreateNetwork(vmmGObjectUI): net = Network(self.conn.get_backend()) net.name = self.widget("net-name").get_text() - net.domain_name = self.widget("net-domain-name").get_text() or None + net.domain_name = self.get_config_domain_name() dev, mode = self.get_config_forwarding() if mode: @@ -524,8 +484,6 @@ class vmmCreateNetwork(vmmGObjectUI): pfobj = net.forward.pf.add_new() pfobj.dev = net.forward.dev net.forward.dev = None - net.domain_name = None - net.ipv6 = None return net if self.get_config_ipv4_enable(): @@ -574,7 +532,7 @@ class vmmCreateNetwork(vmmGObjectUI): net.install() def finish(self, ignore): - if not self.validate(PAGE_MAX): + if not self._validate(): return try: diff --git a/virtinst/network.py b/virtinst/network.py index af1c93a3..03841ed7 100644 --- a/virtinst/network.py +++ b/virtinst/network.py @@ -144,6 +144,11 @@ class Network(XMLBuilder): """ Top level class for object XML """ + @staticmethod + def find_free_name(conn, basename, **kwargs): + cb = conn.networkLookupByName + return util.generate_name(basename, cb, **kwargs) + @staticmethod def pretty_forward_desc(mode, dev): if not mode: