Changeset 4a9759c


Ignore:
Timestamp:
05/08/14 11:41:30 (15 months ago)
Author:
Ken Moore <ken@…>
Branches:
master, enter/10, releng/10.0.2, releng/10.0.3, releng/10.1, releng/10.1.1, releng/10.1.2, releng/10.2
Children:
ed8ad03
Parents:
4fc34c1 (diff), 5c90c99 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of github.com:pcbsd/pcbsd

Files:
1 added
20 edited

Legend:

Unmodified
Added
Removed
  • pbi-modules/AppCafe-index

    rd5e5848 r5c90c99  
    88New=emulators/i386-wine-devel:::: 
    99New=x11/lumina:::: 
     10New=emulators/virtualbox-ose:::: 
     11New=devel/qdevelop:::: 
     12New=x11/gnome3:::: 
    1013Highlight=audio/amarok-kde4:::: 
     14Highlight=emulators/i386-wine-devel:::: 
     15Highlight=editors/libreoffice:::: 
     16Highlight=editors/leafpad:::: 
    1117Highlight=graphics/gimp:::: 
     18Highlight=net-mgmt/vidalia:::: 
     19Highlight=java/eclipse:::: 
     20Highlight=devel/qdevelop:::: 
    1221Recommended=www/chromium:::: 
    1322Recommended=www/firefox:::: 
     23Recommended=www/opera:::: 
    1424Recommended=mail/thunderbird:::: 
    1525Recommended=graphics/gimp:::: 
     26Recommended=editors/libreoffice:::: 
     27Recommended=x11/kde4:::: 
  • src-qt4/PCDM/PCDM.pro

    r28c79ad rfb13c77  
    121121theme.extra=cp -r themes $(INSTALL_ROOT)/usr/local/share/PCDM/. 
    122122 
     123session.path=/usr/local/share/PCDM 
     124session.extra=cc -o pcdm-session src/pcdm-session.c && install -o root -g wheel -m 755 pcdm-session $(INSTALL_ROOT)/usr/local/share/PCDM/ 
     125 
    123126conf=pcdm.conf 
    124127conf.path=/usr/local/etc 
    125128conf.extra=cp pcdm.conf $(INSTALL_ROOT)/usr/local/etc/pcdm.conf.dist && chmod 600 $(INSTALL_ROOT)/usr/local/etc/pcdm.conf.dist 
    126129 
    127 INSTALLS += dotrans scripts rcd cleanthemes theme conf target 
     130INSTALLS += dotrans scripts rcd cleanthemes theme conf target session 
    128131 
    129132RESOURCES += PCDM.qrc 
  • src-qt4/PCDM/src/pcdm-xprocess.cpp

    r88d8a80 rfb13c77  
    1212#include <login_cap.h> 
    1313#include <QMessageBox> 
     14#include <QTemporaryFile> 
    1415 
    1516/* 
     
    116117  //And finally set the login user before dropping priv 
    117118  setlogin( xuser.toUtf8() ); 
    118   //QWidget *wid = new QWidget(); 
    119   if (setgid(pw->pw_gid) < 0) { 
    120       qDebug() << "setgid() failed!"; 
    121       return FALSE; 
    122   } 
    123  
    124   // Setup our other groups 
    125   if (initgroups(xuser.toLatin1(), pw->pw_gid) < 0) { 
    126       qDebug() << "initgroups() failed!"; 
    127       setgid(0); 
    128       return FALSE; 
    129   } 
    130  
    131   // Lets drop to user privs 
    132   if (setuid(pw->pw_uid) < 0) { 
    133       qDebug() << "setuid() failed!"; 
    134       return FALSE; 
    135   } 
     119 
    136120  //Startup the PAM session 
    137121  if( !pam_startSession() ){ pam_shutdown(); return FALSE; } 
    138122  pam_session_open = TRUE; //flag that pam has an open session 
     123 
    139124  QString cmd; 
    140   // Configure the DE startup command 
    141  
    142   //  - Add the DE startup command to the end 
    143   cmd.append("dbus-launch --exit-with-session "+xcmd); 
    144   //cmd.append(xcmd); 
    145  
    146   //Backend::log("Startup command: "+cmd); 
     125 
    147126  // Setup the process environment 
    148127  setupSessionEnvironment(); 
    149   //Log the DE startup outputs as well 
    150   this->setProcessChannelMode(QProcess::MergedChannels); 
    151   this->setStandardOutputFile(xhome+"/.pcdm-startup.log",QIODevice::Truncate); 
    152   //this->setStandardErrorFile(xhome+"/.pcdm-startup.err",QIODevice::Truncate); 
    153   // Startup the process(s) 
    154    //  - Setup to run the user's <home-dir>/.xprofile startup script 
    155   if(QFile::exists(xhome+"/.xprofile")){ 
    156     //Make sure the file is executable 
    157     QFile::setPermissions(xhome+"/.xprofile", QFile::permissions(xhome+"/.xprofile") | QFile::ExeOwner | QFile::ExeGroup | QFile::ExeOther ); 
    158     //Need to run a couple commands in sequence: so put them in a script file 
    159     QStringList contents; 
    160     contents << ". "+xhome+"/.xprofile"; 
    161     contents << cmd; //end with the actual command for the DE 
    162     contents << "exit $?"; //Make sure we return the DE return value 
    163     if( Backend::writeFile(xhome+"/.pcdmsessionstart", contents) ){ 
    164       //script created fine, change the command to just run it 
    165       cmd = "sh "+xhome+"/.pcdmsessionstart"; 
    166     }else{ 
    167       //Could not create script file, fallback on running them seperately 
    168       QString xpro = "sh "+xhome+"/.xprofile"; 
    169       this->start(xpro); 
    170       this->waitForFinished(3000); 
    171     } 
    172   } 
     128 
     129  // Create our startup script 
     130  tFile = new QTemporaryFile(); 
     131  if ( ! tFile->open() ) 
     132     return FALSE; 
     133 
     134  QTextStream tOut(tFile); 
     135 
     136  // Configure the DE startup command 
     137  cmd.append("dbus-launch --exit-with-session "+xcmd); 
     138 
     139  //  - Setup to run the user's <home-dir>/.xprofile startup script 
     140  QFile::setPermissions(xhome+"/.xprofile", QFile::permissions(xhome+"/.xprofile") | QFile::ExeOwner | QFile::ExeGroup | QFile::ExeOther ); 
     141 
     142  //Need to run a couple commands in sequence: so put them in a script file 
     143  tOut << "#!/bin/sh\n\n"; 
     144  tOut << "if [ -e '"+xhome+"/.xprofile' ] ; then\n"; 
     145  tOut << "  . "+xhome+"/.xprofile\n"; 
     146  tOut << "fi\n"; 
     147  tOut << cmd + "\n"; //+ " >" + xhome+ "/.pcdm-startup.log" + " 2>" + xhome + "/.pcdm-startup.log\n"; 
     148  tOut << "exit $?"; //Make sure we return the DE return value 
     149 
     150  QString tUid, tGid, logFile; 
     151  tUid.setNum(pw->pw_uid); 
     152  tGid.setNum(pw->pw_gid); 
     153  logFile=xhome + "/.pcdm-startup.log"; 
     154  cmd = "/usr/local/share/PCDM/pcdm-session "+xuser+" "+tUid+" "+tGid+" "+tFile->fileName()+" "+logFile; 
    173155  connect( this, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotCleanup()) ); 
     156  tFile->setPermissions(QFile::ReadOwner | QFile::WriteOwner |QFile::ReadGroup | QFile::ReadUser | QFile::ReadOther); 
     157  tFile->close(); 
     158 
     159  Backend::log("Starting session with:\n" + cmd ); 
    174160  this->start(cmd); 
    175161  return TRUE; 
  • src-qt4/PCDM/src/pcdm-xprocess.h

    r41d9f84 rfb13c77  
    1616#include <QProcess> 
    1717#include <QProcessEnvironment> 
     18#include <QTemporaryFile> 
    1819 
    1920#include <sys/types.h> 
     
    5859        void pam_logFailure(int); 
    5960        void pam_shutdown(); //cleanly close all the PAM stuff 
    60          
    6161   
     62        QTemporaryFile *tFile; 
     63 
    6264  private slots: 
    6365        void slotCleanup(); 
  • src-qt4/pc-controlpanel/items/software/appcafe.desktop

    r5fedd31 rfce5321  
    11#!/usr/bin/env xdg-open 
    22[Desktop Entry] 
    3 Exec=pc-softwaremanager 
     3Exec=pc-su pc-softwaremanager 
    44GenericName[en_US]= 
    55GenericName= 
  • src-qt4/pc-softwaremanager/softmanager.desktop

    r4b97eed rfaef85d  
    33Comment[en_US]= 
    44Comment= 
    5 Exec=pc-softwaremanager 
     5Exec=pc-su pc-softwaremanager 
    66Icon=/usr/local/share/pcbsd/icons/appcafe.png 
    77MimeType= 
  • src-qt4/port-files/pkg-plist

    rf03134b r02233b84  
    27872787share/pcbsd/i18n/ZManager_zh_TW.qm 
    27882788share/pcbsd/i18n/ZManager_zu.qm 
     2789share/PCDM/pcdm-session 
    27892790share/PCDM/themes/default/default.theme 
    27902791share/PCDM/themes/default/background.jpg 
  • src-sh/pbi-manager/pbi-manager

    r6fa6b93 rad35bf5  
    377377pbi_updateindex_init() { 
    378378        require_root 
    379         check_update_index "force" 
     379        if [ "$1" = "-f" ] ; then 
     380                check_update_index "force" 
     381        else 
     382                check_update_index 
     383        fi 
    380384        exit $? 
    381385} 
  • src-sh/pc-extractoverlay/desktop-overlay/usr/share/skel/Desktop/appcafe.desktop

    r5fedd31 r6db5502  
    33Comment[en_US]= 
    44Comment= 
    5 Exec=pc-softwaremanager 
     5Exec=pc-su pc-softwaremanager 
    66Icon=/usr/local/share/pcbsd/icons/appcafe.png 
    77StartupNotify=true 
  • src-qt4/pc-softwaremanager/configDialog.cpp

    r78fa8b2 r4fc34c1  
    2727#include "ui_configDialog.h" //Qt-designer file 
    2828 
    29 //Public input/output variables 
    30 /*  bool applyChanges; 
    31     QStringList xdgOpts; 
    32     bool keepDownloads; 
    33     QString downloadDir; 
    34     PBIDBAccess *DB; // Input only - current database access class 
    35 */ 
     29 
    3630ConfigDialog::ConfigDialog(QWidget* parent) : QDialog(parent), ui(new Ui::ConfigDialog){ 
    3731  ui->setupUi(this); //load the Qt-Designer file 
    38   applyChanges = FALSE; 
     32  madeChanges = false; 
     33  settings = new QSettings("PCBSD-root","AppCafe-repos"); 
     34  readSavedRepos(); 
     35  loadPbiConf(); 
     36  customChanged(); //Make sure everything is enabled/disabled appropriately 
     37  //Setup the signals/slots 
     38  connect(ui->push_apply, SIGNAL(clicked()), this, SLOT(applyClicked()) ); 
     39  connect(ui->push_cancel, SIGNAL(clicked()), this, SLOT(cancelClicked()) ); 
     40  connect(ui->tool_addRepo, SIGNAL(clicked()), this, SLOT(addCustom()) ); 
     41  connect(ui->tool_remRepo, SIGNAL(clicked()), this, SLOT(removeCustom()) ); 
     42  connect(ui->listWidget, SIGNAL(currentRowChanged(int)), this, SLOT(customChanged()) ); 
     43  connect(ui->radio_edge, SIGNAL(toggled(bool)), this, SLOT(checkSettings()) ); 
     44  connect(ui->radio_production, SIGNAL(toggled(bool)), this, SLOT(checkSettings()) ); 
     45  connect(ui->radio_custom, SIGNAL(toggled(bool)), this, SLOT(checkSettings()) ); 
    3946} 
    4047 
     
    4350} 
    4451 
    45 void ConfigDialog::setupDone(){ 
    46   applyChanges = FALSE; //make sure no changes by default 
    47   //Now load the info onto the GUI 
    48   ui->check_desktop->setChecked( xdgOpts.contains("desktop") ); 
    49   ui->check_menu->setChecked( xdgOpts.contains("menu") ); 
    50   ui->check_mime->setChecked( xdgOpts.contains("mime") ); 
    51   ui->check_paths->setChecked( xdgOpts.contains("paths") ); 
    52   ui->group_download->setChecked( keepDownloads ); 
    53   ui->line_downloadDir->setText( downloadDir.replace(QDir::homePath(),"~") ); 
    54   //Get the repo information 
    55   repoID = DB->currentRepo(); 
    56   refreshRepoTab(); 
    57 } 
     52//============= 
     53//    PRIVATE 
     54//============= 
    5855 
    59 void ConfigDialog::refreshRepoTab(){ 
    60   DB->reloadRepoList(); 
    61   QStringList repoList = DB->availableRepos(); 
    62   int index = repoList.indexOf(repoID); 
    63   for(int i=0; i<repoList.length(); i++){ 
    64     QStringList info = DB->repoInfo(repoList[i]); 
    65     repoList[i].append(" - "+info[0] );  
    66   } 
    67   //Now fill the repo tab 
    68   ui->combo_repo->clear(); 
    69   ui->combo_repo->addItems( repoList ); 
    70   if(!repoList.isEmpty()){ 
    71     if(index != -1){ 
    72       ui->combo_repo->setCurrentIndex(index); //will call the slot automatically 
    73     }else{ 
    74       ui->combo_repo->setCurrentIndex(0);          
    75     }    
     56//Main slots 
     57void ConfigDialog::loadPbiConf(){ //fill the UI with the current settings 
     58  QStringList contents = Extras::readFile("/usr/local/etc/pcbsd.conf"); 
     59  for(int i=0; i<contents.length(); i++){ 
     60    if(contents[i].startsWith("#") || contents[i].isEmpty() ){ continue; } //skip comment 
     61    if(contents[i].startsWith("PACKAGE_SET:")){ 
     62      QString val = contents[i].section(":",1,50).simplified(); 
     63      if(val=="EDGE"){ ui->radio_edge->setChecked(true); } 
     64      else if(val=="PRODUCTION"){ ui->radio_production->setChecked(true); } 
     65      else if(val=="CUSTOM"){ ui->radio_custom->setChecked(true); } 
     66      else{ ui->radio_production->setChecked(true); } //default to PRODUCTION 
     67       
     68    }else if(contents[i].startsWith("PACKAGE_URL:")){ 
     69      QString cURL = contents[i].section(":",1,50).simplified(); 
     70      //Now make sure that custom repo is selected 
     71      bool found = false; 
     72      for(int i=0; i<ui->listWidget->count() && !found; i++){ 
     73        if( ui->listWidget->item(i)->whatsThis() == cURL ){ 
     74          found = true; 
     75          ui->listWidget->setCurrentRow(i); 
     76        } 
     77      } 
     78      if(!found){ 
     79        //Add this repo as UNKNOWN 
     80        QListWidgetItem *item = new QListWidgetItem( tr("UNKNOWN"), 0); 
     81        ui->listWidget->addItem(item); 
     82        ui->listWidget->setCurrentItem(item); 
     83      } 
     84    } 
     85     
    7686  } 
    7787} 
    7888 
    79 // === ButtonBox === 
    80 void ConfigDialog::on_buttonBox_accepted(){ 
    81   applyChanges = TRUE; //flag that changes are available 
    82   //generate the xdg install Options 
    83   xdgOpts.clear(); 
    84   if(ui->check_desktop->isChecked()){ xdgOpts << "desktop"; } 
    85   if(ui->check_menu->isChecked()){ xdgOpts << "menu"; } 
    86   if(ui->check_mime->isChecked()){ xdgOpts << "mime"; } 
    87   if(ui->check_paths->isChecked()){ xdgOpts << "paths"; } 
    88   //Download Directory settings 
    89   keepDownloads = ui->group_download->isChecked(); 
    90   downloadDir = ui->line_downloadDir->text(); 
    91   downloadDir.replace("~",QDir::homePath()); 
    92   //Repo  
    93   repoID = ui->combo_repo->currentText().section(" - ",0,0).simplified(); 
    94   DB->setRepo(repoID); 
    95   //Now close the UI 
     89void ConfigDialog::savePbiConf(){ //save the current settings to file 
     90  //Assemble the file contents 
     91  QStringList contents; 
     92  contents << "# PC-BSD Configuration Defaults"; 
     93  contents << ""; 
     94  QString pkgset = "PRODUCTION"; //default value (just in case) 
     95  if(ui->radio_edge->isChecked()){ pkgset = "EDGE"; } 
     96  else if(ui->radio_production->isChecked()){ pkgset = "PRODUCTION"; } 
     97  else if(ui->radio_custom->isChecked()){ pkgset = "CUSTOM"; } 
     98  contents << "PACKAGE_SET: "+pkgset; 
     99  if(pkgset.toLower()=="CUSTOM"){ 
     100    //Also set the custom url 
     101    QString cURL = ui->listWidget->currentItem()->whatsThis(); 
     102    contents << "PACKAGE_URL: "+cURL; 
     103  } 
     104  Extras::writeFile("/usr/local/etc/pcbsd.conf", contents); 
     105} 
     106 
     107void ConfigDialog::cancelClicked(){ //quit without saving 
     108  madeChanges = false; 
    96109  this->close(); 
    97110} 
    98111 
    99 void ConfigDialog::on_buttonBox_rejected(){ 
    100   applyChanges = FALSE; 
    101   DB->setRepo(repoID); //just in case it was changed by the UI 
     112void ConfigDialog::applyClicked(){ //quit after saving 
     113  savePbiConf(); //save the current settings 
     114  Extras::getCmdOutput("pc-extractoverlay ports"); 
     115  madeChanges = true; 
    102116  this->close(); 
    103117} 
    104118 
    105 // === Repo Tab === 
    106 void ConfigDialog::on_combo_repo_currentIndexChanged(){ 
    107   QString repoNum = ui->combo_repo->currentText().section(" - ",0,0); 
    108   //Update the repo mirror list 
    109   if(repoNum.isEmpty()){ //no repo selected 
    110     ui->list_repomirrors->clear(); 
    111     ui->tool_repomirror_add->setEnabled(FALSE); 
    112     ui->tool_repomirror_remove->setEnabled(FALSE); 
    113     ui->tool_repomirror_up->setEnabled(FALSE); 
    114     ui->tool_repomirror_down->setEnabled(FALSE); 
    115     ui->tool_repo_remove->setEnabled(FALSE); 
     119void ConfigDialog::checkSettings(){ 
     120  if(ui->radio_custom->isChecked()){ 
     121      ui->push_apply->setEnabled( (ui->listWidget->currentItem() != 0) ); 
     122      ui->group_custom->setVisible(true);          
    116123  }else{ 
    117     QStringList mirrors = DB->repoMirrors(repoNum); 
    118     ui->list_repomirrors->clear(); 
    119     ui->list_repomirrors->addItems(mirrors); 
    120     //Now enable the buttons 
    121     ui->tool_repomirror_add->setEnabled(TRUE); 
    122     ui->tool_repomirror_remove->setEnabled(TRUE); 
    123     ui->tool_repomirror_up->setEnabled(TRUE); 
    124     ui->tool_repomirror_down->setEnabled(TRUE); 
    125     ui->tool_repo_remove->setEnabled(TRUE); 
    126   } 
    127    
    128 } 
    129  
    130 void ConfigDialog::on_tool_repo_add_clicked(){ 
    131   QString rpofile = QFileDialog::getOpenFileName(this,tr("Add PBI Repository"), QDir::homePath(), tr("Repository File (*.rpo)") ); 
    132   if(rpofile.isEmpty()){ return; } //cancelled 
    133   bool ok = DB->addRepoFile(rpofile); 
    134   if(ok){ 
    135     QMessageBox::information(this,tr("Repo Successfully Added"), tr("This repo should be ready to use in a short time (depending on your internet connection speed).") );          
    136   }else{ 
    137     QMessageBox::warning(this,tr("Repo Failure"), tr("This repo could not be added.")+"\n"+ QString(tr("Please run the command '%1' manually to see the full error message.")).arg("pbi_addrepo <rpo file>") ); 
    138   } 
    139   refreshRepoTab(); 
    140 } 
    141  
    142 void ConfigDialog::on_tool_repo_remove_clicked(){ 
    143   //Get the selected repo 
    144   QString repoName = ui->combo_repo->currentText().section(" - ",1,50).simplified(); 
    145   QString repoNum = ui->combo_repo->currentText().section(" - ",0,0).simplified(); 
    146   //Verify the removal 
    147   if( QMessageBox::Yes == QMessageBox::question(this,tr("Verify Removal"),repoName+"\n\n"+tr("Are you sure you wish to remove this PBI repository?"),QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel) ){ 
    148     //remove the repo 
    149     bool ok = DB->removeRepo(repoNum); 
    150     if(!ok){ 
    151       QMessageBox::warning(this,tr("Repo Failure"), tr("This repo could not be removed.")+"\n"+ QString(tr("Please run the command '%1' manually to see the full error message.")).arg("pbi_deleterepo "+repoNum) ); 
    152     } 
    153     refreshRepoTab(); 
     124    ui->push_apply->setEnabled(true); 
     125    ui->group_custom->setVisible(false); 
    154126  } 
    155127} 
    156128 
    157 void ConfigDialog::on_tool_repomirror_add_clicked(){ 
    158   bool ok; 
    159   QString newmirror = QInputDialog::getText(this,tr("New Mirror URL"), tr("Please enter the URL for the new repo mirror:"),QLineEdit::Normal, "", &ok); 
    160   if( !ok || newmirror.isEmpty()){ return; } //cancelled 
    161   QString repoNum = ui->combo_repo->currentText().section(" - ",0,0); 
    162   QStringList mirrors; 
    163   for(int i=0; i<ui->list_repomirrors->count(); i++){ 
    164     mirrors << ui->list_repomirrors->item(i)->text();      
    165   } 
    166   mirrors << newmirror; //add the new mirror to the end of the list 
    167   //Now run the database command 
    168   ok = DB->setRepoMirrors(repoNum, mirrors); 
    169   if(!ok){ 
    170     QMessageBox::warning(this,tr("Mirror Change Error"), tr("The full error is displayed in the AppCafe terminal output."));  
    171   } 
    172   //Now update the display 
    173   on_combo_repo_currentIndexChanged(); 
     129//Custom Repo Management 
     130void ConfigDialog::readSavedRepos(){ 
     131  QStringList keys = settings->allKeys(); 
     132  for(int i=0; i<keys.length(); i++){ 
     133    QListWidgetItem *item = new QListWidgetItem(keys[i], 0); 
     134          QString cURL = settings->value(keys[i]).toString(); 
     135          item->setWhatsThis( cURL ); 
     136          item->setToolTip( cURL ); 
     137    ui->listWidget->addItem(item); 
     138    if(i==0){ ui->listWidget->setCurrentItem(item); } 
     139  }        
    174140} 
    175141 
    176 void ConfigDialog::on_tool_repomirror_remove_clicked(){ 
    177   if(ui->list_repomirrors->currentRow() == -1){ return; } 
    178   QString repoNum = ui->combo_repo->currentText().section(" - ",0,0);    
    179   QString rmMirror = ui->list_repomirrors->currentItem()->text(); 
    180   if(rmMirror.isEmpty()){ return; } 
    181   QStringList mirrors; 
    182   for(int i=0; i<ui->list_repomirrors->count(); i++){ 
    183     QString mir = ui->list_repomirrors->item(i)->text(); 
    184     if(mir != rmMirror){ 
    185       mirrors << mir; 
    186     } 
     142void ConfigDialog::customChanged(){ 
     143  if(ui->listWidget->currentItem() == 0){ 
     144    ui->tool_remRepo->setEnabled(false); 
     145  }else{ 
     146    ui->tool_remRepo->setEnabled(true); 
    187147  } 
    188   //Now run the database command 
    189   bool ok = DB->setRepoMirrors(repoNum, mirrors); 
    190   if(!ok){ 
    191     QMessageBox::warning(this,tr("Mirror Change Error"), tr("The full error is displayed in the AppCafe terminal output."));   
    192   } 
    193   //Now update the display 
    194   on_combo_repo_currentIndexChanged(); 
     148  checkSettings(); //also update the apply button 
    195149} 
    196150 
    197 void ConfigDialog::on_tool_repomirror_up_clicked(){ 
    198   if(ui->list_repomirrors->currentRow() == -1){ return; } 
    199   QString repoNum = ui->combo_repo->currentText().section(" - ",0,0);    
    200   QString upMirror = ui->list_repomirrors->currentItem()->text(); 
    201   if(upMirror.isEmpty()){ return; } 
    202   QStringList mirrors; 
    203   for(int i=0; i<ui->list_repomirrors->count(); i++){ 
    204     mirrors << ui->list_repomirrors->item(i)->text();      
     151void ConfigDialog::addCustom(){ 
     152  //Get the name/URL from the user 
     153  QString cURL = QInputDialog::getText(this, tr("New Repo URL"), tr("URL:") ); 
     154  if(cURL.isEmpty()){ return; } //cancelled 
     155  QString key = QInputDialog::getText(this, tr("New Repo Name"), tr("Name:") ); 
     156  while( key.isEmpty() || settings->contains(key) ){ 
     157    key = QInputDialog::getText(this, tr("Invalid Name: Try Again"), tr("Name:") ); 
    205158  } 
    206   //Now move the mirror up 
    207   int cIndex = mirrors.indexOf(upMirror); 
    208   if( cIndex < 1 ){ return; }//make sure it is not already at the top of the list 
    209   mirrors.move(cIndex, cIndex-1); 
    210    
    211   //Now run the database command 
    212   bool ok = DB->setRepoMirrors(repoNum, mirrors); 
    213   if(!ok){ 
    214     QMessageBox::warning(this,tr("Mirror Change Error"), tr("The full error is displayed in the AppCafe terminal output."));   
    215   } 
    216   //Now update the display 
    217   on_combo_repo_currentIndexChanged(); 
     159  settings->setValue(key, cURL); 
     160  QListWidgetItem *item = new QListWidgetItem(key, 0); 
     161        item->setWhatsThis(cURL); 
     162  ui->listWidget->addItem(item); 
     163  ui->listWidget->setCurrentItem(item); 
     164  customChanged(); 
    218165} 
    219166 
    220 void ConfigDialog::on_tool_repomirror_down_clicked(){ 
    221   if(ui->list_repomirrors->currentRow() == -1){ return; } 
    222   QString repoNum = ui->combo_repo->currentText().section(" - ",0,0); 
    223   QString downMirror = ui->list_repomirrors->currentItem()->text(); 
    224   if(downMirror.isEmpty()){ return; } 
    225   QStringList mirrors; 
    226   for(int i=0; i<ui->list_repomirrors->count(); i++){ 
    227     mirrors << ui->list_repomirrors->item(i)->text();      
    228   } 
    229   //Now move the mirror up 
    230   int cIndex = mirrors.indexOf(downMirror); 
    231   if( cIndex == (mirrors.length()-1) ){ return; }//make sure the mirror is not already at the bottom 
    232   mirrors.move(cIndex, cIndex+1); 
    233    
    234   //Now run the database command 
    235   bool ok = DB->setRepoMirrors(repoNum, mirrors); 
    236   if(!ok){ 
    237     QMessageBox::warning(this,tr("Mirror Change Error"), tr("The full error is displayed in the AppCafe terminal output.")); 
    238   } 
    239   //Now update the display 
    240   on_combo_repo_currentIndexChanged(); 
    241 } 
    242          
    243 // === Config Tab === 
    244 void ConfigDialog::on_group_download_toggled(bool checked){ 
    245   ui->frame_dldir->setVisible(checked); 
     167void ConfigDialog::removeCustom(){ 
     168 
     169  if(ui->listWidget->currentRow()<0){ return; } 
     170  QListWidgetItem *item = ui->listWidget->takeItem(ui->listWidget->currentRow());   
     171  QString key = item->text(); 
     172  settings->remove(key); 
     173  //ui->listWidget->removeItemWidget(item); 
     174  customChanged(); 
    246175} 
    247176 
    248 void ConfigDialog::on_tool_getDownloadDir_clicked(){ 
    249   QString dirpath = QFileDialog::getExistingDirectory(this, tr("Select Download Directory"), QDir::homePath()); 
    250   if(dirpath.isEmpty()){return;} //not cancelled 
    251   dirpath.replace(QDir::homePath(),"~"); 
    252   ui->line_downloadDir->setText(dirpath); 
    253 } 
    254  
  • src-qt4/pc-softwaremanager/configDialog.h

    rc71b68c r4fc34c1  
    3333#include <QMessageBox> 
    3434#include <QInputDialog> 
     35#include <QSettings> 
     36#include <QListWidgetItem> 
    3537 
    36 #include "pbiDBAccess.h" 
     38#include "extras.h" 
    3739 
    3840namespace Ui { 
     
    4446         
    4547public: 
    46         explicit ConfigDialog(QWidget* parent = 0); 
    47         virtual ~ConfigDialog(); 
    48          
    49         void setupDone(); //make sure the public variables below are set before running this 
    50          
    51         //Data setup/retrieval variables 
    52         bool applyChanges; 
    53         QStringList xdgOpts; 
    54         bool keepDownloads; 
    55         QString downloadDir; 
    56         PBIDBAccess *DB; 
     48        ConfigDialog(QWidget* parent = 0); 
     49        ~ConfigDialog(); 
     50 
     51        //Data retrieval variables 
     52        bool madeChanges; 
    5753         
    5854private: 
    5955        Ui::ConfigDialog *ui; 
    60         QString repoID; 
     56        QSettings *settings; 
    6157         
    6258private slots: 
    63         //Repo Tab 
    64         void refreshRepoTab(); 
    65         void on_combo_repo_currentIndexChanged(); 
    66         void on_tool_repo_add_clicked(); 
    67         void on_tool_repo_remove_clicked(); 
    68         void on_tool_repomirror_add_clicked(); 
    69         void on_tool_repomirror_remove_clicked(); 
    70         void on_tool_repomirror_up_clicked(); 
    71         void on_tool_repomirror_down_clicked(); 
    72          
    73         //Config Tab 
    74         void on_group_download_toggled(bool); 
    75         void on_tool_getDownloadDir_clicked(); 
    76          
    77         //ButtonBox 
    78         void on_buttonBox_accepted(); 
    79         void on_buttonBox_rejected(); 
     59        //Main slots 
     60        void loadPbiConf(); //fill the UI with the current settings 
     61        void savePbiConf(); //save the current settings to file 
     62 
     63        void cancelClicked(); //quit without saving 
     64        void applyClicked(); //quit after saving 
     65        void checkSettings(); 
     66 
     67        //Custom Repo Management 
     68        void readSavedRepos(); 
     69        void customChanged(); 
     70        void addCustom(); 
     71        void removeCustom(); 
    8072         
    8173}; 
  • src-qt4/pc-softwaremanager/configDialog.ui

    r78fa8b2 r4fc34c1  
    77    <x>0</x> 
    88    <y>0</y> 
    9     <width>353</width> 
    10     <height>337</height> 
     9    <width>344</width> 
     10    <height>257</height> 
    1111   </rect> 
    1212  </property> 
    1313  <property name="windowTitle"> 
    14    <string>AppCafe Configuration</string> 
     14   <string>AppCafe Repository</string> 
    1515  </property> 
    1616  <property name="windowIcon"> 
     
    2020  <layout class="QVBoxLayout" name="verticalLayout"> 
    2121   <item> 
    22     <widget class="QTabWidget" name="tabWidget"> 
    23      <property name="currentIndex"> 
    24       <number>0</number> 
     22    <widget class="QGroupBox" name="groupBox"> 
     23     <property name="title"> 
     24      <string>Note: It may take a couple minutes to apply changes</string> 
    2525     </property> 
    26      <widget class="QWidget" name="tab_config"> 
    27       <attribute name="icon"> 
    28        <iconset resource="SoftwareManager.qrc"> 
    29         <normaloff>:/icons/preferences-system.png</normaloff>:/icons/preferences-system.png</iconset> 
    30       </attribute> 
    31       <attribute name="title"> 
    32        <string>Configuration</string> 
    33       </attribute> 
    34       <layout class="QVBoxLayout" name="verticalLayout_4"> 
    35        <item> 
    36         <widget class="QGroupBox" name="group_install"> 
    37          <property name="title"> 
    38           <string>Post-Install Actions</string> 
    39          </property> 
    40          <layout class="QVBoxLayout" name="verticalLayout_2"> 
    41           <item> 
    42            <widget class="QFrame" name="frame"> 
    43             <property name="frameShape"> 
    44              <enum>QFrame::StyledPanel</enum> 
    45             </property> 
    46             <property name="frameShadow"> 
    47              <enum>QFrame::Raised</enum> 
    48             </property> 
    49             <layout class="QVBoxLayout" name="verticalLayout_5"> 
    50              <item> 
    51               <widget class="QCheckBox" name="check_desktop"> 
    52                <property name="text"> 
    53                 <string>Create Desktop Icons</string> 
    54                </property> 
    55                <property name="icon"> 
    56                 <iconset resource="SoftwareManager.qrc"> 
    57                  <normaloff>:/icons/xdg_desktop.png</normaloff>:/icons/xdg_desktop.png</iconset> 
    58                </property> 
    59               </widget> 
    60              </item> 
    61              <item> 
    62               <widget class="QCheckBox" name="check_menu"> 
    63                <property name="text"> 
    64                 <string>Create Menu Icons</string> 
    65                </property> 
    66                <property name="icon"> 
    67                 <iconset resource="SoftwareManager.qrc"> 
    68                  <normaloff>:/icons/xdg_menu.png</normaloff>:/icons/xdg_menu.png</iconset> 
    69                </property> 
    70               </widget> 
    71              </item> 
    72              <item> 
    73               <widget class="QCheckBox" name="check_mime"> 
    74                <property name="text"> 
    75                 <string>Register File Associations</string> 
    76                </property> 
    77                <property name="icon"> 
    78                 <iconset resource="SoftwareManager.qrc"> 
    79                  <normaloff>:/icons/xdg_mime.png</normaloff>:/icons/xdg_mime.png</iconset> 
    80                </property> 
    81               </widget> 
    82              </item> 
    83              <item> 
    84               <widget class="QCheckBox" name="check_paths"> 
    85                <property name="text"> 
    86                 <string>Create Path Links</string> 
    87                </property> 
    88                <property name="icon"> 
    89                 <iconset resource="SoftwareManager.qrc"> 
    90                  <normaloff>:/icons/xdg_paths.png</normaloff>:/icons/xdg_paths.png</iconset> 
    91                </property> 
    92               </widget> 
    93              </item> 
    94             </layout> 
    95            </widget> 
    96           </item> 
    97          </layout> 
    98         </widget> 
    99        </item> 
    100        <item> 
    101         <spacer name="verticalSpacer"> 
    102          <property name="orientation"> 
    103           <enum>Qt::Vertical</enum> 
    104          </property> 
    105          <property name="sizeHint" stdset="0"> 
    106           <size> 
    107            <width>20</width> 
    108            <height>40</height> 
    109           </size> 
    110          </property> 
    111         </spacer> 
    112        </item> 
    113        <item> 
    114         <widget class="QGroupBox" name="group_download"> 
    115          <property name="title"> 
    116           <string>Keep Downloaded Files</string> 
    117          </property> 
    118          <property name="checkable"> 
    119           <bool>true</bool> 
    120          </property> 
    121          <layout class="QVBoxLayout" name="verticalLayout_3"> 
    122           <item> 
    123            <widget class="QFrame" name="frame_dldir"> 
    124             <property name="frameShape"> 
    125              <enum>QFrame::StyledPanel</enum> 
    126             </property> 
    127             <property name="frameShadow"> 
    128              <enum>QFrame::Raised</enum> 
    129             </property> 
    130             <layout class="QHBoxLayout" name="horizontalLayout"> 
    131              <item> 
    132               <widget class="QLabel" name="label"> 
    133                <property name="text"> 
    134                 <string>Download Dir</string> 
    135                </property> 
    136               </widget> 
    137              </item> 
    138              <item> 
    139               <widget class="QLineEdit" name="line_downloadDir"/> 
    140              </item> 
    141              <item> 
    142               <widget class="QToolButton" name="tool_getDownloadDir"> 
    143                <property name="text"> 
    144                 <string>Download Directory</string> 
    145                </property> 
    146                <property name="icon"> 
    147                 <iconset resource="SoftwareManager.qrc"> 
    148                  <normaloff>:/icons/folder.png</normaloff>:/icons/folder.png</iconset> 
    149                </property> 
    150                <property name="toolButtonStyle"> 
    151                 <enum>Qt::ToolButtonIconOnly</enum> 
    152                </property> 
    153               </widget> 
    154              </item> 
    155             </layout> 
    156            </widget> 
    157           </item> 
    158          </layout> 
    159         </widget> 
    160        </item> 
    161       </layout> 
    162      </widget> 
    163      <widget class="QWidget" name="tab_repos"> 
    164       <attribute name="icon"> 
    165        <iconset resource="SoftwareManager.qrc"> 
    166         <normaloff>:/icons/app_needroot.png</normaloff>:/icons/app_needroot.png</iconset> 
    167       </attribute> 
    168       <attribute name="title"> 
    169        <string>Repositories</string> 
    170       </attribute> 
    171       <layout class="QVBoxLayout" name="verticalLayout_6"> 
    172        <item> 
    173         <layout class="QHBoxLayout" name="horizontalLayout_2"> 
     26     <layout class="QVBoxLayout" name="verticalLayout_3"> 
     27      <item> 
     28       <widget class="QRadioButton" name="radio_edge"> 
     29        <property name="text"> 
     30         <string>PC-BSD EDGE</string> 
     31        </property> 
     32       </widget> 
     33      </item> 
     34      <item> 
     35       <widget class="QRadioButton" name="radio_production"> 
     36        <property name="text"> 
     37         <string>PC-BSD PRODUCTION</string> 
     38        </property> 
     39       </widget> 
     40      </item> 
     41      <item> 
     42       <widget class="QRadioButton" name="radio_custom"> 
     43        <property name="text"> 
     44         <string>Custom</string> 
     45        </property> 
     46       </widget> 
     47      </item> 
     48      <item> 
     49       <widget class="QGroupBox" name="group_custom"> 
     50        <property name="title"> 
     51         <string>Custom Repositories</string> 
     52        </property> 
     53        <layout class="QHBoxLayout" name="horizontalLayout"> 
    17454         <item> 
    175           <widget class="QComboBox" name="combo_repo"/> 
     55          <widget class="QListWidget" name="listWidget"/> 
    17656         </item> 
    17757         <item> 
    178           <widget class="QToolButton" name="tool_repo_add"> 
    179            <property name="text"> 
    180             <string>Add</string> 
    181            </property> 
    182            <property name="icon"> 
    183             <iconset resource="SoftwareManager.qrc"> 
    184              <normaloff>:/icons/add-root.png</normaloff>:/icons/add-root.png</iconset> 
    185            </property> 
    186            <property name="iconSize"> 
    187             <size> 
    188              <width>20</width> 
    189              <height>20</height> 
    190             </size> 
    191            </property> 
    192            <property name="toolButtonStyle"> 
    193             <enum>Qt::ToolButtonIconOnly</enum> 
    194            </property> 
    195           </widget> 
    196          </item> 
    197          <item> 
    198           <widget class="QToolButton" name="tool_repo_remove"> 
    199            <property name="text"> 
    200             <string>...</string> 
    201            </property> 
    202            <property name="icon"> 
    203             <iconset resource="SoftwareManager.qrc"> 
    204              <normaloff>:/icons/remove-root.png</normaloff>:/icons/remove-root.png</iconset> 
    205            </property> 
    206            <property name="iconSize"> 
    207             <size> 
    208              <width>20</width> 
    209              <height>20</height> 
    210             </size> 
    211            </property> 
    212           </widget> 
     58          <layout class="QVBoxLayout" name="verticalLayout_2"> 
     59           <item> 
     60            <widget class="QToolButton" name="tool_addRepo"> 
     61             <property name="toolTip"> 
     62              <string>Add new custom repository</string> 
     63             </property> 
     64             <property name="text"> 
     65              <string>...</string> 
     66             </property> 
     67             <property name="icon"> 
     68              <iconset resource="SoftwareManager.qrc"> 
     69               <normaloff>:/icons/add.png</normaloff>:/icons/add.png</iconset> 
     70             </property> 
     71            </widget> 
     72           </item> 
     73           <item> 
     74            <spacer name="verticalSpacer"> 
     75             <property name="orientation"> 
     76              <enum>Qt::Vertical</enum> 
     77             </property> 
     78             <property name="sizeHint" stdset="0"> 
     79              <size> 
     80               <width>20</width> 
     81               <height>40</height> 
     82              </size> 
     83             </property> 
     84            </spacer> 
     85           </item> 
     86           <item> 
     87            <widget class="QToolButton" name="tool_remRepo"> 
     88             <property name="toolTip"> 
     89              <string>Remove currently selected repository</string> 
     90             </property> 
     91             <property name="text"> 
     92              <string>...</string> 
     93             </property> 
     94             <property name="icon"> 
     95              <iconset resource="SoftwareManager.qrc"> 
     96               <normaloff>:/icons/remove.png</normaloff>:/icons/remove.png</iconset> 
     97             </property> 
     98            </widget> 
     99           </item> 
     100          </layout> 
    213101         </item> 
    214102        </layout> 
    215        </item> 
    216        <item> 
    217         <widget class="QGroupBox" name="group_repomirrors"> 
    218          <property name="title"> 
    219           <string>Repository Mirrors</string> 
    220          </property> 
    221          <layout class="QGridLayout" name="gridLayout"> 
    222           <item row="0" column="2"> 
    223            <layout class="QVBoxLayout" name="verticalLayout_7"> 
    224             <item> 
    225              <widget class="QToolButton" name="tool_repomirror_up"> 
    226               <property name="text"> 
    227                <string>Move Up</string> 
    228               </property> 
    229               <property name="icon"> 
    230                <iconset resource="SoftwareManager.qrc"> 
    231                 <normaloff>:/icons/arrow-up.png</normaloff>:/icons/arrow-up.png</iconset> 
    232               </property> 
    233               <property name="iconSize"> 
    234                <size> 
    235                 <width>20</width> 
    236                 <height>20</height> 
    237                </size> 
    238               </property> 
    239              </widget> 
    240             </item> 
    241             <item> 
    242              <widget class="QToolButton" name="tool_repomirror_down"> 
    243               <property name="text"> 
    244                <string>Move Down</string> 
    245               </property> 
    246               <property name="icon"> 
    247                <iconset resource="SoftwareManager.qrc"> 
    248                 <normaloff>:/icons/arrow-down.png</normaloff>:/icons/arrow-down.png</iconset> 
    249               </property> 
    250               <property name="iconSize"> 
    251                <size> 
    252                 <width>20</width> 
    253                 <height>20</height> 
    254                </size> 
    255               </property> 
    256              </widget> 
    257             </item> 
    258             <item> 
    259              <spacer name="verticalSpacer_2"> 
    260               <property name="orientation"> 
    261                <enum>Qt::Vertical</enum> 
    262               </property> 
    263               <property name="sizeHint" stdset="0"> 
    264                <size> 
    265                 <width>20</width> 
    266                 <height>40</height> 
    267                </size> 
    268               </property> 
    269              </spacer> 
    270             </item> 
    271             <item> 
    272              <widget class="QToolButton" name="tool_repomirror_add"> 
    273               <property name="text"> 
    274                <string>Add</string> 
    275               </property> 
    276               <property name="icon"> 
    277                <iconset resource="SoftwareManager.qrc"> 
    278                 <normaloff>:/icons/add-root.png</normaloff>:/icons/add-root.png</iconset> 
    279               </property> 
    280               <property name="iconSize"> 
    281                <size> 
    282                 <width>20</width> 
    283                 <height>20</height> 
    284                </size> 
    285               </property> 
    286               <property name="toolButtonStyle"> 
    287                <enum>Qt::ToolButtonIconOnly</enum> 
    288               </property> 
    289              </widget> 
    290             </item> 
    291             <item> 
    292              <widget class="QToolButton" name="tool_repomirror_remove"> 
    293               <property name="text"> 
    294                <string>Remove</string> 
    295               </property> 
    296               <property name="icon"> 
    297                <iconset resource="SoftwareManager.qrc"> 
    298                 <normaloff>:/icons/remove-root.png</normaloff>:/icons/remove-root.png</iconset> 
    299               </property> 
    300               <property name="iconSize"> 
    301                <size> 
    302                 <width>20</width> 
    303                 <height>20</height> 
    304                </size> 
    305               </property> 
    306               <property name="toolButtonStyle"> 
    307                <enum>Qt::ToolButtonIconOnly</enum> 
    308               </property> 
    309              </widget> 
    310             </item> 
    311            </layout> 
    312           </item> 
    313           <item row="0" column="0"> 
    314            <widget class="QListWidget" name="list_repomirrors"/> 
    315           </item> 
    316          </layout> 
    317         </widget> 
    318        </item> 
    319       </layout> 
    320      </widget> 
     103       </widget> 
     104      </item> 
     105      <item> 
     106       <spacer name="verticalSpacer_2"> 
     107        <property name="orientation"> 
     108         <enum>Qt::Vertical</enum> 
     109        </property> 
     110        <property name="sizeHint" stdset="0"> 
     111         <size> 
     112          <width>20</width> 
     113          <height>40</height> 
     114         </size> 
     115        </property> 
     116       </spacer> 
     117      </item> 
     118     </layout> 
    321119    </widget> 
    322120   </item> 
    323121   <item> 
    324     <widget class="QDialogButtonBox" name="buttonBox"> 
    325      <property name="orientation"> 
    326       <enum>Qt::Horizontal</enum> 
    327      </property> 
    328      <property name="standardButtons"> 
    329       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> 
    330      </property> 
    331      <property name="centerButtons"> 
    332       <bool>false</bool> 
    333      </property> 
    334     </widget> 
     122    <layout class="QHBoxLayout" name="horizontalLayout_2"> 
     123     <item> 
     124      <widget class="QPushButton" name="push_cancel"> 
     125       <property name="text"> 
     126        <string>Cancel</string> 
     127       </property> 
     128       <property name="icon"> 
     129        <iconset resource="SoftwareManager.qrc"> 
     130         <normaloff>:/icons/dialog-cancel.png</normaloff>:/icons/dialog-cancel.png</iconset> 
     131       </property> 
     132      </widget> 
     133     </item> 
     134     <item> 
     135      <spacer name="horizontalSpacer"> 
     136       <property name="orientation"> 
     137        <enum>Qt::Horizontal</enum> 
     138       </property> 
     139       <property name="sizeHint" stdset="0"> 
     140        <size> 
     141         <width>40</width> 
     142         <height>20</height> 
     143        </size> 
     144       </property> 
     145      </spacer> 
     146     </item> 
     147     <item> 
     148      <widget class="QPushButton" name="push_apply"> 
     149       <property name="text"> 
     150        <string>Apply</string> 
     151       </property> 
     152       <property name="icon"> 
     153        <iconset resource="SoftwareManager.qrc"> 
     154         <normaloff>:/icons/dialog-ok.png</normaloff>:/icons/dialog-ok.png</iconset> 
     155       </property> 
     156      </widget> 
     157     </item> 
     158    </layout> 
    335159   </item> 
    336160  </layout> 
     
    339163  <include location="SoftwareManager.qrc"/> 
    340164 </resources> 
    341  <connections> 
    342   <connection> 
    343    <sender>buttonBox</sender> 
    344    <signal>accepted()</signal> 
    345    <receiver>ConfigDialog</receiver> 
    346    <slot>accept()</slot> 
    347    <hints> 
    348     <hint type="sourcelabel"> 
    349      <x>248</x> 
    350      <y>254</y> 
    351     </hint> 
    352     <hint type="destinationlabel"> 
    353      <x>157</x> 
    354      <y>274</y> 
    355     </hint> 
    356    </hints> 
    357   </connection> 
    358   <connection> 
    359    <sender>buttonBox</sender> 
    360    <signal>rejected()</signal> 
    361    <receiver>ConfigDialog</receiver> 
    362    <slot>reject()</slot> 
    363    <hints> 
    364     <hint type="sourcelabel"> 
    365      <x>316</x> 
    366      <y>260</y> 
    367     </hint> 
    368     <hint type="destinationlabel"> 
    369      <x>286</x> 
    370      <y>274</y> 
    371     </hint> 
    372    </hints> 
    373   </connection> 
    374  </connections> 
     165 <connections/> 
    375166</ui> 
  • src-qt4/pc-softwaremanager/mainUI.cpp

    r3ff724e r4fc34c1  
    121121 
    122122void MainUI::on_actionAppCafe_Settings_triggered(){ 
    123   //PBI->openConfigurationDialog(); 
     123  if(PBI->safeToQuit()){ 
     124    ConfigDialog dlg(this); 
     125    dlg.exec(); 
     126    if(dlg.madeChanges){ 
     127      this->setEnabled(false); 
     128      QTimer::singleShot(0, PBI, SLOT(UpdateIndexFiles())       ); 
     129    } 
     130  }else{ 
     131    QMessageBox::warning(this, tr("Please Wait"), tr("You currently have actions pending/running. Please wait until they finish first.") ); 
     132  } 
    124133} 
    125134 
     
    340349  slotDisplayStats(); 
    341350  slotCheckSelectedItems(); 
    342   ui->group_updates->setVisible(PBI->checkForUpdates(VISJAIL)); 
     351  if(PBI->checkForUpdates(VISJAIL)){ 
     352    ui->group_updates->setVisible(true); 
     353    if(VISJAIL.isEmpty()){ ui->tool_start_updates->setIcon(QIcon(":icons/view-refresh.png")); } 
     354    else{  ui->tool_start_updates->setIcon(QIcon(":icons/view-jail.png")); } 
     355  }else{ 
     356    ui->group_updates->setVisible(false); 
     357  } 
    343358  //If the browser app page is currently visible for this app 
    344359  if( (ui->stacked_browser->currentWidget() == ui->page_app) && ui->page_app->isVisible() ){ 
     
    722737  ui->text_bapp_description->setText(data.description); 
    723738  ui->tool_app_rank->setIcon( QIcon( getRatingIcon(data.rating) ) ); 
     739  ui->tool_app_rank->setVisible( data.hasWiki ); 
     740  ui->tool_app_tips->setVisible( data.hasWiki ); 
    724741  QString cVer = data.installedversion; 
    725742    ui->label_bapp_version->setText(data.version); 
  • src-qt4/pc-softwaremanager/mainUI.h

    r80166a6 r4fc34c1  
    3636#include "smallItemWidget.h" 
    3737#include "updateDialog.h" 
     38#include "configDialog.h" 
    3839 
    3940namespace Ui { 
  • src-qt4/pc-softwaremanager/mainUI.ui

    r3ff724e r4fc34c1  
    88    <y>0</y> 
    99    <width>514</width> 
    10     <height>520</height> 
     10    <height>537</height> 
    1111   </rect> 
    1212  </property> 
     
    9292    </item> 
    9393    <item> 
     94     <widget class="QGroupBox" name="group_updates"> 
     95      <property name="styleSheet"> 
     96       <string notr="true">QGroupBox{ 
     97background: rbga(50,190,255,130); 
     98border-radius: 5px; 
     99}</string> 
     100      </property> 
     101      <property name="title"> 
     102       <string/> 
     103      </property> 
     104      <layout class="QHBoxLayout" name="horizontalLayout_6"> 
     105       <property name="margin"> 
     106        <number>3</number> 
     107       </property> 
     108       <item> 
     109        <widget class="QToolButton" name="tool_start_updates"> 
     110         <property name="text"> 
     111          <string>Start Updates</string> 
     112         </property> 
     113         <property name="icon"> 
     114          <iconset resource="SoftwareManager.qrc"> 
     115           <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 
     116         </property> 
     117         <property name="toolButtonStyle"> 
     118          <enum>Qt::ToolButtonTextBesideIcon</enum> 
     119         </property> 
     120        </widget> 
     121       </item> 
     122       <item> 
     123        <widget class="QLabel" name="label_updates"> 
     124         <property name="font"> 
     125          <font> 
     126           <weight>75</weight> 
     127           <bold>true</bold> 
     128          </font> 
     129         </property> 
     130         <property name="text"> 
     131          <string>Application updates are available!</string> 
     132         </property> 
     133        </widget> 
     134       </item> 
     135      </layout> 
     136     </widget> 
     137    </item> 
     138    <item> 
    94139     <widget class="QTabWidget" name="tabWidget"> 
    95140      <property name="currentIndex"> 
     
    166211             <enum>Qt::ToolButtonTextBesideIcon</enum> 
    167212            </property> 
    168            </widget> 
    169           </item> 
    170           <item row="2" column="0" colspan="3"> 
    171            <widget class="QGroupBox" name="group_updates"> 
    172             <property name="styleSheet"> 
    173              <string notr="true">QGroupBox{ 
    174 background: rbga(50,190,255,130); 
    175 border-radius: 5px; 
    176 }</string> 
    177             </property> 
    178             <property name="title"> 
    179              <string/> 
    180             </property> 
    181             <layout class="QHBoxLayout" name="horizontalLayout_6"> 
    182              <property name="margin"> 
    183               <number>3</number> 
    184              </property> 
    185              <item> 
    186               <widget class="QToolButton" name="tool_start_updates"> 
    187                <property name="text"> 
    188                 <string>Start Updates</string> 
    189                </property> 
    190                <property name="icon"> 
    191                 <iconset resource="SoftwareManager.qrc"> 
    192                  <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 
    193                </property> 
    194                <property name="toolButtonStyle"> 
    195                 <enum>Qt::ToolButtonTextBesideIcon</enum> 
    196                </property> 
    197               </widget> 
    198              </item> 
    199              <item> 
    200               <widget class="QLabel" name="label_updates"> 
    201                <property name="font"> 
    202                 <font> 
    203                  <weight>75</weight> 
    204                  <bold>true</bold> 
    205                 </font> 
    206                </property> 
    207                <property name="text"> 
    208                 <string>Application updates are available!</string> 
    209                </property> 
    210               </widget> 
    211              </item> 
    212             </layout> 
    213213           </widget> 
    214214          </item> 
     
    584584                    <x>0</x> 
    585585                    <y>0</y> 
    586                     <width>100</width> 
    587                     <height>30</height> 
     586                    <width>72</width> 
     587                    <height>16</height> 
    588588                   </rect> 
    589589                  </property> 
     
    626626                    <x>0</x> 
    627627                    <y>0</y> 
    628                     <width>100</width> 
    629                     <height>30</height> 
     628                    <width>66</width> 
     629                    <height>16</height> 
    630630                   </rect> 
    631631                  </property> 
     
    656656                    <x>0</x> 
    657657                    <y>0</y> 
    658                     <width>100</width> 
    659                     <height>30</height> 
     658                    <width>66</width> 
     659                    <height>16</height> 
    660660                   </rect> 
    661661                  </property> 
     
    736736                 <x>0</x> 
    737737                 <y>0</y> 
    738                  <width>100</width> 
    739                  <height>30</height> 
     738                 <width>88</width> 
     739                 <height>16</height> 
    740740                </rect> 
    741741               </property> 
     
    758758                 <x>0</x> 
    759759                 <y>0</y> 
    760                  <width>100</width> 
    761                  <height>30</height> 
     760                 <width>88</width> 
     761                 <height>18</height> 
    762762                </rect> 
    763763               </property> 
     
    15941594                    <x>0</x> 
    15951595                    <y>0</y> 
    1596                     <width>100</width> 
    1597                     <height>30</height> 
     1596                    <width>72</width> 
     1597                    <height>16</height> 
    15981598                   </rect> 
    15991599                  </property> 
     
    16321632                    <x>0</x> 
    16331633                    <y>0</y> 
    1634                     <width>100</width> 
    1635                     <height>30</height> 
     1634                    <width>72</width> 
     1635                    <height>16</height> 
    16361636                   </rect> 
    16371637                  </property> 
  • src-qt4/pc-softwaremanager/pbiDBAccess.cpp

    rc9231c6 r4fc34c1  
    360360        app.hasME = QFile::exists( PBI_DBDIR+app.pbiorigin+"/xdg-menu" ); 
    361361        app.hasMT = QFile::exists( PBI_DBDIR+app.pbiorigin+"/xdg-mime" ); 
     362        app.hasWiki = true; //PBI-apps have wiki pages 
    362363        //Now create the path to the icon in the index 
    363364        app.icon = PBI_DBDIR+app.pbiorigin+"/icon.png"; 
  • src-qt4/pc-softwaremanager/pbiDBAccess.h

    rc220c7e r4fc34c1  
    3030        QString origin, pbiorigin, name, version, icon, description, shortdescription, portcat, maintainer, website, license, type, category, size, author, arch, rating; 
    3131        QString installedversion, installedsize, installedwhen, installedarch; 
    32         bool isInstalled, isLocked, isOrphan, isRecommended; 
     32        bool isInstalled, isLocked, isOrphan, isRecommended, hasWiki; 
    3333        QStringList similarApps, needsPkgs, tags, screenshots, possiblePlugins, installedPlugins, buildOptions, rdependency, dependency; 
    3434        bool hasDE, hasME, hasMT; //desktop/menu entries, mimetypes, path links 
     
    3636        NGApp(){ 
    3737          isInstalled=false; isLocked=false; isOrphan=false; isRecommended=false; 
    38           hasDE=false; hasME=false; hasMT=false; 
     38          hasDE=false; hasME=false; hasMT=false, hasWiki=false; 
    3939        } 
    4040        ~NGApp(){} 
  • src-qt4/pc-softwaremanager/pbiNgBackend.cpp

    r80166a6 r4fc34c1  
    5151   sysDB = new PBIDBAccess(); 
    5252   //Now startup the syncing process 
    53    slotSyncToDatabase(); 
    54    //QTimer::singleShot(1,this,SLOT(slotSyncToDatabase()) ); 
     53   UpdateIndexFiles(false); //do not force pbi index redownload on startup 
    5554 } 
    5655  
     
    574573} 
    575574 
    576 void PBIBackend::UpdateIndexFiles(){ 
    577   Extras::getCmdOutput("pbi updateindex"); //don't care about output at the moment 
     575void PBIBackend::UpdateIndexFiles(bool force){ 
     576  if(force){ Extras::getCmdOutput("pbi updateindex -f"); } 
     577  else{ Extras::getCmdOutput("pbi updateindex"); } 
    578578  slotSyncToDatabase(true, true); //now re-sync with the database and emit signals 
    579579} 
  • src-qt4/pc-softwaremanager/pbiNgBackend.h

    r80166a6 r4fc34c1  
    102102        void startAppSearch(); //get list of apps containing the search string (SIGNAL OUTPUT ONLY) 
    103103        void startSimilarSearch(); //get list of apps that are similar to the input app 
    104         void UpdateIndexFiles(); //Force update the PBI index from remote 
     104        void UpdateIndexFiles(bool force = true); //Force update the PBI index from remote 
    105105private: 
    106106        QWidget *parentWidget; 
  • src-qt4/pc-softwaremanager/pc-softwaremanager.pro

    rd25fc88 r4fc34c1  
    1616          extras.h \ 
    1717          pbiDBAccess.h \ 
    18           updateDialog.h 
     18          updateDialog.h \ 
     19          configDialog.h 
    1920 
    2021SOURCES += main.cpp \ 
     
    2324         pbiNgBackend.cpp \ 
    2425         pbiDBAccess.cpp \ 
    25          updateDialog.cpp 
     26         updateDialog.cpp \ 
     27         configDialog.cpp 
    2628 
    2729RESOURCES += SoftwareManager.qrc 
     
    2931FORMS   = mainUI.ui \ 
    3032                migrateUI.ui \ 
    31                 updateDialog.ui 
     33                updateDialog.ui \ 
     34                configDialog.ui 
    3235 
    3336TARGET  = pc-softwaremanager 
Note: See TracChangeset for help on using the changeset viewer.