BioGTK  6.7.0
A .NET library & program for annotating, editing various microscopy imaging formats using Bioformats supported images. Including whole slide, pyramidal, and series.
Loading...
Searching...
No Matches
StackTools.cs
1using Gtk;
2using System;
3using System.IO;
4
5namespace BioGTK
6{
7 public class StackTools : Window
8 {
9 #region Properties
10
12 private Builder _builder;
13 int line = 0;
14#pragma warning disable 649
15 [Builder.Object]
16 private Button splitChannelsBut;
17 [Builder.Object]
18 private Button substackBut;
19 [Builder.Object]
20 private Button mergeZBut;
21 [Builder.Object]
22 private Button mergeTBut;
23 [Builder.Object]
24 private Button mergeBut;
25 [Builder.Object]
26 private ComboBox stackABox;
27 [Builder.Object]
28 private ComboBox stackBBox;
29 [Builder.Object]
30 private SpinButton zStartBox;
31 [Builder.Object]
32 private SpinButton cStartBox;
33 [Builder.Object]
34 private SpinButton tStartBox;
35 [Builder.Object]
36 private SpinButton zEndBox;
37 [Builder.Object]
38 private SpinButton cEndBox;
39 [Builder.Object]
40 private SpinButton tEndBox;
41#pragma warning restore 649
42
43 #endregion
44
45 #region Constructors / Destructors
48 public static StackTools Create()
49 {
50 Builder builder = new Builder(new FileStream(System.IO.Path.GetDirectoryName(Environment.ProcessPath) + "/" + "Glade/Stacks.glade", FileMode.Open));
51 return new StackTools(builder, builder.GetObject("stackTools").Handle);
52 }
53
57 protected StackTools(Builder builder, IntPtr handle) : base(handle)
58 {
59 _builder = builder;
60 builder.Autoconnect(this);
61 // Create an Adjustment object to define the range and step increment
62 zStartBox.Adjustment = new Adjustment(0, 0, 10000, 1, 10, 0);
63 cStartBox.Adjustment = new Adjustment(0, 0, 10000, 1, 10, 0);
64 tStartBox.Adjustment = new Adjustment(0, 0, 10000, 1, 10, 0);
65 zEndBox.Adjustment = new Adjustment(0, 0, 10000, 1, 10, 0);
66 cEndBox.Adjustment = new Adjustment(0, 0, 10000, 1, 10, 0);
67 tEndBox.Adjustment = new Adjustment(0, 0, 10000, 1, 10, 0);
68
69 stackABox.Changed += StackABox_Changed;
70 stackBBox.Changed += StackBBox_Changed;
71 splitChannelsBut.Clicked += SplitChannelsBut_Clicked;
72 substackBut.Clicked += SubstackBut_Clicked;
73 mergeZBut.Clicked += MergeZBut_Clicked;
74 mergeTBut.Clicked += MergeTBut_Clicked;
75 mergeBut.Clicked += MergeBut_Clicked;
76 this.FocusInEvent += StackTools_FocusInEvent;
77 // Set the text column to display
78 var renderer = new CellRendererText();
79 stackABox.PackStart(renderer, false);
80 stackABox.AddAttribute(renderer, "text", 0);
81 // Set the text column to display
82 var renderer2 = new CellRendererText();
83 stackBBox.PackStart(renderer2, false);
84 stackBBox.AddAttribute(renderer2, "text", 0);
85 App.ApplyStyles(this);
86 }
87
88 private void StackTools_FocusInEvent(object o, FocusInEventArgs args)
89 {
91 }
92 #endregion
101 private void StackBBox_Changed(object sender, EventArgs e)
102 {
103 if (stackABox.Active == -1)
104 return;
105 if (stackBBox.Active == -1)
106 return;
107 if (stackABox.Active == stackBBox.Active)
108 {
109 //Same image selected for A & B
110 MessageDialog messageDialog = new MessageDialog(
111 null,
112 DialogFlags.DestroyWithParent,
113 MessageType.Info,
114 ButtonsType.Ok,
115 "Same image selected for A & B. Change either A stack or B stack.");
116 messageDialog.Run();
117 messageDialog.Destroy();
118 stackBBox.Active = -1;
119 }
120 zEndBox.Adjustment.Upper = ImageB.SizeZ;
121 cEndBox.Adjustment.Upper = ImageB.SizeC;
122 tEndBox.Adjustment.Upper = ImageB.SizeT;
123
124 zStartBox.Adjustment.Upper = ImageB.SizeZ-1;
125 cStartBox.Adjustment.Upper = ImageB.SizeC-1;
126 tStartBox.Adjustment.Upper = ImageB.SizeT-1;
127
128 zEndBox.Value = ImageB.SizeZ;
129 cEndBox.Value = ImageB.SizeC;
130 tEndBox.Value = ImageB.SizeT;
131 }
132
140 private void StackABox_Changed(object sender, EventArgs e)
141 {
142 if (stackABox.Active == -1)
143 return;
144 if (stackABox.Active == stackBBox.Active)
145 {
146 //Same image selected for A & B
147 MessageDialog messageDialog = new MessageDialog(
148 null,
149 DialogFlags.DestroyWithParent,
150 MessageType.Info,
151 ButtonsType.Ok,
152 "Same image selected for A & B. Change either A stack or B stack.");
153 messageDialog.Run();
154 messageDialog.Destroy();
155 stackBBox.Active = -1;
156 }
157 zEndBox.Adjustment.Upper = ImageA.SizeZ;
158 cEndBox.Adjustment.Upper = ImageA.SizeC;
159 tEndBox.Adjustment.Upper = ImageA.SizeT;
160
161 zStartBox.Adjustment.Upper = ImageA.SizeZ-1;
162 cStartBox.Adjustment.Upper = ImageA.SizeC-1;
163 tStartBox.Adjustment.Upper = ImageA.SizeT-1;
164
165 zEndBox.Value = ImageA.SizeZ;
166 cEndBox.Value = ImageA.SizeC;
167 tEndBox.Value = ImageA.SizeT;
168 }
169
177 private void MergeBut_Clicked(object sender, EventArgs e)
178 {
179 if (stackABox.Active == -1)
180 return;
181 if (stackBBox.Active == -1)
182 return;
183 BioImage b = BioImage.MergeChannels(ImageA, ImageB);
184 App.tabsView.AddTab(b);
185 UpdateStacks();
186 }
187
188 // MergeTBut_Clicked() is a function that is called when the MergeTBut button is clicked
192 private void MergeTBut_Clicked(object sender, EventArgs e)
193 {
194 if (ImageA != null)
195 App.tabsView.AddTab(BioImage.MergeT(ImageA));
196 }
197
202 private void MergeZBut_Clicked(object sender, EventArgs e)
203 {
204 if (ImageA != null)
205 App.tabsView.AddTab(BioImage.MergeZ(ImageA));
206 }
207
215 private void SubstackBut_Clicked(object sender, EventArgs e)
216 {
217 if (stackABox.Active == -1)
218 return;
219 BioImage b = BioImage.Substack(ImageA, ImageA.series, (int)zStartBox.Value, (int)zEndBox.Value, (int)cStartBox.Value, (int)cEndBox.Value, (int)tStartBox.Value, (int)tEndBox.Value);
220 UpdateStacks();
221 App.tabsView.AddTab(b);
222 }
223
231 private void SplitChannelsBut_Clicked(object sender, EventArgs e)
232 {
233 if (stackABox.Active == -1)
234 return;
235 BioImage[] bms = ImageA.SplitChannels();
236 for (int i = 0; i < bms.Length; i++)
237 {
238 App.tabsView.AddTab(bms[i]);
239 }
240 UpdateStacks();
241 }
242
244 public void UpdateStacks()
245 {
246 var imgs = new ListStore(typeof(string));
247 // Add items to the ListStore
248 foreach (BioImage b in Images.images)
249 {
250 imgs.AppendValues(b.Filename);
251 }
252 // Set the model for the ComboBox
253 stackABox.Model = imgs;
254 stackBBox.Model = imgs;
255 zEndBox.Adjustment.Upper = ImageA.SizeZ;
256 cEndBox.Adjustment.Upper = ImageA.SizeC;
257 tEndBox.Adjustment.Upper = ImageA.SizeT;
258 }
259 public BioImage ImageA
260 {
261 get
262 {
263 if (stackABox.Active != -1)
264 return Images.images[stackABox.Active];
265 else
266 return Images.images[0];
267 }
268 }
269 public BioImage ImageB
270 {
271 get
272 {
273 if (stackBBox.Active != -1)
274 return Images.images[stackBBox.Active];
275 else
276 return Images.images[0];
277 }
278 }
279
280 private void StackTools_Activated(object sender, EventArgs e)
281 {
282 UpdateStacks();
283 }
284
285 private void setMaxToolStripMenuItem_Click(object sender, EventArgs e)
286 {
287 if (ImageA != null)
288 zEndBox.Value = ImageA.SizeZ;
289 }
290
291 private void setMaxCToolStripMenuItem_Click(object sender, EventArgs e)
292 {
293 if (ImageA != null)
294 cEndBox.Value = ImageA.SizeC;
295 }
296
297 private void setMaxTToolStripMenuItem_Click(object sender, EventArgs e)
298 {
299 if (ImageA != null)
300 tEndBox.Value = ImageA.SizeT;
301 }
302 }
303}
static StackTools Create()
Default Shared Constructor.
Definition StackTools.cs:48
StackTools(Builder builder, IntPtr handle)
Specialised constructor for use only by derived class.
Definition StackTools.cs:57
void UpdateStacks()
It takes a list of images and adds them to a dropdown menu.
Definition ML.cs:17