/* GnoSamba 0.3.3
 * copyright 1998-9 Perry Piplani
 * redistributable under the terms of the GPL:
 * http://www.gnu.org/copyleft/gpl.html
 */



#include "gtksamba.h"
#include <string.h>

static int smbwin_count=0;



int main (int argc, char *argv[]){

  gnome_init (PACKAGE,VERSION, argc, argv);

  smbwin_new(NULL);
  g_print("Built with gtk+-%d.%d.%d\n",
	  GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
  g_print ("Gnome support added\n");
  check_prefs();
  gtk_main ();
          
  return 0;
}



GtkWidget *smbwin_new(char *file){
  GtkWidget *window;
  GtkWidget *hpaned;
  GtkWidget *leftscroll;
  GtkWidget *rightnote;
  GtkWidget *servicelist;
  
  char *service_title[1] = {
    "Service name"
  };
  

  smbwin_count++;
  
  window=gnome_app_new (PACKAGE,PACKAGE);

  gtk_widget_set_usize(GTK_WIDGET(window), 500, 300);
  gtk_window_set_policy(GTK_WINDOW(window),TRUE,TRUE,FALSE);
  gtk_widget_realize (window);
  
  gtk_signal_connect(GTK_OBJECT(window),
		     "delete_event",
		     GTK_SIGNAL_FUNC(sw_delete_event),
		     window);

  sw_main_menu(window);
  sw_toolbars(window);

  hpaned = gtk_hpaned_new ();
  
  gnome_app_set_contents ( GNOME_APP(window), hpaned);
  gtk_paned_compute_position(GTK_PANED(hpaned),500,0,0);
  gtk_paned_set_position(GTK_PANED(hpaned), 150);
  gtk_widget_show (hpaned);

  servicelist = gtk_clist_new_with_titles( 1, service_title);

  gtk_object_set_data(GTK_OBJECT(window),"servicelist",servicelist);
 

  gtk_clist_set_selection_mode(GTK_CLIST(servicelist),
			       GTK_SELECTION_BROWSE);
  gtk_signal_connect(GTK_OBJECT(servicelist),
		     "select_row",
		     GTK_SIGNAL_FUNC(c_select_service),
		     window);

  leftscroll = gtk_scrolled_window_new(NULL, NULL);
  
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(leftscroll), 
				 GTK_POLICY_AUTOMATIC, 
				 GTK_POLICY_AUTOMATIC);
  gtk_widget_show (leftscroll);
  gtk_paned_add1 (GTK_PANED(hpaned), leftscroll);
  gtk_container_add (GTK_CONTAINER(leftscroll), servicelist);
  gtk_widget_show (servicelist);

  rightnote = gtk_notebook_new ();
  gtk_object_set_data(GTK_OBJECT(window),"rightnote",rightnote);
  gtk_notebook_set_show_tabs(GTK_NOTEBOOK (rightnote),FALSE);
  gtk_notebook_set_show_border(GTK_NOTEBOOK (rightnote),FALSE);
  gtk_paned_add2 (GTK_PANED(hpaned), rightnote);
  gtk_widget_show (rightnote);

  if(file)
    smbwin_open_lists(window,file);

  gtk_widget_show(window);
  return window;
}




gint sw_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data){
  c_make_exit_dialog(widget,data);
  return TRUE;
}


void c_smbwin_destroy(GtkWidget *widget, gpointer window){
  GtkWidget *diagwin;
  GtkWidget *filew;
  GtkWidget *inserter;

  diagwin=gtk_object_get_data(GTK_OBJECT(window),"dialog");
  if(diagwin)
    gtk_widget_destroy(diagwin);
 
  inserter=gtk_object_get_data(GTK_OBJECT(window),
			    "inserter");  
  if(inserter)
    gtk_widget_destroy(inserter);

  smbwin_clear_lists(GTK_WIDGET(window));
  filew=gtk_object_get_data(GTK_OBJECT(window),
			    "filew");
  gtk_widget_destroy(GTK_WIDGET(window));
  if(filew)
    gtk_widget_destroy(filew);

  smbwin_count--;
  if(smbwin_count <= 0)
    gtk_main_quit();
}

void c_smbwin_close(GtkWidget *button, gpointer window){
  gchar *filepath;

  filepath=gtk_object_get_data(GTK_OBJECT(window),"filepath");
  if(filepath){
    g_free(filepath);
    gtk_object_set_data(GTK_OBJECT(window),"filepath",NULL);
  }
  
  smbwin_clear_lists(GTK_WIDGET(window));
  gtk_window_set_title(GTK_WINDOW(window), "Gtksamba");

  return;

}
  


