2012-02-20 21:47:14 +00:00
|
|
|
/* This file is (c) 2008-2012 Konstantin Isakov <ikm@goldendict.org>
|
2009-10-21 19:37:07 +00:00
|
|
|
* Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */
|
|
|
|
|
|
|
|
#ifndef __HISTORY_HH_INCLUDED__
|
|
|
|
#define __HISTORY_HH_INCLUDED__
|
|
|
|
|
|
|
|
#include <QObject>
|
|
|
|
#include <QList>
|
|
|
|
#include <QString>
|
|
|
|
|
2013-01-17 14:24:13 +00:00
|
|
|
#define DEFAULT_MAX_HISTORY_ITEM_LENGTH 256
|
2012-09-10 13:01:35 +00:00
|
|
|
|
2009-10-21 19:37:07 +00:00
|
|
|
/// Search history
|
|
|
|
class History: public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
/// An item in history
|
|
|
|
struct Item
|
|
|
|
{
|
2018-07-07 09:33:15 +00:00
|
|
|
/// Group the search was performed in
|
2009-10-21 19:37:07 +00:00
|
|
|
unsigned groupId;
|
|
|
|
/// The word that was searched
|
|
|
|
QString word;
|
|
|
|
|
|
|
|
Item(): groupId( 0 )
|
|
|
|
{}
|
|
|
|
|
|
|
|
Item( unsigned groupId_, QString const & word_ ):
|
|
|
|
groupId( groupId_ ), word( word_ )
|
|
|
|
{}
|
|
|
|
|
|
|
|
bool operator == ( Item const & other ) const
|
2013-01-17 17:00:37 +00:00
|
|
|
{ return QString::compare( word, other.word, Qt::CaseInsensitive) == 0 && groupId == other.groupId; }
|
2009-10-21 19:37:07 +00:00
|
|
|
|
|
|
|
bool operator != ( Item const & other ) const
|
|
|
|
{ return ! operator == ( other ); }
|
|
|
|
};
|
|
|
|
|
|
|
|
/// Indicates an intention to load -- see the relevant History constructor.
|
|
|
|
struct Load {};
|
|
|
|
|
|
|
|
/// Constructs an empty history which can hold at most "size" items.
|
2013-01-17 14:24:13 +00:00
|
|
|
History( unsigned size = 20 , unsigned maxItemLength = DEFAULT_MAX_HISTORY_ITEM_LENGTH );
|
2009-10-21 19:37:07 +00:00
|
|
|
|
|
|
|
/// Loads history from its file. If load fails, the result would be an empty
|
|
|
|
/// history. The size parameter is same as in other constructor.
|
2022-12-01 11:55:00 +00:00
|
|
|
explicit History( Load, unsigned size = 20, unsigned maxItemLength = DEFAULT_MAX_HISTORY_ITEM_LENGTH );
|
2009-10-21 19:37:07 +00:00
|
|
|
|
|
|
|
/// Adds new item. The item is always added at the beginning of the list.
|
|
|
|
/// If there was such an item already somewhere on the list, it gets removed
|
|
|
|
/// from there. If otherwise the resulting list gets too large, the oldest
|
|
|
|
/// item gets removed from the end of the list.
|
|
|
|
void addItem( Item const & );
|
|
|
|
|
2013-01-17 09:08:53 +00:00
|
|
|
Item getItem( int index );
|
|
|
|
|
2012-02-16 14:56:25 +00:00
|
|
|
/// Remove item with given index from list
|
|
|
|
void removeItem( int index )
|
2013-03-05 12:23:50 +00:00
|
|
|
{ items.removeAt( index ); dirty = true; emit itemsChanged(); }
|
2012-02-16 14:56:25 +00:00
|
|
|
|
2009-10-21 19:37:07 +00:00
|
|
|
/// Attempts saving history. Returns true if succeeded - false otherwise.
|
|
|
|
/// Since history isn't really that valuable, failures can be ignored.
|
2013-02-05 12:51:23 +00:00
|
|
|
bool save();
|
2009-10-21 19:37:07 +00:00
|
|
|
|
|
|
|
/// Clears history.
|
|
|
|
void clear();
|
|
|
|
|
2013-01-17 09:08:53 +00:00
|
|
|
/// History size.
|
|
|
|
int size() const;
|
|
|
|
|
2009-10-21 19:37:07 +00:00
|
|
|
/// Gets the current items. The first one is the newest one on the list.
|
|
|
|
QList< Item > const & getItems() const
|
|
|
|
{ return items; }
|
|
|
|
|
2012-02-16 14:56:25 +00:00
|
|
|
/// Enable/disable add words to hystory
|
|
|
|
void enableAdd( bool enable )
|
|
|
|
{ addingEnabled = enable; }
|
|
|
|
bool enabled()
|
|
|
|
{ return addingEnabled; }
|
|
|
|
|
2013-01-17 09:08:53 +00:00
|
|
|
void setMaxSize( unsigned maxSize_ );
|
|
|
|
|
2013-02-05 12:51:23 +00:00
|
|
|
void setSaveInterval( unsigned interval );
|
|
|
|
|
2012-09-10 13:01:35 +00:00
|
|
|
unsigned getMaxSize()
|
|
|
|
{ return maxSize; }
|
|
|
|
|
2013-01-17 14:24:13 +00:00
|
|
|
unsigned getMaxItemLength() const
|
|
|
|
{ return maxItemLength; }
|
|
|
|
|
2009-10-21 19:37:07 +00:00
|
|
|
signals:
|
|
|
|
|
|
|
|
/// Signals the changes in items in response to addItem() or clear().
|
|
|
|
void itemsChanged();
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
2013-01-17 09:08:53 +00:00
|
|
|
/// Returns true if the items list has been modified
|
|
|
|
/// in order to fit into the constraints.
|
|
|
|
bool ensureSizeConstraints();
|
|
|
|
|
2009-10-21 19:37:07 +00:00
|
|
|
QList< Item > items;
|
|
|
|
unsigned maxSize;
|
2013-01-17 14:24:13 +00:00
|
|
|
unsigned maxItemLength;
|
2012-02-16 14:56:25 +00:00
|
|
|
bool addingEnabled;
|
2013-02-05 12:51:23 +00:00
|
|
|
bool dirty;
|
|
|
|
int timerId;
|
2013-01-17 09:08:53 +00:00
|
|
|
|
2013-02-05 12:51:23 +00:00
|
|
|
protected:
|
|
|
|
virtual void timerEvent( QTimerEvent * );
|
2009-10-21 19:37:07 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|