Browse Source

BAB-22 #comment Merged with master #time 10m

merge-requests/365/head
forgie 11 years ago
parent
commit
8f2ab05f26
  1. 19
      juci/CMakeLists.txt
  2. 12
      juci/juci.cc
  3. 26
      juci/juci.h
  4. 21
      juci/keybindings.cc
  5. 28
      juci/keybindings.h
  6. 358
      juci/menu.cc
  7. 137
      juci/menu.h
  8. 47
      juci/source.cc
  9. 31
      juci/source.h
  10. 33
      juci/window.cc

19
juci/CMakeLists.txt

@ -66,18 +66,19 @@ endif()
# name of the executable on Windows will be example.exe # name of the executable on Windows will be example.exe
add_executable(${project_name} add_executable(${project_name}
# list of every needed file to create the executable #list of every needed file to create the executable
menu.h keybindings
menu.cc menu
source
window.cc window
juci.cc juci
api
#there is no need for extentions
)
api.h
)
add_library(${module} SHARED add_library(${module} SHARED
api.h api.h
api_ext.cc api_ext.cc
) )

12
juci/juci.cc

@ -1,9 +1,9 @@
#include "juci.h" #include "juci.h"
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "no.sout.juci"); argc,
Window window; argv,
"no.sout.juci");
return app->run(window);; Window window;
return app->run(window);
} }

26
juci/juci.h

@ -1,25 +1,23 @@
/*juCi++ main header file*/ /*juCi++ main header file*/
#ifndef JUCI_H #ifndef JUCI_JUCI_H_
#define JUCI_H #define JUCI_JUCI_H_
#include <iostream> #include <iostream>
#include "gtkmm.h" #include "gtkmm.h"
#include "menu.h" #include "menu.h"
#include "source.h"
class Window : public Gtk::Window { class Window : public Gtk::Window {
public: public:
Window(); Window();
virtual ~Window() {}
virtual ~Window(); Gtk::Box window_box_;
std::shared_ptr<Source::Controller> source();
Gtk::Box window_box_;
private: private:
Menu::Controller menu; Menu::Controller menu;
/*signal handler*/ Source::Controller source_;
void onSystemQuit(); /*signal handler*/
void onSystemQuit();
}; };
#endif // JUCI_H #endif // JUCI_JUCI_H_

21
juci/keybindings.cc

@ -0,0 +1,21 @@
#include "keybindings.h"
Keybindings::Controller::Controller() {
action_group_ = Gtk::ActionGroup::create();
ui_manager_ = Gtk::UIManager::create();
}
Keybindings::Controller::~Controller(){
}
void Keybindings::Controller::set_ui_manager_action_group(Glib::RefPtr<Gtk::ActionGroup> action_group) {
ui_manager_->insert_action_group(action_group);
}
void Keybindings::Controller::set_ui_manger_string(std::string ui_string) {
try {
ui_manager_->add_ui_from_string(ui_string);
}
catch (const Glib::Error &ex) {
std::cerr << "building menus failed: " << ex.what();
}
}

28
juci/keybindings.h

@ -0,0 +1,28 @@
#include "iostream"
#include "gtkmm.h"
namespace Keybindings {
class Controller {
public:
Controller();
virtual ~Controller();
Glib::RefPtr<Gtk::ActionGroup> action_group() {
return action_group_;
};
Glib::RefPtr<Gtk::UIManager> ui_manager() {
return ui_manager_;
};
void set_ui_manger_string(std::string ui_string);
void set_ui_manager_action_group(Glib::RefPtr<Gtk::ActionGroup> action_group);
protected:
Glib::RefPtr<Gtk::UIManager> ui_manager_;
Glib::RefPtr<Gtk::ActionGroup> action_group_;
};
}

358
juci/menu.cc

