Commit 28835234 by karudu

SourceView süntaksi värvimine, faili muutmisel näidatakse *

parent cb6b509a
#include "ceditor.h" #include "ceditor.h"
#include "ui.h" #include "ui.h"
/* TODO
Klahvikombinatsioonid
*/
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
gtk_init(&argc, &argv); gtk_init(&argc, &argv);
......
#ifndef CEDITOR_H #ifndef CEDITOR_H
#define CEDITOR_H #define CEDITOR_H
#define SOURCEVIEW
#include <gtk/gtk.h> #include <gtk/gtk.h>
#ifdef SOURCEVIEW
#include <gtksourceview/gtksource.h> #include <gtksourceview/gtksource.h>
#endif
typedef struct typedef struct
{ {
GtkWidget *Aken; // Programmi aken GtkWidget *Aken; // Programmi aken
char *FailiNimi; // Viit faili nimele, 0 kui nime veel pole char *FailiNimi; // Viit faili nimele, 0 kui nime veel pole
int OnMuudetud; // Kas teksti on muudetud
GtkWidget *Pealkiri; // Vahekaardi pealkiri GtkWidget *Pealkiri; // Vahekaardi pealkiri
char *PealkiriTekst; // Originaalne pealkirja tekst
GtkWidget *Box; // Vahekaardi box GtkWidget *Box; // Vahekaardi box
GtkWidget *TextView; // Vahekaardi tekstiaken GtkWidget *TextView; // Vahekaardi tekstiaken
GtkTextView *Puhver; // Vahekaardi tekstipuhver GtkTextView *Puhver; // Vahekaardi tekstipuhver
GtkWidget *ScrollWindow; // Tekstiakna scroll GtkWidget *ScrollWindow; // Tekstiakna scroll
GtkWidget *StatusBar; // Status bar GtkWidget *StatusBar; // Status bar
GtkSourceLanguageManager *LangManager;
GtkSourceLanguage *Language;
} tab; } tab;
typedef struct typedef struct
......
...@@ -44,6 +44,7 @@ void Ava(GtkWidget *Nupp, gpointer Data) ...@@ -44,6 +44,7 @@ void Ava(GtkWidget *Nupp, gpointer Data)
gtk_text_buffer_set_modified(Tab->Puhver, FALSE); // Tekst on muutmata gtk_text_buffer_set_modified(Tab->Puhver, FALSE); // Tekst on muutmata
Tab->FailiNimi = Nimi; Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi); UuendaTabiPealkirja(Tab, Nimi);
UuendaTabMuudetud(Tab);
} }
else else
{ {
...@@ -72,6 +73,7 @@ int SalvestaFail(ui *UI, tab *Tab) ...@@ -72,6 +73,7 @@ int SalvestaFail(ui *UI, tab *Tab)
GtkWidget *Dialog = 0; GtkWidget *Dialog = 0;
if(Tab->FailiNimi) // Fail on juba olemas if(Tab->FailiNimi) // Fail on juba olemas
{ {
if(gtk_text_buffer_get_modified(Puhver) == 0) return; // Ära salvesta, kui midagi pole muudetud
Nimi = Tab->FailiNimi; Nimi = Tab->FailiNimi;
} }
else // Salvestame uue faili else // Salvestame uue faili
...@@ -107,7 +109,9 @@ int SalvestaFail(ui *UI, tab *Tab) ...@@ -107,7 +109,9 @@ int SalvestaFail(ui *UI, tab *Tab)
Tab->FailiNimi = Nimi; Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi); UuendaTabiPealkirja(Tab, Nimi);
} }
else g_free(Nimi);
UuendaTabMuudetud(Tab);
g_free(Sisu); g_free(Sisu);
if(Dialog) gtk_widget_destroy(Dialog); if(Dialog) gtk_widget_destroy(Dialog);
...@@ -170,7 +174,8 @@ void SalvestaNimega(GtkWidget *Nupp, gpointer Data) ...@@ -170,7 +174,8 @@ void SalvestaNimega(GtkWidget *Nupp, gpointer Data)
Tab->FailiNimi = Nimi; Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi); UuendaTabiPealkirja(Tab, Nimi);
} }
else g_free(Nimi);
UuendaTabMuudetud(Tab);
} }
else else
{ {
......
...@@ -20,12 +20,9 @@ void LisaTab(ui *UI) ...@@ -20,12 +20,9 @@ void LisaTab(ui *UI)
Tab->Aken = UI->Aken; Tab->Aken = UI->Aken;
// Tekstiaken // Tekstiaken
#ifdef SOURCEVIEW
Tab->TextView = gtk_source_view_new(); // Loo tekstiaken Tab->TextView = gtk_source_view_new(); // Loo tekstiaken
#else
Tab->TextView = gtk_text_view_new(); // Loo tekstiaken
#endif
Tab->Puhver = gtk_text_view_get_buffer(GTK_TEXT_VIEW(Tab->TextView)); // Tekstiakna teksti puhver Tab->Puhver = gtk_text_view_get_buffer(GTK_TEXT_VIEW(Tab->TextView)); // Tekstiakna teksti puhver
Tab->OnMuudetud = 0;
// Scroll window // Scroll window
Tab->ScrollWindow = gtk_scrolled_window_new(NULL, NULL); // Loo scroll aken Tab->ScrollWindow = gtk_scrolled_window_new(NULL, NULL); // Loo scroll aken
...@@ -34,8 +31,10 @@ void LisaTab(ui *UI) ...@@ -34,8 +31,10 @@ void LisaTab(ui *UI)
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(Tab->ScrollWindow), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(Tab->ScrollWindow), GTK_SHADOW_ETCHED_IN);
// Status bar // Status bar
Tab->StatusBar = gtk_statusbar_new(); Tab->StatusBar = gtk_statusbar_new();
// Teksti muutuse callback, uuendab rida/veergu // Teksti muutuse callback
g_signal_connect(Tab->Puhver, "changed", G_CALLBACK(UuendaRidaVeerg), Tab->StatusBar); 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 // Copy/paste lohistamise callback, uuendab samuti
g_signal_connect_object(Tab->Puhver, "mark_set", G_CALLBACK(TekstMarkSet), Tab->StatusBar, 0); g_signal_connect_object(Tab->Puhver, "mark_set", G_CALLBACK(TekstMarkSet), Tab->StatusBar, 0);
...@@ -46,6 +45,11 @@ void LisaTab(ui *UI) ...@@ -46,6 +45,11 @@ void LisaTab(ui *UI)
// Pealkiri // Pealkiri
Tab->Pealkiri = gtk_label_new("(uus)"); 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 // Lisa loodud tab notebook'i
gtk_notebook_append_page(GTK_NOTEBOOK(UI->Notebook), Tab->Box, Tab->Pealkiri); gtk_notebook_append_page(GTK_NOTEBOOK(UI->Notebook), Tab->Box, Tab->Pealkiri);
...@@ -84,13 +88,31 @@ void KustutaTab(ui *UI, int Indeks) ...@@ -84,13 +88,31 @@ void KustutaTab(ui *UI, int Indeks)
// Uuenda vahekaardi pealkirja (faili nime) // Uuenda vahekaardi pealkirja (faili nime)
void UuendaTabiPealkirja(tab *Tab, char *Nimi) void UuendaTabiPealkirja(tab *Tab, char *Nimi)
{ {
char *Tekst = g_path_get_basename(Nimi); // Eralda faili nimi Tab->PealkiriTekst = g_path_get_basename(Nimi); // Eralda faili nimi
gtk_label_set_label(GTK_LABEL(Tab->Pealkiri), Tekst); gtk_label_set_label(GTK_LABEL(Tab->Pealkiri), Tab->PealkiriTekst);
g_free(Tekst);
// Terve faili nimi tooltip'is // Terve faili nimi tooltip'is
gtk_widget_set_tooltip_text(Tab->Pealkiri, Nimi); gtk_widget_set_tooltip_text(Tab->Pealkiri, Nimi);
} }
void UuendaTabMuudetud(tab *Tab)
{
int Muudetud = gtk_text_buffer_get_modified(Tab->Puhver);
if(Tab->OnMuudetud == 0)
{
char *Tekst = g_strdup_printf("%s *", gtk_label_get_text(Tab->Pealkiri));
gtk_label_set_label(GTK_LABEL(Tab->Pealkiri), Tekst);
g_free(Tekst);
Tab->OnMuudetud = 1;
}
else if(!Muudetud)
{
gtk_label_set_label(GTK_LABEL(Tab->Pealkiri), Tab->PealkiriTekst);
Tab->OnMuudetud = 0;
}
}
// Kutsutakse igal vahekaardi muutmisel // Kutsutakse igal vahekaardi muutmisel
void TabMuudetud(GtkWidget *Notebook, GtkWidget *Tab, guint Indeks, gpointer Data) void TabMuudetud(GtkWidget *Notebook, GtkWidget *Tab, guint Indeks, gpointer Data)
{ {
......
#include "textview.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 // Kutsutakse copy/paste lohistamise korral, praegu lihtsalt uuendab rida/veergu
void TekstMarkSet(GtkTextBuffer *Puhver, const GtkTextIter *new_location, GtkTextMark *Mark, gpointer Data) void TekstMarkSet(GtkTextBuffer *Puhver, const GtkTextIter *new_location, GtkTextMark *Mark, gpointer Data)
{ {
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
#include "ceditor.h" #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); void TekstMarkSet(GtkTextBuffer *Puhver, const GtkTextIter *new_location, GtkTextMark *Mark, gpointer Data);
#endif // TEXTVIEW_H #endif // TEXTVIEW_H
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