Changeset 9cdab3


Ignore:
Timestamp:
Aug 11, 2025, 5:45:54 PM (2 months ago)
Author:
Frederik Heber <frederik.heber@…>
Branches:
Candidate_v1.7.0, stable
Children:
5718cc
Parents:
ae9ad6
git-author:
Frederik Heber <frederik.heber@…> (07/20/25 20:19:22)
git-committer:
Frederik Heber <frederik.heber@…> (08/11/25 17:45:54)
Message:

Adds context menu "atom" to GLWorldView.

Location:
src/UIElements
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/Menu/Menu.cpp

    rae9ad6 r9cdab3  
    8787        iter != MenuDescription::getInstance().getEndIter();
    8888        ++iter) {
     89        const std::string &MenuName = iter->first;
    8990      // skip when already present
    90       if (!isPresent(iter->first)) {
     91      if (!isPresent(MenuName)) {
    9192        // have some short refs to infos
    92         const std::string &MenuName = iter->first;
    9393        const std::string &TopName = iter->second.first;
    9494        const int &MenuPosition = iter->second.second;
  • src/UIElements/Menu/Menu.hpp

    rae9ad6 r9cdab3  
    6060  void init();
    6161
     62  //!> Getter for the menu's name.
     63  const std::string getName() const {
     64    return name;
     65  }
     66
    6267protected:
    6368  //!> Unique name of the menu for identification.
  • src/UIElements/Menu/Qt4/QtMenu.hpp

    rae9ad6 r9cdab3  
    1010
    1111// include config.h
     12#include <cstddef>
    1213#ifdef HAVE_CONFIG_H
    1314#include <config.h>
     
    1617
    1718#include <Qt/qaction.h>
     19#include <Qt/qpoint.h>
    1820
    1921#include "Menu/Qt4/QMenu_tooltip.hpp"
     
    5254  virtual ~QtMenu()
    5355  {
     56    // delete all plumbed actions
    5457    for(std::list<QtMenuPipe*>::iterator it=plumbing.begin(); it != plumbing.end(); it++)
    5558      delete (*it);
    5659
     60    // delete all submenus
     61    for(SubMenus_t::iterator iter = submenus.begin(); iter != submenus.end(); ++iter)
     62      delete(*iter);
     63
     64    // delete the wrapped instance if we took over ownership
    5765    if (deleteMenu)
    5866      delete MenuInstance;
     
    103111  MenuShortcutMap ShortcutMap;
    104112
     113  typedef std::list< QtMenu<QMenu_tooltip>* > SubMenus_t;
     114  SubMenus_t submenus;
     115
    105116  virtual void addActionItem(const std::string &token, const std::string &description)
    106117  {
     
    123134    MenuInstance->addMenu(Menu);
    124135    QtMenu<QMenu_tooltip> *NewMenu = new QtMenu<QMenu_tooltip>(Menu, token);
     136    submenus.push_back(NewMenu);
    125137    NewMenu->init();
    126138  }
    127139
     140public:
     141  QtMenu<QMenu_tooltip>* findSubmenu(const std::string &token) {
     142    for (SubMenus_t::iterator iter = submenus.begin(); iter != submenus.end(); ++iter) {
     143      QtMenu<QMenu_tooltip>* submenu = *(iter);
     144      if (submenu->getName() == token)
     145        return submenu;
     146      else {
     147        QtMenu<QMenu_tooltip>* found_submenu = submenu->findSubmenu(token);
     148        if (found_submenu != NULL)
     149        return found_submenu;
     150      }
     151    }
     152    return NULL;
     153  }
     154
     155  void popup(const QPoint &pos) {
     156    MenuInstance->popup(pos);
     157  }
    128158};
    129159
  • src/UIElements/Qt4/QtMainWindow.cpp

    rae9ad6 r9cdab3  
    134134  toolbar->addFavoriteActionItems(20);
    135135  addToolBar(toolbar);
     136
     137  // add context menu on right click
     138  glWorldView->setContextMenuPolicy(Qt::CustomContextMenu);
     139  connect(glWorldView, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(slotContextMenuRequested(const QPoint&)));
    136140
    137141  setCentralWidget(splitter1);
     
    193197}
    194198
     199void QtMainWindow::slotContextMenuRequested(const QPoint &pos)
     200{
     201  // pick the atoms menu
     202  QtMenu<QMenu_tooltip> * atoms_submenu = MainMenu->findSubmenu("atom");
     203  // and show it
     204  if (atoms_submenu != NULL) {
     205    atoms_submenu->popup(glWorldView->mapToGlobal(pos));
     206  } else {
     207    ELOG(1, "Could not find atom submenu.");
     208  }
     209}
    195210QtMainWindow::~QtMainWindow()
    196211{
  • src/UIElements/Qt4/QtMainWindow.hpp

    rae9ad6 r9cdab3  
    5757  virtual void closeEvent(QCloseEvent *event);
    5858
     59public slots:
     60  void slotContextMenuRequested(const QPoint &pos);
    5961
    6062private:
  • src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp

    rae9ad6 r9cdab3  
    609609  QGLView::mousePressEvent(event);
    610610
     611  // check for right mouse button
     612  if (event->button() == Qt::RightButton) {
     613    emit customContextMenuRequested(event->pos());
     614  }
     615
    611616  // Reset the saved mouse position.
    612617  lastMousePos = event->posF();
  • src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp

    rae9ad6 r9cdab3  
    7373  void ShapeRemoved(const std::string &);
    7474  void moleculesVisibilityChanged(ObservedValue_Index_t,bool);
     75  void customContextMenuRequested(const QPoint&);
    7576
    7677protected:
Note: See TracChangeset for help on using the changeset viewer.