Change LuaWindow into an ArdourWindow

* remember window visibility, size and position
* Show as toggle in the window-menu (rather than show action)
* reduce specialization, use WM and ArdourWindow infrastructure
  (transient parent, window-type, etc)
This commit is contained in:
Robin Gareus 2021-09-20 04:26:24 +02:00
parent 23c5793173
commit 747b24f063
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04
7 changed files with 24 additions and 69 deletions

View file

@ -328,7 +328,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, last_key_press_time (0) , last_key_press_time (0)
, save_as_dialog (0) , save_as_dialog (0)
, meterbridge (0) , meterbridge (0)
, luawindow (0)
, rc_option_editor (0) , rc_option_editor (0)
, speaker_config_window (X_("speaker-config"), _("Speaker Configuration")) , speaker_config_window (X_("speaker-config"), _("Speaker Configuration"))
, add_route_dialog (X_("add-routes"), _("Add Tracks/Busses")) , add_route_dialog (X_("add-routes"), _("Add Tracks/Busses"))
@ -352,6 +351,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, audio_port_matrix (X_("audio-connection-manager"), _("Audio Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::AUDIO)) , audio_port_matrix (X_("audio-connection-manager"), _("Audio Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::AUDIO))
, midi_port_matrix (X_("midi-connection-manager"), _("MIDI Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::MIDI)) , midi_port_matrix (X_("midi-connection-manager"), _("MIDI Connections"), boost::bind (&ARDOUR_UI::create_global_port_matrix, this, ARDOUR::DataType::MIDI))
, key_editor (X_("key-editor"), _("Keyboard Shortcuts"), boost::bind (&ARDOUR_UI::create_key_editor, this)) , key_editor (X_("key-editor"), _("Keyboard Shortcuts"), boost::bind (&ARDOUR_UI::create_key_editor, this))
, luawindow (X_("luawindow"), S_("Window|Scripting"), boost::bind (&ARDOUR_UI::create_luawindow, this))
, video_server_process (0) , video_server_process (0)
, have_configure_timeout (false) , have_configure_timeout (false)
, last_configure_time (0) , last_configure_time (0)
@ -507,6 +507,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
virtual_keyboard_window.set_state (*ui_xml, 0); virtual_keyboard_window.set_state (*ui_xml, 0);
audio_port_matrix.set_state (*ui_xml, 0); audio_port_matrix.set_state (*ui_xml, 0);
midi_port_matrix.set_state (*ui_xml, 0); midi_port_matrix.set_state (*ui_xml, 0);
luawindow.set_state (*ui_xml, 0);
export_video_dialog.set_state (*ui_xml, 0); export_video_dialog.set_state (*ui_xml, 0);
lua_script_window.set_state (*ui_xml, 0); lua_script_window.set_state (*ui_xml, 0);
idleometer.set_state (*ui_xml, 0); idleometer.set_state (*ui_xml, 0);
@ -538,6 +539,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
WM::Manager::instance().register_window (&virtual_keyboard_window); WM::Manager::instance().register_window (&virtual_keyboard_window);
WM::Manager::instance().register_window (&audio_port_matrix); WM::Manager::instance().register_window (&audio_port_matrix);
WM::Manager::instance().register_window (&midi_port_matrix); WM::Manager::instance().register_window (&midi_port_matrix);
WM::Manager::instance().register_window (&luawindow);
WM::Manager::instance().register_window (&idleometer); WM::Manager::instance().register_window (&idleometer);
WM::Manager::instance().register_window (&plugin_manager_ui); WM::Manager::instance().register_window (&plugin_manager_ui);
WM::Manager::instance().register_window (&plugin_dsp_load_window); WM::Manager::instance().register_window (&plugin_dsp_load_window);
@ -858,7 +860,6 @@ ARDOUR_UI::~ARDOUR_UI ()
delete _process_thread; _process_thread = 0; delete _process_thread; _process_thread = 0;
delete time_info_box; time_info_box = 0; delete time_info_box; time_info_box = 0;
delete meterbridge; meterbridge = 0; delete meterbridge; meterbridge = 0;
delete luawindow; luawindow = 0;
delete recorder; recorder = 0; delete recorder; recorder = 0;
delete editor; editor = 0; delete editor; editor = 0;
delete mixer; mixer = 0; delete mixer; mixer = 0;

View file

@ -112,6 +112,7 @@
#include "keyeditor.h" #include "keyeditor.h"
#include "location_ui.h" #include "location_ui.h"
#include "lua_script_manager.h" #include "lua_script_manager.h"
#include "luawindow.h"
#include "plugin_dspload_window.h" #include "plugin_dspload_window.h"
#include "plugin_manager_ui.h" #include "plugin_manager_ui.h"
#include "rc_option_editor.h" #include "rc_option_editor.h"
@ -133,6 +134,7 @@ class ExportVideoDialog;
class KeyEditor; class KeyEditor;
class LocationUIWindow; class LocationUIWindow;
class LuaScriptManager; class LuaScriptManager;
class LuaWindow;
class RCOptionEditor; class RCOptionEditor;
class RouteParams_UI; class RouteParams_UI;
class SessionOptionEditor; class SessionOptionEditor;
@ -437,7 +439,6 @@ private:
void tabbable_state_change (ArdourWidgets::Tabbable&); void tabbable_state_change (ArdourWidgets::Tabbable&);
void toggle_meterbridge (); void toggle_meterbridge ();
void toggle_luawindow ();
int setup_windows (); int setup_windows ();
void setup_transport (); void setup_transport ();
@ -710,12 +711,10 @@ private:
int create_mixer (); int create_mixer ();
int create_editor (); int create_editor ();
int create_meterbridge (); int create_meterbridge ();
int create_luawindow ();
int create_masters (); int create_masters ();
int create_recorder (); int create_recorder ();
Meterbridge *meterbridge; Meterbridge *meterbridge;
LuaWindow *luawindow;
/* Dialogs that can be created via new<T> */ /* Dialogs that can be created via new<T> */
@ -747,6 +746,7 @@ private:
WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix; WM::ProxyWithConstructor<GlobalPortMatrixWindow> audio_port_matrix;
WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix; WM::ProxyWithConstructor<GlobalPortMatrixWindow> midi_port_matrix;
WM::ProxyWithConstructor<KeyEditor> key_editor; WM::ProxyWithConstructor<KeyEditor> key_editor;
WM::ProxyWithConstructor<LuaWindow> luawindow;
/* creator methods */ /* creator methods */
@ -758,6 +758,7 @@ private:
VirtualKeyboardWindow* create_virtual_keyboard_window(); VirtualKeyboardWindow* create_virtual_keyboard_window();
GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType); GlobalPortMatrixWindow* create_global_port_matrix (ARDOUR::DataType);
KeyEditor* create_key_editor (); KeyEditor* create_key_editor ();
LuaWindow* create_luawindow ();
ARDOUR::SystemExec *video_server_process; ARDOUR::SystemExec *video_server_process;

View file

@ -133,7 +133,6 @@ ARDOUR_UI::connect_dependents_to_session (ARDOUR::Session *s)
mixer->set_session (s); mixer->set_session (s);
recorder->set_session (s); recorder->set_session (s);
meterbridge->set_session (s); meterbridge->set_session (s);
luawindow->set_session (s);
/* its safe to do this now */ /* its safe to do this now */
@ -273,11 +272,6 @@ ARDOUR_UI::setup_windows ()
return -1; return -1;
} }
if (create_luawindow ()) {
error << _("UI: cannot setup luawindow") << endmsg;
return -1;
}
time_info_box = new TimeInfoBox ("ToolbarTimeInfo", false); time_info_box = new TimeInfoBox ("ToolbarTimeInfo", false);
/* all other dialogs are created conditionally */ /* all other dialogs are created conditionally */

