/* ************************************************************************ #module(Smokeping) ************************************************************************ */ /** * Zoom into the graph */ qx.Class.define('Smokeping.ui.Zoomer', { extend: qx.ui.layout.CanvasLayout, /* ***************************************************************************** CONSTRUCTOR ***************************************************************************** */ /** * @param width {Integer} Width of the canvas * * @param height {Integer} Height ot the canvas * * @param right {Integer} Distance from the right edge * * @param top {Integer} Dist from the top * */ construct: function (target,width,height,top,right) { this.debug('hell'); this._target = target; this._width = width; this._height = height+1; // some where the calc is 1 off. this fixes it this._top = top; this._right = right; with(this){ base(arguments); set({ width: '100%', height: '100%', visibility: false }); } var zoomer_defaults = { backgroundColor: 'black', opacity: 0.1, overflow: 'hidden' // important to make box go to 'zero height' on ie6 }; var dir = ['left','right','top','bottom' ]; var z = []; this._zoomer = z; for(var i=0;i this._canvas_top + this._height) { mouse_y = this._canvas_top + this._height; } return mouse_y; }, _get_mouse_x: function(e){ var mouse_x = e.getPageX()-this._page_left; if (mouse_x < this._canvas_left) { mouse_x = this._canvas_left; } if (mouse_x > this._canvas_left + this._width) { mouse_x = this._canvas_left + this._width; } return mouse_x; }, _zoom_start: function(e){ var z = this._zoomer; this._init_cache(); this._selector_start_x = this._get_mouse_x(e); this._selector_start_y = this._get_mouse_y(e); this._target.setCapture(true); this._zoom_move(e); this.setVisibility(true); }, _zoom_move: function(e){ var z = this._zoomer; if (this._target.getCapture()){ var mouse_x = this._get_mouse_x(e); var mouse_left_x; var mouse_right_x; if (mouse_x > this._selector_start_x){ mouse_left_x = this._selector_start_x; mouse_right_x = mouse_x; } else { mouse_right_x = this._selector_start_x; mouse_left_x = mouse_x; } var mouse_y = this._get_mouse_y(e); var mouse_top_y; var mouse_bottom_y; if (mouse_y > this._selector_start_y){ mouse_top_y = this._selector_start_y; mouse_bottom_y = mouse_y; } else { mouse_bottom_y = this._selector_start_y; mouse_top_y = mouse_y; } var time_sel = 1; var range_sel = 1; var pi = 3.14159265; var angle = Math.atan ((mouse_right_x - mouse_left_x) / (mouse_bottom_y - mouse_top_y)); if ( angle > Math.PI/2 * 0.85){ range_sel = 0; } if ( angle < Math.PI/2 * 0.15){ time_sel = 0; } z['top'].set({ left: time_sel ? mouse_left_x : this._canvas_left, width: time_sel ? mouse_right_x - mouse_left_x : this._width, top: 0, height: range_sel ? mouse_top_y : this._canvas_top }); z['bottom'].set({ left: time_sel ? mouse_left_x : this._canvas_left, width: time_sel ? mouse_right_x - mouse_left_x : this._width, top: range_sel ? mouse_bottom_y : this._canvas_top + this._height, height: range_sel ? this._image_height - mouse_bottom_y : this._canvas_bottom }); z['left'].set({ width: time_sel ? mouse_left_x: this._canvas_left, height: this._image_height }); z['right'].set({ left: time_sel ? mouse_right_x : this._image_width - this._canvas_right, width: time_sel ? this._image_width - mouse_right_x : this._canvas_right, height: this._image_height }); z['frame'].set({ left: time_sel ? mouse_left_x : this._canvas_left, width: time_sel ? mouse_right_x - mouse_left_x : this._width, top: range_sel ? mouse_top_y : this._canvas_top, height: range_sel ? mouse_bottom_y - mouse_top_y : this._height }); } }, _zoom_end: function(e){ var z = this._zoomer; this._target.setCapture(false); this.setVisibility(false); if (z['bottom'].getTop() == z['top'].getTop()+z['top'].getHeight()){ this._zoom_factor_top = 0; this._zoom_factor_bottom = 0; } else { var prev_factor = 1 - this._zoom_factor_top - this._zoom_factor_bottom; this._zoom_factor_top = (z['top'].getHeight()-this._canvas_top)/this._height * prev_factor + this._zoom_factor_top; this.zoom_factor_bottom = (z['bottom'].getHeight()-this._canvas_bottom)/this._height * prev_factor + this._zoom_factor_bottom; } } } });