3
* GNOME Do is the legal property of its developers. Please refer to the
4
* COPYRIGHT file distributed with this
7
* This program is free software: you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation, either version 3 of the License, or
10
* (at your option) any later version.
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
17
* You should have received a copy of the GNU General Public License
18
* along with this program. If not, see <http://www.gnu.org/licenses/>.
22
using System.Threading;
28
public class DoAction : DoObject, IAction {
30
public DoAction (IAction action):
35
public Type [] SupportedItemTypes
40
types = (Inner as IAction).SupportedItemTypes;
41
} catch (Exception e) {
42
LogError ("SupportedItemTypes", e);
44
types = types ?? Type.EmptyTypes;
50
public Type [] SupportedModifierItemTypes
55
types = (Inner as IAction).SupportedModifierItemTypes;
56
} catch (Exception e) {
57
LogError ("SupportedModifierItemTypes", e);
59
types = types ?? Type.EmptyTypes;
65
public bool ModifierItemsOptional
70
optional = (Inner as IAction).ModifierItemsOptional;
71
} catch (Exception e) {
72
LogError ("ModifierItemsOptional", e);
78
public IItem [] DynamicModifierItemsForItem (IItem item)
80
IAction action = Inner as IAction;
84
item = EnsureIItem (item);
86
modItems = action.DynamicModifierItemsForItem (item);
87
} catch (Exception e) {
88
LogError ("DynamicModifierItemsForItem", e);
90
modItems = modItems ?? new IItem [0];
92
return EnsureDoItemArray (modItems);
95
public bool SupportsItem (IItem item)
97
IAction action = Inner as IAction;
98
bool supports = false;
100
item = EnsureIItem (item);
101
if (!IObjectTypeCheck (item, SupportedItemTypes))
105
supports = action.SupportsItem (item);
106
} catch (Exception e) {
107
LogError ("SupportsItem", e);
112
public bool SupportsModifierItemForItems (IItem [] items, IItem modItem)
114
IAction action = Inner as IAction;
115
bool supports = false;
117
items = EnsureIItemArray (items);
118
modItem = EnsureIItem (modItem);
119
if (!IObjectTypeCheck (modItem, SupportedModifierItemTypes))
123
supports = action.SupportsModifierItemForItems (items, modItem);
124
} catch (Exception e) {
125
LogError ("SupportsModifierItemForItems", e);
130
public IItem [] Perform (IItem [] items, IItem [] modItems)
132
IAction action = Inner as IAction;
133
IItem [] resultItems = null;
135
items = EnsureIItemArray (items);
136
modItems = EnsureIItemArray (modItems);
139
resultItems = action.Perform (items, modItems);
140
} catch (Exception e) {
141
LogError ("Perform", e);
143
resultItems = resultItems ?? new IItem [0];
145
resultItems = EnsureDoItemArray (resultItems);
147
// If we have results to feed back into the window, do so in a new
149
if (resultItems.Length > 0) {
150
GLib.Timeout.Add (10, delegate {
151
Do.Controller.SummonWithObjects (resultItems);