GNU Octave  4.2.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ContextMenu.cc
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 2011-2017 Michael Goffioul
4 
5 This file is part of Octave.
6 
7 Octave is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if defined (HAVE_CONFIG_H)
24 # include "config.h"
25 #endif
26 
27 #include <QMenu>
28 
29 #include "Backend.h"
30 #include "ContextMenu.h"
31 #include "QtHandlesUtils.h"
32 
33 namespace QtHandles
34 {
35 
36  ContextMenu*
38  {
39  Object* xparent = Object::parentObject (go);
40 
41  if (xparent)
42  {
43  QWidget* w = xparent->qWidget<QWidget> ();
44 
45  return new ContextMenu (go, new QMenu (w));
46  }
47 
48  return 0;
49  }
50 
51  ContextMenu::ContextMenu (const graphics_object& go, QMenu* xmenu)
52  : Object (go, xmenu)
53  {
54  xmenu->setAutoFillBackground (true);
55 
56  connect (xmenu, SIGNAL (aboutToShow (void)), SLOT (aboutToShow (void)));
57  connect (xmenu, SIGNAL (aboutToHide (void)), SLOT (aboutToHide (void)));
58  }
59 
61  { }
62 
63  void
65  {
66  uicontextmenu::properties& up = properties<uicontextmenu> ();
67  QMenu* xmenu = qWidget<QMenu> ();
68 
69  switch (pId)
70  {
72  if (up.is_visible ())
73  {
74  Matrix pos = up.get_position ().matrix_value ();
75  QWidget* parentW = xmenu->parentWidget ();
76  QPoint pt;
77 
78  pt.rx () = octave::math::round (pos(0));
79  pt.ry () = parentW->height () - octave::math::round (pos(1));
80  pt = parentW->mapToGlobal (pt);
81 
82  xmenu->popup (pt);
83  }
84  else
85  xmenu->hide ();
86  break;
87  default:
88  Object::update (pId);
89  break;
90  }
91  }
92 
93  void
95  {
96  gh_manager::post_callback (m_handle, "callback");
97  gh_manager::post_set (m_handle, "visible", "on", false);
98  }
99 
100  void
102  {
103  gh_manager::post_set (m_handle, "visible", "off", false);
104  }
105 
106  QWidget*
108  {
109  return qWidget<QWidget> ();
110  }
111 
112  void
113  ContextMenu::executeAt (const base_properties& props, const QPoint& pt)
114  {
116 
117  if (h.ok ())
118  {
121 
122  if (go.valid_object ())
123  {
124  ContextMenu* cMenu =
125  dynamic_cast<ContextMenu*> (Backend::toolkitObject (go));
126 
127  if (cMenu)
128  {
129  QMenu* menu = cMenu->qWidget<QMenu> ();
130 
131  if (menu)
132  menu->popup (pt);
133  }
134  }
135  }
136  }
137 
138 }
static void post_callback(const graphics_handle &h, const std::string &name, const octave_value &data=Matrix())
Definition: graphics.h:13910
bool is_visible(void) const
Definition: graphics.h:2704
bool ok(void) const
Definition: oct-handle.h:109
octave_value get_position(void) const
Definition: graphics.h:11727
ContextMenu(const graphics_object &go, QMenu *menu)
Definition: ContextMenu.cc:51
static Object * parentObject(const graphics_object &go)
Definition: Object.cc:165
double round(double x)
Definition: lo-mappers.cc:333
static void executeAt(const base_properties &props, const QPoint &pt)
Definition: ContextMenu.cc:113
double h
Definition: graphics.cc:11205
std::complex< double > w(std::complex< double > z, double relerr=0)
graphics_handle m_handle
Definition: Object.h:100
T * qWidget(void)
Definition: Object.h:74
void update(int pId)
Definition: ContextMenu.cc:64
Definition: dMatrix.h:37
Matrix matrix_value(bool frc_str_conv=false) const
Definition: ov.h:787
graphics_handle get_uicontextmenu(void) const
Definition: graphics.h:2700
bool valid_object(void) const
Definition: graphics.h:3306
static Object * toolkitObject(const graphics_object &go)
Definition: Backend.cc:199
virtual void update(int pId)
Definition: Object.cc:132
static graphics_object get_object(double val)
Definition: graphics.h:13794
static ContextMenu * create(const graphics_object &go)
Definition: ContextMenu.cc:37
QWidget * menu(void)
Definition: ContextMenu.cc:107
static void post_set(const graphics_handle &h, const std::string &name, const octave_value &value, bool notify_toolkit=true)
Definition: graphics.h:13924