#ifndef LISTWINDOW_H
#define LISTWINDOW_H
-#include <QMainWindow>
+#include "mainbase.h"
+
#include <QDialogButtonBox>
#include <QList>
-class QListView;
class QString;
-class QBoxLayout;
class QPushButton;
+class FlickCharm;
+class QAbstractItemModel;
+class QListWidget;
class QModelIndex;
-class QItemSelection;
-class QEvent;
-class ListView;
+class QListWidgetItem;
/** A window with a list and menu actions (Maemo) or buttons (non-Maemo). */
-class ListWindow: public QMainWindow
+class ListWindow: public MainBase
{
Q_OBJECT
public:
- explicit ListWindow(QWidget *parent = 0);
+ /**
+ * Constructor.
+ * @param noItems Text to display when the list has no items.
+ * @param parent Parent widget.
+ */
+ explicit ListWindow(const QString &noItems, QWidget *parent = 0);
+
+ /** Set the model for the list. */
+ void setModel(QAbstractItemModel *model);
- /** Add a list view to the window. */
- void addList(ListView *list);
+ /** Get model. */
+ QAbstractItemModel *model() const;
/**
- * Add an action to the window: either a button, or, on Maemo, a top
- * level menu item.
- * Activating the action invokes the slot with no parameters.
+ * Add an action button to the beginning of the list (Maemo) or to the
+ * tool bar (non-Maemo).
*/
- void addAction(const QString &title, QObject *receiver, const char *slot,
- QDialogButtonBox::ButtonRole role = QDialogButtonBox::ActionRole);
+ void addButton(const QString &title, QObject *receiver, const char *slot,
+ const QString &iconPath = QString());
/**
- * Add an action to the selected item in the list: either a button which is
- * enabled when a list item is selected, or, on Maemo, a pop-up menu item
- * which is displayed when a list item is long-pressed.
- * Activating the action invokes the slot with no parameters.
+ * Add an action button to the tool bar, which is only active if a list
+ * item is selected.
*/
- void addItemAction(const QString &title, QObject *receiver,
- const char *slot);
+ void addItemButton(const QString &title, QObject *receiver,
+ const char *slot, const QString &iconPath = QString());
+
+ /** Add an action to the menu. */
+ QAction *addMenuAction(const QString &title, QObject *receiver,
+ const char *slot);
+
+ /** Get current (selected) item. */
+ QModelIndex currentItem() const;
+
+signals:
+ /** Emitted when a list item is activated. */
+ void activated(const QModelIndex &index);
+
+ /** Emitted when selection has changed. */
+ void itemSelectionChanged();
+
+public slots:
+ /** Set the current (selected) item. */
+ void setCurrentItem(const QModelIndex &item);
protected slots:
- void onSelectionChanged(const QItemSelection &selected,
- const QItemSelection &deselected);
-#ifdef Q_WS_MAEMO_5
- void onModelChanged();
-#else
- void activateItemButtons();
-#endif
+ void onItemActivated(const QModelIndex &);
+ void populateList();
+ void onItemSelectionChanged();
protected:
+ struct Button {
+ QString title;
+ QObject *receiver;
+ const char *slot;
+ QString iconName;
+ };
+ void insertButton(int row, const Button &button);
#ifdef Q_WS_MAEMO_5
- bool eventFilter(QObject *obj, QEvent *event);
void closeEvent(QCloseEvent *event);
- QMenu *popup;
-#else
- QDialogButtonBox *buttonBox;
- QList<QPushButton *> itemButtons;
-#endif // Q_WS_MAEMO_5
- QBoxLayout *contentLayout;
- ListView *list;
+#endif
+
+private:
+ QListWidget *list;
+ QAbstractItemModel *mModel;
+ QList<Button> buttons;
+ QString noItems;
+#ifdef Q_OS_SYMBIAN
+ FlickCharm *charm;
+#endif
+ QList<QAction *>itemActions;
};
#endif // LISTWINDOW_H