Browse Source

Merged

master
Jørgen Lien Sellæg 11 years ago
parent
commit
f32a1b9327
  1. 4
      juci/CMakeLists.txt
  2. 25
      juci/api.cc
  3. 6
      juci/api.h
  4. 5
      juci/api_ext.cc
  5. 13
      juci/config.cc
  6. 131
      juci/directories.cc
  7. 2
      juci/directories.h
  8. 4
      juci/notebook.cc
  9. 1
      juci/notebook.h
  10. 6
      juci/plugins.py
  11. 96
      juci/terminal.cc
  12. 9
      juci/terminal.h
  13. 370
      juci/window.cc
  14. 1
      juci/window.h

4
juci/CMakeLists.txt

@ -132,8 +132,8 @@ link_directories(
${LIBCLANG_LIBRARY_DIRS} ${LIBCLANG_LIBRARY_DIRS}
) )
#module: #module:
set_target_properties(${module} PROPERTIES PREFIX "" set_target_properties(${module} PROPERTIES PREFIX "")
LIBRARY_OUTPUT_DIRECTORY "/usr/lib/python2.7/dist-packages/") # LIBRARY_OUTPUT_DIRECTORY "/usr/lib/python2.7/dist-packages/")
target_link_libraries(${module} ${PYTHON_LIBRARIES} ${Boost_LIBRARIES}) target_link_libraries(${module} ${PYTHON_LIBRARIES} ${Boost_LIBRARIES})
#executable: #executable:
target_link_libraries(${project_name} ${LIVCLANG_LIBRARIES} ${LCL_LIBRARIES} ${GTKMM_LIBRARIES} ${Boost_LIBRARIES} ${PYTHON_LIBRARIES}) target_link_libraries(${project_name} ${LIVCLANG_LIBRARIES} ${LCL_LIBRARIES} ${GTKMM_LIBRARIES} ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})

25
juci/api.cc

