Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Show the alternate action (if available) when ⌘ is pressed. Fixes #189 #1163

Merged
merged 23 commits into from

5 participants

@pjrobertson
Owner

Adds a (horribly named) property used by the actionSelector to remember its original action and flip back/forward between it and the alternate as ⌘ is pressed and de-pressed.
Since the aSelector's objectValue is set to the alternate action immediately once ⌘ is pressed, this change also removes the need to do a further check down the line (in QSInterfaceController.m). Mmmmm tidiness :)

Something to discuss is whether or not we want to alter the appearance of the action to indicate to users that it is an 'alternate' action. Options could include:

  • Add an 'alternate' bubble to the action icon
  • Add an image like http://i.imgur.com/UzeRq.png to the action
  • Append (alternate) to the label/name
@pjrobertson pjrobertson Show the alternate action (if available) when ⌘ is pressed. Fixes #189
Adds a (horribly named) property used by the actionSelector to remember its original action and flip back/forward between it and the alternate as ⌘ is pressed and de-pressed.
Since the aSelector's objectValue is set to the alternate action immediately once ⌘ is pressed, this change also removes the need to do a further check down the line (in QSInterfaceController.m). Mmmmm tidiness :)
d371116
@skurfer
Owner

Cool. It works! Some problems, though.

  1. The list of actions (if visible) is closed when you press ⌘
  2. Only the selected action is changed. Shouldn't they all change (if you could see them)?
  3. The list of actions is wiped out. Only the one you had selected remains in the list.

I had it working for all actions on my branch for this (but there was a deal-breaker I can't recall now). If you want, I can dig it up and see what I did.

@pjrobertson
Owner
@hmelman

I might have an opinion if I had any clue what you mean by alternate action. I didn't follow the description in the original post.

And in the proposed image is the red background indicative of an invisible property? Otherwise I think it would clash with various interfaces (this appears in the results list for actions? ok maybe that doesn't change much with interfaces).

@skurfer
Owner

I put my stashed work from months ago in a branch. Have a look.

In playing with it, the only problem I see is that the selection jumps back to the first item in the list when you hit ⌘. That must have been why I never submitted it.

As for alternate action @hmelman, those are the things that you can run with ⌘↩. For instance, "Reveal" is an alternate for "Open", "Open URL in Background" is an alternate for "Open URL", "SSH as root" is an alternate for "SSH", etc.

@pjrobertson pjrobertson Better manage when alternate actions are selected.
Fix code where the resultArray is cast to a mutable array. Very dangerous!

Fix a typo and use a property for a resultController's resultTable iVar
5a24636
@pjrobertson
Owner

I have fixed the first and thrid of @skurfer's points,

The 2nd one is an interesting one: I liked your idea of changing all the actions (I see from your code) but I think there might be a few quirks in practice. For example:

You currently have 'Open, Reveal, Open Url, Open URL in Background' in your aSelector results view.
With your idea, if you hold ⌘ you will get 'Reveal, Reveal, Open URL in Background, Open URL in Background':
repeating some of the actions

What I've done is to jump to the associated alternate action (and back) if it exists in the results list when ⌘ is pressed.
I do think your idea is better, if you can come up with a way to solve that quirk ^^

@skurfer
Owner

What I've done is to jump to the associated alternate action (and back) if it exists in the results list when ⌘ is pressed.

I really like this after seeing it in action, but I still wish there was a way to indicate that the other actions have alternates too.

With your idea, if you hold ⌘ you will get 'Reveal, Reveal, Open URL in Background, Open URL in Background':
repeating some of the actions

I knew that would happen before I even made the changes, but it never bothered me. Pressing ⌘↩ on an action that has no alternate just runs the normal action, so leaving them in place when ⌘ is held properly reflects what's going on. If the goal is to make them more obvious, this does the trick. In fact, it might even be more obvious what's going on if you see one action change into another. Maybe. :-)

Is it just me, or does text ⇥ Find With… completely lock up Quicksilver on this branch?

And I don't think you can use a copy for the resultArray or sourceArray. If an action tries to update the results, the first thing it does is check to see if the current array is the same object as the one the action refers to. (Although this appears to be partially broken on master already. Might need to do a git bisect.)

@pjrobertson
Owner

I have added an extra column to the actions pref pane table, showing an action's alternate action. Hopefully it'll make them easier to find.
I have also added a few more alternates to actions in the core plugin.

Todo: A bug I've found - the 3rd pane gets wiped when you change between the alternate and original actions. I know how to fix :)

@hmelman

This sounds pretty cool. Is there a list of all the alternative actions? Are these all pairs or is there possibly a chain? Given the above I could see different people ranking the "in background" actions either higher or lower than the normal versions. So it makes sense that the pairs are alternates for each other. That's also easier to learn. It's not clear to me that Open being the alternative of Reveal is that useful, but as a pair, maybe it makes sense. I'm curious about the other ones to see if there's a pattern to the pairings or not.

@pjrobertson
Owner

I'm curious about the other ones to see if there's a pattern to the pairings or not.

I've added a few more 'pairs' to this branch, and you'll be able to see them in the Actions prefs in the next version of QS (hopefully). For the time being, here's a screenshot of the ones I have:
alternate actions

@skurfer
Owner

Since there seems to be a fair amount of space available, what do you think about appending keystrokes to the column names?

So they'd become “Action (↩)” and “Alternate Action (⌘↩)” or something like that. Make the feature even more discoverable.

@pjrobertson
Owner
@skurfer
Owner

Regardless of window size, the names of the actions are still going to be much longer than the headings, so I think we can afford the extra. And I think it pretty clearly gets the idea across in three (unlocalized) characters instead of adding a bunch of text. :-)

@hmelman
pjrobertson and others added some commits
@pjrobertson pjrobertson Keep the iObject contents when an alternate action is added/removed
Also: Save the original action for the mnemonic, not the alternate action
d506371
@pjrobertson pjrobertson Add the keyboard shortcuts for actions and their alternate actions to…
… the headers in the Actions pref pane
53449ab
@skurfer skurfer Merge pull request #1167 from pjrobertson/pasteCommatrick
disable the paste action for multiple items. Fixes #593
0ed19f0
@skurfer
Owner

One small thing is that the alternate action remains visible when other modifiers are held. For instance, if I'm about to hit ⇧⌘I to run the Get Info action. Seems like it should only show the alternate if ⌘ is the only modifier held. I think I struggled with the same thing on my branch and couldn't quite figure out the correct mask.

Related to that, if the "capitalized keys" pref is enabled I wonder if we could move focus to the aSelector when ⇧ (and only ⇧) is held down. Much like the original goal with alternate actions, that would make the behavior more obvious and discoverable, and more importantly, it might be a viable work-around for #1030.

skurfer added some commits
@skurfer skurfer remove a redundant(?) call to `display`
This was getting called immediately after `makeKeyAndOrderFront:`, causing a lot of code to be run twice. The documentation says it generally shouldn't be necessary and I don't see any difference without it.
8f8e224
@skurfer skurfer remove a delay in processing keystrokes
The call to `nextEventMatchingMask:` seemed to be "replaying" the event, causing a lot of code to be run again.
d3f7485
@skurfer skurfer show details for the currently selected item in the results gutter
The details were being appended to the `status` string *before* figuring out which result was currently selected.
15808ef
@skurfer skurfer return the computed details the first time
Previously, the `details` method would need to be invoked *twice* to yield the correct result. (The first invocation would cache the details, and the second would return it from the cache.)

close #1148
c2042aa
@skurfer skurfer always show details if the current interface supports them
Whether or not the details can fit in the results list has nothing to do with whether or not they can fit in the main interface. In the context of the results list, the details string is already being handled appropriately by `QSResultController`.
b0a31c1
@skurfer skurfer rearrange things to avoid some unnecessary tests and assignments f0745ab
@skurfer skurfer Truncate details using NSLineBreakByTruncatingMiddle
reproduces work done by @pjroberston - fixes #525
e28c55d
@skurfer
Owner

Found another small issue. To reproduce:

  1. Call up a Web Search in the 1st pane
  2. Make sure the action is “Search For…”
  3. Go to the third pane and paste some text with ⌘V

Holding command prior to hitting V switches to the alternate action (which is fine), but once you hit V, the alternate sticks. I assume it stops watching for modifiers once you press a “real” key.

@pjrobertson
Owner

I've fixed the two issues related to 'alternate actions'.

I like your idea on ⇧ highlighting the 2nd pane, and as a potential fix to #1030. I want to discuss this some more so I'll wait for you to be on IRC :)

@pjrobertson pjrobertson Show the alternate action *iff* the ⌘ key is pressed
Also: only remove the `alternateActionCounterpart` if the aSelector `clearSearch` is called
5f613a6
@skurfer
Owner

Looks good now. Some weird things happen with details, but I think it's fixed when this is combined with #1151. I want to try it out for a few hours before merging.

skurfer and others added some commits
@skurfer skurfer only check primary type if no details were found
I think this was meant to be a fallback value, but since primaryType is *always* a string, it was returning the fallback the first time this method was run. After that, the cached value would be returned.
b68fc4b
@pjrobertson pjrobertson Merge remote-tracking branch 'origin/issue1148' into alternateActions fefd355
@pjrobertson
Owner

