]> de.git.xonotic.org Git - voretournament/voretournament.git/blobdiff - misc/mediasource/extra/netradiant-src/contrib/brushexport/callbacks.cpp
Include netRadiant source in this GIT
[voretournament/voretournament.git] / misc / mediasource / extra / netradiant-src / contrib / brushexport / callbacks.cpp
diff --git a/misc/mediasource/extra/netradiant-src/contrib/brushexport/callbacks.cpp b/misc/mediasource/extra/netradiant-src/contrib/brushexport/callbacks.cpp
new file mode 100644 (file)
index 0000000..0aea73d
--- /dev/null
@@ -0,0 +1,148 @@
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <set>
+
+#include "qerplugin.h"
+#include "debugging/debugging.h"
+#include "support.h"
+#include "export.h"
+
+// stuff from interface.cpp
+void DestroyWindow();
+
+
+namespace callbacks {
+
+void OnDestroy(GtkWidget* w, gpointer data)
+{
+       DestroyWindow();
+}
+
+void OnExportClicked(GtkButton* button, gpointer user_data)
+{
+       GtkWidget* window = lookup_widget(GTK_WIDGET(button), "w_plugplug2");
+       ASSERT_NOTNULL(window);
+       const char* cpath = GlobalRadiant().m_pfnFileDialog(window, false, "Save as Obj", 0, 0, false, false, true);
+       if(!cpath)
+               return;
+
+       std::string path(cpath);
+
+  // get ignore list from ui
+  std::set<std::string> ignore;
+  
+  GtkTreeView* view = GTK_TREE_VIEW(lookup_widget(GTK_WIDGET(button), "t_materialist"));
+  GtkListStore* list = GTK_LIST_STORE(gtk_tree_view_get_model(view));
+
+  GtkTreeIter iter;
+  gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list), &iter);
+  while(valid)
+  {
+    gchar* data;
+       gtk_tree_model_get(GTK_TREE_MODEL(list), &iter, 0, &data, -1);
+       globalOutputStream() << data << "\n";
+       ignore.insert(std::string(data));
+       g_free(data);
+       valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(list), &iter);
+  }
+  
+  for(std::set<std::string>::iterator it(ignore.begin()); it != ignore.end(); ++it)
+    globalOutputStream() << it->c_str() << "\n";
+  
+  // collapse mode
+  collapsemode mode = COLLAPSE_NONE;
+  
+  GtkWidget* radio = lookup_widget(GTK_WIDGET(button), "r_collapse");
+  ASSERT_NOTNULL(radio);
+  
+  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)))
+    mode = COLLAPSE_ALL;
+  else
+  {
+    radio = lookup_widget(GTK_WIDGET(button), "r_collapsebymaterial");
+    ASSERT_NOTNULL(radio);
+    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)))
+      mode = COLLAPSE_BY_MATERIAL;
+       else
+       {
+         radio = lookup_widget(GTK_WIDGET(button), "r_nocollapse");
+         ASSERT_NOTNULL(radio);
+         ASSERT_NOTNULL(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)));
+         mode = COLLAPSE_NONE;
+       }
+  }
+
+  // export materials?
+  GtkWidget* toggle = lookup_widget(GTK_WIDGET(button), "t_exportmaterials");
+  ASSERT_NOTNULL(toggle);
+
+  bool exportmat = FALSE;
+
+  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle)))
+         exportmat = TRUE;
+
+  // limit material names?
+  toggle = lookup_widget(GTK_WIDGET(button), "t_limitmatnames");
+  ASSERT_NOTNULL(toggle);
+
+  bool limitMatNames = FALSE;
+
+  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle)) && exportmat)
+         limitMatNames = TRUE;
+
+  // create objects instead of groups?
+  toggle = lookup_widget(GTK_WIDGET(button), "t_objects");
+  ASSERT_NOTNULL(toggle);
+
+  bool objects = FALSE;
+
+  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle))  && exportmat)
+         objects = TRUE;
+  
+  // export
+  ExportSelection(ignore, mode, exportmat, path, limitMatNames, objects);
+}
+
+void OnAddMaterial(GtkButton* button, gpointer user_data)
+{
+  GtkEntry* edit = GTK_ENTRY(lookup_widget(GTK_WIDGET(button), "ed_materialname"));
+  ASSERT_NOTNULL(edit);
+  
+  const gchar* name = gtk_entry_get_text(edit);
+  if(g_utf8_strlen(name, -1) > 0)
+  {
+       GtkListStore* list = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(lookup_widget(GTK_WIDGET(button), "t_materialist"))));
+       GtkTreeIter iter;
+       gtk_list_store_append(list, &iter);
+       gtk_list_store_set(list, &iter, 0, name, -1);
+       gtk_entry_set_text(edit, "");
+  }
+}
+
+void OnRemoveMaterial(GtkButton* button, gpointer user_data)
+{
+       GtkTreeView* view = GTK_TREE_VIEW(lookup_widget(GTK_WIDGET(button), "t_materialist"));
+       GtkListStore* list = GTK_LIST_STORE(gtk_tree_view_get_model(view));
+       GtkTreeSelection* sel = gtk_tree_view_get_selection(view);
+       
+       GtkTreeIter iter;
+       if(gtk_tree_selection_get_selected(sel, 0, &iter))
+         gtk_list_store_remove(list, &iter);
+}
+
+void OnExportMatClicked(GtkButton* button, gpointer user_data)
+{
+       GtkWidget* toggleLimit = lookup_widget(GTK_WIDGET(button), "t_limitmatnames");
+       GtkWidget* toggleObject = lookup_widget(GTK_WIDGET(button), "t_objects");
+
+       if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+       {
+               gtk_widget_set_sensitive(GTK_WIDGET(toggleLimit), TRUE);
+               gtk_widget_set_sensitive(GTK_WIDGET(toggleObject), TRUE);
+       } else {
+               gtk_widget_set_sensitive(GTK_WIDGET(toggleLimit), FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(toggleObject), FALSE);
+       }
+}
+
+}// callbacks