Added support for flyouts in plugins, made improvements to flyouts

git-svn-id: http://svg-edit.googlecode.com/svn/trunk@1304 eee81c28-f429-11dd-99c0-75d572ba1ddd
master
Alexis Deveria 2010-01-29 18:27:26 +00:00
parent 81c304a68c
commit 0690ed7760
4 changed files with 316 additions and 129 deletions

View File

@ -144,6 +144,11 @@ $(function() {
icon: "images/cut.png", icon: "images/cut.png",
title: "Connect two objects", title: "Connect two objects",
key: "L", key: "L",
includeWith: {
button: '#tool_line',
'default': true,
position: 1
},
events: { events: {
'click': function() { 'click': function() {
svgCanvas.setMode("connector"); svgCanvas.setMode("connector");

View File

@ -282,7 +282,7 @@
} }
#svg_editor #main_menu { #svg_editor #main_menu {
z-index: 1; z-index: 12;
background: #E8E8E8; background: #E8E8E8;
position: relative; position: relative;
width: 200px; width: 200px;
@ -360,9 +360,12 @@
#svg_editor #tools_left { #svg_editor #tools_left {
position: absolute; position: absolute;
border-right: none; border-right: none;
width: 36px; width: 32px;
top: 75px; top: 75px;
left: 2px; left: 0;
padding-left: 2px;
background: #E8E8E8;
z-index: 5;
} }
#workarea.wireframe #svgcontent * { #workarea.wireframe #svgcontent * {
@ -431,15 +434,19 @@
height: 15px; height: 15px;
} }
#svg_editor .flyout_arrow_horiz { #svg_editor #tools_left .tool_button {
float: right;
position: relative; position: relative;
top: -13px; z-index: 11;
left: -5px;
margin-top: -3px;
margin-bottom: -13px;
} }
#svg_editor .flyout_arrow_horiz {
position: absolute;
bottom: 3%;
right: 5%;
z-index: 10;
}
.magic_field > * { .magic_field > * {
float: left; float: left;
} }
@ -539,6 +546,7 @@ span.zoom_tool {
border-top: 1px solid #FFFFFF; border-top: 1px solid #FFFFFF;
border-right: 1px solid #808080; border-right: 1px solid #808080;
border-bottom: 1px solid #808080; border-bottom: 1px solid #808080;
background-color: #E8E8E8;
cursor: pointer; cursor: pointer;
} }
@ -619,6 +627,7 @@ span.zoom_tool {
position: absolute; position: absolute;
display: none; display: none;
cursor: pointer; cursor: pointer;
width: 400px;
} }
#svg_editor .tools_flyout_v { #svg_editor .tools_flyout_v {
@ -628,9 +637,7 @@ span.zoom_tool {
width: 30px; width: 30px;
} }
/* TODO: figure out what more-specific selector causes me to write this atrocity and not #svg_editor .tools_flyout .tool_button {
simply .tool_flyout_button */
#svg_editor #tools_rect .tool_flyout_button, #svg_editor #tools_ellipse .tool_flyout_button {
float: left; float: left;
background-color: #E8E8E8; background-color: #E8E8E8;
border-left: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF;
@ -646,14 +653,6 @@ span.zoom_tool {
background-color: #FFF; background-color: #FFF;
} }
#svg_editor #tools_rect .tool_flyout_button_current, #svg_editor #tools_ellipse .tool_flyout_button_current {
border-left: 1px solid #808080;
border-top: 1px solid #808080;
border-right: 1px solid #FFFFFF;
border-bottom: 1px solid #FFFFFF;
background-color: #B0B0B0;
}
#svg_editor #tools_bottom { #svg_editor #tools_bottom {
position: absolute; position: absolute;
left: 40px; left: 40px;
@ -951,9 +950,18 @@ button#tool_docprops_cancel {
} }
/* Possibly not necessary */ /* Possibly not necessary */
#svg_editor #tools_rect .tool_flyout_button, #svg_editor .tools_flyout .tool_button,
#svg_editor #tools_ellipse .tool_flyout_button { #svg_editor .tools_flyout .tool_flyout {
padding: 2px; padding: 2px;
width: 24px; width: 24px;
height: 24px; height: 24px;
margin: 0;
}
#svg_editor .tools_flyout .tool_button:hover {
border-left: 1px solid #808080;
border-top: 1px solid #808080;
border-right: 1px solid #FFFFFF;
border-bottom: 1px solid #FFFFFF;
background-color: #B0B0B0;
} }

