1 /*
2  * Copyright (c) Tony Bybell 1999-2016
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  */
9 
10 #include <config.h>
11 #include "globals.h"
12 #include <gtk/gtk.h>
13 #include "gtk12compat.h"
14 #include "symbol.h"
15 #include "debug.h"
16 
17 
update_endcap_times_for_partial_vcd(void)18 void update_endcap_times_for_partial_vcd(void)
19 {
20 char str[40];
21 
22 if(GLOBALS->from_entry)
23 	{
24 	reformat_time(str, GLOBALS->tims.first + GLOBALS->global_time_offset, GLOBALS->time_dimension);
25 	gtk_entry_set_text(GTK_ENTRY(GLOBALS->from_entry),str);
26 	gtkwavetcl_setvar(WAVE_TCLCB_FROM_ENTRY_UPDATED, str, WAVE_TCLCB_FROM_ENTRY_UPDATED_FLAGS);
27 	}
28 
29 if(GLOBALS->to_entry)
30 	{
31 	reformat_time(str, GLOBALS->tims.last + GLOBALS->global_time_offset, GLOBALS->time_dimension);
32 	gtk_entry_set_text(GTK_ENTRY(GLOBALS->to_entry),str);
33 	gtkwavetcl_setvar(WAVE_TCLCB_TO_ENTRY_UPDATED, str, WAVE_TCLCB_TO_ENTRY_UPDATED_FLAGS);
34 	}
35 }
36 
time_update(void)37 void time_update(void)
38 {
39 DEBUG(printf("Timeentry Configure Event\n"));
40 
41 calczoom(GLOBALS->tims.zoom);
42 fix_wavehadj();
43 gtk_signal_emit_by_name (GTK_OBJECT (GTK_ADJUSTMENT(GLOBALS->wave_hslider)), "changed");
44 gtk_signal_emit_by_name (GTK_OBJECT (GTK_ADJUSTMENT(GLOBALS->wave_hslider)), "value_changed");
45 }
46 
47 
from_entry_callback(GtkWidget * widget,GtkWidget * entry)48 void from_entry_callback(GtkWidget *widget, GtkWidget *entry)
49 {
50 (void)widget;
51 
52 G_CONST_RETURN gchar *entry_text;
53 TimeType newlo;
54 char fromstr[40];
55 
56 entry_text=gtk_entry_get_text(GTK_ENTRY(entry));
57 entry_text = entry_text ? entry_text : "";
58 DEBUG(printf("From Entry contents: %s\n",entry_text));
59 
60 newlo=unformat_time(entry_text, GLOBALS->time_dimension);
61 newlo -= GLOBALS->global_time_offset;
62 
63 if(newlo<GLOBALS->min_time)
64 	{
65 	newlo=GLOBALS->min_time;
66 	}
67 
68 if(newlo<(GLOBALS->tims.last))
69 	{
70 	GLOBALS->tims.first=newlo;
71 	if(GLOBALS->tims.start<GLOBALS->tims.first) GLOBALS->tims.timecache=GLOBALS->tims.start=GLOBALS->tims.first;
72 
73 	reformat_time(fromstr, GLOBALS->tims.first + GLOBALS->global_time_offset, GLOBALS->time_dimension);
74 	gtk_entry_set_text(GTK_ENTRY(entry),fromstr);
75 	time_update();
76 	gtkwavetcl_setvar(WAVE_TCLCB_FROM_ENTRY_UPDATED, fromstr, WAVE_TCLCB_FROM_ENTRY_UPDATED_FLAGS);
77 	return;
78 	}
79 	else
80 	{
81 	reformat_time(fromstr, GLOBALS->tims.first + GLOBALS->global_time_offset, GLOBALS->time_dimension);
82 	gtk_entry_set_text(GTK_ENTRY(entry),fromstr);
83 	gtkwavetcl_setvar(WAVE_TCLCB_FROM_ENTRY_UPDATED, fromstr, WAVE_TCLCB_FROM_ENTRY_UPDATED_FLAGS);
84 	return;
85 	}
86 }
87 
to_entry_callback(GtkWidget * widget,GtkWidget * entry)88 void to_entry_callback(GtkWidget *widget, GtkWidget *entry)
89 {
90 (void)widget;
91 
92 G_CONST_RETURN gchar *entry_text;
93 TimeType newhi;
94 char tostr[40];
95 
96 entry_text=gtk_entry_get_text(GTK_ENTRY(entry));
97 entry_text = entry_text ? entry_text : "";
98 DEBUG(printf("To Entry contents: %s\n",entry_text));
99 
100 newhi=unformat_time(entry_text, GLOBALS->time_dimension);
101 newhi -= GLOBALS->global_time_offset;
102 
103 if((newhi>GLOBALS->max_time) || (!strlen(entry_text))) /* null string makes max time */
104 	{
105 	newhi=GLOBALS->max_time;
106 	}
107 
108 if(newhi>(GLOBALS->tims.first))
109 	{
110 	GLOBALS->tims.last=newhi;
111 	reformat_time(tostr, GLOBALS->tims.last + GLOBALS->global_time_offset, GLOBALS->time_dimension);
112 	gtk_entry_set_text(GTK_ENTRY(entry),tostr);
113 	time_update();
114 	gtkwavetcl_setvar(WAVE_TCLCB_TO_ENTRY_UPDATED, tostr, WAVE_TCLCB_TO_ENTRY_UPDATED_FLAGS);
115 	return;
116 	}
117 	else
118 	{
119 	reformat_time(tostr, GLOBALS->tims.last + GLOBALS->global_time_offset, GLOBALS->time_dimension);
120 	gtk_entry_set_text(GTK_ENTRY(entry),tostr);
121 	gtkwavetcl_setvar(WAVE_TCLCB_TO_ENTRY_UPDATED, tostr, WAVE_TCLCB_TO_ENTRY_UPDATED_FLAGS);
122 	return;
123 	}
124 }
125 
126 /* Create an entry box */
127 GtkWidget *
create_entry_box(void)128 create_entry_box(void)
129 {
130 GtkWidget *label, *label2;
131 GtkWidget *box, *box2;
132 GtkWidget *mainbox;
133 
134 char fromstr[32], tostr[32];
135 
136 GtkTooltips *tooltips;
137 
138 tooltips=gtk_tooltips_new_2();
139 gtk_tooltips_set_delay_2(tooltips,1500);
140 
141 label=gtk_label_new("From:");
142 GLOBALS->from_entry=gtk_entry_new_with_max_length(40);
143 
144 reformat_time(fromstr, GLOBALS->min_time + GLOBALS->global_time_offset, GLOBALS->time_dimension);
145 
146 gtk_entry_set_text(GTK_ENTRY(GLOBALS->from_entry),fromstr);
147 gtk_signal_connect (GTK_OBJECT (GLOBALS->from_entry), "activate",GTK_SIGNAL_FUNC (from_entry_callback), GLOBALS->from_entry);
148 box=gtk_hbox_new(FALSE, 0);
149 gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
150 gtk_widget_show(label);
151 gtk_box_pack_start(GTK_BOX(box), GLOBALS->from_entry, TRUE, TRUE, 0);
152 gtk_widget_set_usize(GTK_WIDGET(GLOBALS->from_entry), 90, 22);
153 gtk_tooltips_set_tip_2(tooltips, GLOBALS->from_entry, "Scroll Lower Bound (use MX for named marker X)", NULL);
154 gtk_widget_show(GLOBALS->from_entry);
155 
156 
157 label2=gtk_label_new("To:");
158 GLOBALS->to_entry=gtk_entry_new_with_max_length(40);
159 
160 reformat_time(tostr, GLOBALS->max_time + GLOBALS->global_time_offset, GLOBALS->time_dimension);
161 
162 gtk_entry_set_text(GTK_ENTRY(GLOBALS->to_entry),tostr);
163 gtk_signal_connect (GTK_OBJECT (GLOBALS->to_entry), "activate",GTK_SIGNAL_FUNC (to_entry_callback), GLOBALS->to_entry);
164 box2=gtk_hbox_new(FALSE, 0);
165 gtk_box_pack_start(GTK_BOX(box2), label2, TRUE, TRUE, 0);
166 gtk_widget_show(label2);
167 gtk_box_pack_start(GTK_BOX(box2), GLOBALS->to_entry, TRUE, TRUE, 0);
168 gtk_widget_set_usize(GTK_WIDGET(GLOBALS->to_entry), 90, 22);
169 gtk_tooltips_set_tip_2(tooltips, GLOBALS->to_entry, "Scroll Upper Bound (use MX for named marker X)", NULL);
170 gtk_widget_show(GLOBALS->to_entry);
171 
172 if(!GLOBALS->use_toolbutton_interface)
173 	{
174 	mainbox=gtk_vbox_new(FALSE, 0);
175 	}
176 	else
177 	{
178 	mainbox=gtk_hbox_new(FALSE, 0);
179 	}
180 
181 gtk_box_pack_start(GTK_BOX(mainbox), box, TRUE, FALSE, 1);
182 gtk_widget_show(box);
183 gtk_box_pack_start(GTK_BOX(mainbox), box2, TRUE, FALSE, 1);
184 gtk_widget_show(box2);
185 
186 return(mainbox);
187 }
188 
189