static void save_savedstatus_cb(GntWidget *button, EditStatus *edit) { const char *title, *message; PurpleStatusPrimitive prim; PurpleSavedStatus *find; title = gnt_entry_get_text(GNT_ENTRY(edit->title)); message = gnt_entry_get_text(GNT_ENTRY(edit->message)); if (!message || !*message) message = NULL; prim = GPOINTER_TO_INT(gnt_combo_box_get_selected_data(GNT_COMBO_BOX(edit->type))); if (!title || !*title) { purple_notify_error(edit, _("Error"), _("Invalid title"), _("Please enter a non-empty title for the status.")); gnt_box_give_focus_to_child(GNT_BOX(edit->window), edit->title); return; } find = purple_savedstatus_find(title); if (find && find != edit->saved) { purple_notify_error(edit, _("Error"), _("Duplicate title"), _("Please enter a different title for the status.")); gnt_box_give_focus_to_child(GNT_BOX(edit->window), edit->title); return; } if (edit->saved == NULL) { edit->saved = purple_savedstatus_new(title, prim); purple_savedstatus_set_message(edit->saved, message); set_substatuses(edit); if (statuses.tree) gnt_tree_add_row_last(GNT_TREE(statuses.tree), edit->saved, gnt_tree_create_row(GNT_TREE(statuses.tree), title, purple_primitive_get_name_from_type(prim), message), NULL); } else { purple_savedstatus_set_title(edit->saved, title); purple_savedstatus_set_type(edit->saved, prim); purple_savedstatus_set_message(edit->saved, message); if (statuses.tree) { gnt_tree_change_text(GNT_TREE(statuses.tree), edit->saved, 0, title); gnt_tree_change_text(GNT_TREE(statuses.tree), edit->saved, 1, purple_primitive_get_name_from_type(prim)); gnt_tree_change_text(GNT_TREE(statuses.tree), edit->saved, 2, message); } } if (g_object_get_data(G_OBJECT(button), "use")) purple_savedstatus_activate(edit->saved); gnt_widget_destroy(edit->window); }
static void populate_statuses(GntTree *tree) { GList *list; for (list = purple_savedstatuses_get_all(); list; list = list->next) { PurpleSavedStatus *saved = list->data; const char *title, *type, *message; if (purple_savedstatus_is_transient(saved)) continue; title = purple_savedstatus_get_title(saved); type = purple_primitive_get_name_from_type(purple_savedstatus_get_type(saved)); message = purple_savedstatus_get_message(saved); /* XXX: Strip possible markups */ gnt_tree_add_row_last(tree, saved, gnt_tree_create_row(tree, title, type, message), NULL); } }
std::string get_account_status() { std::string result; // :fixme: // atm we get the status only for the first account (assuming the status is // identical forall active accounts - which may not be true) GList *p_accounts = purple_accounts_get_all_active(); if (p_accounts) { PurpleStatus *p_status = purple_account_get_active_status( reinterpret_cast<PurpleAccount*>(g_list_first(p_accounts)->data)); const char *p_status_text = purple_primitive_get_name_from_type( purple_status_type_get_primitive(purple_status_get_type(p_status))); if (p_status_text) { result = p_status_text; } else { result = "Unknown"; } } else { // no active accounts -> offline result = "Offline"; } return result; }
bool IM::setStatus(string away) { PurpleStatusPrimitive prim = PURPLE_STATUS_AVAILABLE; if(away.empty() == false) { string s = strlower(away); int i; /* Looking for an existant status equivalent to the away message. */ for(i = 0; ( i < PURPLE_STATUS_NUM_PRIMITIVES && strlower(purple_primitive_get_name_from_type((PurpleStatusPrimitive)i)) != s && purple_primitive_get_id_from_type((PurpleStatusPrimitive)i) != s ); ++i) ; if(i >= PURPLE_STATUS_NUM_PRIMITIVES) { /* If the status does not exist, set the AWAY status and set the message * given in the \b away string as the status message. */ prim = PURPLE_STATUS_AWAY; } else { prim = (PurpleStatusPrimitive)i; away.clear(); /* do not change the saved status message. */ } } map<string, Account> alist = getAccountsList(); for(map<string, Account>::iterator it = alist.begin(); it != alist.end(); ++it) it->second.setStatus(prim, away); return true; }
void finch_savedstatus_edit(PurpleSavedStatus *saved) { EditStatus *edit; GntWidget *window, *box, *button, *entry, *combo, *label, *tree; PurpleStatusPrimitive prims[] = {PURPLE_STATUS_AVAILABLE, PURPLE_STATUS_AWAY, PURPLE_STATUS_INVISIBLE, PURPLE_STATUS_OFFLINE, PURPLE_STATUS_UNSET}, current; GList *iter; int i; if (saved) { GList *iter; for (iter = edits; iter; iter = iter->next) { edit = iter->data; if (edit->saved == saved) return; } } edit = g_new0(EditStatus, 1); edit->saved = saved; edit->window = window = gnt_vbox_new(FALSE); gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_title(GNT_BOX(window), _("Edit Status")); gnt_box_set_fill(GNT_BOX(window), TRUE); gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); gnt_box_set_pad(GNT_BOX(window), 0); edits = g_list_append(edits, edit); /* Title */ box = gnt_hbox_new(FALSE); gnt_box_set_alignment(GNT_BOX(box), GNT_ALIGN_LEFT); gnt_box_add_widget(GNT_BOX(window), box); gnt_box_add_widget(GNT_BOX(box), gnt_label_new(_("Title"))); edit->title = entry = gnt_entry_new(saved ? purple_savedstatus_get_title(saved) : NULL); gnt_box_add_widget(GNT_BOX(box), entry); /* Type */ box = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(window), box); gnt_box_add_widget(GNT_BOX(box), label = gnt_label_new(_("Status"))); gnt_widget_set_size(label, 0, 1); edit->type = combo = gnt_combo_box_new(); gnt_box_add_widget(GNT_BOX(box), combo); current = saved ? purple_savedstatus_get_type(saved) : PURPLE_STATUS_UNSET; for (i = 0; prims[i] != PURPLE_STATUS_UNSET; i++) { gnt_combo_box_add_data(GNT_COMBO_BOX(combo), GINT_TO_POINTER(prims[i]), purple_primitive_get_name_from_type(prims[i])); if (prims[i] == current) gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), GINT_TO_POINTER(current)); } /* Message */ box = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(window), box); gnt_box_add_widget(GNT_BOX(box), gnt_label_new(_("Message"))); edit->message = entry = gnt_entry_new(saved ? purple_savedstatus_get_message(saved) : NULL); gnt_box_add_widget(GNT_BOX(window), entry); gnt_box_add_widget(GNT_BOX(window), gnt_hline_new()); gnt_box_add_widget(GNT_BOX(window), gnt_label_new(_("Use different status for following accounts"))); edit->hash = g_hash_table_new(g_direct_hash, g_direct_equal); edit->tree = tree = gnt_tree_new_with_columns(3); gnt_box_add_widget(GNT_BOX(window), tree); gnt_tree_set_show_title(GNT_TREE(tree), TRUE); gnt_tree_set_column_titles(GNT_TREE(tree), _("Account"), _("Status"), _("Message")); gnt_tree_set_col_width(GNT_TREE(tree), 0, 30); gnt_tree_set_col_width(GNT_TREE(tree), 1, 10); gnt_tree_set_col_width(GNT_TREE(tree), 2, 30); for (iter = purple_accounts_get_all(); iter; iter = iter->next) { add_substatus(edit, iter->data); } g_signal_connect(G_OBJECT(tree), "key_pressed", G_CALLBACK(popup_substatus), edit); /* The buttons */ box = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(window), box); /* Use */ button = gnt_button_new(_("Use")); gnt_box_add_widget(GNT_BOX(box), button); g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(use_trans_status_cb), edit); /* Save */ button = gnt_button_new(_("Save")); gnt_box_add_widget(GNT_BOX(box), button); g_object_set_data(G_OBJECT(button), "use", NULL); g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(save_savedstatus_cb), edit); /* Save & Use */ button = gnt_button_new(_("Save & Use")); gnt_box_add_widget(GNT_BOX(box), button); g_object_set_data(G_OBJECT(button), "use", GINT_TO_POINTER(TRUE)); g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(save_savedstatus_cb), edit); /* Cancel */ button = gnt_button_new(_("Cancel")); gnt_box_add_widget(GNT_BOX(box), button); g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), window); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(update_edit_list), edit); gnt_widget_show(window); }