void c_smbwin_new(GtkWidget *button, gpointer nulldata){
  smbwin_new(NULL);
}


void smbwin_filesel_ok(GtkWidget *button, gpointer window){
  GtkWidget *filew;
  int write;
  GtkWidget *servicelist;

  servicelist=gtk_object_get_data(GTK_OBJECT(window),"servicelist");

  filew=gtk_object_get_data(GTK_OBJECT(window),
			    "filew");    
  gtk_widget_hide(GTK_WIDGET(filew));
  resensitize_sw(GTK_WIDGET(window));
  write=GPOINTER_TO_INT(gtk_object_get_data
			(GTK_OBJECT(window),
			 "write"));
  if(write)
    write_smb_file(servicelist,
		   gtk_file_selection_get_filename 
		   (GTK_FILE_SELECTION (filew)));

  else
  smbwin_open_lists(GTK_WIDGET(window), 
		    gtk_file_selection_get_filename 
		    (GTK_FILE_SELECTION (filew)));
  return;
}

void smbwin_filesel_cancel(GtkWidget *button, gpointer window){
  GtkWidget *filew;

  filew=gtk_object_get_data(GTK_OBJECT(window),
			    "filew");    
  gtk_widget_hide(GTK_WIDGET(filew));
  resensitize_sw(window);
  return;
}

int smbwin_filesel_delete(GtkWidget *widget, GdkEvent *event, 
			  gpointer window){
  GtkWidget *filew;

  filew=gtk_object_get_data(GTK_OBJECT(window),
			    "filew");    
  gtk_widget_hide(GTK_WIDGET(filew));
  resensitize_sw(GTK_WIDGET(window));
  return TRUE;
}

void cw_make_sensitive
(GtkWidget *widget){
  if(widget)
    gtk_widget_set_sensitive(widget,TRUE);
  return;
}


void smbwin_filesel(GtkWidget *button, gpointer window){
  char *value;
  GtkWidget *filew;

  desensitize_sw(window);

  filew=gtk_object_get_data(GTK_OBJECT(window),
			    "filew");
  
  if(!filew){
    filew = gtk_file_selection_new ("File selection");
    gtk_object_set_data(GTK_OBJECT(window),
			    "filew",filew);         

    gtk_signal_connect(GTK_OBJECT (filew),
		       "delete_event",
		       (GtkSignalFunc) smbwin_filesel_delete,
		       window);
		       
		       
    /* Connect the ok_button to file_ok_sel function */
    gtk_signal_connect 
      (GTK_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
       "clicked", (GtkSignalFunc) smbwin_filesel_ok, window);
          
    /* Connect the cancel_button to destroy the widget */
    gtk_signal_connect 
      (GTK_OBJECT (GTK_FILE_SELECTION (filew)->cancel_button),
       "clicked", (GtkSignalFunc) smbwin_filesel_cancel ,window);
    
    value= get_config_val("smblocal","conf");
    gtk_file_selection_set_filename(GTK_FILE_SELECTION(filew),
				    value);
    g_free(value);

  }
  gtk_widget_show(GTK_WIDGET (filew));

  return;

}

void c_conf_open(GtkWidget *widget, gpointer window){
  char *value;

  value= get_config_val("smblocal","conf");
  smbwin_open_lists(GTK_WIDGET(window),value);
  g_free(value);

}


void c_alt_open(GtkWidget *button, gpointer window){
  gtk_object_set_data(GTK_OBJECT(window),
		      "write",
		      GINT_TO_POINTER(0));
  smbwin_filesel(button, window);
}

  

void c_write_conf(GtkWidget *widget, gpointer window){
  GtkWidget *servicelist;
  gchar *filepath;

  servicelist=gtk_object_get_data(GTK_OBJECT(window),"servicelist");
  filepath=gtk_object_get_data(GTK_OBJECT(window),"filepath");  

  write_smb_file(servicelist,filepath);
  return;
}

void c_write_alt(GtkWidget *button, gpointer window){
  gtk_object_set_data(GTK_OBJECT(window),
		      "write",
		      GINT_TO_POINTER(1));
  smbwin_filesel(button, window);
}




