Commit 4e267cd5 by karudu

Faili salvestamise dialoogid

parent 047cc8ee
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
#include "ui.h" #include "ui.h"
/* TODO /* TODO
Faili salvestamise prompt sulgemisel/uue avamisel
Klahvikombinatsioonid Klahvikombinatsioonid
*/ */
......
...@@ -27,6 +27,7 @@ typedef struct ...@@ -27,6 +27,7 @@ typedef struct
GtkWidget *Notebook; // Notebook vahekaartidega GtkWidget *Notebook; // Notebook vahekaartidega
// Viited nuppudele nende sisse/välja lülitamiseks // Viited nuppudele nende sisse/välja lülitamiseks
GtkWidget *FailMenuAva;
GtkWidget *FailMenuSalvesta; GtkWidget *FailMenuSalvesta;
GtkWidget *FailMenuSalvestaN; GtkWidget *FailMenuSalvestaN;
GtkWidget *FailMenuSulgeV; GtkWidget *FailMenuSulgeV;
......
...@@ -12,6 +12,7 @@ void Uus(GtkWidget *Nupp, gpointer Data) ...@@ -12,6 +12,7 @@ void Uus(GtkWidget *Nupp, gpointer Data)
gtk_notebook_set_current_page(UI->Notebook, UI->TabidN - 1); // Näita uut vahekaarti gtk_notebook_set_current_page(UI->Notebook, UI->TabidN - 1); // Näita uut vahekaarti
// Muuda need uuesti vajutatavaks, kui ennem polnud // Muuda need uuesti vajutatavaks, kui ennem polnud
gtk_widget_set_sensitive(UI->FailMenuAva, TRUE);
gtk_widget_set_sensitive(UI->FailMenuSalvesta, TRUE); gtk_widget_set_sensitive(UI->FailMenuSalvesta, TRUE);
gtk_widget_set_sensitive(UI->FailMenuSalvestaN, TRUE); gtk_widget_set_sensitive(UI->FailMenuSalvestaN, TRUE);
gtk_widget_set_sensitive(UI->FailMenuSulgeV, TRUE); gtk_widget_set_sensitive(UI->FailMenuSulgeV, TRUE);
...@@ -40,6 +41,7 @@ void Ava(GtkWidget *Nupp, gpointer Data) ...@@ -40,6 +41,7 @@ void Ava(GtkWidget *Nupp, gpointer Data)
if(g_utf8_validate(Sisu, -1, NULL)) if(g_utf8_validate(Sisu, -1, NULL))
{ {
gtk_text_buffer_set_text(Puhver, Sisu, -1); // Kopeeri fail puhvrisse gtk_text_buffer_set_text(Puhver, Sisu, -1); // Kopeeri fail puhvrisse
gtk_text_buffer_set_modified(Tab->Puhver, FALSE); // Tekst on muutmata
Tab->FailiNimi = Nimi; Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi); UuendaTabiPealkirja(Tab, Nimi);
} }
...@@ -61,11 +63,9 @@ void Ava(GtkWidget *Nupp, gpointer Data) ...@@ -61,11 +63,9 @@ void Ava(GtkWidget *Nupp, gpointer Data)
gtk_widget_destroy(Dialog); gtk_widget_destroy(Dialog);
} }
// Salvestab vahekaardi teksti praegusesse faili // Salvesta fail, tagastab 1 kui edukas
void Salvesta(GtkWidget *Nupp, gpointer Data) int SalvestaFail(ui *UI, tab *Tab)
{ {
ui *UI = (ui *)Data;
tab *Tab = &UI->Tabid[UI->PraeguneTab];
GtkTextBuffer *Puhver = Tab->Puhver; GtkTextBuffer *Puhver = Tab->Puhver;
char *Nimi; char *Nimi;
...@@ -87,7 +87,7 @@ void Salvesta(GtkWidget *Nupp, gpointer Data) ...@@ -87,7 +87,7 @@ void Salvesta(GtkWidget *Nupp, gpointer Data)
else else
{ {
gtk_widget_destroy(Dialog); gtk_widget_destroy(Dialog);
return; return 0;
} }
} }
...@@ -96,25 +96,42 @@ void Salvesta(GtkWidget *Nupp, gpointer Data) ...@@ -96,25 +96,42 @@ void Salvesta(GtkWidget *Nupp, gpointer Data)
gtk_text_buffer_get_end_iter(Puhver, &TekstL); gtk_text_buffer_get_end_iter(Puhver, &TekstL);
gchar *Sisu = gtk_text_buffer_get_text(Puhver, &TekstA, &TekstL, TRUE); gchar *Sisu = gtk_text_buffer_get_text(Puhver, &TekstA, &TekstL, TRUE);
gtk_text_buffer_set_modified(Puhver, FALSE);
GError *Viga = NULL; GError *Viga = NULL;
if(g_file_set_contents(Nimi, Sisu, -1, &Viga) == FALSE) if(g_file_set_contents(Nimi, Sisu, -1, &Viga) == TRUE)
{
gtk_text_buffer_set_modified(Tab->Puhver, FALSE); // Tekst on muutmata
// Kui enne salvestamist failinime polńud, siis kasuta praegust
if(!Tab->FailiNimi)
{
Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi);
}
else g_free(Nimi);
g_free(Sisu);
if(Dialog) gtk_widget_destroy(Dialog);
return 1;
}
else
{ {
printf("Viga faili salvestamisel: %s\n", Viga->message); printf("Viga faili salvestamisel: %s\n", Viga->message);
g_error_free(Viga); g_error_free(Viga);
} g_free(Nimi);
g_free(Sisu);
if(Dialog) gtk_widget_destroy(Dialog);
// Kui enne salvestamist failinime polńud, siis kasuta praegust return 0;
if(!Tab->FailiNimi)
{
Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi);
} }
else g_free(Nimi); }
g_free(Sisu);
// Salvestab vahekaardi teksti praegusesse faili
void Salvesta(GtkWidget *Nupp, gpointer Data)
{
ui *UI = (ui *)Data;
tab *Tab = &UI->Tabid[UI->PraeguneTab];
if(Dialog) gtk_widget_destroy(Dialog); SalvestaFail(UI, Tab);
} }
// Salvestab vahekaardi teksti vabalt valitud faili // Salvestab vahekaardi teksti vabalt valitud faili
...@@ -140,21 +157,29 @@ void SalvestaNimega(GtkWidget *Nupp, gpointer Data) ...@@ -140,21 +157,29 @@ void SalvestaNimega(GtkWidget *Nupp, gpointer Data)
gtk_text_buffer_set_modified(Puhver, FALSE); gtk_text_buffer_set_modified(Puhver, FALSE);
GError *Viga = NULL; GError *Viga = NULL;
if(g_file_set_contents(Nimi, Sisu, -1, &Viga) == FALSE) if(g_file_set_contents(Nimi, Sisu, -1, &Viga) == TRUE)
{
if(g_strcmp0(Nimi, Tab->FailiNimi) == 0)
{
printf("Sama fail\n");
}
// Kui enne salvestamist failinime polńud, siis kasuta praegust
if(!Tab->FailiNimi)
{
Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi);
}
else g_free(Nimi);
}
else
{ {
printf("Viga faili salvestamisel: %s\n", Viga->message); printf("Viga faili salvestamisel: %s\n", Viga->message);
g_error_free(Viga); g_error_free(Viga);
g_free(Nimi);
} }
// Kui enne salvestamist failinime polńud, siis kasuta praegust
if(!Tab->FailiNimi)
{
Tab->FailiNimi = Nimi;
UuendaTabiPealkirja(Tab, Nimi);
}
else g_free(Nimi);
g_free(Sisu); g_free(Sisu);
} }
gtk_widget_destroy(Dialog); gtk_widget_destroy(Dialog);
...@@ -165,10 +190,11 @@ void SulgeVahekaart(GtkWidget *Nupp, gpointer Data) ...@@ -165,10 +190,11 @@ void SulgeVahekaart(GtkWidget *Nupp, gpointer Data)
{ {
ui *UI = (ui *)Data; ui *UI = (ui *)Data;
KustutaTab(UI, UI->PraeguneTab); SulgeTab(UI, UI->PraeguneTab);
if(UI->TabidN == 0) if(UI->TabidN == 0)
{ {
gtk_widget_set_sensitive(UI->FailMenuAva, FALSE);
gtk_widget_set_sensitive(UI->FailMenuSalvesta, FALSE); gtk_widget_set_sensitive(UI->FailMenuSalvesta, FALSE);
gtk_widget_set_sensitive(UI->FailMenuSalvestaN, FALSE); gtk_widget_set_sensitive(UI->FailMenuSalvestaN, FALSE);
gtk_widget_set_sensitive(UI->FailMenuSulgeV, FALSE); gtk_widget_set_sensitive(UI->FailMenuSulgeV, FALSE);
......
...@@ -87,6 +87,8 @@ void UuendaTabiPealkirja(tab *Tab, char *Nimi) ...@@ -87,6 +87,8 @@ void UuendaTabiPealkirja(tab *Tab, char *Nimi)
char *Tekst = g_path_get_basename(Nimi); // Eralda faili nimi char *Tekst = 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), Tekst);
g_free(Tekst); g_free(Tekst);
// Terve faili nimi tooltip'is
gtk_widget_set_tooltip_text(Tab->Pealkiri, Nimi);
} }
// Kutsutakse igal vahekaardi muutmisel // Kutsutakse igal vahekaardi muutmisel
...@@ -95,3 +97,34 @@ void TabMuudetud(GtkWidget *Notebook, GtkWidget *Tab, guint Indeks, gpointer Dat ...@@ -95,3 +97,34 @@ void TabMuudetud(GtkWidget *Notebook, GtkWidget *Tab, guint Indeks, gpointer Dat
ui *UI = (ui *)Data; ui *UI = (ui *)Data;
UI->PraeguneTab = Indeks; UI->PraeguneTab = Indeks;
} }
// Sulge praegune vahekaart, väljastab 1, kui vahekaart suleti, 0 kui mitte
int SulgeTab(ui *UI, int Indeks)
{
tab *Tab = &UI->Tabid[Indeks];
// Kui tekst on muudetud, siis küsi üle, kas salvestada
if(gtk_text_buffer_get_modified(Tab->Puhver))
{
GtkWidget *MsgDialog = gtk_message_dialog_new(UI->Aken, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
"Salvesta fail enne sulgemist?");
gtk_dialog_add_buttons(MsgDialog, "Jah", 0, "Ei", 1, "Loobu", 2, NULL);
gint Vastus = gtk_dialog_run(GTK_DIALOG(MsgDialog));
gtk_widget_destroy(MsgDialog);
if(Vastus == 0) // Jah
{
// Kui fail salvestati, siis jätka, muidu ära tee midagi
if(SalvestaFail(UI, Tab)) {}
else return 0;
}
else if(Vastus == 1) {} // Ei
else return 0;
}
KustutaTab(UI, Indeks);
return 1;
}
...@@ -9,5 +9,6 @@ void LisaTab(ui *UI); ...@@ -9,5 +9,6 @@ void LisaTab(ui *UI);
void KustutaTab(ui *UI, int Indeks); void KustutaTab(ui *UI, int Indeks);
void UuendaTabiPealkirja(tab *Tab, char *Nimi); void UuendaTabiPealkirja(tab *Tab, char *Nimi);
void TabMuudetud(GtkWidget *Notebook, GtkWidget *Tab, guint Indeks, gpointer Data); void TabMuudetud(GtkWidget *Notebook, GtkWidget *Tab, guint Indeks, gpointer Data);
int SulgeTab(ui *UI, int Indeks);
#endif // TAB_H #endif // TAB_H
#include "ui.h" #include "ui.h"
// Sulge programm, tagastab 1 kui kõik vahekaardid sulgeti, 0 kui mitte
int Sulge(ui *UI)
{
for(int i = UI->TabidN - 1; i > -1; i--)
{
gtk_notebook_set_current_page(UI->Notebook, i);
if(SulgeTab(UI, i))
{
continue;
}
else
{
gtk_notebook_set_current_page(UI->Notebook, UI->PraeguneTab);
return 0;
}
}
return 1;
}
gboolean SulgeAken(GtkWidget *Nupp, GdkEvent *Event, gpointer Data)
{
ui *UI = (ui *)Data;
if(Sulge(UI))
{
gtk_main_quit();
return FALSE;
} else return TRUE;
}
// Väljub rakendusest
void Valju(GtkWidget *Nupp, gpointer Data)
{
ui *UI = (ui *)Data;
if(Sulge(UI)) gtk_main_quit();;
}
// Loo programmi kasutajaliides // Loo programmi kasutajaliides
ui *LooUI() ui *LooUI()
{ {
...@@ -10,7 +48,7 @@ ui *LooUI() ...@@ -10,7 +48,7 @@ ui *LooUI()
gtk_window_set_position(GTK_WINDOW(UI->Aken), GTK_WIN_POS_CENTER); // Aken ekraani keskel gtk_window_set_position(GTK_WINDOW(UI->Aken), GTK_WIN_POS_CENTER); // Aken ekraani keskel
gtk_window_set_default_size(GTK_WINDOW(UI->Aken), 800, 600); // Akna suurus gtk_window_set_default_size(GTK_WINDOW(UI->Aken), 800, 600); // Akna suurus
gtk_window_set_title(GTK_WINDOW(UI->Aken), PEALKIRI); // Pealkiri gtk_window_set_title(GTK_WINDOW(UI->Aken), PEALKIRI); // Pealkiri
g_signal_connect_swapped(G_OBJECT(UI->Aken), "destroy", G_CALLBACK(gtk_main_quit), NULL); // Close nupu callback g_signal_connect(UI->Aken, "delete-event", G_CALLBACK(SulgeAken), UI); // Close nupu callback
// Box // Box
UI->Box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); // Vertikaalne box, 0px vahe UI->Box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); // Vertikaalne box, 0px vahe
...@@ -30,8 +68,9 @@ ui *LooUI() ...@@ -30,8 +68,9 @@ ui *LooUI()
GtkWidget *FailMenuNupp = gtk_menu_item_new_with_label("Fail"); // Fail GtkWidget *FailMenuNupp = gtk_menu_item_new_with_label("Fail"); // Fail
GtkWidget *AboutMenuNupp = gtk_menu_item_new_with_label("About"); // About GtkWidget *AboutMenuNupp = gtk_menu_item_new_with_label("About"); // About
GtkWidget *FailMenu = gtk_menu_new(); // Fail menüü GtkWidget *FailMenu = gtk_menu_new(); // Fail menüü
GtkWidget *FailMenuUus = gtk_menu_item_new_with_label("Uus"); // Fail->Uus GtkWidget *FailMenuUus = gtk_menu_item_new_with_label("Uus vahekaart"); // Fail->Uus vahekaart
GtkWidget *FailMenuAva = gtk_menu_item_new_with_label("Ava"); // Fail->Ava GtkWidget *FailMenuAva = gtk_menu_item_new_with_label("Ava"); // Fail->Ava
UI->FailMenuAva = FailMenuAva;
GtkWidget *FailMenuSalvesta = gtk_menu_item_new_with_label("Salvesta"); // Fail->Salvesta GtkWidget *FailMenuSalvesta = gtk_menu_item_new_with_label("Salvesta"); // Fail->Salvesta
UI->FailMenuSalvesta = FailMenuSalvesta; UI->FailMenuSalvesta = FailMenuSalvesta;
GtkWidget *FailMenuSalvestaN = gtk_menu_item_new_with_label("Salvesta nimega"); // Fail->Salvesta nimega GtkWidget *FailMenuSalvestaN = gtk_menu_item_new_with_label("Salvesta nimega"); // Fail->Salvesta nimega
...@@ -45,8 +84,9 @@ ui *LooUI() ...@@ -45,8 +84,9 @@ ui *LooUI()
// Menüüd nuppudesse // Menüüd nuppudesse
gtk_menu_item_set_submenu(GTK_MENU_ITEM(FailMenuNupp), FailMenu); gtk_menu_item_set_submenu(GTK_MENU_ITEM(FailMenuNupp), FailMenu);
// Fail menüü // Fail menüü
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuUus); // Fail->Uus gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuUus); // Fail->Uus vahekaart
g_signal_connect(FailMenuUus, "activate", G_CALLBACK(Uus), UI); g_signal_connect(FailMenuUus, "activate", G_CALLBACK(Uus), UI);
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), gtk_separator_menu_item_new());
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuAva); // Fail->Ava gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuAva); // Fail->Ava
g_signal_connect(FailMenuAva, "activate", G_CALLBACK(Ava), UI); g_signal_connect(FailMenuAva, "activate", G_CALLBACK(Ava), UI);
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuSalvesta); // Fail->Salvesta gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuSalvesta); // Fail->Salvesta
...@@ -58,7 +98,7 @@ ui *LooUI() ...@@ -58,7 +98,7 @@ ui *LooUI()
g_signal_connect(FailMenuSulgeV, "activate", G_CALLBACK(SulgeVahekaart), UI); g_signal_connect(FailMenuSulgeV, "activate", G_CALLBACK(SulgeVahekaart), UI);
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), gtk_separator_menu_item_new()); gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), gtk_separator_menu_item_new());
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuValju); // Fail->Välju gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuValju); // Fail->Välju
g_signal_connect(FailMenuValju, "activate", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(FailMenuValju, "activate", G_CALLBACK(Valju), UI);
// Pane kõik õiges järjekorras box'i // Pane kõik õiges järjekorras box'i
gtk_box_pack_start(GTK_BOX(UI->Box), UI->MenuBar, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(UI->Box), UI->MenuBar, FALSE, FALSE, 0);
......
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