View File

@ -351,14 +351,26 @@ script type="text/javascript" src="locale/locale.min.js"></script-->
<div class="tool_button_current" id="tool_select" title="Select Tool [1]"></div> <div class="tool_button_current" id="tool_select" title="Select Tool [1]"></div>
<div class="tool_button" id="tool_fhpath" title="Pencil Tool [2]"></div> <div class="tool_button" id="tool_fhpath" title="Pencil Tool [2]"></div>
<div class="tool_button" id="tool_line" title="Line Tool [3]"></div> <div class="tool_button" id="tool_line" title="Line Tool [3]"></div>
<div class="tool_button" id="tools_rect_show" title="Square/Rect Tool [4/Shift+4]"></div> <div class="tool_button flyout_current" id="tools_rect_show" title="Square/Rect Tool [4/Shift+4]">
<div class="flyout_arrow_horiz"></div> <div class="flyout_arrow_horiz"></div>
<div class="tool_button" id="tools_ellipse_show" title="Ellipse/Circle Tool [5/Shift+5]"></div> </div>
<div class="flyout_arrow_horiz"></div> <div class="tool_button flyout_current" id="tools_ellipse_show" title="Ellipse/Circle Tool [5/Shift+5]">
<div class="flyout_arrow_horiz"></div>
</div>
<div class="tool_button" id="tool_path" title="Path Tool [7]"></div> <div class="tool_button" id="tool_path" title="Path Tool [7]"></div>
<div class="tool_button" id="tool_text" title="Text Tool [6]"></div> <div class="tool_button" id="tool_text" title="Text Tool [6]"></div>
<div class="tool_button" id="tool_image" title="Image Tool [8]"></div> <div class="tool_button" id="tool_image" title="Image Tool [8]"></div>
<div class="tool_button" id="tool_zoom" title="Zoom Tool [Ctrl+Up/Down]"></div> <div class="tool_button" id="tool_zoom" title="Zoom Tool [Ctrl+Up/Down]"></div>
<div style="display: none">
<div id="tool_rect" title="Rectangle"></div>
<div id="tool_square" title="Square"></div>
<div id="tool_fhrect" title="Free-Hand Rectangle"></div>
<div id="tool_ellipse" title="Ellipse"></div>
<div id="tool_circle" title="Circle"></div>
<div id="tool_fhellipse" title="Free-Hand Ellipse"></div>
</div>
</div> <!-- tools_left --> </div> <!-- tools_left -->
<div id="tools_bottom" class="tools_panel"> <div id="tools_bottom" class="tools_panel">
@ -421,6 +433,7 @@ script type="text/javascript" src="locale/locale.min.js"></script-->
<!-- hidden divs --> <!-- hidden divs -->
<div id="color_picker"></div> <div id="color_picker"></div>
<!--
<div id="tools_rect" class="tools_flyout"> <div id="tools_rect" class="tools_flyout">
<div id="tool_rect" class="tool_flyout_button" title="Rectangle"></div> <div id="tool_rect" class="tool_flyout_button" title="Rectangle"></div>
<div id="tool_square" class="tool_flyout_button" title="Square"></div> <div id="tool_square" class="tool_flyout_button" title="Square"></div>
@ -432,6 +445,7 @@ script type="text/javascript" src="locale/locale.min.js"></script-->
<div id="tool_circle" class="tool_flyout_button" title="Circle"></div> <div id="tool_circle" class="tool_flyout_button" title="Circle"></div>
<div id="tool_fhellipse" class="tool_flyout_button" title="Free-Hand Ellipse"></div> <div id="tool_fhellipse" class="tool_flyout_button" title="Free-Hand Ellipse"></div>
</div> </div>
-->
</div> <!-- svg_editor --> </div> <!-- svg_editor -->

