~ubuntu-branches/ubuntu/saucy/darktable/saucy

« back to all changes in this revision

Viewing changes to tools/create_preferences.sh.in

  • Committer: Bazaar Package Importer
  • Author(s): David Bremner
  • Date: 2011-07-12 09:36:46 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20110712093646-yp9dbxan44dmw15h
Tags: 0.9-1
* New upstream release.
* Remove all patches now upstream; only patch for
  -Wno-error=unused-but-set-variable remains.
* Bump Standards-Version to 3.9.2 (no changes)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
 
 
3
 
 
4
tabs='gui core'
 
5
 
 
6
 
 
7
schemafile=$1
 
8
num=1
 
9
callbackfile=callback.c
 
10
resetfile=reset.c
 
11
 
 
12
cat > $resetfile << EOF
 
13
/** generated file, do not edit! */
 
14
#ifndef DT_PREFERENCES_H
 
15
#define DT_PREFERENCES_H
 
16
 
 
17
#include <gtk/gtk.h>
 
18
#include "control/conf.h"
 
19
 
 
20
EOF
 
21
 
 
22
 
 
23
# header of the callback function
 
24
cat > $callbackfile << EOF
 
25
static void
 
26
preferences_callback (GtkWidget *widget, gpointer user_data)
 
27
{
 
28
  long int num = (long int)user_data;
 
29
  switch(num)
 
30
  {
 
31
EOF
 
32
 
 
33
# arg num setval
 
34
reset_callback() {
 
35
  cat >> $resetfile << EOF
 
36
static gboolean
 
37
reset_widget_$1 (GtkWidget *label, GdkEventButton *event, GtkWidget *widget)
 
38
{
 
39
  if(event->type == GDK_2BUTTON_PRESS)
 
40
  {
 
41
    $2
 
42
    return TRUE;
 
43
  }
 
44
  return FALSE;
 
45
}
 
46
 
 
47
EOF
 
48
}
 
49
 
 
50
# do this for each key
 
51
# arg short long num
 
52
key_begin() {
 
53
  cat >> $initfile << EOF
 
54
  label = gtk_label_new(_("$1"));
 
55
  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
 
56
  labelev = gtk_event_box_new();
 
57
  gtk_widget_add_events(labelev, GDK_BUTTON_PRESS_MASK);
 
58
  gtk_container_add(GTK_CONTAINER(labelev), label);
 
59
EOF
 
60
}
 
61
 
 
62
# arg short long num def
 
63
key_end() {
 
64
  cat >> $initfile << EOF
 
65
  snprintf(tooltip, 1024, _("double click to reset to \`%s'"), $4);
 
66
  gtk_object_set(GTK_OBJECT(labelev),  "tooltip-text", tooltip, (char *)NULL);
 
67
  gtk_event_box_set_visible_window(GTK_EVENT_BOX(labelev), FALSE);
 
68
EOF
 
69
  if [ -n "$2" ]; then
 
70
    printf "  gtk_object_set(GTK_OBJECT(widget), \"tooltip-text\", _(\"%s\"), (char *)NULL);\n" "$2" >> $initfile
 
71
  fi
 
72
  cat >> $initfile << EOF
 
73
  gtk_box_pack_start(GTK_BOX(vbox1), labelev, FALSE, FALSE, 0);
 
74
  gtk_box_pack_start(GTK_BOX(vbox2), widget, FALSE, FALSE, 0);
 
75
  g_signal_connect(G_OBJECT(labelev), "button-press-event", G_CALLBACK(reset_widget_$num), (gpointer)widget);
 
76
 
 
77
EOF
 
78
}
 
79
 
 
80
# split up in different tabs!
 
81
for tab in $tabs
 
82
do
 
83
 
 
84
initfile=init_$tab.c
 
85
 
 
86
# header of the init tab function
 
87
cat > $initfile << EOF
 
88
static void
 
89
init_tab_$tab (GtkWidget *tab)
 
90
{
 
91
  GtkWidget *widget, *label, *labelev;
 
92
  GtkWidget *hbox = gtk_hbox_new(5, FALSE);
 
93
  GtkWidget *vbox1 = gtk_vbox_new(5, TRUE);
 
94
  GtkWidget *vbox2 = gtk_vbox_new(5, TRUE);
 
95
  char tooltip[1024];
 
96
  gtk_box_pack_start(GTK_BOX(hbox), vbox1, FALSE, FALSE, 0);
 
97
  gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0);
 
98
  GtkWidget *alignment = gtk_alignment_new(0.5, 0.0, 1.0, 0.0);
 
99
  gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 20, 20, 20, 20);
 
100
  gtk_container_add(GTK_CONTAINER(alignment), hbox);
 
101
  gtk_notebook_append_page(GTK_NOTEBOOK(tab), alignment, gtk_label_new(_("$tab options")));
 
102
 
 
103
EOF
 
104
 
 
105
# get key, type, default, short, long for each setting:
 
106
# grep for all relevant tags
 
107
#  remove spaces
 
108
#  remove new lines, insert only the one we want
 
109
#  remove the ugly xml tag stuff and the gconf schema prefix.
 
110
grep -E '<key>|<type>|<default>|<short>|<long>|<schema>|</schema>' $schemafile |
 
111
      sed -e 's/^[ \t]*//;s/[ \t]*$//' |
 
112
      tr -d '\n' | sed -e 's/<\/schema>/#/g'  | tr '#' '\n' | grep -E "tab:$tab" |
 
113
      sed -e 's/<\/[^>]*>/#/g' -e 's/<[^>]*>//g' -e 's/\/schemas\/apps\/darktable\///g' > dreggn
 
114
 
 
115
# now read one line at the time and output code:
 
116
# label (short), input (type, default), tooltip (long) with callback (key)
 
117
 
 
118
echo "    // tab: $tab" >> $callbackfile
 
119
 
 
120
for line0 in $(cat dreggn | tr ' ' '&')
 
121
do
 
122
  line=$(printf "%s" "$line0" | tr '&' ' ')
 
123
  key=$(printf "%s" "$line" | cut -d# -f1)
 
124
  type=$(printf "%s" "$line" | cut -d# -f2)
 
125
  def=$(printf "%s" "$line" | cut -d# -f3)
 
126
  qdef=\"$def\"
 
127
  short=$(printf "%s" "$line" | cut -d# -f4)
 
128
  long=$(printf "%s" "$line" | cut -d# -f5)
 
129
  # if we compile w/o opencl, we don't want this option in preferences
 
130
  if [ "@HAVE_OPENCL@" = "0" ]; then
 
131
    if [ "$key" = "opencl" ]; then
 
132
      continue
 
133
    fi
 
134
  fi
 
135
  key_begin "$short" "$long" $num
 
136
  if [ "$type" = "string" ]; then
 
137
    def=$qdef
 
138
    val="gtk_entry_get_text(GTK_ENTRY(widget))"
 
139
    setval="gtk_entry_set_text(GTK_ENTRY(widget), $def);"
 
140
    cat >> $initfile << EOF
 
141
  widget = gtk_entry_new();
 
142
  gtk_entry_set_text(GTK_ENTRY(widget), dt_conf_get_string("$key"));
 
143
  g_signal_connect(G_OBJECT(widget), "activate", G_CALLBACK(preferences_callback), (gpointer)(long int)$num);
 
144
EOF
 
145
  elif [ "$type" = "int" ]; then
 
146
    val="gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget))"
 
147
    setval="gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), $def);"
 
148
    cat >> $initfile << EOF
 
149
  widget = gtk_spin_button_new_with_range(0, 1000000000, 1);
 
150
  gtk_spin_button_set_digits(GTK_SPIN_BUTTON(widget), 0);
 
151
  gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), dt_conf_get_int("$key"));
 
152
  g_signal_connect(G_OBJECT(widget), "value-changed", G_CALLBACK(preferences_callback), (gpointer)(long int)$num);
 
153
EOF
 
154
  elif [ "$type" = "bool" ]; then
 
155
    if [ "$def" = "true" ]; then def="TRUE"; else def="FALSE"; fi
 
156
    qdef=\"$def\"
 
157
    val="gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))"
 
158
    setval="gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), $def);"
 
159
    cat >> $initfile << EOF
 
160
  widget = gtk_check_button_new();
 
161
  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), dt_conf_get_bool("$key"));
 
162
  g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(preferences_callback), (gpointer)(long int)$num);
 
163
EOF
 
164
  elif [ "$type" = "float" ]; then
 
165
    val="gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget))"
 
166
    setval="gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), $def);"
 
167
    cat >> $initfile << EOF
 
168
  widget = gtk_spin_button_new_with_range(-1000000000.0, 1000000000.0, 0.001);
 
169
  gtk_spin_button_set_digits(GTK_SPIN_BUTTON(widget), 5);
 
170
  gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), dt_conf_get_float("$key"));
 
