Browse Source

Fixed search and optimized some code

merge-requests/365/head
oyvang 11 years ago
parent
commit
5eb5aa3ee8
  1. 2
      juci/api.cc
  2. 51
      juci/entry.cc
  3. 22
      juci/entry.h
  4. 165
      juci/notebook.cc
  5. 18
      juci/notebook.h
  6. 10
      juci/source.cc
  7. 1
      juci/source.h

2
juci/api.cc

@ -55,7 +55,7 @@ void libjuci::ApiServiceProvider::AddKeybinding() {
std::cout << "ctrl alt space" << std::endl;
libjuci::LoadPlugin("snippet");
});
std::cout << "addkeybinding" << std::endl;
//std::cout << "addkeybinding" << std::endl;
}
///////////////////////

51
juci/entry.cc

@ -1,18 +1,11 @@
#include "entry.h"
Entry::Model::Model() :
next_("Next"),
prev_("Prev"){
std::cout<<"Model Entry"<<std::endl;
}
Entry::View::View() :
view_(Gtk::ORIENTATION_HORIZONTAL),
button_apply_(Gtk::Stock::APPLY),
button_cancel_(Gtk::Stock::CANCEL),
button_close_(Gtk::Stock::CLOSE),
button_next_("Next"),
button_prev_("Prev"){
}
}
Gtk::Box& Entry::View::view() {
return view_;
}
@ -20,7 +13,7 @@ void Entry::View::OnShowSetFilenName(std::string exstension) {
entry_.set_max_length(50);
entry_.set_text(exstension);
view_.pack_start(entry_);
view_.pack_end(button_cancel_, Gtk::PACK_SHRINK);
view_.pack_end(button_close_, Gtk::PACK_SHRINK);
view_.pack_end(button_apply_, Gtk::PACK_SHRINK);
}
void Entry::View::OnShowSearch(std::string current){
@ -29,25 +22,25 @@ void Entry::View::OnShowSearch(std::string current){
view_.pack_start(entry_);
view_.pack_start(button_next_, Gtk::PACK_SHRINK);
view_.pack_start(button_prev_, Gtk::PACK_SHRINK);
view_.pack_end(button_cancel_, Gtk::PACK_SHRINK);
view_.pack_end(button_apply_, Gtk::PACK_SHRINK);
view_.pack_end(button_close_, Gtk::PACK_SHRINK);
}
void Entry::View::OnHideEntry()
void Entry::View::OnHideEntry(bool is_new_file)
{
view_.remove(entry_);
view_.remove(button_cancel_);
view_.remove(button_apply_);
view_.remove(button_next_);
view_.remove(button_prev_);
view_.remove(button_close_);
if(!is_new_file){
view_.remove(button_next_);
view_.remove(button_prev_);
}else{
view_.remove(button_apply_);
}
}
Entry::Controller::Controller() {
}
Gtk::Box& Entry::Controller::view() {
return view_.view();
}
Gtk::Button& Entry::Controller::button_apply(){
return view_.button_apply();
}
void Entry::Controller::OnShowSetFilenName(std::string exstension) {
view_.OnShowSetFilenName(exstension);
view_.view().show_all();
@ -60,10 +53,22 @@ void Entry::Controller::OnShowSearch(std::string current){
view_.entry().grab_focus();
view_.entry().set_position(0);
}
void Entry::Controller::OnHideEntries(){
view_.OnHideEntry();
void Entry::Controller::OnHideEntries(bool is_new_file){
view_.OnHideEntry(is_new_file);
}
std::string Entry::Controller::text(){
return view_.entry().get_text();
}
Gtk::Button& Entry::Controller::button_apply(){
return view_.button_apply();
}
Gtk::Button& Entry::Controller::button_close(){
return view_.button_close();
}
Gtk::Button& Entry::Controller::button_next(){
return view_.button_next();
}
Gtk::Button& Entry::Controller::button_prev(){
return view_.button_prev();
}

22
juci/entry.h

@ -12,32 +12,30 @@ namespace Entry {
Gtk::Box& view();
Gtk::Entry& entry(){return entry_;}
Gtk::Button& button_apply(){return button_apply_;};
Gtk::Button& button_cancel(){return button_cancel_;};
Gtk::Button& button_close(){return button_close_;};
Gtk::Button& button_next(){return button_next_;};
Gtk::Button& button_prev(){return button_prev_;};
void OnShowSetFilenName(std::string exstension);
void OnShowSearch(std::string current);
void OnHideEntry();
void OnHideEntry(bool is_new_file);
protected:
Gtk::Box view_;
Gtk::Entry entry_;
Gtk::Button button_apply_, button_cancel_, button_next_, button_prev_;
};
class Model {
public:
Model();
std::string next(){return next_;};
std::string prev(){return prev_;};
private:
std::string next_, prev_;
Gtk::Button button_apply_, button_close_, button_next_, button_prev_;
};
class Controller {
public:
Controller();
Gtk::Box& view();
Gtk::Button& button_apply();
Gtk::Button& button_close();
Gtk::Button& button_next();
Gtk::Button& button_prev();
std::string text();
void OnShowSetFilenName(std::string exstension);
void OnShowSearch(std::string current);
void OnHideEntries();
void OnHideEntries(bool is_new_file);
View view_;
};// class controller
} // namespace notebook

165
juci/notebook.cc

@ -1,6 +1,9 @@
#include "notebook.h"
Notebook::Model::Model() {
cc_extension = ".cc";
h_extension = ".h";
};
Notebook::View::View() :
view_(Gtk::ORIENTATION_VERTICAL){
@ -15,7 +18,8 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings){
source_vec_.push_back(new Source::Controller);
scrolledwindow_vec_.back()->add(source_vec_.back()->view());
source_vec_.back()->OnNewEmptyFile();
view_.notebook().append_page(*scrolledwindow_vec_.back(), "juCi++");
notebook().append_page(*scrolledwindow_vec_.back(), "juCi++");
notebook().set_focus_child(*scrolledwindow_vec_.back());
refClipboard = Gtk::Clipboard::get();
keybindings.action_group_menu()->add(Gtk::Action::create("FileMenu",
@ -27,21 +31,21 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings){
"New empty file",
"Create a new file"),
[this]() {
isnewfile = true;
is_new_file = true;
OnFileNewEmptyfile();
});
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewCC",
"New cc file"),
Gtk::AccelKey("<control><alt>c"),
[this]() {
isnewfile = true;
is_new_file = true;
OnFileNewCCFile();
});
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewH",
"New h file"),
Gtk::AccelKey("<control><alt>h"),
[this]() {
isnewfile = true;
is_new_file = true;
OnFileNewHeaderFile();
});
keybindings.action_group_menu()->add(Gtk::Action::create("WindowCloseTab",
@ -53,7 +57,7 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings){
keybindings.action_group_menu()->add(Gtk::Action::create("EditFind",
Gtk::Stock::FIND),
[this]() {
isnewfile = false;
is_new_file = false;
OnEditSearch();
//TODO(Oyvang, Zalox, Forgi)Create function OnEditFind();
});
@ -74,13 +78,33 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings){
});
entry_.view_.entry().signal_activate().connect(
[this]() {
if(isnewfile){
if(is_new_file){
OnNewPage(entry_.text());
entry_.OnHideEntries(is_new_file);
}else{
Search();
Search(true);
}
entry_.OnHideEntries();
});
entry_.button_apply().signal_clicked().connect(
[this]() {
OnNewPage(entry_.text());
entry_.OnHideEntries(is_new_file);
});
entry_.button_close().signal_clicked().connect(
[this]() {
entry_.OnHideEntries(is_new_file);
});
entry_.button_next().signal_clicked().connect(
[this]() {
Search(true);
});
entry_.button_prev().signal_clicked().connect(
[this]() {
Search(false);
});
}//Constructor
Gtk::Box& Notebook::Controller::view() {
return view_.view();
@ -93,15 +117,15 @@ void Notebook::Controller::OnNewPage(std::string name) {
source_vec_.push_back(new Source::Controller);
scrolledwindow_vec_.back()->add(source_vec_.back()->view());
source_vec_.back()->OnNewEmptyFile();
view_.notebook().append_page(*scrolledwindow_vec_.back(), name);
view_.notebook().show_all_children();
view_.notebook().set_focus_child(*scrolledwindow_vec_.back());
view_.notebook().set_current_page(view_.notebook().get_n_pages()-1);
notebook().append_page(*scrolledwindow_vec_.back(), name);
notebook().show_all_children();
notebook().set_focus_child(*scrolledwindow_vec_.back());
notebook().set_current_page(pages()-1);
}
void Notebook::Controller::OnCloseCurrentPage() {
//TODO (oyvang, zalox, forgi) Save a temp file, in case you close one you dont want to close?
int page = view_.notebook().get_current_page();
view_.notebook().remove_page(page);
int page = currentPage();
notebook().remove_page(page);
delete source_vec_.at(page);
delete scrolledwindow_vec_.at(page);
source_vec_.erase(source_vec_.begin()+ page);
@ -111,33 +135,24 @@ void Notebook::Controller::OnFileNewEmptyfile() {
entry_.OnShowSetFilenName("");
}
void Notebook::Controller::OnFileNewCCFile() {
entry_.OnShowSetFilenName(".cc");
entry_.OnShowSetFilenName(model_.cc_extension);
}
void Notebook::Controller::OnFileNewHeaderFile() {
entry_.OnShowSetFilenName(".h");
entry_.OnShowSetFilenName(model_.h_extension);
}
void Notebook::Controller::OnEditCopy() {
if (view_.notebook().get_n_pages() != 0) {
int source_pos = view_.notebook().get_current_page();
Glib::RefPtr<Gtk::TextBuffer> buffer = source_vec_.at(source_pos)
->view().get_buffer();
buffer->copy_clipboard(refClipboard);
if (pages() != 0) {
buffer()->copy_clipboard(refClipboard);
}
}
void Notebook::Controller::OnEditPaste() {
if (view_.notebook().get_n_pages() != 0) {
int source_pos = view_.notebook().get_current_page();
Glib::RefPtr<Gtk::TextBuffer> buffer = source_vec_.at(source_pos)
->view().get_buffer();
buffer->paste_clipboard(refClipboard);
if (pages() != 0) {
buffer()->paste_clipboard(refClipboard);
}
}
void Notebook::Controller::OnEditCut() {
if (view_.notebook().get_n_pages() != 0) {
int source_pos = view_.notebook().get_current_page();
Glib::RefPtr<Gtk::TextBuffer> buffer = source_vec_.at(source_pos)
->view().get_buffer();
buffer->cut_clipboard(refClipboard);
if (pages() != 0) {
buffer()->cut_clipboard(refClipboard);
}
}
@ -147,48 +162,84 @@ void Notebook::Controller::OnOpenFile(std::string path) {
scrolledwindow_vec_.back()->add(source_vec_.back()->view());
source_vec_.back()->OnOpenFile(path);
unsigned pos = path.find_last_of("/\\");
view_.notebook().append_page(*scrolledwindow_vec_.back(), path.substr(pos+1));
view_.notebook().show_all_children();
view_.notebook().set_focus_child(*scrolledwindow_vec_.back());
view_.notebook().set_current_page(view_.notebook().get_n_pages()-1);
notebook().append_page(*scrolledwindow_vec_.back(), path.substr(pos+1));
notebook().show_all_children();
notebook().set_focus_child(*scrolledwindow_vec_.back());
notebook().set_current_page(pages()-1);
}
std::string Notebook::Controller::GetCursorWord(){
int page = view_.notebook().get_current_page();
std::string word;
Gtk::TextIter start,end;
start=source_vec_.at(page)->view().get_buffer()->begin();
end=source_vec_.at(page)->view().get_buffer()->end();
// if(!source_vec_.at(page)->view().get_buffer()->get_selection_bounds(start,
// end)){
start=source_vec_.at(page)->view().get_buffer()->get_insert()->get_iter();
end=source_vec_.at(page)->view().get_buffer()->get_insert()->get_iter();
if(!end.ends_line()) {
while(!end.ends_word()){
end.forward_char();
}
start = buffer()->get_insert()->get_iter();
end = buffer()->get_insert()->get_iter();
if(!end.ends_line()) {
while(!end.ends_word()){
end.forward_char();
}
if(!start.starts_line()) {
while(!start.starts_word()){
start.backward_char();
}
}
if(!start.starts_line()) {
while(!start.starts_word()){
start.backward_char();
}
word = source_vec_.at(page)->view().get_buffer()->get_text(start,end);
}
word = buffer()->get_text(start,end);
//TODO(Oyvang)fix selected text
return word;
//TODO(Oyvang)fix selected text
return word;
}
void Notebook::Controller::OnEditSearch(){
search_match_end_ = buffer()->get_iter_at_offset(0);
entry_.OnShowSearch(GetCursorWord());
}
void Notebook::Controller::Search(){
void Notebook::Controller::Search(bool forward){
std::string search_word;
search_word = entry_.text();
//TODO(oyvang) create seacrh function
std::cout<<"funka"<<std::endl;
Gtk::TextIter test;
if(!forward){
if(search_match_start_ == 0 || search_match_start_.get_line_offset() == 0) {
search_match_start_= buffer()->end();
}
search_match_start_.backward_search(search_word,
Gtk::TextSearchFlags::TEXT_SEARCH_TEXT_ONLY|
Gtk::TextSearchFlags::TEXT_SEARCH_VISIBLE_ONLY,
search_match_start_, search_match_end_);
}else{
if(search_match_end_ == 0) {
search_match_end_= buffer()->begin();
}
search_match_end_.forward_search(search_word,
Gtk::TextSearchFlags::TEXT_SEARCH_TEXT_ONLY |
Gtk::TextSearchFlags::TEXT_SEARCH_VISIBLE_ONLY,
search_match_start_, search_match_end_);
}
// std::cout << "matc_start - "
// << search_match_start_.get_line_offset()
// //<< test.get_line_offset()
// << " || match_end - "
// << search_match_end_.get_line_offset()
// << std::endl;
}
int Notebook::Controller::currentPage(){
return notebook().get_current_page();
}
Glib::RefPtr<Gtk::TextBuffer> Notebook::Controller::buffer(){
return source_vec_.at(currentPage())->view().get_buffer();
}
int Notebook::Controller::pages(){
return notebook().get_n_pages();
}
Gtk::Notebook& Notebook::Controller::notebook(){
return view_.notebook();
}

18
juci/notebook.h

@ -7,6 +7,12 @@
#include "source.h"
namespace Notebook {
class Model {
public:
Model();
std::string cc_extension;
std::string h_extension;
};
class View {
public:
View();
@ -25,12 +31,17 @@ namespace Notebook {
void OnCloseCurrentPage();
void OnOpenFile(std::string filename);
View view_;
Model model_;
Entry::Controller entry_;
std::vector<Source::Controller*> source_vec_;
std::vector<Gtk::ScrolledWindow*> scrolledwindow_vec_;
Glib::RefPtr<Gtk::Clipboard> refClipboard;
std::list<Gtk::TargetEntry> listTargets;
std::string GetCursorWord();
Glib::RefPtr<Gtk::TextBuffer> buffer();
Gtk::Notebook& notebook();
int currentPage();
int pages();
void OnFileNewEmptyfile();
void OnFileNewCCFile();
void OnFileNewHeaderFile();
@ -38,10 +49,11 @@ namespace Notebook {
void OnEditPaste();
void OnEditCut();
void OnEditSearch();
void Search();
void Search(bool forward);
private:
bool isnewfile;
bool is_new_file;
Gtk::TextIter search_match_end_;
Gtk::TextIter search_match_start_;
}; // class controller
} // namespace Notebook

10
juci/source.cc

@ -8,14 +8,14 @@
//// View ////
//////////////
Source::View::View() {
std::cout << "View constructor run" << std::endl;
// std::cout << "View constructor run" << std::endl;
override_font(Pango::FontDescription("Monospace"));
}
// Source::View::UpdateLine
// returns the new line
string Source::View::UpdateLine() {
Gtk::TextIter line(get_buffer()->get_insert()->get_iter());
std::cout << line.get_line() << std::endl;
//std::cout << line.get_line() << std::endl;
// for each word --> check what it is --> apply appropriate tag
return "";
}
@ -150,7 +150,7 @@ SetSourceLocations(const std::vector<Clang::SourceLocation> &locations) {
// Source::Controller::Controller()
// Constructor for Controller
Source::Controller::Controller() {
std::cout << "Controller constructor run" << std::endl;
//std::cout << "Controller constructor run" << std::endl;
view().get_buffer()->signal_changed().connect([this](){
this->OnLineEdit();
});
@ -187,3 +187,7 @@ void Source::Controller::OnOpenFile(const string &filename) {
model().SetSourceLocations(tu.getSourceLocations());
view().OnOpenFile(model().getSourceLocations(), model().theme());
}
Glib::RefPtr<Gtk::TextBuffer> Source::Controller::buffer(){
return view().get_buffer();
}

1
juci/source.h

@ -61,6 +61,7 @@ namespace Source {
Model& model();
void OnNewEmptyFile();
void OnOpenFile(const string &filename);
Glib::RefPtr<Gtk::TextBuffer> buffer();
private:
void OnLineEdit();

Loading…
Cancel
Save