Browse Source

fixed popup, known bug iterator gtkmm error on insert text to buffer

merge-requests/365/head
oyvang 11 years ago
parent
commit
4831d91445
  1. 263
      juci/notebook.cc
  2. 10
      juci/notebook.h

263
juci/notebook.cc

@ -1,8 +1,5 @@
#include <thread>
#include "notebook.h" #include "notebook.h"
Notebook::Model::Model() { Notebook::Model::Model() {
cc_extension_ = ".cc"; cc_extension_ = ".cc";
h_extension_ = ".h"; h_extension_ = ".h";
@ -15,98 +12,159 @@ Notebook::View::View(){
Notebook::Controller::Controller(Keybindings::Controller& keybindings, Notebook::Controller::Controller(Keybindings::Controller& keybindings,
Source::Config& source_cfg) : Source::Config& source_cfg) :
source_config_(source_cfg) { source_config_(source_cfg) {
OnNewPage("juCi++"); OnNewPage("juCi++");
refClipboard_ = Gtk::Clipboard::get(); refClipboard_ = Gtk::Clipboard::get();
keybindings.action_group_menu()->add(Gtk::Action::create("FileMenu", CreateKeybindings(keybindings);
Gtk::Stock::FILE)); }// Constructor
/* File->New files */
void Notebook::Controller::CreateKeybindings(Keybindings::Controller
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewStandard", &keybindings){
Gtk::Stock::NEW, keybindings.action_group_menu()->
"New empty file", add(Gtk::Action::create("FileMenu",
"Create a new file"), Gtk::Stock::FILE));
[this]() {
is_new_file_ = true; keybindings.action_group_menu()->
OnFileNewEmptyfile(); add(Gtk::Action::create("FileNewStandard",
}); Gtk::Stock::NEW,
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewCC", "New empty file",
"New cc file"), "Create a new file"),
Gtk::AccelKey(keybindings.config_ [this]() {
.key_map()["new_cc_file"]), is_new_file_ = true;
[this]() { OnFileNewEmptyfile();
is_new_file_ = true; });
OnFileNewCCFile(); keybindings.action_group_menu()->
}); add(Gtk::Action::create("FileNewCC",
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewH", "New cc file"),
"New h file"), Gtk::AccelKey(keybindings.config_
Gtk::AccelKey(keybindings.config_ .key_map()["new_cc_file"]),
.key_map()["new_h_file"]), [this]() {
[this]() { is_new_file_ = true;
is_new_file_ = true; OnFileNewCCFile();
OnFileNewHeaderFile(); });
}); keybindings.action_group_menu()->
keybindings.action_group_menu()->add(Gtk::Action::create("WindowCloseTab", add(Gtk::Action::create("FileNewH",
"Close tab"), "New h file"),
Gtk::AccelKey(keybindings.config_ Gtk::AccelKey(keybindings.config_
.key_map()["close_tab"]), .key_map()["new_h_file"]),
[this]() { [this]() {
OnCloseCurrentPage(); is_new_file_ = true;
}); OnFileNewHeaderFile();
keybindings.action_group_menu()->add(Gtk::Action::create("EditFind", });
Gtk::Stock::FIND), keybindings.action_group_menu()->
[this]() { add(Gtk::Action::create("WindowCloseTab",
is_new_file_ = false; "Close tab"),
OnEditSearch(); Gtk::AccelKey(keybindings.config_
//TODO(Oyvang, Zalox, Forgi)Create function OnEditFind(); .key_map()["close_tab"]),
}); [this]() {
keybindings.action_group_menu()->add(Gtk::Action::create("EditCopy", OnCloseCurrentPage();
Gtk::Stock::COPY), });
[this]() { keybindings.action_group_menu()->
OnEditCopy(); add(Gtk::Action::create("EditFind",
}); Gtk::Stock::FIND),
keybindings.action_group_menu()->add(Gtk::Action::create("EditCut", [this]() {
Gtk::Stock::CUT), is_new_file_ = false;
[this]() { OnEditSearch();
OnEditCut(); //TODO(Oyvang, Zalox, Forgi)Create function OnEditFind();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("EditPaste", keybindings.action_group_menu()->
Gtk::Stock::PASTE), add(Gtk::Action::create("EditCopy",
[this]() { Gtk::Stock::COPY),
OnEditPaste(); [this]() {
}); OnEditCopy();
entry_.view_.entry().signal_activate().connect( });
[this]() { keybindings.action_group_menu()->
if(is_new_file_){ add(Gtk::Action::create("EditCut",
OnNewPage(entry_.text()); Gtk::Stock::CUT),
entry_.OnHideEntries(is_new_file_); [this]() {
}else{ OnEditCut();
Search(true); });
} keybindings.action_group_menu()->
}); add(Gtk::Action::create("EditPaste",
entry_.button_apply().signal_clicked().connect( Gtk::Stock::PASTE),
[this]() { [this]() {
OnNewPage(entry_.text()); OnEditPaste();
entry_.OnHideEntries(is_new_file_); });
}); keybindings.action_group_hidden()->
entry_.button_close().signal_clicked().connect( add(Gtk::Action::create("EditPaste",
[this]() { Gtk::Stock::PASTE),
entry_.OnHideEntries(is_new_file_); [this]() {
}); OnEditPaste();
entry_.button_next().signal_clicked().connect( });
[this]() { entry_.view_.entry().signal_activate().
Search(true); connect(
}); [this]() {
entry_.button_prev().signal_clicked().connect( if(is_new_file_){
[this]() { OnNewPage(entry_.text());
Search(false); 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 }
void Notebook::Controller::GeneratePopup(std::vector<string> items){
Gtk::ScrolledWindow popup_scroll_;
Gtk::ListViewText listview_(1,false,Gtk::SelectionMode::SELECTION_SINGLE);
Gtk::Dialog popup_("",true);
listview_.set_enable_search(false);
listview_.set_hscroll_policy(Gtk::ScrollablePolicy::SCROLL_NATURAL);
listview_.set_activate_on_single_click(true);
listview_.signal_row_activated().
connect([this, &listview_, &popup_](const Gtk::TreeModel::Path& path,
Gtk::TreeViewColumn*) {
std::string t = listview_.get_text(listview_.get_selected()[0]);
CurrentTextView().get_buffer()->insert_at_cursor(t);
popup_.response(Gtk::RESPONSE_DELETE_EVENT);
});
for (auto &i : items) listview_.append(i);
listview_.set_headers_visible(false);
popup_scroll_.add(listview_);
popup_.get_vbox()->pack_start(popup_scroll_);
popup_.set_size_request(80,80);
popup_.show_all();
Gdk::Rectangle temp1, temp2;
CurrentTextView().
get_cursor_locations(
CurrentTextView().
get_buffer()->get_insert()->
get_iter(), temp1, temp2);
int widht = Notebook().get_width()-88;
int height = Notebook().get_height()-180;
int x = temp1.get_x();
int y = temp1.get_y();
if(x>widht){
x = widht; }
if(y>height){
y = height;
}
popup_.move(x, y+88);
popup_.run();
}
bool Notebook::Controller::scroll_event_callback(GdkEventScroll* scroll_event) { bool Notebook::Controller::ScrollEventCallback(GdkEventScroll* scroll_event) {
int page = CurrentPage(); int page = CurrentPage();
int direction_y = scroll_event->delta_y; int direction_y = scroll_event->delta_y;
int direction_x = scroll_event->delta_x; int direction_x = scroll_event->delta_x;
@ -141,8 +199,6 @@ Gtk::Box& Notebook::Controller::entry_view() {
void Notebook::Controller::OnNewPage(std::string name) { void Notebook::Controller::OnNewPage(std::string name) {
OnCreatePage(); OnCreatePage();
std::cout << "oppretta pages" << std::endl;
text_vec_.back()->OnNewEmptyFile(); text_vec_.back()->OnNewEmptyFile();
Notebook().append_page(*editor_vec_.back(), name); Notebook().append_page(*editor_vec_.back(), name);
Notebook().show_all_children(); Notebook().show_all_children();
@ -162,8 +218,8 @@ void Notebook::Controller::OnOpenFile(std::string path) {
} }
void Notebook::Controller::OnCreatePage(){ void Notebook::Controller::OnCreatePage(){
text_vec_.push_back(new Source::Controller(source_config())); // add arguments text_vec_.push_back(new Source::Controller(source_config()));
linenumbers_vec_.push_back(new Source::Controller(source_config())); // add arguments linenumbers_vec_.push_back(new Source::Controller(source_config()));
scrolledline_vec_.push_back(new Gtk::ScrolledWindow()); scrolledline_vec_.push_back(new Gtk::ScrolledWindow());
scrolledtext_vec_.push_back(new Gtk::ScrolledWindow()); scrolledtext_vec_.push_back(new Gtk::ScrolledWindow());
editor_vec_.push_back(new Gtk::HBox()); editor_vec_.push_back(new Gtk::HBox());
@ -198,7 +254,6 @@ void Notebook::Controller::OnCloseCurrentPage() {
scrolledline_vec_.erase(scrolledline_vec_.begin()+page); scrolledline_vec_.erase(scrolledline_vec_.begin()+page);
editor_vec_.erase(editor_vec_.begin()+page); editor_vec_.erase(editor_vec_.begin()+page);
} }
} }
void Notebook::Controller::OnFileNewEmptyfile() { void Notebook::Controller::OnFileNewEmptyfile() {
entry_.OnShowSetFilenName(""); entry_.OnShowSetFilenName("");
@ -307,9 +362,25 @@ void Notebook::Controller::OnBufferChange() {
GdkEventScroll* scroll = new GdkEventScroll; GdkEventScroll* scroll = new GdkEventScroll;
scroll->delta_y = 1.0; scroll->delta_y = 1.0;
scroll->delta_x = 0.0; scroll->delta_x = 0.0;
scroll_event_callback(scroll); ScrollEventCallback(scroll);
delete scroll; delete scroll;
} }
Gtk::TextIter start,end;
std::string word;
start = Buffer(text_vec_.at(page))->get_insert()->get_iter();
end = Buffer(text_vec_.at(page))->get_insert()->get_iter();
start.backward_char();
word = Buffer(text_vec_.at(page))->get_text(start,end);
if( word == "."){
//TODO(Oyvang,Zalox,Forgie) Remove TEST
std::vector<std::string> TEST;
TEST.push_back("toString()");
TEST.push_back("toLower()");
TEST.push_back("toUpper()");
TEST.push_back("fuckOFF()");
TEST.push_back("fuckOFF()");
GeneratePopup(TEST);
}
} }

10
juci/notebook.h

@ -5,6 +5,10 @@
#include "gtkmm.h" #include "gtkmm.h"
#include "entry.h" #include "entry.h"
#include "source.h" #include "source.h"
#include <boost/algorithm/string/case_conv.hpp>
#include <type_traits>
#include <sigc++/sigc++.h>
namespace Notebook { namespace Notebook {
class Model { class Model {
@ -47,14 +51,18 @@ namespace Notebook {
void OnNewPage(std::string name); void OnNewPage(std::string name);
void OnOpenFile(std::string filename); void OnOpenFile(std::string filename);
void OnCreatePage(); void OnCreatePage();
bool scroll_event_callback(GdkEventScroll* scroll_event); bool ScrollEventCallback(GdkEventScroll* scroll_event);
int Pages(); int Pages();
void GeneratePopup(std::vector<string> items);
Gtk::HBox& view(); Gtk::HBox& view();
void Search(bool forward); void Search(bool forward);
const Source::Config& source_config() { return source_config_; } const Source::Config& source_config() { return source_config_; }
protected: protected:
void BufferChangeHandler(Glib::RefPtr<Gtk::TextBuffer> buffer); void BufferChangeHandler(Glib::RefPtr<Gtk::TextBuffer> buffer);
private: private:
void CreateKeybindings(Keybindings::Controller& keybindings);
Glib::RefPtr<Gtk::Builder> m_refBuilder;
Glib::RefPtr<Gio::SimpleActionGroup> refActionGroup;
Source::Config source_config_; Source::Config source_config_;
View view_; View view_;
Model model_; Model model_;

Loading…
Cancel
Save