comparison lwlib/xlwgauge.c @ 5118:e0db3c197671 ben-lisp-object

merge up to latest default branch, doesn't compile yet
author Ben Wing <ben@xemacs.org>
date Sat, 26 Dec 2009 21:18:49 -0600
parents 5460287a3327
children 8b63e21b0436
comparison
equal deleted inserted replaced
5117:3742ea8250b5 5118:e0db3c197671
51 #include <ctype.h> 51 #include <ctype.h>
52 #include <X11/IntrinsicP.h> 52 #include <X11/IntrinsicP.h>
53 #include <X11/Xatom.h> 53 #include <X11/Xatom.h>
54 #include <X11/StringDefs.h> 54 #include <X11/StringDefs.h>
55 #include ATHENA_XawInit_h_ 55 #include ATHENA_XawInit_h_
56 #include "xt-wrappers.h"
56 #include "xlwgaugeP.h" 57 #include "xlwgaugeP.h"
57 #include "../src/xmu.h"
58 #ifdef HAVE_XMU
59 #include <X11/Xmu/Atoms.h> 58 #include <X11/Xmu/Atoms.h>
60 #include <X11/Xmu/Drawing.h> 59 #include <X11/Xmu/Drawing.h>
60 #include <X11/Xmu/Misc.h>
61 #include <X11/Xmu/StdSel.h> 61 #include <X11/Xmu/StdSel.h>
62 #endif
63 62
64 63
65 /**************************************************************** 64 /****************************************************************
66 * 65 *
67 * Gauge resources 66 * Gauge resources
75 <Btn2Up>: paste()\n\ 74 <Btn2Up>: paste()\n\
76 <Key>F2: paste(CLIPBOARD)" ; 75 <Key>F2: paste(CLIPBOARD)" ;
77 76
78 77
79 78
80 #define offset(field) XtOffsetOf(GaugeRec, field) 79 #define offset(field) XtOffsetOf(GaugeRec, gauge.field)
80 #define res(name,_class,intrepr,type,member,extrepr,value) \
81 Xt_RESOURCE (name, _class, intrepr, type, offset(member), extrepr, value)
81 static XtResource resources[] = { 82 static XtResource resources[] = {
82 {XtNvalue, XtCValue, XtRInt, sizeof(int), 83 res (XtNvalue, XtCValue, XtRInt, int, value, XtRImmediate, 0),
83 offset(gauge.value), XtRImmediate, (XtPointer)0}, 84 res (XtNminValue, XtCMinValue, XtRInt, int, v0, XtRImmediate, 0),
84 {XtNminValue, XtCMinValue, XtRInt, sizeof(int), 85 res (XtNmaxValue, XtCMaxValue, XtRInt, int, v1, XtRImmediate, 100),
85 offset(gauge.v0), XtRImmediate, (XtPointer)0}, 86 res (XtNntics, XtCNTics, XtRInt, int, ntics, XtRImmediate, 0),
86 {XtNmaxValue, XtCMaxValue, XtRInt, sizeof(int), 87 res (XtNnlabels, XtCNLabels, XtRInt, int, nlabels, XtRImmediate, 0),
87 offset(gauge.v1), XtRImmediate, (XtPointer)100}, 88 res (XtNlabels, XtCLabels, XtRStringArray, String *, labels,
88 {XtNntics, XtCNTics, XtRInt, sizeof(int), 89 XtRStringArray, NULL),
89 offset(gauge.ntics), XtRImmediate, (XtPointer) 0}, 90 res (XtNautoScaleUp, XtCAutoScaleUp, XtRBoolean, Boolean, autoScaleUp,
90 {XtNnlabels, XtCNLabels, XtRInt, sizeof(int), 91 XtRImmediate, FALSE),
91 offset(gauge.nlabels), XtRImmediate, (XtPointer) 0}, 92 res (XtNautoScaleDown, XtCAutoScaleDown, XtRBoolean, Boolean,
92 {XtNlabels, XtCLabels, XtRStringArray, sizeof(String *), 93 autoScaleDown, XtRImmediate, FALSE),
93 offset(gauge.labels), XtRStringArray, NULL}, 94 res (XtNorientation, XtCOrientation, XtROrientation, XtOrientation,
94 {XtNautoScaleUp, XtCAutoScaleUp, XtRBoolean, sizeof(Boolean), 95 orientation, XtRImmediate, XtorientHorizontal),
95 offset(gauge.autoScaleUp), XtRImmediate, FALSE}, 96 res (XtNupdate, XtCInterval, XtRInt, int, update, XtRImmediate, 0),
96 {XtNautoScaleDown, XtCAutoScaleDown, XtRBoolean, sizeof(Boolean), 97 res (XtNgetValue, XtCCallback, XtRCallback, XtPointer, getValue,
97 offset(gauge.autoScaleDown), XtRImmediate, FALSE}, 98 XtRImmediate, NULL),
98 {XtNorientation, XtCOrientation, XtROrientation, sizeof(XtOrientation),
99 offset(gauge.orientation), XtRImmediate, (XtPointer)XtorientHorizontal},
100 {XtNupdate, XtCInterval, XtRInt, sizeof(int),
101 offset(gauge.update), XtRImmediate, (XtPointer)0},
102 {XtNgetValue, XtCCallback, XtRCallback, sizeof(XtPointer),
103 offset(gauge.getValue), XtRImmediate, (XtPointer)NULL},
104 }; 99 };
105 #undef offset 100 #undef offset
106 101 #undef res
107 102
108 103
109 /* member functions */ 104 /* member functions */
110 105
111 static void GaugeClassInit (void); 106 static void GaugeClassInit (void);
130 static void AutoScale (GaugeWidget); 125 static void AutoScale (GaugeWidget);
131 static void EnableUpdate (GaugeWidget); 126 static void EnableUpdate (GaugeWidget);
132 static void DisableUpdate (GaugeWidget); 127 static void DisableUpdate (GaugeWidget);
133 128
134 static void GaugeGetValue (XtPointer, XtIntervalId *); 129 static void GaugeGetValue (XtPointer, XtIntervalId *);
135 static void GaugeMercury (Display *, Window, GC, GaugeWidget, Cardinal, Cardinal); 130 static void GaugeMercury (Display *, Window, GC, GaugeWidget, int, int);
136 131
137 static Boolean GaugeConvert (Widget, Atom *, Atom *, Atom *, 132 static Boolean GaugeConvert (Widget, Atom *, Atom *, Atom *,
138 XtPointer *, unsigned long *, int *); 133 XtPointer *, unsigned long *, int *);
139 static void GaugeLoseSel (Widget, Atom *); 134 static void GaugeLoseSel (Widget, Atom *);
140 static void GaugeDoneSel (Widget, Atom *, Atom *); 135 static void GaugeDoneSel (Widget, Atom *, Atom *);
144 static GC Get_GC (GaugeWidget, Pixel); 139 static GC Get_GC (GaugeWidget, Pixel);
145 140
146 141
147 static XtActionsRec actionsList[] = 142 static XtActionsRec actionsList[] =
148 { 143 {
149 {"select", GaugeSelect}, 144 { (String) "select", GaugeSelect },
150 {"paste", GaugePaste}, 145 { (String) "paste", GaugePaste },
151 } ; 146 } ;
152 147
153 148
154 149
155 /**************************************************************** 150 /****************************************************************
160 155
161 GaugeClassRec gaugeClassRec = { 156 GaugeClassRec gaugeClassRec = {
162 { 157 {
163 /* core_class fields */ 158 /* core_class fields */
164 /* superclass */ (WidgetClass) &labelClassRec, 159 /* superclass */ (WidgetClass) &labelClassRec,
165 /* class_name */ "Gauge", 160 /* class_name */ (String) "Gauge",
166 /* widget_size */ sizeof(GaugeRec), 161 /* widget_size */ sizeof(GaugeRec),
167 /* class_initialize */ GaugeClassInit, 162 /* class_initialize */ GaugeClassInit,
168 /* class_part_initialize */ NULL, 163 /* class_part_initialize */ NULL,
169 /* class_inited */ FALSE, 164 /* class_inited */ FALSE,
170 /* initialize */ GaugeInit, 165 /* initialize */ GaugeInit,
227 222
228 static void 223 static void
229 GaugeClassInit (void) 224 GaugeClassInit (void)
230 { 225 {
231 XawInitializeWidgetSet(); 226 XawInitializeWidgetSet();
232 #ifdef HAVE_XMU
233 XtAddConverter(XtRString, XtROrientation, XmuCvtStringToOrientation, 227 XtAddConverter(XtRString, XtROrientation, XmuCvtStringToOrientation,
234 NULL, 0) ; 228 NULL, 0) ;
235 #endif
236 } 229 }
237 230
238 231
239 232
240 /* ARGSUSED */ 233 /* ARGSUSED */
641 634
642 printf( "requesting selection %s:%s\n", 635 printf( "requesting selection %s:%s\n",
643 XGetAtomName(XtDisplay(w),*selection), 636 XGetAtomName(XtDisplay(w),*selection),
644 XGetAtomName(XtDisplay(w),*target)); 637 XGetAtomName(XtDisplay(w),*target));
645 638
646 #ifdef HAVE_XMU
647 if( *target == XA_TARGETS(XtDisplay(w)) ) 639 if( *target == XA_TARGETS(XtDisplay(w)) )
648 { 640 {
649 XPointer stdTargets; 641 XPointer stdTargets;
650 Atom *rval ; 642 Atom *rval ;
651 unsigned long stdLength ; 643 unsigned long stdLength ;
670 XtFree((char*) stdTargets) ; 662 XtFree((char*) stdTargets) ;
671 *format = 8*sizeof(Atom) ; /* TODO: needed? */ 663 *format = 8*sizeof(Atom) ; /* TODO: needed? */
672 return True ; 664 return True ;
673 } 665 }
674 666
675 else 667 else if( *target == XA_INTEGER )
676 #endif
677 if( *target == XA_INTEGER )
678 { 668 {
679 *type = XA_INTEGER ; 669 *type = XA_INTEGER ;
680 *length = 1 ; 670 *length = 1 ;
681 *value = (XtPointer) &gw->gauge.value ; 671 *value = (XtPointer) &gw->gauge.value ;
682 *format = 8*sizeof(int) ; 672 *format = 8*sizeof(int) ;
683 return True ; 673 return True ;
684 } 674 }
685 675
686 else if( *target == XA_STRING 676 else if( *target == XA_STRING || *target == XA_TEXT(XtDisplay(w)) )
687 #ifdef HAVE_XMU
688 ||
689 *target == XA_TEXT(XtDisplay(w))
690 #endif
691 )
692 { 677 {
693 *type = *target ; 678 *type = *target ;
694 *length = strlen(gw->gauge.selstr)*sizeof(char) ; 679 *length = strlen(gw->gauge.selstr)*sizeof(char) ;
695 *value = (XtPointer) gw->gauge.selstr ; 680 *value = (XtPointer) gw->gauge.selstr ;
696 *format = 8 ; 681 *format = 8 ;
698 } 683 }
699 684
700 else 685 else
701 { 686 {
702 /* anything else, we just give it to XmuConvertStandardSelection() */ 687 /* anything else, we just give it to XmuConvertStandardSelection() */
703 #ifdef HAVE_XMU
704 req = XtGetSelectionRequest(w, *selection, NULL) ; 688 req = XtGetSelectionRequest(w, *selection, NULL) ;
705 if( XmuConvertStandardSelection(w, req->time, selection, target, 689 if( XmuConvertStandardSelection(w, req->time, selection, target,
706 type, (XPointer *) value, length, format) ) 690 type, (XPointer *) value, length, format) )
707 return True ; 691 return True ;
708 else 692 else {
709 #endif
710 {
711 printf( 693 printf(
712 "Gauge: requestor is requesting unsupported selection %s:%s\n", 694 "Gauge: requestor is requesting unsupported selection %s:%s\n",
713 XGetAtomName(XtDisplay(w),*selection), 695 XGetAtomName(XtDisplay(w),*selection),
714 XGetAtomName(XtDisplay(w),*target)); 696 XGetAtomName(XtDisplay(w),*target));
715 return False ; 697 return False ;
716 } 698 }
717 } 699 }
718 } 700 }
783 if( *type == XA_INTEGER ) { 765 if( *type == XA_INTEGER ) {
784 iptr = (int *)value ; 766 iptr = (int *)value ;
785 XawGaugeSetValue(w, *iptr) ; 767 XawGaugeSetValue(w, *iptr) ;
786 } 768 }
787 769
788 else if( *type == XA_STRING 770 else if( *type == XA_STRING || *type == XA_TEXT(dpy) ) {
789 #ifdef HAVE_XMU
790 ||
791 *type == XA_TEXT(dpy)
792 #endif
793 )
794 {
795 cptr = (char *)value ; 771 cptr = (char *)value ;
796 XawGaugeSetValue(w, atoi(cptr)) ; 772 XawGaugeSetValue(w, atoi(cptr)) ;
797 } 773 }
798 774
799 /* failed, try string */ 775 /* failed, try string */
815 /* Change gauge value. Only undraw or draw what needs to be 791 /* Change gauge value. Only undraw or draw what needs to be
816 * changed. 792 * changed.
817 */ 793 */
818 794
819 void 795 void
820 XawGaugeSetValue (Widget w, 796 XawGaugeSetValue (Widget w, int value)
821 Cardinal value)
822 { 797 {
823 GaugeWidget gw = (GaugeWidget)w ; 798 GaugeWidget gw = (GaugeWidget)w ;
824 int oldvalue ; 799 int oldvalue ;
825 GC gc ; 800 GC gc ;
826 801
836 811
837 /* need to rescale? */ 812 /* need to rescale? */
838 if(( gw->gauge.autoScaleUp && (int) value > gw->gauge.v1) || 813 if(( gw->gauge.autoScaleUp && (int) value > gw->gauge.v1) ||
839 (gw->gauge.autoScaleDown && (int) value < gw->gauge.v1/3 )) 814 (gw->gauge.autoScaleDown && (int) value < gw->gauge.v1/3 ))
840 { 815 {
841 XtVaSetValues(w, XtNvalue, value, 0) ; 816 XtVaSetValues(w, XtNvalue, value, NULL) ;
842 return ; 817 return ;
843 } 818 }
844 819
845 oldvalue = gw->gauge.value ; 820 oldvalue = gw->gauge.value ;
846 gw->gauge.value = value ; 821 gw->gauge.value = value ;
848 gc = XtIsSensitive(w) ? gw->label.normal_GC : gw->label.gray_GC ; 823 gc = XtIsSensitive(w) ? gw->label.normal_GC : gw->label.gray_GC ;
849 GaugeMercury(XtDisplay(w), XtWindow(w), gc, gw, oldvalue,value) ; 824 GaugeMercury(XtDisplay(w), XtWindow(w), gc, gw, oldvalue,value) ;
850 } 825 }
851 826
852 827
853 Cardinal 828 int
854 XawGaugeGetValue (Widget w) 829 XawGaugeGetValue (Widget w)
855 { 830 {
856 GaugeWidget gw = (GaugeWidget)w ; 831 GaugeWidget gw = (GaugeWidget)w ;
857 return gw->gauge.value ; 832 return gw->gauge.value ;
858 } 833 }
871 static void 846 static void
872 GaugeMercury (Display *dpy, 847 GaugeMercury (Display *dpy,
873 Window win, 848 Window win,
874 GC gc, 849 GC gc,
875 GaugeWidget gw, 850 GaugeWidget gw,
876 Cardinal val0, 851 int val0,
877 Cardinal val1) 852 int val1)
878 { 853 {
879 int v0 = gw->gauge.v0 ; 854 int v0 = gw->gauge.v0 ;
880 int v1 = gw->gauge.v1 ; 855 int v1 = gw->gauge.v1 ;
881 int vd = v1 - v0 ; 856 int vd = v1 - v0 ;
882 Dimension len ; /* length (width or height) of gauge */ 857 Dimension len ; /* length (width or height) of gauge */
891 e0 = gw->gauge.margin0 ; /* left (top) end */ 866 e0 = gw->gauge.margin0 ; /* left (top) end */
892 e1 = len - gw->gauge.margin1 -1 ; /* right (bottom) end */ 867 e1 = len - gw->gauge.margin1 -1 ; /* right (bottom) end */
893 868
894 if( vd <= 0 ) vd = 1 ; 869 if( vd <= 0 ) vd = 1 ;
895 870
896 if( (int) val0 < v0 ) val0 = v0 ; 871 if( val0 < v0 ) val0 = v0 ;
897 else if( (int) val0 > v1 ) val0 = v1 ; 872 else if( val0 > v1 ) val0 = v1 ;
898 if( (int) val1 < v0 ) val1 = v0 ; 873 if( val1 < v0 ) val1 = v0 ;
899 else if( (int) val1 > v1 ) val1 = v1 ; 874 else if( val1 > v1 ) val1 = v1 ;
900 875
901 p0 = (val0-v0)*(e1-e0-1)/vd ; 876 p0 = (val0-v0)*(e1-e0-1)/vd ;
902 p1 = (val1-v0)*(e1-e0-1)/vd ; 877 p1 = (val1-v0)*(e1-e0-1)/vd ;
903 878
904 if( p1 == p0 ) 879 if( p1 == p0 )
1106 static void 1081 static void
1107 GaugeGetValue (XtPointer clientData, 1082 GaugeGetValue (XtPointer clientData,
1108 XtIntervalId *UNUSED (intervalId)) 1083 XtIntervalId *UNUSED (intervalId))
1109 { 1084 {
1110 GaugeWidget gw = (GaugeWidget)clientData ; 1085 GaugeWidget gw = (GaugeWidget)clientData ;
1111 Cardinal value ; 1086 int value ;
1112 1087
1113 if( gw->gauge.update > 0 ) 1088 if( gw->gauge.update > 0 )
1114 EnableUpdate(gw) ; 1089 EnableUpdate(gw) ;
1115 1090
1116 if( gw->gauge.getValue != NULL ) 1091 if( gw->gauge.getValue != NULL )