mirror of
				https://github.com/dancojocaru2000/logic-circuits-simulator.git
				synced 2025-11-04 17:06:32 +02:00 
			
		
		
		
	Added logic expression in component model
This commit is contained in:
		
							parent
							
								
									eb57b28d71
								
							
						
					
					
						commit
						0276643fbb
					
				
					 4 changed files with 46 additions and 7 deletions
				
			
		| 
						 | 
					@ -23,6 +23,8 @@ class ComponentEntry with _$ComponentEntry {
 | 
				
			||||||
    required List<String> outputs,
 | 
					    required List<String> outputs,
 | 
				
			||||||
    @JsonKey(includeIfNull: false)
 | 
					    @JsonKey(includeIfNull: false)
 | 
				
			||||||
    List<String>? truthTable,
 | 
					    List<String>? truthTable,
 | 
				
			||||||
 | 
					    @JsonKey(includeIfNull: false)
 | 
				
			||||||
 | 
					    String? logicExpression,
 | 
				
			||||||
  }) = _ComponentEntry;
 | 
					  }) = _ComponentEntry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  factory ComponentEntry.fromJson(Map<String, Object?> json) => _$ComponentEntryFromJson(json);
 | 
					  factory ComponentEntry.fromJson(Map<String, Object?> json) => _$ComponentEntryFromJson(json);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -166,6 +166,8 @@ mixin _$ComponentEntry {
 | 
				
			||||||
  List<String> get outputs => throw _privateConstructorUsedError;
 | 
					  List<String> get outputs => throw _privateConstructorUsedError;
 | 
				
			||||||
  @JsonKey(includeIfNull: false)
 | 
					  @JsonKey(includeIfNull: false)
 | 
				
			||||||
  List<String>? get truthTable => throw _privateConstructorUsedError;
 | 
					  List<String>? get truthTable => throw _privateConstructorUsedError;
 | 
				
			||||||
 | 
					  @JsonKey(includeIfNull: false)
 | 
				
			||||||
 | 
					  String? get logicExpression => throw _privateConstructorUsedError;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
 | 
					  Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
 | 
				
			||||||
  @JsonKey(ignore: true)
 | 
					  @JsonKey(ignore: true)
 | 
				
			||||||
| 
						 | 
					@ -184,7 +186,8 @@ abstract class $ComponentEntryCopyWith<$Res> {
 | 
				
			||||||
      @JsonKey(includeIfNull: false) String? componentDescription,
 | 
					      @JsonKey(includeIfNull: false) String? componentDescription,
 | 
				
			||||||
      List<String> inputs,
 | 
					      List<String> inputs,
 | 
				
			||||||
      List<String> outputs,
 | 
					      List<String> outputs,
 | 
				
			||||||
      @JsonKey(includeIfNull: false) List<String>? truthTable});
 | 
					      @JsonKey(includeIfNull: false) List<String>? truthTable,
 | 
				
			||||||
 | 
					      @JsonKey(includeIfNull: false) String? logicExpression});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
| 
						 | 
					@ -204,6 +207,7 @@ class _$ComponentEntryCopyWithImpl<$Res>
 | 
				
			||||||
    Object? inputs = freezed,
 | 
					    Object? inputs = freezed,
 | 
				
			||||||
    Object? outputs = freezed,
 | 
					    Object? outputs = freezed,
 | 
				
			||||||
    Object? truthTable = freezed,
 | 
					    Object? truthTable = freezed,
 | 
				
			||||||
 | 
					    Object? logicExpression = freezed,
 | 
				
			||||||
  }) {
 | 
					  }) {
 | 
				
			||||||
    return _then(_value.copyWith(
 | 
					    return _then(_value.copyWith(
 | 
				
			||||||
      componentId: componentId == freezed
 | 
					      componentId: componentId == freezed
 | 
				
			||||||
| 
						 | 
					@ -230,6 +234,10 @@ class _$ComponentEntryCopyWithImpl<$Res>
 | 
				
			||||||
          ? _value.truthTable
 | 
					          ? _value.truthTable
 | 
				
			||||||
          : truthTable // ignore: cast_nullable_to_non_nullable
 | 
					          : truthTable // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
              as List<String>?,
 | 
					              as List<String>?,
 | 
				
			||||||
 | 
					      logicExpression: logicExpression == freezed
 | 
				
			||||||
 | 
					          ? _value.logicExpression
 | 
				
			||||||
 | 
					          : logicExpression // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					              as String?,
 | 
				
			||||||
    ));
 | 
					    ));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -247,7 +255,8 @@ abstract class _$$_ComponentEntryCopyWith<$Res>
 | 
				
			||||||
      @JsonKey(includeIfNull: false) String? componentDescription,
 | 
					      @JsonKey(includeIfNull: false) String? componentDescription,
 | 
				
			||||||
      List<String> inputs,
 | 
					      List<String> inputs,
 | 
				
			||||||
      List<String> outputs,
 | 
					      List<String> outputs,
 | 
				
			||||||
      @JsonKey(includeIfNull: false) List<String>? truthTable});
 | 
					      @JsonKey(includeIfNull: false) List<String>? truthTable,
 | 
				
			||||||
 | 
					      @JsonKey(includeIfNull: false) String? logicExpression});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
