Changeset e46485b


Ignore:
Timestamp:
08/05/13 13:56:33 (12 months ago)
Author:
Ken Moore <ken@…>
Branches:
master, 9.2-release, releng/10.0, releng/10.0.1, releng/10.0.2
Children:
e6acb24
Parents:
af47272
Message:

Setup the AppCafe? to be able to start any xdg-menu entry that an installed PBI has. The icon in the lower section for a selected appliction is now a toolbutton with a popup menu of all the available ways to start the application.

Location:
src-qt4/pc-softwaremanager
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src-qt4/pc-softwaremanager/mainUI.cpp

    r867747a re46485b  
    152152    actionMenu->addSeparator(); 
    153153    actionMenu->addAction( QIcon(":icons/dialog-cancel.png"), tr("Cancel Actions"), this, SLOT(slotActionCancel()) ); 
     154  //Setup the binary menu for installed applications 
     155  appBinMenu = new QMenu(); 
     156  ui->tool_install_icon->setMenu(appBinMenu); 
     157    connect(appBinMenu, SIGNAL(triggered(QAction*)), this, SLOT(slotStartApp(QAction*)) ); 
    154158    //Now setup the action button 
    155159    ui->tool_install_performaction->setMenu(actionMenu); 
     
    348352  //Now display that info on the UI 
    349353  ui->label_install_app->setText(vals[0]); 
    350   ui->label_install_icon->setPixmap( QPixmap(vals[1]) ); 
     354  ui->tool_install_icon->setIcon( QIcon(vals[1]) ); 
    351355  if(vals[3].isEmpty()){  
    352356    ui->label_install_author->setText(vals[2]);  
     
    419423      ui->label_install_DL->setVisible(FALSE); 
    420424  } 
     425  //Get the application binaries and set the icon to start them 
     426  QStringList bins = PBI->pbiBinList(appID); 
     427  appBinMenu->clear(); 
     428  if(bins.isEmpty()){ 
     429    ui->tool_install_icon->setAutoRaise(false); 
     430  }else{ 
     431    ui->tool_install_icon->setAutoRaise(true); 
     432    for(int i=0; i<bins.length(); i++){ 
     433      QAction *act = new QAction(this); 
     434            act->setText(bins[i].section("::::",0,0)); //set name 
     435            act->setWhatsThis(bins[i].section("::::",1,10)); //set command string 
     436      appBinMenu->addAction(act); 
     437    } 
     438  } 
    421439} 
    422440 
     
    548566} 
    549567 
     568void MainUI::slotStartApp(QAction* act){ 
     569  qDebug() << "Starting external application:" << act->text(); 
     570  //Get the command from the action 
     571  QString desktopfile = act->whatsThis(); 
     572  QString cmd = "xdg-open "+desktopfile; 
     573  //Startup the command externally 
     574  QProcess::startDetached(cmd); 
     575} 
    550576 
    551577// ========================== 
  • src-qt4/pc-softwaremanager/mainUI.h

    r867747a re46485b  
    7878  void slotActionRemove(); 
    7979  void slotActionCancel(); 
     80  void slotStartApp(QAction*); 
    8081   
    8182  //BROWSER TAB 
     
    99100  //OTHER 
    100101  void slotDisplayError(QString,QString,QStringList); 
    101  
     102   
    102103private: 
    103104  Ui::MainUI *ui; 
     
    105106  PBIBackend *PBI; 
    106107  //INSTALLED TAB 
    107   QMenu *actionMenu; 
     108  QMenu *actionMenu, *appBinMenu; 
    108109  void initializeInstalledTab(); 
    109110  void formatInstalledItemDisplay(QTreeWidgetItem *item); 
  • src-qt4/pc-softwaremanager/mainUI.ui

    r87b26bd re46485b  
    275275               <layout class="QVBoxLayout" name="verticalLayout_13"> 
    276276                <item> 
    277                  <widget class="QLabel" name="label_install_icon"> 
     277                 <widget class="QToolButton" name="tool_install_icon"> 
    278278                  <property name="maximumSize"> 
    279279                   <size> 
     
    282282                   </size> 
    283283                  </property> 
     284                  <property name="statusTip"> 
     285                   <string>Start the application</string> 
     286                  </property> 
    284287                  <property name="text"> 
    285288                   <string/> 
    286289                  </property> 
    287                   <property name="pixmap"> 
    288                    <pixmap resource="SoftwareManager.qrc">:/icons/appcafe.png</pixmap> 
    289                   </property> 
    290                   <property name="scaledContents"> 
     290                  <property name="icon"> 
     291                   <iconset resource="SoftwareManager.qrc"> 
     292                    <normaloff>:/icons/appcafe.png</normaloff>:/icons/appcafe.png</iconset> 
     293                  </property> 
     294                  <property name="iconSize"> 
     295                   <size> 
     296                    <width>64</width> 
     297                    <height>64</height> 
     298                   </size> 
     299                  </property> 
     300                  <property name="popupMode"> 
     301                   <enum>QToolButton::InstantPopup</enum> 
     302                  </property> 
     303                  <property name="autoRaise"> 
    291304                   <bool>true</bool> 
     305                  </property> 
     306                  <property name="arrowType"> 
     307                   <enum>Qt::NoArrow</enum> 
    292308                  </property> 
    293309                 </widget> 
     
    306322                    <property name="sizeHint" stdset="0"> 
    307323                     <size> 
    308                       <width>40</width> 
     324                      <width>10</width> 
    309325                      <height>20</height> 
    310326                     </size> 
     
    714730                    <x>0</x> 
    715731                    <y>0</y> 
    716                     <width>70</width> 
    717                     <height>16</height> 
     732                    <width>98</width> 
     733                    <height>28</height> 
    718734                   </rect> 
    719735                  </property> 
     
    765781                    <x>0</x> 
    766782                    <y>0</y> 
    767                     <width>49</width> 
    768                     <height>16</height> 
     783                    <width>98</width> 
     784                    <height>28</height> 
    769785                   </rect> 
    770786                  </property> 
     
    790806                 <x>0</x> 
    791807                 <y>0</y> 
    792                  <width>86</width> 
    793                  <height>16</height> 
     808                 <width>98</width> 
     809                 <height>28</height> 
    794810                </rect> 
    795811               </property> 
     
    12511267                    <x>0</x> 
    12521268                    <y>0</y> 
    1253                     <width>55</width> 
    1254                     <height>16</height> 
     1269                    <width>98</width> 
     1270                    <height>28</height> 
    12551271                   </rect> 
    12561272                  </property> 
     
    12891305                    <x>0</x> 
    12901306                    <y>0</y> 
    1291                     <width>55</width> 
    1292                     <height>16</height> 
     1307                    <width>98</width> 
     1308                    <height>28</height> 
    12931309                   </rect> 
    12941310                  </property> 
  • src-qt4/pc-softwaremanager/pbiBackend.cpp

    r2f6ea6c re46485b  
    287287      } 
    288288    } 
    289      
    290      
    291     /* 
    292     //Generate the download command  
    293     QString cmd, version, arch, dlfile; 
    294     bool needDownload = TRUE; 
    295     if(pbiID.isEmpty()){ //Not installed currently 
    296       version = APPHASH[appID[i]].latestVersion; //install the latest version available 
    297       arch = APPHASH[appID[i]].latestArch; 
    298       dlfile = APPHASH[appID[i]].latestFilename; 
    299       if(QFile::exists(dlDir+dlfile)){ //If the file was downloaded previously just use it 
    300         needDownload=FALSE;  
    301         cmd = generateInstallCMD(appID[i], dlfile); 
    302       }else{  
    303         cmd = generateDownloadCMD(appID[i], version); //need to download the file first  
    304       }  
    305     }else if( PBIHASH[pbiID].version == APPHASH[appID[i]].latestVersion ){ 
    306       version = APPHASH[appID[i]].backupVersion; //Already latest version, revert to the backup version 
    307       arch = APPHASH[appID[i]].backupArch; 
    308       dlfile = APPHASH[appID[i]].backupFilename; 
    309       if(version.isEmpty()){ qDebug() << appID[i] << "already the latest version (no backup)";} 
    310       else{  
    311         if(QFile::exists(dlDir+dlfile)){ //If the file was downloaded previously just use it 
    312           needDownload=FALSE;  
    313           cmd = generateInstallCMD(appID[i], dlfile); 
    314         }else{  
    315           cmd = generateDownloadCMD(appID[i], version); //need to download the file first  
    316         }  
    317       }      
    318     }else{ 
    319       //Old version installed - run the update command instead 
    320       upgradePBI(QStringList() << pbiID); 
    321     } 
    322     if( cmd.isEmpty() || version.isEmpty() || arch.isEmpty() || dlfile.isEmpty() ){ continue; } //go to the next item - is invalid 
    323     else{ 
    324       QString newPbiID = appID[i]+"-"+version+"-"+arch; //generate a PBI ID 
    325       if(PBIHASH.contains(newPbiID)){ qDebug() << newPbiID << "is either already installed or installing"; } 
    326       else{ 
    327         //Now create a new entry for the item 
    328         PBIHASH.insert(newPbiID,InstalledPBI()); 
    329         PBIHASH[newPbiID].metaID = appID[i]; //set this for the initial sync to work properly 
    330         PBIHASH[newPbiID].version = version; 
    331         PBIHASH[newPbiID].arch = arch; 
    332         PBIHASH[newPbiID].downloadfile = dlfile;               
    333         //put the command in the queue 
    334         if(needDownload){ 
    335           PENDINGDL << newPbiID+":::"+cmd; 
    336         }else{ //no need to download, just install 
    337           //Check for if a different version needs to be removed first 
    338           qDebug() << "Using existing PBI:" << dlDir+dlfile; 
    339           if(!pbiID.isEmpty()){ 
    340             //Remove the currently installed version first 
    341             QString cmd2 = generateRemoveCMD(pbiID); 
    342             if(!cmd2.isEmpty()){ PENDINGINSTALL << pbiID+":::"+cmd2; } 
    343           } 
    344           //Now add the install command 
    345           PENDINGINSTALL << newPbiID+":::"+cmd; 
    346         } 
    347         syncPBI(newPbiID,FALSE); //fill item with info from app database (including status) 
    348       } 
    349     } 
    350     */ 
    351289  } // end of loop over items 
    352290  //Now check/start the remove process 
     
    635573  bool notworking = (PBIHASH[pbiID].status == InstalledPBI::UPDATEAVAILABLE || PBIHASH[pbiID].status == InstalledPBI::NONE ); 
    636574  return !notworking; 
     575} 
     576 
     577QStringList PBIBackend::pbiBinList(QString pbiID){ 
     578  QStringList output; 
     579  //qDebug() << "Start Search for Binaries:" << pbiID; 
     580  if( !PBIHASH.contains(pbiID) ){ return output; } 
     581  //Now prod the database to see what binaries are currently available to run  
     582  QDir bDir(PBIHASH[pbiID].path+"/.xdg-menu/");   
     583  if(bDir.exists()){ 
     584    QStringList bList = bDir.entryList(QStringList() << "*.desktop"); 
     585    for(int i =0; i<bList.length(); i++){ 
     586      QStringList contents = Extras::readFile(bDir.absoluteFilePath(bList[i])); 
     587        //qDebug() << " - Check file:" << bList[i] << contents; 
     588      //Make sure that it is a visible entry 
     589      if(!contents.contains("NoDisplay=true")){ 
     590        //qDebug() << " -- visible entry"; 
     591        QString name; 
     592        //Get the locale code 
     593        QString loc = QLocale::system().name(); 
     594        bool lName=false; 
     595        for(int j=0; j<contents.length(); j++){ 
     596          if(contents[j].startsWith("Name=") && !lName){ name = contents[j].section("=",1,10);  } 
     597          else if(contents[j].startsWith("Name["+loc+"]=")){ name = contents[j].section("=",1,10);  lName=true; } 
     598        } 
     599        //Format the output string 
     600        if( !name.isEmpty() ){ 
     601          output << name.simplified()+"::::"+bDir.absoluteFilePath(bList[i]); 
     602        } 
     603      } 
     604    } //end loop over files 
     605  } 
     606  return output; 
    637607} 
    638608 
  • src-qt4/pc-softwaremanager/pbiBackend.h

    r2f6ea6c re46485b  
    6868        QString currentAppStatus( QString appID , bool rawstatus = false); 
    6969        bool isWorking(QString pbiID); 
     70        QStringList pbiBinList(QString pbiID); 
    7071         
    7172        //Configuration Management 
Note: See TracChangeset for help on using the changeset viewer.