#include "main-window.hpp" #include "obs-manager.hpp" #include #include #include using namespace std; MainWindow::MainWindow(Glib::RefPtr app, OBSManager *obs) : mBoxMain(Gtk::Orientation::ORIENTATION_VERTICAL, 2), mButtonPreview("Start Preview"), mButtonStart("Start Recording"), mButtonSettings("Settings"), mButtonExit("Exit"), mLabelVersion("Version: "), mSettingsWindow(obs), mPreviewWindow(obs) { set_title("New Recording"); set_default_size(1048, 720); set_border_width(10); mApp = app; mOBS = obs; mOBS->sigStartPreview.connect(sigc::mem_fun(*this, &MainWindow::onPreviewStarted)); mOBS->sigStartRecording.connect(sigc::mem_fun(*this, &MainWindow::onRecordingStarted)); mOBS->sigStopRecording.connect(sigc::mem_fun(*this, &MainWindow::onRecordingStopped)); mButtonPreview.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::onPreviewClicked)); mButtonStart.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::onStartClicked)); mButtonSettings.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::onSettingsClicked)); mButtonExit.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::onExitClicked)); mButtonStart.set_sensitive(false); mBoxMain.add(mButtonPreview); mBoxMain.add(mButtonStart); mBoxMain.add(mButtonSettings); mBoxMain.add(mButtonExit); mBoxMain.add(mLabelVersion); add(mBoxMain); mBoxMain.show_all(); string version; version.append("OBS Version: "); version.append(obs->GetVersion()); mLabelVersion.set_text(version); Gdk::Rectangle rect; auto screen = get_screen(); auto monitor = screen->get_monitor_at_window(screen->get_active_window()); screen->get_monitor_geometry(monitor, rect); mOBS->Initialize(rect); } MainWindow::~MainWindow() { mOBS->Cleanup(); } void MainWindow::onPreviewClicked() { mPreviewWindow.show(); } void MainWindow::onStartClicked() { if (mOBS->IsRecording()) mOBS->StopRecording(); else mOBS->StartRecording(); } void MainWindow::onSettingsClicked() { mSettingsWindow.set_transient_for(*this); mSettingsWindow.show(); } void MainWindow::onExitClicked() { mOBS->sigCleanup.connect(sigc::mem_fun(*this, &MainWindow::onCleanupDone)); mOBS->Cleanup(); } void MainWindow::onCleanupDone() { //Gtk::Main::quit(); mApp->quit(); } void MainWindow::onPreviewStarted() { mButtonStart.set_sensitive(true); } void MainWindow::onRecordingStarted() { mButtonStart.set_label("Stop Recording"); } void MainWindow::onRecordingStopped() { mButtonStart.set_label("Start Recording"); }