Mercurial > dwindows
comparison mac/dw.m @ 676:9861d264925d
MLE was missing the scrollbar. Fixes for getting and setting the position.
However it still currently does not work until the window is shown.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 01 Mar 2011 04:37:11 +0000 |
parents | 48f8efba898f |
children | 99002595f549 |
comparison
equal
deleted
inserted
replaced
675:48f8efba898f | 676:9861d264925d |
---|---|
2564 * id: An ID to be used with dw_window_from_id() or 0L. | 2564 * id: An ID to be used with dw_window_from_id() or 0L. |
2565 */ | 2565 */ |
2566 HWND API dw_mle_new(ULONG id) | 2566 HWND API dw_mle_new(ULONG id) |
2567 { | 2567 { |
2568 DWMLE *mle = [[DWMLE alloc] init]; | 2568 DWMLE *mle = [[DWMLE alloc] init]; |
2569 return mle; | 2569 NSScrollView *scrollview = [[NSScrollView alloc] init]; |
2570 | |
2571 //[mle setScrollview:scrollview]; | |
2572 [scrollview setBorderType:NSBezelBorder]; | |
2573 [scrollview setHasVerticalScroller:YES]; | |
2574 [scrollview setAutohidesScrollers:YES]; | |
2575 [scrollview setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; | |
2576 [scrollview setDocumentView:mle]; | |
2577 [mle setAutoresizingMask:NSViewWidthSizable]; | |
2578 return scrollview; | |
2570 } | 2579 } |
2571 | 2580 |
2572 /* | 2581 /* |
2573 * Adds text to an MLE box and returns the current point. | 2582 * Adds text to an MLE box and returns the current point. |
2574 * Parameters: | 2583 * Parameters: |
2576 * buffer: Text buffer to be imported. | 2585 * buffer: Text buffer to be imported. |
2577 * startpoint: Point to start entering text. | 2586 * startpoint: Point to start entering text. |
2578 */ | 2587 */ |
2579 unsigned int API dw_mle_import(HWND handle, char *buffer, int startpoint) | 2588 unsigned int API dw_mle_import(HWND handle, char *buffer, int startpoint) |
2580 { | 2589 { |
2581 DWMLE *mle = handle; | 2590 NSScrollView *sv = handle; |
2591 DWMLE *mle = [sv documentView]; | |
2582 NSTextStorage *ts = [mle textStorage]; | 2592 NSTextStorage *ts = [mle textStorage]; |
2583 NSString *nstr = [NSString stringWithUTF8String:buffer]; | 2593 NSString *nstr = [NSString stringWithUTF8String:buffer]; |
2584 NSMutableString *ms = [ts mutableString]; | 2594 NSMutableString *ms = [ts mutableString]; |
2585 [ms insertString:nstr atIndex:(startpoint+1)]; | 2595 [ms insertString:nstr atIndex:(startpoint+1)]; |
2586 return (unsigned int)strlen(buffer) + startpoint; | 2596 return (unsigned int)strlen(buffer) + startpoint; |
2594 * startpoint: Point to start grabbing text. | 2604 * startpoint: Point to start grabbing text. |
2595 * length: Amount of text to be grabbed. | 2605 * length: Amount of text to be grabbed. |
2596 */ | 2606 */ |
2597 void API dw_mle_export(HWND handle, char *buffer, int startpoint, int length) | 2607 void API dw_mle_export(HWND handle, char *buffer, int startpoint, int length) |
2598 { | 2608 { |
2599 DWMLE *mle = handle; | 2609 NSScrollView *sv = handle; |
2610 DWMLE *mle = [sv documentView]; | |
2600 NSTextStorage *ts = [mle textStorage]; | 2611 NSTextStorage *ts = [mle textStorage]; |
2601 NSMutableString *ms = [ts mutableString]; | 2612 NSMutableString *ms = [ts mutableString]; |
2602 strncpy(buffer, [ms UTF8String], length); | 2613 strncpy(buffer, [ms UTF8String], length); |
2603 } | 2614 } |
2604 | 2615 |
2609 * bytes: A pointer to a variable to return the total bytes. | 2620 * bytes: A pointer to a variable to return the total bytes. |
2610 * lines: A pointer to a variable to return the number of lines. | 2621 * lines: A pointer to a variable to return the number of lines. |
2611 */ | 2622 */ |
2612 void API dw_mle_get_size(HWND handle, unsigned long *bytes, unsigned long *lines) | 2623 void API dw_mle_get_size(HWND handle, unsigned long *bytes, unsigned long *lines) |
2613 { | 2624 { |
2614 DWMLE *mle = handle; | 2625 NSScrollView *sv = handle; |
2626 DWMLE *mle = [sv documentView]; | |
2615 NSTextStorage *ts = [mle textStorage]; | 2627 NSTextStorage *ts = [mle textStorage]; |
2616 NSMutableString *ms = [ts mutableString]; | 2628 NSMutableString *ms = [ts mutableString]; |
2617 | 2629 |
2618 *bytes = [ms length]; | 2630 *bytes = [ms length]; |
2619 *lines = 0; /* TODO: Line count */ | 2631 *lines = 0; /* TODO: Line count */ |
2626 * startpoint: Point to start deleting text. | 2638 * startpoint: Point to start deleting text. |
2627 * length: Amount of text to be deleted. | 2639 * length: Amount of text to be deleted. |
2628 */ | 2640 */ |
2629 void API dw_mle_delete(HWND handle, int startpoint, int length) | 2641 void API dw_mle_delete(HWND handle, int startpoint, int length) |
2630 { | 2642 { |
2631 DWMLE *mle = handle; | 2643 NSScrollView *sv = handle; |
2644 DWMLE *mle = [sv documentView]; | |
2632 NSTextStorage *ts = [mle textStorage]; | 2645 NSTextStorage *ts = [mle textStorage]; |
2633 NSMutableString *ms = [ts mutableString]; | 2646 NSMutableString *ms = [ts mutableString]; |
2634 [ms deleteCharactersInRange:NSMakeRange(startpoint+1, length)]; | 2647 [ms deleteCharactersInRange:NSMakeRange(startpoint+1, length)]; |
2635 } | 2648 } |
2636 | 2649 |
2639 * Parameters: | 2652 * Parameters: |
2640 * handle: Handle to the MLE to be cleared. | 2653 * handle: Handle to the MLE to be cleared. |
2641 */ | 2654 */ |
2642 void API dw_mle_clear(HWND handle) | 2655 void API dw_mle_clear(HWND handle) |
2643 { | 2656 { |
2644 DWMLE *mle = handle; | 2657 NSScrollView *sv = handle; |
2658 DWMLE *mle = [sv documentView]; | |
2645 NSTextStorage *ts = [mle textStorage]; | 2659 NSTextStorage *ts = [mle textStorage]; |
2646 NSMutableString *ms = [ts mutableString]; | 2660 NSMutableString *ms = [ts mutableString]; |
2647 NSUInteger length = [ms length]; | 2661 NSUInteger length = [ms length]; |
2648 [ms deleteCharactersInRange:NSMakeRange(0, length)]; | 2662 [ms deleteCharactersInRange:NSMakeRange(0, length)]; |
2649 } | 2663 } |
2665 * handle: Handle to the MLE. | 2679 * handle: Handle to the MLE. |
2666 * state: TRUE if it can be edited, FALSE for readonly. | 2680 * state: TRUE if it can be edited, FALSE for readonly. |
2667 */ | 2681 */ |
2668 void API dw_mle_set_editable(HWND handle, int state) | 2682 void API dw_mle_set_editable(HWND handle, int state) |
2669 { | 2683 { |
2670 DWMLE *mle = handle; | 2684 NSScrollView *sv = handle; |
2685 DWMLE *mle = [sv documentView]; | |
2671 if(state) | 2686 if(state) |
2672 { | 2687 { |
2673 [mle setEditable:YES]; | 2688 [mle setEditable:YES]; |
2674 } | 2689 } |
2675 else | 2690 else |
2684 * handle: Handle to the MLE. | 2699 * handle: Handle to the MLE. |
2685 * state: TRUE if it wraps, FALSE if it doesn't. | 2700 * state: TRUE if it wraps, FALSE if it doesn't. |
2686 */ | 2701 */ |
2687 void API dw_mle_set_word_wrap(HWND handle, int state) | 2702 void API dw_mle_set_word_wrap(HWND handle, int state) |
2688 { | 2703 { |
2689 DWMLE *mle = handle; | 2704 NSScrollView *sv = handle; |
2705 DWMLE *mle = [sv documentView]; | |
2690 if(state) | 2706 if(state) |
2691 { | 2707 { |
2692 [mle setHorizontallyResizable:NO]; | 2708 [mle setHorizontallyResizable:NO]; |
2693 } | 2709 } |
2694 else | 2710 else |
3822 * handle: The handle to the splitbar returned by dw_splitbar_new(). | 3838 * handle: The handle to the splitbar returned by dw_splitbar_new(). |
3823 */ | 3839 */ |
3824 void API dw_splitbar_set(HWND handle, float percent) | 3840 void API dw_splitbar_set(HWND handle, float percent) |
3825 { | 3841 { |
3826 DWSplitBar *split = handle; | 3842 DWSplitBar *split = handle; |
3827 [split setPosition:percent ofDividerAtIndex:0]; | 3843 NSRect rect = [split frame]; |
3844 float pos; | |
3845 if([split isVertical]) | |
3846 { | |
3847 pos = rect.size.height * (percent / 100.0); | |
3848 } | |
3849 else | |
3850 { | |
3851 pos = rect.size.width * (percent / 100.0); | |
3852 } | |
3853 [split setPosition:pos ofDividerAtIndex:0]; | |
3828 } | 3854 } |
3829 | 3855 |
3830 /* | 3856 /* |
3831 * Gets the position of a splitbar (pecentage). | 3857 * Gets the position of a splitbar (pecentage). |
3832 * Parameters: | 3858 * Parameters: |
3833 * handle: The handle to the splitbar returned by dw_splitbar_new(). | 3859 * handle: The handle to the splitbar returned by dw_splitbar_new(). |
3834 */ | 3860 */ |
3835 float API dw_splitbar_get(HWND handle) | 3861 float API dw_splitbar_get(HWND handle) |
3836 { | 3862 { |
3837 NSLog(@"dw_splitbar_get() unimplemented\n"); | 3863 DWSplitBar *split = handle; |
3838 return 0.0; | 3864 NSRect rect1 = [split frame]; |
3865 NSArray *subviews = [split subviews]; | |
3866 NSView *view = [subviews objectAtIndex:0]; | |
3867 NSRect rect2 = [view frame]; | |
3868 float pos, total, retval = 0.0; | |
3869 if([split isVertical]) | |
3870 { | |
3871 total = rect1.size.height; | |
3872 pos = rect2.size.height; | |
3873 } | |
3874 else | |
3875 { | |
3876 total = rect1.size.width; | |
3877 pos = rect2.size.width; | |
3878 } | |
3879 if(total > 0) | |
3880 { | |
3881 retval = pos / total; | |
3882 } | |
3883 return retval; | |
3839 } | 3884 } |
3840 | 3885 |
3841 /* | 3886 /* |
3842 * Create a bitmap object to be packed. | 3887 * Create a bitmap object to be packed. |
3843 * Parameters: | 3888 * Parameters: |
5317 * data: User data to be passed to the handler function. | 5362 * data: User data to be passed to the handler function. |
5318 */ | 5363 */ |
5319 void dw_window_set_data(HWND window, char *dataname, void *data) | 5364 void dw_window_set_data(HWND window, char *dataname, void *data) |
5320 { | 5365 { |
5321 id object = window; | 5366 id object = window; |
5367 if([object isMemberOfClass:[NSScrollView class]]) | |
5368 { | |
5369 NSScrollView *sv = window; | |
5370 object = [sv documentView]; | |
5371 } | |
5322 WindowData *blah = (WindowData *)[object userdata]; | 5372 WindowData *blah = (WindowData *)[object userdata]; |
5323 | 5373 |
5324 if(!blah) | 5374 if(!blah) |
5325 { | 5375 { |
5326 if(!dataname) | 5376 if(!dataname) |
5349 * data: User data to be passed to the handler function. | 5399 * data: User data to be passed to the handler function. |
5350 */ | 5400 */ |
5351 void *dw_window_get_data(HWND window, char *dataname) | 5401 void *dw_window_get_data(HWND window, char *dataname) |
5352 { | 5402 { |
5353 id object = window; | 5403 id object = window; |
5404 if([object isMemberOfClass:[NSScrollView class]]) | |
5405 { | |
5406 NSScrollView *sv = window; | |
5407 object = [sv documentView]; | |
5408 } | |
5354 WindowData *blah = (WindowData *)[object userdata]; | 5409 WindowData *blah = (WindowData *)[object userdata]; |
5355 | 5410 |
5356 if(blah && blah->root && dataname) | 5411 if(blah && blah->root && dataname) |
5357 { | 5412 { |
5358 UserData *ud = _find_userdata(&(blah->root), dataname); | 5413 UserData *ud = _find_userdata(&(blah->root), dataname); |