Re: Highlight Text like with FIne

2010-09-07 Thread Brad Stone
Ross - That looks like a good solution, basically, I'm highlighting the 
background versus the actual text.  Very clever.   This approach has the added 
advantage of preventing the user from accidentally deleting text because it's 
not a real highligh.  I'll try this out tonight.

Using this code I was able to highlight text in an textView but again, it's 
highlighting the text, not the background:

NSString *s = [textView string];
NSMutableArray *selRangeArray = [[NSMutableArray alloc] init];
if ([s length]  0) {
NSRange r = [s rangeOfString:searchText 
options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
while (r.location != NSNotFound) {
[selRangeArray addObject:[NSValue 
valueWithRange:r]];
NSUInteger newStart = r.location + r.length;
r = [s rangeOfString:searchText 
options:NSCaseInsensitiveSearch range:NSMakeRange(newStart, [s length] - 
newStart)];
}
if ([selRangeArray count]  0) {
[textView setSelectedRanges:selRangeArray];
}
}


On Sep 6, 2010, at 1:19 PM, Ross Carter wrote:

 On Sep 5, 2010, at 7:33 PM, Brad Stone wrote:
 
 I want to highlight different substrings contained in controls in a window 
 (two different comboBoxes for example) programmatically when the user is 
 searching for a subString.  I can do this for one comboBox but not both 
 simultaneously.  Here's one.
 
 NSString *s = [titleComboBox stringValue];
 NSRange r = [s rangeOfString:searchText options:NSCaseInsensitiveSearch 
 range:NSMakeRange(0, [s length])];
 [titleComboBox selectText:w];
 if (r.location != NSNotFound) {
 // this is needed to select the substring
  NSText *textEditor = [w fieldEditor:YES forObject:titleComboBox];
  [textEditor setSelectedRange:r];
 }
 
 But this only highlights the text in the titleComboBox.  If I then repeat 
 this to highlight the  text in the categoryComboBox by repeating the code, 
 titleComboBox gets deselected and categoryComboBox gets selected.  I want to 
 highlight them both simultaneously.  I'd also rather use the big yellow 
 highlight like with the find panel (but that's later).
 
 Is this possible? 
 
 Your code will not work because there can be only one active field editor at 
 a time, and you are controlling the text by manipulating the selectedRange 
 property of the field editor.
 
 I would be inclined to try using attributed strings to show the selection. 
 Maybe something like this:
 
 if (r.location != NSNotFound) {
   NSMutableAttributedString *stringWithSelection = 
 [[NSMutableAttributedString alloc] initWithString:s];
   [stringWithSelection addAttribute: NSBackgroundColorAttributeName 
 value:[NSColor yellowColor] range:r];
   // set control value to stringWithSelection, using whatever technique 
 is appropriate
   [stringWithSelection release];
 }
 
 To deselect, just set the control value to [[control attributedStringValue] 
 string].
 
 There are other ways to do what you need. This might be the most 
 straightforward.
 
 -Ross
 ___
 
 Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
 
 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/cocoa-dev%40softraph.com
 
 This email sent to cocoa-...@softraph.com

___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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/archive%40mail-archive.com

This email sent to arch...@mail-archive.com


Re: Highlight Text like with FIne

2010-09-06 Thread Ross Carter
On Sep 5, 2010, at 7:33 PM, Brad Stone wrote:

 I want to highlight different substrings contained in controls in a window 
 (two different comboBoxes for example) programmatically when the user is 
 searching for a subString.  I can do this for one comboBox but not both 
 simultaneously.  Here's one.
 
 NSString *s = [titleComboBox stringValue];
 NSRange r = [s rangeOfString:searchText options:NSCaseInsensitiveSearch 
 range:NSMakeRange(0, [s length])];
 [titleComboBox selectText:w]; 
 if (r.location != NSNotFound) {
 // this is needed to select the substring
   NSText *textEditor = [w fieldEditor:YES forObject:titleComboBox];
   [textEditor setSelectedRange:r];
 }
 
 But this only highlights the text in the titleComboBox.  If I then repeat 
 this to highlight the  text in the categoryComboBox by repeating the code, 
 titleComboBox gets deselected and categoryComboBox gets selected.  I want to 
 highlight them both simultaneously.  I'd also rather use the big yellow 
 highlight like with the find panel (but that's later).
 
 Is this possible? 

Your code will not work because there can be only one active field editor at a 
time, and you are controlling the text by manipulating the selectedRange 
property of the field editor.

I would be inclined to try using attributed strings to show the selection. 
Maybe something like this:

if (r.location != NSNotFound) {
NSMutableAttributedString *stringWithSelection = 
[[NSMutableAttributedString alloc] initWithString:s];
[stringWithSelection addAttribute: NSBackgroundColorAttributeName 
value:[NSColor yellowColor] range:r];
// set control value to stringWithSelection, using whatever technique 
is appropriate
[stringWithSelection release];
}

To deselect, just set the control value to [[control attributedStringValue] 
string].

There are other ways to do what you need. This might be the most 
straightforward.

-Ross
___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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/archive%40mail-archive.com

This email sent to arch...@mail-archive.com


Highlight Text like with FIne

2010-09-05 Thread Brad Stone
I want to highlight different substrings contained in controls in a window (two 
different comboBoxes for example) programmatically when the user is searching 
for a subString.  I can do this for one comboBox but not both simultaneously.  
Here's one.

NSString *s = [titleComboBox stringValue];
NSRange r = [s rangeOfString:searchText options:NSCaseInsensitiveSearch 
range:NSMakeRange(0, [s length])];
[titleComboBox selectText:w];   
if (r.location != NSNotFound) {
// this is needed to select the substring
NSText *textEditor = [w fieldEditor:YES forObject:titleComboBox];
[textEditor setSelectedRange:r];
}

But this only highlights the text in the titleComboBox.  If I then repeat this 
to highlight the  text in the categoryComboBox by repeating the code, 
titleComboBox gets deselected and categoryComboBox gets selected.  I want to 
highlight them both simultaneously.  I'd also rather use the big yellow 
highlight like with the find panel (but that's later).

Is this possible? 

Thanks___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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/archive%40mail-archive.com

This email sent to arch...@mail-archive.com