Changeset 1516
- Timestamp:
- 03/27/07 10:34:31 (6 years ago)
- Location:
- trunk/src/target/OM-2007/applications/openmoko-messages
- Files:
-
- 2 added
- 15 edited
-
configure.ac (modified) (1 diff)
-
src/Makefile.am (modified) (1 diff)
-
src/callbacks.c (modified) (5 diffs)
-
src/callbacks.h (modified) (1 diff)
-
src/detail-area.c (modified) (6 diffs)
-
src/detail-area.h (modified) (4 diffs)
-
src/foldersdb.c (modified) (3 diffs)
-
src/foldersdb.h (modified) (2 diffs)
-
src/main.c (modified) (4 diffs)
-
src/main.h (modified) (3 diffs)
-
src/message.h (modified) (2 diffs)
-
src/sms-contact-window.c (added)
-
src/sms-contact-window.h (added)
-
src/sms-dialog-window.c (modified) (15 diffs)
-
src/sms-dialog-window.h (modified) (4 diffs)
-
src/sms-membership-window.c (modified) (11 diffs)
-
src/sms-membership-window.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/target/OM-2007/applications/openmoko-messages/configure.ac
r1299 r1516 18 18 PKG_CHECK_MODULES(DBUS, dbus-1,, 19 19 AC_MSG_ERROR([*** Required dbus-1 not installed ***])) 20 LIBS="$LIBS $GTK_LIBS $DBUSGLIB_LIBS $DBUS" 21 CFLAGS="$CFLAGS $OPENMOKO_CFLAGS $DBUSGLIB_CFLAGS $DBUS_DFALGS" 20 PKG_CHECK_MODULES(LIBEBOOK, libebook-1.2,, 21 AC_MSG_ERROR([*** Required dbus-1 not installed ***])) 22 LIBS="$LIBS $GTK_LIBS $DBUSGLIB_LIBS $DBUS $LIBEBOOK_LIBS" 23 CFLAGS="$CFLAGS $OPENMOKO_CFLAGS $DBUSGLIB_CFLAGS $DBUS_DFALGS $LIBEBOOK_CFLAGS" 22 24 23 25 # output stuff -
trunk/src/target/OM-2007/applications/openmoko-messages/src/Makefile.am
r911 r1516 6 6 bin_PROGRAMS = openmoko-messages 7 7 8 openmoko_messages_SOURCES = main.c main.h foldersdb.c foldersdb.h callbacks.c callbacks.h detail-area.c detail-area.h sms-dialog-window.c sms-dialog-window.h sms-membership-window.c sms-membership-window.h 8 openmoko_messages_SOURCES = main.c main.h \ 9 foldersdb.c foldersdb.h \ 10 callbacks.c callbacks.h \ 11 detail-area.c detail-area.h \ 12 sms-dialog-window.c sms-dialog-window.h \ 13 sms-membership-window.c sms-membership-window.h \ 14 sms-contact-window.c sms-contact-window.h 9 15 10 16 openmoko_messages_LDADD = @OPENMOKO_LIBS@ -
trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c
r1452 r1516 21 21 #include "callbacks.h" 22 22 #include "detail-area.h" 23 #include "sms-contact-window.h" 23 24 #include <gtk/gtk.h> 24 25 #include <dbus/dbus.h> 25 26 #include <dbus/dbus-glib.h> 26 27 28 void cb_addressBtn_clicked (GtkButton* button, gpointer* data); 29 void sms_contact_select_done (GtkWidget* widget, gpointer data); 30 27 31 void 28 32 send_signal_to_footer (DBusConnection* bus, gchar* message_str) 29 33 { 30 DBusMessage *message;31 32 if(message_str == NULL)33 g_debug("Input string is null");34 else35 g_debug(message_str);36 37 message = dbus_message_new_signal ("/org/openmoko/footer",38 "org.openmoko.dbus.TaskManager",39 "push_statusbar_message");40 dbus_message_append_args (message,41 DBUS_TYPE_STRING, &message_str,42 DBUS_TYPE_INVALID);43 dbus_connection_send (bus, message, NULL);44 dbus_message_unref (message);45 } 46 47 static gboolean 34 DBusMessage *message; 35 36 if(message_str == NULL) 37 g_debug("Input string is null"); 38 else 39 g_debug(message_str); 40 41 message = dbus_message_new_signal ("/org/openmoko/footer", 42 "org.openmoko.dbus.TaskManager", 43 "push_statusbar_message"); 44 dbus_message_append_args (message, 45 DBUS_TYPE_STRING, &message_str, 46 DBUS_TYPE_INVALID); 47 dbus_connection_send (bus, message, NULL); 48 dbus_message_unref (message); 49 } 50 51 static gboolean 48 52 model_number_helper (GtkTreeModel* model, 49 GtkTreePath* path,50 GtkTreeIter* iter,51 gpointer data)52 { 53 MessengerData* d = (MessengerData*)data;54 d->msg_num ++;55 return FALSE;53 GtkTreePath* path, 54 GtkTreeIter* iter, 55 gpointer data) 56 { 57 MessengerData* d = (MessengerData*)data; 58 d->msg_num ++; 59 return FALSE; 56 60 } 57 61 58 62 gint get_model_number (MessengerData* d) 59 63 { 60 d->msg_num = 0;61 gtk_tree_model_foreach (d->filter,model_number_helper,d);62 return d->msg_num;64 d->msg_num = 0; 65 gtk_tree_model_foreach (d->filter,model_number_helper,d); 66 return d->msg_num; 63 67 } 64 68 65 69 gboolean cb_filter_changed(GtkWidget* widget, gchar* text, MessengerData* d) 66 70 { 67 d->currentfolder = g_strdup(text);68 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));69 gchar* str = g_strdup_printf("folder %s has %d messages",text,get_model_number(d));70 send_signal_to_footer(d->bus,str);71 72 return FALSE;71 d->currentfolder = g_strdup(text); 72 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 73 gchar* str = g_strdup_printf("folder %s has %d messages",text,get_model_number(d)); 74 send_signal_to_footer(d->bus,str); 75 76 return FALSE; 73 77 } 74 78 75 79 void cb_new_sms (GtkMenuItem* item, MessengerData* d) 76 80 { 77 SmsDialogWindow* sms_window = sms_dialog_window_new(); 78 sms_dialog_window_set_title (sms_window,"New SMS"); 79 gtk_window_set_decorated (GTK_WINDOW(sms_window), FALSE); 80 gtk_widget_show_all (GTK_WIDGET(sms_window)); 81 SmsDialogWindow* sms_window = sms_dialog_window_new(); 82 sms_dialog_window_set_title (sms_window,"New SMS"); 83 gtk_window_set_decorated (GTK_WINDOW(sms_window), FALSE); 84 gtk_widget_show_all (GTK_WIDGET(sms_window)); 85 86 g_signal_connect (G_OBJECT(sms_window->addressBtn), 87 "clicked", 88 G_CALLBACK(cb_addressBtn_clicked), 89 sms_window->toEntry ); 81 90 } 82 91 83 92 void cb_new_mail (GtkMenuItem* item, MessengerData* d) 84 93 { 85 SmsDialogWindow* mail_window = sms_dialog_window_new(); 86 mail_dialog_window_set_title (mail_window,"New Email"); 87 gtk_window_set_decorated (GTK_WINDOW(mail_window), FALSE); 88 gtk_widget_show_all ( GTK_WIDGET(mail_window) ); 94 SmsDialogWindow* mail_window = sms_dialog_window_new(); 95 mail_dialog_window_set_title (mail_window,"New Email"); 96 gtk_window_set_decorated (GTK_WINDOW(mail_window), FALSE); 97 gtk_widget_show_all ( GTK_WIDGET(mail_window) ); 98 99 g_signal_connect (G_OBJECT(mail_window->addressBtn), 100 "clicked", 101 G_CALLBACK(cb_addressBtn_clicked), 102 mail_window->toEntry); 89 103 } 90 104 91 105 void cb_new_folder (GtkMenuItem* item, MessengerData* d) 92 106 { 93 g_debug ("new folder called");94 GtkWidget* hbox;95 GtkWidget* nfResetBtn;96 GtkWidget* nfConfirmBtn;97 98 if ((d->nfWin != NULL) && (d->nfWin->window != NULL))99 gtk_entry_set_text (GTK_ENTRY(d->nfEntry),"");100 else101 { 102 d->nfWin = moko_dialog_window_new();103 GtkWidget* nfBox = gtk_vbox_new (FALSE,10);104 gtk_widget_set_size_request (nfBox, 480, -1);105 GtkWidget* nfAlign = gtk_alignment_new (0,0,1,1);106 gtk_alignment_set_padding (GTK_ALIGNMENT(nfAlign), 100, 0, 30, 10);107 moko_dialog_window_set_title ( MOKO_DIALOG_WINDOW(d->nfWin), "New Folder");108 109 GtkWidget* nfLabel = gtk_label_new ("Please input new folder name:");110 gtk_misc_set_alignment (GTK_MISC(nfLabel),0,0.5);111 gtk_box_pack_start (GTK_BOX(nfBox), nfLabel, FALSE, TRUE, 0);112 113 d->nfEntry = gtk_entry_new ();114 gtk_box_pack_start (GTK_BOX(nfBox), d->nfEntry, FALSE, TRUE, 0);115 116 hbox = gtk_hbox_new (FALSE,20);117 nfConfirmBtn = gtk_button_new_with_label ("OK");118 nfResetBtn = gtk_button_new_with_label ("Reset");119 gtk_box_pack_start (GTK_BOX(hbox), nfConfirmBtn, FALSE, TRUE, 0);120 gtk_box_pack_start (GTK_BOX(hbox), nfResetBtn, FALSE, TRUE, 0);121 gtk_box_pack_start (GTK_BOX(nfBox), hbox, FALSE, TRUE, 0);122 123 gtk_container_add (GTK_CONTAINER(nfAlign),nfBox);124 125 moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->nfWin), nfAlign);126 g_signal_connect (G_OBJECT(nfConfirmBtn), 127 "clicked",128 G_CALLBACK(cb_nfBtn_clicked),129 d);130 g_signal_connect (G_OBJECT(nfResetBtn),131 "clicked",132 G_CALLBACK(cb_nfResetBtn_clicked),133 d);134 } 135 gtk_window_set_decorated (GTK_WINDOW(d->nfWin), FALSE);136 gtk_widget_show_all (d->nfWin);107 g_debug ("new folder called"); 108 GtkWidget* hbox; 109 GtkWidget* nfResetBtn; 110 GtkWidget* nfConfirmBtn; 111 112 if ((d->nfWin != NULL) && (d->nfWin->window != NULL)) 113 gtk_entry_set_text (GTK_ENTRY(d->nfEntry),""); 114 else 115 { 116 d->nfWin = moko_dialog_window_new(); 117 GtkWidget* nfBox = gtk_vbox_new (FALSE,10); 118 gtk_widget_set_size_request (nfBox, 480, -1); 119 GtkWidget* nfAlign = gtk_alignment_new (0,0,1,1); 120 gtk_alignment_set_padding (GTK_ALIGNMENT(nfAlign), 100, 0, 30, 10); 121 moko_dialog_window_set_title ( MOKO_DIALOG_WINDOW(d->nfWin), "New Folder"); 122 123 GtkWidget* nfLabel = gtk_label_new ("Please input new folder name:"); 124 gtk_misc_set_alignment (GTK_MISC(nfLabel),0,0.5); 125 gtk_box_pack_start (GTK_BOX(nfBox), nfLabel, FALSE, TRUE, 0); 126 127 d->nfEntry = gtk_entry_new (); 128 gtk_box_pack_start (GTK_BOX(nfBox), d->nfEntry, FALSE, TRUE, 0); 129 130 hbox = gtk_hbox_new (FALSE,20); 131 nfConfirmBtn = gtk_button_new_with_label ("OK"); 132 nfResetBtn = gtk_button_new_with_label ("Reset"); 133 gtk_box_pack_start (GTK_BOX(hbox), nfConfirmBtn, FALSE, TRUE, 0); 134 gtk_box_pack_start (GTK_BOX(hbox), nfResetBtn, FALSE, TRUE, 0); 135 gtk_box_pack_start (GTK_BOX(nfBox), hbox, FALSE, TRUE, 0); 136 137 gtk_container_add (GTK_CONTAINER(nfAlign),nfBox); 138 139 moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->nfWin), nfAlign); 140 g_signal_connect (G_OBJECT(nfConfirmBtn), 141 "clicked", 142 G_CALLBACK(cb_nfBtn_clicked), 143 d); 144 g_signal_connect (G_OBJECT(nfResetBtn), 145 "clicked", 146 G_CALLBACK(cb_nfResetBtn_clicked), 147 d); 148 } 149 gtk_window_set_decorated (GTK_WINDOW(d->nfWin), FALSE); 150 gtk_widget_show_all (d->nfWin); 137 151 } 138 152 139 153 void cb_mode_read (GtkMenuItem* item, MessengerData* d) 140 154 { 141 g_debug ("mode read"); 142 message* msg; 143 GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 144 GtkTreeModel* model; 145 GtkTreeIter iter; 146 gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 147 148 if ( has_selection ){ 149 msg = g_malloc(sizeof(message)); 150 gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 151 gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 152 gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 153 } 154 else msg = NULL; 155 detail_read_message (DETAIL_AREA(d->details),msg); 155 g_debug ("mode read"); 156 message* msg; 157 GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 158 GtkTreeModel* model; 159 GtkTreeIter iter; 160 gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 161 162 if ( has_selection ) 163 { 164 msg = g_malloc(sizeof(message)); 165 gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 166 gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 167 gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 168 } 169 else msg = NULL; 170 detail_read_message (DETAIL_AREA(d->details),msg); 156 171 } 157 172 158 173 void cb_mode_reply (GtkMenuItem* item, MessengerData* d) 159 174 { 160 g_debug ("mode reply"); 161 message* msg; 162 GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 163 GtkTreeModel* model; 164 GtkTreeIter iter; 165 gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 166 167 if ( has_selection ) { 168 msg = g_malloc(sizeof(message)); 169 gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 170 gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 171 gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 172 }else msg = NULL; 173 174 SmsDialogWindow* sms_window = sms_dialog_window_new(); 175 if (msg != NULL){ 176 sms_dialog_window_set_title (sms_window,"Reply SMS"); 177 sms_dialog_reply_message (sms_window,msg); 178 }else sms_dialog_window_set_title (sms_window,"New SMS"); 179 gtk_widget_show_all ( GTK_WIDGET(sms_window) ); 175 g_debug ("mode reply"); 176 message* msg; 177 GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 178 GtkTreeModel* model; 179 GtkTreeIter iter; 180 gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 181 182 if ( has_selection ) 183 { 184 msg = g_malloc(sizeof(message)); 185 gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 186 gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 187 gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 188 } 189 else msg = NULL; 190 191 SmsDialogWindow* sms_window = sms_dialog_window_new(); 192 if (msg != NULL) 193 { 194 sms_dialog_window_set_title (sms_window,"Reply SMS"); 195 sms_dialog_reply_message (sms_window,msg); 196 } 197 else sms_dialog_window_set_title (sms_window,"New SMS"); 198 gtk_widget_show_all ( GTK_WIDGET(sms_window) ); 180 199 } 181 200 182 201 void cb_mode_forward (GtkMenuItem* item, MessengerData* d) 183 202 { 184 g_debug ("mode forward"); 185 message* msg; 186 GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 187 GtkTreeModel* model; 188 GtkTreeIter iter; 189 gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 190 191 if ( has_selection ){ 192 msg = g_malloc(sizeof(message)); 193 gtk_tree_model_get( model, &iter, 194 COLUMN_FROM, &msg->name, 195 COLUMN_SUBJECT, &msg->subject, 196 COLUMN_FOLDER, &msg->folder, 197 COLUMN_CONTENT, &msg->content, 198 -1 ); 199 } 200 else msg = NULL; 201 202 SmsDialogWindow* sms_window = sms_dialog_window_new(); 203 sms_dialog_window_set_title (sms_window,"Forward SMS"); 204 sms_dialog_forward_message (sms_window, msg); 205 gtk_widget_show_all ( GTK_WIDGET(sms_window) ); 203 g_debug ("mode forward"); 204 message* msg; 205 GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 206 GtkTreeModel* model; 207 GtkTreeIter iter; 208 gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 209 210 if ( has_selection ) 211 { 212 msg = g_malloc(sizeof(message)); 213 gtk_tree_model_get( model, &iter, 214 COLUMN_FROM, &msg->name, 215 COLUMN_SUBJECT, &msg->subject, 216 COLUMN_FOLDER, &msg->folder, 217 COLUMN_CONTENT, &msg->content, 218 -1 ); 219 } 220 else msg = NULL; 221 222 SmsDialogWindow* sms_window = sms_dialog_window_new(); 223 sms_dialog_window_set_title (sms_window,"Forward SMS"); 224 sms_dialog_forward_message (sms_window, msg); 225 gtk_widget_show_all ( GTK_WIDGET(sms_window) ); 206 226 } 207 227 208 228 void cb_delete_folder (GtkMenuItem* item, MessengerData* d) 209 229 { 210 g_debug ("delete folder called"); 211 GtkWidget* msgDialog; 212 213 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 214 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 215 gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 216 if (!g_strcasecmp(oldName,"Inbox") || 217 !g_strcasecmp(oldName,"Outbox") || 218 !g_strcasecmp(oldName,"Draft") || 219 !g_strcasecmp(oldName,"Sent") || 220 !g_strcasecmp(oldName,"Trash")){ 221 msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 222 GTK_DIALOG_DESTROY_WITH_PARENT, 223 GTK_MESSAGE_WARNING, 224 GTK_BUTTONS_CLOSE, 225 g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't delete",oldName) ); 226 gtk_dialog_run (GTK_DIALOG (msgDialog)); 227 gtk_widget_destroy (msgDialog); 228 }else{ 229 GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 230 GTK_DIALOG_DESTROY_WITH_PARENT, 231 GTK_MESSAGE_WARNING, 232 GTK_BUTTONS_OK_CANCEL, 233 g_strdup_printf("Are you sure to delete folder: %s",d->currentfolder)); 234 gint result = gtk_dialog_run (GTK_DIALOG (dialog)); 235 switch (result){ 236 case GTK_RESPONSE_OK: 237 g_debug ("clicked ok"); 238 delete_folder(d,oldName); 239 break; 240 case GTK_RESPONSE_CANCEL: g_debug ("clicked cancel"); break; 241 default: g_debug ("clicked default"); break; 242 } 243 gtk_widget_destroy (dialog); 230 g_debug ("delete folder called"); 231 GtkWidget* msgDialog; 232 233 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 234 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 235 gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 236 if (!g_strcasecmp(oldName,"Inbox") || 237 !g_strcasecmp(oldName,"Outbox") || 238 !g_strcasecmp(oldName,"Draft") || 239 !g_strcasecmp(oldName,"Sent") || 240 !g_strcasecmp(oldName,"Trash")) 241 { 242 msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 243 GTK_DIALOG_DESTROY_WITH_PARENT, 244 GTK_MESSAGE_WARNING, 245 GTK_BUTTONS_CLOSE, 246 g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't delete",oldName) ); 247 gtk_dialog_run (GTK_DIALOG (msgDialog)); 248 gtk_widget_destroy (msgDialog); 249 } 250 else 251 { 252 GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 253 GTK_DIALOG_DESTROY_WITH_PARENT, 254 GTK_MESSAGE_WARNING, 255 GTK_BUTTONS_OK_CANCEL, 256 g_strdup_printf("Are you sure to delete folder: %s",d->currentfolder)); 257 gint result = gtk_dialog_run (GTK_DIALOG (dialog)); 258 switch (result) 259 { 260 case GTK_RESPONSE_OK: 261 g_debug ("clicked ok"); 262 delete_folder(d,oldName); 263 break; 264 case GTK_RESPONSE_CANCEL: 265 g_debug ("clicked cancel"); 266 break; 267 default: 268 g_debug ("clicked default"); 269 break; 270 } 271 gtk_widget_destroy (dialog); 244 272 } 245 273 } … … 247 275 void cb_delete_message (GtkMenuItem* item, MessengerData* d) 248 276 { 249 GtkTreeModel* model; 250 GtkTreeIter iter; 251 GtkTreeIter childiter; 252 GtkTreeSelection* selection; 253 254 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(d->view)); 255 gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter); 256 if (has_selection){ 257 gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter); 258 gtk_list_store_remove (d->liststore, &childiter); 259 }else { 260 GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 261 GTK_DIALOG_DESTROY_WITH_PARENT, 262 GTK_MESSAGE_WARNING, 263 GTK_BUTTONS_OK, 264 "No message selected"); 265 gtk_dialog_run (GTK_DIALOG (dialog)); 266 gtk_widget_destroy (dialog); 277 GtkTreeModel* model; 278 GtkTreeIter iter; 279 GtkTreeIter childiter; 280 GtkTreeSelection* selection; 281 282 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(d->view)); 283 gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter); 284 if (has_selection) 285 { 286 gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter); 287 gtk_list_store_remove (d->liststore, &childiter); 288 } 289 else 290 { 291 GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 292 GTK_DIALOG_DESTROY_WITH_PARENT, 293 GTK_MESSAGE_WARNING, 294 GTK_BUTTONS_OK, 295 "No message selected"); 296 gtk_dialog_run (GTK_DIALOG (dialog)); 297 gtk_widget_destroy (dialog); 267 298 } 268 299 } … … 270 301 void cb_mmitem_activate (GtkMenuItem* item, MessengerData* d) 271 302 { 272 g_debug ("message membership");273 d->mmWin = sms_membership_window_new();274 gtk_window_set_decorated (GTK_WINDOW(d->mmWin), FALSE);275 sms_membership_window_set_messages (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->liststore);276 sms_membership_window_set_menubox (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->folderlist);277 sms_membership_window_show ( SMS_MEMBERSHIP_WINDOW(d->mmWin) );303 g_debug ("message membership"); 304 d->mmWin = sms_membership_window_new(); 305 gtk_window_set_decorated (GTK_WINDOW(d->mmWin), FALSE); 306 sms_membership_window_set_messages (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->liststore); 307 sms_membership_window_set_menubox (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->folderlist); 308 sms_membership_window_show ( SMS_MEMBERSHIP_WINDOW(d->mmWin) ); 278 309 } 279 310 280 311 void cb_frBtn_clicked (GtkButton* button, MessengerData* d) 281 312 { 282 GSList *c; 283 gchar* folder; 284 285 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 286 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 287 gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 288 gchar* newName = g_strdup (gtk_entry_get_text(GTK_ENTRY(d->frEntry))); 289 gtk_label_set_text (GTK_LABEL(menulabel),newName); 290 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 291 292 c = d->folderlist; 293 for (; c; c = g_slist_next(c) ){ 294 folder = (gchar*) c->data; 295 if (!g_strcasecmp(folder,oldName)){ 296 g_debug ("old %s, new %s", oldName, newName); 297 c->data = g_strdup(newName); 298 } 299 } 300 d->filtmenu = reload_filter_menu (d,d->folderlist); 301 MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 302 g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 303 moko_menu_box_set_filter_menu(menubox, GTK_MENU(d->filtmenu)); 304 gtk_widget_show_all (GTK_WIDGET(menubox)); 305 gtk_widget_hide (d->frWin); 313 GSList *c; 314 gchar* folder; 315 316 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 317 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 318 gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 319 gchar* newName = g_strdup (gtk_entry_get_text(GTK_ENTRY(d->frEntry))); 320 gtk_label_set_text (GTK_LABEL(menulabel),newName); 321 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 322 323 c = d->folderlist; 324 for (; c; c = g_slist_next(c) ) 325 { 326 folder = (gchar*) c->data; 327 if (!g_strcasecmp(folder,oldName)) 328 { 329 g_debug ("old %s, new %s", oldName, newName); 330 c->data = g_strdup(newName); 331 } 332 } 333 d->filtmenu = reload_filter_menu (d,d->folderlist); 334 MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 335 g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 336 moko_menu_box_set_filter_menu(menubox, GTK_MENU(d->filtmenu)); 337 gtk_widget_show_all (GTK_WIDGET(menubox)); 338 gtk_widget_hide (d->frWin); 306 339 } 307 340 308 341 void cb_frResetBtn_clicked (GtkButton* button, GtkWidget* entry) 309 342 { 310 gtk_entry_set_text(GTK_ENTRY(entry),"");343 gtk_entry_set_text(GTK_ENTRY(entry),""); 311 344 } 312 345 313 346 void cb_fnitem_activate (GtkMenuItem* item, MessengerData* d) 314 347 { 315 g_debug ("folder rename called"); 316 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 317 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 318 319 gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 320 if (!g_strcasecmp(oldName,"Inbox") || 321 !g_strcasecmp(oldName,"Outbox") || 322 !g_strcasecmp(oldName,"Draft") || 323 !g_strcasecmp(oldName,"Sent") || 324 !g_strcasecmp(oldName,"Sent")){ 325 GtkWidget* msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 326 GTK_DIALOG_DESTROY_WITH_PARENT, 327 GTK_MESSAGE_WARNING, 328 GTK_BUTTONS_CLOSE, 329 g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't rename",oldName) ); 330 gtk_dialog_run (GTK_DIALOG (msgDialog)); 331 gtk_widget_destroy (msgDialog); 332 }else { 333 GtkWidget* hbox; 334 GtkWidget* frResetBtn; 335 GtkWidget* frConfirmBtn; 336 337 if ((d->frWin != NULL) && (d->frWin->window != NULL)) 338 gtk_entry_set_text (GTK_ENTRY(d->frEntry),""); 339 else{ 340 d->frWin = moko_dialog_window_new(); 341 GtkWidget* frBox = gtk_vbox_new (FALSE,10); 342 gtk_widget_set_size_request (frBox, 480, -1); 343 GtkWidget* frAlign = gtk_alignment_new (0,0,1,1); 344 gtk_alignment_set_padding (GTK_ALIGNMENT(frAlign), 100, 0, 30, 10); 345 moko_dialog_window_set_title (MOKO_DIALOG_WINDOW(d->frWin), "Folder Rename"); 346 347 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 348 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 349 GtkWidget* frLabel = gtk_label_new (g_strdup_printf("Please input new folder name for %s:", gtk_label_get_text (GTK_LABEL(menulabel)))); 350 gtk_misc_set_alignment (GTK_MISC(frLabel),0,0.5); 351 gtk_box_pack_start (GTK_BOX(frBox), frLabel, FALSE, TRUE, 0); 352 353 d->frEntry = gtk_entry_new (); 354 gtk_box_pack_start (GTK_BOX(frBox), d->frEntry, FALSE, TRUE, 0); 355 356 hbox = gtk_hbox_new (FALSE,20); 357 frConfirmBtn = gtk_button_new_with_label ("OK"); 358 frResetBtn = gtk_button_new_with_label ("Reset"); 359 gtk_box_pack_start (GTK_BOX(hbox), frConfirmBtn, FALSE, TRUE, 0); 360 gtk_box_pack_start (GTK_BOX(hbox), frResetBtn, FALSE, TRUE, 0); 361 gtk_box_pack_start (GTK_BOX(frBox), hbox, FALSE, TRUE, 0); 362 gtk_container_add (GTK_CONTAINER(frAlign),frBox); 363 364 moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->frWin), frAlign); 365 g_signal_connect (G_OBJECT(frConfirmBtn), 366 "clicked", 367 G_CALLBACK(cb_frBtn_clicked), 368 d); 369 g_signal_connect (G_OBJECT(frResetBtn), 370 "clicked", 371 G_CALLBACK(cb_frResetBtn_clicked), 372 d->frEntry); 373 } 374 gtk_widget_show_all ( GTK_WIDGET(d->frWin) ); 375 } 348 g_debug ("folder rename called"); 349 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 350 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 351 352 gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 353 if (!g_strcasecmp(oldName,"Inbox") || 354 !g_strcasecmp(oldName,"Outbox") || 355 !g_strcasecmp(oldName,"Draft") || 356 !g_strcasecmp(oldName,"Sent") || 357 !g_strcasecmp(oldName,"Sent")) 358 { 359 GtkWidget* msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 360 GTK_DIALOG_DESTROY_WITH_PARENT, 361 GTK_MESSAGE_WARNING, 362 GTK_BUTTONS_CLOSE, 363 g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't rename",oldName) ); 364 gtk_dialog_run (GTK_DIALOG (msgDialog)); 365 gtk_widget_destroy (msgDialog); 366 } 367 else 368 { 369 GtkWidget* hbox; 370 GtkWidget* frResetBtn; 371 GtkWidget* frConfirmBtn; 372 373 if ((d->frWin != NULL) && (d->frWin->window != NULL)) 374 gtk_entry_set_text (GTK_ENTRY(d->frEntry),""); 375 else 376 { 377 d->frWin = moko_dialog_window_new(); 378 GtkWidget* frBox = gtk_vbox_new (FALSE,10); 379 gtk_widget_set_size_request (frBox, 480, -1); 380 GtkWidget* frAlign = gtk_alignment_new (0,0,1,1); 381 gtk_alignment_set_padding (GTK_ALIGNMENT(frAlign), 100, 0, 30, 10); 382 moko_dialog_window_set_title (MOKO_DIALOG_WINDOW(d->frWin), "Folder Rename"); 383 384 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 385 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 386 GtkWidget* frLabel = gtk_label_new (g_strdup_printf("Please input new folder name for %s:", gtk_label_get_text (GTK_LABEL(menulabel)))); 387 gtk_misc_set_alignment (GTK_MISC(frLabel),0,0.5); 388 gtk_box_pack_start (GTK_BOX(frBox), frLabel, FALSE, TRUE, 0); 389 390 d->frEntry = gtk_entry_new (); 391 gtk_box_pack_start (GTK_BOX(frBox), d->frEntry, FALSE, TRUE, 0); 392 393 hbox = gtk_hbox_new (FALSE,20); 394 frConfirmBtn = gtk_button_new_with_label ("OK"); 395 frResetBtn = gtk_button_new_with_label ("Reset"); 396 gtk_box_pack_start (GTK_BOX(hbox), frConfirmBtn, FALSE, TRUE, 0); 397 gtk_box_pack_start (GTK_BOX(hbox), frResetBtn, FALSE, TRUE, 0); 398 gtk_box_pack_start (GTK_BOX(frBox), hbox, FALSE, TRUE, 0); 399 gtk_container_add (GTK_CONTAINER(frAlign),frBox); 400 401 moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->frWin), frAlign); 402 g_signal_connect (G_OBJECT(frConfirmBtn), 403 "clicked", 404 G_CALLBACK(cb_frBtn_clicked), 405 d); 406 g_signal_connect (G_OBJECT(frResetBtn), 407 "clicked", 408 G_CALLBACK(cb_frResetBtn_clicked), 409 d->frEntry); 410 } 411 gtk_widget_show_all ( GTK_WIDGET(d->frWin) ); 412 } 376 413 } 377 414 378 415 void cb_nfBtn_clicked (GtkButton* button, MessengerData* d) 379 416 { 380 gchar* folder = g_strdup(gtk_entry_get_text(GTK_ENTRY(d->nfEntry)));381 g_debug ("new folder %s",folder);382 d->folderlist = g_slist_append (d->folderlist,folder);383 d->filtmenu = reload_filter_menu (d,d->folderlist);384 MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( d->window );385 g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );386 moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu));387 gtk_widget_show_all (GTK_WIDGET(menubox));388 foldersdb_update (d->folderlist);389 update_folder_sensitive(d, d->folderlist);390 gtk_widget_hide (d->nfWin);417 gchar* folder = g_strdup(gtk_entry_get_text(GTK_ENTRY(d->nfEntry))); 418 g_debug ("new folder %s",folder); 419 d->folderlist = g_slist_append (d->folderlist,folder); 420 d->filtmenu = reload_filter_menu (d,d->folderlist); 421 MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( d->window ); 422 g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 423 moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu)); 424 gtk_widget_show_all (GTK_WIDGET(menubox)); 425 foldersdb_update (d->folderlist); 426 update_folder_sensitive(d, d->folderlist); 427 gtk_widget_hide (d->nfWin); 391 428 } 392 429 393 430 void cb_nfResetBtn_clicked (GtkButton* button, MessengerData* d) 394 431 { 395 gtk_entry_set_text(GTK_ENTRY(d->nfEntry),"");396 g_debug ("reset entry");432 gtk_entry_set_text(GTK_ENTRY(d->nfEntry),""); 433 g_debug ("reset entry"); 397 434 } 398 435 399 436 void cb_dfBtn_clicked (GtkButton* button, MessengerData* d) 400 437 { 401 GSList* c; 402 403 for( c =d->folderlist; c; c=g_slist_next(c)){ 404 if(!g_strcasecmp((gchar*)c->data, d->currentfolder)) { 405 d->folderlist = g_slist_remove (d->folderlist, c->data); 406 break; 407 } 408 } 409 410 d->filtmenu = reload_filter_menu (d,d->folderlist); 411 MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 412 g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 413 moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu)); 414 415 /*set the default filter item to "Inbox" */ 416 gchar* str = g_strdup("Inbox"); 417 moko_menu_box_set_active_filter (menubox,str); 418 gtk_widget_show_all (GTK_WIDGET(menubox)); 419 update_folder_sensitive (d, d->folderlist); 420 421 /*result inform */ 422 GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW(gtk_widget_get_parent_window(GTK_WIDGET(button))), 423 GTK_DIALOG_DESTROY_WITH_PARENT, 424 GTK_MESSAGE_INFO, 425 GTK_BUTTONS_CLOSE, 426 "Delete successful"); 427 gtk_dialog_run (GTK_DIALOG (dialog)); 428 gtk_widget_destroy (dialog); 438 GSList* c; 439 440 for( c =d->folderlist; c; c=g_slist_next(c)) 441 { 442 if(!g_strcasecmp((gchar*)c->data, d->currentfolder)) 443 { 444 d->folderlist = g_slist_remove (d->folderlist, c->data); 445 break; 446 } 447 } 448 449 d->filtmenu = reload_filter_menu (d,d->folderlist); 450 MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 451 g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 452 moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu)); 453 454 /*set the default filter item to "Inbox" */ 455 gchar* str = g_strdup("Inbox"); 456 moko_menu_box_set_active_filter (menubox,str); 457 gtk_widget_show_all (GTK_WIDGET(menubox)); 458 update_folder_sensitive (d, d->folderlist); 459 460 /*result inform */ 461 GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW(gtk_widget_get_parent_window(GTK_WIDGET(button))), 462 GTK_DIALOG_DESTROY_WITH_PARENT, 463 GTK_MESSAGE_INFO, 464 GTK_BUTTONS_CLOSE, 465 "Delete successful"); 466 gtk_dialog_run (GTK_DIALOG (dialog)); 467 gtk_widget_destroy (dialog); 429 468 } 430 469 431 470 void delete_folder (MessengerData* d, gchar* oldName) 432 471 { 433 GSList* c; 434 435 for( c =d->folderlist; c; c=g_slist_next(c)) { 436 if(!g_strcasecmp((gchar*)c->data, oldName)) { 437 d->folderlist = g_slist_remove (d->folderlist, c->data); 438 break; 472 GSList* c; 473 474 for( c =d->folderlist; c; c=g_slist_next(c)) 475 { 476 if(!g_strcasecmp((gchar*)c->data, oldName)) 477 { 478 d->folderlist = g_slist_remove (d->folderlist, c->data); 479 break; 439 480 } 440 481 } 441 482 442 d->filtmenu = reload_filter_menu (d,d->folderlist);443 MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) );444 g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );445 moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu));446 447 /*set the default filter item to "Inbox" */448 gchar* str = g_strdup("Inbox");449 moko_menu_box_set_active_filter (menubox,str);450 gtk_widget_show_all (GTK_WIDGET(menubox));451 update_folder_sensitive (d, d->folderlist);483 d->filtmenu = reload_filter_menu (d,d->folderlist); 484 MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 485 g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 486 moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu)); 487 488 /*set the default filter item to "Inbox" */ 489 gchar* str = g_strdup("Inbox"); 490 moko_menu_box_set_active_filter (menubox,str); 491 gtk_widget_show_all (GTK_WIDGET(menubox)); 492 update_folder_sensitive (d, d->folderlist); 452 493 } 453 494 454 495 void on_mmode_rdo_btn_clicked (gchar* folder) 455 496 { 456 g_debug ("switch to %s folder", folder);497 g_debug ("switch to %s folder", folder); 457 498 } 458 499 459 500 void cb_cursor_changed(GtkTreeSelection* selection, MessengerData* d) 460 501 { 461 GtkTreeModel* model; 462 GtkTreeIter iter; 463 GtkTreeIter childiter; 464 GtkTreeView* view; 465 message* msg; 466 GdkPixbuf* icon; 467 GError* error = NULL; 468 469 view = gtk_tree_selection_get_tree_view( selection ); 470 if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) { 471 msg = g_malloc(sizeof(message)); 472 gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 473 gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 474 gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 475 gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1); 476 477 if (msg->status == UNREAD) { 478 icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error); 479 msg->status = READ; 480 gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter); 481 gtk_list_store_set (d->liststore, &childiter, 482 COLUMN_ICON, icon, 483 COLUMN_STATUS, msg->status, 484 -1); 502 GtkTreeModel* model; 503 GtkTreeIter iter; 504 GtkTreeIter childiter; 505 GtkTreeView* view; 506 message* msg; 507 GdkPixbuf* icon; 508 GError* error = NULL; 509 510 view = gtk_tree_selection_get_tree_view( selection ); 511 if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) 512 { 513 msg = g_malloc(sizeof(message)); 514 gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 515 gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 516 gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 517 gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1); 518 519 if (msg->status == UNREAD) 520 { 521 icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error); 522 msg->status = READ; 523 gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter); 524 gtk_list_store_set (d->liststore, &childiter, 525 COLUMN_ICON, icon, 526 COLUMN_STATUS, msg->status, 527 -1); 485 528 } 486 detail_read_message (DETAIL_AREA(d->details),msg);487 }529 detail_read_message (DETAIL_AREA(d->details),msg); 530 } 488 531 } 489 532 … … 492 535 gpointer user_data) 493 536 { 494 g_debug("Button send clicked\n");537 g_debug("Button send clicked\n"); 495 538 } 496 539 … … 499 542 gpointer user_data) 500 543 { 501 g_debug("Button address clicked\n");544 g_debug("Button address clicked\n"); 502 545 } 503 546 504 547 void cb_search_entry_changed (GtkEditable* editable, MessengerData* d) 505 548 { 506 GtkWidget* search_entry = GTK_WIDGET(editable);507 d->s_key = g_strdup (gtk_entry_get_text(GTK_ENTRY(search_entry)));508 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));509 g_debug ("search %s, result has %d messages",d->s_key,get_model_number(d));510 gchar* str = g_strdup_printf("search %s, result has %d messages",d->s_key,get_model_number(d));511 send_signal_to_footer(d->bus,str);549 GtkWidget* search_entry = GTK_WIDGET(editable); 550 d->s_key = g_strdup (gtk_entry_get_text(GTK_ENTRY(search_entry))); 551 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 552 g_debug ("search %s, result has %d messages",d->s_key,get_model_number(d)); 553 gchar* str = g_strdup_printf("search %s, result has %d messages",d->s_key,get_model_number(d)); 554 send_signal_to_footer(d->bus,str); 512 555 } 513 556 514 557 void cb_search_on (MessengerData* d) 515 558 { 516 g_debug ("search on");517 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));518 GtkWidget* menulabel = GTK_BIN(menuitem)->child;519 gtk_label_set_text (GTK_LABEL(menulabel),"Search Result");520 d->searchOn = TRUE;559 g_debug ("search on"); 560 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 561 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 562 gtk_label_set_text (GTK_LABEL(menulabel),"Search Result"); 563 d->searchOn = TRUE; 521 564 } 522 565 523 566 void cb_search_off (MessengerData* d) 524 567 { 525 g_debug ("search off "); 526 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 527 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 528 gtk_label_set_text (GTK_LABEL(menulabel),"Inbox"); 529 d->searchOn = FALSE; 530 GtkWidget* search_entry = GTK_WIDGET(moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox))); 531 gtk_entry_set_text (GTK_ENTRY(search_entry), ""); 532 d->s_key = ""; 533 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 534 } 535 536 568 g_debug ("search off "); 569 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 570 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 571 gtk_label_set_text (GTK_LABEL(menulabel),"Inbox"); 572 d->searchOn = FALSE; 573 GtkWidget* search_entry = GTK_WIDGET(moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox))); 574 gtk_entry_set_text (GTK_ENTRY(search_entry), ""); 575 d->s_key = ""; 576 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 577 } 578 579 void cb_addressBtn_clicked (GtkButton* button, gpointer* data) 580 { 581 GtkWidget* contactWin = sms_contact_new(); 582 gtk_window_set_decorated (GTK_WINDOW(contactWin),FALSE); 583 GtkWidget* toEntry = (GtkWidget*)data; 584 g_signal_connect (G_OBJECT(contactWin),"contact_select_done", 585 G_CALLBACK(sms_contact_select_done), toEntry); 586 gtk_widget_show(contactWin); 587 } 588 589 void sms_contact_select_done (GtkWidget* widget, gpointer data) 590 { 591 g_debug("sms select contact done"); 592 GtkWidget* toEntry = (GtkWidget*)data; 593 gtk_entry_set_text (GTK_ENTRY(toEntry),SMS_CONTACT_WINDOW(widget)->nameList); 594 } 595 -
trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.h
r1428 r1516 51 51 void on_btn_address_clicked (GtkButton *button, 52 52 gpointer user_data); 53 53 54 54 void cb_search_entry_changed (GtkEditable* editable, MessengerData* d); 55 55 void cb_search_on (MessengerData* d); -
trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.c
r1452 r1516 16 16 * Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: Alex $] 17 17 * 18 */ 18 */ 19 19 20 20 #include "detail-area.h" 21 #include "callbacks.h"22 21 #include "main.h" 23 22 24 GtkWidget* detail_area_mode_edit (DetailArea *self);25 GtkWidget* detail_area_new_mail (DetailArea* self);26 23 GtkWidget* detail_area_mode_read (DetailArea* self); 27 GtkWidget* detail_area_mode_membership (DetailArea* self);28 24 29 25 G_DEFINE_TYPE (DetailArea, detail_area, GTK_TYPE_SCROLLED_WINDOW) … … 31 27 #define DETAIL_AREA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DETAIL_AREA, DetailAreaPrivate)) 32 28 33 typedef struct _DetailAreaPrivate{ 34 } DetailAreaPrivate; 29 typedef struct _DetailAreaPrivate 30 {} 31 DetailAreaPrivate; 35 32 36 33 /* parent class pointer */ … … 41 38 _expose_event_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data) 42 39 { 43 44 return TRUE; 40 return TRUE; 45 41 } 46 42 … … 48 44 detail_area_dispose (GObject *object) 49 45 { 50 if (G_OBJECT_CLASS (detail_area_parent_class)->dispose)51 G_OBJECT_CLASS (detail_area_parent_class)->dispose (object);46 if (G_OBJECT_CLASS (detail_area_parent_class)->dispose) 47 G_OBJECT_CLASS (detail_area_parent_class)->dispose (object); 52 48 } 53 49 … … 55 51 detail_area_finalize (GObject *object) 56 52 { 57 G_OBJECT_CLASS (detail_area_parent_class)->finalize (object);53 G_OBJECT_CLASS (detail_area_parent_class)->finalize (object); 58 54 } 59 55 60 56 static void 61 57 detail_area_class_init (DetailAreaClass *klass) 62 58 { 63 /* hook parent */64 GObjectClass *object_class = G_OBJECT_CLASS (klass);65 parent_class = g_type_class_peek_parent(klass);59 /* hook parent */ 60 GObjectClass *object_class = G_OBJECT_CLASS (klass); 61 parent_class = g_type_class_peek_parent(klass); 66 62 67 /* register private data */68 g_type_class_add_private (klass, sizeof (DetailAreaPrivate));63 /* register private data */ 64 g_type_class_add_private (klass, sizeof (DetailAreaPrivate)); 69 65 70 object_class->dispose = detail_area_dispose;71 object_class->finalize = detail_area_finalize;72 66 object_class->dispose = detail_area_dispose; 67 object_class->finalize = detail_area_finalize; 68 73 69 } 74 70 … … 76 72 detail_area_init (DetailArea *self) 77 73 { 78 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(self), GTK_POLICY_NEVER, GTK_POLICY_NEVER ); 79 80 self->readAttributes = g_malloc (sizeof(ReadAttributes)); 81 self->editAttributes = g_malloc (sizeof(EditAttributes)); 82 self->notebook = GTK_NOTEBOOK( gtk_notebook_new() ); 83 //gtk_notebook_append_page (self->notebook,detail_area_mode_edit(self),NULL); 84 //gtk_notebook_append_page (self->notebook,detail_area_new_mail(self),NULL); 85 gtk_notebook_append_page (self->notebook,detail_area_mode_read(self),NULL); 86 87 //gtk_notebook_append_page (self->notebook,detail_area_mode_membership(self),NULL); 88 gtk_notebook_set_show_tabs (self->notebook,FALSE); 89 gtk_notebook_set_show_border (self->notebook,FALSE); 90 //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(self), GTK_WIDGET(self->notebook) ); 91 74 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(self), GTK_POLICY_NEVER, GTK_POLICY_NEVER ); 75 76 self->readAttributes = g_malloc (sizeof(ReadAttributes)); 77 self->editAttributes = g_malloc (sizeof(EditAttributes)); 78 self->notebook = GTK_NOTEBOOK( gtk_notebook_new() ); 79 gtk_notebook_append_page (self->notebook,detail_area_mode_read(self),NULL); 80 gtk_notebook_set_show_tabs (self->notebook,FALSE); 81 gtk_notebook_set_show_border (self->notebook,FALSE); 92 82 } 93 83 94 84 GtkWidget* detail_area_new (void) 95 85 { 96 return GTK_WIDGET(g_object_new(TYPE_DETAIL_AREA, NULL ));86 return GTK_WIDGET(g_object_new(TYPE_DETAIL_AREA, NULL )); 97 87 } 98 88 99 89 GtkWidget* detail_area_get_notebook(DetailArea* self) 100 90 { 101 return GTK_WIDGET(self->notebook); 102 } 103 104 GtkWidget* detail_area_mode_edit (DetailArea* self) 105 { 106 /* create detail box */ 107 self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 108 EditAttributes* editAttributes = self->editAttributes; 109 110 /* create tool box */ 111 self->toolbox = GTK_HBOX(gtk_hbox_new(FALSE,0)); 112 MokoToolBox* mokobox = (MokoToolBox*)MOKO_TOOL_BOX(moko_tool_box_new()); 113 GtkHBox* toolbox = moko_tool_box_get_button_box(MOKO_TOOL_BOX(mokobox)); 114 editAttributes->sendBtn = gtk_button_new_with_label("Send"); 115 gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(editAttributes->sendBtn), FALSE, FALSE, 0 ); 116 editAttributes->addrBtn = gtk_button_new_with_label("Address"); 117 gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(editAttributes->addrBtn), FALSE, FALSE, 0 ); 118 119 /* fill entry area */ 120 self->entryarea = MOKO_FIXED(moko_fixed_new()); 121 GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 122 gtk_alignment_set_padding (alignment, 5, 5, 5, 5); 123 GtkWidget* entrybox = gtk_hbox_new(FALSE,0); 124 GtkWidget* toLabel = gtk_label_new("To:"); 125 gtk_widget_set_size_request (toLabel, 40, -1); 126 editAttributes->toEntry = gtk_entry_new(); 127 gtk_widget_set_size_request (editAttributes->toEntry, 300, -1); 128 GtkWidget* inputLabel = gtk_label_new("(120/1)"); 129 gtk_widget_set_size_request (inputLabel, 80, -1); 130 gtk_box_pack_start (GTK_BOX(entrybox),toLabel,FALSE,TRUE,0); 131 gtk_box_pack_start (GTK_BOX(entrybox),editAttributes->toEntry,FALSE,TRUE,0); 132 gtk_box_pack_start (GTK_BOX(entrybox),inputLabel,FALSE,TRUE,0); 133 gtk_container_add (GTK_CONTAINER(alignment), entrybox); 134 135 moko_fixed_set_cargo(MOKO_FIXED(self->entryarea),GTK_WIDGET(alignment)); 136 137 /* fill textview */ 138 editAttributes->txtView = gtk_text_view_new(); 139 GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 140 gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),0,0,0,50); 141 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(editAttributes->txtView),GTK_WRAP_CHAR); 142 gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(editAttributes->txtView)); 143 144 gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(mokobox),FALSE,TRUE,0); 145 gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(self->entryarea),FALSE,TRUE,0); 146 gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(viewAlign),TRUE,TRUE,0); 147 148 return GTK_WIDGET(self->detailbox); 149 } 150 151 //TODO move mail function to edit mode 152 GtkWidget* detail_area_new_mail (DetailArea* self) { 153 154 /* create detail box */ 155 self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 156 157 /* create tool box */ 158 self->toolbox = GTK_HBOX(gtk_hbox_new(FALSE,0)); 159 MokoToolBox* mokobox = MOKO_TOOL_BOX(moko_tool_box_new()); 160 GtkHBox* toolbox = moko_tool_box_get_button_box(MOKO_TOOL_BOX(mokobox)); 161 GtkWidget* button = gtk_button_new_with_label("Send"); 162 gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(button), FALSE, FALSE, 0 ); 163 button = gtk_button_new_with_label("Attach"); 164 gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(button), FALSE, FALSE, 0 ); 165 button = gtk_button_new_with_label("Address"); 166 gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(button), FALSE, FALSE, 0 ); 167 168 /* fill entry area */ 169 self->entryarea = MOKO_FIXED(moko_fixed_new()); 170 GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 171 gtk_alignment_set_padding (alignment, 5, 5, 5, 5); 172 173 GtkVBox* entrybox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 174 gtk_box_set_spacing (GTK_BOX(entrybox),2); 175 GtkWidget* hbox = gtk_hbox_new(FALSE,0); 176 GtkWidget* toLabel = gtk_label_new("To:"); 177 gtk_widget_set_size_request (toLabel, 110, -1); 178 gtk_misc_set_alignment (GTK_MISC (toLabel),0.8,0.5); 179 GtkWidget* toEntry = gtk_entry_new(); 180 gtk_widget_set_size_request (toEntry, 300, -1); 181 gtk_box_pack_start (GTK_BOX(hbox),GTK_WIDGET(toLabel),FALSE,TRUE,0); 182 gtk_box_pack_start (GTK_BOX(hbox),GTK_WIDGET(toEntry),FALSE,TRUE,0); 183 gtk_box_pack_start (GTK_BOX(entrybox),GTK_WIDGET(hbox),FALSE,TRUE,0); 184 185 hbox = gtk_hbox_new(FALSE,0); 186 GtkWidget* ccLabel = gtk_label_new("CC:"); 187 gtk_widget_set_size_request (ccLabel, 110, -1); 188 gtk_misc_set_alignment (GTK_MISC (ccLabel),0.8,0.5); 189 GtkWidget* ccEntry = gtk_entry_new(); 190 gtk_widget_set_size_request (ccEntry, 300, -1); 191 gtk_box_pack_start (GTK_BOX(hbox),ccLabel,FALSE,TRUE,0); 192 gtk_box_pack_start (GTK_BOX(hbox),ccEntry,FALSE,TRUE,0); 193 gtk_box_pack_start (GTK_BOX(entrybox),GTK_WIDGET(hbox),FALSE,TRUE,0); 194 195 hbox = gtk_hbox_new(FALSE,0); 196 GtkWidget* bccLabel = gtk_label_new("Bcc:"); 197 gtk_widget_set_size_request (bccLabel, 110, -1); 198 gtk_misc_set_alignment (GTK_MISC (bccLabel),0.8,0.5); 199 GtkWidget* bccEntry = gtk_entry_new(); 200 gtk_widget_set_size_request (bccEntry, 300, -1); 201 gtk_box_pack_start (GTK_BOX(hbox),bccLabel,FALSE,TRUE,0); 202 gtk_box_pack_start (GTK_BOX(hbox),bccEntry,FALSE,TRUE,0); 203 gtk_box_pack_start (GTK_BOX(entrybox),hbox,FALSE,TRUE,0); 204 205 hbox = gtk_hbox_new(FALSE,0); 206 GtkWidget* subjectLabel = gtk_label_new("Subject:"); 207 gtk_widget_set_size_request (subjectLabel, 110, -1); 208 gtk_misc_set_alignment (GTK_MISC (subjectLabel),0.55,0.5); 209 GtkWidget* subjectEntry = gtk_entry_new(); 210 gtk_widget_set_size_request (subjectEntry, 300, -1); 211 gtk_box_pack_start (GTK_BOX(hbox),subjectLabel,FALSE,TRUE,0); 212 gtk_box_pack_start (GTK_BOX(hbox),subjectEntry,FALSE,TRUE,0); 213 gtk_box_pack_start (GTK_BOX(entrybox),hbox,FALSE,TRUE,0); 214 215 gtk_container_add (GTK_CONTAINER(alignment), GTK_WIDGET(entrybox)); 216 217 moko_fixed_set_cargo(self->entryarea,GTK_WIDGET(alignment)); 218 219 /* fill textview */ 220 /*self->textview = GTK_TEXT_VIEW(gtk_text_view_new ()); 221 GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 222 gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),0,0,0,50); 223 gtk_text_view_set_wrap_mode (self->textview,GTK_WRAP_CHAR); 224 gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(self->textview)); 225 226 gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(mokobox),FALSE,TRUE,0); 227 gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(self->entryarea),FALSE,TRUE,0); 228 gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(viewAlign),TRUE,TRUE,0);*/ 229 230 return GTK_WIDGET(self->detailbox); 91 return GTK_WIDGET(self->notebook); 231 92 } 232 93 233 94 GtkWidget* detail_area_mode_read (DetailArea* self) 234 95 { 235 /* create detail box */ 236 self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 237 238 ReadAttributes* readAttributes = self->readAttributes; 96 /* create detail box */ 97 self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 239 98 240 GtkWidget* headerbox = gtk_vbox_new(FALSE,0); 241 GtkWidget* hbox = gtk_hbox_new(FALSE,0); 242 readAttributes->from_label = gtk_label_new ("Alex"); 243 gtk_misc_set_alignment (GTK_MISC (readAttributes->from_label),1,0.5); 244 readAttributes->date_label = gtk_label_new ("Hello"); 245 gtk_misc_set_alignment (GTK_MISC (readAttributes->date_label),1,0.5); 246 247 GtkWidget* cellalign = gtk_alignment_new (0.5, 0.5, 1, 1); 248 gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5); 249 GtkWidget* label = gtk_label_new ("From:"); 250 gtk_misc_set_alignment (GTK_MISC (label),1,0.5); 251 gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); 252 gtk_box_pack_start(GTK_BOX(hbox),readAttributes->from_label,FALSE,FALSE,0); 253 gtk_container_add(GTK_CONTAINER(cellalign),hbox); 254 gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0); 99 ReadAttributes* readAttributes = self->readAttributes; 255 100 256 cellalign = gtk_alignment_new (0.5, 0.5, 1, 1); 257 gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5); 258 hbox = gtk_hbox_new(FALSE,0); 259 label = gtk_label_new ("Date:"); 260 gtk_misc_set_alignment (GTK_MISC (label),1,0.5); 261 gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); 262 gtk_box_pack_start(GTK_BOX(hbox),readAttributes->date_label,FALSE,FALSE,0); 263 gtk_container_add(GTK_CONTAINER(cellalign),hbox); 264 gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0); 101 GtkWidget* headerbox = gtk_vbox_new(FALSE,0); 102 GtkWidget* hbox = gtk_hbox_new(FALSE,0); 103 readAttributes->from_label = gtk_label_new ("Alex"); 104 gtk_misc_set_alignment (GTK_MISC (readAttributes->from_label),1,0.5); 105 readAttributes->date_label = gtk_label_new ("Hello"); 106 gtk_misc_set_alignment (GTK_MISC (readAttributes->date_label),1,0.5); 265 107 266 GtkWidget* hseparator = gtk_hseparator_new(); 267 GtkWidget* detailAlign = gtk_alignment_new(0, 0, 0, 0); 268 gtk_alignment_set_padding (GTK_ALIGNMENT(detailAlign), 10, 10, 10, 50); 269 /*GtkWidget* details = gtk_label_new("this is the detail");*/ 270 readAttributes->details = gtk_label_new( "Add your widget for showing details for the selected\n" 271 "\ndata entry here\n \n \n \n \n \n \n \nThis particular label\n \nis very long\n" 272 "\nto make the fullscreen\n \ntrigger more interesting\n \n \n"); 273 gtk_widget_set_size_request (readAttributes->details,420,-1); 274 gtk_label_set_line_wrap (GTK_LABEL(readAttributes->details),TRUE); 275 gtk_misc_set_alignment (GTK_MISC (readAttributes->details),0.1,0.5); 276 gtk_container_add (GTK_CONTAINER(detailAlign),readAttributes->details); 277 gtk_box_pack_start(GTK_BOX(self->detailbox),headerbox,FALSE,TRUE,0); 278 gtk_box_pack_start(GTK_BOX(self->detailbox),hseparator,FALSE,TRUE,0); 279 gtk_box_pack_start(GTK_BOX(self->detailbox),detailAlign,FALSE,TRUE,0); 280 281 return GTK_WIDGET(self->detailbox); 282 } 108 GtkWidget* cellalign = gtk_alignment_new (0.5, 0.5, 1, 1); 109 gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5); 110 GtkWidget* label = gtk_label_new ("From:"); 111 gtk_misc_set_alignment (GTK_MISC (label),1,0.5); 112 gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); 113 gtk_box_pack_start(GTK_BOX(hbox),readAttributes->from_label,FALSE,FALSE,0); 114 gtk_container_add(GTK_CONTAINER(cellalign),hbox); 115 gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0); 283 116 284 GtkWidget* detail_area_mode_membership (DetailArea* self) 285 { 117 cellalign = gtk_alignment_new (0.5, 0.5, 1, 1); 118 gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5); 119 hbox = gtk_hbox_new(FALSE,0); 120 label = gtk_label_new ("Date:"); 121 gtk_misc_set_alignment (GTK_MISC (label),1,0.5); 122 gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); 123 gtk_box_pack_start(GTK_BOX(hbox),readAttributes->date_label,FALSE,FALSE,0); 124 gtk_container_add(GTK_CONTAINER(cellalign),hbox); 125 gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0); 286 126 287 /* create detail box */ 288 self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 289 GtkWidget *title = gtk_label_new ("Message Membership"); 290 gtk_misc_set_alignment (GTK_MISC(title),0.4,1); 291 gtk_box_pack_start (GTK_BOX(self->detailbox),title,FALSE,TRUE,0); 127 GtkWidget* hseparator = gtk_hseparator_new(); 128 GtkWidget* detailAlign = gtk_alignment_new(0, 0, 0, 0); 129 gtk_alignment_set_padding (GTK_ALIGNMENT(detailAlign), 10, 10, 10, 50); 130 /*GtkWidget* details = gtk_label_new("this is the detail");*/ 131 readAttributes->details = gtk_label_new( "Add your widget for showing details for the selected\n" 132 "\ndata entry here\n \n \n \n \n \n \n \nThis particular label\n \nis very long\n" 133 "\nto make the fullscreen\n \ntrigger more interesting\n \n \n"); 134 gtk_widget_set_size_request (readAttributes->details,420,-1); 135 gtk_label_set_line_wrap (GTK_LABEL(readAttributes->details),TRUE); 136 gtk_misc_set_alignment (GTK_MISC (readAttributes->details),0.1,0.5); 137 gtk_container_add (GTK_CONTAINER(detailAlign),readAttributes->details); 138 gtk_box_pack_start(GTK_BOX(self->detailbox),headerbox,FALSE,TRUE,0); 139 gtk_box_pack_start(GTK_BOX(self->detailbox),hseparator,FALSE,TRUE,0); 140 gtk_box_pack_start(GTK_BOX(self->detailbox),detailAlign,FALSE,TRUE,0); 292 141 293 GSList *c; 294 GtkWidget *rdo_btn = NULL; 295 GSList *rdo_btn_group; 296 c = self->folderlist; 297 298 for (; c; c = g_slist_next(c) ) { 299 gchar* folder = (gchar*) c->data; 300 g_debug( "find folder '%s'", folder ); 301 if(!g_strcasecmp(folder,"Inbox")){ 302 rdo_btn = gtk_radio_button_new_with_label (NULL, folder); 303 rdo_btn_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rdo_btn)); 304 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rdo_btn), TRUE); 305 } 306 else 307 rdo_btn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rdo_btn), folder); 308 309 g_signal_connect_swapped (G_OBJECT(rdo_btn), 310 "released", 311 G_CALLBACK (on_mmode_rdo_btn_clicked), 312 c->data); 313 gtk_box_pack_start (GTK_BOX (self->detailbox), rdo_btn, FALSE, TRUE, 0); 314 } 315 316 return GTK_WIDGET(self->detailbox); 317 } 318 319 void detail_new_sms (DetailArea* self) 320 { 321 EditAttributes* editAttributes = self->editAttributes; 322 gtk_entry_set_text (GTK_ENTRY(editAttributes->toEntry),""); 323 GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editAttributes->txtView)); 324 gtk_text_buffer_set_text (buffer,"",0); 325 gtk_notebook_set_current_page (self->notebook,PAGE_EDIT_MODE); 142 return GTK_WIDGET(self->detailbox); 326 143 } 327 144 328 145 void detail_read_message (DetailArea* self, message* msg) 329 146 { 330 ReadAttributes* readAttributes = self->readAttributes; 331 if(msg != NULL) 332 { 333 gtk_label_set_text(GTK_LABEL(readAttributes->from_label), msg->name); 334 gtk_label_set_text(GTK_LABEL(readAttributes->date_label), msg->subject); 335 gtk_label_set_text(GTK_LABEL(readAttributes->details), msg->folder); 336 g_free(msg); 337 } 338 else 339 { 340 gtk_label_set_text(GTK_LABEL(readAttributes->from_label), ""); 341 gtk_label_set_text(GTK_LABEL(readAttributes->date_label), ""); 342 gtk_label_set_text(GTK_LABEL(readAttributes->details), "please select a message"); 343 } 344 gtk_notebook_set_current_page (self->notebook,PAGE_MODE_READ); 147 ReadAttributes* readAttributes = self->readAttributes; 148 if(msg != NULL) 149 { 150 gtk_label_set_text(GTK_LABEL(readAttributes->from_label), msg->name); 151 gtk_label_set_text(GTK_LABEL(readAttributes->date_label), msg->subject); 152 gtk_label_set_text(GTK_LABEL(readAttributes->details), msg->folder); 153 g_free(msg); 154 } 155 else 156 { 157 gtk_label_set_text(GTK_LABEL(readAttributes->from_label), ""); 158 gtk_label_set_text(GTK_LABEL(readAttributes->date_label), ""); 159 gtk_label_set_text(GTK_LABEL(readAttributes->details), "please select a message"); 160 } 161 162 gtk_notebook_set_current_page (self->notebook,PAGE_MODE_READ); 345 163 } 346 164 347 void detail_reply_message (DetailArea* self, message* msg)348 {349 EditAttributes* editAttributes = self->editAttributes;350 if(msg != NULL)351 {352 gtk_entry_set_text(GTK_ENTRY(editAttributes->toEntry), msg->name);353 g_free(msg);354 }355 GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editAttributes->txtView));356 gtk_text_buffer_set_text (buffer,"",0);357 gtk_notebook_set_current_page (self->notebook,PAGE_EDIT_MODE);358 }359 360 void detail_forward_message (DetailArea* self, message* msg)361 {362 EditAttributes* editAttributes = self->editAttributes;363 if(msg != NULL)364 {365 gtk_entry_set_text(GTK_ENTRY(editAttributes->toEntry), msg->name);366 g_free(msg);367 }368 GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editAttributes->txtView));369 gchar *fwdStr = g_strdup_printf("\n\n\n>%s",msg->content);370 gtk_text_buffer_set_text (buffer,fwdStr,strlen(fwdStr));371 gtk_notebook_set_current_page (self->notebook,PAGE_EDIT_MODE);372 } -
trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.h
r1451 r1516 26 26 #include <libmokoui/moko-tool-box.h> 27 27 #include <libmokoui/moko-fixed.h> 28 //#include "main.h"29 28 #include "message.h" 30 29 … … 38 37 #define DETAIL_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DETAIL_AREA, DetailAreaClass)) 39 38 40 typedef struct _Read_Attributes{ 39 typedef struct _Read_Attributes 40 { 41 41 GtkWidget* from_label; 42 42 GtkWidget* date_label; 43 43 GtkWidget* details; 44 }ReadAttributes; 44 } 45 ReadAttributes; 45 46 46 typedef struct _Edit_Attributes{ 47 typedef struct _Edit_Attributes 48 { 47 49 GtkWidget* sendBtn; 48 50 GtkWidget* addrBtn; 49 51 GtkWidget* toEntry; 50 52 GtkWidget* txtView; 51 }EditAttributes; 53 } 54 EditAttributes; 52 55 53 typedef struct _DetailArea{ 56 typedef struct _DetailArea 57 { 54 58 MokoDetailsWindow parent; 55 59 GtkNotebook* notebook; … … 61 65 ReadAttributes* readAttributes; 62 66 EditAttributes* editAttributes; 63 }DetailArea; 67 } 68 DetailArea; 64 69 65 typedef struct _DetailAreaClass{ 70 typedef struct _DetailAreaClass 71 { 66 72 MokoDetailsWindowClass parent_class; 67 }DetailAreaClass; 73 } 74 DetailAreaClass; 68 75 69 76 GType detail_area_get_type(); … … 71 78 GtkWidget* detail_area_get_notebook(DetailArea* self); 72 79 73 void detail_new_sms (DetailArea* self);74 80 void detail_read_message (DetailArea* self, message* msg); 75 void detail_reply_message (DetailArea* self, message* msg);76 void detail_forward_message (DetailArea* self, message* msg);77 81 78 82 G_END_DECLS -
trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.c
r911 r1516 34 34 foldersdb_dispose (GObject *object) 35 35 { 36 if (G_OBJECT_CLASS (foldersdb_parent_class)->dispose)37 G_OBJECT_CLASS (foldersdb_parent_class)->dispose (object);36 if (G_OBJECT_CLASS (foldersdb_parent_class)->dispose) 37 G_OBJECT_CLASS (foldersdb_parent_class)->dispose (object); 38 38 } 39 39 … … 41 41 foldersdb_finalize (GObject *object) 42 42 { 43 G_OBJECT_CLASS (foldersdb_parent_class)->finalize (object);43 G_OBJECT_CLASS (foldersdb_parent_class)->finalize (object); 44 44 } 45 45 … … 47 47 foldersdb_class_init (FoldersDBClass *klass) 48 48 { 49 g_debug( "foldersdb_class_init" );50 GObjectClass *object_class = G_OBJECT_CLASS (klass);49 g_debug( "foldersdb_class_init" ); 50 GObjectClass *object_class = G_OBJECT_CLASS (klass); 51 51 52 /* register private data */53 /*g_type_class_add_private (klass, sizeof (FoldersDBPrivate));*/52 /* register private data */ 53 /*g_type_class_add_private (klass, sizeof (FoldersDBPrivate));*/ 54 54 55 /* hook virtual methods */56 /* ... */55 /* hook virtual methods */ 56 /* ... */ 57 57 58 /* install properties */59 /* ... */58 /* install properties */ 59 /* ... */ 60 60 61 object_class->dispose = foldersdb_dispose;62 object_class->finalize = foldersdb_finalize;61 object_class->dispose = foldersdb_dispose; 62 object_class->finalize = foldersdb_finalize; 63 63 64 FILE* file = fopen( PKGDATADIR "/folderlist", "rw" );65 g_assert( file ); //FIXME error handling, if folder file is not present66 char line[256];67 char *elem;68 char *tok = "\n";64 FILE* file = fopen( PKGDATADIR "/folderlist", "rw" ); 65 g_assert( file ); //FIXME error handling, if folder file is not present 66 char line[256]; 67 char *elem; 68 char *tok = "\n"; 69 69 70 while( fgets(line, sizeof(line), file) )70 while( fgets(line, sizeof(line), file) ) 71 71 { 72 elem = g_strdup(strtok(line, tok));73 klass->folders = g_slist_append(klass->folders, elem);72 elem = g_strdup(strtok(line, tok)); 73 klass->folders = g_slist_append(klass->folders, elem); 74 74 } 75 75 76 fclose( file );76 fclose( file ); 77 77 } 78 78 79 79 static void 80 80 foldersdb_init (FoldersDB *self) 81 { 82 } 81 {} 83 82 84 83 FoldersDB* 85 84 foldersdb_new (void) 86 85 { 87 return g_object_new (TYPE_FOLDERSDB, NULL);86 return g_object_new (TYPE_FOLDERSDB, NULL); 88 87 } 89 88 90 89 GSList* foldersdb_get_folders(FoldersDB* self) 91 90 { 92 FoldersDBClass* klass = FOLDERSDB_GET_CLASS(self);93 return klass->folders;91 FoldersDBClass* klass = FOLDERSDB_GET_CLASS(self); 92 return klass->folders; 94 93 } 95 94 96 95 void foldersdb_update ( GSList* folderlist ) 97 96 { 98 /*FILE* file = g_fopen( PKGDATADIR "/folderlist", "w" );*/99 FILE* file = fopen( PKGDATADIR "/folderlist", "w" );100 g_assert( file );101 GSList* c;102 char *elem;97 /*FILE* file = g_fopen( PKGDATADIR "/folderlist", "w" );*/ 98 FILE* file = fopen( PKGDATADIR "/folderlist", "w" ); 99 g_assert( file ); 100 GSList* c; 101 char *elem; 103 102 104 for( c =folderlist; c; c=g_slist_next(c))105 {106 if(g_slist_next(c) != NULL)107 elem = g_strdup_printf( "%s\n", (char*)c->data);108 else109 elem = g_strdup(c->data);110 fputs(elem, file);111 }112 fclose( file );103 for( c =folderlist; c; c=g_slist_next(c)) 104 { 105 if(g_slist_next(c) != NULL) 106 elem = g_strdup_printf( "%s\n", (char*)c->data); 107 else 108 elem = g_strdup(c->data); 109 fputs(elem, file); 110 } 111 fclose( file ); 113 112 } 114 113 -
trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.h
r911 r1516 19 19 20 20 #ifndef __FOLDERsDB_H_ 21 #define __FOLDERsDB_H_ 21 #define __FOLDERsDB_H_ 22 22 23 23 #include <glib-object.h> … … 34 34 #define FOLDERSDB_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_FOLDERSDB, FoldersDBClass)) 35 35 36 typedef struct { 36 typedef struct 37 { 37 38 GObject parent; 38 } FoldersDB; 39 } 40 FoldersDB; 39 41 40 typedef struct { 42 typedef struct 43 { 41 44 GObjectClass parent_class; 42 45 GSList* folders; 43 } FoldersDBClass; 46 } 47 FoldersDBClass; 44 48 45 49 GType foldersdb_get_type (void); -
trunk/src/target/OM-2007/applications/openmoko-messages/src/main.c
r1452 r1516 23 23 #include <errno.h> 24 24 #include <signal.h> 25 #include <stdlib.h> 25 26 #include <string.h> 26 #include <stdlib.h> 27 #include <dbus/dbus.h> 28 #include <dbus/dbus-glib.h> 27 29 28 30 #include "main.h" … … 40 42 #include <gtk/gtk.h> 41 43 44 typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model, 45 GtkTreeIter *iter, 46 gpointer data); 47 42 48 gboolean init_dbus (MessengerData* d) 43 49 { 44 DBusError error;45 46 /* Get a connection to the session bus */47 dbus_error_init (&error);48 d->bus = dbus_bus_get (DBUS_BUS_SYSTEM, &error);49 50 if (!d->bus)51 { 52 g_warning ("Failed to connect to the D-BUS daemon: %s", error.message);53 return FALSE;54 } 55 56 if (dbus_error_is_set (&error))57 { 58 fprintf(stdout, "Connection Error (%s)\n", error.message);59 dbus_error_free (&error);60 } 61 62 if (NULL == d->bus)63 { 64 fprintf(stdout, "Connection Error: bus == NULL \n");65 exit (1);66 } 67 68 return TRUE;50 DBusError error; 51 52 /* Get a connection to the session bus */ 53 dbus_error_init (&error); 54 d->bus = dbus_bus_get (DBUS_BUS_SYSTEM, &error); 55 56 if (!d->bus) 57 { 58 g_warning ("Failed to connect to the D-BUS daemon: %s", error.message); 59 return FALSE; 60 } 61 62 if (dbus_error_is_set (&error)) 63 { 64 fprintf(stdout, "Connection Error (%s)\n", error.message); 65 dbus_error_free (&error); 66 } 67 68 if (NULL == d->bus) 69 { 70 fprintf(stdout, "Connection Error: bus == NULL \n"); 71 exit (1); 72 } 73 74 return TRUE; 69 75 } 70 76 71 77 int main( int argc, char** argv ) 72 78 { 73 g_debug( "openmoko-messenger starting up" );74 75 /* Initialize GTK+ */76 gtk_init( &argc, &argv );77 78 MessengerData* d = g_new ( MessengerData, 1);79 d->foldersdb = foldersdb_new();80 d->s_key = "";81 d->msg_num = 0;82 d->app = MOKO_APPLICATION (moko_application_get_instance());83 d->currentfolder = g_strdup("Inbox");84 g_set_application_name( "Messages" );85 86 if (init_dbus(d))87 g_debug("D-Bus initialize successfully");88 89 /* ui */90 setup_ui(d);91 92 /* disable mmitem if necessary*/93 update_folder_sensitive (d, d->folderlist);94 95 /* Set up this connection to work in a GLib event loop */96 dbus_connection_setup_with_g_main (d->bus, NULL);97 98 /* show everything and run main loop */99 gtk_window_set_decorated (GTK_WINDOW(d->window), FALSE);100 gtk_widget_show_all (GTK_WIDGET(d->window));101 gtk_main();102 103 return 0;79 g_debug( "openmoko-messenger starting up" ); 80 81 /* Initialize GTK+ */ 82 gtk_init( &argc, &argv ); 83 84 MessengerData* d = g_new ( MessengerData, 1); 85 d->foldersdb = foldersdb_new(); 86 d->s_key = ""; 87 d->msg_num = 0; 88 d->app = MOKO_APPLICATION (moko_application_get_instance()); 89 d->currentfolder = g_strdup("Inbox"); 90 g_set_application_name( "Messages" ); 91 92 if (init_dbus(d)) 93 g_debug("D-Bus initialize successfully"); 94 95 /* ui */ 96 setup_ui(d); 97 98 /* disable mmitem if necessary*/ 99 update_folder_sensitive (d, d->folderlist); 100 101 /* Set up this connection to work in a GLib event loop */ 102 dbus_connection_setup_with_g_main (d->bus, NULL); 103 104 /* show everything and run main loop */ 105 gtk_window_set_decorated (GTK_WINDOW(d->window), FALSE); 106 gtk_widget_show_all (GTK_WIDGET(d->window)); 107 gtk_main(); 108 109 return 0; 104 110 105 111 } … … 107 113 void update_folder_sensitive (MessengerData* d, GSList* folderlist) 108 114 { 109 if (g_slist_length (folderlist) > 5){ 110 gtk_widget_set_sensitive (d->mmitem, TRUE); 111 gtk_widget_set_sensitive (d->fnitem, TRUE); 112 } 113 else{ 114 gtk_widget_set_sensitive (d->mmitem, FALSE); 115 gtk_widget_set_sensitive (d->fnitem, FALSE); 115 if (g_slist_length (folderlist) > 5) 116 { 117 gtk_widget_set_sensitive (d->mmitem, TRUE); 118 gtk_widget_set_sensitive (d->fnitem, TRUE); 119 } 120 else 121 { 122 gtk_widget_set_sensitive (d->mmitem, FALSE); 123 gtk_widget_set_sensitive (d->fnitem, FALSE); 116 124 } 117 125 } … … 119 127 GtkWidget* reload_filter_menu (MessengerData* d, GSList* folderlist) 120 128 { 121 GSList *c; 122 GtkWidget* filtmenu; 123 124 filtmenu = gtk_menu_new(); 125 c = folderlist; 126 for (; c; c = g_slist_next(c) ){ 127 gchar* folder = (gchar*) c->data; 128 g_debug( "adding folder '%s'", folder ); 129 gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) ); 130 } 131 132 return filtmenu; 129 GSList *c; 130 GtkWidget* filtmenu; 131 132 filtmenu = gtk_menu_new(); 133 c = folderlist; 134 for (; c; c = g_slist_next(c) ) 135 { 136 gchar* folder = (gchar*) c->data; 137 g_debug( "adding folder '%s'", folder ); 138 gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) ); 139 } 140 141 return filtmenu; 133 142 } 134 143 135 144 void setup_ui( MessengerData* d ) 136 145 { 137 /* main window */ 138 d->window = MOKO_PANED_WINDOW(moko_paned_window_new()); 139 d->mmWin = NULL; 140 141 /* application menu */ 142 d->menu = gtk_menu_new(); 143 gtk_widget_show (d->menu); 144 d->mmitem = gtk_menu_item_new_with_label( "Message Membership" ); 145 d->fnitem = gtk_menu_item_new_with_label( "Folder Rename" ); 146 GtkWidget* accountitem = gtk_menu_item_new_with_label( "Account" ); 147 GtkWidget* helpitem = gtk_menu_item_new_with_label( "Help" ); 148 GtkWidget* sepitem = gtk_separator_menu_item_new(); 149 GtkWidget* closeitem = gtk_menu_item_new_with_label( "Close" ); 150 g_signal_connect( G_OBJECT(closeitem), "activate", G_CALLBACK(main_quit), d ); 151 g_signal_connect( G_OBJECT(d->mmitem), "activate", G_CALLBACK(cb_mmitem_activate), d ); 152 g_signal_connect( G_OBJECT(d->fnitem), "activate", G_CALLBACK(cb_fnitem_activate), d ); 153 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->mmitem ); 154 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->fnitem ); 155 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), accountitem ); 156 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), helpitem ); 157 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), sepitem ); 158 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), closeitem ); 159 moko_paned_window_set_application_menu( d->window, GTK_MENU(d->menu) ); 160 161 /* filter menu */ 162 d->filtmenu = gtk_menu_new(); 163 gtk_widget_show (d->filtmenu); 164 d->folderlist = foldersdb_get_folders( d->foldersdb ); 165 d->filtmenu = reload_filter_menu( d, d->folderlist ); 166 167 moko_paned_window_set_filter_menu( d->window, GTK_MENU(d->filtmenu) ); 168 GtkWidget* menubox = GTK_WIDGET(moko_paned_window_get_menubox(d->window)); 169 g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 170 171 /* connect close event */ 172 g_signal_connect( G_OBJECT(d->window), "delete_event", G_CALLBACK( main_quit ), d ); 173 174 /* set navagation area */ 175 populate_navigation_area( d ); 176 177 /* set toolbox */ 178 GtkWidget* newButton; 179 GtkWidget* modeButton; 180 GtkWidget* getmailButton; 181 GtkWidget* deleteButton; 182 183 GtkWidget* newMenu; 184 GtkWidget* modeMenu; 185 GtkWidget* deleteMenu; 186 187 GtkWidget* image; 188 189 /* set tool bar */ 190 d->toolbox = moko_tool_box_new_with_search(); 191 gtk_widget_show (d->toolbox); 192 GtkWidget* searchEntry = GTK_WIDGET (moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox))); 193 gtk_widget_show (searchEntry); 194 g_signal_connect( G_OBJECT(searchEntry), "changed", G_CALLBACK(cb_search_entry_changed), d ); 195 g_signal_connect_swapped ( G_OBJECT(d->toolbox), "searchbox_visible", G_CALLBACK(cb_search_on), d ); 196 g_signal_connect_swapped( G_OBJECT(d->toolbox), "searchbox_invisible", G_CALLBACK(cb_search_off), d ); 197 198 /* set action buttons*/ 199 deleteMenu = gtk_menu_new(); 200 GtkWidget* delMsgItem = gtk_image_menu_item_new_with_label( "Delete Message" ); 201 GtkWidget* delFolderItem = gtk_image_menu_item_new_with_label( "Delete Folder" ); 202 g_signal_connect( G_OBJECT(delFolderItem), "activate", G_CALLBACK(cb_delete_folder), d ); 203 g_signal_connect( G_OBJECT(delMsgItem), "activate", G_CALLBACK(cb_delete_message), d ); 204 205 gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delMsgItem) ); 206 gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delFolderItem) ); 207 gtk_widget_show_all (deleteMenu); 208 deleteButton = GTK_WIDGET (moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 209 image = gtk_image_new_from_file (PKGDATADIR "/Delete_Message.png"); 210 moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(deleteButton),image); 211 moko_pixmap_button_set_menu (MOKO_PIXMAP_BUTTON(deleteButton), GTK_MENU(deleteMenu)); 212 213 getmailButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 214 image = gtk_image_new_from_file (PKGDATADIR "/GetMail.png"); 215 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(getmailButton),image); 216 217 modeMenu = gtk_menu_new(); 218 GtkWidget* modeReadItem = gtk_image_menu_item_new_with_label( "Mode Read" ); 219 GtkWidget* modeReplyItem = gtk_image_menu_item_new_with_label( "Mode Reply" ); 220 GtkWidget* modeFwdItem = gtk_image_menu_item_new_with_label( "Mode Forward" ); 221 222 gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu),modeReadItem); 223 gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeReplyItem); 224 gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeFwdItem); 225 g_signal_connect( G_OBJECT(modeReadItem), "activate", G_CALLBACK(cb_mode_read), d ); 226 g_signal_connect( G_OBJECT(modeReplyItem), "activate", G_CALLBACK(cb_mode_reply), d ); 227 g_signal_connect( G_OBJECT(modeFwdItem), "activate", G_CALLBACK(cb_mode_forward), d ); 228 gtk_widget_show_all (modeMenu); 229 modeButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 230 image = gtk_image_new_from_file (PKGDATADIR "/Mode_Read.png"); 231 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(modeButton),image); 232 moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(modeButton), GTK_MENU(modeMenu) ); 233 234 newMenu = gtk_menu_new(); 235 GtkWidget* newMsgItem = gtk_image_menu_item_new_with_label("New SMS") ; 236 GtkWidget* newFolderItem = gtk_image_menu_item_new_with_label("New Folder") ; 237 GtkWidget* newMailItem = gtk_image_menu_item_new_with_label("New Mail") ; 238 239 gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMsgItem); 240 gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMailItem); 241 gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newFolderItem); 242 gtk_widget_show_all (newMenu); 243 g_signal_connect( G_OBJECT(newMsgItem), "activate", G_CALLBACK(cb_new_sms), d ); 244 g_signal_connect( G_OBJECT(newMailItem), "activate", G_CALLBACK(cb_new_mail), d ); 245 g_signal_connect( G_OBJECT(newFolderItem), "activate", G_CALLBACK(cb_new_folder), d ); 246 newButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 247 image = gtk_image_new_from_file (PKGDATADIR "/New_Mail.png"); 248 moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(newButton),image); 249 moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(newButton),GTK_MENU(newMenu) ); 250 251 moko_paned_window_add_toolbox( d->window, MOKO_TOOL_BOX(d->toolbox) ); 252 253 /* detail area */ 254 populate_detail_area (d); 255 256 /* Fix default "Filter Menu" bug*/ 257 d->currentfolder = g_strdup("Inbox"); 258 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 259 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 260 gtk_label_set_text (GTK_LABEL(menulabel),"Inbox"); 261 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 262 263 /* select the first column */ 264 gint index = 0; 265 GtkTreeSelection* tree_selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) ); 266 GtkTreePath *path = gtk_tree_path_new_from_indices( index, -1 ); 267 gtk_tree_selection_select_path( tree_selection, path ); 268 gtk_tree_view_set_cursor( GTK_TREE_VIEW(d->view), path, NULL, FALSE ); 269 gtk_widget_grab_focus (d->view); 146 /* main window */ 147 d->window = MOKO_PANED_WINDOW(moko_paned_window_new()); 148 d->mmWin = NULL; 149 150 /* application menu */ 151 d->menu = gtk_menu_new(); 152 gtk_widget_show (d->menu); 153 d->mmitem = gtk_menu_item_new_with_label( "Message Membership" ); 154 d->fnitem = gtk_menu_item_new_with_label( "Folder Rename" ); 155 GtkWidget* accountitem = gtk_menu_item_new_with_label( "Account" ); 156 GtkWidget* helpitem = gtk_menu_item_new_with_label( "Help" ); 157 GtkWidget* sepitem = gtk_separator_menu_item_new(); 158 GtkWidget* closeitem = gtk_menu_item_new_with_label( "Close" ); 159 g_signal_connect( G_OBJECT(closeitem), "activate", G_CALLBACK(main_quit), d ); 160 g_signal_connect( G_OBJECT(d->mmitem), "activate", G_CALLBACK(cb_mmitem_activate), d ); 161 g_signal_connect( G_OBJECT(d->fnitem), "activate", G_CALLBACK(cb_fnitem_activate), d ); 162 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->mmitem ); 163 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->fnitem ); 164 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), accountitem ); 165 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), helpitem ); 166 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), sepitem ); 167 gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), closeitem ); 168 moko_paned_window_set_application_menu( d->window, GTK_MENU(d->menu) ); 169 170 /* filter menu */ 171 d->filtmenu = gtk_menu_new(); 172 gtk_widget_show (d->filtmenu); 173 d->folderlist = foldersdb_get_folders( d->foldersdb ); 174 d->filtmenu = reload_filter_menu( d, d->folderlist ); 175 176 moko_paned_window_set_filter_menu( d->window, GTK_MENU(d->filtmenu) ); 177 GtkWidget* menubox = GTK_WIDGET(moko_paned_window_get_menubox(d->window)); 178 g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 179 180 /* connect close event */ 181 g_signal_connect( G_OBJECT(d->window), "delete_event", G_CALLBACK( main_quit ), d ); 182 183 /* set navagation area */ 184 populate_navigation_area( d ); 185 186 /* set toolbox */ 187 GtkWidget* newButton; 188 GtkWidget* modeButton; 189 GtkWidget* getmailButton; 190 GtkWidget* deleteButton; 191 192 GtkWidget* newMenu; 193 GtkWidget* modeMenu; 194 GtkWidget* deleteMenu; 195 196 GtkWidget* image; 197 198 /* set tool bar */ 199 d->toolbox = moko_tool_box_new_with_search(); 200 gtk_widget_show (d->toolbox); 201 GtkWidget* searchEntry = GTK_WIDGET (moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox))); 202 gtk_widget_show (searchEntry); 203 g_signal_connect( G_OBJECT(searchEntry), "changed", G_CALLBACK(cb_search_entry_changed), d ); 204 g_signal_connect_swapped ( G_OBJECT(d->toolbox), "searchbox_visible", G_CALLBACK(cb_search_on), d ); 205 g_signal_connect_swapped( G_OBJECT(d->toolbox), "searchbox_invisible", G_CALLBACK(cb_search_off), d ); 206 207 /* set action buttons*/ 208 deleteMenu = gtk_menu_new(); 209 GtkWidget* delMsgItem = gtk_image_menu_item_new_with_label( "Delete Message" ); 210 GtkWidget* delFolderItem = gtk_image_menu_item_new_with_label( "Delete Folder" ); 211 g_signal_connect( G_OBJECT(delFolderItem), "activate", G_CALLBACK(cb_delete_folder), d ); 212 g_signal_connect( G_OBJECT(delMsgItem), "activate", G_CALLBACK(cb_delete_message), d ); 213 214 gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delMsgItem) ); 215 gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delFolderItem) ); 216 gtk_widget_show_all (deleteMenu); 217 deleteButton = GTK_WIDGET (moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 218 image = gtk_image_new_from_file (PKGDATADIR "/Delete_Message.png"); 219 moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(deleteButton),image); 220 moko_pixmap_button_set_menu (MOKO_PIXMAP_BUTTON(deleteButton), GTK_MENU(deleteMenu)); 221 222 getmailButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 223 image = gtk_image_new_from_file (PKGDATADIR "/GetMail.png"); 224 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(getmailButton),image); 225 226 modeMenu = gtk_menu_new(); 227 GtkWidget* modeReadItem = gtk_image_menu_item_new_with_label( "Mode Read" ); 228 GtkWidget* modeReplyItem = gtk_image_menu_item_new_with_label( "Mode Reply" ); 229 GtkWidget* modeFwdItem = gtk_image_menu_item_new_with_label( "Mode Forward" ); 230 231 gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu),modeReadItem); 232 gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeReplyItem); 233 gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeFwdItem); 234 g_signal_connect( G_OBJECT(modeReadItem), "activate", G_CALLBACK(cb_mode_read), d ); 235 g_signal_connect( G_OBJECT(modeReplyItem), "activate", G_CALLBACK(cb_mode_reply), d ); 236 g_signal_connect( G_OBJECT(modeFwdItem), "activate", G_CALLBACK(cb_mode_forward), d ); 237 gtk_widget_show_all (modeMenu); 238 modeButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 239 image = gtk_image_new_from_file (PKGDATADIR "/Mode_Read.png"); 240 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(modeButton),image); 241 moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(modeButton), GTK_MENU(modeMenu) ); 242 243 newMenu = gtk_menu_new(); 244 GtkWidget* newMsgItem = gtk_image_menu_item_new_with_label("New SMS") ; 245 GtkWidget* newFolderItem = gtk_image_menu_item_new_with_label("New Folder") ; 246 GtkWidget* newMailItem = gtk_image_menu_item_new_with_label("New Mail") ; 247 248 gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMsgItem); 249 gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMailItem); 250 gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newFolderItem); 251 gtk_widget_show_all (newMenu); 252 g_signal_connect( G_OBJECT(newMsgItem), "activate", G_CALLBACK(cb_new_sms), d ); 253 g_signal_connect( G_OBJECT(newMailItem), "activate", G_CALLBACK(cb_new_mail), d ); 254 g_signal_connect( G_OBJECT(newFolderItem), "activate", G_CALLBACK(cb_new_folder), d ); 255 newButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 256 image = gtk_image_new_from_file (PKGDATADIR "/New_Mail.png"); 257 moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(newButton),image); 258 moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(newButton),GTK_MENU(newMenu) ); 259 260 moko_paned_window_add_toolbox( d->window, MOKO_TOOL_BOX(d->toolbox) ); 261 262 /* detail area */ 263 populate_detail_area (d); 264 265 /* Fix default "Filter Menu" bug*/ 266 d->currentfolder = g_strdup("Inbox"); 267 GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 268 GtkWidget* menulabel = GTK_BIN(menuitem)->child; 269 gtk_label_set_text (GTK_LABEL(menulabel),"Inbox"); 270 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 271 272 /* select the first column */ 273 gint index = 0; 274 GtkTreeSelection* tree_selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) ); 275 GtkTreePath *path = gtk_tree_path_new_from_indices( index, -1 ); 276 gtk_tree_selection_select_path( tree_selection, path ); 277 gtk_tree_view_set_cursor( GTK_TREE_VIEW(d->view), path, NULL, FALSE ); 278 gtk_widget_grab_focus (d->view); 279 280 /* temporary setting */ 281 GtkSettings* settings = gtk_settings_get_default(); 282 g_object_set(settings, 283 "gtk-theme-name","openmoko-standard", 284 NULL); 270 285 } 271 286 272 287 gboolean filter_visible_function (GtkTreeModel* model, GtkTreeIter* iter, MessengerData* d) 273 288 { 274 gchar* folder; 275 gchar* from; 276 gchar* subject; 277 278 gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1); 279 gtk_tree_model_get (model, iter, COLUMN_FROM, &from, -1); 280 gtk_tree_model_get (model, iter, COLUMN_SUBJECT, &subject, -1); 281 282 if (d->searchOn){ 283 if ((strlen(d->s_key) > 0) && !strcasestr(from, d->s_key) && !strcasestr(subject, d->s_key)) 284 return FALSE; 285 }else { 286 gtk_menu_set_active (GTK_MENU(d->filtmenu),0); 287 if(g_strcasecmp(folder,d->currentfolder)) 288 return FALSE; 289 } 290 291 return TRUE; 289 gchar* folder; 290 gchar* from; 291 gchar* subject; 292 293 gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1); 294 gtk_tree_model_get (model, iter, COLUMN_FROM, &from, -1); 295 gtk_tree_model_get (model, iter, COLUMN_SUBJECT, &subject, -1); 296 297 if (d->searchOn) 298 { 299 if ((strlen(d->s_key) > 0) && !strcasestr(from, d->s_key) && !strcasestr(subject, d->s_key)) 300 return FALSE; 301 } 302 else 303 { 304 gtk_menu_set_active (GTK_MENU(d->filtmenu),0); 305 if(g_strcasecmp(folder,d->currentfolder)) 306 return FALSE; 307 } 308 309 return TRUE; 292 310 } 293 311 294 312 void cell_data_func (GtkTreeViewColumn *col, 295 GtkCellRenderer *renderer,296 GtkTreeModel *model,297 GtkTreeIter *iter,298 gpointer user_data)299 { 300 gint status;301 gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1);302 303 if (status == UNREAD)304 g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL);305 else g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL);313 GtkCellRenderer *renderer, 314 GtkTreeModel *model, 315 GtkTreeIter *iter, 316 gpointer user_data) 317 { 318 gint status; 319 gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1); 320 321 if (status == UNREAD) 322 g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL); 323 else g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL); 306 324 } 307 325 308 326 void populate_navigation_area( MessengerData* d ) 309 327 { 310 guint i; 311 GdkPixbuf* icon = NULL; 312 GError* error = NULL; 313 GtkTreeIter iter; 314 315 d->liststore = gtk_list_store_new( NUM_COLS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING ); 316 d->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (d->liststore),NULL); 317 d->view = moko_tree_view_new_with_model (GTK_TREE_MODEL (d->filter)); 318 319 for (i = 0; i < G_N_ELEMENTS(names); ++i) { 320 gtk_list_store_append(d->liststore, &iter); 321 switch(states[i]) { 322 case UNREAD : icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Unread.png", &error);break; 323 case READ : icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error);break; 324 case REPLIED : icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Reply.png", &error);break; 325 case FORWARD : icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Forward.png", &error);break; 326 } 327 gtk_list_store_set(d->liststore, &iter, 328 COLUMN_ICON, icon, 329 COLUMN_FROM, names[i], 330 COLUMN_SUBJECT, subjects[i], 331 COLUMN_CONTENT, contents[i], 332 COLUMN_STATUS, states[i], 333 COLUMN_FOLDER, folders[i], 334 -1); 335 } 336 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (d->filter), 337 filter_visible_function, 338 d, 339 NULL); 340 GtkCellRenderer* ren; 341 GtkTreeViewColumn* column = gtk_tree_view_column_new(); 342 gtk_tree_view_column_set_title(column, "From"); 343 344 /* Add status picture */ 345 ren = gtk_cell_renderer_pixbuf_new(); 346 gtk_tree_view_column_pack_start(column, ren, FALSE); 347 gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL); 348 349 /* add message from name */ 350 ren = gtk_cell_renderer_text_new(); 351 gtk_tree_view_column_pack_start(column, ren, TRUE); 352 gtk_tree_view_column_set_attributes(column, ren, 353 "text", COLUMN_FROM, 354 NULL); 355 356 /* Bold if UNREAD */ 357 gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL); 358 moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column ); 359 360 ren = gtk_cell_renderer_text_new(); 361 column = gtk_tree_view_column_new(); 362 gtk_tree_view_column_set_title(column, "Subject"); 363 gtk_tree_view_column_pack_start(column, ren, TRUE); 364 gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL); 365 gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL); 366 moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column ); 367 368 GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) ); 369 g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(cb_cursor_changed), d ); 370 moko_paned_window_set_upper_pane( d->window, GTK_WIDGET(moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(d->view))) ); 328 guint i; 329 GdkPixbuf* icon = NULL; 330 GError* error = NULL; 331 GtkTreeIter iter; 332 333 d->liststore = gtk_list_store_new( NUM_COLS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING ); 334 d->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (d->liststore),NULL); 335 d->view = moko_tree_view_new_with_model (GTK_TREE_MODEL (d->filter)); 336 337 for (i = 0; i < G_N_ELEMENTS(names); ++i) 338 { 339 gtk_list_store_append(d->liststore, &iter); 340 switch(states[i]) 341 { 342 case UNREAD : 343 icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Unread.png", &error); 344 break; 345 case READ : 346 icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error); 347 break; 348 case REPLIED : 349 icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Reply.png", &error); 350 break; 351 case FORWARD : 352 icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Forward.png", &error); 353 break; 354 } 355 gtk_list_store_set(d->liststore, &iter, 356 COLUMN_ICON, icon, 357 COLUMN_FROM, names[i], 358 COLUMN_SUBJECT, subjects[i], 359 COLUMN_CONTENT, contents[i], 360 COLUMN_STATUS, states[i], 361 COLUMN_FOLDER, folders[i], 362 -1); 363 } 364 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (d->filter), 365 (GtkTreeModelFilterVisibleFunc)filter_visible_function, 366 d, 367 NULL); 368 GtkCellRenderer* ren; 369 GtkTreeViewColumn* column = gtk_tree_view_column_new(); 370 gtk_tree_view_column_set_title(column, "From"); 371 372 /* Add status picture */ 373 ren = gtk_cell_renderer_pixbuf_new(); 374 gtk_tree_view_column_pack_start(column, ren, FALSE); 375 gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL); 376 377 /* add message from name */ 378 ren = gtk_cell_renderer_text_new(); 379 gtk_tree_view_column_pack_start(column, ren, TRUE); 380 gtk_tree_view_column_set_attributes(column, ren, 381 "text", COLUMN_FROM, 382 NULL); 383 384 /* Bold if UNREAD */ 385 gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL); 386 moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column ); 387 388 ren = gtk_cell_renderer_text_new(); 389 column = gtk_tree_view_column_new(); 390 gtk_tree_view_column_set_title(column, "Subject"); 391 gtk_tree_view_column_pack_start(column, ren, TRUE); 392 gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL); 393 gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL); 394 moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column ); 395 396 GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) ); 397 g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(cb_cursor_changed), d ); 398 moko_paned_window_set_upper_pane( d->window, GTK_WIDGET(moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(d->view))) ); 371 399 } 372 400 373 401 void populate_detail_area( MessengerData* d ) 374 402 { 375 d->details = detail_area_new();376 gtk_widget_show (d->details);377 gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(d->details), detail_area_get_notebook(DETAIL_AREA(d->details)));378 moko_paned_window_set_lower_pane( d->window, GTK_WIDGET(moko_details_window_put_in_box(DETAIL_AREA(d->details))));403 d->details = detail_area_new(); 404 gtk_widget_show (d->details); 405 gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(d->details), detail_area_get_notebook(DETAIL_AREA(d->details))); 406 moko_paned_window_set_lower_pane( MOKO_PANED_WINDOW(d->window), GTK_WIDGET(moko_details_window_put_in_box(d->details))); 379 407 } 380 408 381 409 void main_quit(GtkMenuItem* item, MessengerData* d) 382 410 { 383 foldersdb_update (d->folderlist);384 send_signal_to_footer(d->bus,"");385 gtk_main_quit();386 } 387 411 foldersdb_update (d->folderlist); 412 send_signal_to_footer(d->bus,""); 413 gtk_main_quit(); 414 } 415 -
trunk/src/target/OM-2007/applications/openmoko-messages/src/main.h
r1452 r1516 27 27 #include <gtk/gtkliststore.h> 28 28 #include <gtk/gtktreemodelfilter.h> 29 #include <dbus/dbus-glib.h>30 29 #include <dbus/dbus.h> 31 30 … … 33 32 #include "detail-area.h" 34 33 35 typedef struct _MessengerData{ 34 typedef struct _MessengerData 35 { 36 36 MokoApplication* app; 37 37 MokoPanedWindow* window; … … 57 57 GtkWidget* frEntry; 58 58 DBusConnection *bus; 59 }MessengerData; 59 } 60 MessengerData; 60 61 61 62 enum { 62 COLUMN_ICON,63 COLUMN_FROM,64 COLUMN_SUBJECT,65 COLUMN_CONTENT,66 COLUMN_STATUS,67 COLUMN_FOLDER,68 NUM_COLS,63 COLUMN_ICON, 64 COLUMN_FROM, 65 COLUMN_SUBJECT, 66 COLUMN_CONTENT, 67 COLUMN_STATUS, 68 COLUMN_FOLDER, 69 NUM_COLS, 69 70 }; 70 71 71 72 enum { 72 PAGE_EDIT_MODE,73 PAGE_NEW_MAIL,74 PAGE_MODE_READ,75 PAGE_MODE_REPLY,76 PAGE_MODE_FORWARD,77 PAGE_MODE_MMSHIP,78 NUM_PAGES,73 PAGE_EDIT_MODE, 74 PAGE_NEW_MAIL, 75 PAGE_MODE_READ, 76 PAGE_MODE_REPLY, 77 PAGE_MODE_FORWARD, 78 PAGE_MODE_MMSHIP, 79 NUM_PAGES, 79 80 }; 80 81 -
trunk/src/target/OM-2007/applications/openmoko-messages/src/message.h
r911 r1516 22 22 #define _MESSAGE_H_ 23 23 24 typedef struct message{ 24 typedef struct message 25 { 25 26 gchar* name; 26 27 gchar* subject; … … 28 29 gchar* content; 29 30 gint status; 30 }message; 31 } 32 message; 31 33 32 34 enum { 33 UNREAD,34 READ,35 REPLIED,36 FORWARD,37 NUM_STATES,35 UNREAD, 36 READ, 37 REPLIED, 38 FORWARD, 39 NUM_STATES, 38 40 }; 39 41 40 const static gint states[] = { UNREAD, READ, UNREAD, UNREAD, FORWARD, 41 UNREAD, UNREAD, REPLIED, READ, UNREAD }; 42 const static gint states[] = 43 { 44 UNREAD, READ, UNREAD, UNREAD, FORWARD, 45 UNREAD, UNREAD, REPLIED, READ, UNREAD 46 }; 42 47 43 const static gchar *names[] = { "John B.", "Jane Z.", "Carl O.", "Owen P.", "Jeremy F.", 44 "Michael M.", "Ute D.", "Akira T.", "Thomas F.", "Matthew J."}; 48 const static gchar *names[] = 49 { "John B.", "Jane Z.", "Carl O.", "Owen P.", "Jeremy F.", 50 "Michael M.", "Ute D.", "Akira T.", "Thomas F.", "Matthew J." 51 }; 45 52 46 const static gchar *subjects[] = { "Hello Alex", "We need sms support", "I need u", "Help harald", "The gui is really cool", "Can't u see", "2:00 pm", "Bugzillia page", "Hi there", "Target support"}; 53 const static gchar *subjects[] = 54 { "Hello Alex", "We need sms support", "I need u", "Help harald", "The gui is really cool", "Can't u see", "2:00 pm", "Bugzillia page", "Hi there", "Target support" 55 }; 47 56 48 const static gchar *folders[] = { "Inbox", "Outbox", "Sent", "Inbox", "Inbox", 49 "Inbox", "Inbox", "Inbox", "Inbox", "Inbox"}; 57 const static gchar *folders[] = 58 { "Inbox", "Outbox", "Sent", "Inbox", "Inbox", 59 "Inbox", "Inbox", "Inbox", "Inbox", "Inbox" 60 }; 50 61 51 const static gchar *contents[] = {"Hello Alex", "We need sms support", "I need u", "Help harald", "The gui is really cool", "Can't u see", "2:00 pm", "Bugzillia page", "Hi there", "Target support"}; 62 const static gchar *contents[] = 63 {"Hello Alex", "We need sms support", "I need u", "Help harald", "The gui is really cool", "Can't u see", "2:00 pm", "Bugzillia page", "Hi there", "Target support" 64 }; 52 65 53 66 #endif -
trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.c
r1452 r1516 1 /* 1 /* 2 2 * sms-dialog-window.c 3 3 * … … 17 17 * Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $] 18 18 */ 19 19 20 20 #include "sms-dialog-window.h" 21 21 #include "main.h" … … 43 43 44 44 struct _SmsDialogWindowPrivate 45 {45 { 46 46 GtkWidget* vbox; 47 47 GtkWidget* hbox; … … 52 52 GtkWidget* closebutton; 53 53 GtkWidget* txtView; 54 GtkWidget* toEntry; 55 }; 54 }; 56 55 57 56 typedef struct _SmsDialogRunInfo 58 {57 { 59 58 SmsDialogWindow *dialog; 60 59 gint response_id; 61 60 GMainLoop *loop; 62 61 gboolean destroyed; 63 } SmsDialogRunInfo; 62 } 63 SmsDialogRunInfo; 64 64 65 65 static void sms_dialog_window_close(SmsDialogWindow* self); 66 66 gboolean on_sms_txtView_key_release_event (GtkWidget *widget, 67 GdkEventKey *event,68 SmsDialogWindow *self);67 GdkEventKey *event, 68 SmsDialogWindow *self); 69 69 70 70 … … 72 72 shutdown_loop (SmsDialogRunInfo *ri) 73 73 { 74 if (g_main_loop_is_running (ri->loop))75 g_main_loop_quit (ri->loop);74 if (g_main_loop_is_running (ri->loop)) 75 g_main_loop_quit (ri->loop); 76 76 } 77 77 … … 79 79 run_unmap_handler (SmsDialogWindow* dialog, gpointer data) 80 80 { 81 SmsDialogRunInfo *ri = data;82 83 shutdown_loop (ri);81 SmsDialogRunInfo *ri = data; 82 83 shutdown_loop (ri); 84 84 } 85 85 86 86 static void 87 87 run_response_handler (SmsDialogWindow* dialog, 88 gint response_id,89 gpointer data)90 { 91 SmsDialogRunInfo *ri;92 93 ri = data;94 95 ri->response_id = response_id;96 97 shutdown_loop (ri);88 gint response_id, 89 gpointer data) 90 { 91 SmsDialogRunInfo *ri; 92 93 ri = data; 94 95 ri->response_id = response_id; 96 97 shutdown_loop (ri); 98 98 } 99 99 … … 103 103 gpointer data) 104 104 { 105 SmsDialogRunInfo *ri = data;106 107 shutdown_loop (ri);108 109 return TRUE; /* Do not destroy */110 } 111 112 static void 113 run_destroy_handler (SmsDialogWindow* dialog, gpointer data)114 { 115 SmsDialogRunInfo *ri = data;116 117 /* shutdown_loop will be called by run_unmap_handler */118 119 ri->destroyed = TRUE;105 SmsDialogRunInfo *ri = data; 106 107 shutdown_loop (ri); 108 109 return TRUE; /* Do not destroy */ 110 } 111 112 static void 113 run_destroy_handler (SmsDialogWindow* dialog, gpointer data) 114 { 115 SmsDialogRunInfo *ri = data; 116 117 /* shutdown_loop will be called by run_unmap_handler */ 118 119 ri->destroyed = TRUE; 120 120 } 121 121 … … 124 124 sms_dialog_window_dispose(GObject* object) 125 125 { 126 if (G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose)127 G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose (object);126 if (G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose) 127 G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose (object); 128 128 } 129 129 … … 131 131 sms_dialog_window_finalize(GObject* object) 132 132 { 133 G_OBJECT_CLASS (sms_dialog_window_parent_class)->finalize (object);133 G_OBJECT_CLASS (sms_dialog_window_parent_class)->finalize (object); 134 134 } 135 135 … … 137 137 sms_dialog_window_class_init(SmsDialogWindowClass* klass) 138 138 { 139 GObjectClass* object_class = G_OBJECT_CLASS(klass);140 141 g_type_class_add_private (klass, sizeof(SmsDialogWindowPrivate));142 143 object_class->dispose = sms_dialog_window_dispose;144 object_class->finalize = sms_dialog_window_finalize;139 GObjectClass* object_class = G_OBJECT_CLASS(klass); 140 141 g_type_class_add_private (klass, sizeof(SmsDialogWindowPrivate)); 142 143 object_class->dispose = sms_dialog_window_dispose; 144 object_class->finalize = sms_dialog_window_finalize; 145 145 } 146 146 … … 148 148 sms_dialog_window_new(void) 149 149 { 150 return g_object_new(SMS_TYPE_DIALOG_WINDOW, NULL);150 return g_object_new(SMS_TYPE_DIALOG_WINDOW, NULL); 151 151 } 152 152 … … 154 154 sms_dialog_window_init(SmsDialogWindow* self) 155 155 { 156 MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() );157 if ( parent )158 { 159 gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) );156 MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() ); 157 if ( parent ) 158 { 159 gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) ); 160 160 #ifndef DEBUG_THIS_FILE 161 gtk_window_set_modal( GTK_WINDOW(self), TRUE );161 gtk_window_set_modal( GTK_WINDOW(self), TRUE ); 162 162 #endif 163 gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE );163 gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE ); 164 164 } 165 165 } … … 167 167 void sms_dialog_window_set_title(SmsDialogWindow* self, const gchar* title) 168 168 { 169 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);170 if ( !priv->titleLabel )171 { 172 priv->titleLabel = gtk_label_new( title );173 priv->hbox = gtk_hbox_new( FALSE, 0 );174 gtk_window_set_title( GTK_WINDOW(self), title );175 gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" );176 gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->titleLabel), TRUE, TRUE, 0 );177 PangoFontDescription* font_desc = pango_font_description_from_string ("Bold 10");178 priv->textInLabel = gtk_label_new( "160(1)" );179 gtk_widget_modify_font (priv->textInLabel, font_desc);180 gtk_widget_set_name( GTK_WIDGET(priv->textInLabel), "mokodialogwindow-title-label" );181 gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->textInLabel), FALSE, FALSE, 0);182 priv->eventbox = gtk_event_box_new();183 gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->hbox) );184 gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" );185 //FIXME get from theme186 gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 );187 gtk_widget_show( GTK_WIDGET(priv->titleLabel) );188 gtk_widget_show( GTK_WIDGET(priv->eventbox) );189 } 190 else191 { 192 gtk_label_set_text( GTK_LABEL(priv->titleLabel), title );193 gtk_window_set_title( GTK_WINDOW(self), title );194 } 195 if ( !priv->vbox )196 { 197 GtkWidget* image;198 GtkWidget* smsSendBtn;199 GtkWidget* emailBtn;200 201 priv->vbox = gtk_vbox_new( FALSE, 0 );202 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 );203 204 //Add toolbox205 priv->hbox = gtk_hbox_new( FALSE, 0 );206 priv->toolbox = moko_tool_box_new();207 GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox));208 priv->closebutton = moko_pixmap_button_new();209 image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png");210 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image);211 gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" );212 gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE,280);213 g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self );214 215 emailBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));216 gtk_widget_set_name( GTK_WIDGET(emailBtn), "mokostylusbutton-white" );217 image = gtk_image_new_from_file (PKGDATADIR "/Address.png");218 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(emailBtn),image);219 220 smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));221 gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" );222 image = gtk_image_new_from_file (PKGDATADIR "/Send.png");223 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image);224 225 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 );226 gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) );227 228 //Fill input entry229 GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));230 gtk_alignment_set_padding (alignment, 10, 10, 50, 10);231 GtkWidget* entrybox = gtk_hbox_new(FALSE,0);232 GtkWidget* toLabel = gtk_label_new("To:");233 gtk_widget_set_size_request (toLabel, 40, -1);234 gtk_misc_set_alignment (GTK_MISC (toLabel),1,0.5);235 priv->toEntry = gtk_entry_new();236 gtk_widget_set_size_request (priv->toEntry, 320, -1);237 gtk_box_pack_start (GTK_BOX(entrybox),toLabel,FALSE,TRUE,0);238 gtk_box_pack_start (GTK_BOX(entrybox),priv->toEntry,FALSE,TRUE,0);239 gtk_container_add (GTK_CONTAINER(alignment), entrybox);240 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 );241 242 /* fill textview */243 priv->txtView = gtk_text_view_new();244 GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1);245 gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30);246 GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL);247 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);248 GtkWidget* viewport = gtk_viewport_new (NULL, NULL);249 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(priv->txtView),GTK_WRAP_CHAR);250 gtk_container_add (GTK_CONTAINER(viewport), priv->txtView);251 gtk_container_add (GTK_CONTAINER (scolwin), viewport);252 gtk_container_add (GTK_CONTAINER(viewAlign),scolwin);253 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 );254 gtk_widget_show_all( GTK_WIDGET(priv->vbox) );255 256 g_signal_connect ( G_OBJECT(priv->txtView), "key_release_event",257 G_CALLBACK (on_sms_txtView_key_release_event),258 self);169 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 170 if ( !priv->titleLabel ) 171 { 172 priv->titleLabel = gtk_label_new( title ); 173 priv->hbox = gtk_hbox_new( FALSE, 0 ); 174 gtk_window_set_title( GTK_WINDOW(self), title ); 175 gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" ); 176 gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->titleLabel), TRUE, TRUE, 0 ); 177 PangoFontDescription* font_desc = pango_font_description_from_string ("Bold 10"); 178 priv->textInLabel = gtk_label_new( "160(1)" ); 179 gtk_widget_modify_font (priv->textInLabel, font_desc); 180 gtk_widget_set_name( GTK_WIDGET(priv->textInLabel), "mokodialogwindow-title-label" ); 181 gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->textInLabel), FALSE, FALSE, 0); 182 priv->eventbox = gtk_event_box_new(); 183 gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->hbox) ); 184 gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" ); 185 //FIXME get from theme 186 gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 ); 187 gtk_widget_show( GTK_WIDGET(priv->titleLabel) ); 188 gtk_widget_show( GTK_WIDGET(priv->eventbox) ); 189 } 190 else 191 { 192 gtk_label_set_text( GTK_LABEL(priv->titleLabel), title ); 193 gtk_window_set_title( GTK_WINDOW(self), title ); 194 } 195 if ( !priv->vbox ) 196 { 197 GtkWidget* image; 198 GtkWidget* smsSendBtn; 199 GtkWidget* emailBtn; 200 201 priv->vbox = gtk_vbox_new( FALSE, 0 ); 202 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 ); 203 204 //Add toolbox 205 priv->hbox = gtk_hbox_new( FALSE, 0 ); 206 priv->toolbox = moko_tool_box_new(); 207 GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox)); 208 priv->closebutton = moko_pixmap_button_new(); 209 image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png"); 210 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image); 211 gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" ); 212 gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE,280); 213 g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self ); 214 215 self->addressBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 216 gtk_widget_set_name( GTK_WIDGET(self->addressBtn ), "mokostylusbutton-white" ); 217 image = gtk_image_new_from_file (PKGDATADIR "/Address.png"); 218 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(self->addressBtn ),image); 219 220 smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 221 gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" ); 222 image = gtk_image_new_from_file (PKGDATADIR "/Send.png"); 223 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image); 224 225 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 ); 226 gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) ); 227 228 //Fill input entry 229 GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 230 gtk_alignment_set_padding (alignment, 10, 10, 50, 10); 231 GtkWidget* entrybox = gtk_hbox_new(FALSE,0); 232 GtkWidget* toLabel = gtk_label_new("To:"); 233 gtk_widget_set_size_request (toLabel, 40, -1); 234 gtk_misc_set_alignment (GTK_MISC (toLabel),1,0.5); 235 self->toEntry = gtk_entry_new(); 236 gtk_widget_set_size_request (self->toEntry, 320, -1); 237 gtk_box_pack_start (GTK_BOX(entrybox),toLabel,FALSE,TRUE,0); 238 gtk_box_pack_start (GTK_BOX(entrybox),self->toEntry,FALSE,TRUE,0); 239 gtk_container_add (GTK_CONTAINER(alignment), entrybox); 240 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 ); 241 242 /* fill textview */ 243 priv->txtView = gtk_text_view_new(); 244 GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 245 gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30); 246 GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL); 247 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); 248 GtkWidget* viewport = gtk_viewport_new (NULL, NULL); 249 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(priv->txtView),GTK_WRAP_CHAR); 250 gtk_container_add (GTK_CONTAINER(viewport), priv->txtView); 251 gtk_container_add (GTK_CONTAINER (scolwin), viewport); 252 gtk_container_add (GTK_CONTAINER(viewAlign),scolwin); 253 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 ); 254 gtk_widget_show_all( GTK_WIDGET(priv->vbox) ); 255 256 g_signal_connect ( G_OBJECT(priv->txtView), "key_release_event", 257 G_CALLBACK (on_sms_txtView_key_release_event), 258 self); 259 259 } 260 260 } … … 262 262 void mail_dialog_window_set_title(SmsDialogWindow* self, const gchar* title) 263 263 { 264 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 265 if ( !priv->titleLabel ) { 266 priv->titleLabel = gtk_label_new( title ); 267 gtk_window_set_title( GTK_WINDOW(self), title ); 268 gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" ); 269 priv->eventbox = gtk_event_box_new(); 270 gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->hbox) ); 271 gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" ); 272 //FIXME get from theme 273 gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 ); 274 gtk_container_add (GTK_CONTAINER(priv->eventbox), priv->titleLabel); 275 gtk_widget_show( GTK_WIDGET(priv->titleLabel) ); 276 gtk_widget_show( GTK_WIDGET(priv->eventbox) ); 277 } 278 else{ 279 gtk_label_set_text( GTK_LABEL(priv->titleLabel), title ); 280 gtk_window_set_title( GTK_WINDOW(self), title ); 281 } 282 if ( !priv->vbox ){ 283 GtkWidget* image; 284 GtkWidget* smsSendBtn; 285 GtkWidget* emailBtn; 286 GtkWidget* attachBtn; 287 288 priv->vbox = gtk_vbox_new( FALSE, 0 ); 289 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 ); 290 291 //Add toolbox 292 priv->hbox = gtk_hbox_new( FALSE, 0 ); 293 priv->toolbox = moko_tool_box_new(); 294 GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox)); 295 priv->closebutton = moko_pixmap_button_new(); 296 image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png"); 297 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image); 298 gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" ); 299 gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE, 200); 300 g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self ); 301 302 attachBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 303 gtk_widget_set_name( GTK_WIDGET(attachBtn), "mokostylusbutton-white" ); 304 image = gtk_image_new_from_file (PKGDATADIR "/Address.png"); 305 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(attachBtn),image); 306 307 emailBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 308 gtk_widget_set_name( GTK_WIDGET(emailBtn), "mokostylusbutton-white" ); 309 image = gtk_image_new_from_file (PKGDATADIR "/Attached.png"); 310 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(emailBtn),image); 311 312 smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 313 gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" ); 314 image = gtk_image_new_from_file (PKGDATADIR "/Send.png"); 315 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image); 316 317 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 ); 318 gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) ); 319 320 //Fill input entry 321 GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 322 gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 323 GtkWidget* hbox = gtk_hbox_new(FALSE,0); 324 PangoFontDescription* font_desc; 325 font_desc = pango_font_description_from_string ("Bold 12"); 326 GtkWidget* toLabel = gtk_label_new("To:"); 327 gtk_widget_modify_font (toLabel, font_desc); 328 gtk_widget_set_size_request (toLabel, 110, -1); 329 gtk_misc_set_alignment (GTK_MISC (toLabel),0.9,0.5); 330 priv->toEntry = gtk_entry_new(); 331 gtk_widget_set_size_request (priv->toEntry, 320, -1); 332 gtk_box_pack_start (GTK_BOX(hbox),toLabel,FALSE,TRUE,0); 333 gtk_box_pack_start (GTK_BOX(hbox),priv->toEntry,FALSE,TRUE,0); 334 gtk_container_add (GTK_CONTAINER(alignment), hbox); 335 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 ); 336 337 alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 338 gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 339 hbox = gtk_hbox_new(FALSE,0); 340 GtkWidget* ccLabel = gtk_label_new("CC:"); 341 font_desc = pango_font_description_from_string ("Bold 12"); 342 gtk_widget_set_size_request (ccLabel, 110, -1); 343 gtk_widget_modify_font (ccLabel, font_desc); 344 gtk_misc_set_alignment (GTK_MISC (ccLabel),0.9,0.5); 345 GtkWidget* ccEntry = gtk_entry_new(); 346 gtk_widget_set_size_request (ccEntry, 320, -1); 347 gtk_box_pack_start (GTK_BOX(hbox),ccLabel,FALSE,TRUE,0); 348 gtk_box_pack_start (GTK_BOX(hbox),ccEntry,FALSE,TRUE,0); 349 gtk_container_add (GTK_CONTAINER(alignment), hbox); 350 gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 351 352 alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 353 gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 354 hbox = gtk_hbox_new(FALSE,0); 355 GtkWidget* bccLabel = gtk_label_new("Bcc:"); 356 font_desc = pango_font_description_from_string ("Bold 12"); 357 gtk_widget_set_size_request (bccLabel, 110, -1); 358 gtk_widget_modify_font (bccLabel, font_desc); 359 gtk_misc_set_alignment (GTK_MISC (bccLabel),0.9,0.5); 360 GtkWidget* bccEntry = gtk_entry_new(); 361 gtk_widget_set_size_request (bccEntry, 320, -1); 362 gtk_box_pack_start (GTK_BOX(hbox),bccLabel,FALSE,TRUE,0); 363 gtk_box_pack_start (GTK_BOX(hbox),bccEntry,FALSE,TRUE,0); 364 gtk_container_add (GTK_CONTAINER(alignment), hbox); 365 gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 366 367 alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 368 gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 369 hbox = gtk_hbox_new(FALSE,0); 370 GtkWidget* subjectLabel = gtk_label_new("Subject:"); 371 font_desc = pango_font_description_from_string ("Bold 12"); 372 gtk_widget_modify_font (subjectLabel, font_desc); 373 gtk_widget_set_size_request (subjectLabel, 110, -1); 374 gtk_misc_set_alignment (GTK_MISC (subjectLabel),0.9,0.5); 375 GtkWidget* subjectEntry = gtk_entry_new(); 376 gtk_widget_set_size_request (subjectEntry, 320, -1); 377 gtk_box_pack_start (GTK_BOX(hbox),subjectLabel,FALSE,TRUE,0); 378 gtk_box_pack_start (GTK_BOX(hbox),subjectEntry,FALSE,TRUE,0); 379 gtk_container_add (GTK_CONTAINER(alignment), hbox); 380 gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 381 382 /* fill textview */ 383 GtkWidget* txtView = gtk_text_view_new(); 384 GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 385 gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30); 386 GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL); 387 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); 388 GtkWidget* viewport = gtk_viewport_new (NULL, NULL); 389 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(txtView),GTK_WRAP_CHAR); 390 gtk_container_add (GTK_CONTAINER(viewport), txtView); 391 gtk_container_add (GTK_CONTAINER (scolwin), viewport); 392 gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(scolwin)); 393 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 ); 394 gtk_widget_show_all( GTK_WIDGET(priv->vbox) ); 264 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 265 if ( !priv->titleLabel ) 266 { 267 priv->titleLabel = gtk_label_new( title ); 268 gtk_window_set_title( GTK_WINDOW(self), title ); 269 gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" ); 270 priv->eventbox = gtk_event_box_new(); 271 gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" ); 272 //FIXME get from theme 273 gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 ); 274 gtk_container_add (GTK_CONTAINER(priv->eventbox), priv->titleLabel); 275 gtk_widget_show( GTK_WIDGET(priv->titleLabel) ); 276 gtk_widget_show( GTK_WIDGET(priv->eventbox) ); 277 } 278 else 279 { 280 gtk_label_set_text( GTK_LABEL(priv->titleLabel), title ); 281 gtk_window_set_title( GTK_WINDOW(self), title ); 282 } 283 if ( !priv->vbox ) 284 { 285 GtkWidget* image; 286 GtkWidget* smsSendBtn; 287 GtkWidget* emailBtn; 288 289 priv->vbox = gtk_vbox_new( FALSE, 0 ); 290 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 ); 291 292 //Add toolbox 293 priv->hbox = gtk_hbox_new( FALSE, 0 ); 294 priv->toolbox = moko_tool_box_new(); 295 GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox)); 296 priv->closebutton = moko_pixmap_button_new(); 297 image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png"); 298 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image); 299 gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" ); 300 gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE, 200); 301 g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self ); 302 303 self->addressBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 304 gtk_widget_set_name( GTK_WIDGET(self->addressBtn), "mokostylusbutton-white" ); 305 image = gtk_image_new_from_file (PKGDATADIR "/Address.png"); 306 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(self->addressBtn),image); 307 308 emailBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 309 gtk_widget_set_name( GTK_WIDGET(emailBtn), "mokostylusbutton-white" ); 310 image = gtk_image_new_from_file (PKGDATADIR "/Attached.png"); 311 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(emailBtn),image); 312 313 smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 314 gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" ); 315 image = gtk_image_new_from_file (PKGDATADIR "/Send.png"); 316 moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image); 317 318 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 ); 319 gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) ); 320 321 //Fill input entry 322 GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 323 gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 324 GtkWidget* hbox = gtk_hbox_new(FALSE,0); 325 PangoFontDescription* font_desc; 326 font_desc = pango_font_description_from_string ("Bold 12"); 327 GtkWidget* toLabel = gtk_label_new("To:"); 328 gtk_widget_modify_font (toLabel, font_desc); 329 gtk_widget_set_size_request (toLabel, 110, -1); 330 gtk_misc_set_alignment (GTK_MISC (toLabel),0.9,0.5); 331 self->toEntry = gtk_entry_new(); 332 gtk_widget_set_size_request (self->toEntry, 320, -1); 333 gtk_box_pack_start (GTK_BOX(hbox),toLabel,FALSE,TRUE,0); 334 gtk_box_pack_start (GTK_BOX(hbox),self->toEntry,FALSE,TRUE,0); 335 gtk_container_add (GTK_CONTAINER(alignment), hbox); 336 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 ); 337 338 alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 339 gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 340 hbox = gtk_hbox_new(FALSE,0); 341 GtkWidget* ccLabel = gtk_label_new("CC:"); 342 font_desc = pango_font_description_from_string ("Bold 12"); 343 gtk_widget_set_size_request (ccLabel, 110, -1); 344 gtk_widget_modify_font (ccLabel, font_desc); 345 gtk_misc_set_alignment (GTK_MISC (ccLabel),0.9,0.5); 346 GtkWidget* ccEntry = gtk_entry_new(); 347 gtk_widget_set_size_request (ccEntry, 320, -1); 348 gtk_box_pack_start (GTK_BOX(hbox),ccLabel,FALSE,TRUE,0); 349 gtk_box_pack_start (GTK_BOX(hbox),ccEntry,FALSE,TRUE,0); 350 gtk_container_add (GTK_CONTAINER(alignment), hbox); 351 gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 352 353 alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 354 gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 355 hbox = gtk_hbox_new(FALSE,0); 356 GtkWidget* bccLabel = gtk_label_new("Bcc:"); 357 font_desc = pango_font_description_from_string ("Bold 12"); 358 gtk_widget_set_size_request (bccLabel, 110, -1); 359 gtk_widget_modify_font (bccLabel, font_desc); 360 gtk_misc_set_alignment (GTK_MISC (bccLabel),0.9,0.5); 361 GtkWidget* bccEntry = gtk_entry_new(); 362 gtk_widget_set_size_request (bccEntry, 320, -1); 363 gtk_box_pack_start (GTK_BOX(hbox),bccLabel,FALSE,TRUE,0); 364 gtk_box_pack_start (GTK_BOX(hbox),bccEntry,FALSE,TRUE,0); 365 gtk_container_add (GTK_CONTAINER(alignment), hbox); 366 gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 367 368 alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 369 gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 370 hbox = gtk_hbox_new(FALSE,0); 371 GtkWidget* subjectLabel = gtk_label_new("Subject:"); 372 font_desc = pango_font_description_from_string ("Bold 12"); 373 gtk_widget_modify_font (subjectLabel, font_desc); 374 gtk_widget_set_size_request (subjectLabel, 110, -1); 375 gtk_misc_set_alignment (GTK_MISC (subjectLabel),0.9,0.5); 376 GtkWidget* subjectEntry = gtk_entry_new(); 377 gtk_widget_set_size_request (subjectEntry, 320, -1); 378 gtk_box_pack_start (GTK_BOX(hbox),subjectLabel,FALSE,TRUE,0); 379 gtk_box_pack_start (GTK_BOX(hbox),subjectEntry,FALSE,TRUE,0); 380 gtk_container_add (GTK_CONTAINER(alignment), hbox); 381 gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 382 383 /* fill textview */ 384 GtkWidget* txtView = gtk_text_view_new(); 385 GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 386 gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30); 387 GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL); 388 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); 389 GtkWidget* viewport = gtk_viewport_new (NULL, NULL); 390 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(txtView),GTK_WRAP_CHAR); 391 gtk_container_add (GTK_CONTAINER(viewport), txtView); 392 gtk_container_add (GTK_CONTAINER (scolwin), viewport); 393 gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(scolwin)); 394 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 ); 395 gtk_widget_show_all( GTK_WIDGET(priv->vbox) ); 395 396 } 396 397 } … … 398 399 void sms_dialog_window_set_contents(SmsDialogWindow* self, GtkWidget* contents) 399 400 { 400 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);401 g_return_if_fail( priv->vbox );402 gtk_box_pack_start( GTK_BOX(priv->vbox), contents, TRUE, TRUE, 0 );401 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 402 g_return_if_fail( priv->vbox ); 403 gtk_box_pack_start( GTK_BOX(priv->vbox), contents, TRUE, TRUE, 0 ); 403 404 } 404 405 405 406 static void sms_dialog_window_close(SmsDialogWindow* self) 406 407 { 407 /* Synthesize delete_event to close dialog. */ 408 409 GtkWidget *widget = GTK_WIDGET(self); 410 GdkEvent *event; 411 412 event = gdk_event_new( GDK_DELETE ); 413 414 event->any.window = g_object_ref(widget->window); 415 event->any.send_event = TRUE; 416 417 gtk_main_do_event( event ); 418 gdk_event_free( event ); 419 } 420 421 guint sms_dialog_window_run(SmsDialogWindow* dialog) 422 { 423 SmsDialogRunInfo ri = { NULL, GTK_RESPONSE_NONE, NULL, FALSE }; 424 gboolean was_modal; 425 gulong response_handler; 426 gulong unmap_handler; 427 gulong destroy_handler; 428 gulong delete_handler; 429 430 g_return_val_if_fail (SMS_IS_DIALOG_WINDOW(dialog), -1); 431 432 g_object_ref (dialog); 433 434 #ifndef DEBUG_THIS_FILE 435 was_modal = GTK_WINDOW (dialog)->modal; 436 if (!was_modal) 437 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); 438 #endif 439 440 if (!GTK_WIDGET_VISIBLE (dialog)) 441 gtk_widget_show (GTK_WIDGET (dialog)); 442 443 response_handler = 444 g_signal_connect (dialog, 445 "response", 446 G_CALLBACK (run_response_handler), 447 &ri); 448 449 unmap_handler = 450 g_signal_connect (dialog, 451 "unmap", 452 G_CALLBACK (run_unmap_handler), 453 &ri); 454 455 delete_handler = 456 g_signal_connect (dialog, 457 "delete-event", 458 G_CALLBACK (run_delete_handler), 459 &ri); 460 461 destroy_handler = 462 g_signal_connect (dialog, 463 "destroy", 464 G_CALLBACK (run_destroy_handler), 465 &ri); 466 467 ri.loop = g_main_loop_new (NULL, FALSE); 468 469 GDK_THREADS_LEAVE (); 470 g_main_loop_run (ri.loop); 471 GDK_THREADS_ENTER (); 472 473 g_main_loop_unref (ri.loop); 474 ri.loop = NULL; 475 476 if (!ri.destroyed) 477 { 478 if (!was_modal) 479 gtk_window_set_modal (GTK_WINDOW(dialog), FALSE); 480 481 g_signal_handler_disconnect (dialog, response_handler); 482 g_signal_handler_disconnect (dialog, unmap_handler); 483 g_signal_handler_disconnect (dialog, delete_handler); 484 g_signal_handler_disconnect (dialog, destroy_handler); 485 } 486 487 g_object_unref (dialog); 488 489 return ri.response_id; 408 /* Synthesize delete_event to close dialog. */ 409 410 GtkWidget *widget = GTK_WIDGET(self); 411 GdkEvent *event; 412 413 event = gdk_event_new( GDK_DELETE ); 414 415 event->any.window = g_object_ref(widget->window); 416 event->any.send_event = TRUE; 417 418 gtk_main_do_event( event ); 419 gdk_event_free( event ); 490 420 } 491 421 492 422 void sms_dialog_reply_message(SmsDialogWindow* self, message* msg) 493 423 { 494 g_assert (msg != NULL);495 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);496 gtk_entry_set_text (GTK_ENTRY(priv->toEntry), msg->name);497 gtk_widget_grab_focus (priv->txtView);424 g_assert (msg != NULL); 425 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 426 gtk_entry_set_text (GTK_ENTRY(self->toEntry), msg->name); 427 gtk_widget_grab_focus (priv->txtView); 498 428 } 499 429 500 430 void sms_dialog_forward_message(SmsDialogWindow* self, message* msg) 501 431 { 502 g_assert (msg != NULL);503 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);504 gtk_entry_set_text (GTK_ENTRY(priv->toEntry), msg->name);505 g_assert (priv->txtView != NULL);506 GtkTextBuffer* buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView));507 gchar* text = g_strdup_printf("\n\n\n>%s",msg->content);508 gtk_text_buffer_set_text (buffer, text, strlen(text));509 gtk_widget_grab_focus (priv->txtView);432 g_assert (msg != NULL); 433 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 434 gtk_entry_set_text (GTK_ENTRY(self->toEntry), msg->name); 435 g_assert (priv->txtView != NULL); 436 GtkTextBuffer* buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView)); 437 gchar* text = g_strdup_printf("\n\n\n>%s",msg->content); 438 gtk_text_buffer_set_text (buffer, text, strlen(text)); 439 gtk_widget_grab_focus (priv->txtView); 510 440 } 511 441 512 442 gboolean on_sms_txtView_key_release_event (GtkWidget *widget, 513 443 GdkEventKey *event, 514 SmsDialogWindow *self) 515 { 516 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 517 GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView)); 518 gint n = 160 - gtk_text_buffer_get_char_count(buffer)%160; 519 gint m = gtk_text_buffer_get_char_count(buffer)/160 + 1; 520 gtk_label_set_text(GTK_LABEL(priv->textInLabel),g_strdup_printf("%d(%d)",n,m)); 521 return FALSE; 522 } 523 444 SmsDialogWindow *self) 445 { 446 SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 447 GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView)); 448 gint n = 160 - gtk_text_buffer_get_char_count(buffer)%160; 449 gint m = gtk_text_buffer_get_char_count(buffer)/160 + 1; 450 gtk_label_set_text(GTK_LABEL(priv->textInLabel),g_strdup_printf("%d(%d)",n,m)); 451 return FALSE; 452 } 453 454 -
trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.h
r911 r1516 1 /* 1 /* 2 2 * sms-dialog-window.h 3 3 * … … 17 17 * Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $] 18 18 */ 19 19 20 20 #ifndef _SMS_DIALOG_WINDOW_H_ 21 21 #define _SMS_DIALOG_WINDOW_H_ … … 36 36 #define SMS_DIALOG_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SMS_TYPE_DIALOG_WINDOW, SmsDialogWindowClass)) 37 37 38 typedef struct { 39 MokoWindow parent; 40 } SmsDialogWindow; 38 typedef struct 39 { 40 MokoWindow parent; 41 GtkWidget* addressBtn; 42 GtkWidget* toEntry; 43 } 44 SmsDialogWindow; 41 45 42 typedef struct { 43 MokoWindowClass parent_class; 44 } SmsDialogWindowClass; 46 typedef struct 47 { 48 MokoWindowClass parent_class; 49 } 50 SmsDialogWindowClass; 45 51 46 52 GType sms_dialog_window_get_type(); … … 52 58 void sms_dialog_reply_message(SmsDialogWindow* self, message* msg); 53 59 void sms_dialog_forward_message(SmsDialogWindow* self, message* msg); 54 guint sms_dialog_window_run(SmsDialogWindow* self);55 60 56 61 G_END_DECLS -
trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.c
r1452 r1516 1 /* 1 /* 2 2 * sms-membership-window.c 3 3 * … … 17 17 * Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $] 18 18 */ 19 19 20 20 #include "sms-membership-window.h" 21 21 #include <libmokoui/moko-pixmap-button.h> … … 37 37 38 38 typedef struct _SmsMembershipWindowPrivate SmsMembershipWindowPrivate; 39 typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model, 40 GtkTreeIter *iter, 41 gpointer data); 39 42 40 43 struct _SmsMembershipWindowPrivate 41 {44 { 42 45 GtkWidget* vbox; 43 46 GtkWidget* hbox; … … 57 60 GtkListStore* liststore; 58 61 GSList* rdoBtnList; 59 };62 }; 60 63 61 64 typedef struct _SmsMembershipRunInfo 62 {65 { 63 66 SmsMembershipWindow *dialog; 64 67 gint response_id; 65 68 GMainLoop *loop; 66 69 gboolean destroyed; 67 } SmsMembershipRunInfo; 70 } 71 SmsMembershipRunInfo; 68 72 69 73 static void sms_membership_window_close(SmsMembershipWindow* self); … … 79 83 sms_membership_window_dispose(GObject* object) 80 84 { 81 if (G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose)82 G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose (object);85 if (G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose) 86 G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose (object); 83 87 } 84 88 … … 86 90 sms_membership_window_finalize(GObject* object) 87 91 { 88 G_OBJECT_CLASS (sms_membership_window_parent_class)->finalize (object);92 G_OBJECT_CLASS (sms_membership_window_parent_class)->finalize (object); 89 93 } 90 94 … … 92 96 sms_membership_window_class_init(SmsMembershipWindowClass* klass) 93 97 { 94 GObjectClass* object_class = G_OBJECT_CLASS(klass);95 96 g_type_class_add_private (klass, sizeof(SmsMembershipWindowPrivate));97 98 object_class->dispose = sms_membership_window_dispose;99 object_class->finalize = sms_membership_window_finalize;98 GObjectClass* object_class = G_OBJECT_CLASS(klass); 99 100 g_type_class_add_private (klass, sizeof(SmsMembershipWindowPrivate)); 101 102 object_class->dispose = sms_membership_window_dispose; 103 object_class->finalize = sms_membership_window_finalize; 100 104 } 101 105 … … 103 107 sms_membership_window_new(void) 104 108 { 105 return GTK_WIDGET(g_object_new(SMS_TYPE_MEMBERSHIP_WINDOW, NULL));109 return GTK_WIDGET(g_object_new(SMS_TYPE_MEMBERSHIP_WINDOW, NULL)); 106 110 } 107 111 108 112 static void sms_membership_window_close(SmsMembershipWindow* self) 109 113 { 110 GtkWidget *widget = GTK_WIDGET(self);111 GdkEvent *event;112 113 event = gdk_event_new( GDK_DELETE );114 115 event->any.window = g_object_ref(widget->window);116 event->any.send_event = TRUE;117 118 gtk_main_do_event( event );119 gdk_event_free( event );114 GtkWidget *widget = GTK_WIDGET(self); 115 GdkEvent *event; 116 117 event = gdk_event_new( GDK_DELETE ); 118 119 event->any.window = g_object_ref(widget->window); 120 event->any.send_event = TRUE; 121 122 gtk_main_do_event( event ); 123 gdk_event_free( event ); 120 124 } 121 125 122 126 gboolean membership_filter_changed(GtkWidget* widget, gchar* text, SmsMembershipWindow* self) 123 127 { 124 g_debug("changed to %s folder",text); 125 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 126 self->currentfolder = g_strdup(text); 127 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter)); 128 129 return FALSE; 130 } 131 132 void sms_membership_window_show (SmsMembershipWindow* self){ 133 GtkWidget *widget = GTK_WIDGET(self); 134 gtk_widget_show (widget); 128 g_debug("changed to %s folder",text); 129 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 130 self->currentfolder = g_strdup(text); 131 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter)); 132 133 return FALSE; 134 } 135 136 void sms_membership_window_show (SmsMembershipWindow* self) 137 { 138 GtkWidget *widget = GTK_WIDGET(self); 139 gtk_widget_show (widget); 135 140 } 136 141 … … 138 143 sms_membership_window_init(SmsMembershipWindow* self) 139 144 { 140 MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() );141 if ( parent )142 { 143 gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) );145 MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() ); 146 if ( parent ) 147 { 148 gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) ); 144 149 #ifndef DEBUG_THIS_FILE 145 gtk_window_set_modal( GTK_WINDOW(self), TRUE );150 gtk_window_set_modal( GTK_WINDOW(self), TRUE ); 146 151 #endif 147 gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE );148 } 149 150 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);151 self->currentfolder = g_strdup("Inbox");152 //Set title153 priv->liststore = NULL;154 priv->vbox = gtk_vbox_new( FALSE, 0 );155 156 priv->menubox = moko_menu_box_new();157 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->menubox), FALSE, FALSE, 0 );158 159 priv->titleLabel = gtk_label_new( "Message Membership" );160 gtk_window_set_title( GTK_WINDOW(self), "Message Membership" );161 gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" );162 priv->eventbox = gtk_event_box_new();163 gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->titleLabel) );164 gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" );165 166 //FIXME get from theme167 gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 );168 gtk_widget_show( GTK_WIDGET(priv->titleLabel) );169 gtk_widget_show( GTK_WIDGET(priv->eventbox) );170 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 );171 priv->folderbox = gtk_vbox_new( FALSE, 0 );172 173 //Set folder list174 GtkWidget* closebox = gtk_hbox_new( FALSE, 0 );175 PangoFontDescription* font_desc;176 font_desc = pango_font_description_from_string ("bold 12");177 priv->fromLabel = gtk_label_new( "AlexTang" );178 gtk_widget_modify_font (priv->fromLabel, font_desc);179 gtk_widget_set_size_request (priv->fromLabel, 250, -1);180 gtk_misc_set_alignment (GTK_MISC(priv->fromLabel), 0, 0.5);181 priv->subjectLabel = gtk_label_new( "Subject" );182 gtk_widget_set_size_request (priv->subjectLabel, 250, -1);183 gtk_misc_set_alignment (GTK_MISC(priv->subjectLabel), 0, 0.5);184 185 //set header box: two labels and a closebutton186 GtkWidget* headerbox = gtk_vbox_new( FALSE, 0 );187 gtk_box_set_spacing (GTK_BOX(headerbox),5);188 priv->closebutton = gtk_button_new_with_label ("Close");189 gtk_widget_set_size_request (priv->closebutton, -1, 38);190 GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));191 gtk_alignment_set_padding (alignment, 5, 5, 5, 5);192 gtk_container_add (GTK_CONTAINER(alignment), priv->closebutton);193 GtkWidget* hsep = gtk_hseparator_new();194 gtk_widget_set_size_request (hsep, -1, 3);195 196 //set folder box alignment fbAlign197 GtkAlignment* fbAlign = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));198 gtk_alignment_set_padding (fbAlign, 5, 5, 30, 30);199 gtk_container_add( GTK_CONTAINER(fbAlign), GTK_WIDGET(priv->folderbox) );200 201 gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->fromLabel), TRUE, TRUE, 0 );202 gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->subjectLabel), TRUE, TRUE, 0 );203 gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(headerbox), TRUE, FALSE, 0 );204 gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(alignment), FALSE, FALSE, 0 );205 gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(closebox), FALSE, FALSE, 0 );206 gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(hsep), FALSE, FALSE, 0 );207 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(fbAlign), FALSE, FALSE, 0 );208 209 gtk_widget_show_all( GTK_WIDGET(priv->vbox) );210 gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) );211 g_signal_connect_swapped ( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_membership_window_close), self );212 g_signal_connect( G_OBJECT(priv->menubox), "filter_changed", G_CALLBACK(membership_filter_changed), self );213 152 gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE ); 153 } 154 155 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 156 self->currentfolder = g_strdup("Inbox"); 157 //Set title 158 priv->liststore = NULL; 159 priv->vbox = gtk_vbox_new( FALSE, 0 ); 160 161 priv->menubox = moko_menu_box_new(); 162 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->menubox), FALSE, FALSE, 0 ); 163 164 priv->titleLabel = gtk_label_new( "Message Membership" ); 165 gtk_window_set_title( GTK_WINDOW(self), "Message Membership" ); 166 gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" ); 167 priv->eventbox = gtk_event_box_new(); 168 gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->titleLabel) ); 169 gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" ); 170 171 //FIXME get from theme 172 gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 ); 173 gtk_widget_show( GTK_WIDGET(priv->titleLabel) ); 174 gtk_widget_show( GTK_WIDGET(priv->eventbox) ); 175 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 ); 176 priv->folderbox = gtk_vbox_new( FALSE, 0 ); 177 178 //Set folder list 179 GtkWidget* closebox = gtk_hbox_new( FALSE, 0 ); 180 PangoFontDescription* font_desc; 181 font_desc = pango_font_description_from_string ("bold 12"); 182 priv->fromLabel = gtk_label_new( "AlexTang" ); 183 gtk_widget_modify_font (priv->fromLabel, font_desc); 184 gtk_widget_set_size_request (priv->fromLabel, 250, -1); 185 gtk_misc_set_alignment (GTK_MISC(priv->fromLabel), 0, 0.5); 186 priv->subjectLabel = gtk_label_new( "Subject" ); 187 gtk_widget_set_size_request (priv->subjectLabel, 250, -1); 188 gtk_misc_set_alignment (GTK_MISC(priv->subjectLabel), 0, 0.5); 189 190 //set header box: two labels and a closebutton 191 GtkWidget* headerbox = gtk_vbox_new( FALSE, 0 ); 192 gtk_box_set_spacing (GTK_BOX(headerbox),5); 193 priv->closebutton = gtk_button_new_with_label ("Close"); 194 gtk_widget_set_size_request (priv->closebutton, -1, 38); 195 GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 196 gtk_alignment_set_padding (alignment, 5, 5, 5, 5); 197 gtk_container_add (GTK_CONTAINER(alignment), priv->closebutton); 198 GtkWidget* hsep = gtk_hseparator_new(); 199 gtk_widget_set_size_request (hsep, -1, 3); 200 201 //set folder box alignment fbAlign 202 GtkAlignment* fbAlign = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 203 gtk_alignment_set_padding (fbAlign, 5, 5, 30, 30); 204 gtk_container_add( GTK_CONTAINER(fbAlign), GTK_WIDGET(priv->folderbox) ); 205 206 gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->fromLabel), TRUE, TRUE, 0 ); 207 gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->subjectLabel), TRUE, TRUE, 0 ); 208 gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(headerbox), TRUE, FALSE, 0 ); 209 gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(alignment), FALSE, FALSE, 0 ); 210 gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(closebox), FALSE, FALSE, 0 ); 211 gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(hsep), FALSE, FALSE, 0 ); 212 gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(fbAlign), FALSE, FALSE, 0 ); 213 214 gtk_widget_show_all( GTK_WIDGET(priv->vbox) ); 215 gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) ); 216 g_signal_connect_swapped ( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_membership_window_close), self ); 217 g_signal_connect( G_OBJECT(priv->menubox), "filter_changed", G_CALLBACK(membership_filter_changed), self ); 218 214 219 } 215 220 216 221 void membeship_rdo_btn_clicked ( GtkButton* button, SmsMembershipWindow* self) 217 222 { 218 GtkTreeModel* model; 219 GtkTreeIter iter; 220 GtkTreeIter childiter; 221 GtkTreeSelection* selection; 222 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 223 224 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view)); 225 gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter); 226 if (has_selection){ 227 gchar* folder; 228 gtk_tree_model_get (model, &iter, COLUMN_FOLDER, &folder, -1); 229 g_debug ("folder is %s",folder); 230 self->currentfolder = g_strdup(folder); 231 gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(priv->filter),&childiter,&iter); 232 gtk_list_store_set(priv->liststore, &childiter, COLUMN_FOLDER, gtk_button_get_label(button), -1); 233 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter)); 223 GtkTreeModel* model; 224 GtkTreeIter iter; 225 GtkTreeIter childiter; 226 GtkTreeSelection* selection; 227 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 228 229 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view)); 230 gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter); 231 if (has_selection) 232 { 233 gchar* folder; 234 gtk_tree_model_get (model, &iter, COLUMN_FOLDER, &folder, -1); 235 g_debug ("folder is %s",folder); 236 self->currentfolder = g_strdup(folder); 237 gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(priv->filter),&childiter,&iter); 238 gtk_list_store_set(priv->liststore, &childiter, COLUMN_FOLDER, gtk_button_get_label(button), -1); 239 gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter)); 234 240 } 235 241 } … … 237 243 void sms_membership_window_set_menubox(SmsMembershipWindow* self, GSList* folderlist) 238 244 { 239 GtkWidget* appmenu; 240 GtkWidget* filtmenu; 241 242 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 243 244 /* application menu */ 245 appmenu = NULL; 246 /*GtkMenuItem* mmitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Message Membership" )); 247 GtkMenuItem* fnitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Folder Rename" )); 248 GtkMenuItem* accountitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Account" )); 249 GtkMenuItem* helpitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Help" )); 250 GtkWidget* sepitem = gtk_separator_menu_item_new(); 251 GtkMenuItem* closeitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Close" )); 252 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(mmitem) ); 253 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(fnitem) ); 254 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(accountitem) ); 255 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(helpitem) ); 256 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(sepitem) ); 257 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(closeitem) );*/ 258 259 GtkWidget* rdobtnbox = gtk_vbox_new(FALSE, 0) ; 260 GtkWidget *rdo_btn = NULL; 261 GSList *rdo_btn_group; 262 GSList* c = folderlist; 263 264 filtmenu = gtk_menu_new(); 265 for (; c; c = g_slist_next(c) ){ 266 //add folder to filter menu 267 gchar* folder = (gchar*) c->data; 268 g_debug( "adding folder '%s'", folder ); 269 gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) ); 270 271 //add folder to folder list 272 if(!g_strcasecmp(folder,"Inbox")){ 273 rdo_btn = gtk_radio_button_new_with_label (NULL, folder); 274 rdo_btn_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rdo_btn)); 275 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rdo_btn), TRUE); 245 GtkWidget* appmenu; 246 GtkWidget* filtmenu; 247 248 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 249 250 /* application menu */ 251 appmenu = NULL; 252 /*GtkMenuItem* mmitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Message Membership" )); 253 GtkMenuItem* fnitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Folder Rename" )); 254 GtkMenuItem* accountitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Account" )); 255 GtkMenuItem* helpitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Help" )); 256 GtkWidget* sepitem = gtk_separator_menu_item_new(); 257 GtkMenuItem* closeitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Close" )); 258 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(mmitem) ); 259 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(fnitem) ); 260 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(accountitem) ); 261 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(helpitem) ); 262 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(sepitem) ); 263 gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(closeitem) );*/ 264 265 GtkWidget* rdobtnbox = gtk_vbox_new(FALSE, 0) ; 266 GtkWidget *rdo_btn = NULL; 267 GSList *rdo_btn_group; 268 GSList* c = folderlist; 269 270 filtmenu = gtk_menu_new(); 271 for (; c; c = g_slist_next(c) ) 272 { 273 //add folder to filter menu 274 gchar* folder = (gchar*) c->data; 275 g_debug( "adding folder '%s'", folder ); 276 gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) ); 277 278 //add folder to folder list 279 if(!g_strcasecmp(folder,"Inbox")) 280 { 281 rdo_btn = gtk_radio_button_new_with_label (NULL, folder); 282 rdo_btn_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rdo_btn)); 283 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rdo_btn), TRUE); 276 284 } 277 else 278 rdo_btn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rdo_btn), folder); 279 priv->rdoBtnList = g_slist_append (priv->rdoBtnList,rdo_btn); 280 g_signal_connect (G_OBJECT(rdo_btn), "released", G_CALLBACK (membeship_rdo_btn_clicked), self); 281 gtk_box_pack_start (GTK_BOX (rdobtnbox), rdo_btn, FALSE, TRUE, 0); 282 } 283 284 //set radio button box alignment 285 if (!GTK_IS_ALIGNMENT(priv->radioAlign)){ 286 g_debug("Should be the first fime"); 287 priv->radioAlign = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 288 gtk_alignment_set_padding (GTK_ALIGNMENT(priv->radioAlign), 5, 5, 30, 5); 289 priv->radioBtnBox = rdobtnbox; 290 gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 291 gtk_box_pack_start (GTK_BOX (priv->folderbox), GTK_WIDGET(priv->radioAlign), FALSE, FALSE, 0); 292 moko_menu_box_set_application_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(appmenu) ); 293 } 294 else{ 295 gtk_container_remove( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 296 priv->radioBtnBox = rdobtnbox; 297 gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 298 } 299 moko_menu_box_set_filter_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(filtmenu) ); 300 gtk_widget_show (priv->menubox); 301 gtk_widget_show_all (priv->vbox); 285 else 286 rdo_btn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rdo_btn), folder); 287 priv->rdoBtnList = g_slist_append (priv->rdoBtnList,rdo_btn); 288 g_signal_connect (G_OBJECT(rdo_btn), "released", G_CALLBACK (membeship_rdo_btn_clicked), self); 289 gtk_box_pack_start (GTK_BOX (rdobtnbox), rdo_btn, FALSE, TRUE, 0); 290 } 291 292 //set radio button box alignment 293 if (!GTK_IS_ALIGNMENT(priv->radioAlign)) 294 { 295 g_debug("Should be the first fime"); 296 priv->radioAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 297 gtk_alignment_set_padding (GTK_ALIGNMENT(priv->radioAlign), 5, 5, 30, 5); 298 priv->radioBtnBox = rdobtnbox; 299 gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 300 gtk_box_pack_start (GTK_BOX (priv->folderbox), GTK_WIDGET(priv->radioAlign), FALSE, FALSE, 0); 301 moko_menu_box_set_application_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(appmenu) ); 302 } 303 else 304 { 305 gtk_container_remove( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 306 priv->radioBtnBox = rdobtnbox; 307 gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 308 } 309 moko_menu_box_set_filter_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(filtmenu) ); 310 gtk_widget_show (priv->menubox); 311 gtk_widget_show_all (priv->vbox); 302 312 } 303 313 304 314 void 305 315 membership_cell_data_func (GtkTreeViewColumn *col, 306 GtkCellRenderer *renderer,307 GtkTreeModel *model,308 GtkTreeIter *iter,309 gpointer user_data)310 { 311 gint status;312 313 gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1);314 if (status == UNREAD)315 g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL);316 else317 g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL);318 } 319 320 void membership_cursor_changed(GtkTreeSelection *selection, 316 GtkCellRenderer *renderer, 317 GtkTreeModel *model, 318 GtkTreeIter *iter, 319 gpointer user_data) 320 { 321 gint status; 322 323 gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1); 324 if (status == UNREAD) 325 g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL); 326 else 327 g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL); 328 } 329 330 void membership_cursor_changed(GtkTreeSelection *selection, 321 331 SmsMembershipWindow *self) 322 332 { 323 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 324 GtkTreeModel* model; 325 GtkTreeIter iter; 326 message* msg; 327 328 if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) { 329 msg = g_malloc(sizeof(message)); 330 gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 331 gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 332 gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 333 gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1); 334 335 gtk_label_set_text (GTK_LABEL(priv->fromLabel), msg->name); 336 gtk_label_set_text (GTK_LABEL(priv->subjectLabel), msg->subject); 337 g_debug ("radio list length: %d",g_slist_length(priv->rdoBtnList)); 338 339 GSList* c; 340 GtkWidget *elem; 341 for( c =priv->rdoBtnList; c; c=g_slist_next(c)) { 342 elem = c->data; 343 if (!g_strcasecmp (msg->folder,gtk_button_get_label(GTK_BUTTON(elem)))){ 344 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(elem), TRUE); 345 break; 346 } 347 } 333 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 334 GtkTreeModel* model; 335 GtkTreeIter iter; 336 message* msg; 337 338 if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) 339 { 340 msg = g_malloc(sizeof(message)); 341 gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 342 gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 343 gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 344 gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1); 345 346 gtk_label_set_text (GTK_LABEL(priv->fromLabel), msg->name); 347 gtk_label_set_text (GTK_LABEL(priv->subjectLabel), msg->subject); 348 g_debug ("radio list length: %d",g_slist_length(priv->rdoBtnList)); 349 350 GSList* c; 351 GtkWidget *elem; 352 for( c =priv->rdoBtnList; c; c=g_slist_next(c)) 353 { 354 elem = c->data; 355 if (!g_strcasecmp (msg->folder,gtk_button_get_label(GTK_BUTTON(elem)))) 356 { 357 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(elem), TRUE); 358 break; 359 } 360 } 348 361 } 349 362 } … … 351 364 gboolean membership_filter_visible_function (GtkTreeModel* model, GtkTreeIter* iter, SmsMembershipWindow* self) 352 365 { 353 gchar* folder; 354 gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1); 355 356 if(!g_strcasecmp(folder,self->currentfolder)) 357 return TRUE; 358 else 359 return FALSE; 360 } 361 362 void sms_membership_window_set_messages (SmsMembershipWindow* self, 363 GtkListStore* liststore) 364 { 365 GtkCellRenderer* ren; 366 GtkTreeViewColumn* column = gtk_tree_view_column_new(); 367 gtk_tree_view_column_set_title(column, "From"); 368 369 370 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 371 priv->liststore = liststore; 372 priv->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (priv->liststore),NULL); 373 priv->view = moko_tree_view_new_with_model( GTK_TREE_MODEL (priv->filter)); 374 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (priv->filter), 375 membership_filter_visible_function, 376 self, 377 NULL); 378 /* Add status picture */ 379 ren = gtk_cell_renderer_pixbuf_new(); 380 gtk_tree_view_column_pack_start(column, ren, FALSE); 381 gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL); 382 383 /* add message from name */ 384 ren = gtk_cell_renderer_text_new(); 385 gtk_tree_view_column_pack_start(column, ren, TRUE); 386 gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_FROM, NULL); 387 388 /* Bold if UNREAD */ 389 gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL); 390 moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column ); 391 392 ren = gtk_cell_renderer_text_new(); 393 column = gtk_tree_view_column_new(); 394 gtk_tree_view_column_set_title(column, "Subject"); 395 gtk_tree_view_column_pack_start(column, ren, TRUE); 396 gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL); 397 gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL); 398 moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column ); 399 400 if (!GTK_IS_ALIGNMENT(priv->msgViewAlign)){ 401 GtkWidget* treeViewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 402 gtk_alignment_set_padding (GTK_ALIGNMENT(treeViewAlign),10,10,10,10); 403 priv->msgViewAlign = treeViewAlign; 404 priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view)); 405 gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 406 gtk_box_pack_start (GTK_BOX (priv->vbox), GTK_WIDGET(priv->msgViewAlign), TRUE, TRUE, 0); 407 } 408 else{ 409 gtk_container_remove (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 410 priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view)); 411 gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 412 } 413 gtk_widget_show_all (priv->vbox); 414 415 GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view)); 416 g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(membership_cursor_changed), self); 417 } 418 366 gchar* folder; 367 gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1); 368 369 if(!g_strcasecmp(folder,self->currentfolder)) 370 return TRUE; 371 else 372 return FALSE; 373 } 374 375 void sms_membership_window_set_messages (SmsMembershipWindow* self, 376 GtkListStore* liststore) 377 { 378 GtkCellRenderer* ren; 379 GtkTreeViewColumn* column = gtk_tree_view_column_new(); 380 gtk_tree_view_column_set_title(column, "From"); 381 382 383 SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 384 priv->liststore = liststore; 385 priv->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (priv->liststore),NULL); 386 priv->view = moko_tree_view_new_with_model( GTK_TREE_MODEL (priv->filter)); 387 gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (priv->filter), 388 (GtkTreeModelFilterVisibleFunc)membership_filter_visible_function, 389 self, 390 NULL); 391 /* Add status picture */ 392 ren = gtk_cell_renderer_pixbuf_new(); 393 gtk_tree_view_column_pack_start(column, ren, FALSE); 394 gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL); 395 396 /* add message from name */ 397 ren = gtk_cell_renderer_text_new(); 398 gtk_tree_view_column_pack_start(column, ren, TRUE); 399 gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_FROM, NULL); 400 401 /* Bold if UNREAD */ 402 gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL); 403 moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column ); 404 405 ren = gtk_cell_renderer_text_new(); 406 column = gtk_tree_view_column_new(); 407 gtk_tree_view_column_set_title(column, "Subject"); 408 gtk_tree_view_column_pack_start(column, ren, TRUE); 409 gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL); 410 gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL); 411 moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column ); 412 413 if (!GTK_IS_ALIGNMENT(priv->msgViewAlign)) 414 { 415 GtkWidget* treeViewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 416 gtk_alignment_set_padding (GTK_ALIGNMENT(treeViewAlign),10,10,10,10); 417 priv->msgViewAlign = treeViewAlign; 418 priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view)); 419 gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 420 gtk_box_pack_start (GTK_BOX (priv->vbox), GTK_WIDGET(priv->msgViewAlign), TRUE, TRUE, 0); 421 } 422 else 423 { 424 gtk_container_remove (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 425 priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view)); 426 gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 427 } 428 gtk_widget_show_all (priv->vbox); 429 430 GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view)); 431 g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(membership_cursor_changed), self); 432 } 433 -
trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.h
r1452 r1516 1 /* 1 /* 2 2 * sms-membership-window.h 3 3 * … … 17 17 * Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $] 18 18 */ 19 19 20 20 #ifndef _SMS_MEMBERSHIP_WINDOW_H_ 21 21 #define _SMS_MEMBERSHIP_WINDOW_H_ … … 42 42 #define SMS_MEMBERSHIP_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SMS_TYPE_MEMBERSHIP_WINDOW, SmsMembershipWindowClass)) 43 43 44 typedef struct { 44 typedef struct 45 { 45 46 MokoWindow parent; 46 47 gchar* currentfolder; 47 } SmsMembershipWindow; 48 } 49 SmsMembershipWindow; 48 50 49 typedef struct { 51 typedef struct 52 { 50 53 MokoWindowClass parent_class; 51 } SmsMembershipWindowClass; 54 } 55 SmsMembershipWindowClass; 52 56 53 57 GType sms_membership_window_get_type();
Note: See TracChangeset
for help on using the changeset viewer.
