Files
Xcode-Quick-Localization/QuickLocalization/QLXcodeHelper.m
2015-11-19 03:04:40 -05:00

124 lines
5.2 KiB
Objective-C

//
// QLXcodeHelper.m
//
//
// Created by Mellong on 14-4-13.
// Copyright (c) 2014年 Tendencystudio. All rights reserved.
//
#import "QLXcodeHelper.h"
@implementation QLXcodeHelper
#pragma mark - Helpers
+ (id)currentEditor {
NSWindowController *currentWindowController = [[NSApp keyWindow] windowController];
if ([currentWindowController isKindOfClass:NSClassFromString(@"IDEWorkspaceWindowController")]) {
IDEWorkspaceWindowController *workspaceController = (IDEWorkspaceWindowController *)currentWindowController;
IDEEditorArea *editorArea = [workspaceController editorArea];
IDEEditorContext *editorContext = [editorArea lastActiveEditorContext];
return [editorContext editor];
}
return nil;
}
+ (IDEWorkspaceDocument *)currentWorkspaceDocument {
NSWindowController *currentWindowController = [[NSApp keyWindow] windowController];
id document = [currentWindowController document];
if (currentWindowController && [document isKindOfClass:NSClassFromString(@"IDEWorkspaceDocument")]) {
return (IDEWorkspaceDocument *)document;
}
return nil;
}
+ (IDESourceCodeDocument *)currentSourceCodeDocument {
if ([[QLXcodeHelper currentEditor] isKindOfClass:NSClassFromString(@"IDESourceCodeEditor")]) {
IDESourceCodeEditor *editor = [QLXcodeHelper currentEditor];
return editor.sourceCodeDocument;
}
if ([[QLXcodeHelper currentEditor] isKindOfClass:NSClassFromString(@"IDESourceCodeComparisonEditor")]) {
IDESourceCodeComparisonEditor *editor = [QLXcodeHelper currentEditor];
if ([[editor primaryDocument] isKindOfClass:NSClassFromString(@"IDESourceCodeDocument")]) {
IDESourceCodeDocument *document = (IDESourceCodeDocument *)editor.primaryDocument;
return document;
}
}
return nil;
}
+ (NSTextView *)currentSourceCodeTextView {
if ([[QLXcodeHelper currentEditor] isKindOfClass:NSClassFromString(@"IDESourceCodeEditor")]) {
IDESourceCodeEditor *editor = [QLXcodeHelper currentEditor];
return editor.textView;
}
if ([[QLXcodeHelper currentEditor] isKindOfClass:NSClassFromString(@"IDESourceCodeComparisonEditor")]) {
IDESourceCodeComparisonEditor *editor = [QLXcodeHelper currentEditor];
return editor.keyTextView;
}
return nil;
}
+ (NSArray *)selectedObjCFileNavigableItems {
NSMutableArray *mutableArray = [NSMutableArray array];
id currentWindowController = [[NSApp keyWindow] windowController];
if ([currentWindowController isKindOfClass:NSClassFromString(@"IDEWorkspaceWindowController")]) {
IDEWorkspaceWindowController *workspaceController = currentWindowController;
IDEWorkspaceTabController *workspaceTabController = [workspaceController activeWorkspaceTabController];
IDENavigatorArea *navigatorArea = [workspaceTabController navigatorArea];
id currentNavigator = [navigatorArea currentNavigator];
if ([currentNavigator isKindOfClass:NSClassFromString(@"IDEStructureNavigator")]) {
IDEStructureNavigator *structureNavigator = currentNavigator;
for (id selectedObject in structureNavigator.selectedObjects) {
if ([selectedObject isKindOfClass:NSClassFromString(@"IDEFileNavigableItem")]) {
IDEFileNavigableItem *fileNavigableItem = selectedObject;
NSString *uti = fileNavigableItem.documentType.identifier;
if ([uti isEqualToString:(NSString *)kUTTypeObjectiveCSource] || [uti isEqualToString:(NSString *)kUTTypeCHeader]) {
[mutableArray addObject:fileNavigableItem];
}
}
}
}
}
if (mutableArray.count) {
return [NSArray arrayWithArray:mutableArray];
}
return nil;
}
+ (NSArray *)containerFolderURLsForNavigableItem:(IDENavigableItem *)navigableItem {
NSMutableArray *mArray = [NSMutableArray array];
do {
NSURL *folderURL = nil;
id representedObject = navigableItem.representedObject;
if ([navigableItem isKindOfClass:NSClassFromString(@"IDEGroupNavigableItem")]) {
// IDE-GROUP (a folder in the navigator)
IDEGroup *group = (IDEGroup *)representedObject;
folderURL = group.resolvedFilePath.fileURL;
} else if ([navigableItem isKindOfClass:NSClassFromString(@"IDEContainerFileReferenceNavigableItem")]) {
// CONTAINER (an Xcode project)
IDEFileReference *fileReference = representedObject;
folderURL = [fileReference.resolvedFilePath.fileURL URLByDeletingLastPathComponent];
} else if ([navigableItem isKindOfClass:NSClassFromString(@"IDEKeyDrivenNavigableItem")]) {
// WORKSPACE (root: Xcode project or workspace)
IDEWorkspace *workspace = representedObject;
folderURL = [workspace.representingFilePath.fileURL URLByDeletingLastPathComponent];
}
if (folderURL && ![mArray containsObject:folderURL]) [mArray addObject:folderURL];
navigableItem = [navigableItem parentItem];
} while (navigableItem != nil);
if (mArray.count > 0) return [NSArray arrayWithArray:mArray];
return nil;
}
@end