Add a multiselect tool panel. Can now delete multiply-selected elements
git-svn-id: http://svg-edit.googlecode.com/svn/trunk@246 eee81c28-f429-11dd-99c0-75d572ba1dddmaster
parent
5804e605ec
commit
634b7efeb8
|
@ -110,6 +110,10 @@ div.color_block {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#svg_editor #multiselected_panel {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
#svg_editor #rect_panel {
|
#svg_editor #rect_panel {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
<img class="tool_button tool_button_disabled" id="tool_redo" src="images/redo.png" title="Redo [Shift+Z/Y]" alt="Redo"/>
|
<img class="tool_button tool_button_disabled" id="tool_redo" src="images/redo.png" title="Redo [Shift+Z/Y]" alt="Redo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Buttons when something is selected -->
|
<!-- Buttons when something a single element is selected -->
|
||||||
<div id="selected_panel">
|
<div id="selected_panel">
|
||||||
<img class="tool_sep" src="images/sep.png" alt="|"/>
|
<img class="tool_sep" src="images/sep.png" alt="|"/>
|
||||||
<img class="tool_button" id="tool_delete" src="images/delete.png" title="Delete Element [Delete/Backspace]" alt="Delete"/>
|
<img class="tool_button" id="tool_delete" src="images/delete.png" title="Delete Element [Delete/Backspace]" alt="Delete"/>
|
||||||
|
@ -41,6 +41,12 @@
|
||||||
<img class="tool_button" id="tool_move_bottom" src="images/move_bottom.png" title="Move to Bottom [Shift+Down]" alt="Bottom"/>
|
<img class="tool_button" id="tool_move_bottom" src="images/move_bottom.png" title="Move to Bottom [Shift+Down]" alt="Bottom"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Buttons when something a single element is selected -->
|
||||||
|
<div id="multiselected_panel">
|
||||||
|
<img class="tool_sep" src="images/sep.png" alt="|"/>
|
||||||
|
<img class="tool_button" id="tool_delete_multi" src="images/delete.png" title="Delete Element [Delete/Backspace]" alt="Delete"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="rect_panel">
|
<div id="rect_panel">
|
||||||
<img class="tool_sep" src="images/sep.png" alt="|"/>
|
<img class="tool_sep" src="images/sep.png" alt="|"/>
|
||||||
<label class="rect_tool">x:</label>
|
<label class="rect_tool">x:</label>
|
||||||
|
|
|
@ -18,11 +18,13 @@ function svg_edit_setup() {
|
||||||
|
|
||||||
var textBeingEntered = false;
|
var textBeingEntered = false;
|
||||||
var selectedElement = null;
|
var selectedElement = null;
|
||||||
|
var multiselected = false;
|
||||||
|
|
||||||
// called when we've selected a different element
|
// called when we've selected a different element
|
||||||
var selectedChanged = function(window,elems) {
|
var selectedChanged = function(window,elems) {
|
||||||
// if elems[1] is present, then we have more than one element
|
// if elems[1] is present, then we have more than one element
|
||||||
selectedElement = (elems.length == 1 || elems[1] == null ? elems[0] : null);
|
selectedElement = (elems.length == 1 || elems[1] == null ? elems[0] : null);
|
||||||
|
multiselected = (elems.length >= 2 && elems[1] != null);
|
||||||
if (selectedElement != null) {
|
if (selectedElement != null) {
|
||||||
// unless we're already in always set the mode of the editor to select because
|
// unless we're already in always set the mode of the editor to select because
|
||||||
// upon creation of a text element the editor is switched into
|
// upon creation of a text element the editor is switched into
|
||||||
|
@ -91,6 +93,7 @@ function svg_edit_setup() {
|
||||||
function updateContextPanel(shouldHighlightText) {
|
function updateContextPanel(shouldHighlightText) {
|
||||||
var elem = selectedElement;
|
var elem = selectedElement;
|
||||||
$('#selected_panel').hide();
|
$('#selected_panel').hide();
|
||||||
|
$('#multiselected_panel').hide();
|
||||||
$('#rect_panel').hide();
|
$('#rect_panel').hide();
|
||||||
$('#circle_panel').hide();
|
$('#circle_panel').hide();
|
||||||
$('#ellipse_panel').hide();
|
$('#ellipse_panel').hide();
|
||||||
|
@ -139,7 +142,10 @@ function svg_edit_setup() {
|
||||||
$('#text').select();
|
$('#text').select();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
} // switch
|
||||||
|
} // if (elem != null)
|
||||||
|
else if (multiselected) {
|
||||||
|
$('#multiselected_panel').show();
|
||||||
}
|
}
|
||||||
|
|
||||||
// update history buttons
|
// update history buttons
|
||||||
|
@ -310,8 +316,8 @@ function svg_edit_setup() {
|
||||||
// Delete is a contextual tool that only appears in the ribbon if
|
// Delete is a contextual tool that only appears in the ribbon if
|
||||||
// an element has been selected
|
// an element has been selected
|
||||||
var deleteSelected = function() {
|
var deleteSelected = function() {
|
||||||
if (selectedElement != null) {
|
if (selectedElement != null || multiselected) {
|
||||||
svgCanvas.deleteSelectedElement();
|
svgCanvas.deleteSelectedElements();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,6 +377,7 @@ function svg_edit_setup() {
|
||||||
$('#tool_clear').click(clickClear);
|
$('#tool_clear').click(clickClear);
|
||||||
$('#tool_save').click(clickSave);
|
$('#tool_save').click(clickSave);
|
||||||
$('#tool_delete').click(deleteSelected);
|
$('#tool_delete').click(deleteSelected);
|
||||||
|
$('#tool_delete_multi').click(deleteSelected);
|
||||||
$('#tool_move_top').click(moveToTopSelected);
|
$('#tool_move_top').click(moveToTopSelected);
|
||||||
$('#tool_move_bottom').click(moveToBottomSelected);
|
$('#tool_move_bottom').click(moveToBottomSelected);
|
||||||
$('#tool_undo').click(clickUndo);
|
$('#tool_undo').click(clickUndo);
|
||||||
|
@ -390,6 +397,9 @@ function svg_edit_setup() {
|
||||||
$('#tool_delete').mousedown(function(){$('#tool_delete').addClass('tool_button_current');});
|
$('#tool_delete').mousedown(function(){$('#tool_delete').addClass('tool_button_current');});
|
||||||
$('#tool_delete').mouseup(function(){$('#tool_delete').removeClass('tool_button_current');});
|
$('#tool_delete').mouseup(function(){$('#tool_delete').removeClass('tool_button_current');});
|
||||||
$('#tool_delete').mouseout(function(){$('#tool_delete').removeClass('tool_button_current');});
|
$('#tool_delete').mouseout(function(){$('#tool_delete').removeClass('tool_button_current');});
|
||||||
|
$('#tool_delete_multi').mousedown(function(){$('#tool_delete_multi').addClass('tool_button_current');});
|
||||||
|
$('#tool_delete_multi').mouseup(function(){$('#tool_delete_multi').removeClass('tool_button_current');});
|
||||||
|
$('#tool_delete_multi').mouseout(function(){$('#tool_delete_multi').removeClass('tool_button_current');});
|
||||||
$('#tool_undo').mousedown(function(){ if (!$('#tool_undo').hasClass('tool_button_disabled')) $('#tool_undo').addClass('tool_button_current');});
|
$('#tool_undo').mousedown(function(){ if (!$('#tool_undo').hasClass('tool_button_disabled')) $('#tool_undo').addClass('tool_button_current');});
|
||||||
$('#tool_undo').mouseup(function(){$('#tool_undo').removeClass('tool_button_current');});
|
$('#tool_undo').mouseup(function(){$('#tool_undo').removeClass('tool_button_current');});
|
||||||
$('#tool_undo').mouseout(function(){$('#tool_undo').removeClass('tool_button_current');});
|
$('#tool_undo').mouseout(function(){$('#tool_undo').removeClass('tool_button_current');});
|
||||||
|
|
|
@ -1351,16 +1351,22 @@ function SvgCanvas(c)
|
||||||
window.open("data:image/svg+xml;base64," + Utils.encode64(svg));
|
window.open("data:image/svg+xml;base64," + Utils.encode64(svg));
|
||||||
};
|
};
|
||||||
|
|
||||||
this.deleteSelectedElement = function() {
|
this.deleteSelectedElements = function() {
|
||||||
var selected = selectedElements[0];
|
for (var i = 0; i < selectedElements.length; ++i) {
|
||||||
if (selected != null) {
|
var selected = selectedElements[i];
|
||||||
|
if (selected == null) break;
|
||||||
|
|
||||||
var parent = selected.parentNode;
|
var parent = selected.parentNode;
|
||||||
var t = selected;
|
var t = selected;
|
||||||
// this will unselect the element (and remove the selectedOutline)
|
// this will unselect the element and remove the selectedOutline
|
||||||
this.removeFromSelection([t]);
|
selectorManager.releaseSelector(t);
|
||||||
var elem = parent.removeChild(t);
|
var elem = parent.removeChild(t);
|
||||||
|
selectedElements[i] = null;
|
||||||
|
// TODO: batch all element deletions up into a batch command
|
||||||
addCommandToHistory(new RemoveElementCommand(elem, parent));
|
addCommandToHistory(new RemoveElementCommand(elem, parent));
|
||||||
}
|
}
|
||||||
|
// TODO: add batch command to history
|
||||||
|
call("selected", selectedElements);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.moveToTopSelectedElement = function() {
|
this.moveToTopSelectedElement = function() {
|
||||||
|
|
Loading…
Reference in New Issue