discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: some help with NSBrowser needed


From: Fred Kiefer
Subject: Re: some help with NSBrowser needed
Date: Wed, 2 Jan 2013 22:48:18 +0100

Looks like you created you browser twice, onces in the Gorm file and once in 
the code. This could not be seen in the minimal code snipplet you supplied.

On the road

Am 02.01.2013 um 19:38 schrieb "Sebastian Reitenbach" 
<sebastia@l00-bugdead-prods.de>:

> 
> On Wednesday, January 2, 2013 19:24 CET, "Sebastian Reitenbach" 
> <sebastia@l00-bugdead-prods.de> wrote: 
> 
>> 
>> On Tuesday, January 1, 2013 22:59 CET, Fred Kiefer <fredkiefer@gmx.de> 
>> wrote: 
>> 
>>> I think the problematic line is this one:
>>> 
>>>     browser = [[NSBrowser alloc] init];
>> Even commenting out that line, it still brings up the window, and I still 
>> get the
>> warning about the negative width.
>> 
>> A backtrace is below, in case of interest.
>> 
>> 
>>> 
>>> You create a browser with a zero size frame. (The -init method of NSView 
>>> calls -initWithFrame: with NSZeroRect) When the browser later tries to 
>>> draw its various parts, some of these may end up with negative sizes. 
>>> you could set a breakpoint on NSView.m:1182 to find out which parts are 
>>> affected.
>>> 
>>> If your code works on Cocoa, but not on GNUstep, we might have to change 
>>> the default rectangle for NSBrowser.
>> 
>> Don't know about if/how it works with Cocoa. I'm lacking a mac ;)
>> But what I tried was to create a test app, just with minimal code what I 
>> have, 
>> and what can I say, this just seems to work. So, now I only need to figure 
>> out
>> why one works, the other not.
>> 
>> thanks,
>> Sebastian
>> 
>> #0  -[NSView setFrame:] (self=0x832ee404, _cmd=0x2f0b6430, frameRect=
>>        {origin = {x = 21, y = 2}, size = {width = -23, height = 4}})
>>    at NSView.m:1180
>> #1  0x0f186abd in -[NSClipView setFrame:] (self=0x832ee404, _cmd=0x2f1463e8, 
>>    rect={origin = {x = 21, y = 2}, size = {width = -23, height = 4}})
>>    at NSClipView.m:580
>> #2  0x0f2d9976 in -[NSView resizeWithOldSuperviewSize:] (self=0x832ee404, 
>>    _cmd=0x2f1463d0, oldSize={width = 100, height = 100}) at NSView.m:2060
>> #3  0x0f2d2690 in -[NSView resizeSubviewsWithOldSize:] (self=0x832ee304, 
>>    _cmd=0x2f116688, oldSize={width = 100, height = 100}) at NSView.m:1935
>> #4  0x0f262dcb in -[NSScrollView resizeSubviewsWithOldSize:] 
>> (self=0x832ee304, 
>>    _cmd=0x2f146320, oldSize=The value of variable 'oldSize' is distributed 
>> across several
>> locations, and GDB cannot access its value.
>> 
>> ) at NSScrollView.m:1270
>> #5  0x0f2d94b8 in -[NSView setFrame:] (self=0x832ee304, _cmd=0x2f116608, 
>>    frameRect={origin = {x = 0, y = 23}, size = {width = 0, height = 0}})
>>    at NSView.m:1228
>> #6  0x0f2632d9 in -[NSScrollView setFrame:] (self=0x832ee304, 
>> _cmd=0x2f0abc00, 
>>    rect={origin = {x = 0, y = 23}, size = {width = 0, height = 0}})
>>    at NSScrollView.m:1057
>> #7  0x0f170822 in -[NSBrowser tile] (self=0x7e3afa04, _cmd=0x2f0aba80)
>>    at NSBrowser.m:1972
>> #8  0x0f16cfa4 in -[NSBrowser displayColumn:] (self=0x7e3afa04, 
>>    _cmd=0x2f0abf18, column=0) at NSBrowser.m:874
>> #9  0x0f16eaca in -[NSBrowser(Private) _performLoadOfColumn:] (
>> ---Type <return> to continue, or q <return> to quit---
>>    self=0x7e3afa04, _cmd=0x2f0aba78, column=0) at NSBrowser.m:3106
>> #10 0x0f16d27e in -[NSBrowser addColumn] (self=0x7e3afa04, _cmd=0x2f0ab970)
>>    at NSBrowser.m:817
>> #11 0x0f16ca4e in -[NSBrowser loadColumnZero] (self=0x7e3afa04, 
>>    _cmd=0x2f0ab9b8) at NSBrowser.m:1057
>> #12 0x0f17012c in -[NSBrowser setPath:] (self=0x7e3afa04, _cmd=0x3c01aa70, 
>>    path=0x3c01a4d0) at NSBrowser.m:572
>> #13 0x1c01c043 in -[CollectionBrowser awakeFromNib] (self=0x888adf04, 
>>    _cmd=0x2f169d90) at CollectionBrowser.m:64
>> #14 0x0f335266 in -[GSNibContainer awakeWithContext:] (self=0x8adecd04, 
>>    _cmd=0x2f180348, context=0x7e8b5a04) at GSGormLoading.m:250
>> #15 0x0f369164 in -[GSGormLoader loadModelData:externalNameTable:withZone:] (
>>    self=0x81b49754, _cmd=0x2f0f6830, data=0x81b49154, context=0x7e8b5a04, 
>>    zone=0x233af300) at GSGormLoader.m:120
>> #16 0x0f21bb76 in -[NSNib instantiateNibWithExternalNameTable:withZone:] (
>>    self=0x835b9664, _cmd=0x2f0ad3b0, externalNameTable=0x7e8b5a04, 
>>    zone=0x233af300) at NSNib.m:153
>> #17 0x0f1747d5 in +[NSBundle(NSBundleAdditions) 
>> loadNibFile:externalNameTable:withZone:] (self=0x2334a1a0, _cmd=0x2f14f3e8, 
>> fileName=0x805f3f84, 
>>    context=0x7e8b5a04, zone=0x233af300) at NSBundleAdditions.m:236
>> #18 0x0f2f91f5 in -[NSWindowController loadWindow] (self=0x888adf04, 
>>    _cmd=0x2f14f308) at NSWindowController.m:482
>> #19 0x0f2f7d41 in -[NSWindowController window] (self=0x888adf04, 
>> ---Type <return> to continue, or q <return> to quit---
>>    _cmd=0x2f14f288) at NSWindowController.m:312
>> #20 0x0f2f83d8 in -[NSWindowController showWindow:] (self=0x888adf04, 
>>    _cmd=0x3c0052e8, sender=0x80c66e04) at NSWindowController.m:392
>> #21 0x1c0041a0 in -[AppController browseCollectionByDirectory:] (
>>    self=0x80c66e04, _cmd=0x88a2b790, sender=0x8469a084) at 
>> AppController.m:172
>> #22 0x0f142412 in -[NSApplication sendAction:to:from:] (self=0x8802bb04, 
>>    _cmd=0x2f0ef920, aSelector=0x88a2b790, aTarget=0x80c66e04, 
>>    sender=0x8469a084) at NSApplication.m:2231
>> #23 0x0f209d71 in -[NSMenu performActionForItemAtIndex:] (self=0x8881e4c4, 
>>    _cmd=0x2f0f2620, index=1) at NSMenu.m:1315
>> #24 0x0f21474e in -[NSMenuView _trackWithEvent:startingMenuView:] (
>>    self=0x7fc11804, _cmd=0x2f0f2688, event=0x8b842104, 
>> mainWindowMenuView=0x0)
>>    at NSMenuView.m:1819
>> #25 0x0f211870 in -[NSMenuView trackWithEvent:] (self=0x7fc11804, 
>>    _cmd=0x2f0f26f8, event=0x7fdc49c4) at NSMenuView.m:1851
>> #26 0x0f211adf in -[NSMenuView mouseDown:] (self=0x7fc11804, 
>> _cmd=0x2f14dca0, 
>>    theEvent=0x7fdc49c4) at NSMenuView.m:1891
>> #27 0x0f2f2cb9 in -[NSWindow sendEvent:] (self=0x7fc11a04, _cmd=0x2f09ea80, 
>>    theEvent=0x7fdc49c4) at NSWindow.m:3790
>> #28 0x0f144d5c in -[NSApplication sendEvent:] (self=0x8802bb04, 
>>    _cmd=0x2f09e9b8, theEvent=0x7fdc49c4) at NSApplication.m:2106
>> #29 0x0f147bc5 in -[NSApplication run] (self=0x8802bb04, _cmd=0x2f094488)
>>    at NSApplication.m:1563
>> ---Type <return> to continue, or q <return> to quit---
>> #30 0x0f126ad3 in NSApplicationMain (argc=1, argv=0xcfbd5890) at 
>> Functions.m:91
>> #31 0x1c01c724 in gnustep_base_user_main (argc=1, argv=0xcfbd5890) at 
>> main.m:30
>> #32 0x0343d58e in main (argc=1, argv=Cannot access memory at address 0xc0010
>> ) at NSProcessInfo.m:984
>> #33 0x1c003767 in ___start (argc=1, argv=0xcfbd5890, envp=0xcfbd5898, 
>>    cleanup=0, obj=0x0, ps_strings=0xcfbfdff0)
>>    at /usr/src/lib/csu/i386/crt0.c:104
>> #34 0x1c0036e2 in _start () at /usr/src/lib/csu/i386/crt0.c:77
>> 
>> 
>>> 
>>> Hope this helps,
>>> Fred
>>> 
>>> 
>>> On 01.01.2013 18:17, Sebastian Reitenbach wrote:
>>>> for MPDCon, i want to have a filesystem like browser to browse through the 
>>>> music
>>>> directories. The Interface is created in Gorm, and in my class, I 
>>>> implemented the
>>>> "passive" NSBrowser delegate methods:
>>>> 
>>>> - (NSInteger)browser:(NSBrowser *)sender 
>>>> numberOfRowsInColumn:(NSInteger)column;
>>>> - (void)browser:(NSBrowser *)sender willDisplayCell:(id)cell 
>>>> atRow:(NSInteger)row column:(NSInteger)column;
>>>> 
>>>> My class is a subclass of NSWindowController, and is just a NSWindow, with
>>>> a NSBrowser in it, and one IBOutlet NSBrowser *browser.
>>>> 
>>>> I can see that both delegate methods get called from within awakeFromNib. 
>>>> There at the end I have:
>>>> 
>>>>   browser = [[NSBrowser alloc] init];
>>>>   [browser setDelegate:self];
> 
> And now, 5 minutes later, I found it. Commenting out both lines above, and 
> then
> in Gorm, connecting the delegate of the browser with the NSOwner, it just
> does what I want.
> 
> For whatever reason it above didn't worked, I don't know.
> Anyways, thanks! Sometimes it just helps to talk about ;)
> 
> Sebastian
> 
> 
>>>>   [browser setPath:@"/"];
>>>> }
>>>> 
>>>> the setPath: actually triggers calling the delegate methods. I have some 
>>>> NSLogs in them, to see if
>>>> they get called:
>>>> 
>>>> 2013-01-01 17:56:10.400 MPDCon[2484] here in numberOfRowsInColumn 0
>>>> 2013-01-01 17:56:10.400 MPDCon[2484] returning count: 5
>>>> 2013-01-01 17:56:10.760 MPDCon[2484] here in willDisplayCell 
>>>> <NSBrowserCell: 0x80c95704> 0 0, adding: /reggae
>>>> 2013-01-01 17:56:11.031 MPDCon[2484] here in willDisplayCell 
>>>> <NSBrowserCell: 0x80c95584> 1 0, adding: /techno
>>>> 2013-01-01 17:56:11.287 MPDCon[2484] here in willDisplayCell 
>>>> <NSBrowserCell: 0x80c95044> 2 0, adding: /ska
>>>> 2013-01-01 17:56:11.539 MPDCon[2484] here in willDisplayCell 
>>>> <NSBrowserCell: 0x80c955c4> 3 0, adding: /folk
>>>> 2013-01-01 17:56:11.786 MPDCon[2484] here in willDisplayCell 
>>>> <NSBrowserCell: 0x80c95144> 4 0, adding: /other
>>>> 2013-01-01 17:56:11.787 MPDCon[2484] File NSView.m: 1182. In -[NSView 
>>>> setFrame:] given negative width
>>>> 
>>>> The delegate methods, as I have them for now, can be seen below.
>>>> It's my first time dealing with NSBrowser, so I hope its just something 
>>>> easy that I have overlooked while
>>>> trying to figure out what's (not) going on.
>>>> I also wonder about the last line of the output from NSView, what this 
>>>> could be about?
>>>> I'm on OpenBSD i386.
>>>> 
>>>> cheers,
>>>> Sebastian
>>>> 
>>>> 
>>>> - (NSInteger)browser:(NSBrowser *)sender 
>>>> numberOfRowsInColumn:(NSInteger)column
>>>> {
>>>> NSLog(@"here in numberOfRowsInColumn %d", column);
>>>>   NSInteger count, blubb=0;
>>>>   NSEnumerator *dirEnum;
>>>>   NSString *dir;
>>>>   NSMutableArray *tmpArray = [NSMutableArray array];
>>>> 
>>>>   dirEnum = [directories objectEnumerator];
>>>> 
>>>>   while ((dir = [dirEnum nextObject]) != nil && blubb < 5)
>>>>     {
>>>>       if ([[dir pathComponents] count] >= column)
>>>>         {
>>>>           dir = [[dir pathComponents] objectAtIndex:column];
>>>>           if (![tmpArray containsObject:dir])
>>>>             {
>>>>               [tmpArray addObject:dir];
>>>>               blubb++;
>>>>             }
>>>>         }
>>>>     }
>>>>   count = [tmpArray count];
>>>>   [tmpArray release];
>>>> NSLog(@"returning count: %d", count);
>>>>   return count;
>>>> }
>>>> 
>>>> - (void)browser:(NSBrowser *)sender willDisplayCell:(id)cell 
>>>> atRow:(NSInteger)row column:(NSInteger)column
>>>> {
>>>>   NSEnumerator *dirEnum;
>>>>   NSString *dir;
>>>>   NSMutableArray *tmpArray = [NSMutableArray array];
>>>> 
>>>>   dirEnum = [directories objectEnumerator];
>>>> 
>>>>   while ((dir = [dirEnum nextObject]) != nil)
>>>>     {
>>>>       if ([[dir pathComponents] count] >= column)
>>>>         {
>>>>           dir = [[dir pathComponents] objectAtIndex:column];
>>>>           if (![tmpArray containsObject:dir])
>>>>             {
>>>>               //[tmpArray addObject:dir];
>>>>               [tmpArray addObject:[NSString stringWithFormat:@"/%@", dir]];
>>>>             }
>>>>         }
>>>>     }
>>>> NSLog(@"here in willDisplayCell %@ %d %d, adding: %@", cell, row, column, 
>>>> [tmpArray objectAtIndex:row]);
>>>>   [cell setStringValue:[tmpArray objectAtIndex:row]];
>>>>   [cell setTitle:[tmpArray objectAtIndex:row]];
>>>>   [cell setLoaded: YES];
>>>> }
>>> 
>>> 
>>> _______________________________________________
>>> Discuss-gnustep mailing list
>>> Discuss-gnustep@gnu.org
>>> https://lists.gnu.org/mailman/listinfo/discuss-gnustep
>> 
>> 
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Discuss-gnustep mailing list
>> Discuss-gnustep@gnu.org
>> https://lists.gnu.org/mailman/listinfo/discuss-gnustep
> 
> 
> 
> 
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]