1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
4 * Copyright (C) Naba Kumar <naba@gnome.org>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 #ifndef _ANJUTA_UTILS_H_
21 #define _ANJUTA_UTILS_H_
25 #include <sys/types.h>
30 gboolean
anjuta_util_copy_file (const gchar
* src
,
34 gboolean
anjuta_util_diff (const gchar
* uri
,
37 void anjuta_util_color_from_string (const gchar
* val
, guint16
* r
,
38 guint16
* g
, guint16
* b
);
40 gchar
* anjuta_util_string_from_color (guint16 r
, guint16 g
, guint16 b
);
42 GtkWidget
* anjuta_util_button_new_with_stock_image (const gchar
* text
,
43 const gchar
* stock_id
);
45 GtkWidget
* anjuta_util_dialog_add_button (GtkDialog
*dialog
,
47 const gchar
* stock_id
,
50 void anjuta_util_dialog_error (GtkWindow
*parent
,
51 const gchar
* mesg
, ...);
52 void anjuta_util_dialog_warning (GtkWindow
*parent
,
53 const gchar
* mesg
, ...);
54 void anjuta_util_dialog_info (GtkWindow
*parent
,
55 const gchar
* mesg
, ...);
56 void anjuta_util_dialog_error_system (GtkWindow
* parent
, gint errnum
,
57 const gchar
* mesg
, ... );
58 gboolean
anjuta_util_dialog_boolean_question (GtkWindow
*parent
,
59 const gchar
* mesg
, ...);
60 gboolean
anjuta_util_dialog_input (GtkWindow
*parent
,
62 const gchar
*default_value
,
65 gboolean
anjuta_util_install_files (const gchar
* const names
);
66 gboolean
anjuta_util_package_is_installed (const gchar
* lib
, gboolean show
);
67 gboolean
anjuta_util_prog_is_installed (const gchar
* prog
, gboolean show
);
69 gchar
* anjuta_util_get_a_tmp_file (void);
71 gchar
* anjuta_util_convert_to_utf8 (const gchar
*str
);
73 GList
* anjuta_util_parse_args_from_string (const gchar
* string
);
75 /***********************************************/
76 /* String integer mapping utility functions */
77 /***********************************************/
78 typedef struct _AnjutaUtilStringMap
82 } AnjutaUtilStringMap
;
84 int anjuta_util_type_from_string (AnjutaUtilStringMap
*map
,
86 const char *anjuta_util_string_from_type (AnjutaUtilStringMap
*map
,
88 GList
* anjuta_util_glist_from_map (AnjutaUtilStringMap
*map
);
90 /***********************************************/
91 /* Functions that operate on list of strings. */
92 /***********************************************/
93 void anjuta_util_glist_strings_free (GList
* list
);
94 void anjuta_util_glist_strings_prefix (GList
* list
, const gchar
*prefix
);
95 void anjuta_util_glist_strings_sufix (GList
* list
, const gchar
*sufix
);
96 GList
* anjuta_util_glist_strings_sort (GList
* list
);
97 gchar
* anjuta_util_glist_strings_join (GList
* list
, gchar
*delimiter
);
99 /**********************************************************/
100 /* Both the returned glist and the data should be g_freed */
101 /* Call g_list_strings_free() to do that. */
102 /**********************************************************/
103 GList
* anjuta_util_glist_from_string (const gchar
* id
);
104 GList
* anjuta_util_glist_strings_dup (GList
* list
);
106 /* Dedup a list of paths - duplicates are removed from the tail.
107 ** Useful for deduping Recent Files and Recent Projects */
108 GList
* anjuta_util_glist_path_dedup (GList
*list
);
110 /* Adds the given string in the list, if it does not already exist. */
111 /* The added string will come at the top of the list */
112 /* The list will be then truncated to (length) items only */
113 GList
* anjuta_util_update_string_list (GList
*p_list
,
117 gboolean
anjuta_util_create_dir (const gchar
* d
);
118 gchar
* anjuta_util_user_shell (void);
119 gchar
** anjuta_util_user_terminal (void);
120 pid_t
anjuta_util_execute_shell (const gchar
*dir
, const gchar
*command
);
121 pid_t
anjuta_util_execute_terminal_shell (const gchar
*dir
, const gchar
*command
);
123 gchar
* anjuta_util_escape_quotes (const gchar
* str
);
125 gchar
* anjuta_util_get_real_path (const gchar
*path
);
126 gchar
* anjuta_util_get_current_dir (void);
127 GFile
* anjuta_util_file_new_for_commandline_arg(const gchar
*arg
);
129 gchar
* anjuta_util_uri_get_dirname (const gchar
*uri
);
130 gchar
* anjuta_util_replace_home_dir_with_tilde (const gchar
*uri
);
131 gchar
* anjuta_util_shell_expand (const gchar
*string
);
132 gchar
* anjuta_util_str_middle_truncate (const gchar
*string
,
133 guint truncate_length
);
135 gboolean
anjuta_util_is_project_file (const gchar
*filename
);
136 gboolean
anjuta_util_is_template_file (const gchar
*filename
);
137 gchar
* anjuta_util_get_file_mime_type (GFile
*file
);
138 gchar
* anjuta_util_get_local_path_from_uri (const gchar
*uri
);
140 void anjuta_util_help_display (GtkWidget
*parent
,
144 /* XDG BaseDir specifcation functions */
145 GFile
* anjuta_util_get_user_data_file (const gchar
* path
, ...);
146 GFile
* anjuta_util_get_user_cache_file (const gchar
* path
, ...);
147 GFile
* anjuta_util_get_user_config_file (const gchar
* path
, ...);
148 gchar
* anjuta_util_get_user_data_file_path (const gchar
* path
, ...);
149 gchar
* anjuta_util_get_user_cache_file_path (const gchar
* path
, ...);
150 gchar
* anjuta_util_get_user_config_file_path (const gchar
* path
, ...);
152 /* Get the correct e-mail address */
153 gchar
* anjuta_util_get_user_mail (void);
155 /* Function for converting GFile objects to string paths
156 * Free the returned list with anjuta_util_glist_strings_free. */
157 GList
* anjuta_util_convert_gfile_list_to_path_list (GList
*list
);
158 GList
* anjuta_util_convert_gfile_list_to_relative_path_list (GList
*list
,
159 const gchar
*parent
);
161 /* the returned GPtrArray should be freed with g_ptr_array_unref ().
162 * The GPtrArray is created with g_free () destroy function as parameter.
164 GPtrArray
* anjuta_util_convert_string_list_to_array(GList
*list
);
166 /* list all files in a given directory */
167 void anjuta_util_list_all_dir_children (GList
**children
, GFile
*dir
);
169 /* Helper functions to load a GtkBuilder file and get widgets */
170 GtkBuilder
*anjuta_util_builder_new (const gchar
*filename
,
172 gboolean
anjuta_util_builder_get_objects (GtkBuilder
*builder
,
173 const gchar
*first_widget
,...);
175 /* Helper for drag and drop */
176 GSList
* anjuta_utils_drop_get_files (GtkSelectionData
*selection_data
);
177 GPtrArray
* anjuta_util_clone_string_gptrarray (const GPtrArray
* source
);
179 /* Temporarily copied here */
183 * @class_name: Name of the object
184 * @prefix: Prefix used for object methods
185 * @parent_type: The parent type of the object
187 * Create a new GObject for Anjuta. You can use ANJUTA_TYPE_ADD_INTERFACE
188 * to add interfaces to it and should close it using ANJUTA_TYPE_END
190 #define ANJUTA_TYPE_BEGIN(class_name, prefix, parent_type) \
192 prefix##_get_type (void) \
194 static GType type = 0; \
197 static const GTypeInfo type_info = \
199 sizeof (class_name##Class), \
200 (GBaseInitFunc) NULL, \
201 (GBaseFinalizeFunc) NULL, \
202 (GClassInitFunc) prefix##_class_init, \
203 (GClassFinalizeFunc) NULL, \
205 sizeof (class_name), \
206 0, /* n_preallocs */ \
207 (GInstanceInitFunc) prefix##_instance_init, \
210 type = g_type_register_static (parent_type, \
217 * Ends a declaration that began with ANJUTA_TYPE_BEGIN
219 #define ANJUTA_TYPE_END \
225 * ANJUTA_TYPE_ADD_INTERFACE:
226 * @prefix: Prefix for the interface methods
227 * @interface_type: Type of the interface to implement
229 * Adds an interface to a declaration started with ANJUTA_TYPE_BEGIN
231 #define ANJUTA_TYPE_ADD_INTERFACE(prefix,interface_type) \
233 GInterfaceInfo iface_info = { \
234 (GInterfaceInitFunc)prefix##_iface_init, \
238 g_type_add_interface_static (type, \
244 * ANJUTA_TYPE_BOILERPLATE:
245 * @class_name: Name of the object
246 * @prefix: Prefix for the class methods
247 * @parent_type: Parent type for object
249 * Simpliefied version of ANJUTA_TYPE_BEGIN that just creates an Object
250 * without interfaces and doesn't need ANJUTA_TYPE_END
252 #define ANJUTA_TYPE_BOILERPLATE(class_name, prefix, parent_type) \
253 ANJUTA_TYPE_BEGIN(class_name, prefix, parent_type); \