diff --git a/juci/api.cc b/juci/api.cc index 995d344..83745cc 100644 --- a/juci/api.cc +++ b/juci/api.cc @@ -1,4 +1,3 @@ - #include "api.h" Menu::Controller* PluginApi::menu_; diff --git a/juci/juci.cc b/juci/juci.cc index 84b1e6f..b2afc98 100644 --- a/juci/juci.cc +++ b/juci/juci.cc @@ -1,11 +1,11 @@ #include "window.h" - int main(int argc, char *argv[]) { Glib::RefPtr app = Gtk::Application::create( argc, argv, "no.sout.juci"); + Window window; //api::LoadPlugin("juci_api_test"); diff --git a/juci/notebook.cc b/juci/notebook.cc index bdc0c30..63e3759 100644 --- a/juci/notebook.cc +++ b/juci/notebook.cc @@ -1,10 +1,12 @@ - +#include #include "notebook.h" + + Notebook::Model::Model() { cc_extension_ = ".cc"; h_extension_ = ".h"; - scrollvalue_ = 20; + scrollvalue_ = 50; }; Notebook::View::View(){ view_.pack_start(notebook_); @@ -94,13 +96,6 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings) { [this]() { Search(false); }); - - text_vec_.back()->view(). - signal_scroll_event().connect(sigc::mem_fun( - this, - &Notebook::Controller:: - scroll_event_callback)); - }//Constructor @@ -116,19 +111,14 @@ bool Notebook::Controller::scroll_event_callback(GdkEventScroll* scroll_event) { 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); } - if ( direction_x != 0 ) { - int dir_val = direction_x==-1?-model_.scrollvalue_:+model_.scrollvalue_; - adj->set_value(adj->get_value()+dir_val); - text_vec_.at(page)->view().set_hadjustment(adj); - } return true; } - Notebook::Controller::~Controller() { for (auto &i : text_vec_) delete i; for (auto &i : linenumbers_vec_) delete i; @@ -144,9 +134,9 @@ Gtk::Box& Notebook::Controller::entry_view() { return entry_.view(); } - void Notebook::Controller::OnNewPage(std::string name) { OnCreatePage(); + std::cout << "oppretta pages" << std::endl; text_vec_.back()->OnNewEmptyFile(); Notebook().append_page(*editor_vec_.back(), name); @@ -163,21 +153,19 @@ 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()); + lines = Buffer(linenumbers_vec_.back())->get_text(); OnBufferChange(); } void Notebook::Controller::OnCreatePage(){ text_vec_.push_back(new Source::Controller); - std::string temp = "TEXT "; - temp += text_vec_.size(); - text_vec_.back()->view().set_name(temp); linenumbers_vec_.push_back(new Source::Controller); 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 \n"); + 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); @@ -186,6 +174,7 @@ void Notebook::Controller::OnCreatePage(){ 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); + BufferChangeHandler(text_vec_.back()->view().get_buffer()); } @@ -267,7 +256,7 @@ void Notebook::Controller::Search(bool forward){ if ( !forward ) { if ( search_match_start_ == 0 || - search_match_start_.get_line_offset() == 0) { + search_match_start_.get_line_offset() == 0) { search_match_start_= Buffer(text_vec_.at(CurrentPage()))->end(); } search_match_start_. @@ -288,42 +277,35 @@ void Notebook::Controller::Search(bool forward){ search_match_end_); } } -void Notebook::Controller::OnBufferChange() { - int page = CurrentPage(); - int line_nr = Buffer(text_vec_.at(page))->get_line_count(); - - Glib::RefPtr - mark = Gtk::TextBuffer::Mark::create(); - Glib::RefPtr - mark_lines = Gtk::TextBuffer::Mark::create(); - 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()) { - std::string lines ="1 "; - for ( int it = 2; it <= line_nr; ++it ) { - lines.append("\n"+ std::to_string(it)+" "); - } - Buffer(linenumbers_vec_.at(page))->set_text(lines); - - Buffer(text_vec_.at(page))-> - add_mark( - mark, - Buffer(text_vec_.at(page))->end()); - Buffer(linenumbers_vec_.at(page))-> - add_mark( - mark_lines, - Buffer(linenumbers_vec_.at(page))->end()); - - text_vec_.at(page)->view().scroll_to(mark); - linenumbers_vec_.at(page)->view().scroll_to(mark_lines); - }else{ - Buffer(text_vec_.at(page))-> - add_mark( - mark, - Buffer(text_vec_.at(page))-> - get_insert()->get_iter()); - } +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; + scroll_event_callback(scroll); + delete scroll; + } } @@ -350,7 +332,8 @@ Gtk::Notebook& Notebook::Controller::Notebook() { void Notebook::Controller::BufferChangeHandler(Glib::RefPtr buffer) { buffer->signal_changed().connect( - [this]() { - OnBufferChange(); + [this]() { + OnBufferChange(); }); } + diff --git a/juci/notebook.h b/juci/notebook.h index ccfdbb6..e95e0a0 100644 --- a/juci/notebook.h +++ b/juci/notebook.h @@ -65,10 +65,14 @@ namespace Notebook { Gtk::TextIter search_match_end_; Gtk::TextIter search_match_start_; Glib::RefPtr refClipboard_; + std::string + lines="1 "; }; // class controller } // namespace Notebook + + #endif // JUCI_NOTEBOOK_H_