-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspinner.c
125 lines (104 loc) · 2.69 KB
/
spinner.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/* $Id: spinner.c,v 1.4 2003/03/02 13:41:42 d3august Exp $
*/
/* xtraceroute - graphically show traceroute information.
* Copyright (C) 1996-1998 Björn Augustsson
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "xt.h"
static gint tag = 0;
static gint spinner_state;
static GtkWidget *label;
static gint refcount = 0;
gint spinner_spin(gpointer data)
{
switch(spinner_state)
{
case 0:
gtk_label_set(GTK_LABEL(label)," O ");
spinner_state++;
break;
case 1:
gtk_label_set(GTK_LABEL(label),"O ");
spinner_state++;
break;
case 2:
gtk_label_set(GTK_LABEL(label)," O ");
spinner_state++;
break;
case 3:
gtk_label_set(GTK_LABEL(label)," O");
spinner_state = 0;
break;
}
return TRUE;
}
/**
* References the spinner.
* The reason is only used for debug purposes.
*/
void spinner_ref(const char* reason)
{
DPRINTF("DEBUG: spinner_ref:\t\"%s\"\tcount: %d -> %d\n",
reason, refcount, refcount+1);
refcount++;
if(tag == 0)
tag = gtk_timeout_add (100, spinner_spin, NULL);
}
/**
* Unreferences the spinner.
* The reason is only used for debug purposes.
*/
void spinner_unref(const char* reason)
{
DPRINTF("DEBUG: spinner_unref:\t\"%s\"\tcount: %d -> %d\n",
reason, refcount, refcount-1);
refcount--;
if(refcount > 0)
return;
if(refcount < 0)
printf("Aigh! spinner refcount negative! (%d)\n", refcount);
if(tag != 0)
{
gtk_timeout_remove(tag);
}
tag = 0;
spinner_state = 0;
if(label)
gtk_label_set(GTK_LABEL(label)," ");
}
GtkWidget* spinner_new(void)
{
GtkWidget *spin;
spin = gtk_button_new();
label = gtk_label_new(" ");
gtk_container_add(GTK_CONTAINER(spin), label);
/*
gtk_signal_connect(GTK_OBJECT(spin), "clicked",
(GtkSignalFunc)new_trace,
(gpointer)NULL);
*/
spinner_state = 0;
gtk_widget_show(label);
return spin;
}
/*
void spinner_reset(void)
{
refcount = 0;
if(tag != 0)
gtk_timeout_remove (tag);
}
*/