| 
						 | 
					@ -269,6 +278,7 @@ class __$$_ComponentEntryCopyWithImpl<$Res>
 | 
				
			||||||
    Object? inputs = freezed,
 | 
					    Object? inputs = freezed,
 | 
				
			||||||
    Object? outputs = freezed,
 | 
					    Object? outputs = freezed,
 | 
				
			||||||
    Object? truthTable = freezed,
 | 
					    Object? truthTable = freezed,
 | 
				
			||||||
 | 
					    Object? logicExpression = freezed,
 | 
				
			||||||
  }) {
 | 
					  }) {
 | 
				
			||||||
    return _then(_$_ComponentEntry(
 | 
					    return _then(_$_ComponentEntry(
 | 
				
			||||||
      componentId: componentId == freezed
 | 
					      componentId: componentId == freezed
 | 
				
			||||||
| 
						 | 
					@ -295,6 +305,10 @@ class __$$_ComponentEntryCopyWithImpl<$Res>
 | 
				
			||||||
          ? _value._truthTable
 | 
					          ? _value._truthTable
 | 
				
			||||||
          : truthTable // ignore: cast_nullable_to_non_nullable
 | 
					          : truthTable // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
              as List<String>?,
 | 
					              as List<String>?,
 | 
				
			||||||
 | 
					      logicExpression: logicExpression == freezed
 | 
				
			||||||
 | 
					          ? _value.logicExpression
 | 
				
			||||||
 | 
					          : logicExpression // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					              as String?,
 | 
				
			||||||
    ));
 | 
					    ));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -308,7 +322,8 @@ class _$_ComponentEntry implements _ComponentEntry {
 | 
				
			||||||
      @JsonKey(includeIfNull: false) this.componentDescription,
 | 
					      @JsonKey(includeIfNull: false) this.componentDescription,
 | 
				
			||||||
      required final List<String> inputs,
 | 
					      required final List<String> inputs,
 | 
				
			||||||
      required final List<String> outputs,
 | 
					      required final List<String> outputs,
 | 
				
			||||||
      @JsonKey(includeIfNull: false) final List<String>? truthTable})
 | 
					      @JsonKey(includeIfNull: false) final List<String>? truthTable,
 | 
				
			||||||
 | 
					      @JsonKey(includeIfNull: false) this.logicExpression})
 | 
				
			||||||
      : _inputs = inputs,
 | 
					      : _inputs = inputs,
 | 
				
			||||||
        _outputs = outputs,
 | 
					        _outputs = outputs,
 | 
				
			||||||
        _truthTable = truthTable;
 | 
					        _truthTable = truthTable;
 | 
				
			||||||
