00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #include "external_converter.h"
00046
00047
00048 static void external_converter_init (void);
00049 static void external_converter_query (void);
00050 static void external_converter_about (void);
00051 static void external_converter_configure (void);
00052 static void external_converter_cleanup (void);
00053
00054 static void external_converter_run(GtkWidget *w, void *data);
00055
00056
00057
00058
00059
00060 GxsmPlugin external_converter_pi = {
00061 NULL,
00062 NULL,
00063 0,
00064 NULL,
00065 "external_converter",
00066 NULL,
00067 "Calls an external converter",
00068 "Thorsten Wagner",
00069 N_("_Tools/"),
00070 N_("External Converter"),
00071 NULL,
00072 "No further info",
00073 NULL,
00074 NULL,
00075 external_converter_init,
00076 external_converter_query,
00077 external_converter_about,
00078 external_converter_configure,
00079 NULL,
00080 external_converter_cleanup
00081 };
00082
00083
00084
00085
00086 static const char *about_text = N_("Tool to call an external converter.");
00087
00088
00089
00090
00091
00092
00093 GxsmPlugin *get_gxsm_plugin_info ( void ){
00094 external_converter_pi.description = g_strdup_printf(N_("Tool to call an external converter. Version: %s"), VERSION);
00095 return &external_converter_pi;
00096 }
00097
00098
00099
00100
00101
00102
00103 static void external_converter_query(void)
00104 {
00105 static GnomeUIInfo menuinfo_external_converter[] = {
00106 { GNOME_APP_UI_ITEM,
00107 N_("External Converter"), N_("Tool to call an external converter"),
00108 (gpointer) external_converter_run, NULL,
00109 NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN,
00110 0, GDK_CONTROL_MASK, NULL },
00111 GNOMEUIINFO_END
00112 };
00113
00114 gnome_app_insert_menus (
00115 GNOME_APP(external_converter_pi.app->getApp()),
00116 N_("Tools/"),
00117 menuinfo_external_converter
00118 );
00119
00120 if(external_converter_pi.status) g_free(external_converter_pi.status);
00121 external_converter_pi.status = g_strconcat (
00122 N_("Plugin query has attached "),
00123 external_converter_pi.name,
00124 N_(": File external_converter is ready to use"),
00125 NULL);
00126 }
00127
00128
00129
00130
00131
00132 static void external_converter_init(void)
00133 {
00134 PI_DEBUG(DBG_L2,"external_converter Plugin Init");
00135 }
00136
00137
00138
00139
00140 static void external_converter_about(void)
00141 {
00142 const gchar *authors[] = { external_converter_pi.authors, NULL};
00143 gtk_widget_show(gnome_about_new ( external_converter_pi.name,
00144 VERSION,
00145 N_("(C) 2006 the Free Software Foundation"),
00146 about_text,
00147 authors,
00148 NULL,NULL,NULL
00149 ));
00150 }
00151
00152
00153
00154
00155 static void external_converter_configure(void)
00156 {
00157 if(external_converter_pi.app)
00158 external_converter_pi.app->message("External Converter Plugin Configuration");
00159 }
00160
00161
00162
00163
00164 static void external_converter_cleanup(void)
00165 {
00166 PI_DEBUG(DBG_L2,"External Converter Plugin Cleanup");
00167 gnome_app_remove_menus (GNOME_APP (external_converter_pi.app->getApp()),
00168 N_("Tools/External Converter"), 1);
00169 }
00170
00171
00172
00173 static void external_converter_run(GtkWidget *w, void *data)
00174 {
00175 external_converter_Control *Popup = new external_converter_Control();
00176 Popup->run();
00177 PI_DEBUG(DBG_L2,"External Converter dialog opened");
00178 }
00179
00180
00182
00184
00185 gchar *select_mask;
00186
00188
00190
00192
00194
00195 gint file_error(const gchar *err_msg, const gchar *dir);
00196
00197 external_converter_Control::external_converter_Control ()
00198 {
00199 frontenddata = new external_converter_Data(getenv("PWD"),getenv("PWD"));
00200 XsmRescourceManager xrm("FilePathSelectionHistory","external_converter");
00201 xrm.Get ("SourceFile",&frontenddata->sourceFile, getenv("PWD"));
00202 xrm.Get ("DestFile", &frontenddata->destFile, getenv("PWD"));
00203 xrm.Get ("DestSuffix", &frontenddata->destSuffix, ".txt");
00204 xrm.Get ("ConverterPath", &frontenddata->converterPath, "/usr/local/bin/converter");
00205 xrm.Get ("ConverterOptions", &frontenddata->converterOptions, "PWD");
00206 }
00207
00208
00209 external_converter_Control::~external_converter_Control ()
00210 {
00211 delete frontenddata;
00212 }
00213
00214
00215 void external_converter_Control::run()
00216 {
00217 GtkWidget *dialog;
00218 GtkWidget *vbox;
00219 GtkWidget *hbox;
00220 GtkWidget *VarName;
00221 GtkWidget *variable;
00222 GtkWidget *help;
00223
00224 DlgStart();
00225 dialog = gnome_dialog_new(_("External Converter"), _("Convert"), GNOME_STOCK_BUTTON_CANCEL, NULL);
00226
00227 gnome_dialog_set_close(GNOME_DIALOG(dialog), FALSE);
00228 gnome_dialog_close_hides(GNOME_DIALOG(dialog), FALSE);
00229 gnome_dialog_set_default(GNOME_DIALOG(dialog), 3);
00230
00231 vbox = gtk_vbox_new (FALSE, 0);
00232 gtk_widget_show (vbox);
00233
00234 gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(dialog)->vbox), vbox, TRUE, TRUE, GNOME_PAD);
00235
00236
00237 hbox = gtk_hbox_new (FALSE, 0);
00238 gtk_widget_show (hbox);
00239 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
00240
00241 VarName = gtk_label_new (_("Source File"));
00242 gtk_widget_set_usize (VarName, 100, -1);
00243 gtk_widget_show (VarName);
00244 gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00245 gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00246 gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00247 gtk_box_pack_start (GTK_BOX (hbox), VarName, TRUE, TRUE, 0);
00248
00249 SrcFile = variable = gnome_file_entry_new( NULL, "Choose the source file");
00250 gnome_file_entry_set_default_path( GNOME_FILE_ENTRY ( variable ), frontenddata->sourceFile);
00251 gnome_file_entry_set_directory_entry(GNOME_FILE_ENTRY (variable), FALSE);
00252 gnome_file_entry_set_filename (GNOME_FILE_ENTRY (variable), frontenddata->sourceFile);
00253 gtk_box_pack_start (GTK_BOX (hbox), variable, TRUE, TRUE, 0);
00254 gtk_widget_show(variable);
00255
00256
00257 hbox = gtk_hbox_new (FALSE, 0);
00258 gtk_widget_show (hbox);
00259 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
00260
00261 VarName = gtk_label_new (_("Destination Path"));
00262 gtk_widget_set_usize (VarName, 100, -1);
00263 gtk_widget_show (VarName);
00264 gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00265 gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00266 gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00267 gtk_box_pack_start (GTK_BOX (hbox), VarName, TRUE, TRUE, 0);
00268
00269 DestinationPath = variable = gnome_file_entry_new( NULL, "Choose the destination directory");
00270 gnome_file_entry_set_default_path( GNOME_FILE_ENTRY ( variable ), frontenddata->destFile);
00271 gnome_file_entry_set_directory_entry(GNOME_FILE_ENTRY (variable), TRUE);
00272 gnome_file_entry_set_filename (GNOME_FILE_ENTRY (variable), frontenddata->destFile);
00273 gtk_box_pack_start (GTK_BOX (hbox), variable, TRUE, TRUE,0 );
00274 gtk_widget_show(variable);
00275
00276 hbox = gtk_hbox_new (FALSE, 0);
00277 gtk_widget_show (hbox);
00278 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
00279
00280 VarName = gtk_label_new (_("Suffix of Destination"));
00281 gtk_widget_set_usize (VarName, 100, -1);
00282 gtk_widget_show (VarName);
00283 gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00284 gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00285 gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00286 gtk_box_pack_start (GTK_BOX (hbox), VarName, TRUE, TRUE, 0);
00287
00288 DestinationSuffix = variable = gtk_entry_new ();
00289 gtk_widget_show (variable);
00290 gtk_box_pack_start (GTK_BOX (hbox), variable, TRUE, TRUE, 0);
00291 gtk_entry_set_text (GTK_ENTRY (variable), frontenddata->destSuffix);
00292
00293 help = gtk_button_new_with_label (_("Help"));
00294 gtk_widget_show (help);
00295 gtk_box_pack_start (GTK_BOX (hbox), help, TRUE, TRUE, 0);
00296 gtk_signal_connect (GTK_OBJECT (help), "clicked", GTK_SIGNAL_FUNC (show_info_callback),(void*)(_("Enter the file format suffix without any special characters.")));
00297
00298 gtk_signal_connect(GTK_OBJECT(dialog), "clicked", GTK_SIGNAL_FUNC(external_converter_Control::dlg_clicked), this);
00299
00300
00301 hbox = gtk_hbox_new (FALSE, 0);
00302 gtk_widget_show (hbox);
00303 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
00304
00305 VarName = gtk_label_new (_("Path to Converter"));
00306 gtk_widget_set_usize (VarName, 100, -1);
00307 gtk_widget_show (VarName);
00308 gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00309 gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00310 gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00311 gtk_box_pack_start (GTK_BOX (hbox), VarName, TRUE, TRUE, 0);
00312
00313 ConverterPath = variable = gnome_file_entry_new( NULL, "Choose the path to the external converter");
00314 gnome_file_entry_set_default_path( GNOME_FILE_ENTRY ( variable ), frontenddata->destFile);
00315 gnome_file_entry_set_directory_entry(GNOME_FILE_ENTRY (variable), FALSE);
00316 gnome_file_entry_set_filename (GNOME_FILE_ENTRY (variable), frontenddata->converterPath);
00317 gtk_box_pack_start (GTK_BOX (hbox), variable, TRUE, TRUE,0 );
00318 gtk_widget_show(variable);
00319 gtk_signal_connect(GTK_OBJECT(dialog), "clicked",GTK_SIGNAL_FUNC(external_converter_Control::dlg_clicked),this);
00320
00321 hbox = gtk_hbox_new (FALSE, 0);
00322 gtk_widget_show (hbox);
00323 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
00324
00325 VarName = gtk_label_new (_("Converter Options"));
00326 gtk_widget_set_usize (VarName, 100, -1);
00327 gtk_widget_show (VarName);
00328 gtk_label_set_justify(GTK_LABEL(VarName), GTK_JUSTIFY_LEFT);
00329 gtk_misc_set_alignment (GTK_MISC (VarName), 0.0, 0.5);
00330 gtk_misc_set_padding (GTK_MISC (VarName), 5, 0);
00331 gtk_box_pack_start (GTK_BOX (hbox), VarName, TRUE, TRUE, 0);
00332
00333 ConverterOptions = variable = gtk_entry_new ();
00334 gtk_widget_show (variable);
00335 gtk_box_pack_start (GTK_BOX (hbox), variable, TRUE, TRUE, 0);
00336 gtk_entry_set_text (GTK_ENTRY (variable), frontenddata->converterOptions);
00337
00338 help = gtk_button_new_with_label (_("Help"));
00339 gtk_widget_show (help);
00340 gtk_box_pack_start (GTK_BOX (hbox), help, TRUE, TRUE, 0);
00341 gtk_signal_connect (GTK_OBJECT (help), "clicked", GTK_SIGNAL_FUNC (show_info_callback),(void*)(_("Enter options for the external converter.")));
00342
00343 gtk_signal_connect(GTK_OBJECT(dialog), "clicked", GTK_SIGNAL_FUNC(external_converter_Control::dlg_clicked), this);
00344
00345 gtk_widget_show(dialog);
00346 }
00347
00348 void external_converter_Control::dlg_clicked(GnomeDialog * dialog, gint button_number, external_converter_Control *mic){
00349
00350 g_free(mic->frontenddata->sourceFile);
00351 mic->frontenddata->sourceFile = g_strdup(gnome_file_entry_get_full_path(GNOME_FILE_ENTRY (mic->SrcFile),TRUE));
00352 if(mic->frontenddata->sourceFile == NULL && !button_number)
00353 if(file_error("Source file does not exist",NULL)){
00354 gnome_dialog_close(dialog);
00355 goto finish;
00356 }
00357
00358 g_free(mic->frontenddata->destFile);
00359 mic->frontenddata->destFile = g_strdup(gnome_file_entry_get_full_path(GNOME_FILE_ENTRY (mic->DestinationPath),FALSE));
00360 if(access(mic->frontenddata->destFile,F_OK) && !button_number)
00361 if(file_error("Destination file does not exist",mic->frontenddata->destFile)){
00362 gnome_dialog_close(dialog);
00363 goto finish;
00364 }
00365
00366 g_free(mic->frontenddata->destSuffix);
00367 mic->frontenddata->destSuffix = g_strdup(gtk_entry_get_text (GTK_ENTRY (mic->DestinationSuffix)));
00368
00369 g_free(mic->frontenddata->converterPath);
00370 mic->frontenddata->converterPath = g_strdup(gnome_file_entry_get_full_path(GNOME_FILE_ENTRY (mic->ConverterPath),FALSE));
00371 if(access(mic->frontenddata->converterPath,F_OK) && !button_number)
00372 if(file_error("Destination file does not exist",mic->frontenddata->converterPath)){
00373 gnome_dialog_close(dialog);
00374 goto finish;
00375 }
00376
00377 g_free(mic->frontenddata->converterOptions);
00378 mic->frontenddata->converterOptions = g_strdup(gtk_entry_get_text (GTK_ENTRY (mic->ConverterOptions)));
00379
00380 switch(button_number){
00381 case 0: {gnome_dialog_close(dialog);
00382
00383 char command[1000];
00384 int len = strlen(mic->frontenddata->sourceFile);
00385 gchar* fname = g_strndup(mic->frontenddata->sourceFile,1000);
00386 gchar* buffer;
00387 while(buffer=strstr(fname,"/")){
00388 fname = strndup(buffer+1,1000);
00389 }
00390 buffer = g_strndup(fname,strlen(fname)-strlen(strrchr(fname, '.')));
00391
00392 len = strlen(mic->frontenddata->destFile);
00394 if (len > 0) {
00395 if(mic->frontenddata->destFile[len-1] != '/') strcat(mic->frontenddata->destFile, "/");
00396 }
00397 snprintf(command, 1000, "%s %s %s%s.%s %s &", mic->frontenddata->converterPath, mic->frontenddata->sourceFile, mic->frontenddata->destFile, buffer, mic->frontenddata->destSuffix, mic->frontenddata->converterOptions);
00398 system(command);
00399 break;}
00400
00401 case 1: {gnome_dialog_close(dialog);
00402 break;}
00403 }
00404 finish:
00405 XsmRescourceManager xrm("FilePathSelectionHistory","external_converter");
00406 xrm.Put ("SourceFile", mic->frontenddata->sourceFile);
00407 xrm.Put ("DestFile", mic->frontenddata->destFile);
00408 xrm.Put ("DestSuffix", mic->frontenddata->destSuffix);
00409 xrm.Put ("ConverterPath", mic->frontenddata->converterPath);
00410 xrm.Put ("ConverterOptions", mic->frontenddata->converterOptions);
00411
00412 mic->DlgDone();
00413
00414 }
00415
00417
00419
00421
00423
00424 external_converter_Data :: external_converter_Data(gchar *src, gchar *dst)
00425 {
00426 sourceFile = g_strdup(src);
00427 destFile = g_strdup(dst);
00428 }
00429
00430 external_converter_Data :: ~external_converter_Data()
00431 {
00432 g_free(sourceFile);
00433 g_free(destFile);
00434 }
00435
00437
00439