GNU Octave  4.0.0
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-2015 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 #ifdef 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 
64 void
66 {
67  uicontextmenu::properties& up = properties<uicontextmenu> ();
68  QMenu* xmenu = qWidget<QMenu> ();
69 
70  switch (pId)
71  {
73  if (up.is_visible ())
74  {
75  Matrix pos = up.get_position ().matrix_value ();
76  QWidget* parentW = xmenu->parentWidget ();
77  QPoint pt;
78 
79  pt.rx () = xround (pos(0));
80  pt.ry () = parentW->height () - xround (pos(1));
81  pt = parentW->mapToGlobal (pt);
82 
83  xmenu->popup (pt);
84  }
85  else
86  xmenu->hide ();
87  break;
88  default:
89  Object::update (pId);
90  break;
91  }
92 }
93 
94 void
96 {
97  gh_manager::post_callback (m_handle, "callback");
98  gh_manager::post_set (m_handle, "visible", "on", false);
99 }
100 
101 void
103 {
104  gh_manager::post_set (m_handle, "visible", "off", false);
105 }
106 
107 QWidget*
109 {
110  return qWidget<QWidget> ();
111 }
112 
113 void
114 ContextMenu::executeAt (const base_properties& props, const QPoint& pt)
115 {
116  graphics_handle h = props.get_uicontextmenu ();
117 
118  if (h.ok ())
119  {
122 
123  if (go.valid_object ())
124  {
125  ContextMenu* cMenu =
126  dynamic_cast<ContextMenu*> (Backend::toolkitObject (go));
127 
128  if (cMenu)
129  {
130  QMenu* menu = cMenu->qWidget<QMenu> ();
131 
132  if (menu)
133  menu->popup (pt);
134  }
135  }
136  }
137 }
138 
139 }; // namespace QtHandles
static void post_callback(const graphics_handle &h, const std::string &name, const octave_value &data=Matrix())
Definition: graphics.h:13329
bool is_visible(void) const
Definition: graphics.h:2758
double xround(double x)
Definition: lo-mappers.cc:63
bool ok(void) const
Definition: oct-handle.h:105
octave_value get_position(void) const
Definition: graphics.h:11492
ContextMenu(const graphics_object &go, QMenu *menu)
Definition: ContextMenu.cc:51
static Object * parentObject(const graphics_object &go)
Definition: Object.cc:170
static void executeAt(const base_properties &props, const QPoint &pt)
Definition: ContextMenu.cc:114
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:65
Definition: dMatrix.h:35
Matrix matrix_value(bool frc_str_conv=false) const
Definition: ov.h:773
graphics_handle get_uicontextmenu(void) const
Definition: graphics.h:2754
bool valid_object(void) const
Definition: graphics.h:3395
static Object * toolkitObject(const graphics_object &go)
Definition: Backend.cc:197
virtual void update(int pId)
Definition: Object.cc:133
static graphics_object get_object(double val)
Definition: graphics.h:13212
static ContextMenu * create(const graphics_object &go)
Definition: ContextMenu.cc:37
QWidget * menu(void)
Definition: ContextMenu.cc:108
static void post_set(const graphics_handle &h, const std::string &name, const octave_value &value, bool notify_toolkit=true)
Definition: graphics.h:13343