createpool: Switch to a single page

Just combine the pages. This simplifies the code and navigation, and
makes it easier to add XML editing
This commit is contained in:
Cole Robinson
2019-05-04 13:08:06 -04:00
parent fe9001fea1
commit 5b0b90c33e
3 changed files with 360 additions and 477 deletions

View File

@@ -22,11 +22,9 @@ class CreatePool(uiutils.UITestCase):
# Create a simple default dir pool
newname = "a-test-new-pool"
forward = win.find("Forward", "push button")
finish = win.find("Finish", "push button")
name = win.find("Name:", "text")
name.text = newname
forward.click()
finish.click()
# Select the new object in the host window, then do
@@ -63,7 +61,6 @@ class CreatePool(uiutils.UITestCase):
name.text = "a-scsi-pool"
typ.click()
win.find_fuzzy("SCSI Host Adapter", "menu item").click()
forward.click()
win.find_fuzzy("Source Path:", "combo").click_combo_entry()
win.find_fuzzy("host2", "menu item").click()
finish.click()
@@ -76,7 +73,6 @@ class CreatePool(uiutils.UITestCase):
name.text = "a-ceph-pool"
typ.click()
win.find_fuzzy("RADOS Block", "menu item").click()
forward.click()
win.find_fuzzy("Host Name:", "text").text = "example.com:1234"
win.find_fuzzy("Source Name:", "text").typeText("frob")
finish.click()

View File

