N_("Slide"),
N_("Splice"),
N_("Ripple"),
- N_("Lock"),
+ N_("Constrained"),
0
};
edit_mode_selector.AddMenuElem (MenuElem ( edit_mode_strings[(int)Slide], sigc::bind (sigc::mem_fun(*this, &Editor::edit_mode_selection_done), (EditMode) Slide)));
// edit_mode_selector.AddMenuElem (MenuElem ( edit_mode_strings[(int)Splice], sigc::bind (sigc::mem_fun(*this, &Editor::edit_mode_selection_done), (EditMode) Splice)));
edit_mode_selector.AddMenuElem (MenuElem ( edit_mode_strings[(int)Ripple], sigc::bind (sigc::mem_fun(*this, &Editor::edit_mode_selection_done), (EditMode) Ripple)));
- edit_mode_selector.AddMenuElem (MenuElem ( edit_mode_strings[(int)Lock], sigc::bind (sigc::mem_fun(*this, &Editor::edit_mode_selection_done), (EditMode) Lock)));
+ edit_mode_selector.AddMenuElem (MenuElem ( edit_mode_strings[(int)Constrained], sigc::bind (sigc::mem_fun(*this, &Editor::edit_mode_selection_done), (EditMode) Constrained)));
set_size_request_to_display_given_text (edit_mode_selector, edit_mode_strings, COMBO_TRIANGLE_WIDTH, 2);
}
switch (Config->get_edit_mode()) {
case Slide:
if (Profile->get_sae()) {
- Config->set_edit_mode (Lock);
+ Config->set_edit_mode (Constrained);
} else {
Config->set_edit_mode (Ripple);
}
break;
case Splice:
case Ripple:
- Config->set_edit_mode (Lock);
+ Config->set_edit_mode (Constrained);
break;
- case Lock:
+ case Constrained:
Config->set_edit_mode (Slide);
break;
}
// ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Splice));
ActionManager::register_action (editor_actions, "set-edit-ripple", _("Ripple"), bind (mem_fun (*this, &Editor::set_edit_mode), Ripple));
ActionManager::register_action (editor_actions, "set-edit-slide", _("Slide"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Slide));
- ActionManager::register_action (editor_actions, "set-edit-lock", S_("EditMode|Lock"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Lock));
+ ActionManager::register_action (editor_actions, "set-edit-constrained", S_("EditMode|Constrained"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Constrained));
ActionManager::register_action (editor_actions, "cycle-edit-mode", _("Cycle Edit Mode"), sigc::mem_fun (*this, &Editor::cycle_edit_mode));
ActionManager::register_action (editor_actions, X_("SnapTo"), _("Snap to"));
frameoffset_t
Drag::snap_delta (GdkEvent const * event) const
{
- if (Keyboard::modifier_state_contains (event->button.state, Keyboard::TertiaryModifier)) {
+ if (Keyboard::modifier_state_equals (event->button.state, Keyboard::snap_delta_modifier())) {
return 0;
} else {
return _snap_delta;
/* just changed */
if (fabs (current_pointer_y() - _grab_y) > fabs (current_pointer_x() - _grab_x)) {
- if (event->motion.state & Gdk::BUTTON2_MASK) {
+ if ((event->motion.state & Gdk::BUTTON2_MASK) || Config->get_edit_mode() == Constrained) {
_x_constrained = true;
_y_constrained = false;
}
_initially_vertical = true;
} else {
- if (event->motion.state & Gdk::BUTTON2_MASK) {
+ if ((event->motion.state & Gdk::BUTTON2_MASK) || Config->get_edit_mode() == Constrained) {
_x_constrained = false;
_y_constrained = true;
}
_initially_vertical = false;
}
+
+ if ((event->motion.state & Gdk::BUTTON2_MASK) && Config->get_edit_mode() == Constrained) {
+ _x_constrained = false;
+ _y_constrained = false;
+ }
}
if (!from_autoscroll) {
}
double dx = 0;
-
- /* in locked edit mode, reverse the usual meaning of _x_constrained */
- bool const x_move_allowed = Config->get_edit_mode() == Lock ? _x_constrained : !_x_constrained;
+ bool x_move_allowed = !_x_constrained;
if ((*pending_region_position != _last_frame_position) && x_move_allowed) {
return;
}
- /* reverse this here so that we have the correct logic to finalize
- the drag.
- */
-
- if (Config->get_edit_mode() == Lock) {
- _x_constrained = !_x_constrained;
- }
-
assert (!_views.empty ());
/* We might have hidden region views so that they weren't visible during the drag
{
bool commit = false;
- if (Config->get_edit_mode() == Lock) {
+ if (Config->get_edit_mode() == Constrained) {
return;
}
{
bool commit = false;
- if (Config->get_edit_mode() == Lock) {
- error << (_("Cannot insert or delete time when in Lock edit.")) << endmsg;
+ if (Config->get_edit_mode() == Constrained) {
+ error << (_("Cannot insert or delete time when in Constrained edit.")) << endmsg;
return;
}
}
}
- Table* t = manage (new Table (4, 4));
+ Table* t = manage (new Table (4, 5));
t->set_spacings (4);
Label* l = manage (left_aligned_label (_("Edit using:")));
_insert_note_button_adjustment.set_value (Keyboard::insert_note_button());
_insert_note_button_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::insert_note_button_changed));
-
+ /* ignore snap */
set_popdown_strings (_snap_modifier_combo, dumb);
_snap_modifier_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::snap_modifier_chosen));
t->attach (*l, 0, 1, 3, 4, FILL | EXPAND, FILL);
t->attach (_snap_modifier_combo, 1, 2, 3, 4, FILL | EXPAND, FILL);
+ /* snap delta */
+ set_popdown_strings (_snap_delta_combo, dumb);
+ _snap_delta_combo.signal_changed().connect (sigc::mem_fun(*this, &KeyboardOptions::snap_delta_modifier_chosen));
+
+ for (int x = 0; modifiers[x].name; ++x) {
+ if (modifiers[x].modifier == (guint) Keyboard::snap_delta_modifier ()) {
+ _snap_delta_combo.set_active_text (S_(modifiers[x].name));
+ break;
+ }
+ }
+
+ l = manage (left_aligned_label (_("Snap to absolute using:")));
+ l->set_name ("OptionsLabel");
+
+ t->attach (*l, 0, 1, 4, 5, FILL | EXPAND, FILL);
+ t->attach (_snap_delta_combo, 1, 2, 4, 5, FILL | EXPAND, FILL);
+
vector<string> strs;
for (map<string,string>::iterator bf = Keyboard::binding_files.begin(); bf != Keyboard::binding_files.end(); ++bf) {
l = manage (left_aligned_label (_("Keyboard layout:")));
l->set_name ("OptionsLabel");
- t->attach (*l, 0, 1, 4, 5, FILL | EXPAND, FILL);
- t->attach (_keyboard_layout_selector, 1, 2, 4, 5, FILL | EXPAND, FILL);
+ t->attach (*l, 0, 1, 5, 6, FILL | EXPAND, FILL);
+ t->attach (_keyboard_layout_selector, 1, 2, 5, 6, FILL | EXPAND, FILL);
_box->pack_start (*t, false, false);
}
}
}
+ void snap_delta_modifier_chosen ()
+ {
+ string const txt = _snap_delta_combo.get_active_text();
+
+ for (int i = 0; modifiers[i].name; ++i) {
+ if (txt == _(modifiers[i].name)) {
+ Keyboard::set_snap_delta_modifier (modifiers[i].modifier);
+ break;
+ }
+ }
+ }
+
void delete_button_changed ()
{
Keyboard::set_delete_button (_delete_button_spin.get_value_as_int());
ComboBoxText _delete_modifier_combo;
ComboBoxText _insert_note_modifier_combo;
ComboBoxText _snap_modifier_combo;
+ ComboBoxText _snap_delta_combo;
Adjustment _delete_button_adjustment;
SpinButton _delete_button_spin;
Adjustment _edit_button_adjustment;
Slide,
Splice,
Ripple,
- Lock
+ Constrained
};
enum RegionSelectionAfterSplit {
REGISTER_ENUM (Slide);
REGISTER_ENUM (Splice);
REGISTER_ENUM (Ripple); // XXX do the old enum values have to stay in order?
- REGISTER_ENUM (Lock);
+ REGISTER_ENUM (Constrained);
REGISTER (_EditMode);
/*
* Splice mode is undefined, undocumented, and basically fubar'ed
return Slide;
} else if (str == _("Ripple")) {
return Ripple;
- } else if (str == _("Lock")) {
- return Lock;
+ } else if (str == _("Constrained")) {
+ return Constrained;
}
fatal << string_compose (_("programming error: unknown edit mode string \"%1\""), str) << endmsg;
abort(); /*NOTREACHED*/
case Slide:
return _("Slide");
- case Lock:
- return _("Lock");
+ case Constrained:
+ return _("Constrained");
case Ripple:
return _("Ripple");
*/
static ModifierMask snap_modifier () { return ModifierMask (snap_mod); }
+ static void set_snap_delta_modifier (guint);
+
+ /** @return Modifier mask to temporarily toggle between relative and absolute grid setting;
+ */
+ static ModifierMask snap_delta_modifier () { return ModifierMask (snap_delta_mod); }
+
static guint edit_button() { return edit_but; }
static void set_edit_button (guint);
static guint edit_modifier() { return edit_mod; }
static guint insert_note_but;
static guint insert_note_mod;
static guint snap_mod;
+ static guint snap_delta_mod;
static guint button2_modifiers;
static Gtk::Window* current_window;
static std::string user_keybindings_path;
guint Keyboard::insert_note_but = 1;
guint Keyboard::insert_note_mod = GDK_CONTROL_MASK;
guint Keyboard::snap_mod = GDK_MOD3_MASK;
+guint Keyboard::snap_delta_mod = 0;
#ifdef GTKOSX
node->add_property ("delete-modifier", buf);
snprintf (buf, sizeof (buf), "%d", snap_mod);
node->add_property ("snap-modifier", buf);
+ snprintf (buf, sizeof (buf), "%d", snap_delta_mod);
+ node->add_property ("snap-delta-modifier", buf);
snprintf (buf, sizeof (buf), "%d", insert_note_but);
node->add_property ("insert-note-button", buf);
snprintf (buf, sizeof (buf), "%d", insert_note_mod);
sscanf (prop->value().c_str(), "%d", &snap_mod);
}
+ if ((prop = node.property ("snap-delta-modifier")) != 0) {
+ sscanf (prop->value().c_str(), "%d", &snap_delta_mod);
+ }
+
if ((prop = node.property ("insert-note-button")) != 0) {
sscanf (prop->value().c_str(), "%d", &insert_note_but);
}
RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | snap_mod);
}
+void
+Keyboard::set_snap_delta_modifier (guint mod)
+{cerr << "setting snap delta mod" << endl;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask & ~snap_delta_mod);
+ snap_delta_mod = mod;
+ RelevantModifierKeyMask = GdkModifierType (RelevantModifierKeyMask | snap_delta_mod);
+}
+
bool
Keyboard::is_edit_event (GdkEventButton *ev)
{