#include #include #include #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 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::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