I couldn't reproduce your hitting ⌘ 50 times issue. I do notice, even with #1151 merged, that the details in the interface are still not updated.
In either Nostromo (top) or Bezel (bottom) tab to the 2nd pane and hit ⌘. The text still reflects the previous action. Something else to fix :)

@skurfer
Owner

In either Nostromo (top) or Bezel (bottom) tab to the 2nd pane and hit ⌘. The text still reflects the previous action.

Ah yes, the ol’ “command string”. I think you just need to post a SearchObjectChanged notification when toggling the actions.

@pjrobertson pjrobertson Post 'searchObjectChanged' notifs when alternate actions is changed
* Use the `updatesSilently` BOOL to only disable the certain areas that should not be updated when the action is changed (using ⌘)
ba0880a
@pjrobertson
Owner

Ah yes, the ol’ “command string”. I think you just need to post a SearchObjectChanged notification when toggling the actions.

Hmmm... that may be a solution, but not one I want to take. I've specifically disabled that notif in this case since it messes with other things (see QSSearchObjectView.m:L571)

.... a few hours down the line:
I've changed things round a little, so this should work now :)

@skurfer
Owner

Merge remote-tracking branch 'origin/issue1148' into alternateActions

I don't suppose you meant to do that? :-)

Well, we can close that pull request and work from this one, eh? It was complete as far as I'm aware.

@pjrobertson
Owner
@pjrobertson

@skurfer
I think the reasoning behind doing this was so that when the line height is < 34, the details aren't shown at all in the results list.

If you change the results list height to say 26 you'll notice that the details still show, even though they're half chopped off. But for some reason this happens in ß70 so I don't think it was something you added. Still something we should fix.

Also - BezelHUD never shows details in the results list (no matter what the line height) so really details should always show in the gutter, not just when lineHeight < 34... but this is an anomaly which I don't think we should bother working around

Owner

I think the reasoning behind doing this was so that when the line height is < 34, the details aren't shown at all in the results list.

But this isn't the results list, so it shouldn't be checked here.

If you change the results list height to say 26 you'll notice that the details still show, even though they're half chopped off.

What the…? I've never seen that with any version, and I played with the setting a lot when working on this. But it definitely happens. Anyway, that's a bug in the results list, not here.

Owner

The results list uses QSObjectCells to display the object

Oh, well that explains a lot. I'll look into it.

@pjrobertson

Seems a bit strange. In what situations will -(NSString *)details get called when the details haven't been set?

Surely we should try and pinpoint the method where the details are actually set, and just call it in this method

if(!details) {
     details = [self someMethodThatWillEventuallySetTheDetails];
}

Also: I know it's not your doing, but the comment on line 402 bugs me a bit :)
Can we somehow use the handler (it's a class, right?) to get the actual bundle?
Or better still, edit the - (NSBundle *)bundle in QSBasicObject.m to get the object's handler, then from that the bundle.

I'm just thinking... it'd make localisation nicer :D

Owner

Was this comment meant for c2042aa maybe? Because the class will always be a string, like I said.

Seems a bit strange. In what situations will -(NSString *)details get called when the details haven't been set?

Well, in general, this method gets called any time an object needs to be displayed to the user. There's no telling whether or not details have been set at that point, but it gets tested inside this method.

Surely we should try and pinpoint the method where the details are actually set, and just call it in this method

There are two places details typically get set that I know of:

  1. Inside objectsForEntry and/or loadChildrenForObject in various plug-ins
  2. By calling detailsOfObject on the handler for the object type

We don't want to mess with the first way, and this is the method that takes care of the second. However the details are determined, they get cached and this method just returns the cached value in most cases.

Although, now that I think about it, if a plug-in went to the trouble to implement detailsOfObject, it probably shouldn't be cached. Otherwise, why not just set it up front for all objects? For example, playlist details show the number of items. Without testing it, I'm guessing that number never changes once we set it.

So I think I'll change this to not cache details in that case, though I'm concerned about the way this method gets called rapid-fire sometimes.

Also: I know it's not your doing, but the comment on line 402 bugs me a bit :)

Yes and no. I put in the comment and the test, but only because details were always getting set to nil without it. If you can figure out what it was supposed to do, feel free to get it working. :-) Maybe wait though because I might be changing this method around a lot to avoid caching "dynamic" details.

@skurfer skurfer referenced this pull request
Closed

Fixes for details #1151

@pjrobertson
Owner

Other than my 2 comments on #1151 (let me know if you don't get notified about them), this is ready to go from my end.

@skurfer
Owner

OK, pull down the latest issue1148 branch and cherry-pick these two:

  • a2d1c31e1a26760e0b603ad2416931a92da88a6a
  • abfffc249dd920bce4114e88b9e51c6b59167f76

On that second one, it only checks the row height on start up, so it can still get screwed up if you change the height, but only until the next relaunch. I couldn't find a method that runs when the row hight changes, and testing it every time an object is displayed seemed way too expensive.

skurfer added some commits
@skurfer skurfer don't cache details from the object handler
There's probably a good reason someone wrote code to generate them in real-time instead of storing them up-front when the object is created.
8c83ce1
@skurfer skurfer prevent details from showing in results when the rows aren't tall enough 796c91f
@pjrobertson
Owner
@skurfer skurfer merged commit e92006e into from
@lgarron

I think the following bug breaks past behaviour unnecessarily:

  • Press Cmd-Enter (my combination) to invoke QS with the last item selected.
  • Let go of Space. The alternate action is not selected.
  • Let go of Cmd, press Cmd again. The alternate action is selected now.

