diff --git a/juci/notebook.cc b/juci/notebook.cc index 4a0f387..b634762 100644 --- a/juci/notebook.cc +++ b/juci/notebook.cc @@ -183,6 +183,7 @@ bool Notebook::Controller::OnKeyPress(GdkEventKey* key) { else if(std::regex_match(line, sm, no_bracket_regex)) { Buffer(text_vec_.at(CurrentPage()))->insert_at_cursor("\n"+sm[1].str()); } + CurrentTextView().scroll_to(Buffer(text_vec_.at(CurrentPage()))->get_insert()); return true; } //Indent right when clicking tab, no matter where in the line the cursor is. Also works on selected text. @@ -336,29 +337,11 @@ bool Notebook::Controller::GeneratePopup(int key_id) { return true; } -bool Notebook::Controller::ScrollEventCallback(GdkEventScroll* scroll_event) { - int page = CurrentPage(); - int direction_y = scroll_event->delta_y; - int direction_x = scroll_event->delta_x; - - Glib::RefPtr adj = - scrolledtext_vec_.at(page)-> - get_vscrollbar()->get_adjustment(); - if ( direction_y != 0 ) { - int dir_val = direction_y == -1 ? -model_.scrollvalue_:+model_.scrollvalue_; - adj->set_value(adj->get_value()+dir_val); - text_vec_.at(page)->view().set_vadjustment(adj); - linenumbers_vec_.at(page)->view().set_vadjustment(adj); - } - return true; -} Notebook::Controller::~Controller() { INFO("Notebook destructor"); for (auto &i : text_vec_) delete i; - for (auto &i : linenumbers_vec_) delete i; for (auto &i : editor_vec_) delete i; for (auto &i : scrolledtext_vec_) delete i; - for (auto &i : scrolledline_vec_) delete i; } Gtk::Paned& Notebook::Controller::view() { @@ -397,27 +380,15 @@ void Notebook::Controller::OnOpenFile(std::string path) { Notebook().show_all_children(); Notebook().set_current_page(Pages()-1); Notebook().set_focus_child(text_vec_.back()->view()); - OnBufferChange(); text_vec_.back()->set_is_changed(false); } void Notebook::Controller::OnCreatePage() { INFO("Notebook create page"); text_vec_.push_back(new Source::Controller(source_config(), this)); - linenumbers_vec_.push_back(new Source::Controller(source_config(), this)); - scrolledline_vec_.push_back(new Gtk::ScrolledWindow()); scrolledtext_vec_.push_back(new Gtk::ScrolledWindow()); editor_vec_.push_back(new Gtk::HBox()); scrolledtext_vec_.back()->add(text_vec_.back()->view()); - scrolledline_vec_.back()->add(linenumbers_vec_.back()->view()); - linenumbers_vec_.back()->view().get_buffer()->set_text("1 "); - linenumbers_vec_.back()->view().override_color(Gdk::RGBA("Black")); - linenumbers_vec_.back()-> - view().set_justification(Gtk::Justification::JUSTIFY_RIGHT); - scrolledline_vec_.back()->get_vscrollbar()->hide(); - linenumbers_vec_.back()->view().set_editable(false); - linenumbers_vec_.back()->view().set_sensitive(false); - editor_vec_.back()->pack_start(*scrolledline_vec_.back(), false, false); editor_vec_.back()->pack_start(*scrolledtext_vec_.back(), true, true); TextViewHandlers(text_vec_.back()->view()); } @@ -431,14 +402,10 @@ void Notebook::Controller::OnCloseCurrentPage() { int page = CurrentPage(); Notebook().remove_page(page); delete text_vec_.at(page); - delete linenumbers_vec_.at(page); delete scrolledtext_vec_.at(page); - delete scrolledline_vec_.at(page); delete editor_vec_.at(page); text_vec_.erase(text_vec_.begin()+ page); - linenumbers_vec_.erase(linenumbers_vec_.begin()+page); scrolledtext_vec_.erase(scrolledtext_vec_.begin()+page); - scrolledline_vec_.erase(scrolledline_vec_.begin()+page); editor_vec_.erase(editor_vec_.begin()+page); } } @@ -526,36 +493,6 @@ void Notebook::Controller::Search(bool forward) { } } -void Notebook::Controller::OnBufferChange() { - int page = CurrentPage(); - int text_nr = Buffer(text_vec_.at(page))->get_line_count(); - int line_nr = Buffer(linenumbers_vec_.at(page))->get_line_count(); - while (line_nr < text_nr) { - line_nr++; - Buffer(linenumbers_vec_.at(page))-> - insert(Buffer(linenumbers_vec_.at(page))->end(), - "\n"+std::to_string(line_nr)+" "); - } - while (line_nr > text_nr) { - Gtk::TextIter iter = - Buffer(linenumbers_vec_.at(page))->get_iter_at_line(line_nr); - iter.backward_char(); - line_nr--; - Buffer(linenumbers_vec_.at(page))-> - erase(iter, - Buffer(linenumbers_vec_.at(page))->end()); - } - if (Buffer(text_vec_.at(page))->get_insert()->get_iter().starts_line() && - Buffer(text_vec_.at(page))->get_insert()->get_iter().get_line() == - Buffer(text_vec_.at(page))->end().get_line()) { - GdkEventScroll* scroll = new GdkEventScroll; - scroll->delta_y = 1.0; - scroll->delta_x = 0.0; - ScrollEventCallback(scroll); - delete scroll; - } - text_vec_.at(page)->set_is_changed(true); -} void Notebook::Controller ::OnDirectoryNavigation(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column) { @@ -600,10 +537,6 @@ Gtk::Notebook& Notebook::Controller::Notebook() { void Notebook::Controller::BufferChangeHandler(Glib::RefPtr buffer) { - buffer->signal_changed().connect( - [this]() { - OnBufferChange(); - }); buffer->signal_end_user_action().connect( [this]() { //UpdateHistory(); @@ -611,11 +544,6 @@ void Notebook::Controller::BufferChangeHandler(Glib::RefPtr } void Notebook::Controller::TextViewHandlers(Gtk::TextView& textview) { - textview.get_buffer()->signal_changed().connect( - [this]() { - OnBufferChange(); - }); - textview.signal_button_release_event(). connect(sigc::mem_fun(*this, &Notebook::Controller::OnMouseRelease), false); diff --git a/juci/notebook.h b/juci/notebook.h index e97dec5..e7681ca 100644 --- a/juci/notebook.h +++ b/juci/notebook.h @@ -102,8 +102,8 @@ namespace Notebook { bool is_new_file_; Entry::Controller entry_; - std::vector text_vec_, linenumbers_vec_; - std::vector scrolledtext_vec_, scrolledline_vec_; + std::vector text_vec_; + std::vector scrolledtext_vec_; std::vector editor_vec_; std::list listTargets_; Gtk::TextIter search_match_end_;