| 
						 | 
					@ -347,9 +362,13 @@ class _$_ComponentEntry implements _ComponentEntry {
 | 
				
			||||||
    return EqualUnmodifiableListView(value);
 | 
					    return EqualUnmodifiableListView(value);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  @JsonKey(includeIfNull: false)
 | 
				
			||||||
 | 
					  final String? logicExpression;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  String toString() {
 | 
					  String toString() {
 | 
				
			||||||
    return 'ComponentEntry(componentId: $componentId, componentName: $componentName, componentDescription: $componentDescription, inputs: $inputs, outputs: $outputs, truthTable: $truthTable)';
 | 
					    return 'ComponentEntry(componentId: $componentId, componentName: $componentName, componentDescription: $componentDescription, inputs: $inputs, outputs: $outputs, truthTable: $truthTable, logicExpression: $logicExpression)';
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
| 
						 | 
					@ -366,7 +385,9 @@ class _$_ComponentEntry implements _ComponentEntry {
 | 
				
			||||||
            const DeepCollectionEquality().equals(other._inputs, _inputs) &&
 | 
					            const DeepCollectionEquality().equals(other._inputs, _inputs) &&
 | 
				
			||||||
            const DeepCollectionEquality().equals(other._outputs, _outputs) &&
 | 
					            const DeepCollectionEquality().equals(other._outputs, _outputs) &&
 | 
				
			||||||
            const DeepCollectionEquality()
 | 
					            const DeepCollectionEquality()
 | 
				
			||||||
                .equals(other._truthTable, _truthTable));
 | 
					                .equals(other._truthTable, _truthTable) &&
 | 
				
			||||||
 | 
					            const DeepCollectionEquality()
 | 
				
			||||||
 | 
					                .equals(other.logicExpression, logicExpression));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @JsonKey(ignore: true)
 | 
					  @JsonKey(ignore: true)
 | 
				
			||||||
| 
						 | 
					@ -378,7 +399,8 @@ class _$_ComponentEntry implements _ComponentEntry {
 | 
				
			||||||
      const DeepCollectionEquality().hash(componentDescription),
 | 
					      const DeepCollectionEquality().hash(componentDescription),
 | 
				
			||||||
      const DeepCollectionEquality().hash(_inputs),
 | 
					      const DeepCollectionEquality().hash(_inputs),
 | 
				
			||||||
      const DeepCollectionEquality().hash(_outputs),
 | 
					      const DeepCollectionEquality().hash(_outputs),
 | 
				
			||||||
      const DeepCollectionEquality().hash(_truthTable));
 | 
					      const DeepCollectionEquality().hash(_truthTable),
 | 
				
			||||||
 | 
					      const DeepCollectionEquality().hash(logicExpression));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @JsonKey(ignore: true)
 | 
					  @JsonKey(ignore: true)
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
| 
						 | 
					@ -398,7 +420,8 @@ abstract class _ComponentEntry implements ComponentEntry {
 | 
				
			||||||
          @JsonKey(includeIfNull: false) final String? componentDescription,
 | 
					          @JsonKey(includeIfNull: false) final String? componentDescription,
 | 
				
			||||||
          required final List<String> inputs,
 | 
					          required final List<String> inputs,
 | 
				
			||||||
          required final List<String> outputs,
 | 
					          required final List<String> outputs,
 | 
				
			||||||
          @JsonKey(includeIfNull: false) final List<String>? truthTable}) =
 | 
					          @JsonKey(includeIfNull: false) final List<String>? truthTable,
 | 
				
			||||||
 | 
					          @JsonKey(includeIfNull: false) final String? logicExpression}) =
 | 
				
			||||||
      _$_ComponentEntry;
 | 
					      _$_ComponentEntry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  factory _ComponentEntry.fromJson(Map<String, dynamic> json) =
 | 
					  factory _ComponentEntry.fromJson(Map<String, dynamic> json) =
 | 
				
			||||||
