File: lf_view.h

package info (click to toggle)
mysql-workbench 6.3.8%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 113,932 kB
  • ctags: 87,814
  • sloc: ansic: 955,521; cpp: 427,465; python: 59,728; yacc: 59,129; xml: 54,204; sql: 7,091; objc: 965; makefile: 638; sh: 613; java: 237; perl: 30; ruby: 6; php: 1
file content (164 lines) | stat: -rw-r--r-- 6,647 bytes parent folder | download | duplicates (2)
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
155
156
157
158
159
160
161
162
163
164
/* 
 * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
 *
 * 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; version 2 of the
 * License.
 * 
 * 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., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301  USA
 */
#ifndef _LF_VIEW_H_
#define _LF_VIEW_H_

#include <mforms/mforms.h>
#include <gdkmm/event.h>

#include "lf_base.h"
#include "lf_mforms.h"

namespace mforms { namespace gtk {

class DataWrapper
{
private:
  void *_data;
public:
  DataWrapper(void *data)
  {
    _data = data;
  }

  void *GetData() { return _data; };
};

class ViewImpl : public ObjectImpl
{
public:
  virtual Gtk::Widget *get_outer() const= 0;
  // get the widget that does the actual work. most of the time it will be the same as the outer one
  virtual Gtk::Widget *get_inner() const;

protected:
  ViewImpl(::mforms::View *view);
  static void destroy(::mforms::View *self);
  static void show(::mforms::View *self, bool show);
  static bool is_shown(::mforms::View *self);
  static bool is_fully_visible(::mforms::View *self);
  static void set_tooltip(::mforms::View *self, const std::string &text);
  static void set_font(::mforms::View *self, const std::string &fontDescription);
  static int get_width(::mforms::View *self);
  static int get_height(::mforms::View *self);
  static int get_preferred_width(::mforms::View *self);
  virtual int get_preferred_width();
  static int get_preferred_height(::mforms::View *self);
  virtual int get_preferred_height();
  static int get_x(::mforms::View *self);
  static int get_y(::mforms::View *self);
  static void set_size(::mforms::View *self, int w, int h);
  virtual void set_size(int width, int height);
  static void set_position(::mforms::View *self, int x, int y);
  static std::pair<int, int>client_to_screen(::mforms::View *self, int x, int y);
  static void set_enabled(::mforms::View *self, bool flag);
  static bool is_enabled(::mforms::View *self);
  static void set_name(::mforms::View *self, const std::string &name);
  virtual void set_name(const std::string &name);
  static void relayout(::mforms::View *view);
  static void set_needs_repaint(::mforms::View *view);
  void size_changed();
  void on_focus_grab();
  bool on_button_release(GdkEventButton* btn);
  bool on_button_press(GdkEventButton* btn);
  void setup();
  virtual void move_child(ViewImpl *child, int x, int y);
  static void suspend_layout(::mforms::View *view, bool flag);
  virtual void suspend_layout(bool flag) {}
  static void set_front_color(::mforms::View *self, const std::string &color);
  virtual void set_front_color(const std::string &color) {};
  static void set_back_color(::mforms::View *self, const std::string &color);
  static std::string get_front_color(::mforms::View *self);
  static std::string get_back_color(::mforms::View *self);
  virtual void set_back_color(const std::string &color);
  static void set_back_image(::mforms::View *self, const std::string &path, mforms::Alignment alig);
  static void flush_events(::mforms::View *self);
  static void set_padding(::mforms::View *self, int left, int top, int right, int bottom);
  virtual void set_padding_impl(int left, int top, int right, int bottom);
  static void set_allow_drag(::mforms::View* self, const bool flag);
  static void register_drop_formats(::mforms::View* self, DropDelegate *target, const std::vector<std::string> &formats);
  void register_drop_formats(const std::vector<std::string> &formats, DropDelegate *target);
  mforms::DropPosition get_drop_position();
  static void focus(::mforms::View *view);
  static mforms::DropPosition get_drop_position(::mforms::View *self);
  static bool has_focus(::mforms::View *view);
  static DragOperation drag_text(::mforms::View *self, ::mforms::DragDetails details, const std::string &text);
  static DragOperation drag_data(::mforms::View *self, ::mforms::DragDetails details, void *data,const std::string &format);
  DragOperation drag_data(::mforms::DragDetails details, void *data,const std::string &format);

protected:
  Glib::RefPtr<Gdk::Pixbuf> _back_image;
  mforms::Alignment _back_image_alignment;
  Gdk::Event* _last_btn_down;

  //need this to find out later the format
  std::map<std::string,size_t> _drop_formats;
  DropDelegate *_target;

  std::map<std::string,DataWrapper> _drop_data;

  //can be null
  cairo_surface_t *_drag_image;
//
//  /**
//   * holds a void ptr to the data being dragged and std::string mime type
//   */
//  std::map<std::string, void*> _drag_data;

  // This will only work if the specific subclass supports drawing backgroud images
  // in that case it will add on_expose_event to the expose signal
  virtual void set_back_image(const std::string &path, mforms::Alignment alig);

  // for supporting subclasses that support background painting
  bool on_expose_event(GdkEventExpose *event, Gtk::Widget *target);

  bool slot_drag_drop(const Glib::RefPtr<Gdk::DragContext> &context, int x, int y, guint time);
  void slot_drag_data_delete(const Glib::RefPtr<Gdk::DragContext> &context);
  bool slot_drag_motion(const Glib::RefPtr<Gdk::DragContext> &context, int, int, guint time);
  void slot_drag_data_received(const Glib::RefPtr<Gdk::DragContext> &context, int x, int y, const Gtk::SelectionData &data, guint info, guint time);
  void slot_drag_begin(const Glib::RefPtr<Gdk::DragContext> &context);
  void slot_drag_data_get(const Glib::RefPtr<Gdk::DragContext> &context, Gtk::SelectionData &data, guint, guint time);
  void slot_drag_end(const Glib::RefPtr<Gdk::DragContext> &context);
  bool slot_drag_failed(const Glib::RefPtr<Gdk::DragContext> &context,Gtk::DragResult result);

public:
  static void init();
  static Gtk::Widget *get_widget_for_view(mforms::View *view);
  static mforms::View *get_view_for_widget(Gtk::Widget *w);
};

bool expose_event_slot(GdkEventExpose* event, Gtk::Widget* w);
void set_bgcolor(Gtk::Widget*, const std::string& color);

};

inline Gtk::Widget *widget_for_view(mforms::View *view)
{
  return gtk::ViewImpl::get_widget_for_view(view);
}


inline mforms::View *view_for_widget(Gtk::Widget *w)
{
  return gtk::ViewImpl::get_view_for_widget(w);
}

};

#endif