You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

226 lines
9.3 KiB
TypeScript

// Copyright (C) 2020-2022 Intel Corporation
//
// SPDX-License-Identifier: MIT
import React from 'react';
import { Row, Col } from 'antd/lib/grid';
import Checkbox, { CheckboxChangeEvent } from 'antd/lib/checkbox';
import Button from 'antd/lib/button';
import Select from 'antd/lib/select';
import Popover from 'antd/lib/popover';
import InputNumber from 'antd/lib/input-number';
import Icon from '@ant-design/icons';
import Text from 'antd/lib/typography/Text';
import { CompactPicker } from 'react-color';
import { clamp } from 'utils/math';
import { BackJumpIcon, ForwardJumpIcon } from 'icons';
import { FrameSpeed } from 'reducers/interfaces';
import consts from 'consts';
interface Props {
frameStep: number;
frameSpeed: FrameSpeed;
resetZoom: boolean;
rotateAll: boolean;
smoothImage: boolean;
showDeletedFrames: boolean;
canvasBackgroundColor: string;
onChangeFrameStep(step: number): void;
onChangeFrameSpeed(speed: FrameSpeed): void;
onSwitchResetZoom(enabled: boolean): void;
onSwitchRotateAll(rotateAll: boolean): void;
onChangeCanvasBackgroundColor(color: string): void;
onSwitchSmoothImage(enabled: boolean): void;
onSwitchShowingDeletedFrames(enabled: boolean): void;
}
export default function PlayerSettingsComponent(props: Props): JSX.Element {
const {
frameStep,
frameSpeed,
resetZoom,
rotateAll,
smoothImage,
showDeletedFrames,
canvasBackgroundColor,
onChangeFrameStep,
onChangeFrameSpeed,
onSwitchResetZoom,
onSwitchRotateAll,
onSwitchSmoothImage,
onChangeCanvasBackgroundColor,
onSwitchShowingDeletedFrames,
} = props;
const minFrameStep = 2;
const maxFrameStep = 1000;
return (
<div className='cvat-player-settings'>
<Row align='bottom' className='cvat-player-settings-step'>
<Col>
<Text className='cvat-text-color'> Player step </Text>
<InputNumber
min={minFrameStep}
max={maxFrameStep}
value={frameStep}
onChange={(value: number | undefined | string | null): void => {
if (typeof value !== 'undefined' && value !== null) {
onChangeFrameStep(Math.floor(clamp(+value, minFrameStep, maxFrameStep)));
}
}}
/>
</Col>
<Col offset={1}>
<Text type='secondary'>
Number of frames skipped when selecting
<Icon component={BackJumpIcon} />
or
<Icon component={ForwardJumpIcon} />
</Text>
</Col>
</Row>
<Row align='middle' className='cvat-player-settings-speed'>
<Col>
<Text className='cvat-text-color'> Player speed </Text>
<Select
className='cvat-player-settings-speed-select'
value={frameSpeed}
onChange={(speed: FrameSpeed): void => {
onChangeFrameSpeed(speed);
}}
>
<Select.Option
key='fastest'
value={FrameSpeed.Fastest}
className='cvat-player-settings-speed-fastest'
>
Fastest
</Select.Option>
<Select.Option key='fast' value={FrameSpeed.Fast} className='cvat-player-settings-speed-fast'>
Fast
</Select.Option>
<Select.Option
key='usual'
value={FrameSpeed.Usual}
className='cvat-player-settings-speed-usual'
>
Usual
</Select.Option>
<Select.Option key='slow' value={FrameSpeed.Slow} className='cvat-player-settings-speed-slow'>
Slow
</Select.Option>
<Select.Option
key='slower'
value={FrameSpeed.Slower}
className='cvat-player-settings-speed-slower'
>
Slower
</Select.Option>
<Select.Option
key='slowest'
value={FrameSpeed.Slowest}
className='cvat-player-settings-speed-slowest'
>
Slowest
</Select.Option>
</Select>
</Col>
</Row>
<Row className='cvat-player-settings-canvas-background'>
<Col>
<Popover
content={(
<CompactPicker
colors={consts.CANVAS_BACKGROUND_COLORS}
color={canvasBackgroundColor}
onChange={(e) => onChangeCanvasBackgroundColor(e.hex)}
/>
)}
overlayClassName='canvas-background-color-picker-popover'
trigger='click'
>
<Button type='default'>Select canvas background color</Button>
</Popover>
</Col>
</Row>
<Row justify='start'>
<Col span={7}>
<Row className='cvat-player-settings-reset-zoom'>
<Col span={24} className='cvat-player-settings-reset-zoom-checkbox'>
<Checkbox
className='cvat-text-color'
checked={resetZoom}
onChange={(event: CheckboxChangeEvent): void => {
onSwitchResetZoom(event.target.checked);
}}
>
Reset zoom
</Checkbox>
</Col>
<Col span={24}>
<Text type='secondary'> Fit image after changing frame </Text>
</Col>
</Row>
</Col>
<Col span={7} offset={5}>
<Row className='cvat-player-settings-rotate-all'>
<Col span={24} className='cvat-player-settings-rotate-all-checkbox'>
<Checkbox
className='cvat-text-color'
checked={rotateAll}
onChange={(event: CheckboxChangeEvent): void => {
onSwitchRotateAll(event.target.checked);
}}
>
Rotate all images
</Checkbox>
</Col>
<Col span={24}>
<Text type='secondary'> Rotate all images simultaneously </Text>
</Col>
</Row>
</Col>
</Row>
<Row justify='start'>
<Col span={7}>
<Row className='cvat-player-settings-smooth-image'>
<Col span={24} className='cvat-player-settings-smooth-image-checkbox'>
<Checkbox
className='cvat-text-color'
checked={smoothImage}
onChange={(event: CheckboxChangeEvent): void => {
onSwitchSmoothImage(event.target.checked);
}}
>
Smooth image
</Checkbox>
</Col>
<Col span={24}>
<Text type='secondary'> Smooth image when zoom-in it </Text>
</Col>
</Row>
</Col>
<Col span={7} offset={5} className='cvat-workspace-settings-show-deleted'>
<Row>
<Checkbox
className='cvat-text-color'
checked={showDeletedFrames}
onChange={(event: CheckboxChangeEvent): void => {
onSwitchShowingDeletedFrames(event.target.checked);
}}
>
Show deleted frames
</Checkbox>
</Row>
<Row>
<Text type='secondary'>You will be able to navigate and restore deleted frames</Text>
</Row>
</Col>
</Row>
</div>
);
}