1 #ifndef __TREE_MODEL_HPP__
2 #define __TREE_MODEL_HPP__
5 #include <gtkmm/drawingarea.h>
6 #include <cairomm/context.h>
7 #include <libglademm.h>
9 #include "alignment.hpp"
11 #include "drawable.hpp"
15 class TreeModel
: public Gtk::DrawingArea
18 typedef sigc::signal
<void, const Word
&> word_selected_signal_t
;
20 TreeModel(GtkDrawingArea
*cobject
, Glib::RefPtr
<Gnome::Glade::Xml
> &glade
);
23 void add_alignment(Alignment
&alignment
);
24 void increase_hscale(void);
25 void increase_vscale(void);
26 void decrease_hscale(void);
27 void decrease_vscale(void);
28 word_selected_signal_t
get_word_selected_signal(void) const;
30 bool on_expose_event(GdkEventExpose
*event
);
31 bool on_button_press_event(GdkEventButton
*event
);
32 bool on_button_release_event(GdkEventButton
*event
);
33 bool on_motion_notify_event(GdkEventMotion
*event
);
34 bool on_key_release_event(GdkEventKey
*event
);
36 void _clear_vertices(std::vector
<Vertex
*> &vertices
);
37 void _clear_edges(std::vector
<Edge
*> &edges
);
38 void _clear_selected(void);
39 void _add_source(void);
40 void _add_target(void);
41 void _add_word(Word
&word
, bool source
);
42 void _add_edges(void);
43 void _invalidate_window(void);
44 void _invalidate_vertex(Drawable
*v
, bool immediate
);
45 void _invalidate_edge(Drawable
*e
, bool immediate
);
46 void _invalidate_rect(gint x
, gint y
, gint width
, gint height
, bool immediate
);
48 T
_highlight(std::vector
<T
> &obj
, gdouble x
, gdouble y
);
50 T
_select(std::vector
<T
> &obj
, gdouble x
, gdouble y
);
51 Edge
*_drag(std::vector
<Edge
*> &obj
, gdouble x
, gdouble y
);
52 gint
_c2d_x(gdouble x
) const;
53 gint
_c2d_y(gdouble y
) const;
54 gint
_c2d_w(gdouble w
) const;
55 gint
_c2d_h(gdouble h
) const;
56 gdouble
_d2c_x(gdouble x
) const;
57 gdouble
_d2c_y(gdouble y
) const;
58 gdouble
_d2c_w(gdouble w
) const;
59 gdouble
_d2c_h(gdouble h
) const;
61 word_selected_signal_t _word_selected_signal
;
64 const gdouble _SENTENCE_SPACING
;
65 const gdouble _WORD_SPACING
;
66 const gdouble _SCALING_STEP
;
72 Cairo::RefPtr
<Cairo::Context
> _cr
;
73 Alignment
*_alignment
;
74 std::vector
<Vertex
*> _source
;
75 std::vector
<Vertex
*> _target
;
76 std::vector
<Node
*> _nodes
;
77 std::vector
<Edge
*> _edges
;
78 Drawable
*_highlighted
;
79 std::vector
<Node
*> _selected
;
84 inline void TreeModel::increase_hscale(void)
86 _hscale
+= _SCALING_STEP
;
91 inline void TreeModel::increase_vscale(void)
93 _vscale
+= _SCALING_STEP
;
98 inline void TreeModel::decrease_hscale(void)
100 if ((_hscale
- _SCALING_STEP
) < 0.1) {
104 _hscale
-= _SCALING_STEP
;
106 _invalidate_window();
109 inline void TreeModel::decrease_vscale(void)
111 if ((_vscale
- _SCALING_STEP
) < 0.1) {
115 _vscale
-= _SCALING_STEP
;
117 _invalidate_window();
121 TreeModel::word_selected_signal_t
TreeModel::get_word_selected_signal(void) const
123 return _word_selected_signal
;
126 inline gint
TreeModel::_c2d_x(gdouble x
) const
130 _cr
->user_to_device(x
, y
);
135 inline gint
TreeModel::_c2d_y(gdouble y
) const
139 _cr
->user_to_device(x
, y
);
144 inline gint
TreeModel::_c2d_w(gdouble w
) const
148 _cr
->user_to_device_distance(w
, h
);
153 inline gint
TreeModel::_c2d_h(gdouble h
) const
157 _cr
->user_to_device_distance(w
, h
);
162 inline gdouble
TreeModel::_d2c_x(gdouble x
) const
166 _cr
->device_to_user(x
, y
);
171 inline gdouble
TreeModel::_d2c_y(gdouble y
) const
175 _cr
->device_to_user(x
, y
);
180 inline gdouble
TreeModel::_d2c_w(gdouble w
) const
184 _cr
->device_to_user_distance(w
, h
);
189 inline gdouble
TreeModel::_d2c_h(gdouble h
) const
193 _cr
->device_to_user_distance(w
, h
);