File: bivHist.hxx

package info (click to toggle)
imview 1.1.9c-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 3,068 kB
  • ctags: 3,686
  • sloc: cpp: 28,834; sh: 2,624; ansic: 1,818; makefile: 767; exp: 112; python: 88
file content (154 lines) | stat: -rw-r--r-- 5,571 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*
 * $Id: bivHist.hxx,v 4.0 2003/04/28 14:39:41 hut66au Exp $
 *
 * Imview, the portable image analysis application
 * http://www.cmis.csiro.au/Hugues.Talbot/imview
 * ----------------------------------------------------------
 *
 *  Imview is an attempt to provide an image display application
 *  suitable for professional image analysis. It was started in
 *  1997 and is mostly the result of the efforts of Hugues Talbot,
 *  Image Analysis Project, CSIRO Mathematical and Information
 *  Sciences, with help from others (see the CREDITS files for
 *  more information)
 *
 *  Imview is Copyrighted (C) 1997-2001 by Hugues Talbot and was
 *  supported in parts by the Australian Commonwealth Science and 
 *  Industry Research Organisation. Please see the COPYRIGHT file 
 *  for full details. Imview also includes the contributions of 
 *  many others. Please see the CREDITS file for full details.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *  
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *  
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
 * */

/*------------------------------------------------------------------------
 *
 * the bivariate histogram panel, for multispectra images.
 *
 * Hugues Talbot	26 Apr 1999
 *      
 *-----------------------------------------------------------------------*/

#ifndef BIVHIST_H
#define BIVHIST_H

#include <vector> // STL vectors.
#include "imnmspc.hxx" // namespace def. if required

#include <FL/Fl.H>
#include <FL/x.H>
#include <FL/fl_draw.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Scroll.H>
#include <FL/Fl_Choice.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Return_Button.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Roller.H>
#include <FL/Fl_Value_Output.H>
#include <FL/fl_ask.H>

#include "imview.hxx"
#include "axisBox.hxx"

#define  BHP_MARGIN 4

using std::vector;

// define an iterator on vectors of BHPoints
typedef vector<BHPoint>::iterator bhpointIterator;


// the `bivariate histogram canvas'
class bivHistBox: public Fl_Box {
public:
    bivHistBox(int x, int y, int w, int h, const char *l=0);
    int handle(int event); // we need this for mouse control
    int handleMouseMoved(double &, double &);
    int handleMouseButtonPushed(void);
    void draw(); // we need to re-implement this.
    void drawPointWithJitter(double xval, double yval, BHPColour colour);
    void setData(int xcomponent, int ycomponent);
    void workoutCorrection(void);
    void limits(double &minX, double &minY, double &maxX, double &maxY) {
	minX = minXval;
	minY = minYval;
	maxX = maxXval;
	maxY = maxYval;
    }
    void setParentPanel(class bivhist *it) {parentPanel = it;}
private:
    vector <BHPoint>   allPoints;         // we will push_back all the points that come through.
    class bivhist      *parentPanel;
    double             minXval, maxXval;  // for the X and Y limits 
    double             minYval, maxYval;
    double             xCorrection, yCorrection;
    bool               dataIsInteger;
    // original dimensions.
    int                xo, yo, wo, ho;
    
};

// the GUI interface
class bivhist {
public:
    bivhist();
    ~bivhist(); 
    void              setDefaults();
    void              show();
    void              hide();
    void              computeNewBH();
    void              setPosition(char *p) {positionOutput->value(p);}
    BHPColour         getCurrentColour(void) {return (BHPColour)regioncolourChoice->value();}
    double            getPenWidth(void) {return penWidthValue->value();}
    void              setPenWidth(double v) { penWidthValue->value(v);}
    void              setTransparency(double v); 
    void              makeCurrent(void) {bivhistWindow->make_current();}
    bool              selectRegionIsOn(void) {return (selectRegionButton->value() != 0);}
    void              enlargeHisto(void);
    void              shrinkHisto(void);
    void              fitHisto(void);
    void              getScrollClip(int &x, int &y, int &w, int &h) {
	x = bivhistScroll->x();
	y = bivhistScroll->y();
	h = bivhistScroll->h();
	w = bivhistScroll->w();
    }
    friend Fl_Window *bivhist_panel(bivhist &bh);

private:
    bivHistBox        *histoBox; // where the drawing will occur

    // all of these declared in fluid
    Fl_Window         *bivhistWindow;
    Fl_Scroll         *bivhistScroll;
    Fl_Button         *selectRegionButton;
    Fl_Button         *clearRegionButton, *clearAllRegionsButton;
    Fl_Button         *zoominButton, *zoomoutButton, *resetzoomButton;
    Fl_Button         *dismissButton;
    Fl_Button         *printButton, *saveButton;
    Fl_Return_Button  *computeButton;
    Fl_Input          *Xinput, *Yinput;
    Fl_Output         *positionOutput;
    Fl_Roller         *penRadiusRoller, *transparencyRoller;
    Fl_Value_Output   *penWidthValue, *transparencyValue;
    axisBox           *absissaBox, *ordinateBox;
    Fl_Choice         *regioncolourChoice;
};


#endif // BIVHIST_H