@@ -46,41 +46,15 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="vbox3">
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">&lt;span size='large' color='white'&gt;Create storage pool&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="header-pagenum">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label">&lt;span color='#59B0E2'&gt;Step foo of bar&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<property name="halign">start</property>
<property name="label" translatable="yes">&lt;span size='large' color='white'&gt;Create storage pool&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
@@ -112,14 +86,273 @@
<object class="GtkNotebook" id="pool-pages">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="vexpand">True</property>
<property name="show_border">False</property>
<signal name="switch-page" handler="on_pool_pages_change_page" swapped="no"/>
<child>
<object class="GtkGrid" id="table1">
<object class="GtkGrid" id="pool-details-grid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="row_spacing">4</property>
<property name="column_spacing">6</property>
<child>
<object class="GtkLabel" id="pool-build-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">B_uild Pool:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-build</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">9</property>
</packing>
</child>
<child>
<object class="GtkBox" id="pool-iqn-box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<child>
<object class="GtkCheckButton" id="pool-iqn-chk">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="halign">start</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_pool_iqn_chk_toggled" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="pool-iqn">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="width_chars">25</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">8</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-target-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Tar_get Path:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-target-path</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-format-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">F_ormat:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-format</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-hostname-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Host Na_me:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-hostname</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">5</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-source-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label">sourcep:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-source-path</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">7</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-iqn-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Initiator _IQN:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-iqn-chk</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">8</property>
</packing>
</child>
<child>
<object class="GtkButton" id="pool-target-button">
<property name="label" translatable="yes">B_rowse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">start</property>
<property name="use_underline">True</property>
<signal name="clicked" handler="on_pool_target_button_clicked" swapped="no"/>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="pool-target-path">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_entry">True</property>
<child internal-child="entry">
<object class="GtkEntry">
<property name="can_focus">True</property>
<property name="width_chars">25</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="pool-source-button">
<property name="label" translatable="yes">Bro_wse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">start</property>
<property name="use_underline">True</property>
<signal name="clicked" handler="on_pool_source_button_clicked" swapped="no"/>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">7</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="pool-source-path">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_entry">True</property>
<child internal-child="entry">
<object class="GtkEntry">
<property name="can_focus">True</property>
<property name="width_chars">25</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">7</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="pool-hostname">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="width_chars">25</property>
<signal name="activate" handler="on_pool_hostname_activate" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">5</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="pool-build">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="halign">start</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">9</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-source-name-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Source N_ame:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-source-name</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">6</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="pool-source-name">
<property name="can_focus">True</property>
<property name="width_chars">25</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">6</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="pool-format">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property>
<property name="halign">start</property>
<property name="has_entry">True</property>
<child internal-child="entry">
<object class="GtkEntry">
<property name="can_focus">True</property>
<property name="width_chars">10</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label9">
<property name="visible">True</property>
@@ -131,7 +364,7 @@
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
@@ -142,34 +375,11 @@
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="pool-type">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Select the storage pool type you would like to configure.</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label10">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
@@ -179,315 +389,69 @@
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="pool-type">
<property name="name">pool-type</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<signal name="changed" handler="on_pool_type_changed" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="valign">start</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
</packing>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label">Type</property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkGrid" id="pool-details-grid">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="row_spacing">4</property>
<property name="column_spacing">6</property>
<child>
<object class="GtkLabel" id="pool-build-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">B_uild Pool:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-build</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">6</property>
</packing>
</child>
<child>
<object class="GtkBox" id="pool-iqn-box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<child>
<object class="GtkCheckButton" id="pool-iqn-chk">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="halign">start</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_pool_iqn_chk_toggled" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="pool-iqn">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="width_chars">25</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">5</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-target-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">_Target Path:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-target-path</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-format-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">F_ormat:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-format</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-hostname-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Host Na_me:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-hostname</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-source-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label">sourcep:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-source-path</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-iqn-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Initiator _IQN:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-iqn-chk</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">5</property>
</packing>
</child>
<child>
<object class="GtkButton" id="pool-target-button">
<property name="label" translatable="yes">B_rowse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">start</property>
<property name="use_underline">True</property>
<signal name="clicked" handler="on_pool_target_button_clicked" swapped="no"/>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="pool-target-path">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_entry">True</property>
<child internal-child="entry">
<object class="GtkEntry" id="combobox-entry1">
<property name="can_focus">True</property>
<property name="width_chars">25</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="pool-source-button">
<property name="label" translatable="yes">Bro_wse</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">start</property>
<property name="use_underline">True</property>
<signal name="clicked" handler="on_pool_source_button_clicked" swapped="no"/>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="pool-source-path">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_entry">True</property>
<child internal-child="entry">
<object class="GtkEntry" id="combobox-entry2">
<property name="can_focus">True</property>
<property name="width_chars">25</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="pool-hostname">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="width_chars">25</property>
<signal name="activate" handler="on_pool_hostname_activate" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="pool-build">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="halign">start</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">6</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="pool-source-name-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Source _Name:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">pool-source-name</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="pool-source-name">
<property name="can_focus">True</property>
<property name="width_chars">25</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="pool-format">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property>
<property name="halign">start</property>
<property name="has_entry">True</property>
<child internal-child="entry">
<object class="GtkEntry" id="pool-format-entry">
<property name="can_focus">True</property>
<property name="width_chars">10</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<property name="label"> </property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="label3">
@@ -496,13 +460,12 @@
<property name="label">Details</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
@@ -525,37 +488,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="pool-back">
<property name="label">gtk-go-back</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_pool_back_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="pool-forward">
<property name="label">gtk-go-forward</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_pool_forward_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
<property name="position">0</property>
</packing>
</child>
<child>
@@ -570,7 +503,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">4</property>
<property name="position">2</property>
</packing>
</child>
</object>

View File

