Browse Source

Added reload functionality by re-writing the textbuffer

merge-requests/365/head
d3rrial 9 years ago
parent
commit
14f6e338e0
  1. 32
      src/notebook.cc
  2. 1
      src/notebook.h
  3. 3
      src/window.cc

32
src/notebook.cc

@ -128,6 +128,38 @@ std::vector<Source::View*> &Notebook::get_views() {
return source_views;
}
void Notebook::reload(const boost::filesystem::path &file_path, size_t notebook_index) {
if(boost::filesystem::exists(file_path)) {
std::ifstream can_read(file_path.string());
if(!can_read) {
Terminal::get().print("Error: could not open "+file_path.string()+"\n", true);
return;
}
can_read.close();
}
auto last_view=get_current_view();
int offset = last_view->get_buffer()->get_insert()->get_iter().get_offset();
int line = last_view->get_buffer()->get_insert()->get_iter().get_line();
auto language=Source::guess_language(file_path);
last_view->get_buffer()->erase(last_view->get_buffer()->begin(), last_view->get_buffer()->end());
last_view->get_source_buffer()->begin_not_undoable_action();
if(language) {
if(filesystem::read_non_utf8(file_path, last_view->get_buffer())==-1)
Terminal::get().print("Warning: "+file_path.string()+" is not a valid UTF-8 file. Saving might corrupt the file.\n");
}
else {
if(filesystem::read(file_path, last_view->get_buffer())==-1)
Terminal::get().print("Error: "+file_path.string()+" is not a valid UTF-8 file.\n", true);
}
last_view->get_source_buffer()->end_not_undoable_action();
last_view->place_cursor_at_line_offset(line, offset);
last_view->get_buffer()->set_modified(true);
}
void Notebook::open(const boost::filesystem::path &file_path, size_t notebook_index) {
if(notebook_index==1 && !split)
toggle_split();

1
src/notebook.h

@ -31,6 +31,7 @@ public:
std::vector<Source::View*> &get_views();
void open(const boost::filesystem::path &file_path, size_t notebook_index=-1);
void reload(const boost::filesystem::path &file_path, size_t notebook_index=-1);
void configure(size_t index);
bool save(size_t index);
bool save_current();

3
src/window.cc

@ -321,8 +321,7 @@ void Window::set_menu_actions() {
menu.add_action("reload_file", [this]() {
auto path = Notebook::get().get_current_view()->file_path;
Notebook::get().close_current();
Notebook::get().open(path);
Notebook::get().reload(path);
});
menu.add_action("save", [this]() {

Loading…
Cancel
Save