Compare commits

..

5 Commits

Author SHA1 Message Date
forbes
c59c704da3 refactor: rewire silo submodule for silo-mod split
Some checks failed
Build and Test / build (pull_request) Has been cancelled
- .gitmodules: silo.git -> silo-mod.git (FreeCAD workbench only)
- Init.py: silo/pkg/freecad -> silo/freecad (new repo layout)
- InitGui.py: same path update

The silo monorepo has been split into:
- silo-client: shared Python API client (submodule of silo-mod)
- silo-mod: FreeCAD workbench (this submodule)
- silo-calc: LibreOffice Calc extension (separate repo)
- silo: server only (no longer a Create submodule)
2026-02-06 11:15:30 -06:00
forbes
c858706d48 fix(gui): add silo-* icons to Qt resource file for origin commands
Some checks failed
Build and Test / build (push) Successful in 1h14m34s
Release Build / build-linux (push) Failing after 1h33m10s
Release Build / publish-release (push) Has been skipped
Copy silo-bom, silo-commit, silo-info, silo-pull, and silo-push SVG
icons from mods/silo/pkg/freecad/resources/icons/ into src/Gui/Icons/
and register them in resource.qrc so they are compiled into the binary
and discoverable by BitmapFactory at runtime.
2026-02-05 22:00:35 -06:00
forbes
724440dcb7 fix(gui): fix build errors in OriginSelectorWidget and OriginManager
Some checks failed
Build and Test / build (push) Has been cancelled
- OriginSelectorWidget: use BitmapFactoryInst::mergePixmap() instead of
  BitmapFactory::mergePixmap() since BitmapFactory is a function, not a class
- OriginManager: use Console().log() instead of Console().Log() which
  does not exist on ConsoleSingleton
2026-02-05 20:48:28 -06:00
forbes
2f594dac0a fix(gui): use Python API for viewDefaultOrientation in StdCmdNew
Some checks failed
Build and Test / build (push) Failing after 20m15s
viewDefaultOrientation is a method on View3DInventorPy (Python wrapper),
not on View3DInventorViewer (C++ viewer). Use doCommand with the Python
API, matching the pattern used in StdCmdViewHome.
2026-02-05 19:13:45 -06:00
forbes
939b81385e fix(build): pin swig <4.4 for pivy runtime compatibility
Some checks failed
Build and Test / build (push) Failing after 19m41s
SWIG 4.4.x uses runtime API version 5, which is incompatible with
conda-forge pivy 0.6.9 built with SWIG <=4.3.x (runtime version 4).
Pin to >=4.0,<4.4 to ensure matching runtime versions.
2026-02-05 18:38:19 -06:00
13 changed files with 62 additions and 16 deletions

2
.gitmodules vendored
View File

@@ -15,4 +15,4 @@
url = https://git.kindred-systems.com/forbes/ztools.git
[submodule "mods/silo"]
path = mods/silo
url = https://git.kindred-systems.com/kindred/silo.git
url = https://git.kindred-systems.com/kindred/silo-mod.git

View File

@@ -22,7 +22,7 @@ requirements:
- noqt5
- python>=3.11,<3.12
- qt6-main>=6.8,<6.9
- swig
- swig >=4.0,<4.4
- if: linux and x86_64
then:

View File

@@ -674,14 +674,15 @@ void StdCmdNew::activated(int iMsg)
}
// Set default view orientation for the new document
Gui::Document* guiDoc = Application::Instance->getDocument(doc);
if (guiDoc) {
auto views = guiDoc->getMDIViewsOfType(View3DInventor::getClassTypeId());
for (auto* view : views) {
auto view3d = static_cast<View3DInventor*>(view);
view3d->getViewer()->viewDefaultOrientation();
}
}
auto hGrp = App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/View"
);
std::string default_view = hGrp->GetASCII("NewDocumentCameraOrientation", "Top");
doCommand(
Command::Gui,
"Gui.activeDocument().activeView().viewDefaultOrientation('%s',0)",
default_view.c_str()
);
ParameterGrp::handle hViewGrp = App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/View"

View File

@@ -185,6 +185,11 @@
<file>sel-bbox.svg</file>
<file>sel-forward.svg</file>
<file>sel-instance.svg</file>
<file>silo-bom.svg</file>
<file>silo-commit.svg</file>
<file>silo-info.svg</file>
<file>silo-pull.svg</file>
<file>silo-push.svg</file>
<file>spaceball_button.svg</file>
<file>SpNav-PanLR.svg</file>
<file>SpNav-PanUD.svg</file>