View File

@ -1,4 +1,4 @@
/* /*
* svg-editor.js * svg-editor.js
* *
* Licensed under the Apache License, Version 2 * Licensed under the Apache License, Version 2
@ -266,12 +266,108 @@ function svg_edit_setup() {
zoomDone(); zoomDone();
} }
var flyout_funcs = {};
var setupFlyouts = function(holders) {
$.each(holders, function(hold_sel, btn_opts) {
var buttons = $(hold_sel).children();
var show_sel = hold_sel + '_show';
var def = false;
buttons.addClass('tool_button')
.unbind('click mousedown mouseup') // may not be necessary
.each(function(i) {
// Get this buttons options
var opts = btn_opts[i];
// Remember the function that goes with this ID
flyout_funcs[opts.sel] = opts.fn;
if(opts.isDefault) def = i;
// Clicking the icon in flyout should set this set's icon
$(this).mouseup(function() {
if (toolButtonClick(show_sel)) {
opts.fn();
}
if(opts.icon) {
var icon = $.getSvgIcon(opts.icon).clone();
} else {
//
var icon = $(opts.sel).children().eq(0).clone();
}
var shower = $(show_sel);
icon[0].setAttribute('width',shower.width());
icon[0].setAttribute('height',shower.height());
shower.children(':not(.flyout_arrow_horiz)').remove();
shower.append(icon).attr('data-curopt', opts.sel); // This sets the current mode
});
});
if(def) {
$(show_sel).attr('data-curopt', btn_opts[def].sel);
} else if(!$(show_sel).attr('data-curopt')) {
// Set first as default
$(show_sel).attr('data-curopt', btn_opts[0].sel);
}
var timer;
// Clicking the "show" icon should set the current mode
$(show_sel).mousedown(function(evt) {
var holder = $(show_sel.replace('_show',''));
var l = holder.css('left');
var w = holder.width()*-1;
timer = setTimeout(function() {
// Show corresponding menu
holder.css('left', w).show().animate({
left: l
},150);
},200);
evt.preventDefault();
}).mouseup(function() {
clearTimeout(timer);
var opt = $(this).attr('data-curopt');
if (toolButtonClick(show_sel)) {
flyout_funcs[opt]();
}
});
// $('#tools_rect').mouseleave(function(){$('#tools_rect').fadeOut();});
var pos = $(show_sel).position();
$(hold_sel).css({'left': pos.left+34, 'top': pos.top+77});
});
}
var makeFlyoutHolder = function(id, child) {
var div = $('<div>',{
'class': 'tools_flyout',
id: id
}).appendTo('#svg_editor').append(child);
return div;
}
var setFlyoutPositions = function() {
$('.tools_flyout').each(function() {
var shower = $('#' + this.id + '_show');
var pos = shower.offset();
var w = shower.outerWidth();
$(this).css({left: pos.left + w, top: pos.top});
});
}
var extAdded = function(window, ext) { var extAdded = function(window, ext) {
if("buttons" in ext) { if("buttons" in ext) {
var fallback_obj = {}, var fallback_obj = {},
placement_obj = {}, placement_obj = {},
svgicons = ext.svgicons; svgicons = ext.svgicons;
var holders = {};
// Add buttons given by extension // Add buttons given by extension
$.each(ext.buttons, function(i, btn) { $.each(ext.buttons, function(i, btn) {
var icon; var icon;
@ -286,7 +382,7 @@ function svg_edit_setup() {
if(!svgicons) { if(!svgicons) {
icon = $('<img src="' + btn.icon + '">'); icon = $('<img src="' + btn.icon + '">');
} else { } else {
fallback_obj[id] = btn.iocn; fallback_obj[id] = btn.icon;
placement_obj['#' + id] = btn.id; placement_obj['#' + id] = btn.id;
} }
@ -303,8 +399,62 @@ function svg_edit_setup() {
var button = $('<div/>') var button = $('<div/>')
.attr("id", id) .attr("id", id)
.attr("title", btn.title) .attr("title", btn.title)
.addClass(cls) .addClass(cls);
.appendTo(parent);
if(!btn.includeWith) {
button.appendTo(parent);
} else {
// Add to flyout menu / make flyout menu
var opts = btn.includeWith;
// opts.button, default, position
var ref_btn = $(opts.button);
var flyout_holder = ref_btn.parent();
// Create a flyout menu if there isn't one already
if(!ref_btn.parent().hasClass('tools_flyout')) {
// Create flyout placeholder
var arr_div = $('<div>',{id:'flyout_arrow_horiz'})
var tls_id = ref_btn[0].id.replace('tool_','tools_')
var show_btn = ref_btn.clone()
.attr('id',tls_id + '_show')
.append($('<div>',{'class':'flyout_arrow_horiz'}));
ref_btn.before(show_btn);
// Create a flyout div
flyout_holder = makeFlyoutHolder(tls_id, ref_btn);
}
var ref_data = Actions.getButtonData(opts.button);
if(opts.default) {
placement_obj['#' + tls_id + '_show'] = btn.id;
}
// TODO: Find way to set the current icon using the iconloader if this is not default
// Include data for extension button as well as ref button
var cur_h = holders['#'+flyout_holder[0].id] = [{
sel: '#'+id,
fn: btn.events.click,
icon: btn.id,
isDefault: btn.includeWith?btn.includeWith.default:0
}, ref_data];
// {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: 4, parent: '#tools_rect', icon: 'rect'}
var pos = ("position" in opts)?opts.position:'last';
var len = flyout_holder.children().length;
// Add at given position or end
if(!isNaN(pos) && pos >= 0 && pos < len) {
flyout_holder.children().eq(pos).before(button);
} else {
flyout_holder.append(button);
cur_h.reverse();
}
}
if(!svgicons) { if(!svgicons) {
button.append(icon); button.append(icon);
} }
@ -313,33 +463,18 @@ function svg_edit_setup() {
$.each(btn.events, function(name, func) { $.each(btn.events, function(name, func) {
if(name == "click") { if(name == "click") {
if(btn.type == 'mode') { if(btn.type == 'mode') {
var new_func = function() { button.bind(name, func);
if (toolButtonClick('#' + id)) {
func();
}
}
button.bind(name, new_func);
if(btn.key) { if(btn.key) {
$(document).bind('keydown', {combi: btn.key}, new_func); $(document).bind('keydown', {combi: btn.key}, func);
if(btn.title) button.attr("title", btn.title + ' ['+btn.key+']'); if(btn.title) button.attr("title", btn.title + ' ['+btn.key+']');
} }
} }
} else { } else {
button.bind(name, func); button.bind(name, func);
} }
button.bind(name, function() {
if(name == "click" && btn.type == 'mode') {
if (toolButtonClick('#' + id)) {
func();
}
} else {
func();
}
}); });
});
setupFlyouts(holders);
}); });
$.svgIcons(svgicons, { $.svgIcons(svgicons, {
@ -348,7 +483,8 @@ function svg_edit_setup() {
no_img: true, no_img: true,
fallback: fallback_obj, fallback: fallback_obj,
placement: placement_obj, placement: placement_obj,
callback: function() { callback: function(icons) {
// Bad hack to make the icon match the current size // Bad hack to make the icon match the current size
// TODO: Write better hack! // TODO: Write better hack!
var old = curPrefs.iconsize; var old = curPrefs.iconsize;
@ -651,11 +787,6 @@ function svg_edit_setup() {
$('#image_save_opts input').val([curPrefs.img_save]); $('#image_save_opts input').val([curPrefs.img_save]);
} }
var pos = $('#tools_rect_show').position();
$('#tools_rect').css({'left': pos.left+4, 'top': pos.top+77});
pos = $('#tools_ellipse_show').position();
$('#tools_ellipse').css({'left': pos.left+4, 'top': pos.top+77});
var changeRectRadius = function(ctl) { var changeRectRadius = function(ctl) {
svgCanvas.setRectRadius(ctl.value); svgCanvas.setRectRadius(ctl.value);
} }
@ -831,6 +962,7 @@ function svg_edit_setup() {
// - adds the tool_button_current class to the button passed in // - adds the tool_button_current class to the button passed in
var toolButtonClick = function(button, fadeFlyouts) { var toolButtonClick = function(button, fadeFlyouts) {
if ($(button).hasClass('tool_button_disabled')) return false; if ($(button).hasClass('tool_button_disabled')) return false;
if($(button).parent().hasClass('tools_flyout')) return true;
var fadeFlyouts = fadeFlyouts || 'normal'; var fadeFlyouts = fadeFlyouts || 'normal';
$('.tools_flyout').fadeOut(fadeFlyouts); $('.tools_flyout').fadeOut(fadeFlyouts);
$('#styleoverrides').text(''); $('#styleoverrides').text('');
@ -982,13 +1114,30 @@ function svg_edit_setup() {
} }
}, true); }, true);
var setIcon = function(holder_sel, id) { /*
var icon = $.getSvgIcon(id).clone();
var holder = $(holder_sel); When a flyout icon is selected
icon[0].setAttribute('width',holder.width()); (if flyout) {
icon[0].setAttribute('height',holder.height()); - Change the icon
holder.empty().append(icon); - Make pressing the button run its stuff
} }
- Run its stuff
When its shortcut key is pressed
- If not current in list, do as above
, else:
- Just run its stuff
*/
// var setIcon = function(holder_sel, id) {
// var icon = $.getSvgIcon(id).clone();
// var holder = $(holder_sel);
// icon[0].setAttribute('width',holder.width());
// icon[0].setAttribute('height',holder.height());
// holder.empty().append(icon)
// .attr('data-curopt', holder_sel.replace('_show','')); // This sets the current mode
// }
var clickSelect = function() { var clickSelect = function() {
if (toolButtonClick('#tool_select')) { if (toolButtonClick('#tool_select')) {
@ -1010,47 +1159,27 @@ function svg_edit_setup() {
}; };
var clickSquare = function(){ var clickSquare = function(){
if (toolButtonClick('#tools_rect_show', flyoutspeed)) { svgCanvas.setMode('square');
flyoutspeed = 'normal';
svgCanvas.setMode('square');
}
setIcon('#tools_rect_show','square');
}; };
var clickRect = function(){ var clickRect = function(){
if (toolButtonClick('#tools_rect_show')) { svgCanvas.setMode('rect');
svgCanvas.setMode('rect');
}
setIcon('#tools_rect_show','rect');
}; };
var clickFHRect = function(){ var clickFHRect = function(){
if (toolButtonClick('#tools_rect_show')) { svgCanvas.setMode('fhrect');
svgCanvas.setMode('fhrect');
}
setIcon('#tools_rect_show','fh_rect');
}; };
var clickCircle = function(){ var clickCircle = function(){
if (toolButtonClick('#tools_ellipse_show', flyoutspeed)) { svgCanvas.setMode('circle');
flyoutspeed = 'normal';
svgCanvas.setMode('circle');
}
setIcon('#tools_ellipse_show','circle');
}; };
var clickEllipse = function(){ var clickEllipse = function(){
if (toolButtonClick('#tools_ellipse_show')) { svgCanvas.setMode('ellipse');
svgCanvas.setMode('ellipse');
}
setIcon('#tools_ellipse_show','ellipse');
}; };
var clickFHEllipse = function(){ var clickFHEllipse = function(){
if (toolButtonClick('#tools_ellipse_show')) { svgCanvas.setMode('fhellipse');
svgCanvas.setMode('fhellipse');
}
setIcon('#tools_ellipse_show','fh_ellipse');
}; };
var clickImage = function(){ var clickImage = function(){
@ -1403,7 +1532,7 @@ function svg_edit_setup() {
var size_num = icon_sizes[size]; var size_num = icon_sizes[size];
// Change icon size // Change icon size
$('.tool_button, .push_button, .tool_button_current, .tool_button_disabled, .tool_flyout_button, #url_notice, #tool_open') $('.tool_button, .push_button, .tool_button_current, .tool_button_disabled, #url_notice, #tool_open')
.find('> svg, > img').each(function() { .find('> svg, > img').each(function() {
this.setAttribute('width',size_num); this.setAttribute('width',size_num);
this.setAttribute('height',size_num); this.setAttribute('height',size_num);
@ -1423,8 +1552,7 @@ function svg_edit_setup() {
.push_button,\ .push_button,\
.tool_button_current,\ .tool_button_current,\
.tool_button_disabled,\ .tool_button_disabled,\
#tools_rect .tool_flyout_button,\ .tools_flyout .tool_button": {
#tools_ellipse .tool_flyout_button": {
'width': {s: '16px', l: '32px', xl: '48px'}, 'width': {s: '16px', l: '32px', xl: '48px'},
'height': {s: '16px', l: '32px', xl: '48px'}, 'height': {s: '16px', l: '32px', xl: '48px'},
'padding': {s: '1px', l: '2px', xl: '3px'} 'padding': {s: '1px', l: '2px', xl: '3px'}
@ -1442,7 +1570,7 @@ function svg_edit_setup() {
'height': {s: '50px', l: '88px', xl: '125px'} 'height': {s: '50px', l: '88px', xl: '125px'}
}, },
"#tools_left": { "#tools_left": {
'width': {s: '26px', l: '34px', xl: '42px'}, 'width': {s: '22px', l: '30px', xl: '38px'},
'top': {s: '50px', l: '87px', xl: '125px'} 'top': {s: '50px', l: '87px', xl: '125px'}
}, },
"div#workarea": { "div#workarea": {
@ -1473,9 +1601,6 @@ function svg_edit_setup() {
"#tools_top > div, #tools_top": { "#tools_top > div, #tools_top": {
'line-height': {s: '17px', l: '34px', xl: '50px'} 'line-height': {s: '17px', l: '34px', xl: '50px'}
}, },
// "div.toolset, #tools_top label": {
// 'height': {s: '25px', l: '43px', xl: '64px'}
// },
".dropdown button": { ".dropdown button": {
'height': {s: '18px', l: '34px', xl: '40px'}, 'height': {s: '18px', l: '34px', xl: '40px'},
'line-height': {s: '18px', l: '34px', xl: '40px'}, 'line-height': {s: '18px', l: '34px', xl: '40px'},
@ -1504,10 +1629,6 @@ function svg_edit_setup() {
'width': {l: '19px', xl: '28px'}, 'width': {l: '19px', xl: '28px'},
'height': {l: '19px', xl: '28px'} 'height': {l: '19px', xl: '28px'}
}, },
".flyout_arrow_horiz": {
'left': {s: '-5px', l: '5px', xl: '14px'},
'top': {s: '-13px', l: '-13px', xl: '-20px'}
},
"input.spin-button": { "input.spin-button": {
'background-image': {l: "url('images/spinbtn_updn_big.png')", xl: "url('images/spinbtn_updn_big.png')"}, 'background-image': {l: "url('images/spinbtn_updn_big.png')", xl: "url('images/spinbtn_updn_big.png')"},
'background-position': {l: '100% -5px', xl: '100% -2px'}, 'background-position': {l: '100% -5px', xl: '100% -2px'},
@ -1543,10 +1664,7 @@ function svg_edit_setup() {
rule_elem.text(style_str); rule_elem.text(style_str);
} }
var pos = $('#tools_rect_show').offset(); setFlyoutPositions();
$('#tools_rect').css({'left': pos.left, 'top': pos.top});
pos = $('#tools_ellipse_show').offset();
$('#tools_ellipse').css({'left': pos.left, 'top': pos.top});
} }
var cancelOverlays = function() { var cancelOverlays = function() {
@ -1805,30 +1923,42 @@ function svg_edit_setup() {
updateToolButtonState(); updateToolButtonState();
}); });
$('#tools_rect_show').mousedown(function(evt){ // (function() {
$('#tools_rect').show(); // var timer, menuShown;
// this prevents the 'image drag' behavior in Firefox // $('#tools_rect_show').mousedown(function(evt){
evt.preventDefault(); // timer = setTimeout(function() {
}); // // menuShown = true;
$('#tools_rect').mouseleave(function(){$('#tools_rect').fadeOut();}); // $('#tools_rect').show();
// },200);
// // this prevents the 'image drag' behavior in Firefox
// evt.preventDefault();
// }).mouseup(function() {
// clearTimeout(timer);
// // var opt = $(this).attr('data-curopt',);
// });
//
//
// // $('#tools_rect').mouseleave(function(){$('#tools_rect').fadeOut();});
//
// }());
$('#tool_move_top').mousedown(function(evt){ $('#tool_move_top').mousedown(function(evt){
$('#tools_stacking').show(); $('#tools_stacking').show();
evt.preventDefault(); evt.preventDefault();
}); });
$('#tools_ellipse_show').mousedown(function(evt){ // $('#tools_ellipse_show').mousedown(function(evt){
$('#tools_ellipse').show(); // $('#tools_ellipse').show();
// this prevents the 'image drag' behavior in Firefox // // this prevents the 'image drag' behavior in Firefox
evt.preventDefault(); // evt.preventDefault();
}); // });
$('#tools_ellipse').mouseleave(function() {$('#tools_ellipse').fadeOut();}); // $('#tools_ellipse').mouseleave(function() {$('#tools_ellipse').fadeOut();});
$('.tool_flyout_button').mouseover(function() { // $('.tool_flyout_button').mouseover(function() {
$(this).addClass('tool_flyout_button_current'); // $(this).addClass('tool_flyout_button_current');
}).mouseout(function() { // }).mouseout(function() {
$(this).removeClass('tool_flyout_button_current'); // $(this).removeClass('tool_flyout_button_current');
}); // });
$('.layer_button').mousedown(function() { $('.layer_button').mousedown(function() {
$(this).addClass('layer_buttonpressed'); $(this).addClass('layer_buttonpressed');
@ -2177,12 +2307,12 @@ function svg_edit_setup() {
{sel:'#tool_select', fn: clickSelect, evt: 'click', key: 1}, {sel:'#tool_select', fn: clickSelect, evt: 'click', key: 1},
{sel:'#tool_fhpath', fn: clickFHPath, evt: 'click', key: 2}, {sel:'#tool_fhpath', fn: clickFHPath, evt: 'click', key: 2},
{sel:'#tool_line', fn: clickLine, evt: 'click', key: 3}, {sel:'#tool_line', fn: clickLine, evt: 'click', key: 3},
{sel:'#tool_square', fn: clickSquare, evt: 'mouseup', key: 'Shift+4'}, {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: 4, parent: '#tools_rect', icon: 'rect'},
{sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: 4}, {sel:'#tool_square', fn: clickSquare, evt: 'mouseup', key: 'Shift+4', parent: '#tools_rect', icon: 'square'},
{sel:'#tool_fhrect', fn: clickFHRect, evt: 'mouseup'}, {sel:'#tool_fhrect', fn: clickFHRect, evt: 'mouseup', parent: '#tools_rect', icon: 'fh_rect'},
{sel:'#tool_circle', fn: clickCircle, evt: 'mouseup', key: 'Shift+5'}, {sel:'#tool_ellipse', fn: clickEllipse, evt: 'mouseup', key: 5, parent: '#tools_ellipse', icon: 'ellipse'},
{sel:'#tool_ellipse', fn: clickEllipse, evt: 'mouseup', key: 5}, {sel:'#tool_circle', fn: clickCircle, evt: 'mouseup', key: 'Shift+5', parent: '#tools_ellipse', icon: 'circle'},
{sel:'#tool_fhellipse', fn: clickFHEllipse, evt: 'mouseup'}, {sel:'#tool_fhellipse', fn: clickFHEllipse, evt: 'mouseup', parent: '#tools_ellipse', icon: 'fh_ellipse'},
{sel:'#tool_path', fn: clickPath, evt: 'click', key: 6}, {sel:'#tool_path', fn: clickPath, evt: 'click', key: 6},
{sel:'#tool_text', fn: clickText, evt: 'click', key: 7}, {sel:'#tool_text', fn: clickText, evt: 'click', key: 7},
{sel:'#tool_image', fn: clickImage, evt: 'mouseup', key: 8}, {sel:'#tool_image', fn: clickImage, evt: 'mouseup', key: 8},
@ -2211,8 +2341,8 @@ function svg_edit_setup() {
{sel:'#tool_ungroup', fn: clickGroup, evt: 'click'}, {sel:'#tool_ungroup', fn: clickGroup, evt: 'click'},
{sel:'[id^=tool_align]', fn: clickAlign, evt: 'click'}, {sel:'[id^=tool_align]', fn: clickAlign, evt: 'click'},
// these two lines are required to make Opera work properly with the flyout mechanism // these two lines are required to make Opera work properly with the flyout mechanism
{sel:'#tools_rect_show', fn: clickRect, evt: 'click'}, // {sel:'#tools_rect_show', fn: clickRect, evt: 'click'},
{sel:'#tools_ellipse_show', fn: clickEllipse, evt: 'click'}, // {sel:'#tools_ellipse_show', fn: clickEllipse, evt: 'click'},
{sel:'#tool_bold', fn: clickBold, evt: 'mousedown'}, {sel:'#tool_bold', fn: clickBold, evt: 'mousedown'},
{sel:'#tool_italic', fn: clickItalic, evt: 'mousedown'}, {sel:'#tool_italic', fn: clickItalic, evt: 'mousedown'},
{sel:'#sidepanel_handle', fn: toggleSidePanel, key: [modKey+'X']}, {sel:'#sidepanel_handle', fn: toggleSidePanel, key: [modKey+'X']},
@ -2238,6 +2368,8 @@ function svg_edit_setup() {
return { return {
setAll: function() { setAll: function() {
var flyouts = {};
$.each(tool_buttons, function(i, opts) { $.each(tool_buttons, function(i, opts) {
// Bind function to button // Bind function to button
if(opts.sel) { if(opts.sel) {
@ -2245,7 +2377,24 @@ function svg_edit_setup() {
if(opts.evt) { if(opts.evt) {
btn[opts.evt](opts.fn); btn[opts.evt](opts.fn);
} }
// Add to parent flyout menu
if(opts.parent) {
var f_h = $(opts.parent);
if(!f_h.length) {
f_h = makeFlyoutHolder(opts.parent.substr(1));
}
f_h.append(btn);
if(!$.isArray(flyouts[opts.parent])) {
flyouts[opts.parent] = [];
}
flyouts[opts.parent].push(opts);
}
} }
// Bind function to shortcut key // Bind function to shortcut key
if(opts.key) { if(opts.key) {
// Set shortcut based on options // Set shortcut based on options
@ -2282,6 +2431,10 @@ function svg_edit_setup() {
} }
}); });
// Setup flyouts
setupFlyouts(flyouts);
// Misc additional actions // Misc additional actions
// Make "return" keypress trigger the change event // Make "return" keypress trigger the change event
@ -2318,6 +2471,13 @@ function svg_edit_setup() {
} }
}); });
}); });
},
getButtonData: function(sel) {
var b;
$.each(tool_buttons, function(i, btn) {
if(btn.sel === sel) b = btn;
});
return b;
} }
}; };
}(); }();