void c_edit_param(GtkWidget *menu_item, gpointer window){
  GtkWidget *sublist;

  sublist=gtk_object_get_data(GTK_OBJECT(window),"sublist");
	
  if(sublist && GTK_CLIST(sublist)->selection)
    make_edit_dialog(GTK_WIDGET(window));
  else
    make_user_mesg("Cannot edit parameter\nNothing is selected",
		    "message");
  return;
}
  


void c_delete_param(GtkWidget *menu_item, gpointer window){
  GtkWidget *sublist;

  sublist=gtk_object_get_data(GTK_OBJECT(window),"sublist");
	
  if(sublist && GTK_CLIST(sublist)->selection)
    make_del_dialog(GTK_WIDGET(window));
  else
    make_user_mesg("Cannot delete parameter\nNothing is selected",
		    "message");
  return;
}

void c_delete_service(GtkWidget *menu_item, gpointer window){
  GtkWidget *servicelist;

  servicelist=gtk_object_get_data(GTK_OBJECT(window),"servicelist");


  if(GTK_CLIST(servicelist)->selection)
    make_del_service_dialog(GTK_WIDGET(window));
  else
    make_user_mesg("Cannot delete service\nNothing is selected",
		    "message");
  return;
}
void c_insert_service(GtkWidget *menu_item, gpointer window){
  make_insert_service_dialog(GTK_WIDGET(window));
}

void c_help_about(GtkWidget *widget, gpointer data){
  const gchar *authors[] = {"perry@opensystems.com",NULL};
  GtkWidget *about;

  about=gnome_about_new(PACKAGE,VERSION,
			"Copyright 1998-9 Perry Piplani",
			authors, NULL, NULL);
  gtk_widget_show (about);
  return;
}

void c_help_sel_param(GtkWidget *widget, gpointer window){
  int row;
  char *text;
  GtkWidget *sublist;
 
  sublist=gtk_object_get_data(GTK_OBJECT(window),"sublist");

  if(sublist && GTK_CLIST(sublist)->selection){
    row = (int)(GTK_CLIST(sublist)->selection->data);
    gtk_clist_get_text(GTK_CLIST(sublist),
		       row ,0,&text);
    make_param_help(text);
  }
  else
    make_user_mesg("No parameter selected:",
		    "Message");
}

  

void c_param_diag_cancel(GtkWidget *button, gpointer window){
  GtkWidget *dialog;
 
  resensitize_sw(window);
  
  dialog=gtk_object_get_data(GTK_OBJECT(window),"dialog");
  if(dialog){
    gtk_widget_destroy(dialog);
    gtk_object_set_data(GTK_OBJECT(window),"dialog",NULL);
  }
return;

}

void c_param_diag_delete(GtkWidget *button, GdkEvent *event, 
			  gpointer data){

  c_param_diag_cancel(button,data);
  return;
}



void c_make_exit_dialog(GtkWidget *widget, gpointer window){
  GtkWidget *diagwin;
  GtkWidget *label;

  diagwin = gnome_dialog_new ("Exit?",
				  GNOME_STOCK_BUTTON_OK,
				  GNOME_STOCK_BUTTON_CANCEL,
				  NULL);
  gtk_object_set_data(GTK_OBJECT(window),"dialog",diagwin);
  gtk_window_position (GTK_WINDOW (diagwin),GTK_WIN_POS_CENTER);
  gnome_dialog_button_connect(GNOME_DIALOG(diagwin), 0,
                     GTK_SIGNAL_FUNC(c_smbwin_destroy),
                     (gpointer) window);
  gnome_dialog_button_connect(GNOME_DIALOG(diagwin), 1,
                     GTK_SIGNAL_FUNC(c_param_diag_cancel),
                     (gpointer) window);

  label = gtk_label_new("Do you really want to quit?");
  gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (diagwin)->vbox), 
		      label, TRUE, TRUE, 10);
  gtk_widget_show (label);
  gtk_widget_show (diagwin);
  return;

}



void desensitize_sw(GtkWidget *window){
  GtkWidget *inserter;

  gtk_widget_set_sensitive(window,FALSE);
  inserter=gtk_object_get_data(GTK_OBJECT(window),
			       "inserter");  
  if(inserter)
    gtk_widget_set_sensitive(inserter,FALSE);
  return;
}


void resensitize_sw(GtkWidget *window){
  GtkWidget *inserter;
  
  gtk_widget_set_sensitive(window,TRUE);
  inserter=gtk_object_get_data(GTK_OBJECT(window),
			       "inserter");  
  if(inserter)
    gtk_widget_set_sensitive(inserter,TRUE);

  return;
}





  



syntax highlighted by Code2HTML, v. 0.9.1