Statistics
| Revision:

root / src / editgroup.c @ 2303

History | View | Annotate | Download (17.4 kB)

1
/*
2
 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3
 * Copyright (C) 1999-2007 Hiroyuki Yamamoto
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
 */
19
20
#ifdef HAVE_CONFIG_H
21
#  include "config.h"
22
#endif
23
24
#include "defs.h"
25
26
#include <glib.h>
27
#include <glib/gi18n.h>
28
#include <gdk/gdkkeysyms.h>
29
#include <gtk/gtk.h>
30
31
#include "addressbook.h"
32
#include "addressitem.h"
33
#include "addrbook.h"
34
#include "addritem.h"
35
36
#include "mgutils.h"
37
38
#include "prefs_common.h"
39
40
#include "alertpanel.h"
41
#include "inputdialog.h"
42
#include "manage_window.h"
43
#include "gtkutils.h"
44
45
#define ADDRESSBOOK_GUESS_FOLDER_NAME        "NewFolder"
46
#define ADDRESSBOOK_GUESS_GROUP_NAME        "NewGroup"
47
48
#define EDITGROUP_WIDTH      600
49
#define EDITGROUP_HEIGHT     340
50
51
typedef enum {
52
        GROUP_COL_NAME    = 0,
53
        GROUP_COL_EMAIL   = 1,
54
        GROUP_COL_REMARKS = 2
55
} GroupEditEMailColumnPos;
56
57
#define GROUP_N_COLS          3
58
#define GROUP_COL_WIDTH_NAME  140
59
#define GROUP_COL_WIDTH_EMAIL 120
60
61
static struct _GroupEdit_dlg {
62
        GtkWidget *window;
63
        GtkWidget *hbbox;
64
        GtkWidget *ok_btn;
65
        GtkWidget *cancel_btn;
66
        GtkWidget *statusbar;
67
        gint status_cid;
68
69
        /* Basic data tab */
70
        GtkWidget *entry_name;
71
        GtkCList *clist_avail;
72
        GtkCList *clist_group;
73
74
        GHashTable *hashEMail;
75
        gint rowIndGroup;
76
        gint rowIndAvail;
77
78
} groupeditdlg;
79
80
81
static gchar *_edit_group_dfl_message_ = NULL;
82
83
static void edit_group_status_show( gchar *msg ) {
84
        if( groupeditdlg.statusbar != NULL ) {
85
                gtk_statusbar_pop( GTK_STATUSBAR(groupeditdlg.statusbar), groupeditdlg.status_cid );
86
                if( msg ) {
87
                        gtk_statusbar_push( GTK_STATUSBAR(groupeditdlg.statusbar), groupeditdlg.status_cid, msg );
88
                }
89
        }
90
}
91
92
static void edit_group_ok(GtkWidget *widget, gboolean *cancelled) {
93
        gchar *sName;
94
        gboolean errFlag = TRUE;
95
96
        sName = gtk_editable_get_chars( GTK_EDITABLE(groupeditdlg.entry_name), 0, -1 );
97
        if( sName ) {
98
                g_strstrip( sName );
99
                if( *sName != '\0' ) {
100
                        gtk_entry_set_text(GTK_ENTRY(groupeditdlg.entry_name), sName );
101
                        *cancelled = FALSE;
102
                        gtk_main_quit();
103
                        errFlag = FALSE;
104
                }
105
        }
106
        if( errFlag ) {
107
                edit_group_status_show( _( "A Group Name must be supplied." ) );
108
        }
109
        g_free( sName );
110
}
111
        
