File indexing completed on 2026-10-27 08:41:17
0001 <app-firebird-shell>
0002 <div central-pane class="fixed-width-page-content">
0003 <form>
0004
0005 <mat-card class="config-card">
0006 <mat-card-title>Select Geometry and Events</mat-card-title>
0007 <mat-card-content>
0008 <p>Choose the detector geometry and the events to display.
0009 The choice is saved in this browser and loads when the display opens.</p>
0010 <firebird-data-selector
0011 applyLabel="Display"
0012 [requireChanges]="false"
0013 [showCancel]="false"
0014 (applied)="onDataApplied()">
0015 </firebird-data-selector>
0016 </mat-card-content>
0017 </mat-card>
0018
0019 <mat-card class="config-card">
0020 <mat-card-title>Configure Geometry Pipeline</mat-card-title>
0021 <mat-card-content>
0022 <img [src]="pipelineDiagramUrl" alt="Geometry Pipeline" style="width:60%; text-align: center"/>
0023 <div class="subsection">
0024 <h3>Geometry Processing Options</h3>
0025 <p>(!) A page reload might be needed to see these changes</p>
0026
0027
0028 <div class="section">
0029 <h4>WebGL pipeline</h4>
0030 <p>Select how geometry looks and optimized</p>
0031 <mat-form-field appearance="fill" class="full-width">
0032 <mat-select [formControl]="geometryThemeName" [value]="geometryThemeName">
0033 @for (option of themeOptions; track option.value) {
0034 <mat-option [value]="option.value">{{ option.label }}</mat-option>
0035 }
0036 <mat-option value="off">Off (may hit performance)</mat-option>
0037 </mat-select>
0038 </mat-form-field>
0039 <p>Performance over quality (remove transparency, simple lights, etc.)</p>
0040 <mat-slide-toggle [formControl]="geometryFastAndUgly">Enabled</mat-slide-toggle>
0041 </div>
0042
0043
0044
0045 <div class="section">
0046 <h4>ROOT Geo pipeline</h4>
0047
0048 <p>Cut sub-detectors: remove top-level subdetectors before the geometry is built</p>
0049 <mat-form-field appearance="fill" class="full-width">
0050 <mat-select [formControl]="geometryCutListName" [value]="geometryCutListName">
0051 @for (option of cutListOptions(); track option.value) {
0052 <mat-option [value]="option.value">{{ option.label }}</mat-option>
0053 }
0054 <mat-option value="off">Off (don't remove anything)</mat-option>
0055 </mat-select>
0056 </mat-form-field>
0057
0058 <p>Clean tree: apply an edit rule set that removes or simplifies parts of the TGeo tree before the geometry is built</p>
0059 <mat-form-field appearance="fill" class="full-width">
0060 <mat-select [formControl]="geometryRootFilterName" [value]="geometryRootFilterName">
0061 @for (option of rootFilterOptions(); track option.value) {
0062 <mat-option [value]="option.value">{{ option.label }}</mat-option>
0063 }
0064 <mat-option value="off">Off (slow for a full detector)</mat-option>
0065 </mat-select>
0066 </mat-form-field>
0067 </div>
0068
0069 <div class="action-buttons">
0070 <button type="button" mat-raised-button [routerLink]="['/display']">DISPLAY</button>
0071 <button type="button" mat-raised-button (click)="resetGeometryToDefaults()">Reset pipeline to Defaults</button>
0072 </div>
0073
0074 </div>
0075
0076
0077 </mat-card-content>
0078 </mat-card>
0079
0080 <mat-card class="config-card">
0081 <mat-card-title>Controls</mat-card-title>
0082 <mat-card-content>
0083 <div class="section">
0084 <h3>Game Controller</h3>
0085 <p>Enable game controller support for navigation</p>
0086 <mat-slide-toggle [formControl]="useController">Use controller</mat-slide-toggle>
0087 <div *ngIf="useController.value" style="margin-top: 10px; padding: 10px; background-color: rgba(0,0,0,0.05); border-radius: 4px;">
0088 <p style="margin: 0 0 10px 0;"><strong>Controller Button Mapping:</strong></p>
0089 <ul style="margin: 0; padding-left: 20px;">
0090 <li>Left Stick: Rotate camera</li>
0091 <li>A Button: Zoom out</li>
0092 <li>X Button: Zoom in</li>
0093 <li>B Button: Strafe left</li>
0094 <li>RT Trigger: Strafe right</li>
0095 <li>LT Trigger: Reset to default view</li>
0096 </ul>
0097 </div>
0098 </div>
0099 </mat-card-content>
0100 </mat-card>
0101
0102 <mat-card class="config-card">
0103 <mat-card-title>Server API Configuration</mat-card-title>
0104 <mat-card-content>
0105 <mat-slide-toggle [formControl]="serverUseApi">Use specific backend</mat-slide-toggle>
0106 <div class="api-url">
0107 <mat-form-field appearance="fill" class="full-width">
0108 <mat-label>Base API URL</mat-label>
0109 <input matInput type="text" placeholder="Enter API URL: http://localhost:5454"
0110 [formControl]="serverApiUrl" [disabled]="!serverUseApi.value">
0111 </mat-form-field>
0112 </div>
0113 </mat-card-content>
0114 </mat-card>
0115
0116 <mat-accordion class="details-accordion">
0117 <mat-expansion-panel>
0118 <mat-expansion-panel-header>
0119 <mat-panel-title>
0120 Backend Details
0121 </mat-panel-title>
0122 </mat-expansion-panel-header>
0123 <table class="details-table">
0124 <thead>
0125 <tr>
0126 <th>Property</th>
0127 <th>Value</th>
0128 </tr>
0129 </thead>
0130 <tbody>
0131 <tr>
0132 <td>Served by Pyrobird</td>
0133 <td>{{ firebirdConfig.servedByPyrobird ? 'Yes' : 'No' }}</td>
0134 </tr>
0135 <tr>
0136 <td>API Available</td>
0137 <td>{{ firebirdConfig.apiAvailable ? 'Yes' : 'No' }}</td>
0138 </tr>
0139 <tr>
0140 <td>API Base URL</td>
0141 <td>{{ firebirdConfig.apiBaseUrl }}</td>
0142 </tr>
0143 <tr>
0144 <td>Backend in use</td>
0145 <td>{{ urlService.serverAddress() || 'None (static frontend)' }}</td>
0146 </tr>
0147 <tr>
0148 <td>Log Level</td>
0149 <td>{{ firebirdConfig.logLevel }}</td>
0150 </tr>
0151 </tbody>
0152 </table>
0153 </mat-expansion-panel>
0154 </mat-accordion>
0155
0156 </form>
0157 </div>
0158 </app-firebird-shell>