diff filestates.cpp @ 324:306ffd913071 filelist_right_button_menu

Introduce "activities" enum and functions
author Chris Cannam
date Thu, 10 Mar 2011 18:45:50 +0000
parents 8fd71f570884
children 5fa5c908ca00
line wrap: on
line diff
--- a/filestates.cpp	Thu Mar 10 15:33:02 2011 +0000
+++ b/filestates.cpp	Thu Mar 10 18:45:50 2011 +0000
@@ -63,7 +63,7 @@
 QStringList *FileStates::stateToBucket(State s)
 {
     switch (s) {
-    case Clean: return &m_clean; // not implemented yet
+    case Clean: return &m_clean;
     case Modified: return &m_modified;
     case Added: return &m_added;
     case Unknown: return &m_unknown;
@@ -112,14 +112,19 @@
           << m_unknown.size() << " unknown" << endl;
 }
 
-QStringList FileStates::getFilesInState(State s) const
+QStringList FileStates::filesInState(State s) const
 {
     QStringList *sl = const_cast<FileStates *>(this)->stateToBucket(s);
     if (sl) return *sl;
     else return QStringList();
 }
 
-FileStates::State FileStates::getStateOfFile(QString file) const
+bool FileStates::isInState(QString file, State s) const
+{
+    return filesInState(s).contains(file);
+}
+
+FileStates::State FileStates::stateOf(QString file) const
 {
     if (m_stateMap.contains(file)) {
         return m_stateMap[file];
@@ -131,3 +136,71 @@
             << endl;
     return Unknown;
 }
+
+FileStates::Activities FileStates::activitiesSupportedBy(State s)
+{
+    Activities a;
+
+    switch (s) {
+
+    case Modified:
+        a << Annotate << Diff << Commit << Revert << Remove;
+        break;
+
+    case Added:
+        a << Commit << Revert << Remove;
+        break;
+        
+    case Removed:
+        a << Commit << Revert << Add;
+        break;
+
+    case InConflict:
+        a << Annotate << Diff << RedoMerge << MarkResolved;
+        break;
+
+    case Missing:
+        a << Revert << Remove;
+        break;
+        
+    case Unknown:
+        a << Add << Ignore;
+        break;
+
+    case Clean:
+        a << Remove << Annotate;
+        break;
+
+    case Ignored:
+        a << UnIgnore;
+        break;
+    }
+
+    return a;
+}
+
+bool FileStates::supportsActivity(State s, Activity a)
+{
+    return activitiesSupportedBy(s).contains(a);
+}
+
+bool FileStates::supportsActivity(QString file, Activity a) const
+{
+    return supportsActivity(stateOf(file), a);
+}
+
+QStringList FileStates::filesSupportingActivity(Activity a) const
+{
+    QStringList f;
+    for (int i = int(FirstState); i <= int(LastState); ++i) {
+        State s = (State)i;
+        f << filesInState(s);
+    }
+    return f;
+}
+
+FileStates::Activities FileStates::activitiesSupportedBy(QString file) const
+{
+    return activitiesSupportedBy(stateOf(file));
+}
+