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.
tdebase/klipper/history.h

170 lines
4.1 KiB

// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8; -*-
/* This file is part of the KDE project
Copyright (C) 2004 Esben Mose Hansen <kde@mosehansen.dk>
Copyright (C) Andrew Stanley-Jones
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.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef _HISTORY_H_
#define _HISTORY_H_
#include <qobject.h>
#include <qptrlist.h>
#include "historyitem.h"
class KlipperPopup;
class QPopupMenu;
class QWidget;
class QptrListIterator;
class History : public QObject
{
Q_OBJECT
public:
History( QWidget* parent, const char* name );
~History();
/**
* Iterator for history
*/
typedef QPtrListIterator<HistoryItem> iterator;
/**
* Return (toplevel) popup menu (or default view, of you like)
*/
KlipperPopup* popup();
/**
* Inserts item into clipboard history top
* if duplicate entry exist, the older duplicate is deleted.
* The duplicate concept is "deep", so that two text string
* are considerd duplicate if identical.
*/
void insert( const HistoryItem* item );
/**
* Inserts item into clipboard without any checks
* Used when restoring a saved history and internally.
* Don't use this unless you're reasonable certain
* that no duplicates are introduced
*/
void forceInsert( const HistoryItem* item );
/**
* Remove (first) history item equal to item from history
*/
void remove( const HistoryItem* item );
/**
* Traversal: Get first item
*/
const HistoryItem* first();
/**
* Traversal: Get current item
*/
const HistoryItem* next();
/**
* Get an iterator pointing to the first (most recent) item
* This iterator should probably be a constant iterator, but
* the QTL doesn't support this easily.
*
* Anyway, if you modify the items via. the iterator, call changed()
* when you're done. Calling changed() multiple times doesn't hurt.
*
* iterator could be made into a proxy class that did the right thing.
*/
iterator youngest();
/**
* True if no history items
*/
bool empty() const { return itemList.isEmpty(); }
/**
* Set maximum history size
*/
void max_size( unsigned max_size );
/**
* Get the maximum history size
*/
unsigned max_size() const { return m_max_size; }
/**
* returns true if the user has selected the top item
*/
bool topIsUserSelected() {
return m_topIsUserSelected;
}
public slots:
/**
* move the history in position pos to top
*/
void slotMoveToTop(int pos );
/**
* Clear history
*/
void slotClear();
signals:
void changed();
/**
* Emitted when the first history item has changed.
*/
void topChanged();
private:
/**
* The history
*/
QPtrList<HistoryItem> itemList;
/**
* ensure that the number of items does not exceed max_size()
* Deletes items from the end as neccessary.
*/
void trim();
private:
/**
* "Default view" --- a popupmenu containing the clipboard history.
*/
KlipperPopup* m_popup;
/**
* The number of clipboard items stored.
*/
unsigned m_max_size;
/**
* True if the top is selected by the user
*/
bool m_topIsUserSelected;
};
inline const HistoryItem* History::first() { return itemList.first(); }
inline const HistoryItem* History::next() { return itemList.next(); }
#endif