Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
karudu
/
C-editor
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Pipelines
Snippets
Members
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
43e3d3dd
authored
Mar 31, 2022
by
Herman Ounas
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'Karl' into Herman
parents
607fda03
3879d569
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
615 additions
and
427 deletions
ceditor.c
ceditor.h
compiler.c
compiler.h
menubar.c
statusbar.c
tab.c
textview.c
textview.h
ui.c
ui.h
ceditor.c
View file @
43e3d3dd
#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
);
ui
*
UI
=
LooUI
();
ui
*
UI
=
LooUI
();
gtk_widget_show_all
(
UI
->
Aken
);
// Näita akent
gtk_widget_show_all
(
UI
->
Aken
);
// Näita akent
gtk_main
();
gtk_main
();
return
0
;
return
0
;
}
}
ceditor.h
View file @
43e3d3dd
...
@@ -4,44 +4,50 @@
...
@@ -4,44 +4,50 @@
#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
GtkWidget
*
Pealkiri
;
// Vahekaardi pealkiri
GtkWidget
*
Pealkiri
;
// Vahekaardi pealkiri
GtkWidget
*
Box
;
// Vahekaardi box
char
*
PealkiriTekst
;
// Originaalne pealkirja tekst
GtkWidget
*
TextView
;
// Vahekaardi tekstiaken
GtkWidget
*
Box
;
// Vahekaardi box
GtkTextView
*
Puhver
;
// Vahekaardi tekstipuhver
GtkWidget
*
TextView
;
// Vahekaardi tekstiaken
GtkWidget
*
ScrollWindow
;
// Tekstiakna scroll
GtkTextView
*
Puhver
;
// Vahekaardi tekstipuhver
GtkWidget
*
StatusBar
;
// Status bar
GtkWidget
*
ScrollWindow
;
// Tekstiakna scroll
GtkWidget
*
StatusBar
;
// Status bar
GtkSourceLanguageManager
*
LangManager
;
GtkSourceLanguage
*
Language
;
}
tab
;
}
tab
;
typedef
struct
typedef
struct
{
{
GtkWidget
*
Aken
;
// Programmi aken
GtkWidget
*
Aken
;
// Programmi aken
GtkWidget
*
Box
;
// Akna box
GtkWidget
*
Box
;
// Akna box
GtkWidget
*
MenuBar
;
// Ülaosa menüü
GtkWidget
*
MenuBar
;
// Ülaosa menüü
GtkWidget
*
Notebook
;
// Notebook vahekaartidega
GtkWidget
*
Notebook
;
// Notebook vahekaartidega
GtkWidget
*
ToolBar
;
//Tool bar
GtkWidget
*
ToolBar
;
//Tool bar
GtkWidget
*
AccelGroup
;
// Accel group nuppude jaoks
// Viited nuppudele nende sisse/välja lülitamiseks
GtkWidget
*
FailMenuAva
;
// Viited nuppudele nende sisse/välja lülitamiseks
GtkWidget
*
FailMenuSalvesta
;
GtkWidget
*
FailMenuAva
;
GtkWidget
*
FailMenuSalvestaN
;
GtkWidget
*
FailMenuSalvesta
;
GtkWidget
*
FailMenuSulgeV
;
GtkWidget
*
FailMenuSalvestaN
;
GtkWidget
*
FailMenuSulgeV
;
tab
*
Tabid
;
// Vahekaartide massiiv
int
PraeguneTab
;
// Praegune valitud vahekaart
tab
*
Tabid
;
// Vahekaartide massiiv
int
TabidN
;
// Mitu vahekaarti on avatud
int
PraeguneTab
;
// Praegune valitud vahekaart
int
TabidN
;
// Mitu vahekaarti on avatud
//toolbari nupud
GtkToolItem
*
Undo
;
//undo nupp
//toolbari nupud
GtkToolItem
*
Redo
;
//redo nupp
GtkToolItem
*
Undo
;
//undo nupp
GtkToolItem
*
Redo
;
//redo nupp
GKeyFile
*
Seaded
;
// Seadete fail
char
*
SeadedNimi
;
// Seadete faili nimi
}
ui
;
}
ui
;
#endif // CEDITOR_H
#endif // CEDITOR_H
compiler.c
0 → 100644
View file @
43e3d3dd
#include "compiler.h"
// Salvesta kompilaatori seaded ja sulge aken
void
SalvestaSeaded
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
puhvrid
*
Puhvrid
=
(
puhvrid
*
)
Data
;
g_key_file_set_string
(
Puhvrid
->
Seaded
,
"Kompilaator"
,
"nimi"
,
gtk_entry_buffer_get_text
(
Puhvrid
->
PuhverNimi
));
g_key_file_set_string
(
Puhvrid
->
Seaded
,
"Kompilaator"
,
"seaded"
,
gtk_entry_buffer_get_text
(
Puhvrid
->
PuhverSeaded
));
g_key_file_set_string
(
Puhvrid
->
Seaded
,
"Kompilaator"
,
"asukoht"
,
gtk_entry_buffer_get_text
(
Puhvrid
->
PuhverAsukoht
));
g_key_file_save_to_file
(
Puhvrid
->
Seaded
,
Puhvrid
->
SeadedNimi
,
0
);
gtk_widget_destroy
(
GTK_WIDGET
(
Puhvrid
->
Aken
));
g_free
(
Puhvrid
);
}
// Sulge aken
void
SulgeSeaded
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
puhvrid
*
Puhvrid
=
(
puhvrid
*
)
Data
;
gtk_widget_destroy
(
GTK_WIDGET
(
Puhvrid
->
Aken
));
g_free
(
Puhvrid
);
}
// Kompilaatori seadete aken
void
KompilaatoriSeaded
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
ui
*
UI
=
(
ui
*
)
Data
;
GtkWindow
*
Aken
=
gtk_window_new
(
GTK_WINDOW_TOPLEVEL
);
gtk_window_set_default_size
(
Aken
,
400
,
180
);
// Akna suurus
gtk_window_set_title
(
Aken
,
"Kompilaatori seaded"
);
// Pealkiri
gtk_window_set_type_hint
(
Aken
,
GDK_WINDOW_TYPE_HINT_DIALOG
);
GtkBox
*
Box
=
gtk_box_new
(
GTK_ORIENTATION_VERTICAL
,
0
);
gtk_container_add
(
GTK_CONTAINER
(
Aken
),
Box
);
// Pane box aknasse
GtkBox
*
HBox1
=
gtk_box_new
(
GTK_ORIENTATION_HORIZONTAL
,
8
);
GtkBox
*
HBox2
=
gtk_box_new
(
GTK_ORIENTATION_HORIZONTAL
,
8
);
GtkBox
*
HBox3
=
gtk_box_new
(
GTK_ORIENTATION_HORIZONTAL
,
8
);
GtkBox
*
HBox4
=
gtk_box_new
(
GTK_ORIENTATION_HORIZONTAL
,
8
);
GtkLabel
*
LabelNimi
=
gtk_label_new
(
"Nimi"
);
GtkLabel
*
LabelSeaded
=
gtk_label_new
(
"Seaded"
);
GtkLabel
*
LabelAsukoht
=
gtk_label_new
(
"Asukoht"
);
GtkEntry
*
EntryNimi
=
gtk_entry_new
();
gtk_entry_set_width_chars
(
EntryNimi
,
40
);
GtkEntry
*
EntrySeaded
=
gtk_entry_new
();
gtk_entry_set_width_chars
(
EntrySeaded
,
40
);
GtkEntry
*
EntryAsukoht
=
gtk_entry_new
();
gtk_entry_set_width_chars
(
EntryAsukoht
,
40
);
GtkEntryBuffer
*
PuhverNimi
=
gtk_entry_get_buffer
(
EntryNimi
);
GtkEntryBuffer
*
PuhverSeaded
=
gtk_entry_get_buffer
(
EntrySeaded
);
GtkEntryBuffer
*
PuhverAsukoht
=
gtk_entry_get_buffer
(
EntryAsukoht
);
gtk_box_pack_start
(
HBox1
,
GTK_WIDGET
(
LabelNimi
),
FALSE
,
FALSE
,
8
);
gtk_box_pack_start
(
HBox1
,
GTK_WIDGET
(
EntryNimi
),
FALSE
,
FALSE
,
33
);
gtk_box_pack_start
(
HBox2
,
GTK_WIDGET
(
LabelSeaded
),
FALSE
,
FALSE
,
8
);
gtk_box_pack_start
(
HBox2
,
GTK_WIDGET
(
EntrySeaded
),
FALSE
,
FALSE
,
11
);
gtk_box_pack_start
(
HBox3
,
GTK_WIDGET
(
LabelAsukoht
),
FALSE
,
FALSE
,
8
);
gtk_box_pack_start
(
HBox3
,
GTK_WIDGET
(
EntryAsukoht
),
FALSE
,
FALSE
,
4
);
char
*
Nimi
=
g_key_file_get_string
(
UI
->
Seaded
,
"Kompilaator"
,
"nimi"
,
NULL
);
if
(
Nimi
)
gtk_entry_buffer_set_text
(
PuhverNimi
,
Nimi
,
-
1
);
char
*
Seaded
=
g_key_file_get_string
(
UI
->
Seaded
,
"Kompilaator"
,
"seaded"
,
NULL
);
if
(
Seaded
)
gtk_entry_buffer_set_text
(
PuhverSeaded
,
Seaded
,
-
1
);
char
*
Asukoht
=
g_key_file_get_string
(
UI
->
Seaded
,
"Kompilaator"
,
"asukoht"
,
NULL
);
if
(
Asukoht
)
gtk_entry_buffer_set_text
(
PuhverAsukoht
,
Asukoht
,
-
1
);
puhvrid
*
Puhvrid
=
malloc
(
sizeof
(
puhvrid
));
Puhvrid
->
Aken
=
Aken
;
Puhvrid
->
Seaded
=
UI
->
Seaded
;
Puhvrid
->
SeadedNimi
=
UI
->
SeadedNimi
;
Puhvrid
->
PuhverNimi
=
PuhverNimi
;
Puhvrid
->
PuhverSeaded
=
PuhverSeaded
;
Puhvrid
->
PuhverAsukoht
=
PuhverAsukoht
;
GtkButton
*
NuppSalvesta
=
gtk_button_new_with_label
(
"Salvesta"
);
GtkButton
*
NuppValju
=
gtk_button_new_with_label
(
"Välju"
);
g_signal_connect
(
NuppSalvesta
,
"clicked"
,
G_CALLBACK
(
SalvestaSeaded
),
Puhvrid
);
g_signal_connect
(
NuppValju
,
"clicked"
,
G_CALLBACK
(
SulgeSeaded
),
Puhvrid
);
gtk_box_pack_start
(
HBox4
,
GTK_WIDGET
(
NuppSalvesta
),
FALSE
,
FALSE
,
100
);
gtk_box_pack_start
(
HBox4
,
GTK_WIDGET
(
NuppValju
),
FALSE
,
FALSE
,
8
);
gtk_box_pack_start
(
Box
,
GTK_WIDGET
(
HBox1
),
FALSE
,
FALSE
,
4
);
gtk_box_pack_start
(
Box
,
GTK_WIDGET
(
HBox2
),
FALSE
,
FALSE
,
4
);
gtk_box_pack_start
(
Box
,
GTK_WIDGET
(
HBox3
),
FALSE
,
FALSE
,
4
);
gtk_box_pack_start
(
Box
,
GTK_WIDGET
(
HBox4
),
FALSE
,
FALSE
,
8
);
gtk_widget_show_all
(
Aken
);
}
compiler.h
0 → 100644
View file @
43e3d3dd
#ifndef COMPILER_H
#define COMPILER_H
#include "ceditor.h"
typedef
struct
{
GtkWindow
*
Aken
;
GKeyFile
*
Seaded
;
char
*
SeadedNimi
;
GtkEntryBuffer
*
PuhverNimi
;
GtkEntryBuffer
*
PuhverSeaded
;
GtkEntryBuffer
*
PuhverAsukoht
;
}
puhvrid
;
void
KompilaatoriSeaded
(
GtkWidget
*
Nupp
,
gpointer
Data
);
#endif // COMPILER_H
menubar.c
View file @
43e3d3dd
...
@@ -3,200 +3,205 @@
...
@@ -3,200 +3,205 @@
// Loob uue vahekaardi
// Loob uue vahekaardi
void
Uus
(
GtkWidget
*
Nupp
,
gpointer
Data
)
void
Uus
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
{
ui
*
UI
=
(
ui
*
)
Data
;
ui
*
UI
=
(
ui
*
)
Data
;
// Loo uus vahekaart
// Loo uus vahekaart
LisaTab
(
UI
);
LisaTab
(
UI
);
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
TabidN
-
1
];
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
TabidN
-
1
];
Tab
->
FailiNimi
=
0
;
Tab
->
FailiNimi
=
0
;
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
->
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
);
}
}
// Avab faili ja loeb selle teksti vahekaarti
// Avab faili ja loeb selle teksti vahekaarti
void
Ava
(
GtkWidget
*
Nupp
,
gpointer
Data
)
void
Ava
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
{
ui
*
UI
=
(
ui
*
)
Data
;
ui
*
UI
=
(
ui
*
)
Data
;
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
PraeguneTab
];
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
PraeguneTab
];
GtkTextBuffer
*
Puhver
=
Tab
->
Puhver
;
GtkTextBuffer
*
Puhver
=
Tab
->
Puhver
;
GtkWidget
*
Dialog
=
gtk_file_chooser_dialog_new
(
"Ava fail"
,
NULL
,
GTK_FILE_CHOOSER_ACTION_OPEN
,
GtkWidget
*
Dialog
=
gtk_file_chooser_dialog_new
(
"Ava fail"
,
NULL
,
GTK_FILE_CHOOSER_ACTION_OPEN
,
"Tühista"
,
GTK_RESPONSE_CANCEL
,
"Tühista"
,
GTK_RESPONSE_CANCEL
,
"Ava"
,
GTK_RESPONSE_ACCEPT
,
NULL
);
"Ava"
,
GTK_RESPONSE_ACCEPT
,
NULL
);
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
// Ava, kui vajutati accept
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
// Ava, kui vajutati accept
{
{
char
*
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
char
*
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
gchar
*
Sisu
;
gchar
*
Sisu
;
GError
*
Viga
=
NULL
;
GError
*
Viga
=
NULL
;
// TODO paremad veateated
// TODO paremad veateated
if
(
g_file_get_contents
(
Nimi
,
&
Sisu
,
NULL
,
&
Viga
))
// Proovi faili sisu lugeda
if
(
g_file_get_contents
(
Nimi
,
&
Sisu
,
NULL
,
&
Viga
))
// Proovi faili sisu lugeda
{
{
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
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
printf
(
"g_utf8_validate viga
\n
"
);
{
g_free
(
Nimi
);
printf
(
"g_utf8_validate viga
\n
"
);
}
g_free
(
Nimi
);
g_free
(
Sisu
);
}
}
g_free
(
Sisu
);
else
}
{
else
// Faili ei saanud lugeda
{
printf
(
"Viga faili avamisel: %s
\n
"
,
Viga
->
message
);
// Faili ei saanud lugeda
g_error_free
(
Viga
);
printf
(
"Viga faili avamisel: %s
\n
"
,
Viga
->
message
);
g_free
(
Nimi
);
g_error_free
(
Viga
);
}
g_free
(
Nimi
);
}
}
gtk_widget_destroy
(
Dialog
);
}
gtk_widget_destroy
(
Dialog
);
}
}
// Salvesta fail, tagastab 1 kui edukas
// Salvesta fail, tagastab 1 kui edukas
int
SalvestaFail
(
ui
*
UI
,
tab
*
Tab
)
int
SalvestaFail
(
ui
*
UI
,
tab
*
Tab
)
{
{
GtkTextBuffer
*
Puhver
=
Tab
->
Puhver
;
GtkTextBuffer
*
Puhver
=
Tab
->
Puhver
;
char
*
Nimi
;
char
*
Nimi
;
GtkWidget
*
Dialog
=
0
;
GtkWidget
*
Dialog
=
0
;
if
(
Tab
->
FailiNimi
)
// Fail on juba olemas
if
(
Tab
->
FailiNimi
)
// Fail on juba olemas
{
{
Nimi
=
Tab
->
FailiNimi
;
if
(
gtk_text_buffer_get_modified
(
Puhver
)
==
0
)
return
;
// Ära salvesta, kui midagi pole muudetud
}
Nimi
=
Tab
->
FailiNimi
;
else
// Salvestame uue faili
}
{
else
// Salvestame uue faili
Dialog
=
gtk_file_chooser_dialog_new
(
"Salvesta fail"
,
NULL
,
GTK_FILE_CHOOSER_ACTION_SAVE
,
{
"Tühista"
,
GTK_RESPONSE_CANCEL
,
Dialog
=
gtk_file_chooser_dialog_new
(
"Salvesta fail"
,
NULL
,
GTK_FILE_CHOOSER_ACTION_SAVE
,
"Salvesta"
,
GTK_RESPONSE_ACCEPT
,
NULL
);
"Tühista"
,
GTK_RESPONSE_CANCEL
,
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
"Salvesta"
,
GTK_RESPONSE_ACCEPT
,
NULL
);
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
{
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
{
}
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
else
}
{
else
gtk_widget_destroy
(
Dialog
);
{
return
0
;
gtk_widget_destroy
(
Dialog
);
}
return
0
;
}
}
}
GtkTextIter
TekstA
,
TekstL
;
gtk_text_buffer_get_start_iter
(
Puhver
,
&
TekstA
);
GtkTextIter
TekstA
,
TekstL
;
gtk_text_buffer_get_end_iter
(
Puhver
,
&
TekstL
);
gtk_text_buffer_get_start_iter
(
Puhver
,
&
TekstA
);
gchar
*
Sisu
=
gtk_text_buffer_get_text
(
Puhver
,
&
TekstA
,
&
TekstL
,
TRUE
);
gtk_text_buffer_get_end_iter
(
Puhver
,
&
TekstL
);
gchar
*
Sisu
=
gtk_text_buffer_get_text
(
Puhver
,
&
TekstA
,
&
TekstL
,
TRUE
);
GError
*
Viga
=
NULL
;
if
(
g_file_set_contents
(
Nimi
,
Sisu
,
-
1
,
&
Viga
)
==
TRUE
)
GError
*
Viga
=
NULL
;
{
if
(
g_file_set_contents
(
Nimi
,
Sisu
,
-
1
,
&
Viga
)
==
TRUE
)
gtk_text_buffer_set_modified
(
Tab
->
Puhver
,
FALSE
);
// Tekst on muutmata
{
gtk_text_buffer_set_modified
(
Tab
->
Puhver
,
FALSE
);
// Tekst on muutmata
// Kui enne salvestamist failinime polńud, siis kasuta praegust
if
(
!
Tab
->
FailiNimi
)
// Kui enne salvestamist failinime polńud, siis kasuta praegust
{
if
(
!
Tab
->
FailiNimi
)
Tab
->
FailiNimi
=
Nimi
;
{
UuendaTabiPealkirja
(
Tab
,
Nimi
);
Tab
->
FailiNimi
=
Nimi
;
}
UuendaTabiPealkirja
(
Tab
,
Nimi
);
else
g_free
(
Nimi
);
}
g_free
(
Sisu
);
if
(
Dialog
)
gtk_widget_destroy
(
Dialog
);
UuendaTabMuudetud
(
Tab
);
return
1
;
g_free
(
Sisu
);
}
if
(
Dialog
)
gtk_widget_destroy
(
Dialog
);
else
{
return
1
;
printf
(
"Viga faili salvestamisel: %s
\n
"
,
Viga
->
message
);
}
g_error_free
(
Viga
);
else
g_free
(
Nimi
);
{
g_free
(
Sisu
);
printf
(
"Viga faili salvestamisel: %s
\n
"
,
Viga
->
message
);
if
(
Dialog
)
gtk_widget_destroy
(
Dialog
);
g_error_free
(
Viga
);
g_free
(
Nimi
);
return
0
;
g_free
(
Sisu
);
}
if
(
Dialog
)
gtk_widget_destroy
(
Dialog
);
return
0
;
}
}
}
// Salvestab vahekaardi teksti praegusesse faili
// Salvestab vahekaardi teksti praegusesse faili
void
Salvesta
(
GtkWidget
*
Nupp
,
gpointer
Data
)
void
Salvesta
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
{
ui
*
UI
=
(
ui
*
)
Data
;
ui
*
UI
=
(
ui
*
)
Data
;
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
PraeguneTab
];
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
PraeguneTab
];
SalvestaFail
(
UI
,
Tab
);
SalvestaFail
(
UI
,
Tab
);
}
}
// Salvestab vahekaardi teksti vabalt valitud faili
// Salvestab vahekaardi teksti vabalt valitud faili
void
SalvestaNimega
(
GtkWidget
*
Nupp
,
gpointer
Data
)
void
SalvestaNimega
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
{
ui
*
UI
=
(
ui
*
)
Data
;
ui
*
UI
=
(
ui
*
)
Data
;
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
PraeguneTab
];
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
PraeguneTab
];
GtkTextBuffer
*
Puhver
=
Tab
->
Puhver
;
GtkTextBuffer
*
Puhver
=
Tab
->
Puhver
;
GtkWidget
*
Dialog
=
gtk_file_chooser_dialog_new
(
"Salvesta fail"
,
NULL
,
GTK_FILE_CHOOSER_ACTION_SAVE
,
GtkWidget
*
Dialog
=
gtk_file_chooser_dialog_new
(
"Salvesta fail"
,
NULL
,
GTK_FILE_CHOOSER_ACTION_SAVE
,
"Tühista"
,
GTK_RESPONSE_CANCEL
,
"Tühista"
,
GTK_RESPONSE_CANCEL
,
"Salvesta"
,
GTK_RESPONSE_ACCEPT
,
NULL
);
"Salvesta"
,
GTK_RESPONSE_ACCEPT
,
NULL
);
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
{
{
char
*
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
char
*
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
GtkTextIter
TekstA
,
TekstL
;
GtkTextIter
TekstA
,
TekstL
;
gtk_text_buffer_get_start_iter
(
Puhver
,
&
TekstA
);
gtk_text_buffer_get_start_iter
(
Puhver
,
&
TekstA
);
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
);
gtk_text_buffer_set_modified
(
Puhver
,
FALSE
);
GError
*
Viga
=
NULL
;
GError
*
Viga
=
NULL
;
if
(
g_file_set_contents
(
Nimi
,
Sisu
,
-
1
,
&
Viga
)
==
TRUE
)
if
(
g_file_set_contents
(
Nimi
,
Sisu
,
-
1
,
&
Viga
)
==
TRUE
)
{
{
if
(
g_strcmp0
(
Nimi
,
Tab
->
FailiNimi
)
==
0
)
if
(
g_strcmp0
(
Nimi
,
Tab
->
FailiNimi
)
==
0
)
{
{
printf
(
"Sama fail
\n
"
);
printf
(
"Sama fail
\n
"
);
}
}
// Kui enne salvestamist failinime polńud, siis kasuta praegust
// Kui enne salvestamist failinime polńud, siis kasuta praegust
if
(
!
Tab
->
FailiNimi
)
if
(
!
Tab
->
FailiNimi
)
{
{
Tab
->
FailiNimi
=
Nimi
;
Tab
->
FailiNimi
=
Nimi
;
UuendaTabiPealkirja
(
Tab
,
Nimi
);
UuendaTabiPealkirja
(
Tab
,
Nimi
);
}
}
else
g_free
(
Nimi
);
}
UuendaTabMuudetud
(
Tab
);
else
}
{
else
printf
(
"Viga faili salvestamisel: %s
\n
"
,
Viga
->
message
);
{
g_error_free
(
Viga
);
printf
(
"Viga faili salvestamisel: %s
\n
"
,
Viga
->
message
);
g_free
(
Nimi
);
g_error_free
(
Viga
);
}
g_free
(
Nimi
);
}
g_free
(
Sisu
);
}
g_free
(
Sisu
);
}
gtk_widget_destroy
(
Dialog
);
gtk_widget_destroy
(
Dialog
);
}
}
// Sulgeb praeguse vahekaardi
// Sulgeb praeguse vahekaardi
void
SulgeVahekaart
(
GtkWidget
*
Nupp
,
gpointer
Data
)
void
SulgeVahekaart
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
{
ui
*
UI
=
(
ui
*
)
Data
;
ui
*
UI
=
(
ui
*
)
Data
;
SulgeTab
(
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
->
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
);
}
}
}
}
statusbar.c
View file @
43e3d3dd
...
@@ -3,16 +3,16 @@
...
@@ -3,16 +3,16 @@
// Uuenda näidatud rida ja veergu kursori asukoha järgi
// Uuenda näidatud rida ja veergu kursori asukoha järgi
void
UuendaRidaVeerg
(
GtkTextBuffer
*
Puhver
,
GtkStatusbar
*
StatusBar
)
void
UuendaRidaVeerg
(
GtkTextBuffer
*
Puhver
,
GtkStatusbar
*
StatusBar
)
{
{
GtkTextIter
Iter
;
GtkTextIter
Iter
;
// Leia kursori asukoht
// Leia kursori asukoht
gtk_text_buffer_get_iter_at_mark
(
Puhver
,
&
Iter
,
gtk_text_buffer_get_insert
(
Puhver
));
gtk_text_buffer_get_iter_at_mark
(
Puhver
,
&
Iter
,
gtk_text_buffer_get_insert
(
Puhver
));
// Võta selle rida ja veerg
// Võta selle rida ja veerg
gint
Rida
=
gtk_text_iter_get_line
(
&
Iter
);
gint
Rida
=
gtk_text_iter_get_line
(
&
Iter
);
gint
Veerg
=
gtk_text_iter_get_line_offset
(
&
Iter
);
gint
Veerg
=
gtk_text_iter_get_line_offset
(
&
Iter
);
gtk_statusbar_pop
(
StatusBar
,
0
);
// Võta eelmine tekst ära
gtk_statusbar_pop
(
StatusBar
,
0
);
// Võta eelmine tekst ära
gchar
*
Tekst
=
g_strdup_printf
(
"%d:%d"
,
Rida
+
1
,
Veerg
+
1
);
// Loo string rea ja veeruga
gchar
*
Tekst
=
g_strdup_printf
(
"%d:%d"
,
Rida
+
1
,
Veerg
+
1
);
// Loo string rea ja veeruga
gtk_statusbar_push
(
StatusBar
,
0
,
Tekst
);
// Näita teksti
gtk_statusbar_push
(
StatusBar
,
0
,
Tekst
);
// Näita teksti
g_free
(
Tekst
);
g_free
(
Tekst
);
}
}
tab.c
View file @
43e3d3dd
...
@@ -3,128 +3,146 @@
...
@@ -3,128 +3,146 @@
// Loo uus vahekaart ja pane see lõppu
// Loo uus vahekaart ja pane see lõppu
void
LisaTab
(
ui
*
UI
)
void
LisaTab
(
ui
*
UI
)
{
{
int
TabidN
=
UI
->
TabidN
;
int
TabidN
=
UI
->
TabidN
;
if
(
TabidN
==
0
)
if
(
TabidN
==
0
)
{
{
UI
->
Tabid
=
g_malloc
(
sizeof
(
tab
));
// Loo massiiv, kui see pole olemas
UI
->
Tabid
=
g_malloc
(
sizeof
(
tab
));
// Loo massiiv, kui see pole olemas
}
}
else
else
{
{
UI
->
Tabid
=
g_realloc
(
UI
->
Tabid
,
sizeof
(
tab
)
*
(
TabidN
+
1
));
// Lisa vahekaart massiivi
UI
->
Tabid
=
g_realloc
(
UI
->
Tabid
,
sizeof
(
tab
)
*
(
TabidN
+
1
));
// Lisa vahekaart massiivi
}
}
tab
*
Tab
=
&
UI
->
Tabid
[
TabidN
];
tab
*
Tab
=
&
UI
->
Tabid
[
TabidN
];
UI
->
TabidN
++
;
UI
->
TabidN
++
;
Tab
->
FailiNimi
=
0
;
// Faili veel pole
Tab
->
FailiNimi
=
0
;
// Faili veel pole
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
Tab
->
Puhver
=
gtk_text_view_get_buffer
(
GTK_TEXT_VIEW
(
Tab
->
TextView
));
// Tekstiakna teksti puhver
#else
Tab
->
OnMuudetud
=
0
;
Tab
->
TextView
=
gtk_text_view_new
();
// Loo tekstiaken
#endif
// Scroll window
Tab
->
Puhver
=
gtk_text_view_get_buffer
(
GTK_TEXT_VIEW
(
Tab
->
TextView
));
// Tekstiakna teksti puhver
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
// Scroll window
gtk_scrolled_window_set_policy
(
GTK_SCROLLED_WINDOW
(
Tab
->
ScrollWindow
),
GTK_POLICY_AUTOMATIC
,
GTK_POLICY_AUTOMATIC
);
// Konfigureerimine
Tab
->
ScrollWindow
=
gtk_scrolled_window_new
(
NULL
,
NULL
);
// Loo scroll aken
gtk_scrolled_window_set_shadow_type
(
GTK_SCROLLED_WINDOW
(
Tab
->
ScrollWindow
),
GTK_SHADOW_ETCHED_IN
);
gtk_container_add
(
GTK_CONTAINER
(
Tab
->
ScrollWindow
),
Tab
->
TextView
);
// Scroll aknasse läheb tekstiaken
// Status bar
gtk_scrolled_window_set_policy
(
GTK_SCROLLED_WINDOW
(
Tab
->
ScrollWindow
),
GTK_POLICY_AUTOMATIC
,
GTK_POLICY_AUTOMATIC
);
// Konfigureerimine
Tab
->
StatusBar
=
gtk_statusbar_new
();
gtk_scrolled_window_set_shadow_type
(
GTK_SCROLLED_WINDOW
(
Tab
->
ScrollWindow
),
GTK_SHADOW_ETCHED_IN
);
// Teksti muutuse callback
// Status bar
g_signal_connect
(
Tab
->
Puhver
,
"changed"
,
G_CALLBACK
(
TekstMuudetud
),
Tab
);
Tab
->
StatusBar
=
gtk_statusbar_new
();
// Modified callback
// Teksti muutuse callback, uuendab rida/veergu
g_signal_connect
(
Tab
->
Puhver
,
"modified-changed"
,
G_CALLBACK
(
TekstModified
),
Tab
);
g_signal_connect
(
Tab
->
Puhver
,
"changed"
,
G_CALLBACK
(
UuendaRidaVeerg
),
Tab
->
StatusBar
);
// 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
);
// Box
// Box
Tab
->
Box
=
gtk_box_new
(
GTK_ORIENTATION_VERTICAL
,
0
);
// Vertikaalne box, 0px vahe
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
->
ScrollWindow
,
TRUE
,
TRUE
,
0
);
gtk_box_pack_start
(
GTK_BOX
(
Tab
->
Box
),
Tab
->
StatusBar
,
FALSE
,
FALSE
,
0
);
gtk_box_pack_start
(
GTK_BOX
(
Tab
->
Box
),
Tab
->
StatusBar
,
FALSE
,
FALSE
,
0
);
// Pealkiri
// Pealkiri
Tab
->
Pealkiri
=
gtk_label_new
(
"(uus)"
);
Tab
->
Pealkiri
=
gtk_label_new
(
"(uus)"
);
Tab
->
PealkiriTekst
=
"(uus)"
;
// Lisa loodud tab notebook'i
Tab
->
LangManager
=
gtk_source_language_manager_get_default
();
gtk_notebook_append_page
(
GTK_NOTEBOOK
(
UI
->
Notebook
),
Tab
->
Box
,
Tab
->
Pealkiri
);
Tab
->
Language
=
gtk_source_language_manager_get_language
(
Tab
->
LangManager
,
"c"
);
gtk_widget_show_all
(
UI
->
Notebook
);
// Värskenda, et näha oleks
gtk_source_buffer_set_language
(
Tab
->
Puhver
,
Tab
->
Language
);
UuendaRidaVeerg
(
GTK_TEXT_BUFFER
(
Tab
->
Puhver
),
GTK_STATUSBAR
(
Tab
->
StatusBar
));
// Uuenda status bar'i, et seal midagi oleks
// Lisa loodud tab notebook'i
gtk_notebook_append_page
(
GTK_NOTEBOOK
(
UI
->
Notebook
),
Tab
->
Box
,
Tab
->
Pealkiri
);
gtk_source_view_set_show_line_numbers
(
GTK_SOURCE_VIEW
(
Tab
->
TextView
),
TRUE
);
//naita reanumbrid
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
// Kustuta vahekaarti indeksil
void
KustutaTab
(
ui
*
UI
,
int
Indeks
)
void
KustutaTab
(
ui
*
UI
,
int
Indeks
)
{
{
// Kustuta vahekaart
// Kustuta vahekaart
gtk_notebook_remove_page
(
GTK_NOTEBOOK
(
UI
->
Notebook
),
Indeks
);
gtk_notebook_remove_page
(
GTK_NOTEBOOK
(
UI
->
Notebook
),
Indeks
);
int
TabidN
=
UI
->
TabidN
;
int
TabidN
=
UI
->
TabidN
;
// Kui massiivis on pärast kustutatud vahekaarti neid veel,
// Kui massiivis on pärast kustutatud vahekaarti neid veel,
// siis nihuta need õigele kohale
// siis nihuta need õigele kohale
for
(
int
i
=
Indeks
;
i
<
TabidN
-
1
;
i
++
)
for
(
int
i
=
Indeks
;
i
<
TabidN
-
1
;
i
++
)
{
{
UI
->
Tabid
[
i
]
=
UI
->
Tabid
[
i
+
1
];
UI
->
Tabid
[
i
]
=
UI
->
Tabid
[
i
+
1
];
}
}
if
(
TabidN
==
1
)
if
(
TabidN
==
1
)
{
{
g_free
(
UI
->
Tabid
);
// Vabasta massiiv, kui see on nüüd tühi
g_free
(
UI
->
Tabid
);
// Vabasta massiiv, kui see on nüüd tühi
}
}
else
else
{
{
UI
->
Tabid
=
g_realloc
(
UI
->
Tabid
,
sizeof
(
tab
)
*
(
TabidN
-
1
));
// Eemalda vahekaart massiivist
UI
->
Tabid
=
g_realloc
(
UI
->
Tabid
,
sizeof
(
tab
)
*
(
TabidN
-
1
));
// Eemalda vahekaart massiivist
}
}
UI
->
TabidN
--
;
UI
->
TabidN
--
;
}
}
// 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
)
{
if
(
gtk_text_buffer_get_modified
(
Tab
->
Puhver
))
{
char
*
Tekst
=
g_strdup_printf
(
"%s *"
,
gtk_label_get_text
(
Tab
->
Pealkiri
));
gtk_label_set_label
(
GTK_LABEL
(
Tab
->
Pealkiri
),
Tekst
);
g_free
(
Tekst
);
}
else
{
gtk_label_set_label
(
GTK_LABEL
(
Tab
->
Pealkiri
),
Tab
->
PealkiriTekst
);
}
}
}
// 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
)
{
{
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
// Sulge praegune vahekaart, väljastab 1, kui vahekaart suleti, 0 kui mitte
int
SulgeTab
(
ui
*
UI
,
int
Indeks
)
int
SulgeTab
(
ui
*
UI
,
int
Indeks
)
{
{
tab
*
Tab
=
&
UI
->
Tabid
[
Indeks
];
tab
*
Tab
=
&
UI
->
Tabid
[
Indeks
];
// Kui tekst on muudetud, siis küsi üle, kas salvestada
// Kui tekst on muudetud, siis küsi üle, kas salvestada
if
(
gtk_text_buffer_get_modified
(
Tab
->
Puhver
))
if
(
gtk_text_buffer_get_modified
(
Tab
->
Puhver
))
{
{
GtkWidget
*
MsgDialog
=
gtk_message_dialog_new
(
UI
->
Aken
,
GTK_DIALOG_MODAL
,
GTK_MESSAGE_QUESTION
,
GtkWidget
*
MsgDialog
=
gtk_message_dialog_new
(
UI
->
Aken
,
GTK_DIALOG_MODAL
,
GTK_MESSAGE_QUESTION
,
GTK_BUTTONS_NONE
,
GTK_BUTTONS_NONE
,
"Salvesta fail enne sulgemist?"
);
"Salvesta fail enne sulgemist?"
);
gtk_dialog_add_buttons
(
MsgDialog
,
"Jah"
,
0
,
"Ei"
,
1
,
"Loobu"
,
2
,
NULL
);
gtk_dialog_add_buttons
(
MsgDialog
,
"Jah"
,
0
,
"Ei"
,
1
,
"Loobu"
,
2
,
NULL
);
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
MsgDialog
));
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
MsgDialog
));
gtk_widget_destroy
(
MsgDialog
);
gtk_widget_destroy
(
MsgDialog
);
if
(
Vastus
==
0
)
// Jah
if
(
Vastus
==
0
)
// Jah
{
{
// Kui fail salvestati, siis jätka, muidu ära tee midagi
// Kui fail salvestati, siis jätka, muidu ära tee midagi
if
(
SalvestaFail
(
UI
,
Tab
))
{}
if
(
SalvestaFail
(
UI
,
Tab
))
{}
else
return
0
;
else
return
0
;
}
}
else
if
(
Vastus
==
1
)
{}
// Ei
else
if
(
Vastus
==
1
)
{}
// Ei
else
return
0
;
else
return
0
;
}
}
KustutaTab
(
UI
,
Indeks
);
KustutaTab
(
UI
,
Indeks
);
return
1
;
return
1
;
}
}
textview.c
View file @
43e3d3dd
#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
)
{
{
UuendaRidaVeerg
(
Puhver
,
GTK_STATUSBAR
(
Data
));
UuendaRidaVeerg
(
Puhver
,
GTK_STATUSBAR
(
Data
));
}
}
textview.h
View file @
43e3d3dd
...
@@ -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
ui.c
View file @
43e3d3dd
...
@@ -3,120 +3,162 @@
...
@@ -3,120 +3,162 @@
// Sulge programm, tagastab 1 kui kõik vahekaardid sulgeti, 0 kui mitte
// Sulge programm, tagastab 1 kui kõik vahekaardid sulgeti, 0 kui mitte
int
Sulge
(
ui
*
UI
)
int
Sulge
(
ui
*
UI
)
{
{
for
(
int
i
=
UI
->
TabidN
-
1
;
i
>
-
1
;
i
--
)
for
(
int
i
=
UI
->
TabidN
-
1
;
i
>
-
1
;
i
--
)
{
{
gtk_notebook_set_current_page
(
UI
->
Notebook
,
i
);
gtk_notebook_set_current_page
(
UI
->
Notebook
,
i
);
if
(
SulgeTab
(
UI
,
i
))
if
(
SulgeTab
(
UI
,
i
))
{
{
continue
;
continue
;
}
}
else
else
{
{
gtk_notebook_set_current_page
(
UI
->
Notebook
,
UI
->
PraeguneTab
);
gtk_notebook_set_current_page
(
UI
->
Notebook
,
UI
->
PraeguneTab
);
return
0
;
return
0
;
}
}
}
}
return
1
;
return
1
;
}
}
gboolean
SulgeAken
(
GtkWidget
*
Nupp
,
GdkEvent
*
Event
,
gpointer
Data
)
gboolean
SulgeAken
(
GtkWidget
*
Nupp
,
GdkEvent
*
Event
,
gpointer
Data
)
{
{
ui
*
UI
=
(
ui
*
)
Data
;
ui
*
UI
=
(
ui
*
)
Data
;
if
(
Sulge
(
UI
))
if
(
Sulge
(
UI
))
{
{
gtk_main_quit
();
gtk_main_quit
();
return
FALSE
;
return
FALSE
;
}
else
return
TRUE
;
}
else
return
TRUE
;
}
}
// Väljub rakendusest
// Väljub rakendusest
void
Valju
(
GtkWidget
*
Nupp
,
gpointer
Data
)
void
Valju
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
{
ui
*
UI
=
(
ui
*
)
Data
;
ui
*
UI
=
(
ui
*
)
Data
;
if
(
Sulge
(
UI
))
gtk_main_quit
();;
if
(
Sulge
(
UI
))
gtk_main_quit
();;
}
// Lisa menüüsse menu item
void
LisaMenuItem
(
ui
*
UI
,
GtkWidget
*
Menu
,
GtkWidget
*
MenuItem
,
void
*
Callback
,
guint
Nupp
,
GdkModifierType
NuppMask
)
{
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
Menu
),
MenuItem
);
g_signal_connect
(
MenuItem
,
"activate"
,
G_CALLBACK
(
Callback
),
UI
);
if
(
Nupp
)
gtk_widget_add_accelerator
(
MenuItem
,
"activate"
,
UI
->
AccelGroup
,
Nupp
,
NuppMask
,
GTK_ACCEL_VISIBLE
);
}
}
// Loo programmi kasutajaliides
// Loo programmi kasutajaliides
ui
*
LooUI
()
ui
*
LooUI
()
{
{
ui
*
UI
=
g_malloc
(
sizeof
(
ui
));
ui
*
UI
=
g_malloc
(
sizeof
(
ui
));
// Aken
// Aken
UI
->
Aken
=
gtk_window_new
(
GTK_WINDOW_TOPLEVEL
);
// Loo aken
UI
->
Aken
=
gtk_window_new
(
GTK_WINDOW_TOPLEVEL
);
// Loo aken
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
(
UI
->
Aken
,
"delete-event"
,
G_CALLBACK
(
SulgeAken
),
UI
);
// 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
gtk_container_add
(
GTK_CONTAINER
(
UI
->
Aken
),
UI
->
Box
);
// Pane box aknasse
gtk_container_add
(
GTK_CONTAINER
(
UI
->
Aken
),
UI
->
Box
);
// Pane box aknasse
// Notebook
// Notebook
UI
->
Notebook
=
gtk_notebook_new
();
UI
->
Notebook
=
gtk_notebook_new
();
g_signal_connect
(
UI
->
Notebook
,
"switch-page"
,
G_CALLBACK
(
TabMuudetud
),
UI
);
// Tab'i muutmise callback
g_signal_connect
(
UI
->
Notebook
,
"switch-page"
,
G_CALLBACK
(
TabMuudetud
),
UI
);
// Tab'i muutmise callback
// Loo esimene tab
// Loo esimene tab
UI
->
TabidN
=
0
;
UI
->
TabidN
=
0
;
LisaTab
(
UI
);
LisaTab
(
UI
);
UI
->
PraeguneTab
=
0
;
UI
->
PraeguneTab
=
0
;
// Menu bar
// Accel group
UI
->
MenuBar
=
gtk_menu_bar_new
();
// Loo menu bar
UI
->
AccelGroup
=
gtk_accel_group_new
();
GtkWidget
*
FailMenuNupp
=
gtk_menu_item_new_with_label
(
"Fail"
);
// Fail
gtk_window_add_accel_group
(
UI
->
Aken
,
UI
->
AccelGroup
);
GtkWidget
*
AboutMenuNupp
=
gtk_menu_item_new_with_label
(
"About"
);
// About
GtkWidget
*
FailMenu
=
gtk_menu_new
();
// Fail menüü
// Menu bar
GtkWidget
*
FailMenuUus
=
gtk_menu_item_new_with_label
(
"Uus vahekaart"
);
// Fail->Uus vahekaart
UI
->
MenuBar
=
gtk_menu_bar_new
();
// Loo menu bar
GtkWidget
*
FailMenuAva
=
gtk_menu_item_new_with_label
(
"Ava"
);
// Fail->Ava
GtkWidget
*
FailMenuNupp
=
gtk_menu_item_new_with_label
(
"Fail"
);
// Fail
UI
->
FailMenuAva
=
FailMenuAva
;
GtkWidget
*
KompMenuNupp
=
gtk_menu_item_new_with_label
(
"Kompileeri"
);
// Kompileeri
GtkWidget
*
FailMenuSalvesta
=
gtk_menu_item_new_with_label
(
"Salvesta"
);
// Fail->Salvesta
// Fail menüü
UI
->
FailMenuSalvesta
=
FailMenuSalvesta
;
GtkWidget
*
FailMenu
=
gtk_menu_new
();
GtkWidget
*
FailMenuSalvestaN
=
gtk_menu_item_new_with_label
(
"Salvesta nimega"
);
// Fail->Salvesta nimega
GtkWidget
*
FailMenuUus
=
gtk_menu_item_new_with_label
(
"Uus vahekaart"
);
// Fail->Uus vahekaart
UI
->
FailMenuSalvestaN
=
FailMenuSalvestaN
;
GtkWidget
*
FailMenuAva
=
gtk_menu_item_new_with_label
(
"Ava"
);
// Fail->Ava
GtkWidget
*
FailMenuSulgeV
=
gtk_menu_item_new_with_label
(
"Sulge vahekaart"
);
// Fail->Sulge vahekaart
UI
->
FailMenuAva
=
FailMenuAva
;
UI
->
FailMenuSulgeV
=
FailMenuSulgeV
;
GtkWidget
*
FailMenuSalvesta
=
gtk_menu_item_new_with_label
(
"Salvesta"
);
// Fail->Salvesta
GtkWidget
*
FailMenuValju
=
gtk_menu_item_new_with_label
(
"Välju"
);
// Fail->Välju
UI
->
FailMenuSalvesta
=
FailMenuSalvesta
;
// Menüü nupud menu bar'i
GtkWidget
*
FailMenuSalvestaN
=
gtk_menu_item_new_with_label
(
"Salvesta nimega"
);
// Fail->Salvesta nimega
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
FailMenuNupp
);
UI
->
FailMenuSalvestaN
=
FailMenuSalvestaN
;
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
AboutMenuNupp
);
GtkWidget
*
FailMenuSulgeV
=
gtk_menu_item_new_with_label
(
"Sulge vahekaart"
);
// Fail->Sulge vahekaart
// Menüüd nuppudesse
UI
->
FailMenuSulgeV
=
FailMenuSulgeV
;
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
FailMenuNupp
),
FailMenu
);
GtkWidget
*
FailMenuValju
=
gtk_menu_item_new_with_label
(
"Välju"
);
// Fail->Välju
// Fail menüü
// Kompileeri menüü
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
FailMenu
),
FailMenuUus
);
// Fail->Uus vahekaart
GtkWidget
*
KompMenu
=
gtk_menu_new
();
g_signal_connect
(
FailMenuUus
,
"activate"
,
G_CALLBACK
(
Uus
),
UI
);
GtkWidget
*
KompMenuSeaded
=
gtk_menu_item_new_with_label
(
"Seaded"
);
// Kompileeri->Seaded
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
FailMenu
),
gtk_separator_menu_item_new
());
GtkWidget
*
KompMenuKompileeri
=
gtk_menu_item_new_with_label
(
"Kompileeri"
);
// Kompileeri->Kompileeri
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
FailMenu
),
FailMenuAva
);
// Fail->Ava
GtkWidget
*
KompMenuKaivita
=
gtk_menu_item_new_with_label
(
"Käivita"
);
// Kompileeri->Käivita
g_signal_connect
(
FailMenuAva
,
"activate"
,
G_CALLBACK
(
Ava
),
UI
);
// Menüü nupud menu bar'i
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
FailMenu
),
FailMenuSalvesta
);
// Fail->Salvesta
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
FailMenuNupp
);
g_signal_connect
(
FailMenuSalvesta
,
"activate"
,
G_CALLBACK
(
Salvesta
),
UI
);
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
KompMenuNupp
);
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
FailMenu
),
FailMenuSalvestaN
);
// Fail->Salvesta nimega
g_signal_connect
(
FailMenuSalvestaN
,
"activate"
,
G_CALLBACK
(
SalvestaNimega
),
UI
);
// Menüüd nuppudesse
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
FailMenu
),
gtk_separator_menu_item_new
());
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
FailMenuNupp
),
FailMenu
);
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
FailMenu
),
FailMenuSulgeV
);
// Fail->Sulge vahekaart
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
KompMenuNupp
),
KompMenu
);
g_signal_connect
(
FailMenuSulgeV
,
"activate"
,
G_CALLBACK
(
SulgeVahekaart
),
UI
);
// Fail menüü
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
FailMenu
),
gtk_separator_menu_item_new
());
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuUus
,
Uus
,
GDK_KEY_N
,
GDK_CONTROL_MASK
);
// Fail->Uus vahekaart
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
FailMenu
),
FailMenuValju
);
// Fail->Välju
MenuSeparator
(
FailMenu
);
g_signal_connect
(
FailMenuValju
,
"activate"
,
G_CALLBACK
(
Valju
),
UI
);
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuAva
,
Ava
,
GDK_KEY_O
,
GDK_CONTROL_MASK
);
// Fail->Ava
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuSalvesta
,
Salvesta
,
GDK_KEY_S
,
GDK_CONTROL_MASK
);
// Fail->Salvesta
//ToolBar
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuSalvestaN
,
SalvestaNimega
,
GDK_KEY_S
,
GDK_CONTROL_MASK
|
GDK_MOD1_MASK
);
// Fail->Salvesta nimega
UI
->
ToolBar
=
gtk_toolbar_new
();
MenuSeparator
(
FailMenu
);
gtk_toolbar_set_style
(
GTK_TOOLBAR
(
UI
->
ToolBar
),
GTK_TOOLBAR_ICONS
);
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuSulgeV
,
SulgeVahekaart
,
GDK_KEY_W
,
GDK_CONTROL_MASK
);
// Fail->Sulge vahekaart
GtkWidget
*
UndoIcon
=
gtk_image_new_from_icon_name
(
GTK_STOCK_UNDO
,
5
);
MenuSeparator
(
FailMenu
);
UI
->
Undo
=
gtk_tool_button_new
(
UndoIcon
,
"undo"
);
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuValju
,
Valju
,
GDK_KEY_Q
,
GDK_CONTROL_MASK
|
GDK_SHIFT_MASK
);
// Fail->Välju
GtkWidget
*
RedoIcon
=
gtk_image_new_from_icon_name
(
GTK_STOCK_REDO
,
5
);
// Kompileeri menüü
UI
->
Redo
=
gtk_tool_button_new
(
RedoIcon
,
"redo"
);
LisaMenuItem
(
UI
,
KompMenu
,
KompMenuSeaded
,
KompilaatoriSeaded
,
0
,
0
);
// Kompileeri->Seaded
//nupud toolbarile
MenuSeparator
(
KompMenu
);
gtk_toolbar_insert
(
GTK_TOOLBAR
(
UI
->
ToolBar
),
UI
->
Undo
,
-
1
);
LisaMenuItem
(
UI
,
KompMenu
,
KompMenuKompileeri
,
NULL
,
GDK_KEY_C
,
GDK_CONTROL_MASK
|
GDK_SHIFT_MASK
);
// Kompileeri->Kompileeri
gtk_toolbar_insert
(
GTK_TOOLBAR
(
UI
->
ToolBar
),
UI
->
Redo
,
-
1
);
LisaMenuItem
(
UI
,
KompMenu
,
KompMenuKaivita
,
NULL
,
GDK_KEY_R
,
GDK_CONTROL_MASK
|
GDK_SHIFT_MASK
);
// Kompileeri->Käivita
//ToolBar
UI
->
ToolBar
=
gtk_toolbar_new
();
// Pane kõik õiges järjekorras box'i
gtk_toolbar_set_style
(
GTK_TOOLBAR
(
UI
->
ToolBar
),
GTK_TOOLBAR_ICONS
);
gtk_box_pack_start
(
GTK_BOX
(
UI
->
Box
),
UI
->
MenuBar
,
FALSE
,
FALSE
,
0
);
GtkWidget
*
UndoIcon
=
gtk_image_new_from_icon_name
(
GTK_STOCK_UNDO
,
5
);
gtk_box_pack_start
(
GTK_BOX
(
UI
->
Box
),
UI
->
ToolBar
,
FALSE
,
FALSE
,
0
);
UI
->
Undo
=
gtk_tool_button_new
(
UndoIcon
,
"undo"
);
gtk_box_pack_start
(
GTK_BOX
(
UI
->
Box
),
UI
->
Notebook
,
TRUE
,
TRUE
,
0
);
GtkWidget
*
RedoIcon
=
gtk_image_new_from_icon_name
(
GTK_STOCK_REDO
,
5
);
UI
->
Redo
=
gtk_tool_button_new
(
RedoIcon
,
"redo"
);
return
UI
;
//nupud toolbarile
gtk_toolbar_insert
(
GTK_TOOLBAR
(
UI
->
ToolBar
),
UI
->
Undo
,
-
1
);
gtk_toolbar_insert
(
GTK_TOOLBAR
(
UI
->
ToolBar
),
UI
->
Redo
,
-
1
);
// 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
->
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
;
}
}
ui.h
View file @
43e3d3dd
...
@@ -4,12 +4,11 @@
...
@@ -4,12 +4,11 @@
#include "ceditor.h"
#include "ceditor.h"
#include "tab.h"
#include "tab.h"
#include "menubar.h"
#include "menubar.h"
#include "compiler.h"
#ifdef SOURCEVIEW
#define PEALKIRI "CEditor"
#define PEALKIRI "CEditor SourceView"
#else
#define MenuSeparator(M) gtk_menu_shell_append(GTK_MENU_SHELL(M), gtk_separator_menu_item_new())
#define PEALKIRI "CEditor TextView"
#endif
ui
*
LooUI
();
ui
*
LooUI
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment