Basic document handling
This commit is contained in:
@@ -66,7 +66,7 @@ pyside6-uic ui/main_window.ui -o src/bedit/ui_main_window.py
|
||||
|
||||
Do not hand-edit the generated Python file; change the `.ui` file and regenerate
|
||||
it. Add behavior and signal connections in `main_window.py`. Widget names from
|
||||
Designer are available there through `self.ui`, such as `self.ui.editor`.
|
||||
Designer are available there through `self.ui`, such as `self.ui.graphView`.
|
||||
|
||||
In VS Code, the same commands are available through **Terminal → Run Task**:
|
||||
|
||||
@@ -87,6 +87,81 @@ In VS Code, the same commands are available through **Terminal → Run Task**:
|
||||
6. Add icons through a Qt resource file (`.qrc`) so packaging is reliable.
|
||||
7. Test on Windows regularly; fonts, scaling, and native dialogs vary by platform.
|
||||
|
||||
## Graph and library prototype
|
||||
|
||||
Documents and libraries use the same recursive format: a library is simply a
|
||||
BEdit document used as a copy source. The built-in example defines A, B, and C.
|
||||
|
||||
- A document can own multiple independent top-level graph or text components.
|
||||
Right-click **Current Document** to create one, and double-click a current
|
||||
component in the tree to activate it.
|
||||
- Drag a component from Libraries onto the workspace. Placement recursively
|
||||
copies it with new IDs, leaving no link to the source.
|
||||
- Drag components to move them; movement participates in undo and redo.
|
||||
- Components, interface terminals, and connections are selectable. Use a rubber
|
||||
band or Ctrl-click for multiple selection, Delete to remove items, and the
|
||||
standard Cut/Copy/Paste shortcuts to duplicate selected component groups.
|
||||
- Click an output port and then an input port to create a connection.
|
||||
- Double-click a graph component to open its owned subgraph; use **Up** to return.
|
||||
- Graph components show **Pointer**, **Input**, and **Output** tools. Select an
|
||||
interface tool and click the canvas to add a visible internal terminal and a
|
||||
corresponding external block port. Interface terminals can be moved afterward.
|
||||
- Right-click a component on the canvas or in Current Document to edit its name,
|
||||
icon shape, icon text, fill color, and border color. The same dialog can hide
|
||||
that component's contained subtree from the Libraries tree.
|
||||
- Double-click a text component to edit its input list, output list, and
|
||||
`implementation.source` JSON.
|
||||
- Right-click any graph component under Current Document to add nested graph or
|
||||
text blocks. Any current-document component can also be deleted there.
|
||||
- The active document hierarchy has its own Document panel; the Libraries panel
|
||||
contains only configured external libraries.
|
||||
- Select one or more blocks and press `Ctrl+R`, or use the Transform toolbar, to
|
||||
rotate them clockwise by 90 degrees. Rotation is saved and supports undo/redo.
|
||||
**Apply JSON** updates that source and participates in undo/redo.
|
||||
- File → Save writes the complete recursive document to JSON.
|
||||
- File → Close Document removes the active document and returns to an empty
|
||||
workspace. An open graph uses a light gray, 32-unit dotted canvas.
|
||||
- Edit → Settings → Libraries accepts document files or folders of JSON files.
|
||||
|
||||
Every component owns its ports, declarative icon, properties, and child graph:
|
||||
|
||||
```json
|
||||
{
|
||||
"format": "bedit-document",
|
||||
"version": 1,
|
||||
"roots": [{
|
||||
"id": "my-component",
|
||||
"name": "My Component",
|
||||
"position": {"x": 0, "y": 0},
|
||||
"interface": {
|
||||
"inputs": [{"id": "in", "name": "Input"}],
|
||||
"outputs": [{"id": "out", "name": "Output"}]
|
||||
},
|
||||
"icon": {
|
||||
"shape": "rectangle",
|
||||
"fill": "#dbeafe",
|
||||
"border": "#245c9c",
|
||||
"text": "Component"
|
||||
},
|
||||
"properties": {},
|
||||
"implementation": {
|
||||
"kind": "text",
|
||||
"source": {
|
||||
"equations": ["out = gain * in"],
|
||||
"parameters": {"gain": 1.0}
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
Graph components use `"implementation": {"kind": "graph", "graph": ...}`;
|
||||
text components use `"implementation": {"kind": "text", "source": ...}` and
|
||||
never own a graph. Supported icon shapes are currently `rectangle` and
|
||||
`ellipse`. The recursive model is under `src/bedit/document/`, library loading
|
||||
and the live Current Document tree are under `src/bedit/library/`, and graphics
|
||||
are isolated under `src/bedit/workspace/`.
|
||||
|
||||
## Optional tools
|
||||
|
||||
You do not need another GUI framework. Useful additions are:
|
||||
|
||||
Reference in New Issue
Block a user