2023-08-16 00:39:16 +03:00
|
|
|
|
import { useLayoutEffect, useState } from 'react';
|
|
|
|
|
|
|
|
|
|
import Checkbox from '../../components/Common/Checkbox';
|
2023-09-11 17:56:32 +03:00
|
|
|
|
import Modal, { ModalProps } from '../../components/Common/Modal';
|
2023-09-11 20:31:54 +03:00
|
|
|
|
import { CstType } from '../../models/rsform';
|
2023-08-16 00:39:16 +03:00
|
|
|
|
import { getCstTypeLabel } from '../../utils/staticUI';
|
|
|
|
|
import { GraphEditorParams } from './EditorTermGraph';
|
|
|
|
|
|
2023-09-11 17:56:32 +03:00
|
|
|
|
interface DlgGraphOptionsProps
|
|
|
|
|
extends Pick<ModalProps, 'hideWindow'> {
|
2023-08-16 00:39:16 +03:00
|
|
|
|
initial: GraphEditorParams
|
|
|
|
|
onConfirm: (params: GraphEditorParams) => void
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function DlgGraphOptions({ hideWindow, initial, onConfirm }:DlgGraphOptionsProps) {
|
|
|
|
|
const [ noHermits, setNoHermits ] = useState(true);
|
|
|
|
|
const [ noTransitive, setNoTransitive ] = useState(false);
|
|
|
|
|
const [ noTemplates, setNoTemplates ] = useState(true);
|
2023-08-16 00:50:27 +03:00
|
|
|
|
const [ noTerms, setNoTerms ] = useState(true);
|
2023-08-16 00:39:16 +03:00
|
|
|
|
|
|
|
|
|
const [ allowBase, setAllowBase ] = useState(true);
|
|
|
|
|
const [ allowStruct, setAllowStruct ] = useState(true);
|
|
|
|
|
const [ allowTerm, setAllowTerm ] = useState(true);
|
|
|
|
|
const [ allowAxiom, setAllowAxiom ] = useState(true);
|
|
|
|
|
const [ allowFunction, setAllowFunction ] = useState(true);
|
|
|
|
|
const [ allowPredicate, setAllowPredicate ] = useState(true);
|
|
|
|
|
const [ allowConstant, setAllowConstant ] = useState(true);
|
|
|
|
|
const [ allowTheorem, setAllowTheorem ] = useState(true);
|
|
|
|
|
|
|
|
|
|
function getParams() {
|
|
|
|
|
return {
|
|
|
|
|
noHermits: noHermits,
|
|
|
|
|
noTransitive: noTransitive,
|
|
|
|
|
noTemplates: noTemplates,
|
2023-08-16 00:50:27 +03:00
|
|
|
|
noTerms: noTerms,
|
2023-08-16 00:39:16 +03:00
|
|
|
|
|
|
|
|
|
allowBase: allowBase,
|
|
|
|
|
allowStruct: allowStruct,
|
|
|
|
|
allowTerm: allowTerm,
|
|
|
|
|
allowAxiom: allowAxiom,
|
|
|
|
|
allowFunction: allowFunction,
|
|
|
|
|
allowPredicate: allowPredicate,
|
|
|
|
|
allowConstant: allowConstant,
|
|
|
|
|
allowTheorem: allowTheorem
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleSubmit = () => {
|
|
|
|
|
hideWindow();
|
|
|
|
|
onConfirm(getParams());
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
useLayoutEffect(() => {
|
|
|
|
|
setNoHermits(initial.noHermits);
|
|
|
|
|
setNoTransitive(initial.noTransitive);
|
|
|
|
|
setNoTemplates(initial.noTemplates);
|
2023-08-16 00:50:27 +03:00
|
|
|
|
setNoTerms(initial.noTerms);
|
2023-08-16 00:39:16 +03:00
|
|
|
|
|
|
|
|
|
setAllowBase(initial.allowBase);
|
|
|
|
|
setAllowStruct(initial.allowStruct);
|
|
|
|
|
setAllowTerm(initial.allowTerm);
|
|
|
|
|
setAllowAxiom(initial.allowAxiom);
|
|
|
|
|
setAllowFunction(initial.allowFunction);
|
|
|
|
|
setAllowPredicate(initial.allowPredicate);
|
|
|
|
|
setAllowConstant(initial.allowConstant);
|
|
|
|
|
setAllowTheorem(initial.allowTheorem);
|
|
|
|
|
}, [initial]);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Modal
|
|
|
|
|
hideWindow={hideWindow}
|
|
|
|
|
title='Настройки графа термов'
|
|
|
|
|
onSubmit={handleSubmit}
|
|
|
|
|
canSubmit
|
|
|
|
|
submitText='Применить'
|
|
|
|
|
>
|
|
|
|
|
<div className='flex gap-2'>
|
2023-09-15 23:29:52 +03:00
|
|
|
|
<div className='flex flex-col gap-1'>
|
2023-08-16 00:39:16 +03:00
|
|
|
|
<h1>Преобразования</h1>
|
2023-08-16 00:50:27 +03:00
|
|
|
|
<Checkbox
|
|
|
|
|
label='Скрыть текст'
|
|
|
|
|
tooltip='Не отображать термины'
|
|
|
|
|
value={noTerms}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setNoTerms(value) }
|
2023-08-16 00:50:27 +03:00
|
|
|
|
/>
|
2023-08-16 00:39:16 +03:00
|
|
|
|
<Checkbox
|
|
|
|
|
label='Скрыть несвязанные'
|
|
|
|
|
tooltip='Неиспользуемые конституенты'
|
|
|
|
|
value={noHermits}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setNoHermits(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
<Checkbox
|
|
|
|
|
label='Скрыть шаблоны'
|
|
|
|
|
tooltip='Терм-функции и предикат-функции с параметризованными аргументами'
|
|
|
|
|
value={noTemplates}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setNoTemplates(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
<Checkbox
|
|
|
|
|
label='Транзитивная редукция'
|
|
|
|
|
tooltip='Удалить связи, образующие транзитивные пути в графе'
|
|
|
|
|
value={noTransitive}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setNoTransitive(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
</div>
|
2023-09-15 23:29:52 +03:00
|
|
|
|
<div className='flex flex-col gap-1'>
|
2023-08-16 00:39:16 +03:00
|
|
|
|
<h1>Типы конституент</h1>
|
|
|
|
|
<Checkbox
|
|
|
|
|
label={getCstTypeLabel(CstType.BASE)}
|
|
|
|
|
value={allowBase}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setAllowBase(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
<Checkbox
|
|
|
|
|
label={getCstTypeLabel(CstType.STRUCTURED)}
|
|
|
|
|
value={allowStruct}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setAllowStruct(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
<Checkbox
|
|
|
|
|
label={getCstTypeLabel(CstType.TERM)}
|
|
|
|
|
value={allowTerm}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setAllowTerm(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
<Checkbox
|
|
|
|
|
label={getCstTypeLabel(CstType.AXIOM)}
|
|
|
|
|
value={allowAxiom}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setAllowAxiom(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
<Checkbox
|
|
|
|
|
label={getCstTypeLabel(CstType.FUNCTION)}
|
|
|
|
|
value={allowFunction}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setAllowFunction(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
<Checkbox
|
|
|
|
|
label={getCstTypeLabel(CstType.PREDICATE)}
|
|
|
|
|
value={allowPredicate}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setAllowPredicate(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
<Checkbox
|
|
|
|
|
label={getCstTypeLabel(CstType.CONSTANT)}
|
|
|
|
|
value={allowConstant}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue={ value => setAllowConstant(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
<Checkbox
|
|
|
|
|
label={getCstTypeLabel(CstType.THEOREM)}
|
|
|
|
|
value={allowTheorem}
|
2023-09-07 16:30:43 +03:00
|
|
|
|
setValue ={ value => setAllowTheorem(value) }
|
2023-08-16 00:39:16 +03:00
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</Modal>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default DlgGraphOptions;
|