From d94c9d39ab6e744f848a04c07eac03f20c91987c Mon Sep 17 00:00:00 2001 From: andyq Date: Sun, 17 Nov 2002 20:03:25 +0000 Subject: Added filter by category, and added extra fields to package display (Section and size) --- (limited to 'noncore/settings/aqpkg') 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 @@ + +CategoryFilterDlg + + QDialog + + name + CategoryFilterDlg + + + geometry + + 0 + 0 + 215 + 295 + + + + caption + Category Filter + + + + margin + 11 + + + spacing + 6 + + + QLayoutWidget + + name + Layout4 + + + + margin + 0 + + + spacing + 6 + + + QPushButton + + name + btnOK + + + text + &OK + + + + QPushButton + + name + btnCancel + + + text + &Cancel + + + + + + QGroupBox + + name + GroupBox1 + + + title + Select groups to show + + + + margin + 11 + + + spacing + 6 + + + QListBox + + name + lstCategories + + + selectionMode + Multi + + + + + + + + + btnCancel + clicked() + CategoryFilterDlg + reject() + + + btnOK + clicked() + CategoryFilterDlg + accept() + + + 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 +using namespace std; + +#include +#include + +#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 +#include + +#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 = ""; + 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 using namespace std; +#include + #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 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 @@ -1,80 +1,80 @@ -/*************************************************************************** - global.h - description - ------------------- - begin : Mon Aug 26 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 __GLOBAL_H -#define __GLOBAL_H - -#define VERSION_TEXT "AQPkg Version 1.0" - -// 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 - -#ifndef X86 - -// Running QT/Embedded on an arm processor -#define IPKG_CONF "/etc/ipkg.conf" -#define ROOT "/" -#define IPKG_DIR "/usr/lib/ipkg/" - -#else - -// Running QT/Embedded on a X86 linux box -#define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" -#define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" -#define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" - -#endif - -#else - -// Running QT on a X86 linux box -#define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" -#define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" -#define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" - -#endif - - -// Uncomment the below line to turn on memory checking -//#define _DEBUG 1 - -#ifndef __MEMFILE_C -#ifdef _DEBUG -void * operator new(unsigned int size,const char *file, int line); -void operator delete(void *p); -#endif - -#ifdef _DEBUG -#define DEBUG_NEW new(__FILE__, __LINE__) -//#define DEBUG_NEW new -#else -#define DEBUG_NEW new -#endif - -#define new DEBUG_NEW -#endif - - -void AddTrack(long addr, long asize, const char *fname, long lnum); -void RemoveTrack(long addr); -void DumpUnfreed(); - -#endif +/*************************************************************************** + global.h - description + ------------------- + begin : Mon Aug 26 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 __GLOBAL_H +#define __GLOBAL_H + +#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 + +#ifndef X86 + +// Running QT/Embedded on an arm processor +#define IPKG_CONF "/etc/ipkg.conf" +#define ROOT "/" +#define IPKG_DIR "/usr/lib/ipkg/" + +#else + +// Running QT/Embedded on a X86 linux box +#define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" +#define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" +#define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" + +#endif + +#else + +// Running QT on a X86 linux box +#define IPKG_CONF "/home/andy/projects/aqpkg/aqpkg/data/ipkg.conf" +#define ROOT "/home/andy/projects/aqpkg/aqpkg/data/root" +#define IPKG_DIR "/home/andy/projects/aqpkg/aqpkg/data/" + +#endif + + +// Uncomment the below line to turn on memory checking +//#define _DEBUG 1 + +#ifndef __MEMFILE_C +#ifdef _DEBUG +void * operator new(unsigned int size,const char *file, int line); +void operator delete(void *p); +#endif + +#ifdef _DEBUG +#define DEBUG_NEW new(__FILE__, __LINE__) +//#define DEBUG_NEW new +#else +#define DEBUG_NEW new +#endif + +#define new DEBUG_NEW +#endif + + +void AddTrack(long addr, long asize, const char *fname, long lnum); +void RemoveTrack(long addr); +void DumpUnfreed(); + +#endif 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 @@ -1,186 +1,209 @@ -/*************************************************************************** - 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 - -#include -#include -#include - -#include "mainwin.h" -#include "datamgr.h" -#include "networkpkgmgr.h" -#include "settingsimpl.h" -#include "helpwindow.h" -#include "utils.h" -#include "global.h" - -MainWindow :: MainWindow( QWidget *p, char *name ) - : QMainWindow( p, name ) -{ -#ifdef QWS - showMaximized(); -#endif - - setCaption( "AQPkg - Package Manager" ); - - // Create our menu - help = new QPopupMenu( this ); - help->insertItem( "&General", this, SLOT(displayHelp()), Qt::CTRL+Qt::Key_G ); - help->insertItem( "&About", this, SLOT(displayAbout()), Qt::CTRL+Qt::Key_A ); - - settings = new QPopupMenu( this ); - settings->insertItem( "&Settings", this, SLOT(displaySettings()), Qt::CTRL+Qt::Key_S ); - - 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 ); - - // 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 ); - - mgr = new DataManager(); - mgr->loadServers(); - - stack = new QWidgetStack( this ); - - networkPkgWindow = new NetworkPackageManager( mgr, stack ); - stack->addWidget( networkPkgWindow, 1 ); - - setCentralWidget( stack ); - stack->raiseWidget( networkPkgWindow ); -} - -MainWindow :: ~MainWindow() -{ - delete 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() -{ - networkPkgWindow->searchForPackage( false ); -} - -void MainWindow :: repeatSearchForPackage() -{ - networkPkgWindow->searchForPackage( true ); -} - -void MainWindow :: displayAbout() -{ - QMessageBox::about( this, "About AQPkg", VERSION_TEXT ); -} - - -void MainWindow :: filterUninstalledPackages() -{ - bool val; - if ( filter->isItemChecked( mnuShowUninstalledPkgsId ) ) - { - val = false; - filter->setItemChecked( mnuShowUninstalledPkgsId, false ); - } - else - { - val = true; - filter->setItemChecked( mnuShowUninstalledPkgsId, true ); - } - - filter->setItemChecked( mnuShowInstalledPkgsId, false ); - networkPkgWindow->showOnlyInstalledPackages( false ); - filter->setItemChecked( mnuShowUpgradedPkgsId, false ); - networkPkgWindow->showUpgradedPackages( false ); - - networkPkgWindow->showOnlyUninstalledPackages( val ); - -} - -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 ); -} - -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 ); -} +/*************************************************************************** + 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 + +#include +#include +#include + +#include "mainwin.h" +#include "datamgr.h" +#include "networkpkgmgr.h" +#include "settingsimpl.h" +#include "helpwindow.h" +#include "utils.h" +#include "global.h" + +MainWindow :: MainWindow( QWidget *p, char *name ) + : QMainWindow( p, name ) +{ +#ifdef QWS + showMaximized(); +#endif + + setCaption( "AQPkg - Package Manager" ); + + // Create our menu + help = new QPopupMenu( this ); + help->insertItem( "&General", this, SLOT(displayHelp()), Qt::CTRL+Qt::Key_G ); + help->insertItem( "&About", this, SLOT(displayAbout()), Qt::CTRL+Qt::Key_A ); + + settings = new QPopupMenu( this ); + settings->insertItem( "&Settings", this, SLOT(displaySettings()), Qt::CTRL+Qt::Key_S ); + + 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 ); + + mgr = new DataManager(); + mgr->loadServers(); + + stack = new QWidgetStack( this ); + + networkPkgWindow = new NetworkPackageManager( mgr, stack ); + stack->addWidget( networkPkgWindow, 1 ); + + setCentralWidget( stack ); + stack->raiseWidget( networkPkgWindow ); +} + +MainWindow :: ~MainWindow() +{ + delete 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() +{ + networkPkgWindow->searchForPackage( false ); +} + +void MainWindow :: repeatSearchForPackage() +{ + networkPkgWindow->searchForPackage( true ); +} + +void MainWindow :: displayAbout() +{ + QMessageBox::about( this, "About AQPkg", VERSION_TEXT ); +} + + +void MainWindow :: filterUninstalledPackages() +{ + bool val; + if ( filter->isItemChecked( mnuShowUninstalledPkgsId ) ) + { + val = false; + filter->setItemChecked( mnuShowUninstalledPkgsId, false ); + } + else + { + val = true; + filter->setItemChecked( mnuShowUninstalledPkgsId, true ); + } + + filter->setItemChecked( mnuShowInstalledPkgsId, false ); + networkPkgWindow->showOnlyInstalledPackages( false ); + filter->setItemChecked( mnuShowUpgradedPkgsId, false ); + networkPkgWindow->showUpgradedPackages( false ); + + networkPkgWindow->showOnlyUninstalledPackages( val ); + +} + +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 ); +} + +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 ); +} + +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 @@ -1,63 +1,68 @@ -/*************************************************************************** - 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 -#include - - -class NetworkPackageManager; -class DataManager; - -class MainWindow :public QMainWindow -{ - Q_OBJECT -public: - - MainWindow( QWidget *p = 0, char *name = 0 ); - ~MainWindow(); - -private: - DataManager *mgr; - - QMenuBar *menu; - QPopupMenu *help; - QPopupMenu *settings; - QPopupMenu *edit; - QPopupMenu *filter; - QWidgetStack *stack; - - NetworkPackageManager *networkPkgWindow; - - int mnuShowUninstalledPkgsId; - int mnuShowInstalledPkgsId; - int mnuShowUpgradedPkgsId; - -public slots: - void setDocument( const QString &doc ); - void displayHelp(); - void searchForPackage(); - void repeatSearchForPackage(); - void displayAbout(); - void displaySettings(); - void filterUninstalledPackages(); - void filterInstalledPackages(); - void filterUpgradedPackages(); -}; -#endif +/*************************************************************************** + 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 +#include + + +class NetworkPackageManager; +class DataManager; + +class MainWindow :public QMainWindow +{ + Q_OBJECT +public: + + MainWindow( QWidget *p = 0, char *name = 0 ); + ~MainWindow(); + +private: + DataManager *mgr; + + QMenuBar *menu; + QPopupMenu *help; + QPopupMenu *settings; + QPopupMenu *edit; + 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 @@ -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 :) @@ -686,7 +693,7 @@ InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item ) msgtext, "Remove", secondButton ) ) { case 0: // Try again or Enter - // option 0 = Remove + // option 0 = Remove item.option = "D"; break; case 1: // Quit or Escape @@ -743,7 +750,7 @@ void NetworkPackageManager :: letterPushed( QString t ) packagesList->setSelected( item, true ); packagesList->ensureItemVisible( item ); break; - } + } item = (QCheckListItem *)item->nextSibling(); if ( !item ) @@ -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,14 +44,18 @@ 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; } QString getVersion() { return version; } QString getStatus() { return status; } QString getDescription() { return description; } - QString getFilename() { return filename; } + 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 @@ -210,7 +211,19 @@ 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 &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 packageList; }; -- cgit v0.9.0.2