-#include <glib.h>\r
-#include <gtk/gtk.h>\r
-#include <set>\r
-\r
-#include "qerplugin.h"\r
-#include "debugging/debugging.h"\r
-#include "support.h"\r
-#include "export.h"\r
-\r
-// stuff from interface.cpp\r
-void DestroyWindow();\r
-\r
-\r
-namespace callbacks {\r
-\r
-void OnDestroy(GtkWidget* w, gpointer data)\r
-{\r
- DestroyWindow();\r
-}\r
-\r
-void OnExportClicked(GtkButton* button, gpointer user_data)\r
-{\r
- GtkWidget* window = lookup_widget(GTK_WIDGET(button), "w_plugplug2");\r
- ASSERT_NOTNULL(window);\r
- const char* path = GlobalRadiant().m_pfnFileDialog(window, false, "Save as Obj", 0, 0);\r
- if(!path)\r
- return;\r
- \r
- // get ignore list from ui\r
- std::set<std::string> ignore;\r
- \r
- GtkTreeView* view = GTK_TREE_VIEW(lookup_widget(GTK_WIDGET(button), "t_materialist"));\r
- GtkListStore* list = GTK_LIST_STORE(gtk_tree_view_get_model(view));\r
-\r
- GtkTreeIter iter;\r
- gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list), &iter);\r
- while(valid)\r
- {\r
- gchar* data;\r
- gtk_tree_model_get(GTK_TREE_MODEL(list), &iter, 0, &data, -1);\r
- globalOutputStream() << data << "\n";\r
- ignore.insert(std::string(data));\r
- g_free(data);\r
- valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(list), &iter);\r
- }\r
- \r
- for(std::set<std::string>::iterator it(ignore.begin()); it != ignore.end(); ++it)\r
- globalOutputStream() << it->c_str() << "\n";\r
- \r
- // collapse mode\r
- collapsemode mode = COLLAPSE_NONE;\r
- \r
- GtkWidget* radio = lookup_widget(GTK_WIDGET(button), "r_collapse");\r
- ASSERT_NOTNULL(radio);\r
- \r
- if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)))\r
- mode = COLLAPSE_ALL;\r
- else\r
- {\r
- radio = lookup_widget(GTK_WIDGET(button), "r_collapsebymaterial");\r
- ASSERT_NOTNULL(radio);\r
- if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)))\r
- mode = COLLAPSE_BY_MATERIAL;\r
- else\r
- {\r
- radio = lookup_widget(GTK_WIDGET(button), "r_nocollapse");\r
- ASSERT_NOTNULL(radio);\r
- ASSERT_NOTNULL(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)));\r
- mode = COLLAPSE_NONE;\r
- }\r
- }\r
- \r
- // export\r
- ExportSelection(ignore, mode, path);\r
-}\r
-\r
-void OnAddMaterial(GtkButton* button, gpointer user_data)\r
-{\r
- GtkEntry* edit = GTK_ENTRY(lookup_widget(GTK_WIDGET(button), "ed_materialname"));\r
- ASSERT_NOTNULL(edit);\r
- \r
- const gchar* name = gtk_entry_get_text(edit);\r
- if(g_utf8_strlen(name, -1) > 0)\r
- {\r
- GtkListStore* list = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(lookup_widget(GTK_WIDGET(button), "t_materialist"))));\r
- GtkTreeIter iter;\r
- gtk_list_store_append(list, &iter);\r
- gtk_list_store_set(list, &iter, 0, name, -1);\r
- gtk_entry_set_text(edit, "");\r
- }\r
-}\r
-\r
-void OnRemoveMaterial(GtkButton* button, gpointer user_data)\r
-{\r
- GtkTreeView* view = GTK_TREE_VIEW(lookup_widget(GTK_WIDGET(button), "t_materialist"));\r
- GtkListStore* list = GTK_LIST_STORE(gtk_tree_view_get_model(view));\r
- GtkTreeSelection* sel = gtk_tree_view_get_selection(view);\r
- \r
- GtkTreeIter iter;\r
- if(gtk_tree_selection_get_selected(sel, 0, &iter))\r
- gtk_list_store_remove(list, &iter);\r
-}\r
-\r
-}// callbacks\r
+#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( ui::Widget w, gpointer data ){
+ DestroyWindow();
+}
+
+void OnExportClicked( ui::Button button, gpointer user_data ){
+ auto window = ui::Window::from(lookup_widget( button , "w_plugplug2" ));
+ ASSERT_TRUE( 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;
+
+ auto view = ui::TreeView::from(lookup_widget(button, "t_materialist"));
+ ui::ListStore list = ui::ListStore::from(gtk_tree_view_get_model( view ));
+
+ GtkTreeIter iter;
+ gboolean valid = gtk_tree_model_get_iter_first(list, &iter );
+ while ( valid )
+ {
+ gchar* data;
+ gtk_tree_model_get(list, &iter, 0, &data, -1 );
+ globalOutputStream() << data << "\n";
+ ignore.insert( std::string( data ) );
+ g_free( data );
+ valid = gtk_tree_model_iter_next(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;
+
+ auto radio = lookup_widget( button , "r_collapse" );
+ ASSERT_TRUE( radio );
+
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radio ) ) ) {
+ mode = COLLAPSE_ALL;
+ }
+ else
+ {
+ radio = lookup_widget( button , "r_collapsebymaterial" );
+ ASSERT_TRUE( radio );
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radio ) ) ) {
+ mode = COLLAPSE_BY_MATERIAL;
+ }
+ else
+ {
+ radio = lookup_widget( button , "r_nocollapse" );
+ ASSERT_TRUE( radio );
+ ASSERT_TRUE( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radio ) ) );
+ mode = COLLAPSE_NONE;
+ }
+ }
+
+ // export materials?
+ auto toggle = lookup_widget( button , "t_exportmaterials" );
+ ASSERT_TRUE( toggle );
+
+ bool exportmat = FALSE;
+
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( toggle ) ) ) {
+ exportmat = TRUE;
+ }
+
+ // limit material names?
+ toggle = lookup_widget( button , "t_limitmatnames" );
+ ASSERT_TRUE( 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( button , "t_objects" );
+ ASSERT_TRUE( 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( ui::Button button, gpointer user_data ){
+ auto edit = ui::Entry::from( lookup_widget( button , "ed_materialname" ) );
+ ASSERT_TRUE( edit );
+
+ const gchar* name = gtk_entry_get_text( edit );
+ if ( g_utf8_strlen( name, -1 ) > 0 ) {
+ ui::ListStore list = ui::ListStore::from( gtk_tree_view_get_model(ui::TreeView::from(lookup_widget(button, "t_materialist") )) );
+ list.append(0, name);
+ gtk_entry_set_text( edit, "" );
+ }
+}
+
+void OnRemoveMaterial( ui::Button button, gpointer user_data ){
+ ui::TreeView view = ui::TreeView::from(lookup_widget(button, "t_materialist"));
+ ui::ListStore list = ui::ListStore::from( gtk_tree_view_get_model( view ) );
+ auto sel = ui::TreeSelection::from(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( ui::Button button, gpointer user_data ){
+ ui::Widget toggleLimit = lookup_widget( button , "t_limitmatnames" );
+ ui::Widget toggleObject = lookup_widget( button , "t_objects" );
+
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( button ) ) ) {
+ gtk_widget_set_sensitive( toggleLimit , TRUE );
+ gtk_widget_set_sensitive( toggleObject , TRUE );
+ }
+ else {
+ gtk_widget_set_sensitive( toggleLimit , FALSE );
+ gtk_widget_set_sensitive( toggleObject , FALSE );
+ }
+}
+
+} // callbacks