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
d860081d
authored
Apr 20, 2022
by
Herman Ounas
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'Karl' into Herman
parents
6d638d25
ff354c82
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
165 additions
and
52 deletions
ceditor.h
menubar.c
settings.c
settings.h
tab.c
tab.h
textview.c
textview.h
ui.c
ui.h
ceditor.h
View file @
d860081d
...
...
@@ -19,10 +19,13 @@ typedef struct
GtkWidget
*
ScrollWindow
;
// Tekstiakna scroll
GtkWidget
*
StatusBar
;
// Status bar
GtkSourceLanguageManager
*
LangManager
;
GtkSourceLanguageManager
*
LangManager
;
// Süntaksi värvimise asjad
GtkSourceLanguage
*
Language
;
GtkWidget
*
search_entry
;
gint
MuudetudID
;
// Muudetud teksti signaali ID
}
tab
;
typedef
struct
...
...
menubar.c
View file @
d860081d
...
...
@@ -23,7 +23,7 @@ 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
);
...
...
@@ -40,11 +40,11 @@ void Ava(GtkWidget *Nupp, gpointer Data)
{
if
(
g_utf8_validate
(
Sisu
,
-
1
,
NULL
))
{
gtk_text_buffer_set_text
(
Puhver
,
Sisu
,
-
1
);
// Kopeeri fail puhvrisse
gtk_text_buffer_set_text
(
Tab
->
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
);
UuendaTabMuudetud
(
0
,
Tab
);
}
else
{
...
...
@@ -110,7 +110,7 @@ int SalvestaFail(ui *UI, tab *Tab)
UuendaTabiPealkirja
(
Tab
,
Nimi
);
}
UuendaTabMuudetud
(
Tab
);
UuendaTabMuudetud
(
0
,
Tab
);
g_free
(
Sisu
);
if
(
Dialog
)
gtk_widget_destroy
(
Dialog
);
...
...
@@ -175,7 +175,7 @@ void SalvestaNimega(GtkWidget *Nupp, gpointer Data)
UuendaTabiPealkirja
(
Tab
,
Nimi
);
}
UuendaTabMuudetud
(
Tab
);
UuendaTabMuudetud
(
0
,
Tab
);
}
else
{
...
...
settings.c
0 → 100644
View file @
d860081d
#include "settings.h"
void
FontSeaded
(
GtkWidget
*
Nupp
,
gpointer
Data
)
{
ui
*
UI
=
(
ui
*
)
Data
;
GtkFontChooserDialog
*
FontChooser
=
gtk_font_chooser_dialog_new
(
"Font"
,
NULL
);
char
*
SFondiNimi
=
g_key_file_get_string
(
UI
->
Seaded
,
"Seaded"
,
"font"
,
NULL
);
// Seadistatud fondi nimi
if
(
SFondiNimi
)
{
gtk_font_chooser_set_font
(
FontChooser
,
SFondiNimi
);
g_free
(
SFondiNimi
);
}
int
Vastus
=
gtk_dialog_run
(
GTK_DIALOG
(
FontChooser
));
if
(
Vastus
==
GTK_RESPONSE_OK
)
{
char
*
FondiNimi
=
gtk_font_chooser_get_font
(
FontChooser
);
g_key_file_set_string
(
UI
->
Seaded
,
"Seaded"
,
"font"
,
FondiNimi
);
g_key_file_save_to_file
(
UI
->
Seaded
,
UI
->
SeadedNimi
,
0
);
SeaFont
(
UI
,
FondiNimi
);
// Pane vahekaartidele uus font
g_free
(
FondiNimi
);
}
gtk_widget_destroy
(
FontChooser
);
}
settings.h
0 → 100644
View file @
d860081d
#ifndef SETTINGS_H
#define SETTINGS_H
#include "ceditor.h"
void
FontSeaded
(
GtkWidget
*
Nupp
,
gpointer
Data
);
#endif // SETTINGS_H
tab.c
View file @
d860081d
...
...
@@ -115,8 +115,10 @@ void UuendaTabiPealkirja(tab *Tab, char *Nimi)
gtk_widget_set_tooltip_text
(
Tab
->
Pealkiri
,
Nimi
);
}
void
UuendaTabMuudetud
(
tab
*
Tab
)
void
UuendaTabMuudetud
(
GtkWidget
*
Puhver
,
gpointer
Data
)
{
tab
*
Tab
=
(
tab
*
)
Data
;
if
(
gtk_text_buffer_get_modified
(
Tab
->
Puhver
))
{
char
*
Tekst
=
g_strdup_printf
(
"%s *"
,
gtk_label_get_text
(
Tab
->
Pealkiri
));
...
...
@@ -166,3 +168,88 @@ int SulgeTab(ui *UI, int Indeks)
KustutaTab
(
UI
,
Indeks
);
return
1
;
}
// Sea kõikdele vahekaartidele uus font
void
SeaFont
(
ui
*
UI
,
char
*
FondiNimi
)
{
for
(
int
i
=
0
;
i
<
UI
->
TabidN
;
i
++
)
{
gtk_widget_modify_font
(
UI
->
Tabid
[
i
].
TextView
,
pango_font_description_from_string
(
FondiNimi
));
gtk_widget_show_all
(
UI
->
Tabid
[
i
].
TextView
);
}
}
// 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
// Kuna realloc liigutab vahekaardid mälus uude kohta, siis tuleb
// tekstipuhvrite muutmise callback'ile anda uued viidad
for
(
int
i
=
0
;
i
<
UI
->
TabidN
;
i
++
)
{
tab
*
Tab
=
&
UI
->
Tabid
[
i
];
g_signal_handler_disconnect
(
Tab
->
Puhver
,
Tab
->
MuudetudID
);
Tab
->
MuudetudID
=
g_signal_connect
(
Tab
->
Puhver
,
"modified-changed"
,
G_CALLBACK
(
UuendaTabMuudetud
),
Tab
);
}
}
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
// Kui font on seadistatud, siis kasuta seda
char
*
FondiNimi
=
g_key_file_get_string
(
UI
->
Seaded
,
"Seaded"
,
"font"
,
NULL
);
if
(
FondiNimi
)
{
gtk_widget_modify_font
(
Tab
->
TextView
,
pango_font_description_from_string
(
FondiNimi
));
g_free
(
FondiNimi
);
}
// 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
();
// Modified callback
Tab
->
MuudetudID
=
g_signal_connect
(
Tab
->
Puhver
,
"modified-changed"
,
G_CALLBACK
(
UuendaTabMuudetud
),
Tab
);
// Teksti muutuse callback
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)"
;
// Language manager (süntaksi värvimine)
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
}
tab.h
View file @
d860081d
...
...
@@ -11,5 +11,6 @@ void KustutaTab(ui *UI, int Indeks);
void
UuendaTabiPealkirja
(
tab
*
Tab
,
char
*
Nimi
);
void
TabMuudetud
(
GtkWidget
*
Notebook
,
GtkWidget
*
Tab
,
guint
Indeks
,
gpointer
Data
);
int
SulgeTab
(
ui
*
UI
,
int
Indeks
);
void
SeaFont
(
ui
*
UI
,
char
*
FondiNimi
);
#endif // TAB_H
textview.c
View file @
d860081d
#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
)
{
...
...
textview.h
View file @
d860081d
...
...
@@ -3,7 +3,6 @@
#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
);
...
...
ui.c
View file @
d860081d
...
...
@@ -83,10 +83,29 @@ ui *LooUI()
gtk_window_set_title
(
GTK_WINDOW
(
UI
->
Aken
),
PEALKIRI
);
// Pealkiri
g_signal_connect
(
UI
->
Aken
,
"delete-event"
,
G_CALLBACK
(
SulgeAken
),
UI
);
// Close nupu callback
UI
->
SchemeManager
=
gtk_source_style_scheme_manager_get_default
();
UI
->
Icon
=
create_pixbuf
(
"cpic.png"
);
gtk_window_set_icon
(
GTK_WINDOW
(
UI
->
Aken
),
UI
->
Icon
);
// 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
);
}
// Box
UI
->
Box
=
gtk_box_new
(
GTK_ORIENTATION_VERTICAL
,
0
);
// Vertikaalne box, 0px vahe
...
...
@@ -109,6 +128,7 @@ ui *LooUI()
UI
->
MenuBar
=
gtk_menu_bar_new
();
// Loo menu bar
GtkWidget
*
FailMenuNupp
=
gtk_menu_item_new_with_label
(
"Fail"
);
// Fail
GtkWidget
*
KompMenuNupp
=
gtk_menu_item_new_with_label
(
"Kompileeri"
);
// Kompileeri
GtkWidget
*
SeadedMenuNupp
=
gtk_menu_item_new_with_label
(
"Seaded"
);
// Seaded
// Fail menüü
GtkWidget
*
FailMenu
=
gtk_menu_new
();
GtkWidget
*
FailMenuUus
=
gtk_menu_item_new_with_label
(
"Uus vahekaart"
);
// Fail->Uus vahekaart
...
...
@@ -123,23 +143,24 @@ ui *LooUI()
GtkWidget
*
FailMenuValju
=
gtk_menu_item_new_with_label
(
"Välju"
);
// Fail->Välju
// Kompileeri menüü
GtkWidget
*
KompMenu
=
gtk_menu_new
();
GtkWidget
*
KompMenuSeaded
=
gtk_menu_item_new_with_label
(
"
Seaded"
);
// Kompileeri->S
eaded
GtkWidget
*
KompMenuSeaded
=
gtk_menu_item_new_with_label
(
"
Kompilaatori seaded"
);
// Kompileeri->Kompilaatori s
eaded
GtkWidget
*
KompMenuKompileeri
=
gtk_menu_item_new_with_label
(
"Kompileeri"
);
// Kompileeri->Kompileeri
GtkWidget
*
KompMenuKaivita
=
gtk_menu_item_new_with_label
(
"Käivita programm"
);
// Kompileeri->Käivita programm
//isikuparastamise menuu
GtkWidget
*
IsikupMenu
=
gtk_menu_new
();
GtkWidget
*
IsikupMenuNupp
=
gtk_menu_item_new_with_label
(
"Isikupärastamine"
);
GtkWidget
*
IsikupSeadedNupp
=
gtk_menu_item_new_with_label
(
"Seaded"
);
GtkWidget
*
SeadedMenu
=
gtk_menu_new
();
GtkWidget
*
IsikupSeadedMenuNupp
=
gtk_menu_item_new_with_label
(
"Seaded"
);
GtkWidget
*
SeadedMenuIsikup
=
gtk_menu_item_new_with_label
(
"Isikupärastamine"
);
GtkWidget
*
SeadedMenuFont
=
gtk_menu_item_new_with_label
(
"Teksti font"
);
// Menüü nupud menu bar'i
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
FailMenuNupp
);
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
KompMenuNupp
);
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
IsikupMenuNupp
);
gtk_menu_shell_append
(
GTK_MENU_SHELL
(
UI
->
MenuBar
),
Isikup
Seaded
MenuNupp
);
// Menüüd nuppudesse
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
FailMenuNupp
),
FailMenu
);
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
KompMenuNupp
),
KompMenu
);
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
IsikupMenuNupp
),
Isikup
Menu
);
gtk_menu_item_set_submenu
(
GTK_MENU_ITEM
(
SeadedMenuNupp
),
Seaded
Menu
);
// Fail menüü
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuUus
,
Uus
,
GDK_KEY_N
,
GDK_CONTROL_MASK
);
// Fail->Uus vahekaart
MenuSeparator
(
FailMenu
);
...
...
@@ -151,12 +172,13 @@ ui *LooUI()
MenuSeparator
(
FailMenu
);
LisaMenuItem
(
UI
,
FailMenu
,
FailMenuValju
,
Valju
,
GDK_KEY_Q
,
GDK_CONTROL_MASK
|
GDK_SHIFT_MASK
);
// Fail->Välju
// Kompileeri menüü
LisaMenuItem
(
UI
,
KompMenu
,
KompMenuSeaded
,
KompilaatoriSeaded
,
0
,
0
);
// Kompileeri->
S
eaded
LisaMenuItem
(
UI
,
KompMenu
,
KompMenuSeaded
,
KompilaatoriSeaded
,
0
,
0
);
// Kompileeri->
Kompilaatori s
eaded
MenuSeparator
(
KompMenu
);
LisaMenuItem
(
UI
,
KompMenu
,
KompMenuKompileeri
,
Kompileeri
,
GDK_KEY_C
,
GDK_CONTROL_MASK
|
GDK_SHIFT_MASK
);
// Kompileeri->Kompileeri
LisaMenuItem
(
UI
,
KompMenu
,
KompMenuKaivita
,
KaivitaProgramm
,
GDK_KEY_R
,
GDK_CONTROL_MASK
|
GDK_SHIFT_MASK
);
// Kompileeri->Käivita programm
//Isikparastamise menuu
LisaMenuItem
(
UI
,
IsikupMenu
,
IsikupSeadedNupp
,
Chooser
,
0
,
0
);
LisaMenuItem
(
UI
,
SeadedMenu
,
SeadedMenuFont
,
FontSeaded
,
0
,
0
);
//ToolBar
UI
->
ToolBar
=
gtk_toolbar_new
();
...
...
@@ -176,28 +198,5 @@ ui *LooUI()
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 @
d860081d
...
...
@@ -7,6 +7,7 @@
#include "compiler.h"
#include "search.h"
#include "custom.h"
#include "settings.h"
#define PEALKIRI "CEditor"
...
...
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