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.
 
 

126 lines
3.7 KiB

/*
SPDX-FileCopyrightText: 2009-2020 Laurent Montel <montel@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef MAILCOMMON_FOLDERTREEWIDGET_H
#define MAILCOMMON_FOLDERTREEWIDGET_H
#include "mailcommon_export.h"
#include "foldertreewidgetproxymodel.h"
#include <Collection>
#include <QAbstractItemView>
#include <QWidget>
namespace Akonadi {
class StatisticsProxyModel;
}
class QLineEdit;
class KXMLGUIClient;
class QItemSelectionModel;
namespace MailCommon {
class EntityCollectionOrderProxyModel;
class FolderTreeView;
/**
* This is the widget that shows the main folder tree.
*
* It consists of the view (FolderTreeView) and a search line.
* Internally, several proxy models are used on top of a entity tree model.
*/
class MAILCOMMON_EXPORT FolderTreeWidget : public QWidget
{
Q_OBJECT
public:
enum TreeViewOption {
None = 0,
ShowUnreadCount = 1,
UseLineEditForFiltering = 2,
UseDistinctSelectionModel = 4,
ShowCollectionStatisticAnimation = 8,
DontKeyFilter = 16,
HideStatistics = 32,
HideHeaderViewMenu = 64
};
Q_DECLARE_FLAGS(TreeViewOptions, TreeViewOption)
explicit FolderTreeWidget(
QWidget *parent = nullptr, KXMLGUIClient *xmlGuiClient = nullptr, TreeViewOptions options = (TreeViewOptions)(ShowUnreadCount
|ShowCollectionStatisticAnimation), FolderTreeWidgetProxyModel::FolderTreeWidgetProxyModelOptions optReadableProxy = FolderTreeWidgetProxyModel::None);
~FolderTreeWidget() override;
/**
* The possible tooltip display policies.
*/
enum ToolTipDisplayPolicy {
DisplayAlways, ///< Always display a tooltip when hovering over an item
DisplayWhenTextElided, ///< Display the tooltip if the item text is actually elided
DisplayNever ///< Nevery display tooltips
};
/**
* The available sorting policies.
*/
enum SortingPolicy {
SortByCurrentColumn, ///< Columns are clickable, sorting is by the current column
SortByDragAndDropKey ///< Columns are NOT clickable, sorting is done by drag and drop
};
void selectCollectionFolder(const Akonadi::Collection &col);
void setSelectionMode(QAbstractItemView::SelectionMode mode);
Q_REQUIRED_RESULT QAbstractItemView::SelectionMode selectionMode() const;
Q_REQUIRED_RESULT QItemSelectionModel *selectionModel() const;
Q_REQUIRED_RESULT QModelIndex currentIndex() const;
Q_REQUIRED_RESULT Akonadi::Collection selectedCollection() const;
Q_REQUIRED_RESULT Akonadi::Collection::List selectedCollections() const;
Q_REQUIRED_RESULT FolderTreeView *folderTreeView() const;
Q_REQUIRED_RESULT Akonadi::StatisticsProxyModel *statisticsProxyModel() const;
Q_REQUIRED_RESULT FolderTreeWidgetProxyModel *folderTreeWidgetProxyModel() const;
Q_REQUIRED_RESULT EntityCollectionOrderProxyModel *entityOrderProxy() const;
Q_REQUIRED_RESULT QLineEdit *filterFolderLineEdit() const;
void applyFilter(const QString &);
void clearFilter();
void disableContextMenuAndExtraColumn();
void readConfig();
void restoreHeaderState(const QByteArray &data);
protected:
void changeToolTipsPolicyConfig(ToolTipDisplayPolicy);
protected Q_SLOTS:
void slotChangeTooltipsPolicy(FolderTreeWidget::ToolTipDisplayPolicy);
void slotManualSortingChanged(bool);
void slotFilterFixedString(const QString &);
void slotGeneralFontChanged();
void slotGeneralPaletteChanged();
private:
bool eventFilter(QObject *o, QEvent *e) override;
class FolderTreeWidgetPrivate;
FolderTreeWidgetPrivate *const d;
};
}
#endif