/// <summary> /// Initializes a new instance of the <see cref="ZoomState"/> class. /// The Copy Constructor /// </summary> /// <param name="rhs"> /// The <see cref="ZoomState"/> object from which to copy /// </param> public ZoomState(ZoomState rhs) { this._xAxis = new ScaleState(rhs._xAxis); this._x2Axis = new ScaleState(rhs._x2Axis); this._yAxis = new ScaleStateList(rhs._yAxis); this._y2Axis = new ScaleStateList(rhs._y2Axis); }
/// <summary> /// Save the current states of the GraphPanes to a separate collection. Save a single (<see paramref="primaryPane"/>) GraphPane if the panes are not /// synchronized (see <see cref="IsSynchronizeXAxes"/> and <see cref="IsSynchronizeYAxes"/>), or save a list of states for all GraphPanes if the panes /// are synchronized. /// </summary> /// <param name="primaryPane"> /// The primary GraphPane on which zoom/pan/scroll operations are taking place /// </param> /// <param name="type"> /// The <see cref="ZoomState.StateType"/> that describes the current operation /// </param> /// <returns> /// The <see cref="ZoomState"/> that corresponds to the /// <see paramref="primaryPane"/>. /// </returns> private ZoomState ZoomStateSave(GraphPane primaryPane, ZoomState.StateType type) { this.ZoomStateClear(); if (this._isSynchronizeXAxes || this._isSynchronizeYAxes) { foreach (GraphPane pane in this._masterPane._paneList) { ZoomState state = new ZoomState(pane, type); if (pane == primaryPane) { this._zoomState = state; } this._zoomStateStack.Add(state); } } else { this._zoomState = new ZoomState(primaryPane, type); } return this._zoomState; }
/// <summary>Clear the collection of saved states.</summary> private void ZoomStateClear() { this._zoomStateStack.Clear(); this._zoomState = null; }
/// <summary> /// Initializes a new instance of the <see cref="ZedGraphControl"/> class. Default Constructor /// </summary> public ZedGraphControl() { this.InitializeComponent(); // These commands do nothing, but they get rid of the compiler warnings for // unused events bool b = this.MouseDown == null || this.MouseUp == null || this.MouseMove == null; // Link in these events from the base class, since we disable them from this class. base.MouseDown += this.ZedGraphControl_MouseDown; base.MouseUp += this.ZedGraphControl_MouseUp; base.MouseMove += this.ZedGraphControl_MouseMove; // this.MouseWheel += new System.Windows.Forms.MouseEventHandler( this.ZedGraphControl_MouseWheel ); // Use double-buffering for flicker-free updating: this.SetStyle( ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw, true); // isTransparentBackground = false; // SetStyle( ControlStyles.Opaque, false ); this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); // this.BackColor = Color.Transparent; var asm = Assembly.GetExecutingAssembly(); var resNames = asm.GetManifestResourceNames(); foreach (var res in resNames) { if (res.Contains("ZedGraphLocale")) { var r = res.Substring(0, res.Length - 10); this._resourceManager = new ResourceManager(r, asm); break; } } Rectangle rect = new Rectangle(0, 0, this.Size.Width, this.Size.Height); this._masterPane = new MasterPane(string.Empty, rect); this._masterPane.Margin.All = 0; this._masterPane.Title.IsVisible = false; string titleStr = this._resourceManager.GetString("title_def"); string xStr = this._resourceManager.GetString("x_title_def"); string yStr = this._resourceManager.GetString("y_title_def"); // GraphPane graphPane = new GraphPane( rect, "Title", "X Axis", "Y Axis" ); GraphPane graphPane = new GraphPane(rect, titleStr, xStr, yStr); using (Graphics g = this.CreateGraphics()) { graphPane.AxisChange(g); // g.Dispose(); } this._masterPane.Add(graphPane); this.hScrollBar1.Minimum = 0; this.hScrollBar1.Maximum = 100; this.hScrollBar1.Value = 0; this.vScrollBar1.Minimum = 0; this.vScrollBar1.Maximum = 100; this.vScrollBar1.Value = 0; this._xScrollRange = new ScrollRange(true); this._yScrollRangeList = new ScrollRangeList(); this._y2ScrollRangeList = new ScrollRangeList(); this._yScrollRangeList.Add(new ScrollRange(true)); this._y2ScrollRangeList.Add(new ScrollRange(false)); this._zoomState = null; this._zoomStateStack = new ZoomStateStack(); }
/// <summary> /// Handler for the "Undo All Zoom/Pan" context menu item. Restores the scale ranges to the values before all zoom and pan operations /// </summary> /// <remarks> /// This method differs from the <see cref="RestoreScale"/> method in that it sets the scales to their initial setting prior to any user actions. The /// <see cref="RestoreScale"/> method sets the scales to full auto mode (regardless of what the initial setting may have been). /// </remarks> /// <param name="primaryPane"> /// The <see cref="GraphPane"/> object which is to be zoomed out /// </param> public void ZoomOutAll(GraphPane primaryPane) { if (primaryPane != null && !primaryPane.ZoomStack.IsEmpty) { ZoomState.StateType type = primaryPane.ZoomStack.Top.Type; ZoomState oldState = new ZoomState(primaryPane, type); // ZoomState newState = pane.ZoomStack.PopAll( pane ); ZoomState newState = null; if (this._isSynchronizeXAxes || this._isSynchronizeYAxes) { foreach (GraphPane pane in this._masterPane._paneList) { ZoomState state = pane.ZoomStack.PopAll(pane); if (pane == primaryPane) { newState = state; } } } else { newState = primaryPane.ZoomStack.PopAll(primaryPane); } // Provide Callback to notify the user of zoom events if (this.ZoomEvent != null) { this.ZoomEvent(this, oldState, newState); } this.Refresh(); } }
/// <summary> /// Handler for the "Set Scale to Default" context menu item. Sets the scale ranging to full auto mode for all axes. /// </summary> /// <remarks> /// This method differs from the <see cref="ZoomOutAll"/> method in that it sets the scales to full auto mode. The <see cref="ZoomOutAll"/> method /// sets the scales to their initial setting prior to any user actions (which may or may not be full auto mode). /// </remarks> /// <param name="primaryPane"> /// The <see cref="GraphPane"/> object which is to have the scale restored /// </param> public void RestoreScale(GraphPane primaryPane) { if (primaryPane != null) { // Go ahead and save the old zoomstates, which provides an "undo"-like capability // ZoomState oldState = primaryPane.ZoomStack.Push( primaryPane, ZoomState.StateType.Zoom ); ZoomState oldState = new ZoomState(primaryPane, ZoomState.StateType.Zoom); using (Graphics g = this.CreateGraphics()) { if (this._isSynchronizeXAxes || this._isSynchronizeYAxes) { foreach (GraphPane pane in this._masterPane._paneList) { pane.ZoomStack.Push(pane, ZoomState.StateType.Zoom); this.ResetAutoScale(pane, g); } } else { primaryPane.ZoomStack.Push(primaryPane, ZoomState.StateType.Zoom); this.ResetAutoScale(primaryPane, g); } // Provide Callback to notify the user of zoom events if (this.ZoomEvent != null) { this.ZoomEvent(this, oldState, new ZoomState(primaryPane, ZoomState.StateType.Zoom)); } // g.Dispose(); } this.Refresh(); } }