Commit ff354c82 by karudu

Fondi seadistamine, bugfix

parent 747d86ac
......@@ -17,8 +17,9 @@ typedef struct
GtkWidget *ScrollWindow; // Tekstiakna scroll
GtkWidget *StatusBar; // Status bar
GtkSourceLanguageManager *LangManager;
GtkSourceLanguageManager *LangManager; // Süntaksi värvimise asjad
GtkSourceLanguage *Language;
gint MuudetudID; // Muudetud teksti signaali ID
} tab;
typedef struct
......
......@@ -23,7 +23,7 @@ void Ava(GtkWidget *Nupp, gpointer Data)
{
ui *UI = (ui *)Data;
tab *Tab = &UI->Tabid[UI->PraeguneTab];
GtkTextBuffer *Puhver = Tab->Puhver;
GtkWidget *Dialog = gtk_file_chooser_dialog_new("Ava fail", NULL, GTK_FILE_CHOOSER_ACTION_OPEN,
"Tühista", GTK_RESPONSE_CANCEL,
"Ava", GTK_RESPONSE_ACCEPT, NULL);
......@@ -40,11 +40,11 @@ void Ava(GtkWidget *Nupp, gpointer Data)
{
if(g_utf8_validate(Sisu, -1, NULL))
{
gtk_text_buffer_set_text(Puhver, Sisu, -1); // Kopeeri fail puhvrisse
gtk_text_buffer_set_text(Tab->Puhver, Sisu, -1); // Kopeeri fail puhvrisse
gtk_text_buffer_set_modified(Tab->Puhver, FALSE); // Tekst on muutmata
Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi);
UuendaTabMuudetud(Tab);
UuendaTabMuudetud(0, Tab);
}
else
{
......@@ -110,7 +110,7 @@ int SalvestaFail(ui *UI, tab *Tab)
UuendaTabiPealkirja(Tab, Nimi);
}
UuendaTabMuudetud(Tab);
UuendaTabMuudetud(0, Tab);
g_free(Sisu);
if(Dialog) gtk_widget_destroy(Dialog);
......@@ -175,7 +175,7 @@ void SalvestaNimega(GtkWidget *Nupp, gpointer Data)
UuendaTabiPealkirja(Tab, Nimi);
}
UuendaTabMuudetud(Tab);
UuendaTabMuudetud(0, Tab);
}
else
{
......
#include "settings.h"
void FontSeaded(GtkWidget *Nupp, gpointer Data)
{
ui *UI = (ui *)Data;
GtkFontChooserDialog *FontChooser = gtk_font_chooser_dialog_new("Font", NULL);
char *SFondiNimi = g_key_file_get_string(UI->Seaded, "Seaded", "font", NULL); // Seadistatud fondi nimi
if(SFondiNimi)
{
gtk_font_chooser_set_font(FontChooser, SFondiNimi);
g_free(SFondiNimi);
}
int Vastus = gtk_dialog_run(GTK_DIALOG(FontChooser));
if(Vastus == GTK_RESPONSE_OK)
{
char *FondiNimi = gtk_font_chooser_get_font(FontChooser);
g_key_file_set_string(UI->Seaded, "Seaded", "font", FondiNimi);
g_key_file_save_to_file(UI->Seaded, UI->SeadedNimi, 0);
SeaFont(UI, FondiNimi); // Pane vahekaartidele uus font
g_free(FondiNimi);
}
gtk_widget_destroy(FontChooser);
}
#ifndef SETTINGS_H
#define SETTINGS_H
#include "ceditor.h"
void FontSeaded(GtkWidget *Nupp, gpointer Data);
#endif // SETTINGS_H
#include "tab.h"
// Loo uus vahekaart ja pane see lõppu
void LisaTab(ui *UI)
{
int TabidN = UI->TabidN;
if(TabidN == 0)
{
UI->Tabid = g_malloc(sizeof(tab)); // Loo massiiv, kui see pole olemas
}
else
{
UI->Tabid = g_realloc(UI->Tabid, sizeof(tab) * (TabidN + 1)); // Lisa vahekaart massiivi
}
tab *Tab = &UI->Tabid[TabidN];
UI->TabidN++;
Tab->FailiNimi = 0; // Faili veel pole
Tab->Aken = UI->Aken;
// Tekstiaken
Tab->TextView = gtk_source_view_new(); // Loo tekstiaken
Tab->Puhver = gtk_text_view_get_buffer(GTK_TEXT_VIEW(Tab->TextView)); // Tekstiakna teksti puhver
// Scroll window
Tab->ScrollWindow = gtk_scrolled_window_new(NULL, NULL); // Loo scroll aken
gtk_container_add(GTK_CONTAINER(Tab->ScrollWindow), Tab->TextView); // Scroll aknasse läheb tekstiaken
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Tab->ScrollWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); // Konfigureerimine
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(Tab->ScrollWindow), GTK_SHADOW_ETCHED_IN);
// Status bar
Tab->StatusBar = gtk_statusbar_new();
// Teksti muutuse callback
g_signal_connect(Tab->Puhver, "changed", G_CALLBACK(TekstMuudetud), Tab);
// Modified callback
g_signal_connect(Tab->Puhver, "modified-changed", G_CALLBACK(TekstModified), Tab);
// Copy/paste lohistamise callback, uuendab samuti
g_signal_connect_object(Tab->Puhver, "mark_set", G_CALLBACK(TekstMarkSet), Tab->StatusBar, 0);
// Box
Tab->Box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); // Vertikaalne box, 0px vahe
gtk_box_pack_start(GTK_BOX(Tab->Box), Tab->ScrollWindow, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(Tab->Box), Tab->StatusBar, FALSE, FALSE, 0);
// Pealkiri
Tab->Pealkiri = gtk_label_new("(uus)");
Tab->PealkiriTekst = "(uus)";
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);
// 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
}
// Kustuta vahekaarti indeksil
void KustutaTab(ui *UI, int Indeks)
{
......@@ -94,8 +35,10 @@ void UuendaTabiPealkirja(tab *Tab, char *Nimi)
gtk_widget_set_tooltip_text(Tab->Pealkiri, Nimi);
}
void UuendaTabMuudetud(tab *Tab)
void UuendaTabMuudetud(GtkWidget *Puhver, gpointer Data)
{
tab *Tab = (tab *)Data;
if(gtk_text_buffer_get_modified(Tab->Puhver))
{
char *Tekst = g_strdup_printf("%s *", gtk_label_get_text(Tab->Pealkiri));
......@@ -145,3 +88,88 @@ int SulgeTab(ui *UI, int Indeks)
KustutaTab(UI, Indeks);
return 1;
}
// Sea kõikdele vahekaartidele uus font
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);
}
}
// Loo uus vahekaart ja pane see lõppu
void LisaTab(ui *UI)
{
int TabidN = UI->TabidN;
if(TabidN == 0)
{
UI->Tabid = g_malloc(sizeof(tab)); // Loo massiiv, kui see pole olemas
}
else
{
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];
g_signal_handler_disconnect(Tab->Puhver, Tab->MuudetudID);
Tab->MuudetudID = g_signal_connect(Tab->Puhver, "modified-changed", G_CALLBACK(UuendaTabMuudetud), Tab);
}
}
tab *Tab = &UI->Tabid[TabidN];
UI->TabidN++;
Tab->FailiNimi = 0; // Faili veel pole
Tab->Aken = UI->Aken;
// Tekstiaken
Tab->TextView = gtk_source_view_new(); // Loo tekstiaken
Tab->Puhver = gtk_text_view_get_buffer(GTK_TEXT_VIEW(Tab->TextView)); // Tekstiakna teksti puhver
// Kui font on seadistatud, siis kasuta seda
char *FondiNimi = g_key_file_get_string(UI->Seaded, "Seaded", "font", NULL);
if(FondiNimi)
{
gtk_widget_modify_font(Tab->TextView, pango_font_description_from_string(FondiNimi));
g_free(FondiNimi);
}
// Scroll window
Tab->ScrollWindow = gtk_scrolled_window_new(NULL, NULL); // Loo scroll aken
gtk_container_add(GTK_CONTAINER(Tab->ScrollWindow), Tab->TextView); // Scroll aknasse läheb tekstiaken
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Tab->ScrollWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); // Konfigureerimine
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(Tab->ScrollWindow), GTK_SHADOW_ETCHED_IN);
// Status bar
Tab->StatusBar = gtk_statusbar_new();
// Modified callback
Tab->MuudetudID = g_signal_connect(Tab->Puhver, "modified-changed", G_CALLBACK(UuendaTabMuudetud), Tab);
// Teksti muutuse callback
g_signal_connect_object(Tab->Puhver, "mark_set", G_CALLBACK(TekstMarkSet), Tab->StatusBar, 0);
// Box
Tab->Box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); // Vertikaalne box, 0px vahe
gtk_box_pack_start(GTK_BOX(Tab->Box), Tab->ScrollWindow, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(Tab->Box), Tab->StatusBar, FALSE, FALSE, 0);
// Pealkiri
Tab->Pealkiri = gtk_label_new("(uus)");
Tab->PealkiriTekst = "(uus)";
// Language manager (süntaksi värvimine)
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);
// 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
}
......@@ -10,5 +10,6 @@ void KustutaTab(ui *UI, int Indeks);
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);
#endif // TAB_H
#include "textview.h"
// Teksti muutmise callback
void TekstMuudetud(GtkTextBuffer *Puhver, tab *Tab)
{
UuendaRidaVeerg(Tab->Puhver, Tab->StatusBar);
}
// Teksti modified olek muutus
void TekstModified(GtkTextBuffer *Puhver, tab *Tab)
{
UuendaTabMuudetud(Tab);
}
// Kutsutakse copy/paste lohistamise korral, praegu lihtsalt uuendab rida/veergu
void TekstMarkSet(GtkTextBuffer *Puhver, const GtkTextIter *new_location, GtkTextMark *Mark, gpointer Data)
{
......
......@@ -3,7 +3,6 @@
#include "ceditor.h"
void TekstMuudetud(GtkTextBuffer *Puhver, tab *Tab);
void TekstModified(GtkTextBuffer *Puhver, tab *Tab);
void TekstMarkSet(GtkTextBuffer *Puhver, const GtkTextIter *new_location, GtkTextMark *Mark, gpointer Data);
......
......@@ -58,6 +58,28 @@ ui *LooUI()
gtk_window_set_title(GTK_WINDOW(UI->Aken), PEALKIRI); // Pealkiri
g_signal_connect(UI->Aken, "delete-event", G_CALLBACK(SulgeAken), UI); // Close nupu callback
// Seadete fail
UI->Seaded = g_key_file_new();
char *SeadedKaust = g_build_filename(g_get_home_dir(), "ceditor", NULL);
char *SeadedNimi = g_build_filename(SeadedKaust, "settings.ini", NULL);
UI->SeadedNimi = strdup(SeadedNimi);
GError *Viga = NULL;
// Ava seadete fail
if(!g_key_file_load_from_file(UI->Seaded, SeadedNimi, G_KEY_FILE_NONE, &Viga))
{
// Ei õnnestunud avada
if(Viga->code == G_FILE_ERROR_NOENT) // Faili pole olemas, loo see
{
g_mkdir_with_parents(SeadedKaust, 0700);
g_key_file_save_to_file(UI->Seaded, SeadedNimi, NULL);
}
else
{
printf("Viga settings.ini avamisel: %s\n", Viga->message);
}
g_error_free(Viga);
}
// 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
......@@ -79,6 +101,7 @@ ui *LooUI()
UI->MenuBar = gtk_menu_bar_new(); // Loo menu bar
GtkWidget *FailMenuNupp = gtk_menu_item_new_with_label("Fail"); // Fail
GtkWidget *KompMenuNupp = gtk_menu_item_new_with_label("Kompileeri"); // Kompileeri
GtkWidget *SeadedMenuNupp = gtk_menu_item_new_with_label("Seaded"); // Seaded
// Fail menüü
GtkWidget *FailMenu = gtk_menu_new();
GtkWidget *FailMenuUus = gtk_menu_item_new_with_label("Uus vahekaart"); // Fail->Uus vahekaart
......@@ -93,16 +116,21 @@ ui *LooUI()
GtkWidget *FailMenuValju = gtk_menu_item_new_with_label("Välju"); // Fail->Välju
// Kompileeri menüü
GtkWidget *KompMenu = gtk_menu_new();
GtkWidget *KompMenuSeaded = gtk_menu_item_new_with_label("Seaded"); // Kompileeri->Seaded
GtkWidget *KompMenuSeaded = gtk_menu_item_new_with_label("Kompilaatori seaded"); // Kompileeri->Kompilaatori seaded
GtkWidget *KompMenuKompileeri = gtk_menu_item_new_with_label("Kompileeri"); // Kompileeri->Kompileeri
GtkWidget *KompMenuKaivita = gtk_menu_item_new_with_label("Käivita programm"); // Kompileeri->Käivita programm
// Seaded menüü
GtkWidget *SeadedMenu = gtk_menu_new();
GtkWidget *SeadedMenuFont = gtk_menu_item_new_with_label("Teksti font"); // Seaded->Teksti font
// 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);
gtk_menu_shell_append(GTK_MENU_SHELL(UI->MenuBar), SeadedMenuNupp);
// Menüüd nuppudesse
gtk_menu_item_set_submenu(GTK_MENU_ITEM(FailMenuNupp), FailMenu);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(KompMenuNupp), KompMenu);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(SeadedMenuNupp), SeadedMenu);
// Fail menüü
LisaMenuItem(UI, FailMenu, FailMenuUus, Uus, GDK_KEY_N, GDK_CONTROL_MASK); // Fail->Uus vahekaart
MenuSeparator(FailMenu);
......@@ -114,17 +142,19 @@ ui *LooUI()
MenuSeparator(FailMenu);
LisaMenuItem(UI, FailMenu, FailMenuValju, Valju, GDK_KEY_Q, GDK_CONTROL_MASK|GDK_SHIFT_MASK); // Fail->Välju
// Kompileeri menüü
LisaMenuItem(UI, KompMenu, KompMenuSeaded, KompilaatoriSeaded, 0, 0); // Kompileeri->Seaded
LisaMenuItem(UI, KompMenu, KompMenuSeaded, KompilaatoriSeaded, 0, 0); // Kompileeri->Kompilaatori seaded
MenuSeparator(KompMenu);
LisaMenuItem(UI, KompMenu, KompMenuKompileeri, Kompileeri, GDK_KEY_C, GDK_CONTROL_MASK|GDK_SHIFT_MASK); // Kompileeri->Kompileeri
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
//ToolBar
UI->ToolBar = gtk_toolbar_new();
gtk_toolbar_set_style(GTK_TOOLBAR(UI->ToolBar), GTK_TOOLBAR_ICONS);
GtkWidget *UndoIcon = gtk_image_new_from_icon_name(GTK_STOCK_UNDO, 5);
GtkWidget *UndoIcon = gtk_image_new_from_icon_name("edit-undo", 5);
UI->Undo = gtk_tool_button_new(UndoIcon, "undo");
GtkWidget *RedoIcon = gtk_image_new_from_icon_name(GTK_STOCK_REDO, 5);
GtkWidget *RedoIcon = gtk_image_new_from_icon_name("edit-redo", 5);
UI->Redo = gtk_tool_button_new(RedoIcon, "redo");
//nupud toolbarile
gtk_toolbar_insert(GTK_TOOLBAR(UI->ToolBar), UI->Undo, -1);
......@@ -137,28 +167,5 @@ ui *LooUI()
gtk_box_pack_start(GTK_BOX(UI->Box), UI->ToolBar, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(UI->Box), UI->Notebook, TRUE, TRUE, 0);
// Seadete fail
UI->Seaded = g_key_file_new();
char *SeadedKaust = g_build_filename(g_get_home_dir(), "ceditor", NULL);
char *SeadedNimi = g_build_filename(SeadedKaust, "settings.ini", NULL);
UI->SeadedNimi = strdup(SeadedNimi);
GError *Viga = NULL;
// Ava seadete fail
if(!g_key_file_load_from_file(UI->Seaded, SeadedNimi, G_KEY_FILE_NONE, &Viga))
{
// Ei õnnestunud avada
if(Viga->code == G_FILE_ERROR_NOENT) // Faili pole olemas, loo see
{
g_mkdir_with_parents(SeadedKaust, 0700);
g_key_file_save_to_file(UI->Seaded, SeadedNimi, NULL);
}
else
{
printf("Viga settings.ini avamisel: %s\n", Viga->message);
}
g_error_free(Viga);
}
return UI;
}
......@@ -5,6 +5,7 @@
#include "tab.h"
#include "menubar.h"
#include "compiler.h"
#include "settings.h"
#define PEALKIRI "CEditor"
......
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