Logo Search packages:      
Sourcecode: gabedit version File versions  Download package

GInterfaceBasis.c

/* GInterfaceBasis.c */
/**********************************************************************************************************
Copyright (c) 2002-2007 Abdul-Rahman Allouche. All rights reserved

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the Gabedit), to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in all copies or substantial portions
  of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
************************************************************************************************************/


#include "../../Config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "../Common/Global.h"
#include "../Utils/UtilsInterface.h"
#include "../Geometry/GeomGlobal.h"
#include "GaussGlobal.h"
#include "GInterfaceBasis.h"

#define NC 3
#define NHboxBasis 3
static gchar selectedRowForCenter[100]="-1";
static GtkWidget *listC;
static gchar selectedRowForType[100]="-1";
static GtkWidget *listT;
static GtkWidget *HboxBasis[NHboxBasis];
static GtkWidget *VboxBasis;
static GtkWidget *FrameBasis;
static GtkWidget *EntryB[NHboxBasis];
static gchar *BasisName;

static void DialogueEditT(GtkWidget *w,gpointer data);
static void DialogueEditC(GtkWidget *w,gpointer data);

/*************************************************************************************************/
static void selectRow(GtkWidget* list, gint row)
{
      GtkTreePath *path;
      gchar* tmp = g_strdup_printf("%d",row);

      path = gtk_tree_path_new_from_string  (tmp);
      g_free(tmp);
      gtk_tree_selection_select_path  (gtk_tree_view_get_selection (GTK_TREE_VIEW (list)), path);
      gtk_tree_path_free(path);
}
/*************************************************************************************************/
static gchar *get_info_basis()
{
            gchar *temp;
            gchar **tmp;
      G_CONST_RETURN gchar *entrytext;
        gint nentry=0;
        gboolean Modify=FALSE;
        
        if(EntryB[0]!=NULL)nentry++;
        if(EntryB[1]!=NULL)nentry++;
        tmp = g_strsplit(BasisName,"G",2);

        temp = g_strdup(tmp[0]);
      if (strcmp(temp,BasisName) )
             Modify=TRUE;
        if(EntryB[0]!=NULL)
        {
            entrytext = gtk_entry_get_text(GTK_ENTRY(EntryB[0]));
      if (strcmp(entrytext,"No") )
           temp=g_strdup_printf("%s%s",temp,entrytext);
        }
      if (Modify)
            temp = g_strdup_printf("%sG",temp);
        if(EntryB[1]!=NULL)
        {
            entrytext = gtk_entry_get_text(GTK_ENTRY(EntryB[1]));
      if (strcmp(entrytext,"No") )
        {
            if (strcmp(entrytext,"Yes") )
                  temp=g_strdup_printf("%s%s",temp,entrytext);
                else
                  temp=g_strdup_printf("AUG-%s",temp);
        }
        }

       return temp;
}
/*************************************************************************************************/
static void  c_basis_presents(gchar *ListAtoms)
{
  GtkWidget *label;
  gchar *tlabel;
  gchar *lwhite;
  gchar *letoile;
  tlabel = g_malloc(1000);
  lwhite = g_malloc(100);
  letoile = g_malloc(100);
  sprintf(lwhite,"\n");
  sprintf(letoile,"*******************************************************\n");
  sprintf(tlabel,"%s%sThis basis is present for %s atoms\n%s"
                ,lwhite,letoile,ListAtoms,letoile);
  HboxBasis[2] = create_hbox(VboxBasis);
  label = gtk_label_new (tlabel);
  gtk_widget_ref (label);
  g_object_set_data_full (G_OBJECT (FrameBasis), "label", label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (label);
  gtk_box_pack_start (GTK_BOX (HboxBasis[2]), label, TRUE, TRUE, 2);
  g_free(tlabel);
  g_free(lwhite);
  g_free(letoile);
}
/*************************************************************************************************/
static void  c_polarization(guint nliste)
{
  gchar *liste[20];
  liste[0]=g_strdup("No");
  liste[1]=g_strdup("*");
  liste[2]=g_strdup("(d)");
  liste[3]=g_strdup("**");
  liste[4]=g_strdup("(d,p)");
  liste[5]=g_strdup("(d,pd)");
  liste[6]=g_strdup("(d,2pd)");
  liste[7]=g_strdup("(d,3pd)");
  liste[8]=g_strdup("(df,p)");
  liste[9]=g_strdup("(df,pd)");
  liste[10]=g_strdup("(df,2pd)");
  liste[11]=g_strdup("(df,3pd)");
  liste[12]=g_strdup("(2df,p)");
  liste[13]=g_strdup("(2df,pd)");
  liste[14]=g_strdup("(2df,2pd)");
  liste[15]=g_strdup("(2df,3pd)");
  liste[16]=g_strdup("(3df,p)");
  liste[17]=g_strdup("(3df,pd)");
  liste[18]=g_strdup("(3df,2pd)");
  liste[19]=g_strdup("(3df,3pd)");
  HboxBasis[1] = create_hbox(VboxBasis);
  EntryB[1]= create_combo_box_entry_liste(FrameBasis,HboxBasis[1]," Polarization function :",liste,nliste);
}
/*************************************************************************************************/
static void  c_diffuse_pp(guint nliste)
{
  gchar *liste[3];
  liste[0]=g_strdup("No");
  liste[1]=g_strdup("+");
  liste[2]=g_strdup("++");
  HboxBasis[0] = create_hbox(VboxBasis);
  EntryB[0]= create_combo_box_entry_liste(FrameBasis,HboxBasis[0]," Diffuse function :",liste,nliste);
}
/*************************************************************************************************/
static void  c_diffuse_aug()
{
  gchar *liste[2];
  int nliste ;
  nliste=2;
  liste[0]=g_strdup("No");
  liste[1]=g_strdup("Yes");
  HboxBasis[1] = create_hbox(VboxBasis);
  EntryB[1]= create_combo_box_entry_liste(FrameBasis,HboxBasis[1]," Diffuse function :",liste,nliste);
}
/********************************************************************************************************/
static void traite_basis (GtkComboBox *combobox, gpointer d)
{
      guint i;
      GtkTreeIter iter;
      gchar* data = NULL;


      if (gtk_combo_box_get_active_iter (combobox, &iter))
      {
            GtkTreeModel* model = gtk_combo_box_get_model(combobox);
            gtk_tree_model_get (model, &iter, 0, &data, -1);
      }
      if(BasisName) g_free(BasisName);
      BasisName = NULL;
      if ( strcmp((char *)data,"None(for DUMMY Center)") ) 
            BasisName =g_strdup((char *)data);
      else
            BasisName =g_strdup("Noselect");

      for (i=0;i<NHboxBasis;i++)
      {
            if(HboxBasis[i]!=NULL) gtk_widget_destroy(HboxBasis[i]);
            EntryB[i]=NULL;
            HboxBasis[i] = NULL;
      } 


      if (!strcmp((char *)data,"STO-3G") ) { c_polarization(2); c_basis_presents("H-Xe"); }
      else if (!strcmp((char *)data,"3-21G") ) { c_diffuse_pp(2); c_polarization(4); c_basis_presents("H-Xe"); }
      else if (!strcmp((char *)data,"6-21G") ) { c_polarization(3); c_basis_presents("H-Cl"); }
      else if (!strcmp((char *)data,"4-31G") ) { c_diffuse_pp(3); c_polarization(5); c_basis_presents("H-Ne"); }
      else if (!strcmp((char *)data,"6-31G") ) { c_diffuse_pp(3); c_polarization(20); c_basis_presents("H-Cl"); }
      else if (!strcmp((char *)data,"6-311G") ) { c_diffuse_pp(3); c_polarization(20); c_basis_presents("H-Kr"); }
      else if (!strcmp((char *)data,"D95") ) { c_diffuse_pp(3); c_polarization(20); c_basis_presents("H-Cl"); }
      else if (!strcmp((char *)data,"D95V") ) { c_diffuse_pp(3); c_polarization(5); c_basis_presents("H-Ne"); }
      else if (!strcmp((char *)data,"SHC") ) { c_diffuse_pp(3); c_polarization(20); c_basis_presents("H-Cl"); }
      else if (!strcmp((char *)data,"CEP-4G") ) { c_diffuse_pp(3); c_polarization(20); c_basis_presents("H-Cl"); }
      else if (!strcmp((char *)data,"CEP-31G") ) { c_diffuse_pp(3); c_polarization(20); c_basis_presents("H-Cl"); }
      else if (!strcmp((char *)data,"CEP-121G") ) { c_diffuse_pp(3); c_polarization(20); c_basis_presents("H-Cl"); }
      else if (!strcmp((char *)data,"LANL2MB") ) { c_basis_presents("H-Ba,La-Bi"); }
      else if (!strcmp((char *)data,"LANL2DZ") ) { c_basis_presents("H,Li-Ba,La-Bi"); }
      else if (!strcmp((char *)data,"cc-pVDZ") ) { c_diffuse_aug(); c_basis_presents("H-He,B-Ne"); }
      else if (!strcmp((char *)data,"cc-pVTZ") ) { c_diffuse_aug(); c_basis_presents("H-He,B-Ne"); }
      else if (!strcmp((char *)data,"cc-pVOZ") ) { c_diffuse_aug(); c_basis_presents("H-He,B-Ne"); }
      else if (!strcmp((char *)data,"cc-pV5Z") ) { c_diffuse_aug(); c_basis_presents("H,B-Ne"); }
      else if (!strcmp((char *)data,"ccl-pVDZ") ) { c_diffuse_aug(); c_basis_presents("Al-Ar"); }
      else if (!strcmp((char *)data,"ccl-pVTZ") ) { c_diffuse_aug(); c_basis_presents("Al-Ar"); }
      else if (!strcmp((char *)data,"cc-pV6Z") ) { c_diffuse_aug(); c_basis_presents("H,B-Ne"); }
      else if (!strcmp((char *)data,"SDD") ) { c_basis_presents("All"); }
      else if (!strcmp((char *)data,"SV") ) { c_basis_presents("H-Kr"); }
      else if (!strcmp((char *)data,"SVP") ) { c_basis_presents("H-Kr"); }
      else if (!strcmp((char *)data,"TZV") ) { c_polarization(20); c_basis_presents("H-Kr"); }
      else if (!strcmp((char *)data,"MIDIX") ) { c_basis_presents("H,C,N,O,F,P,S,Cl"); }
      gtk_widget_show_all(FrameBasis);
}
/********************************************************************************************************/
static GtkWidget *create_liste_basis(GtkWidget*win,GtkWidget *frame)
{
      GtkWidget *hbox;
      GtkWidget *vbox;
      GtkWidget *hseparator;
        GtkTreeIter iter;
        GtkTreeStore *store;
      GtkTreeModel *model;
      GtkWidget *combobox;
      GtkCellRenderer *renderer;

      vbox =create_vbox(frame);
      VboxBasis=vbox;
      FrameBasis=frame;
      hbox =create_hbox(vbox);

      store = gtk_tree_store_new (1,G_TYPE_STRING);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "None(for DUMMY Center)", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "STO-3G", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "3-21G", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "6-21G", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "4-31G", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "6-31G", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "6-311G", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "D95", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "D95V", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "SHC", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "CEP-4G", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "CEP-31G", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "CEP-121G", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "LANL2MB", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "LANL2DZ", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "SDD", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "cc-pVDZ", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "cc-pVTZ", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "cc-pVOZ", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "cc-pV5Z", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "cc-pV6Z", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "ccl-pVDZ", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "ccl-pVTZ", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "SV", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "SVP", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "TZV", -1);
        gtk_tree_store_append (store, &iter, NULL);
        gtk_tree_store_set (store, &iter, 0, "MIDIX", -1);

        model = GTK_TREE_MODEL (store);
      combobox = gtk_combo_box_new_with_model (model);
      /* gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE); */
      g_object_unref (model);
      gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 1);
      g_signal_connect (G_OBJECT(combobox), "changed", G_CALLBACK(traite_basis), NULL);
      renderer = gtk_cell_renderer_text_new ();
      gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
      gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL);

      hseparator = gtk_hseparator_new ();
      gtk_widget_show (hseparator);
      gtk_box_pack_start (GTK_BOX (vbox), hseparator, FALSE, FALSE, 1);
      gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 1);
      return combobox;
}
/*************************************************************************************************/
void  create_tab_type()
{
 gint i;
 gint j;
 gboolean OK;

 if(NSymbCenters>0)
 {
      NSymbTypes=1;
      BasisT=g_malloc(sizeof(BasisType));
      BasisT[NSymbTypes-1].CenterName = g_strdup(BasisC[0].CenterName);
      BasisT[NSymbTypes-1].BasisName  =g_strdup(BasisC[0].BasisName); 
      BasisT[NSymbTypes-1].Layer  =g_strdup(BasisC[0].Layer); 
 }
 else
 return;

 for(i=1;i<NSymbCenters;i++)
 {
 OK=TRUE;
  for (j=0;j<i;j++)
    if( !strcmp(BasisC[i].CenterName,BasisC[j].CenterName) && !strcmp(BasisC[i].Layer,BasisC[j].Layer) )
    {
      OK=FALSE;
      break;
    }
  if(!OK)continue;
  NSymbTypes++;
  BasisT=g_realloc(BasisT,NSymbTypes*sizeof(BasisType));
  BasisT[NSymbTypes-1].CenterName = g_strdup(BasisC[i].CenterName);
  BasisT[NSymbTypes-1].BasisName  = g_strdup(BasisC[i].BasisName); 
  BasisT[NSymbTypes-1].Layer  = g_strdup(BasisC[i].Layer); 
 }


}
/*************************************************************************************************/
void  create_tabs_list()
{
 guint Ncenters;
 guint i;
 gboolean OK[3];
 BasisCenter Tb;

 for(i=0;i<3;i++)
      if(Methodes[i]!=NULL && Basis[i]!=NULL && !strcmp(Basis[i],"GEN") )
            OK[i]=TRUE;
        else
            OK[i]=FALSE;

 NSymbCenters=0;
 if( !OK[0] && !OK[1] && !OK[2] )
 {
      NSymbTypes=0;
      return;
 }
  if(MethodeGeom == GEOM_IS_ZMAT)
    Ncenters = NcentersZmat;
  else
    Ncenters = NcentersXYZ;

 for(i=0;i<Ncenters;i++)
 {
 NSymbCenters++;
 if(NSymbCenters==1)
      BasisC=g_malloc(sizeof(BasisCenter));
 else
      BasisC=g_realloc(BasisC,NSymbCenters*sizeof(BasisCenter));
      
  if(MethodeGeom == GEOM_IS_ZMAT)
  {
   Tb.CenterName=g_strdup(Geom[i].Symb);  
   Tb.Layer=g_strdup(Geom[i].Layer);
  }
  else
  {
   Tb.CenterName=g_strdup(GeomXYZ[i].Symb);     
   Tb.Layer=g_strdup(GeomXYZ[i].Layer);
  }

 Tb.BasisName=g_strdup("STO-3G");
 if( (int)Tb.CenterName[0] == (int)'x' || (int)Tb.CenterName[0] == (int)'X' )
      Tb.BasisName=g_strdup("None");
 Tb.Changed=FALSE;
 Tb.Number=i+1;
 if (OK[0] )
      BasisC[NSymbCenters-1]=Tb;
 else
      NSymbCenters--;


  if(OK[1] && ( !strcmp(Tb.Layer,"High") || !strcmp(Tb.Layer," ") ) )
  {
      NSymbCenters++;
      BasisC=g_realloc(BasisC,NSymbCenters*sizeof(BasisCenter));
      BasisC[NSymbCenters-1]=Tb;
      BasisC[NSymbCenters-1].Layer=g_strdup("Medium");
  }

  if(OK[2] && ( !strcmp(Tb.Layer,"High") || !strcmp(Tb.Layer," ") ) )
  {
      NSymbCenters++;
      BasisC=g_realloc(BasisC,NSymbCenters*sizeof(BasisCenter));
      BasisC[NSymbCenters-1]=Tb;
      BasisC[NSymbCenters-1].Layer=g_strdup("Low");
  }
  if(OK[1] && !strcmp(Tb.Layer,"Medium")  )
  {
      NSymbCenters++;
      BasisC=g_realloc(BasisC,NSymbCenters*sizeof(BasisCenter));
      BasisC[NSymbCenters-1]=Tb;
      BasisC[NSymbCenters-1].Layer=g_strdup("Medium");
  }
  if(OK[2] && !strcmp(Tb.Layer,"Medium")  )
  {
      NSymbCenters++;
      BasisC=g_realloc(BasisC,NSymbCenters*sizeof(BasisCenter));
      BasisC[NSymbCenters-1]=Tb;
      BasisC[NSymbCenters-1].Layer=g_strdup("Low");
  }
  if(OK[2] && !strcmp(Tb.Layer,"Low")  )
  {
      NSymbCenters++;
      BasisC=g_realloc(BasisC,NSymbCenters*sizeof(BasisCenter));
      BasisC[NSymbCenters-1]=Tb;
      BasisC[NSymbCenters-1].Layer=g_strdup("Low");
  }

 }
/* end of i */ 

  create_tab_type();

}
/***********************************************************************************/
static void EditBasisC(GtkWidget *w,gpointer Entree)
{
            gchar *texts[4];
            gchar *temp;
        gint Nc;
      GtkTreeModel *model;
        GtkListStore *store;
      GtkTreeIter  iter;
      gint k;

      model = gtk_tree_view_get_model(GTK_TREE_VIEW(listC));
        store = GTK_LIST_STORE (model);


        Nc=atoi(selectedRowForCenter);
        temp = get_info_basis();
      if (!strcmp(temp,"Noselect") ) return;
      if (strcmp(temp,BasisC[Nc].BasisName) )
        {
            BasisC[Nc].Changed=TRUE;
            BasisC[Nc].BasisName=g_strdup(temp);
            texts[0] = g_strdup_printf("%d",BasisC[Nc].Number);
            texts[1] = g_strdup(BasisC[Nc].CenterName);
            texts[2] = g_strdup(BasisC[Nc].BasisName);
            texts[3] = g_strdup(BasisC[Nc].Layer);
            if(gtk_tree_model_get_iter_from_string (model, &iter, selectedRowForCenter)) gtk_list_store_remove(store, &iter);
            gtk_list_store_insert(store, &iter, Nc);
            for(k=0;k<4;k++) gtk_list_store_set (store, &iter, k, texts[k], -1);
        }
      BasisName=g_strdup("Noselect");
      selectRow(listC, Nc);
      sprintf(selectedRowForCenter,"%d",Nc);
}
/***********************************************************************************/
static void DialogueEditC(GtkWidget *w,gpointer data)
{
  GtkWidget *Dialogue;
  GtkWidget *Bouton;
  GtkWidget *frame;
  gint Nc;
  guint i;
  
  Nc=atoi(selectedRowForCenter);
  if(Nc<0 ) {
      Message("Please Select your center\n"," Warning ",TRUE);
   return;
  }
  Dialogue = gtk_dialog_new();
  gtk_window_set_modal(GTK_WINDOW(Dialogue),TRUE);
  gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER);
  gtk_window_set_title(GTK_WINDOW(Dialogue),"Basis");
  frame = create_frame(GTK_WIDGET(Dialogue),GTK_DIALOG(Dialogue)->vbox,"Title");
  for (i=0;i<NHboxBasis;i++)
  {
      EntryB[i]=NULL;
      HboxBasis[i] = NULL;
  } 
  create_liste_basis(GTK_WIDGET(Dialogue),frame);

  gtk_widget_realize(Dialogue);

  Bouton = create_button(Dialogue,"Cancel");
  gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton);
  g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GtkSignalFunc)gtk_widget_destroy, GTK_OBJECT(Dialogue));
  GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);

  Bouton = create_button(Dialogue,"OK");
  gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton);
  g_signal_connect(G_OBJECT(Bouton), "clicked", (GtkSignalFunc)EditBasisC, NULL);
  g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GtkSignalFunc)gtk_widget_destroy, GTK_OBJECT(Dialogue));
  GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);
  gtk_widget_grab_default(Bouton);

  gtk_widget_show_all(Dialogue);
}
/*************************************************************************************************/
static void eventDispatcherType(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{

      GtkTreePath *path;
      GtkTreeIter iter;
      GtkTreeModel *model;

      if (!event) return;
      if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget))
          && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) {
            gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)));
      }
      if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL))
      {
            if(path)
            {
                  model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
                  gtk_tree_selection_select_path  (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path);
                  sprintf(selectedRowForType ,gtk_tree_path_to_string(path));
                  gtk_tree_model_get_iter (model, &iter, path);
                  gtk_tree_path_free(path);
                  if (event->type == GDK_2BUTTON_PRESS && ((GdkEventButton *) event)->button == 1)
                        DialogueEditT(NULL,NULL);
            }
            else sprintf(selectedRowForType ,"-1");
      }
      GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event);
}
/*************************************************************************************************/
static void eventDispatcherCenter(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{

      GtkTreePath *path;
      GtkTreeIter iter;
      GtkTreeModel *model;

      if (!event) return;
      if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget))
          && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) {
            gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)));
      }
      if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL))
      {
            if(path)
            {
                  model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
                  gtk_tree_selection_select_path  (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path);
                  sprintf(selectedRowForCenter ,gtk_tree_path_to_string(path));
                  gtk_tree_model_get_iter (model, &iter, path);
                  gtk_tree_path_free(path);
                  if (event->type == GDK_2BUTTON_PRESS && ((GdkEventButton *) event)->button == 1)
                        DialogueEditC(NULL,NULL);
            }
            else sprintf(selectedRowForCenter ,"-1");
      }
      GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event);
}
/*************************************************************************************************/
static void EditBasisT(GtkWidget *w,gpointer Entree)
{
            gchar *texts[3];
            gchar *texts3[4];
            gchar *temp;
        gint Nc;
        gint i;
      GtkTreeModel *model;
        GtkListStore *store;
      GtkTreeIter  iter;
      gint k;
      GtkTreeModel *modelCenter;
        GtkListStore *storeCenter;
      GtkTreeIter  iterCenter;
      gchar pathString[10];
      gint kc = 0;

      model = gtk_tree_view_get_model(GTK_TREE_VIEW(listT));
        store = GTK_LIST_STORE (model);

      modelCenter = gtk_tree_view_get_model(GTK_TREE_VIEW(listC));
        storeCenter = GTK_LIST_STORE (modelCenter);

        Nc=atoi(selectedRowForType);
        temp = get_info_basis();
      if (!strcmp(temp,"Noselect") ) return;
        BasisT[Nc].BasisName=g_strdup(temp);
      texts[0] = g_strdup(BasisT[Nc].CenterName);
      texts[1] = g_strdup(BasisT[Nc].BasisName);
      texts[2] = g_strdup(BasisT[Nc].Layer);

      if(gtk_tree_model_get_iter_from_string (model, &iter, selectedRowForType)) gtk_list_store_remove(store, &iter);
      gtk_list_store_insert(store, &iter, Nc);
      for(k=0;k<3;k++) gtk_list_store_set (store, &iter, k, texts[k], -1);
      selectRow(listT, Nc);
      sprintf(selectedRowForType,"%d",Nc);

        for(i=0;i<NSymbCenters;i++)
      if(!strcmp(BasisC[i].CenterName,BasisT[Nc].CenterName) && !strcmp(BasisC[i].Layer,BasisT[Nc].Layer))
        {
            BasisC[i].Changed=FALSE;
            BasisC[i].BasisName=g_strdup(temp);
            texts3[0] = g_strdup_printf("%d",BasisC[i].Number);
            texts3[1] = g_strdup(BasisC[i].CenterName);
            texts3[2] = g_strdup(BasisC[i].BasisName);
            texts3[3] = g_strdup(BasisC[i].Layer);
            sprintf(pathString,"%d",i);
            if(gtk_tree_model_get_iter_from_string (modelCenter, &iterCenter, pathString)) gtk_list_store_remove(storeCenter, &iterCenter);
            gtk_list_store_insert(storeCenter, &iterCenter, i);
            for(k=0;k<4;k++) gtk_list_store_set (storeCenter, &iterCenter, k, texts3[k], -1);
            kc = i;
        }
      BasisName=g_strdup("Noselect");
      if(NSymbCenters>=0)
      {
            selectRow(listC, kc);
            sprintf(selectedRowForCenter,"%d",kc);
      }
}

/*******************************************************************/
static void DialogueEditT(GtkWidget *w,gpointer data)
{
  GtkWidget *Dialogue;
  GtkWidget *Bouton;
  GtkWidget *frame;
  gint Nc;
  guint i;
  
  Nc=atoi(selectedRowForType);
  if(Nc<0 ) {
      Message("Please Select your center \n"," Warning ",TRUE);
   return;
  }
  Dialogue = gtk_dialog_new();
  gtk_window_set_modal(GTK_WINDOW(Dialogue),TRUE);
  gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER);
  gtk_window_set_title(GTK_WINDOW(Dialogue),"Basis");

  frame = create_frame(GTK_WIDGET(Dialogue),GTK_DIALOG(Dialogue)->vbox,"Title");
  for (i=0;i<NHboxBasis;i++)
  {
      EntryB[i]=NULL;
      HboxBasis[i] = NULL;
  } 
  create_liste_basis(GTK_WIDGET(Dialogue),frame);

  gtk_widget_realize(Dialogue);

  Bouton = create_button(Dialogue,"Cancel");
  gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton);
  g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GtkSignalFunc)gtk_widget_destroy, GTK_OBJECT(Dialogue));
  GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);

  Bouton = create_button(Dialogue,"OK");
  gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton);
  g_signal_connect(G_OBJECT(Bouton), "clicked", (GtkSignalFunc)EditBasisT, NULL);
  g_signal_connect_swapped(G_OBJECT(Bouton), "clicked", (GtkSignalFunc)gtk_widget_destroy, GTK_OBJECT(Dialogue));
  GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);
  gtk_widget_grab_default(Bouton);

  gtk_widget_show_all(Dialogue);
}
/***************************************************************************************************/
static void append_list_type()
{
      gchar *texts[3];
      gint Nc;
      GtkTreeModel *model;
        GtkListStore *store;
      GtkTreeIter  iter;
      gint k;

      model = gtk_tree_view_get_model(GTK_TREE_VIEW(listT));
        store = GTK_LIST_STORE (model);

      for(Nc=0;Nc<NSymbTypes;Nc++)
      {
            texts[0] = g_strdup(BasisT[Nc].CenterName);
            texts[1] = g_strdup(BasisT[Nc].BasisName);
            texts[2] = g_strdup(BasisT[Nc].Layer);
            gtk_list_store_append(store, &iter);
            for(k=0;k<3;k++) gtk_list_store_set (store, &iter, k, texts[k], -1);
      }
      if(NSymbTypes>0)
      {
            selectRow(listT, 0);
            sprintf(selectedRowForType,"0");
      }
}
/***************************************************************************************************/
void create_basis_type_list(GtkWidget *vbox)
{
  GtkWidget *scr;
  GtkWidget *button;
  GtkWidget *hbox;
  guint i;
  guint Factor=7;
  guint widall=0;
  gchar *titres[3]={    " Symbol "," Basis ", " Layer "};
  gint width[3]={6,18,8 };

  GtkListStore *store;
  GtkTreeModel *model;
  GtkCellRenderer *renderer;
  GtkTreeViewColumn *column;
  GtkTreeSelection *select;
  
  sprintf(selectedRowForType,"-1");
  for(i=0;i<2;i++)
      widall+=width[i];
  widall=widall*Factor;

  scr=gtk_scrolled_window_new(NULL,NULL);
  gtk_box_pack_start(GTK_BOX (vbox), scr,FALSE, FALSE, 2);
  gtk_widget_set_size_request(scr,widall,(gint)(ScreenHeight*0.3));

  store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
  model = GTK_TREE_MODEL (store);

  listT = gtk_tree_view_new_with_model (model);
  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (listT), TRUE);
  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (listT), TRUE);
  gtk_tree_view_set_reorderable(GTK_TREE_VIEW (listT), TRUE);

  for (i=0;i<3;i++)
  {
      column = gtk_tree_view_column_new ();
      gtk_tree_view_column_set_title (column, titres[i]);
      renderer = gtk_cell_renderer_text_new ();
      gtk_tree_view_column_pack_start (column, renderer, TRUE);
      gtk_tree_view_column_set_min_width(column, width[i]*Factor);
      gtk_tree_view_column_set_attributes (column, renderer, "text", i, NULL);
      gtk_tree_view_append_column (GTK_TREE_VIEW (listT), column);
  }
  
  gtk_container_add(GTK_CONTAINER(scr),listT);
  select = gtk_tree_view_get_selection (GTK_TREE_VIEW (listT));
  gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
  g_signal_connect(listT, "button_press_event", G_CALLBACK(eventDispatcherType), NULL);

  gtk_widget_show (listT);
  hbox = create_hbox_false(vbox);

  button = gtk_button_new_with_label ("Edit Basis");
  g_signal_connect(G_OBJECT(button), "clicked", (GtkSignalFunc)DialogueEditT,NULL);
  gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 0);

  gtk_widget_show (button);
}
/******************************************************************************/
static void append_list_center()
{
      gchar *texts[4];
      gint Nc;
      GtkTreeModel *model;
        GtkListStore *store;
      GtkTreeIter  iter;
      gint k;

      model = gtk_tree_view_get_model(GTK_TREE_VIEW(listC));
        store = GTK_LIST_STORE (model);
  
      for(Nc=0;Nc<NSymbCenters;Nc++)
      {
            texts[0] = g_strdup_printf("%d",BasisC[Nc].Number);
            texts[1] = g_strdup(BasisC[Nc].CenterName);
            texts[2] = g_strdup(BasisC[Nc].BasisName);
            texts[3] = g_strdup(BasisC[Nc].Layer);
            gtk_list_store_append(store, &iter);
            for(k=0;k<4;k++) gtk_list_store_set (store, &iter, k, texts[k], -1);
      }
      if(NSymbCenters>0)
      {
            selectRow(listC, 0);
            sprintf(selectedRowForCenter,"0");
      }
}
/******************************************************************************/
void create_basis_center_list(GtkWidget *vbox)
{
  GtkWidget *scr;
  GtkWidget *button;
  GtkWidget *hbox;
  guint i;
  guint Factor=7;
  guint widall=0;
  gchar *titres[4]={    " Center Number ", " Symbol "," Basis ", " Layer "};
  gint width[4]={12,6,18,8 };
  GtkListStore *store;
  GtkTreeModel *model;
  GtkCellRenderer *renderer;
  GtkTreeViewColumn *column;
  GtkTreeSelection *select;
  
  for(i=0;i<2;i++) widall+=width[i];
  widall=widall*Factor;

  scr=gtk_scrolled_window_new(NULL,NULL);
  gtk_box_pack_start(GTK_BOX (vbox), scr,FALSE, FALSE, 2);
  gtk_widget_set_size_request(scr,widall,(gint)(ScreenHeight*0.3));

  store = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
  model = GTK_TREE_MODEL (store);

  listC = gtk_tree_view_new_with_model (model);
  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (listC), TRUE);
  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (listC), TRUE);
  gtk_tree_view_set_reorderable(GTK_TREE_VIEW (listC), TRUE);

  for (i=0;i<4;i++)
  {
      column = gtk_tree_view_column_new ();
      gtk_tree_view_column_set_title (column, titres[i]);
      renderer = gtk_cell_renderer_text_new ();
      gtk_tree_view_column_pack_start (column, renderer, TRUE);
      gtk_tree_view_column_set_min_width(column, width[i]*Factor);
      gtk_tree_view_column_set_attributes (column, renderer, "text", i, NULL);
      gtk_tree_view_append_column (GTK_TREE_VIEW (listC), column);
  }
  
  gtk_container_add(GTK_CONTAINER(scr),listC);
  select = gtk_tree_view_get_selection (GTK_TREE_VIEW (listC));
  gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
  g_signal_connect(listC, "button_press_event", G_CALLBACK(eventDispatcherCenter), NULL);

  hbox = create_hbox_false(vbox);

  button = gtk_button_new_with_label ("Edit Basis");
  g_signal_connect(G_OBJECT(button), "clicked", (GtkSignalFunc)DialogueEditC,NULL);
  gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 0);

  gtk_widget_show (button);


}
/*************************************************************************************************/
void create_basis_interface (GtkWidget *window,GtkWidget *hbox)
{
  GtkWidget *vbox;
  GtkWidget *label;
  GtkWidget *vseparator;
  GtkWidget *Frame;

  Frame = create_frame(window,hbox,"Basis");

  hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (hbox);
  g_object_set_data_full (G_OBJECT (Frame), "hbox", hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (hbox);
  gtk_container_add (GTK_CONTAINER (Frame), hbox);

  vbox = gtk_vbox_new (FALSE, 0);
  gtk_widget_ref (vbox);
  g_object_set_data_full (G_OBJECT (Frame), "vbox", vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (vbox);
  gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5);

  label = gtk_label_new (" Define basis by type of center ");
  gtk_widget_ref (label);
  g_object_set_data_full (G_OBJECT (Frame), "label", label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (label);
  gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2);

  create_basis_type_list(vbox);
  append_list_type();

  vseparator = create_vseparator (hbox);

  vbox = gtk_vbox_new (FALSE, 0);
  gtk_widget_ref (vbox);
  g_object_set_data_full (G_OBJECT (Frame), "vbox", vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (vbox);
  gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5);

  label = gtk_label_new (" Define basis center by center (not recommended) ");
  gtk_widget_ref (label);
  g_object_set_data_full (G_OBJECT (Frame), "label", label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (label);
  gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2);



  create_basis_center_list(vbox);
  append_list_center();
  gtk_widget_show_all (Frame);
}
/*************************************************************************************************/
void GAjoutePageBasis(GtkWidget *NoteBook)
{
  GtkWidget *window1;
  GtkWidget *Frame;
  GtkWidget *LabelOnglet;
  GtkWidget *LabelMenu;
  GtkWidget *vbox;
  GtkWidget *hbox;
  gint i;
  

  for (i=0;i<NHboxBasis;i++)
  {
   EntryB[i]=NULL;
   HboxBasis[i] = NULL;
  } 
  BasisName=g_strdup("Noselect");
  create_tabs_list();
  Frame = gtk_frame_new(NULL);
  gtk_container_set_border_width(GTK_CONTAINER(Frame), 10);

  LabelOnglet = gtk_label_new("Basis Generated");
  LabelMenu = gtk_label_new("Basis");
  gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook),
                                Frame,
                                LabelOnglet, LabelMenu);

  window1 = Frame;
  g_object_set_data(G_OBJECT (window1), "window1", window1);

  vbox =create_vbox(window1);

  hbox =create_hbox_false(vbox);

  create_basis_interface(window1,hbox);



}


Generated by  Doxygen 1.6.0   Back to index