FrmMain.h

Aller à la documentation de ce fichier.
00001 /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
00002                                    EDITOR
00003 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
00004 
00005 /* =============================================================================
00006  * Appelé par Treeview_Click et Clic sur liste messages ************************
00007 ==============================================================================*/
00008 void Ouvrir_Fichier_Ou_Le_Passer_Au_Premier_Plan(gshort id)
00009 {
00010   if (ext[id]==-1) return; // si c'est pas un dossier...
00011   if (IDOnglet[id]==-1) // s'il n'est pas déjà ouvert, l' ouvre
00012   {
00013     TxtBuf[id] = Creer_Onglet(nom[id]);
00014     //IDOnglet[id]=NBfichiersOuverts++;
00015     Fichier_Charger(chemin[id], TxtBuf[id]);
00016   }
00017   else // sinon, le passe au premier plan
00018       gtk_notebook_set_current_page(GTK_NOTEBOOK(Onglets), IDOnglet[idACTIF]);
00019 }
00020 /* =============================================================================
00021  * Treeview: Item Collapsed (met image dossier fermé) **************************
00022 ==============================================================================*/
00023 /*gboolean TreeView_Collapsed (GtkTreeView *TV, GdkEventButton *event)
00024 {
00025   GtkTreeModel  *pTreeModel;
00026   GtkTreePath   *path;
00027   GtkTreeIter   iter;
00028   GdkPixbuf     *pImg = NULL;
00029   gshort id;
00030 
00031   pTreeModel = gtk_tree_view_get_model (TV);
00032   if (gtk_tree_view_get_path_at_pos(TV,(gint) event->x,
00033                         (gint) event->y, &path, NULL, NULL, NULL))
00034   {
00035     if (gtk_tree_model_get_iter(pTreeModel, &iter, path))
00036     {
00037       gtk_tree_model_get (pTreeModel, &iter, 0, &id, -1);
00038   Liste_Add_Msg("%d COLLAPSED", id);
00039       pImg = gdk_pixbuf_new_from_file (AppICONs[9], NULL);
00040       gtk_tree_store_set (pTreeStore, &iter, 0,id, 1,pImg, 2,nom[id], -1);
00041       //return TRUE;
00042     }
00043   }
00044   return FALSE;
00045 }*/
00046 /* =============================================================================
00047  * Treeview: Item Collapsed (met image dossier ouvert) **************************
00048 ==============================================================================*/
00049 /*
00050 gboolean TreeView_Expanded (GtkTreeView *TV, GdkEventButton *event)
00051 {
00052   GtkTreeModel  *pTreeModel;
00053   GtkTreePath   *path;
00054   GtkTreeIter   iter;
00055   GdkPixbuf     *pImg = NULL;
00056   gshort id;
00057 
00058   //Liste_Add_Msg("EXPANDED");
00059   pTreeModel = gtk_tree_view_get_model (TV);
00060   if (gtk_tree_view_get_path_at_pos(TV,(gint) event->x,
00061                         (gint) event->y, &path, NULL, NULL, NULL))
00062   {
00063     if (gtk_tree_model_get_iter(pTreeModel, &iter, path))
00064     {
00065       gtk_tree_model_get (pTreeModel, &iter, 0, &id, -1);
00066   Liste_Add_Msg("%d EXPANDED", id);
00067       pImg = gdk_pixbuf_new_from_file (AppICONs[1], NULL);
00068       gtk_tree_store_set (pTreeStore, &iter, 0,id, 1,pImg, 2,nom[id], -1);
00069     }
00070   }
00071   return FALSE;
00072 }*/
00073 /* =============================================================================
00074  * Treeview: Clic **************************************************************
00075 ==============================================================================*/
00076 gboolean TreeView_Click (GtkTreeView *TV, GdkEventButton *event)
00077 {
00078   GtkTreeModel  *pTreeModel;
00079   GtkTreePath   *path;
00080 
00081   //Liste_Add_Msg("TREEVIEW_CLIC");
00082   if (event->type == GDK_BUTTON_PRESS)
00083   {
00084      pTreeModel = gtk_tree_view_get_model (TV);
00085      if (gtk_tree_view_get_path_at_pos(TV,(gint) event->x,
00086                                 (gint) event->y, &path, NULL, NULL, NULL))
00087      {
00088       if (gtk_tree_model_get_iter(pTreeModel, &TVit, path))
00089       {
00090         gtk_tree_model_get (pTreeModel, &TVit, 0, &idACTIF, -1);
00091       }
00092      }
00093 
00094    if (event->button == 1)
00095    {
00096      Ouvrir_Fichier_Ou_Le_Passer_Au_Premier_Plan(idACTIF);
00097    } // si boutton gauche
00098    else
00099    {
00100      gtk_menu_popup(GTK_MENU(pMenuPROJET), NULL, NULL, NULL, NULL,
00101                 event->button, gdk_event_get_time((GdkEvent*)event));
00102    }
00103   }
00104   return FALSE;
00105 }
00106 /* =============================================================================
00107  *(2) TreeView: Ajouter Item  au Treeview **************************************
00108 ==============================================================================*/
00109 GtkTreeIter Ajouter_TreeviewItem(GtkTreeIter *parent, gchar* unNom, gchar *unChemin, gchar *img)
00110 {
00111   GtkTreeIter fils;
00112   GdkPixbuf *pImg = NULL;
00113   gshort a=-1;
00114 
00115   if (img) // un chemin d 'image a été spécifié?
00116   {
00117     ext[NB] = -1;
00118     pImg = gdk_pixbuf_new_from_file (img, NULL);
00119   }
00120   else     // sinon, la détermine en fonction de l' extension
00121   {
00122    a = getExtension(unNom);
00123    ext[NB] = a;
00124    if      (a==-1) pImg = gdk_pixbuf_new_from_file (AppICONs[1], NULL);
00125    else if (a== 0) pImg = gdk_pixbuf_new_from_file (AppICONs[2], NULL);
00126    else if (a==-2) pImg = gdk_pixbuf_new_from_file (AppICONs[3], NULL);
00127    //else if (a==10) pImg = gdk_pixbuf_new_from_file (AppICONs[10], NULL);
00128    else            pImg = gdk_pixbuf_new_from_file (IMGs[a]    , NULL);
00129   }
00130   gtk_tree_store_append (pTreeStore, &fils, parent);
00131   gtk_tree_store_set (pTreeStore, &fils, 0,NB++, 1,pImg, 2,unNom, -1);
00132   gtk_tree_view_expand_all(GTK_TREE_VIEW (pTView));
00133 
00134   return fils;
00135 }
00136 /* =============================================================================
00137  * TreeView: Création **********************************************************
00138 ==============================================================================*/
00139 GtkWidget* Creer_TreeView(GtkWidget *fen, GtkWidget *panneau)
00140 {
00141   GtkWidget             *pTView         = NULL;
00142   GtkWidget             *pScrollWin     = NULL;
00143   GtkCellRenderer       *p_renderer     = NULL;
00144   GtkTreeViewColumn     *p_column       = NULL;
00145 
00146   // Crée scrolled window pour treeview
00147   pScrollWin = gtk_scrolled_window_new (NULL, NULL);
00148   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (pScrollWin),
00149                                   GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
00150   gtk_paned_add1 (GTK_PANED (panneau), pScrollWin);
00151   pTreeStore = gtk_tree_store_new (3, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING);
00152   // Crée treeview
00153   pTView = gtk_tree_view_new_with_model (GTK_TREE_MODEL (pTreeStore));
00154   gtk_container_add (GTK_CONTAINER (pScrollWin), pTView);
00155   // colonne d'index
00156   p_renderer = gtk_cell_renderer_text_new ();
00157   p_column = gtk_tree_view_column_new_with_attributes (NULL, p_renderer, "int", 0, NULL);
00158   gtk_tree_view_append_column (GTK_TREE_VIEW (pTView), p_column);
00159   gtk_tree_view_column_set_visible(p_column, FALSE);
00160   // colonne image
00161   p_renderer = gtk_cell_renderer_pixbuf_new ();
00162   p_column = gtk_tree_view_column_new_with_attributes (NULL, p_renderer, "pixbuf", 1, NULL);
00163   gtk_tree_view_append_column (GTK_TREE_VIEW (pTView), p_column);
00164   //colonne texte
00165   p_renderer = gtk_cell_renderer_text_new ();
00166   p_column = gtk_tree_view_column_new_with_attributes (NULL, p_renderer, "text", 2, NULL);
00167   gtk_tree_view_append_column (GTK_TREE_VIEW (pTView), p_column);
00168   gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (pTView), FALSE);
00169 
00170   g_signal_connect(pTView, "button-press-event", G_CALLBACK(TreeView_Click), NULL);
00171   //g_signal_connect(pTView, "row_collapsed", G_CALLBACK(TreeView_Collapsed), NULL);
00172   //g_signal_connect(pTView, "row_expanded" , G_CALLBACK(TreeView_Expanded ), NULL);
00173 
00174   return pTView;
00175 }
00176 
00177 
00178 
00179 
00180 
00181 
00182 
00183 
00184 
00185 
00186 
00187 /* =============================================================================
00188  * Clic sur un onglet **********************************************************
00189 ==============================================================================*/
00190 void Onglet_Click (GtkNotebook *Onglets, GtkNotebookPage *page, guint page_num)
00191 {
00192   gshort n;
00193   idOngletACTIF = page_num;
00194   //idACTIF = -1;
00195   //g_print("Onglet_Clic-actif: %d\n", idOngletACTIF);
00196   if (NBfichiersOuverts)// && idOngletACTIF)
00197   {
00198     for(n=0; n<NB; n++)
00199     {
00200       if (IDOnglet[n]==idOngletACTIF)
00201       {
00202        idACTIF = n;
00203        break;
00204       }
00205     }
00206   }
00207 //g_print(" >> idACTIF %d\n", idACTIF);
00208 //AppLister_Tableau();
00209 }
00210 /* =============================================================================
00211  * (3) Crée un onglet et son scroolWindow  *************************************
00212 ==============================================================================*/
00213 GtkSourceBuffer *Creer_Onglet(gchar* caption)
00214 {
00215   GtkWidget                 *pScroll, *TXTbox;
00216   PangoFontDescription      *font_desc;
00217   GdkColor color;
00218   GtkSourceLanguagesManager *lm;
00219   GtkSourceLanguage         *language = NULL;
00220   GtkSourceBuffer           *sBuf;
00221 /*
00222   GtkWidget                 *pBOX, *pIMG, *pLBL;
00223   pBOX = gtk_hbox_new (FALSE, 0);
00224       gtk_container_set_border_width (GTK_CONTAINER (pBOX), 2);
00225 
00226    gshort n = ext[idACTIF];
00227    if      (n == 0) pIMG = gtk_image_new_from_file (AppICONs[2]);
00228    else if (n >  0) pIMG = gtk_image_new_from_file (IMGs[n]);
00229    else if (n ==-2) pIMG = gtk_image_new_from_file (AppICONs[3]);
00230       gtk_box_pack_start (GTK_BOX (pBOX), pIMG, FALSE, FALSE, 3);
00231       gtk_widget_show (pIMG);
00232 
00233   pLBL = gtk_label_new (caption);
00234       gtk_box_pack_start (GTK_BOX (pBOX), pLBL, FALSE, FALSE, 3);
00235       gtk_widget_show (pLBL);
00236 */
00237   pScroll = gtk_scrolled_window_new (NULL, NULL);
00238     gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (pScroll),
00239                                     GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
00240     gtk_container_set_border_width (GTK_CONTAINER (pScroll), 2);
00241 
00242    //lm = gtk_source_languages_manager_new();
00243    lm = (GtkSourceLanguagesManager *)
00244                         g_object_new(GTK_TYPE_SOURCE_LANGUAGES_MANAGER,
00245                         "lang_files_dirs", g_slist_append(NULL,
00246                         g_strdup("Lang")), NULL);
00247 
00248    sBuf = GTK_SOURCE_BUFFER (gtk_source_buffer_new (NULL));
00249 /*
00250    if (ext[idACTIF]==-2) // makefile;-2
00251      language = gtk_source_languages_manager_get_language_from_mime_type (lm, "text/x-sh");
00252    else
00253      language = gtk_source_languages_manager_get_language_from_mime_type (lm, AppMIME);
00254 */
00255    language = gtk_source_languages_manager_get_language_from_mime_type (lm,
00256                                                         "text/x-cgtksrc");
00257    gtk_source_buffer_set_language (sBuf, language);
00258 
00259     // si extension interne, active highlight
00260     // -2: makefile (shell)
00261     // -1: dossier. jamais ouvert
00262     //  0: non coloré
00263     // 1+: C, coloré
00264     g_object_set (G_OBJECT (sBuf), "highlight",
00265                         (ext[idACTIF]>0 || ext[idACTIF]==-2)?TRUE:FALSE, NULL);
00266 
00267 
00268   TXTbox = gtk_source_view_new_with_buffer(sBuf);
00269 
00270      // Couleur du fond
00271      gdk_color_parse (AppBGROUND, &color);
00272      gtk_widget_modify_base (TXTbox, GTK_STATE_NORMAL, &color);
00273 
00274      // Font name/size
00275      font_desc = pango_font_description_from_string (AppFONT);
00276      gtk_widget_modify_font (TXTbox, font_desc);
00277      pango_font_description_free (font_desc);
00278 
00279      // Undo levels
00280      if (AppUNDOLEVELS) gtk_source_buffer_set_max_undo_levels (sBuf, AppUNDOLEVELS);
00281 
00282      // brackets matching enlightment
00283      gtk_source_buffer_set_check_brackets (sBuf, FALSE);
00284      // Show line numbers
00285      gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW(TXTbox), TRUE);
00286 
00287      // Show Right margin
00288      gtk_source_view_set_show_margin(GTK_SOURCE_VIEW(TXTbox),
00289                                                 ShowRightMARGIN?TRUE:FALSE);
00290 
00291      TXT[idACTIF] = GTK_SOURCE_VIEW(TXTbox);
00292      IDOnglet[idACTIF]=NBfichiersOuverts++;
00293      gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(pScroll),
00294                                                         GTK_WIDGET(TXTbox));
00295 
00296   gtk_widget_show_all (pScroll);
00297 
00298 /*  gtk_notebook_set_current_page (GTK_NOTEBOOK(Onglets),
00299                         gtk_notebook_append_page(GTK_NOTEBOOK(Onglets),
00300                         pScroll, GTK_WIDGET(pBOX)));*/
00301   gtk_notebook_set_current_page (GTK_NOTEBOOK(Onglets),
00302                         gtk_notebook_append_page(GTK_NOTEBOOK(Onglets),
00303                         pScroll, GTK_WIDGET(gtk_label_new(caption))));
00304   return sBuf;
00305 }
00306 
00307 /* =============================================================================
00308  * Crée le notebook ************************************************************
00309 ==============================================================================*/
00310 void Creer_Onglets(GtkWidget* paned)
00311 {
00312   GtkWidget *table = gtk_table_new (3, 6, FALSE);
00313 
00314   Onglets = gtk_notebook_new();
00315   gtk_notebook_set_scrollable(GTK_NOTEBOOK(Onglets), TRUE);
00316   gtk_table_attach_defaults (GTK_TABLE (table), Onglets, 0, 6, 0, 1);
00317   g_signal_connect (G_OBJECT (Onglets), "switch-page", G_CALLBACK (Onglet_Click), NULL);
00318   gtk_paned_add1 (GTK_PANED (paned), table);
00319 }
00320 
00321 
00322 
00323 
00324 
00325 
00326 
00327 
00328 
00329 /* =============================================================================
00330  * Créer Toolbar ***************************************************************
00331 ==============================================================================*/
00332 GtkWidget *Creer_ToolBar()
00333 {
00334    GtkWidget* UnToolBAR = gtk_toolbar_new();
00335 /*
00336 //GtkWidget *tmp_toolbar_icon;
00337   //tmp_toolbar_icon = create_pixmap (fenetre, "open.xpm");
00338   GtkWidget* button2;
00339   button2 = gtk_toolbar_append_element (GTK_TOOLBAR (pToolbar),
00340         GTK_TOOLBAR_CHILD_BUTTON,NULL,"Open",NULL, NULL,NULL, NULL, NULL);
00341   gtk_signal_connect (GTK_OBJECT (button2), "clicked",
00342         GTK_SIGNAL_FUNC (on_open_button_clicked), NULL);
00343   gtk_widget_ref (button2);
00344   gtk_object_set_data_full (GTK_OBJECT (fenetre), "button2",
00345                                 button2,(GtkDestroyNotify) gtk_widget_unref);
00346   gtk_widget_show (button2);
00347 */
00348    // Projet
00349    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_NEW  ,"Nouveau Projet"
00350         ,NULL,G_CALLBACK(Projet_Nouveau),NULL,-1);
00351    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_OPEN ,"Ouvrir Projet"
00352         ,NULL,G_CALLBACK(Projet_Choisir),NULL,-1);
00353    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_SAVE   ,"Enregistrer Projet"
00354         ,NULL,G_CALLBACK(Projet_Enregistrer),NULL,-1);
00355    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_CLOSE,"Fermer Projet"
00356         ,NULL,G_CALLBACK(Projet_Clean) ,NULL,-1);
00357    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_PREFERENCES,"Options du Projet"
00358         ,NULL,G_CALLBACK(DLG_ProjectOPTIONS) ,NULL,-1);
00359 
00360    // Séparateur
00361    gtk_toolbar_append_space(GTK_TOOLBAR(UnToolBAR));
00362    gtk_toolbar_append_space(GTK_TOOLBAR(UnToolBAR));
00363    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_NEW    ,"Nouveau Fichier"
00364         ,NULL,G_CALLBACK(Fichier_Nouveau)        ,NULL,-1);
00365    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_OPEN   ,"Ajouter Fichier au Projet"
00366         ,NULL,G_CALLBACK(Fichier_Choisir)        ,NULL,-1);
00367    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_SAVE   ,"Enregistrer Fichier"
00368         ,NULL,G_CALLBACK(Fichier_Enregistrer)    ,NULL,-1);
00369    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_SAVE_AS,"Enregistrer Sous"
00370         ,NULL,G_CALLBACK(Fichier_EnregistrerSous),NULL,-1);
00371    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_CLOSE  ,"Fermer Fichier"
00372         ,NULL,G_CALLBACK(Fichier_Fermer)         ,NULL,-1);
00373 
00374    // Séparateur
00375    gtk_toolbar_append_space(GTK_TOOLBAR(UnToolBAR));
00376    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_UNDO   ,"Undo"
00377         ,NULL,G_CALLBACK(Fichier_UNDO)  ,NULL,-1);
00378    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_REDO   ,"Redo"
00379         ,NULL,G_CALLBACK(Fichier_REDO)  ,NULL,-1);
00380 
00381    // Séparateur
00382    gtk_toolbar_append_space(GTK_TOOLBAR(UnToolBAR));
00383    gtk_toolbar_append_space(GTK_TOOLBAR(UnToolBAR));
00384    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_EXECUTE   ,"Compiler"
00385         ,NULL,G_CALLBACK(Projet_Compiler)  ,NULL,-1);
00386    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_CONVERT   ,"Compiler et executer"
00387         ,NULL,G_CALLBACK(Projet_CompilExec),NULL,-1);
00388    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_GOTO_BOTTOM,"Generate Makefile"
00389         ,NULL,G_CALLBACK(Projet_Generate_Makefile)  ,NULL,-1);
00390    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_GO_FORWARD,"Executer"
00391         ,NULL,G_CALLBACK(Projet_Executer)  ,NULL,-1);
00392 
00393    // Séparateur
00394    gtk_toolbar_append_space(GTK_TOOLBAR(UnToolBAR));
00395    gtk_toolbar_append_space(GTK_TOOLBAR(UnToolBAR));
00396    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_FIND,"Rechercher"
00397         ,NULL,G_CALLBACK(Fichier_Rechercher),NULL,-1);
00398    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_FIND_AND_REPLACE,"Remplacer"
00399         ,NULL,NULL,NULL,-1);
00400    //gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_HELP,"Tableau"
00401 //      ,NULL,G_CALLBACK(Dbug),NULL,-1);
00402 
00403    // Séparateur
00404    gtk_toolbar_append_space(GTK_TOOLBAR(UnToolBAR));
00405    gtk_toolbar_insert_stock(GTK_TOOLBAR(UnToolBAR),GTK_STOCK_PREFERENCES,"Options de l' éditeur"
00406         ,NULL,G_CALLBACK(DLG_EditorOPTIONS),NULL,-1);
00407 
00408    // Modification de la taille des icones
00409    gtk_toolbar_set_icon_size(GTK_TOOLBAR(UnToolBAR), GTK_ICON_SIZE_BUTTON);
00410 
00411    // Affichage uniquement des icones
00412    gtk_toolbar_set_style(GTK_TOOLBAR(UnToolBAR), GTK_TOOLBAR_ICONS);
00413 
00414 
00415 
00416 
00417    GtkWidget* TBAR = gtk_toolbar_new();
00418    gtk_toolbar_insert_stock(GTK_TOOLBAR(TBAR),GTK_STOCK_NEW  ,"Nouveau Projet"
00419         ,NULL,G_CALLBACK(Projet_Nouveau),NULL,-1);
00420    gtk_toolbar_insert_stock(GTK_TOOLBAR(TBAR),GTK_STOCK_OPEN ,"Ouvrir Projet"
00421         ,NULL,G_CALLBACK(Projet_Choisir),NULL,-1);
00422 
00423 
00424    return UnToolBAR;
00425 }
00426 
00427 
00428 
00429 
00430 /* =============================================================================
00431  * Ajoute au menu un item IMAGE ************************************************
00432 ==============================================================================*/
00433 GtkWidget *Menu_AddItemIMG (gchar *caption, gchar *img, GtkWidget *pMenu)
00434 {
00435   GtkWidget *p = gtk_image_menu_item_new_with_label(caption);
00436   GtkWidget *i = gtk_image_new_from_file (img);
00437   gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM(p), i);
00438 
00439   gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), p);
00440   return p;
00441 }
00442 /* =============================================================================
00443  * Ajoute au menu un item STOCK ************************************************
00444 ==============================================================================*/
00445 GtkWidget *Menu_AddItem (gchar *img, GtkWidget *pMenu)
00446 {
00447   GtkWidget *p = gtk_image_menu_item_new_from_stock(img, NULL);
00448   gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), p);
00449   return p;
00450 }
00451 /* =============================================================================
00452  * Ajoute au menu un séparateur ************************************************
00453 ==============================================================================*/
00454 void Menu_Ajouter_SEPARATEUR(GtkWidget *pMenu)
00455 {
00456    GtkWidget *p = gtk_separator_menu_item_new();
00457    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), p);
00458 }
00459 /* =============================================================================
00460  * Ajoute au menu un item de base **********************************************
00461 ==============================================================================*/
00462 void Menu_Ajouter_MENU(gchar* caption, GtkWidget *pMenu, GtkWidget *LeMenu)
00463 {
00464    GtkWidget *p = gtk_menu_item_new_with_label(caption);
00465    gtk_menu_item_set_submenu(GTK_MENU_ITEM(p), pMenu);
00466    gtk_menu_shell_append(GTK_MENU_SHELL(LeMenu), p);
00467 }
00468 /* =============================================================================
00469  * Crée le menu. ***************************************************************
00470 ==============================================================================*/
00471 GtkWidget* Creer_Menu(GtkWidget *fen)
00472 {
00473    GtkWidget *LeMenu, *pMenu, *p;
00474 
00475    LeMenu = gtk_menu_bar_new();
00476    /////////////////////////////////////////////////////////////////////////////
00477    /** Menu PROJET ************************************************************/
00478    /////////////////////////////////////////////////////////////////////////////
00479    pMenuPROJET = gtk_menu_new();
00480 /* NOUVEAU */
00481    //p = Menu_AddItem(GTK_STOCK_NEW, pMenuPROJET);
00482    p = Menu_AddItemIMG ("Nouveau Projet", AppICONs[4], pMenuPROJET);
00483    g_signal_connect(G_OBJECT(p), "activate", G_CALLBACK(Projet_Nouveau), NULL);
00484 /* OUVRIR */
00485    //p = Menu_AddItem(GTK_STOCK_OPEN, pMenuPROJET);
00486    p = Menu_AddItemIMG ("Ouvrir Projet", AppICONs[2], pMenuPROJET);
00487    g_signal_connect(G_OBJECT(p), "activate", G_CALLBACK(Projet_Choisir), NULL);
00488 /* FERMER */
00489    p = Menu_AddItem(GTK_STOCK_CLOSE, pMenuPROJET);
00490    g_signal_connect(G_OBJECT(p), "activate", G_CALLBACK(Projet_Clean), NULL);
00491 /* ENREGISTRER */
00492    //p = Menu_AddItem(GTK_STOCK_SAVE, pMenuPROJET);
00493    p = Menu_AddItemIMG ("Enregistrer Projet", AppICONs[7], pMenuPROJET);
00494    g_signal_connect(G_OBJECT(p), "activate", G_CALLBACK(Projet_Enregistrer), NULL);
00495 /* Séparateur */
00496    Menu_Ajouter_SEPARATEUR(pMenuPROJET);
00497 
00498 /* NOUVEAU */
00499    //p = gtk_menu_item_new_with_label("Ajouter fichier au Projet");
00500    //gtk_menu_shell_append(GTK_MENU_SHELL(pMenuPROJET), p);
00501    p = Menu_AddItemIMG ("Nouveau fichier", AppICONs[6], pMenuPROJET);
00502    g_signal_connect(G_OBJECT(p),"activate",G_CALLBACK(Fichier_Nouveau),NULL);
00503 // OUVRIR
00504    //p = Menu_AddItem(GTK_STOCK_OPEN, pMenuPROJET);
00505    p = Menu_AddItemIMG ("Ajouter fichier au Projet", AppICONs[5], pMenuPROJET);
00506    g_signal_connect(G_OBJECT(p),"activate",G_CALLBACK(Fichier_Choisir),NULL);
00507 // RETIRER FICHIER DU PROJET
00508    p = Menu_AddItemIMG ("Retirer fichier du Projet", AppICONs[5], pMenuPROJET);
00509    g_signal_connect(G_OBJECT(p),"activate",G_CALLBACK(Fichier_Retirer_Du_Projet),NULL);
00510 /* FERMER */
00511    p = Menu_AddItem(GTK_STOCK_CLOSE, pMenuPROJET);
00512    g_signal_connect(G_OBJECT(p),"activate",G_CALLBACK(Fichier_Fermer),NULL);
00513 /* ENREGISTRER */
00514    p = Menu_AddItem(GTK_STOCK_SAVE, pMenuPROJET);
00515    //p = Menu_AddItemIMG ("Enregistrer Fichier", AppICONs[6], pMenuPROJET);
00516    g_signal_connect(G_OBJECT(p), "activate",G_CALLBACK(Fichier_Enregistrer),NULL);
00517 /* ENREGISTRER SOUS */
00518    p = Menu_AddItem(GTK_STOCK_SAVE_AS, pMenuPROJET);
00519    g_signal_connect(G_OBJECT(p),"activate",G_CALLBACK(Fichier_EnregistrerSous),NULL);
00520   /* Séparateur */
00521    Menu_Ajouter_SEPARATEUR(pMenuPROJET);
00522 /* QUITTER */
00523    p = Menu_AddItem(GTK_STOCK_QUIT, pMenuPROJET);
00524    g_signal_connect(G_OBJECT(p),"activate",G_CALLBACK(DLG_Quitter),
00525         (GtkWidget*) fen);
00526    /* Ajoute le menu */
00527    Menu_Ajouter_MENU("File", pMenuPROJET, LeMenu);
00528 
00529    /////////////////////////////////////////////////////////////////////////////
00530    /** Menu BUILD** ***********************************************************/
00531    /////////////////////////////////////////////////////////////////////////////
00532    pMenu = gtk_menu_new();
00533    /* COMPILER */
00534    //p = Menu_AddItem(GTK_STOCK_EXECUTE, pMenu);
00535    p = Menu_AddItemIMG ("Compiler", AppICONs[8], pMenu);
00536    g_signal_connect(G_OBJECT(p), "activate",
00537         G_CALLBACK(Projet_Compiler),(GtkWidget*) fen);
00538    /* COMPILEXEC */
00539    //p = Menu_AddItem(GTK_STOCK_CONVERT, pMenu);
00540    p = Menu_AddItemIMG ("Compiler et exécuter", AppICONs[9], pMenu);
00541    g_signal_connect(G_OBJECT(p), "activate",
00542         G_CALLBACK(Projet_CompilExec), (GtkWidget*) fen);
00543    /* GENERATE MAKEFILE */
00544    //p = gtk_menu_item_new_with_label("Generate Makefile");
00545    //gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), p);
00546    p = Menu_AddItemIMG ("Generate Makefile", AppICONs[4], pMenu);
00547    g_signal_connect(G_OBJECT(p),"activate",G_CALLBACK(Projet_Generate_Makefile),NULL);
00548 
00549    /* EXECUTER */
00550    //p = Menu_AddItem(GTK_STOCK_GO_FORWARD, pMenu);
00551    p = Menu_AddItem(GTK_STOCK_EXECUTE, pMenu);
00552    g_signal_connect(G_OBJECT(p), "activate", G_CALLBACK(Projet_Executer),
00553                         (GtkWidget*) fen);
00554    /* Ajoute le menu */
00555    Menu_Ajouter_MENU("Build", pMenu, LeMenu);
00556 
00557    /////////////////////////////////////////////////////////////////////////////
00558    /** Menu HELP **************************************************************/
00559    /////////////////////////////////////////////////////////////////////////////
00560    pMenu = gtk_menu_new();
00561    /* About */
00562    p = gtk_menu_item_new_with_label("A propos de...");
00563    g_signal_connect(G_OBJECT(p), "activate", G_CALLBACK(DLG_About),
00564         (GtkWidget*) fen);
00565    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), p);
00566    /* Ajoute le menu */
00567    Menu_Ajouter_MENU("?", pMenu, LeMenu);
00568 
00569    return LeMenu;
00570 }
00571 
00572 
00573 
00574 
00575 
00576 
00577 
00578 
00579 
00580 
00581 
00582 /* =============================================================================
00583  * Liste: Clic **************************************************************
00584 ==============================================================================*/
00585 gboolean Liste_Click (GtkTreeView *Liste, GdkEventButton *event)
00586 {
00587   GtkTreeModel  *pTreeModel;
00588   GtkTreePath   *path;
00589   GtkTreeIter   iter;
00590   gchar *str, **tab;
00591   gint n=0;
00592   GtkTextIter it;
00593   //GtkTextMark *last_pos;
00594 
00595   if (event->type == GDK_BUTTON_PRESS)
00596   {
00597     pTreeModel = gtk_tree_view_get_model (Liste);
00598     if (gtk_tree_view_get_path_at_pos(Liste,(gint) event->x,
00599                         (gint) event->y, &path, NULL, NULL, NULL))
00600     {
00601       if (gtk_tree_model_get_iter(pTreeModel, &iter, path))
00602       {
00603         gtk_tree_model_get (pTreeModel, &iter, 0, &str, -1);
00604         tab = g_strsplit (str, ":", 0);
00605         if (tab[1] && tab[2])
00606         {
00607           n = g_ascii_strtod(tab[1],NULL);   
00608           if (n)
00609           {
00610            //g_print("now let's jump to line %d in %s!!!!\n", n, tab[0]);
00611            Ouvrir_Fichier_Ou_Le_Passer_Au_Premier_Plan(idACTIF);
00612 
00613            gtk_text_buffer_get_iter_at_line(GTK_TEXT_BUFFER(TxtBuf[idACTIF]), &it, n-1);
00614            gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER(TxtBuf[idACTIF]), &it);
00615            gtk_source_view_set_highlight_current_line(TXT[idACTIF], TRUE);
00616            //last_pos = gtk_text_buffer_create_mark (GTK_TEXT_BUFFER(TxtBuf[idACTIF]),
00617         //              "last_pos", &it, FALSE);
00618        //    gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(TXT[idACTIF]), last_pos);
00619            gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW(TXT[idACTIF]), &it,
00620                         0.0, TRUE, 1.0, 1.0);
00621           }
00622         }
00623       }
00624     }
00625   }
00626   return FALSE;
00627 }
00628 /* =============================================================================
00629  * Crée la liste de messages ***************************************************
00630 ==============================================================================*/
00631 GtkWidget *Liste_Creer()
00632 {
00633   GtkWidget *tree_view, *Scroll;
00634   GtkTreeViewColumn *column;
00635   GtkCellRenderer *cell;
00636 
00637   Scroll = gtk_scrolled_window_new (NULL, NULL);
00638   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (Scroll),
00639                                   GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
00640 
00641   model = gtk_list_store_new (1, G_TYPE_STRING);
00642   tree_view = gtk_tree_view_new();
00643   gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(Scroll), tree_view);
00644   gtk_tree_view_set_model (GTK_TREE_VIEW(tree_view), GTK_TREE_MODEL (model));
00645   gtk_widget_show (tree_view);
00646 
00647   cell = gtk_cell_renderer_text_new();
00648   column = gtk_tree_view_column_new_with_attributes("Messages",cell,"text", 0,NULL);
00649   gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), GTK_TREE_VIEW_COLUMN(column));
00650   g_signal_connect(tree_view, "button-press-event", G_CALLBACK(Liste_Click), NULL);
00651 
00652   return Scroll;
00653 }
00654 /* =============================================================================
00655  * Ajouter un message à la liste ***********************************************
00656 ==============================================================================*/
00657 void Liste_Add_Msg(gchar *msg, ...)
00658 {
00659   GtkTreeIter iter;
00660   va_list ap;
00661   gchar *tt;
00662 
00663   va_start (ap, msg);
00664   tt = g_strdup_vprintf (msg, ap);
00665   va_end (ap);
00666 
00667   gtk_list_store_append (GTK_LIST_STORE (model), &iter);
00668   gtk_list_store_set (GTK_LIST_STORE (model), &iter,0, tt,-1);
00669   // montre le dernier item
00670   //gtk_list_store_move_after (GTK_LIST_STORE (model), iter, NULL);
00671   //gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW(Liste),
00672 //                                      GTK_CORNER_BOTTOM_LEFT);
00673 }
00674 
00675 
00676 
00677 
00678 /* =============================================================================
00679  * Crée fenêtre de l' Editeur. *************************************************
00680 ==============================================================================*/
00681 void Show_Editor()
00682 {
00683   static GtkWidget *fenetre, *Vbox, *Hpaned, *Hbox, *Vpaned, *pMenuBar;//, *statusBar;
00684                     //*StatusBox, *statusBar, *statusBar2;
00685 
00686    // Charge la configuration, qui définit les variables ***********************
00687    App_ChargerConfig();
00688 
00689    // Creation de la fenetre ***************************************************
00690    fenetre = Creer_Fenetre(AppCAPTION, AppLEFT, AppTOP, AppWIDTH, AppHEIGHT,
00691                                 FALSE, AppMAXIMIZED);
00692    gtk_window_set_default_icon_from_file (AppICON, NULL);
00693    g_signal_connect(G_OBJECT(fenetre), "destroy", G_CALLBACK(gtk_main_quit), NULL);
00694 
00695    // Création de la Vbox qui contient tout ------------------------------------
00696    Vbox = gtk_vbox_new(FALSE, 0);
00697    gtk_container_add(GTK_CONTAINER(fenetre), Vbox);
00698 
00699    // Creation du menu *********************************************************
00700    pMenuBar = Creer_Menu(fenetre);
00701    gtk_box_pack_start(GTK_BOX(Vbox), pMenuBar, FALSE, FALSE, 0);
00702 
00703    // Creation de la barre d'outils ********************************************
00704    pToolBar = Creer_ToolBar();
00705    gtk_box_pack_start(GTK_BOX(Vbox), GTK_WIDGET(pToolBar), FALSE, FALSE, 0);
00706 
00707    // dessous, un gros Hbox ... ************************************************
00708    Hbox = gtk_hbox_new(FALSE, 0);
00709    gtk_box_pack_start(GTK_BOX(Vbox), Hbox, TRUE, TRUE, 0);
00710    // ... Contient le Hpaned ---------------------------------------------------
00711    Hpaned = gtk_hpaned_new();
00712    gtk_container_add (GTK_CONTAINER (Hbox), Hpaned);
00713    gtk_paned_set_position (GTK_PANED (Hpaned), 200);
00714 
00715    // la partie gauche du Hpaned contient le TreeView **************************
00716    pTView = Creer_TreeView(fenetre, Hpaned);
00717          NB = NBfichiersOuverts = 0;
00718          idACTIF = idOngletACTIF = -1;
00719          //(1) Insérer nouvelle entrée dans le tableau
00720          Ajouter_ELEMENT("Projet", NULL, -1);
00721          //(2) Insérer nouvelle entrée dans le treeview
00722          iterProj = Ajouter_TreeviewItem(NULL,"Projet", NULL, AppICONs[0]);
00723 
00724    // la partie droite du Hpaned contient un Vpaned pour onglets et console ****
00725    Vpaned = gtk_vpaned_new ();
00726    gtk_paned_add2 (GTK_PANED (Hpaned), Vpaned);
00727 
00728    // Place les onglets en haut ------------------------------------------------
00729    Creer_Onglets(Vpaned);
00730 
00731    // et la liste, en bas du Vpaned --------------------------------------------
00732    Liste = Liste_Creer();
00733    gtk_paned_add2 (GTK_PANED (Vpaned), Liste);
00734    gtk_paned_set_position (GTK_PANED (Vpaned), AppHEIGHT-180);
00735 
00736    // En bas, les statusbar
00737    //StatusBox = gtk_hbox_new(FALSE, 0);
00738    //gtk_container_add (GTK_CONTAINER (fenetre), StatusBox);
00739 
00740   //statusBar = gtk_statusbar_new();
00741   //gtk_box_pack_start (GTK_BOX(Vbox),statusBar , TRUE, TRUE, 0);
00742   //gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (statusBar), FALSE);
00743   //gtk_widget_set_size_request (statusBar, 100, -1);
00744   //gtk_statusbar_push (GTK_STATUSBAR (statusBar), 0, "Informations");
00745 
00746     //statusBar2 = gtk_statusbar_new();
00747     //gtk_widget_set_size_request (statusBar2, 100, -1);  
00748     //gtk_box_pack_end (GTK_BOX(StatusBox),statusBar2 , TRUE, TRUE, 0);
00749     //gtk_statusbar_push (GTK_STATUSBAR (statusBar2), 0, "Infos");
00750 
00751    /////////////////////////////////////////////////////////////////////////////
00752    gtk_widget_show_all(fenetre);
00753 }
00754 

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