Added function to add/remove/get the dependent list + the list is now displayed
authorCedric Lallain <[email protected]>
Tue, 19 Jan 2010 18:47:09 +0000 (19 10:47 -0800)
committerCedric Lallain <kandjar@nausicaa.(none)>
Fri, 16 Jul 2010 04:56:03 +0000 (15 21:56 -0700)
project-buffer-mode.el

index 76e4545..914ee01 100644 (file)
@@ -475,6 +475,12 @@ exists."
   "Project buffer mode face used highligh file names."
   :group 'project-buffer)
 
+(defface project-buffer-dependent-list-face
+  '((((class color) (background light)) (:foreground "gray50"))
+    (((class color) (background dark)) (:foreground "gray50")))
+  "Project buffer mode face used highligh file names."
+  :group 'project-buffer)
+
 (defface project-buffer-matching-file-face
   '((default (:inherit project-buffer-file-face :bold t)))
   "Project buffer mode face used matching file."
@@ -819,6 +825,7 @@ check if any files should be added or remove from the proejct.")
        (node-matching (project-buffer-node->matched node))
        (node-prjcol   (project-buffer-node->project-collapsed node))
        (node-project  (project-buffer-node->project node))
+       (node-deps     (project-buffer-node->dependent-project-list node))
        (project-help  (concat "mouse-1: "
                               (if (project-buffer-node->collapsed node) "expand" "collapse")
                               " project "
@@ -872,6 +879,14 @@ check if any files should be added or remove from the proejct.")
            (indent-to-column 40)
            (insert (concat " " (propertize (project-buffer-node->filename node)
                                            'face 'project-buffer-filename-face))))
+         (when (and (eq node-type 'project)
+                    node-deps)
+           (insert " ")
+           (indent-to-column 30)
+           (insert (propertize (concat "<" 
+                                       (reduce (lambda (str item) (concat str ", " item)) node-deps) 
+                                       ">")
+                               'face 'project-buffer-dependent-list-face)))
          (insert "\n"))
        )))
 
@@ -1904,6 +1919,39 @@ If non-nil the return value is a list containing:
       (project-buffer-node->project-settings (ewoc-data node)))))
 
 
+(defun project-buffer-add-dependent-project(project dependent-project)
+  "Add a dependent project to the PROJECT. 
+DEPENDENT-PROJECT is the dependent project's name."
+  (unless project-buffer-status (error "Not in project-buffer buffer"))
+  (let ((node (project-buffer-search-project-node project-buffer-status project)))
+    (when node
+      (let* ((project-data (ewoc-data node))
+            (dependent-project-list (project-buffer-node->dependent-project-list project-data)))
+       (unless (member dependent-project dependent-project-list)
+         (setf (project-buffer-node->dependent-project-list project-data)
+               (cons dependent-project dependent-project-list)))))))
+
+
+(defun project-buffer-remove-dependent-project(project dependent-project)
+  "Remove a dependent project to the PROJECT. 
+DEPENDENT-PROJECT is the dependent project's name."
+  (unless project-buffer-status (error "Not in project-buffer buffer"))
+  (let ((node (project-buffer-search-project-node project-buffer-status project)))
+    (when node
+      (let* ((project-data (ewoc-data node))
+            (dependent-project-list (project-buffer-node->dependent-project-list project-data)))
+       (setf (project-buffer-node->dependent-project-list project-data)
+             (delete dependent-project dependent-project-list))))))
+
+
+(defun project-buffer-get-dependent-project-list(project)
+  "Retrieve the dependent project list of PROJECT."
+  (unless project-buffer-status (error "Not in project-buffer buffer"))
+  (let ((node (project-buffer-search-project-node project-buffer-status project)))
+    (when node
+      (project-buffer-node->dependent-project-list (ewoc-data node)))))
+
+
 (defun project-buffer-exists-p (name project)
   "Return true if a node NAME exists in PROJECT."
   (unless project-buffer-status (error "Not in project-buffer buffer"))