You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.1 KiB
87 lines
2.1 KiB
#ifndef POPULARURLS_H
|
|
#define POPULARURLS_H
|
|
|
|
#include <tqobject.h>
|
|
#include <kurl.h>
|
|
#include <tqdict.h>
|
|
#include <kdialogbase.h>
|
|
|
|
// the class holds a list of most popular links in a dual data structure
|
|
// * linked list, with head and tail: for fast append/prepend support
|
|
// * dictionary that maps urls to list nodes: to save the need to iterate
|
|
// over the list in order to find the correct node for each new url
|
|
//
|
|
// also, the class holds a maximum number of urls. two variables affect this:
|
|
// * maxUrls - the num. of urls the user can see
|
|
// * hardLimit - the actual number of urls kept.
|
|
// when the number of urls reaches hardLimit, a garbage collection is done and
|
|
// the bottom (hardLimit-maxUrls) entries are removed from the list
|
|
typedef struct _UrlNode* UrlNodeP;
|
|
typedef struct _UrlNode {
|
|
UrlNodeP prev;
|
|
KURL url;
|
|
int rank;
|
|
UrlNodeP next;
|
|
} UrlNode;
|
|
|
|
class PopularUrlsDlg;
|
|
|
|
class PopularUrls : public TQObject {
|
|
Q_OBJECT
|
|
TQ_OBJECT
|
|
public:
|
|
PopularUrls(TQObject *parent = 0, const char *name = 0);
|
|
~PopularUrls();
|
|
void save();
|
|
void load();
|
|
void addUrl(const KURL& url);
|
|
KURL::List getMostPopularUrls(int max);
|
|
|
|
public slots:
|
|
void showDialog();
|
|
|
|
protected:
|
|
// NOTE: the following methods append/insert/remove a node to the list
|
|
// but NEVER free memory or allocate memory!
|
|
void appendNode(UrlNodeP node);
|
|
void insertNode(UrlNodeP node, UrlNodeP after);
|
|
void removeNode(UrlNodeP node);
|
|
void relocateIfNeeded(UrlNodeP node);
|
|
void clearList();
|
|
void dumpList();
|
|
void decreaseRanks();
|
|
|
|
private:
|
|
UrlNodeP head, tail;
|
|
TQDict<UrlNode> ranks; // actually holds UrlNode*
|
|
int count;
|
|
static const int maxUrls = 30;
|
|
PopularUrlsDlg *dlg;
|
|
};
|
|
|
|
class KListView;
|
|
class KListViewSearchLine;
|
|
|
|
class PopularUrlsDlg: public KDialogBase {
|
|
Q_OBJECT
|
|
TQ_OBJECT
|
|
public:
|
|
PopularUrlsDlg();
|
|
~PopularUrlsDlg();
|
|
void run(KURL::List list); // use this to open the dialog
|
|
inline int result() const { return selection; } // returns index 0 - topmost, or -1
|
|
|
|
|
|
protected slots:
|
|
void slotSearchReturnPressed(const TQString&);
|
|
void slotItemSelected(TQListViewItem *it);
|
|
|
|
private:
|
|
KListView *urls;
|
|
KListViewSearchLine *search;
|
|
int selection;
|
|
};
|
|
|
|
|
|
#endif
|