diff options
Diffstat (limited to 'ldmicro/lib/linuxUI/linuxUI.cpp')
-rw-r--r-- | ldmicro/lib/linuxUI/linuxUI.cpp | 109 |
1 files changed, 67 insertions, 42 deletions
diff --git a/ldmicro/lib/linuxUI/linuxUI.cpp b/ldmicro/lib/linuxUI/linuxUI.cpp index 3dbe1bb..9d912ea 100644 --- a/ldmicro/lib/linuxUI/linuxUI.cpp +++ b/ldmicro/lib/linuxUI/linuxUI.cpp @@ -59,51 +59,76 @@ void MessageBox(HWID pWindow, char* message, char* title, UINT mFlags) gtk_widget_destroy (dialog); } -// BOOL GetSaveFileName(OPENFILENAME ofn) -// { -// GtkWidget *dialog; -// GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN; - -// dialog = gtk_file_chooser_dialog_new ("Open File", -// GTK_WINDOW(window), -// action, -// "_Cancel", -// GTK_RESPONSE_CANCEL, -// "_Open", -// GTK_RESPONSE_ACCEPT, -// NULL); - -// GtkFileFilter *filter = gtk_file_filter_new (); -// gtk_file_filter_add_pattern (filter, "*"); -// gtk_file_filter_set_name (filter, "All files"); -// gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); +BOOL GetSaveFileName(OPENFILENAME *ofn) +{ + GtkWidget *dialog; + GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN; -// filter = gtk_file_filter_new (); -// gtk_file_filter_add_pattern (filter, "*.c"); -// gtk_file_filter_add_pattern (filter, "*.cpp"); -// gtk_file_filter_set_name (filter, "C source files"); -// gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); + dialog = gtk_file_chooser_dialog_new (ofn->lpstrTitle, + GTK_WINDOW(ofn->parentWindow), + action, + "_Cancel", + GTK_RESPONSE_CANCEL, + "_Open", + GTK_RESPONSE_ACCEPT, + NULL); + //g_print("filter created\n"); + + if (ofn->Flags & OFN_OVERWRITEPROMPT == OFN_OVERWRITEPROMPT) + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); -// filter = gtk_file_filter_new (); -// gtk_file_filter_add_pattern (filter, "*.h"); -// gtk_file_filter_set_name (filter, "C hedder files"); -// gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); + GtkFileFilter *filter = gtk_file_filter_new (); + char* strFilter = new char[strlen(ofn->lpstrFilter)]; + DWORD strFilterLen = 0; + BOOL filterResetFlag = FALSE; + + for (int i = 0; !(ofn->lpstrFilter[i] == '\0' && ofn->lpstrFilter[i-1] == '\0'); ++i) + { + memcpy (strFilter + strFilterLen, &ofn->lpstrFilter[i], 1 ); + ++strFilterLen; + if (ofn->lpstrFilter[i] == '\0') + if (filterResetFlag) + { + gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), strFilter); + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter); + filter = gtk_file_filter_new (); + strFilterLen = 0; + //g_print("filter pat: %s\n", strFilter); + //g_print("filter reset\n"); + filterResetFlag = FALSE; + } + else + { + gtk_file_filter_set_name (GTK_FILE_FILTER(filter), strFilter); + //g_print("filter name: %s\n", strFilter); + strFilterLen = 0; + filterResetFlag = TRUE; + } + } + //g_print("filter rules added\n"); -// filter = gtk_file_filter_new (); -// gtk_file_filter_add_pattern (filter, "*.hex"); -// gtk_file_filter_set_name (filter, "hex files"); -// gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); + sprintf(strFilter, "*.%s", ofn->lpstrDefExt); + gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), strFilter); + //gtk_file_filter_set_name (filter, "int files"); + gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(dialog), filter); -// filter = gtk_file_filter_new (); -// gtk_file_filter_add_pattern (filter, "*.int"); -// gtk_file_filter_set_name (filter, "int files"); -// gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); -// gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter); + delete strFilter; + + //g_print("default filter set\n"); + + BOOL exitStatus = gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT; + if (exitStatus) + { + char* str; + str = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog)); + strcpy(ofn->lpstrFile, str); + g_free(str); + } + //g_print("file path saved: %s\n", ofn->lpstrFile); -// BOOL exitStatus = gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT; -// if (exitStatus) -// filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); -// gtk_widget_destroy (dialog); + gtk_widget_destroy (dialog); -// return exitStatus; -// }
\ No newline at end of file + //g_print("exit\n"); + + return exitStatus; +} |