@@ -15,9 +15,6 @@ from .baseclass import vmmGObjectUI
from .asyncjob import vmmAsyncJob
from . import uiutil
PAGE_NAME = 0
PAGE_FORMAT = 1
class vmmCreatePool(vmmGObjectUI):
__gsignals__ = {
@@ -31,12 +28,11 @@ class vmmCreatePool(vmmGObjectUI):
self._pool = None
self.builder.connect_signals({
"on_pool_forward_clicked": self.forward,
"on_pool_back_clicked": self.back,
"on_pool_cancel_clicked": self.close,
"on_vmm_create_pool_delete_event": self.close,
"on_pool_finish_clicked": self.forward,
"on_pool_pages_change_page": self.page_changed,
"on_pool_pages_change_page": self._page_changed_cb,
"on_pool_type_changed": self._pool_type_changed_cb,
"on_pool_source_button_clicked": self.browse_source_path,
"on_pool_target_button_clicked": self.browse_target_path,
@@ -48,7 +44,6 @@ class vmmCreatePool(vmmGObjectUI):
self.bind_escape_key_close()
self.set_initial_state()
self.set_page(PAGE_NAME)
def show(self, parent):
logging.debug("Showing new pool wizard")
@@ -65,17 +60,23 @@ class vmmCreatePool(vmmGObjectUI):
self.conn = None
self._pool = None
def _build_pool_type_list(self):
# [pool type, label]
model = Gtk.ListStore(str, str)
type_list = self.widget("pool-type")
type_list.set_model(model)
uiutil.init_combo_text_column(type_list, 1)
for typ in sorted(StoragePool.get_pool_types()):
desc = StoragePool.get_pool_type_desc(typ)
model.append([typ, "%s: %s" % (typ, desc)])
def set_initial_state(self):
self.widget("pool-pages").set_show_tabs(False)
blue = Gdk.Color.parse("#0072A8")[1]
self.widget("header").modify_bg(Gtk.StateType.NORMAL, blue)
type_list = self.widget("pool-type")
type_model = Gtk.ListStore(str, str)
type_list.set_model(type_model)
uiutil.init_combo_text_column(type_list, 1)
format_list = self.widget("pool-format")
format_model = Gtk.ListStore(str, str)
format_list.set_model(format_model)
@@ -99,17 +100,16 @@ class vmmCreatePool(vmmGObjectUI):
source_list.set_model(source_model)
source_list.set_entry_text_column(0)
self.populate_pool_type()
self._build_pool_type_list()
def reset_state(self):
self.widget("pool-pages").set_current_page(0)
self.widget("pool-forward").show()
self.widget("pool-finish").hide()
self.widget("pool-back").set_sensitive(False)
self.widget("pool-name").set_text("")
defaultname = StoragePool.find_free_name(
self.conn.get_backend(), "pool")
self.widget("pool-name").set_text(defaultname)
self.widget("pool-name").grab_focus()
self.widget("pool-type").set_active(0)
self.widget("pool-target-path").get_child().set_text("")
self.widget("pool-source-path").get_child().set_text("")
self.widget("pool-hostname").set_text("")
@@ -119,8 +119,9 @@ class vmmCreatePool(vmmGObjectUI):
self.widget("pool-format").set_active(0)
self.widget("pool-build").set_sensitive(True)
self.widget("pool-build").set_active(False)
self.widget("pool-details-grid").set_visible(False)
uiutil.set_list_selection(self.widget("pool-type"), 0)
self.show_options_by_pool()
def hostname_changed(self, ignore):
# If a hostname was entered, try to lookup valid pool sources.
@@ -129,15 +130,6 @@ class vmmCreatePool(vmmGObjectUI):
def iqn_toggled(self, src):
self.widget("pool-iqn").set_sensitive(src.get_active())
def populate_pool_type(self):
model = self.widget("pool-type").get_model()
model.clear()
types = StoragePool.get_pool_types()
types.sort()
for typ in types:
model.append([typ, "%s: %s" %
(typ, StoragePool.get_pool_type_desc(typ))])
def populate_pool_sources(self):
source_list = self.widget("pool-source-path")
source_model = source_list.get_model()
@@ -237,6 +229,7 @@ class vmmCreatePool(vmmGObjectUI):
widget = self.widget(base + "-label")
uiutil.set_grid_row_visible(widget, do_show)
self._pool = self._make_stub_pool()
src = self._pool.supports_property("source_path")
src_b = src and not self.conn.is_remote()
tgt = self._pool.supports_property("target_path")
@@ -273,7 +266,7 @@ class vmmCreatePool(vmmGObjectUI):
if tgt:
self.widget("pool-target-path").get_child().set_text(
self._pool.default_target_path())
self._pool.default_target_path() or "")
self.widget("pool-target-button").set_sensitive(tgt_b)
self.widget("pool-source-button").set_sensitive(src_b)
@@ -367,21 +360,14 @@ class vmmCreatePool(vmmGObjectUI):
def forward(self, ignore=None):
notebook = self.widget("pool-pages")
try:
if self.validate(notebook.get_current_page()) is not True:
if self._validate() is not True:
return
if notebook.get_current_page() == PAGE_FORMAT:
self.finish()
else:
notebook.next_page()
self.finish()
except Exception as e:
self.err.show_err(_("Uncaught error validating input: %s") % str(e))
return
def back(self, ignore=None):
self.widget("pool-pages").prev_page()
def _signal_pool_added(self, src, connkey, created_name):
ignore = src
if connkey == created_name:
@@ -420,28 +406,11 @@ class vmmCreatePool(vmmGObjectUI):
poolobj.setAutostart(True)
logging.debug("Pool creation succeeded")
def set_page(self, page_number):
# Update page number
page_lbl = ("<span color='#59B0E2'>%s</span>" %
_("Step %(current_page)d of %(max_page)d") %
{'current_page': page_number + 1,
'max_page': PAGE_FORMAT + 1})
self.widget("header-pagenum").set_markup(page_lbl)
def _page_changed_cb(self, notebook, page, pagenum):
pass
isfirst = (page_number == PAGE_NAME)
islast = (page_number == PAGE_FORMAT)
self.widget("pool-back").set_sensitive(not isfirst)
self.widget("pool-finish").set_visible(islast)
self.widget("pool-forward").set_visible(not islast)
self.widget(islast and "pool-finish" or "pool-forward").grab_focus()
self.widget("pool-details-grid").set_visible(islast)
if islast:
self.show_options_by_pool()
def page_changed(self, notebook_ignore, page_ignore, page_number):
self.set_page(page_number)
def _pool_type_changed_cb(self, src):
self.show_options_by_pool()
def get_pool_to_validate(self):
"""
@@ -463,35 +432,26 @@ class vmmCreatePool(vmmGObjectUI):
def _make_stub_pool(self):
pool = StoragePool(self.conn.get_backend())
pool.type = self.get_config_type()
pool.name = self.get_config_name()
return pool
def _validate_page_name(self, usepool=None):
try:
if usepool:
self._pool = usepool
else:
self._pool = self._make_stub_pool()
name = self.get_config_name()
self._pool.validate_name(self._pool.conn, name)
self._pool.name = name
except ValueError as e:
return self.err.val_err(_("Pool Parameter Error"), e)
return True
def _validate_page_format(self):
def _validate(self):
target = self.get_config_target_path()
host = self.get_config_host()
source = self.get_config_source_path()
fmt = self.get_config_format()
iqn = self.get_config_iqn()
source_name = self.get_config_source_name()
if not self._validate_page_name(self.get_pool_to_validate()):
return
name = self.get_config_name()
try:
self._pool = self.get_pool_to_validate()
if not self._pool:
self._pool = self._make_stub_pool()
self._pool.validate_name(self._pool.conn, name)
self._pool.name = name
self._pool.target_path = target
if host:
hostobj = self._pool.hosts.add_new()
@@ -521,12 +481,6 @@ class vmmCreatePool(vmmGObjectUI):
return True
def validate(self, page):
if page == PAGE_NAME:
return self._validate_page_name()
elif page == PAGE_FORMAT:
return self._validate_page_format()
def _browse_file(self, dialog_name, startfolder=None, foldermode=False):
mode = Gtk.FileChooserAction.OPEN
if foldermode: