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)