(This keeps catching me when I do something with a file that leaves it as the QS selection, then try to reveal it in Finder immediately afterwards. The current behaviour in B71 keeps opening instead of revealing if I don't let go of Cmd before pressing Cmd-Enter.)

For contrast, I have "Select Current Selection in QS Window" set to Ctrl-Cmd-Space, and letting go of Ctrl after space does select the alternate action.

@lgarron

Secondary consideration: copying an action (sometimes necessary to construct a trigger) using Cmd-C doesn't work anymore if it has an alternate. You can right-click and copy, but this might be confusing to some power users.

(Overall, I really like this feature, just trying to give early feedback. I've tried to check this thread for similar comments, but I didn't find any.)

@petonic

Any way to disable this? My fingers don't seem to work well with it :-). I use CMD-Shift-L to invoke my Shortmarks trigger. If I leave a lazy hand on the CMD key, it invokes the alternate to "Search", which is "Show search results." Maybe I'll get used to it later, but I'd like to disable this.

@pjrobertson
Owner
@petonic

Hi Patrick -- Thanks for responding. No, I don't need QS to be open. I can just invoke it from a neutral state (assuming QS is running, of course).

This relatively new behavior surprised me. I must be lazier with my typing than I had thought. It wasn't until I read the release notes of this version of QS that I finally figured out what was happening. When I hold CMD down, it'll respond with a QS Dialog and . If I tab over into and press the down arrow for , it'll then work. Kind of a pain in the butt, but at least all of the effort didn't go to the ether.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Oct 9, 2012
  1. @pjrobertson

    Show the alternate action (if available) when ⌘ is pressed. Fixes #189

    pjrobertson authored
    Adds a (horribly named) property used by the actionSelector to remember its original action and flip back/forward between it and the alternate as ⌘ is pressed and de-pressed.
    Since the aSelector's objectValue is set to the alternate action immediately once ⌘ is pressed, this change also removes the need to do a further check down the line (in QSInterfaceController.m). Mmmmm tidiness :)
Commits on Oct 10, 2012
  1. @pjrobertson

    Better manage when alternate actions are selected.

    pjrobertson authored
    Fix code where the resultArray is cast to a mutable array. Very dangerous!
    
    Fix a typo and use a property for a resultController's resultTable iVar
  2. @pjrobertson

    Add an 'alternate actions' column to the Actions prefs

    pjrobertson authored
    This gives an easy way of finding which actions have an alternate action
  3. @pjrobertson
  4. @pjrobertson
  5. @pjrobertson
Commits on Oct 11, 2012
  1. @pjrobertson

    Keep the iObject contents when an alternate action is added/removed

    pjrobertson authored
    Also: Save the original action for the mnemonic, not the alternate action
  2. @pjrobertson

    Add the keyboard shortcuts for actions and their alternate actions to…

    pjrobertson authored
    … the headers in the Actions pref pane
Commits on Oct 12, 2012
  1. @skurfer

    Merge pull request #1167 from pjrobertson/pasteCommatrick

    skurfer authored
    disable the paste action for multiple items. Fixes #593
Commits on Oct 16, 2012
  1. @skurfer

    remove a redundant(?) call to `display`

    skurfer authored
    This was getting called immediately after `makeKeyAndOrderFront:`, causing a lot of code to be run twice. The documentation says it generally shouldn't be necessary and I don't see any difference without it.
  2. @skurfer

    remove a delay in processing keystrokes

    skurfer authored
    The call to `nextEventMatchingMask:` seemed to be "replaying" the event, causing a lot of code to be run again.
  3. @skurfer

    show details for the currently selected item in the results gutter

    skurfer authored
    The details were being appended to the `status` string *before* figuring out which result was currently selected.
  4. @skurfer

    return the computed details the first time

    skurfer authored
    Previously, the `details` method would need to be invoked *twice* to yield the correct result. (The first invocation would cache the details, and the second would return it from the cache.)
    
    close #1148
  5. @skurfer

    always show details if the current interface supports them

    skurfer authored
    Whether or not the details can fit in the results list has nothing to do with whether or not they can fit in the main interface. In the context of the results list, the details string is already being handled appropriately by `QSResultController`.
  6. @skurfer
  7. @skurfer

    Truncate details using NSLineBreakByTruncatingMiddle

    skurfer authored
    reproduces work done by @pjroberston - fixes #525
Commits on Oct 25, 2012
  1. @pjrobertson

    Show the alternate action *iff* the ⌘ key is pressed

    pjrobertson authored
    Also: only remove the `alternateActionCounterpart` if the aSelector `clearSearch` is called
  2. @skurfer

    only check primary type if no details were found

    skurfer authored
    I think this was meant to be a fallback value, but since primaryType is *always* a string, it was returning the fallback the first time this method was run. After that, the cached value would be returned.
Commits on Oct 26, 2012
  1. @pjrobertson
  2. @pjrobertson

    Post 'searchObjectChanged' notifs when alternate actions is changed

    pjrobertson authored
    * Use the `updatesSilently` BOOL to only disable the certain areas that should not be updated when the action is changed (using ⌘)
Commits on Oct 29, 2012
  1. @skurfer @pjrobertson

    don't cache details from the object handler

    skurfer authored pjrobertson committed
    There's probably a good reason someone wrote code to generate them in real-time instead of storing them up-front when the object is created.
  2. @skurfer @pjrobertson
  3. @pjrobertson
This page is out of date. Refresh to see the latest.
View
22 Quicksilver/Code-QuickStepCore/QSObject.m
@@ -390,13 +390,22 @@ - (void)setDetails:(NSString *)newDetails {
}
- (NSString *)details {
- NSString *details = [meta objectForKey:kQSObjectDetails];
- if (details) return details;
+ NSString *details = nil;
- id handler = nil;
+ // check the object handler for this type
+ id handler = nil;
if (handler = [self handlerForSelector:@selector(detailsOfObject:)]) {
details = [handler detailsOfObject:self];
}
+
+ // check the cache
+ if (!details) {
+ details = [meta objectForKey:kQSObjectDetails];
+ }
+
+ if (details) return details;
+
+ // no details from the handler or cache, so find them some other way and cache the result
NSBundle *mybundle = [self bundle];
// this is almost always (null) so test it first
@@ -409,12 +418,11 @@ - (NSString *)details {
}
if (details != nil) {
[self setObject:details forMeta:kQSObjectDetails];
+ } else if ([itemForKey([self primaryType]) isKindOfClass:[NSString class]]) {
+ details = itemForKey([self primaryType]);
}
- if ([itemForKey([self primaryType]) isKindOfClass:[NSString class]])
- return itemForKey([self primaryType]);
-
- return nil;
+ return details;
}
- (id)primaryObject {return itemForKey([self primaryType]);}
View
1  Quicksilver/Code-QuickStepEffects/QSWindow.m
@@ -246,7 +246,6 @@ - (void)makeKeyAndOrderFront:(id)sender {
- (void)finishShow:(id)sender {
[self setAlphaValue:1.0];
- [self display];
if ([self drawers])
[self performSelector:@selector(_unhideAllDrawers)];
[self setHelper:nil];
View
41 Quicksilver/Code-QuickStepInterface/QSInterfaceController.m
@@ -281,8 +281,8 @@ - (void)updateControl:(QSSearchObjectView *)control withArray:(NSArray *)array {
[control clearObjectValue];
}
[control clearSearch];
- [control setSourceArray:(NSMutableArray *)array];
- [control setResultArray:(NSMutableArray *)array];
+ [control setSourceArray:[[array mutableCopy] autorelease]];
+ [control setResultArray:[[array mutableCopy] autorelease]];
[control selectObject:defaultSelection];
}
@@ -342,6 +342,10 @@ - (void)updateActionsNow {
}
- (void)updateIndirectObjects {
+ // Don't update the indirect objects if this is a 'silent' update.
+ if ([aSelector updatesSilently]) {
+ return;
+ }
QSAction *aObj = [aSelector objectValue];
id actionProvider = [aObj provider];
NSArray *indirects = nil;
@@ -579,17 +583,6 @@ - (void)executeCommandThreaded {
NSDate *startDate = [NSDate date];
#endif
QSAction *action = [[aSelector objectValue] retain];
- if ([[NSApp currentEvent] modifierFlags] & NSCommandKeyMask && !([[NSApp currentEvent] modifierFlags] & NSShiftKeyMask) ) {
- QSAction* alternate = [action alternate];
- if (alternate != action) {
- [alternate retain];
- [action release];
- action = alternate;
- }
-#ifdef DEBUG
- if (VERBOSE) NSLog(@"Using Alternate Action: %@", action);
-#endif
- }
QSObject *dObject = [dSelector objectValue];
QSObject *iObject = [iSelector objectValue];
if( [dObject isKindOfClass:[QSRankedObject class]] )
@@ -705,28 +698,6 @@ - (IBAction)activate:(id)sender {
[[self window] makeFirstResponder:dSelector];
[dSelector setSearchMode:SearchFilterAll];
-
- // If the user still has a mofidier key down (just activated the interface) then for 0.075s, ignore the modifiers and post just the letter
- // incase the user has started typing to search. ***IS THIS REALLY NECESSARY***? p_j_r 09/06/12
- NSEvent *theEvent = [NSApp nextEventMatchingMask:NSKeyDownMask untilDate:[NSDate dateWithTimeIntervalSinceNow:0.075] inMode:NSDefaultRunLoopMode dequeue:YES];
-#warning dont do this unless the character is alphabetic
- if (theEvent) {
- theEvent = [NSEvent keyEventWithType:[theEvent type]
- location:[theEvent locationInWindow]
- modifierFlags:0
- timestamp:[theEvent timestamp]
- windowNumber:[theEvent windowNumber]
- context:[theEvent context]
- characters:[theEvent charactersIgnoringModifiers]
- charactersIgnoringModifiers:[theEvent charactersIgnoringModifiers]
- isARepeat:[theEvent isARepeat]
- keyCode:[theEvent keyCode]];
-#ifdef DEBUG
- NSLog(@"Ignoring Modifiers for characters: %@", [theEvent characters]);
-#endif
- [NSApp postEvent:theEvent atStart:YES];
- //NSLog(@"time2 %f", [theEvent timestamp]);
- }
}
- (IBAction)activateInTextMode:(id)sender {
View
1  Quicksilver/Code-QuickStepInterface/QSObjectCell.h
@@ -17,7 +17,6 @@
NSDictionary *nameAttributes;
NSDictionary *detailsAttributes;
NSDictionary *rankedNameAttributes;
- NSRect lastFrame;
NSTextView *fieldEditor;
}
View
40 Quicksilver/Code-QuickStepInterface/QSObjectCell.m
@@ -389,7 +389,7 @@ - (void)drawIconForObject:(QSObject *)object withFrame:(NSRect)cellFrame inView:
- (void)buildStylesForFrame:(NSRect)cellFrame inView:(NSView *)controlView {
NSMutableParagraphStyle *style = [[[NSMutableParagraphStyle alloc] init] autorelease];
- [style setLineBreakMode:NSLineBreakByTruncatingTail];
+ [style setLineBreakMode:NSLineBreakByTruncatingMiddle];
[style setFirstLineHeadIndent:1.0];
[style setHeadIndent:1.0];
[style setAlignment:[self alignment]];
@@ -489,24 +489,6 @@ - (void)drawTextForObject:(QSObject *)drawObject withFrame:(NSRect)cellFrame inV
[titleString addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithDouble:-1.0] range:NSMakeRange(0, [titleString length])];
}
- if (validDetailsString) {
- NSSize detailsSize = NSZeroSize;
- detailsSize = [detailsString sizeWithAttributes:detailsAttributes];
-
- if (showDetails && ([[NSUserDefaults standardUserDefaults] integerForKey:@"QSResultViewRowHeight"] >= 34)) {
- NSSize nameSize = [nameString sizeWithAttributes:nameAttributes];
-
- CGFloat detailHeight = NSHeight(textDrawRect) -nameSize.height;
- NSRange returnRange;
- if (detailHeight<detailsSize.height && (returnRange = [detailsString rangeOfString:@"\n"]) .location != NSNotFound)
- detailsString = [detailsString substringToIndex:returnRange.location];
- if ([detailsString length] >100) detailsString = [detailsString substringWithRange:NSMakeRange(0, 100)];
- // ***warning ** this should take first line only?
- //if ([titleString length]) [titleString appendAttributedString:;
-
- }
- }
-
// Ranked string and ranked string aren't the same. Show 'nameString ⟷ rankedString' in the UI
if (!rankedStringIsLabel) {
[titleString addAttribute:NSFontAttributeName value:detailsFont range:NSMakeRange(0,[titleString length])];
@@ -519,12 +501,22 @@ - (void)drawTextForObject:(QSObject *)drawObject withFrame:(NSRect)cellFrame inV
[attributedNameString release];
}
- // Append the details string if it exists, and the UI wants it (showDetails BOOL)
- if (detailsString != nil && detailsString.length &&
- showDetails && ([[NSUserDefaults standardUserDefaults] integerForKey:@"QSResultViewRowHeight"] >= 34)) {
- [titleString appendAttributedString:
- [[[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"\n%@",detailsString] attributes:detailsAttributes] autorelease]];
+ if (showDetails && validDetailsString) {
+ NSSize detailsSize = NSZeroSize;
+ detailsSize = [detailsString sizeWithAttributes:detailsAttributes];
+ NSSize nameSize = [nameString sizeWithAttributes:nameAttributes];
+
+ CGFloat detailHeight = NSHeight(textDrawRect) - nameSize.height;
+ NSRange returnRange;
+ if (detailHeight<detailsSize.height && (returnRange = [detailsString rangeOfString:@"\n"]) .location != NSNotFound) {
+ detailsString = [detailsString substringToIndex:returnRange.location];
+ }
+ // Append the details string if it exists, and the UI wants it (showDetails BOOL)
+ if (detailsString != nil && detailsString.length) {
+ [titleString appendAttributedString:[[[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"\n%@",detailsString] attributes:detailsAttributes] autorelease]];
+ }
}
+
NSRect centerRect = rectFromSize([titleString size]);
centerRect.size.width = NSWidth(textDrawRect);
centerRect.size.height = MIN(NSHeight(textDrawRect), centerRect.size.height);
View
3  Quicksilver/Code-QuickStepInterface/QSResultController.h
@@ -49,6 +49,9 @@
// NSRange visibleChildRange;
}
+
+@property (retain) IBOutlet NSTableView *resultTable;
+
+ (id)sharedInstance;
- (IBAction)defineMnemonic:(id)sender;
View
36 Quicksilver/Code-QuickStepInterface/QSResultController.m
@@ -41,6 +41,9 @@ - (void)reloadColors;
@end
@implementation QSResultController
+
+@synthesize resultTable=resultTable;
+
+ (void)initialize {
if (!kindDescriptions)
kindDescriptions = [[NSMutableDictionary alloc] initWithContentsOfFile:
@@ -55,7 +58,13 @@ + (id)sharedInstance {
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
- [self reloadColors];
+ if ([keyPath isEqualToString:@"values.QSAppearance3B"]) {
+ [self reloadColors];
+ } else if ([keyPath isEqualToString:@"rowHeight"]) {
+ if ([change objectForKey:NSKeyValueChangeNewKey]) {
+ [(QSObjectCell *)[[resultTable tableColumnWithIdentifier: COLUMNID_NAME] dataCell] setShowDetails:([[change objectForKey:NSKeyValueChangeNewKey] doubleValue] >= 34.0)];
+ }
+ }
}
#pragma mark -
@@ -123,7 +132,10 @@ - (void)windowDidLoad {
withKeyPath:@"values.QSAppearance3A"
options:[NSDictionary dictionaryWithObject:NSUnarchiveFromDataTransformerName
forKey:@"NSValueTransformerName"]];
-
+ [resultTable addObserver:self
+ forKeyPath:@"rowHeight"
+ options:NSKeyValueObservingOptionNew
+ context:nil];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"QSResultsShowChildren"]) {
[[[resultChildTable tableColumnWithIdentifier:@"NameColumn"] dataCell] bind:@"textColor"
toObject:sucd
@@ -363,19 +375,16 @@ - (void)updateSelectionInfo {
if (selectedResult < 0 || ![[self currentResults] count]) return;
QSObject *newSelectedItem = [[self currentResults] objectAtIndex:selectedResult];
- // HenningJ 20110419 there is no localized version of "%d of %d". Additionally, something goes wrong while trying to localize it.
- // NSString *fmt = NSLocalizedStringFromTableInBundle(@"%d of %d", nil, [NSBundle bundleForClass:[self class]], @"");
- NSString *status = [NSString stringWithFormat:@"%ld of %ld", (long)selectedResult + 1, (long)[[self currentResults] count]];
- NSString *details = [selectedItem details] ? [selectedItem details] : @"";
-
- if ([resultTable rowHeight] < 34 && details)
- status = [status stringByAppendingFormat:@" %C %@", (unsigned short)0x25B8, details];
-
- [(NSTextField *)selectionView setStringValue:status];
-
if (selectedItem != newSelectedItem) {
[self setSelectedItem:newSelectedItem];
[resultChildTable noteNumberOfRowsChanged];
+ // HenningJ 20110419 there is no localized version of "%d of %d". Additionally, something goes wrong while trying to localize it.
+ // NSString *fmt = NSLocalizedStringFromTableInBundle(@"%d of %d", nil, [NSBundle bundleForClass:[self class]], @"");
+ NSString *status = [NSString stringWithFormat:@"%ld of %ld", (long)selectedResult + 1, (long)[[self currentResults] count]];
+ if ([resultTable rowHeight] < 34 && [selectedItem details]) {
+ status = [status stringByAppendingFormat:@" %C %@", (unsigned short)0x25B8, [selectedItem details]];
+ }
+ [(NSTextField *)selectionView setStringValue:status];
if ([[NSApp currentEvent] modifierFlags] & NSFunctionKeyMask && [[NSApp currentEvent] isARepeat]) {
if ([childrenLoadTimer isValid]) {
@@ -522,6 +531,9 @@ - (void)setupResultTable {
QSObjectCell *objectCell = [[[QSObjectCell alloc] init] autorelease];
tableColumn = [resultTable tableColumnWithIdentifier: COLUMNID_NAME];
+ if ([resultTable rowHeight] < 34.0) {
+ [objectCell setShowDetails:NO];
+ }
[tableColumn setDataCell:objectCell];
tableColumn = [resultChildTable tableColumnWithIdentifier: COLUMNID_NAME];
View
8 Quicksilver/Code-QuickStepInterface/QSSearchObjectView.h
@@ -68,6 +68,10 @@ typedef enum QSSearchMode {
NSColor *textCellFontColor; // for text entry mode
QLPreviewPanel* previewPanel;
QSSearchMode savedSearchMode;
+
+ // Indicates if extras (such as indirect objects) should be updated when the 'search object' is changed. Default is NO
+ BOOL updatesSilently;
+ QSAction *alternateActionCounterpart;
@public
QSResultController *resultController;
@@ -85,8 +89,12 @@ typedef enum QSSearchMode {
BOOL allowNonActions;
QSObject *quicklookObject;
+
}
+@property (assign) BOOL updatesSilently;
+@property (retain) QSResultController *resultController;
+@property (retain) QSAction *alternateActionCounterpart;
@property (retain) NSTextView *textModeEditor;
- (void)clearSearch;
View
70 Quicksilver/Code-QuickStepInterface/QSSearchObjectView.m
@@ -37,7 +37,7 @@
@implementation QSSearchObjectView
-@synthesize textModeEditor;
+@synthesize textModeEditor, alternateActionCounterpart, resultController, updatesSilently;
+ (void)initialize {
if( bindingsDict == nil ) {
@@ -67,6 +67,7 @@ - (void)awakeFromNib {
shouldResetSearchArray = YES;
allowNonActions = YES;
allowText = YES;
+ updatesSilently = NO;
resultController = [[QSResultController alloc] initWithFocus:self];
[self setTextCellFont:[NSFont systemFontOfSize:12.0]];
[self setTextCellFontColor:[NSColor blackColor]];
@@ -169,7 +170,7 @@ - (BOOL)impliedMnemonicDefined {
- (void)saveMnemonic {
NSString *mnemonicKey = [self matchedString];
if (!mnemonicKey || [mnemonicKey isEqualToString:@""]) return;
- QSObject *mnemonicValue = [self objectValue];
+ QSObject *mnemonicValue = [self alternateActionCounterpart] ? [self alternateActionCounterpart] : [self objectValue];
if ([mnemonicValue count] > 1) {
mnemonicValue = [[[self objectValue] splitObjects] lastObject];
}
@@ -193,7 +194,7 @@ - (void)rescoreSelectedItem {
//[[QSLibrarian sharedInstance] scoredArrayForString:[self matchedString] inSet:[NSArray arrayWithObject:[self objectValue]] mnemonicsOnly:![self matchedString]];
[[QSLibrarian sharedInstance] scoredArrayForString:[self matchedString] inSet:[NSArray arrayWithObject:[self objectValue]]];
if ([[resultController window] isVisible])
- [resultController->resultTable reloadData];
+ [resultController.resultTable reloadData];
}
#pragma mark -
@@ -325,7 +326,7 @@ - (void)setSearchMode:(QSSearchMode)newSearchMode {
searchMode = newSearchMode;
}
- [resultController->resultTable setNeedsDisplay:YES];
+ [resultController.resultTable setNeedsDisplay:YES];
if (browsing) {
[[NSUserDefaults standardUserDefaults] setInteger:searchMode forKey:kBrowseMode];
}
@@ -547,7 +548,7 @@ - (IBAction)updateResultView:(id)sender {
//[resultController->searchModePopUp selectItemAtIndex:[resultController->searchModePopUp indexOfItemWithTag:searchMode]];
[self reloadResultTable];
if (selection > NSNotFound - 1) selection = 0;
- [resultController->resultTable selectRowIndexes:[NSIndexSet indexSetWithIndex:(selection ? selection : 0)] byExtendingSelection:NO];
+ [resultController.resultTable selectRowIndexes:[NSIndexSet indexSetWithIndex:(selection ? selection : 0)] byExtendingSelection:NO];
[resultController updateSelectionInfo];
}
@@ -566,7 +567,7 @@ - (void)selectObjectValue:(QSObject *)newObject {
// if the two objects are not the same, send an 'object chagned' notif
if (newObject != currentObject) {
[super setObjectValue:newObject];
- [[NSNotificationCenter defaultCenter] postNotificationName:@"SearchObjectChanged" object:self];
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"SearchObjectChanged" object:self];
}
}
@@ -575,7 +576,7 @@ - (void)setObjectValue:(QSBasicObject *)newObject {
[self hideResultView:self];
[self clearSearch];
[parentStack removeAllObjects];
- [self setResultArray:[NSArray arrayWithObjects:newObject, nil]];
+ [self setResultArray:[NSMutableArray arrayWithObjects:newObject, nil]];
[super setObjectValue:newObject];
[[NSNotificationCenter defaultCenter] postNotificationName:@"SearchObjectChanged" object:self];
@@ -613,9 +614,9 @@ - (void)selectIndex:(NSInteger)index {
QSObject *object = [resultArray objectAtIndex:selection];
[self selectObjectValue:object];
- [resultController->resultTable scrollRowToVisible:selection];
+ [resultController.resultTable scrollRowToVisible:selection];
//[resultController->resultTable centerRowInView:selection];
- [resultController->resultTable selectRowIndexes:[NSIndexSet indexSetWithIndex:(selection ? selection : 0)] byExtendingSelection:NO];
+ [resultController.resultTable selectRowIndexes:[NSIndexSet indexSetWithIndex:(selection ? selection : 0)] byExtendingSelection:NO];
} else
[self selectObjectValue:nil];
@@ -672,12 +673,15 @@ - (void)clearSearch {
[self setVisibleString:@""];
[self setMatchedString:nil];
[self setShouldResetSearchString:YES];
+ if([self isEqual:[self actionSelector]]) {
+ [self setAlternateActionCounterpart:nil];
+ }
}
- (void)pageScroll:(NSInteger)direction {
if (![[resultController window] isVisible]) [self showResultView:self];
- NSInteger movement = direction * (NSHeight([[resultController->resultTable enclosingScrollView] frame]) /[resultController->resultTable rowHeight]);
+ NSInteger movement = direction * (NSHeight([[resultController.resultTable enclosingScrollView] frame]) /[resultController.resultTable rowHeight]);
//NSLog(@"%d", movement);
[self moveSelectionBy:movement];
}
@@ -990,6 +994,48 @@ - (BOOL)resignFirstResponder {
return YES;
}
+- (void)flagsChanged:(NSEvent *)theEvent {
+ QSSearchObjectView *aSelector = [self actionSelector];
+ [aSelector setUpdatesSilently:YES];
+ NSUInteger flags = [theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask;
+ // if only the command key is pressed
+ if (flags == NSCommandKeyMask) {
+ // change the image
+ QSAction *theAction = [aSelector objectValue];
+ if (theAction && [theAction alternate]) {
+ NSMutableArray *currentResultArray = [aSelector resultArray];
+ if ([currentResultArray containsObject:[theAction alternate]]) {
+ [aSelector selectObject:[theAction alternate]];
+ } else {
+ NSUInteger currentResultIndex = [currentResultArray indexOfObject:theAction];
+ [currentResultArray removeObjectAtIndex:currentResultIndex];
+ [currentResultArray insertObject:[theAction alternate] atIndex:currentResultIndex];
+ [aSelector selectObject:[theAction alternate]];
+ [[aSelector resultController] arrayChanged:nil];
+ }
+ [aSelector setNeedsDisplay:YES];
+ [aSelector setAlternateActionCounterpart:theAction];
+ }
+ }
+ else if ([aSelector alternateActionCounterpart]) {
+ QSAction *theAction = [aSelector objectValue];
+ NSMutableArray *currentResultArray = [aSelector resultArray];
+ if ([currentResultArray containsObject:[aSelector alternateActionCounterpart]]) {
+ [aSelector selectObject:[aSelector alternateActionCounterpart]];
+ } else {
+ NSUInteger currentResultIndex = [currentResultArray indexOfObject:theAction];
+ [currentResultArray removeObjectAtIndex:currentResultIndex];
+ [currentResultArray insertObject:[aSelector alternateActionCounterpart] atIndex:currentResultIndex];
+
+ [[aSelector resultController] arrayChanged:nil];
+ [aSelector selectObject:[aSelector alternateActionCounterpart]];
+ }
+ [aSelector setNeedsDisplay:YES];
+ [aSelector setAlternateActionCounterpart:nil];
+ }
+ [aSelector setUpdatesSilently:NO];
+}
+
// This method deals with all keydowns. Some very interesting things could be done by manipulating this method
- (void)keyDown:(NSEvent *)theEvent {
@@ -1787,8 +1833,8 @@ - (void)browse:(NSInteger)direction {
[self clearSearch];
NSInteger defaultMode = [[NSUserDefaults standardUserDefaults] integerForKey:kBrowseMode];
[self setSearchMode:(defaultMode ? defaultMode : SearchSnap)];
- [self setResultArray:(NSMutableArray *)newObjects]; // !!!:nicholas:20040319
- [self setSourceArray:(NSMutableArray *)newObjects];
+ [self setResultArray:[[newObjects mutableCopy] autorelease]]; // !!!:nicholas:20040319
+ [self setSourceArray:[[newObjects mutableCopy] autorelease]];
if (!newSelectedObject)
[self selectIndex:0];
View
591 Quicksilver/Nibs/QSActionsPrefPane.xib
@@ -3,37 +3,37 @@
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">11E53</string>
- <string key="IBDocument.InterfaceBuilderVersion">2182</string>
+ <string key="IBDocument.InterfaceBuilderVersion">2840</string>
<string key="IBDocument.AppKitVersion">1138.47</string>
<string key="IBDocument.HIToolboxVersion">569.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string key="NS.object.0">2182</string>
+ <string key="NS.object.0">2840</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>NSMenuItem</string>
- <string>NSMenu</string>
- <string>NSCustomObject</string>
<string>NSArrayController</string>
- <string>NSSplitView</string>
+ <string>NSBox</string>
+ <string>NSButtonCell</string>
+ <string>NSCustomObject</string>
<string>NSImageCell</string>
- <string>NSTableView</string>
- <string>NSSearchField</string>
- <string>NSTextField</string>
+ <string>NSMenu</string>
+ <string>NSMenuItem</string>
<string>NSNumberFormatter</string>
- <string>NSSearchFieldCell</string>
- <string>NSWindowTemplate</string>
- <string>NSTextFieldCell</string>
- <string>NSButtonCell</string>
- <string>NSTableColumn</string>
- <string>NSBox</string>
- <string>NSView</string>
+ <string>NSPopUpButton</string>
<string>NSPopUpButtonCell</string>
<string>NSScrollView</string>
<string>NSScroller</string>
+ <string>NSSearchField</string>
+ <string>NSSearchFieldCell</string>
+ <string>NSSplitView</string>
+ <string>NSTableColumn</string>
<string>NSTableHeaderView</string>
- <string>NSPopUpButton</string>
+ <string>NSTableView</string>
+ <string>NSTextField</string>
+ <string>NSTextFieldCell</string>
+ <string>NSView</string>
+ <string>NSWindowTemplate</string>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -57,7 +57,7 @@
<object class="NSWindowTemplate" id="886395775">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
- <string key="NSWindowRect">{{168, 213}, {380, 440}}</string>
+ <string key="NSWindowRect">{{168, 213}, {427, 440}}</string>
<int key="NSWTFlags">1886912512</int>
<object class="NSMutableString" key="NSWindowTitle">
<characters key="NS.bytes">Window</characters>
@@ -81,33 +81,108 @@
<object class="NSView" id="59660678">
<reference key="NSNextResponder" ref="694177789"/>
<int key="NSvFlags">274</int>
- <string key="NSFrame">{{2, 2}, {358, 327}}</string>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSSearchField" id="43984557">
+ <reference key="NSNextResponder" ref="59660678"/>
+ <int key="NSvFlags">266</int>
+ <string key="NSFrame">{{128, 302}, {252, 19}}</string>
+ <reference key="NSSuperview" ref="59660678"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="1071498724"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSSearchFieldCell" key="NSCell" id="253400855">
+ <int key="NSCellFlags">343014977</int>
+ <int key="NSCellFlags2">132096</int>
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport" id="26">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <reference key="NSControlView" ref="43984557"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <int key="NSTextBezelStyle">1</int>
+ <object class="NSColor" key="NSBackgroundColor" id="69617649">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor" id="414518639">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="792870453">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor" id="249276021">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ <object class="NSButtonCell" key="NSSearchButtonCell">
+ <int key="NSCellFlags">130560</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">search</string>
+ <reference key="NSControlView" ref="43984557"/>
+ <string key="NSAction">_searchFieldSearch:</string>
+ <reference key="NSTarget" ref="253400855"/>
+ <int key="NSButtonFlags">138690815</int>
+ <int key="NSButtonFlags2">0</int>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ <object class="NSButtonCell" key="NSCancelButtonCell">
+ <int key="NSCellFlags">130560</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">clear</string>
+ <object class="NSMutableArray" key="NSAccessibilityOverriddenAttributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableDictionary">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>AXDescription</string>
+ <string>NSAccessibilityEncodedAttributesValueType</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancel</string>
+ <integer value="1"/>
+ </object>
+ </object>
+ </object>
+ <string key="NSAction">_searchFieldCancel:</string>
+ <reference key="NSTarget" ref="253400855"/>
+ <int key="NSButtonFlags">138428671</int>
+ <int key="NSButtonFlags2">0</int>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ <int key="NSMaximumRecents">255</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrame">{{2, 2}, {397, 327}}</string>
<reference key="NSSuperview" ref="694177789"/>
- <reference key="NSNextKeyView" ref="1071498724"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="43984557"/>
</object>
</object>
- <string key="NSFrame">{{9, 16}, {362, 331}}</string>
+ <string key="NSFrame">{{9, 16}, {401, 331}}</string>
<reference key="NSSuperview" ref="237570604"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="59660678"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Box</string>
- <object class="NSFont" key="NSSupport" id="26">
- <string key="NSName">LucidaGrande</string>
- <double key="NSSize">11</double>
- <int key="NSfFlags">3100</int>
- </object>
- <object class="NSColor" key="NSBackgroundColor" id="69617649">
- <int key="NSColorSpace">6</int>
- <string key="NSCatalogName">System</string>
- <string key="NSColorName">textBackgroundColor</string>
- <object class="NSColor" key="NSColor" id="414518639">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MQA</bytes>
- </object>
- </object>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSBackgroundColor" ref="69617649"/>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
@@ -119,81 +194,13 @@
<int key="NSTitlePosition">0</int>
<bool key="NSTransparent">NO</bool>
</object>
- <object class="NSSearchField" id="43984557">
- <reference key="NSNextResponder" ref="237570604"/>
- <int key="NSvFlags">266</int>
- <string key="NSFrame">{{129, 320}, {231, 19}}</string>
- <reference key="NSSuperview" ref="237570604"/>
- <reference key="NSNextKeyView" ref="679288482"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSSearchFieldCell" key="NSCell" id="253400855">
- <int key="NSCellFlags">343014977</int>
- <int key="NSCellFlags2">132096</int>
- <string key="NSContents"/>
- <reference key="NSSupport" ref="26"/>
- <reference key="NSControlView" ref="43984557"/>
- <bool key="NSDrawsBackground">YES</bool>
- <int key="NSTextBezelStyle">1</int>
- <reference key="NSBackgroundColor" ref="69617649"/>
- <object class="NSColor" key="NSTextColor" id="792870453">
- <int key="NSColorSpace">6</int>
- <string key="NSCatalogName">System</string>
- <string key="NSColorName">controlTextColor</string>
- <object class="NSColor" key="NSColor" id="249276021">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MAA</bytes>
- </object>
- </object>
- <object class="NSButtonCell" key="NSSearchButtonCell">
- <int key="NSCellFlags">130560</int>
- <int key="NSCellFlags2">0</int>
- <string key="NSContents">search</string>
- <reference key="NSControlView" ref="43984557"/>
- <string key="NSAction">_searchFieldSearch:</string>
- <reference key="NSTarget" ref="253400855"/>
- <int key="NSButtonFlags">138690815</int>
- <int key="NSButtonFlags2">0</int>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">400</int>
- <int key="NSPeriodicInterval">75</int>
- </object>
- <object class="NSButtonCell" key="NSCancelButtonCell">
- <int key="NSCellFlags">130560</int>
- <int key="NSCellFlags2">0</int>
- <string key="NSContents">clear</string>
- <object class="NSMutableArray" key="NSAccessibilityOverriddenAttributes">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMutableDictionary">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>AXDescription</string>
- <string>NSAccessibilityEncodedAttributesValueType</string>
- </object>
- <object class="NSArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>cancel</string>
- <integer value="1"/>
- </object>
- </object>
- </object>
- <string key="NSAction">_searchFieldCancel:</string>
- <reference key="NSTarget" ref="253400855"/>
- <int key="NSButtonFlags">138428671</int>
- <int key="NSButtonFlags2">0</int>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">400</int>
- <int key="NSPeriodicInterval">75</int>
- </object>
- <int key="NSMaximumRecents">255</int>
- </object>
- </object>
<object class="NSPopUpButton" id="1071498724">
<reference key="NSNextResponder" ref="237570604"/>
<int key="NSvFlags">268</int>
- <string key="NSFrame">{{16, 317}, {107, 22}}</string>
+ <string key="NSFrame">{{16, 317}, {116, 22}}</string>
<reference key="NSSuperview" ref="237570604"/>
- <reference key="NSNextKeyView" ref="43984557"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="679288482"/>
<int key="NSTag">1</int>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="983889322">
@@ -212,29 +219,30 @@
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
- <nil key="NSMenuItem"/>
+ <object class="NSMenuItem" key="NSMenuItem" id="198249822">
+ <reference key="NSMenu" ref="552628651"/>
+ <string key="NSTitle">by Type</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <int key="NSState">1</int>
+ <object class="NSCustomResource" key="NSOnImage" id="282987558">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuCheckmark</string>
+ </object>
+ <object class="NSCustomResource" key="NSMixedImage" id="550784708">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuMixedState</string>
+ </object>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="983889322"/>
+ </object>
<bool key="NSMenuItemRespectAlignment">YES</bool>
<object class="NSMenu" key="NSMenu" id="552628651">
<string key="NSTitle">OtherViews</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSMenuItem" id="198249822">
- <reference key="NSMenu" ref="552628651"/>
- <string key="NSTitle">by Type</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <object class="NSCustomResource" key="NSOnImage" id="282987558">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSMenuCheckmark</string>
- </object>
- <object class="NSCustomResource" key="NSMixedImage" id="550784708">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSMenuMixedState</string>
- </object>
- <string key="NSAction">_popUpItemAction:</string>
- <reference key="NSTarget" ref="983889322"/>
- </object>
+ <reference ref="198249822"/>
<object class="NSMenuItem" id="684897695">
<reference key="NSMenu" ref="552628651"/>
<string key="NSTitle">by Plugin</string>
@@ -261,6 +269,7 @@
<int key="NSvFlags">256</int>
<string key="NSFrame">{{16, 21}, {258, 14}}</string>
<reference key="NSSuperview" ref="237570604"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1001657189"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="407649879">
@@ -299,15 +308,17 @@
<object class="NSTableView" id="1026505088">
<reference key="NSNextResponder" ref="238503688"/>
<int key="NSvFlags">4352</int>
- <string key="NSFrameSize">{102, 260}</string>
+ <string key="NSFrameSize">{113, 260}</string>
<reference key="NSSuperview" ref="238503688"/>
- <reference key="NSNextKeyView" ref="518365043"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="967518347"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTableHeaderView" key="NSHeaderView" id="979679400">
<reference key="NSNextResponder" ref="13505120"/>
<int key="NSvFlags">256</int>
- <string key="NSFrameSize">{102, 17}</string>
+ <string key="NSFrameSize">{113, 17}</string>
<reference key="NSSuperview" ref="13505120"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="328212557"/>
<reference key="NSTableView" ref="1026505088"/>
</object>
@@ -316,6 +327,7 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-26, 0}, {16, 17}}</string>
<reference key="NSSuperview" ref="718701808"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="13505120"/>
</object>
<object class="NSMutableArray" key="NSTableColumns">
@@ -341,7 +353,7 @@
</object>
</object>
<object class="NSImageCell" key="NSDataCell" id="992766899">
- <int key="NSCellFlags">130560</int>
+ <int key="NSCellFlags">134348288</int>
<int key="NSCellFlags2">33554432</int>
<int key="NSAlign">0</int>
<int key="NSScale">0</int>
@@ -351,7 +363,7 @@
<reference key="NSTableView" ref="1026505088"/>
</object>
<object class="NSTableColumn" id="335712290">
- <double key="NSWidth">79.753997802734375</double>
+ <double key="NSWidth">90.753997802734375</double>
<double key="NSMinWidth">29.753999710083008</double>
<double key="NSMaxWidth">1000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
@@ -410,8 +422,9 @@
<int key="NSTableViewGroupRowStyle">1</int>
</object>
</object>
- <string key="NSFrame">{{1, 17}, {102, 260}}</string>
+ <string key="NSFrame">{{1, 17}, {113, 260}}</string>
<reference key="NSSuperview" ref="718701808"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1026505088"/>
<reference key="NSDocView" ref="1026505088"/>
<reference key="NSBGColor" ref="1068517384"/>
@@ -422,6 +435,7 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-30, 17}, {15, 288}}</string>
<reference key="NSSuperview" ref="718701808"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="238503688"/>
<reference key="NSTarget" ref="718701808"/>
<string key="NSAction">_doScroller:</string>
@@ -432,6 +446,7 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {125, 15}}</string>
<reference key="NSSuperview" ref="718701808"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="178164065"/>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="718701808"/>
@@ -445,8 +460,9 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="979679400"/>
</object>
- <string key="NSFrame">{{1, 0}, {102, 17}}</string>
+ <string key="NSFrame">{{1, 0}, {113, 17}}</string>
<reference key="NSSuperview" ref="718701808"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="979679400"/>
<reference key="NSDocView" ref="979679400"/>
<reference key="NSBGColor" ref="606754128"/>
@@ -454,9 +470,10 @@
</object>
<reference ref="178164065"/>
</object>
- <string key="NSFrameSize">{104, 278}</string>
+ <string key="NSFrameSize">{115, 278}</string>
<reference key="NSSuperview" ref="679288482"/>
- <reference key="NSNextKeyView" ref="238503688"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="518365043"/>
<int key="NSsFlags">133650</int>
<reference key="NSVScroller" ref="328212557"/>
<reference key="NSHScroller" ref="518365043"/>
@@ -478,23 +495,26 @@
<object class="NSTableView" id="1027178025">
<reference key="NSNextResponder" ref="565782161"/>
<int key="NSvFlags">4352</int>
- <string key="NSFrameSize">{226, 260}</string>
+ <string key="NSFrameSize">{323, 260}</string>
<reference key="NSSuperview" ref="565782161"/>
- <reference key="NSNextKeyView" ref="724238861"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="273310922"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTableHeaderView" key="NSHeaderView" id="5540051">
<reference key="NSNextResponder" ref="138799009"/>
<int key="NSvFlags">256</int>
- <string key="NSFrameSize">{226, 17}</string>
+ <string key="NSFrameSize">{323, 17}</string>
<reference key="NSSuperview" ref="138799009"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="763154501"/>
<reference key="NSTableView" ref="1027178025"/>
</object>
<object class="_NSCornerView" key="NSCornerView" id="763154501">
<reference key="NSNextResponder" ref="967518347"/>
<int key="NSvFlags">256</int>
- <string key="NSFrame">{{227, 0}, {16, 17}}</string>
+ <string key="NSFrame">{{255, 0}, {16, 17}}</string>
<reference key="NSSuperview" ref="967518347"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="565782161"/>
</object>
<object class="NSMutableArray" key="NSTableColumns">
@@ -657,7 +677,7 @@
<reference key="NSTextColor" ref="737682426"/>
</object>
<object class="NSImageCell" key="NSDataCell" id="528788794">
- <int key="NSCellFlags">130560</int>
+ <int key="NSCellFlags">134348288</int>
<int key="NSCellFlags2">33554432</int>
<int key="NSAlign">0</int>
<int key="NSScale">0</int>
@@ -668,13 +688,13 @@
<reference key="NSTableView" ref="1027178025"/>
</object>
<object class="NSTableColumn" id="513875355">
- <double key="NSWidth">135</double>
+ <double key="NSWidth">96</double>
<double key="NSMinWidth">4</double>
<double key="NSMaxWidth">1000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
<int key="NSCellFlags">75628096</int>
<int key="NSCellFlags2">2048</int>
- <string key="NSContents">Actions</string>
+ <string key="NSContents">Action (↩)</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="208415659"/>
<reference key="NSTextColor" ref="737682426"/>
@@ -692,6 +712,30 @@
<bool key="NSIsEditable">YES</bool>
<reference key="NSTableView" ref="1027178025"/>
</object>
+ <object class="NSTableColumn" id="172947005">
+ <double key="NSWidth">133</double>
+ <double key="NSMinWidth">4</double>
+ <double key="NSMaxWidth">1000</double>
+ <object class="NSTableHeaderCell" key="NSHeaderCell">
+ <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags2">2048</int>
+ <string key="NSContents">Alternate Action (⌘↩)</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSBackgroundColor" ref="208415659"/>
+ <reference key="NSTextColor" ref="737682426"/>
+ </object>
+ <object class="NSTextFieldCell" key="NSDataCell" id="894731750">
+ <int key="NSCellFlags">338820672</int>
+ <int key="NSCellFlags2">1024</int>
+ <reference key="NSSupport" ref="206835057"/>
+ <reference key="NSControlView" ref="1027178025"/>
+ <reference key="NSBackgroundColor" ref="606754128"/>
+ <reference key="NSTextColor" ref="792870453"/>
+ </object>
+ <int key="NSResizingMask">3</int>
+ <bool key="NSIsResizeable">YES</bool>
+ <reference key="NSTableView" ref="1027178025"/>
+ </object>
</object>
<double key="NSIntercellSpacingWidth">3</double>
<double key="NSIntercellSpacingHeight">2</double>
@@ -710,8 +754,9 @@
<int key="NSTableViewGroupRowStyle">1</int>
</object>
</object>
- <string key="NSFrame">{{1, 17}, {226, 260}}</string>
+ <string key="NSFrame">{{1, 17}, {254, 260}}</string>
<reference key="NSSuperview" ref="967518347"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1027178025"/>
<reference key="NSDocView" ref="1027178025"/>
<reference key="NSBGColor" ref="606754128"/>
@@ -720,8 +765,9 @@
<object class="NSScroller" id="273310922">
<reference key="NSNextResponder" ref="967518347"/>
<int key="NSvFlags">256</int>
- <string key="NSFrame">{{227, 17}, {15, 260}}</string>
+ <string key="NSFrame">{{255, 17}, {15, 260}}</string>
<reference key="NSSuperview" ref="967518347"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="273512433"/>
<reference key="NSTarget" ref="967518347"/>
<string key="NSAction">_doScroller:</string>
@@ -732,7 +778,9 @@
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {157, 15}}</string>
<reference key="NSSuperview" ref="967518347"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="138799009"/>
+ <bool key="NSEnabled">YES</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="967518347"/>
<string key="NSAction">_doScroller:</string>
@@ -745,8 +793,9 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="5540051"/>
</object>
- <string key="NSFrame">{{1, 0}, {226, 17}}</string>
+ <string key="NSFrame">{{1, 0}, {254, 17}}</string>
<reference key="NSSuperview" ref="967518347"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="5540051"/>
<reference key="NSDocView" ref="5540051"/>
<reference key="NSBGColor" ref="606754128"/>
@@ -754,10 +803,11 @@
</object>
<reference ref="763154501"/>
</object>
- <string key="NSFrame">{{113, 0}, {243, 278}}</string>
+ <string key="NSFrame">{{124, 0}, {271, 278}}</string>
<reference key="NSSuperview" ref="679288482"/>
- <reference key="NSNextKeyView" ref="565782161"/>
- <int key="NSsFlags">133138</int>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="724238861"/>
+ <int key="NSsFlags">133266</int>
<reference key="NSVScroller" ref="273310922"/>
<reference key="NSHScroller" ref="724238861"/>
<reference key="NSContentView" ref="565782161"/>
@@ -766,8 +816,9 @@
<bytes key="NSScrollAmts">AAAAAAAAAABBkAAAQZAAAA</bytes>
</object>
</object>
- <string key="NSFrame">{{12, 35}, {356, 278}}</string>
+ <string key="NSFrame">{{12, 35}, {395, 278}}</string>
<reference key="NSSuperview" ref="237570604"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="718701808"/>
<bool key="NSIsVertical">YES</bool>
</object>
@@ -776,6 +827,8 @@
<int key="NSvFlags">289</int>
<string key="NSFrame">{{237, 21}, {129, 14}}</string>
<reference key="NSSuperview" ref="237570604"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="62567589">
<int key="NSCellFlags">67239424</int>
@@ -789,9 +842,10 @@
</object>
<object class="NSTextField" id="193048329">
<reference key="NSNextResponder" ref="237570604"/>
- <int key="NSvFlags">268</int>
+ <int key="NSvFlags">266</int>
<string key="NSFrame">{{9, 353}, {362, 56}}</string>
<reference key="NSSuperview" ref="237570604"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="572007157"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<string key="NSAntiCompressionPriority">{250, 750}</string>
@@ -809,9 +863,10 @@
</object>
<object class="NSTextField" id="572007157">
<reference key="NSNextResponder" ref="237570604"/>
- <int key="NSvFlags">268</int>
+ <int key="NSvFlags">266</int>
<string key="NSFrame">{{10, 404}, {361, 28}}</string>
<reference key="NSSuperview" ref="237570604"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="694177789"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<string key="NSAntiCompressionPriority">{250, 750}</string>
@@ -828,11 +883,12 @@
</object>
</object>
</object>
- <string key="NSFrameSize">{380, 440}</string>
+ <string key="NSFrameSize">{427, 440}</string>
<reference key="NSSuperview"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="193048329"/>
</object>
- <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
+ <string key="NSScreenRect">{{0, 0}, {1280, 1002}}</string>
<string key="NSMinSize">{533, 322}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
@@ -902,14 +958,6 @@
<int key="connectionID">100</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">setFilterText:</string>
- <reference key="source" ref="192838603"/>
- <reference key="destination" ref="43984557"/>
- </object>
- <int key="connectionID">108</int>
- </object>
- <object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">_firstKeyView</string>
<reference key="source" ref="192838603"/>
@@ -926,6 +974,14 @@
<int key="connectionID">71</int>
</object>
<object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">setFilterText:</string>
+ <reference key="source" ref="192838603"/>
+ <reference key="destination" ref="43984557"/>
+ </object>
+ <int key="connectionID">108</int>
+ </object>
+ <object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">nextKeyView</string>
<reference key="source" ref="237570604"/>
@@ -1141,6 +1197,22 @@
</object>
<int key="connectionID">115</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: arrangedObjects.alternate.displayName</string>
+ <reference key="source" ref="172947005"/>
+ <reference key="destination" ref="177189387"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="172947005"/>
+ <reference key="NSDestination" ref="177189387"/>
+ <string key="NSLabel">value: arrangedObjects.alternate.displayName</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">arrangedObjects.alternate.displayName</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">145</int>
+ </object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -1183,7 +1255,6 @@
<reference ref="273512433"/>
<reference ref="679288482"/>
<reference ref="1001657189"/>
- <reference ref="43984557"/>
<reference ref="572007157"/>
<reference ref="193048329"/>
</object>
@@ -1194,6 +1265,7 @@
<reference key="object" ref="694177789"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="43984557"/>
</object>
<reference key="parent" ref="237570604"/>
</object>
@@ -1282,6 +1354,7 @@
<reference ref="98776178"/>
<reference ref="513875355"/>
<reference ref="419406080"/>
+ <reference ref="172947005"/>
</object>
<reference key="parent" ref="967518347"/>
</object>
@@ -1423,20 +1496,6 @@
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
- <int key="objectID">30</int>
- <reference key="object" ref="43984557"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="253400855"/>
- </object>
- <reference key="parent" ref="237570604"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">122</int>
- <reference key="object" ref="253400855"/>
- <reference key="parent" ref="43984557"/>
- </object>
- <object class="IBObjectRecord">
<int key="objectID">36</int>
<reference key="object" ref="1071498724"/>
<object class="NSMutableArray" key="children">
@@ -1502,6 +1561,34 @@
<reference key="object" ref="310525135"/>
<reference key="parent" ref="572007157"/>
</object>
+ <object class="IBObjectRecord">
+ <int key="objectID">141</int>
+ <reference key="object" ref="172947005"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="894731750"/>
+ </object>
+ <reference key="parent" ref="1027178025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">142</int>
+ <reference key="object" ref="894731750"/>
+ <reference key="parent" ref="172947005"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">30</int>
+ <reference key="object" ref="43984557"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="253400855"/>
+ </object>
+ <reference key="parent" ref="694177789"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">122</int>
+ <reference key="object" ref="253400855"/>
+ <reference key="parent" ref="43984557"/>
+ </object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@@ -1539,6 +1626,9 @@
<string>138.IBPluginDependency</string>
<string>139.IBPluginDependency</string>
<string>140.IBPluginDependency</string>
+ <string>141.IBPluginDependency</string>
+ <string>142.IBPluginDependency</string>
+ <string>142.IBShouldRemoveOnLegacySave</string>
<string>17.IBPluginDependency</string>
<string>18.IBPluginDependency</string>
<string>19.IBPluginDependency</string>
@@ -1603,6 +1693,9 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="YES"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1643,9 +1736,155 @@
<reference key="dict.values" ref="0"/>
</object>
<nil key="sourceID"/>
- <int key="maxID">140</int>
+ <int key="maxID">148</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSApplication</string>
+ <object class="NSMutableDictionary" key="actions">
+ <string key="NS.key.0">relaunch:</string>
+ <string key="NS.object.0">id</string>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <string key="NS.key.0">relaunch:</string>
+ <object class="IBActionInfo" key="NS.object.0">
+ <string key="name">relaunch:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/NSApplication.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">QSActionsPrefPane</string>
+ <string key="superclassName">QSPreferencePane</string>
+ <object class="NSMutableDictionary" key="actions">
+ <string key="NS.key.0">setFilterText:</string>
+ <string key="NS.object.0">id</string>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <string key="NS.key.0">setFilterText:</string>
+ <object class="IBActionInfo" key="NS.object.0">
+ <string key="name">setFilterText:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>actionController</string>
+ <string>groupController</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSArrayController</string>
+ <string>NSArrayController</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>actionController</string>
+ <string>groupController</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">actionController</string>
+ <string key="candidateClassName">NSArrayController</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">groupController</string>
+ <string key="candidateClassName">NSArrayController</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/QSActionsPrefPane.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">QSImageCell</string>
+ <string key="superclassName">NSImageCell</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/QSImageCell.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">QSPreferencePane</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <string key="NS.key.0">showPaneHelp:</string>
+ <string key="NS.object.0">id</string>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <string key="NS.key.0">showPaneHelp:</string>
+ <object class="IBActionInfo" key="NS.object.0">
+ <string key="name">showPaneHelp:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>_firstKeyView</string>
+ <string>_initialKeyView</string>
+ <string>_lastKeyView</string>
+ <string>_window</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSView</string>
+ <string>NSView</string>
+ <string>NSView</string>
+ <string>NSWindow</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>_firstKeyView</string>
+ <string>_initialKeyView</string>
+ <string>_lastKeyView</string>
+ <string>_window</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">_firstKeyView</string>
+ <string key="candidateClassName">NSView</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">_initialKeyView</string>
+ <string key="candidateClassName">NSView</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">_lastKeyView</string>
+ <string key="candidateClassName">NSView</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">_window</string>
+ <string key="candidateClassName">NSWindow</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/QSPreferencePane.h</string>
+ </object>
+ </object>
+ </object>
</object>
- <object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
View
24 Quicksilver/PlugIns-Main/Bezel/QSBezelInterface.xib
@@ -2,13 +2,13 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
- <string key="IBDocument.SystemVersion">11G56</string>
- <string key="IBDocument.InterfaceBuilderVersion">2549</string>
- <string key="IBDocument.AppKitVersion">1138.51</string>
- <string key="IBDocument.HIToolboxVersion">569.00</string>
+ <string key="IBDocument.SystemVersion">12C60</string>
+ <string key="IBDocument.InterfaceBuilderVersion">2843</string>
+ <string key="IBDocument.AppKitVersion">1187.34</string>
+ <string key="IBDocument.HIToolboxVersion">625.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string key="NS.object.0">2549</string>
+ <string key="NS.object.0">2843</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -97,7 +97,7 @@
<reference key="NSNextKeyView" ref="220680343"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="684642459">
- <int key="NSCellFlags">-2079195584</int>
+ <int key="NSCellFlags">-2079326144</int>
<int key="NSCellFlags2">138413056</int>
<string key="NSContents">▾</string>
<object class="NSFont" key="NSSupport">
@@ -120,11 +120,11 @@
<bytes key="NSWhite">MAA</bytes>
</object>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSProgressIndicator" id="541557247">
<reference key="NSNextResponder" ref="708947105"/>
<int key="NSvFlags">1281</int>
- <object class="NSPSMatrix" key="NSDrawMatrix"/>
<string key="NSFrame">{{505, 4}, {16, 16}}</string>
<reference key="NSSuperview" ref="708947105"/>
<reference key="NSWindow"/>
@@ -141,8 +141,8 @@
<reference key="NSNextKeyView" ref="541557247"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="106227149">
- <int key="NSCellFlags">68288064</int>
- <int key="NSCellFlags2">138413056</int>
+ <int key="NSCellFlags">67108928</int>
+ <int key="NSCellFlags2">138414592</int>
<string key="NSContents">Small System Font Text</string>
<object class="NSFont" key="NSSupport">
<string key="NSName">LucidaGrande</string>
@@ -166,6 +166,7 @@
<reference key="NSColor" ref="22562272"/>
</object>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="220680343">
<reference key="NSNextResponder" ref="708947105"/>
@@ -176,7 +177,7 @@
<reference key="NSNextKeyView" ref="177189960"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="875065009">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">▾</string>
<object class="NSFont" key="NSSupport" id="267833496">
@@ -185,7 +186,7 @@
<int key="NSfFlags">1044</int>
</object>
<reference key="NSControlView" ref="220680343"/>
- <int key="NSButtonFlags">134660351</int>
+ <int key="NSButtonFlags">134660096</int>
<int key="NSButtonFlags2">6</int>
<reference key="NSAlternateImage" ref="267833496"/>
<string key="NSAlternateContents"/>
@@ -195,6 +196,7 @@
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrameSize">{530, 202}</string>
View
10 Quicksilver/PlugIns-Main/QSCorePlugIn/QSCorePlugIn-Info.plist
@@ -992,6 +992,8 @@
</dict>
<key>FileMoveToAction</key>
<dict>
+ <key>alternateAction</key>
+ <string>FileCopyToAction</string>
<key>displaysResult</key>
<integer>1</integer>
<key>actionClass</key>