summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2022-12-19 16:58:48 -0800
committeryum <yum.food.vr@gmail.com>2022-12-19 16:58:48 -0800
commit8db8a74b3dd949a6765a40698681b2f754d64bf4 (patch)
tree8fdc7adc08275d6a11ee9957336629be0a26955c
parent0111a26a5526fe5f01c0dc3b4d4391af4234c2a7 (diff)
GUI: Sketch out Unity panel
Now there are two panels: one to run transcription, one to generate avatar assets. Also, getting mics & python version can no longer crash the app.
-rw-r--r--GUI/GUI/GUI/Frame.cpp356
-rw-r--r--GUI/GUI/GUI/Frame.h24
-rw-r--r--GUI/GUI/GUI/PythonWrapper.cpp6
3 files changed, 292 insertions, 94 deletions
diff --git a/GUI/GUI/GUI/Frame.cpp b/GUI/GUI/GUI/Frame.cpp
index 4f23beb..0f8a3b5 100644
--- a/GUI/GUI/GUI/Frame.cpp
+++ b/GUI/GUI/GUI/Frame.cpp
@@ -4,9 +4,14 @@
#include <filesystem>
#include <string>
#include <vector>
+#include <wx/filepicker.h>
namespace {
enum FrameIds {
+ ID_MAIN_PANEL,
+ ID_NAVBAR,
+ ID_NAVBAR_BUTTON_TRANSCRIBE,
+ ID_NAVBAR_BUTTON_UNITY,
ID_PY_PANEL,
ID_PY_CONFIG_PANEL,
ID_PY_CONFIG_DROPDOWN_PANEL,
@@ -14,13 +19,25 @@ namespace {
ID_PY_DUMP_MICS_BUTTON,
ID_PY_APP_START_BUTTON,
ID_PY_APP_STOP_BUTTON,
- ID_PY_OUT,
+ ID_TRANSCRIBE_OUT,
ID_PY_APP_MIC,
ID_PY_APP_MIC_PANEL,
ID_PY_APP_LANG,
ID_PY_APP_LANG_PANEL,
ID_PY_APP_MODEL,
ID_PY_APP_MODEL_PANEL,
+ ID_UNITY_PANEL,
+ ID_UNITY_CONFIG_PANEL,
+ ID_UNITY_OUT,
+ ID_UNITY_ANIMATOR_FILE_PICKER,
+ ID_UNITY_PARAMETERS_FILE_PICKER,
+ ID_UNITY_MENU_FILE_PICKER,
+ ID_UNITY_CONFIG_PANEL_PAIRS,
+ ID_UNITY_ANIMATOR_GENERATED_DIR,
+ ID_UNITY_ANIMATOR_GENERATED_NAME,
+ ID_UNITY_PARAMETERS_GENERATED_NAME,
+ ID_UNITY_MENU_GENERATED_NAME,
+ ID_UNITY_BUTTON_GEN_ANIMATOR,
};
const wxString kMicChoices[] = {
@@ -165,90 +182,219 @@ Frame::Frame()
: wxFrame(nullptr, wxID_ANY, "TaSTT"),
py_app_(nullptr)
{
- auto* py_panel = new wxPanel(this, ID_PY_PANEL);
+ auto* main_panel = new wxPanel(this, ID_MAIN_PANEL);
+ main_panel_ = main_panel;
{
- const auto py_out_sz = wxSize(/*x_px=*/320, /*y_px=*/160);
- auto* py_out = new wxTextCtrl(py_panel, ID_PY_OUT,
- wxEmptyString,
- wxDefaultPosition,
- py_out_sz, wxTE_MULTILINE | wxTE_READONLY);
- py_out->SetMinSize(py_out_sz);
- py_out_ = py_out;
-
- py_out_->AppendText(PythonWrapper::GetVersion() + "\n");
-
- auto* py_config_panel = new wxPanel(py_panel, ID_PY_CONFIG_PANEL);
+ auto* navbar = new wxPanel(main_panel, ID_NAVBAR);
{
- auto* py_setup_button = new wxButton(py_config_panel, ID_PY_SETUP_BUTTON, "Set up Python virtual environment");
- auto* py_dump_mics_button = new wxButton(py_config_panel, ID_PY_DUMP_MICS_BUTTON, "List input devices");
+ auto* navbar_button_transcribe = new wxButton(navbar, ID_NAVBAR_BUTTON_TRANSCRIBE, "Transcription");
+ auto* navbar_button_unity = new wxButton(navbar, ID_NAVBAR_BUTTON_UNITY, "Unity");
- auto* py_config_dropdown_panel = new wxPanel(py_config_panel, ID_PY_CONFIG_DROPDOWN_PANEL);
- {
- auto* py_app_mic = new wxChoice(py_config_dropdown_panel, ID_PY_APP_MIC, wxDefaultPosition,
- wxDefaultSize, kNumMicChoices, kMicChoices);
- py_app_mic->SetSelection(kMicDefault);
- py_app_mic_ = py_app_mic;
+ auto* sizer = new wxBoxSizer(wxVERTICAL);
+ navbar->SetSizer(sizer);
- auto* py_app_lang = new wxChoice(py_config_dropdown_panel, ID_PY_APP_LANG, wxDefaultPosition,
- wxDefaultSize, kNumLangChoices, kLangChoices);
- py_app_lang->SetSelection(kLangDefault);
- py_app_lang_ = py_app_lang;
+ sizer->Add(navbar_button_transcribe, /*proportion=*/0, /*flags=*/wxEXPAND);
+ sizer->Add(navbar_button_unity, /*proportion=*/0, /*flags=*/wxEXPAND);
+ }
- auto* py_app_model = new wxChoice(py_config_dropdown_panel, ID_PY_APP_MODEL, wxDefaultPosition,
- wxDefaultSize, kNumModelChoices, kModelChoices);
- py_app_model->SetSelection(kModelDefault);
- py_app_model_ = py_app_model;
+ auto* transcribe_panel = new wxPanel(main_panel, ID_PY_PANEL);
+ transcribe_panel_ = transcribe_panel;
+ {
+ const auto transcribe_out_sz = wxSize(/*x_px=*/320, /*y_px=*/160);
+ auto* transcribe_out = new wxTextCtrl(transcribe_panel, ID_TRANSCRIBE_OUT,
+ wxEmptyString,
+ wxDefaultPosition,
+ transcribe_out_sz, wxTE_MULTILINE | wxTE_READONLY);
+ transcribe_out->SetMinSize(transcribe_out_sz);
+ transcribe_out_ = transcribe_out;
- auto* sizer = new wxGridSizer(/*cols=*/2);
- py_config_dropdown_panel->SetSizer(sizer);
+ transcribe_out_->AppendText(PythonWrapper::GetVersion() + "\n");
- sizer->Add(new wxStaticText(py_config_dropdown_panel, wxID_ANY, /*label=*/"Microphone:"));
- sizer->Add(py_app_mic);
+ auto* py_config_panel = new wxPanel(transcribe_panel, ID_PY_CONFIG_PANEL);
+ {
+ auto* py_setup_button = new wxButton(py_config_panel, ID_PY_SETUP_BUTTON, "Set up Python virtual environment");
+ auto* py_dump_mics_button = new wxButton(py_config_panel, ID_PY_DUMP_MICS_BUTTON, "List input devices");
+
+ auto* py_config_dropdown_panel = new wxPanel(py_config_panel, ID_PY_CONFIG_DROPDOWN_PANEL);
+ {
+ auto* py_app_mic = new wxChoice(py_config_dropdown_panel, ID_PY_APP_MIC, wxDefaultPosition,
+ wxDefaultSize, kNumMicChoices, kMicChoices);
+ py_app_mic->SetSelection(kMicDefault);
+ py_app_mic_ = py_app_mic;
+
+ auto* py_app_lang = new wxChoice(py_config_dropdown_panel, ID_PY_APP_LANG, wxDefaultPosition,
+ wxDefaultSize, kNumLangChoices, kLangChoices);
+ py_app_lang->SetSelection(kLangDefault);
+ py_app_lang_ = py_app_lang;
+
+ auto* py_app_model = new wxChoice(py_config_dropdown_panel, ID_PY_APP_MODEL, wxDefaultPosition,
+ wxDefaultSize, kNumModelChoices, kModelChoices);
+ py_app_model->SetSelection(kModelDefault);
+ py_app_model_ = py_app_model;
+
+ auto* sizer = new wxFlexGridSizer(/*cols=*/2);
+ py_config_dropdown_panel->SetSizer(sizer);
+
+ sizer->Add(new wxStaticText(py_config_dropdown_panel, wxID_ANY, /*label=*/"Microphone:"));
+ sizer->Add(py_app_mic, /*proportion=*/0, /*flags=*/wxEXPAND);
+
+ sizer->Add(new wxStaticText(py_config_dropdown_panel, wxID_ANY, /*label=*/"Language:"));
+ sizer->Add(py_app_lang, /*proportion=*/0, /*flags=*/wxEXPAND);
+
+ sizer->Add(new wxStaticText(py_config_dropdown_panel, wxID_ANY, /*label=*/"Model:"));
+ sizer->Add(py_app_model, /*proportion=*/0, /*flags=*/wxEXPAND);
+ }
+
+ auto* py_app_start_button = new wxButton(py_config_panel, ID_PY_APP_START_BUTTON, "Begin transcribing");
+ auto* py_app_stop_button = new wxButton(py_config_panel, ID_PY_APP_STOP_BUTTON, "Stop transcribing");
+
+ auto* sizer = new wxBoxSizer(wxVERTICAL);
+ py_config_panel->SetSizer(sizer);
+ sizer->Add(py_setup_button, /*proportion=*/0, /*flags=*/wxEXPAND);
+ sizer->Add(py_dump_mics_button, /*proportion=*/0, /*flags=*/wxEXPAND);
+ sizer->Add(py_config_dropdown_panel, /*proportion=*/0, /*flags=*/wxEXPAND);
+ sizer->Add(py_app_start_button, /*proportion=*/0, /*flags=*/wxEXPAND);
+ sizer->Add(py_app_stop_button, /*proportion=*/0, /*flags=*/wxEXPAND);
+ }
- sizer->Add(new wxStaticText(py_config_dropdown_panel, wxID_ANY, /*label=*/"Language:"));
- sizer->Add(py_app_lang);
+ auto* sizer = new wxBoxSizer(wxHORIZONTAL);
+ transcribe_panel->SetSizer(sizer);
+ sizer->Add(py_config_panel);
+ sizer->Add(transcribe_out);
+ }
- sizer->Add(new wxStaticText(py_config_dropdown_panel, wxID_ANY, /*label=*/"Model:"));
- sizer->Add(py_app_model);
+ auto* unity_panel = new wxPanel(main_panel, ID_UNITY_PANEL);
+ unity_panel_ = unity_panel;
+ {
+ const auto unity_out_sz = wxSize(/*x_px=*/320, /*y_px=*/160);
+ auto* unity_out = new wxTextCtrl(unity_panel, ID_UNITY_OUT,
+ wxEmptyString,
+ wxDefaultPosition,
+ unity_out_sz, wxTE_MULTILINE | wxTE_READONLY);
+ unity_out->SetMinSize(unity_out_sz);
+ unity_out_ = unity_out;
+
+ auto* unity_config_panel = new wxPanel(unity_panel, ID_UNITY_CONFIG_PANEL);
+ {
+ auto* unity_config_panel_pairs = new wxPanel(unity_config_panel, ID_UNITY_CONFIG_PANEL_PAIRS);
+ {
+ auto* unity_animator_file_picker = new wxFilePickerCtrl(
+ unity_config_panel_pairs,
+ ID_UNITY_ANIMATOR_FILE_PICKER,
+ /*path=*/wxEmptyString,
+ /*message=*/"FX controller path",
+ /*wildcard=*/wxFileSelectorDefaultWildcardStr,
+ /*pos=*/wxDefaultPosition,
+ /*size=*/wxDefaultSize
+ );
+ unity_animator_file_picker_ = unity_animator_file_picker;
+
+ auto* unity_parameters_file_picker = new wxFilePickerCtrl(
+ unity_config_panel_pairs,
+ ID_UNITY_PARAMETERS_FILE_PICKER,
+ /*path=*/wxEmptyString,
+ /*message=*/"Avatar parameters path",
+ /*wildcard=*/wxFileSelectorDefaultWildcardStr,
+ /*pos=*/wxDefaultPosition,
+ /*size=*/wxDefaultSize
+ );
+ unity_parameters_file_picker_ = unity_parameters_file_picker;
+
+ auto* unity_menu_file_picker = new wxFilePickerCtrl(
+ unity_config_panel_pairs,
+ ID_UNITY_MENU_FILE_PICKER,
+ /*path=*/wxEmptyString,
+ /*message=*/"Avatar menu path",
+ /*wildcard=*/wxFileSelectorDefaultWildcardStr,
+ /*pos=*/wxDefaultPosition,
+ /*size=*/wxDefaultSize
+ );
+ unity_parameters_file_picker_ = unity_parameters_file_picker;
+
+ auto* unity_animator_generated_dir = new wxTextCtrl(unity_config_panel_pairs,
+ ID_UNITY_ANIMATOR_GENERATED_DIR,
+ wxEmptyString,
+ wxDefaultPosition);
+ unity_animator_generated_dir->AppendText("TaSTT_Generated");
+ unity_animator_generated_dir_ = unity_animator_generated_dir;
+
+ auto* unity_animator_generated_name = new wxTextCtrl(unity_config_panel_pairs,
+ ID_UNITY_ANIMATOR_GENERATED_NAME);
+ unity_animator_generated_name->AppendText("TaSTT.controller");
+ unity_animator_generated_name_ = unity_animator_generated_name;
+
+ auto* unity_parameters_generated_name = new wxTextCtrl(unity_config_panel_pairs,
+ ID_UNITY_PARAMETERS_GENERATED_NAME);
+ unity_parameters_generated_name->AppendText("TaSTT_Menu.asset");
+ unity_parameters_generated_name_ = unity_parameters_generated_name;
+
+ auto* unity_menu_generated_name = new wxTextCtrl(unity_config_panel_pairs,
+ ID_UNITY_MENU_GENERATED_NAME);
+ unity_menu_generated_name->AppendText("TaSTT_Parameters.asset");
+ unity_menu_generated_name_ = unity_menu_generated_name;
+
+ auto* sizer = new wxFlexGridSizer(/*cols=*/2);
+ unity_config_panel_pairs->SetSizer(sizer);
+
+ sizer->Add(new wxStaticText(unity_config_panel_pairs, wxID_ANY, /*label=*/"FX controller:"));
+ sizer->Add(unity_animator_file_picker);
+
+ sizer->Add(new wxStaticText(unity_config_panel_pairs, wxID_ANY, /*label=*/"Avatar parameters:"));
+ sizer->Add(unity_parameters_file_picker);
+
+ sizer->Add(new wxStaticText(unity_config_panel_pairs, wxID_ANY, /*label=*/"Avatar menu:"));
+ sizer->Add(unity_menu_file_picker);
+
+ sizer->Add(new wxStaticText(unity_config_panel_pairs, wxID_ANY, /*label=*/"Generated assets folder:"));
+ sizer->Add(unity_animator_generated_dir);
+
+ sizer->Add(new wxStaticText(unity_config_panel_pairs, wxID_ANY, /*label=*/"Generated FX controller:"));
+ sizer->Add(unity_animator_generated_name);
+
+ sizer->Add(new wxStaticText(unity_config_panel_pairs, wxID_ANY, /*label=*/"Generated parameters:"));
+ sizer->Add(unity_parameters_generated_name);
+
+ sizer->Add(new wxStaticText(unity_config_panel_pairs, wxID_ANY, /*label=*/"Generated menu:"));
+ sizer->Add(unity_menu_generated_name);
+ }
+
+ auto* unity_button_gen_fx = new wxButton(unity_config_panel, ID_UNITY_BUTTON_GEN_ANIMATOR, "Generate avatar assets");
+ unity_button_gen_fx->SetWindowStyleFlag(wxBU_EXACTFIT);
+
+ auto* sizer = new wxBoxSizer(wxVERTICAL);
+ unity_config_panel->SetSizer(sizer);
+ sizer->Add(unity_config_panel_pairs);
+ sizer->Add(unity_button_gen_fx, /*proportion=*/0, /*flags=*/wxEXPAND);
}
- auto* py_app_start_button = new wxButton(py_config_panel, ID_PY_APP_START_BUTTON, "Begin transcribing");
- auto* py_app_stop_button = new wxButton(py_config_panel, ID_PY_APP_STOP_BUTTON, "Stop transcribing");
-
- auto* sizer = new wxBoxSizer(wxVERTICAL);
- py_config_panel->SetSizer(sizer);
- sizer->Add(py_setup_button);
- sizer->Add(py_dump_mics_button);
- sizer->Add(py_config_dropdown_panel);
- sizer->Add(py_app_start_button);
- sizer->Add(py_app_stop_button);
+ auto* sizer = new wxBoxSizer(wxHORIZONTAL);
+ unity_panel->SetSizer(sizer);
+ sizer->Add(unity_config_panel);
+ sizer->Add(unity_out);
}
+ unity_panel_->Hide();
auto* sizer = new wxBoxSizer(wxHORIZONTAL);
- py_panel->SetSizer(sizer);
- sizer->Add(py_config_panel);
- sizer->Add(py_out);
+ main_panel->SetSizer(sizer);
+ sizer->Add(navbar);
+ sizer->Add(transcribe_panel);
+ sizer->Add(unity_panel);
}
Bind(wxEVT_MENU, &Frame::OnExit, this, wxID_EXIT);
+ Bind(wxEVT_BUTTON, &Frame::OnNavbarTranscribe, this, ID_NAVBAR_BUTTON_TRANSCRIBE);
+ Bind(wxEVT_BUTTON, &Frame::OnNavbarUnity, this, ID_NAVBAR_BUTTON_UNITY);
Bind(wxEVT_BUTTON, &Frame::OnAppStart, this, ID_PY_APP_START_BUTTON);
Bind(wxEVT_BUTTON, &Frame::OnAppStop, this, ID_PY_APP_STOP_BUTTON);
Bind(wxEVT_BUTTON, &Frame::OnSetupPython, this, ID_PY_SETUP_BUTTON);
Bind(wxEVT_BUTTON, &Frame::OnDumpMics, this, ID_PY_DUMP_MICS_BUTTON);
+ Bind(wxEVT_BUTTON, &Frame::OnGenerateFX, this, ID_UNITY_BUTTON_GEN_ANIMATOR);
// wx needs this to be able to load PNGs.
wxImage::AddHandler(&png_handler_);
LoadAndSetIcons();
- {
- auto frame_sz = GetBestSize();
- auto panel_sz = py_panel->GetBestSize();
-
- auto ideal_sz = panel_sz;
- ideal_sz.y += frame_sz.y;
-
- this->SetSize(ideal_sz);
- }
+ Resize();
}
void Frame::OnExit(wxCommandEvent& event)
@@ -257,21 +403,35 @@ void Frame::OnExit(wxCommandEvent& event)
Close(true);
}
+void Frame::OnNavbarTranscribe(wxCommandEvent& event)
+{
+ transcribe_panel_->Show();
+ unity_panel_->Hide();
+ Resize();
+}
+
+void Frame::OnNavbarUnity(wxCommandEvent& event)
+{
+ transcribe_panel_->Hide();
+ unity_panel_->Show();
+ Resize();
+}
+
void Frame::OnSetupPython(wxCommandEvent& event)
{
- py_out_->AppendText("Setting up Python virtual environment\n");
- py_out_->AppendText("This could take several minutes, please be patient!\n");
- py_out_->AppendText("This will download ~5GB of dependencies.\n");
+ transcribe_out_->AppendText("Setting up Python virtual environment\n");
+ transcribe_out_->AppendText("This could take several minutes, please be patient!\n");
+ transcribe_out_->AppendText("This will download ~5GB of dependencies.\n");
{
- std::string py_out;
- std::ostringstream py_out_oss;
- py_out_oss << " Installing pip" << std::endl;
- py_out_->AppendText(py_out_oss.str());
- if (!PythonWrapper::InstallPip(&py_out)) {
- std::ostringstream py_out_oss;
- py_out_oss << "Failed to install pip: " << py_out;
- py_out_->AppendText(py_out_oss.str());
+ std::string transcribe_out;
+ std::ostringstream transcribe_out_oss;
+ transcribe_out_oss << " Installing pip" << std::endl;
+ transcribe_out_->AppendText(transcribe_out_oss.str());
+ if (!PythonWrapper::InstallPip(&transcribe_out)) {
+ std::ostringstream transcribe_out_oss;
+ transcribe_out_oss << "Failed to install pip: " << transcribe_out;
+ transcribe_out_->AppendText(transcribe_out_oss.str());
}
}
@@ -288,45 +448,49 @@ void Frame::OnSetupPython(wxCommandEvent& event)
for (const auto& pip_dep : pip_deps) {
{
- std::ostringstream py_out_oss;
- py_out_oss << " Installing " << pip_dep << std::endl;
- py_out_->AppendText(py_out_oss.str());
+ std::ostringstream transcribe_out_oss;
+ transcribe_out_oss << " Installing " << pip_dep << std::endl;
+ transcribe_out_->AppendText(transcribe_out_oss.str());
}
- std::string py_out;
- bool res = PythonWrapper::InvokeWithArgs({ "-m", "pip", "install", pip_dep }, &py_out);
+ std::string transcribe_out;
+ bool res = PythonWrapper::InvokeWithArgs({ "-m", "pip", "install", pip_dep }, &transcribe_out);
if (!res) {
- std::ostringstream py_out_oss;
- py_out_oss << "Failed to install " << pip_dep << ": " << py_out << std::endl;
- py_out_->AppendText(py_out_oss.str());
+ std::ostringstream transcribe_out_oss;
+ transcribe_out_oss << "Failed to install " << pip_dep << ": " << transcribe_out << std::endl;
+ transcribe_out_->AppendText(transcribe_out_oss.str());
return;
}
}
- py_out_->AppendText("Python virtual environment successfully set up!\n");
+ transcribe_out_->AppendText("Python virtual environment successfully set up!\n");
}
void Frame::OnDumpMics(wxCommandEvent& event)
{
- py_out_->AppendText(PythonWrapper::DumpMics());
+ transcribe_out_->AppendText(PythonWrapper::DumpMics());
+}
+
+void Frame::OnGenerateFX(wxCommandEvent& event)
+{
}
void Frame::OnAppStart(wxCommandEvent& event) {
if (py_app_) {
if (wxProcess::Exists(py_app_->GetPid())) {
- py_out_->AppendText("Transcription engine already running\n");
+ transcribe_out_->AppendText("Transcription engine already running\n");
return;
}
delete py_app_;
py_app_ = nullptr;
}
- py_out_->AppendText("Launching transcription engine\n");
+ transcribe_out_->AppendText("Launching transcription engine\n");
auto cb = [&](wxProcess* proc, int ret) -> void {
- std::ostringstream py_out_oss;
- py_out_oss << "Transcription engine exited with code " << ret << std::endl;
+ std::ostringstream transcribe_out_oss;
+ transcribe_out_oss << "Transcription engine exited with code " << ret << std::endl;
- py_out_->AppendText(py_out_oss.str());
+ transcribe_out_->AppendText(transcribe_out_oss.str());
return;
};
@@ -348,7 +512,7 @@ void Frame::OnAppStart(wxCommandEvent& event) {
kLangChoices[which_lang].ToStdString(),
kModelChoices[which_model].ToStdString());
if (!p) {
- py_out_->AppendText("Failed to launch transcription engine\n");
+ transcribe_out_->AppendText("Failed to launch transcription engine\n");
return;
}
@@ -374,11 +538,11 @@ void Frame::OnAppStop(wxCommandEvent& event) {
while (wxProcess::Exists(pid)) {
if (first) {
first = false;
- py_out_->AppendText("Timed out trying to stop transcription engine "
+ transcribe_out_->AppendText("Timed out trying to stop transcription engine "
"cleanly, sending SIGKILL\n");
}
else if (++loop_cnt % 100 == 0) {
- py_out_->AppendText("Waiting for transcription engine to exit");
+ transcribe_out_->AppendText("Waiting for transcription engine to exit");
}
wxProcess::Kill(pid, wxSIGKILL);
wxMilliSleep(10);
@@ -386,10 +550,10 @@ void Frame::OnAppStop(wxCommandEvent& event) {
// Since we don't process the termination event, py_app_ deletes itself!
py_app_ = nullptr;
- py_out_->AppendText("Stopped transcription engine\n");
+ transcribe_out_->AppendText("Stopped transcription engine\n");
}
else {
- py_out_->AppendText("Transcription engine already stopped\n");
+ transcribe_out_->AppendText("Transcription engine already stopped\n");
}
}
@@ -409,3 +573,15 @@ void Frame::LoadAndSetIcons() {
SetIcons(icon_bundle);
}
+void Frame::Resize()
+{
+ auto frame_sz = GetBestSize();
+ auto panel_sz = main_panel_->GetBestSize();
+
+ auto ideal_sz = panel_sz;
+ ideal_sz.x += frame_sz.x;
+ ideal_sz.y += frame_sz.y;
+
+ this->SetSize(ideal_sz);
+}
+
diff --git a/GUI/GUI/GUI/Frame.h b/GUI/GUI/GUI/Frame.h
index e5b3ae3..ccfb931 100644
--- a/GUI/GUI/GUI/Frame.h
+++ b/GUI/GUI/GUI/Frame.h
@@ -1,5 +1,6 @@
#pragma once
+#include <wx/filepicker.h>
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
@@ -16,18 +17,37 @@ public:
private:
wxPNGHandler png_handler_;
- wxTextCtrl* py_out_;
+ wxPanel* main_panel_;
+ wxPanel* transcribe_panel_;
+ wxPanel* unity_panel_;
+
+ wxTextCtrl* transcribe_out_;
+ wxTextCtrl* unity_out_;
+
+ wxTextCtrl* unity_animator_generated_dir_;
+ wxTextCtrl* unity_animator_generated_name_;
+ wxTextCtrl* unity_parameters_generated_name_;
+ wxTextCtrl* unity_menu_generated_name_;
+
+ wxFilePickerCtrl* unity_animator_file_picker_;
+ wxFilePickerCtrl* unity_parameters_file_picker_;
+
wxChoice* py_app_mic_;
wxChoice* py_app_lang_;
wxChoice* py_app_model_;
+
wxProcess* py_app_;
void OnExit(wxCommandEvent& event);
- void OnGetPythonVersion(wxCommandEvent& event);
+ void OnNavbarTranscribe(wxCommandEvent& event);
+ void OnNavbarUnity(wxCommandEvent& event);
void OnSetupPython(wxCommandEvent& event);
void OnDumpMics(wxCommandEvent& event);
void OnAppStart(wxCommandEvent& event);
void OnAppStop(wxCommandEvent& event);
+ void OnGenerateFX(wxCommandEvent& event);
void LoadAndSetIcons();
+ void Resize();
};
+
diff --git a/GUI/GUI/GUI/PythonWrapper.cpp b/GUI/GUI/GUI/PythonWrapper.cpp
index 6e9e0f1..71ddc4d 100644
--- a/GUI/GUI/GUI/PythonWrapper.cpp
+++ b/GUI/GUI/GUI/PythonWrapper.cpp
@@ -73,7 +73,8 @@ std::string PythonWrapper::GetVersion() {
std::string result;
bool ok = InvokeWithArgs({ "--version" }, &result);
if (!ok) {
- wxLogFatalError("Failed to get python version: %s", result.c_str());
+ wxLogError("Failed to get python version: %s", result.c_str());
+ result = "";
}
return result;
}
@@ -83,7 +84,8 @@ std::string PythonWrapper::DumpMics() {
const std::string dump_mics_path = "Resources/Scripts/dump_mic_devices.py";
bool ok = InvokeWithArgs({ dump_mics_path }, &result);
if (!ok) {
- wxLogFatalError("Failed to dump mic devices: %s", result.c_str());
+ wxLogError("Failed to dump mic devices: %s", result.c_str());
+ result = "";
}
return result;
}