From dcf64eac4fdb246cf6fb169c1279b67966478173 Mon Sep 17 00:00:00 2001 From: randomguy3 Date: Wed, 18 Jan 2012 10:05:06 +0000 Subject: Rename src/linux to src/gtk (which is more accurate) git-svn-id: https://tikzit.svn.sourceforge.net/svnroot/tikzit/trunk@392 7c02a99a-9b00-45e3-bf44-6f3dd7fddb64 --- tikzit/src/gtk/FileChooserDialog.m | 152 +++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 tikzit/src/gtk/FileChooserDialog.m (limited to 'tikzit/src/gtk/FileChooserDialog.m') diff --git a/tikzit/src/gtk/FileChooserDialog.m b/tikzit/src/gtk/FileChooserDialog.m new file mode 100644 index 0000000..9498e4c --- /dev/null +++ b/tikzit/src/gtk/FileChooserDialog.m @@ -0,0 +1,152 @@ +/* + * Copyright 2011 Alex Merry + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "FileChooserDialog.h" + +@implementation FileChooserDialog: NSObject + ++ (FileChooserDialog*) saveDialog { return [[[self alloc] initSaveDialog] autorelease]; } ++ (FileChooserDialog*) saveDialogWithParent:(GtkWindow*)parent + { return [[[self alloc] initSaveDialogWithParent:parent] autorelease]; } ++ (FileChooserDialog*) saveDialogWithTitle:(NSString*)title parent:(GtkWindow*)parent + { return [[[self alloc] initSaveDialogWithTitle:title parent:parent] autorelease]; } ++ (FileChooserDialog*) openDialog { return [[[self alloc] initOpenDialog] autorelease]; } ++ (FileChooserDialog*) openDialogWithParent:(GtkWindow*)parent + { return [[[self alloc] initOpenDialogWithParent:parent] autorelease]; } ++ (FileChooserDialog*) openDialogWithTitle:(NSString*)title parent:(GtkWindow*)parent + { return [[[self alloc] initOpenDialogWithTitle:title parent:parent] autorelease]; } + +- (id) initSaveDialog { return [self initSaveDialogWithParent:NULL]; } +- (id) initSaveDialogWithParent:(GtkWindow*)parent + { return [self initSaveDialogWithTitle:@"Save file" parent:parent]; } +- (id) initSaveDialogWithTitle:(NSString*)title parent:(GtkWindow*)parent { + self = [super init]; + + if (self) { + dialog = GTK_FILE_CHOOSER (gtk_file_chooser_dialog_new ( + [title UTF8String], + parent, + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, + NULL)); + gtk_file_chooser_set_do_overwrite_confirmation (dialog, TRUE); + } + + return self; +} + +- (id) initOpenDialog { return [self initOpenDialogWithParent:NULL]; } +- (id) initOpenDialogWithParent:(GtkWindow*)parent + { return [self initOpenDialogWithTitle:@"Open file" parent:parent]; } +- (id) initOpenDialogWithTitle:(NSString*)title parent:(GtkWindow*)parent { + self = [super init]; + + if (self) { + dialog = GTK_FILE_CHOOSER (gtk_file_chooser_dialog_new ( + [title UTF8String], + parent, + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL)); + } + + return self; +} + +- (void) addStandardFilters { + GtkFileFilter *tikzfilter = gtk_file_filter_new(); + gtk_file_filter_set_name(tikzfilter, ".tikz files"); + gtk_file_filter_add_pattern(tikzfilter, "*.tikz"); + gtk_file_chooser_add_filter(dialog, tikzfilter); + GtkFileFilter *allfilter = gtk_file_filter_new(); + gtk_file_filter_set_name(allfilter, "all files"); + gtk_file_filter_add_pattern(allfilter, "*"); + gtk_file_chooser_add_filter(dialog, allfilter); + gtk_file_chooser_set_filter(dialog, tikzfilter); +} + +- (void) addFileFilter:(NSString*)filterName withPattern:(NSString*)filePattern { + [self addFileFilter:filterName withPattern:filePattern setSelected:NO]; +} + +- (void) addFileFilter:(NSString*)filterName withPattern:(NSString*)filePattern setSelected:(BOOL)selected { + GtkFileFilter *oldFilter = selected ? NULL : gtk_file_chooser_get_filter (dialog); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_set_name(filter, [filterName UTF8String]); + gtk_file_filter_add_pattern(filter, [filePattern UTF8String]); + gtk_file_chooser_add_filter(dialog, filter); + if (selected) { + gtk_file_chooser_set_filter (dialog, filter); + } else if (oldFilter) { + gtk_file_chooser_set_filter (dialog, oldFilter); + } +} + +- (void) setCurrentFolder:(NSString*)path { + gchar *folder = [path glibFilename]; + if (folder) { + gtk_file_chooser_set_current_folder(dialog, folder); + g_free (folder); + } +} + +- (NSString*) currentFolder { + NSString *path = nil; + gchar *folder = gtk_file_chooser_get_current_folder(dialog); + if (folder) { + path = [NSString stringWithGlibFilename:folder]; + g_free (folder); + } + return path; +} + +- (void) setSuggestedName:(NSString*)fileName { + gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), [fileName UTF8String]); +} + +- (NSString*) filePath { + NSString *path = nil; + gchar *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + if (filename) { + path = [NSString stringWithGlibFilename:filename]; + g_free (filename); + } + return path; +} + +- (BOOL) showDialog { + return (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) ? YES : NO; +} + +- (void) destroy { + gtk_widget_destroy (GTK_WIDGET (dialog)); + dialog = NULL; +} + +- (void) dealloc { + if (dialog) { + g_warning ("Failed to destroy file chooser dialog!\n"); + gtk_widget_destroy (GTK_WIDGET (dialog)); + } + [super dealloc]; +} + +@end + +// vim:ft=objc:ts=8:et:sts=4:sw=4 -- cgit v1.2.3