Browse Source

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

master
oyvang 11 years ago
parent
commit
4831d91445
  1. 127
      juci/notebook.cc
  2. 10
      juci/notebook.h

127
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,14 +12,20 @@ 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);
}// Constructor
void Notebook::Controller::CreateKeybindings(Keybindings::Controller
&keybindings){
keybindings.action_group_menu()->
add(Gtk::Action::create("FileMenu",
Gtk::Stock::FILE)); Gtk::Stock::FILE));
/* File->New files */
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewStandard", keybindings.action_group_menu()->
add(Gtk::Action::create("FileNewStandard",
Gtk::Stock::NEW, Gtk::Stock::NEW,
"New empty file", "New empty file",
"Create a new file"), "Create a new file"),
@ -30,7 +33,8 @@ source_config_(source_cfg) {
is_new_file_ = true; 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(keybindings.config_ Gtk::AccelKey(keybindings.config_
.key_map()["new_cc_file"]), .key_map()["new_cc_file"]),
@ -38,7 +42,8 @@ source_config_(source_cfg) {
is_new_file_ = true; 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(keybindings.config_ Gtk::AccelKey(keybindings.config_
.key_map()["new_h_file"]), .key_map()["new_h_file"]),
@ -46,36 +51,48 @@ source_config_(source_cfg) {
is_new_file_ = true; is_new_file_ = true;
OnFileNewHeaderFile(); OnFileNewHeaderFile();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("WindowCloseTab", keybindings.action_group_menu()->
add(Gtk::Action::create("WindowCloseTab",
"Close tab"), "Close tab"),
Gtk::AccelKey(keybindings.config_ Gtk::AccelKey(keybindings.config_
.key_map()["close_tab"]), .key_map()["close_tab"]),
[this]() { [this]() {
OnCloseCurrentPage(); OnCloseCurrentPage();
}); });
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; is_new_file_ = false;
OnEditSearch(); 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",
Gtk::Stock::COPY), Gtk::Stock::COPY),
[this]() { [this]() {
OnEditCopy(); OnEditCopy();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("EditCut", keybindings.action_group_menu()->
add(Gtk::Action::create("EditCut",
Gtk::Stock::CUT), Gtk::Stock::CUT),
[this]() { [this]() {
OnEditCut(); OnEditCut();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("EditPaste", keybindings.action_group_menu()->
add(Gtk::Action::create("EditPaste",
Gtk::Stock::PASTE), Gtk::Stock::PASTE),
[this]() { [this]() {
OnEditPaste(); OnEditPaste();
}); });
entry_.view_.entry().signal_activate().connect( keybindings.action_group_hidden()->
add(Gtk::Action::create("EditPaste",
Gtk::Stock::PASTE),
[this]() {
OnEditPaste();
});
entry_.view_.entry().signal_activate().
connect(
[this]() { [this]() {
if(is_new_file_){ if(is_new_file_){
OnNewPage(entry_.text()); OnNewPage(entry_.text());
@ -84,29 +101,70 @@ source_config_(source_cfg) {
Search(true); Search(true);
} }
}); });
entry_.button_apply().signal_clicked().connect( entry_.button_apply().signal_clicked().
connect(
[this]() { [this]() {
OnNewPage(entry_.text()); OnNewPage(entry_.text());
entry_.OnHideEntries(is_new_file_); entry_.OnHideEntries(is_new_file_);
}); });
entry_.button_close().signal_clicked().connect( entry_.button_close().signal_clicked().
connect(
[this]() { [this]() {
entry_.OnHideEntries(is_new_file_); entry_.OnHideEntries(is_new_file_);
}); });
entry_.button_next().signal_clicked().connect( entry_.button_next().signal_clicked().
connect(
[this]() { [this]() {
Search(true); Search(true);
}); });
entry_.button_prev().signal_clicked().connect( entry_.button_prev().signal_clicked().
connect(
[this]() { [this]() {
Search(false); 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