author | drw <drw> | 2003-01-10 21:07:59 (UTC) |
---|---|---|
committer | drw <drw> | 2003-01-10 21:07:59 (UTC) |
commit | 3d5b0fdc15ed9b3ee392e52254aa9db73e2b7dac (patch) (side-by-side diff) | |
tree | a6cb5e1cc109fc9ec54aca9b61726111771f08bf | |
parent | 1c7ae0ce09caf37c3c7d5d284eee390940143a26 (diff) | |
download | opie-3d5b0fdc15ed9b3ee392e52254aa9db73e2b7dac.zip opie-3d5b0fdc15ed9b3ee392e52254aa9db73e2b7dac.tar.gz opie-3d5b0fdc15ed9b3ee392e52254aa9db73e2b7dac.tar.bz2 |
Made find dialog a toolbar, fixed show options under View menu
-rw-r--r-- | noncore/settings/aqpkg/mainwin.cpp | 162 | ||||
-rw-r--r-- | noncore/settings/aqpkg/mainwin.h | 22 | ||||
-rw-r--r-- | noncore/settings/aqpkg/networkpkgmgr.cpp | 52 | ||||
-rw-r--r-- | noncore/settings/aqpkg/networkpkgmgr.h | 3 |
4 files changed, 121 insertions, 118 deletions
diff --git a/noncore/settings/aqpkg/mainwin.cpp b/noncore/settings/aqpkg/mainwin.cpp index 4aa83b5..e184f6b 100644 --- a/noncore/settings/aqpkg/mainwin.cpp +++ b/noncore/settings/aqpkg/mainwin.cpp @@ -1,355 +1,343 @@ /*************************************************************************** mainwin.cpp - description ------------------- begin : Mon Aug 26 13:32:30 BST 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include <iostream> using namespace std; #include <qpe/qpemenubar.h> #include <qpe/qpetoolbar.h> #include <qpe/resource.h> #include <qaction.h> +#include <qlineedit.h> #include <qmenubar.h> #include <qmessagebox.h> #include <qpopupmenu.h> #include <qtimer.h> +#include <qwhatsthis.h> #include <qwidgetstack.h> #include "mainwin.h" #include "progresswidget.h" #include "datamgr.h" #include "networkpkgmgr.h" #include "settingsimpl.h" #include "helpwindow.h" #include "utils.h" #include "global.h" MainWindow :: MainWindow() : QMainWindow( 0x0, 0x0, WStyle_ContextHelp ) { setCaption( tr( "AQPkg - Package Manager" ) ); // Create UI widgets progressWindow = new ProgressWidget( this ); networkPkgWindow = new NetworkPackageManager( this ); // Build menu and tool bars setToolBarsMovable( FALSE ); QPEToolBar *bar = new QPEToolBar( this ); bar->setHorizontalStretchable( TRUE ); QPEMenuBar *mb = new QPEMenuBar( bar ); mb->setMargin( 0 ); bar = new QPEToolBar( this ); + // Find toolbar + findBar = new QPEToolBar( this ); + addToolBar( findBar, QMainWindow::Top, true ); + findBar->setHorizontalStretchable( true ); + findEdit = new QLineEdit( findBar ); + QWhatsThis::add( findEdit, tr( "Type the text to search for here." ) ); + findBar->setStretchableWidget( findEdit ); + connect( findEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( findPackage( const QString & ) ) ); + // Packages menu QPopupMenu *popup = new QPopupMenu( this ); QAction *a = new QAction( tr( "Update lists" ), Resource::loadPixmap( "aqpkg/update" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to update package lists from servers." ) ); connect( a, SIGNAL( activated() ), networkPkgWindow, SLOT( updateServer() ) ); a->addTo( popup ); a->addTo( bar ); actionUpgrade = new QAction( tr( "Upgrade" ), Resource::loadPixmap( "aqpkg/upgrade" ), QString::null, 0, this, 0 ); actionUpgrade->setWhatsThis( tr( "Click here to upgrade all installed packages if a newer version is available." ) ); connect( actionUpgrade, SIGNAL( activated() ), networkPkgWindow, SLOT( upgradePackages() ) ); actionUpgrade->addTo( popup ); actionUpgrade->addTo( bar ); iconDownload = Resource::loadPixmap( "aqpkg/download" ); iconRemove = Resource::loadPixmap( "aqpkg/remove" ); actionDownload = new QAction( tr( "Download" ), iconDownload, QString::null, 0, this, 0 ); actionDownload->setWhatsThis( tr( "Click here to download the currently selected package(s)." ) ); connect( actionDownload, SIGNAL( activated() ), networkPkgWindow, SLOT( downloadPackage() ) ); actionDownload->addTo( popup ); actionDownload->addTo( bar ); a = new QAction( tr( "Apply changes" ), Resource::loadPixmap( "aqpkg/apply" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to install, remove or upgrade currently selected package(s)." ) ); connect( a, SIGNAL( activated() ), networkPkgWindow, SLOT( applyChanges() ) ); a->addTo( popup ); a->addTo( bar ); mb->insertItem( tr( "Packages" ), popup ); // Search menu popup = new QPopupMenu( this ); a = new QAction( tr( "Find" ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); - a->setWhatsThis( tr( "Click here to search for a specific package." ) ); - connect( a, SIGNAL( activated() ), this, SLOT( searchForPackage() ) ); + a->setWhatsThis( tr( "Click here to search for text in package names." ) ); + connect( a, SIGNAL( activated() ), this, SLOT( displayFindBar() ) ); a->addTo( popup ); - a = new QAction( tr( "Find next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 ); - a->setWhatsThis( tr( "Click here to search for the next package." ) ); - connect( a, SIGNAL( activated() ), this, SLOT( repeatSearchForPackage() ) ); - a->addTo( popup ); + actionFindNext = new QAction( tr( "Find next" ), Resource::loadIconSet( "next" ), QString::null, 0, this, 0 ); + actionFindNext->setEnabled( FALSE ); + actionFindNext->setWhatsThis( tr( "Click here to search for the package name containing the text you are searching for." ) ); + connect( actionFindNext, SIGNAL( activated() ), this, SLOT( repeatFind() ) ); + actionFindNext->addTo( popup ); + actionFindNext->addTo( findBar ); // Show 'quick jump' keypad? popup->insertSeparator(); - a = new QAction( tr( "Filter by category" ), Resource::loadPixmap( "aqpkg/filter" ), QString::null, 0, this, 0 ); - a->setWhatsThis( tr( "Click here to list packages belonging to one category." ) ); - connect( a, SIGNAL( activated() ), this, SLOT( filterCategory() ) ); - a->addTo( popup ); + actionFilter = new QAction( tr( "Filter by category" ), Resource::loadPixmap( "aqpkg/filter" ), QString::null, 0, this, 0 ); + actionFilter->setToggleAction( TRUE ); + actionFilter->setWhatsThis( tr( "Click here to list packages belonging to one category." ) ); + connect( actionFilter, SIGNAL( activated() ), this, SLOT( filterCategory() ) ); + actionFilter->addTo( popup ); a = new QAction( tr( "Set filter category" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to change package category to used filter." ) ); connect( a, SIGNAL( activated() ), this, SLOT( setFilterCategory() ) ); a->addTo( popup ); mb->insertItem( tr( "Search" ), popup ); // View menu popup = new QPopupMenu( this ); - a = new QAction( tr( "Show packages not installed" ), QString::null, 0, this, 0 ); - a->setWhatsThis( tr( "Click here to show packages available which have not been installed." ) ); - connect( a, SIGNAL( activated() ), this, SLOT( filterUninstalledPackages() ) ); - a->addTo( popup ); + actionUninstalled = new QAction( tr( "Show packages not installed" ), QString::null, 0, this, 0 ); + actionUninstalled->setToggleAction( TRUE ); + actionUninstalled->setWhatsThis( tr( "Click here to show packages available which have not been installed." ) ); + connect( actionUninstalled, SIGNAL( activated() ), this, SLOT( filterUninstalledPackages() ) ); + actionUninstalled->addTo( popup ); - a = new QAction( tr( "Show installed packages" ), QString::null, 0, this, 0 ); - a->setWhatsThis( tr( "Click here to show packages currently installed on this device." ) ); - connect( a, SIGNAL( activated() ), this, SLOT( filterInstalledPackages() ) ); - a->addTo( popup ); + actionInstalled = new QAction( tr( "Show installed packages" ), QString::null, 0, this, 0 ); + actionInstalled->setToggleAction( TRUE ); + actionInstalled->setWhatsThis( tr( "Click here to show packages currently installed on this device." ) ); + connect( actionInstalled, SIGNAL( activated() ), this, SLOT( filterInstalledPackages() ) ); + actionInstalled->addTo( popup ); - a = new QAction( tr( "Show updated packages" ), QString::null, 0, this, 0 ); - a->setWhatsThis( tr( "Click here to show packages currently installed on this device which have a newer version available." ) ); - connect( a, SIGNAL( activated() ), this, SLOT( filterUpgradedPackages() ) ); - a->addTo( popup ); + actionUpdated = new QAction( tr( "Show updated packages" ), QString::null, 0, this, 0 ); + actionUpdated->setToggleAction( TRUE ); + actionUpdated->setWhatsThis( tr( "Click here to show packages currently installed on this device which have a newer version available." ) ); + connect( actionUpdated, SIGNAL( activated() ), this, SLOT( filterUpgradedPackages() ) ); + actionUpdated->addTo( popup ); popup->insertSeparator(); a = new QAction( tr( "Configure" ), Resource::loadPixmap( "aqpkg/config" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to configure this application." ) ); connect( a, SIGNAL( activated() ), this, SLOT( displaySettings() ) ); a->addTo( popup ); popup->insertSeparator(); a = new QAction( tr( "Help" ), Resource::loadPixmap( "help_icon" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here for help." ) ); connect( a, SIGNAL( activated() ), this, SLOT( displayHelp() ) ); a->addTo( popup ); a = new QAction( tr( "About" ), Resource::loadPixmap( "UtilsIcon" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here for software version information." ) ); connect( a, SIGNAL( activated() ), this, SLOT( displayAbout() ) ); a->addTo( popup ); mb->insertItem( tr( "View" ), popup ); + // Finish find toolbar creation + a = new QAction( QString::null, Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); + a->setWhatsThis( tr( "Click here to hide the find toolbar." ) ); + connect( a, SIGNAL( activated() ), this, SLOT( hideFindBar() ) ); + a->addTo( findBar ); + findBar->hide(); + + // Create widget stack and add UI widgets stack = new QWidgetStack( this ); stack->addWidget( progressWindow, 2 ); stack->addWidget( networkPkgWindow, 1 ); setCentralWidget( stack ); stack->raiseWidget( progressWindow ); // Delayed call to finish initialization QTimer::singleShot( 100, this, SLOT( init() ) ); } MainWindow :: ~MainWindow() { delete mgr; } void MainWindow :: init() { stack->raiseWidget( progressWindow ); mgr = new DataManager(); connect( mgr, SIGNAL( progressSetSteps( int ) ), progressWindow, SLOT( setSteps( int ) ) ); connect( mgr, SIGNAL( progressSetMessage( const QString & ) ), progressWindow, SLOT( setMessage( const QString & ) ) ); connect( mgr, SIGNAL( progressUpdate( int ) ), progressWindow, SLOT( update( int ) ) ); mgr->loadServers(); networkPkgWindow->setDataManager( mgr ); networkPkgWindow->updateData(); connect( networkPkgWindow, SIGNAL( appRaiseMainWidget() ), this, SLOT( raiseMainWidget() ) ); connect( networkPkgWindow, SIGNAL( appRaiseProgressWidget() ), this, SLOT( raiseProgressWidget() ) ); connect( networkPkgWindow, SIGNAL( appEnableUpgrade( bool ) ), this, SLOT( enableUpgrade( bool ) ) ); connect( networkPkgWindow, SIGNAL( appEnableDownload( bool ) ), this, SLOT( enableDownload( bool ) ) ); connect( networkPkgWindow, SIGNAL( progressSetSteps( int ) ), progressWindow, SLOT( setSteps( int ) ) ); connect( networkPkgWindow, SIGNAL( progressSetMessage( const QString & ) ), progressWindow, SLOT( setMessage( const QString & ) ) ); connect( networkPkgWindow, SIGNAL( progressUpdate( int ) ), progressWindow, SLOT( update( int ) ) ); stack->raiseWidget( networkPkgWindow ); } void MainWindow :: setDocument( const QString &doc ) { // Remove path from package QString package = Utils::getPackageNameFromIpkFilename( doc ); std::cout << "Selecting package " << package << std::endl; networkPkgWindow->selectLocalPackage( package ); } void MainWindow :: displaySettings() { SettingsImpl *dlg = new SettingsImpl( mgr, this, "Settings", true ); if ( dlg->showDlg( 0 ) ) networkPkgWindow->updateData(); delete dlg; } void MainWindow :: displayHelp() { HelpWindow *dlg = new HelpWindow( this ); dlg->exec(); delete dlg; } -void MainWindow :: searchForPackage() +void MainWindow :: displayFindBar() { - networkPkgWindow->searchForPackage( false ); + findBar->show(); + findEdit->setFocus(); } -void MainWindow :: repeatSearchForPackage() +void MainWindow :: repeatFind() { - networkPkgWindow->searchForPackage( true ); + networkPkgWindow->searchForPackage( findEdit->text() ); } -void MainWindow :: displayAbout() +void MainWindow :: findPackage( const QString &text ) { - QMessageBox::about( this, tr( "About AQPkg" ), tr( VERSION_TEXT ) ); + actionFindNext->setEnabled( !text.isEmpty() ); + networkPkgWindow->searchForPackage( text ); } - -void MainWindow :: filterUninstalledPackages() +void MainWindow :: hideFindBar() { - bool val; - if ( filter->isItemChecked( mnuShowUninstalledPkgsId ) ) - { - val = false; - filter->setItemChecked( mnuShowUninstalledPkgsId, false ); + findBar->hide(); } - else + +void MainWindow :: displayAbout() { - val = true; - filter->setItemChecked( mnuShowUninstalledPkgsId, true ); + QMessageBox::about( this, tr( "About AQPkg" ), tr( VERSION_TEXT ) ); } - filter->setItemChecked( mnuShowInstalledPkgsId, false ); - networkPkgWindow->showOnlyInstalledPackages( false ); - filter->setItemChecked( mnuShowUpgradedPkgsId, false ); - networkPkgWindow->showUpgradedPackages( false ); - - networkPkgWindow->showOnlyUninstalledPackages( val ); - +void MainWindow :: filterUninstalledPackages() +{ + networkPkgWindow->showOnlyUninstalledPackages( actionUninstalled->isOn() ); + actionInstalled->setOn( FALSE ); + actionUpdated->setOn( FALSE ); } void MainWindow :: filterInstalledPackages() { - bool val; - if ( filter->isItemChecked( mnuShowInstalledPkgsId ) ) - { - val = false; - filter->setItemChecked( mnuShowInstalledPkgsId, false ); - } - else - { - val = true; - filter->setItemChecked( mnuShowInstalledPkgsId, true ); - } - - filter->setItemChecked( mnuShowUninstalledPkgsId, false ); - networkPkgWindow->showOnlyUninstalledPackages( false ); - filter->setItemChecked( mnuShowUpgradedPkgsId, false ); - networkPkgWindow->showUpgradedPackages( false ); - - networkPkgWindow->showOnlyInstalledPackages( val ); + actionUninstalled->setOn( FALSE ); + networkPkgWindow->showOnlyInstalledPackages( actionInstalled->isOn() ); + actionUpdated->setOn( FALSE ); } void MainWindow :: filterUpgradedPackages() { - bool val; - if ( filter->isItemChecked( mnuShowUpgradedPkgsId ) ) - { - val = false; - filter->setItemChecked( mnuShowUpgradedPkgsId, false ); - } - else - { - val = true; - filter->setItemChecked( mnuShowUpgradedPkgsId, true ); - } - - filter->setItemChecked( mnuShowUninstalledPkgsId, false ); - networkPkgWindow->showOnlyUninstalledPackages( false ); - filter->setItemChecked( mnuShowInstalledPkgsId, false ); - networkPkgWindow->showOnlyInstalledPackages( false ); - - networkPkgWindow->showUpgradedPackages( val ); + actionUninstalled->setOn( FALSE ); + actionInstalled->setOn( FALSE ); + networkPkgWindow->showUpgradedPackages( actionUpdated->isOn() ); } void MainWindow :: setFilterCategory() { if ( networkPkgWindow->setFilterCategory( ) ) - filter->setItemChecked( mnuFilterByCategory, true ); + actionFilter->setOn( TRUE ); } void MainWindow :: filterCategory() { - if ( filter->isItemChecked( mnuFilterByCategory ) ) + if ( !actionFilter->isOn() ) { - networkPkgWindow->filterByCategory( false ); - filter->setItemChecked( mnuFilterByCategory, false ); + networkPkgWindow->filterByCategory( FALSE ); } else { - if ( networkPkgWindow->filterByCategory( true ) ) - filter->setItemChecked( mnuFilterByCategory, true ); + actionFilter->setOn( networkPkgWindow->filterByCategory( TRUE ) ); } } void MainWindow :: raiseMainWidget() { stack->raiseWidget( networkPkgWindow ); } void MainWindow :: raiseProgressWidget() { stack->raiseWidget( progressWindow ); } void MainWindow :: enableUpgrade( bool enabled ) { actionUpgrade->setEnabled( enabled ); } void MainWindow :: enableDownload( bool enabled ) { if ( enabled ) { actionDownload->setIconSet( iconDownload ); actionDownload->setText( tr( "Download" ) ); actionDownload->setWhatsThis( tr( "Click here to download the currently selected package(s)." ) ); } else { actionDownload->setIconSet( iconRemove ); actionDownload->setText( tr( "Remove" ) ); actionDownload->setWhatsThis( tr( "Click here to uninstall the currently selected package(s)." ) ); } } diff --git a/noncore/settings/aqpkg/mainwin.h b/noncore/settings/aqpkg/mainwin.h index 028ef5b..ef67cc9 100644 --- a/noncore/settings/aqpkg/mainwin.h +++ b/noncore/settings/aqpkg/mainwin.h @@ -1,83 +1,89 @@ /*************************************************************************** mainwin.h - description ------------------- begin : Mon Aug 26 13:32:30 BST 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef MAINWIN_H #define MAINWIN_H #include <qmainwindow.h> #include <qpixmap.h> -//#include <qwidgetstack.h> class QWidgetStack; class QPEToolBar; +class QLineEdit; class QAction; class ProgressWidget; class NetworkPackageManager; class DataManager; class MainWindow :public QMainWindow { Q_OBJECT public: MainWindow(); ~MainWindow(); private: DataManager *mgr; - QMenuBar *menu; - QPopupMenu *help; - QPopupMenu *settings; - QPopupMenu *edit; - QPopupMenu *filter; QWidgetStack *stack; + + QPEToolBar *findBar; + QLineEdit *findEdit; + QAction *actionFindNext; + QAction *actionFilter; QAction *actionUpgrade; QAction *actionDownload; + QAction *actionUninstalled; + QAction *actionInstalled; + QAction *actionUpdated; + QPixmap iconDownload; QPixmap iconRemove; NetworkPackageManager *networkPkgWindow; ProgressWidget *progressWindow; int mnuShowUninstalledPkgsId; int mnuShowInstalledPkgsId; int mnuShowUpgradedPkgsId; int mnuFilterByCategory; int mnuSetFilterCategory; public slots: void setDocument( const QString &doc ); void displayHelp(); - void searchForPackage(); - void repeatSearchForPackage(); + void displayFindBar(); + void repeatFind(); + void findPackage( const QString & ); + void hideFindBar(); void displayAbout(); void displaySettings(); void filterUninstalledPackages(); void filterInstalledPackages(); void filterUpgradedPackages(); void filterCategory(); void setFilterCategory(); void raiseMainWidget(); void raiseProgressWidget(); void enableUpgrade( bool ); void enableDownload( bool ); private slots: void init(); }; #endif diff --git a/noncore/settings/aqpkg/networkpkgmgr.cpp b/noncore/settings/aqpkg/networkpkgmgr.cpp index 91afe02..c209589 100644 --- a/noncore/settings/aqpkg/networkpkgmgr.cpp +++ b/noncore/settings/aqpkg/networkpkgmgr.cpp @@ -1,869 +1,879 @@ /*************************************************************************** networkpkgmgr.cpp - description ------------------- begin : Mon Aug 26 13:32:30 BST 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include <fstream> #include <iostream> using namespace std; #include <unistd.h> #include <stdlib.h> #include <linux/limits.h> #ifdef QWS #include <qpe/qpeapplication.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/config.h> #else #include <qapplication.h> #endif #include <qlabel.h> #include <qfile.h> #include <qmessagebox.h> #include "datamgr.h" #include "networkpkgmgr.h" #include "installdlgimpl.h" #include "ipkg.h" #include "inputdlg.h" #include "letterpushbutton.h" #include "categoryfilterimpl.h" #include "global.h" extern int compareVersions( const char *v1, const char *v2 ); NetworkPackageManager::NetworkPackageManager( QWidget *parent, const char *name ) : QWidget(parent, name) { #ifdef QWS // read download directory from config file Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); currentlySelectedServer = cfg.readEntry( "selectedServer", "local" ); showJumpTo = cfg.readBoolEntry( "showJumpTo", "true" ); #endif showUninstalledPkgs = false; showInstalledPkgs = false; showUpgradedPkgs = false; categoryFilterEnabled = false; initGui(); } NetworkPackageManager::~NetworkPackageManager() { } void NetworkPackageManager :: setDataManager( DataManager *dm ) { dataMgr = dm; } void NetworkPackageManager :: updateData() { emit progressSetSteps( dataMgr->getServerList().size() ); serversList->clear(); packagesList->clear(); vector<Server>::iterator it; int activeItem = -1; int i; QString serverName; for ( i = 0, it = dataMgr->getServerList().begin() ; it != dataMgr->getServerList().end() ; ++it, ++i ) { serverName = it->getServerName(); emit progressSetMessage( tr( "Building server list:\n\t%1" ).arg( serverName ) ); emit progressUpdate( i ); qApp->processEvents(); // cout << "Adding " << it->getServerName() << " to combobox" << endl; if ( !it->isServerActive() ) { cout << serverName << " is not active" << endl; i--; continue; } serversList->insertItem( serverName ); if ( serverName == currentlySelectedServer ) activeItem = i; } // set selected server to be active server if ( activeItem != -1 ) serversList->setCurrentItem( activeItem ); serverSelected( 0, FALSE ); } void NetworkPackageManager :: selectLocalPackage( const QString &pkg ) { // First select local server for ( int i = 0 ; i < serversList->count() ; ++i ) { if ( serversList->text( i ) == LOCAL_IPKGS ) { serversList->setCurrentItem( i ); break; } } serverSelected( 0 ); // Now set the check box of the selected package for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); item != 0 ; item = (QCheckListItem *)item->nextSibling() ) { if ( item->text().startsWith( pkg ) ) { item->setOn( true ); break; } } } void NetworkPackageManager :: initGui() { QLabel *l = new QLabel( tr( "Servers" ), this ); serversList = new QComboBox( this ); connect( serversList, SIGNAL(activated( int )), this, SLOT(serverSelected( int ))); packagesList = new QListView( this ); QVBoxLayout *vbox = new QVBoxLayout( this, 0, -1 ); QHBoxLayout *hbox1 = new QHBoxLayout( vbox, -1 ); hbox1->addWidget( l ); hbox1->addWidget( serversList ); QHBoxLayout *hbox3 = new QHBoxLayout( vbox, -1 ); QHBoxLayout *hbox4 = new QHBoxLayout( vbox, -1 ); if ( showJumpTo ) { char text[2]; text[1] = '\0'; for ( int i = 0 ; i < 26 ; ++i ) { text[0] = 'A' + i; LetterPushButton *b = new LetterPushButton( text, this ); connect( b, SIGNAL( released( QString ) ), this, SLOT( letterPushed( QString ) ) ); if ( i < 13 ) hbox3->addWidget( b ); else hbox4->addWidget( b ); } } vbox->addWidget( packagesList ); packagesList->addColumn( tr( "Packages" ) ); downloadEnabled = TRUE; } void NetworkPackageManager :: serverSelected( int index ) { serverSelected( index, TRUE ); } void NetworkPackageManager :: serverSelected( int, bool raiseProgress ) { // display packages QString serverName = serversList->currentText(); currentlySelectedServer = serverName; vector<Server>::iterator s = dataMgr->getServer( serverName ); vector<Package> &list = s->getPackageList(); vector<Package>::iterator it; // Display progress widget while loading list bool doProgress = ( list.size() > 200 ); if ( doProgress ) { if ( raiseProgress ) { emit appRaiseProgressWidget(); } emit progressSetSteps( list.size() ); emit progressSetMessage( tr( "Building package list for:\n\t%1" ).arg( serverName ) ); } packagesList->clear(); #ifdef QWS // read download directory from config file Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); cfg.writeEntry( "selectedServer", currentlySelectedServer ); #endif int i = 0; for ( it = list.begin() ; it != list.end() ; ++it ) { // Update progress after every 100th package (arbitrary value, seems to give good balance) i++; if ( ( i % 100 ) == 0 ) { if ( doProgress ) { emit progressUpdate( i ); } qApp->processEvents(); } QString text = ""; // Apply show only uninstalled packages filter if ( showUninstalledPkgs && it->isInstalled() ) continue; // Apply show only installed packages filter if ( showInstalledPkgs && !it->isInstalled() ) continue; // Apply show only new installed packages filter if ( showUpgradedPkgs ) { if ( !it->isInstalled() || compareVersions( it->getInstalledVersion(), it->getVersion() ) != 1 ) continue; } // Apply the section filter if ( categoryFilterEnabled && categoryFilter != "" ) { if ( it->getSection() == "" || categoryFilter.find( it->getSection().lower() ) == -1 ) continue; } // If the local server, only display installed packages if ( serverName == LOCAL_SERVER && !it->isInstalled() ) continue; - text += it->getPackageName(); + text.append( it->getPackageName() ); if ( it->isInstalled() ) { - text += " (installed)"; + text.append( " (installed)" ); // If a different version of package is available, postfix it with an * if ( it->getVersion() != it->getInstalledVersion() ) { if ( compareVersions( it->getInstalledVersion(), it->getVersion() ) == 1 ) - text += "*"; + text.append( "*" ); } } QCheckListItem *item = new QCheckListItem( packagesList, text, QCheckListItem::CheckBox ); if ( it->isInstalled() ) { QString destName = ""; if ( it->getLocalPackage() ) { if ( it->getLocalPackage()->getInstalledTo() ) destName = it->getLocalPackage()->getInstalledTo()->getDestinationName(); } else { if ( it->getInstalledTo() ) destName = it->getInstalledTo()->getDestinationName(); } if ( destName != "" ) - new QCheckListItem( item, QString( tr( "Installed To - " ) ) + destName ); + new QCheckListItem( item, QString( tr( "Installed To - %1" ).arg( destName ) ) ); } if ( !it->isPackageStoredLocally() ) { - new QCheckListItem( item, QString( tr( "Description - " ) ) + it->getDescription() ); - new QCheckListItem( item, QString( tr( "Size - " ) ) + it->getPackageSize() ); - new QCheckListItem( item, QString( tr( "Section - " ) ) + it->getSection() ); + new QCheckListItem( item, QString( tr( "Description - %1" ).arg( it->getDescription() ) ) ); + new QCheckListItem( item, QString( tr( "Size - %1" ).arg( it->getPackageSize() ) ) ); + new QCheckListItem( item, QString( tr( "Section - %1" ).arg( it->getSection() ) ) ); } else - new QCheckListItem( item, QString( tr( "Filename - " ) ) + it->getFilename() ); + new QCheckListItem( item, QString( tr( "Filename - %1" ).arg( it->getFilename() ) ) ); if ( serverName == LOCAL_SERVER ) { - new QCheckListItem( item, QString( tr( "V. Installed - " ) ) + it->getVersion() ); + new QCheckListItem( item, QString( tr( "V. Installed - %1" ).arg( it->getVersion() ) ) ); } else { - new QCheckListItem( item, QString( tr( "V. Available - " ) ) + it->getVersion() ); + new QCheckListItem( item, QString( tr( "V. Available - %1" ).arg( it->getVersion() ) ) ); if ( it->getLocalPackage() ) { if ( it->isInstalled() ) - new QCheckListItem( item, QString( tr( "V. Installed - " ) ) + it->getInstalledVersion() ); + new QCheckListItem( item, QString( tr( "V. Installed - %1" ).arg( it->getInstalledVersion() ) ) ); } } packagesList->insertItem( item ); } // If the local server or the local ipkgs server disable the download button if ( serverName == LOCAL_SERVER ) { downloadEnabled = TRUE; emit appEnableUpgrade( FALSE ); } else if ( serverName == LOCAL_IPKGS ) { downloadEnabled = FALSE; emit appEnableUpgrade( FALSE ); } else { downloadEnabled = TRUE; emit appEnableUpgrade( TRUE ); } emit appEnableDownload( downloadEnabled ); // Display this widget once everything is done if ( doProgress && raiseProgress ) { emit appRaiseMainWidget(); } } void NetworkPackageManager :: updateServer() { QString serverName = serversList->currentText(); // Update the current server // Display dialog // Disable buttons to stop silly people clicking lots on them :) // First, write out ipkg_conf file so that ipkg can use it dataMgr->writeOutIpkgConf(); Ipkg ipkg; ipkg.setOption( "update" ); InstallDlgImpl dlg( &ipkg, tr( "Refreshing server package lists" ), this, tr( "Upgrade" ), true ); dlg.showDlg(); // Reload data dataMgr->reloadServerData(); serverSelected(-1); // delete progDlg; } void NetworkPackageManager :: upgradePackages() { // We're gonna do an upgrade of all packages // First warn user that this isn't recommended + // TODO - ODevice???? QString text = tr( "WARNING: Upgrading while\nOpie/Qtopia is running\nis NOT recommended!\n\nAre you sure?\n" ); QMessageBox warn( tr( "Warning" ), text, QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No | QMessageBox::Escape | QMessageBox::Default , 0, this ); warn.adjustSize(); if ( warn.exec() == QMessageBox::Yes ) { // First, write out ipkg_conf file so that ipkg can use it dataMgr->writeOutIpkgConf(); // Now run upgrade Ipkg ipkg; ipkg.setOption( "upgrade" ); InstallDlgImpl dlg( &ipkg, tr( "Upgrading installed packages" ), this, tr( "Upgrade" ), true ); dlg.showDlg(); // Reload data dataMgr->reloadServerData(); serverSelected(-1); } } void NetworkPackageManager :: downloadPackage() { bool doUpdate = true; if ( downloadEnabled ) { // See if any packages are selected bool found = false; if ( serversList->currentText() != LOCAL_SERVER ) { for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); item != 0 && !found; item = (QCheckListItem *)item->nextSibling() ) { if ( item->isOn() ) found = true; } } // If user selected some packages then download the and store the locally // otherwise, display dialog asking user what package to download from an http server // and whether to install it if ( found ) downloadSelectedPackages(); else downloadRemotePackage(); } else { doUpdate = false; for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); item != 0 ; item = (QCheckListItem *)item->nextSibling() ) { if ( item->isOn() ) { QString name = item->text(); int pos = name.find( "*" ); name.truncate( pos ); // if (there is a (installed), remove it pos = name.find( "(installed)" ); if ( pos > 0 ) name.truncate( pos - 1 ); Package *p = dataMgr->getServer( serversList->currentText() )->getPackage( name ); QString msgtext; msgtext = tr( "Are you sure you wish to delete\n%1?" ).arg( (const char *)p->getPackageName() ); if ( QMessageBox::information( this, tr( "Are you sure?" ), msgtext, tr( "No" ), tr( "Yes" ) ) == 1 ) { doUpdate = true; QFile f( p->getFilename() ); f.remove(); } } } } if ( doUpdate ) { dataMgr->reloadServerData(); serverSelected( -1 ); } } void NetworkPackageManager :: downloadSelectedPackages() { // First, write out ipkg_conf file so that ipkg can use it dataMgr->writeOutIpkgConf(); // Display dialog to user asking where to download the files to bool ok = FALSE; QString dir = ""; #ifdef QWS // read download directory from config file Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); dir = cfg.readEntry( "downloadDir", "/home/root/Documents/application/ipkg" ); #endif QString text = InputDialog::getText( tr( "Download to where" ), tr( "Enter path to download to" ), dir, &ok, this ); if ( ok && !text.isEmpty() ) dir = text; // user entered something and pressed ok else return; // user entered nothing or pressed cancel #ifdef QWS // Store download directory in config file cfg.writeEntry( "downloadDir", dir ); #endif // Get starting directory char initDir[PATH_MAX]; getcwd( initDir, PATH_MAX ); // Download each package Ipkg ipkg; connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); ipkg.setOption( "download" ); ipkg.setRuntimeDirectory( dir ); for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); item != 0 ; item = (QCheckListItem *)item->nextSibling() ) { if ( item->isOn() ) { QString name = item->text(); int pos = name.find( "*" ); name.truncate( pos ); // if (there is a (installed), remove it pos = name.find( "(installed)" ); if ( pos > 0 ) name.truncate( pos - 1 ); ipkg.setPackage( name ); ipkg.runIpkg( ); } } } void NetworkPackageManager :: downloadRemotePackage() { // Display dialog bool ok; QString package = InputDialog::getText( tr( "Install Remote Package" ), tr( "Enter package location" ), "http://", &ok, this ); if ( !ok || package.isEmpty() ) return; // DownloadRemoteDlgImpl dlg( this, "Install", true ); // if ( dlg.exec() == QDialog::Rejected ) // return; // grab details from dialog // QString package = dlg.getPackageLocation(); InstallData item; item.option = "I"; item.packageName = package; vector<InstallData> workingPackages; workingPackages.push_back( item ); InstallDlgImpl dlg2( workingPackages, dataMgr, this, "Install", true ); dlg2.showDlg(); // Reload data dataMgr->reloadServerData(); serverSelected(-1); #ifdef QWS // Finally let the main system update itself QCopEnvelope e("QPE/System", "linkChanged(QString)"); QString lf = QString::null; e << lf; #endif } void NetworkPackageManager :: applyChanges() { stickyOption = ""; // First, write out ipkg_conf file so that ipkg can use it dataMgr->writeOutIpkgConf(); // Now for each selected item // deal with it vector<InstallData> workingPackages; for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); item != 0 ; item = (QCheckListItem *)item->nextSibling() ) { if ( item->isOn() ) { InstallData data = dealWithItem( item ); workingPackages.push_back( data ); } } if ( workingPackages.size() == 0 ) { // Nothing to do QMessageBox::information( this, tr( "Nothing to do" ), tr( "No packages selected" ), tr( "OK" ) ); return; } // do the stuff InstallDlgImpl dlg( workingPackages, dataMgr, this, "Install", true ); dlg.showDlg(); // Reload data dataMgr->reloadServerData(); serverSelected(-1); #ifdef QWS // Finally let the main system update itself QCopEnvelope e("QPE/System", "linkChanged(QString)"); QString lf = QString::null; e << lf; #endif } // decide what to do - either remove, upgrade or install // Current rules: // If not installed - install // If installed and different version available - upgrade // If installed and version up to date - remove InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item ) { QString name = item->text(); int pos = name.find( "*" ); name.truncate( pos ); // if (there is a (installed), remove it pos = name.find( "(installed)" ); if ( pos > 0 ) name.truncate( pos - 1 ); // Get package vector<Server>::iterator s = dataMgr->getServer( serversList->currentText() ); Package *p = s->getPackage( name ); // If the package has a filename then it is a local file if ( p->isPackageStoredLocally() ) name = p->getFilename(); QString option; QString dest = "root"; if ( !p->isInstalled() ) { InstallData item; item.option = "I"; item.packageName = name; return item; } else { InstallData item; item.option = "D"; if ( !p->isPackageStoredLocally() ) item.packageName = p->getInstalledPackageName(); else item.packageName = name; if ( p->getInstalledTo() ) { item.destination = p->getInstalledTo(); cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl; cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl; } else { item.destination = p->getLocalPackage()->getInstalledTo(); } // Now see if version is newer or not int val = compareVersions( p->getInstalledVersion(), p->getVersion() ); // If the version requested is older and user selected a local ipk file, then reinstall the file if ( p->isPackageStoredLocally() && val == -1 ) val = 0; if ( val == -2 ) { // Error - should handle } else if ( val == -1 ) { // Version available is older - remove only item.option = "D"; } else { QString caption; QString text; QString secondButton; QString secondOption; if ( val == 0 ) { // Version available is the same - option to remove or reinstall caption = tr( "Do you wish to remove or reinstall\n%1?" ); text = tr( "Remove or ReInstall" ); secondButton = tr( "ReInstall" ); secondOption = tr( "R" ); } else if ( val == 1 ) { // Version available is newer - option to remove or upgrade caption = tr( "Do you wish to remove or upgrade\n%1?" ); text = tr( "Remove or Upgrade" ); secondButton = tr( "Upgrade" ); secondOption = tr( "U" ); } // Sticky option not implemented yet, but will eventually allow // the user to say something like 'remove all' if ( stickyOption == "" ) { QString msgtext; msgtext = caption.arg( ( const char * )name ); switch( QMessageBox::information( this, text, msgtext, tr( "Remove" ), secondButton ) ) { case 0: // Try again or Enter // option 0 = Remove item.option = "D"; break; case 1: // Quit or Escape item.option = secondOption; break; } } else { // item.option = stickyOption; } } // Check if we are reinstalling the same version if ( item.option != "R" ) item.recreateLinks = true; else item.recreateLinks = false; // User hit cancel (on dlg - assume remove) return item; } } void NetworkPackageManager :: displayText( const QString &t ) { cout << t << endl; } void NetworkPackageManager :: letterPushed( QString t ) { QCheckListItem *top = (QCheckListItem *)packagesList->firstChild(); QCheckListItem *start = (QCheckListItem *)packagesList->currentItem(); if ( packagesList->firstChild() == 0 ) return; QCheckListItem *item; if ( start == 0 ) { item = (QCheckListItem *)packagesList->firstChild(); start = top; } else item = (QCheckListItem *)start->nextSibling(); if ( item == 0 ) item = (QCheckListItem *)packagesList->firstChild(); do { if ( item->text().lower().startsWith( t.lower() ) ) { packagesList->setSelected( item, true ); packagesList->ensureItemVisible( item ); break; } item = (QCheckListItem *)item->nextSibling(); if ( !item ) item = (QCheckListItem *)packagesList->firstChild(); } while ( item != start); } -void NetworkPackageManager :: searchForPackage( bool findNext ) +void NetworkPackageManager :: searchForPackage( const QString &text ) { - bool ok = false; - if ( !findNext || lastSearchText.isEmpty() ) - lastSearchText = InputDialog::getText( tr( "Search for package" ), tr( "Enter package to search for" ), lastSearchText, &ok, this ).lower(); - else - ok = true; - - if ( ok && !lastSearchText.isEmpty() ) + if ( !text.isEmpty() ) { - cout << "searching for " << lastSearchText << endl; + cout << "searching for " << text << endl; // look through package list for text startng at current position vector<InstallData> workingPackages; QCheckListItem *start = (QCheckListItem *)packagesList->currentItem(); if ( start != 0 ) start = (QCheckListItem *)start->nextSibling(); if ( start == 0 ) start = (QCheckListItem *)packagesList->firstChild(); for ( QCheckListItem *item = start; item != 0 ; item = (QCheckListItem *)item->nextSibling() ) { cout << "checking " << item->text().lower() << endl; - if ( item->text().lower().find( lastSearchText ) != -1 ) + if ( item->text().lower().find( text ) != -1 ) { cout << "matched " << item->text() << endl; packagesList->ensureItemVisible( item ); packagesList->setCurrentItem( item ); break; } } } } void NetworkPackageManager :: showOnlyUninstalledPackages( bool val ) { showUninstalledPkgs = val; + if ( val ) + { + showInstalledPkgs = FALSE; + showUpgradedPkgs = FALSE; + } serverSelected( -1 ); } void NetworkPackageManager :: showOnlyInstalledPackages( bool val ) { showInstalledPkgs = val; + if ( val ) + { + showUninstalledPkgs = FALSE; + showUpgradedPkgs = FALSE; + } serverSelected( -1 ); } void NetworkPackageManager :: showUpgradedPackages( bool val ) { showUpgradedPkgs = val; + if ( val ) + { + showUninstalledPkgs = FALSE; + showInstalledPkgs = FALSE; + } serverSelected( -1 ); } bool NetworkPackageManager :: filterByCategory( bool val ) { if ( val ) { if ( categoryFilter == "" ) { if ( !setFilterCategory() ) return false; } categoryFilterEnabled = true; serverSelected( -1 ); return true; } else { // Turn off filter categoryFilterEnabled = false; serverSelected( -1 ); return false; } } bool NetworkPackageManager :: setFilterCategory( ) { // Get categories; CategoryFilterImpl dlg( DataManager::getAvailableCategories(), categoryFilter, this ); if ( dlg.exec() == QDialog::Accepted ) { categoryFilter = dlg.getSelectedFilter(); if ( categoryFilter == "" ) return false; categoryFilterEnabled = true; serverSelected( -1 ); return true; } return false; } diff --git a/noncore/settings/aqpkg/networkpkgmgr.h b/noncore/settings/aqpkg/networkpkgmgr.h index efef898..bd005e2 100644 --- a/noncore/settings/aqpkg/networkpkgmgr.h +++ b/noncore/settings/aqpkg/networkpkgmgr.h @@ -1,97 +1,96 @@ /*************************************************************************** networkpkgmgr.h - description ------------------- begin : Mon Aug 26 13:32:30 BST 2002 copyright : (C) 2002 by Andy Qua email : andy.qua@blueyonder.co.uk ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef NETWORKPKGMGR_H #define NETWORKPKGMGR_H #include <qlayout.h> #include <qpushbutton.h> #include <qwidget.h> #include <qcombobox.h> #include <qlistview.h> #include "datamgr.h" class InstallData; /** NetworkPackageManager is the base class of the project */ class NetworkPackageManager : public QWidget { Q_OBJECT public: /** construtor */ NetworkPackageManager( QWidget* parent=0, const char *name=0 ); /** destructor */ ~NetworkPackageManager(); void setDataManager( DataManager *dm ); void selectLocalPackage( const QString &pkg ); void updateData(); - void searchForPackage( bool findNext ); + void searchForPackage( const QString & ); void showOnlyUninstalledPackages( bool val ); void showOnlyInstalledPackages( bool val ); void showUpgradedPackages( bool val ); bool filterByCategory( bool val ); bool setFilterCategory(); private: DataManager *dataMgr; QComboBox *serversList; QListView *packagesList; QString currentlySelectedServer; - QString lastSearchText; QString categoryFilter; bool categoryFilterEnabled; bool showJumpTo; bool showUninstalledPkgs; bool showInstalledPkgs; bool showUpgradedPkgs; bool downloadEnabled; void initGui(); void showProgressDialog( char *initialText ); void downloadSelectedPackages(); void downloadRemotePackage(); void serverSelected( int index, bool showProgress ); InstallData dealWithItem( QCheckListItem *item ); QString stickyOption; signals: void appRaiseMainWidget(); void appRaiseProgressWidget(); void appEnableUpgrade( bool ); void appEnableDownload( bool ); void progressSetSteps( int ); void progressSetMessage( const QString & ); void progressUpdate( int ); public slots: void applyChanges(); void upgradePackages(); void downloadPackage(); void updateServer(); void displayText( const QString &t ); void letterPushed( QString t ); void serverSelected( int index ); }; #endif |