[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdeedu/marble/src
From:       Dennis Nienhüser <earthwings () gentoo ! org>
Date:       2011-03-31 18:43:00
Message-ID: 20110331184300.2EA27AC8CD () svn ! kde ! org
[Download RAW message or body]

SVN commit 1226652 by nienhueser:

Share the context menu with children. Use an extended one in the map scale plugin. \
Fixes 'Hide' and 'Lock' options missing in the map scale infobox context menu.

 M  +30 -19    lib/AbstractFloatItem.cpp  
 M  +3 -1      lib/AbstractFloatItem.h  
 M  +19 -7     plugins/render/mapscale/MapScaleFloatItem.cpp  
 M  +2 -0      plugins/render/mapscale/MapScaleFloatItem.h  


--- trunk/KDE/kdeedu/marble/src/lib/AbstractFloatItem.cpp #1226651:1226652
@@ -25,17 +25,20 @@
 class AbstractFloatItemPrivate
 {
   public:
-    AbstractFloatItemPrivate()
+    AbstractFloatItemPrivate() : m_contextMenu( 0 )
     {
     }
 
     ~AbstractFloatItemPrivate()
     {
+        delete m_contextMenu;
     }
 
 
     static QPen         s_pen;
     static QFont        s_font;
+
+    QMenu* m_contextMenu;
 };
 
 QPen         AbstractFloatItemPrivate::s_pen = QPen( Qt::black );
@@ -160,25 +163,8 @@
 
 void AbstractFloatItem::contextMenuEvent ( QWidget *w, QContextMenuEvent *e )
 {
-    QMenu menu;
-    QAction *lockaction = menu.addAction( tr( "&Lock" ) );
-    lockaction->setCheckable( true );
-    lockaction->setChecked( positionLocked() );
-    connect( lockaction, SIGNAL( triggered( bool ) ),
-             this, SLOT( setPositionLocked( bool ) ) );
-    QAction *hideaction = menu.addAction( tr( "&Hide" ) );
-    connect( hideaction, SIGNAL( triggered() ),
-             this, SLOT( hide() ) );
-    QDialog *dialog = configDialog();
-    if( dialog != NULL )
-    {
-        menu.addSeparator();
-        QAction *configaction = menu.addAction( tr( "&Configure..." ) );
-        connect( configaction, SIGNAL( triggered() ),
-                 dialog, SLOT( exec() ) );
+    contextMenu()->exec( w->mapToGlobal( e->pos() ) );
     }
-    menu.exec( w->mapToGlobal( e->pos() ) );
-}
 
 void AbstractFloatItem::toolTipEvent ( QHelpEvent *e )
 {
@@ -227,6 +213,31 @@
     setVisible( false );
 }
 
+QMenu* AbstractFloatItem::contextMenu()
+{
+    if ( !d->m_contextMenu )
+    {
+        d->m_contextMenu = new QMenu;
 }
 
+    QAction *lockAction = d->m_contextMenu->addAction( tr( "&Lock" ) );
+    lockAction->setCheckable( true );
+    lockAction->setChecked( positionLocked() );
+    connect( lockAction, SIGNAL( triggered( bool ) ), this, SLOT( setPositionLocked( \
bool ) ) ); +    QAction *hideAction = d->m_contextMenu->addAction( tr( "&Hide" ) );
+    connect( hideAction, SIGNAL( triggered() ), this, SLOT( hide() ) );
+    QDialog *dialog = configDialog();
+    if( dialog )
+    {
+        d->m_contextMenu->addSeparator();
+        QAction *configAction = d->m_contextMenu->addAction( tr( "&Configure..." ) \
); +        connect( configAction, SIGNAL( triggered() ), dialog, SLOT( exec() ) );
+    }
+
+    Q_ASSERT( d->m_contextMenu );
+    return d->m_contextMenu;
+}
+
+}
+
 #include "AbstractFloatItem.moc"
--- trunk/KDE/kdeedu/marble/src/lib/AbstractFloatItem.h #1226651:1226652
@@ -27,12 +27,13 @@
 #include "marble_export.h"
 
 
+class QMenu;
+
 namespace Marble
 {
 
 class AbstractFloatItemPrivate;
 
-
 /**
  * @short The abstract class that creates an "empty" float item.
  *
@@ -78,6 +79,7 @@
     virtual bool eventFilter( QObject *object, QEvent *e );
     virtual void contextMenuEvent ( QWidget *w, QContextMenuEvent *e );
     virtual void toolTipEvent( QHelpEvent *e );
+    QMenu* contextMenu();
 
  private:
     Q_DISABLE_COPY( AbstractFloatItem )
--- trunk/KDE/kdeedu/marble/src/plugins/render/mapscale/MapScaleFloatItem.cpp \
#1226651:1226652 @@ -47,7 +47,8 @@
       m_valueInterval(0),
       m_unit(tr("km")),
       m_scaleInitDone( false ),
-      m_showRatioScale( false )
+      m_showRatioScale( false ),
+      m_contextMenu( 0 )
 {
     bool const smallScreen = MarbleGlobal::getInstance()->profiles() & \
MarbleGlobal::SmallScreen;  if ( smallScreen ) {
@@ -356,15 +357,26 @@
 
 void MapScaleFloatItem::contextMenuEvent( QWidget *w, QContextMenuEvent *e )
 {
-    QMenu menu;
-    QAction *toggleaction = menu.addAction( tr("&Ratio Scale"), 
-                                            this, 
+    if ( !m_contextMenu ) {
+        m_contextMenu = contextMenu();
+
+        foreach( QAction *action, m_contextMenu->actions() ) {
+            if ( action->text() == tr( "&Configure..." ) ) {
+                m_contextMenu->removeAction( action );
+                break;
+            }
+        }
+
+        QAction *toggleAction = m_contextMenu->addAction( tr("&Ratio Scale"), this,
                                             SLOT( toggleRatioScaleVisibility() ) );
-    toggleaction->setCheckable( true );
-    toggleaction->setChecked( m_showRatioScale );
-    menu.exec( w->mapToGlobal( e->pos() ) );
+        toggleAction->setCheckable( true );
+        toggleAction->setChecked( m_showRatioScale );
 }
 
+    Q_ASSERT( m_contextMenu );
+    m_contextMenu->exec( w->mapToGlobal( e->pos() ) );
+}
+
 void MapScaleFloatItem::toolTipEvent( QHelpEvent *e )
 {
     QToolTip::showText( e->globalPos(), m_ratioString );
--- trunk/KDE/kdeedu/marble/src/plugins/render/mapscale/MapScaleFloatItem.h \
#1226651:1226652 @@ -108,6 +108,8 @@
 
     bool     m_showRatioScale;
 
+    QMenu*   m_contextMenu;
+
     void calcScaleBar();
 };
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic