Commit 28835234 by karudu

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

parent cb6b509a
#include "ceditor.h"
#include "ui.h"
/* TODO
Klahvikombinatsioonid
*/
int main(int argc, char **argv)
{
gtk_init(&argc, &argv);
......
#ifndef CEDITOR_H
#define CEDITOR_H
#define SOURCEVIEW
#include <gtk/gtk.h>
#ifdef SOURCEVIEW
#include <gtksourceview/gtksource.h>
#endif
typedef struct
{
GtkWidget *Aken; // Programmi aken
char *FailiNimi; // Viit faili nimele, 0 kui nime veel pole
int OnMuudetud; // Kas teksti on muudetud
GtkWidget *Pealkiri; // Vahekaardi pealkiri
char *PealkiriTekst; // Originaalne pealkirja tekst
GtkWidget *Box; // Vahekaardi box
GtkWidget *TextView; // Vahekaardi tekstiaken
GtkTextView *Puhver; // Vahekaardi tekstipuhver
GtkWidget *ScrollWindow; // Tekstiakna scroll
GtkWidget *StatusBar; // Status bar
GtkSourceLanguageManager *LangManager;
GtkSourceLanguage *Language;
} tab;
typedef struct
......
......@@ -44,6 +44,7 @@ void Ava(GtkWidget *Nupp, gpointer Data)
gtk_text_buffer_set_modified(Tab->Puhver, FALSE); // Tekst on muutmata
Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi);
UuendaTabMuudetud(Tab);
}
else
{
......@@ -72,6 +73,7 @@ int SalvestaFail(ui *UI, tab *Tab)
GtkWidget *Dialog = 0;
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;
}
else // Salvestame uue faili
......@@ -107,7 +109,9 @@ int SalvestaFail(ui *UI, tab *Tab)
Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi);
}
else g_free(Nimi);
UuendaTabMuudetud(Tab);
g_free(Sisu);
if(Dialog) gtk_widget_destroy(Dialog);
......@@ -170,7 +174,8 @@ void SalvestaNimega(GtkWidget *Nupp, gpointer Data)
Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi);
}
else g_free(Nimi);
UuendaTabMuudetud(Tab);
}
else
{
......
......@@ -20,12 +20,9 @@ void LisaTab(ui *UI)
Tab->Aken = UI->Aken;
// Tekstiaken
#ifdef SOURCEVIEW
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->OnMuudetud = 0;
// Scroll window
Tab->ScrollWindow = gtk_scrolled_window_new(NULL, NULL); // Loo scroll aken
......@@ -34,8 +31,10 @@ void LisaTab(ui *UI)
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, uuendab rida/veergu
g_signal_connect(Tab->Puhver, "changed", G_CALLBACK(UuendaRidaVeerg), Tab->StatusBar);
// 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);
......@@ -46,6 +45,11 @@ void LisaTab(ui *UI)
// 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);
......@@ -84,13 +88,31 @@ void KustutaTab(ui *UI, int Indeks)
// Uuenda vahekaardi pealkirja (faili nime)
void UuendaTabiPealkirja(tab *Tab, char *Nimi)
{
char *Tekst = g_path_get_basename(Nimi); // Eralda faili nimi
gtk_label_set_label(GTK_LABEL(Tab->Pealkiri), Tekst);
g_free(Tekst);
Tab->PealkiriTekst = g_path_get_basename(Nimi); // Eralda faili nimi
gtk_label_set_label(GTK_LABEL(Tab->Pealkiri), Tab->PealkiriTekst);
// Terve faili nimi tooltip'is
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
void TabMuudetud(GtkWidget *Notebook, GtkWidget *Tab, guint Indeks, gpointer Data)
{
......
#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,6 +3,8 @@
#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);
#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