Browse Source

Removed previous linenumbering. Scrolling now works on both enter and paste text.

merge-requests/365/head
eidheim 11 years ago
parent
commit
954ae00517
  1. 74
      juci/notebook.cc
  2. 4
      juci/notebook.h

74
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<Gtk::Adjustment> 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<Gtk::TextBuffer>
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<Gtk::TextBuffer>
}
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);

4
juci/notebook.h

@ -102,8 +102,8 @@ namespace Notebook {
bool is_new_file_;
Entry::Controller entry_;
std::vector<Source::Controller*> text_vec_, linenumbers_vec_;
std::vector<Gtk::ScrolledWindow*> scrolledtext_vec_, scrolledline_vec_;
std::vector<Source::Controller*> text_vec_;
std::vector<Gtk::ScrolledWindow*> scrolledtext_vec_;
std::vector<Gtk::HBox*> editor_vec_;
std::list<Gtk::TargetEntry> listTargets_;
Gtk::TextIter search_match_end_;

Loading…
Cancel
Save