summaryrefslogtreecommitdiffstats
path: root/krecipes/src/widgets/dblistviewbase.h
blob: 2db4fe6b7f0a8545c72aa7d71827aa3b826a9a41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/***************************************************************************
*   Copyright (C) 2005 by                                                 *
*   Jason Kivlighn (jkivlighn@gmail.com)                                  *
*                                                                         *
*   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 LISTVIEWHANDLER_H
#define LISTVIEWHANDLER_H

#include <qobject.h>
#include <qmap.h>

#include <klistview.h>

#define PREVLISTITEM_RTTI 1002
#define NEXTLISTITEM_RTTI 1003

class KProgressDialog;

class RecipeDB;

typedef enum ReloadFlags { 
	Load, 			/** Only performs the reload if the list hasn't already been loaded */
	ReloadIfPopulated,	/** Only performs the reload if the list has been loaded */
	ForceReload		/** Load/reload the list regardless of whether or not it's been loaded */
};

class DBListViewBase : public KListView
{
Q_OBJECT

public:
	DBListViewBase( QWidget *, RecipeDB *, int total );
	~DBListViewBase();

	void reload( ReloadFlags flag = Load );

signals:
	void nextGroupLoaded();
	void prevGroupLoaded();

protected:
	/**
	 * Called when the list view is ready to be used, i.e., it has been loaded with data.
	 * Until the list view has been loaded, we can ignore all database signals regarding changes
	 * of data.  Therefore, subclasses should connect to these signals during this call.
	 */
	virtual void init(){}
	virtual void load(int limit, int offset) = 0;
	virtual void keyPressEvent( QKeyEvent *e );
	bool handleElement( const QString & );
	virtual void createElement( QListViewItem * );
	void removeElement( QListViewItem *, bool delete_item = true );

	bool reloading(){ return bulk_load; }
	void setSorting(int c){KListView::setSorting(c);} //don't do sorting, the database comes sorted from the database anyways
	void setTotalItems(int);

	RecipeDB *database;
	int curr_limit;
	int curr_offset;

protected slots:
	void rename( QListViewItem *, int c );
	void slotDoubleClicked( QListViewItem * );

private:
	void activatePrev();
	void activateNext();

	//make this private because the data should always be synced with the database
	void clear(){KListView::clear();}

	int total;
	
	bool bulk_load;

	QMap<QListViewItem*,QListViewItem*> lastElementMap;
	QListViewItem *delete_me_later;

	KProgressDialog *m_progress;
	int m_totalSteps;
};

#endif //LISTVIEWHANDLER_H