112
static void edit_group_cancel(GtkWidget *widget, gboolean *cancelled) {
113
        *cancelled = TRUE;
114
        gtk_main_quit();
115
}
116
117
static gint edit_group_delete_event(GtkWidget *widget, GdkEventAny *event, gboolean *cancelled) {
118
        *cancelled = TRUE;
119
        gtk_main_quit();
120
        return TRUE;
121
}
122
123
static gboolean edit_group_key_pressed(GtkWidget *widget, GdkEventKey *event, gboolean *cancelled) {
124
        if (event && event->keyval == GDK_Escape) {
125
                *cancelled = TRUE;
126
                gtk_main_quit();
127
        }
128
        return FALSE;
129
}
130
131
static gchar *edit_group_format_item_clist( ItemPerson *person, ItemEMail *email ) {
132
        gchar *str = NULL;
133
        gchar *aName = ADDRITEM_NAME(email);
134
        if( aName == NULL || *aName == '\0' ) return str;
135
        if( person ) {
136
                str = g_strdup_printf( "%s - %s", ADDRITEM_NAME(person), aName );
137
        }
138
        else {
139
                str = g_strdup( aName );
140
        }
141
        return str;
142
}
143
144
static gint edit_group_clist_add_email( GtkCList *clist, ItemEMail *email ) {
145
        ItemPerson *person = ( ItemPerson * ) ADDRITEM_PARENT(email);
146
        gchar *str = edit_group_format_item_clist( person, email );
147
        gchar *text[ GROUP_N_COLS ];
148
        gint row;
149
        if( str ) {
150
                text[ GROUP_COL_NAME ] = str;
151
        }
152
        else {
153
                text[ GROUP_COL_NAME ] = ADDRITEM_NAME(person);
154
        }
155
        text[ GROUP_COL_EMAIL   ] = email->address;
156
        text[ GROUP_COL_REMARKS ] = email->remarks;
157
        row = gtk_clist_append( clist, text );
158
        gtk_clist_set_row_data( clist, row, email );
159
        return row;
160
}
161
162
static void edit_group_load_clist( GtkCList *clist, GList *listEMail ) {
163
        GList *node = listEMail;
164
        gtk_clist_freeze( clist );
165
        while( node ) {
166
                ItemEMail *email = node->data;
167
                edit_group_clist_add_email( clist, email );
168
                node = g_list_next( node );
169
        }
170
        gtk_clist_thaw( clist );
171
}
172
173
static void edit_group_group_selected( GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) {
174
        groupeditdlg.rowIndGroup = row;
175
}
176
177
static void edit_group_avail_selected( GtkCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) {
178
        groupeditdlg.rowIndAvail = row;
179
}
180
181
static gint edit_group_move_email( GtkCList *clist_from, GtkCList *clist_to, gint row ) {
182
        ItemEMail *email = gtk_clist_get_row_data( clist_from, row );
183
        gint rrow = -1;
184
        if( email ) {
185
                gtk_clist_remove( clist_from, row );
186
                rrow = edit_group_clist_add_email( clist_to, email );
187
                gtk_clist_select_row( clist_to, rrow, 0 );
188
                gtkut_clist_set_focus_row( clist_to, rrow );
189
        }
190
        return rrow;
191
}
192
193
static void edit_group_to_group( GtkWidget *widget, gpointer data ) {
194
        groupeditdlg.rowIndGroup = edit_group_move_email( groupeditdlg.clist_avail,
195
                                        groupeditdlg.clist_group, groupeditdlg.rowIndAvail );
196
}
197
198
static void edit_group_to_avail( GtkWidget *widget, gpointer data ) {
199
        groupeditdlg.rowIndAvail = edit_group_move_email( groupeditdlg.clist_group,
200
                                        groupeditdlg.clist_avail, groupeditdlg.rowIndGroup );
201
}
202
203
static gboolean edit_group_list_group_button( GtkCList *clist, GdkEventButton *event, gpointer data ) {
204
        if( ! event ) return FALSE;
205
        if( event->button == 1 ) {
206
                if( event->type == GDK_2BUTTON_PRESS ) {
207
                        edit_group_to_avail( NULL, NULL );
208
                }
209
        }
210
        return FALSE;
211
}
212
213
static gboolean edit_group_list_avail_button( GtkCList *clist, GdkEventButton *event, gpointer data ) {
214
        if( ! event ) return FALSE;
215
        if( event->button == 1 ) {
216
                if( event->type == GDK_2BUTTON_PRESS ) {
217
                        edit_group_to_group( NULL, NULL );
218
                }
219
        }
220
        return FALSE;
221
}
222
223
static gint edit_group_list_compare_func( GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2 ) {
224
        GtkCell *cell1 = ((GtkCListRow *)ptr1)->cell;
225
        GtkCell *cell2 = ((GtkCListRow *)ptr2)->cell;
226
        gchar *name1 = NULL, *name2 = NULL;
227
        if( cell1 ) name1 = cell1->u.text;
228
        if( cell2 ) name2 = cell2->u.text;
229
        if( ! name1 ) return ( name2 != NULL );
230
        if( ! name2 ) return -1;
231
        return g_ascii_strcasecmp( name1, name2 );
232
}
233
234
static void addressbook_edit_group_create( gboolean *cancelled ) {
235
        GtkWidget *window;
236
        GtkWidget *vbox;
237
        GtkWidget *vbox1;
238
        GtkWidget *hbbox;
239
        GtkWidget *ok_btn;
240
        GtkWidget *cancel_btn;
241
        GtkWidget *hsbox;
242
        GtkWidget *statusbar;
243
244
        GtkWidget *hboxg;
245
        GtkWidget *table;
246
        GtkWidget *label;
247
        GtkWidget *entry_name;
248
        GtkWidget *hboxl;
249
        GtkWidget *vboxl;
250
        GtkWidget *hboxh;
251
        GtkWidget *vboxb;
252
        GtkWidget *vboxb1;
253
        GtkWidget *hboxb;
254
255
        GtkWidget *clist_swin;
256
        GtkWidget *clist_avail;
257
        GtkWidget *clist_group;
258
259
        GtkWidget *button_add;
260
        GtkWidget *button_remove;
261
        gint top;
262
263
        gchar *titles[ GROUP_N_COLS ];
264
        gint i;
265
266
        titles[ GROUP_COL_NAME    ] = _( "Name" );
267
        titles[ GROUP_COL_EMAIL   ] = _("E-Mail Address");
268
        titles[ GROUP_COL_REMARKS ] = _("Remarks");
269
270
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
271
        gtk_widget_set_size_request(window, EDITGROUP_WIDTH, EDITGROUP_HEIGHT);
272
        gtk_window_set_title(GTK_WINDOW(window), _("Edit Group Data"));
273
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ON_PARENT);
274
        gtk_window_set_modal(GTK_WINDOW(window), TRUE);        
275
        gtk_widget_realize(window);
276
        g_signal_connect(G_OBJECT(window), "delete_event",
277
                         G_CALLBACK(edit_group_delete_event),
278
                         cancelled);
279
        g_signal_connect(G_OBJECT(window), "key_press_event",
280
                         G_CALLBACK(edit_group_key_pressed),
281
                         cancelled);
282
283
        vbox = gtk_vbox_new( FALSE, 4 );
284
        gtk_container_add( GTK_CONTAINER( window ), vbox );
285
286
        vbox1 = gtk_vbox_new( FALSE, 10 );
287
        gtk_box_pack_start(GTK_BOX(vbox), vbox1, TRUE, TRUE, 0);
288
        gtk_container_set_border_width(GTK_CONTAINER(vbox1), 6);
289
290
        /* Group area */
291
        hboxg = gtk_hbox_new( FALSE, 0 );
292
        gtk_box_pack_start(GTK_BOX(vbox1), hboxg, FALSE, FALSE, 0);
293
294
        /* Data entry area */
295
        table = gtk_table_new( 1, 2, FALSE);
296
        gtk_box_pack_start(GTK_BOX(hboxg), table, TRUE, TRUE, 0);
297
        gtk_table_set_row_spacings(GTK_TABLE(table), 0);
298
        gtk_table_set_col_spacings(GTK_TABLE(table), 4);
299
300
        /* First row */
301
        top = 0;
302
        label = gtk_label_new(_("Group Name"));
303
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
304
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
305
306
        entry_name = gtk_entry_new();
307
        gtk_table_attach(GTK_TABLE(table), entry_name, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
308
309
        /* List area */
310
        hboxl = gtk_hbox_new( FALSE, 8 );
311
        gtk_box_pack_start(GTK_BOX(vbox1), hboxl, TRUE, TRUE, 0);
312
313
        /* Available list */
314
        vboxl = gtk_vbox_new( FALSE, 4 );
315
        gtk_box_pack_start(GTK_BOX(hboxl), vboxl, TRUE, TRUE, 0);
316
317
        hboxh = gtk_hbox_new( FALSE, 0 );
318
        gtk_box_pack_start(GTK_BOX(vboxl), hboxh, FALSE, FALSE, 0);
319
        label = gtk_label_new(_("Available Addresses"));
320
        gtk_box_pack_end(GTK_BOX(hboxh), label, TRUE, TRUE, 0);
321
322
        clist_swin = gtk_scrolled_window_new( NULL, NULL );
323
        gtk_box_pack_start(GTK_BOX(vboxl), clist_swin, TRUE, TRUE, 0);
324
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin),
325
                                       GTK_POLICY_AUTOMATIC,
326
                                       GTK_POLICY_ALWAYS);
327
328
        clist_avail = gtk_clist_new_with_titles( GROUP_N_COLS, titles );
329
        gtk_container_add( GTK_CONTAINER(clist_swin), clist_avail );
330
        gtk_clist_set_selection_mode( GTK_CLIST(clist_avail), GTK_SELECTION_BROWSE );
331
        gtk_clist_set_column_width( GTK_CLIST(clist_avail), GROUP_COL_NAME, GROUP_COL_WIDTH_NAME );
332
        gtk_clist_set_column_width( GTK_CLIST(clist_avail), GROUP_COL_EMAIL, GROUP_COL_WIDTH_EMAIL );
333
        gtk_clist_set_compare_func( GTK_CLIST(clist_avail), edit_group_list_compare_func );
334
        gtk_clist_set_auto_sort( GTK_CLIST(clist_avail), TRUE );
335
        gtkut_clist_set_redraw( GTK_CLIST(clist_avail) );
336
337
        for( i = 0; i < GROUP_N_COLS; i++ )
338
                GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist_avail)->column[i].button, GTK_CAN_FOCUS);
339
340
        /* Add/Remove button */
341
        vboxb = gtk_vbox_new( FALSE, 0 );
342
        gtk_box_pack_start(GTK_BOX(hboxl), vboxb, FALSE, FALSE, 0);
343
344
        vboxb1 = gtk_vbox_new( FALSE, 8 );
345
        gtk_box_pack_start(GTK_BOX(vboxb), vboxb1, TRUE, FALSE, 0);
346
347
        button_add = gtk_button_new_with_label( _( "  ->  " ) );
348
        gtk_box_pack_start(GTK_BOX(vboxb1), button_add, FALSE, FALSE, 0);
349
350
        button_remove = gtk_button_new_with_label( _( "  <-  " ) );
351
        gtk_box_pack_start(GTK_BOX(vboxb1), button_remove, FALSE, FALSE, 0);
352
353
        /* Group list */
354
        vboxl = gtk_vbox_new( FALSE, 4 );
355
        gtk_box_pack_start(GTK_BOX(hboxl), vboxl, TRUE, TRUE, 0);
356
357
        hboxh = gtk_hbox_new( FALSE, 0 );
358
        gtk_box_pack_start(GTK_BOX(vboxl), hboxh, FALSE, FALSE, 0);
359
        label = gtk_label_new(_("Addresses in Group"));
360
        gtk_box_pack_start(GTK_BOX(hboxh), label, TRUE, TRUE, 0);
361
362
        clist_swin = gtk_scrolled_window_new( NULL, NULL );
363
        gtk_box_pack_start(GTK_BOX(vboxl), clist_swin, TRUE, TRUE, 0);
364
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin),
365
                                       GTK_POLICY_AUTOMATIC,
366
                                       GTK_POLICY_ALWAYS);
367
368
        clist_group = gtk_clist_new_with_titles( GROUP_N_COLS, titles );
369
        gtk_container_add( GTK_CONTAINER(clist_swin), clist_group );
370
        gtk_clist_set_selection_mode( GTK_CLIST(clist_group), GTK_SELECTION_BROWSE );
371
        gtk_clist_set_column_width( GTK_CLIST(clist_group), GROUP_COL_NAME, GROUP_COL_WIDTH_NAME );
372
        gtk_clist_set_column_width( GTK_CLIST(clist_group), GROUP_COL_EMAIL, GROUP_COL_WIDTH_EMAIL );
373
        gtk_clist_set_compare_func( GTK_CLIST(clist_group), edit_group_list_compare_func );
374
        gtk_clist_set_auto_sort( GTK_CLIST(clist_group), TRUE );
375
        gtkut_clist_set_redraw( GTK_CLIST(clist_group) );
376
377
        for( i = 0; i < GROUP_N_COLS; i++ )
378
                GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist_group)->column[i].button, GTK_CAN_FOCUS);
379
380
        /* Button panel */
381
        hboxb = gtk_hbox_new(FALSE, 8);
382
        gtk_box_pack_start(GTK_BOX(vbox1), hboxb, FALSE, FALSE, 0);
383
384
        gtkut_stock_button_set_create(&hbbox, &ok_btn, GTK_STOCK_OK,
385
                                      &cancel_btn, GTK_STOCK_CANCEL,
386
                                      NULL, NULL);
387
        gtk_box_pack_end(GTK_BOX(hboxb), hbbox, FALSE, FALSE, 0);
388
        gtk_widget_grab_default(ok_btn);
389
390
        g_signal_connect(G_OBJECT(ok_btn), "clicked",
391
                         G_CALLBACK(edit_group_ok), cancelled);
392
        g_signal_connect(G_OBJECT(cancel_btn), "clicked",
393
                         G_CALLBACK(edit_group_cancel), cancelled);
394
395
        /* Status line */
396
        hsbox = gtk_hbox_new(FALSE, 0);
397
        gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, 0);
398
        statusbar = gtk_statusbar_new();
399
        gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, 0);
400
401
        gtk_widget_show_all(vbox);
402
403
        /* Event handlers */
404
        g_signal_connect(G_OBJECT(clist_group), "select_row",
405
                         G_CALLBACK( edit_group_group_selected), NULL);
406
        g_signal_connect(G_OBJECT(clist_avail), "select_row",
407
                         G_CALLBACK( edit_group_avail_selected), NULL);
408
        g_signal_connect(G_OBJECT(button_add), "clicked",
409
                         G_CALLBACK( edit_group_to_group ), NULL);
410
        g_signal_connect(G_OBJECT(button_remove), "clicked",
411
                         G_CALLBACK( edit_group_to_avail ), NULL);
412
        g_signal_connect(G_OBJECT(clist_avail), "button_press_event",
413
                         G_CALLBACK(edit_group_list_avail_button), NULL);
414
        g_signal_connect(G_OBJECT(clist_group), "button_press_event",
415
                         G_CALLBACK(edit_group_list_group_button), NULL);
416
417
        groupeditdlg.window     = window;
418
        groupeditdlg.hbbox      = hbbox;
419
        groupeditdlg.ok_btn     = ok_btn;
420
        groupeditdlg.cancel_btn = cancel_btn;
421
        groupeditdlg.statusbar  = statusbar;
422
        groupeditdlg.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit Group Dialog" );
423
424
        groupeditdlg.entry_name  = entry_name;
425
        groupeditdlg.clist_group = GTK_CLIST( clist_group );
426
        groupeditdlg.clist_avail = GTK_CLIST( clist_avail );
427
428
        if( ! _edit_group_dfl_message_ ) {
429
                _edit_group_dfl_message_ = _( "Move E-Mail Addresses to or from Group with arrow buttons" );
430
        }
