*/
#include "activityitemdelegate.h"
+#include "activitylistmodel.h"
#include "folderstatusmodel.h"
#include "folderman.h"
#include "accountstate.h"
const QString ActivityItemDelegate::_remote_share("remote_share");
const QString ActivityItemDelegate::_call("call");
+ActivityItemDelegate::ActivityItemDelegate()
+ : QStyledItemDelegate()
+{
+ customizeStyle();
+}
+
int ActivityItemDelegate::iconHeight()
{
if (_iconHeight == 0) {
int iconSize = 16;
int iconOffset = qRound(fm.height() / 4.0 * 7.0);
int offset = 4;
+ const bool isSelected = (option.state & QStyle::State_Selected);
// get the data
Activity::Type activityType = qvariant_cast<Activity::Type>(index.data(ActionRole));
- QIcon actionIcon = qvariant_cast<QIcon>(index.data(ActionIconRole));
+ QIcon actionIcon;
+ const ActivityListModel::ActionIcon icn = qvariant_cast<ActivityListModel::ActionIcon>(index.data(ActionIconRole));
+ switch(icn.iconType) {
+ case ActivityListModel::ActivityIconType::iconUseCached: actionIcon = icn.cachedIcon; break;
+ case ActivityListModel::ActivityIconType::iconActivity: actionIcon = (isSelected ? _iconActivity_sel : _iconActivity); break;
+ case ActivityListModel::ActivityIconType::iconBell: actionIcon = (isSelected ? _iconBell_sel : _iconBell); break;
+ case ActivityListModel::ActivityIconType::iconStateError: actionIcon = _iconStateError; break;
+ case ActivityListModel::ActivityIconType::iconStateWarning: actionIcon = _iconStateWarning; break;
+ case ActivityListModel::ActivityIconType::iconStateInfo: actionIcon = _iconStateInfo; break;
+ case ActivityListModel::ActivityIconType::iconStateSync: actionIcon = _iconStateSync; break;
+ }
QString objectType = qvariant_cast<QString>(index.data(ObjectTypeRole));
QString actionText = qvariant_cast<QString>(index.data(ActionTextRole));
QString messageText = qvariant_cast<QString>(index.data(MessageRole));
if(activityType == Activity::Type::NotificationType){
// Secondary will be 'Dismiss' or '...' multiple options button
- secondaryButton.icon = QIcon(QLatin1String(":/client/resources/close.svg"));
+ secondaryButton.icon = (isSelected ? _iconClose_sel : _iconClose);
if(customList.size() > 1)
- secondaryButton.icon = QIcon(QLatin1String(":/client/resources/more.svg"));
+ secondaryButton.icon = (isSelected ? _iconMore_sel : _iconMore);
secondaryButton.iconSize = QSize(iconSize, iconSize);
// Primary button will be 'More Information' or 'Accept'
} else if(activityType == Activity::SyncResultType){
// Secondary will be 'open file manager' with the folder icon
- secondaryButton.icon = QIcon(QLatin1String(":/client/resources/folder.svg"));
+ secondaryButton.icon = _iconFolder;
secondaryButton.iconSize = QSize(iconSize, iconSize);
// Primary button will be 'open browser'
} else if(activityType == Activity::SyncFileItemType){
// Secondary will be 'open file manager' with the folder icon
- secondaryButton.icon = QIcon(QLatin1String(":/client/resources/folder.svg"));
+ secondaryButton.icon = _iconFolder;
secondaryButton.iconSize = QSize(iconSize, iconSize);
// No primary button on this case
p.setCurrentColorGroup(QPalette::Disabled);
// change pen color if the line is selected
- if (option.state & QStyle::State_Selected)
+ if (isSelected)
painter->setPen(p.color(QPalette::HighlightedText));
else
painter->setPen(p.color(QPalette::Text));
painter->drawText(actionTextBox, elidedAction);
// draw the buttons
- if(activityType == Activity::Type::NotificationType || activityType == Activity::Type::SyncResultType)
+ if(activityType == Activity::Type::NotificationType || activityType == Activity::Type::SyncResultType) {
+ primaryButton.palette = p;
+ if (isSelected)
+ primaryButton.palette.setColor(QPalette::ButtonText, p.color(QPalette::HighlightedText));
+ else
+ primaryButton.palette.setColor(QPalette::ButtonText, p.color(QPalette::Text));
+
QApplication::style()->drawControl(QStyle::CE_PushButton, &primaryButton, painter);
+ }
// Since they are errors on local syncing, there is nothing to do in the server
if(activityType != Activity::Type::ActivityType)
}
// change pen color for the time
- if (option.state & QStyle::State_Selected)
+ if (isSelected)
painter->setPen(p.color(QPalette::Disabled, QPalette::HighlightedText));
else
painter->setPen(p.color(QPalette::Disabled, QPalette::Text));
return QStyledItemDelegate::editorEvent(event, model, option, index);
}
+void ActivityItemDelegate::slotStyleChanged()
+{
+ customizeStyle();
+}
+
+void ActivityItemDelegate::customizeStyle()
+{
+ QPalette pal;
+ pal.setColor(QPalette::Base, QColor(0,0,0)); // use dark background colour to invert icons
+
+ _iconClose = Theme::createColorAwareIcon(QLatin1String(":/client/resources/close.svg"));
+ _iconClose_sel = Theme::createColorAwareIcon(QLatin1String(":/client/resources/close.svg"), pal);
+ _iconMore = Theme::createColorAwareIcon(QLatin1String(":/client/resources/more.svg"));
+ _iconMore_sel = Theme::createColorAwareIcon(QLatin1String(":/client/resources/more.svg"), pal);
+
+ _iconFolder = QIcon(QLatin1String(":/client/resources/folder.svg"));
+
+ _iconActivity = Theme::createColorAwareIcon(QLatin1String(":/client/resources/activity.png"));
+ _iconActivity_sel = Theme::createColorAwareIcon(QLatin1String(":/client/resources/activity.png"), pal);
+ _iconBell = Theme::createColorAwareIcon(QLatin1String(":/client/resources/bell.svg"));
+ _iconBell_sel = Theme::createColorAwareIcon(QLatin1String(":/client/resources/bell.svg"), pal);
+
+ _iconStateError = QIcon(QLatin1String(":/client/resources/state-error.svg"));
+ _iconStateWarning = QIcon(QLatin1String(":/client/resources/state-warning.svg"));
+ _iconStateInfo = QIcon(QLatin1String(":/client/resources/state-info.svg"));
+ _iconStateSync = QIcon(QLatin1String(":/client/resources/state-sync.svg"));
+}
+
} // namespace OCC
}
return customList;
}
- case ActivityItemDelegate::ActionIconRole:
+ case ActivityItemDelegate::ActionIconRole:{
+ ActionIcon actionIcon;
if(a._type == Activity::NotificationType){
QIcon cachedIcon = ServerNotificationHandler::iconCache.value(a._id);
- if(!cachedIcon.isNull())
- return cachedIcon;
- else return QIcon(QLatin1String(":/client/resources/bell.svg"));
+ if(!cachedIcon.isNull()) {
+ actionIcon.iconType = ActivityIconType::iconUseCached;
+ actionIcon.cachedIcon = cachedIcon;
+ } else {
+ actionIcon.iconType = ActivityIconType::iconBell;
+ }
} else if(a._type == Activity::SyncResultType){
- return QIcon(QLatin1String(":/client/resources/state-error.svg"));
+ actionIcon.iconType = ActivityIconType::iconStateError;
} else if(a._type == Activity::SyncFileItemType){
if(a._status == SyncFileItem::NormalError
|| a._status == SyncFileItem::FatalError
|| a._status == SyncFileItem::DetailError
|| a._status == SyncFileItem::BlacklistedError) {
- return QIcon(QLatin1String(":/client/resources/state-error.svg"));
+ actionIcon.iconType = ActivityIconType::iconStateError;
} else if(a._status == SyncFileItem::SoftError
|| a._status == SyncFileItem::Conflict
|| a._status == SyncFileItem::Restoration
|| a._status == SyncFileItem::FileLocked){
- return QIcon(QLatin1String(":/client/resources/state-warning.svg"));
+ actionIcon.iconType = ActivityIconType::iconStateWarning;
} else if(a._status == SyncFileItem::FileIgnored){
- return QIcon(QLatin1String(":/client/resources/state-info.svg"));
+ actionIcon.iconType = ActivityIconType::iconStateInfo;
+ } else {
+ actionIcon.iconType = ActivityIconType::iconStateSync;
+ }
+ } else {
+ actionIcon.iconType = ActivityIconType::iconActivity;
}
- return QIcon(QLatin1String(":/client/resources/state-sync.svg"));
+ QVariant icn;
+ icn.setValue(actionIcon);
+ return icn;
}
- return QIcon(QLatin1String(":/client/resources/activity.png"));
break;
case ActivityItemDelegate::ObjectTypeRole:
return a._objectType;