View file

@ -153,7 +153,6 @@ ARDOUR_UI::set_session (Session *s)
secondary_clock->set_session (s); secondary_clock->set_session (s);
big_clock->set_session (s); big_clock->set_session (s);
video_timeline->set_session (s); video_timeline->set_session (s);
lua_script_window->set_session (s);
rc_option_editor->set_session (s); rc_option_editor->set_session (s);
roll_controllable->set_session (s); roll_controllable->set_session (s);
@ -878,28 +877,6 @@ ARDOUR_UI::toggle_meterbridge ()
} }
} }
void
ARDOUR_UI::toggle_luawindow ()
{
assert (editor && luawindow);
bool show = false;
if (luawindow->not_visible ()) {
show = true;
}
// TODO check overlap
if (show) {
luawindow->show_window ();
luawindow->present ();
luawindow->raise ();
} else {
luawindow->hide_window (NULL);
}
}
void void
ARDOUR_UI::new_midi_tracer_window () ARDOUR_UI::new_midi_tracer_window ()
{ {
@ -974,6 +951,13 @@ ARDOUR_UI::create_virtual_keyboard_window ()
return vkbd; return vkbd;
} }
LuaWindow*
ARDOUR_UI::create_luawindow ()
{
LuaWindow* luawindow = LuaWindow::instance ();
return luawindow;
}
void void
ARDOUR_UI::handle_locations_change (Location *) ARDOUR_UI::handle_locations_change (Location *)
{ {

View file

@ -108,20 +108,6 @@ ARDOUR_UI::create_editor ()
return 0; return 0;
} }
int
ARDOUR_UI::create_luawindow ()
{
try {
luawindow = LuaWindow::instance ();
}
catch (failed_constructor& err) {
return -1;
}
return 0;
}
int int
ARDOUR_UI::create_recorder () ARDOUR_UI::create_recorder ()
{ {
@ -278,7 +264,6 @@ ARDOUR_UI::install_actions ()
ActionManager::register_action (common_actions, X_("show-ui-prefs"), _("Show more UI preferences"), sigc::mem_fun (*this, &ARDOUR_UI::show_ui_prefs)); ActionManager::register_action (common_actions, X_("show-ui-prefs"), _("Show more UI preferences"), sigc::mem_fun (*this, &ARDOUR_UI::show_ui_prefs));
} }
ActionManager::register_action (common_actions, X_("toggle-luawindow"), S_("Window|Scripting"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_luawindow));
ActionManager::register_action (common_actions, X_("toggle-meterbridge"), S_("Window|Meterbridge"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_meterbridge)); ActionManager::register_action (common_actions, X_("toggle-meterbridge"), S_("Window|Meterbridge"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_meterbridge));
act = ActionManager::register_action (common_actions, X_("NewMIDITracer"), _("MIDI Tracer"), sigc::mem_fun(*this, &ARDOUR_UI::new_midi_tracer_window)); act = ActionManager::register_action (common_actions, X_("NewMIDITracer"), _("MIDI Tracer"), sigc::mem_fun(*this, &ARDOUR_UI::new_midi_tracer_window));

