FROM : John Stiles
DATE : Fri Jan 11 04:05:23 2008
Honestly, I've implemented a custom NSFormatter before, and it's way
more code than just replacing the contents of the field editor. :)
On Jan 10, 2008, at 5:15 PM, Ken Thomases wrote:
> Are you perhaps still over-thinking? Can you use NSFormatter and
> its editingStringForObjectValue: method?
>
> Logically, the object value would be $(BUILD_LOC) and the formatter
> would perform the substitution and show the resulting string. When
> editing, it would revert to the "real" value.
>
> -Ken
>
> On Jan 8, 2008, at 8:32 PM, John Stiles wrote:
>
>> I think I was over-thinking the problem. Since I'm starting the
>> edit programmatically, after I call -editColumn:etc:, I just need
>> to grab the field editor with [[myOutlineView window]
>> fieldEditor:YES forObject:myOutlineView], and then call
>> [fieldEditor setString:myNewString]. Voila, it's done.
>>
>> If I had to support regular edits (initiated by slow-clicking in a
>> cell), I could probably put a -performSelector:afterDelay: in -
>> setUpFieldEditorAttributes: and provide a zero delay. This would
>> give the field editor a chance to get warmed up, and then I could
>> swoop in and replace its contents.
>>
>> FWIW, it looks like Xcode is doing something hokey here. If you
>> watch closely, when you click on it to begin an edit, it actually
>> visibly changes the cell's contents, and then editing begins 1/10
>> of a second later. If you time your clicks just right, you can
>> confuse it and it will leave cells in the "wrong" state (showing $
>> (STUFF) instead of a real path). Whoops! :)
>>
>>
>> John Stiles wrote:
>>> I thought I found a good workaround. -setUpFieldEditorAttributes:
>>> is, in fact, called whenever editing begins. However, it doesn't
>>> seem to work. I tried this:
>>>
>>> -(NSText*) setUpFieldEditorAttributes:(NSText*)textObj {
>>> [textObj setString:@"This is a test"];
>>> return textObj;
>>> }
>>>
>>> My code was definitely being called. But the field editor didn't
>>> change its contents! "This is a test" never appeared.
>>> :(
>>> How is Xcode managing this trick??
>>>
>>>
>>> John Stiles wrote:
>>>> I'm trying to set up a custom field editor for an NSOutlineView.
>>>> When it displays, its contents are not necessarily the same as
>>>> the cell being displayed by the outline view. For instance,
>>>> consider the Xcode project settings dialog—it has a table that
>>>> displays stuff like:
>>>> Build Location /Volumes/MyDrive/MyFolder
>>>>
>>>> But when you go to edit it, it changes to
>>>> Build Location $(BUILD_LOC)
>>>>
>>>> I'm basically trying to do something similar to that. So how is
>>>> this done?
>>>>
>>>> If it matters, I'm beginning the edit session programmatically
>>>> (in this case, in response to a menu selection). I suppose in
>>>> this case I might be able to get away with changing the cell's
>>>> string just before the edit begins, and change it back as soon
>>>> as the edit completes, but that's pretty hokey; I think it would
>>>> be a cleaner solution to just put the appropriate text in the
>>>> field editor and leave the cell's string alone. I just can't
>>>> manage to make it work though.
>>>>
>>>> I've tried using the delegate method -
>>>> control:textShouldBeginEditing: but this was a total bust; it's
>>>> not called until the user begins typing.
>>>>
>>>> I've also tried adding -
>>>> editWithFrame:inView:editor:delegate:event: to my NSCell
>>>> subclass but this did not seem to ever be called, strangely. (I
>>>> did notice that -selectWithFrame:inView:… etc. /is/ being
>>>> called, but that is probably because I am using "select:YES" in
>>>> my call to -editColumn:row:withEvent:select:.)
>>>>
>>>> _______________________________________________
>>>>
>>>> Cocoa-dev mailing list (<email_removed>)
>>>>
>>>> Please do not post admin requests or moderator comments to the
>>>> list.
>>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>>
>>>> Help/Unsubscribe/Update your Subscription:
>>>> http://lists.apple.com/mailman/options/cocoa-dev/jstiles%
>>>> 40blizzard.com
>>>>
>>>> This email sent to <email_removed>
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (<email_removed>)
>>>
>>> Please do not post admin requests or moderator comments to the list.
>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>
>>> Help/Unsubscribe/Update your Subscription:
>>> http://lists.apple.com/mailman/options/cocoa-dev/jstiles%
>>> 40blizzard.com
>>>
>>> This email sent to <email_removed>
>> _______________________________________________
>>
>> Cocoa-dev mailing list (<email_removed>)
>>
>> Please do not post admin requests or moderator comments to the list.
>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>
>> Help/Unsubscribe/Update your Subscription:
>> http://lists.apple.com/mailman/options/cocoa-dev/ken%
>> 40codeweavers.com
>>
>> This email sent to <email_removed>
>
DATE : Fri Jan 11 04:05:23 2008
Honestly, I've implemented a custom NSFormatter before, and it's way
more code than just replacing the contents of the field editor. :)
On Jan 10, 2008, at 5:15 PM, Ken Thomases wrote:
> Are you perhaps still over-thinking? Can you use NSFormatter and
> its editingStringForObjectValue: method?
>
> Logically, the object value would be $(BUILD_LOC) and the formatter
> would perform the substitution and show the resulting string. When
> editing, it would revert to the "real" value.
>
> -Ken
>
> On Jan 8, 2008, at 8:32 PM, John Stiles wrote:
>
>> I think I was over-thinking the problem. Since I'm starting the
>> edit programmatically, after I call -editColumn:etc:, I just need
>> to grab the field editor with [[myOutlineView window]
>> fieldEditor:YES forObject:myOutlineView], and then call
>> [fieldEditor setString:myNewString]. Voila, it's done.
>>
>> If I had to support regular edits (initiated by slow-clicking in a
>> cell), I could probably put a -performSelector:afterDelay: in -
>> setUpFieldEditorAttributes: and provide a zero delay. This would
>> give the field editor a chance to get warmed up, and then I could
>> swoop in and replace its contents.
>>
>> FWIW, it looks like Xcode is doing something hokey here. If you
>> watch closely, when you click on it to begin an edit, it actually
>> visibly changes the cell's contents, and then editing begins 1/10
>> of a second later. If you time your clicks just right, you can
>> confuse it and it will leave cells in the "wrong" state (showing $
>> (STUFF) instead of a real path). Whoops! :)
>>
>>
>> John Stiles wrote:
>>> I thought I found a good workaround. -setUpFieldEditorAttributes:
>>> is, in fact, called whenever editing begins. However, it doesn't
>>> seem to work. I tried this:
>>>
>>> -(NSText*) setUpFieldEditorAttributes:(NSText*)textObj {
>>> [textObj setString:@"This is a test"];
>>> return textObj;
>>> }
>>>
>>> My code was definitely being called. But the field editor didn't
>>> change its contents! "This is a test" never appeared.
>>> :(
>>> How is Xcode managing this trick??
>>>
>>>
>>> John Stiles wrote:
>>>> I'm trying to set up a custom field editor for an NSOutlineView.
>>>> When it displays, its contents are not necessarily the same as
>>>> the cell being displayed by the outline view. For instance,
>>>> consider the Xcode project settings dialog—it has a table that
>>>> displays stuff like:
>>>> Build Location /Volumes/MyDrive/MyFolder
>>>>
>>>> But when you go to edit it, it changes to
>>>> Build Location $(BUILD_LOC)
>>>>
>>>> I'm basically trying to do something similar to that. So how is
>>>> this done?
>>>>
>>>> If it matters, I'm beginning the edit session programmatically
>>>> (in this case, in response to a menu selection). I suppose in
>>>> this case I might be able to get away with changing the cell's
>>>> string just before the edit begins, and change it back as soon
>>>> as the edit completes, but that's pretty hokey; I think it would
>>>> be a cleaner solution to just put the appropriate text in the
>>>> field editor and leave the cell's string alone. I just can't
>>>> manage to make it work though.
>>>>
>>>> I've tried using the delegate method -
>>>> control:textShouldBeginEditing: but this was a total bust; it's
>>>> not called until the user begins typing.
>>>>
>>>> I've also tried adding -
>>>> editWithFrame:inView:editor:delegate:event: to my NSCell
>>>> subclass but this did not seem to ever be called, strangely. (I
>>>> did notice that -selectWithFrame:inView:… etc. /is/ being
>>>> called, but that is probably because I am using "select:YES" in
>>>> my call to -editColumn:row:withEvent:select:.)
>>>>
>>>> _______________________________________________
>>>>
>>>> Cocoa-dev mailing list (<email_removed>)
>>>>
>>>> Please do not post admin requests or moderator comments to the
>>>> list.
>>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>>
>>>> Help/Unsubscribe/Update your Subscription:
>>>> http://lists.apple.com/mailman/options/cocoa-dev/jstiles%
>>>> 40blizzard.com
>>>>
>>>> This email sent to <email_removed>
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (<email_removed>)
>>>
>>> Please do not post admin requests or moderator comments to the list.
>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>
>>> Help/Unsubscribe/Update your Subscription:
>>> http://lists.apple.com/mailman/options/cocoa-dev/jstiles%
>>> 40blizzard.com
>>>
>>> This email sent to <email_removed>
>> _______________________________________________
>>
>> Cocoa-dev mailing list (<email_removed>)
>>
>> Please do not post admin requests or moderator comments to the list.
>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>
>> Help/Unsubscribe/Update your Subscription:
>> http://lists.apple.com/mailman/options/cocoa-dev/ken%
>> 40codeweavers.com
>>
>> This email sent to <email_removed>
>
| Related mails | Author | Date |
|---|---|---|
| John Stiles | Jan 8, 23:35 | |
| John Stiles | Jan 9, 00:12 | |
| John Stiles | Jan 9, 03:32 | |
| Ken Thomases | Jan 11, 02:15 | |
| John Stiles | Jan 11, 04:05 |






Cocoa mail archive

