diff --git a/juci/notebook.cc b/juci/notebook.cc index 2179d26..93cf561 100644 --- a/juci/notebook.cc +++ b/juci/notebook.cc @@ -21,11 +21,7 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings){ keybindings.action_group_menu()->add(Gtk::Action::create("FileMenu", Gtk::Stock::FILE)); /* File->New files */ - keybindings.action_group_menu()->add(Gtk::Action::create("FileOpenFile", - Gtk::Stock::OPEN), - [this]() { - OnOpenFile(); - }); + keybindings.action_group_menu()->add(Gtk::Action::create("FileNewStandard", Gtk::Stock::NEW, "New empty file", @@ -136,8 +132,15 @@ void Notebook::Controller::OnEditCut() { } } -void Notebook::Controller::OnOpenFile() { - std::cout << "fired" << std::endl; +void Notebook::Controller::OnOpenFile(std::string name, std::string content){ + scrolledwindow_vec_.push_back(new Gtk::ScrolledWindow()); + source_vec_.push_back(new Source::Controller); + scrolledwindow_vec_.back()->add(source_vec_.back()->view()); + source_vec_.back()->view().get_buffer()->set_text(content); + 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); } diff --git a/juci/notebook.h b/juci/notebook.h index 2e15b57..7afb31f 100644 --- a/juci/notebook.h +++ b/juci/notebook.h @@ -36,7 +36,7 @@ namespace Notebook { void OnEditCopy(); void OnEditPaste(); void OnEditCut(); - void OnOpenFile(); + void OnOpenFile(std::string name, std::string content); }; // class controller } // namespace Notebook diff --git a/juci/window.cc b/juci/window.cc index 38b5da6..2e3942d 100644 --- a/juci/window.cc +++ b/juci/window.cc @@ -12,6 +12,11 @@ Window::Window() : [this]() { OnWindowHide(); }); + keybindings_.action_group_menu()->add(Gtk::Action::create("FileOpenFile", + Gtk::Stock::OPEN), + [this]() { + OnOpenFile(); + }); add_accel_group(keybindings_.ui_manager_menu()->get_accel_group()); add_accel_group(keybindings_.ui_manager_hidden()->get_accel_group()); @@ -23,3 +28,55 @@ Window::Window() : void Window::OnWindowHide() { hide(); } + +void Window::OnOpenFile() { + Gtk::FileChooserDialog dialog("Please choose a file", + Gtk::FILE_CHOOSER_ACTION_OPEN); + dialog.set_transient_for(*this); + dialog.set_position(Gtk::WindowPosition::WIN_POS_CENTER_ALWAYS); + + //Add response buttons the the dialog: + dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL); + dialog.add_button("_Open", Gtk::RESPONSE_OK); + + //Add filters, so that only certain file types can be selected: + Glib::RefPtr filter_text = Gtk::FileFilter::create(); + filter_text->set_name("Text files"); + filter_text->add_mime_type("text/plain"); + dialog.add_filter(filter_text); + + Glib::RefPtr filter_cpp = Gtk::FileFilter::create(); + filter_cpp->set_name("C/C++ files"); + filter_cpp->add_mime_type("text/x-c"); + filter_cpp->add_mime_type("text/x-c++"); + filter_cpp->add_mime_type("text/x-c-header"); + dialog.add_filter(filter_cpp); + + Glib::RefPtr filter_any = Gtk::FileFilter::create(); + filter_any->set_name("Any files"); + filter_any->add_pattern("*"); + dialog.add_filter(filter_any); + + int result = dialog.run(); + + switch (result) { + case(Gtk::RESPONSE_OK): { + std::cout << "Open clicked." << std::endl; + + std::string path = dialog.get_filename(); + std::cout << "File selected: " << path << std::endl; + Source::Controller sourcefile; + notebook_.OnOpenFile(path, sourcefile.OnOpenFile(path)); + break; + } + case(Gtk::RESPONSE_CANCEL): { + std::cout << "Cancel clicked." << std::endl; + break; + } + default: { + std::cout << "Unexpected button clicked." << std::endl; + break; + } + } + +} diff --git a/juci/window.h b/juci/window.h index ba275a7..d002781 100644 --- a/juci/window.h +++ b/juci/window.h @@ -17,6 +17,7 @@ private: //signal handlers void OnWindowHide(); + void OnOpenFile(); }; #endif // JUCI_WINDOW_H_