Browse Source

merged

master
tedjk 11 years ago
parent
commit
9ae1a60faa
  1. 4
      juci/api.cc
  2. 4
      juci/cmake/Modules/FindTestlcl.cmake
  3. 61
      juci/entry.cc
  4. 25
      juci/entry.h
  5. 163
      juci/notebook.cc
  6. 19
      juci/notebook.h
  7. 10
      juci/source.cc
  8. 1
      juci/source.h

4
juci/api.cc

@ -1,3 +1,4 @@
#include "api.h" #include "api.h"
Menu::Controller* PluginApi::menu_; Menu::Controller* PluginApi::menu_;
@ -213,8 +214,7 @@ void libjuci::IterToWordEnd(Gtk::TextIter &iter) {
Glib::RefPtr<Gtk::TextBuffer> libjuci::BufferFromNotebook() { Glib::RefPtr<Gtk::TextBuffer> libjuci::BufferFromNotebook() {
//finding focused view //finding focused view
int i = 0; int i = 0;
while(!PluginApi::notebook_->source_vec_.at(i) while(!PluginApi::notebook_->source_vec_.at(i)->view().has_focus()) {
->view().has_focus()) {
i++; i++;
} }
return Glib::RefPtr<Gtk::TextBuffer>(PluginApi::notebook_ return Glib::RefPtr<Gtk::TextBuffer>(PluginApi::notebook_

4
juci/cmake/Modules/FindTestlcl.cmake

@ -10,11 +10,11 @@
find_package(PkgConfig) find_package(PkgConfig)
find_path(LCL_INCLUDE_DIR headers/TranslationUnit.h find_path(LCL_INCLUDE_DIR headers/TranslationUnit.h
HINTS "/home/forgie/code/libclangpp/" HINTS "/home/gm/bachelor/lib/"
) )
find_library(LCL_LIBRARY NAMES testlcl find_library(LCL_LIBRARY NAMES testlcl
HINTS "/home/forgie/code/libclangpp/lib") HINTS "/home/gm/bachelor/lib/lib/")
set(LCL_LIBRARIES ${LCL_LIBRARY} ) set(LCL_LIBRARIES ${LCL_LIBRARY} )
set(LCL_INCLUDE_DIRS ${LCL_INCLUDE_DIR} ) set(LCL_INCLUDE_DIRS ${LCL_INCLUDE_DIR} )

61
juci/entry.cc

@ -1,15 +1,11 @@
#include "entry.h" #include "entry.h"
Entry::Model::Model() :
next_("Next"),
prev_("Prev"){
std::cout<<"Model Entry"<<std::endl;
}
Entry::View::View() : Entry::View::View() :
view_(Gtk::ORIENTATION_HORIZONTAL), view_(Gtk::ORIENTATION_HORIZONTAL),
button_apply_(Gtk::Stock::APPLY), 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() { Gtk::Box& Entry::View::view() {
return view_; return view_;
} }
@ -17,29 +13,62 @@ void Entry::View::OnShowSetFilenName(std::string exstension) {
entry_.set_max_length(50); entry_.set_max_length(50);
entry_.set_text(exstension); entry_.set_text(exstension);
view_.pack_start(entry_); 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); view_.pack_end(button_apply_, Gtk::PACK_SHRINK);
} }
void Entry::View::OnHideEntry() void Entry::View::OnShowSearch(std::string current){
entry_.set_max_length(50);
entry_.set_text(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_close_, Gtk::PACK_SHRINK);
}
void Entry::View::OnHideEntry(bool is_new_file)
{ {
view_.remove(entry_); view_.remove(entry_);
view_.remove(button_cancel_); view_.remove(button_close_);
if(!is_new_file){
view_.remove(button_next_);
view_.remove(button_prev_);
}else{
view_.remove(button_apply_); view_.remove(button_apply_);
}
} }
Entry::Controller::Controller() { Entry::Controller::Controller() {
} }
Gtk::Box& Entry::Controller::view() { Gtk::Box& Entry::Controller::view() {
return view_.view(); return view_.view();
} }
Gtk::Button& Entry::Controller::button_apply(){
return view_.button_apply();
}
void Entry::Controller::OnShowSetFilenName(std::string exstension) { void Entry::Controller::OnShowSetFilenName(std::string exstension) {
view_.OnShowSetFilenName(exstension); view_.OnShowSetFilenName(exstension);
view_.view().show_all(); view_.view().show_all();
view_.entry().grab_focus(); view_.entry().grab_focus();
view_.entry().set_position(0); view_.entry().set_position(0);
} }
void Entry::Controller::OnHideEntries(){ void Entry::Controller::OnShowSearch(std::string current){
view_.OnHideEntry(); view_.OnShowSearch(current);
view_.view().show_all();
view_.entry().grab_focus();
view_.entry().set_position(0);
}
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();
}

25
juci/entry.h

@ -12,29 +12,30 @@ namespace Entry {
Gtk::Box& view(); Gtk::Box& view();
Gtk::Entry& entry(){return entry_;} Gtk::Entry& entry(){return entry_;}
Gtk::Button& button_apply(){return button_apply_;}; 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 OnShowSetFilenName(std::string exstension);
void OnHideEntry(); void OnShowSearch(std::string current);
void OnHideEntry(bool is_new_file);
protected: protected:
Gtk::Box view_; Gtk::Box view_;
Gtk::Entry entry_; Gtk::Entry entry_;
Gtk::Button button_apply_, button_cancel_; Gtk::Button button_apply_, button_close_, button_next_, button_prev_;
};
class Model {
public:
Model();
std::string next(){return next_;};
std::string prev(){return prev_;};
private:
std::string next_, prev_;
}; };
class Controller { class Controller {
public: public:
Controller(); Controller();
Gtk::Box& view(); Gtk::Box& view();
Gtk::Button& button_apply(); 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 OnShowSetFilenName(std::string exstension);
void OnHideEntries(); void OnShowSearch(std::string current);
void OnHideEntries(bool is_new_file);
View view_; View view_;
};// class controller };// class controller
} // namespace notebook } // namespace notebook

163
juci/notebook.cc

@ -1,6 +1,9 @@
#include "notebook.h" #include "notebook.h"
Notebook::Model::Model() {
cc_extension = ".cc";
h_extension = ".h";
};
Notebook::View::View() : Notebook::View::View() :
view_(Gtk::ORIENTATION_VERTICAL){ view_(Gtk::ORIENTATION_VERTICAL){
@ -15,7 +18,8 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings){
source_vec_.push_back(new Source::Controller); source_vec_.push_back(new Source::Controller);
scrolledwindow_vec_.back()->add(source_vec_.back()->view()); scrolledwindow_vec_.back()->add(source_vec_.back()->view());
source_vec_.back()->OnNewEmptyFile(); 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(); refClipboard = Gtk::Clipboard::get();
keybindings.action_group_menu()->add(Gtk::Action::create("FileMenu", keybindings.action_group_menu()->add(Gtk::Action::create("FileMenu",
@ -27,18 +31,21 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings){
"New empty file", "New empty file",
"Create a new file"), "Create a new file"),
[this]() { [this]() {
is_new_file = true;
OnFileNewEmptyfile(); OnFileNewEmptyfile();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewCC", keybindings.action_group_menu()->add(Gtk::Action::create("FileNewCC",
"New cc file"), "New cc file"),
Gtk::AccelKey("<control><alt>c"), Gtk::AccelKey("<control><alt>c"),
[this]() { [this]() {
is_new_file = true;
OnFileNewCCFile(); OnFileNewCCFile();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewH", keybindings.action_group_menu()->add(Gtk::Action::create("FileNewH",
"New h file"), "New h file"),
Gtk::AccelKey("<control><alt>h"), Gtk::AccelKey("<control><alt>h"),
[this]() { [this]() {
is_new_file = true;
OnFileNewHeaderFile(); OnFileNewHeaderFile();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("WindowCloseTab", keybindings.action_group_menu()->add(Gtk::Action::create("WindowCloseTab",
@ -50,6 +57,8 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings){
keybindings.action_group_menu()->add(Gtk::Action::create("EditFind", keybindings.action_group_menu()->add(Gtk::Action::create("EditFind",
Gtk::Stock::FIND), Gtk::Stock::FIND),
[this]() { [this]() {
is_new_file = false;
OnEditSearch();
//TODO(Oyvang, Zalox, Forgi)Create function OnEditFind(); //TODO(Oyvang, Zalox, Forgi)Create function OnEditFind();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("EditCopy", keybindings.action_group_menu()->add(Gtk::Action::create("EditCopy",
@ -69,9 +78,33 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings){
}); });
entry_.view_.entry().signal_activate().connect( entry_.view_.entry().signal_activate().connect(
[this]() { [this]() {
OnNewPage(entry_.view_.entry().get_text()); if(is_new_file){
entry_.OnHideEntries(); OnNewPage(entry_.text());
entry_.OnHideEntries(is_new_file);
}else{
Search(true);
}
});
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 }//Constructor
Gtk::Box& Notebook::Controller::view() { Gtk::Box& Notebook::Controller::view() {
return view_.view(); return view_.view();
@ -84,15 +117,15 @@ void Notebook::Controller::OnNewPage(std::string name) {
source_vec_.push_back(new Source::Controller); source_vec_.push_back(new Source::Controller);
scrolledwindow_vec_.back()->add(source_vec_.back()->view()); scrolledwindow_vec_.back()->add(source_vec_.back()->view());
source_vec_.back()->OnNewEmptyFile(); source_vec_.back()->OnNewEmptyFile();
view_.notebook().append_page(*scrolledwindow_vec_.back(), name); notebook().append_page(*scrolledwindow_vec_.back(), name);
view_.notebook().show_all_children(); notebook().show_all_children();
view_.notebook().set_focus_child(*scrolledwindow_vec_.back()); notebook().set_focus_child(*scrolledwindow_vec_.back());
view_.notebook().set_current_page(view_.notebook().get_n_pages()-1); notebook().set_current_page(pages()-1);
} }
void Notebook::Controller::OnCloseCurrentPage() { void Notebook::Controller::OnCloseCurrentPage() {
//TODO (oyvang, zalox, forgi) Save a temp file, in case you close one you dont want to close? //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(); int page = currentPage();
view_.notebook().remove_page(page); notebook().remove_page(page);
delete source_vec_.at(page); delete source_vec_.at(page);
delete scrolledwindow_vec_.at(page); delete scrolledwindow_vec_.at(page);
source_vec_.erase(source_vec_.begin()+ page); source_vec_.erase(source_vec_.begin()+ page);
@ -102,47 +135,111 @@ void Notebook::Controller::OnFileNewEmptyfile() {
entry_.OnShowSetFilenName(""); entry_.OnShowSetFilenName("");
} }
void Notebook::Controller::OnFileNewCCFile() { void Notebook::Controller::OnFileNewCCFile() {
entry_.OnShowSetFilenName(".cc"); entry_.OnShowSetFilenName(model_.cc_extension);
} }
void Notebook::Controller::OnFileNewHeaderFile() { void Notebook::Controller::OnFileNewHeaderFile() {
entry_.OnShowSetFilenName(".h"); entry_.OnShowSetFilenName(model_.h_extension);
} }
void Notebook::Controller::OnEditCopy() { void Notebook::Controller::OnEditCopy() {
if (view_.notebook().get_n_pages() != 0) { if (pages() != 0) {
int source_pos = view_.notebook().get_current_page(); buffer()->copy_clipboard(refClipboard);
Glib::RefPtr<Gtk::TextBuffer> buffer = source_vec_.at(source_pos)
->view().get_buffer();
buffer->copy_clipboard(refClipboard);
} }
} }
void Notebook::Controller::OnEditPaste() { void Notebook::Controller::OnEditPaste() {
if (view_.notebook().get_n_pages() != 0) { if (pages() != 0) {
int source_pos = view_.notebook().get_current_page(); buffer()->paste_clipboard(refClipboard);
Glib::RefPtr<Gtk::TextBuffer> buffer = source_vec_.at(source_pos)
->view().get_buffer();
buffer->paste_clipboard(refClipboard);
} }
} }
void Notebook::Controller::OnEditCut() { void Notebook::Controller::OnEditCut() {
if (view_.notebook().get_n_pages() != 0) { if (pages() != 0) {
int source_pos = view_.notebook().get_current_page(); buffer()->cut_clipboard(refClipboard);
Glib::RefPtr<Gtk::TextBuffer> buffer = source_vec_.at(source_pos)
->view().get_buffer();
buffer->cut_clipboard(refClipboard);
} }
} }
void Notebook::Controller::OnOpenFile(std::string filename) { void Notebook::Controller::OnOpenFile(std::string path) {
scrolledwindow_vec_.push_back(new Gtk::ScrolledWindow()); scrolledwindow_vec_.push_back(new Gtk::ScrolledWindow());
source_vec_.push_back(new Source::Controller); source_vec_.push_back(new Source::Controller);
scrolledwindow_vec_.back()->add(source_vec_.back()->view()); scrolledwindow_vec_.back()->add(source_vec_.back()->view());
source_vec_.back()->OnOpenFile(filename); source_vec_.back()->OnOpenFile(path);
view_.notebook().append_page(*scrolledwindow_vec_.back(), filename); unsigned pos = path.find_last_of("/\\");
view_.notebook().show_all_children(); notebook().append_page(*scrolledwindow_vec_.back(), path.substr(pos+1));
view_.notebook().set_focus_child(*scrolledwindow_vec_.back()); notebook().show_all_children();
view_.notebook().set_current_page(view_.notebook().get_n_pages()-1); notebook().set_focus_child(*scrolledwindow_vec_.back());
notebook().set_current_page(pages()-1);
}
std::string Notebook::Controller::GetCursorWord(){
std::string word;
Gtk::TextIter start,end;
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();
}
}
word = buffer()->get_text(start,end);
//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(bool forward){
std::string search_word;
search_word = entry_.text();
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();
}

19
juci/notebook.h

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

10
juci/source.cc

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

Loading…
Cancel
Save