mirror of
https://github.com/MacPass/MacPass.git
synced 2025-12-14 16:22:21 +00:00
Added window associations to the auto type fix dialog
Moved handling from app delegate to window controller fixed isse with wrongfully setting document on fixAutotypeWindow
This commit is contained in:
@@ -16,27 +16,27 @@
|
||||
<window title="Fix Autotype" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="419" height="490"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1028"/>
|
||||
<rect key="contentRect" x="196" y="240" width="655" height="630"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
|
||||
<view key="contentView" id="se5-gp-TjO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="419" height="490"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="655" height="630"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<scrollView autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="y73-eV-Aoo">
|
||||
<rect key="frame" x="20" y="61" width="379" height="409"/>
|
||||
<rect key="frame" x="20" y="61" width="615" height="456"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<clipView key="contentView" id="Phq-Ux-7lP">
|
||||
<rect key="frame" x="1" y="17" width="377" height="391"/>
|
||||
<rect key="frame" x="1" y="17" width="613" height="438"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" autosaveColumns="NO" typeSelect="NO" headerView="wul-lK-g0n" id="nVa-6i-9j2">
|
||||
<rect key="frame" x="0.0" y="0.0" width="377" height="391"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="613" height="438"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn identifier="TitleCell" width="116" minWidth="40" maxWidth="1000" id="Khy-1d-ouB">
|
||||
<tableColumn identifier="TitleCell" width="213.56640625" minWidth="40" maxWidth="1000" id="Khy-1d-ouB">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Title">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -49,7 +49,7 @@
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
</tableColumn>
|
||||
<tableColumn identifier="AutotypeCell" width="144.35546875" minWidth="40" maxWidth="1000" id="zVR-Xo-8oY">
|
||||
<tableColumn identifier="AutotypeCell" width="246.828125" minWidth="40" maxWidth="1000" id="zVR-Xo-8oY">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Keystroke Sequence">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -62,7 +62,7 @@
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
</tableColumn>
|
||||
<tableColumn identifier="IsDefaultCell" width="107.5" minWidth="10" maxWidth="3.4028234663852886e+38" id="0uz-Re-mk3">
|
||||
<tableColumn identifier="IsDefaultCell" width="143" minWidth="10" maxWidth="3.4028234663852886e+38" id="0uz-Re-mk3">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Is default">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -85,31 +85,34 @@
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="UGM-Rv-JzB">
|
||||
<rect key="frame" x="1" y="391" width="515" height="16"/>
|
||||
<rect key="frame" x="1" y="346" width="467" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="W8o-DQ-iiR">
|
||||
<rect key="frame" x="-15" y="17" width="16" height="0.0"/>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="W8o-DQ-iiR">
|
||||
<rect key="frame" x="581" y="17" width="16" height="0.0"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<tableHeaderView key="headerView" id="wul-lK-g0n">
|
||||
<rect key="frame" x="0.0" y="0.0" width="377" height="17"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="613" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableHeaderView>
|
||||
</scrollView>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2Ui-5h-uFs">
|
||||
<rect key="frame" x="271" y="13" width="134" height="32"/>
|
||||
<rect key="frame" x="507" y="13" width="134" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Clear Autotype" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="sGh-Ec-oIL">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
DQ
|
||||
</string>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="clearAutotype:" target="-2" id="ePc-iQ-f9g"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iZd-HT-6CT">
|
||||
<rect key="frame" x="189" y="13" width="82" height="32"/>
|
||||
<rect key="frame" x="425" y="13" width="82" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KhL-Mg-BJ7">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
@@ -122,15 +125,29 @@ Gw
|
||||
<action selector="orderOut:" target="-1" id="BWI-LN-m2J"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8tc-oM-VP4">
|
||||
<rect key="frame" x="18" y="540" width="619" height="70"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" allowsEditingTextAttributes="YES" id="quD-MA-fPt">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<string key="title">Below is a list of all entries, groups and window associations for the database. Normally you should see most of the entries marked as default (YES) and with a keystroke sequence {USERNAME}{TAB}{ENTER}. If the sequence however is {TAB}{USERNAME}{TAB}{ENTER} and default is NO it's highly likely that MacPass (0.4 or 0.4.1) did fuck this up.
|
||||
To fix this, you can select entries and clear their sequence. You may also customize any sequence to your liking. Inputs are NOT validated.</string>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="2Ui-5h-uFs" secondAttribute="trailing" constant="20" id="Enl-NU-6sz"/>
|
||||
<constraint firstAttribute="trailing" secondItem="8tc-oM-VP4" secondAttribute="trailing" constant="20" id="FWG-XF-hF9"/>
|
||||
<constraint firstItem="2Ui-5h-uFs" firstAttribute="leading" secondItem="iZd-HT-6CT" secondAttribute="trailing" constant="12" id="K5O-HW-msJ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="2Ui-5h-uFs" secondAttribute="bottom" constant="20" id="Lfc-Fq-4IC"/>
|
||||
<constraint firstItem="8tc-oM-VP4" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="20" id="WNW-Xe-7ol"/>
|
||||
<constraint firstItem="iZd-HT-6CT" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" symbolic="YES" id="cQL-6C-Wam"/>
|
||||
<constraint firstAttribute="trailing" secondItem="y73-eV-Aoo" secondAttribute="trailing" constant="20" id="eEP-Dv-Nxs"/>
|
||||
<constraint firstItem="y73-eV-Aoo" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="20" id="eTt-c8-ztu"/>
|
||||
<constraint firstItem="iZd-HT-6CT" firstAttribute="centerY" secondItem="2Ui-5h-uFs" secondAttribute="centerY" id="fi6-45-S3y"/>
|
||||
<constraint firstItem="8tc-oM-VP4" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="g7S-IX-9b9"/>
|
||||
<constraint firstItem="y73-eV-Aoo" firstAttribute="top" secondItem="8tc-oM-VP4" secondAttribute="bottom" constant="23" id="gbK-21-VBE"/>
|
||||
<constraint firstItem="y73-eV-Aoo" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="mkc-Fr-gJM"/>
|
||||
<constraint firstItem="2Ui-5h-uFs" firstAttribute="top" secondItem="y73-eV-Aoo" secondAttribute="bottom" constant="20" id="xpf-JP-jIQ"/>
|
||||
</constraints>
|
||||
|
||||
@@ -35,7 +35,6 @@ FOUNDATION_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
|
||||
- (IBAction)showPasswordCreator:(id)sender;
|
||||
- (IBAction)createNewDatabase:(id)sender;
|
||||
- (IBAction)openDatabase:(id)sender;
|
||||
- (IBAction)fixAutotype:(id)sender;
|
||||
/**
|
||||
* Clears the stored key files for any documents.
|
||||
* @param sender sender of this action
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#import "MPLockDaemon.h"
|
||||
#import "MPAutotypeDaemon.h"
|
||||
#import "MPDocumentWindowController.h"
|
||||
#import "MPFixAutotypeWindowController.h"
|
||||
#import "MPDockTileHelper.h"
|
||||
|
||||
#import "MPTemporaryFileStorageCenter.h"
|
||||
@@ -52,7 +51,6 @@ NSString *const MPDidChangeStoredKeyFilesSettings = @"com.hicknhack.macpass.MPDi
|
||||
|
||||
@property (strong, nonatomic) MPSettingsWindowController *settingsController;
|
||||
@property (strong, nonatomic) MPPasswordCreatorViewController *passwordCreatorController;
|
||||
@property (strong) MPFixAutotypeWindowController *fixAutotypeWindowController;
|
||||
|
||||
@end
|
||||
|
||||
@@ -213,14 +211,6 @@ NSString *const MPDidChangeStoredKeyFilesSettings = @"com.hicknhack.macpass.MPDi
|
||||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kMPSettingsKeyRememeberdKeysForDatabases];
|
||||
}
|
||||
|
||||
- (void)fixAutotype:(id)sender {
|
||||
if(!self.fixAutotypeWindowController) {
|
||||
self.fixAutotypeWindowController = [[MPFixAutotypeWindowController alloc] init];
|
||||
}
|
||||
[self.fixAutotypeWindowController reset];
|
||||
[self.fixAutotypeWindowController setDocument:[[NSDocumentController sharedDocumentController] currentDocument]];
|
||||
[[self.fixAutotypeWindowController window] makeKeyAndOrderFront:sender];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Private Helper
|
||||
|
||||
@@ -49,12 +49,16 @@
|
||||
- (IBAction)pickIcon:(id)sender;
|
||||
- (IBAction)pickExpiryDate:(id)sender;
|
||||
|
||||
#pragma mark Helper
|
||||
- (void)fixAutotype:(id)sender;
|
||||
|
||||
#pragma mark View Actions
|
||||
- (IBAction)toggleInspector:(id)sender;
|
||||
- (IBAction)focusGroups:(id)sender;
|
||||
- (IBAction)focusEntries:(id)sender;
|
||||
- (IBAction)focusInspector:(id)sender;
|
||||
|
||||
|
||||
#pragma mark MPPasswordEditWindowDelegater
|
||||
- (void)didFinishPasswordEditing:(BOOL)changedPasswordOrKey;
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#import "MPConstants.h"
|
||||
#import "MPSettingsHelper.h"
|
||||
#import "MPDocumentWindowDelegate.h"
|
||||
#import "MPFixAutotypeWindowController.h"
|
||||
|
||||
#import "MPContextToolbarButton.h"
|
||||
#import "KPKTree.h"
|
||||
@@ -48,6 +49,7 @@ typedef void (^MPPasswordChangedBlock)(void);
|
||||
@property (strong) MPDocumentWindowDelegate *documentWindowDelegate;
|
||||
@property (strong) MPPasswordEditWindowController *passwordEditWindowController;
|
||||
@property (strong) MPToolbarDelegate *toolbarDelegate;
|
||||
@property (strong) MPFixAutotypeWindowController *fixAutotypeWindowController;
|
||||
|
||||
@property (nonatomic, copy) MPPasswordChangedBlock passwordChangedBlock;
|
||||
|
||||
@@ -238,6 +240,14 @@ typedef void (^MPPasswordChangedBlock)(void);
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)fixAutotype:(id)sender {
|
||||
if(!self.fixAutotypeWindowController) {
|
||||
self.fixAutotypeWindowController = [[MPFixAutotypeWindowController alloc] init];
|
||||
}
|
||||
self.fixAutotypeWindowController.workingDocument = [self document];
|
||||
[[self.fixAutotypeWindowController window] makeKeyAndOrderFront:sender];
|
||||
}
|
||||
|
||||
- (void)showPasswordInput {
|
||||
if(!self.passwordInputController) {
|
||||
self.passwordInputController = [[MPPasswordInputController alloc] init];
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
@interface MPFixAutotypeWindowController : NSWindowController <NSTableViewDataSource, NSTableViewDelegate>
|
||||
|
||||
@property (weak) IBOutlet NSTableView *tableView;
|
||||
@property (nonatomic, weak) MPDocument *workingDocument;
|
||||
|
||||
/**
|
||||
* Clears the autotype sequences for the selected entries
|
||||
@@ -21,6 +22,4 @@
|
||||
*/
|
||||
- (IBAction)clearAutotype:(id)sender;
|
||||
|
||||
- (void)reset;
|
||||
|
||||
@end
|
||||
|
||||
@@ -12,18 +12,15 @@
|
||||
#import "KPKEntry.h"
|
||||
#import "KPKGroup.h"
|
||||
#import "KPKAutotype.h"
|
||||
#import "KPKWindowAssociation.h"
|
||||
|
||||
NSString *const kMPAutotypeCell = @"AutotypeCell";
|
||||
NSString *const kMPTitleCell = @"TitleCell";
|
||||
NSString *const kMPIsDefaultCell = @"IsDefaultCell";
|
||||
|
||||
@interface KPKGroup (Breadcrumb)
|
||||
/* Helper Categries */
|
||||
|
||||
- (NSString *)breadcrumb;
|
||||
|
||||
@end
|
||||
|
||||
@implementation KPKGroup (Breadcrumb)
|
||||
@implementation KPKGroup (MPFixAutotypeWindowControllerBreadCrumb)
|
||||
|
||||
- (NSString *)breadcrumb {
|
||||
if(self.parent) {
|
||||
@@ -34,12 +31,20 @@ NSString *const kMPIsDefaultCell = @"IsDefaultCell";
|
||||
|
||||
@end
|
||||
|
||||
@interface MPFixAutotypeWindowController () {
|
||||
NSMutableArray *_elements;
|
||||
@implementation KPKWindowAssociation (MPFixAutotypeWindowControllerQualifedName)
|
||||
|
||||
- (NSString *)qualifedName {
|
||||
return [[NSString alloc] initWithFormat:@"%@ (%@)", self.windowTitle, self.autotype.entry.title ];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface MPFixAutotypeWindowController () {
|
||||
NSMutableArray *_elements;
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
@implementation MPFixAutotypeWindowController
|
||||
|
||||
- (instancetype)init {
|
||||
@@ -58,32 +63,39 @@ NSString *const kMPIsDefaultCell = @"IsDefaultCell";
|
||||
[super windowDidLoad];
|
||||
}
|
||||
|
||||
- (void)reset {
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Properties
|
||||
|
||||
- (void)setWorkingDocument:(MPDocument *)workingDocument {
|
||||
if(_workingDocument != workingDocument) {
|
||||
_workingDocument = workingDocument;
|
||||
}
|
||||
_elements = nil;
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Actions
|
||||
|
||||
- (void)clearAutotype:(id)sender {
|
||||
|
||||
MPDocument *document = [self document];
|
||||
[[document undoManager] beginUndoGrouping];
|
||||
[[self.workingDocument undoManager] beginUndoGrouping];
|
||||
NSIndexSet *indexes = [self.tableView selectedRowIndexes];
|
||||
MPFixAutotypeWindowController __weak *weakSelf = self;
|
||||
[indexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
|
||||
id item = [weakSelf entriesAndGroups][idx];
|
||||
if([item respondsToSelector:@selector(defaultAutoTypeSequence)]) {
|
||||
if([item isKindOfClass:[KPKEntry class]]){
|
||||
[item autotype].defaultKeystrokeSequence = nil;
|
||||
}
|
||||
else if([item isKindOfClass:[KPKGroup class]]) {
|
||||
[item setDefaultAutoTypeSequence:nil];
|
||||
}
|
||||
else {
|
||||
[item autotype].defaultKeystrokeSequence = nil;
|
||||
[item setKeystrokeSequence:nil];
|
||||
}
|
||||
}];
|
||||
[[document undoManager] endUndoGrouping];
|
||||
[[document undoManager] setActionName:@"Clear Autotype"];
|
||||
[[self.workingDocument undoManager] endUndoGrouping];
|
||||
[[self.workingDocument undoManager] setActionName:@"Clear Autotype"];
|
||||
[self.tableView reloadDataForRowIndexes:indexes columnIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0,2)]];
|
||||
}
|
||||
|
||||
@@ -95,26 +107,48 @@ NSString *const kMPIsDefaultCell = @"IsDefaultCell";
|
||||
}
|
||||
|
||||
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||
id node = [self entriesAndGroups][row];
|
||||
if([[tableColumn identifier] isEqualToString:kMPTitleCell]) {
|
||||
if( [node respondsToSelector:@selector(title)]) {
|
||||
return [node title];
|
||||
id item = [self entriesAndGroups][row];
|
||||
KPKGroup *group;
|
||||
KPKEntry *entry;
|
||||
KPKWindowAssociation *association;
|
||||
if([item isKindOfClass:[KPKEntry class]]) {
|
||||
entry = item;
|
||||
}
|
||||
return [node breadcrumb];
|
||||
else if([item isKindOfClass:[KPKGroup class]]) {
|
||||
group = item;
|
||||
}
|
||||
else if([item isKindOfClass:[KPKWindowAssociation class]]) {
|
||||
association = item;
|
||||
}
|
||||
|
||||
if([[tableColumn identifier] isEqualToString:kMPTitleCell]) {
|
||||
if(entry) {
|
||||
return entry.title;
|
||||
}
|
||||
if(group) {
|
||||
return [group breadcrumb];
|
||||
}
|
||||
return [association qualifedName];
|
||||
}
|
||||
else if ([[tableColumn identifier] isEqualToString:kMPAutotypeCell]) {
|
||||
if([node respondsToSelector:@selector(defaultAutoTypeSequence)]) {
|
||||
return [node defaultAutoTypeSequence];
|
||||
if(entry) {
|
||||
return entry.autotype.defaultKeystrokeSequence;
|
||||
}
|
||||
return [[node autotype] defaultKeystrokeSequence];
|
||||
if(group) {
|
||||
return group.defaultAutoTypeSequence;
|
||||
}
|
||||
return association.keystrokeSequence;
|
||||
}
|
||||
else if([[tableColumn identifier] isEqualToString:kMPIsDefaultCell]) {
|
||||
BOOL isDefault = NO;
|
||||
if([node respondsToSelector:@selector(hasDefaultAutotypeSequence)]) {
|
||||
isDefault = [node hasDefaultAutotypeSequence];
|
||||
if(entry) {
|
||||
isDefault = entry.autotype.hasDefaultKeystrokeSequence;
|
||||
}
|
||||
else if( group ) {
|
||||
isDefault = group.hasDefaultAutotypeSequence;
|
||||
}
|
||||
else {
|
||||
isDefault = [[node autotype] hasDefaultKeystrokeSequence];
|
||||
isDefault = association.hasDefaultKeystrokeSequence;
|
||||
}
|
||||
return isDefault ? @"Yes" : @"No";
|
||||
}
|
||||
@@ -124,12 +158,16 @@ NSString *const kMPIsDefaultCell = @"IsDefaultCell";
|
||||
|
||||
- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||
id item = [self entriesAndGroups][row];
|
||||
if([item respondsToSelector:@selector(defaultAutoTypeSequence)]) {
|
||||
[item setDefaultAutoTypeSequence:object];
|
||||
}
|
||||
else {
|
||||
|
||||
if([item isKindOfClass:[KPKEntry class]]) {
|
||||
[[item autotype] setDefaultKeystrokeSequence:object];
|
||||
}
|
||||
else if([item isKindOfClass:[KPKGroup class]]) {
|
||||
[item setDefaultKeystrokeSequence:object];
|
||||
}
|
||||
else if([item isKindOfClass:[KPKWindowAssociation class]]) {
|
||||
[item setKeystrokeSequence:object];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
@@ -150,8 +188,7 @@ NSString *const kMPIsDefaultCell = @"IsDefaultCell";
|
||||
- (NSArray *)entriesAndGroups {
|
||||
if(nil == _elements) {
|
||||
_elements = [[NSMutableArray alloc] init];
|
||||
MPDocument *document = [self document];
|
||||
[self flattenGroup:document.root toArray:_elements];
|
||||
[self flattenGroup:self.workingDocument.root toArray:_elements];
|
||||
}
|
||||
return _elements;
|
||||
}
|
||||
@@ -159,7 +196,10 @@ NSString *const kMPIsDefaultCell = @"IsDefaultCell";
|
||||
|
||||
- (void)flattenGroup:(KPKGroup *)group toArray:(NSMutableArray *)array {
|
||||
[array addObject:group];
|
||||
[array addObjectsFromArray:group.entries];
|
||||
for(KPKEntry *entry in group.entries) {
|
||||
[array addObject:entry];
|
||||
[array addObjectsFromArray:entry.autotype.associations];
|
||||
}
|
||||
for(KPKGroup *childGroup in group.groups) {
|
||||
[self flattenGroup:childGroup toArray:array];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user