Implemented open file dialog
This commit is contained in:
77
main.c
77
main.c
@@ -3,15 +3,16 @@
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
enum cell_store_columns {
|
||||
LIBRARY,
|
||||
CELL,
|
||||
STORE_COLUMN
|
||||
LIBRARY,
|
||||
CELL,
|
||||
STORE_COLUMN
|
||||
};
|
||||
|
||||
|
||||
struct open_button_data {
|
||||
GList **list_ptr;
|
||||
GtkTreeStore *cell_store;
|
||||
GtkWindow *main_window;
|
||||
GList **list_ptr;
|
||||
GtkTreeStore *cell_store;
|
||||
};
|
||||
|
||||
|
||||
@@ -36,24 +37,62 @@ void on_load_gds(gpointer button, gpointer user)
|
||||
struct gds_cell *gds_c;
|
||||
struct open_button_data *ptr = (struct open_button_data *)user;
|
||||
GtkTreeStore *store = ptr->cell_store;
|
||||
GtkWidget *open_dialog;
|
||||
GtkFileChooser *file_chooser;
|
||||
GtkFileFilter *filter;
|
||||
GtkStyleContext *button_style;
|
||||
gint dialog_result;
|
||||
int gds_result;
|
||||
char *filename;
|
||||
|
||||
gtk_tree_store_clear(store);
|
||||
open_dialog = gtk_file_chooser_dialog_new("Open GDSII File", ptr->main_window, GTK_FILE_CHOOSER_ACTION_OPEN,
|
||||
"Cancel", GTK_RESPONSE_CANCEL, "Open GDSII", GTK_RESPONSE_ACCEPT, NULL);
|
||||
file_chooser = GTK_FILE_CHOOSER(open_dialog);
|
||||
/* Add GDS II Filter */
|
||||
filter = gtk_file_filter_new();
|
||||
gtk_file_filter_add_pattern(filter, "*.gds");
|
||||
gtk_file_filter_set_name(filter, "GDSII-Files");
|
||||
gtk_file_chooser_add_filter(file_chooser, filter);
|
||||
|
||||
clear_lib_list(ptr->list_ptr);
|
||||
parse_gds_from_file("/home/mari/Desktop/test.gds", ptr->list_ptr);
|
||||
dialog_result = gtk_dialog_run(GTK_DIALOG(open_dialog));
|
||||
|
||||
for (lib = *(ptr->list_ptr); lib != NULL; lib = lib->next) {
|
||||
gds_lib = (struct gds_library *)lib->data;
|
||||
/* Create top level iter */
|
||||
gtk_tree_store_append (store, &libiter, NULL);
|
||||
gtk_tree_store_set (store, &libiter, LIBRARY, gds_lib->name, -1);
|
||||
for (cell = gds_lib->cells; cell != NULL; cell = cell->next) {
|
||||
gds_c = (struct gds_cell *)cell->data;
|
||||
gtk_tree_store_append (store, &celliter, &libiter);
|
||||
gtk_tree_store_set (store, &celliter, CELL, gds_c->name, -1);
|
||||
if (dialog_result == GTK_RESPONSE_ACCEPT) {
|
||||
|
||||
/* Get File name */
|
||||
filename = gtk_file_chooser_get_filename(file_chooser);
|
||||
|
||||
/* Clear Display */
|
||||
gtk_tree_store_clear(store);
|
||||
/* Delete parsed GDS data */
|
||||
clear_lib_list(ptr->list_ptr);
|
||||
|
||||
/* Parse new GDSII file */
|
||||
gds_result = parse_gds_from_file(filename, ptr->list_ptr);
|
||||
|
||||
/* Delete file name afterwards */
|
||||
g_free(filename);
|
||||
if (gds_result)
|
||||
goto end_destroy;
|
||||
|
||||
/* remove suggested action from Open button */
|
||||
button_style = gtk_widget_get_style_context(GTK_WIDGET(button));
|
||||
gtk_style_context_remove_class(button_style, "suggested-action");
|
||||
|
||||
for (lib = *(ptr->list_ptr); lib != NULL; lib = lib->next) {
|
||||
gds_lib = (struct gds_library *)lib->data;
|
||||
/* Create top level iter */
|
||||
gtk_tree_store_append (store, &libiter, NULL);
|
||||
gtk_tree_store_set (store, &libiter, LIBRARY, gds_lib->name, -1);
|
||||
for (cell = gds_lib->cells; cell != NULL; cell = cell->next) {
|
||||
gds_c = (struct gds_cell *)cell->data;
|
||||
gtk_tree_store_append (store, &celliter, &libiter);
|
||||
gtk_tree_store_set (store, &celliter, CELL, gds_c->name, -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
end_destroy:
|
||||
gtk_widget_destroy(open_dialog);
|
||||
}
|
||||
|
||||
void on_convert_clicked(gpointer button, gpointer user)
|
||||
@@ -66,7 +105,6 @@ static GtkTreeStore * setup_cell_selector(GtkTreeView* view)
|
||||
GtkTreeStore *cell_store;
|
||||
|
||||
GtkCellRenderer *render;
|
||||
GtkCellRenderer *render2;
|
||||
GtkTreeViewColumn *column;
|
||||
|
||||
cell_store = gtk_tree_store_new(STORE_COLUMN, G_TYPE_STRING, G_TYPE_STRING);
|
||||
@@ -75,7 +113,7 @@ static GtkTreeStore * setup_cell_selector(GtkTreeView* view)
|
||||
render = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes("Library", render, "text", LIBRARY, NULL);
|
||||
gtk_tree_view_append_column(view, column);
|
||||
//g_object_unref(column);
|
||||
|
||||
column = gtk_tree_view_column_new_with_attributes("Cell", render, "text", CELL, NULL);
|
||||
gtk_tree_view_append_column(view, column);
|
||||
|
||||
@@ -103,6 +141,7 @@ int main(int argc, char **argv)
|
||||
|
||||
open_data.cell_store = cell_store;
|
||||
open_data.list_ptr = &gds_libs;
|
||||
open_data.main_window = GTK_WINDOW(gtk_builder_get_object(main_builder, "main-window"));
|
||||
g_signal_connect(GTK_WIDGET(gtk_builder_get_object(main_builder, "button-load-gds")),
|
||||
"clicked", G_CALLBACK(on_load_gds), (gpointer)&open_data);
|
||||
|
||||
|
Reference in New Issue
Block a user