~ubuntu-branches/ubuntu/trusty/monodevelop/trusty-proposed

« back to all changes in this revision

Viewing changes to src/addins/MonoDevelop.Refactoring/MonoDevelop.CodeActions/CodeActionPanelWidget.cs

  • Committer: Package Import Robot
  • Author(s): Jo Shields
  • Date: 2013-05-12 09:46:03 UTC
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: package-import@ubuntu.com-20130512094603-mad323bzcxvmcam0
Tags: upstream-4.0.5+dfsg
ImportĀ upstreamĀ versionĀ 4.0.5+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
using System.Linq;
31
31
using System.Text;
32
32
using MonoDevelop.Refactoring;
 
33
using System.Collections.Generic;
33
34
 
34
35
namespace MonoDevelop.CodeActions
35
36
{
53
54
                string mimeType;
54
55
                
55
56
                Gtk.TreeStore treeStore = new Gtk.TreeStore (typeof(string), typeof(bool), typeof(CodeActionProvider));
56
 
                
 
57
                Dictionary<CodeActionProvider, bool> providerStates = new Dictionary<CodeActionProvider, bool> ();
 
58
 
 
59
                void GetAllProviderStates ()
 
60
                {
 
61
                        string disabledNodes = PropertyService.Get ("ContextActions." + mimeType, "");
 
62
                        foreach (var node in RefactoringService.ContextAddinNodes.Where (n => n.MimeType == mimeType)) {
 
63
                                providerStates [node] = disabledNodes.IndexOf (node.IdString) < 0;
 
64
                        }
 
65
                }
 
66
 
57
67
                public ContextActionPanelWidget (string mimeType)
58
68
                {
59
69
                        this.mimeType = mimeType;
70
80
                                TreeIter iter;
71
81
                                if (!treeStore.GetIterFromString (out iter, args.Path)) 
72
82
                                        return;
73
 
                                bool enabled = (bool)treeStore.GetValue (iter, 1);
74
 
                                treeStore.SetValue (iter, 1, !enabled);
 
83
                                var provider = (CodeActionProvider)treeStore.GetValue (iter, 2);
 
84
                                providerStates [provider] = !providerStates [provider];
 
85
                                treeStore.SetValue (iter, 1, providerStates [provider]);
75
86
                        };
76
87
                        col.PackStart (togRender, false);
77
88
                        col.AddAttribute (togRender, "active", 1);
83
94
                        treeviewContextActions.AppendColumn (col);
84
95
                        treeviewContextActions.HeadersVisible = false;
85
96
                        treeviewContextActions.Model = treeStore;
86
 
                        
 
97
                        GetAllProviderStates ();
87
98
                        FillTreeStore (null);
88
99
                        treeviewContextActions.Selection.Changed += HandleTreeviewContextActionsSelectionChanged;
89
100
                }
92
103
                {
93
104
                        FillTreeStore (searchentryFilter.Entry.Text.Trim ());
94
105
                }
95
 
 
96
 
                void HandleTreeviewContextActionsSelectionChanged (object sender, EventArgs e)
97
 
                {
98
 
                        this.labelDescription.Text = "";
99
 
                        Gtk.TreeIter iter;
100
 
                        if (!treeviewContextActions.Selection.GetSelected (out iter))
101
 
                                return;
102
 
                        var actionNode = (CodeActionProvider)treeStore.GetValue (iter, 2);
103
 
                        this.labelDescription.Markup = "<b>" + actionNode.Title + "</b>" + Environment.NewLine + actionNode.Description;
104
 
                }
105
 
 
 
106
        
106
107
                public void FillTreeStore (string filter)
107
108
                {
108
109
                        treeStore.Clear ();
109
 
                        string disabledNodes = PropertyService.Get ("ContextActions." + mimeType, "");
110
 
                        foreach (var node in RefactoringService.ContextAddinNodes.Where (n => n.MimeType == mimeType)) {
 
110
                        foreach (var node in providerStates.Keys) {
111
111
                                if (!string.IsNullOrEmpty (filter) && node.Title.IndexOf (filter, StringComparison.OrdinalIgnoreCase) < 0)
112
112
                                        continue;
113
113
                                
114
 
                                bool isEnabled = disabledNodes.IndexOf (node.IdString) < 0;
115
114
                                var title = node.Title;
116
115
                                if (!string.IsNullOrEmpty (filter)) {
117
116
                                        var idx = title.IndexOf (filter, StringComparison.OrdinalIgnoreCase);
118
117
                                        title = title.Substring (0, idx) + "<span bgcolor=\"yellow\">" + title.Substring (idx, filter.Length) + "</span>" + title.Substring (idx + filter.Length);
119
118
                                }
120
119
                                
121
 
                                treeStore.AppendValues (title, isEnabled, node);
 
120
                                treeStore.AppendValues (title, providerStates [node], node);
122
121
                        }
123
122
                }
124
 
                
 
123
 
 
124
                void HandleTreeviewContextActionsSelectionChanged (object sender, EventArgs e)
 
125
                {
 
126
                        this.labelDescription.Text = "";
 
127
                        Gtk.TreeIter iter;
 
128
                        if (!treeviewContextActions.Selection.GetSelected (out iter))
 
129
                                return;
 
130
                        var actionNode = (CodeActionProvider)treeStore.GetValue (iter, 2);
 
131
                        this.labelDescription.Markup = "<b>" + actionNode.Title + "</b>" + Environment.NewLine + actionNode.Description;
 
132
                }
 
133
 
125
134
                public void ApplyChanges ()
126
135
                {
127
136
                        var sb = new StringBuilder ();
128
 
                        Gtk.TreeIter iter;
129
 
                        if (!treeStore.GetIterFirst (out iter))
130
 
                                return;
131
 
                        do {
132
 
                                bool enabled = (bool)treeStore.GetValue (iter, 1);
133
 
                                var node = (CodeActionProvider)treeStore.GetValue (iter, 2);
134
 
                                
135
 
                                if (!enabled) {
136
 
                                        if (sb.Length > 0)
137
 
                                                sb.Append (",");
138
 
                                        sb.Append (node.IdString);
139
 
                                }
140
 
                        } while (treeStore.IterNext (ref iter));
 
137
                        foreach (var kv in providerStates) {
 
138
                                if (kv.Value)
 
139
                                        continue;
 
140
                                if (sb.Length > 0)
 
141
                                        sb.Append (",");
 
142
                                sb.Append (kv.Key.IdString);
 
143
                        }
141
144
                        PropertyService.Set ("ContextActions." + mimeType, sb.ToString ());
142
145
                }
143
146
        }