171
  g_signal_connect(G_OBJECT(widget), "value-changed", G_CALLBACK(preferences_callback), (gpointer)(long int)$num);
 
172
EOF
 
173
  fi
 
174
  key_end "$short" "$long" $num $qdef
 
175
 
 
176
  reset_callback $num "$setval"
 
177
 
 
178
  cat >> $callbackfile << EOF
 
179
    case $num:
 
180
      dt_conf_set_$type("$key", $val);
 
181
      break;
 
182
EOF
 
183
  num=$((num+1))
 
184
done
 
185
 
 
186
cat >> $initfile << EOF
 
187
}
 
188
 
 
189
EOF
 
190
 
 
191
done # end for all tabs
 
192
 
 
193
cat >> $callbackfile << EOF
 
194
    default:
 
195
      break;
 
196
  }
 
197
}
 
198
 
 
199
EOF
 
200
 
 
201
cat $resetfile
 
202
cat $callbackfile
 
203
rm -f $callbackfile
 
204
rm -f $resetfile
 
205
 
 
206
for tab in $tabs;
 
207
do
 
208
  cat init_$tab.c
 
209
  rm -f init_$tab.c
 
210
done # end for all tabs
 
211
 
 
212
echo "#endif"
 
213
 
 
214
rm -f dreggn
 
215