From 122fb853906c0ce9cc336608f37b4f3085ad8777 Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 19 Jun 2015 12:01:50 +0200 Subject: [PATCH] Added mark to tab-label when content is changed and not saved. --- juci/notebook.cc | 39 ++++++++++++++++++++++++--------------- juci/source.cc | 12 +++++++----- juci/source.h | 5 +++-- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/juci/notebook.cc b/juci/notebook.cc index c4217e8..2d4166f 100644 --- a/juci/notebook.cc +++ b/juci/notebook.cc @@ -313,9 +313,11 @@ void Notebook::Controller::OnOpenFile(std::string path) { INFO("Notebook open file"); OnCreatePage(); text_vec_.back()->on_open_file(path); - text_vec_.back()->is_saved=true; - unsigned pos = path.find_last_of("/\\"); - Notebook().append_page(*editor_vec_.back(), path.substr(pos+1)); + size_t pos = path.find_last_of("/\\"); + std::string filename=path; + if(pos!=std::string::npos) + filename=path.substr(pos+1); + Notebook().append_page(*editor_vec_.back(), filename); Notebook().show_all_children(); Notebook().set_current_page(Pages()-1); Notebook().set_focus_child(text_vec_.back()->view); @@ -329,12 +331,23 @@ void Notebook::Controller::OnCreatePage() { scrolledtext_vec_.back()->add(text_vec_.back()->view); editor_vec_.back()->pack_start(*scrolledtext_vec_.back(), true, true); TextViewHandlers(text_vec_.back()->view); + //Add star on tab label when the page is not saved: + text_vec_.back()->signal_buffer_changed=[this](bool was_saved) { + if(was_saved) { + std::string path=text_vec_.at(CurrentPage())->parser.file_path; + size_t pos = path.find_last_of("/\\"); + std::string filename=path; + if(pos!=std::string::npos) + filename=path.substr(pos+1); + Notebook().set_tab_label_text(*Notebook().get_nth_page(CurrentPage()), filename+"*"); + } + }; } void Notebook::Controller::OnCloseCurrentPage() { INFO("Notebook close page"); if (Pages() != 0) { - if(text_vec_.back()->is_changed){ + if(!text_vec_.back()->is_saved){ AskToSaveDialog(); } int page = CurrentPage(); @@ -570,17 +583,8 @@ void Notebook::Controller::FindPopupPosition(Gtk::TextView& textview, } bool Notebook::Controller:: OnSaveFile() { - INFO("Notebook save file"); - if (text_vec_.at(CurrentPage())->is_saved) { - std::ofstream file; - file.open (text_vec_.at(CurrentPage())->parser.file_path); - file << CurrentTextView().get_buffer()->get_text(); - file.close(); - return true; - } else { - return OnSaveFile(OnSaveFileAs()); - } - return false; + std::string path=text_vec_.at(CurrentPage())->parser.file_path; + return OnSaveFile(path); } bool Notebook::Controller:: OnSaveFile(std::string path) { INFO("Notebook save file with path"); @@ -590,6 +594,11 @@ bool Notebook::Controller:: OnSaveFile(std::string path) { file << CurrentTextView().get_buffer()->get_text(); file.close(); text_vec_.at(CurrentPage())->parser.file_path=path; + size_t pos = path.find_last_of("/\\"); + std::string filename=path; + if(pos!=std::string::npos) + filename=path.substr(pos+1); + Notebook().set_tab_label_text(*Notebook().get_nth_page(CurrentPage()), filename); text_vec_.at(CurrentPage())->is_saved=true; return true; } diff --git a/juci/source.cc b/juci/source.cc index 9183da4..6fa2660 100644 --- a/juci/source.cc +++ b/juci/source.cc @@ -299,12 +299,14 @@ void Source::Controller::on_open_file(const string &filepath) { } } }); - - buffer()->signal_changed().connect([this]() { - parse_thread_mapped=false; - parse_thread_go=true; - }); } + buffer()->signal_changed().connect([this]() { + if(signal_buffer_changed) + signal_buffer_changed(is_saved); + is_saved=false; + parse_thread_mapped=false; + parse_thread_go=true; + }); } Glib::RefPtr Source::Controller::buffer() { diff --git a/juci/source.h b/juci/source.h index 86e38d5..99ede6b 100644 --- a/juci/source.h +++ b/juci/source.h @@ -112,12 +112,13 @@ namespace Source { Glib::RefPtr buffer(); bool on_key_press(GdkEventKey* key); - bool is_saved = false; //TODO: Is never set to false in Notebook::Controller - bool is_changed = false; //TODO: Is never set to true + bool is_saved = true; Parser parser; View view; + std::function signal_buffer_changed; + private: Glib::Dispatcher parse_done; Glib::Dispatcher parse_start;