1 /* denemo.h
2  *
3  * the important data structures and defines for denemo, a gtk+ frontend to
4  * Lilypond, the GNU music typesetter
5  *
6  * (c) 1999-2005 Matthew Hiller, Adam Tee
7  *
8  */
9 
10 #ifndef DENEMO_DATASTRUCTURES
11 #define DENEMO_DATASTRUCTURES
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 /* Include the internationalization stuff.  */
17 #include <libintl.h>
18 #include <locale.h>
19 
20 #define _(String) gettext (String)
21 #ifndef gettext_noop
22 # define gettext_noop(String) String
23 #endif
24 #ifndef N_
25 # define N_(String) gettext_noop (String)
26 #endif
27 
28 
29 #include <glib.h>
30 #include <gmodule.h>
31 
32 #include "denemo_api.h"
33 
34 
35 
36 /*Set maximum number of undos*/
37 #define MAX_UNDOS 50
38 
39 /* This unit of memory size is used all over the place.  */
40 #define SEVENGINTS (sizeof (gint) * 7)
41 
42 #define CHECKING_MASK (GDK_CONTROL_MASK)
43 #define ADDING_MASK (GDK_MOD1_MASK)  //Alt
44 #define CHORD_MASK (1<<25)  //Not used by GDK
45 
46 #define DENEMO_INITIAL_MEASURE_WIDTH 160
47 #define DENEMO_INITIAL_STAFF_HEIGHT 100
48 
49 #define DENEMO_FILE_SUFFIX  ".denemo"
50 #define XML_EXT             ".xml"
51 #define SCM_EXT             ".scm"
52 #define LILYPOND_EXT        ".ly"
53 #define KEYMAP_EXT          ".commands"
54 
55 #define SCHEME_INIT         "denemo.scm"
56 #define DENEMO_NO_COMMAND (-1) /* command id for no command */
57 
58 #define g_malloc(a) g_malloc0(a) /* for extensible debuggable code */
59 #if 0
60   //use this to detect bad access to G_OBJECT
61 #define g_object_set_data(a,b,c) (G_IS_OBJECT((a))? g_object_set_data((a),(b),(c)):((gpointer)fprintf(stderr,"Bad G_OBJECT at %s line %d\n",__FILE__, __LINE__), NULL))
62 #define g_object_get_data(a,b) (G_IS_OBJECT(a)? g_object_get_data((a),(b)):((gpointer)fprintf(stderr,"Bad G_OBJECT at %s line %d\n",__FILE__, __LINE__), NULL))
63 #define gtk_action_get_name(a) (GTK_IS_ACTION(a)? gtk_action_get_name(a):((gpointer)fprintf(stderr,"Bad GTK_ACTION at %s line %d\n",__FILE__, __LINE__), NULL))
64 
65 
66 #endif
67 #if 0
68   // use these to test for bad frees.
69 #define g_list_free
70 #define g_error_free
71 #define gtk_tree_path_free
72 #define g_free(a) (a)
73 #define g_string_free(a, b) (((GString*)(a))->str)
74 #endif
75 
76 #if ((GTK_MAJOR_VERSION == 3) && (GTK_MINOR_VERSION >= 10))
77 #define FAKE_TOOLTIPS 1
78 #endif
79 
80 #ifdef FAKE_TOOLTIPS
81 #define FAKE_TOOLTIPS_MASK  GDK_ENTER_NOTIFY_MASK //GDK_POINTER_MOTION_MASK
82 #define FAKE_TOOLTIPS_SIGNAL "enter-notify-event" //"motion-notify-event"
83 #define fake_put_tooltip(w, t) {gchar *tip = g_strdup(t);g_object_set_data(G_OBJECT(w), "tooltip", (gpointer)tip);gtk_widget_add_events (w, FAKE_TOOLTIPS_MASK);g_signal_connect_after (w, "destroy", G_CALLBACK(free_tooltip), tip);g_signal_connect (w, FAKE_TOOLTIPS_SIGNAL, G_CALLBACK (show_tooltip), tip);}
84 #define denemo_widget_set_tooltip_text(w, t) {gtk_widget_add_events (w, FAKE_TOOLTIPS_MASK);g_signal_connect (w, FAKE_TOOLTIPS_SIGNAL, G_CALLBACK (show_tooltip), g_strdup(t));}
85 #define gtk_widget_set_tooltip_markup(w, t) fake_put_tooltip(w, t)
86 #define gtk_widget_set_tooltip_text(w, t) fake_put_tooltip(w, t)
87 #define gtk_widget_get_tooltip_text(w) g_object_get_data (G_OBJECT(w), "tooltip")
88 
89 #else
90 #define denemo_widget_set_tooltip_text gtk_widget_set_tooltip_text
91 #endif
92 
93 
94 #if GTK_MAJOR_VERSION == 2
95 #else
96 //we always have homogeneous FALSE which is the default
97 //so this is not needed. static GtkWidget *vbox_setter (gboolean homogeneous, gint spacing) {GtkWidget *ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, spacing);gtk_box_set_homogeneous (ret, homogeneous);return ret;}
98 #define gtk_vbox_new(homogeneous, spacing) gtk_box_new(GTK_ORIENTATION_VERTICAL, spacing)
99 #define gtk_hbox_new(homogeneous, spacing) gtk_box_new(GTK_ORIENTATION_HORIZONTAL, spacing)
100 #define gtk_hscale_new(adj) gtk_scale_new(GTK_ORIENTATION_HORIZONTAL, adj)
101 #define gtk_hscrollbar_new(adj) gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL, adj)
102 #define gtk_vscrollbar_new(adj) gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, adj)
103 #define g_strcasecmp g_ascii_strcasecmp
104 
105 
106 #define g_idle_add gdk_threads_add_idle
107 #define g_timeout_add gdk_threads_add_timeout
108 #define g_timeout_add_seconds gdk_threads_add_timeout_seconds
109 
110 #define g_timeout_add_full gdk_threads_add_timeout_full
111 #define g_idle_add_full gdk_threads_add_idle_full
112 #endif
113 
114 #define DEFAULT_KEYMAP "Default"
115 #define DEFAULT_KEYBINDINGS "Default.shortcuts"
116 #ifdef G_OS_WIN32
117 #define PREFS_FILE "denemorcV2"
118 #else
119 #define PREFS_FILE "denemorc"
120 #endif
121 
122 #ifdef G_OS_WIN32
123 #define mswin g_print
124 #else
125 #define mswin
126 #endif
127 
128 extern const gchar *None;
129 extern const gchar *Jack;
130 extern const gchar *Portaudio;
131 extern const gchar *Fluidsynth;
132 
133 #define COMMANDS_DIR   "actions"
134 #define UI_DIR         "ui"
135 #define SOUNDFONTS_DIR "soundfonts"
136 #define PIXMAPS_DIR    "pixmaps"
137 #define FONTS_DIR      "fonts"
138 #define LOCALE_DIR     "po"
139 #define LILYPOND_INCLUDE_DIR "actions/lilypond"
140 
141 typedef enum{
142   DENEMO_DIR_COMMANDS,
143   DENEMO_DIR_UI,
144   DENEMO_DIR_SOUNDFONTS,
145   DENEMO_DIR_PIXMAPS,
146   DENEMO_DIR_FONTS,
147   DENEMO_DIR_LOCALE,
148   DENEMO_DIR_BIN,
149   DENEMO_DIR_LILYPOND_INCLUDE
150 } DenemoDirectory;
151 
152 #ifdef __cplusplus
153 }
154 #endif
155 
156 #endif  /* #ifndef DENEMO_DATASTRUCTURES  */
157 
158