summaryrefslogtreecommitdiff
authorandyq <andyq>2002-11-17 20:03:25 (UTC)
committer andyq <andyq>2002-11-17 20:03:25 (UTC)
commitd94c9d39ab6e744f848a04c07eac03f20c91987c (patch) (side-by-side diff)
treea9f32cca7c59ae565ab9caa3caf567100ed07cb4
parenta94877f543bf0ebc2ec9c4c931cb5f21713b7872 (diff)
downloadopie-d94c9d39ab6e744f848a04c07eac03f20c91987c.zip
opie-d94c9d39ab6e744f848a04c07eac03f20c91987c.tar.gz
opie-d94c9d39ab6e744f848a04c07eac03f20c91987c.tar.bz2
Added filter by category, and added extra fields to package display (Section and size)
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/aqpkg/aqpkg.pro9
-rw-r--r--noncore/settings/aqpkg/categoryfilter.ui118
-rw-r--r--noncore/settings/aqpkg/categoryfilterimpl.cpp71
-rw-r--r--noncore/settings/aqpkg/categoryfilterimpl.h40
-rw-r--r--noncore/settings/aqpkg/datamgr.cpp10
-rw-r--r--noncore/settings/aqpkg/datamgr.h5
-rw-r--r--noncore/settings/aqpkg/global.h2
-rw-r--r--noncore/settings/aqpkg/mainwin.cpp23
-rw-r--r--noncore/settings/aqpkg/mainwin.h5
-rw-r--r--noncore/settings/aqpkg/networkpkgmgr.cpp59
-rw-r--r--noncore/settings/aqpkg/networkpkgmgr.h4
-rw-r--r--noncore/settings/aqpkg/package.h6
-rw-r--r--noncore/settings/aqpkg/server.cpp19
-rw-r--r--noncore/settings/aqpkg/server.h1
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
@@ -15,7 +15,8 @@ HEADERS = global.h \
server.h \
helpwindow.h \
letterpushbutton.h \
- inputdlg.h
+ inputdlg.h \
+ categoryfilterimpl.h
SOURCES = mainwin.cpp \
datamgr.cpp \
mem.cpp \
@@ -33,10 +34,12 @@ SOURCES = mainwin.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
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>&amp;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>&amp;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
@@ -28,9 +28,11 @@ using namespace std;
#include "global.h"
+QString DataManager::availableCategories = "";
DataManager::DataManager()
{
activeServer = "";
+ availableCategories = "#";
}
DataManager::~DataManager()
@@ -207,3 +209,11 @@ void DataManager :: writeOutIpkgConf()
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
@@ -21,6 +21,8 @@
#include <map>
using namespace std;
+#include <qstring.h>
+
#include "server.h"
#include "destination.h"
@@ -53,8 +55,11 @@ public:
void writeOutIpkgConf();
+ static QString getAvailableCategories() { return availableCategories; }
+ static void setAvailableCategories( QString section );
private:
+ static QString availableCategories;
QString activeServer;
vector<Server> serverList;
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
@@ -18,7 +18,7 @@
#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
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
@@ -54,6 +54,9 @@ MainWindow :: MainWindow( QWidget *p, char *name )
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 );
@@ -184,3 +187,23 @@ void MainWindow :: filterUpgradedPackages()
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
@@ -48,6 +48,8 @@ private:
int mnuShowUninstalledPkgsId;
int mnuShowInstalledPkgsId;
int mnuShowUpgradedPkgsId;
+ int mnuFilterByCategory;
+ int mnuSetFilterCategory;
public slots:
void setDocument( const QString &doc );
@@ -59,5 +61,8 @@ public slots:
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
@@ -40,6 +40,7 @@ using namespace std;
#include "ipkg.h"
#include "inputdlg.h"
#include "letterpushbutton.h"
+#include "categoryfilterimpl.h"
#include "global.h"
@@ -62,7 +63,7 @@ NetworkPackageManager::NetworkPackageManager( DataManager *dataManager, QWidget
showUninstalledPkgs = false;
showInstalledPkgs = false;
showUpgradedPkgs = false;
-
+ categoryFilterEnabled = false;
initGui();
setupConnections();
@@ -239,6 +240,13 @@ void NetworkPackageManager :: serverSelected( int )
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;
@@ -295,6 +303,9 @@ void NetworkPackageManager :: serverSelected( int )
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 );
}
@@ -325,10 +336,6 @@ void NetworkPackageManager :: updateServer()
// 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 :)
@@ -804,3 +811,45 @@ 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
@@ -44,6 +44,8 @@ public:
void showOnlyUninstalledPackages( bool val );
void showOnlyInstalledPackages( bool val );
void showUpgradedPackages( bool val );
+ bool filterByCategory( bool val );
+ bool setFilterCategory();
private:
DataManager *dataMgr;
@@ -58,7 +60,9 @@ private:
ProgressDlg *progressDlg;
QString currentlySelectedServer;
QString lastSearchText;
+ QString categoryFilter;
+ bool categoryFilterEnabled;
bool showJumpTo;
bool showUninstalledPkgs;
bool showInstalledPkgs;
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
@@ -44,6 +44,8 @@ public:
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; }
@@ -52,6 +54,8 @@ public:
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; }
@@ -76,6 +80,8 @@ private:
bool installed;
bool differentVersionAvailable;
QString dependancies;
+ QString packageSize;
+ QString section;
Destination *installedTo;
};
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
@@ -28,6 +28,7 @@
using namespace std;
#include "server.h"
+#include "datamgr.h"
#ifdef QWS
#include <qpe/global.h>
@@ -211,6 +212,18 @@ void Server :: readPackageFile( Server *local, bool clearAll, bool installingToR
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;
@@ -270,7 +283,13 @@ QString Server :: toString()
return ret;
+} /*
+void addAvailableSection( QString section )
+{
+ if ( DataManager::availableCategories.find( value ) == -1 )
+// DataManager::availableCategories += "#" + value;
}
+*/
vector<Package> &Server::getPackageList()
{
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
@@ -59,6 +59,7 @@ private:
QString packageFile;
bool active;
+
vector<Package> packageList;
};