Browse Source

Added mark to tab-label when content is changed and not saved.

merge-requests/365/head
eidheim 11 years ago
parent
commit
122fb85390
  1. 39
      juci/notebook.cc
  2. 12
      juci/source.cc
  3. 5
      juci/source.h

39
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;
}

12
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<Gsv::Buffer> Source::Controller::buffer() {

5
juci/source.h

@ -112,12 +112,13 @@ namespace Source {
Glib::RefPtr<Gsv::Buffer> 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<void(bool was_saved)> signal_buffer_changed;
private:
Glib::Dispatcher parse_done;
Glib::Dispatcher parse_start;

Loading…
Cancel
Save