@ -5,6 +5,20 @@ Notebook::Controller* PluginApi::notebook_;
///////////////////////////// /////////////////////////////
//// API ServiceProvider //// //// API ServiceProvider ////
///////////////////////////// /////////////////////////////
PluginApi::PluginApi(Menu::Controller& menu_ctl_,
Notebook::Controller& notebook_ctl_) {
menu_ = &menu_ctl_;
notebook_ = &notebook_ctl_;
InitPlugins();
}
PluginApi::~PluginApi() {
delete menu_;
delete notebook_;
menu_ = NULL;
notebook_ = NULL;
}
std::string PluginApi::ProjectPath() { std::string PluginApi::ProjectPath() {
int MAXPATHLEN = 50; int MAXPATHLEN = 50;
char temp[MAXPATHLEN]; char temp[MAXPATHLEN];
@ -107,7 +121,7 @@ void libjuci::ReplaceWord(const std::string word) {
} }
void libjuci::ReplaceLine(const std::string line) { void libjuci::ReplaceLine(const std::string line) {
std::cout << "unimplemented function: 'libjuci::ReplaceLine()' called" std::cout << "unimplemented: " << __func__ << " called"
<< std::endl; << std::endl;
} }
std::string libjuci::GetWord() { std::string libjuci::GetWord() {
@ -201,16 +215,7 @@ void libjuci::IterToWordEnd(Gtk::TextIter &iter) {
} }
Glib::RefPtr<Gtk::TextBuffer> libjuci::BufferFromNotebook() { Glib::RefPtr<Gtk::TextBuffer> libjuci::BufferFromNotebook() {
// finding focused view
// int i = 0;
// while (!PluginApi::notebook_->source_vec_.at(i)->view().has_focus()) {
// i++;
// while(!PluginApi::notebook_->CurrentTextView().has_focus()) {
// i++;
// }
return Glib::RefPtr<Gtk::TextBuffer>(PluginApi::notebook_ return Glib::RefPtr<Gtk::TextBuffer>(PluginApi::notebook_
// ->source_vec_.at(i)
// ->view().get_buffer());
->CurrentTextView().get_buffer()); ->CurrentTextView().get_buffer());
} }

6
juci/api.h

@ -12,6 +12,8 @@
//////////////////// ////////////////////
class PluginApi { class PluginApi {
public: public:
PluginApi(Menu::Controller&, Notebook::Controller&);
~PluginApi();
static Menu::Controller* menu_; static Menu::Controller* menu_;
static Notebook::Controller* notebook_; static Notebook::Controller* notebook_;
static void InitPlugins(); static void InitPlugins();
@ -25,7 +27,6 @@ public:
const std::string menu_func_name, const std::string menu_func_name,
const std::string plugin_path, const std::string plugin_path,
const std::string menu_keybinding); const std::string menu_keybinding);
// text-buffer functions
static void ReplaceWord(const std::string word); static void ReplaceWord(const std::string word);
static void ReplaceLine(const std::string line); static void ReplaceLine(const std::string line);
protected: protected:
@ -64,11 +65,10 @@ namespace libjuci {
namespace bp = boost::python; namespace bp = boost::python;
bp::api::object OpenPythonScript(const std::string path, bp::api::object OpenPythonScript(const std::string path,
bp::api::object python_name_space); bp::api::object python_name_space);
void LoadPlugin(const std::string& plugin_name); void LoadPlugin(const std::string& plugin_name);
void LoadPluginFunction(const std::string &function_name, void LoadPluginFunction(const std::string &function_name,
const std::string &plugin_path); const std::string &plugin_path);
void InitPlugin(const std::string& plugin_path); void InitPlugin(const std::string& plugin_path);
} // libjuci } // namespace libjuci
#endif // JUCI_API_H_ #endif // JUCI_API_H_

5
juci/api_ext.cc

@ -12,7 +12,4 @@ BOOST_PYTHON_MODULE(juci_to_python_api) {
def("replaceLine", &libjuci::ReplaceLine); def("replaceLine", &libjuci::ReplaceLine);
def("replaceWord", &libjuci::ReplaceWord); def("replaceWord", &libjuci::ReplaceWord);
def("getWord", &libjuci::GetWord); def("getWord", &libjuci::GetWord);
} // module::juci_to_python_api
//something more
}// module::juci_to_python_api

13
juci/config.cc

@ -6,20 +6,17 @@ MainConfig::MainConfig() :
GenerateSource(); GenerateSource();
GenerateKeybindings(); GenerateKeybindings();
GenerateDirectoryFilter(); GenerateDirectoryFilter();
// keybindings_cfg_ = cfg_.get_child("keybindings");
// notebook_cfg_ = cfg_.get_child("notebook");
// menu_cfg_ = cfg_.get_child("menu");
} }
void MainConfig::GenerateSource() { void MainConfig::GenerateSource() {
boost::property_tree::ptree source_json = cfg_.get_child("source"); boost::property_tree::ptree source_json = cfg_.get_child("source");
boost::property_tree::ptree syntax_json = source_json.get_child("syntax"); boost::property_tree::ptree syntax_json = source_json.get_child("syntax");
boost::property_tree::ptree colors_json = source_json.get_child("colors"); boost::property_tree::ptree colors_json = source_json.get_child("colors");
for ( auto &i : colors_json ) { for (auto &i : colors_json) {
source_cfg_.InsertTag(i.first, i.second.get_value<std::string>()); source_cfg_.InsertTag(i.first, i.second.get_value<std::string>());
} }
for ( auto &i : syntax_json ) { for (auto &i : syntax_json) {
source_cfg_.InsertType(i.first, i.second.get_value<std::string>()); source_cfg_.InsertType(i.first, i.second.get_value<std::string>());
} }
} }
@ -40,9 +37,9 @@ void MainConfig::GenerateDirectoryFilter() {
boost::property_tree::ptree dir_json = cfg_.get_child("directoryfilter"); boost::property_tree::ptree dir_json = cfg_.get_child("directoryfilter");
boost::property_tree::ptree ignore_json = dir_json.get_child("ignore"); boost::property_tree::ptree ignore_json = dir_json.get_child("ignore");
boost::property_tree::ptree except_json = dir_json.get_child("exceptions"); boost::property_tree::ptree except_json = dir_json.get_child("exceptions");
for ( auto &i : except_json ) for ( auto &i : except_json )
dir_cfg_.AddException(i.second.get_value<std::string>()); dir_cfg_.AddException(i.second.get_value<std::string>());
for ( auto &i : ignore_json ) for ( auto &i : ignore_json )
dir_cfg_.AddIgnore(i.second.get_value<std::string>()); dir_cfg_.AddIgnore(i.second.get_value<std::string>());
} }

