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);