From f9e22d55f75e772b9c302442c8158be34650d12a Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 20 Mar 2016 13:52:52 +0100 Subject: [PATCH] build now created in get_language so that language can be chosen based on build management system found --- src/project.cc | 23 ++++++++++++----------- src/project.h | 12 ++++++------ 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/project.cc b/src/project.cc index f581617..5d097d0 100644 --- a/src/project.cc +++ b/src/project.cc @@ -98,29 +98,30 @@ void Project::debug_update_stop() { } std::unique_ptr Project::get_language() { + std::unique_ptr build; + if(Notebook::get().get_current_page()!=-1) { auto view=Notebook::get().get_current_view(); + build=get_build(view->file_path); if(view->language) { auto language_id=view->language->get_id(); if(language_id=="markdown") - return std::unique_ptr(new Project::Markdown()); + return std::unique_ptr(new Project::Markdown(build)); if(language_id=="python") - return std::unique_ptr(new Project::Python()); + return std::unique_ptr(new Project::Python(build)); if(language_id=="js") - return std::unique_ptr(new Project::JavaScript()); + return std::unique_ptr(new Project::JavaScript(build)); if(language_id=="html") - return std::unique_ptr(new Project::HTML()); + return std::unique_ptr(new Project::HTML(build)); } } - - return std::unique_ptr(new Project::Clang()); -} - -Project::Language::Language() { - if(Notebook::get().get_current_page()!=-1) - build=get_build(Notebook::get().get_current_view()->file_path); else build=get_build(Directories::get().path); + + if(dynamic_cast(build.get())) + return std::unique_ptr(new Project::Clang(build)); + else + return std::unique_ptr(new Project::Language(build)); } std::pair Project::Clang::get_run_arguments() { diff --git a/src/project.h b/src/project.h index ed8f8f0..d2fb2d9 100644 --- a/src/project.h +++ b/src/project.h @@ -27,7 +27,7 @@ namespace Project { class Language { public: - Language(); + Language(std::unique_ptr &build): build(std::move(build)) {} virtual ~Language() {} std::unique_ptr build; @@ -59,7 +59,7 @@ namespace Project { private: Dispatcher dispatcher; public: - Clang() : Language() {} + Clang(std::unique_ptr &build) : Language(build) {} ~Clang() { dispatcher.disconnect(); } std::pair get_run_arguments() override; @@ -89,7 +89,7 @@ namespace Project { class Markdown : public Language { public: - Markdown() : Language() {} + Markdown(std::unique_ptr &build) : Language(build) {} ~Markdown(); boost::filesystem::path last_temp_path; @@ -98,21 +98,21 @@ namespace Project { class Python : public Language { public: - Python() : Language() {} + Python(std::unique_ptr &build) : Language(build) {} void compile_and_run() override; }; class JavaScript : public Language { public: - JavaScript() : Language() {} + JavaScript(std::unique_ptr &build) : Language(build) {} void compile_and_run() override; }; class HTML : public Language { public: - HTML() : Language() {} + HTML(std::unique_ptr &build) : Language(build) {} void compile_and_run() override; };