Store prefs

This commit is contained in:
futpib 2018-11-08 21:50:24 +03:00
parent 5a07ba5f56
commit 851c2f1327
8 changed files with 85 additions and 39 deletions

View File

@ -14,5 +14,7 @@ module.exports = createActionCreators({
MOVE_SINK_INPUT: (sinkInputIndex, destSinkIndex) => ({ sinkInputIndex, destSinkIndex }),
MOVE_SOURCE_OUTPUT: (sourceOutputIndex, destSourceIndex) => ({ sourceOutputIndex, destSourceIndex }),
KILL_CLIENT_BY_INDEX: clientIndex => ({ clientIndex }),
},
});

View File

@ -4,7 +4,7 @@ const {
values,
flatten,
memoizeWith,
pick,
path,
filter,
} = require('ramda');
@ -31,7 +31,7 @@ const {
Edge.calculateOffset = function (nodeSize, source, target) {
const arrowVector = math.matrix([ target.x - source.x, target.y - source.y ]);
const offsetLength = Math.max(0, Math.min((0.85 * size), (math.norm(arrowVector) / 2) - 40));
const offsetLength = Math.max(0, Math.min((0.75 * size), (math.norm(arrowVector) / 2) - 40));
const offsetVector = math.dotMultiply(arrowVector, (offsetLength / math.norm(arrowVector)) || 0);
return {
@ -94,12 +94,7 @@ const graphConfig = {
viewBox: '0 0 50 50',
id: 'sinkInput',
key: '0',
}, r.circle({
cx: '25',
cy: '25',
r: '8',
fill: 'currentColor',
})),
}),
},
sourceOutput: {
shapeId: '#sourceOutput',
@ -107,12 +102,7 @@ const graphConfig = {
viewBox: '0 0 50 50',
id: 'sourceOutput',
key: '0',
}, r.circle({
cx: '25',
cy: '25',
r: '8',
fill: 'currentColor',
})),
}),
},
},
};
@ -173,9 +163,9 @@ const renderDefs = () => r(React.Fragment, [
})),
r('marker', {
id: 'start-arrow',
id: 'my-source-arrow',
viewBox: '0 -8 16 16',
refX: '8',
refX: '16',
markerWidth: '16',
markerHeight: '16',
orient: 'auto',
@ -183,6 +173,18 @@ const renderDefs = () => r(React.Fragment, [
className: 'arrow',
d: 'M 16,-8 L 0,0 L 16,8',
})),
r('marker', {
id: 'my-sink-arrow',
viewBox: '0 -8 16 16',
refX: '16',
markerWidth: '16',
markerHeight: '16',
orient: 'auto',
}, r.path({
className: 'arrow',
d: 'M 0,-8 L 16,0 L 0,8',
})),
]);
const renderNode = (nodeRef, data, key, selected, hovered) => r({
@ -220,6 +222,7 @@ const SourceText = ({ dgo, pai, props }) => r.div([
const ClientText = ({ dgo, pai, props }) => r.div([
r.div({
title: path('properties.application.process.binary'.split('.'), pai),
}, pai.name),
r(DebugText, { dgo, pai, props }),
]);
@ -258,6 +261,7 @@ const afterRenderEdge = (id, element, edge, edgeContainer) => {
if (edge.type) {
edgeContainer.classList.add(edge.type);
}
//const edgeOverlay = edgeContainer.querySelector('.edge-overlay-path');
};
class Graph extends React.Component {
@ -299,7 +303,10 @@ class Graph extends React.Component {
onUpdateNode() {
}
onDeleteNode() {
onDeleteNode(selected) {
if (selected.type === 'client') {
this.props.killClientByIndex(selected.index);
}
}
onSelectEdge() {
@ -316,7 +323,8 @@ class Graph extends React.Component {
}
}
onDeleteEdge() {}
onDeleteEdge() {
}
render() {
const edges = map(paiToEdge, flatten(map(values, [
@ -392,7 +400,7 @@ class Graph extends React.Component {
showGraphControls: false,
edgeArrowSize: 16,
edgeArrowSize: 128,
backgroundFillId: '#background-pattern',
@ -411,8 +419,5 @@ module.exports = connect(
preferences: state.preferences,
}),
dispatch => bindActionCreators(pick([
'moveSinkInput',
'moveSourceOutput',
], pulseActions), dispatch),
dispatch => bindActionCreators(pulseActions, dispatch),
)(Graph);

View File

@ -79,7 +79,7 @@ const Preferences = withStateHandlers(
] : [
r(Button, {
onClick: toggle,
}, 'Props'),
}, 'Preferences'),
]));
module.exports = connect(

View File

@ -51,7 +51,15 @@ button:active {
.view-wrapper .sourceOutput .edge {
/* marker-end: none; */
/* marker-start: url(#start-arrow); */
marker-end: url(#start-arrow);
marker-end: url(#my-source-arrow);
}
.view-wrapper .sinkInput .edge {
marker-end: url(#my-sink-arrow);
}
#edge-custom-container .edge {
marker-end: none;
}
.view-wrapper .graph .edge {
@ -90,3 +98,7 @@ button:active {
.checkbox {
user-select: none;
}
.view-wrapper .graph .edge-mouse-handler {
stroke-width: 30px;
}

View File

@ -22,6 +22,7 @@
"dependencies": {
"@jakejarrett/gtk-theme": "^1.1.2",
"camelcase": "^5.0.0",
"electron-store": "^2.0.0",
"mathjs": "^5.2.3",
"paclient": "^0.0.2",
"r-dom": "^2.4.0",
@ -35,6 +36,7 @@
"redux-actions": "^2.6.4",
"redux-logger": "^3.0.6",
"redux-persist": "^5.10.0",
"redux-persist-electron-storage": "^2.0.0",
"redux-promise-middleware": "^5.1.1",
"redux-thunk": "^2.3.0",
"remote-redux-devtools": "^0.5.13",

View File

@ -8,7 +8,7 @@ const { default: thunkMiddleware } = require('redux-thunk');
const { default: createPromiseMiddleware } = require('redux-promise-middleware');
const { persistStore, persistReducer } = require('redux-persist');
const { default: storage } = require('redux-persist/lib/storage');
const createElectronStorage = require('redux-persist-electron-storage');
const { reducer, initialState } = require('../reducers');
@ -16,8 +16,8 @@ const pulseMiddleware = require('./pulse-middleware');
const persistConfig = {
key: 'redux-persist',
whitelist: [ 'localStorage' ],
storage,
whitelist: [ 'preferences' ],
storage: createElectronStorage(),
};
const dev = process.env.NODE_ENV !== 'production';

View File

@ -77,21 +77,23 @@ module.exports = store => {
pa.connect();
const rethrow = error => {
if (error) {
throw error;
}
};
const handlePulseActions = handleActions({
[pulseActions.moveSinkInput]: (state, { payload: { sinkInputIndex, destSinkIndex } }) => {
pa.moveSinkInput(sinkInputIndex, destSinkIndex, error => {
if (error) {
throw error;
}
});
pa.moveSinkInput(sinkInputIndex, destSinkIndex, rethrow);
return state;
},
[pulseActions.moveSourceOutput]: (state, { payload: { sourceOutputIndex, destSourceIndex } }) => {
pa.moveSourceOutput(sourceOutputIndex, destSourceIndex, error => {
if (error) {
throw error;
}
});
pa.moveSourceOutput(sourceOutputIndex, destSourceIndex, rethrow);
return state;
},
[pulseActions.killClientByIndex]: (state, { payload: { clientIndex } }) => {
pa.killClientByIndex(clientIndex, rethrow);
return state;
},
}, null);

View File

@ -1276,6 +1276,17 @@ concordance@^3.0.0:
semver "^5.3.0"
well-known-symbols "^1.0.0"
conf@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/conf/-/conf-2.0.0.tgz#43f7e282b32faca31f4d18bf279d6841ad657d5a"
integrity sha512-iCLzBsGFi8S73EANsEJZz0JnJ/e5VZef/kSaxydYZLAvw0rFNAUx5R7K5leC/CXXR2mZfXWhUvcZOO/dM2D5xg==
dependencies:
dot-prop "^4.1.0"
env-paths "^1.0.0"
make-dir "^1.0.0"
pkg-up "^2.0.0"
write-file-atomic "^2.3.0"
configstore@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f"
@ -1898,6 +1909,13 @@ electron-download@^4.1.0:
semver "^5.4.1"
sumchecker "^2.0.2"
electron-store@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-2.0.0.tgz#1035cca2a95409d1f54c7466606345852450d64a"
integrity sha512-1WCFYHsYvZBqDsoaS0Relnz0rd81ZkBAI0Fgx7Nq2UWU77rSNs1qxm4S6uH7TCZ0bV3LQpJFk7id/is/ZgoOPA==
dependencies:
conf "^2.0.0"
electron@^3.0.8:
version "3.0.8"
resolved "https://registry.yarnpkg.com/electron/-/electron-3.0.8.tgz#7905806ebaead4c693531e11cda6568c32efa7bb"
@ -5183,6 +5201,11 @@ redux-logger@^3.0.6:
dependencies:
deep-diff "^0.3.5"
redux-persist-electron-storage@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/redux-persist-electron-storage/-/redux-persist-electron-storage-2.0.0.tgz#60de80877b97440ba0c52b52776497ce3226d84f"
integrity sha512-VHKyYi4+QB/vNbCRnqNt8X9a5AZDqFU6wH524eb9EgbxOI4NIekN2t6crSCw0+eiCxztfETfMBEhfxHE3laKHQ==
redux-persist@^5.10.0:
version "5.10.0"
resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-5.10.0.tgz#5d8d802c5571e55924efc1c3a9b23575283be62b"
@ -6533,7 +6556,7 @@ write-file-atomic@^1.1.4:
imurmurhash "^0.1.4"
slide "^1.1.5"
write-file-atomic@^2.0.0:
write-file-atomic@^2.0.0, write-file-atomic@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==