Mercurial > dwindows
comparison gtk/dw.c @ 40:88c9c7410c22
Lots of fixes and new functions on all platforms.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 22 Oct 2001 22:32:58 +0000 |
parents | 3aa9ef0b3996 |
children | af0a78aa0d45 |
comparison
equal
deleted
inserted
replaced
39:3aa9ef0b3996 | 40:88c9c7410c22 |
---|---|
14 #include <stdio.h> | 14 #include <stdio.h> |
15 #include <unistd.h> | 15 #include <unistd.h> |
16 #include <errno.h> | 16 #include <errno.h> |
17 #include <sys/time.h> | 17 #include <sys/time.h> |
18 #include "config.h" | 18 #include "config.h" |
19 #include <gdk/gdkkeysyms.h> | |
19 #ifdef USE_IMLIB | 20 #ifdef USE_IMLIB |
20 #include <gdk_imlib.h> | 21 #include <gdk_imlib.h> |
21 #endif | 22 #endif |
22 | 23 |
23 /* These are used for resource management */ | 24 /* These are used for resource management */ |
418 g_list_remove(tmp, rowdata); | 419 g_list_remove(tmp, rowdata); |
419 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp); | 420 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp); |
420 } | 421 } |
421 } | 422 } |
422 | 423 |
424 gint _default_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) | |
425 { | |
426 GtkWidget *next = (GtkWidget *)data; | |
427 | |
428 if(next) | |
429 { | |
430 if(event->keyval == GDK_Return) | |
431 { | |
432 if(GTK_IS_BUTTON(next)) | |
433 gtk_signal_emit_by_name(GTK_OBJECT(next), "clicked"); | |
434 else | |
435 gtk_widget_grab_focus(next); | |
436 } | |
437 } | |
438 return TRUE; | |
439 } | |
440 | |
423 GdkPixmap *_find_pixmap(GdkBitmap **bitmap, long id, HWND handle) | 441 GdkPixmap *_find_pixmap(GdkBitmap **bitmap, long id, HWND handle) |
424 { | 442 { |
425 char *data = NULL; | 443 char *data = NULL; |
426 int z; | 444 int z; |
427 | 445 |
627 { | 645 { |
628 gtk_widget_destroy(GTK_WIDGET(param)); | 646 gtk_widget_destroy(GTK_WIDGET(param)); |
629 } | 647 } |
630 | 648 |
631 | 649 |
650 void _dw_ok_func(HWND window, void *data) | |
651 { | |
652 DWDialog *dwwait = (DWDialog *)data; | |
653 | |
654 if(!dwwait) | |
655 return; | |
656 | |
657 dw_window_destroy((HWND)dwwait->data); | |
658 dw_dialog_dismiss((DWDialog *)data, (void *)0); | |
659 } | |
660 | |
632 /* | 661 /* |
633 * Displays a Message Box with given text and title.. | 662 * Displays a Message Box with given text and title.. |
634 * Parameters: | 663 * Parameters: |
635 * title: The title of the message box. | 664 * title: The title of the message box. |
636 * format: printf style format string. | 665 * format: printf style format string. |
637 * ...: Additional variables for use in the format. | 666 * ...: Additional variables for use in the format. |
638 */ | 667 */ |
639 int dw_messagebox(char *title, char *format, ...) | 668 int dw_messagebox(char *title, char *format, ...) |
640 { | 669 { |
670 HWND entrywindow, mainbox, okbutton, buttonbox, stext; | |
671 ULONG flStyle = DW_FCF_TITLEBAR | DW_FCF_SHELLPOSITION | DW_FCF_DLGBORDER; | |
672 DWDialog *dwwait; | |
641 va_list args; | 673 va_list args; |
642 char outbuf[256]; | 674 char outbuf[256]; |
643 GtkWidget *dialog, | 675 |
644 *button, | |
645 *label; | |
646 int _locked_by_me = FALSE; | |
647 | |
648 DW_MUTEX_LOCK; | |
649 va_start(args, format); | 676 va_start(args, format); |
650 vsprintf(outbuf, format, args); | 677 vsprintf(outbuf, format, args); |
651 va_end(args); | 678 va_end(args); |
652 | 679 |
653 dialog = gtk_dialog_new(); | 680 entrywindow = dw_window_new(HWND_DESKTOP, title, flStyle); |
654 | 681 mainbox = dw_box_new(BOXVERT, 10); |
655 gtk_window_set_title(GTK_WINDOW(dialog), title); | 682 dw_box_pack_start(entrywindow, mainbox, 0, 0, TRUE, TRUE, 0); |
656 | 683 |
657 button = gtk_button_new_with_label("Ok"); | 684 /* Archive Name */ |
658 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); | 685 stext = dw_text_new(outbuf, 0); |
659 gtk_widget_show(button); | 686 dw_window_set_style(stext, DW_DT_WORDBREAK, DW_DT_WORDBREAK); |
660 | 687 |
661 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(_delete2), (gpointer)dialog); | 688 dw_box_pack_start(mainbox, stext, 205, 50, TRUE, TRUE, 2); |
662 gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", GTK_SIGNAL_FUNC(_delete), (gpointer)dialog); | 689 |
663 | 690 /* Buttons */ |
664 label = gtk_label_new(outbuf); | 691 buttonbox = dw_box_new(BOXHORZ, 10); |
665 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 20); | 692 |
666 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 0); | 693 dw_box_pack_start(mainbox, buttonbox, 0, 0, TRUE, FALSE, 0); |
667 gtk_widget_show(label); | 694 |
668 | 695 okbutton = dw_button_new("Ok", 1001L); |
669 gtk_widget_show(dialog); | 696 |
670 | 697 dw_box_pack_start(buttonbox, okbutton, 50, 30, TRUE, FALSE, 2); |
671 DW_MUTEX_UNLOCK; | 698 |
699 dwwait = dw_dialog_new((void *)entrywindow); | |
700 | |
701 dw_signal_connect(okbutton, "clicked", DW_SIGNAL_FUNC(_dw_ok_func), (void *)dwwait); | |
702 | |
703 dw_window_set_usize(entrywindow, 220, 110); | |
704 | |
705 dw_window_show(entrywindow); | |
706 | |
707 dw_dialog_wait(dwwait); | |
672 | 708 |
673 return strlen(outbuf); | 709 return strlen(outbuf); |
674 } | 710 } |
675 | 711 |
676 void _dw_yes_func(HWND window, void *data) | 712 void _dw_yes_func(HWND window, void *data) |
715 | 751 |
716 dw_box_pack_start(entrywindow, mainbox, 0, 0, TRUE, TRUE, 0); | 752 dw_box_pack_start(entrywindow, mainbox, 0, 0, TRUE, TRUE, 0); |
717 | 753 |
718 /* Archive Name */ | 754 /* Archive Name */ |
719 stext = dw_text_new(text, 0); | 755 stext = dw_text_new(text, 0); |
720 | 756 dw_window_set_style(stext, DW_DT_WORDBREAK, DW_DT_WORDBREAK); |
721 dw_box_pack_start(mainbox, stext, 130, 20, TRUE, TRUE, 2); | 757 |
758 dw_box_pack_start(mainbox, stext, 205, 50, TRUE, TRUE, 2); | |
722 | 759 |
723 /* Buttons */ | 760 /* Buttons */ |
724 buttonbox = dw_box_new(BOXHORZ, 10); | 761 buttonbox = dw_box_new(BOXHORZ, 10); |
725 | 762 |
726 dw_box_pack_start(mainbox, buttonbox, 0, 0, TRUE, TRUE, 0); | 763 dw_box_pack_start(mainbox, buttonbox, 0, 0, TRUE, FALSE, 0); |
727 | 764 |
728 yesbutton = dw_button_new("Yes", 1001L); | 765 yesbutton = dw_button_new("Yes", 1001L); |
729 | 766 |
730 dw_box_pack_start(buttonbox, yesbutton, 130, 30, TRUE, TRUE, 2); | 767 dw_box_pack_start(buttonbox, yesbutton, 50, 30, TRUE, FALSE, 2); |
731 | 768 |
732 nobutton = dw_button_new("No", 1002L); | 769 nobutton = dw_button_new("No", 1002L); |
733 | 770 |
734 dw_box_pack_start(buttonbox, nobutton, 130, 30, TRUE, TRUE, 2); | 771 dw_box_pack_start(buttonbox, nobutton, 50, 30, TRUE, FALSE, 2); |
735 | 772 |
736 dwwait = dw_dialog_new((void *)entrywindow); | 773 dwwait = dw_dialog_new((void *)entrywindow); |
737 | 774 |
738 dw_signal_connect(yesbutton, "clicked", DW_SIGNAL_FUNC(_dw_yes_func), (void *)dwwait); | 775 dw_signal_connect(yesbutton, "clicked", DW_SIGNAL_FUNC(_dw_yes_func), (void *)dwwait); |
739 dw_signal_connect(nobutton, "clicked", DW_SIGNAL_FUNC(_dw_no_func), (void *)dwwait); | 776 dw_signal_connect(nobutton, "clicked", DW_SIGNAL_FUNC(_dw_no_func), (void *)dwwait); |
740 | 777 |
741 dw_window_set_usize(entrywindow, 340, 150); | 778 dw_window_set_usize(entrywindow, 220, 110); |
742 | 779 |
743 dw_window_show(entrywindow); | 780 dw_window_show(entrywindow); |
744 | 781 |
745 return (int)dw_dialog_wait(dwwait);; | 782 return (int)dw_dialog_wait(dwwait);; |
746 } | 783 } |
759 | 796 |
760 DW_MUTEX_LOCK; | 797 DW_MUTEX_LOCK; |
761 XIconifyWindow(GDK_WINDOW_XDISPLAY(GTK_WIDGET(handle)->window), | 798 XIconifyWindow(GDK_WINDOW_XDISPLAY(GTK_WIDGET(handle)->window), |
762 GDK_WINDOW_XWINDOW(GTK_WIDGET(handle)->window), | 799 GDK_WINDOW_XWINDOW(GTK_WIDGET(handle)->window), |
763 DefaultScreen (GDK_DISPLAY ())); | 800 DefaultScreen (GDK_DISPLAY ())); |
801 DW_MUTEX_UNLOCK; | |
802 return 0; | |
803 } | |
804 | |
805 /* | |
806 * Makes the window topmost. | |
807 * Parameters: | |
808 * handle: The window handle to make topmost. | |
809 */ | |
810 int dw_window_raise(HWND handle) | |
811 { | |
812 int _locked_by_me = FALSE; | |
813 | |
814 if(!handle) | |
815 return 0; | |
816 | |
817 DW_MUTEX_LOCK; | |
818 gdk_window_raise(GTK_WIDGET(handle)->window); | |
819 DW_MUTEX_UNLOCK; | |
820 return 0; | |
821 } | |
822 | |
823 /* | |
824 * Makes the window bottommost. | |
825 * Parameters: | |
826 * handle: The window handle to make bottommost. | |
827 */ | |
828 int dw_window_lower(HWND handle) | |
829 { | |
830 int _locked_by_me = FALSE; | |
831 | |
832 if(!handle) | |
833 return 0; | |
834 | |
835 DW_MUTEX_LOCK; | |
836 gdk_window_lower(GTK_WIDGET(handle)->window); | |
764 DW_MUTEX_UNLOCK; | 837 DW_MUTEX_UNLOCK; |
765 return 0; | 838 return 0; |
766 } | 839 } |
767 | 840 |
768 /* | 841 /* |
2109 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2182 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); |
2110 | 2183 |
2111 if(tmp && GTK_IS_TEXT(tmp)) | 2184 if(tmp && GTK_IS_TEXT(tmp)) |
2112 { | 2185 { |
2113 if(bytes) | 2186 if(bytes) |
2114 *bytes = gtk_text_get_length(GTK_TEXT(tmp)); | 2187 *bytes = gtk_text_get_length(GTK_TEXT(tmp)) + 1; |
2115 if(lines) | 2188 if(lines) |
2116 { | 2189 { |
2117 gchar *text; | 2190 gchar *text; |
2118 | 2191 |
2119 *lines = 0; | 2192 *lines = 0; |
2282 { | 2355 { |
2283 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2356 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); |
2284 | 2357 |
2285 if(tmp && GTK_IS_TEXT(tmp)) | 2358 if(tmp && GTK_IS_TEXT(tmp)) |
2286 { | 2359 { |
2360 unsigned long chars; | |
2361 float pos, ratio; | |
2362 | |
2363 dw_mle_query(handle, &chars, NULL); | |
2364 | |
2365 if(chars) | |
2366 { | |
2367 ratio = (float)point/(float)chars; | |
2368 | |
2369 pos = (ratio * (float)(GTK_TEXT(tmp)->vadj->upper - GTK_TEXT(tmp)->vadj->lower)) + GTK_TEXT(tmp)->vadj->lower; | |
2370 | |
2371 gtk_adjustment_set_value(GTK_TEXT(tmp)->vadj, pos); | |
2372 } | |
2287 gtk_text_set_point(GTK_TEXT(tmp), point); | 2373 gtk_text_set_point(GTK_TEXT(tmp), point); |
2288 } | 2374 } |
2289 } | 2375 } |
2290 DW_MUTEX_UNLOCK; | 2376 DW_MUTEX_UNLOCK; |
2291 } | 2377 } |
4600 gtk_object_set_data(GTK_OBJECT(window), "defaultitem", (gpointer)defaultitem); | 4686 gtk_object_set_data(GTK_OBJECT(window), "defaultitem", (gpointer)defaultitem); |
4601 DW_MUTEX_UNLOCK; | 4687 DW_MUTEX_UNLOCK; |
4602 } | 4688 } |
4603 | 4689 |
4604 /* | 4690 /* |
4691 * Sets window to click the default dialog item when an ENTER is pressed. | |
4692 * Parameters: | |
4693 * window: Window (widget) to look for the ENTER press. | |
4694 * next: Window (widget) to move to next (or click) | |
4695 */ | |
4696 void dw_window_click_default(HWND window, HWND next) | |
4697 { | |
4698 int _locked_by_me = FALSE; | |
4699 | |
4700 if(!window) | |
4701 return; | |
4702 | |
4703 DW_MUTEX_LOCK; | |
4704 gtk_signal_connect(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(_default_key_press_event), next); | |
4705 DW_MUTEX_UNLOCK; | |
4706 } | |
4707 | |
4708 /* | |
4605 * Returns some information about the current operating environment. | 4709 * Returns some information about the current operating environment. |
4606 * Parameters: | 4710 * Parameters: |
4607 * env: Pointer to a DWEnv struct. | 4711 * env: Pointer to a DWEnv struct. |
4608 */ | 4712 */ |
4609 void dw_environment_query(DWEnv *env) | 4713 void dw_environment_query(DWEnv *env) |