@ -6,41 +6,41 @@
Menu::Model::Model() { Menu::Model::Model() {
ui_string_ = ui_string_ =
"<ui> " "<ui> "
" <menubar name='MenuBar'> " " <menubar name='MenuBar'> "
" <menu action='FileMenu'> " " <menu action='FileMenu'> "
" <menu action='FileNew'> " " <menu action='FileNew'> "
" <menuitem action='FileNewStandard'/> " " <menuitem action='FileNewStandard'/> "
" <menuitem action='FileNewCC'/> " " <menuitem action='FileNewCC'/> "
" <menuitem action='FileNewH'/> " " <menuitem action='FileNewH'/> "
" </menu> " " </menu> "
" <menuitem action='FileOpenFile'/> " " <menuitem action='FileOpenFile'/> "
" <menuitem action='FileOpenFolder'/> " " <menuitem action='FileOpenFolder'/> "
" <separator/> " " <separator/> "
" <menuitem action='FileQuit'/> " " <menuitem action='FileQuit'/> "
" </menu> " " </menu> "
" <menu action='EditMenu'> " " <menu action='EditMenu'> "
" <menuitem action='EditCopy'/> " " <menuitem action='EditCopy'/> "
" <menuitem action='EditCut'/> " " <menuitem action='EditCut'/> "
" <menuitem action='EditPaste'/> " " <menuitem action='EditPaste'/> "
" <separator/> " " <separator/> "
" <menuitem action='EditFind'/> " " <menuitem action='EditFind'/> "
" </menu> " " </menu> "
" <menu action='WindowMenu'> " " <menu action='WindowMenu'> "
" <menuitem action='WindowCloseTab'/> " " <menuitem action='WindowCloseTab'/> "
" <menuitem action='WindowSplitWindow'/> " " <menuitem action='WindowSplitWindow'/> "
" </menu> " " </menu> "
" <menu action='PluginMenu'> " " <menu action='PluginMenu'> "
" <menu action='PluginSnippet'> " " <menu action='PluginSnippet'> "
" <menuitem action='PluginAddSnippet'/> " " <menuitem action='PluginAddSnippet'/> "
" </menu> " " </menu> "
" </menu> " " </menu> "
" <menu action='HelpMenu'> " " <menu action='HelpMenu'> "
" <menuitem action='HelpAbout'/> " " <menuitem action='HelpAbout'/> "
" </menu> " " </menu> "
" </menubar> " " </menubar> "
"</ui> "; "</ui> ";
} }
@ -52,196 +52,188 @@ Menu::Model::~Model() {
/***********************************/ /***********************************/
Menu::View::View(Gtk::Orientation orientation) : Menu::View::View(Gtk::Orientation orientation) :
view_(orientation) { view_(orientation) {
action_group_ = Gtk::ActionGroup::create();
ui_manager_ = Gtk::UIManager::create();
} }
void Menu::View::set_ui_manger_string(std::string ui_string) { Glib::RefPtr<Gtk::Box> Menu::View::view(
try { Glib::RefPtr<Gtk::UIManager> ui_manager) {
ui_manager_->add_ui_from_string(ui_string); view_.pack_start(*ui_manager->get_widget("/MenuBar"), Gtk::PACK_SHRINK);
} return Glib::RefPtr<Gtk::Box>(&view_);
catch (const Glib::Error &ex) {
std::cerr << "building menus failed: " << ex.what();
}
} }
void Menu::View::set_ui_manager_action_group(Glib::RefPtr<Gtk::ActionGroup> action_group) {
ui_manager_->insert_action_group(action_group);
}
Gtk::Box &Menu::View::view() {
view_.pack_start(*ui_manager_->get_widget("/MenuBar"), Gtk::PACK_SHRINK);
return view_;
}
Menu::View::~View() { Menu::View::~View() {
} }
/***********************************/ /***********************************/
/* CONTROLLER */ /* CONTROLLER */
/***********************************/ /***********************************/
Menu::Controller::Controller() : Menu::Controller::Controller(Keybindings::Controller keybindings) :
menu_view_(Gtk::ORIENTATION_VERTICAL), menu_view_(Gtk::ORIENTATION_VERTICAL),
menu_model_() { menu_model_(),
keybindings_(keybindings){
/* Add action to menues */ /* Add action to menues */
/* START file menu */ /* START file menu */
menu_view_.action_group()->add(Gtk::Action::create("FileMenu", Gtk::Stock::FILE)); keybindings_.action_group()->add(Gtk::Action::create("FileMenu", Gtk::Stock::FILE));
/* File->New files */ /* File->New files */
menu_view_.action_group()->add(Gtk::Action::create("FileNew", "New")); keybindings_.action_group()->add(Gtk::Action::create("FileNew", "New"));
keybindings_.action_group()->add(Gtk::Action::create("FileNewStandard",
menu_view_.action_group()->add(Gtk::Action::create("FileNewStandard", Gtk::Stock::NEW, "New empty file", "Create a new file"),
Gtk::Stock::NEW, "New empty file", "Create a new file"), [this]() {
[this]() { OnFileNewEmptyfile();
onFileNewEmptyfile(); });
}); keybindings_.action_group()->add(Gtk::Action::create("FileNewCC",
menu_view_.action_group()->add(Gtk::Action::create("FileNewCC", Gtk::Stock::NEW, "New cc file", "Create a new cc file"),
Gtk::Stock::NEW, "New cc file", "Create a new cc file"), Gtk::AccelKey("<control><alt>c"),
Gtk::AccelKey("<control><alt>c"), [this]() {
[this]() { OnFileNewCCFile();
onFileNewCCFile(); });
}); keybindings_.action_group()->add(Gtk::Action::create("FileNewH",
menu_view_.action_group()->add(Gtk::Action::create("FileNewH", Gtk::Stock::NEW, "New h file", "Create a new h file"),
Gtk::Stock::NEW, "New h file", "Create a new h file"), Gtk::AccelKey("<control><alt>h"),
Gtk::AccelKey("<control><alt>h"), [this]() {
[this]() { OnFileNewHeaderFile();
onFileNewHeaderFile(); });
}); /* File-> New files end */
/* File-> New files end */ keybindings_.action_group()->add(Gtk::Action::create("FileOpenFile", Gtk::Stock::OPEN),
menu_view_.action_group()->add(Gtk::Action::create("FileOpenFile", Gtk::Stock::OPEN), [this]() {
[this]() { OnFileOpenFile();
onFileOpenFile(); });
}); keybindings_.action_group()->add(Gtk::Action::create("FileOpenFolder", "Open folder"),
menu_view_.action_group()->add(Gtk::Action::create("FileOpenFolder", "Open folder"), [this]() {
[this]() { OnFileOpenFolder();
onFileOpenFolder(); });
}); keybindings_.action_group()->add(Gtk::Action::create("FileQuit", Gtk::Stock::QUIT),
menu_view_.action_group()->add(Gtk::Action::create("FileQuit", Gtk::Stock::QUIT), [this]() {
[this]() { OnSystemQuit();
onSystemQuit(); });
});
/* END file menu */ /* END file menu */
/* START edit menu */ /* START edit menu */
menu_view_.action_group()->add(Gtk::Action::create("EditMenu", Gtk::Stock::EDIT)); keybindings_.action_group()->add(Gtk::Action::create("EditMenu", Gtk::Stock::EDIT));
menu_view_.action_group()->add(Gtk::Action::create("EditCopy", Gtk::Stock::COPY), keybindings_.action_group()->add(Gtk::Action::create("EditCopy", Gtk::Stock::COPY),
[this]() { [this]() {
onEditCopy(); OnEditCopy();
}); });
menu_view_.action_group()->add(Gtk::Action::create("EditCut", Gtk::Stock::CUT), keybindings_.action_group()->add(Gtk::Action::create("EditCut", Gtk::Stock::CUT),
[this]() { [this]() {
onEditCut(); OnEditCut();
}); });
menu_view_.action_group()->add(Gtk::Action::create("EditPaste", Gtk::Stock::PASTE), keybindings_.action_group()->add(Gtk::Action::create("EditPaste", Gtk::Stock::PASTE),
[this]() { [this]() {
onEditPaste(); OnEditPaste();
}); });
menu_view_.action_group()->add(Gtk::Action::create("EditFind", Gtk::Stock::FIND), keybindings_.action_group()->add(Gtk::Action::create("EditFind", Gtk::Stock::FIND),
[this]() { [this]() {
onEditFind(); OnEditFind();
}); });
/* END edit menu */ /* END edit menu */
/* START window menu */ /* START window menu */
menu_view_.action_group()->add(Gtk::Action::create("WindowMenu", "_Window")); keybindings_.action_group()->add(Gtk::Action::create("WindowMenu", "_Window"));
menu_view_.action_group()->add(Gtk::Action::create("WindowCloseTab", "Close tab"), keybindings_.action_group()->add(Gtk::Action::create("WindowCloseTab", "Close tab"),
Gtk::AccelKey("<control>w"), Gtk::AccelKey("<control>w"),
[this]() { [this]() {
onWindowCloseTab(); OnWindowCloseTab();
}); });
menu_view_.action_group()->add(Gtk::Action::create("WindowSplitWindow", "Split window"), keybindings_.action_group()->add(Gtk::Action::create("WindowSplitWindow", "Split window"),
Gtk::AccelKey("<control><alt>S"), Gtk::AccelKey("<control><alt>S"),
[this]() { [this]() {
onWindowSplitWindow(); OnWindowSplitWindow();
}); });
/* END window menu */ /* END window menu */
/* START Plugin menu */ /* START Plugin menu */
menu_view_.action_group()->add(Gtk::Action::create("PluginMenu", "_Plugins")); keybindings_.action_group()->add(Gtk::Action::create("PluginMenu", "_Plugins"));
/*Plugin->snippet*/ /*Plugin->snippet*/
menu_view_.action_group()->add(Gtk::Action::create("PluginSnippet", "Snippet")); keybindings_.action_group()->add(Gtk::Action::create("PluginSnippet", "Snippet"));
menu_view_.action_group()->add(Gtk::Action::create("PluginAddSnippet", "Add snippet"), keybindings_.action_group()->add(Gtk::Action::create("PluginAddSnippet", "Add snippet"),
Gtk::AccelKey("<alt>space"), Gtk::AccelKey("<alt>space"),
[this]() { [this]() {
onPluginAddSnippet(); OnPluginAddSnippet();
}); });
/* End snippet */ /* End snippet */
/* END plugin menu */ /* END plugin menu */
/* START help menu */ /* START help menu */
menu_view_.action_group()->add(Gtk::Action::create("HelpMenu", Gtk::Stock::HELP)); keybindings_.action_group()->add(Gtk::Action::create("HelpMenu", Gtk::Stock::HELP));
menu_view_.action_group()->add(Gtk::Action::create("HelpAbout", Gtk::Stock::ABOUT), keybindings_.action_group()->add(Gtk::Action::create("HelpAbout", Gtk::Stock::ABOUT),
[this]() { [this]() {
onHelpAbout(); OnHelpAbout();
}); });
/* END help menu */ /* END help menu */
menu_view_.set_ui_manager_action_group(menu_view_.action_group()); keybindings_.ui_manager()->add_ui_from_string(menu_model_.ui_string());
menu_view_.set_ui_manger_string(menu_model_.ui_string()); keybindings_.ui_manager()->insert_action_group(keybindings_.action_group());
} }
Menu::Controller::~Controller() { Menu::Controller::~Controller() {
} }
Gtk::Box &Menu::Controller::view() { void Menu::Controller::OnFileNewEmptyfile() {
return menu_view_.view(); std::cout << "New file clicked" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onFileNewEmptyfile() { void Menu::Controller::OnFileNewCCFile() {
std::cout << "New file clicked" << std::endl; std::cout << "New cc file clicked" << std::endl;
//TODO(Oyvang) Legg til funksjon //TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onFileNewCCFile() {
std::cout << "New cc file clicked" << std::endl; void Menu::Controller::OnFileNewHeaderFile() {
//TODO(Oyvang) Legg til funksjon std::cout << "New cc file clicked" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onFileNewHeaderFile() { void Menu::Controller::OnSystemQuit() {
std::cout << "New cc file clicked" << std::endl; //TODO(Oyvang, Zalox, Forgie) Add everything that needs to be done before quiting
//TODO(Oyvang) Legg til funksjon /*Quit the system*/
Gtk::Main::quit(); //TODO(Oyvang, Zalox, Forgie) methode is depricated, find a better solution.
} }
void Menu::Controller::onSystemQuit(){
//TODO(Oyvang, Zalox, Forgie) Add everything that needs to be done before quiting void Menu::Controller::OnPluginAddSnippet() {
/*Quit the system*/ std::cout << "Add snipper" << std::endl; //TODO(Forgi add you snippet magic code)
Gtk::Main::quit(); //TODO(Oyvang, Zalox, Forgie) methode is depricated, find a better solution.
} }
void Menu::Controller::onPluginAddSnippet() {
std::cout << "Add snipper" << std::endl; //TODO(Forgi add you snippet magic code) void Menu::Controller::OnFileOpenFile() {
std::cout << "Open file clicked" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onFileOpenFile() {
std::cout << "Open file clicked" << std::endl; void Menu::Controller::OnFileOpenFolder() {
//TODO(Oyvang) Legg til funksjon std::cout << "Open folder clicked" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onFileOpenFolder() {
std::cout << "Open folder clicked" << std::endl; void Menu::Controller::OnWindowCloseTab() {
//TODO(Oyvang) Legg til funksjon std::cout << "Closing tab clicked" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onWindowCloseTab() {
std::cout << "Closing tab clicked" << std::endl; void Menu::Controller::OnEditCopy() {
//TODO(Oyvang) Legg til funksjon std::cout << "Clicked copy" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onEditCopy() {
std::cout << "Clicked copy" << std::endl; void Menu::Controller::OnEditCut() {
//TODO(Oyvang) Legg til funksjon std::cout << "Clicked cut" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onEditCut() {
std::cout << "Clicked cut" << std::endl; void Menu::Controller::OnEditPaste() {
//TODO(Oyvang) Legg til funksjon std::cout << "Clicked paste" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onEditPaste() {
std::cout << "Clicked paste" << std::endl; void Menu::Controller::OnEditFind() {
//TODO(Oyvang) Legg til funksjon std::cout << "Clicked find" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onEditFind() {
std::cout << "Clicked find" << std::endl; void Menu::Controller::OnWindowSplitWindow() {
//TODO(Oyvang) Legg til funksjon std::cout << "Clicked split window" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onWindowSplitWindow() {
std::cout << "Clicked split window" << std::endl; void Menu::Controller::OnHelpAbout() {
//TODO(Oyvang) Legg til funksjon std::cout << "Clicked about" << std::endl;
//TODO(Oyvang) Legg til funksjon
} }
void Menu::Controller::onHelpAbout() {
std::cout << "Clicked about" << std::endl;
//TODO(Oyvang) Legg til funksjon
}

137
juci/menu.h

@ -1,90 +1,53 @@
#ifndef JUCI_MENU_H_
#define JUCI_MENU_H_
#include <iostream> #include <iostream>
#include "gtkmm.h" #include "gtkmm.h"
namespace Menu { #include "keybindings.h"
class Model {
public:
Model();
virtual~Model();
std::string ui_string() {
return ui_string_;
};
private:
std::string ui_string_;
};
class View {
public:
View(Gtk::Orientation orient);
virtual ~View();
Gtk::Box &view();
Glib::RefPtr <Gtk::ActionGroup> action_group() {
return action_group_;
};
Glib::RefPtr <Gtk::UIManager> ui_manager() {
return ui_manager_;
};
void set_ui_manger_string(std::string ui_string);
void set_ui_manager_action_group(Glib::RefPtr <Gtk::ActionGroup> action_group);
protected:
Gtk::Box view_;
Glib::RefPtr <Gtk::UIManager> ui_manager_;
Glib::RefPtr <Gtk::ActionGroup> action_group_;
};
class Controller {
public:
Controller();
virtual ~Controller();
Gtk::Box &view();
Glib::RefPtr <Gtk::UIManager> ui_manager() {
return menu_view_.ui_manager();
};
private: namespace Menu {
Menu::View menu_view_; class Model {
Menu::Model menu_model_; public:
Model();
/*Signal handlers*/ virtual ~Model();
void onFileNewEmptyfile(); std::string ui_string() { return ui_string_; }
private:
void onFileNewCCFile(); std::string ui_string_;
}; // class Model
void onFileNewHeaderFile();
class View {
void onFileOpenFile(); public:
explicit View(Gtk::Orientation orient);
void onFileOpenFolder(); virtual ~View();
Glib::RefPtr<Gtk::Box> view(Glib::RefPtr<Gtk::UIManager> ui_manager);
void onSystemQuit();
protected:
void onPluginAddSnippet(); Gtk::Box view_;
}; // class View
void onWindowCloseTab(); // controller
class Controller {
void onEditCopy(); public:
explicit Controller(Keybindings::Controller keybindings);
void onEditCut(); virtual ~Controller();
void onEditPaste(); private:
Keybindings::Controller keybindings_;
void onEditFind(); View menu_view_;
Model menu_model_;
void onWindowSplitWindow(); void OnFileNewEmptyfile(); /*Signal handlers*/
void OnFileNewCCFile();
void onHelpAbout(); void OnFileNewHeaderFile();
void OnFileOpenFile();
}; void OnFileOpenFolder();
} void OnSystemQuit();
void OnPluginAddSnippet();
void OnWindowCloseTab();
void OnEditCopy();
void OnEditCut();
void OnEditPaste();
void OnEditFind();
void OnWindowSplitWindow();
void OnHelpAbout();
}; // class Controller
} // namespace Menu
#endif // JUCI_MENU_H_

47
juci/source.cc

@ -0,0 +1,47 @@
#include "source.h"
#include <iostream>
using namespace std;
//////////////
//// View ////
//////////////
Source::View::View() {
cout << "View construktor run" << endl;
}
void Source::View::UpdateLine(Glib::RefPtr<Gtk::TextBuffer::Mark> mark) {
cout << "Update line called. linum: " << mark->get_iter().get_line() << endl;
}
///////////////
//// Model ////
///////////////
Source::Model::Model(){
cout << "Model construktor run" << endl;
}
////////////////////
//// Controller ////
////////////////////
/**
*
*/
Source::Controller::Controller() {
cout << "Controller construktor run" << endl;
}
/**
*
*/
std::shared_ptr<Source::View> Source::Controller::sourceview() {
sourceview();
return std::shared_ptr<Source::View>(&sourceview_);
}
/**
*
*/
void Source::Controller::OnLineEdit(Glib::RefPtr<Gtk::TextBuffer::Mark> mark){
}

31
juci/source.h

@ -0,0 +1,31 @@
#ifndef JUCI_SOURCE_H_
#define JUCI_SOURCE_H_
#include <iostream>
#include "gtkmm.h"
namespace Source {
class View : public Gtk::TextView {
public:
View();
void UpdateLine(Glib::RefPtr<Gtk::TextBuffer::Mark> mark);
private:
void UpdateSyntaxHighlighting(int line_number);
};
class Model{
public:
Model();
};
class Controller {
public:
Controller();
std::shared_ptr<Source::View> sourceview();
private:
void OnLineEdit(Glib::RefPtr<Gtk::TextBuffer::Mark> mark);
protected:
View sourceview_;
}; // class Controller
} // namespace Source
#endif // JUCI_SOURCE_H_

33
juci/window.cc

@ -1,26 +1,17 @@
#include "juci.h" #include "juci.h"
Window::Window() : Window::Window() :
window_box_(Gtk::ORIENTATION_HORIZONTAL), window_box_(Gtk::ORIENTATION_HORIZONTAL),
menu() { menu() {
set_title("example juCi++");
set_default_size(600, 600);
set_title("example juCi++"); // window_box_.add(*source_.sourceview());
set_default_size(600, 600); add(window_box_);
add_accel_group(menu.ui_manager()->get_accel_group());
add(window_box_); window_box_.pack_start(menu.view());
show_all_children();
add_accel_group(menu.ui_manager()->get_accel_group());
window_box_.pack_start(menu.view());
show_all_children();
};
Window::~Window() {
} }
std::shared_ptr<Source::Controller> Window::source() {
return std::shared_ptr<Source::Controller>(&source_);
}

Loading…
Cancel
Save