Skip to content

Commit

Permalink
#125 Add another action variant that opens the mapping panel after le…
Browse files Browse the repository at this point in the history
…arning
  • Loading branch information
helgoboss committed Jan 29, 2021
1 parent 8e28d06 commit 7a76b8f
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 30 deletions.
6 changes: 3 additions & 3 deletions main/src/application/session.rs
Expand Up @@ -29,7 +29,7 @@ use std::rc::{Rc, Weak};
use wrap_debug::WrapDebug;

pub trait SessionUi {
fn show_mapping(&self, mapping: *const MappingModel);
fn show_mapping(&self, compartment: MappingCompartment, mapping_id: MappingId);
}

/// This represents the user session with one ReaLearn instance.
Expand Down Expand Up @@ -1419,8 +1419,8 @@ impl Session {
mapping
}

pub fn show_mapping(&self, mapping: *const MappingModel) {
self.ui.show_mapping(mapping);
pub fn show_mapping(&self, compartment: MappingCompartment, mapping_id: MappingId) {
self.ui.show_mapping(compartment, mapping_id);
}

/// Notifies listeners async that something in a mapping list has changed.
Expand Down
61 changes: 42 additions & 19 deletions main/src/infrastructure/plugin/app.rs
Expand Up @@ -648,22 +648,35 @@ impl App {
ActionKind::NotToggleable,
);
Reaper::get().register_action(
"REALEARN_LEARN_REPLACING_SOURCE",
"ReaLearn: Learn mapping (replacing mapping with existing source)",
"REALEARN_LEARN_MAPPING_REASSIGNING_SOURCE",
"ReaLearn: Learn single mapping (reassigning source)",
move || {
Global::future_support().spawn_in_main_thread_from_main_thread(async {
let result = App::get()
.learn_replacing_source(MappingCompartment::MainMappings)
let _ = App::get()
.learn_mapping_reassigning_source(MappingCompartment::MainMappings, false)
.await;
});
},
ActionKind::NotToggleable,
);
Reaper::get().register_action(
"REALEARN_LEARN_MAPPING_REASSIGNING_SOURCE_OPEN",
"ReaLearn: Learn single mapping (reassigning source) and open it",
move || {
Global::future_support().spawn_in_main_thread_from_main_thread(async {
let _ = App::get()
.learn_mapping_reassigning_source(MappingCompartment::MainMappings, true)
.await;
});
},
ActionKind::NotToggleable,
);
}

async fn learn_replacing_source(
async fn learn_mapping_reassigning_source(
&self,
compartment: MappingCompartment,
open_mapping: bool,
) -> Result<(), &'static str> {
if self.find_first_relevant_session().is_none() {
self.close_message_panel_with_alert(
Expand All @@ -688,29 +701,39 @@ impl App {
.prompt_for_next_reaper_target("Now touch the desired target!")
.await?;
self.close_message_panel();
if let Some((session, mapping)) =
let (session, mapping) = if let Some((session, mapping)) =
self.find_first_relevant_session_with_source(compartment, dev_id, &midi_source)
{
// There's already a mapping with that source. Change target of that mapping.
mapping
.borrow_mut()
.target_model
.apply_from_target(&reaper_target, session.borrow().context());
(session, mapping)
} else {
// There's no mapping with that source yet. Add it to the previously determined first
// session.
let mut session = session.borrow_mut();
let mapping = session.add_default_mapping(
compartment,
GroupId::default(),
VirtualControlElementType::Multi,
);
let mut mapping = mapping.borrow_mut();
let compound_source = session.create_compound_source(midi_source);
mapping.source_model.apply_from_source(&compound_source);
mapping
.target_model
.apply_from_target(&reaper_target, session.context());
let mapping = {
let mut s = session.borrow_mut();
let mapping = s.add_default_mapping(
compartment,
GroupId::default(),
VirtualControlElementType::Multi,
);
let mut m = mapping.borrow_mut();
let compound_source = s.create_compound_source(midi_source);
m.source_model.apply_from_source(&compound_source);
m.target_model
.apply_from_target(&reaper_target, s.context());
drop(m);
mapping
};
(session, mapping)
};
if open_mapping {
session
.borrow()
.show_mapping(compartment, mapping.borrow().id());
}
Ok(())
}
Expand Down Expand Up @@ -786,7 +809,7 @@ impl App {
let mapping =
s.borrow_mut()
.toggle_learn_source_for_target(&s, compartment, target);
s.borrow().show_mapping(mapping.as_ptr());
s.borrow().show_mapping(compartment, mapping.borrow().id());
}
}
}
Expand Down
11 changes: 6 additions & 5 deletions main/src/infrastructure/ui/main_panel.rs
Expand Up @@ -11,7 +11,7 @@ use std::cell::{Cell, RefCell};

use crate::application::{MappingModel, SessionUi, WeakSession};
use crate::core::when;
use crate::domain::MappingId;
use crate::domain::{MappingCompartment, MappingId};
use crate::infrastructure::plugin::{App, RealearnPluginParameters};
use rx_util::UnitEvent;
use std::rc::{Rc, Weak};
Expand Down Expand Up @@ -102,9 +102,10 @@ impl MainPanel {
}
}

pub fn edit_mapping(&self, mapping: *const MappingModel) {
pub fn edit_mapping(&self, compartment: MappingCompartment, mapping_id: MappingId) {
if let Some(data) = self.active_data.borrow() {
data.mapping_rows_panel.edit_mapping(mapping);
data.mapping_rows_panel
.edit_mapping(compartment, mapping_id);
}
}

Expand Down Expand Up @@ -183,10 +184,10 @@ impl View for MainPanel {
}

impl SessionUi for Weak<MainPanel> {
fn show_mapping(&self, mapping: *const MappingModel) {
fn show_mapping(&self, compartment: MappingCompartment, mapping_id: MappingId) {
self.upgrade()
.expect("main panel not existing anymore")
.edit_mapping(mapping);
.edit_mapping(compartment, mapping_id);
}
}

Expand Down
6 changes: 3 additions & 3 deletions main/src/infrastructure/ui/mapping_rows_panel.rs
Expand Up @@ -129,11 +129,11 @@ impl MappingRowsPanel {
.position(|m| m.borrow().id() == mapping_id)
}

pub fn edit_mapping(&self, mapping: *const MappingModel) {
if let Some(m) = self
pub fn edit_mapping(&self, compartment: MappingCompartment, mapping_id: MappingId) {
if let Some((_, m)) = self
.session()
.borrow()
.find_mapping_by_address(self.active_compartment(), mapping)
.find_mapping_and_index_by_id(compartment, mapping_id)
{
self.panel_manager().borrow_mut().edit_mapping(m);
}
Expand Down

0 comments on commit 7a76b8f

Please sign in to comment.