Changeset 2916111


Ignore:
Timestamp:
02/20/14 05:23:28 (5 months ago)
Author:
Ken Moore <ken@…>
Branches:
master, releng/10.0.1, releng/10.0.2
Children:
6b7fcc5
Parents:
2e26400
Message:

Update the AppCafe? Installed tab to take advantage of the new info available for 10.x PBI's.
Changes Include:
1) Move currently installed app info to a seperate page, that can be opened by either double-clicking on an installed application or clicking the "details" button at the bottom of the main page.
2) Update the "actions" button to be actively enabled/disabled depending on whether any items are currently checked.
3) Add ability to start composing an email (in the DE's default email client) to the port maintainer for an installed PBI. This email template also includes all the important info regarding the PBI in question (build date, architecture, FreeBSD version, version number).
4) Fix a bug with setting/unsetting the "auto-update" status for a PBI.
5) Clean up application descriptions a bit better now (affects both installed and browser tabs).

Location:
src-qt4/pc-softwaremanager
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • src-qt4/pc-softwaremanager/SoftwareManager.qrc

    r705a8ca r2916111  
    4040    <file>icons/xdg_mime.png</file> 
    4141    <file>icons/xdg_paths.png</file> 
     42    <file>icons/email.png</file> 
    4243  </qresource> 
    4344</RCC> 
  • src-qt4/pc-softwaremanager/containers.h

    rd9f2085 r2916111  
    3737  public: 
    3838    enum PBISTATUS{ NONE, DOWNLOADING, INSTALLING, REMOVING, UPDATING, PENDINGDOWNLOAD, PENDINGINSTALL, PENDINGREMOVAL, PENDINGUPDATE, UPDATEAVAILABLE, WORKING }; 
    39     QString name, version, author, website, arch, path, icon, license, mdate, metaID, downloadfile; 
     39    QString name, version, author, website, arch, path, icon, license, mdate, metaID, downloadfile, description, maintainer, fbsdversion; 
    4040    PBISTATUS status; 
    4141    bool rootInstall, autoUpdate, desktopIcons, menuIcons; 
  • src-qt4/pc-softwaremanager/mainUI.cpp

    r8d4e4d62 r2916111  
    7878   //Make sure we start on the installed tab 
    7979   ui->tabWidget->setCurrentWidget(ui->tab_installed); 
     80   ui->stackedWidget->setCurrentWidget(ui->page_install_list); 
    8081} 
    8182 
     
    160161  ui->tool_install_performaction->setPopupMode(QToolButton::InstantPopup); 
    161162  //Now setup any defaults for the installed tab 
    162   ui->tool_install_gotobrowserpage->setEnabled(FALSE); //disable it until the browser is ready 
    163163  ui->tree_install_apps->setIconSize(QSize(22,22)); 
     164  connect(ui->tree_install_apps, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(slotCheckSelectedItems()) ); 
    164165  slotRefreshInstallTab(); 
    165166} 
     
    273274  slotUpdateSelectedPBI();; //Update the info boxes 
    274275  slotDisplayStats(); 
     276  slotCheckSelectedItems(); 
     277} 
     278 
     279void MainUI::slotCheckSelectedItems(){ 
     280  bool chkd = false; 
     281  for(int i=0; i<ui->tree_install_apps->topLevelItemCount(); i++){ 
     282    if(ui->tree_install_apps->topLevelItem(i)->checkState(0) == Qt::Checked){ 
     283      chkd = true; break; 
     284    } 
     285  } 
     286  ui->tool_install_performaction->setEnabled(chkd); 
    275287} 
    276288 
     
    284296      ui->tree_install_apps->topLevelItem(i)->setText(2,stat); 
    285297      // See if we need to update the download progress bar 
    286       QString appID; 
    287       if(ui->tree_install_apps->topLevelItemCount() > 0){ 
    288          appID = ui->tree_install_apps->currentItem()->whatsThis(0); 
    289       } 
     298      QString appID = ui->tree_install_apps->currentItem()->whatsThis(0); 
    290299      if ( appID == pbiID ) { 
    291         slotUpdateSelectedPBI(true);; //only update status 
     300        slotUpdateSelectedPBI(); 
     301        //If the details page is currently visible, update it too 
     302        if(ui->stackedWidget->currentWidget() == ui->page_install_details){ 
     303          updateInstallDetails(appID); 
     304        } 
    292305      } 
    293306    }else{ 
     
    300313} 
    301314 
    302 void MainUI::on_group_install_showinfo_toggled(bool show){ 
     315void MainUI::on_tool_install_details_clicked(){ 
     316  //Get the current item 
     317  QString appID; 
    303318  if(ui->tree_install_apps->topLevelItemCount() > 0){ 
    304     ui->group_install_info->setVisible(show); 
    305   }else{ 
    306     ui->group_install_info->setVisible(FALSE);    
    307   } 
     319    appID = ui->tree_install_apps->currentItem()->whatsThis(0); 
     320  } 
     321  if(appID.isEmpty()){return;} 
     322  //Update the info on the details page 
     323  updateInstallDetails(appID); 
     324  //Now show the page 
     325  ui->stackedWidget->setCurrentWidget(ui->page_install_details); 
     326} 
     327 
     328void MainUI::on_tool_install_back_clicked(){ 
     329  //List page should always be current based upon backend 
     330  ui->stackedWidget->setCurrentWidget(ui->page_install_list); 
    308331} 
    309332 
     
    321344    else{ui->tree_install_apps->topLevelItem(i)->setCheckState(0,Qt::Unchecked); } 
    322345  } 
     346  slotCheckSelectedItems(); 
    323347} 
    324348 
     
    326350  //When an installed PBI is clicked on 
    327351  slotUpdateSelectedPBI(); 
     352  if(ui->stackedWidget->currentWidget() != ui->page_install_list){ 
     353    ui->stackedWidget->setCurrentWidget(ui->page_install_list); 
     354  } 
     355  slotCheckSelectedItems(); 
     356} 
     357 
     358void MainUI::on_tree_install_apps_itemDoubleClicked(QTreeWidgetItem *item){ 
     359 //Make sure it is a valid/installed application 
     360 QString appID = item->whatsThis(0); 
     361  appID = PBI->isInstalled(appID); 
     362  if(appID.isEmpty()){ return; } //invalid item 
     363  //Update the info on the details page 
     364  updateInstallDetails(appID); 
     365  //Now show the page 
     366  ui->stackedWidget->setCurrentWidget(ui->page_install_details); 
    328367} 
    329368 
     
    339378  //Now have the backend make the change 
    340379  PBI->enableAutoUpdate(appID, enabled); 
     380  //Now ask if the user also wants to start updating it now 
     381  if(enabled && !PBI->upgradeAvailable(appID).isEmpty()){ 
     382    if( QMessageBox::Yes == QMessageBox::question(this, tr("Start Update?"), tr("Do you wish to start updating this application right now?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) ){ 
     383      PBI->upgradePBI(QStringList() << appID); 
     384    } 
     385  } 
     386  //Now force the info on the page to be updated in a moment (need time for database to update) 
     387  QTimer::singleShot(200, this, SLOT(on_tool_install_details_clicked()) ); 
    341388} 
    342389 
     
    373420  PBI->cancelActions(QStringList() << appID); 
    374421   
     422} 
     423 
     424void MainUI::on_tool_install_maintainer_clicked(){ 
     425  //Get the current item 
     426  QString appID; 
     427  if(ui->tree_install_apps->topLevelItemCount() > 0){ 
     428    appID = ui->tree_install_apps->currentItem()->whatsThis(0); 
     429  } 
     430  if(appID.isEmpty()){return;} 
     431  //Get the maintainer email 
     432  QString email = PBI->PBIInfo(appID, QStringList() << "maintainer").join(""); 
     433  if(email.isEmpty()){ return; } 
     434  qDebug() << "Launching email to:" << email; 
     435  //Get the command from the action 
     436  QString cmd = "mailto:"+email; 
     437  QStringList info = PBI->PBIInfo(appID, QStringList() << "name" << "date" << "version" << "arch" << "fbsdversion" ); 
     438  //Add a sample subject 
     439  cmd.append("?subject="+info[0]+" port question"); 
     440  //Add the info to the body of the email 
     441  cmd.append("&body="); 
     442  cmd.append("-----------\nPBI Information:\nName: "+info[0] + "\nDate Created: "+info[1] +"\nVersion: "+info[2] +"\nArchitecture: "+info[3] +"\nFreeBSD Version: "+info[4] ); 
     443  //Startup the command externally 
     444  QProcess::execute("xdg-open \""+cmd+"\""); 
    375445} 
    376446 
     
    464534} 
    465535 
    466 void MainUI::slotUpdateSelectedPBI(bool statusonly){ 
     536void MainUI::slotUpdateSelectedPBI(){ 
     537  //Get the currently selected app 
    467538  QString appID; 
    468539  if(ui->tree_install_apps->topLevelItemCount() > 0){ 
    469540    appID = ui->tree_install_apps->currentItem()->whatsThis(0); 
    470541  } 
     542  //See if this one is actually installed 
     543  appID = PBI->isInstalled(appID); 
    471544  if(appID.isEmpty()){ 
    472     ui->group_install_info->setVisible(FALSE); 
    473     return; 
     545    ui->tool_install_details->setEnabled(false); 
    474546  }else{ 
    475     ui->group_install_info->setVisible( ui->group_install_showinfo->isChecked() );         
    476   } 
    477   if(!statusonly){ 
    478     //Get the PBI info for that item 
     547    ui->tool_install_details->setEnabled(true);    
     548  } 
     549     
     550} 
     551 
     552void MainUI::updateInstallDetails(QString appID){ 
     553  //Get the information to update the details page 
     554  //Get the PBI info for that item 
    479555    QStringList vals;  
    480     vals << "name" << "icon" << "author" << "website" << "version" << "license"; 
     556    vals << "name" << "icon" << "author" << "website" << "version" << "license" << "description" << "maintainer" << "date" << "arch"; 
    481557    QStringList bools; 
    482558    bools << "autoupdate" << "hasdesktopicons" << "hasmenuicons" << "requiresroot"; 
     
    485561    //Make sure the info lists are not empty 
    486562    if(vals.isEmpty() || bools.isEmpty()){ 
    487       ui->group_install_info->setVisible(FALSE); 
     563      ui->tool_install_details->setEnabled(false); 
    488564      return;  
    489565    } 
     
    503579    //Now display that info on the UI 
    504580    ui->label_install_app->setText(vals[0]); 
    505     ui->label_install_icon->setPixmap( QPixmap(vals[1]) ); 
     581    ui->label_install_icon->setPixmap( QPixmap(vals[1]).scaled(64,64, Qt::KeepAspectRatio, Qt::SmoothTransformation) ); 
    506582    if(vals[3].isEmpty()){  
    507583      ui->label_install_author->setText(vals[2]);  
     
    511587      ui->label_install_author->setToolTip(vals[3]); //show website URL as tooltip 
    512588    } 
     589    ui->label_install_version->setText(vals[4]); 
    513590    ui->label_install_license->setText(vals[5]); 
    514     ui->label_install_version->setText(vals[4]); 
     591    ui->text_install_description->setPlainText(vals[6]); 
     592    ui->tool_install_maintainer->setVisible( vals[7].contains("@") ); 
     593    ui->label_install_date->setText(vals[8]); 
     594    ui->label_install_arch->setText(vals[9]); 
    515595    ui->label_install_shortcuts->setText(shortcuts); 
    516596    ui->check_install_autoupdate->setChecked(autoupdate); 
     
    555635      }    
    556636    } 
    557   } 
     637 
    558638  //Update the current status indicators 
    559639  QString stat = PBI->currentAppStatus(appID,true); //get the raw status 
    560   if(stat.isEmpty() || stat == "DLSTART"  || stat == "DLDONE"){ 
     640  QString statF = PBI->currentAppStatus(appID, false); //get the non-raw status 
     641  if( stat.isEmpty() && statF.isEmpty() ){ 
    561642    //Not currently running - hide the display indicators 
    562     ui->group_install_appStat->setVisible(FALSE); 
     643    ui->group_install_appStat->setVisible(false); 
    563644  }else if(stat.startsWith("DLSTAT::")){ 
    564645    //Currently downloading - show download status indicators 
     
    573654      ui->progress_install_DL->setMinimum(0); ui->progress_install_DL->setMaximum(0); 
    574655    }else{ 
    575       ui->progress_install_DL->setMinimum(0); ui->progress_install_DL->setMaximum(100); 
    576       ui->progress_install_DL->setValue( int(percent.toFloat()) ); 
     656      ui->progress_install_DL->setMinimum(0); ui->progress_install_DL->setMaximum(1000); 
     657      ui->progress_install_DL->setValue( int(percent.toFloat()*10) ); 
    577658    } 
    578659    if(speed == "??"){ ui->label_install_DL->setVisible(FALSE); } 
     
    583664  }else{ 
    584665    //Currently installing/removing/updating - show last message from process 
    585     ui->label_install_status->setText(stat); 
     666    if(!statF.isEmpty()){ ui->label_install_status->setText(statF); } 
     667    else{ ui->label_install_status->setText(stat); } 
    586668    ui->group_install_appStat->setVisible(TRUE); 
    587669      ui->progress_install_DL->setVisible(FALSE); 
     
    616698  if(shownotification){ qDebug() << "No Repo Available: De-activating the Browser"; } 
    617699  ui->tabWidget->setCurrentWidget(ui->tab_installed); 
    618   ui->tool_install_gotobrowserpage->setEnabled(FALSE); 
    619700  ui->tab_browse->setEnabled(FALSE); 
    620701  slotDisplayStats(); 
     
    626707  slotUpdateBrowserHome(); 
    627708  //And allow the user to go there 
    628   ui->tool_install_gotobrowserpage->setEnabled(TRUE); 
    629709  ui->tab_browse->setEnabled(TRUE); 
    630710  slotDisplayStats(); 
     
    917997    //Refresh the app page if that is the one currently showing 
    918998    if(ui->stacked_browser->currentWidget() == ui->page_app){ on_tool_browse_app_clicked(); }      
     999  }else{ 
     1000    //Always return to the installed list 
     1001    ui->stackedWidget->setCurrentWidget(ui->page_install_list); 
    9191002  } 
    9201003} 
  • src-qt4/pc-softwaremanager/mainUI.h

    r6156865 r2916111  
    2121#include <QFileDialog> 
    2222#include <QCloseEvent> 
     23#include <QDesktopServices> 
     24#include <QUrl> 
    2325 
    2426/* Local Includes */ 
     
    5557  //INSTALLED TAB 
    5658  void slotRefreshInstallTab(); 
     59  void slotCheckSelectedItems(); 
    5760  void slotPBIStatusUpdate(QString); 
    58   void on_group_install_showinfo_toggled(bool); 
     61  void on_tool_install_details_clicked(); 
     62  void on_tool_install_back_clicked(); 
    5963  void on_tool_install_gotobrowserpage_clicked(); 
    6064  void on_tool_install_toggleall_clicked(); 
    6165  void on_tree_install_apps_itemSelectionChanged(); 
     66  void on_tree_install_apps_itemDoubleClicked(QTreeWidgetItem *item); 
    6267  void on_check_install_autoupdate_clicked(); 
    6368  void on_tool_install_update_clicked(); 
    6469  void on_tool_install_remove_clicked(); 
    6570  void on_tool_install_cancel_clicked(); 
     71  void on_tool_install_maintainer_clicked(); 
    6672  void slotActionAddDesktop(); 
    6773  void slotActionRemoveDesktop(); 
     
    7985  void slotActionCancel(); 
    8086  void slotStartApp(QAction*); 
    81   void slotUpdateSelectedPBI(bool statusonly=false); 
    82    
     87  void slotUpdateSelectedPBI(); 
     88  void updateInstallDetails(QString appID); 
    8389  //BROWSER TAB 
    8490  void slotDisableBrowser(bool shownotification = TRUE); 
  • src-qt4/pc-softwaremanager/mainUI.ui

    r705a8ca r2916111  
    77    <x>0</x> 
    88    <y>0</y> 
    9     <width>509</width> 
    10     <height>553</height> 
     9    <width>475</width> 
     10    <height>623</height> 
    1111   </rect> 
    1212  </property> 
     
    4242        <string>Installed</string> 
    4343       </attribute> 
    44        <layout class="QVBoxLayout" name="verticalLayout_2"> 
    45         <item> 
    46          <widget class="QFrame" name="frame"> 
    47           <property name="sizePolicy"> 
    48            <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> 
    49             <horstretch>0</horstretch> 
    50             <verstretch>0</verstretch> 
    51            </sizepolicy> 
    52           </property> 
    53           <property name="frameShape"> 
    54            <enum>QFrame::StyledPanel</enum> 
    55           </property> 
    56           <property name="frameShadow"> 
    57            <enum>QFrame::Raised</enum> 
    58           </property> 
    59           <layout class="QVBoxLayout" name="verticalLayout_3"> 
    60            <item> 
    61             <widget class="QTreeWidget" name="tree_install_apps"> 
    62              <property name="iconSize"> 
    63               <size> 
    64                <width>16</width> 
    65                <height>16</height> 
    66               </size> 
     44       <widget class="QStackedWidget" name="stackedWidget"> 
     45        <property name="geometry"> 
     46         <rect> 
     47          <x>6</x> 
     48          <y>6</y> 
     49          <width>451</width> 
     50          <height>535</height> 
     51         </rect> 
     52        </property> 
     53        <property name="styleSheet"> 
     54         <string notr="true"/> 
     55        </property> 
     56        <property name="currentIndex"> 
     57         <number>1</number> 
     58        </property> 
     59        <widget class="QWidget" name="page_install_list"> 
     60         <layout class="QVBoxLayout" name="verticalLayout_21"> 
     61          <item> 
     62           <layout class="QHBoxLayout" name="horizontalLayout"> 
     63            <item> 
     64             <widget class="QToolButton" name="tool_install_toggleall"> 
     65              <property name="statusTip"> 
     66               <string>Check/Uncheck all applications</string> 
     67              </property> 
     68              <property name="text"> 
     69               <string>All</string> 
     70              </property> 
     71              <property name="icon"> 
     72               <iconset resource="SoftwareManager.qrc"> 
     73                <normaloff>:/icons/dialog-ok.png</normaloff>:/icons/dialog-ok.png</iconset> 
     74              </property> 
     75              <property name="toolButtonStyle"> 
     76               <enum>Qt::ToolButtonTextBesideIcon</enum> 
     77              </property> 
     78             </widget> 
     79            </item> 
     80            <item> 
     81             <spacer name="horizontalSpacer"> 
     82              <property name="orientation"> 
     83               <enum>Qt::Horizontal</enum> 
     84              </property> 
     85              <property name="sizeHint" stdset="0"> 
     86               <size> 
     87                <width>40</width> 
     88                <height>20</height> 
     89               </size> 
     90              </property> 
     91             </spacer> 
     92            </item> 
     93            <item> 
     94             <widget class="QToolButton" name="tool_install_performaction"> 
     95              <property name="statusTip"> 
     96               <string>Perform actions on checked applications</string> 
     97              </property> 
     98              <property name="text"> 
     99               <string>Actions</string> 
     100              </property> 
     101              <property name="icon"> 
     102               <iconset resource="SoftwareManager.qrc"> 
     103                <normaloff>:/icons/preferences-system.png</normaloff>:/icons/preferences-system.png</iconset> 
     104              </property> 
     105              <property name="toolButtonStyle"> 
     106               <enum>Qt::ToolButtonTextBesideIcon</enum> 
     107              </property> 
     108              <property name="arrowType"> 
     109               <enum>Qt::NoArrow</enum> 
     110              </property> 
     111             </widget> 
     112            </item> 
     113           </layout> 
     114          </item> 
     115          <item> 
     116           <widget class="QTreeWidget" name="tree_install_apps"> 
     117            <property name="iconSize"> 
     118             <size> 
     119              <width>16</width> 
     120              <height>16</height> 
     121             </size> 
     122            </property> 
     123            <property name="indentation"> 
     124             <number>0</number> 
     125            </property> 
     126            <attribute name="headerCascadingSectionResizes"> 
     127             <bool>true</bool> 
     128            </attribute> 
     129            <attribute name="headerDefaultSectionSize"> 
     130             <number>120</number> 
     131            </attribute> 
     132            <column> 
     133             <property name="text"> 
     134              <string>Program Name</string> 
    67135             </property> 
    68              <property name="indentation"> 
    69               <number>0</number> 
     136            </column> 
     137            <column> 
     138             <property name="text"> 
     139              <string>Version</string> 
    70140             </property> 
    71              <attribute name="headerCascadingSectionResizes"> 
    72               <bool>true</bool> 
    73              </attribute> 
    74              <attribute name="headerDefaultSectionSize"> 
    75               <number>120</number> 
    76              </attribute> 
    77              <column> 
     141            </column> 
     142            <column> 
     143             <property name="text"> 
     144              <string>Status</string> 
     145             </property> 
     146            </column> 
     147           </widget> 
     148          </item> 
     149          <item> 
     150           <layout class="QHBoxLayout" name="horizontalLayout_2"> 
     151            <item> 
     152             <widget class="QToolButton" name="tool_install_gotobrowserpage"> 
    78153              <property name="text"> 
    79                <string>Program Name</string> 
    80               </property> 
    81              </column> 
    82              <column> 
     154               <string>Find in Repository</string> 
     155              </property> 
     156              <property name="icon"> 
     157               <iconset resource="SoftwareManager.qrc"> 
     158                <normaloff>:/icons/edit-find.png</normaloff>:/icons/edit-find.png</iconset> 
     159              </property> 
     160              <property name="toolButtonStyle"> 
     161               <enum>Qt::ToolButtonTextBesideIcon</enum> 
     162              </property> 
     163             </widget> 
     164            </item> 
     165            <item> 
     166             <spacer name="horizontalSpacer_2"> 
     167              <property name="orientation"> 
     168               <enum>Qt::Horizontal</enum> 
     169              </property> 
     170              <property name="sizeHint" stdset="0"> 
     171               <size> 
     172                <width>40</width> 
     173                <height>20</height> 
     174               </size> 
     175              </property> 
     176             </spacer> 
     177            </item> 
     178            <item> 
     179             <widget class="QToolButton" name="tool_install_details"> 
    83180              <property name="text"> 
    84                <string>Version</string> 
    85               </property> 
    86              </column> 
    87              <column> 
    88               <property name="text"> 
    89                <string>Status</string> 
    90               </property> 
    91              </column> 
    92             </widget> 
    93            </item> 
    94            <item> 
    95             <layout class="QHBoxLayout" name="horizontalLayout"> 
     181               <string>Application Details</string> 
     182              </property> 
     183              <property name="icon"> 
     184               <iconset resource="SoftwareManager.qrc"> 
     185                <normaloff>:/icons/go-next.png</normaloff>:/icons/go-next.png</iconset> 
     186              </property> 
     187              <property name="toolButtonStyle"> 
     188               <enum>Qt::ToolButtonTextBesideIcon</enum> 
     189              </property> 
     190             </widget> 
     191            </item> 
     192           </layout> 
     193          </item> 
     194         </layout> 
     195        </widget> 
     196        <widget class="QWidget" name="page_install_details"> 
     197         <layout class="QVBoxLayout" name="verticalLayout_2"> 
     198          <item> 
     199           <widget class="QFrame" name="frame"> 
     200            <property name="styleSheet"> 
     201             <string notr="true">QFrame{background-color: rgba(250,250,250,170);}</string> 
     202            </property> 
     203            <property name="frameShape"> 
     204             <enum>QFrame::StyledPanel</enum> 
     205            </property> 
     206            <property name="frameShadow"> 
     207             <enum>QFrame::Raised</enum> 
     208            </property> 
     209            <layout class="QHBoxLayout" name="horizontalLayout_11"> 
     210             <property name="spacing"> 
     211              <number>2</number> 
     212             </property> 
     213             <property name="margin"> 
     214              <number>2</number> 
     215             </property> 
    96216             <item> 
    97               <widget class="QToolButton" name="tool_install_toggleall"> 
    98                <property name="statusTip"> 
    99                 <string>Check/Uncheck all applications</string> 
    100                </property> 
     217              <widget class="QToolButton" name="tool_install_back"> 
    101218               <property name="text"> 
    102                 <string>All</string> 
     219                <string>Back</string> 
    103220               </property> 
    104221               <property name="icon"> 
    105222                <iconset resource="SoftwareManager.qrc"> 
    106                  <normaloff>:/icons/dialog-ok.png</normaloff>:/icons/dialog-ok.png</iconset> 
     223                 <normaloff>:/icons/go-previous.png</normaloff>:/icons/go-previous.png</iconset> 
    107224               </property> 
    108225               <property name="toolButtonStyle"> 
     
    112229             </item> 
    113230             <item> 
    114               <spacer name="horizontalSpacer"> 
     231              <spacer name="horizontalSpacer_7"> 
    115232               <property name="orientation"> 
    116233                <enum>Qt::Horizontal</enum> 
     
    118235               <property name="sizeHint" stdset="0"> 
    119236                <size> 
    120                  <width>40</width> 
     237                 <width>0</width> 
    121238                 <height>20</height> 
    122239                </size> 
     
    125242             </item> 
    126243             <item> 
    127               <widget class="QToolButton" name="tool_install_performaction"> 
     244              <widget class="QToolButton" name="tool_install_remove"> 
     245               <property name="toolTip"> 
     246                <string>Remove the selected application</string> 
     247               </property> 
    128248               <property name="statusTip"> 
    129                 <string>Perform actions on checked applications</string> 
     249                <string>Remove the selected application</string> 
    130250               </property> 
    131251               <property name="text"> 
    132                 <string>Actions</string> 
     252                <string>Uninstall</string> 
    133253               </property> 
    134254               <property name="icon"> 
    135255                <iconset resource="SoftwareManager.qrc"> 
    136                  <normaloff>:/icons/preferences-system.png</normaloff>:/icons/preferences-system.png</iconset> 
     256                 <normaloff>:/icons/remove.png</normaloff>:/icons/remove.png</iconset> 
    137257               </property> 
    138258               <property name="toolButtonStyle"> 
    139259                <enum>Qt::ToolButtonTextBesideIcon</enum> 
    140260               </property> 
    141                <property name="arrowType"> 
    142                 <enum>Qt::NoArrow</enum> 
    143                </property> 
    144261              </widget> 
    145262             </item> 
    146263            </layout> 
    147            </item> 
    148           </layout> 
    149          </widget> 
    150         </item> 
    151         <item> 
    152          <widget class="QGroupBox" name="group_install_showinfo"> 
    153           <property name="sizePolicy"> 
    154            <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> 
    155             <horstretch>0</horstretch> 
    156             <verstretch>0</verstretch> 
    157            </sizepolicy> 
    158           </property> 
    159           <property name="font"> 
    160            <font> 
    161             <weight>75</weight> 
    162             <bold>true</bold> 
    163            </font> 
    164           </property> 
    165           <property name="statusTip"> 
    166            <string/> 
    167           </property> 
    168           <property name="styleSheet"> 
    169            <string notr="true">QGroupBox::indicator:unchecked{ 
    170 image: url(:icons/arrow-down.png); 
    171 } 
    172 QGroupBox::indicator:checked{ 
    173 image: url(:icons/arrow-up.png); 
    174 } 
    175 QGroupBox::title{ 
    176 spacing: 1px; 
    177 }</string> 
    178           </property> 
    179           <property name="title"> 
    180            <string>Application Details</string> 
    181           </property> 
    182           <property name="checkable"> 
    183            <bool>true</bool> 
    184           </property> 
    185           <property name="checked"> 
    186            <bool>true</bool> 
    187           </property> 
    188           <layout class="QVBoxLayout" name="verticalLayout_17"> 
    189            <item> 
    190             <widget class="QGroupBox" name="group_install_info"> 
    191              <property name="styleSheet"> 
    192               <string notr="true">QGroupBox#group_install_info{  
    193 background: rgba( 245,242,240,150);  
    194 border: 1px solid grey; 
    195 border-radius: 5px; 
    196 }</string> 
    197              </property> 
    198              <property name="title"> 
    199               <string/> 
    200              </property> 
    201              <property name="flat"> 
    202               <bool>true</bool> 
    203              </property> 
    204              <layout class="QGridLayout" name="gridLayout_3"> 
    205               <property name="leftMargin"> 
    206                <number>3</number> 
    207               </property> 
    208               <property name="topMargin"> 
    209                <number>3</number> 
    210               </property> 
    211               <property name="rightMargin"> 
    212                <number>3</number> 
    213               </property> 
    214               <property name="bottomMargin"> 
    215                <number>0</number> 
    216               </property> 
    217               <item row="1" column="1" rowspan="2"> 
    218                <layout class="QFormLayout" name="formLayout"> 
    219                 <property name="fieldGrowthPolicy"> 
    220                  <enum>QFormLayout::ExpandingFieldsGrow</enum> 
     264           </widget> 
     265          </item> 
     266          <item> 
     267           <layout class="QHBoxLayout" name="horizontalLayout_6"> 
     268            <item> 
     269             <widget class="QLabel" name="label_install_icon"> 
     270              <property name="sizePolicy"> 
     271               <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> 
     272                <horstretch>0</horstretch> 
     273                <verstretch>0</verstretch> 
     274               </sizepolicy> 
     275              </property> 
     276              <property name="maximumSize"> 
     277               <size> 
     278                <width>64</width> 
     279                <height>64</height> 
     280               </size> 
     281              </property> 
     282              <property name="text"> 
     283               <string/> 
     284              </property> 
     285              <property name="pixmap"> 
     286               <pixmap resource="SoftwareManager.qrc">:/icons/appcafe.png</pixmap> 
     287              </property> 
     288              <property name="scaledContents"> 
     289               <bool>false</bool> 
     290              </property> 
     291             </widget> 
     292            </item> 
     293            <item> 
     294             <layout class="QVBoxLayout" name="verticalLayout_3"> 
     295              <item> 
     296               <widget class="QLabel" name="label_install_app"> 
     297                <property name="font"> 
     298                 <font> 
     299                  <pointsize>12</pointsize> 
     300                  <weight>75</weight> 
     301                  <bold>true</bold> 
     302                  <underline>true</underline> 
     303                 </font> 
    221304                </property> 
    222                 <item row="0" column="0"> 
    223                  <widget class="QLabel" name="label"> 
    224                   <property name="text"> 
    225                    <string>Version:</string> 
    226                   </property> 
    227                  </widget> 
    228                 </item> 
    229                 <item row="0" column="1"> 
    230                  <widget class="QLabel" name="label_install_version"> 
    231                   <property name="text"> 
    232                    <string notr="true">x.xx.x</string> 
    233                   </property> 
    234                  </widget> 
    235                 </item> 
    236                 <item row="1" column="0"> 
    237                  <widget class="QLabel" name="label_3"> 
    238                   <property name="text"> 
    239                    <string>Author:</string> 
    240                   </property> 
    241                  </widget> 
    242                 </item> 
    243                 <item row="1" column="1"> 
    244                  <widget class="QLabel" name="label_install_author"> 
    245                   <property name="text"> 
    246                    <string notr="true">&lt;a href=&quot;http://www.pcbsd.org&quot;&gt;PC_BSD&lt;/a&gt;</string> 
    247                   </property> 
    248                   <property name="openExternalLinks"> 
    249                    <bool>true</bool> 
    250                   </property> 
    251                   <property name="textInteractionFlags"> 
    252                    <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set> 
    253                   </property> 
    254                  </widget> 
    255                 </item> 
    256                 <item row="2" column="0"> 
    257                  <widget class="QLabel" name="label_4"> 
    258                   <property name="text"> 
    259                    <string>License:</string> 
    260                   </property> 
    261                  </widget> 
    262                 </item> 
    263                 <item row="2" column="1"> 
    264                  <widget class="QLabel" name="label_install_license"> 
    265                   <property name="text"> 
    266                    <string notr="true">BSD</string> 
    267                   </property> 
    268                  </widget> 
    269                 </item> 
    270                 <item row="3" column="0"> 
    271                  <widget class="QLabel" name="label_2"> 
    272                   <property name="text"> 
    273                    <string>Shortcuts:</string> 
    274                   </property> 
    275                  </widget> 
    276                 </item> 
    277                 <item row="3" column="1"> 
    278                  <widget class="QLabel" name="label_install_shortcuts"> 
    279                   <property name="text"> 
    280                    <string notr="true">Desktop, Menu</string> 
    281                   </property> 
    282                  </widget> 
    283                 </item> 
    284                </layout> 
     305                <property name="text"> 
     306                 <string notr="true">Application</string> 
     307                </property> 
     308                <property name="alignment"> 
     309                 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> 
     310                </property> 
     311               </widget> 
    285312              </item> 
    286               <item row="1" column="0"> 
    287                <layout class="QVBoxLayout" name="verticalLayout_13"> 
    288                 <item> 
    289                  <widget class="QLabel" name="label_install_icon"> 
    290                   <property name="maximumSize"> 
    291                    <size> 
    292                     <width>64</width> 
    293                     <height>64</height> 
    294                    </size> 
    295                   </property> 
    296                   <property name="text"> 
    297                    <string/> 
    298                   </property> 
    299                   <property name="pixmap"> 
    300                    <pixmap resource="SoftwareManager.qrc">:/icons/appcafe.png</pixmap> 
    301                   </property> 
    302                   <property name="scaledContents"> 
    303                    <bool>true</bool> 
    304                   </property> 
    305                  </widget> 
    306                 </item> 
    307                </layout> 
    308               </item> 
    309               <item row="0" column="3" rowspan="3"> 
    310                <layout class="QVBoxLayout" name="verticalLayout_10"> 
    311                 <item> 
    312                  <layout class="QHBoxLayout" name="horizontalLayout_6"> 
    313                   <item> 
    314                    <widget class="QToolButton" name="tool_install_startApp"> 
    315                     <property name="statusTip"> 
    316                      <string>Start the application</string> 
    317                     </property> 
    318                     <property name="text"> 
    319                      <string>...</string> 
    320                     </property> 
    321                     <property name="icon"> 
    322                      <iconset resource="SoftwareManager.qrc"> 
    323                       <normaloff>:/icons/application.png</normaloff>:/icons/application.png</iconset> 
    324                     </property> 
    325                     <property name="popupMode"> 
    326                      <enum>QToolButton::InstantPopup</enum> 
    327                     </property> 
    328                    </widget> 
    329                   </item> 
    330                   <item> 
    331                    <spacer name="horizontalSpacer_7"> 
    332                     <property name="orientation"> 
    333                      <enum>Qt::Horizontal</enum> 
    334                     </property> 
    335                     <property name="sizeHint" stdset="0"> 
    336                      <size> 
    337                       <width>0</width> 
    338                       <height>20</height> 
    339                      </size> 
    340                     </property> 
    341                    </spacer> 
    342                   </item> 
    343                   <item> 
    344                    <widget class="QToolButton" name="tool_install_cancel"> 
    345                     <property name="toolTip"> 
    346                      <string>Cancel any actions for this application</string> 
    347                     </property> 
    348                     <property name="statusTip"> 
    349                      <string>Cancel any actions for this application</string> 
    350                     </property> 
    351                     <property name="text"> 
    352                      <string>...</string> 
    353                     </property> 
    354                     <property name="icon"> 
    355                      <iconset resource="SoftwareManager.qrc"> 
    356                       <normaloff>:/icons/dialog-cancel.png</normaloff>:/icons/dialog-cancel.png</iconset> 
    357                     </property> 
    358                    </widget> 
    359                   </item> 
    360                   <item> 
    361                    <widget class="QToolButton" name="tool_install_remove"> 
    362                     <property name="toolTip"> 
    363                      <string>Remove the selected application</string> 
    364                     </property> 
    365                     <property name="statusTip"> 
    366                      <string>Remove the selected application</string> 
    367                     </property> 
    368                     <property name="text"> 
    369                      <string>Uninstall</string> 
    370                     </property> 
    371                     <property name="icon"> 
    372                      <iconset resource="SoftwareManager.qrc"> 
    373                       <normaloff>:/icons/remove.png</normaloff>:/icons/remove.png</iconset> 
    374                     </property> 
    375                    </widget> 
    376                   </item> 
    377                   <item> 
    378                    <widget class="QToolButton" name="tool_install_update"> 
    379                     <property name="toolTip"> 
    380                      <string>Update the application to the most recent version</string> 
    381                     </property> 
    382                     <property name="statusTip"> 
    383                      <string>Update the selected application</string> 
    384                     </property> 
    385                     <property name="text"> 
    386                      <string>Update Application</string> 
    387                     </property> 
    388                     <property name="icon"> 
    389                      <iconset resource="SoftwareManager.qrc"> 
    390                       <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 
    391                     </property> 
    392                     <property name="toolButtonStyle"> 
    393                      <enum>Qt::ToolButtonIconOnly</enum> 
    394                     </property> 
    395                    </widget> 
    396                   </item> 
    397                  </layout> 
    398                 </item> 
    399                 <item> 
    400                  <widget class="Line" name="line_2"> 
    401                   <property name="orientation"> 
    402                    <enum>Qt::Horizontal</enum> 
    403                   </property> 
    404                  </widget> 
    405                 </item> 
    406                 <item> 
    407                  <spacer name="verticalSpacer"> 
    408                   <property name="orientation"> 
    409                    <enum>Qt::Vertical</enum> 
    410                   </property> 
    411                   <property name="sizeType"> 
    412                    <enum>QSizePolicy::MinimumExpanding</enum> 
    413                   </property> 
    414                   <property name="sizeHint" stdset="0"> 
    415                    <size> 
    416                     <width>20</width> 
    417                     <height>0</height> 
    418                    </size> 
    419                   </property> 
    420                  </spacer> 
    421                 </item> 
    422                 <item> 
    423                  <widget class="QToolButton" name="tool_install_gotobrowserpage"> 
    424                   <property name="sizePolicy"> 
    425                    <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> 
    426                     <horstretch>0</horstretch> 
    427                     <verstretch>0</verstretch> 
    428                    </sizepolicy> 
    429                   </property> 
    430                   <property name="statusTip"> 
    431                    <string>Open the browser page for the selected application</string> 
    432                   </property> 
    433                   <property name="text"> 
    434                    <string>Product Page</string> 
    435                   </property> 
    436                   <property name="icon"> 
    437                    <iconset resource="SoftwareManager.qrc"> 
    438                     <normaloff>:/icons/appcafe.png</normaloff>:/icons/appcafe.png</iconset> 
    439                   </property> 
    440                   <property name="toolButtonStyle"> 
    441                    <enum>Qt::ToolButtonTextBesideIcon</enum> 
    442                   </property> 
    443                  </widget> 
    444                 </item> 
    445                 <item> 
    446                  <widget class="QCheckBox" name="check_install_autoupdate"> 
    447                   <property name="statusTip"> 
    448                    <string>Automatically update the selected application when an update is available</string> 
    449                   </property> 
    450                   <property name="text"> 
    451                    <string>Auto-Update</string> 
    452                   </property> 
    453                   <property name="icon"> 
    454                    <iconset resource="SoftwareManager.qrc"> 
    455                     <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 
    456                   </property> 
    457                  </widget> 
    458                 </item> 
    459                </layout> 
    460               </item> 
    461               <item row="0" column="0" colspan="3"> 
    462                <layout class="QHBoxLayout" name="horizontalLayout_2"> 
    463                 <item> 
    464                  <widget class="QLabel" name="label_install_app"> 
    465                   <property name="font"> 
    466                    <font> 
    467                     <weight>75</weight> 
    468                     <bold>true</bold> 
    469                     <underline>true</underline> 
    470                    </font> 
    471                   </property> 
    472                   <property name="text"> 
    473                    <string notr="true">Application</string> 
    474                   </property> 
    475                  </widget> 
    476                 </item> 
    477                </layout> 
    478               </item> 
    479               <item row="3" column="0" colspan="4"> 
    480                <widget class="QGroupBox" name="group_install_appStat"> 
    481                 <property name="title"> 
    482                  <string/> 
     313              <item> 
     314               <widget class="QLabel" name="label_install_author"> 
     315                <property name="text"> 
     316                 <string notr="true">&lt;a href=&quot;http://www.pcbsd.org&quot;&gt;PC_BSD&lt;/a&gt;</string> 
    483317                </property> 
    484                 <property name="flat"> 
     318                <property name="alignment"> 
     319                 <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> 
     320                </property> 
     321                <property name="openExternalLinks"> 
    485322                 <bool>true</bool> 
    486323                </property> 
    487                 <layout class="QVBoxLayout" name="verticalLayout_18"> 
    488                  <item> 
    489                   <widget class="Line" name="line_3"> 
    490                    <property name="orientation"> 
    491                     <enum>Qt::Horizontal</enum> 
    492                    </property> 
    493                   </widget> 
    494                  </item> 
    495                  <item> 
    496                   <widget class="QLabel" name="label_install_status"> 
    497                    <property name="text"> 
    498                     <string notr="true">TextLabel</string> 
    499                    </property> 
    500                    <property name="wordWrap"> 
    501                     <bool>true</bool> 
    502                    </property> 
    503                   </widget> 
    504                  </item> 
    505                  <item> 
    506                   <layout class="QHBoxLayout" name="horizontalLayout_9"> 
    507                    <item> 
    508                     <widget class="QProgressBar" name="progress_install_DL"> 
    509                      <property name="value"> 
    510                       <number>24</number> 
    511                      </property> 
    512                     </widget> 
    513                    </item> 
    514                    <item> 
    515                     <widget class="QLabel" name="label_install_DL"> 
    516                      <property name="minimumSize"> 
    517                       <size> 
    518                        <width>80</width> 
    519                        <height>0</height> 
    520                       </size> 
    521                      </property> 
    522                      <property name="text"> 
    523                       <string notr="true">label</string> 
    524                      </property> 
    525                      <property name="alignment"> 
    526                       <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> 
    527                      </property> 
    528                     </widget> 
    529                    </item> 
    530                   </layout> 
    531                  </item> 
    532                 </layout> 
     324                <property name="textInteractionFlags"> 
     325                 <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set> 
     326                </property> 
    533327               </widget> 
    534328              </item> 
    535               <item row="1" column="2" rowspan="2"> 
    536                <spacer name="horizontalSpacer_2"> 
    537                 <property name="orientation"> 
    538                  <enum>Qt::Horizontal</enum> 
    539                 </property> 
    540                 <property name="sizeHint" stdset="0"> 
    541                  <size> 
    542                   <width>40</width> 
    543                   <height>20</height> 
    544                  </size> 
    545                 </property> 
    546                </spacer> 
    547               </item> 
    548329             </layout> 
    549             </widget> 
    550            </item> 
    551           </layout> 
    552          </widget> 
    553         </item> 
    554        </layout> 
     330            </item> 
     331           </layout> 
     332          </item> 
     333          <item> 
     334           <widget class="QFrame" name="frame_2"> 
     335            <property name="styleSheet"> 
     336             <string notr="true"/> 
     337            </property> 
     338            <property name="frameShape"> 
     339             <enum>QFrame::StyledPanel</enum> 
     340            </property> 
     341            <property name="frameShadow"> 
     342             <enum>QFrame::Raised</enum> 
     343            </property> 
     344            <layout class="QHBoxLayout" name="horizontalLayout_14"> 
     345             <property name="margin"> 
     346              <number>2</number> 
     347             </property> 
     348             <item> 
     349              <layout class="QFormLayout" name="formLayout_7"> 
     350               <property name="fieldGrowthPolicy"> 
     351                <enum>QFormLayout::ExpandingFieldsGrow</enum> 
     352               </property> 
     353               <item row="0" column="0"> 
     354                <widget class="QLabel" name="label_3"> 
     355                 <property name="text"> 
     356                  <string>Created:</string> 
     357                 </property> 
     358                </widget> 
     359               </item> 
     360               <item row="1" column="0"> 
     361                <widget class="QLabel" name="label_5"> 
     362                 <property name="text"> 
     363                  <string>Architecture:</string> 
     364                 </property> 
     365                </widget> 
     366               </item> 
     367               <item row="0" column="1"> 
     368                <widget class="QLabel" name="label_install_date"> 
     369                 <property name="text"> 
     370                  <string notr="true">Build Date</string> 
     371                 </property> 
     372                </widget> 
     373               </item> 
     374               <item row="1" column="1"> 
     375                <widget class="QLabel" name="label_install_arch"> 
     376                 <property name="text"> 
     377                  <string notr="true">arch</string> 
     378                 </property> 
     379                </widget> 
     380               </item> 
     381               <item row="2" column="0"> 
     382                <widget class="QLabel" name="label"> 
     383                 <property name="text"> 
     384                  <string>Version:</string> 
     385                 </property> 
     386                </widget> 
     387               </item> 
     388               <item row="2" column="1"> 
     389                <widget class="QLabel" name="label_install_version"> 
     390                 <property name="text"> 
     391                  <string notr="true">x.xx.x</string> 
     392                 </property> 
     393                </widget> 
     394               </item> 
     395              </layout> 
     396             </item> 
     397             <item> 
     398              <layout class="QFormLayout" name="formLayout"> 
     399               <property name="fieldGrowthPolicy"> 
     400                <enum>QFormLayout::ExpandingFieldsGrow</enum> 
     401               </property> 
     402               <item row="0" column="0"> 
     403                <widget class="QLabel" name="label_4"> 
     404                 <property name="text"> 
     405                  <string>License:</string> 
     406                 </property> 
     407                </widget> 
     408               </item> 
     409               <item row="0" column="1"> 
     410                <widget class="QLabel" name="label_install_license"> 
     411                 <property name="text"> 
     412                  <string notr="true">BSD</string> 
     413                 </property> 
     414                </widget> 
     415               </item> 
     416               <item row="1" column="0"> 
     417                <widget class="QLabel" name="label_2"> 
     418                 <property name="text"> 
     419                  <string>Shortcuts:</string> 
     420                 </property> 
     421                </widget> 
     422               </item> 
     423               <item row="1" column="1"> 
     424                <widget class="QLabel" name="label_install_shortcuts"> 
     425                 <property name="text"> 
     426                  <string notr="true">Desktop, Menu</string> 
     427                 </property> 
     428                </widget> 
     429               </item> 
     430              </layout> 
     431             </item> 
     432            </layout> 
     433           </widget> 
     434          </item> 
     435          <item> 
     436           <widget class="QPlainTextEdit" name="text_install_description"> 
     437            <property name="sizePolicy"> 
     438             <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> 
     439              <horstretch>0</horstretch> 
     440              <verstretch>0</verstretch> 
     441             </sizepolicy> 
     442            </property> 
     443            <property name="readOnly"> 
     444             <bool>true</bool> 
     445            </property> 
     446           </widget> 
     447          </item> 
     448          <item> 
     449           <layout class="QHBoxLayout" name="horizontalLayout_12"> 
     450            <property name="margin"> 
     451             <number>1</number> 
     452            </property> 
     453            <item> 
     454             <widget class="QToolButton" name="tool_install_startApp"> 
     455              <property name="statusTip"> 
     456               <string>Start the application</string> 
     457              </property> 
     458              <property name="text"> 
     459               <string>Start Application</string> 
     460              </property> 
     461              <property name="icon"> 
     462               <iconset resource="SoftwareManager.qrc"> 
     463                <normaloff>:/icons/application.png</normaloff>:/icons/application.png</iconset> 
     464              </property> 
     465              <property name="popupMode"> 
     466               <enum>QToolButton::InstantPopup</enum> 
     467              </property> 
     468              <property name="toolButtonStyle"> 
     469               <enum>Qt::ToolButtonTextBesideIcon</enum> 
     470              </property> 
     471             </widget> 
     472            </item> 
     473            <item> 
     474             <widget class="QToolButton" name="tool_install_maintainer"> 
     475              <property name="text"> 
     476               <string>Contact Maintainer</string> 
     477              </property> 
     478              <property name="icon"> 
     479               <iconset resource="SoftwareManager.qrc"> 
     480                <normaloff>:/icons/email.png</normaloff>:/icons/email.png</iconset> 
     481              </property> 
     482              <property name="popupMode"> 
     483               <enum>QToolButton::InstantPopup</enum> 
     484              </property> 
     485              <property name="toolButtonStyle"> 
     486               <enum>Qt::ToolButtonTextBesideIcon</enum> 
     487              </property> 
     488             </widget> 
     489            </item> 
     490            <item> 
     491             <spacer name="horizontalSpacer_9"> 
     492              <property name="orientation"> 
     493               <enum>Qt::Horizontal</enum> 
     494              </property> 
     495              <property name="sizeHint" stdset="0"> 
     496               <size> 
     497                <width>40</width> 
     498                <height>20</height> 
     499               </size> 
     500              </property> 
     501             </spacer> 
     502            </item> 
     503            <item> 
     504             <widget class="QCheckBox" name="check_install_autoupdate"> 
     505              <property name="statusTip"> 
     506               <string>Automatically update the selected application when an update is available</string> 
     507              </property> 
     508              <property name="text"> 
     509               <string>Auto-Update</string> 
     510              </property> 
     511              <property name="icon"> 
     512               <iconset resource="SoftwareManager.qrc"> 
     513                <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 
     514              </property> 
     515             </widget> 
     516            </item> 
     517           </layout> 
     518          </item> 
     519          <item> 
     520           <spacer name="verticalSpacer"> 
     521            <property name="orientation"> 
     522             <enum>Qt::Vertical</enum> 
     523            </property> 
     524            <property name="sizeHint" stdset="0"> 
     525             <size> 
     526              <width>20</width> 
     527              <height>20</height> 
     528             </size> 
     529            </property> 
     530           </spacer> 
     531          </item> 
     532          <item> 
     533           <widget class="QGroupBox" name="group_install_appStat"> 
     534            <property name="title"> 
     535             <string>Current Operations</string> 
     536            </property> 
     537            <property name="flat"> 
     538             <bool>true</bool> 
     539            </property> 
     540            <layout class="QVBoxLayout" name="verticalLayout_18"> 
     541             <item> 
     542              <layout class="QHBoxLayout" name="horizontalLayout_10"> 
     543               <item> 
     544                <widget class="QToolButton" name="tool_install_cancel"> 
     545                 <property name="sizePolicy"> 
     546                  <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> 
     547                   <horstretch>0</horstretch> 
     548                   <verstretch>0</verstretch> 
     549                  </sizepolicy> 
     550                 </property> 
     551                 <property name="toolTip"> 
     552                  <string>Cancel any actions for this application</string> 
     553                 </property> 
     554                 <property name="statusTip"> 
     555                  <string>Cancel any actions for this application</string> 
     556                 </property> 
     557                 <property name="text"> 
     558                  <string>Cancel Operations</string> 
     559                 </property> 
     560                 <property name="icon"> 
     561                  <iconset resource="SoftwareManager.qrc"> 
     562                   <normaloff>:/icons/dialog-cancel.png</normaloff>:/icons/dialog-cancel.png</iconset> 
     563                 </property> 
     564                 <property name="toolButtonStyle"> 
     565                  <enum>Qt::ToolButtonIconOnly</enum> 
     566                 </property> 
     567                </widget> 
     568               </item> 
     569               <item> 
     570                <widget class="QToolButton" name="tool_install_update"> 
     571                 <property name="toolTip"> 
     572                  <string>Update the application to the most recent version</string> 
     573                 </property> 
     574                 <property name="statusTip"> 
     575                  <string>Update the selected application</string> 
     576                 </property> 
     577                 <property name="text"> 
     578                  <string>Update</string> 
     579                 </property> 
     580                 <property name="icon"> 
     581                  <iconset resource="SoftwareManager.qrc"> 
     582                   <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 
     583                 </property> 
     584                 <property name="toolButtonStyle"> 
     585                  <enum>Qt::ToolButtonIconOnly</enum> 
     586                 </property> 
     587                </widget> 
     588               </item> 
     589               <item> 
     590                <widget class="QLabel" name="label_install_status"> 
     591                 <property name="sizePolicy"> 
     592                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> 
     593                   <horstretch>0</horstretch> 
     594                   <verstretch>0</verstretch> 
     595                  </sizepolicy> 
     596                 </property> 
     597                 <property name="text"> 
     598                  <string notr="true">TextLabel</string> 
     599                 </property> 
     600                 <property name="wordWrap"> 
     601                  <bool>true</bool> 
     602                 </property> 
     603                </widget> 
     604               </item> 
     605              </layout> 
     606             </item> 
     607             <item> 
     608              <layout class="QHBoxLayout" name="horizontalLayout_9"> 
     609               <item> 
     610                <widget class="QProgressBar" name="progress_install_DL"> 
     611                 <property name="value"> 
     612                  <number>24</number> 
     613                 </property> 
     614                </widget> 
     615               </item> 
     616               <item> 
     617                <widget class="QLabel" name="label_install_DL"> 
     618                 <property name="minimumSize"> 
     619                  <size> 
     620                   <width>80</width> 
     621                   <height>0</height> 
     622                  </size> 
     623                 </property> 
     624                 <property name="text"> 
     625                  <string notr="true">label</string> 
     626                 </property> 
     627                 <property name="alignment"> 
     628                  <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> 
     629                 </property> 
     630                </widget> 
     631               </item> 
     632              </layout> 
     633             </item> 
     634            </layout> 
     635           </widget> 
     636          </item> 
     637         </layout> 
     638        </widget> 
     639       </widget> 
    555640      </widget> 
    556641      <widget class="QWidget" name="tab_browse"> 
     
    752837                    <x>0</x> 
    753838                    <y>0</y> 
    754                     <width>98</width> 
    755                     <height>28</height> 
     839                    <width>70</width> 
     840                    <height>16</height> 
    756841                   </rect> 
    757842                  </property> 
     
    803888                    <x>0</x> 
    804889                    <y>0</y> 
    805                     <width>98</width> 
    806                     <height>28</height> 
     890                    <width>49</width> 
     891                    <height>16</height> 
    807892                   </rect> 
    808893                  </property> 
     
    828913                 <x>0</x> 
    829914                 <y>0</y> 
    830                  <width>98</width> 
    831                  <height>28</height> 
     915                 <width>86</width> 
     916                 <height>16</height> 
    832917                </rect> 
    833918               </property> 
     
    12281313                    <x>0</x> 
    12291314                    <y>0</y> 
    1230                     <width>447</width> 
     1315                    <width>413</width> 
    12311316                    <height>61</height> 
    12321317                   </rect> 
     
    12891374                    <x>0</x> 
    12901375                    <y>0</y> 
    1291                     <width>98</width> 
    1292                     <height>28</height> 
     1376                    <width>55</width> 
     1377                    <height>16</height> 
    12931378                   </rect> 
    12941379                  </property> 
     
    13271412                    <x>0</x> 
    13281413                    <y>0</y> 
    1329                     <width>98</width> 
    1330                     <height>28</height> 
     1414                    <width>55</width> 
     1415                    <height>16</height> 
    13311416                   </rect> 
    13321417                  </property> 
     
    13521437     <x>0</x> 
    13531438     <y>0</y> 
    1354      <width>509</width> 
    1355      <height>21</height> 
     1439     <width>475</width> 
     1440     <height>20</height> 
    13561441    </rect> 
    13571442   </property> 
     
    14251510 <resources> 
    14261511  <include location="SoftwareManager.qrc"/> 
     1512  <include location="../../../../.designer/backup/SoftwareManager.qrc"/> 
    14271513 </resources> 
    14281514 <connections/> 
  • src-qt4/pc-softwaremanager/pbiBackend.cpp

    r273a090 r2916111  
    419419    else if(infoList[i]=="arch"){ output << PBIHASH[pbiID].arch; } 
    420420    else if(infoList[i]=="path"){ output << PBIHASH[pbiID].path; } 
    421     else if(infoList[i]=="icon"){ output << PBIHASH[pbiID].icon; } 
    422     else if(infoList[i]=="license"){ output << PBIHASH[pbiID].license; } 
     421    else if(infoList[i]=="icon"){  
     422        QString icon = PBIHASH[pbiID].icon; 
     423        if( QFile::exists(icon) ){ output << icon; } 
     424        else{ output << ""; } 
     425    }else if(infoList[i]=="license"){ output << PBIHASH[pbiID].license; } 
    423426    else if(infoList[i]=="metaid"){ output << PBIHASH[pbiID].metaID; } 
    424427    else if(infoList[i]=="status"){ output << currentAppStatus(pbiID); } 
     428    else if(infoList[i]=="maintainer"){ output << PBIHASH[pbiID].maintainer; } 
     429    else if(infoList[i]=="description"){ output << PBIHASH[pbiID].description; } 
     430    else if(infoList[i]=="date"){ output << PBIHASH[pbiID].mdate; } 
     431    else if(infoList[i]=="fbsdversion"){ output << PBIHASH[pbiID].fbsdversion; } 
    425432    //Now the boolians 
    426433    else if(infoList[i]=="requiresroot"){  
     
    537544        case InstalledPBI::REMOVING: 
    538545          if(sRemove){ output = tr("Removal Canceled (will reinstall)"); } 
    539           else{ output = tr("Removing"); } 
     546          else{ output = tr("Removing Application"); } 
    540547          break; 
    541548        case InstalledPBI::UPDATING: 
     
    813820   if(enable){ output.append(" --enable-auto"); } 
    814821   else{ output.append(" --disable-auto"); } 
    815    output.append(" "+pbiID); 
     822   output.append(" "+PBIHASH[pbiID].metaID); 
    816823   output = addRootCMD(output, PBIHASH[pbiID].rootInstall); 
    817824   return output;         
     
    12111218   //Get the associated appID 
    12121219   QString appID = pbi.metaID; 
    1213    QStringList info = sysDB->installedPbiInfo(pbiID); //info[name,version,arch,date,author,web,path,icon] 
     1220   QStringList info = sysDB->installedPbiInfo(pbiID); 
    12141221   if(useDB && !info.isEmpty()){ 
    12151222     //Now get additional database info 
     
    12281235     pbi.path    = info[6]; 
    12291236     pbi.icon    = info[7]; 
     1237     pbi.maintainer = info[8]; 
     1238     pbi.description = info[9]; 
     1239     pbi.fbsdversion = info[10]; 
    12301240     if(appID.isEmpty()){  
    12311241       appID = Extras::nameToID(pbi.name);  
     
    12411251     pbi.desktopIcons= desktop; 
    12421252     pbi.menuIcons   = menu; 
    1243       
     1253     //Clean up the mdate to make it human-readable 
     1254     QDate date(pbi.mdate.left(4).toInt(), pbi.mdate.mid(4,2).toInt(), pbi.mdate.right(2).toInt() ); 
     1255     pbi.mdate =date.toString(Qt::SystemLocaleShortDate); //put it in the current locale format (short version) 
    12441256   }else{ 
    12451257     //Pull basic info from the pre-loaded App database instead 
  • src-qt4/pc-softwaremanager/pbiDBAccess.cpp

    r273a090 r2916111  
    125125 
    126126QStringList PBIDBAccess::installedPbiInfo(QString pbiID){ 
    127   //Output format: output[ name, version, arch, date created, author, website, installpath, iconpath] 
     127  //Output format: output[ name, version, arch, date created, author, website, installpath, iconpath, maintainer, description, fbsdversion] 
    128128  QStringList output; 
    129129  QString path = DBPath+"installed/"+pbiID; 
     
    133133    output << readOneLineFile(path+"/pbi_version"); 
    134134    output << readOneLineFile(path+"/pbi_arch"); 
    135     output << readOneLineFile(path+"/pbi_mdate"); 
     135    //Get the latest date (remove the time) for this PBI (mdate and patchmdate seem to vary in use) 
     136    QString mdate = readOneLineFile(path+"/pbi_mdate").section(" ",0,0).simplified(); 
     137    QString pdate = readOneLineFile(path+"/pbi_patchmdate").section(" ",0,0).simplified(); 
     138    if( !pdate.isEmpty() && (pdate > mdate) ){ 
     139      output << pdate; //use the date it was patched 
     140    }else{ 
     141      output <<  mdate; //use the date it was initially created 
     142    } 
    136143    output << readOneLineFile(path+"/pbi_author"); 
    137144    output << readOneLineFile(path+"/pbi_web"); 
    138145    output << readOneLineFile(path+"/pbi_installedpath"); 
    139     if(DBDir->exists("pbi_icon.png")){ output << path+"/pbi_icon.png"; } 
    140     else{ output << ""; } 
     146    output << path+"/pbi_icon.png"; 
     147    output << readOneLineFile(path+"/pbi_maintainer"); 
     148    output << cleanupDescription( readOneLineFile(path+"/pbi_desc").split("\n") ); 
     149    output << readOneLineFile(path+"/pbi_fbsdver"); 
    141150  } 
    142151  return output; 
     
    226235  output << list[7]; //TAGS 
    227236  //Cleanup the description (try to format the text properly) 
    228   QStringList tmp = list[8].split("<br>"); 
    229   //if(DEBUG){ qDebug() << "Raw Description:\n" << list[8]; } 
    230   for(int i=1; i<tmp.length(); i++){ 
    231     tmp[i-1] = tmp[i-1].simplified(); 
    232     if(tmp[i-1].isEmpty() || tmp[i].isEmpty() ){} 
    233     else if(tmp[i-1].endsWith(".") || tmp[i-1].endsWith(":") || tmp[i-1].endsWith(";") || tmp[i-1].endsWith("?") || tmp[i-1].endsWith("!") ){} 
    234     else if( tmp[i].startsWith("*") || tmp[i].startsWith("0") || tmp[i].startsWith("-") || tmp[i].startsWith("o ") ){} 
    235     else{ 
    236       //if(DEBUG){ qDebug() << " - Bad Line Break:\n" << tmp[i-1] << "<br>" << tmp[i]; } 
    237       //Bad line break, combine it with the previous line 
    238       tmp[i-1].append(" "+tmp[i]); 
    239       tmp.removeAt(i); 
    240       i--; 
    241     } 
    242   } 
    243   output << tmp.join("\n"); //DESCRIPTION 
     237  output << cleanupDescription( list[8].split("<br>") ); //DESCRIPTION 
    244238  if(list[9]=="YES"){ list[9]="true"; } //change to the same true/false syntax as elsewhere 
    245239  output << list[9]; //REQUIRESROOT 
     
    247241  output << list[11]; //MAINTAINER EMAIL 
    248242  //Cleanup the short description (remove any line breaks) 
    249   tmp = list[12].split("<br>", QString::SkipEmptyParts); 
     243  QStringList tmp = list[12].split("<br>", QString::SkipEmptyParts); 
    250244  list[12] = tmp.join(" ").simplified(); 
    251245  output << list[12]; //SHORT DESCRIPTION 
     
    371365    QTextStream in(&file); 
    372366    while(!in.atEnd()){ 
    373       output.append(in.readLine()); 
     367      if(!output.isEmpty()){ output.append("\n"); } 
     368      output.append( in.readLine() );  
    374369    } 
    375370    file.close(); 
     
    403398  return output; 
    404399} 
     400 
     401QString PBIDBAccess::cleanupDescription(QStringList tmp){ 
     402  for(int i=1; i<tmp.length(); i++){ 
     403    //tmp[i-1] = tmp[i-1].simplified(); 
     404    tmp[i] = tmp[i].simplified(); 
     405    if( tmp[i].startsWith("WWW: ") ){ 
     406      //Remove the website URL from the end, it is already accounted for elsewhere 
     407      tmp.removeAt(i); 
     408      i--; 
     409    }else if(tmp[i-1].isEmpty() || tmp[i].isEmpty() ){} 
     410    else if(tmp[i-1].endsWith(".") || tmp[i-1].endsWith(":") || tmp[i-1].endsWith(";") || tmp[i-1].endsWith("?") || tmp[i-1].endsWith("!") ){} 
     411    else if( tmp[i].startsWith("*") || tmp[i].startsWith("0") || tmp[i].startsWith("-") || tmp[i].startsWith("o ") ){} 
     412    else{ 
     413      //if(DEBUG){ qDebug() << " - Bad Line Break:\n" << tmp[i-1] << "<br>" << tmp[i]; } 
     414      //Bad line break, combine it with the previous line 
     415      tmp[i-1].append(" "+tmp[i]); 
     416      tmp.removeAt(i); 
     417      i--; 
     418    } 
     419  } 
     420  return tmp.join("\n"); 
     421} 
  • src-qt4/pc-softwaremanager/pbiDBAccess.h

    r273a090 r2916111  
    6060        QDir *DBDir; 
    6161        QProcess *proc; 
     62 
    6263        QString readOneLineFile(QString); 
    6364        QString getIDFromNum(QString); 
    6465        QString runCMD(QString); 
    65          
     66        QString cleanupDescription(QStringList tmp); 
    6667}; 
    6768 
Note: See TracChangeset for help on using the changeset viewer.