comparison pidgin-twitter.c @ 193:0b0b4cab7c0e multiaccounts

move some UI definition of preferences per conversation from pidgin-twitter.c to prefs.ui
author mikanbako <maoutwo@gmail.com>
date Tue, 05 Aug 2008 23:19:09 +0900
parents 1265988dc2bf
children be4ef598d120
comparison
equal deleted inserted replaced
180:1265988dc2bf 193:0b0b4cab7c0e
2954 static void 2954 static void
2955 open_account_preference_window(GtkWidget *pref_button, gpointer gtkconv_ptr) 2955 open_account_preference_window(GtkWidget *pref_button, gpointer gtkconv_ptr)
2956 { 2956 {
2957 PidginConversation *gtkconv = (PidginConversation *) gtkconv_ptr; 2957 PidginConversation *gtkconv = (PidginConversation *) gtkconv_ptr;
2958 PurpleConversation *conv = gtkconv->active_conv; 2958 PurpleConversation *conv = gtkconv->active_conv;
2959 GtkWidget *dialog; 2959 GtkWidget *dialog, *vbox;
2960 GtkWidget *notebook = gtk_notebook_new();
2961 gchar *title; 2960 gchar *title;
2962 2961
2963 title = g_strdup_printf("\"%s\" Account Preference", conv->title); 2962 title = g_strdup_printf("\"%s\" Account Preference", conv->title);
2964 2963
2965 dialog = gtk_dialog_new_with_buttons( 2964 dialog = gtk_dialog_new_with_buttons(
2984 g_signal_connect(dialog, 2983 g_signal_connect(dialog,
2985 "response", 2984 "response",
2986 G_CALLBACK(closed_account_preference_window_cb), 2985 G_CALLBACK(closed_account_preference_window_cb),
2987 pref_button); 2986 pref_button);
2988 2987
2989 /* Screen Name */
2990 build_screen_name_preference_form(conv, notebook);
2991 /* API Base Post */ 2988 /* API Base Post */
2992 if(is_twitter_conv(conv)) 2989 if(is_twitter_conv(conv))
2993 build_twitter_api_preference_form(conv, notebook); 2990 vbox = build_twitter_preference_form(conv);
2991 else
2992 vbox = build_default_preference_form(conv);
2994 2993
2995 gtk_button_set_label(GTK_BUTTON(pref_button), ACCOUNT_PREF_BUTTON_NORMAL); 2994 gtk_button_set_label(GTK_BUTTON(pref_button), ACCOUNT_PREF_BUTTON_NORMAL);
2996 gtk_widget_set_sensitive(pref_button, FALSE); 2995 gtk_widget_set_sensitive(pref_button, FALSE);
2997 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), notebook); 2996 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), vbox);
2998 gtk_widget_show_all(GTK_WIDGET(dialog)); 2997 gtk_widget_show_all(GTK_WIDGET(dialog));
2999 } 2998 }
3000 2999
3001 static void 3000 static GtkWidget*
3002 build_screen_name_preference_form(PurpleConversation *conv, 3001 build_default_preference_form(PurpleConversation *conv)
3003 GtkWidget *notebook)
3004 { 3002 {
3005 PurpleAccount *account = purple_conversation_get_account(conv); 3003 PurpleAccount *account = purple_conversation_get_account(conv);
3006 const char *conv_name = purple_conversation_get_name(conv); 3004 const char *conv_name = purple_conversation_get_name(conv);
3007 GtkWidget *tab_label, *child, *line, *container, *widget; 3005 GtkWidget *widget;
3008 3006 gchar *filename;
3009 child = gtk_vbox_new(FALSE, 0); 3007 GError *err = NULL;
3010 3008 GtkBuilder *builder = gtk_builder_new();
3011 /********************/ 3009
3012 /* screen name form */ 3010 #ifdef _WIN32
3013 /********************/ 3011 filename = g_build_filename(purple_user_dir(),
3014 line = gtk_hbox_new(TRUE, 0); 3012 "pidgin-twitter", "prefs.ui", NULL);
3015 3013 #else
3016 /* label */ 3014 filename = g_build_filename(DATADIR,
3017 widget = gtk_label_new("screen name"); 3015 "pidgin-twitter", "prefs.ui", NULL);
3018 container = gtk_alignment_new(0.0, 0.5, 0.0, 0.0); 3016 #endif
3019 gtk_container_add(GTK_CONTAINER(container), widget); 3017
3020 gtk_alignment_set_padding(GTK_ALIGNMENT(container), 0, 0, 20, 0); 3018 gtk_builder_add_from_file(builder, filename, &err);
3021 gtk_box_pack_start_defaults(GTK_BOX(line), container); 3019 if(err) {
3022 3020 twitter_debug("%s\n", err->message);
3023 /* entry */ 3021 g_free(filename);
3024 widget = gtk_entry_new(); 3022 return NULL;
3023 }
3024 gtk_builder_connect_signals(builder, NULL);
3025
3026 /**********************/
3027 /* connect to signals */
3028 /**********************/
3029
3030 /* screen name */
3031 widget = GTK_WIDGET(gtk_builder_get_object(builder, "screen_name"));
3025 gtk_entry_set_text(GTK_ENTRY(widget), 3032 gtk_entry_set_text(GTK_ENTRY(widget),
3026 service_account_get_string(account, 3033 service_account_get_string(account,
3027 conv_name, 3034 conv_name,
3028 OPT_SCREEN_NAME, 3035 OPT_SCREEN_NAME,
3029 EMPTY)); 3036 EMPTY));
3033 OPT_SCREEN_NAME); 3040 OPT_SCREEN_NAME);
3034 g_signal_connect(G_OBJECT(widget), 3041 g_signal_connect(G_OBJECT(widget),
3035 "changed", 3042 "changed",
3036 G_CALLBACK(account_preference_text_changed_cb), 3043 G_CALLBACK(account_preference_text_changed_cb),
3037 conv); 3044 conv);
3038 container = gtk_alignment_new(1.0, 0.5, 1.0, 0.0); 3045
3039 gtk_container_add(GTK_CONTAINER(container), widget); 3046 return GTK_WIDGET(gtk_builder_get_object(
3040 gtk_alignment_set_padding(GTK_ALIGNMENT(container), 0, 0, 0, 20); 3047 builder, "account_preference_default"));
3041 gtk_box_pack_start_defaults(GTK_BOX(line), container); 3048 }
3042 3049
3043 gtk_box_pack_start_defaults(GTK_BOX(child), line); 3050 static GtkWidget*
3044 3051 build_twitter_preference_form(PurpleConversation *conv)
3045 /**************************************************/
3046 /* the explanation why a screen name is necessary */
3047 /**************************************************/
3048 line = gtk_hbox_new(FALSE, 0);
3049 widget = gtk_label_new("If you do not input your screen name,");
3050 container = gtk_alignment_new(0.0, 0.5, 0.0, 0.0);
3051 gtk_container_add(GTK_CONTAINER(container), widget);
3052 gtk_alignment_set_padding(GTK_ALIGNMENT(container), 20, 0, 20, 0);
3053 gtk_box_pack_start(GTK_BOX(line), container, FALSE, FALSE, 0);
3054 gtk_box_pack_start(GTK_BOX(child), line, FALSE, FALSE, 0);
3055
3056 line = gtk_hbox_new(FALSE, 0);
3057 widget = gtk_label_new("you cannot see your icon.");
3058 container = gtk_alignment_new(0.0, 0.5, 0.0, 0.0);
3059 gtk_container_add(GTK_CONTAINER(container), widget);
3060 gtk_alignment_set_padding(GTK_ALIGNMENT(container), 0, 0, 20, 0);
3061 gtk_box_pack_start(GTK_BOX(line), line, FALSE, FALSE, 0);
3062 gtk_box_pack_start(GTK_BOX(child), container, FALSE, FALSE, 0);
3063
3064 /***************/
3065 /* create page */
3066 /***************/
3067 tab_label = gtk_label_new("Screen Name");
3068 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), child, tab_label);
3069 }
3070
3071 static void
3072 build_twitter_api_preference_form(PurpleConversation *conv,
3073 GtkWidget *notebook)
3074 { 3052 {
3075 PurpleAccount *account = purple_conversation_get_account(conv); 3053 PurpleAccount *account = purple_conversation_get_account(conv);
3076 const char *conv_name = purple_conversation_get_name(conv); 3054 const char *conv_name = purple_conversation_get_name(conv);
3077 3055 GtkWidget *widget;
3078 GtkWidget *tab_label, *child, *line, *container, *widget;
3079 GtkObject *adjust; 3056 GtkObject *adjust;
3080 int value; 3057 int value;
3081 3058 gchar *filename;
3082 child = gtk_vbox_new(FALSE, 0); 3059 GError *err = NULL;
3083 3060 GtkBuilder *builder = gtk_builder_new();
3084 /*****************************/ 3061
3062 #ifdef _WIN32
3063 filename = g_build_filename(purple_user_dir(),
3064 "pidgin-twitter", "prefs.ui", NULL);
3065 #else
3066 filename = g_build_filename(DATADIR,
3067 "pidgin-twitter", "prefs.ui", NULL);
3068 #endif
3069
3070 gtk_builder_add_from_file(builder, filename, &err);
3071 if(err) {
3072 twitter_debug("%s\n", err->message);
3073 g_free(filename);
3074 return NULL;
3075 }
3076 gtk_builder_connect_signals(builder, NULL);
3077
3078 /**********************/
3079 /* connect to signals */
3080 /**********************/
3081
3082 /* screen name */
3083 widget = GTK_WIDGET(gtk_builder_get_object(builder, "twitter_screen_name"));
3084 gtk_entry_set_text(GTK_ENTRY(widget),
3085 service_account_get_string(account,
3086 conv_name,
3087 OPT_SCREEN_NAME,
3088 EMPTY));
3089 gtk_entry_set_activates_default(GTK_ENTRY(widget), TRUE);
3090 g_object_set_data(G_OBJECT(widget),
3091 PLUGIN_ID "-account_pref-key",
3092 OPT_SCREEN_NAME);
3093 g_signal_connect(G_OBJECT(widget),
3094 "changed",
3095 G_CALLBACK(account_preference_text_changed_cb),
3096 conv);
3097
3085 /* Checkbox about to use API */ 3098 /* Checkbox about to use API */
3086 /*****************************/ 3099 widget = GTK_WIDGET(gtk_builder_get_object(builder, "twitter_api"));
3087
3088 line = gtk_hbox_new(TRUE, 0);
3089 widget = gtk_check_button_new_with_label("Get/post statuses via API");
3090 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), 3100 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
3091 service_account_get_bool(account, 3101 service_account_get_bool(account,
3092 conv_name, 3102 conv_name,
3093 OPT_API_BASE_POST, 3103 OPT_API_BASE_POST,
3094 FALSE)); 3104 FALSE));
3097 OPT_API_BASE_POST); 3107 OPT_API_BASE_POST);
3098 g_signal_connect(G_OBJECT(widget), 3108 g_signal_connect(G_OBJECT(widget),
3099 "toggled", 3109 "toggled",
3100 G_CALLBACK(account_preference_bool_toggled_cb), 3110 G_CALLBACK(account_preference_bool_toggled_cb),
3101 conv); 3111 conv);
3102 container = gtk_alignment_new(0.0, 0.5, 0.0, 0.0); 3112
3103 gtk_container_add(GTK_CONTAINER(container), widget); 3113 /* Password */
3104 gtk_alignment_set_padding(GTK_ALIGNMENT(container), 0, 0, 20, 0); 3114 widget = GTK_WIDGET(gtk_builder_get_object(builder,
3105 gtk_box_pack_start_defaults(GTK_BOX(line), container); 3115 "twitter_api_password"));
3106
3107 gtk_box_pack_start_defaults(GTK_BOX(child), line);
3108
3109 /*****************/
3110 /* Password Form */
3111 /*****************/
3112
3113 /* label */
3114 line = gtk_hbox_new(TRUE, 0);
3115 widget = gtk_label_new("Password");
3116 container = gtk_alignment_new(0.0, 0.5, 0.0, 0.0);
3117 gtk_container_add(GTK_CONTAINER(container), widget);
3118 gtk_alignment_set_padding(GTK_ALIGNMENT(container), 0, 0, 20, 0);
3119 gtk_box_pack_start_defaults(GTK_BOX(line), container);
3120
3121 /* entry */
3122 widget = gtk_entry_new();
3123 gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE); 3116 gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE);
3124 gtk_entry_set_activates_default(GTK_ENTRY(widget), TRUE); 3117 gtk_entry_set_activates_default(GTK_ENTRY(widget), TRUE);
3125 if (gtk_entry_get_invisible_char(GTK_ENTRY(widget)) == '*') 3118 if (gtk_entry_get_invisible_char(GTK_ENTRY(widget)) == '*')
3126 gtk_entry_set_invisible_char(GTK_ENTRY(widget), PIDGIN_INVISIBLE_CHAR); 3119 gtk_entry_set_invisible_char(GTK_ENTRY(widget), PIDGIN_INVISIBLE_CHAR);
3127 gtk_entry_set_text(GTK_ENTRY(widget), 3120 gtk_entry_set_text(GTK_ENTRY(widget),
3134 OPT_API_BASE_PASSWORD); 3127 OPT_API_BASE_PASSWORD);
3135 g_signal_connect(G_OBJECT(widget), 3128 g_signal_connect(G_OBJECT(widget),
3136 "changed", 3129 "changed",
3137 G_CALLBACK(account_preference_text_changed_cb), 3130 G_CALLBACK(account_preference_text_changed_cb),
3138 conv); 3131 conv);
3139 container = gtk_alignment_new(1.0, 0.5, 1.0, 0.0); 3132
3140 gtk_container_add(GTK_CONTAINER(container), widget); 3133 /* Retrieve interval */
3141 gtk_alignment_set_padding(GTK_ALIGNMENT(container), 0, 0, 0, 20);
3142 gtk_box_pack_start_defaults(GTK_BOX(line), container);
3143
3144 gtk_box_pack_start_defaults(GTK_BOX(child), line);
3145
3146 /**************************/
3147 /* Retrieve interval Form */
3148 /**************************/
3149
3150 /* label */
3151 line = gtk_hbox_new(FALSE, 0);
3152 widget = gtk_label_new("Retrieve interval");
3153 container = gtk_alignment_new(0.0, 0.5, 0.0, 0.0);
3154 gtk_container_add(GTK_CONTAINER(container), widget);
3155 gtk_alignment_set_padding(GTK_ALIGNMENT(container), 0, 0, 20, 0);
3156 gtk_box_pack_start_defaults(GTK_BOX(line), container);
3157
3158 /* spin button */
3159 value = service_account_get_int(account, conv_name, 3134 value = service_account_get_int(account, conv_name,
3160 OPT_API_BASE_GET_INTERVAL, 3135 OPT_API_BASE_GET_INTERVAL,
3161 0); 3136 0);
3162 if(value == 0) { 3137 if(value == 0) {
3163 value = TWITTER_DEFAULT_INTERVAL; 3138 value = TWITTER_DEFAULT_INTERVAL;
3165 conv_name, 3140 conv_name,
3166 OPT_API_BASE_GET_INTERVAL, 3141 OPT_API_BASE_GET_INTERVAL,
3167 value); 3142 value);
3168 } 3143 }
3169 adjust = gtk_adjustment_new(value, 40, 3600, 10, 100, 100); 3144 adjust = gtk_adjustment_new(value, 40, 3600, 10, 100, 100);
3170 widget = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1.0, 0); 3145 widget = GTK_WIDGET(gtk_builder_get_object(builder,
3146 "twitter_api_interval"));
3147 gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(widget),
3148 GTK_ADJUSTMENT(adjust));
3171 gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(widget), TRUE); 3149 gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(widget), TRUE);
3172 gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(widget), TRUE); 3150 gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(widget), TRUE);
3173 g_object_set_data(G_OBJECT(widget), 3151 g_object_set_data(G_OBJECT(widget),
3174 PLUGIN_ID "-account_pref-key", 3152 PLUGIN_ID "-account_pref-key",
3175 OPT_API_BASE_GET_INTERVAL); 3153 OPT_API_BASE_GET_INTERVAL);
3176 g_signal_connect(G_OBJECT(widget), 3154 g_signal_connect(G_OBJECT(widget),
3177 "value-changed", 3155 "value-changed",
3178 G_CALLBACK(account_preference_spin_changed_cb), 3156 G_CALLBACK(account_preference_spin_changed_cb),
3179 conv); 3157 conv);
3180 container = gtk_alignment_new(1.0, 0.5, 0.0, 0.0); 3158
3181 gtk_container_add(GTK_CONTAINER(container), widget); 3159 return GTK_WIDGET(gtk_builder_get_object(builder,
3182 gtk_alignment_set_padding(GTK_ALIGNMENT(container), 0, 0, 0, 0); 3160 "account_preference_twitter"));
3183 gtk_box_pack_start(GTK_BOX(line), container, FALSE, FALSE, 0);
3184
3185 /* label */
3186 widget = gtk_label_new("sec");
3187 container = gtk_alignment_new(1.0, 0.5, 0.0, 0.0);
3188 gtk_container_add(GTK_CONTAINER(container), widget);
3189 gtk_alignment_set_padding(GTK_ALIGNMENT(container), 0, 0, 0, 20);
3190 gtk_box_pack_start(GTK_BOX(line), container, FALSE, FALSE, 0);
3191
3192 gtk_box_pack_start_defaults(GTK_BOX(child), line);
3193
3194 /***************/
3195 /* create page */
3196 /***************/
3197
3198 tab_label = gtk_label_new("API Based Access");
3199 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), child, tab_label);
3200 } 3161 }
3201 3162
3202 static void 3163 static void
3203 account_preference_text_changed_cb(GtkEditable *editable, gpointer conv_ptr) 3164 account_preference_text_changed_cb(GtkEditable *editable, gpointer conv_ptr)
3204 { 3165 {
3297 gchar *generated_key, *temp; 3258 gchar *generated_key, *temp;
3298 int i, j; 3259 int i, j;
3299 3260
3300 if(purple_prefs_exists(key)) 3261 if(purple_prefs_exists(key))
3301 return; 3262 return;
3302
3303 twitter_debug("eeeee : %s\n", key);
3304 3263
3305 names = g_strsplit(key, "/", 0); 3264 names = g_strsplit(key, "/", 0);
3306 names_length = g_strv_length(names); 3265 names_length = g_strv_length(names);
3307 3266
3308 for(i = 2; i < names_length - 1; i++) { 3267 for(i = 2; i < names_length - 1; i++) {