Skip to content

Commit 2c5b385

Browse files
Refactor slider parameters to variableValue; Add slider parameters to summary tab. For feature #256.
1 parent 2afa39f commit 2c5b385

File tree

14 files changed

+234
-65
lines changed

14 files changed

+234
-65
lines changed

engine/mdlReader.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -371,15 +371,15 @@ namespace minsky
371371
vector<string> spec;
372372
for (size_t i=1; i<=match.size(); ++i) spec.push_back(match[i]);
373373
if (!spec.empty() && regex_match(spec[0],match,number))
374-
v->sliderMin=stod(spec[0]);
374+
v->sliderMin(stod(spec[0]));
375375
else
376-
v->sliderMin=0.1*stod(definition);
376+
v->sliderMin(0.1*stod(definition));
377377
if (spec.size()>1 && regex_match(spec[1],match,number))
378-
v->sliderMax=stod(spec[1]);
378+
v->sliderMax(stod(spec[1]));
379379
else
380-
v->sliderMax=10*stod(definition);
380+
v->sliderMax(10*stod(definition));
381381
if (spec.size()>2 && regex_match(spec[2],match,number))
382-
v->sliderStep=stod(spec[2]);
382+
v->sliderStep(stod(spec[2]));
383383
v->adjustSliderBounds();
384384
}
385385
else

engine/variableSummary.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ namespace minsky
3333
std::string definition; ///< LaTeXable definition
3434
std::string udfDefinition; ///< use function compatible definition
3535
std::string init; ///< initial value
36+
double sliderStep, sliderMin, sliderMax; ///< slider parameters
3637
double value=nan(""); ///< value, if scalar
3738
std::string scope; ///< name, id of scope if local, ":" if global
3839
std::string godley; ///< name or id of Godley table, if contained in a Godley table

engine/variableValue.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "index.rcd"
3030
#include "index.xcd"
3131
#include "nobble.h"
32+
#include "slider.rcd"
3233
#include "tensorInterface.rcd"
3334
#include "tensorInterface.xcd"
3435
#include "tensorVal.rcd"
@@ -533,6 +534,7 @@ namespace minsky
533534
definition,
534535
udfDefinition,
535536
init(),
537+
sliderStep, sliderMin, sliderMax,
536538
value(),
537539
scopeName,
538540
godleyName,

engine/variableValue.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ namespace minsky
4141
typedef std::shared_ptr<Group> GroupPtr;
4242
using namespace civita;
4343

44-
struct VariableValueData: public civita::ITensorVal
44+
struct VariableValueData: public civita::ITensorVal, public Slider
4545
{
4646
using ITensorVal::operator=;
4747

gui-js/libs/shared/src/lib/backend/minsky.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ export class VariableBase extends Item {
231231
async drawSelected(a1: minsky__dummy): Promise<void> {return this.$callMethod('drawSelected',a1);}
232232
async dummyDraw(): Promise<void> {return this.$callMethod('dummyDraw');}
233233
async editorMode(): Promise<boolean> {return this.$callMethod('editorMode');}
234-
async enableSlider(...args: boolean[]): Promise<boolean> {return this.$callMethod('enableSlider',...args);}
234+
async enableSlider(...args: any[]): Promise<boolean> {return this.$callMethod('enableSlider',...args);}
235235
async engExp(): Promise<object> {return this.$callMethod('engExp');}
236236
async ensureBBValid(): Promise<void> {return this.$callMethod('ensureBBValid');}
237237
async ensureValueExists(a1: VariableValue,a2: string): Promise<void> {return this.$callMethod('ensureValueExists',a1,a2);}
@@ -293,12 +293,12 @@ export class VariableBase extends Item {
293293
async selected(...args: boolean[]): Promise<boolean> {return this.$callMethod('selected',...args);}
294294
async setDimLabelsPicked(a1: string,a2: string): Promise<object> {return this.$callMethod('setDimLabelsPicked',a1,a2);}
295295
async setUnits(a1: string): Promise<void> {return this.$callMethod('setUnits',a1);}
296-
async sliderBoundsSet(...args: boolean[]): Promise<boolean> {return this.$callMethod('sliderBoundsSet',...args);}
297-
async sliderMax(...args: number[]): Promise<number> {return this.$callMethod('sliderMax',...args);}
298-
async sliderMin(...args: number[]): Promise<number> {return this.$callMethod('sliderMin',...args);}
296+
async sliderBoundsSet(...args: any[]): Promise<boolean> {return this.$callMethod('sliderBoundsSet',...args);}
297+
async sliderMax(...args: any[]): Promise<number> {return this.$callMethod('sliderMax',...args);}
298+
async sliderMin(...args: any[]): Promise<number> {return this.$callMethod('sliderMin',...args);}
299299
async sliderSet(a1: number): Promise<void> {return this.$callMethod('sliderSet',a1);}
300-
async sliderStep(...args: number[]): Promise<number> {return this.$callMethod('sliderStep',...args);}
301-
async sliderStepRel(...args: boolean[]): Promise<boolean> {return this.$callMethod('sliderStepRel',...args);}
300+
async sliderStep(...args: any[]): Promise<number> {return this.$callMethod('sliderStep',...args);}
301+
async sliderStepRel(...args: any[]): Promise<boolean> {return this.$callMethod('sliderStepRel',...args);}
302302
async sliderVisible(): Promise<boolean> {return this.$callMethod('sliderVisible');}
303303
async temp(): Promise<boolean> {return this.$callMethod('temp');}
304304
async throw_error(a1: string): Promise<void> {return this.$callMethod('throw_error',a1);}
@@ -2289,6 +2289,7 @@ export class VariableValue extends CppClass {
22892289
async cancel(a1: boolean): Promise<void> {return this.$callMethod('cancel',a1);}
22902290
async data(): Promise<number[]> {return this.$callMethod('data');}
22912291
async detailedText(...args: string[]): Promise<string> {return this.$callMethod('detailedText',...args);}
2292+
async enableSlider(...args: boolean[]): Promise<boolean> {return this.$callMethod('enableSlider',...args);}
22922293
async end(): Promise<number> {return this.$callMethod('end');}
22932294
async exportAsCSV(a1: string,a2: string,a3: boolean): Promise<void> {return this.$callMethod('exportAsCSV',a1,a2,a3);}
22942295
async godleyOverridden(...args: boolean[]): Promise<boolean> {return this.$callMethod('godleyOverridden',...args);}
@@ -2310,6 +2311,11 @@ export class VariableValue extends CppClass {
23102311
async setValue(...args: any[]): Promise<number> {return this.$callMethod('setValue',...args);}
23112312
async shape(): Promise<number[]> {return this.$callMethod('shape');}
23122313
async size(): Promise<number> {return this.$callMethod('size');}
2314+
async sliderBoundsSet(...args: boolean[]): Promise<boolean> {return this.$callMethod('sliderBoundsSet',...args);}
2315+
async sliderMax(...args: number[]): Promise<number> {return this.$callMethod('sliderMax',...args);}
2316+
async sliderMin(...args: number[]): Promise<number> {return this.$callMethod('sliderMin',...args);}
2317+
async sliderStep(...args: number[]): Promise<number> {return this.$callMethod('sliderStep',...args);}
2318+
async sliderStepRel(...args: boolean[]): Promise<boolean> {return this.$callMethod('sliderStepRel',...args);}
23132319
async sliderVisible(...args: boolean[]): Promise<boolean> {return this.$callMethod('sliderVisible',...args);}
23142320
async summary(): Promise<object> {return this.$callMethod('summary');}
23152321
async temp(): Promise<boolean> {return this.$callMethod('temp');}

gui-js/libs/ui-components/src/lib/summary/summary.component.html

Lines changed: 62 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
1515
<div class="data-cell">Name</div>
1616
<div class="data-cell extra-wide">Definition</div>
1717
<div class="data-cell wide">Dimensions</div>
18-
<div class="data-cell numeric">Initial</div>
1918
<div class="data-cell wide">Units</div>
19+
<div class="data-cell numeric">Initial</div>
20+
<div *ngIf="type=='parameter'" class="data-cell numeric">Step</div>
21+
<div *ngIf="type=='parameter'" class="data-cell numeric">Min</div>
22+
<div *ngIf="type=='parameter'" class="data-cell numeric">Max</div>
2023
<div class="data-cell numeric">Value</div>
2124
</div>
2225

@@ -57,6 +60,22 @@
5760
{{variable.dimensions.toString()}}
5861
</div>
5962

63+
<div *ngIf="!editing(variable,'units')"
64+
[title]="variable.units"
65+
(click)="edit($event,variable,'units')"
66+
class="data-cell wide" latex
67+
equation="{{variable.units}}"
68+
>
69+
</div>
70+
<div
71+
*ngIf="editing(variable,'units')"
72+
class="data-cell wide">
73+
<input
74+
(keydown.Enter)="finishEditing()"
75+
(click)="$event.stopImmediatePropagation()"
76+
type="text" [(ngModel)]="editCellContents"/>
77+
</div>
78+
6079
<div *ngIf="!editing(variable,'init')"
6180
[title]="variable.init"
6281
(click)="edit($event,variable,'init')"
@@ -65,35 +84,67 @@
6584
>
6685
</div>
6786
<div *ngIf="editing(variable,'init')"
68-
class="data-cell numeric">
87+
class="data-cell">
6988
<input
7089
(keydown.Enter)="finishEditing()"
7190
(click)="$event.stopImmediatePropagation()"
7291
type="text" [(ngModel)]="editCellContents"/>
7392
</div>
7493

75-
<div *ngIf="!editing(variable,'units')"
76-
[title]="variable.units"
77-
(click)="edit($event,variable,'units')"
78-
class="data-cell wide" latex
79-
equation="{{variable.units}}"
94+
<div *ngIf="type=='parameter' && !editing(variable,'sliderStep')"
95+
[title]="variable.sliderStep"
96+
(click)="edit($event,variable,'sliderStep')"
97+
class="data-cell numeric" latex
98+
equation="{{truncateValue(variable.sliderStep)}}"
8099
>
81100
</div>
82-
<div
83-
*ngIf="editing(variable,'units')"
84-
class="data-cell wide">
101+
<div *ngIf="type=='parameter' && editing(variable,'sliderStep')"
102+
class="data-cell">
85103
<input
86104
(keydown.Enter)="finishEditing()"
87105
(click)="$event.stopImmediatePropagation()"
88106
type="text" [(ngModel)]="editCellContents"/>
89107
</div>
90-
108+
109+
<div *ngIf="type=='parameter' && !editing(variable,'sliderMin')"
110+
[title]="variable.sliderMin"
111+
(click)="edit($event,variable,'sliderMin')"
112+
class="data-cell numeric" latex
113+
equation="{{truncateValue(variable.sliderMin)}}"
114+
>
115+
</div>
116+
<div *ngIf="type=='parameter' && editing(variable,'sliderMin')"
117+
class="data-cell">
118+
<input
119+
(keydown.Enter)="finishEditing()"
120+
(click)="$event.stopImmediatePropagation()"
121+
type="text" [(ngModel)]="editCellContents"/>
122+
</div>
123+
124+
<div *ngIf="type=='parameter' && !editing(variable,'sliderMax')"
125+
[title]="variable.sliderMax"
126+
(click)="edit($event,variable,'sliderMax')"
127+
class="data-cell numeric" latex
128+
equation="{{truncateValue(variable.sliderMax)}}"
129+
>
130+
</div>
131+
<div *ngIf="type=='parameter' && editing(variable,'sliderMax')"
132+
class="data-cell">
133+
<input
134+
(keydown.Enter)="finishEditing()"
135+
(click)="$event.stopImmediatePropagation()"
136+
type="text" [(ngModel)]="editCellContents"/>
137+
</div>
138+
91139
<div *ngIf="!variable.dimensions.length"
92140
[title]="variable.value" class="data-cell numeric"
93141
latex
94142
equation="{{truncateValue(variable.value)}}"
95143
>
96144
</div>
145+
146+
147+
97148
</div>
98149
</div>
99150
</span>

gui-js/libs/ui-components/src/lib/summary/summary.component.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,15 @@ export class SummaryComponent implements OnInit {
143143
case 'init':
144144
this.electronService.minsky.variableValues.elem(this.editRow.valueId).init(this.editCellContents);
145145
break;
146+
case 'sliderMin':
147+
this.electronService.minsky.variableValues.elem(this.editRow.valueId).sliderMin(+this.editCellContents);
148+
break;
149+
case 'sliderMax':
150+
this.electronService.minsky.variableValues.elem(this.editRow.valueId).sliderMax(+this.editCellContents);
151+
break;
152+
case 'sliderStep':
153+
this.electronService.minsky.variableValues.elem(this.editRow.valueId).sliderStep(+this.editCellContents);
154+
break;
146155
case 'units':
147156
this.electronService.minsky.variableValues.elem(this.editRow.valueId).setUnits(this.editCellContents);
148157
break;

model/cairoItems.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,9 @@ bool RenderVariable::inImage(float x, float y)
9696

9797
double RenderVariable::handlePos() const
9898
{
99-
if (var.sliderStep<std::numeric_limits<double>::min() || std::isnan(var.sliderStep)) var.initSliderBounds(); // this should only be used when sliderStep's value has not been set or is a nonsensicl
99+
if (var.sliderStep()<std::numeric_limits<double>::min() || std::isnan(var.sliderStep())) var.initSliderBounds(); // this should only be used when sliderStep's value has not been set or is a nonsensicl
100100
var.adjustSliderBounds();
101-
return (w<0.5*var.iWidth()? 0.5*var.iWidth() : w)*(var.value()-0.5*(var.sliderMin+var.sliderMax))/(var.sliderMax-var.sliderMin);
101+
return (w<0.5*var.iWidth()? 0.5*var.iWidth() : w)*(var.value()-0.5*(var.sliderMin()+var.sliderMax()))/(var.sliderMax()-var.sliderMin());
102102
}
103103

104104
void minsky::drawTriangle

model/minsky.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,7 @@ namespace minsky
911911
else if (auto v=(*i)->variableCast())
912912
{ //determine whether a slider should be shown
913913
if (auto vv=v->vValue())
914-
vv->sliderVisible = v->enableSlider &&
914+
vv->sliderVisible = v->enableSlider() &&
915915
(v->type()==VariableType::parameter || (v->type()==VariableType::flow && !inputWired(v->valueId())));
916916
v->resetMiniPlot();
917917
}

0 commit comments

Comments
 (0)