| 
						 | 
					@ -419,6 +442,9 @@ abstract class _ComponentEntry implements ComponentEntry {
 | 
				
			||||||
  @JsonKey(includeIfNull: false)
 | 
					  @JsonKey(includeIfNull: false)
 | 
				
			||||||
  List<String>? get truthTable => throw _privateConstructorUsedError;
 | 
					  List<String>? get truthTable => throw _privateConstructorUsedError;
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
 | 
					  @JsonKey(includeIfNull: false)
 | 
				
			||||||
 | 
					  String? get logicExpression => throw _privateConstructorUsedError;
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
  @JsonKey(ignore: true)
 | 
					  @JsonKey(ignore: true)
 | 
				
			||||||
  _$$_ComponentEntryCopyWith<_$_ComponentEntry> get copyWith =>
 | 
					  _$$_ComponentEntryCopyWith<_$_ComponentEntry> get copyWith =>
 | 
				
			||||||
      throw _privateConstructorUsedError;
 | 
					      throw _privateConstructorUsedError;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,6 +30,7 @@ _$_ComponentEntry _$$_ComponentEntryFromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
      truthTable: (json['truthTable'] as List<dynamic>?)
 | 
					      truthTable: (json['truthTable'] as List<dynamic>?)
 | 
				
			||||||
          ?.map((e) => e as String)
 | 
					          ?.map((e) => e as String)
 | 
				
			||||||
          .toList(),
 | 
					          .toList(),
 | 
				
			||||||
 | 
					      logicExpression: json['logicExpression'] as String?,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Map<String, dynamic> _$$_ComponentEntryToJson(_$_ComponentEntry instance) {
 | 
					Map<String, dynamic> _$$_ComponentEntryToJson(_$_ComponentEntry instance) {
 | 
				
			||||||
| 
						 | 
					@ -48,5 +49,6 @@ Map<String, dynamic> _$$_ComponentEntryToJson(_$_ComponentEntry instance) {
 | 
				
			||||||
  val['inputs'] = instance.inputs;
 | 
					  val['inputs'] = instance.inputs;
 | 
				
			||||||
  val['outputs'] = instance.outputs;
 | 
					  val['outputs'] = instance.outputs;
 | 
				
			||||||
  writeNotNull('truthTable', instance.truthTable);
 | 
					  writeNotNull('truthTable', instance.truthTable);
 | 
				
			||||||
 | 
					  writeNotNull('logicExpression', instance.logicExpression);
 | 
				
			||||||
  return val;
 | 
					  return val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,7 @@ class EditComponentPage extends HookWidget {
 | 
				
			||||||
    final projectState = useProvider<ProjectState>();
 | 
					    final projectState = useProvider<ProjectState>();
 | 
				
			||||||
    ComponentEntry ce() => projectState.index.components.where((c) => c.componentId == component.componentId).first;
 | 
					    ComponentEntry ce() => projectState.index.components.where((c) => c.componentId == component.componentId).first;
 | 
				
			||||||
    final truthTable = useState(ce().truthTable?.toList());
 | 
					    final truthTable = useState(ce().truthTable?.toList());
 | 
				
			||||||
 | 
					    final logicExpression = useState(ce().logicExpression);
 | 
				
			||||||
    final inputs = useState(ce().inputs.toList());
 | 
					    final inputs = useState(ce().inputs.toList());
 | 
				
			||||||
    final outputs = useState(ce().outputs.toList());
 | 
					    final outputs = useState(ce().outputs.toList());
 | 
				
			||||||
    final componentNameEditingController = useTextEditingController(text: ce().componentName);
 | 
					    final componentNameEditingController = useTextEditingController(text: ce().componentName);
 | 
				
			||||||
| 
						 | 
					@ -39,6 +40,11 @@ class EditComponentPage extends HookWidget {
 | 
				
			||||||
          // Don't allow saving empty outputs
 | 
					          // Don't allow saving empty outputs
 | 
				
			||||||
          return false;
 | 
					          return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if (truthTable.value == null && logicExpression.value == null) {
 | 
				
			||||||
 | 
					          // Don't allow saving components without functionality
 | 
				
			||||||
 | 
					          return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (componentNameEditingController.text != ce().componentName) {
 | 
					        if (componentNameEditingController.text != ce().componentName) {
 | 
				
			||||||
          return true;
 | 
					          return true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -51,6 +57,9 @@ class EditComponentPage extends HookWidget {
 | 
				
			||||||
        if (!const ListEquality().equals(truthTable.value, ce().truthTable)) {
 | 
					        if (!const ListEquality().equals(truthTable.value, ce().truthTable)) {
 | 
				
			||||||
          return true;
 | 
					          return true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if (logicExpression.value != ce().logicExpression) {
 | 
				
			||||||
 | 
					          return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      [
 | 
					      [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue