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. 12
      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 */
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewStandard", void Notebook::Controller::CreateKeybindings(Keybindings::Controller
Gtk::Stock::NEW, &keybindings){
"New empty file", keybindings.action_group_menu()->
"Create a new file"), add(Gtk::Action::create("FileMenu",
[this]() { Gtk::Stock::FILE));
is_new_file_ = true;
OnFileNewEmptyfile(); keybindings.action_group_menu()->
}); add(Gtk::Action::create("FileNewStandard",
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewCC", Gtk::Stock::NEW,
"New cc file"), "New empty file",
Gtk::AccelKey(keybindings.config_ "Create a new file"),
.key_map()["new_cc_file"]), [this]() {
[this]() { is_new_file_ = true;
is_new_file_ = true; OnFileNewEmptyfile();
OnFileNewCCFile(); });
}); keybindings.action_group_menu()->
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewH", add(Gtk::Action::create("FileNewCC",
"New h file"), "New cc file"),
Gtk::AccelKey(keybindings.config_ Gtk::AccelKey(keybindings.config_
.key_map()["new_h_file"]), .key_map()["new_cc_file"]),
[this]() { [this]() {
is_new_file_ = true; is_new_file_ = true;
OnFileNewHeaderFile(); OnFileNewCCFile();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("WindowCloseTab", keybindings.action_group_menu()->
"Close tab"), add(Gtk::Action::create("FileNewH",
Gtk::AccelKey(keybindings.config_ "New h file"),
.key_map()["close_tab"]), Gtk::AccelKey(keybindings.config_
[this]() { .key_map()["new_h_file"]),
OnCloseCurrentPage(); [this]() {
}); is_new_file_ = true;
keybindings.action_group_menu()->add(Gtk::Action::create("EditFind", OnFileNewHeaderFile();
Gtk::Stock::FIND), });
[this]() { keybindings.action_group_menu()->
is_new_file_ = false; add(Gtk::Action::create("WindowCloseTab",
OnEditSearch(); "Close tab"),
//TODO(Oyvang, Zalox, Forgi)Create function OnEditFind(); Gtk::AccelKey(keybindings.config_
}); .key_map()["close_tab"]),
keybindings.action_group_menu()->add(Gtk::Action::create("EditCopy", [this]() {
Gtk::Stock::COPY), OnCloseCurrentPage();
[this]() { });
OnEditCopy(); keybindings.action_group_menu()->
}); add(Gtk::Action::create("EditFind",
keybindings.action_group_menu()->add(Gtk::Action::create("EditCut", Gtk::Stock::FIND),
Gtk::Stock::CUT), [this]() {
[this]() { is_new_file_ = false;
OnEditCut(); OnEditSearch();
}); //TODO(Oyvang, Zalox, Forgi)Create function OnEditFind();
keybindings.action_group_menu()->add(Gtk::Action::create("EditPaste", });
Gtk::Stock::PASTE), keybindings.action_group_menu()->
[this]() { add(Gtk::Action::create("EditCopy",
OnEditPaste(); Gtk::Stock::COPY),
}); [this]() {
entry_.view_.entry().signal_activate().connect( OnEditCopy();
[this]() { });
if(is_new_file_){ keybindings.action_group_menu()->
OnNewPage(entry_.text()); add(Gtk::Action::create("EditCut",
entry_.OnHideEntries(is_new_file_); Gtk::Stock::CUT),
}else{ [this]() {
Search(true); OnEditCut();
} });
}); keybindings.action_group_menu()->
entry_.button_apply().signal_clicked().connect( add(Gtk::Action::create("EditPaste",
[this]() { Gtk::Stock::PASTE),
OnNewPage(entry_.text()); [this]() {
entry_.OnHideEntries(is_new_file_); OnEditPaste();
}); });
entry_.button_close().signal_clicked().connect( keybindings.action_group_hidden()->
[this]() { add(Gtk::Action::create("EditPaste",
entry_.OnHideEntries(is_new_file_); Gtk::Stock::PASTE),
}); [this]() {
entry_.button_next().signal_clicked().connect( OnEditPaste();
[this]() { });
Search(true); entry_.view_.entry().signal_activate().
}); connect(
entry_.button_prev().signal_clicked().connect( [this]() {
[this]() { if(is_new_file_){
Search(false); OnNewPage(entry_.text());
}); entry_.OnHideEntries(is_new_file_);
}else{
Search(true);
}//Constructor }
});
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);
});
}
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);
}
} }

12
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