Commit 2bb9f0a0 by karudu

Süntaksi värvimise stiil ja seaded + akna suurus salvestatakse

parent ff354c82
......@@ -13,7 +13,7 @@ typedef struct
char *PealkiriTekst; // Originaalne pealkirja tekst
GtkWidget *Box; // Vahekaardi box
GtkWidget *TextView; // Vahekaardi tekstiaken
GtkTextView *Puhver; // Vahekaardi tekstipuhver
GtkSourceBuffer *Puhver; // Vahekaardi tekstipuhver
GtkWidget *ScrollWindow; // Tekstiakna scroll
GtkWidget *StatusBar; // Status bar
......@@ -29,7 +29,7 @@ typedef struct
GtkWidget *MenuBar; // Ülaosa menüü
GtkWidget *Notebook; // Notebook vahekaartidega
GtkWidget *ToolBar; //Tool bar
GtkWidget *AccelGroup; // Accel group nuppude jaoks
GtkWidget *AccelGroup; // Accel group nuppude hotkey'de jaoks
// Viited nuppudele nende sisse/välja lülitamiseks
GtkWidget *FailMenuAva;
......@@ -45,6 +45,10 @@ typedef struct
GtkToolItem *Undo; //undo nupp
GtkToolItem *Redo; //redo nupp
// SourceView stiil
GtkSourceStyleSchemeManager *SchemeManager;
GtkSourceStyleSchemeChooser *SchemeChooser;
GKeyFile *Seaded; // Seadete fail
char *SeadedNimi; // Seadete faili nimi
} ui;
......
......@@ -25,3 +25,70 @@ void FontSeaded(GtkWidget *Nupp, gpointer Data)
gtk_widget_destroy(FontChooser);
}
void CheckboxVajutatud(GtkWidget *Nupp, gpointer Data)
{
ui *UI = (ui *)Data;
gboolean Olek = gtk_toggle_button_get_active(Nupp);
if(Olek) // Sees
{
SeaVarvimine(UI, 1);
g_key_file_set_boolean(UI->Seaded, "Seaded", "varvi_suntaksi", 1);
}
else // Väljas
{
SeaVarvimine(UI, 0);
g_key_file_set_boolean(UI->Seaded, "Seaded", "varvi_suntaksi", 0);
}
g_key_file_save_to_file(UI->Seaded, UI->SeadedNimi, 0);
}
void SeaUusStiil(GtkWidget *nupp, gpointer Data)
{
ui *UI = (ui *)Data;
GtkSourceStyleScheme *Stiil = gtk_source_style_scheme_chooser_get_style_scheme(UI->SchemeChooser);
SeaStiil(UI, Stiil);
// Salvesta stiili ID ära
gchar *StiilID = gtk_source_style_scheme_get_id(Stiil);
g_key_file_set_string(UI->Seaded, "Seaded", "sourceview_stiil", StiilID);
g_key_file_save_to_file(UI->Seaded, UI->SeadedNimi, 0);
}
void SVarvSeaded(GtkWidget *Nupp, gpointer Data)
{
ui *UI = (ui *)Data;
GtkWindow *Aken = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(Aken, 300, 100);
gtk_window_set_title(Aken, "Süntaksi värvimine");
gtk_window_set_type_hint(Aken, GDK_WINDOW_TYPE_HINT_DIALOG);
GtkBox *HBox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
GtkLabel *LabelValiStiil = gtk_label_new("Vali stiil:");
GtkWidget *ChooserButton = gtk_source_style_scheme_chooser_button_new();
gtk_box_pack_start(HBox1, GTK_WIDGET(LabelValiStiil), FALSE, FALSE, 8);
gtk_box_pack_start(HBox1, GTK_WIDGET(ChooserButton), FALSE, FALSE, 0);
GtkWidget *Checkbox = gtk_check_button_new_with_label("Värvi süntaksi");
gtk_toggle_button_set_active(Checkbox, 1);
// Kui süntaksi värvimise valik on salvestatud, siis kasuta seda
GError *VViga = NULL;
gboolean Varvimine = g_key_file_get_boolean(UI->Seaded, "Seaded", "varvi_suntaksi", &VViga);
if(!VViga) gtk_toggle_button_set_active(Checkbox, Varvimine);
else g_error_free(VViga);
g_signal_connect(Checkbox, "toggled", G_CALLBACK(CheckboxVajutatud), UI);
GtkWidget *ApplyButton = gtk_button_new_with_label("Salvesta stiil");
GtkBox *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(Aken), box);
gtk_box_pack_start(box, GTK_WIDGET(HBox1), FALSE, FALSE, 4);
gtk_box_pack_start(box, GTK_WIDGET(Checkbox), FALSE, FALSE, 4);
gtk_box_pack_start(box, GTK_WIDGET(ApplyButton), FALSE, FALSE, 8);
UI->SchemeChooser = ChooserButton;
g_signal_connect(ApplyButton, "clicked", G_CALLBACK(SeaUusStiil), UI);
gtk_widget_show_all(Aken);
}
......@@ -4,5 +4,6 @@
#include "ceditor.h"
void FontSeaded(GtkWidget *Nupp, gpointer Data);
void SVarvSeaded(GtkWidget *Nupp, gpointer Data);
#endif // SETTINGS_H
......@@ -95,7 +95,24 @@ void SeaFont(ui *UI, char *FondiNimi)
for(int i = 0; i < UI->TabidN; i++)
{
gtk_widget_modify_font(UI->Tabid[i].TextView, pango_font_description_from_string(FondiNimi));
gtk_widget_show_all(UI->Tabid[i].TextView);
}
}
// Sea kõikdele vahekaartidele uus SourceView stiil
void SeaStiil(ui *UI, GtkSourceStyleScheme *Stiil)
{
for(int i = 0; i < UI->TabidN; i++)
{
gtk_source_buffer_set_style_scheme(UI->Tabid[i].Puhver, Stiil);
}
}
// Sea kõikdele vahekaartidele süntaksi värvimise valik
void SeaVarvimine(ui *UI, gboolean Varvi)
{
for(int i = 0; i < UI->TabidN; i++)
{
gtk_source_buffer_set_highlight_syntax(UI->Tabid[i].Puhver, Varvi);
}
}
......@@ -111,8 +128,6 @@ void LisaTab(ui *UI)
{
UI->Tabid = g_realloc(UI->Tabid, sizeof(tab) * (TabidN + 1)); // Lisa vahekaart massiivi
// Kuna realloc liigutab vahekaardid mälus uude kohta, siis tuleb
// tekstipuhvrite muutmise callback'ile anda uued viidad
for(int i = 0; i < UI->TabidN; i++)
{
tab *Tab = &UI->Tabid[i];
......@@ -164,12 +179,23 @@ void LisaTab(ui *UI)
Tab->LangManager = gtk_source_language_manager_get_default();
Tab->Language = gtk_source_language_manager_get_language(Tab->LangManager, "c");
gtk_source_buffer_set_language(Tab->Puhver, Tab->Language);
// Kui süntaksi värvimise valik on salvestatud, siis kasuta seda
GError *VViga = NULL;
gboolean Varvimine = g_key_file_get_boolean(UI->Seaded, "Seaded", "varvi_suntaksi", &VViga);
if(!VViga) gtk_source_buffer_set_highlight_syntax(Tab->Puhver, Varvimine);
else g_error_free(VViga);
gtk_source_view_set_show_line_numbers(GTK_SOURCE_VIEW(Tab->TextView), TRUE); // Näita reanumbreid
char *StiilID = g_key_file_get_string(UI->Seaded, "Seaded", "sourceview_stiil", NULL);
if(StiilID)
{
GtkSourceStyleScheme *Stiil = gtk_source_style_scheme_manager_get_scheme(UI->SchemeManager, StiilID);
gtk_source_buffer_set_style_scheme(Tab->Puhver, Stiil);
g_free(StiilID);
}
// Lisa loodud tab notebook'i
gtk_notebook_append_page(GTK_NOTEBOOK(UI->Notebook), Tab->Box, Tab->Pealkiri);
gtk_widget_show_all(UI->Notebook); // Värskenda, et näha oleks
UuendaRidaVeerg(GTK_TEXT_BUFFER(Tab->Puhver), GTK_STATUSBAR(Tab->StatusBar)); // Uuenda status bar'i, et seal midagi oleks
gtk_source_view_set_show_line_numbers(GTK_SOURCE_VIEW(Tab->TextView), TRUE); //naita reanumbrid
}
......@@ -11,5 +11,7 @@ void UuendaTabiPealkirja(tab *Tab, char *Nimi);
void TabMuudetud(GtkWidget *Notebook, GtkWidget *Tab, guint Indeks, gpointer Data);
int SulgeTab(ui *UI, int Indeks);
void SeaFont(ui *UI, char *FondiNimi);
void SeaStiil(ui *UI, GtkSourceStyleScheme *Stiil);
void SeaVarvimine(ui *UI, gboolean Varvi);
#endif // TAB_H
......@@ -25,6 +25,12 @@ gboolean SulgeAken(GtkWidget *Nupp, GdkEvent *Event, gpointer Data)
if(Sulge(UI))
{
// Salvesta akna pikkus ja laius
int Pikkus, Laius;
gtk_window_get_size(UI->Aken, &Laius, &Pikkus);
g_key_file_set_integer(UI->Seaded, "Seaded", "akna_pikkus", Pikkus);
g_key_file_set_integer(UI->Seaded, "Seaded", "akna_laius", Laius);
g_key_file_save_to_file(UI->Seaded, UI->SeadedNimi, 0);
gtk_main_quit();
return FALSE;
} else return TRUE;
......@@ -35,7 +41,16 @@ void Valju(GtkWidget *Nupp, gpointer Data)
{
ui *UI = (ui *)Data;
if(Sulge(UI)) gtk_main_quit();;
if(Sulge(UI))
{
// Salvesta akna pikkus ja laius
int Pikkus, Laius;
gtk_window_get_size(UI->Aken, &Laius, &Pikkus);
g_key_file_set_integer(UI->Seaded, "Seaded", "akna_pikkus", Pikkus);
g_key_file_set_integer(UI->Seaded, "Seaded", "akna_laius", Laius);
g_key_file_save_to_file(UI->Seaded, UI->SeadedNimi, 0);
gtk_main_quit();
}
}
// Lisa menüüsse menu item
......@@ -80,6 +95,19 @@ ui *LooUI()
g_error_free(Viga);
}
// Loe failist akna pikkus ja laius, kui on olemas
gint AknaPikkus = 600;
gint AknaLaius = 800;
Viga = NULL;
gint Pikkus = g_key_file_get_integer(UI->Seaded, "Seaded", "akna_pikkus", &Viga);
if(!Viga) AknaPikkus = Pikkus;
else g_error_free(Viga);
Viga = NULL;
gint Laius = g_key_file_get_integer(UI->Seaded, "Seaded", "akna_laius", &Viga);
if(!Viga) AknaLaius = Laius;
else g_error_free(Viga);
gtk_window_set_default_size(UI->Aken, AknaLaius, AknaPikkus);
// Box
UI->Box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); // Vertikaalne box, 0px vahe
gtk_container_add(GTK_CONTAINER(UI->Aken), UI->Box); // Pane box aknasse
......@@ -88,6 +116,9 @@ ui *LooUI()
UI->Notebook = gtk_notebook_new();
g_signal_connect(UI->Notebook, "switch-page", G_CALLBACK(TabMuudetud), UI); // Tab'i muutmise callback
// SourceView stiil
UI->SchemeManager = gtk_source_style_scheme_manager_get_default();
// Loo esimene tab
UI->TabidN = 0;
LisaTab(UI);
......@@ -122,6 +153,7 @@ ui *LooUI()
// Seaded menüü
GtkWidget *SeadedMenu = gtk_menu_new();
GtkWidget *SeadedMenuFont = gtk_menu_item_new_with_label("Teksti font"); // Seaded->Teksti font
GtkWidget *SeadedMenuSVarv = gtk_menu_item_new_with_label("Süntaksi värvimine"); // Seaded->Süntaksi värvimine
// Menüü nupud menu bar'i
gtk_menu_shell_append(GTK_MENU_SHELL(UI->MenuBar), FailMenuNupp);
gtk_menu_shell_append(GTK_MENU_SHELL(UI->MenuBar), KompMenuNupp);
......@@ -148,6 +180,7 @@ ui *LooUI()
LisaMenuItem(UI, KompMenu, KompMenuKaivita, KaivitaProgramm, GDK_KEY_R, GDK_CONTROL_MASK|GDK_SHIFT_MASK); // Kompileeri->Käivita programm
// Seaded menüü
LisaMenuItem(UI, SeadedMenu, SeadedMenuFont, FontSeaded, 0, 0); // Seaded->Teksti font
LisaMenuItem(UI, SeadedMenu, SeadedMenuSVarv, SVarvSeaded, 0, 0);
//ToolBar
UI->ToolBar = gtk_toolbar_new();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment