diff options
author | Suchita Lad | 2025-03-18 17:34:18 +0530 |
---|---|---|
committer | Suchita Lad | 2025-03-18 17:34:18 +0530 |
commit | 5ed7e9da52c59d157672f4c6c2ed895eb38b4126 (patch) | |
tree | b2b26e431ed006c3c9c19d12dd8ad83cd3aa9b75 | |
parent | 40137ed729bd118e6e21b6cec79f195f94327a88 (diff) | |
download | Common-Interface-Project-5ed7e9da52c59d157672f4c6c2ed895eb38b4126.tar.gz Common-Interface-Project-5ed7e9da52c59d157672f4c6c2ed895eb38b4126.tar.bz2 Common-Interface-Project-5ed7e9da52c59d157672f4c6c2ed895eb38b4126.zip |
Added Export Script functionality
6 files changed, 43 insertions, 6 deletions
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/SchematicToolbar.js b/blocks/eda-frontend/src/components/SchematicEditor/SchematicToolbar.js index 12c1a786..c09ce69b 100644 --- a/blocks/eda-frontend/src/components/SchematicEditor/SchematicToolbar.js +++ b/blocks/eda-frontend/src/components/SchematicEditor/SchematicToolbar.js @@ -7,6 +7,7 @@ import { } from '@material-ui/core' import AddBoxOutlinedIcon from '@material-ui/icons/AddBoxOutlined' import PlayCircleOutlineIcon from '@material-ui/icons/PlayCircleOutline' +import DescriptionIcon from '@material-ui/icons/Description' import HelpOutlineIcon from '@material-ui/icons/HelpOutline' import UndoIcon from '@material-ui/icons/Undo' import RedoIcon from '@material-ui/icons/Redo' @@ -29,12 +30,12 @@ import { Link as RouterLink } from 'react-router-dom' import beautify from 'xml-beautifier' import mxGraphFactory from 'mxgraph' -import { NetlistModal, HelpScreen, ImageExportDialog, OpenSchDialog } from './ToolbarExtension' +import { NetlistModal, HelpScreen, ImageExportDialog, OpenSchDialog, ScriptScreen } from './ToolbarExtension' import { editorZoomIn, editorZoomOut, editorZoomAct, deleteComp, PrintPreview, Rotate, editorUndo, editorRedo, saveXml, ClearGrid } from './Helper/ToolbarTools' import { useSelector, useDispatch } from 'react-redux' import { toggleSimulate, closeCompProperties, setSchXmlData, saveSchematic, openLocalSch, setLoadingDiagram } from '../../redux/actions/index' import api from '../../utils/Api' -import { transformXcos } from '../../utils/GalleryUtils' +import { transformXcos, saveToFile } from '../../utils/GalleryUtils' const { mxUtils @@ -98,6 +99,8 @@ export default function SchematicToolbar ({ mobileClose, gridRef }) { const description = useSelector(state => state.saveSchematicReducer.description) const title2 = useSelector(state => state.saveSchematicReducer.title) + const scriptData = useSelector(state => state.saveSchematicReducer.scriptData) + const dispatch = useDispatch() const isMobile = useMediaQuery('(max-width:600px)') const [drawerOpen, setDrawerOpen] = useState(false) @@ -297,7 +300,7 @@ export default function SchematicToolbar ({ mobileClose, gridRef }) { dispatch(setSchXmlData(xml)) exportImage('PNG') .then(res => { - dispatch(saveSchematic(title2, description, xml, res)) + dispatch(saveSchematic(title2, description, xml, res, scriptData)) setMessage('Saved Successfully') }) .catch(err => { @@ -364,6 +367,10 @@ export default function SchematicToolbar ({ mobileClose, gridRef }) { } } + const handleLocalSchSaveScript = () => { + saveToFile(title2 + '_' + process.env.REACT_APP_NAME + '_on_Cloud.sce', 'application/sce', scriptData) + } + const readXmlFile = (xmlDoc, dataDump, title) => { const firstCell = xmlDoc.documentElement.children[0].children[0] const firstCellAttrs = firstCell.attributes @@ -440,9 +447,11 @@ export default function SchematicToolbar ({ mobileClose, gridRef }) { 'pipe', { icon: <SystemUpdateAltOutlinedIcon fontSize='small' />, label: 'Export', action: handleLocalSchSave }, { icon: <SystemUpdateAltOutlinedIcon fontSize='small' />, label: 'Export in Xcos', action: handleLocalSchSaveXcos }, + { icon: <SystemUpdateAltOutlinedIcon fontSize='small' />, label: 'Export Script', action: handleLocalSchSaveScript }, { icon: <ImageOutlinedIcon fontSize='small' />, label: 'Image Export', action: handleImgClickOpen }, { icon: <PrintOutlinedIcon fontSize='small' />, label: 'Print Preview', action: PrintPreview }, 'pipe', + { icon: <DescriptionIcon fontSize='small' />, label: 'Show Script', action: handleSchWinOpen }, { icon: <PlayCircleOutlineIcon fontSize='small' />, label: 'Simulate', action: handleNetlistOpen }, 'pipe', { icon: <UndoIcon fontSize='small' />, label: 'Undo', action: editorUndo }, diff --git a/blocks/eda-frontend/src/redux/actions/actions.js b/blocks/eda-frontend/src/redux/actions/actions.js index fe603645..b31f51f9 100644 --- a/blocks/eda-frontend/src/redux/actions/actions.js +++ b/blocks/eda-frontend/src/redux/actions/actions.js @@ -45,6 +45,7 @@ export const SET_SCH_XML_DATA = 'SET_SCH_XML_DATA' export const SET_SCH_SHARED = 'SET_SCH_SHARED' export const CLEAR_DETAILS = 'CLEAR_DETAILS' export const LOAD_GALLERY = 'LOAD_GALLERY' +export const SET_SCH_SCRIPT_DATA = 'SET_SCH_SCRIPT_DATA' // Action for fetching on-cloud saved schematics for authenticated user to display in dashboard export const FETCH_SCHEMATICS = 'FETCH_SCHEMATICS' diff --git a/blocks/eda-frontend/src/redux/actions/saveSchematicActions.js b/blocks/eda-frontend/src/redux/actions/saveSchematicActions.js index 38866273..2092517f 100644 --- a/blocks/eda-frontend/src/redux/actions/saveSchematicActions.js +++ b/blocks/eda-frontend/src/redux/actions/saveSchematicActions.js @@ -41,13 +41,23 @@ export const setSchXmlData = (xmlData) => (dispatch) => { }) } +export const setSchScriptData = (scriptData) => (dispatch) => { + dispatch({ + type: actions.SET_SCH_SCRIPT_DATA, + payload: { + scriptData + } + }) +} + // Api call to save new schematic or updating saved schematic. -export const saveSchematic = (title, description, xml, base64) => (dispatch, getState) => { +export const saveSchematic = (title, description, xml, base64, scriptData) => (dispatch, getState) => { const body = { data_dump: xml, base64_image: base64, name: title, - description + description, + script_dump: scriptData } // Get token from localstorage @@ -197,6 +207,7 @@ export const loadGallery = (data) => async (dispatch) => { dispatch(setSchTitle(data.name)) dispatch(setSchDescription(data.description)) dispatch(setSchXmlData(dataDump)) + dispatch(setSchScriptData(data.script_dump)) renderGalleryXML(dataDump) } @@ -224,5 +235,6 @@ export const openLocalSch = (obj) => (dispatch) => { dispatch(setSchTitle(data.title)) dispatch(setSchDescription(data.description)) dispatch(setSchXmlData(data.data_dump)) + dispatch(setSchScriptData(data.script_dump)) renderGalleryXML(data.data_dump) } diff --git a/blocks/eda-frontend/src/redux/reducers/saveSchematicReducer.js b/blocks/eda-frontend/src/redux/reducers/saveSchematicReducer.js index 5d9036da..6c747ce5 100644 --- a/blocks/eda-frontend/src/redux/reducers/saveSchematicReducer.js +++ b/blocks/eda-frontend/src/redux/reducers/saveSchematicReducer.js @@ -82,6 +82,13 @@ export default function saveSchematicReducer (state = initialState, action) { } } + case actions.SET_SCH_SCRIPT_DATA: { + return { + ...state, + scriptData: action.payload.scriptData + } + } + default: return state } diff --git a/blocks/saveAPI/serializers.py b/blocks/saveAPI/serializers.py index bd334c88..d8058920 100644 --- a/blocks/saveAPI/serializers.py +++ b/blocks/saveAPI/serializers.py @@ -43,6 +43,7 @@ class StateSaveSerializer(serializers.ModelSerializer): 'shared', 'owner', 'base64_image', + 'script_dump', ) @@ -84,6 +85,7 @@ class GalleryDetailSerializer(serializers.ModelSerializer): 'book_id', 'data_dump', 'media', + 'script_dump', ) diff --git a/blocks/saveAPI/views.py b/blocks/saveAPI/views.py index ccc72a72..9d6d3a8a 100644 --- a/blocks/saveAPI/views.py +++ b/blocks/saveAPI/views.py @@ -45,6 +45,7 @@ class StateSaveView(APIView): img = Base64ImageField(max_length=None, use_url=True) filename, content = img.update(request.data['base64_image']) queryset.data_dump = request.data.get("data_dump") + queryset.script_dump = request.data.get("script_dump") queryset.save() queryset.base64_image.save(filename, content) return Response(data=serializer.data, @@ -56,7 +57,10 @@ class StateSaveView(APIView): try: queryset = StateSave.objects.get( save_id=request.data.get("save_id", None), - data_dump=request.data["data_dump"]) + data_dump=request.data["data_dump"], + script_dump=request.data["script_dump"] + ), + serializer = StateSaveSerializer(data=request.data) if serializer.is_valid(): queryset.name = serializer.data["name"] @@ -74,6 +78,7 @@ class StateSaveView(APIView): try: state_save = StateSave( data_dump=request.data.get('data_dump'), + script_dump=request.data.get('script_dump'), description=request.data.get('description'), name=request.data.get('name'), owner=request.user if request.user.is_authenticated else None, @@ -82,6 +87,7 @@ class StateSaveView(APIView): except Exception: state_save = StateSave( data_dump=request.data.get('data_dump'), + script_dump=request.data.get('script_dump'), description=request.data.get('description'), name=request.data.get('name'), owner=request.user if request.user.is_authenticated else None, |