* -------------------------------------------------------------------------
* This file is part of the MindStudio project.
* Copyright (c) 2025 Huawei Technologies Co.,Ltd.
*
* MindStudio is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------
*/
import { register } from './register';
import { KEYS } from '@insight/lib/utils';
import type { Session } from '../entity/session';
import { runInAction } from 'mobx';
const processMKeyEvent = (session: Session): void => {
if (session.selectedRangeIsLock || session.isTimeAnalysisMode) {
return;
}
let render = false;
let range: number[] = [];
if (!session.mKeyRender && session.selectedData === undefined) {
render = false;
range = [];
} else if (!session.mKeyRender && session.selectedData !== undefined) {
const selectedData = session.selectedData;
range = [selectedData.startTime, selectedData.startTime + selectedData.duration];
render = true;
} else if (session.mKeyRender && session.selectedData === undefined) {
render = false;
range = [];
} else if (session.mKeyRender && session.selectedData !== undefined) {
const selectedData = session.selectedData;
const tempRange = [selectedData.startTime, selectedData.startTime + selectedData.duration];
if (session.mMaskRange[0] === tempRange[0] && session.mMaskRange[1] === tempRange[1]) {
render = false;
range = [];
} else {
render = true;
range = tempRange;
}
} else {
render = session.mKeyRender;
range = session.mMaskRange;
}
runInAction(() => {
session.mKeyRender = render;
session.mMaskRange = range;
});
};
export const actionToggleSelection = register({
name: 'toggleSelection',
label: '',
once: true,
perform: (session): void => {
processMKeyEvent(session);
},
keyTest: (event) => event.key.toLowerCase() === KEYS.M,
});