ui/viewmanagement/viewmanager/src/glxmenumanager.cpp
changeset 24 99ad1390cd33
parent 23 74c9f037fd5d
child 26 c499df2dbb33
--- a/ui/viewmanagement/viewmanager/src/glxmenumanager.cpp	Fri Mar 19 09:28:59 2010 +0200
+++ b/ui/viewmanagement/viewmanager/src/glxmenumanager.cpp	Fri Apr 16 14:58:46 2010 +0300
@@ -14,60 +14,25 @@
 * Description: 
 *
 */
-#include <glxviewids.h>
-#include <glxmenumanager.h>
+
+//include
 #include <QDebug>
 #include <hbaction.h>
-#include "hbmenu.h"
-#include <glxcommandhandlers.hrh>
-#include <QDebug>
+#include <hbmenu.h>
+#include <hbmainwindow.h>
 
-GlxMenuManager::GlxMenuManager()
-{
-}
-GlxMenuManager::~GlxMenuManager()
+//user include
+#include "glxviewids.h"
+#include "glxmenumanager.h"
+#include "glxcommandhandlers.hrh"
+#include "glxmodelparm.h"
+
+GlxMenuManager::GlxMenuManager(HbMainWindow* mainWindow):mMainWindow(mainWindow)
 {
 }
-void GlxMenuManager::CreateViewMenu(qint32 viewId,HbMenu* menu,bool empty, int subState)
+
+GlxMenuManager::~GlxMenuManager()
 {
-	Q_UNUSED(empty);
-    switch(viewId)
-    {
-    case GLX_GRIDVIEW_ID:   {
-                            qDebug()<<"GRIDVIEW MENU CREATED";
-                            CreateGridMenu(menu);
-                            }
-                            break;
-
-    case GLX_LISTVIEW_ID:   {
-                            qDebug()<<"LISTVIEW MENU CREATED";
-                            CreateListMenu(menu);
-                            }
-                            break;
-    case GLX_FULLSCREENVIEW_ID:{
-								//image viewer state 
-                                if(2 == subState){
-                                    CreateImageViewerMenu(menu);
-                                }
-                                else{
-                                    qDebug()<<"FULLSCREENVIEW MENU CREATED";
-                                    CreateFullscreenMenu(menu);
-                                }
-                               }
-                            break;
-							
-    case GLX_DETAILSVIEW_ID: {
-	//will create details specific menu later
-                            qDebug()<<"DETAILS VIEW MENU CREATE";
-                             }  
-	                          
-    case GLX_SLIDESHOWVIEW_ID :
-        break;                            
-                            
-    default:                
-                            break;
-
-    }
 }
 
 void GlxMenuManager::createMarkingModeMenu(HbMenu* menu)
@@ -87,103 +52,178 @@
     action->setData(EGlxCmdUnMarkAll);
     action->setVisible(FALSE);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    menu->setVisible(FALSE);
     
     action = menu->addAction("Exit");
     action->setData(EGlxCmdUnMarkAll);
     action->setVisible(FALSE);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    menu->setVisible(FALSE);
+}
+
+void GlxMenuManager::addMenu(qint32 viewId, HbMenu* menu)
+{
+    switch(viewId) {
+    case GLX_GRIDVIEW_ID:
+        connect( menu, SIGNAL( aboutToShow() ), this, SLOT( updateGridMenu() ) );
+        CreateGridMenu( menu );
+        break;                            
+
+    case GLX_LISTVIEW_ID: 
+        CreateListMenu ( menu );
+        break;
+        
+    case GLX_FULLSCREENVIEW_ID:
+        connect( menu, SIGNAL( aboutToShow() ), this, SLOT( updateFullscreenMenu() ) );
+        CreateFullscreenMenu( menu );
+        break;
+                
+    default:
+        break;
+    }  
+}
+
+void GlxMenuManager::removeMenu(qint32 viewId, HbMenu* menu)
+{
+    switch(viewId) {
+    case GLX_GRIDVIEW_ID:
+        disconnect( menu, SIGNAL( aboutToShow() ), this, SLOT( updateGridMenu() ) );
+        break;                            
+        
+    case GLX_FULLSCREENVIEW_ID:
+        disconnect( menu, SIGNAL( aboutToShow() ), this, SLOT( updateFullscreenMenu() ) );
+        break;
+                
+    default:
+        break;
+    }  
 }
 
 void GlxMenuManager::CreateGridMenu(HbMenu* menu)
 {
     qDebug()<<"GlxMenuManager::CreateGridMenu";
     HbAction *action = NULL;
+    
     action = menu->addAction("Send");
     action->setData(EGlxCmdSend);
-    // action->setVisible(EFalse);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
    
-    /*action = menu->addAction("Upload to web");
-    action->setData(EGlxCmdUpload);
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));*/
     action = menu->addAction("Slide Show");
     action->setData(EGlxCmdFirstSlideshow);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
+    
     action = menu->addAction("Add to album");
     action->setData(EGlxCmdAddToAlbum);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    /*action = menu->addAction("Sort by");
-    //action->setData();
+    
+    action = menu->addAction("Remove From Album");
+    action->setData(EGlxCmdRemoveFrom);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    action = menu->addAction("Setting");
-    //action->setData();
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));*/
+
     action = menu->addAction("Delete");
     action->setData(EGlxCmdDelete);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    /*action = menu->addAction("Help");
-    //action->setData();
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    action = menu->addAction("Exit");*/
 }
 
 void GlxMenuManager::CreateListMenu(HbMenu* menu)
 {
     qDebug()<<"GlxMenuManager::CreateListMenu";
-    /*HbAction *action = menu->addAction("Setting");
-    //action->setData();
+    HbAction *action = NULL;
+    
+    action = menu->addAction("New album");
+    action->setData(EGlxCmdAddMedia);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    action = menu->addAction("Help");
-    //action->setData();
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    action = menu->addAction("Exit");
-    //action->setData();
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));*/
 }
 
 void GlxMenuManager::CreateFullscreenMenu(HbMenu* menu)
 {
     qDebug()<<"GlxMenuManager::CreateFullscreenMenu";
     HbAction *action = NULL;
+    
     action = menu->addAction("Send");
     action->setData(EGlxCmdSend);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
+    
     action = menu->addAction("Slide Show");
     action->setData(EGlxCmdSelectSlideshow);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
+    
     action = menu->addAction("Add to album");
     action->setData(EGlxCmdAddToAlbum);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-	action = menu->addAction("Rotate");
+	
+    action = menu->addAction("Rotate");
     action->setData(EGlxCmdRotate);
     connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    /*action = menu->addAction("Upload to web");
-    action->setData(EGlxCmdUpload);
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    action = menu->addAction("Use Image");
-    //action->setData();
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    action = menu->addAction("Print");
-    //action->setData();
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    action = menu->addAction("Edit");
-    //action->setData();
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    action = menu->addAction("Details");
-    action->setData(EGlxCmdDetailsOption);
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    action = menu->addAction("Help");
-    //action->setData();
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
-    action = menu->addAction("Exit");
-    //action->setData();
-    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));*/
+}
+
+void GlxMenuManager::setAllActionVisibility( QList<QAction*> actionList, bool visible )
+{
+    qDebug() << "GlxMenuManager::setAllActionVisibility count " << actionList.count() << " visible" << visible;
+    for ( int i = 0 ; i < actionList.count(); i++) {
+        actionList.at(i)->setVisible(visible);
+    }
+}
+
+int GlxMenuManager::viewSubState()
+{
+    QVariant variant = mModel->data( mModel->index(0,0), GlxSubStateRole );    
+    if ( variant.isValid() &&  variant.canConvert<int> () ) {
+        return variant.value<int>() ;
+    }
+    return -1;
 }
 
