Navigation

Main Page
Download
Support
Installation
Tutorial
Examples
Reference Manual
   Version 1.0.5new_solver
   Version 1.0.5dev
      Class Index
      File List
   Version 1.0.5b
   Version 1.0.4dev
   Version 1.0.4
Publications


Hosted by Get Ion Beam Simulator at SourceForge.net. Fast, secure and Free Open Source software downloads

frame.hpp

Go to the documentation of this file.
00001 
00005 /* Copyright (c) 2005-2011 Taneli Kalvas. All rights reserved.
00006  *
00007  * You can redistribute this software and/or modify it under the terms
00008  * of the GNU General Public License as published by the Free Software
00009  * Foundation; either version 2 of the License, or (at your option)
00010  * any later version.
00011  * 
00012  * This library is distributed in the hope that it will be useful, but
00013  * WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00015  * General Public License for more details.
00016  * 
00017  * You should have received a copy of the GNU General Public License
00018  * along with this library (file "COPYING" included in the package);
00019  * if not, write to the Free Software Foundation, Inc., 51 Franklin
00020  * Street, Fifth Floor, Boston, MA 02110-1301 USA
00021  * 
00022  * If you have questions about your rights to use or distribute this
00023  * software, please contact Berkeley Lab's Technology Transfer
00024  * Department at TTD@lbl.gov. Other questions, comments and bug
00025  * reports should be sent directly to the author via email at
00026  * taneli.kalvas@jyu.fi.
00027  * 
00028  * NOTICE. This software was developed under partial funding from the
00029  * U.S.  Department of Energy.  As such, the U.S. Government has been
00030  * granted for itself and others acting on its behalf a paid-up,
00031  * nonexclusive, irrevocable, worldwide license in the Software to
00032  * reproduce, prepare derivative works, and perform publicly and
00033  * display publicly.  Beginning five (5) years after the date
00034  * permission to assert copyright is obtained from the U.S. Department
00035  * of Energy, and subject to any subsequent five (5) year renewals,
00036  * the U.S. Government is granted for itself and others acting on its
00037  * behalf a paid-up, nonexclusive, irrevocable, worldwide license in
00038  * the Software to reproduce, prepare derivative works, distribute
00039  * copies to the public, perform publicly and display publicly, and to
00040  * permit others to do so.
00041  */
00042 
00043 #ifndef FRAME_HPP
00044 #define FRAME_HPP 1
00045 
00046 
00047 #include <string>
00048 #include <vector>
00049 #include <cairo.h>
00050 #include "color.hpp"
00051 #include "ruler.hpp"
00052 #include "coordmapper.hpp"
00053 #include "graph.hpp"
00054 #include "legend.hpp"
00055 
00056 
00057 
00067 enum PlotFixedMode {
00068     PLOT_FIXED_ASPECT_DISABLED = 0,
00069     PLOT_FIXED_ASPECT_EXTEND_RANGE,
00070     PLOT_FIXED_ASPECT_INCREASE_MARGIN
00071 };
00072 
00073 
00081 enum PlotAxis {
00082     PLOT_AXIS_X1 = 0,
00083     PLOT_AXIS_Y1,
00084     PLOT_AXIS_X2,
00085     PLOT_AXIS_Y2,
00086     PLOT_AXIS_Z
00087 };
00088 
00089 
00090 
00107 class Frame {
00108 
00111     struct DObj {
00112         PlotAxis        _xaxis;         
00113         PlotAxis        _yaxis;         
00114         Graph          *_graph;         
00116         DObj( PlotAxis xaxis, PlotAxis yaxis, Graph *graph )
00117             : _xaxis(xaxis), _yaxis(yaxis), _graph(graph) {}
00118     };
00119 
00120     Ruler               _ruler[4];      
00121     Coordmapper1D       _cm[4];         
00122     bool                _enable[4];     
00123     bool                _fenable[4];    
00124     bool                _autorange[8];  
00125     double              _range_min[4];  
00126     double              _range_max[4];  
00128     int                 _offx;          
00129     int                 _offy;          
00131     int                 _width;         
00132     int                 _height;        
00134     double              _fontsize;      
00135     double              _titlespace;    
00136     Color               _bg;            
00137     Color               _fg;            
00139     std::vector<DObj>   _dobj;          
00141     bool                _legend_enable; 
00142     legend_position_e   _legend_pos;    
00143     MultiEntryLegend    _legend;        
00145     Label               _title;         
00147     PlotFixedMode       _fixedaspect;   
00149     bool                _automargin;    
00150     double              _tmargin[4];    
00158     void draw_legend( cairo_t *cairo );
00159     void calculate_autoranging( void );
00160     void calculate_ruler_autoenable( void );
00161     void calculate_rulers( cairo_t *cairo, bool ruler_tic_bbox_test );
00162     void calculate_frame( cairo_t *cairo );
00163     void draw_frame( cairo_t *cairo );
00164     void mirror_rulers( void );
00165     void set_frame_clipping( cairo_t *cairo );
00166     void unset_frame_clipping( cairo_t *cairo );
00167 
00168 public:
00169 
00172     Frame();
00173 
00176     ~Frame() {}
00177 
00185     void set_geometry( int width, int height, int offx, int offy ) {
00186         _width = width;
00187         _height = height;
00188         _offx = offx;
00189         _offy = offy;
00190     }
00191 
00194     void set_font_size( double size );
00195 
00198     double get_font_size( void ) {
00199         return( _fontsize );
00200     }
00201 
00204     void set_background( Color &bg ) {
00205         _bg = bg;
00206     }    
00207 
00210     void set_foreground( Color &fg ) {
00211         _fg = fg;
00212     }
00213 
00219     Coordmapper get_coordmapper( PlotAxis xaxis, PlotAxis yaxis ) const;
00220 
00223     void get_margins( double margin[4] ) const;
00224 
00230     void get_frame_edges( double edge[4] ) const;
00231 
00234     void set_title( const std::string &title );
00235 
00238     void set_axis_label( PlotAxis axis, const std::string &label );
00239 
00246     void force_enable_ruler( PlotAxis axis, bool force );
00247 
00254     void ruler_autorange_enable( PlotAxis axis, bool min, bool max );
00255 
00262     void set_ranges( PlotAxis axis, double min, double max );
00263 
00269     void get_ranges( PlotAxis axis, double &min, double &max ) const;
00270         
00282     void set_fixed_aspect( PlotFixedMode mode );
00283 
00296     void set_automargin( bool enable );
00297 
00306     void add_graph( PlotAxis xaxis, PlotAxis yaxis, 
00307                     Graph *graph, LegendEntry *legend = NULL );
00308 
00314     void clear_graphs( void );
00315 
00318     void enable_legend( bool enable );
00319 
00322     void set_legend_position( legend_position_e pos );
00323 
00337     void draw( cairo_t *cairo );
00338 };
00339 
00340 
00341 #endif
00342 


Reference manual for Ion Beam Simulator 1.0.5dev
Generated by Doxygen 1.7.1 on Mon Feb 6 2012 15:07:15.