#
#
# patch "res/guitone.qrc"
# from [62342ad04bd984fa2c0afa866b86f312509dee14]
# to [7659620548e011928a39d80b3d1e8088a0a7cb9f]
#
# patch "src/model/IconProvider.cpp"
# from [d592eab5935e4e3c310d07276bdd34aae44d99ee]
# to [3672a30d7f27afdad5361809ab67d09d7350e7cb]
#
# patch "src/model/IconProvider.h"
# from [514ff91ca3015e2285555dd3decf0e42207cad5e]
# to [107e25867b3c2f41cca16469b8de3d669f096966]
#
# patch "src/model/WorkspaceItem.cpp"
# from [4d13f4a1c882172f952c01326960bcf8e1ccc991]
# to [ffac4afb4b7e9163bebb4bc51d0a10c5accc878b]
#
# patch "src/model/WorkspaceItem.h"
# from [7fea1ba5b24232318f23a53afc74d387e45205b0]
# to [7cb74cc1ba628fc44af9bf601d99ac238bd67ed6]
#
# patch "src/stable.h"
# from [156b68c2371359c998ada42cee2aa33d68046132]
# to [2e0f2e1a3953c8322726b86377b7902fe9263313]
#
============================================================
--- res/guitone.qrc 62342ad04bd984fa2c0afa866b86f312509dee14
+++ res/guitone.qrc 7659620548e011928a39d80b3d1e8088a0a7cb9f
@@ -1,5 +1,25 @@
- monkey_on_16x16.png
+ overlays/added_missing.png
+ overlays/added.png
+ overlays/dropped_added_missing.png
+ overlays/dropped_added.png
+ overlays/dropped.png
+ overlays/dropped_rename_target_missing.png
+ overlays/dropped_rename_target.png
+ overlays/dropped_unknown.png
+ overlays/ignored.png
+ overlays/missing.png
+ overlays/patched.png
+ overlays/rename_source_added_missing.png
+ overlays/rename_source_added.png
+ overlays/rename_source.png
+ overlays/rename_source_target_missing.png
+ overlays/rename_source_target.png
+ overlays/rename_source_unknown.png
+ overlays/rename_target_missing.png
+ overlays/rename_target.png
+ overlays/unchanged.png
+ overlays/unknown.png
============================================================
--- src/model/IconProvider.cpp d592eab5935e4e3c310d07276bdd34aae44d99ee
+++ src/model/IconProvider.cpp 3672a30d7f27afdad5361809ab67d09d7350e7cb
@@ -22,60 +22,211 @@
#include "IconProvider.h"
#include "WorkspaceItem.h"
+/**
+ * There are 45 possible status combinations, some of them are invalid
+ * We only provide for a bunch of these own icons
+ * (more info: http://venge.net/monotone/docs/Automation.html#Automation)
+ *
+ * Basic codes
+ * -----------
+ *
+ * M 0 0 missing
+ * AP 0 0 added
+ * D 0 0 dropped
+ * R 1 0 renamed-from-this
+ * R 0 1 renamed-to-this
+ * P 0 0 patched
+ * 0 0 unchanged
+ * U 0 0 unknown
+ * I 0 0 ignored
+ *
+ * Combinations and used icons
+ * ---------------------------
+ *
+ * In general, we don't show the "patched" state if there is another
+ * state up to the item (added, renamed, etc.)
+ *
+ * ' ': unchanged.png
+ * ' P': patched.png
+ * ' U': unknown.png
+ * ' I': ignored.png
+ * ' M': missing.png
+ *
+ * ' A ': added.png (invalid)
+ * ' AP': added.png
+ * ' AU': added.png (invalid)
+ * ' AI': added.png (invalid?)
+ * ' AM': added_missing.png
+ *
+ * ' R ': rename_target.png
+ * ' RP': rename_target.png
+ * ' RU': rename_target.png (invalid)
+ * ' RI': rename_target.png (invalid?)
+ * ' RM': rename_target_missing.png
+ *
+ * 'D ': dropped.png
+ * 'D P': dropped.png (invalid)
+ * 'D U': dropped_unknown.png
+ * 'D I': dropped.png (invalid?)
+ * 'D M': dropped.png (invalid)
+ *
+ * 'DA ': dropped_added.png (invalid)
+ * 'DAP': dropped_added.png
+ * 'DAU': dropped_added.png (invalid)
+ * 'DAI': dropped_added.png (invalid?)
+ * 'DAM': dropped_added_missing.png
+ *
+ * 'DR ': dropped_rename_target.png
+ * 'DRP': dropped_rename_target.png
+ * 'DRU': dropped_rename_target.png (invalid)
+ * 'DRI': dropped_rename_target.png (invalid)
+ * 'DRM': dropped_rename_target_missing.png
+ *
+ * 'R ': rename_source.png
+ * 'R P': rename_source.png (invalid)
+ * 'R U': rename_source_unknown.png
+ * 'R I': rename_source_unknown.png (invalid?)
+ * 'R M': rename_source_unknown.png (invalid)
+ *
+ * 'RA ': rename_source_added.png (invalid)
+ * 'RAP': rename_source_added.png
+ * 'RAU': rename_source_added_missing.png (invalid)
+ * 'RAI': rename_source_added_missing.png (invalid?)
+ * 'RAM': rename_source_added_missing.png
+ *
+ * 'RR ': rename_source_target.png
+ * 'RRP': rename_source_target.png
+ * 'RRU': rename_source_target_missing.png (invalid)
+ * 'RRI': rename_source_target_missing.png (invalid?)
+ * 'RRM': rename_source_target_missing.png
+ */
+
IconProvider::IconProvider(void)
{
- iconDirUnchanged = new QIcon();
- iconDirChanged = new QIcon();
- iconDirUnknown = new QIcon();
- iconDirIgnored = new QIcon();
- iconFileNormal = new QIcon();
- QStyle *style = QApplication::style();
- iconDirUnchanged->addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon));
- iconDirUnchanged->addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Active, QIcon::On);
- iconDirChanged->addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon));
- iconDirChanged->addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Active, QIcon::On);
- iconDirUnknown->addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon));
- iconDirUnknown->addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Active, QIcon::On);
- iconDirIgnored->addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon));
- iconDirIgnored->addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Active, QIcon::On);
+ QStyle *style = QApplication::style();
+
+ //
+ // default icons if no state matches
+ //
+ fileIcons[0] = QIcon(style->standardPixmap(QStyle::SP_FileIcon));
+
+ folderIcons[0] = QIcon(style->standardPixmap(QStyle::SP_DirClosedIcon));
+ folderIcons[0].addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Active, QIcon::On);
+
+ //
+ // assign possible item states to the appropriate overlay
+ // we currently have 21 icons for roughly 45 states
+ //
+ QMap states;
+ states[WorkspaceItem::Unchanged] = QString(":/overlays/unchanged.png");
+ states[WorkspaceItem::Patched] = QString(":/overlays/patched.png");
+ states[WorkspaceItem::Unknown] = QString(":/overlays/unknown.png");
+ states[WorkspaceItem::Ignored] = QString(":/overlays/ignored.png");
+ states[WorkspaceItem::Missing] = QString(":/overlays/missing.png");
+
+ states[WorkspaceItem::Added|WorkspaceItem::Unchanged] = QString(":/overlays/added.png");
+ states[WorkspaceItem::Added|WorkspaceItem::Patched] = QString(":/overlays/added.png");
+ states[WorkspaceItem::Added|WorkspaceItem::Unknown] = QString(":/overlays/added.png");
+ states[WorkspaceItem::Added|WorkspaceItem::Ignored] = QString(":/overlays/added.png");
+ states[WorkspaceItem::Added|WorkspaceItem::Missing] = QString(":/overlays/added_missing.png");
+
+ states[WorkspaceItem::RenamedTo|WorkspaceItem::Unchanged] = QString(":/overlays/rename_target.png");
+ states[WorkspaceItem::RenamedTo|WorkspaceItem::Patched] = QString(":/overlays/rename_target.png");
+ states[WorkspaceItem::RenamedTo|WorkspaceItem::Unknown] = QString(":/overlays/rename_target.png");
+ states[WorkspaceItem::RenamedTo|WorkspaceItem::Ignored] = QString(":/overlays/rename_target.png");
+ states[WorkspaceItem::RenamedTo|WorkspaceItem::Missing] = QString(":/overlays/rename_target_missing.png");
+
+ states[WorkspaceItem::Dropped|WorkspaceItem::Unchanged] = QString(":/overlays/dropped.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::Patched] = QString(":/overlays/dropped.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::Unknown] = QString(":/overlays/dropped_unknown.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::Ignored] = QString(":/overlays/dropped.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::Missing] = QString(":/overlays/dropped.png");
- iconFileNormal->addPixmap(style->standardPixmap(QStyle::SP_FileIcon));
-}
+ states[WorkspaceItem::Dropped|WorkspaceItem::Added|WorkspaceItem::Unchanged] = QString(":/overlays/dropped_added.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::Added|WorkspaceItem::Patched] = QString(":/overlays/dropped_added.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::Added|WorkspaceItem::Unknown] = QString(":/overlays/dropped_added.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::Added|WorkspaceItem::Ignored] = QString(":/overlays/dropped_added.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::Added|WorkspaceItem::Missing] = QString(":/overlays/dropped_added_missing.png");
-IconProvider::~IconProvider(void)
-{
- delete iconDirUnchanged;
- delete iconDirChanged;
- delete iconDirUnknown;
- delete iconDirIgnored;
- delete iconFileNormal;
+ states[WorkspaceItem::Dropped|WorkspaceItem::RenamedTo|WorkspaceItem::Unchanged] = QString(":/overlays/dropped_rename_target.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::RenamedTo|WorkspaceItem::Patched] = QString(":/overlays/dropped_rename_target.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::RenamedTo|WorkspaceItem::Unknown] = QString(":/overlays/dropped_rename_target.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::RenamedTo|WorkspaceItem::Ignored] = QString(":/overlays/dropped_rename_target.png");
+ states[WorkspaceItem::Dropped|WorkspaceItem::RenamedTo|WorkspaceItem::Missing] = QString(":/overlays/dropped_rename_target_missing.png");
+
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::Unchanged] = QString(":/overlays/rename_source.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::Patched] = QString(":/overlays/rename_source.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::Unknown] = QString(":/overlays/rename_source_unknown.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::Ignored] = QString(":/overlays/rename_source_unknown.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::Missing] = QString(":/overlays/rename_source_unknown.png");
+
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::Added|WorkspaceItem::Unchanged] = QString(":/overlays/rename_source_added.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::Added|WorkspaceItem::Patched] = QString(":/overlays/rename_source_added.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::Added|WorkspaceItem::Unknown] = QString(":/overlays/rename_source_added_missing.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::Added|WorkspaceItem::Ignored] = QString(":/overlays/rename_source_added_missing.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::Added|WorkspaceItem::Missing] = QString(":/overlays/rename_source_added_missing.png");
+
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::RenamedTo|WorkspaceItem::Unchanged] = QString(":/overlays/rename_source_target.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::RenamedTo|WorkspaceItem::Patched] = QString(":/overlays/rename_source_target.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::RenamedTo|WorkspaceItem::Unknown] = QString(":/overlays/rename_source_target_missing.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::RenamedTo|WorkspaceItem::Ignored] = QString(":/overlays/rename_source_target_missing.png");
+ states[WorkspaceItem::RenamedFrom|WorkspaceItem::RenamedTo|WorkspaceItem::Missing] = QString(":/overlays/rename_source_target_missing.png");
+
+
+ QMapIterator i(states);
+
+ while (i.hasNext())
+ {
+ i.next();
+ int state = i.key();
+ QImage overlay(i.value());
+ overlay.createAlphaMask();
+
+ // the basic icons have to be recreated for each state
+ // since we later paint on them
+ QImage fileImage(style->standardPixmap(QStyle::SP_FileIcon).toImage());
+ QImage folderImageClosed(style->standardPixmap(QStyle::SP_DirClosedIcon).toImage());
+ QImage folderImageOpened(style->standardPixmap(QStyle::SP_DirOpenIcon).toImage());
+
+ // file icon
+ QPainter filePainter(&fileImage);
+ filePainter.drawImage(0, 0, overlay);
+ filePainter.end();
+ fileIcons[state] = QIcon(QPixmap::fromImage(fileImage));
+
+ // folder icon
+ QPainter folderPainter1(&folderImageClosed);
+ folderPainter1.drawImage(0, 0, overlay);
+ folderPainter1.end();
+ QPainter folderPainter2(&folderImageOpened);
+ folderPainter2.drawImage(0, 0, overlay);
+ folderPainter2.end();
+
+ folderIcons[state] = QIcon(QPixmap::fromImage(folderImageClosed));
+ folderIcons[state].addPixmap(QPixmap::fromImage(folderImageOpened), QIcon::Active, QIcon::On);
+ }
}
+IconProvider::~IconProvider(void) {}
+
QIcon IconProvider::getIcon(WorkspaceItem* item)
{
- if(item->isDirectory())
+ int status = item->getStatus();
+
+ if (item->isDirectory())
{
- if(item->hasStatus(WorkspaceItem::Unchanged))
- {
- return *iconDirUnchanged;
- }
- else if(item->hasStatus(WorkspaceItem::Patched))
- {
- return *iconDirChanged;
- }
- else if(item->hasStatus(WorkspaceItem::Unknown))
- {
- return *iconDirUnknown;
- }
- else if(item->hasStatus(WorkspaceItem::Ignored))
+ if (folderIcons.contains(status))
{
- return *iconDirIgnored;
+ return folderIcons.value(status);
}
- // TODO: missing icon states: renamed from/to, added, dropped
- return *iconDirUnknown;
- }
-
-
- // TODO: icon states of files...
- return *iconFileNormal;
+ // default icon
+ return folderIcons.value(0);
+ }
+
+ if (fileIcons.contains(status))
+ {
+ return fileIcons.value(status);
+ }
+ // default icon
+ return fileIcons.value(0);
}
============================================================
--- src/model/IconProvider.h 514ff91ca3015e2285555dd3decf0e42207cad5e
+++ src/model/IconProvider.h 107e25867b3c2f41cca16469b8de3d669f096966
@@ -22,7 +22,6 @@
#define ICONPROVIDER_H
class WorkspaceItem;
-class QIcon;
class IconProvider
{
@@ -32,11 +31,10 @@
QIcon getIcon(WorkspaceItem* item);
private:
- QIcon *iconDirUnchanged;
- QIcon *iconDirChanged;
- QIcon *iconDirUnknown;
- QIcon *iconDirIgnored;
- QIcon *iconFileNormal;
+ // file and folder icons
+ // (maybe we manage it to even include normal file icons here once?!)
+ QMap fileIcons;
+ QMap folderIcons;
};
#endif
============================================================
--- src/model/WorkspaceItem.cpp 4d13f4a1c882172f952c01326960bcf8e1ccc991
+++ src/model/WorkspaceItem.cpp ffac4afb4b7e9163bebb4bc51d0a10c5accc878b
@@ -20,6 +20,16 @@
#include "WorkspaceItem.h"
+const int WorkspaceItem::RenamedFrom = 1;
+const int WorkspaceItem::RenamedTo = 2;
+const int WorkspaceItem::Added = 4;
+const int WorkspaceItem::Dropped = 8;
+const int WorkspaceItem::Missing = 16;
+const int WorkspaceItem::Patched = 32;
+const int WorkspaceItem::Unchanged = 64;
+const int WorkspaceItem::Unknown = 128;
+const int WorkspaceItem::Ignored = 256;
+
WorkspaceItem::WorkspaceItem()
{
parentItem = this;
============================================================
--- src/model/WorkspaceItem.h 7fea1ba5b24232318f23a53afc74d387e45205b0
+++ src/model/WorkspaceItem.h 7cb74cc1ba628fc44af9bf601d99ac238bd67ed6
@@ -60,15 +60,15 @@
QVariant data(int, int) const;
- static const int RenamedFrom = 1;
- static const int RenamedTo = 2;
- static const int Added = 4;
- static const int Dropped = 8;
- static const int Missing = 16;
- static const int Patched = 32;
- static const int Unchanged = 64;
- static const int Unknown = 128;
- static const int Ignored = 256;
+ static const int RenamedFrom;
+ static const int RenamedTo;
+ static const int Added;
+ static const int Dropped;
+ static const int Missing;
+ static const int Patched;
+ static const int Unchanged;
+ static const int Unknown;
+ static const int Ignored;
private:
WorkspaceItem *renamed_from;
============================================================
--- src/stable.h 156b68c2371359c998ada42cee2aa33d68046132
+++ src/stable.h 2e0f2e1a3953c8322726b86377b7902fe9263313
@@ -30,6 +30,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -45,7 +46,4 @@
#include
#include
-// Other lib includes
-#include