From 6af45362ce85bf4debb3f4483d74a0e973ffb377 Mon Sep 17 00:00:00 2001
From: Lukas Matena <lukasmatena@seznam.cz>
Date: Thu, 5 Apr 2018 10:44:31 +0200
Subject: [PATCH] Purging volumes button is only shown when the wipe tower is
 enabled and we have single extruder MM printer with more than one extruder

---
 xs/src/slic3r/GUI/Tab.cpp | 32 ++++++++++++++++++++++----------
 xs/src/slic3r/GUI/Tab.hpp |  1 +
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp
index bb0e859e6..e05dda8c4 100644
--- a/xs/src/slic3r/GUI/Tab.cpp
+++ b/xs/src/slic3r/GUI/Tab.cpp
@@ -335,15 +335,28 @@ void Tab::on_value_change(std::string opt_key, boost::any value)
 		bool val = m_config->opt_float("brim_width") > 0.0 ? true : false;
 		get_optgroup()->set_value("brim", val);
 	}
-	if (opt_key == "wipe_tower"){
-		m_config->opt_bool("wipe_tower") ? 
-			get_wiping_dialog_button()->Show() : 
-			get_wiping_dialog_button()->Hide();
-	}
-		
+
+    if (opt_key == "wipe_tower" || opt_key == "single_extruder_multi_material" || opt_key == "extruders_count" )
+        update_wiping_button_visibility();
+
 	update();
 }
 
+
+// Show/hide the 'purging volumes' button
+void Tab::update_wiping_button_visibility() {
+    bool wipe_tower_enabled = dynamic_cast<ConfigOptionBool*>(  (m_preset_bundle->prints.get_edited_preset().config  ).option("wipe_tower"))->value;
+    bool multiple_extruders = dynamic_cast<ConfigOptionFloats*>((m_preset_bundle->printers.get_edited_preset().config).option("nozzle_diameter"))->values.size() > 1;
+    bool single_extruder_mm = dynamic_cast<ConfigOptionBool*>(  (m_preset_bundle->printers.get_edited_preset().config).option("single_extruder_multi_material"))->value;
+
+    if (wipe_tower_enabled && multiple_extruders && single_extruder_mm)
+        get_wiping_dialog_button()->Show();
+    else get_wiping_dialog_button()->Hide();
+
+    (get_wiping_dialog_button()->GetParent())->Layout();
+}
+
+
 // Call a callback to update the selection of presets on the platter:
 // To update the content of the selection boxes,
 // to update the filament colors of the selection boxes,
@@ -373,10 +386,7 @@ void Tab::update_frequently_changed_parameters()
 	bool val = m_config->opt_float("brim_width") > 0.0 ? true : false;
 	get_optgroup()->set_value("brim", val);
 
-	m_config->opt_bool("wipe_tower") ?
-		get_wiping_dialog_button()->Show() :
-		get_wiping_dialog_button()->Hide();
-    (get_wiping_dialog_button()->GetParent())->Layout();
+	update_wiping_button_visibility();
 }
 
 void Tab::reload_compatible_printers_widget()
@@ -1062,6 +1072,8 @@ void TabPrinter::build()
 				if (opt_key.compare("extruders_count")==0 || opt_key.compare("single_extruder_multi_material")==0) {
 					extruders_count_changed(extruders_count);
 					update_dirty();
+                    if (opt_key.compare("single_extruder_multi_material")==0) // the single_extruder_multimaterial was added to force pages
+                        on_value_change(opt_key, value);                      // rebuild - let's make sure the on_value_change is not skipped
 				}
 				else {
 					update_dirty();
diff --git a/xs/src/slic3r/GUI/Tab.hpp b/xs/src/slic3r/GUI/Tab.hpp
index 4f65f1475..f4aafd184 100644
--- a/xs/src/slic3r/GUI/Tab.hpp
+++ b/xs/src/slic3r/GUI/Tab.hpp
@@ -174,6 +174,7 @@ public:
 protected:
 	void			on_presets_changed();
 	void			update_frequently_changed_parameters();
+    void            update_wiping_button_visibility();
 };
 
 //Slic3r::GUI::Tab::Print;