the basics of tabbed
This commit is contained in:
parent
b2dc5a52b7
commit
02c8d6d648
@ -45,7 +45,6 @@
|
||||
<menuitem action='toggle-session-options-editor'/>
|
||||
#ifdef GTKOSX
|
||||
<menuitem action='toggle-about'/>
|
||||
<menuitem action='toggle-rc-options-editor'/>
|
||||
#endif
|
||||
<separator/>
|
||||
<menuitem action='lock'/>
|
||||
@ -276,10 +275,6 @@
|
||||
<menuitem action='set-tempo-from-edit-range'/>
|
||||
</menu>
|
||||
<menuitem action='set-mouse-mode-object-range'/>
|
||||
#ifndef GTKOSX
|
||||
<separator/>
|
||||
<menuitem action='toggle-rc-options-editor'/>
|
||||
#endif
|
||||
</menu>
|
||||
|
||||
<menu name='RegionMenu' action='RegionMenu'>
|
||||
|
@ -261,9 +261,9 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
|
||||
, last_key_press_time (0)
|
||||
, save_as_dialog (0)
|
||||
, meterbridge (0)
|
||||
, rc_option_editor (0)
|
||||
, speaker_config_window (X_("speaker-config"), _("Speaker Configuration"))
|
||||
, key_editor (X_("key-editor"), _("Key Bindings"))
|
||||
, rc_option_editor (X_("rc-options-editor"), _("Preferences"))
|
||||
, add_route_dialog (X_("add-routes"), _("Add Tracks/Busses"))
|
||||
, about (X_("about"), _("About"))
|
||||
, location_ui (X_("locations"), _("Locations"))
|
||||
@ -408,7 +408,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
|
||||
|
||||
if (ui_xml) {
|
||||
key_editor.set_state (*ui_xml);
|
||||
rc_option_editor.set_state (*ui_xml);
|
||||
// rc_option_editor.set_state (*ui_xml);
|
||||
session_option_editor.set_state (*ui_xml);
|
||||
speaker_config_window.set_state (*ui_xml);
|
||||
about.set_state (*ui_xml);
|
||||
@ -424,7 +424,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
|
||||
}
|
||||
|
||||
WM::Manager::instance().register_window (&key_editor);
|
||||
WM::Manager::instance().register_window (&rc_option_editor);
|
||||
// WM::Manager::instance().register_window (&rc_option_editor);
|
||||
WM::Manager::instance().register_window (&session_option_editor);
|
||||
WM::Manager::instance().register_window (&speaker_config_window);
|
||||
WM::Manager::instance().register_window (&about);
|
||||
|
@ -320,6 +320,15 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
|
||||
|
||||
void hide_application ();
|
||||
|
||||
Gtk::Notebook& tabs();
|
||||
|
||||
/* called from a static C function */
|
||||
|
||||
Gtk::Notebook* tab_window_root_drop (GtkNotebook* src,
|
||||
GtkWidget* w,
|
||||
gint x,
|
||||
gint y,
|
||||
gpointer user_data);
|
||||
protected:
|
||||
friend class PublicEditor;
|
||||
|
||||
@ -340,7 +349,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
|
||||
void toggle_session_options_window ();
|
||||
|
||||
private:
|
||||
PublicEditor* editor;
|
||||
Mixer_UI* mixer;
|
||||
NSM_Client* nsm;
|
||||
bool _was_dirty;
|
||||
@ -619,15 +627,19 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
|
||||
void setup_order_hint (AddRouteDialog::InsertAt);
|
||||
|
||||
int create_mixer ();
|
||||
PublicEditor *editor;
|
||||
int create_editor ();
|
||||
|
||||
Meterbridge *meterbridge;
|
||||
int create_meterbridge ();
|
||||
|
||||
RCOptionEditor* rc_option_editor;
|
||||
Gtk::HBox rc_option_editor_placeholder;
|
||||
|
||||
/* Dialogs that can be created via new<T> */
|
||||
|
||||
WM::Proxy<SpeakerDialog> speaker_config_window;
|
||||
WM::Proxy<KeyEditor> key_editor;
|
||||
WM::Proxy<RCOptionEditor> rc_option_editor;
|
||||
WM::Proxy<AddRouteDialog> add_route_dialog;
|
||||
WM::Proxy<About> about;
|
||||
WM::Proxy<LocationUIWindow> location_ui;
|
||||
@ -797,6 +809,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
|
||||
DuplicateRouteDialog* duplicate_routes_dialog;
|
||||
|
||||
void grab_focus_after_dialog ();
|
||||
|
||||
void tabs_switch (GtkNotebookPage*, guint page_number);
|
||||
};
|
||||
|
||||
#endif /* __ardour_gui_h__ */
|
||||
|
@ -66,6 +66,22 @@ using namespace Gtk;
|
||||
using namespace Glib;
|
||||
using namespace ARDOUR_UI_UTILS;
|
||||
|
||||
|
||||
static GtkNotebook*
|
||||
tab_window_root_drop (GtkNotebook* src,
|
||||
GtkWidget* w,
|
||||
gint x,
|
||||
gint y,
|
||||
gpointer user_data)
|
||||
{
|
||||
Gtk::Notebook* nb = ARDOUR_UI::instance()->tab_window_root_drop (src, w, x, y, user_data);
|
||||
if (nb) {
|
||||
return nb->gobj();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
ARDOUR_UI::setup_windows ()
|
||||
{
|
||||
@ -112,6 +128,15 @@ ARDOUR_UI::setup_windows ()
|
||||
editor->add_toplevel_menu (top_packer);
|
||||
|
||||
editor->add_transport_frame (transport_frame);
|
||||
editor->tabs().append_page (rc_option_editor_placeholder, _("Preferences"));
|
||||
|
||||
editor->tabs().signal_switch_page().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_switch));
|
||||
|
||||
/* It would be nice if Gtkmm had wrapped this rather than just
|
||||
* deprecating the old set_window_creation_hook() method, but oh well...
|
||||
*/
|
||||
g_signal_connect (editor->tabs().gobj(), "create-window",
|
||||
(GCallback) ::tab_window_root_drop, this);
|
||||
|
||||
setup_transport();
|
||||
|
||||
@ -122,6 +147,18 @@ ARDOUR_UI::setup_windows ()
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::tabs_switch (GtkNotebookPage*, guint page_number)
|
||||
{
|
||||
if (page_number == 2) {
|
||||
if (!rc_option_editor) {
|
||||
rc_option_editor = new RCOptionEditor;
|
||||
rc_option_editor_placeholder.pack_start (*rc_option_editor, true, true);
|
||||
rc_option_editor_placeholder.show_all ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::setup_tooltips ()
|
||||
{
|
||||
@ -696,11 +733,7 @@ ARDOUR_UI::restore_editing_space ()
|
||||
void
|
||||
ARDOUR_UI::show_ui_prefs ()
|
||||
{
|
||||
RefPtr<Action> act = ActionManager::get_action (X_("Window"), X_("toggle-rc-options-editor"));
|
||||
assert (act);
|
||||
|
||||
act->activate();
|
||||
|
||||
tabs().set_current_page (2);
|
||||
rc_option_editor->set_current_page (_("GUI"));
|
||||
}
|
||||
|
||||
@ -713,11 +746,7 @@ ARDOUR_UI::click_button_clicked (GdkEventButton* ev)
|
||||
return false;
|
||||
}
|
||||
|
||||
RefPtr<Action> act = ActionManager::get_action (X_("Window"), X_("toggle-rc-options-editor"));
|
||||
assert (act);
|
||||
|
||||
act->activate();
|
||||
|
||||
tabs().set_current_page (2);
|
||||
rc_option_editor->set_current_page (_("Misc"));
|
||||
return true;
|
||||
}
|
||||
|
@ -61,6 +61,9 @@ ARDOUR_UI::we_have_dependents ()
|
||||
editor->setup_tooltips ();
|
||||
editor->UpdateAllTransportClocks.connect (sigc::mem_fun (*this, &ARDOUR_UI::update_transport_clocks));
|
||||
|
||||
std::cerr << "Mixer page = " << editor->tabs().append_page (*mixer, _("Mixer")) << std::endl;
|
||||
editor->tabs().set_tab_detachable (*mixer);
|
||||
|
||||
/* all actions are defined */
|
||||
|
||||
ActionManager::enable_accelerators ();
|
||||
@ -101,3 +104,28 @@ ARDOUR_UI::exit_on_main_window_close (GdkEventAny * /*ev*/)
|
||||
#endif
|
||||
}
|
||||
|
||||
Gtk::Notebook*
|
||||
ARDOUR_UI::tab_window_root_drop (GtkNotebook* src,
|
||||
GtkWidget* w,
|
||||
gint x,
|
||||
gint y,
|
||||
gpointer)
|
||||
{
|
||||
using namespace std;
|
||||
|
||||
if (w == GTK_WIDGET(mixer->gobj())) {
|
||||
/* Mixer */
|
||||
|
||||
cerr << "Call use own window\n";
|
||||
|
||||
Gtk::Notebook* nb = mixer->use_own_window ();
|
||||
Gtk::Window* win = (Gtk::Window*) nb->get_toplevel ();
|
||||
|
||||
win->move (x, y);
|
||||
win->present ();
|
||||
|
||||
return nb;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -366,11 +366,13 @@ ARDOUR_UI::goto_mixer_window ()
|
||||
}
|
||||
|
||||
mixer->show_window ();
|
||||
mixer->present ();
|
||||
|
||||
// mixer->present ();
|
||||
/* mixer should now be on top */
|
||||
if (UIConfiguration::instance().get_transients_follow_front()) {
|
||||
WM::Manager::instance().set_transient_for (mixer);
|
||||
}
|
||||
//if (UIConfiguration::instance().get_transients_follow_front()) {
|
||||
// WM::Manager::instance().set_transient_for (mixer);
|
||||
//}
|
||||
|
||||
_mixer_on_top = true;
|
||||
}
|
||||
|
||||
@ -401,7 +403,7 @@ ARDOUR_UI::toggle_mixer_window ()
|
||||
if (show) {
|
||||
goto_mixer_window ();
|
||||
} else {
|
||||
mixer->hide ();
|
||||
mixer->hide_window ((GdkEventAny*)0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -549,7 +551,7 @@ ARDOUR_UI::main_window_state_event_handler (GdkEventWindowState* ev, bool window
|
||||
if ((ev->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) &&
|
||||
(ev->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) {
|
||||
if (big_clock_window) {
|
||||
big_clock_window->set_transient_for (*mixer);
|
||||
// big_clock_window->set_transient_for (*mixer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -726,3 +726,9 @@ ARDOUR_UI::xrun_button_release (GdkEventButton* ev)
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Gtk::Notebook&
|
||||
ARDOUR_UI::tabs()
|
||||
{
|
||||
return editor->tabs();
|
||||
}
|
||||
|
@ -668,8 +668,11 @@ Editor::Editor ()
|
||||
|
||||
status_bar_hpacker.show ();
|
||||
|
||||
_tabs.append_page (global_hpacker, _("Editor"));
|
||||
_tabs.show ();
|
||||
|
||||
vpacker.pack_end (status_bar_hpacker, false, false);
|
||||
vpacker.pack_end (global_hpacker, true, true);
|
||||
vpacker.pack_end (_tabs, true, true);
|
||||
|
||||
/* register actions now so that set_state() can find them and set toggles/checks etc */
|
||||
|
||||
@ -852,13 +855,9 @@ Editor::add_toplevel_menu (Container& cont)
|
||||
void
|
||||
Editor::add_transport_frame (Container& cont)
|
||||
{
|
||||
if(ARDOUR::Profile->get_mixbus()) {
|
||||
global_vpacker.pack_start (cont, false, false);
|
||||
global_vpacker.reorder_child (cont, 0);
|
||||
cont.show_all ();
|
||||
} else {
|
||||
vpacker.pack_start (cont, false, false);
|
||||
}
|
||||
global_vpacker.pack_start (cont, false, false);
|
||||
global_vpacker.reorder_child (cont, 0);
|
||||
cont.show_all ();
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <gtkmm/accelmap.h>
|
||||
|
||||
#include "pbd/convert.h"
|
||||
#include "pbd/stacktrace.h"
|
||||
#include "pbd/unwind.h"
|
||||
|
||||
#include <glibmm/threads.h>
|
||||
@ -36,6 +37,7 @@
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm2ext/tearoff.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
#include <gtkmm2ext/doi.h>
|
||||
|
||||
#include "ardour/amp.h"
|
||||
#include "ardour/debug.h"
|
||||
@ -87,8 +89,7 @@ Mixer_UI::instance ()
|
||||
}
|
||||
|
||||
Mixer_UI::Mixer_UI ()
|
||||
: Window (Gtk::WINDOW_TOPLEVEL)
|
||||
, VisibilityTracker (*((Gtk::Window*) this))
|
||||
: _parent_window (0)
|
||||
, _visible (false)
|
||||
, no_track_list_redisplay (false)
|
||||
, in_group_row_change (false)
|
||||
@ -103,13 +104,10 @@ Mixer_UI::Mixer_UI ()
|
||||
, _maximised (false)
|
||||
, _show_mixer_list (true)
|
||||
{
|
||||
/* allow this window to become the key focus window */
|
||||
set_flags (CAN_FOCUS);
|
||||
|
||||
Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::sync_treeview_from_order_keys, this), gui_context());
|
||||
|
||||
scroller.set_can_default (true);
|
||||
set_default (scroller);
|
||||
// set_default (scroller);
|
||||
|
||||
scroller_base.set_flags (Gtk::CAN_FOCUS);
|
||||
scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
@ -239,26 +237,21 @@ Mixer_UI::Mixer_UI ()
|
||||
list_hpane.signal_size_allocate().connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::pane_allocation_handler),
|
||||
static_cast<Gtk::Paned*> (&list_hpane)));
|
||||
|
||||
global_vpacker.pack_start (list_hpane, true, true);
|
||||
pack_start (list_hpane, true, true);
|
||||
|
||||
add (global_vpacker);
|
||||
set_name ("MixerWindow");
|
||||
|
||||
update_title ();
|
||||
|
||||
set_wmclass (X_("ardour_mixer"), PROGRAM_NAME);
|
||||
|
||||
signal_delete_event().connect (sigc::mem_fun (*this, &Mixer_UI::hide_window));
|
||||
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
|
||||
|
||||
signal_configure_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler));
|
||||
|
||||
route_group_display_button_box->show();
|
||||
route_group_add_button->show();
|
||||
route_group_remove_button->show();
|
||||
|
||||
show ();
|
||||
|
||||
global_hpacker.show();
|
||||
global_vpacker.show();
|
||||
scroller.show();
|
||||
scroller_base.show();
|
||||
scroller_hpacker.show();
|
||||
@ -310,14 +303,63 @@ Mixer_UI::track_editor_selection ()
|
||||
void
|
||||
Mixer_UI::ensure_float (Window& win)
|
||||
{
|
||||
win.set_transient_for (*this);
|
||||
if (_parent_window) {
|
||||
win.set_transient_for (*_parent_window);
|
||||
}
|
||||
}
|
||||
|
||||
Gtk::Notebook*
|
||||
Mixer_UI::use_own_window ()
|
||||
{
|
||||
/* This is called after a drop of a tab onto the root window. Its
|
||||
* responsibility is to return the notebook that this Mixer_UI should
|
||||
* be packed into before the drop handling is completed. It is not
|
||||
* responsible for actually taking care of this packing
|
||||
*/
|
||||
|
||||
if (_parent_window) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
create_own_window ();
|
||||
|
||||
return (Gtk::Notebook*) _parent_window->get_child();
|
||||
}
|
||||
|
||||
void
|
||||
Mixer_UI::create_own_window ()
|
||||
{
|
||||
if (_parent_window) {
|
||||
return;
|
||||
}
|
||||
|
||||
_parent_window = new Window (Gtk::WINDOW_TOPLEVEL);
|
||||
Notebook* notebook = manage (new Notebook);
|
||||
|
||||
notebook->set_show_tabs (false);
|
||||
notebook->show_all ();
|
||||
|
||||
_parent_window->add (*notebook);
|
||||
|
||||
/* allow parent window to become the key focus window */
|
||||
_parent_window->set_flags (CAN_FOCUS);
|
||||
|
||||
/* handle window manager close/delete event sensibly */
|
||||
_parent_window->signal_delete_event().connect (sigc::mem_fun (*this, &Mixer_UI::hide_window));
|
||||
|
||||
set_window_pos_and_size ();
|
||||
update_title ();
|
||||
}
|
||||
|
||||
void
|
||||
Mixer_UI::show_window ()
|
||||
{
|
||||
present ();
|
||||
if (!_visible) {
|
||||
if (_parent_window) {
|
||||
_parent_window->present ();
|
||||
}
|
||||
|
||||
if (!_visible) { /* was hidden, update status */
|
||||
|
||||
set_window_pos_and_size ();
|
||||
|
||||
/* show/hide group tabs as required */
|
||||
@ -337,19 +379,43 @@ Mixer_UI::show_window ()
|
||||
}
|
||||
}
|
||||
|
||||
if (!_parent_window) {
|
||||
/* not in its own window, just switch main tabs to show mixer */
|
||||
int pagenum = ARDOUR_UI::instance()->tabs().page_num (*this);
|
||||
ARDOUR_UI::instance()->tabs().set_current_page (pagenum);
|
||||
}
|
||||
|
||||
/* force focus into main area */
|
||||
scroller_base.grab_focus ();
|
||||
|
||||
_visible = true;
|
||||
}
|
||||
|
||||
bool
|
||||
Mixer_UI::hide_window (GdkEventAny *ev)
|
||||
{
|
||||
get_window_pos_and_size ();
|
||||
if (_parent_window) {
|
||||
/* unpack Mixer_UI from parent, put it back in the main tabbed
|
||||
* notebook
|
||||
*/
|
||||
|
||||
get_window_pos_and_size ();
|
||||
|
||||
get_parent()->remove (*this);
|
||||
ARDOUR_UI::instance()->tabs().insert_page (*this, _("Mixer"), 1);
|
||||
ARDOUR_UI::instance()->tabs().set_tab_detachable (*this);
|
||||
ARDOUR_UI::instance()->tabs().set_current_page (0);
|
||||
|
||||
show_all ();
|
||||
|
||||
delete_when_idle (_parent_window);
|
||||
_parent_window = 0;
|
||||
}
|
||||
|
||||
ARDOUR_UI::instance()->tabs().set_current_page (0);
|
||||
|
||||
_visible = false;
|
||||
return just_hide_it(ev, static_cast<Gtk::Window *>(this));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -1479,15 +1545,15 @@ Mixer_UI::show_mixer_list (bool yn)
|
||||
{
|
||||
if (yn) {
|
||||
list_vpacker.show ();
|
||||
|
||||
//if user wants to show the pane, we should make sure that it is wide enough to be visible
|
||||
|
||||
//if user wants to show the pane, we should make sure that it is wide enough to be visible
|
||||
int width = list_hpane.get_position();
|
||||
if (width < 40)
|
||||
list_hpane.set_position(40);
|
||||
} else {
|
||||
list_vpacker.hide ();
|
||||
}
|
||||
|
||||
|
||||
_show_mixer_list = yn;
|
||||
}
|
||||
|
||||
@ -1616,7 +1682,7 @@ Mixer_UI::strip_scroller_button_release (GdkEventButton* ev)
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
if (Keyboard::is_context_menu_event (ev)) {
|
||||
ARDOUR_UI::instance()->add_route (this);
|
||||
// ARDOUR_UI::instance()->add_route (this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1636,15 +1702,19 @@ Mixer_UI::set_strip_width (Width w, bool save)
|
||||
void
|
||||
Mixer_UI::set_window_pos_and_size ()
|
||||
{
|
||||
resize (m_width, m_height);
|
||||
move (m_root_x, m_root_y);
|
||||
if (_parent_window) {
|
||||
_parent_window->resize (m_width, m_height);
|
||||
_parent_window->move (m_root_x, m_root_y);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Mixer_UI::get_window_pos_and_size ()
|
||||
{
|
||||
get_position(m_root_x, m_root_y);
|
||||
get_size(m_width, m_height);
|
||||
if (_parent_window) {
|
||||
_parent_window->get_position(m_root_x, m_root_y);
|
||||
_parent_window->get_size(m_width, m_height);
|
||||
}
|
||||
}
|
||||
|
||||
struct PluginStateSorter {
|
||||
@ -1682,6 +1752,16 @@ Mixer_UI::set_state (const XMLNode& node)
|
||||
|
||||
if ((geometry = find_named_node (node, "geometry")) != 0) {
|
||||
|
||||
/* if there's a geometry node, we have our own window */
|
||||
|
||||
create_own_window ();
|
||||
Gtk::Notebook* notebook = (Gtk::Notebook*) _parent_window->get_child();
|
||||
Gtk::Widget* parent = get_parent();
|
||||
if (parent) {
|
||||
((Gtk::Container*)parent)->remove (*this);
|
||||
}
|
||||
notebook->append_page (*this, _("Mixer"));
|
||||
|
||||
XMLProperty* prop;
|
||||
|
||||
if ((prop = geometry->property("x_size")) == 0) {
|
||||
@ -1735,8 +1815,7 @@ Mixer_UI::set_state (const XMLNode& node)
|
||||
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
|
||||
bool fs = tact && tact->get_active();
|
||||
if (yn ^ fs) {
|
||||
ActionManager::do_action ("Common",
|
||||
"ToggleMaximalMixer");
|
||||
ActionManager::do_action ("Common", "ToggleMaximalMixer");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1771,7 +1850,6 @@ Mixer_UI::set_state (const XMLNode& node)
|
||||
favorite_order.sort (cmp);
|
||||
sync_treeview_from_favorite_order ();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1780,8 +1858,8 @@ Mixer_UI::get_state (void)
|
||||
{
|
||||
XMLNode* node = new XMLNode ("Mixer");
|
||||
|
||||
if (is_realized()) {
|
||||
Glib::RefPtr<Gdk::Window> win = get_window();
|
||||
if (_parent_window && _parent_window->is_realized() ) {
|
||||
Glib::RefPtr<Gdk::Window> win = _parent_window->get_window();
|
||||
|
||||
get_window_pos_and_size ();
|
||||
|
||||
@ -1928,30 +2006,25 @@ Mixer_UI::scroll_right ()
|
||||
bool
|
||||
Mixer_UI::on_key_press_event (GdkEventKey* ev)
|
||||
{
|
||||
/* focus widget gets first shot, then bindings, otherwise
|
||||
forward to main window
|
||||
*/
|
||||
|
||||
if (gtk_window_propagate_key_event (GTK_WINDOW(gobj()), ev)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
KeyboardKey k (ev->state, ev->keyval);
|
||||
|
||||
if (bindings.activate (k, Bindings::Press)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return forward_key_press (ev);
|
||||
if (_parent_window) {
|
||||
/* send it to the main window, since our own bindings didn't
|
||||
* handle it
|
||||
*/
|
||||
return forward_key_press (ev);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Mixer_UI::on_key_release_event (GdkEventKey* ev)
|
||||
{
|
||||
if (gtk_window_propagate_key_event (GTK_WINDOW(gobj()), ev)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
KeyboardKey k (ev->state, ev->keyval);
|
||||
|
||||
if (bindings.activate (k, Bindings::Release)) {
|
||||
@ -2091,7 +2164,7 @@ Mixer_UI::setup_track_display ()
|
||||
void
|
||||
Mixer_UI::new_track_or_bus ()
|
||||
{
|
||||
ARDOUR_UI::instance()->add_route (this);
|
||||
// ARDOUR_UI::instance()->add_route (this);
|
||||
}
|
||||
|
||||
|
||||
@ -2111,16 +2184,20 @@ Mixer_UI::update_title ()
|
||||
n = "*" + n;
|
||||
}
|
||||
|
||||
WindowTitle title (n);
|
||||
title += S_("Window|Mixer");
|
||||
title += Glib::get_application_name ();
|
||||
set_title (title.get_string());
|
||||
if (own_window()) {
|
||||
WindowTitle title (n);
|
||||
title += S_("Window|Mixer");
|
||||
title += Glib::get_application_name ();
|
||||
own_window()->set_title (title.get_string());
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
WindowTitle title (S_("Window|Mixer"));
|
||||
title += Glib::get_application_name ();
|
||||
set_title (title.get_string());
|
||||
if (own_window()) {
|
||||
WindowTitle title (S_("Window|Mixer"));
|
||||
title += Glib::get_application_name ();
|
||||
own_window()->set_title (title.get_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2194,9 +2271,12 @@ Mixer_UI::maximise_mixer_space ()
|
||||
return;
|
||||
}
|
||||
|
||||
fullscreen ();
|
||||
Gtk::Window* win = (Gtk::Window*) get_toplevel();
|
||||
|
||||
_maximised = true;
|
||||
if (win) {
|
||||
win->fullscreen ();
|
||||
_maximised = true;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -2206,9 +2286,12 @@ Mixer_UI::restore_mixer_space ()
|
||||
return;
|
||||
}
|
||||
|
||||
unfullscreen();
|
||||
Gtk::Window* win = (Gtk::Window*) get_toplevel();
|
||||
|
||||
_maximised = false;
|
||||
if (win) {
|
||||
win->unfullscreen();
|
||||
_maximised = false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -42,10 +42,13 @@
|
||||
#include "ardour/plugin.h"
|
||||
#include "ardour/plugin_manager.h"
|
||||
|
||||
<<<<<<< HEAD
|
||||
#include "gtkmm2ext/visibility_tracker.h"
|
||||
#include "gtkmm2ext/dndtreeview.h"
|
||||
#include "gtkmm2ext/treeutils.h"
|
||||
|
||||
=======
|
||||
>>>>>>> the basics of tabbed
|
||||
#include "enums.h"
|
||||
#include "mixer_actor.h"
|
||||
|
||||
@ -59,6 +62,7 @@ class PluginSelector;
|
||||
class MixerGroupTabs;
|
||||
class MonitorSection;
|
||||
|
||||
<<<<<<< HEAD
|
||||
class PluginTreeStore : public Gtk::TreeStore
|
||||
{
|
||||
public:
|
||||
@ -73,11 +77,19 @@ protected:
|
||||
};
|
||||
|
||||
class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr, public MixerActor, public Gtkmm2ext::VisibilityTracker
|
||||
=======
|
||||
class Mixer_UI : public Gtk::VBox, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr, public MixerActor
|
||||
>>>>>>> the basics of tabbed
|
||||
{
|
||||
public:
|
||||
static Mixer_UI* instance();
|
||||
~Mixer_UI();
|
||||
|
||||
Gtk::Window* own_window() const { return _parent_window; }
|
||||
Gtk::Notebook* use_own_window();
|
||||
|
||||
bool visible() const { return _visible; }
|
||||
|
||||
void set_session (ARDOUR::Session *);
|
||||
void track_editor_selection ();
|
||||
|
||||
@ -119,6 +131,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
|
||||
Mixer_UI ();
|
||||
static Mixer_UI* _instance;
|
||||
|
||||
Gtk::Window* _parent_window;
|
||||
bool _visible;
|
||||
|
||||
Gtk::HBox global_hpacker;
|
||||
@ -347,6 +360,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
|
||||
|
||||
void monitor_section_going_away ();
|
||||
|
||||
<<<<<<< HEAD
|
||||
void monitor_section_attached ();
|
||||
void monitor_section_detached ();
|
||||
|
||||
@ -357,6 +371,10 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
|
||||
void sync_treeview_favorite_ui_state (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&);
|
||||
void save_favorite_ui_state (const Gtk::TreeModel::iterator& iter, const Gtk::TreeModel::Path& path);
|
||||
|
||||
=======
|
||||
void create_own_window ();
|
||||
|
||||
>>>>>>> the basics of tabbed
|
||||
/// true if we are in fullscreen mode
|
||||
bool _maximised;
|
||||
|
||||
|
@ -171,7 +171,8 @@ This mode provides many different operations on both regions and control points,
|
||||
@wvis|Window/toggle-session-options-editor|<@SECONDARY@>o|toggle preferences dialog
|
||||
@trans|Editor/set-playhead|p|set playhead position
|
||||
@select|Editor/select-all-before-playhead|<@PRIMARY@>p|all before playhead
|
||||
@wvis|Window/toggle-rc-options-editor|<@SECONDARY@>p|toggle preferences dialog
|
||||
@wvis|Window/toggle-audio-connection-manager|<@WINDOW@>p|toggle global audio patchbay
|
||||
@wvis|Window/toggle-midi-connection-manager|<@WINDOW@><@TERTIARY@>p|toggle global midi patchbay
|
||||
@midi|MIDI/panic|<@PRIMARY@><@SECONDARY@>p|MIDI panic (stop all notes etc)
|
||||
@select|Editor/select-all-after-playhead|<@PRIMARY@><@TERTIARY@>p|all after playhead
|
||||
|
||||
|
@ -470,25 +470,19 @@ OptionEditorPage::OptionEditorPage (Gtk::Notebook& n, std::string const & t)
|
||||
* @param t Title for the dialog.
|
||||
*/
|
||||
OptionEditor::OptionEditor (PBD::Configuration* c, std::string const & t)
|
||||
: ArdourWindow (t), _config (c)
|
||||
: _config (c)
|
||||
{
|
||||
using namespace Notebook_Helpers;
|
||||
|
||||
set_default_size (300, 300);
|
||||
// set_wmclass (X_("ardour_preferences"), PROGRAM_NAME);
|
||||
|
||||
set_name ("Preferences");
|
||||
add_events (Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
|
||||
|
||||
set_border_width (4);
|
||||
|
||||
add (_notebook);
|
||||
pack_start (_notebook, true, true);
|
||||
|
||||
_notebook.set_show_tabs (true);
|
||||
_notebook.set_show_border (true);
|
||||
_notebook.set_name ("OptionsNotebook");
|
||||
|
||||
show_all_children();
|
||||
show_all ();
|
||||
|
||||
/* Watch out for changes to parameters */
|
||||
_config->ParameterChanged.connect (config_connection, invalidator (*this), boost::bind (&OptionEditor::parameter_changed, this, _1), gui_context());
|
||||
|
@ -680,7 +680,7 @@ public:
|
||||
};
|
||||
|
||||
/** The OptionEditor dialog base class */
|
||||
class OptionEditor : public ArdourWindow
|
||||
class OptionEditor : public Gtk::VBox, public ARDOUR::SessionHandlePtr
|
||||
{
|
||||
public:
|
||||
OptionEditor (PBD::Configuration *, std::string const &);
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include <gtkmm/box.h>
|
||||
#include <gtkmm/window.h>
|
||||
#include <gtkmm/actiongroup.h>
|
||||
#include <gtkmm/notebook.h>
|
||||
#include <sigc++/signal.h>
|
||||
|
||||
#include "evoral/Note.hpp"
|
||||
@ -441,7 +442,11 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
|
||||
PBD::Signal0<void> SnapChanged;
|
||||
PBD::Signal0<void> MouseModeChanged;
|
||||
|
||||
Gtk::Notebook& tabs() { return _tabs; }
|
||||
|
||||
protected:
|
||||
Gtk::Notebook _tabs;
|
||||
|
||||
friend class DisplaySuspender;
|
||||
virtual void suspend_route_redisplay () = 0;
|
||||
virtual void resume_route_redisplay () = 0;
|
||||
|
@ -76,7 +76,7 @@ using namespace ARDOUR_UI_UTILS;
|
||||
class ClickOptions : public OptionEditorBox
|
||||
{
|
||||
public:
|
||||
ClickOptions (RCConfiguration* c, Gtk::Window* p)
|
||||
ClickOptions (RCConfiguration* c)
|
||||
: _rc_config (c)
|
||||
, _click_browse_button (_("Browse..."))
|
||||
, _click_emphasis_browse_button (_("Browse..."))
|
||||
@ -1343,9 +1343,8 @@ private:
|
||||
class ControlSurfacesOptions : public OptionEditorBox
|
||||
{
|
||||
public:
|
||||
ControlSurfacesOptions (Gtk::Window& parent)
|
||||
: _parent (parent)
|
||||
, _ignore_view_change (0)
|
||||
ControlSurfacesOptions ()
|
||||
: _ignore_view_change (0)
|
||||
{
|
||||
_store = ListStore::create (_model);
|
||||
_view.set_model (_store);
|
||||
@ -1496,7 +1495,8 @@ private:
|
||||
* or re-initializing a surface.
|
||||
* tear_down_gui() hides an deletes the Window if it exists.
|
||||
*/
|
||||
ArdourWindow* win = new ArdourWindow (_parent, title.get_string());
|
||||
ArdourWindow* win = new ArdourWindow (*((Gtk::Window*) _view.get_toplevel()), title.get_string());
|
||||
win->set_title ("Control Protocol Options");
|
||||
win->add (*box);
|
||||
box->show ();
|
||||
win->present ();
|
||||
@ -1532,7 +1532,6 @@ private:
|
||||
Glib::RefPtr<ListStore> _store;
|
||||
ControlSurfacesModelColumns _model;
|
||||
TreeView _view;
|
||||
Gtk::Window& _parent;
|
||||
PBD::ScopedConnection protocol_status_connection;
|
||||
uint32_t _ignore_view_change;
|
||||
Gtk::Button* edit_button;
|
||||
@ -1800,7 +1799,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||
|
||||
add_option (_("Misc"), new OptionEditorHeading (_("Click")));
|
||||
|
||||
add_option (_("Misc"), new ClickOptions (_rc_config, this));
|
||||
add_option (_("Misc"), new ClickOptions (_rc_config));
|
||||
|
||||
add_option (_("Misc"),
|
||||
new FaderOption (
|
||||
@ -2710,7 +2709,7 @@ if (!Profile->get_mixbus()) {
|
||||
|
||||
/* Control Surfaces */
|
||||
|
||||
add_option (_("Control Surfaces"), new ControlSurfacesOptions (*this));
|
||||
add_option (_("Control Surfaces"), new ControlSurfacesOptions);
|
||||
|
||||
ComboOption<RemoteModel>* rm = new ComboOption<RemoteModel> (
|
||||
"remote-model",
|
||||
|
Loading…
Reference in New Issue
Block a user