-void GlxMenuManager::CreateImageViewerMenu(HbMenu* menu)
+void GlxMenuManager::updateGridMenu()
 {
+    qDebug() << "GlxMenuManager::updateGridMenu";
+
+    HbMenu *menu = qobject_cast<HbMenu*>( sender() );
+    static bool isAllActionDisable = FALSE;
+    int rowCount = mModel->rowCount();    
+    QList<QAction*> actionList = menu->actions();
+    
+    if ( rowCount == 0 && isAllActionDisable == FALSE) {
+        qDebug() << "GlxMenuManager::updateGridMenu set all visible FALSE";
+        setAllActionVisibility( actionList, FALSE );
+        isAllActionDisable = TRUE;
+    }    
+    
+    if ( rowCount && isAllActionDisable == TRUE ) {
+        setAllActionVisibility( actionList, TRUE );
+        isAllActionDisable = FALSE;
+        qDebug() << "GlxMenuManager::updateGridMenu set all visible TRUE" ;
+    }
+    
+    if ( rowCount ) {
+        int state =  viewSubState();
+        
+        switch ( state ) {
+        case ALBUM_ITEM_S :
+            actionList.at(GlxGridViewRemoveFromAlbum)->setVisible( TRUE );
+            break ;
+            
+        default :    
+            actionList.at(GlxGridViewRemoveFromAlbum)->setVisible( FALSE );
+            break ;
+        }       
+    }    
+}
+
+void GlxMenuManager::updateFullscreenMenu()
+{
+    HbMenu *menu = qobject_cast<HbMenu*>( sender() );
+    QList<QAction*> actionList = menu->actions();
+    static bool isAllActionDisable = FALSE;
+    int state = viewSubState() ;
+    
+    if ( state == IMAGEVIEWER_S &&  isAllActionDisable == FALSE ) {        
+        setAllActionVisibility( actionList, FALSE );
+        isAllActionDisable = TRUE;
+    }
+  
+    if ( state != IMAGEVIEWER_S &&  isAllActionDisable == TRUE ) {
+        setAllActionVisibility( actionList, TRUE );
+        isAllActionDisable = FALSE;
+    }    
 }
 
 void GlxMenuManager::menuItemSelected()
@@ -202,7 +242,7 @@
 	switch ( viewId ) {
 	    case GLX_GRIDVIEW_ID :
 	        action = mainMenu->addAction("Send");
-	        action->setData(EGlxCmdSend);
+	        action->setData(EGlxCmdContextSend);
 	        connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 	        
 	        action = mainMenu->addAction("Slide Show");
@@ -223,16 +263,17 @@
 	        action->setData(EGlxCmdAlbumSlideShow);
 	        connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 	                    
-		    /*action = mainMenu->addAction("Delete");
+		    action = mainMenu->addAction("Delete");
 		    action->setData(EGlxCmdContextAlbumDelete);
-		    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));*/
+		    connect(action, SIGNAL(triggered()), this, SLOT(menuItemSelected()));
 			break;
 		default:
 		    break;	
 		}
 
+	connect(mMainWindow, SIGNAL(aboutToChangeOrientation ()), mainMenu, SLOT(close()));
     mainMenu->exec(pos);
-
+    disconnect(mMainWindow, SIGNAL(aboutToChangeOrientation ()), mainMenu, SLOT(close()));
     delete mainMenu;
 
 }