diff options
author | Aleks Kissinger <aleks0@gmail.com> | 2017-01-11 16:33:00 +0100 |
---|---|---|
committer | Aleks Kissinger <aleks0@gmail.com> | 2017-01-11 16:33:00 +0100 |
commit | 1802977b95d29198f27535b1b731d1180c083667 (patch) | |
tree | 032c4beb7411d88d76794a25f0e3b00a3437da3e /tikzit/src/gtk/Application.m | |
parent | ff79a9c213dfd75ea00ed5112d3a6e314601e064 (diff) |
made new subdir
Diffstat (limited to 'tikzit/src/gtk/Application.m')
-rw-r--r-- | tikzit/src/gtk/Application.m | 377 |
1 files changed, 0 insertions, 377 deletions
diff --git a/tikzit/src/gtk/Application.m b/tikzit/src/gtk/Application.m deleted file mode 100644 index e9935bd..0000000 --- a/tikzit/src/gtk/Application.m +++ /dev/null @@ -1,377 +0,0 @@ -/* - * Copyright 2011-2012 Alex Merry <dev@randomguy3.me.uk> - * - * 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 <http://www.gnu.org/licenses/>. - */ - -#import "Application.h" - -#import "Configuration.h" -#import "EdgeStylesModel.h" -#import "NodeStylesModel.h" -#import "PreambleEditor.h" -#import "ContextWindow.h" -#import "Shape.h" -#import "SettingsDialog.h" -#import "StyleManager.h" -#import "StyleManager+Storage.h" -#import "SupportDir.h" -#import "TikzDocument.h" -#import "ToolBox.h" -#import "Window.h" - -#ifdef HAVE_POPPLER -#import "Preambles.h" -#import "Preambles+Storage.h" -#endif - -#import "BoundingBoxTool.h" -#import "CreateNodeTool.h" -#import "CreateEdgeTool.h" -#import "HandTool.h" -#import "SelectTool.h" - -// used for args to g_mkdir_with_parents -#import "stat.h" - -Application* app = nil; - -@interface Application (Notifications) -- (void) windowClosed:(NSNotification*)notification; -- (void) windowGainedFocus:(NSNotification*)notification; -- (void) selectedToolChanged:(NSNotification*)notification; -- (void) windowDocumentChanged:(NSNotification*)n; -@end - -@interface Application (Private) -- (void) setActiveWindow:(Window*)window; -@end - -@implementation Application - -@synthesize mainConfiguration=configFile; -@synthesize styleManager, preambles; -@synthesize lastOpenFolder, lastSaveAsFolder; -@synthesize tools; - -+ (Application*) app { - if (app == nil) { - [[[self alloc] init] release]; - } - return app; -} - -- (id) _initCommon { - if (app != nil) { - [self release]; - self = app; - return self; - } - self = [super init]; - - if (self) { - NSError *error = nil; - configFile = [[Configuration alloc] initWithName:@"tikzit" loadError:&error]; - if (error != nil) { - logError (error, @"WARNING: Failed to load configuration"); - } - - styleManager = [[StyleManager alloc] init]; - [styleManager loadStylesUsingConfigurationName:@"styles"]; // FIXME: error message? - NodeStylesModel *nsm = [NodeStylesModel modelWithStyleManager:styleManager]; - EdgeStylesModel *esm = [EdgeStylesModel modelWithStyleManager:styleManager]; - -#ifdef HAVE_POPPLER - NSString *preamblesDir = [[SupportDir userSupportDir] stringByAppendingPathComponent:@"preambles"]; - preambles = [[Preambles alloc] initFromDirectory:preamblesDir]; // FIXME: error message? - [preambles setStyleManager:styleManager]; - NSString *selectedPreamble = [configFile stringEntry:@"selectedPreamble" inGroup:@"Preambles"]; - if (selectedPreamble != nil) { - [preambles setSelectedPreambleName:selectedPreamble]; - } -#endif - - lastOpenFolder = [[configFile stringEntry:@"lastOpenFolder" inGroup:@"Paths"] retain]; - if (lastOpenFolder == nil) - lastOpenFolder = [[configFile stringEntry:@"lastFolder" inGroup:@"Paths"] retain]; - lastSaveAsFolder = [[configFile stringEntry:@"lastSaveAsFolder" inGroup:@"Paths"] retain]; - if (lastSaveAsFolder == nil) - lastSaveAsFolder = [[configFile stringEntry:@"lastFolder" inGroup:@"Paths"] retain]; - - openWindows = [[NSMutableArray alloc] init]; - - tools = [[NSArray alloc] initWithObjects: - [SelectTool tool], - [CreateNodeTool toolWithNodeStylesModel:nsm], - [CreateEdgeTool toolWithEdgeStylesModel:esm], - [BoundingBoxTool tool], - [HandTool tool], - nil]; - activeTool = [tools objectAtIndex:0]; - for (id<Tool> tool in tools) { - [tool loadConfiguration:configFile]; - } - - toolBox = [[ToolBox alloc] initWithTools:tools]; - [toolBox loadConfiguration:configFile]; - [toolBox setSelectedTool:activeTool]; - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(selectedToolChanged:) - name:@"ToolSelectionChanged" - object:toolBox]; - [toolBox show]; - - contextWindow = [[ContextWindow alloc] initWithNodeStylesModel:nsm - andEdgeStylesModel:esm]; - [contextWindow loadConfiguration:configFile]; - - app = [self retain]; - } - - return self; -} - -- (id) init { - self = [self _initCommon]; - - if (self) { - [self newWindow]; - } - - return self; -} - -- (id) initWithFiles:(NSArray*)files { - self = [self _initCommon]; - - if (self) { - int fileOpenCount = 0; - for (NSString *file in files) { - NSError *error = nil; - TikzDocument *doc = [TikzDocument documentFromFile:file styleManager:styleManager error:&error]; - if (doc != nil) { - [self newWindowWithDocument:doc]; - ++fileOpenCount; - } else { - logError(error, @"WARNING: failed to open file"); - } - } - if (fileOpenCount == 0) { - [self newWindow]; - } - } - - return self; -} - -- (void) dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [configFile release]; - [styleManager release]; - [preambles release]; - [lastOpenFolder release]; - [lastSaveAsFolder release]; - [preambleWindow release]; - [settingsDialog release]; - [openWindows release]; - [tools release]; - [activeTool release]; - [toolBox release]; - [contextWindow release]; - - [super dealloc]; -} - -- (id<Tool>) activeTool { return activeTool; } -- (void) setActiveTool:(id<Tool>)tool { - if (activeTool == tool) - return; - - activeTool = tool; - [toolBox setSelectedTool:tool]; - for (Window* window in openWindows) { - [window setActiveTool:tool]; - } -} - -- (BOOL) activateToolForKey:(unsigned int)keyVal withMask:(InputMask)mask { - // FIXME: cache the accel info, rather than reparsing it every time? - for (id<Tool> tool in tools) { - guint toolKey = 0; - GdkModifierType toolMod = 0; - gtk_accelerator_parse ([[tool shortcut] UTF8String], &toolKey, &toolMod); - if (toolKey != 0 && toolKey == keyVal && (int)mask == (int)toolMod) { - [self setActiveTool:tool]; - return YES; - } - } - return NO; -} - -- (void) _addWindow:(Window*)window { - [window setActiveTool:activeTool]; - [openWindows addObject:window]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(windowClosed:) - name:@"WindowClosed" - object:window]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(windowGainedFocus:) - name:@"WindowGainedFocus" - object:window]; - if ([window hasFocus]) { - [self setActiveWindow:window]; - } -} - -- (void) newWindow { - [self _addWindow:[Window window]]; -} - -- (void) newWindowWithDocument:(TikzDocument*)doc { - [self _addWindow:[Window windowWithDocument:doc]]; -} - -- (void) quit { - NSMutableArray *unsavedDocs = [NSMutableArray arrayWithCapacity:[openWindows count]]; - for (Window *window in openWindows) { - TikzDocument *doc = [window document]; - if ([doc hasUnsavedChanges]) { - [unsavedDocs addObject:doc]; - } - } - if ([unsavedDocs count] > 0) { - // FIXME: show a dialog - return; - } - gtk_main_quit(); -} - -- (void) presentPreamblesEditor { -#ifdef HAVE_POPPLER - if (preambleWindow == nil) { - preambleWindow = [[PreambleEditor alloc] initWithPreambles:preambles]; - //[preambleWindow setParentWindow:mainWindow]; - } - [preambleWindow present]; -#endif -} - -- (void) presentContextWindow { - [contextWindow present]; -} - -- (void) presentSettingsDialog { - if (settingsDialog == nil) { - settingsDialog = [[SettingsDialog alloc] initWithConfiguration:configFile - andStyleManager:styleManager]; - //[settingsDialog setParentWindow:mainWindow]; - } - [settingsDialog present]; -} - -- (Configuration*) mainConfiguration { - return configFile; -} - -- (void) saveConfiguration { - NSError *error = nil; - -#ifdef HAVE_POPPLER - if (preambles != nil) { - NSString *preamblesDir = [[SupportDir userSupportDir] stringByAppendingPathComponent:@"preambles"]; - // NSFileManager is slightly dodgy on Windows - g_mkdir_with_parents ([preamblesDir UTF8String], S_IRUSR | S_IWUSR | S_IXUSR); - [preambles storeToDirectory:preamblesDir]; - [configFile setStringEntry:@"selectedPreamble" inGroup:@"Preambles" value:[preambles selectedPreambleName]]; - } -#endif - - [styleManager saveStylesUsingConfigurationName:@"styles"]; - - for (id<Tool> tool in tools) { - [tool saveConfiguration:configFile]; - } - [toolBox saveConfiguration:configFile]; - - [contextWindow saveConfiguration:configFile]; - - if (lastOpenFolder != nil) { - [configFile setStringEntry:@"lastOpenFolder" inGroup:@"Paths" value:lastOpenFolder]; - } - if (lastSaveAsFolder != nil) { - [configFile setStringEntry:@"lastSaveAsFolder" inGroup:@"Paths" value:lastSaveAsFolder]; - } - - if (![configFile writeToStoreWithError:&error]) { - logError (error, @"Could not write config file"); - } -} - -@end - -@implementation Application (Notifications) -- (void) windowClosed:(NSNotification*)notification { - Window *window = [notification object]; - [openWindows removeObjectIdenticalTo:window]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:nil - object:window]; - if ([openWindows count] == 0) { - gtk_main_quit(); - } else { - [self setActiveWindow:[openWindows objectAtIndex:0]]; - } -} - -- (void) windowGainedFocus:(NSNotification*)notification { - Window *window = [notification object]; - [self setActiveWindow:window]; -} - -- (void) selectedToolChanged:(NSNotification*)n { - id<Tool> tool = [[n userInfo] objectForKey:@"tool"]; - if (tool != nil) - [self setActiveTool:tool]; - else - NSLog(@"nil tool!"); -} - -- (void) windowDocumentChanged:(NSNotification*)n { - [contextWindow setDocument:[[n userInfo] objectForKey:@"document"]]; -} -@end - -@implementation Application (Private) -- (void) setActiveWindow:(Window*)window { - [[NSNotificationCenter defaultCenter] removeObserver:self - name:@"DocumentChanged" - object:nil]; - - [contextWindow setDocument:[window document]]; - - [contextWindow attachToWindow:window]; - [toolBox attachToWindow:window]; - - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(windowDocumentChanged:) - name:@"DocumentChanged" - object:window]; -} -@end - -// vim:ft=objc:ts=8:et:sts=4:sw=4:foldmethod=marker |