add recent file renaming
This commit is contained in:
parent
2f5cf932e8
commit
0c2183ab54
3 changed files with 66 additions and 4 deletions
|
|
@ -109,6 +109,33 @@
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
DP.rename = function(name, newname, callback) {
|
||||||
|
if (!this.files[name]) return callback({error: 'no such file'});
|
||||||
|
if (!newname || newname == name) return callback({error: 'invalid new name'});
|
||||||
|
let done = 0;
|
||||||
|
let error = [];
|
||||||
|
let store = this;
|
||||||
|
function complete(ok, err) {
|
||||||
|
if (err) error.push(err);
|
||||||
|
if (++done === 2) {
|
||||||
|
store.files[newname] = store.files[name];
|
||||||
|
delete store.files[name];
|
||||||
|
saveFileList(store);
|
||||||
|
store.db.remove(`fdec-${name}`);
|
||||||
|
store.db.remove(`file-${name}`);
|
||||||
|
callback(error.length ? {error} : {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
store.db.get(`fdec-${name}`, (vertices) => {
|
||||||
|
if (!vertices) return complete(false, 'no decimation');
|
||||||
|
store.db.put(`fdec-${newname}`, vertices, complete);
|
||||||
|
});
|
||||||
|
store.db.get(`file-${name}`, (vertices) => {
|
||||||
|
if (!vertices) return complete(false, 'no raw file');
|
||||||
|
store.db.put(`file-${newname}`, vertices, complete);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {String} name
|
* @param {String} name
|
||||||
* @param {Function} callback
|
* @param {Function} callback
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
if (self.kiri.init) return;
|
if (self.kiri.init) return;
|
||||||
|
|
||||||
const KIRI = self.kiri,
|
const KIRI = self.kiri,
|
||||||
|
BASE = self.base,
|
||||||
MOTO = self.moto,
|
MOTO = self.moto,
|
||||||
CONF = KIRI.conf,
|
CONF = KIRI.conf,
|
||||||
WIN = self.window,
|
WIN = self.window,
|
||||||
|
|
@ -317,6 +318,9 @@
|
||||||
case cca('P'): // position widget
|
case cca('P'): // position widget
|
||||||
positionSelection();
|
positionSelection();
|
||||||
break;
|
break;
|
||||||
|
case cca('r'): // recent files
|
||||||
|
API.modal.show('files');
|
||||||
|
break;
|
||||||
case cca('R'): // position widget
|
case cca('R'): // position widget
|
||||||
rotateInputSelection();
|
rotateInputSelection();
|
||||||
break;
|
break;
|
||||||
|
|
@ -395,7 +399,7 @@
|
||||||
API.show.alert("select object to rotate");
|
API.show.alert("select object to rotate");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let coord = prompt("Enter X,Y,Z degrees of rotation").split(','),
|
let coord = (prompt("Enter X,Y,Z degrees of rotation") || '').split(','),
|
||||||
prod = Math.PI / 180,
|
prod = Math.PI / 180,
|
||||||
x = parseFloat(coord[0] || 0.0) * prod,
|
x = parseFloat(coord[0] || 0.0) * prod,
|
||||||
y = parseFloat(coord[1] || 0.0) * prod,
|
y = parseFloat(coord[1] || 0.0) * prod,
|
||||||
|
|
@ -1013,23 +1017,46 @@
|
||||||
});
|
});
|
||||||
for (let i=0; i<list.length; i++) {
|
for (let i=0; i<list.length; i++) {
|
||||||
let row = DOC.createElement('div'),
|
let row = DOC.createElement('div'),
|
||||||
|
renm = DOC.createElement('button'),
|
||||||
load = DOC.createElement('button'),
|
load = DOC.createElement('button'),
|
||||||
|
size = DOC.createElement('button'),
|
||||||
del = DOC.createElement('button'),
|
del = DOC.createElement('button'),
|
||||||
file = list[i],
|
file = list[i],
|
||||||
name = file.n;
|
name = file.n,
|
||||||
|
split = name.split('.'),
|
||||||
|
short = split[0],
|
||||||
|
ext = split[1] ? `.${split[1]}` : '';
|
||||||
|
|
||||||
|
renm.setAttribute('class', 'rename');
|
||||||
|
renm.setAttribute('title', 'rename file');
|
||||||
|
renm.appendChild(DOC.createTextNode('n'));
|
||||||
|
renm.onclick = () => {
|
||||||
|
let newname = prompt(`rename file`, short);
|
||||||
|
if (newname && newname !== short) {
|
||||||
|
CATALOG.rename(name, `${newname}${ext}`, then => {
|
||||||
|
CATALOG.refresh();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
load.setAttribute('load', name);
|
load.setAttribute('load', name);
|
||||||
load.setAttribute('title', 'file: '+name+'\nvertices: '+file.v);
|
load.setAttribute('title', 'file: '+name+'\nvertices: '+file.v);
|
||||||
load.onclick = loadCatalogFile;
|
load.onclick = loadCatalogFile;
|
||||||
load.appendChild(DOC.createTextNode(name.split('.')[0]));
|
load.appendChild(DOC.createTextNode(short));
|
||||||
|
|
||||||
del.setAttribute('del', name);
|
del.setAttribute('del', name);
|
||||||
del.setAttribute('title', "remove '"+name+"'");
|
del.setAttribute('title', "remove '"+name+"'");
|
||||||
del.onclick = deleteCatalogFile;
|
del.onclick = deleteCatalogFile;
|
||||||
del.appendChild(DOC.createTextNode('x'));
|
del.appendChild(DOC.createTextNode('x'));
|
||||||
|
|
||||||
row.setAttribute("class", "flow-row");
|
size.setAttribute("disabled", true);
|
||||||
|
size.setAttribute("class", "label");
|
||||||
|
size.appendChild(DOC.createTextNode(BASE.util.comma(file.v)));
|
||||||
|
|
||||||
|
row.setAttribute("class", "row a-center");
|
||||||
|
row.appendChild(renm);
|
||||||
row.appendChild(load);
|
row.appendChild(load);
|
||||||
|
row.appendChild(size);
|
||||||
row.appendChild(del);
|
row.appendChild(del);
|
||||||
table.appendChild(row);
|
table.appendChild(row);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -714,6 +714,14 @@ th, tr, td {
|
||||||
height: 350px;
|
height: 350px;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
}
|
}
|
||||||
|
#catalogList .label {
|
||||||
|
width: 10em;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
#catalogList .rename {
|
||||||
|
font-style: italic;
|
||||||
|
color: #335;
|
||||||
|
}
|
||||||
|
|
||||||
#slider {
|
#slider {
|
||||||
display: none;
|
display: none;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue