2 * This file is part of hildon-libs
4 * Copyright (C) 2005 Nokia Corporation.
6 * Contact: Luc Pionchon <luc.pionchon@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; either version 2.1 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
27 #include <gdk/gdkkeysyms.h>
30 #include <sys/types.h>
41 #include "hildon-add-home-dialog.h"
42 #include <hildon-widgets/hildon-caption.h>
44 #define _(String) dgettext(PACKAGE, String)
45 #define MAX_ERR_MSG 256
46 #define HILDON_ADD_HOME_DIALOG_WIDTH 370
47 #define HILDON_ADD_HOME_DIALOG_HEIGHT 100
48 #define HILDON_MAX_TITLE_LENGTH 256
49 #define HILDON_HOME_MAX_SHORTCUT_LEN 255
51 #define HILDON_ADD_HOME_DIALOG_GET_PRIVATE(obj) \
52 (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
53 HILDON_TYPE_ADD_HOME_DIALOG, \
54 HildonAddHomeDialogPrivate));
56 typedef struct _HildonAddHomeDialogPrivate HildonAddHomeDialogPrivate;
58 static GtkDialogClass *parent_class;
61 hildon_add_home_dialog_class_init(HildonAddHomeDialogClass * class);
62 static void hildon_add_home_dialog_init(HildonAddHomeDialog * dialog);
66 struct _HildonAddHomeDialogPrivate {
67 GtkWidget *desc_label;
68 GtkWidget *name_entry;
69 GtkWidget *new_name_entry;
71 GtkWidget *cancelButton;
75 /* Private functions */
78 hildon_add_home_dialog_class_init(HildonAddHomeDialogClass * class)
80 parent_class = g_type_class_peek_parent(class);
81 g_type_class_add_private(class, sizeof(HildonAddHomeDialogPrivate));
84 static void hildon_add_home_dialog_init(HildonAddHomeDialog * dialog)
86 HildonAddHomeDialogPrivate *priv;
88 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);
90 priv = HILDON_ADD_HOME_DIALOG_GET_PRIVATE(dialog);
91 priv->name_entry = NULL;
92 priv->new_name_entry = NULL;
93 priv->isrename = FALSE;
95 priv->okButton = gtk_dialog_add_button(GTK_DIALOG(dialog),
96 "addtoHome_button_ok",
98 priv->cancelButton = gtk_dialog_add_button(GTK_DIALOG(dialog),
99 "addtoHome_button_cancel",
100 GTK_RESPONSE_CANCEL);
102 gtk_window_resize(GTK_WINDOW(dialog),
103 HILDON_ADD_HOME_DIALOG_WIDTH,
104 HILDON_ADD_HOME_DIALOG_HEIGHT);
106 gtk_widget_show_all(GTK_DIALOG(dialog)->vbox);
107 gtk_widget_show_all(GTK_DIALOG(dialog)->action_area);
110 /* Public functions */
112 GType hildon_add_home_dialog_get_type(void)
114 static GType dialog_type = 0;
117 static const GTypeInfo dialog_info = {
118 sizeof(HildonAddHomeDialogClass),
119 NULL, /* base_init */
120 NULL, /* base_finalize */
121 (GClassInitFunc) hildon_add_home_dialog_class_init,
122 NULL, /* class_finalize */
123 NULL, /* class_data */
124 sizeof(HildonAddHomeDialog),
126 (GInstanceInitFunc) hildon_add_home_dialog_init
129 dialog_type = g_type_register_static(GTK_TYPE_DIALOG,
130 "HildonAddHomeDialog",
137 * hildon_add_home_dialog_new:
138 * @parent: parent window for the dialog
139 * @name: name to show in the entry (or label, if @new_name is not NULL)
140 * @new_name: name to show in the new name entry. If this is not NULL
141 * the widget acts as a RenameShortcutDialog.
143 * Creates a new Add to Home dialog or Rename Shortcut dialog.
145 * Returns: the new dialog.
147 GtkWidget *hildon_add_home_dialog_new(GtkWindow * parent,
149 const gchar * new_name)
151 HildonAddHomeDialog *dialog;
152 HildonAddHomeDialogPrivate *priv;
154 GtkSizeGroup *size_group =
155 gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
158 HILDON_ADD_HOME_DIALOG(g_object_new
159 (HILDON_TYPE_ADD_HOME_DIALOG, NULL));
160 priv = HILDON_ADD_HOME_DIALOG_GET_PRIVATE(dialog);
163 gtk_window_set_transient_for(GTK_WINDOW(dialog), parent);
165 /* Set up the window title */
166 if (new_name != NULL) {
167 priv->isrename = TRUE;
168 gtk_window_set_title(GTK_WINDOW(dialog), _("ckdg_ti_rename_link"));
170 priv->isrename = FALSE;
171 gtk_window_set_title(GTK_WINDOW(dialog), "addtoHome_dialog_title");
174 /* add description text */
175 if (priv->isrename) {
177 gtk_label_new(_("ckdg_ib_link_exists"));
178 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
179 priv->desc_label, FALSE, FALSE, 0);
182 /* add name entry (or label ) */
183 if (priv->isrename) {
184 GtkWidget *label = gtk_label_new((name) ? name : "");
186 priv->name_entry = gtk_hbox_new(FALSE, 0);
187 gtk_box_pack_start(GTK_BOX(priv->name_entry), label, FALSE, FALSE,
190 priv->name_entry = gtk_entry_new();
191 gtk_entry_set_text(GTK_ENTRY(priv->name_entry),
194 caption = hildon_caption_new(size_group, "addtoHome_editor_caption",
195 priv->name_entry, NULL,
196 HILDON_CAPTION_OPTIONAL);
197 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), caption,
200 /* add new name entry */
201 if (priv->isrename) {
202 priv->new_name_entry = gtk_entry_new();
203 gtk_entry_set_text(GTK_ENTRY(priv->new_name_entry), new_name);
204 caption = hildon_caption_new(size_group, _("ckdg_fi_rename_name"),
205 priv->new_name_entry, NULL,
206 HILDON_CAPTION_OPTIONAL);
207 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), caption,
211 /* highlight proper entry */
212 if (priv->isrename) {
213 gtk_widget_grab_focus(priv->new_name_entry);
214 gtk_editable_select_region(GTK_EDITABLE(priv->new_name_entry), 0,
217 gtk_widget_grab_focus(priv->name_entry);
218 gtk_editable_select_region(GTK_EDITABLE(priv->name_entry), 0, -1);
221 gtk_widget_show_all(GTK_DIALOG(dialog)->vbox);
222 gtk_widget_show_all(GTK_DIALOG(dialog)->action_area);
224 return GTK_WIDGET(dialog);
228 * hildon_add_home_dialog_get_name:
229 * @dialog: the dialog
231 * Returns: the string the user has entered in the entry
233 const gchar *hildon_add_home_dialog_get_name(HildonAddHomeDialog * dialog)
235 HildonAddHomeDialogPrivate *priv;
237 g_return_val_if_fail(HILDON_IS_ADD_HOME_DIALOG(dialog), NULL);
238 priv = HILDON_ADD_HOME_DIALOG_GET_PRIVATE(dialog);
241 return gtk_entry_get_text(GTK_ENTRY(priv->new_name_entry));
243 return gtk_entry_get_text(GTK_ENTRY(priv->name_entry));