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
28835234
authored
Mar 30, 2022
by
karudu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SourceView süntaksi värvimine, faili muutmisel näidatakse *
parent
cb6b509a
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
464 additions
and
426 deletions
ceditor.c
ceditor.h
menubar.c
statusbar.c
tab.c
textview.c
textview.h
ui.c
ceditor.c
View file @
28835234
#include "ceditor.h"
#include "ui.h"
/* TODO
Klahvikombinatsioonid
*/
int
main
(
int
argc
,
char
**
argv
)
{
gtk_init
(
&
argc
,
&
argv
);
gtk_init
(
&
argc
,
&
argv
);
ui
*
UI
=
LooUI
();
gtk_widget_show_all
(
UI
->
Aken
);
// Näita akent
ui
*
UI
=
LooUI
();
gtk_widget_show_all
(
UI
->
Aken
);
// Näita akent
gtk_main
();
gtk_main
();
return
0
;
return
0
;
}
ceditor.h
View file @
28835234
#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
GtkWidget
*
Pealkiri
;
// Vahekaardi pealkiri
GtkWidget
*
Box
;
// Vahekaardi box
GtkWidget
*
TextView
;
// Vahekaardi tekstiaken
GtkTextView
*
Puhver
;
// Vahekaardi tekstipuhver
GtkWidget
*
ScrollWindow
;
// Tekstiakna scroll
GtkWidget
*
StatusBar
;
// Status bar
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
{
GtkWidget
*
Aken
;
// Programmi aken
GtkWidget
*
Box
;
// Akna box
GtkWidget
*
MenuBar
;
// Ülaosa menüü
GtkWidget
*
Notebook
;
// Notebook vahekaartidega
GtkWidget
*
ToolBar
;
//Tool bar
GtkWidget
*
AccelGroup
;
// Accel group nuppude jaoks
// Viited nuppudele nende sisse/välja lülitamiseks
GtkWidget
*
FailMenuAva
;
GtkWidget
*
FailMenuSalvesta
;
GtkWidget
*
FailMenuSalvestaN
;
GtkWidget
*
FailMenuSulgeV
;
tab
*
Tabid
;
// Vahekaartide massiiv
int
PraeguneTab
;
// Praegune valitud vahekaart
int
TabidN
;
// Mitu vahekaarti on avatud
//toolbari nupud
GtkToolItem
*
Undo
;
//undo nupp
GtkToolItem
*
Redo
;
//redo nupp
GtkWidget
*
Aken
;
// Programmi aken
GtkWidget
*
Box
;
// Akna box
GtkWidget
*
MenuBar
;
// Ülaosa menüü
GtkWidget
*
Notebook
;
// Notebook vahekaartidega
GtkWidget
*
ToolBar
;
//Tool bar
GtkWidget
*
AccelGroup
;
// Accel group nuppude jaoks
// Viited nuppudele nende sisse/välja lülitamiseks
GtkWidget
*
FailMenuAva
;
GtkWidget
*
FailMenuSalvesta
;
GtkWidget
*
FailMenuSalvestaN
;
GtkWidget
*
FailMenuSulgeV
;
tab
*
Tabid
;
// Vahekaartide massiiv
int
PraeguneTab
;
// Praegune valitud vahekaart
int
TabidN
;
// Mitu vahekaarti on avatud
//toolbari nupud
GtkToolItem
*
Undo
;
//undo nupp
GtkToolItem
*
Redo
;
//redo nupp
}
ui
;
#endif // CEDITOR_H
menubar.c
View file @
28835234
...
...
@@ -3,200 +3,205 @@
// Loob uue vahekaardi
void
Uus
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
ui
*
UI
=
(
ui
*
)
Data
;
// Loo uus vahekaart
LisaTab
(
UI
);
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
TabidN
-
1
];
Tab
->
FailiNimi
=
0
;
gtk_notebook_set_current_page
(
UI
->
Notebook
,
UI
->
TabidN
-
1
);
// Näita uut vahekaarti
// 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
->
FailMenuSalvestaN
,
TRUE
);
gtk_widget_set_sensitive
(
UI
->
FailMenuSulgeV
,
TRUE
);
ui
*
UI
=
(
ui
*
)
Data
;
// Loo uus vahekaart
LisaTab
(
UI
);
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
TabidN
-
1
];
Tab
->
FailiNimi
=
0
;
gtk_notebook_set_current_page
(
UI
->
Notebook
,
UI
->
TabidN
-
1
);
// Näita uut vahekaarti
// 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
->
FailMenuSalvestaN
,
TRUE
);
gtk_widget_set_sensitive
(
UI
->
FailMenuSulgeV
,
TRUE
);
}
// Avab faili ja loeb selle teksti vahekaarti
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
);
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
// Ava, kui vajutati accept
{
char
*
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
gchar
*
Sisu
;
GError
*
Viga
=
NULL
;
// TODO paremad veateated
if
(
g_file_get_contents
(
Nimi
,
&
Sisu
,
NULL
,
&
Viga
))
// Proovi faili sisu lugeda
{
if
(
g_utf8_validate
(
Sisu
,
-
1
,
NULL
))
{
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
;
UuendaTabiPealkirja
(
Tab
,
Nimi
);
}
else
{
printf
(
"g_utf8_validate viga
\n
"
);
g_free
(
Nimi
);
}
g_free
(
Sisu
);
}
else
{
// Faili ei saanud lugeda
printf
(
"Viga faili avamisel: %s
\n
"
,
Viga
->
message
);
g_error_free
(
Viga
);
g_free
(
Nimi
);
}
}
gtk_widget_destroy
(
Dialog
);
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
);
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
// Ava, kui vajutati accept
{
char
*
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
gchar
*
Sisu
;
GError
*
Viga
=
NULL
;
// TODO paremad veateated
if
(
g_file_get_contents
(
Nimi
,
&
Sisu
,
NULL
,
&
Viga
))
// Proovi faili sisu lugeda
{
if
(
g_utf8_validate
(
Sisu
,
-
1
,
NULL
))
{
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
;
UuendaTabiPealkirja
(
Tab
,
Nimi
);
UuendaTabMuudetud
(
Tab
);
}
else
{
printf
(
"g_utf8_validate viga
\n
"
);
g_free
(
Nimi
);
}
g_free
(
Sisu
);
}
else
{
// Faili ei saanud lugeda
printf
(
"Viga faili avamisel: %s
\n
"
,
Viga
->
message
);
g_error_free
(
Viga
);
g_free
(
Nimi
);
}
}
gtk_widget_destroy
(
Dialog
);
}
// Salvesta fail, tagastab 1 kui edukas
int
SalvestaFail
(
ui
*
UI
,
tab
*
Tab
)
{
GtkTextBuffer
*
Puhver
=
Tab
->
Puhver
;
char
*
Nimi
;
GtkWidget
*
Dialog
=
0
;
if
(
Tab
->
FailiNimi
)
// Fail on juba olemas
{
Nimi
=
Tab
->
FailiNimi
;
}
else
// Salvestame uue faili
{
Dialog
=
gtk_file_chooser_dialog_new
(
"Salvesta fail"
,
NULL
,
GTK_FILE_CHOOSER_ACTION_SAVE
,
"Tühista"
,
GTK_RESPONSE_CANCEL
,
"Salvesta"
,
GTK_RESPONSE_ACCEPT
,
NULL
);
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
{
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
}
else
{
gtk_widget_destroy
(
Dialog
);
return
0
;
}
}
GtkTextIter
TekstA
,
TekstL
;
gtk_text_buffer_get_start_iter
(
Puhver
,
&
TekstA
);
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
)
{
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
);
g_error_free
(
Viga
);
g_free
(
Nimi
);
g_free
(
Sisu
);
if
(
Dialog
)
gtk_widget_destroy
(
Dialog
);
return
0
;
}
GtkTextBuffer
*
Puhver
=
Tab
->
Puhver
;
char
*
Nimi
;
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
{
Dialog
=
gtk_file_chooser_dialog_new
(
"Salvesta fail"
,
NULL
,
GTK_FILE_CHOOSER_ACTION_SAVE
,
"Tühista"
,
GTK_RESPONSE_CANCEL
,
"Salvesta"
,
GTK_RESPONSE_ACCEPT
,
NULL
);
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
{
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
}
else
{
gtk_widget_destroy
(
Dialog
);
return
0
;
}
}
GtkTextIter
TekstA
,
TekstL
;
gtk_text_buffer_get_start_iter
(
Puhver
,
&
TekstA
);
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
)
{
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
);
}
UuendaTabMuudetud
(
Tab
);
g_free
(
Sisu
);
if
(
Dialog
)
gtk_widget_destroy
(
Dialog
);
return
1
;
}
else
{
printf
(
"Viga faili salvestamisel: %s
\n
"
,
Viga
->
message
);
g_error_free
(
Viga
);
g_free
(
Nimi
);
g_free
(
Sisu
);
if
(
Dialog
)
gtk_widget_destroy
(
Dialog
);
return
0
;
}
}
// Salvestab vahekaardi teksti praegusesse faili
void
Salvesta
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
ui
*
UI
=
(
ui
*
)
Data
;
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
PraeguneTab
];
ui
*
UI
=
(
ui
*
)
Data
;
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
PraeguneTab
];
SalvestaFail
(
UI
,
Tab
);
SalvestaFail
(
UI
,
Tab
);
}
// Salvestab vahekaardi teksti vabalt valitud faili
void
SalvestaNimega
(
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
(
"Salvesta fail"
,
NULL
,
GTK_FILE_CHOOSER_ACTION_SAVE
,
"Tühista"
,
GTK_RESPONSE_CANCEL
,
"Salvesta"
,
GTK_RESPONSE_ACCEPT
,
NULL
);
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
{
char
*
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
GtkTextIter
TekstA
,
TekstL
;
gtk_text_buffer_get_start_iter
(
Puhver
,
&
TekstA
);
gtk_text_buffer_get_end_iter
(
Puhver
,
&
TekstL
);
gchar
*
Sisu
=
gtk_text_buffer_get_text
(
Puhver
,
&
TekstA
,
&
TekstL
,
TRUE
);
gtk_text_buffer_set_modified
(
Puhver
,
FALSE
);
GError
*
Viga
=
NULL
;
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
);
g_error_free
(
Viga
);
g_free
(
Nimi
);
}
g_free
(
Sisu
);
}
gtk_widget_destroy
(
Dialog
);
ui
*
UI
=
(
ui
*
)
Data
;
tab
*
Tab
=
&
UI
->
Tabid
[
UI
->
PraeguneTab
];
GtkTextBuffer
*
Puhver
=
Tab
->
Puhver
;
GtkWidget
*
Dialog
=
gtk_file_chooser_dialog_new
(
"Salvesta fail"
,
NULL
,
GTK_FILE_CHOOSER_ACTION_SAVE
,
"Tühista"
,
GTK_RESPONSE_CANCEL
,
"Salvesta"
,
GTK_RESPONSE_ACCEPT
,
NULL
);
gint
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
Dialog
));
if
(
Vastus
==
GTK_RESPONSE_ACCEPT
)
{
char
*
Nimi
=
gtk_file_chooser_get_filename
(
GTK_FILE_CHOOSER
(
Dialog
));
GtkTextIter
TekstA
,
TekstL
;
gtk_text_buffer_get_start_iter
(
Puhver
,
&
TekstA
);
gtk_text_buffer_get_end_iter
(
Puhver
,
&
TekstL
);
gchar
*
Sisu
=
gtk_text_buffer_get_text
(
Puhver
,
&
TekstA
,
&
TekstL
,
TRUE
);
gtk_text_buffer_set_modified
(
Puhver
,
FALSE
);
GError
*
Viga
=
NULL
;
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
);
}
UuendaTabMuudetud
(
Tab
);
}
else
{
printf
(
"Viga faili salvestamisel: %s
\n
"
,
Viga
->
message
);
g_error_free
(
Viga
);
g_free
(
Nimi
);
}
g_free
(
Sisu
);
}
gtk_widget_destroy
(
Dialog
);
}
// Sulgeb praeguse vahekaardi
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
)
{
gtk_widget_set_sensitive
(
UI
->
FailMenuAva
,
FALSE
);
gtk_widget_set_sensitive
(
UI
->
FailMenuSalvesta
,
FALSE
);
gtk_widget_set_sensitive
(
UI
->
FailMenuSalvestaN
,
FALSE
);
gtk_widget_set_sensitive
(
UI
->
FailMenuSulgeV
,
FALSE
);
}
if
(
UI
->
TabidN
==
0
)
{
gtk_widget_set_sensitive
(
UI
->
FailMenuAva
,
FALSE
);
gtk_widget_set_sensitive
(
UI
->
FailMenuSalvesta
,
FALSE
);
gtk_widget_set_sensitive
(
UI
->
FailMenuSalvestaN
,
FALSE
);
gtk_widget_set_sensitive
(
UI
->
FailMenuSulgeV
,
FALSE
);
}
}
statusbar.c
View file @
28835234
...
...
@@ -3,16 +3,16 @@
// Uuenda näidatud rida ja veergu kursori asukoha järgi
void
UuendaRidaVeerg
(
GtkTextBuffer
*
Puhver
,
GtkStatusbar
*
StatusBar
)
{
GtkTextIter
Iter
;
// Leia kursori asukoht
gtk_text_buffer_get_iter_at_mark
(
Puhver
,
&
Iter
,
gtk_text_buffer_get_insert
(
Puhver
));
// Võta selle rida ja veerg
gint
Rida
=
gtk_text_iter_get_line
(
&
Iter
);
gint
Veerg
=
gtk_text_iter_get_line_offset
(
&
Iter
);
GtkTextIter
Iter
;
// Leia kursori asukoht
gtk_text_buffer_get_iter_at_mark
(
Puhver
,
&
Iter
,
gtk_text_buffer_get_insert
(
Puhver
));
// Võta selle rida ja veerg
gint
Rida
=
gtk_text_iter_get_line
(
&
Iter
);
gint
Veerg
=
gtk_text_iter_get_line_offset
(
&
Iter
);
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
gtk_statusbar_push
(
StatusBar
,
0
,
Tekst
);
// Näita teksti
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
gtk_statusbar_push
(
StatusBar
,
0
,
Tekst
);
// Näita teksti
g_free
(
Tekst
);
g_free
(
Tekst
);
}
tab.c
View file @
28835234
...
...
@@ -3,128 +3,150 @@
// 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
#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
// 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, uuendab rida/veergu
g_signal_connect
(
Tab
->
Puhver
,
"changed"
,
G_CALLBACK
(
UuendaRidaVeerg
),
Tab
->
StatusBar
);
// 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)"
);
// 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
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
Tab
->
OnMuudetud
=
0
;
// 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
)
{
// Kustuta vahekaart
gtk_notebook_remove_page
(
GTK_NOTEBOOK
(
UI
->
Notebook
),
Indeks
);
int
TabidN
=
UI
->
TabidN
;
// Kui massiivis on pärast kustutatud vahekaarti neid veel,
// siis nihuta need õigele kohale
for
(
int
i
=
Indeks
;
i
<
TabidN
-
1
;
i
++
)
{
UI
->
Tabid
[
i
]
=
UI
->
Tabid
[
i
+
1
];
}
if
(
TabidN
==
1
)
{
g_free
(
UI
->
Tabid
);
// Vabasta massiiv, kui see on nüüd tühi
}
else
{
UI
->
Tabid
=
g_realloc
(
UI
->
Tabid
,
sizeof
(
tab
)
*
(
TabidN
-
1
));
// Eemalda vahekaart massiivist
}
UI
->
TabidN
--
;
// Kustuta vahekaart
gtk_notebook_remove_page
(
GTK_NOTEBOOK
(
UI
->
Notebook
),
Indeks
);
int
TabidN
=
UI
->
TabidN
;
// Kui massiivis on pärast kustutatud vahekaarti neid veel,
// siis nihuta need õigele kohale
for
(
int
i
=
Indeks
;
i
<
TabidN
-
1
;
i
++
)
{
UI
->
Tabid
[
i
]
=
UI
->
Tabid
[
i
+
1
];
}
if
(
TabidN
==
1
)
{
g_free
(
UI
->
Tabid
);
// Vabasta massiiv, kui see on nüüd tühi
}
else
{
UI
->
Tabid
=
g_realloc
(
UI
->
Tabid
,
sizeof
(
tab
)
*
(
TabidN
-
1
));
// Eemalda vahekaart massiivist
}
UI
->
TabidN
--
;
}
// 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
);
// Terve faili nimi tooltip'is
gtk_widget_set_tooltip_text
(
Tab
->
Pealkiri
,
Nimi
);
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
)
{
ui
*
UI
=
(
ui
*
)
Data
;
UI
->
PraeguneTab
=
Indeks
;
ui
*
UI
=
(
ui
*
)
Data
;
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
;
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
;
}
textview.c
View file @
28835234
#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
)
{
UuendaRidaVeerg
(
Puhver
,
GTK_STATUSBAR
(
Data
));
UuendaRidaVeerg
(
Puhver
,
GTK_STATUSBAR
(
Data
));
}
textview.h
View file @
28835234
...
...
@@ -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
ui.c
View file @
28835234
...
...
@@ -3,126 +3,126 @@
// 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
;
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
;
ui
*
UI
=
(
ui
*
)
Data
;
if
(
Sulge
(
UI
))
{
gtk_main_quit
();
return
FALSE
;
}
else
return
TRUE
;
if
(
Sulge
(
UI
))
{
gtk_main_quit
();
return
FALSE
;
}
else
return
TRUE
;
}
// Väljub rakendusest
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
);
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
ui
*
LooUI
()
{
ui
*
UI
=
g_malloc
(
sizeof
(
ui
));
// 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_default_size
(
GTK_WINDOW
(
UI
->
Aken
),
800
,
600
);
// Akna suurus
gtk_window_set_title
(
GTK_WINDOW
(
UI
->
Aken
),
PEALKIRI
);
// Pealkiri
g_signal_connect
(
UI
->
Aken
,
"delete-event"
,
G_CALLBACK
(
SulgeAken
),
UI
);
// Close nupu callback
// 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
// Notebook
UI
->
Notebook
=
gtk_notebook_new
();
g_signal_connect
(
UI
->
Notebook
,
"switch-page"
,
G_CALLBACK
(
TabMuudetud
),
UI
);
// Tab'i muutmise callback
// Loo esimene tab
UI
->
TabidN
=
0
;
LisaTab
(
UI
);
UI
->
PraeguneTab
=
0
;
// Accel group
UI
->
AccelGroup
=
gtk_accel_group_new
();
gtk_window_add_accel_group
(
UI
->
Aken
,
UI
->
AccelGroup
);
// Menu bar
UI
->
MenuBar
=
gtk_menu_bar_new
();
// Loo menu bar
GtkWidget
*
FailMenuNupp
=
gtk_menu_item_new_with_label
(
"Fail"
);
// Fail
GtkWidget
*
AboutMenuNupp
=
gtk_menu_item_new_with_label
(
"About"
);
// About
GtkWidget
*
FailMenu
=
gtk_menu_new
();
// Fail menüü
GtkWidget
*
FailMenuUus
=
gtk_menu_item_new_with_label
(
"Uus vahekaart"
);
// Fail->Uus vahekaart
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
UI
->
FailMenuSalvesta
=
FailMenuSalvesta
;
GtkWidget
*
FailMenuSalvestaN
=
gtk_menu_item_new_with_label
(
"Salvesta nimega"
);
// Fail->Salvesta nimega
UI
->
FailMenuSalvestaN
=
FailMenuSalvestaN
;
GtkWidget
*
FailMenuSulgeV
=
gtk_menu_item_new_with_label
(
"Sulge vahekaart"
);
// Fail->Sulge vahekaart
UI
->
FailMenuSulgeV
=
FailMenuSulgeV
;
GtkWidget
*
FailMenuValju
=
gtk_menu_item_new_with_label
(
"Välju"
);
// Fail->Välju
// Menüü nupud menu bar'i
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
FailMenuNupp
);
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
AboutMenuNupp
);
// Menüüd nuppudesse
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
FailMenuNupp
),
FailMenu
);
// Fail menüü
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuUus
,
Uus
,
GDK_KEY_N
,
GDK_CONTROL_MASK
);
// Fail->Uus vahekaart
MenuSeparator
(
FailMenu
);
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
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuSalvestaN
,
SalvestaNimega
,
GDK_KEY_S
,
GDK_CONTROL_MASK
|
GDK_MOD1_MASK
);
// Fail->Salvesta nimega
MenuSeparator
(
FailMenu
);
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuSulgeV
,
SulgeVahekaart
,
GDK_KEY_W
,
GDK_CONTROL_MASK
);
// Fail->Sulge vahekaart
MenuSeparator
(
FailMenu
);
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuValju
,
Valju
,
GDK_KEY_Q
,
GDK_CONTROL_MASK
|
GDK_SHIFT_MASK
);
// Fail->Välju
//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
);
UI
->
Undo
=
gtk_tool_button_new
(
UndoIcon
,
"undo"
);
GtkWidget
*
RedoIcon
=
gtk_image_new_from_icon_name
(
GTK_STOCK_REDO
,
5
);
UI
->
Redo
=
gtk_tool_button_new
(
RedoIcon
,
"redo"
);
//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
);
return
UI
;
ui
*
UI
=
g_malloc
(
sizeof
(
ui
));
// 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_default_size
(
GTK_WINDOW
(
UI
->
Aken
),
800
,
600
);
// Akna suurus
gtk_window_set_title
(
GTK_WINDOW
(
UI
->
Aken
),
PEALKIRI
);
// Pealkiri
g_signal_connect
(
UI
->
Aken
,
"delete-event"
,
G_CALLBACK
(
SulgeAken
),
UI
);
// Close nupu callback
// 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
// Notebook
UI
->
Notebook
=
gtk_notebook_new
();
g_signal_connect
(
UI
->
Notebook
,
"switch-page"
,
G_CALLBACK
(
TabMuudetud
),
UI
);
// Tab'i muutmise callback
// Loo esimene tab
UI
->
TabidN
=
0
;
LisaTab
(
UI
);
UI
->
PraeguneTab
=
0
;
// Accel group
UI
->
AccelGroup
=
gtk_accel_group_new
();
gtk_window_add_accel_group
(
UI
->
Aken
,
UI
->
AccelGroup
);
// Menu bar
UI
->
MenuBar
=
gtk_menu_bar_new
();
// Loo menu bar
GtkWidget
*
FailMenuNupp
=
gtk_menu_item_new_with_label
(
"Fail"
);
// Fail
GtkWidget
*
AboutMenuNupp
=
gtk_menu_item_new_with_label
(
"About"
);
// About
GtkWidget
*
FailMenu
=
gtk_menu_new
();
// Fail menüü
GtkWidget
*
FailMenuUus
=
gtk_menu_item_new_with_label
(
"Uus vahekaart"
);
// Fail->Uus vahekaart
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
UI
->
FailMenuSalvesta
=
FailMenuSalvesta
;
GtkWidget
*
FailMenuSalvestaN
=
gtk_menu_item_new_with_label
(
"Salvesta nimega"
);
// Fail->Salvesta nimega
UI
->
FailMenuSalvestaN
=
FailMenuSalvestaN
;
GtkWidget
*
FailMenuSulgeV
=
gtk_menu_item_new_with_label
(
"Sulge vahekaart"
);
// Fail->Sulge vahekaart
UI
->
FailMenuSulgeV
=
FailMenuSulgeV
;
GtkWidget
*
FailMenuValju
=
gtk_menu_item_new_with_label
(
"Välju"
);
// Fail->Välju
// Menüü nupud menu bar'i
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
FailMenuNupp
);
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
AboutMenuNupp
);
// Menüüd nuppudesse
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
FailMenuNupp
),
FailMenu
);
// Fail menüü
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuUus
,
Uus
,
GDK_KEY_N
,
GDK_CONTROL_MASK
);
// Fail->Uus vahekaart
MenuSeparator
(
FailMenu
);
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
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuSalvestaN
,
SalvestaNimega
,
GDK_KEY_S
,
GDK_CONTROL_MASK
|
GDK_MOD1_MASK
);
// Fail->Salvesta nimega
MenuSeparator
(
FailMenu
);
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuSulgeV
,
SulgeVahekaart
,
GDK_KEY_W
,
GDK_CONTROL_MASK
);
// Fail->Sulge vahekaart
MenuSeparator
(
FailMenu
);
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuValju
,
Valju
,
GDK_KEY_Q
,
GDK_CONTROL_MASK
|
GDK_SHIFT_MASK
);
// Fail->Välju
//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
);
UI
->
Undo
=
gtk_tool_button_new
(
UndoIcon
,
"undo"
);
GtkWidget
*
RedoIcon
=
gtk_image_new_from_icon_name
(
GTK_STOCK_REDO
,
5
);
UI
->
Redo
=
gtk_tool_button_new
(
RedoIcon
,
"redo"
);
//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
);
return
UI
;
}
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