summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuchita Lad2025-03-18 17:34:18 +0530
committerSuchita Lad2025-03-18 17:34:18 +0530
commit5ed7e9da52c59d157672f4c6c2ed895eb38b4126 (patch)
treeb2b26e431ed006c3c9c19d12dd8ad83cd3aa9b75
parent40137ed729bd118e6e21b6cec79f195f94327a88 (diff)
downloadCommon-Interface-Project-5ed7e9da52c59d157672f4c6c2ed895eb38b4126.tar.gz
Common-Interface-Project-5ed7e9da52c59d157672f4c6c2ed895eb38b4126.tar.bz2
Common-Interface-Project-5ed7e9da52c59d157672f4c6c2ed895eb38b4126.zip
Added Export Script functionality
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/SchematicToolbar.js15
-rw-r--r--blocks/eda-frontend/src/redux/actions/actions.js1
-rw-r--r--blocks/eda-frontend/src/redux/actions/saveSchematicActions.js16
-rw-r--r--blocks/eda-frontend/src/redux/reducers/saveSchematicReducer.js7
-rw-r--r--blocks/saveAPI/serializers.py2
-rw-r--r--blocks/saveAPI/views.py8
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,