00001
00002
00003
00004 void Fichier_Nouveau()
00005 {
00006
00007 Ajouter_ELEMENT(AppNEWfile, NULL, NBfichiersOuverts++);
00008 estModifie[NB] = TRUE;
00009 Ajouter_TreeviewItem(&iterProj, AppNEWfile, NULL, NULL);
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
00046
00047
00048 TxtBuf[NB-1] = Creer_Onglet(AppNEWfile);
00049 }
00050
00051
00052
00053 void Fichier_Choisir()
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
00063 Ajouter_ELEMENT(nom, chemin, NBfichiersOuverts++);
00064
00065 Ajouter_TreeviewItem(&iterProj, nom, chemin, NULL);
00066
00067 TxtBuf[NB-1] = Creer_Onglet(nom);
00068
00069 Fichier_Charger(chemin, TxtBuf[NB-1]);
00070 estModifie[NB-1]=FALSE;
00071 g_free(nom);
00072 g_free(chemin);
00073 }
00074 }
00075
00076
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
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
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
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
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
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
00148
00149 void Fichier_UNDO()
00150 {
00151 gtk_source_buffer_undo (TxtBuf[idACTIF]);
00152 }
00153
00154
00155
00156 void Fichier_REDO()
00157 {
00158 gtk_source_buffer_redo (TxtBuf[idACTIF]);
00159 }
00160
00161
00162
00163 void Fichier_Enregistrer()
00164 {
00165 Fichier_Ecrire(idACTIF);
00166 }
00167
00168
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
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
00208 pF = fopen (chem,"w");
00209 if (pF)
00210 {
00211
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
00216 fprintf (pF, "%s", contenu);
00217 fclose (pF);
00218 contenu = g_strdup_printf("%s écrit.", chem);
00219 Liste_Add_Msg(contenu);
00220
00221
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
00228
00229
00230
00231
00232
00233 nom[idACTIF] = g_strdup(newNOM);
00234 chemin[idACTIF] = g_strdup_printf("%s/%s", dosRELATIF, newNOM);
00235 ext[idACTIF] = getExtension(newNOM);
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
00245 }
00246
00247
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
00259 if (!NBfichiersOuverts) return;
00260
00261
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
00270 gtk_notebook_remove_page (GTK_NOTEBOOK(Onglets), onglet);
00271
00272
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
00280 NBfichiersOuverts--;
00281 idOngletACTIF--;
00282 }
00283
00284
00285
00286 void Fichier_Fermer_Tous_Les_Fichiers()
00287 {
00288
00289
00290
00291
00292 }
00293
00294
00295
00296 void Fichier_Retirer_Du_Projet()
00297 {
00298 GtkTreeModel *pTreeModel;
00299 gshort id, i;
00300
00301
00302
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
00309
00310 gtk_tree_store_remove (pTreeStore, &TVit);
00311
00312
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
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
00334 }
00335
00336
00337
00338 void Fichier_Ecrire(gshort id)
00339 {
00340 FILE *fichier = fopen (chemin[id],"w");
00341 if (fichier)
00342 {
00343 gchar *contenu=NULL;
00344 GtkTextIter start, end;
00345 GtkWidget *p_child = NULL;
00346 GtkLabel *label = NULL;
00347
00348
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
00352
00353
00354
00355
00356 fprintf (fichier, "%s", contenu);
00357 fclose (fichier);
00358
00359
00360 estModifie[id]=FALSE;
00361
00362
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
00369 Liste_Add_Msg("%s écrit.", chemin[id]);
00370 }
00371 }