View file

@ -88,8 +88,7 @@ LuaWindow::instance ()
} }
LuaWindow::LuaWindow () LuaWindow::LuaWindow ()
: Window (Gtk::WINDOW_TOPLEVEL) : ArdourWindow ("Lua")
, VisibilityTracker (*((Gtk::Window*) this))
, lua (0) , lua (0)
, _visible (false) , _visible (false)
, _menu_scratch (0) , _menu_scratch (0)
@ -107,17 +106,7 @@ LuaWindow::LuaWindow ()
reinit_lua (); reinit_lua ();
update_title (); update_title ();
set_wmclass (X_("ardour_mixer"), PROGRAM_NAME); set_wmclass (X_("ardour_lua"), PROGRAM_NAME);
#ifdef __APPLE__
set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG);
#else
if (UIConfiguration::instance().get_all_floating_windows_are_dialogs()) {
set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG);
} else {
set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY);
}
#endif
script_select.disable_scrolling (); script_select.disable_scrolling ();
@ -220,10 +209,13 @@ void LuaWindow::reinit_lua ()
void LuaWindow::set_session (Session* s) void LuaWindow::set_session (Session* s)
{ {
SessionHandlePtr::set_session (s); if (!s) {
if (!_session) {
return; return;
} }
/* only call SessionHandlePtr::set_session if session is not NULL,
* otherwise LuaWindow::session_going_away will never be invoked.
*/
ArdourWindow::set_session (s);
update_title (); update_title ();
_session->DirtyChanged.connect (_session_connections, invalidator (*this), boost::bind (&LuaWindow::update_title, this), gui_context()); _session->DirtyChanged.connect (_session_connections, invalidator (*this), boost::bind (&LuaWindow::update_title, this), gui_context());
@ -238,7 +230,7 @@ LuaWindow::session_going_away ()
ENSURE_GUI_THREAD (*this, &LuaWindow::session_going_away); ENSURE_GUI_THREAD (*this, &LuaWindow::session_going_away);
reinit_lua (); // drop state (all variables, session references) reinit_lua (); // drop state (all variables, session references)
SessionHandlePtr::session_going_away (); ArdourWindow::session_going_away ();
_session = 0; _session = 0;
update_title (); update_title ();

View file

@ -42,10 +42,8 @@
#include "widgets/ardour_dropdown.h" #include "widgets/ardour_dropdown.h"
class LuaWindow : class LuaWindow :
public Gtk::Window, public ArdourWindow,
public PBD::ScopedConnectionList, public PBD::ScopedConnectionList
public ARDOUR::SessionHandlePtr,
public Gtkmm2ext::VisibilityTracker
{ {
public: public:
static LuaWindow* instance(); static LuaWindow* instance();