Fichier.h

Aller à la documentation de ce fichier.
00001 /* =============================================================================
00002  * Nouveau fichier *************************************************************
00003 ==============================================================================*/
00004 void Fichier_Nouveau()
00005 {
00006   //(1) Insérer nouvelle entrée dans le tableau
00007   Ajouter_ELEMENT(AppNEWfile, NULL, NBfichiersOuverts++);
00008   estModifie[NB] = TRUE;
00009   Ajouter_TreeviewItem(&iterProj, AppNEWfile, NULL, NULL);
00010 /*     GtkTreeIter iter;
00011      gtk_tree_store_insert (pTreeStore,&iter,&iterProj,2);
00012 
00013      GdkPixbuf *pImg = gdk_pixbuf_new_from_file (IMGs[1], NULL);
00014      gtk_tree_store_set (pTreeStore, &iter, 0,NB++, 1,pImg, 2,AppNEWfile, -1);
00015 */
00016 /*
00017   // Remonte pour trouver le dossier, et son iter
00018 
00019   //Liste_Add_Msg("idACTIF=%d", idACTIF);
00020   gshort n;
00021   for (n=idACTIF; n>-1; n--)
00022   {
00023     //Liste_Add_Msg("n=%d", n);
00024     if (ext[n]==-1)
00025     {
00026      GtkTreeIter iter;
00027      //GtkTreeIter itDOSSIER;
00028      //GtkTreePath *path;
00029      //Liste_Add_Msg("bingo %s %d", nom[n], n);
00030      gtk_tree_store_insert (pTreeStore,&iter,NULL,5);
00031      //if (gtk_tree_model_get_iter(pTreeModel, &itDOSSIER, path))
00032      //{
00033      //   gtk_tree_model_get (pTreeModel, &TVit, 0, &idACTIF, -1);
00034      //}
00035      break;
00036     }
00037   }
00038   //Ajouter_TreeviewItem(&TVit, AppNEWfile, NULL, NULL);
00039 */
00040 
00041   //(2) Insérer nouvelle entrée dans le treeview
00042   //GtkTreeIter i;
00043   //i = Ajouter_TreeviewItem(&iterProj, AppNEWfile, NULL, NULL);
00044   //gtk_tree_store_move_after (pTreeStore, &i, NULL);
00045   //gtk_tree_store_move_after (pTreeStore, &i, &TVit);
00046 
00047   //(3) Créer nouvel onglet et son textbox/sourceBuffer
00048   TxtBuf[NB-1] = Creer_Onglet(AppNEWfile);
00049 }
00050 /* =============================================================================
00051  * Choisir un fichier **********************************************************
00052 ==============================================================================*/
00053 void Fichier_Choisir()//GtkWidget *pWidget, gpointer data)
00054 {
00055   gchar *nom = NULL;
00056   gchar *chemin=NULL;
00057 
00058   chemin = DLG_Open(FALSE);
00059   if (chemin)
00060   {
00061     nom  = g_path_get_basename(chemin);
00062     //(1) Insérer nouvelle entrée dans le tableau
00063     Ajouter_ELEMENT(nom, chemin, NBfichiersOuverts++);
00064     //(2) Insérer nouvelle entrée dans le treeview
00065     Ajouter_TreeviewItem(&iterProj, nom, chemin, NULL);
00066     //(3) Créer nouvel onglet et son textbox/sourceBuffer
00067     TxtBuf[NB-1] = Creer_Onglet(nom);
00068     //(4) Charger le textbox depuis un fichier
00069     Fichier_Charger(chemin, TxtBuf[NB-1]);
00070     estModifie[NB-1]=FALSE;
00071     g_free(nom);
00072     g_free(chemin);
00073   }
00074 }
00075 /* =============================================================================
00076  * (4) Charger un fichier ******************************************************
00077 ==============================================================================*/
00078 void Fichier_Charger(gchar* chemin, GtkSourceBuffer *sBuf)
00079 {
00080    gchar *tmp = NULL, *utf8=NULL;
00081    GtkTextIter iter;
00082 
00083    if (g_file_get_contents (chemin, &tmp, NULL, NULL))
00084    {
00085      if (!g_utf8_validate (tmp, -1, NULL))
00086      {
00087        //g_print("Fichier non UTF-8 -> conversion en utf-8.\n");
00088        utf8 = g_locale_to_utf8 (tmp, -1, NULL, NULL, NULL);
00089        tmp=g_strdup(utf8);
00090        g_free(utf8);
00091      }
00092      gtk_source_buffer_begin_not_undoable_action (sBuf);
00093       gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER(sBuf), &iter, 0);
00094       gtk_text_buffer_insert (GTK_TEXT_BUFFER(sBuf), &iter, tmp, -1);
00095       g_free (tmp);
00096       // Place curseur au début
00097       gtk_text_buffer_set_modified (GTK_TEXT_BUFFER(sBuf), FALSE);
00098       gtk_text_buffer_get_start_iter (GTK_TEXT_BUFFER(sBuf), &iter);
00099       gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER(sBuf), &iter);
00100 
00101       g_signal_connect (G_OBJECT (sBuf), "changed", G_CALLBACK (Fichier_Modif), NULL);
00102      gtk_source_buffer_end_not_undoable_action (sBuf);
00103    }
00104 }
00105 /* =============================================================================
00106  * Fonction Rechercher *********************************************************
00107 ==============================================================================*/
00108 void Fichier_Rechercher(void)
00109 {
00110   GtkTextIter iter, mstart, mend;
00111   const gchar *text = "void";
00112   gboolean found;
00113   GtkTextMark *last_pos;
00114 
00115   gtk_text_buffer_get_start_iter (GTK_TEXT_BUFFER(TxtBuf[idACTIF]), &iter);
00116 
00117   found = gtk_text_iter_forward_search (&iter, text, 0, &mstart, &mend, NULL);
00118   if (found)
00119   {
00120    g_print("found\n");
00121    //gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER(TxtBuf[idACTIF]), iter);
00122    gtk_source_view_set_highlight_current_line(TXT[idACTIF], TRUE);
00123    gtk_text_buffer_select_range (GTK_TEXT_BUFFER(TxtBuf[idACTIF]), &mstart, &mend);
00124    last_pos = gtk_text_buffer_create_mark (GTK_TEXT_BUFFER(TxtBuf[idACTIF]), "last_pos", &mend, FALSE);
00125    gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(TXT[idACTIF]), last_pos);
00126   }
00127   else  g_print("nan\n");
00128 }
00129 /* =============================================================================
00130  * Un Fichier est modifié ******************************************************
00131 ==============================================================================*/
00132 void Fichier_Modif()
00133 {
00134   GtkWidget *p_child = NULL;
00135   GtkLabel *label = NULL;
00136 
00137   if (!estModifie[idACTIF])
00138   {
00139     estModifie[idACTIF] = TRUE;
00140 
00141     p_child = gtk_notebook_get_nth_page (GTK_NOTEBOOK(Onglets), idOngletACTIF);
00142     label = GTK_LABEL (gtk_notebook_get_tab_label (GTK_NOTEBOOK(Onglets), p_child));
00143     gtk_label_set_text (label, g_strdup_printf ("%s *", nom[idACTIF]));
00144   }
00145 }
00146 /* =============================================================================
00147  * Commande UNDO ********************************************************
00148 ==============================================================================*/
00149 void Fichier_UNDO()
00150 {
00151   gtk_source_buffer_undo (TxtBuf[idACTIF]);
00152 }
00153 /* =============================================================================
00154  * Commande REDO ***************************************************************
00155 ==============================================================================*/
00156 void Fichier_REDO()
00157 {
00158   gtk_source_buffer_redo (TxtBuf[idACTIF]);
00159 }
00160 /* =============================================================================
00161  * Commande Enregistrer ********************************************************
00162 ==============================================================================*/
00163 void Fichier_Enregistrer()
00164 {
00165   Fichier_Ecrire(idACTIF);
00166 }
00167 /* =============================================================================
00168  * Enregistrer TOUS les fichiers modifiés **************************************
00169 ==============================================================================*/
00170 void Fichier_Enregistrer_Tous_Les_Fichier()
00171 {
00172   gushort n;
00173   for (n=0; n<NB; n++)
00174   {
00175     if (estModifie[n]) Fichier_Ecrire(n);
00176   }
00177 }
00178 /* =============================================================================
00179  * Choisir vers où enregistrer *************************************************
00180 ==============================================================================*/
00181 void Fichier_EnregistrerSous()
00182 {
00183   GtkWidget *dialog;
00184   gchar *chem=NULL;
00185   gchar *dosRELATIF=NULL;
00186   gchar *newNOM=NULL;
00187   gchar *contenu=NULL;
00188   FILE *pF;
00189   GtkTextIter start, end;
00190   GtkWidget *p_child = NULL;
00191   GtkLabel *label = NULL;
00192 
00193 
00194   dialog = gtk_file_chooser_dialog_new ("Enregistrer Sous", NULL,
00195                                 GTK_FILE_CHOOSER_ACTION_SAVE,
00196                                 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
00197                                 GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
00198 
00199   dosRELATIF = g_path_get_dirname(chemin[idACTIF]);
00200   chem = g_strdup_printf("%s/%s/", g_get_current_dir(), dosRELATIF);
00201   gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), chem);
00202   gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), nom[idACTIF]);
00203 
00204   if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
00205   {
00206     chem = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
00207     //g_print("je vais écrire %s\n", chem);
00208     pF = fopen (chem,"w");
00209     if (pF)
00210     {
00211       // obtient texte depuis le GtkSourceBuffer
00212       gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER(TxtBuf[idACTIF]), &start, &end);
00213       contenu = gtk_text_buffer_get_text (GTK_TEXT_BUFFER(TxtBuf[idACTIF]),
00214                                          &start, &end, FALSE);
00215       //Ecriture
00216       fprintf (pF, "%s", contenu);
00217       fclose (pF);
00218       contenu = g_strdup_printf("%s écrit.", chem);
00219       Liste_Add_Msg(contenu);
00220 
00221       //change le nom de l' onglet
00222       newNOM = g_path_get_basename(chem);
00223       p_child = gtk_notebook_get_nth_page (GTK_NOTEBOOK(Onglets), idOngletACTIF);
00224       label = GTK_LABEL (gtk_notebook_get_tab_label (GTK_NOTEBOOK(Onglets), p_child));
00225       gtk_label_set_text (label, newNOM);
00226 
00227       //Change le nom dans le treeview
00228         // obtenir pIMG
00229       //gtk_tree_store_set (pTreeStore, &fils, 0,idACTIF, 1,pImg, 2,newNOM, -1);
00230 
00231 
00232       //change nom dans tableau
00233              nom[idACTIF] = g_strdup(newNOM);
00234           chemin[idACTIF] = g_strdup_printf("%s/%s", dosRELATIF, newNOM);
00235              ext[idACTIF] = getExtension(newNOM); //re-détermine l' extension
00236       estModifie[idACTIF] = FALSE;
00237     }
00238   }
00239 
00240   if (newNOM)     g_free (newNOM);
00241   if (chem)       g_free (chem);
00242   if (dosRELATIF) g_free (dosRELATIF);
00243   gtk_widget_destroy (dialog);
00244 //App_Lister_Tableau();
00245 }
00246 /* =============================================================================
00247  * Fermer un fichier ************************************************************
00248 ==============================================================================*/
00249 void Fichier_Fermer()
00250 {
00251   Fichier_Fermer_Un_Fichier(idACTIF, idOngletACTIF);
00252 }
00253 
00254 void Fichier_Fermer_Un_Fichier(gshort id, gshort onglet)
00255 {
00256   gint n;
00257 
00258   // il peut cliquer alors qu'aucun fichier n' est ouvert
00259   if (!NBfichiersOuverts) return;
00260 
00261   // s'il est modifié, demande s'il faut enregistrer
00262   if (estModifie[id])
00263   {
00264     if (DLG_Demander(g_strdup_printf("%s : fichier modifié.\nEcrire avant de le fermer?",
00265                         (chemin[id])?chemin[id]:nom[id])))
00266          Fichier_Ecrire(id);
00267   }
00268 
00269   // Supprime l' onglet
00270   gtk_notebook_remove_page (GTK_NOTEBOOK(Onglets), onglet);
00271 
00272   // décale les numéros d' onglet
00273   for (n=1; n<NB; n++)
00274   {
00275     if      (IDOnglet[n]> idOngletACTIF) IDOnglet[n]-=1;
00276     else if (IDOnglet[n]==idOngletACTIF) IDOnglet[n]=-1;
00277   }
00278 
00279   // signale qu'il est fermé.
00280   NBfichiersOuverts--;
00281   idOngletACTIF--;
00282 }
00283 /* =============================================================================
00284  * Fermer tous les fichier *****************************************************
00285 ==============================================================================*/
00286 void Fichier_Fermer_Tous_Les_Fichiers()
00287 {
00288   // parcourt la structure. si ->estOuvert, le ferme
00289   //gint id = gtk_notebook_get_current_page (GTK_NOTEBOOK(Onglets));
00290   //g_print("fermeture onglet n°%d!\n", id);
00291   //gtk_notebook_remove_page (GTK_NOTEBOOK(Onglets), gtk_notebook_get_current_page (GTK_NOTEBOOK(Onglets)));
00292 }
00293 /* =============================================================================
00294  * Retirer un fichier du Projet ************************************************
00295 ==============================================================================*/
00296 void Fichier_Retirer_Du_Projet()
00297 {
00298   GtkTreeModel  *pTreeModel;
00299   gshort id, i;
00300 
00301 //App_Lister_Tableau();
00302   // s'il est ouvert, le ferme. si modifié: demande enregistrement
00303   pTreeModel = gtk_tree_view_get_model (GTK_TREE_VIEW(pTView));
00304   gtk_tree_model_get (pTreeModel, &TVit, 0, &id, -1);
00305   if (IDOnglet[id]!=-1)
00306     Fichier_Fermer_Un_Fichier(id, IDOnglet[id]);
00307 
00308 //g_print("je vais retirer %d %s\n", id, nom[id]);
00309   // Retire du TreeView
00310   gtk_tree_store_remove (pTreeStore, &TVit);
00311 
00312   // Retire du tableau interne, décale les suivants
00313   for (i=1; i<NB; i++)
00314   {
00315     if (i>=id)
00316     {
00317        nom       [i] = g_strdup(nom[i+1]);
00318        chemin    [i] = g_strdup(chemin[i+1]);
00319        ext       [i] = ext[i+1];
00320        estModifie[i] = estModifie[i+1];
00321        IDOnglet  [i] = IDOnglet[i+1];
00322        TxtBuf    [i] = TxtBuf[i+1];
00323        TXT       [i] = TXT[i+1];
00324     }
00325   }
00326   // libère le dernier
00327   g_free(nom[NB]);
00328   g_free(chemin[NB]);
00329   ext[NB] = estModifie[NB]= IDOnglet[NB] = -1;
00330   g_free(TxtBuf[NB]);
00331   g_free(TXT[NB]);
00332   NB--;
00333 //App_Lister_Tableau();
00334 }
00335 /* =============================================================================
00336  * Ecrire un fichier ***********************************************************
00337 ==============================================================================*/
00338 void Fichier_Ecrire(gshort id)
00339 {
00340   FILE *fichier = fopen (chemin[id],"w");
00341   if (fichier)
00342   {
00343     gchar *contenu=NULL;//, *locale;
00344     GtkTextIter start, end;
00345     GtkWidget *p_child = NULL;
00346     GtkLabel *label = NULL;
00347 
00348     // obtient texte depuis le GtkSourceBuffer
00349     gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER(TxtBuf[id]), &start, &end);
00350     contenu = gtk_text_buffer_get_text (GTK_TEXT_BUFFER(TxtBuf[id]), &start, &end, FALSE);
00351     //récupérer l'encodage.
00352     //locale = g_locale_from_utf8 (contenu, -1, NULL, NULL, NULL);
00353 
00354     //Ecriture
00355     //g_file_set_contents (chemin[id],contenu,-1,NULL);
00356     fprintf (fichier, "%s", contenu);//locale);
00357     fclose (fichier);
00358 
00359     //Liste_Add_Msg("%s écrit.", chemin[id]);
00360     estModifie[id]=FALSE;
00361 
00362     // retire * du label onglet
00363     p_child = gtk_notebook_get_nth_page (GTK_NOTEBOOK(Onglets), idOngletACTIF);
00364     label = GTK_LABEL (gtk_notebook_get_tab_label (GTK_NOTEBOOK(Onglets), p_child));
00365     gtk_label_set_text (label, nom[id]);
00366 
00367     g_free (contenu);
00368     //g_free (locale);
00369     Liste_Add_Msg("%s écrit.", chemin[id]);
00370   }
00371  }

Généré le Sat Jan 13 02:54:13 2007 pour EdBX:IDELangageC,Python,FASMécritavecGTK+ par  doxygen 1.4.2