Commit 85229167 by castro

Otsingu bar olemas.

Probleemid:
1. Otsing leiab ainult ühe samasuguse teksti.
2. Otsingu box liiga suur.
3. (mitte väga oluline) Menubaris võiks olla menu item Otsing, mis avaks otsingu nupu koos aknaga.
parent 8ff8bab3
Showing with 62 additions and 22 deletions
...@@ -15,19 +15,26 @@ ...@@ -15,19 +15,26 @@
#define PEALKIRI "CEditor TextView" #define PEALKIRI "CEditor TextView"
#endif #endif
// Uuenda nidatud rida ja veergu kursori asukoha jrgi //struckt Otsi_akna jaoks
typedef struct _App
{
GtkWidget *text_view;
GtkWidget *search_entry;
} App;
// 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));
// Vta 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); // Vta 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); // Nita teksti gtk_statusbar_push(StatusBar, 0, Tekst); // Näita teksti
g_free(Tekst); g_free(Tekst);
} }
...@@ -38,6 +45,30 @@ void TekstMarkSet(GtkTextBuffer *Puhver, const GtkTextIter *new_location, GtkTex ...@@ -38,6 +45,30 @@ void TekstMarkSet(GtkTextBuffer *Puhver, const GtkTextIter *new_location, GtkTex
UuendaRidaVeerg(Puhver, GTK_STATUSBAR(Data)); UuendaRidaVeerg(Puhver, GTK_STATUSBAR(Data));
} }
// funktsioon selleks kui search nuppu vajutatakse
void Otsi_nupp_vajutatud (GtkWidget *Otsi_nupp, App *app)
{
const gchar *text;
GtkTextBuffer *buffer;
GtkTextIter iter;
GtkTextIter mstart, mend;
gboolean found;
text = gtk_entry_get_text (GTK_ENTRY (app->search_entry));
/* Get the buffer associated with the text view widget. */
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (app->text_view));
/* Search from the start from buffer for text. */
gtk_text_buffer_get_start_iter (buffer, &iter);
found = gtk_text_iter_forward_search (&iter, text, 0, &mstart, &mend, NULL);
if (found)
{
/* If found, hilight the text. */
gtk_text_buffer_select_range (buffer, &mstart, &mend);
}
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
gtk_init(&argc, &argv); gtk_init(&argc, &argv);
...@@ -53,47 +84,56 @@ int main(int argc, char **argv) ...@@ -53,47 +84,56 @@ int main(int argc, char **argv)
// Box // Box
GtkWidget *Box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); // Vertikaalne box, 0px vahe GtkWidget *Box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); // Vertikaalne box, 0px vahe
gtk_container_add(GTK_CONTAINER(Aken), Box); // Pane box aknasse gtk_container_add(GTK_CONTAINER(Aken), Box); // Pane box aknasse
// Menu bar // Menu bar
GtkWidget *MenuBar = gtk_menu_bar_new(); // Loo menu bar GtkWidget *MenuBar = gtk_menu_bar_new(); // Loo menu bar
GtkWidget *FailMenuNupp = gtk_menu_item_new_with_label("Fail"); // Fail GtkWidget *FailMenuNupp = gtk_menu_item_new_with_label("Fail"); // Fail
GtkWidget *AboutMenuNupp = gtk_menu_item_new_with_label("About"); // About GtkWidget *AboutMenuNupp = gtk_menu_item_new_with_label("About"); // About
GtkWidget *FailMenu = gtk_menu_new(); // Fail men GtkWidget *FailMenu = gtk_menu_new(); // Fail menüü
GtkWidget *FailMenuUus = gtk_menu_item_new_with_label("Uus"); // Fail->Uus GtkWidget *FailMenuUus = gtk_menu_item_new_with_label("Uus"); // Fail->Uus
GtkWidget *FailMenuAva = gtk_menu_item_new_with_label("Ava"); // Fail->Ava GtkWidget *FailMenuAva = gtk_menu_item_new_with_label("Ava"); // Fail->Ava
GtkWidget *FailMenuSalvesta = gtk_menu_item_new_with_label("Salvesta"); // Fail->Salvesta GtkWidget *FailMenuSalvesta = gtk_menu_item_new_with_label("Salvesta"); // Fail->Salvesta
GtkWidget *FailMenuSalvestaN = gtk_menu_item_new_with_label("Salvesta nimega"); // Fail->Salvesta nimega GtkWidget *FailMenuSalvestaN = gtk_menu_item_new_with_label("Salvesta nimega"); // Fail->Salvesta nimega
GtkWidget *FailMenuValju = gtk_menu_item_new_with_label("Vlju"); // Fail->Vlju GtkWidget *FailMenuValju = gtk_menu_item_new_with_label("Välju"); // Fail->Välju
// Search // Search
GtkWidget *search_nupp = gtk_menu_item_new_with_label ("Otsi"); GtkWidget *Otsi_nupp = gtk_button_new_with_label ("Otsi"); // Otsi nupp
GtkWidget *search_aken ; GtkWidget *Otsi_aken = gtk_scrolled_window_new (NULL, NULL); // Otsi aken
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (Otsi_aken),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
App app;
gtk_box_pack_start (GTK_BOX (Box), Otsi_nupp, FALSE, FALSE, 0);
// Men nupud menu bar'i app.search_entry = gtk_entry_new ();
gtk_box_pack_start (GTK_BOX (Box), app.search_entry, TRUE, TRUE, 0);
g_signal_connect (G_OBJECT (Otsi_nupp), "clicked",
G_CALLBACK (Otsi_nupp_vajutatud), &app);
// Menüü nupud menu bar'i
gtk_menu_shell_append(GTK_MENU_SHELL(MenuBar), FailMenuNupp); gtk_menu_shell_append(GTK_MENU_SHELL(MenuBar), FailMenuNupp);
gtk_menu_shell_append(GTK_MENU_SHELL(MenuBar), AboutMenuNupp); gtk_menu_shell_append(GTK_MENU_SHELL(MenuBar), AboutMenuNupp);
gtk_menu_shell_append(GTK_MENU_SHELL(MenuBar), search_nupp);
// Mend nuppudesse // Menüüd nuppudesse
gtk_menu_item_set_submenu(GTK_MENU_ITEM(FailMenuNupp), FailMenu); gtk_menu_item_set_submenu(GTK_MENU_ITEM(FailMenuNupp), FailMenu);
// Fail men // Fail menüü
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuUus); // Fail->Uus gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuUus); // Fail->Uus
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuAva); // Fail->Ava gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuAva); // Fail->Ava
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuSalvesta); // Fail->Salvesta gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuSalvesta); // Fail->Salvesta
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuSalvestaN); // Fail->Salvesta nimega gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuSalvestaN); // Fail->Salvesta nimega
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), gtk_separator_menu_item_new()); gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), gtk_separator_menu_item_new());
gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuValju); // Fail->Vlju gtk_menu_shell_append(GTK_MENU_SHELL(FailMenu), FailMenuValju); // Fail->Välju
g_signal_connect(G_OBJECT(FailMenuValju), "activate", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(FailMenuValju), "activate", G_CALLBACK(gtk_main_quit), NULL);
// Search
//GtkWidget *search_nupp = gtk_button_new_with_label ("Otsi");
//GtkWidget *search_aken ;
//gtk_menu_shell_append(GTK_MENU_SHELL(MenuBar), search_nupp);
// Pane search nupp aknasse
//gtk_box_pack_start(GTK_BOX(Box), search_nupp, FALSE, FALSE, 0);
// Pane menubar box'i // Pane menubar box'i
gtk_box_pack_start(GTK_BOX(Box), MenuBar, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(Box), MenuBar, FALSE, FALSE, 0);
// paneb Otsi_aken boxi
gtk_box_pack_start (GTK_BOX (Box), Otsi_aken, TRUE, TRUE, 0);
app.text_view = gtk_text_view_new ();
gtk_container_add (GTK_CONTAINER (Otsi_aken), app.text_view);
// Tekstiaken // Tekstiaken
#ifdef SOURCEVIEW #ifdef SOURCEVIEW
GtkWidget *View = gtk_source_view_new(); // Loo tekstiaken GtkWidget *View = gtk_source_view_new(); // Loo tekstiaken
...@@ -113,7 +153,7 @@ int main(int argc, char **argv) ...@@ -113,7 +153,7 @@ int main(int argc, char **argv)
// Copy/paste lohistamise callback, uuendab samuti // Copy/paste lohistamise callback, uuendab samuti
g_signal_connect_object(Puhver, "mark_set", G_CALLBACK(TekstMarkSet), StatusBar, 0); g_signal_connect_object(Puhver, "mark_set", G_CALLBACK(TekstMarkSet), StatusBar, 0);
gtk_widget_show_all(Aken); // Nita akent gtk_widget_show_all(Aken); // Näita akent
UuendaRidaVeerg(Puhver, GTK_STATUSBAR(StatusBar)); // Esimene uuendus UuendaRidaVeerg(Puhver, GTK_STATUSBAR(StatusBar)); // Esimene uuendus
gtk_main(); gtk_main();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment