Project Homepage Sourceforge Page CVS Repository Freshmeat.net Page Download project Author's Homepage

interface.c

Go to the documentation of this file.
00001 /*!\file interface.c
00002   \brief Interface function definitions.
00003   This file was originally created by glade
00004 */
00005 /* NOTICE:
00006     Copyright (C) 2004  Karl N. Redman (SleepingStill.com)
00007 
00008     This program is free software; you can redistribute it and/or modify
00009     it under the terms of the GNU General Public License as published by
00010     the Free Software Foundation; either version 2 of the License, or
00011     (at your option) any later version.
00012 
00013     This program is distributed in the hope that it will be useful,
00014     but WITHOUT ANY WARRANTY; without even the implied warranty of
00015     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016     GNU General Public License for more details.
00017 
00018     You should have received a copy of the GNU General Public License
00019     along with this program; if not, write to the Free Software
00020     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00021 
00022     For further information contact: parasyte@sleepingstill.com
00023 */
00024 
00025 
00026 
00027 #ifdef HAVE_CONFIG_H
00028 #  include <config.h>
00029 #endif
00030 
00031 #include <sys/types.h>
00032 #include <sys/stat.h>
00033 #include <unistd.h>
00034 #include <string.h>
00035 
00036 #include <gdk/gdkkeysyms.h>
00037 #include <gtk/gtk.h>
00038 
00039 #include "callbacks.h"
00040 #include "interface.h"
00041 #include "support.h"
00042 #include "main.h"
00043 #include "debug.h"
00044 #include "help.h"
00045 
00046 GtkWidget*
00047 create_mainWindow (void)
00048 {
00049   GtkWidget *mainWindow;
00050   GtkWidget *vbox1;
00051   GtkWidget *hbox1;
00052   //GtkWidget *combo1;
00053   GtkWidget *combo_entry1;
00054   guint browseButton_key;
00055   GtkWidget *browseButton;
00056   GtkWidget *hbox2;
00057   guint checkbutton_key;
00058   //GtkWidget *checkbutton;
00059   guint optionsButton_key;
00060   GtkWidget *optionsButton;
00061   guint runButton_key;
00062   GtkWidget *runButton;
00063   //GtkWidget *vbox2;
00064   GtkWidget *hbox3;
00065   guint label1_key;
00066   GtkWidget *label1;
00067   GtkWidget *whoEntry;
00068   GtkWidget *hbox4;
00069   guint label2_key;
00070   GtkWidget *label2;
00071   GtkWidget *passwordEntry;
00072   GtkAccelGroup *accel_group;
00073 
00074   accel_group = gtk_accel_group_new ();
00075 
00076   mainWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
00077 
00078   //set the policy for resizeing
00079   //gtk_window_set_policy (GTK_WINDOW (mainWindow), FALSE, FALSE, FALSE);
00080 
00081   gtk_object_set_data (GTK_OBJECT (mainWindow), "mainWindow", mainWindow);
00082   gtk_window_set_title (GTK_WINDOW (mainWindow), "run-free");
00083 
00084   vbox1 = gtk_vbox_new (FALSE, 0);
00085   gtk_widget_ref (vbox1);
00086   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "vbox1", vbox1,
00087                             (GtkDestroyNotify) gtk_widget_unref);
00088   gtk_widget_show (vbox1);
00089   gtk_container_add (GTK_CONTAINER (mainWindow), vbox1);
00090 
00091   hbox1 = gtk_hbox_new (FALSE, 0);
00092   gtk_widget_ref (hbox1);
00093   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "hbox1", hbox1,
00094                             (GtkDestroyNotify) gtk_widget_unref);
00095   gtk_widget_show (hbox1);
00096   gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
00097 
00098   combo1 = gtk_combo_new ();
00099   gtk_widget_ref (combo1);
00100   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "combo1", combo1,
00101                             (GtkDestroyNotify) gtk_widget_unref);
00102   gtk_widget_show (combo1);
00103   gtk_box_pack_start (GTK_BOX (hbox1), combo1, TRUE, TRUE, 0);
00104 
00105   combo_entry1 = GTK_COMBO (combo1)->entry;
00106   gtk_widget_ref (combo_entry1);
00107   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "combo_entry1", combo_entry1,
00108                             (GtkDestroyNotify) gtk_widget_unref);
00109 
00110   gtk_widget_show (combo_entry1);
00111 
00112   gtk_combo_set_use_arrows_always(GTK_COMBO(combo1), 1);
00113 
00114   browseButton = gtk_button_new_with_label ("");
00115   browseButton_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (browseButton)->child),
00116                                    "Bro_wse");
00117   gtk_widget_add_accelerator (browseButton, "clicked", accel_group,
00118                               browseButton_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
00119   gtk_widget_ref (browseButton);
00120   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "browseButton", browseButton,
00121                             (GtkDestroyNotify) gtk_widget_unref);
00122   gtk_widget_show (browseButton);
00123   gtk_box_pack_start (GTK_BOX (hbox1), browseButton, FALSE, FALSE, 0);
00124   gtk_widget_set_usize (browseButton, 49, -2);
00125 
00126   hbox2 = gtk_hbox_new (FALSE, 9);
00127   gtk_widget_ref (hbox2);
00128   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "hbox2", hbox2,
00129                             (GtkDestroyNotify) gtk_widget_unref);
00130   gtk_widget_show (hbox2);
00131   gtk_box_pack_start (GTK_BOX (vbox1), hbox2, TRUE, TRUE, 0);
00132 
00133   checkbutton = gtk_check_button_new_with_label ("");
00134   checkbutton_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (checkbutton)->child),
00135                                    "Run in _Terminal");
00136   gtk_widget_add_accelerator (checkbutton, "clicked", accel_group,
00137                               checkbutton_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
00138   gtk_widget_ref (checkbutton);
00139   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "checkbutton", checkbutton,
00140                             (GtkDestroyNotify) gtk_widget_unref);
00141   gtk_widget_show (checkbutton);
00142   gtk_box_pack_start (GTK_BOX (hbox2), checkbutton, FALSE, FALSE, 0);
00143 
00144   /**\note The options button and functionality is not implimented in
00145      this version of run-free
00146   */
00147   optionsButton = gtk_button_new_with_label ("");
00148   optionsButton_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (optionsButton)->child),
00149                                    "_Options");
00150   //gtk_widget_add_accelerator (optionsButton, "clicked", accel_group,
00151                               //optionsButton_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
00152   gtk_widget_ref (optionsButton);
00153   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "optionsButton", optionsButton,
00154                             (GtkDestroyNotify) gtk_widget_unref);
00155   //gtk_widget_show (optionsButton);
00156   gtk_box_pack_start (GTK_BOX (hbox2), optionsButton, FALSE, FALSE, 0);
00157 
00158   runButton = gtk_button_new_with_label ("");
00159   runButton_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (runButton)->child),
00160                                    "_Run");
00161   gtk_widget_add_accelerator (runButton, "clicked", accel_group,
00162                               runButton_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
00163   gtk_widget_ref (runButton);
00164   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "runButton", runButton,
00165                             (GtkDestroyNotify) gtk_widget_unref);
00166   gtk_widget_show (runButton);
00167   gtk_box_pack_start (GTK_BOX (hbox2), runButton, FALSE, FALSE, 0);
00168 
00169   /**\todo
00170      make sure that the runButton fits if the options button is
00171      re-added
00172   */
00173   //gtk_widget_set_usize (runButton, 49, -2);
00174   gtk_widget_set_usize (runButton, 103, -2);
00175 
00176   vbox2 = gtk_vbox_new (FALSE, 0);
00177   gtk_widget_ref (vbox2);
00178   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "vbox2", vbox2,
00179                             (GtkDestroyNotify) gtk_widget_unref);
00180 
00181   //don't show the second vbox until we're ready
00182   //gtk_widget_show (vbox2);
00183 
00184   gtk_box_pack_start (GTK_BOX (vbox1), vbox2, TRUE, TRUE, 0);
00185 
00186   hbox3 = gtk_hbox_new (FALSE, 14);
00187   gtk_widget_ref (hbox3);
00188   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "hbox3", hbox3,
00189                             (GtkDestroyNotify) gtk_widget_unref);
00190   gtk_widget_show (hbox3);
00191   gtk_box_pack_start (GTK_BOX (vbox2), hbox3, TRUE, TRUE, 0);
00192 
00193   label1 = gtk_label_new ("");
00194   label1_key = gtk_label_parse_uline (GTK_LABEL (label1),
00195                                    "Run _As");
00196   gtk_widget_ref (label1);
00197   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "label1", label1,
00198                             (GtkDestroyNotify) gtk_widget_unref);
00199   gtk_widget_show (label1);
00200   gtk_box_pack_start (GTK_BOX (hbox3), label1, FALSE, FALSE, 0);
00201 
00202   whoEntry = gtk_entry_new ();
00203   gtk_widget_ref (whoEntry);
00204   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "whoEntry", whoEntry,
00205                             (GtkDestroyNotify) gtk_widget_unref);
00206   gtk_widget_show (whoEntry);
00207   gtk_box_pack_start (GTK_BOX (hbox3), whoEntry, TRUE, TRUE, 0);
00208 
00209   hbox4 = gtk_hbox_new (FALSE, 0);
00210   gtk_widget_ref (hbox4);
00211   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "hbox4", hbox4,
00212                             (GtkDestroyNotify) gtk_widget_unref);
00213   gtk_widget_show (hbox4);
00214   gtk_box_pack_start (GTK_BOX (vbox2), hbox4, TRUE, TRUE, 0);
00215 
00216   label2 = gtk_label_new ("");
00217   label2_key = gtk_label_parse_uline (GTK_LABEL (label2),
00218                                    "Pa_ssword");
00219   gtk_widget_ref (label2);
00220   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "label2", label2,
00221                             (GtkDestroyNotify) gtk_widget_unref);
00222   gtk_widget_show (label2);
00223   gtk_box_pack_start (GTK_BOX (hbox4), label2, FALSE, FALSE, 0);
00224 
00225   passwordEntry = gtk_entry_new ();
00226   gtk_widget_ref (passwordEntry);
00227   gtk_object_set_data_full (GTK_OBJECT (mainWindow), "passwordEntry", passwordEntry,
00228                             (GtkDestroyNotify) gtk_widget_unref);
00229   gtk_widget_show (passwordEntry);
00230   gtk_box_pack_start (GTK_BOX (hbox4), passwordEntry, TRUE, TRUE, 0);
00231   gtk_entry_set_visibility (GTK_ENTRY (passwordEntry), FALSE);
00232 
00233   gtk_signal_connect (GTK_OBJECT (mainWindow), "destroy",
00234                       GTK_SIGNAL_FUNC (on_mainWindow_destroy),
00235                       NULL);
00236   gtk_signal_connect (GTK_OBJECT (mainWindow), "key_press_event",
00237                       GTK_SIGNAL_FUNC (on_mainWindow_key_press_event),
00238                       NULL);
00239   gtk_signal_connect (GTK_OBJECT (combo_entry1), "changed",
00240                       GTK_SIGNAL_FUNC (on_combo_entry1_changed),
00241                       NULL);
00242   gtk_signal_connect (GTK_OBJECT (combo1), "key_press_event",
00243                       GTK_SIGNAL_FUNC (on_combo_key_press_event),
00244                       NULL);
00245   gtk_signal_connect (GTK_OBJECT (combo_entry1), "key_press_event",
00246                       GTK_SIGNAL_FUNC (on_combo_entry1_key_press_event),
00247                       NULL);
00248   gtk_signal_connect (GTK_OBJECT (browseButton), "clicked",
00249                       GTK_SIGNAL_FUNC (on_browseButton_clicked),
00250                       NULL);
00251   gtk_signal_connect (GTK_OBJECT (checkbutton), "toggled",
00252                       GTK_SIGNAL_FUNC (on_checkbutton_toggled),
00253                       NULL);
00254   gtk_signal_connect (GTK_OBJECT (optionsButton), "clicked",
00255                       GTK_SIGNAL_FUNC (on_optionsButton_clicked),
00256                       NULL);
00257   gtk_signal_connect (GTK_OBJECT (runButton), "clicked",
00258                       GTK_SIGNAL_FUNC (on_runButton_clicked),
00259                       NULL);
00260   gtk_signal_connect (GTK_OBJECT (whoEntry), "grab_focus",
00261                       GTK_SIGNAL_FUNC (on_whoEntry_grab_focus),
00262                       NULL);
00263   gtk_signal_connect (GTK_OBJECT (passwordEntry), "grab_focus",
00264                       GTK_SIGNAL_FUNC (on_passwordEntry_grab_focus),
00265                       NULL);
00266 
00267   gtk_widget_add_accelerator (whoEntry, "grab_focus", accel_group,
00268                               label1_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
00269   gtk_widget_add_accelerator (passwordEntry, "grab_focus", accel_group,
00270                               label2_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
00271 
00272   gtk_combo_disable_activate(GTK_COMBO(combo1));
00273   gtk_widget_grab_focus (combo_entry1);
00274 
00275 
00276   gtk_window_add_accel_group (GTK_WINDOW (mainWindow), accel_group);
00277 
00278   return mainWindow;
00279 }
00280 
00281 GtkWidget*
00282 create_fileselection (void)
00283 {
00284   GtkWidget *fileselection;
00285   GtkWidget *ok_button1;
00286   GtkWidget *cancel_button1;
00287 
00288   fileselection = gtk_file_selection_new ("Select File");
00289   gtk_object_set_data (GTK_OBJECT (fileselection), "fileselection", fileselection);
00290   gtk_container_set_border_width (GTK_CONTAINER (fileselection), 10);
00291 
00292   ok_button1 = GTK_FILE_SELECTION (fileselection)->ok_button;
00293   gtk_object_set_data (GTK_OBJECT (fileselection), "ok_button1", ok_button1);
00294   gtk_widget_show (ok_button1);
00295   GTK_WIDGET_SET_FLAGS (ok_button1, GTK_CAN_DEFAULT);
00296 
00297   cancel_button1 = GTK_FILE_SELECTION (fileselection)->cancel_button;
00298   gtk_object_set_data (GTK_OBJECT (fileselection), "cancel_button1", cancel_button1);
00299   gtk_widget_show (cancel_button1);
00300   GTK_WIDGET_SET_FLAGS (cancel_button1, GTK_CAN_DEFAULT);
00301 
00302   //gtk_signal_connect (GTK_OBJECT (fileselection), "destroy",
00303                       //GTK_SIGNAL_FUNC (on_fileselection_destroy),
00304                       //NULL);
00305   gtk_signal_connect (GTK_OBJECT (fileselection), "delete_event",
00306                       GTK_SIGNAL_FUNC (on_fileselection_delete_event),
00307                       NULL);
00308   gtk_signal_connect (GTK_OBJECT (fileselection), "key_press_event",
00309                       GTK_SIGNAL_FUNC (on_fileselection_key_press_event),
00310                       NULL);
00311   gtk_signal_connect (GTK_OBJECT (ok_button1), "clicked",
00312                       GTK_SIGNAL_FUNC (on_ok_button1_clicked),
00313                       NULL);
00314   gtk_signal_connect (GTK_OBJECT (cancel_button1), "clicked",
00315                       GTK_SIGNAL_FUNC (on_cancel_button1_clicked),
00316                       NULL);
00317 
00318   return fileselection;
00319 }
00320 
00321 /** 
00322     \brief quickie/cheezy dialog for help
00323 
00324     \author Karl N. Redman
00325 
00326     \par Purpose: display a dialog box of keystrokes
00327 */
00328 void keystrokes_dialog(void)
00329 {
00330   GtkWidget *dialog;
00331   GtkWidget *scrollwin;
00332   GtkWidget *help;
00333   GtkWidget *ok;
00334 
00335   dialog = gtk_dialog_new();
00336 
00337   gtk_window_set_title(GTK_WINDOW(dialog), "run-free Keystroke Help");
00338   gtk_container_border_width(GTK_CONTAINER(dialog), 5);
00339   gtk_widget_set_usize(dialog, 300, 300);
00340 
00341   scrollwin = gtk_scrolled_window_new(NULL, NULL);
00342   gtk_container_border_width(GTK_CONTAINER(scrollwin), 10);
00343 
00344   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
00345   gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), scrollwin, TRUE, TRUE, 0);
00346   gtk_widget_show(scrollwin);
00347 
00348   help = gtk_label_new(KEYSTROKES);
00349   gtk_label_set_justify(help, GTK_JUSTIFY_LEFT);
00350   gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin), help);
00351   gtk_widget_show(help);
00352 
00353   ok = gtk_button_new_with_label("OK");
00354   gtk_signal_connect(GTK_OBJECT(ok), "clicked",GTK_SIGNAL_FUNC(dialog_ok_clicked), dialog);
00355   GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
00356   gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), ok, TRUE, TRUE, 0);
00357   gtk_widget_grab_default(ok);
00358   gtk_widget_show(ok);
00359 
00360   //show dialog
00361   gtk_widget_show(dialog);
00362 }
00363 
00364 
00365 

Generated on Thu Mar 18 07:26:17 2004 for run-free by doxygen 1.3.5