131
juci/directories.cc

@ -11,7 +11,7 @@ open_folder(const boost::filesystem::path& dir_path) {
m_refTreeModel = Gtk::TreeStore::create(view()); m_refTreeModel = Gtk::TreeStore::create(view());
m_TreeView.set_model(m_refTreeModel); m_TreeView.set_model(m_refTreeModel);
m_TreeView.remove_all_columns(); m_TreeView.remove_all_columns();
std::string project_name = get_project_name(dir_path); std::string project_name = GetCmakeVarValue(dir_path, "project");
m_TreeView.append_column(project_name, view().m_col_name); m_TreeView.append_column(project_name, view().m_col_name);
int row_id = 0; int row_id = 0;
Gtk::TreeModel::Row row; Gtk::TreeModel::Row row;
@ -77,79 +77,80 @@ int Directories::Controller::count(const std::string path) {
if (path[i] == '/') count++; if (path[i] == '/') count++;
return count; return count;
} }
std::string Directories::Controller::
get_project_name(const boost::filesystem::path& dir_path) { std::string Directories::Controller::
std::string project_name; GetCmakeVarValue(const boost::filesystem::path& dir_path, std::string command_name) {
std::string project_name_var; std::string project_name;
boost::filesystem::directory_iterator end_itr; std::string project_name_var;
for (boost::filesystem::directory_iterator itr( dir_path ); boost::filesystem::directory_iterator end_itr;
itr != end_itr; for (boost::filesystem::directory_iterator itr( dir_path );
++itr ) { itr != end_itr;
if (itr->path().filename().string() == "CMakeLists.txt") { ++itr ) {
std::ifstream ifs(itr->path().string()); if (itr->path().filename().string() == "CMakeLists.txt") {
std::string line; std::ifstream ifs(itr->path().string());
while (std::getline(ifs, line)) { std::string line;
if (line.find("project(", 0) != std::string::npos while (std::getline(ifs, line)) {
|| line.find("project (", 0) != std::string::npos ) { if (line.find(command_name+"(", 0) != std::string::npos
size_t variabel_start = line.find("{", 0); || line.find(command_name+" (", 0) != std::string::npos ) {
size_t variabel_end = line.find("}", variabel_start); size_t variable_start = line.find("{", 0);
project_name_var = line.substr(variabel_start+1, size_t variable_end = line.find("}", variable_start);
(variabel_end)-variabel_start-1); project_name_var = line.substr(variable_start+1,
boost::algorithm::trim(project_name_var); (variable_end)-variable_start-1);
if (variabel_start == std::string::npos) { // not a variabel boost::algorithm::trim(project_name_var);
variabel_start = line.find("(", 0); if (variable_start == std::string::npos) { // not a variable
variabel_end = line.find(")", variabel_start); variable_start = line.find("(", 0);
return line.substr(variabel_start+1, variable_end = line.find(")", variable_start);
(variabel_end)-variabel_start-1); return line.substr(variable_start+1,
(variable_end)-variable_start-1);
}
break;
} }
break;
} }
} std::ifstream ifs2(itr->path().string());
std::ifstream ifs2(itr->path().string()); while (std::getline(ifs2, line)) {
while (std::getline(ifs2, line)) { if (line.find("set(", 0) != std::string::npos
if (line.find("set(", 0) != std::string::npos || line.find("set (", 0) != std::string::npos) {
|| line.find("set (", 0) != std::string::npos) { if( line.find(project_name_var, 0) != std::string::npos) {
if( line.find(project_name_var, 0) != std::string::npos) { size_t variable_start = line.find(project_name_var, 0)
size_t variabel_start = line.find(project_name_var, 0) +project_name_var.length();
+project_name_var.length(); size_t variable_end = line.find(")", variable_start);
size_t variabel_end = line.find(")", variabel_start); project_name = line.substr(variable_start+1,
project_name = line.substr(variabel_start+1, variable_end-variable_start-1);
variabel_end-variabel_start-1); boost::algorithm::trim(project_name);
boost::algorithm::trim(project_name); return project_name;
return project_name; }
} }
} }
break;
} }
break;
} }
return "no project name";
} }
return "no project name";
}
Directories::Config::Config() { Directories::Config::Config() {
} }
Directories::Config::Config(Directories::Config& cfg) : Directories::Config::Config(Directories::Config& cfg) :
ignore_list_(cfg.ignore_list()), exception_list_(cfg.exception_list()) { ignore_list_(cfg.ignore_list()), exception_list_(cfg.exception_list()) {
} }
void Directories::Config::AddIgnore(std::string filter) { void Directories::Config::AddIgnore(std::string filter) {
ignore_list_.push_back(filter); ignore_list_.push_back(filter);
} }
void Directories::Config::AddException(std::string filter) { void Directories::Config::AddException(std::string filter) {
exception_list_.push_back(filter); exception_list_.push_back(filter);
} }
bool Directories::Config::IsIgnored(std::string str) { bool Directories::Config::IsIgnored(std::string str) {
for ( auto &i : ignore_list() ) for ( auto &i : ignore_list() )
if (str.find(i, 0) != std::string::npos) if (str.find(i, 0) != std::string::npos)
return true; return true;
return false; return false;
} }
bool Directories::Config::IsException(std::string str) { bool Directories::Config::IsException(std::string str) {
for ( std::string &i : exception_list() ) for ( std::string &i : exception_list() )
if (i == str) if (i == str)
return true; return true;
return false; return false;
} }