View File

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#cba6f7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<!-- Outer box -->
<rect x="3" y="3" width="18" height="18" rx="2" fill="#313244"/>
<!-- List lines (BOM rows) -->
<line x1="8" y1="8" x2="18" y2="8" stroke="#89dceb" stroke-width="1.5"/>
<line x1="8" y1="12" x2="18" y2="12" stroke="#89dceb" stroke-width="1.5"/>
<line x1="8" y1="16" x2="18" y2="16" stroke="#89dceb" stroke-width="1.5"/>
<!-- Hierarchy dots -->
<circle cx="6" cy="8" r="1" fill="#cba6f7"/>
<circle cx="6" cy="12" r="1" fill="#cba6f7"/>
<circle cx="6" cy="16" r="1" fill="#cba6f7"/>
</svg>

After

Width:  |  Height:  |  Size: 680 B

View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#cba6f7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<!-- Git commit style -->
<circle cx="12" cy="12" r="4" fill="#313244" stroke="#a6e3a1"/>
<line x1="12" y1="2" x2="12" y2="8" stroke="#cba6f7"/>
<line x1="12" y1="16" x2="12" y2="22" stroke="#cba6f7"/>
<!-- Checkmark inside -->
<polyline points="9.5 12 11 13.5 14.5 10" stroke="#a6e3a1" stroke-width="1.5" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 493 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#cba6f7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<!-- Info circle -->
<circle cx="12" cy="12" r="10" fill="#313244"/>
<line x1="12" y1="16" x2="12" y2="12" stroke="#89dceb" stroke-width="2"/>
<circle cx="12" cy="8" r="0.5" fill="#89dceb" stroke="#89dceb"/>
</svg>

After

Width:  |  Height:  |  Size: 377 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#cba6f7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<!-- Cloud -->
<path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z" fill="#313244"/>
<!-- Download arrow -->
<path d="M12 13v5m0 0l-2-2m2 2l2-2" stroke="#89b4fa" stroke-width="2"/>
<line x1="12" y1="9" x2="12" y2="13" stroke="#89b4fa" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 428 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#cba6f7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<!-- Cloud -->
<path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z" fill="#313244"/>
<!-- Upload arrow -->
<path d="M12 18v-5m0 0l-2 2m2-2l2 2" stroke="#a6e3a1" stroke-width="2"/>
<line x1="12" y1="13" x2="12" y2="9" stroke="#a6e3a1" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 427 B

View File

@@ -124,7 +124,7 @@ bool OriginManager::registerOrigin(FileOrigin* origin)
}
_origins[originId] = std::unique_ptr<FileOrigin>(origin);
Base::Console().Log("OriginManager: Registered origin '%s'\n", originId.c_str());
Base::Console().log("OriginManager: Registered origin '%s'\n", originId.c_str());
signalOriginRegistered(originId);
return true;
@@ -150,7 +150,7 @@ bool OriginManager::unregisterOrigin(const std::string& id)
}
_origins.erase(it);
Base::Console().Log("OriginManager: Unregistered origin '%s'\n", id.c_str());
Base::Console().log("OriginManager: Unregistered origin '%s'\n", id.c_str());
signalOriginUnregistered(id);
return true;

View File

@@ -244,7 +244,7 @@ QIcon OriginSelectorWidget::iconForOrigin(FileOrigin* origin) const
QPixmap overlay = BitmapFactory().pixmapFromSvg(
"dagViewFail", QSizeF(8, 8));
if (!overlay.isNull()) {
baseIcon = BitmapFactory::mergePixmap(
baseIcon = BitmapFactoryInst::mergePixmap(
baseIcon, overlay, BitmapFactoryInst::BottomRight);
}
}
@@ -256,7 +256,7 @@ QIcon OriginSelectorWidget::iconForOrigin(FileOrigin* origin) const
QPixmap overlay = BitmapFactory().pixmapFromSvg(
"Warning", QSizeF(8, 8));
if (!overlay.isNull()) {
baseIcon = BitmapFactory::mergePixmap(
baseIcon = BitmapFactoryInst::mergePixmap(
baseIcon, overlay, BitmapFactoryInst::BottomRight);
}
}

View File

@@ -16,7 +16,7 @@ def setup_kindred_addons():
# Define built-in addons with their paths relative to mods/
addons = [
("ztools", "ztools/ztools"), # mods/ztools/ztools/
("silo", "silo/pkg/freecad"), # mods/silo/pkg/freecad/
("silo", "silo/freecad"), # mods/silo/freecad/
]
for name, subpath in addons:

View File

@@ -15,7 +15,7 @@ def setup_kindred_workbenches():
addons = [
("ztools", "ztools/ztools"),
("silo", "silo/pkg/freecad"),
("silo", "silo/freecad"),
]
for name, subpath in addons: