Mercurial > pidgin-twitter
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++) { |