431
}
432
433
/*
434
* Return list of email items.
435
*/
436
static GList *edit_group_build_email_list() {
437
        GtkCList *clist = GTK_CLIST(groupeditdlg.clist_group);
438
        GList *listEMail = NULL;
439
        ItemEMail *email;
440
        gint row = 0;
441
        while( (email = gtk_clist_get_row_data( clist, row )) ) {
442
                listEMail = g_list_append( listEMail, email );
443
                row++;
444
        }
445
        return listEMail;
446
}
447
448
/*
449
* Edit group.
450
* Enter: abf    Address book.
451
*        folder Parent folder for group (or NULL if adding to root folder). Argument is
452
*               only required for new objects).
453
*        group  Group to edit, or NULL for a new group object.
454
* Return: Edited object, or NULL if cancelled.
455
*/
456
ItemGroup *addressbook_edit_group( AddressBookFile *abf, ItemFolder *parent, ItemGroup *group ) {
457
        static gboolean cancelled;
458
        GList *listEMail = NULL;
459
        gchar *name;
460
461
        if (!groupeditdlg.window)
462
                addressbook_edit_group_create(&cancelled);
463
        gtkut_box_set_reverse_order(GTK_BOX(groupeditdlg.hbbox),
464
                                    !prefs_common.comply_gnome_hig);
465
        gtk_widget_grab_focus(groupeditdlg.ok_btn);
466
        gtk_widget_grab_focus(groupeditdlg.entry_name);
467
        manage_window_set_transient(GTK_WINDOW(groupeditdlg.window));
468
        gtk_widget_show(groupeditdlg.window);
469
470
        /* Clear all fields */
471
        groupeditdlg.rowIndGroup = -1;
472
        groupeditdlg.rowIndAvail = -1;
473
        edit_group_status_show( "" );
474
        gtk_clist_clear( GTK_CLIST(groupeditdlg.clist_group) );
475
        gtk_clist_clear( GTK_CLIST(groupeditdlg.clist_avail) );
476
477
        if( group ) {
478
                if( ADDRITEM_NAME(group) )
479
                        gtk_entry_set_text(GTK_ENTRY(groupeditdlg.entry_name), ADDRITEM_NAME(group) );
480
                edit_group_load_clist( groupeditdlg.clist_group, group->listEMail );
481
                gtk_window_set_title( GTK_WINDOW(groupeditdlg.window), _("Edit Group Details"));
482
        }
483
        else {
484
                gtk_window_set_title( GTK_WINDOW(groupeditdlg.window), _("Add New Group"));
485
                gtk_entry_set_text(GTK_ENTRY(groupeditdlg.entry_name), ADDRESSBOOK_GUESS_GROUP_NAME );
486
        }
487
488
        listEMail = addrbook_get_available_email_list( abf, group );
489
        edit_group_load_clist( groupeditdlg.clist_avail, listEMail );
490
        mgu_clear_list( listEMail );
491
        g_list_free( listEMail );
492
        listEMail = NULL;
493
        gtk_clist_select_row( groupeditdlg.clist_group, 0, 0 );
494
        gtkut_clist_set_focus_row( groupeditdlg.clist_group, 0 );
495
        gtk_clist_select_row( groupeditdlg.clist_avail, 0, 0 );
496
        gtkut_clist_set_focus_row( groupeditdlg.clist_avail, 0 );
497
498
        edit_group_status_show( _edit_group_dfl_message_ );
499
500
        gtk_main();
501
        gtk_widget_hide( groupeditdlg.window );
502
503
        if( cancelled ) {
504
                return NULL;
505
        }
506
507
        listEMail = edit_group_build_email_list();
508
        if( group ) {
509
                /* Update email list */
510
                addrbook_update_group_list( abf, group, listEMail );
511
        }
512
        else {
513
                /* Create new person and email list */
514
                group = addrbook_add_group_list( abf, parent, listEMail );
515
        }
516
        name = gtk_editable_get_chars( GTK_EDITABLE(groupeditdlg.entry_name), 0, -1 );
517
        addritem_group_set_name( group, name );
518
        g_free( name );
519
520
        listEMail = NULL;
521
        return group;
522
}
523
524
/*
525
* Edit folder.
526
* Enter: abf    Address book.
527
*        parent Parent folder for folder (or NULL if adding to root folder). Argument is
528
*               only required for new objects).
529
*        folder        Folder to edit, or NULL for a new folder object.
530
* Return: Edited object, or NULL if cancelled.
531
*/
532
ItemFolder *addressbook_edit_folder( AddressBookFile *abf, ItemFolder *parent, ItemFolder *folder ) {
533
        gchar *name = NULL;
534
535
        if( folder ) {
536
                name = g_strdup( ADDRITEM_NAME(folder) );
537
                name = input_dialog( _("Edit folder"), _("Input the new name of folder:"), name );
538
        }
539
        else {
540
                name = input_dialog( _("New folder"),
541
                                _("Input the name of new folder:"),
542
                                _(ADDRESSBOOK_GUESS_FOLDER_NAME) );
543
        }
544
        if( ! name ) return NULL;
545
        g_strstrip( name );
546
        if( *name == '\0' ) {
547
                g_free( name );
548
                return NULL;
549
        }
550
        if( folder ) {
551
                if( g_ascii_strcasecmp( name, ADDRITEM_NAME(folder) ) == 0 ) {
552
                        g_free( name );
553
                        return NULL;
554
                }
555
        }
556
557
        if( ! folder ) {
558
                folder = addrbook_add_new_folder( abf, parent );
559
        }
560
        addritem_folder_set_name( folder, name );
561
        g_free( name );
562
        return folder;
563
}
564
565
/*
566
* End of Source.
567
*/
568