-rw-r--r-- | noncore/settings/aqpkg/aqpkg.pro | 9 | ||||
-rw-r--r-- | noncore/settings/aqpkg/categoryfilter.ui | 118 | ||||
-rw-r--r-- | noncore/settings/aqpkg/categoryfilterimpl.cpp | 71 | ||||
-rw-r--r-- | noncore/settings/aqpkg/categoryfilterimpl.h | 40 | ||||
-rw-r--r-- | noncore/settings/aqpkg/datamgr.cpp | 10 | ||||
-rw-r--r-- | noncore/settings/aqpkg/datamgr.h | 5 | ||||
-rw-r--r-- | noncore/settings/aqpkg/global.h | 2 | ||||
-rw-r--r-- | noncore/settings/aqpkg/mainwin.cpp | 23 | ||||
-rw-r--r-- | noncore/settings/aqpkg/mainwin.h | 5 | ||||
-rw-r--r-- | noncore/settings/aqpkg/networkpkgmgr.cpp | 59 | ||||
-rw-r--r-- | noncore/settings/aqpkg/networkpkgmgr.h | 4 | ||||
-rw-r--r-- | noncore/settings/aqpkg/package.h | 6 | ||||
-rw-r--r-- | noncore/settings/aqpkg/server.cpp | 19 | ||||
-rw-r--r-- | noncore/settings/aqpkg/server.h | 1 |
14 files changed, 363 insertions, 9 deletions
diff --git a/noncore/settings/aqpkg/aqpkg.pro b/noncore/settings/aqpkg/aqpkg.pro index 301f4f2..6cc5a23 100644 --- a/noncore/settings/aqpkg/aqpkg.pro +++ b/noncore/settings/aqpkg/aqpkg.pro @@ -10,17 +10,18 @@ HEADERS = global.h \ progressdlg.h \ installdlgimpl.h \ instoptionsimpl.h \ destination.h \ utils.h \ server.h \ helpwindow.h \ letterpushbutton.h \ - inputdlg.h + inputdlg.h \ + categoryfilterimpl.h SOURCES = mainwin.cpp \ datamgr.cpp \ mem.cpp \ settingsimpl.cpp \ ipkg.cpp \ networkpkgmgr.cpp \ main.cpp \ package.cpp \ @@ -28,17 +29,19 @@ SOURCES = mainwin.cpp \ installdlgimpl.cpp \ instoptionsimpl.cpp \ destination.cpp \ utils.cpp \ server.cpp \ helpwindow.cpp \ letterpushbutton.cpp \ inputdlg.cpp \ - version.cpp + version.cpp \ + categoryfilterimpl.cpp INTERFACES = settings.ui \ install.ui \ - instoptions.ui + instoptions.ui \ + categoryfilter.ui TARGET = aqpkg INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -lstdc++ DESTDIR = $(OPIEDIR)/bin diff --git a/noncore/settings/aqpkg/categoryfilter.ui b/noncore/settings/aqpkg/categoryfilter.ui new file mode 100644 index 0000000..3416243 --- a/dev/null +++ b/noncore/settings/aqpkg/categoryfilter.ui @@ -0,0 +1,118 @@ +<!DOCTYPE UI><UI> +<class>CategoryFilterDlg</class> +<widget> + <class>QDialog</class> + <property stdset="1"> + <name>name</name> + <cstring>CategoryFilterDlg</cstring> + </property> + <property stdset="1"> + <name>geometry</name> + <rect> + <x>0</x> + <y>0</y> + <width>215</width> + <height>295</height> + </rect> + </property> + <property stdset="1"> + <name>caption</name> + <string>Category Filter</string> + </property> + <grid> + <property stdset="1"> + <name>margin</name> + <number>11</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget row="1" column="0" > + <class>QLayoutWidget</class> + <property stdset="1"> + <name>name</name> + <cstring>Layout4</cstring> + </property> + <grid> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget row="0" column="1" > + <class>QPushButton</class> + <property stdset="1"> + <name>name</name> + <cstring>btnOK</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>&OK</string> + </property> + </widget> + <widget row="0" column="0" > + <class>QPushButton</class> + <property stdset="1"> + <name>name</name> + <cstring>btnCancel</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>&Cancel</string> + </property> + </widget> + </grid> + </widget> + <widget row="0" column="0" > + <class>QGroupBox</class> + <property stdset="1"> + <name>name</name> + <cstring>GroupBox1</cstring> + </property> + <property stdset="1"> + <name>title</name> + <string>Select groups to show</string> + </property> + <grid> + <property stdset="1"> + <name>margin</name> + <number>11</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget row="0" column="0" > + <class>QListBox</class> + <property stdset="1"> + <name>name</name> + <cstring>lstCategories</cstring> + </property> + <property stdset="1"> + <name>selectionMode</name> + <enum>Multi</enum> + </property> + </widget> + </grid> + </widget> + </grid> +</widget> +<connections> + <connection> + <sender>btnCancel</sender> + <signal>clicked()</signal> + <receiver>CategoryFilterDlg</receiver> + <slot>reject()</slot> + </connection> + <connection> + <sender>btnOK</sender> + <signal>clicked()</signal> + <receiver>CategoryFilterDlg</receiver> + <slot>accept()</slot> + </connection> +</connections> +</UI> diff --git a/noncore/settings/aqpkg/categoryfilterimpl.cpp b/noncore/settings/aqpkg/categoryfilterimpl.cpp new file mode 100644 index 0000000..0746da6 --- a/dev/null +++ b/noncore/settings/aqpkg/categoryfilterimpl.cpp @@ -0,0 +1,71 @@ +/*************************************************************************** + categoryfilterimpl.cpp - description + ------------------- + begin : Sun Nov 17 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 <qlistbox.h> +#include <qstring.h> + +#include "categoryfilterimpl.h" + +CategoryFilterImpl :: CategoryFilterImpl(const QString &categories, const QString &selectedCategories, QWidget *parent, const char *name ) + : CategoryFilterDlg(parent,name, true) +{ + // Split up categories and add them to the listbox + int start = 1; + + QString item; + int end; + do + { + end = categories.find( "#", start ); + item = categories.mid( start, end - start ); + if ( item != "" ) + { + lstCategories->insertItem( item ); + + if ( selectedCategories.find( "#" + item + "#" ) != -1 ) + lstCategories->setSelected( lstCategories->count()-1, true ); + } + + start = end + 1; + } while ( start < (int)categories.length() ); + + lstCategories->sort( true ); + + showMaximized(); +} + +CategoryFilterImpl :: ~CategoryFilterImpl() +{ +} + +QString CategoryFilterImpl :: getSelectedFilter() +{ + // Grab cetegories from listbox + QString ret = "#"; + + for ( int i = 0 ; i < (int)lstCategories->count() ; ++i ) + { + if ( lstCategories->isSelected( i ) ) + ret += lstCategories->text( i ) + "#"; + } + + if ( ret == "#" ) + ret = ""; + return ret; +} diff --git a/noncore/settings/aqpkg/categoryfilterimpl.h b/noncore/settings/aqpkg/categoryfilterimpl.h new file mode 100644 index 0000000..b6b4fd5 --- a/dev/null +++ b/noncore/settings/aqpkg/categoryfilterimpl.h @@ -0,0 +1,40 @@ +/*************************************************************************** + categoryfilterimpl.h - description + ------------------- + begin : Sun Nov 17 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 CATEGORYFILTERIMPL_H +#define CATEGORYFILTERIMPL_H + +#include <qwidget.h> +#include <qstring.h> + +#include "categoryfilter.h" + +/** + *@author Andy Qua + */ + +class CategoryFilterImpl : public CategoryFilterDlg +{ + Q_OBJECT +public: + CategoryFilterImpl(const QString &categories, const QString &selectedCategories, QWidget *parent=0, const char *name=0); + ~CategoryFilterImpl(); + + QString getSelectedFilter(); +}; + +#endif diff --git a/noncore/settings/aqpkg/datamgr.cpp b/noncore/settings/aqpkg/datamgr.cpp index f342aff..1420242 100644 --- a/noncore/settings/aqpkg/datamgr.cpp +++ b/noncore/settings/aqpkg/datamgr.cpp @@ -23,19 +23,21 @@ using namespace std; #endif #include <stdio.h> #include "datamgr.h" #include "global.h" +QString DataManager::availableCategories = ""; DataManager::DataManager() { activeServer = ""; + availableCategories = "#"; } DataManager::~DataManager() { } Server *DataManager :: getServer( const char *name ) { @@ -202,8 +204,16 @@ void DataManager :: writeOutIpkgConf() while ( it2 != destList.end() ) { out << "dest " << it2->getDestinationName() << " " << it2->getDestinationPath() << endl; it2++; } out.close(); } + + +void DataManager :: setAvailableCategories( QString section ) +{ + section = section.lower(); + if ( availableCategories.find( "#" + section + "#" ) == -1 ) + availableCategories += section + "#"; +} diff --git a/noncore/settings/aqpkg/datamgr.h b/noncore/settings/aqpkg/datamgr.h index 8c6fb0d..3a64d92 100644 --- a/noncore/settings/aqpkg/datamgr.h +++ b/noncore/settings/aqpkg/datamgr.h @@ -16,16 +16,18 @@ ***************************************************************************/ #ifndef DATAMGR_H #define DATAMGR_H #include <map> using namespace std; +#include <qstring.h> + #include "server.h" #include "destination.h" #define LOCAL_SERVER "Installed Pkgs" #define LOCAL_IPKGS "local IPKG" /** *@author Andy Qua @@ -48,17 +50,20 @@ public: vector<Destination> &getDestinationList() { return destList; } Destination *getDestination( const char *name ); void loadServers(); void reloadServerData( ); void writeOutIpkgConf(); + static QString getAvailableCategories() { return availableCategories; } + static void setAvailableCategories( QString section ); private: + static QString availableCategories; QString activeServer; vector<Server> serverList; vector<Destination> destList; }; #endif diff --git a/noncore/settings/aqpkg/global.h b/noncore/settings/aqpkg/global.h index e65e2a0..609e1e8 100644 --- a/noncore/settings/aqpkg/global.h +++ b/noncore/settings/aqpkg/global.h @@ -13,17 +13,17 @@ * the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef __GLOBAL_H
#define __GLOBAL_H
-#define VERSION_TEXT "AQPkg Version 1.0"
+#define VERSION_TEXT "AQPkg Version 1.1" // Uncomment the below line to run on a Linux box rather than a Zaurus
// box this allows you to change where root is, and where to load config files from
// #define X86
// Sets up location of ipkg.conf and root directory
#ifdef QWS
diff --git a/noncore/settings/aqpkg/mainwin.cpp b/noncore/settings/aqpkg/mainwin.cpp index 5ccd3c3..0141359 100644 --- a/noncore/settings/aqpkg/mainwin.cpp +++ b/noncore/settings/aqpkg/mainwin.cpp @@ -49,16 +49,19 @@ MainWindow :: MainWindow( QWidget *p, char *name ) edit = new QPopupMenu( this );
edit->insertItem( "&Find", this, SLOT(searchForPackage()), Qt::CTRL+Qt::Key_I );
edit->insertItem( "Find &Next", this, SLOT(repeatSearchForPackage()), Qt::CTRL+Qt::Key_N );
filter = new QPopupMenu( this );
mnuShowUninstalledPkgsId = filter->insertItem( "Show &Uninstalled Packages", this, SLOT(filterUninstalledPackages()), Qt::CTRL+Qt::Key_U );
mnuShowInstalledPkgsId = filter->insertItem( "Show In&stalled Packages", this, SLOT(filterInstalledPackages()), Qt::CTRL+Qt::Key_S );
mnuShowUpgradedPkgsId = filter->insertItem( "Show U&pdated Packages", this, SLOT(filterUpgradedPackages()), Qt::CTRL+Qt::Key_P );
+ filter->insertSeparator(); + mnuFilterByCategory = filter->insertItem( "Filter By &Category", this, SLOT(filterCategory()), Qt::CTRL+Qt::Key_C ); + mnuSetFilterCategory = filter->insertItem( "Set Filter C&ategory", this, SLOT(setFilterCategory()), Qt::CTRL+Qt::Key_A ); // Create the main menu
menu = menuBar(); //new QMenuBar( this );
menu->insertItem( "&Settings", settings );
menu->insertItem( "&Edit", edit );
menu->insertItem( "&Filter", filter );
menu->insertItem( "&Help", help );
@@ -179,8 +182,28 @@ void MainWindow :: filterUpgradedPackages() filter->setItemChecked( mnuShowUninstalledPkgsId, false );
networkPkgWindow->showOnlyUninstalledPackages( false );
filter->setItemChecked( mnuShowInstalledPkgsId, false );
networkPkgWindow->showOnlyInstalledPackages( false );
networkPkgWindow->showUpgradedPackages( val );
}
+ +void MainWindow :: setFilterCategory() +{ + if ( networkPkgWindow->setFilterCategory( ) ) + filter->setItemChecked( mnuFilterByCategory, true ); +} + +void MainWindow :: filterCategory() +{ + if ( filter->isItemChecked( mnuFilterByCategory ) ) + { + networkPkgWindow->filterByCategory( false ); + filter->setItemChecked( mnuFilterByCategory, false ); + } + else + { + if ( networkPkgWindow->filterByCategory( true ) ) + filter->setItemChecked( mnuFilterByCategory, true ); + } +}
\ No newline at end of file diff --git a/noncore/settings/aqpkg/mainwin.h b/noncore/settings/aqpkg/mainwin.h index 7b6e0ba..92aba4d 100644 --- a/noncore/settings/aqpkg/mainwin.h +++ b/noncore/settings/aqpkg/mainwin.h @@ -43,21 +43,26 @@ private: QPopupMenu *filter;
QWidgetStack *stack;
NetworkPackageManager *networkPkgWindow;
int mnuShowUninstalledPkgsId;
int mnuShowInstalledPkgsId;
int mnuShowUpgradedPkgsId;
+ int mnuFilterByCategory; + int mnuSetFilterCategory; public slots:
void setDocument( const QString &doc );
void displayHelp();
void searchForPackage();
void repeatSearchForPackage();
void displayAbout();
void displaySettings();
void filterUninstalledPackages();
void filterInstalledPackages();
void filterUpgradedPackages();
+ void filterCategory(); + void setFilterCategory(); + };
#endif
diff --git a/noncore/settings/aqpkg/networkpkgmgr.cpp b/noncore/settings/aqpkg/networkpkgmgr.cpp index 188f90d..0814121 100644 --- a/noncore/settings/aqpkg/networkpkgmgr.cpp +++ b/noncore/settings/aqpkg/networkpkgmgr.cpp @@ -35,16 +35,17 @@ using namespace std; #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( DataManager *dataManager, QWidget *parent, const char *name) : QWidget(parent, name) { @@ -57,17 +58,17 @@ NetworkPackageManager::NetworkPackageManager( DataManager *dataManager, QWidget currentlySelectedServer = cfg.readEntry( "selectedServer", "local" ); showJumpTo = cfg.readBoolEntry( "showJumpTo", "true" ); #endif showUninstalledPkgs = false; showInstalledPkgs = false; showUpgradedPkgs = false; - + categoryFilterEnabled = false; initGui(); setupConnections(); updateData(); } NetworkPackageManager::~NetworkPackageManager() @@ -234,16 +235,23 @@ void NetworkPackageManager :: serverSelected( int ) // 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(); if ( it->isInstalled() ) { @@ -290,16 +298,19 @@ void NetworkPackageManager :: serverSelected( int ) { new QCheckListItem( item, QString( "V. Available - " ) + it->getVersion() ); if ( it->getLocalPackage() ) { if ( it->isInstalled() ) new QCheckListItem( item, QString( "V. Installed - " ) + it->getInstalledVersion() ); } } + + new QCheckListItem( item, QString( "Size - " ) + it->getPackageSize() ); + new QCheckListItem( item, QString( "Section - " ) + it->getSection() ); packagesList->insertItem( item ); } // If the local server or the local ipkgs server disable the download button if ( serverName == LOCAL_SERVER ) { upgrade->setEnabled( false ); download->setText( "Download" ); @@ -320,20 +331,16 @@ void NetworkPackageManager :: serverSelected( int ) } void NetworkPackageManager :: updateServer() { QString serverName = serversList->currentText(); // Update the current server // Display dialog -// ProgressDlg *progDlg = new ProgressDlg( this ); -// QString status = "Updating package lists..."; -// progDlg->show(); -// progDlg->setText( status ); // 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" ); @@ -799,8 +806,50 @@ void NetworkPackageManager :: showOnlyInstalledPackages( bool val ) serverSelected( -1 ); } void NetworkPackageManager :: showUpgradedPackages( bool val ) { showUpgradedPkgs = val; 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 937c9b4..46919d7 100644 --- a/noncore/settings/aqpkg/networkpkgmgr.h +++ b/noncore/settings/aqpkg/networkpkgmgr.h @@ -39,31 +39,35 @@ public: ~NetworkPackageManager(); void selectLocalPackage( const QString &pkg ); void updateData(); void searchForPackage( bool findNext ); 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; QPushButton *update; QPushButton *upgrade; QPushButton *download; QPushButton *apply; ProgressDlg *progressDlg; QString currentlySelectedServer; QString lastSearchText; + QString categoryFilter; + bool categoryFilterEnabled; bool showJumpTo; bool showUninstalledPkgs; bool showInstalledPkgs; bool showUpgradedPkgs; int timerId; void timerEvent ( QTimerEvent * ); diff --git a/noncore/settings/aqpkg/package.h b/noncore/settings/aqpkg/package.h index 56ef874..7545818 100644 --- a/noncore/settings/aqpkg/package.h +++ b/noncore/settings/aqpkg/package.h @@ -39,24 +39,28 @@ public: void setVersion( QString &v ); void setStatus( QString &s ); void setDescription( QString &d ); void setFilename( QString &f ); void setPackageStoredLocally( bool local ) { packageStoredLocally = local; } void setInstalledToRoot( bool root ) { installedToRoot = root; } void setInstalledTo( Destination *d ) { installedTo = d; } void setDependancies( QString &deps ) { dependancies = deps; } + void setPackageSize( QString size ) { packageSize = size; } + void setSection( QString sect) { section = sect; } Package *getLocalPackage() { return localPackage; } QString getPackageName() { return packageName; } QString getVersion() { return version; } QString getStatus() { return status; } QString getDescription() { return description; } QString getFilename() { return filename; } QString getDependancies() { return dependancies; } + QString getPackageSize() { return packageSize; } + QString getSection() { return section; } bool isInstalled(); bool isPackageStoredLocally() { return packageStoredLocally; } bool isInstalledToRoot() { return installedToRoot; } QString getInstalledVersion(); QString getInstalledPackageName(); Destination *getInstalledTo() { return installedTo; } @@ -71,13 +75,15 @@ private: QString status; QString description; QString filename; bool packageStoredLocally; bool installedToRoot; bool installed; bool differentVersionAvailable; QString dependancies; + QString packageSize; + QString section; Destination *installedTo; }; #endif diff --git a/noncore/settings/aqpkg/server.cpp b/noncore/settings/aqpkg/server.cpp index 539ebf0..7c3257b 100644 --- a/noncore/settings/aqpkg/server.cpp +++ b/noncore/settings/aqpkg/server.cpp @@ -23,16 +23,17 @@ #include <string.h> #include <stdlib.h> #include <iostream> #include <fstream> using namespace std; #include "server.h" +#include "datamgr.h" #ifdef QWS #include <qpe/global.h> #include <qpe/applnk.h> #include <qlist.h> #endif #include "utils.h" @@ -206,16 +207,28 @@ void Server :: readPackageFile( Server *local, bool clearAll, bool installingToR if ( currPackage ) currPackage->setDescription( value ); } else if ( key == "Filename" ) { if ( currPackage ) currPackage->setFilename( value ); } + else if ( key == "Size" ) + { + if ( currPackage ) + currPackage->setPackageSize( value ); + } + else if ( key == "Section" ) + { + if ( currPackage ) + currPackage->setSection( value ); + + DataManager::setAvailableCategories( value ); + } else if ( key == "" ) { newPackage = true; } } while ( !in.eof() ); in.close(); @@ -265,15 +278,21 @@ QString Server :: toString() "\n url - " + serverUrl + "\n"; for ( unsigned int i = 0 ; i < packageList.size() ; ++i ) ret += "\n " + packageList[i].toString(); return ret; +} /* +void addAvailableSection( QString section ) +{ + if ( DataManager::availableCategories.find( value ) == -1 ) +// DataManager::availableCategories += "#" + value; } +*/ vector<Package> &Server::getPackageList() { return packageList; } diff --git a/noncore/settings/aqpkg/server.h b/noncore/settings/aqpkg/server.h index e9f434c..f585b8f 100644 --- a/noncore/settings/aqpkg/server.h +++ b/noncore/settings/aqpkg/server.h @@ -54,12 +54,13 @@ public: protected: private: QString serverName; QString serverUrl; QString packageFile; bool active; + vector<Package> packageList; }; #endif |