2
juci/directories.h

@ -51,7 +51,7 @@ namespace Directories {
void open_folder(const boost::filesystem::path& dir_path); void open_folder(const boost::filesystem::path& dir_path);
void list_dirs(const boost::filesystem::path& dir_path, void list_dirs(const boost::filesystem::path& dir_path,
Gtk::TreeModel::Row &row, unsigned depth); Gtk::TreeModel::Row &row, unsigned depth);
std::string get_project_name(const boost::filesystem::path& dir_path); std::string GetCmakeVarValue(const boost::filesystem::path& dir_path, std::string command_name);
int count(const std::string path); int count(const std::string path);
// Child widgets: // Child widgets:

4
juci/notebook.cc

@ -564,6 +564,10 @@ void Notebook::Controller::PopupSetSize(Gtk::ScrolledWindow &scroll,
} }
} }
std::string Notebook::Controller::CurrentPagePath(){
return text_vec_.at(CurrentPage())->path();
}
void Notebook::Controller::FindPopupPosition(Gtk::TextView& textview, void Notebook::Controller::FindPopupPosition(Gtk::TextView& textview,
int popup_x, int popup_x,
int popup_y, int popup_y,

1
juci/notebook.h

@ -40,6 +40,7 @@ namespace Notebook {
int CurrentPage(); int CurrentPage();
Gtk::Box& entry_view(); Gtk::Box& entry_view();
Gtk::Notebook& Notebook(); Gtk::Notebook& Notebook();
std::string CurrentPagePath();
void OnBufferChange(); void OnBufferChange();
void BufferChangeHandler(Glib::RefPtr<Gtk::TextBuffer> void BufferChangeHandler(Glib::RefPtr<Gtk::TextBuffer>
buffer); buffer);

6
juci/plugins.py

@ -1,9 +1,11 @@
#!/usr/bin/python #!/usr/bin/python
#plugin handler #plugin handler
import juci_to_python_api as juci, os, glob import sys, os, glob
cwd = os.getcwd()
sys.path.append(cwd)
import juci_to_python_api as juci
def loadplugins(): def loadplugins():
cwd = os.getcwd()
plugin_files = glob.glob(cwd+"/plugins/*.py") plugin_files = glob.glob(cwd+"/plugins/*.py")
for current_file in plugin_files: for current_file in plugin_files:
juci.initPlugin(current_file) juci.initPlugin(current_file)

96
juci/terminal.cc

@ -2,14 +2,12 @@
#include <iostream> #include <iostream>
#include <thread> #include <thread>
Terminal::View::View(){ Terminal::View::View(){
scrolledwindow_.add(textview_); scrolledwindow_.add(textview_);
scrolledwindow_.set_size_request(-1,150); scrolledwindow_.set_size_request(-1,150);
view_.add(scrolledwindow_); view_.add(scrolledwindow_);
textview_.set_editable(false); textview_.set_editable(false);
//Pango::TabArray tabsize;
//tabsize.set_tab(200,Pango::TAB_LEFT, 200);
//textview_.set_tabs(tabsize);
} }
@ -17,59 +15,61 @@ Terminal::Controller::Controller() {
folder_command_ = ""; folder_command_ = "";
} }
void Terminal::Controller::SetFolderCommand(std::string path) { void Terminal::Controller::SetFolderCommand( boost::filesystem::path
int pos = path.find_last_of("/\\"); CMake_path) {
path.erase(path.begin()+pos,path.end()); path_ = CMake_path.string();
folder_command_ = "cd "+ path + "; "; folder_command_ = "cd "+ path_ + "; ";
}
bool Terminal::Controller::Compile(){
if (running.try_lock()) {
std::thread execute([=]() {
Terminal().get_buffer()->set_text("");
ExecuteCommand("cmake .");
if (ExistInConsole(cmake_sucsess)){
ExecuteCommand("make");
}
});
execute.detach();
running.unlock();
if (ExistInConsole(make_built)) return true;
}
PrintMessage("juCi++ ERROR: Failed to compile project in directory"
+ path_ + "\n");
return false;
} }
void Terminal::Controller::CompileAndRun(std::string project_name) { void Terminal::Controller::Run(std::string executable) {
if (folder_command_=="") { if (running.try_lock()) {
PrintMessage("juCi++ ERROR: Can not find project's CMakeList.txt\n"); std::thread execute([=]() {
} else { ExecuteCommand("./"+executable);
if (running.try_lock()) { });
std::thread execute([=]() { execute.detach();
Terminal().get_buffer()->set_text(""); running.unlock();
ExecuteCommand("cmake ."); }
if (ExistInConsole(cmake_sucsess)){
ExecuteCommand("make");
if (ExistInConsole(make_built)){
if (FindExecutable(project_name)) {
ExecuteCommand("./"+project_name);
} else {
PrintMessage("juCi++ ERROR: Can not find Executable\n");
}
}
}
});
execute.detach();
running.unlock();
}
}
} }
void Terminal::Controller::PrintMessage(std::string message){ void Terminal::Controller::PrintMessage(std::string message){
Terminal().get_buffer()-> Terminal().get_buffer()->
insert(Terminal().get_buffer()-> end(),"> "+message); insert(Terminal().get_buffer()-> end(),"> "+message);
} }
bool Terminal::Controller::FindExecutable(std::string executable) { // bool Terminal::Controller::FindExecutable(std::string executable) {
std::string build = Terminal().get_buffer()->get_text(); // std::string build = Terminal().get_buffer()->get_text();
double pos = build.find(make_built); // double pos = build.find(make_built);
Gtk::TextIter start = Terminal().get_buffer()->get_iter_at_offset(pos); // Gtk::TextIter start = Terminal().get_buffer()->get_iter_at_offset(pos);
Gtk::TextIter end = Terminal().get_buffer()->get_iter_at_offset(pos); // Gtk::TextIter end = Terminal().get_buffer()->get_iter_at_offset(pos);
while (!end.ends_line()) { // while (!end.ends_line()) {
end.forward_char(); // end.forward_char();
} // }
build = Terminal().get_buffer()->get_text(start, end); // build = Terminal().get_buffer()->get_text(start, end);
pos = build.find_last_of(" "); // pos = build.find_last_of(" ");
std::cout << "FINNER NY POS" << std::endl; // build = build.substr(pos+1);
build = build.substr(pos+1); // std::cout << "DEBUG: BUILD TARGET = "<< build << std::endl;
std::cout <<"BUILD TARGET = "<< build << std::endl; // std::cout << "EDEBUG: ECUTABLE FILE = "<< executable << std::endl;
std::cout << "EXECUTABLE FILE = "<< executable << std::endl; // if(build != executable) return false;
if(build != executable) return false; // return true;
return true; // }
}
bool Terminal::Controller::ExistInConsole(std::string string) { bool Terminal::Controller::ExistInConsole(std::string string) {
double pos = Terminal().get_buffer()-> double pos = Terminal().get_buffer()->

9
juci/terminal.h

@ -3,6 +3,7 @@
#include <mutex> #include <mutex>
#include "gtkmm.h" #include "gtkmm.h"
#include <boost/filesystem.hpp>
namespace Terminal { namespace Terminal {
@ -22,16 +23,18 @@ namespace Terminal {
Controller(); Controller();
Gtk::HBox& view() {return view_.view();} Gtk::HBox& view() {return view_.view();}
Gtk::TextView& Terminal(){return view_.textview();} Gtk::TextView& Terminal(){return view_.textview();}
void SetFolderCommand(std::string path); void SetFolderCommand(boost::filesystem::path CMake_path);
void CompileAndRun(std::string project_name); void Run(std::string executable);
bool Compile();
private: private:
void ExecuteCommand(std::string command); void ExecuteCommand(std::string command);
bool OnButtonRealeaseEvent(GdkEventKey* key); bool OnButtonRealeaseEvent(GdkEventKey* key);
bool ExistInConsole(std::string string); bool ExistInConsole(std::string string);
bool FindExecutable(std::string executable); // bool FindExecutable(std::string executable);
void PrintMessage(std::string message); void PrintMessage(std::string message);
Terminal::View view_; Terminal::View view_;
std::string folder_command_; std::string folder_command_;
std::string path_;
std::mutex running; std::mutex running;
const std::string cmake_sucsess = "Build files have been written to:"; const std::string cmake_sucsess = "Build files have been written to:";
const std::string make_built = "Built target"; const std::string make_built = "Built target";

370
juci/window.cc

@ -1,182 +1,188 @@
#include "window.h" #include "window.h"
#include "logging.h" #include "logging.h"
Window::Window() : Window::Window() :
window_box_(Gtk::ORIENTATION_VERTICAL), window_box_(Gtk::ORIENTATION_VERTICAL),
main_config_(), main_config_(),
keybindings_(main_config_.keybindings_cfg()), keybindings_(main_config_.keybindings_cfg()),
notebook_(this,keybindings(), main_config_.source_cfg(), main_config_.dir_cfg()), notebook_(this,keybindings(),
menu_(keybindings()) { main_config_.source_cfg(),
INFO("Creating window"); main_config_.dir_cfg()),
set_title("juCi++"); menu_(keybindings()),
set_default_size(600, 400); api_(menu_, notebook_) {
add(window_box_); INFO("Create Window");
keybindings_.action_group_menu()->add(Gtk::Action::create("FileQuit", set_title("juCi++");
Gtk::Stock::QUIT), set_default_size(600, 400);
[this]() { add(window_box_);
OnWindowHide(); keybindings_.action_group_menu()->add(Gtk::Action::create("FileQuit",
}); Gtk::Stock::QUIT),
keybindings_.action_group_menu()->add(Gtk::Action::create("FileOpenFile", [this]() {
Gtk::Stock::OPEN), OnWindowHide();
[this]() { });
OnOpenFile(); keybindings_.action_group_menu()->add(Gtk::Action::create("FileOpenFile",
}); Gtk::Stock::OPEN),
keybindings_.action_group_menu()->add(Gtk::Action::create("FileOpenFolder", [this]() {
"Open folder"), OnOpenFile();
Gtk::AccelKey(keybindings_.config_ });
.key_map()["open_folder"]), keybindings_.action_group_menu()->add(Gtk::Action::create("FileOpenFolder",
[this]() { "Open folder"),
OnFileOpenFolder(); Gtk::AccelKey(keybindings_.config_
}); .key_map()["open_folder"]),
[this]() {
keybindings_.action_group_menu()->add(Gtk::Action::create("FileSaveAs", OnFileOpenFolder();
"Save as"), });
Gtk::AccelKey(keybindings_.config_
.key_map()["save_as"]), keybindings_.action_group_menu()->add(Gtk::Action::create("FileSaveAs",
[this]() { "Save as"),
notebook_.OnSaveFile(); Gtk::AccelKey(keybindings_.config_
}); .key_map()["save_as"]),
[this]() {
keybindings_.action_group_menu()->add(Gtk::Action::create("FileSave", notebook_.OnSaveFile();
"Save"), });
Gtk::AccelKey(keybindings_.config_
.key_map()["save"]), keybindings_.action_group_menu()->add(Gtk::Action::create("FileSave",
[this]() { "Save"),
notebook_.OnSaveFile(); Gtk::AccelKey(keybindings_.config_
}); .key_map()["save"]),
[this]() {
keybindings_.action_group_menu()->add(Gtk::Action::create("ProjectCompileAndRun", notebook_.OnSaveFile();
"Compile And Run"), });
Gtk::AccelKey(keybindings_.config_ keybindings_.
.key_map()["compile_and_run"]), action_group_menu()->
[this]() { add(Gtk::Action::create("ProjectCompileAndRun",
terminal_. "Compile And Run"),
SetFolderCommand("/home/gm/ClionProjects/testi/CM.txt"); Gtk::AccelKey(keybindings_.config_
std::string p = notebook_.directories().get_project_name("/home/gm/ClionProjects/testi"); .key_map()["compile_and_run"]),
terminal_.CompileAndRun(p); [this]() {
}); notebook_.OnSaveFile();
std::string path = notebook_.CurrentPagePath();
keybindings_.action_group_menu()->add(Gtk::Action::create("ProjectCompile", terminal_.SetFolderCommand(path);
"Compile"), if(terminal_.Compile()) {
Gtk::AccelKey(keybindings_.config_ std::string executable = notebook_.directories().
.key_map()["compile"]), GetCmakeVarValue(path,"add_executable");
[this]() { terminal_.Run(executable);
terminal_. }
SetFolderCommand("/home/gm/ClionProjects/testi/CM.txt"); });
std::string p = notebook_.directories().get_project_name("/home/gm/ClionProjects/testi");
terminal_.CompileAndRun(p); keybindings_.
}); action_group_menu()->
add(Gtk::Action::create("ProjectCompile",
this->signal_button_release_event(). "Compile"),
connect(sigc::mem_fun(*this,&Window::OnMouseRelease),false); Gtk::AccelKey(keybindings_.config_
terminal_.Terminal().signal_button_release_event(). .key_map()["compile"]),
connect(sigc::mem_fun(*this,&Window::OnMouseRelease),false); [this]() {
notebook_.OnSaveFile();
PluginApi::menu_ = &menu_; std::string path =
PluginApi::notebook_ = &notebook_; notebook_.CurrentPagePath();
PluginApi::InitPlugins(); terminal_.SetFolderCommand(path);
terminal_.Compile();
add_accel_group(keybindings_.ui_manager_menu()->get_accel_group()); });
add_accel_group(keybindings_.ui_manager_hidden()->get_accel_group());
keybindings_.BuildMenu(); this->signal_button_release_event().
connect(sigc::mem_fun(*this,&Window::OnMouseRelease),false);
window_box_.pack_start(menu_.view(), Gtk::PACK_SHRINK); terminal_.Terminal().signal_button_release_event().
window_box_.pack_start(notebook_.entry_view(), Gtk::PACK_SHRINK); connect(sigc::mem_fun(*this,&Window::OnMouseRelease),false);
window_box_.pack_start(notebook_.view());
window_box_.pack_end(terminal_.view(),Gtk::PACK_SHRINK); add_accel_group(keybindings_.ui_manager_menu()->get_accel_group());
show_all_children(); add_accel_group(keybindings_.ui_manager_hidden()->get_accel_group());
INFO("Window created"); keybindings_.BuildMenu();
} // Window constructor
window_box_.pack_start(menu_.view(), Gtk::PACK_SHRINK);
void Window::OnWindowHide() { window_box_.pack_start(notebook_.entry_view(), Gtk::PACK_SHRINK);
hide(); window_box_.pack_start(notebook_.view());
} window_box_.pack_end(terminal_.view(),Gtk::PACK_SHRINK);
void Window::OnFileOpenFolder() { show_all_children();
Gtk::FileChooserDialog dialog("Please choose a folder", INFO("Window created");
Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); } // Window constructor
dialog.set_transient_for(*this); void Window::OnWindowHide() {
//Add response buttons the the dialog: hide();
dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL); }
dialog.add_button("Select", Gtk::RESPONSE_OK); void Window::OnFileOpenFolder() {
Gtk::FileChooserDialog dialog("Please choose a folder",
int result = dialog.run(); Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
//Handle the response: dialog.set_transient_for(*this);
switch(result) //Add response buttons the the dialog:
{ dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
case(Gtk::RESPONSE_OK): dialog.add_button("Select", Gtk::RESPONSE_OK);
{
std::cout << "Folder selected: " << dialog.get_filename() int result = dialog.run();
<< std::endl;
notebook_.directories().open_folder(dialog.get_filename()); //Handle the response:
std::cout << dialog.get_filename()<< std::endl; switch(result)
break; {
} case(Gtk::RESPONSE_OK):
case(Gtk::RESPONSE_CANCEL): {
{ std::cout << "Folder selected: " << dialog.get_filename()
std::cout << "Cancel clicked." << std::endl; << std::endl;
break; notebook_.directories().open_folder(dialog.get_filename());
} std::cout << dialog.get_filename()<< std::endl;
default: break;
{ }
std::cout << "Unexpected button clicked." << std::endl; case(Gtk::RESPONSE_CANCEL):
break; {
} std::cout << "Cancel clicked." << std::endl;
} break;
} }
default:
{
void Window::OnOpenFile() { std::cout << "Unexpected button clicked." << std::endl;
Gtk::FileChooserDialog dialog("Please choose a file", break;
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); void Window::OnOpenFile() {
dialog.add_button("_Open", Gtk::RESPONSE_OK); Gtk::FileChooserDialog dialog("Please choose a file",
Gtk::FILE_CHOOSER_ACTION_OPEN);
//Add filters, so that only certain file types can be selected: dialog.set_transient_for(*this);
Glib::RefPtr<Gtk::FileFilter> filter_text = Gtk::FileFilter::create(); dialog.set_position(Gtk::WindowPosition::WIN_POS_CENTER_ALWAYS);
filter_text->set_name("Text files");
filter_text->add_mime_type("text/plain"); //Add response buttons the the dialog:
dialog.add_filter(filter_text); dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
dialog.add_button("_Open", Gtk::RESPONSE_OK);
Glib::RefPtr<Gtk::FileFilter> filter_cpp = Gtk::FileFilter::create();
filter_cpp->set_name("C/C++ files"); //Add filters, so that only certain file types can be selected:
filter_cpp->add_mime_type("text/x-c"); Glib::RefPtr<Gtk::FileFilter> filter_text = Gtk::FileFilter::create();
filter_cpp->add_mime_type("text/x-c++"); filter_text->set_name("Text files");
filter_cpp->add_mime_type("text/x-c-header"); filter_text->add_mime_type("text/plain");
dialog.add_filter(filter_cpp); dialog.add_filter(filter_text);
Glib::RefPtr<Gtk::FileFilter> filter_any = Gtk::FileFilter::create(); Glib::RefPtr<Gtk::FileFilter> filter_cpp = Gtk::FileFilter::create();
filter_any->set_name("Any files"); filter_cpp->set_name("C/C++ files");
filter_any->add_pattern("*"); filter_cpp->add_mime_type("text/x-c");
dialog.add_filter(filter_any); filter_cpp->add_mime_type("text/x-c++");
filter_cpp->add_mime_type("text/x-c-header");
int result = dialog.run(); dialog.add_filter(filter_cpp);
switch (result) { Glib::RefPtr<Gtk::FileFilter> filter_any = Gtk::FileFilter::create();
case(Gtk::RESPONSE_OK): { filter_any->set_name("Any files");
std::cout << "Open clicked." << std::endl; filter_any->add_pattern("*");
std::string path = dialog.get_filename(); dialog.add_filter(filter_any);
std::cout << "File selected: " << path << std::endl; int result = dialog.run();
notebook_.OnOpenFile(path);
break; switch (result) {
} case(Gtk::RESPONSE_OK): {
case(Gtk::RESPONSE_CANCEL): { std::cout << "Open clicked." << std::endl;
std::cout << "Cancel clicked." << std::endl; std::string path = dialog.get_filename();
break;
} std::cout << "File selected: " << path << std::endl;
default: { notebook_.OnOpenFile(path);
std::cout << "Unexpected button clicked." << std::endl; break;
break; }
} case(Gtk::RESPONSE_CANCEL): {
} std::cout << "Cancel clicked." << std::endl;
} break;
bool Window::OnMouseRelease(GdkEventButton *button){ }
return notebook_.OnMouseRelease(button); default: {
} std::cout << "Unexpected button clicked." << std::endl;
break;
}
}
}
bool Window::OnMouseRelease(GdkEventButton *button){
return notebook_.OnMouseRelease(button);
}

1
juci/window.h

@ -22,6 +22,7 @@ public:
Menu::Controller menu_; Menu::Controller menu_;
Notebook::Controller notebook_; Notebook::Controller notebook_;
Terminal::Controller terminal_; Terminal::Controller terminal_;
PluginApi api_;
Keybindings::Controller& keybindings() { return keybindings_; } Keybindings::Controller& keybindings() { return keybindings_; }
private: private:

Loading…
Cancel
Save