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
OMERO.cs
1using AForge;
2using BioLib;
3using com.google.errorprone.annotations;
4using Gdk;
5using Gtk;
6using ome.model.roi;
7using omero;
8using omero.gateway;
9using omero.gateway.model;
10using omero.model;
11using org.checkerframework.checker.units.qual;
12using System;
13using System.Collections.Generic;
14using System.IO;
15using System.Linq;
16using System.Text;
17using System.Threading.Tasks;
18
19namespace BioGTK
20{
21 public class OMERO : Gtk.Window
22 {
23 public class Image
24 {
25 public Gdk.Pixbuf pixbuf;
26 public long dataset;
27 public string name;
28 }
29 public static Progress prog;
30 #region Properties
31 private Builder _builder;
32 public static int IconWidth = 50;
33 public static int IconHeight = 50;
34 public static string dataset = "";
35 public static long id;
36 public static List<string> files = new List<string>();
37 public static bool uploading = false;
38 public List<Image> images = new List<Image>();
39 private ListStore store;
40
41#pragma warning disable 649
42 [Builder.Object]
43 private Gtk.SearchEntry searchBox;
44 [Builder.Object]
45 private Gtk.IconView view;
46 [Builder.Object]
47 private Gtk.ComboBox comboBox;
48 [Builder.Object]
49 private Gtk.ScrolledWindow scrollWind;
50 [Builder.Object]
51 private Gtk.CheckButton loadIconsBut;
52 [Builder.Object]
53 private Gtk.MenuItem uploadMenu;
54#pragma warning restore 649
55
56 #endregion
57
58 #region Constructors / Destructors
59
63 public static OMERO Create()
64 {
65 Builder builder = new Builder(new FileStream(System.IO.Path.GetDirectoryName(Environment.ProcessPath) + "/" + "Glade/omero.glade", FileMode.Open));
66 return new OMERO(builder, builder.GetObject("omeroViewer").Handle);
67 }
68
69 /* The constructor for the TextInput class. */
70 protected OMERO(Builder builder, IntPtr handle) : base(handle)
71 {
72 _builder = builder;
73 builder.Autoconnect(this);
74 InitItems();
75 this.SizeAllocated += OMERO_SizeAllocated;
76 searchBox.Changed += SearchBox_Changed;
77 comboBox.Changed += ComboBox_Changed;
78 uploadMenu.ButtonPressEvent += UploadMenu_ButtonPressEvent;
79 view.ItemActivated += View_ItemActivated;
80 // Enable drag-and-drop for this window
81 Gtk.Drag.DestSet(this, DestDefaults.All, new TargetEntry[]
82 {
83 new TargetEntry("text/uri-list", TargetFlags.OtherApp, 0)
84 }, Gdk.DragAction.Copy);
85 this.DragDataReceived += View_DragDataReceived;
86 App.ApplyStyles(this);
87 }
88
89 private void UploadMenu_ButtonPressEvent(object o, ButtonPressEventArgs args)
90 {
91 files.Clear();
92 FileChooserDialog filechooser = new FileChooserDialog("Choose files to import.", this, FileChooserAction.Open, "Cancel", ResponseType.Cancel, "OK", ResponseType.Accept);
93 filechooser.SelectMultiple = true;
94 if (filechooser.Run() != (int)ResponseType.Accept)
95 return;
96 string[] sts = filechooser.Filenames;
97 filechooser.Hide();
98 if(BioLib.OMERO.password == "")
99 {
100 Login log = Login.Create();
101 int status = log.Run();
102 if (status != (int)ResponseType.Ok)
103 {
104 return;
105 }
106 }
107 files.AddRange(sts);
108 foreach (string s in sts)
109 {
110 Thread ths = new Thread(StartUpload);
111 ths.Start();
112 }
113 }
114
115
116 public static void StartUpload()
117 {
118 foreach (var f in files)
119 {
120 prog = Progress.Create("Uploading", "Uploading image.",f);
121 prog.Show();
122 uploading = true;
123 Thread th = new Thread(UpdateProgress);
124 th.Start();
125 fi = f;
126 Thread ths = new Thread(Upload);
127 ths.Start();
128 }
129 }
130 static string fi;
131 private static void Upload()
132 {
133 BioLib.OMERO.Upload(BioImage.OpenFile(fi).Result, id);
134 uploading = false;
135 }
136 public static void UpdateProgress()
137 {
138 do
139 {
140 OMERO.prog.ProgressValue = BioLib.OMERO.progress;
141 Thread.Sleep(250);
142 } while (OMERO.uploading);
143 OMERO.prog.Hide();
144 }
145
146 private void View_DragDataReceived(object o, DragDataReceivedArgs args)
147 {
148 files.Clear();
149 // Convert the received data to a string
150 string receivedData = System.Text.Encoding.UTF8.GetString(args.SelectionData.Data);
151
152 // Parse the URIs (file paths)
153 string[] uris = receivedData.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
154 foreach (string uri in uris)
155 {
156 if (Uri.TryCreate(uri, UriKind.Absolute, out Uri fileUri) && fileUri.IsFile)
157 {
158 string filePath = fileUri.LocalPath;
159 files.Add(filePath);
160 }
161 }
162 StartUpload();
163 args.RetVal = true; // Indicate the drop was handled
164 }
165
166 private void View_ItemActivated(object o, ItemActivatedArgs args)
167 {
168 BioLib.OMERO.ReConnect();
169 TreePath path = args.Path;
170 store.GetIter(out TreeIter iter, path);
171 string selectedItem;
172 if (loadIconsBut.Active)
173 selectedItem = (string)store.GetValue(iter, 1);
174 else
175 selectedItem = (string)store.GetValue(iter, 0);
176 string[] sts = selectedItem.Split(' ');
177 foreach (var item in images)
178 {
179 if (item.name.Contains(sts[0]))
180 {
181 BioImage bm = BioLib.OMERO.GetImage(selectedItem, item.dataset);
182 App.tabsView.AddTab(bm);
183 }
184 }
185 }
186
187 private void OMERO_SizeAllocated(object o, SizeAllocatedArgs args)
188 {
189 view.HeightRequest = scrollWind.AllocatedHeight;
190 }
191
192 private void ComboBox_Changed(object sender, EventArgs e)
193 {
194 TreeIter iter;
195 comboBox.Model.GetIterFromString(out iter, comboBox.Active.ToString());
196 string selectedItem = (string)comboBox.Model.GetValue(iter, 0);
197 string[] sts = selectedItem.Split(' ');
198 dataset = sts[0];
199 id = long.Parse(sts[1]);
200 InitIcons();
201 }
202 #endregion
203 private void InitIcons()
204 {
205 List<DatasetData> dbs = BioLib.OMERO.GetDatasetsData();
206 if (loadIconsBut.Active)
207 {
208 var listStore = new ListStore(typeof(Gdk.Pixbuf), typeof(string));
209 view.PixbufColumn = 0;
210 view.TextColumn = 1;
211 images.Clear();
212
213 if (comboBox.Active != -1)
214 {
215 TreeIter iter;
216 comboBox.Model.GetIterFromString(out iter, comboBox.Active.ToString());
217 string selectedItem = (string)comboBox.Model.GetValue(iter, 0);
218 string[] sts = selectedItem.Split(' ');
219 List<string> str = BioLib.OMERO.GetDatasetFiles(id);
220 Dictionary<long, Pixbuf> dict = BioLib.OMERO.GetThumbnails(str.ToArray(), IconWidth, IconHeight);
221 if (dict != null)
222 foreach (var item in dict)
223 {
224 Image image = new Image();
225 image.pixbuf = item.Value;
226 image.dataset = id;
227 image.name = BioLib.OMERO.GetNameFromID(item.Key);
228 images.Add(image);
229 }
230 }
231 foreach (var im in images)
232 {
233 listStore.AppendValues(im.pixbuf, im.name);
234 }
235 view.Model = listStore;
236 store = listStore;
237 }
238 else
239 {
240 var listStore = new ListStore(typeof(string));
241 view.TextColumn = 0;
242 images.Clear();
243
244 if (comboBox.Active != -1)
245 foreach (var db in dbs)
246 {
247 TreeIter iter;
248 comboBox.Model.GetIterFromString(out iter, comboBox.Active.ToString());
249 string selectedItem = (string)comboBox.Model.GetValue(iter, 0);
250 string[] sts = selectedItem.Split(' ');
251 if (db.getId() == long.Parse(sts[1]))
252 continue;
253 List<long> str = BioLib.OMERO.GetDatasetIds(db.getId());
254 if (str.Count == 0)
255 BioLib.OMERO.ReConnect();
256 foreach (var item in str)
257 {
258 Image image = new Image();
259 //.pixbuf = item.Value;
260 image.dataset = db.getId();
261 image.name = BioLib.OMERO.GetNameFromID(item);
262 images.Add(image);
263 }
264 }
265 foreach (var im in images)
266 {
267 listStore.AppendValues(im.name);
268 }
269 view.Model = listStore;
270 store = listStore;
271 }
272 }
273 public void InitItems()
274 {
275 var comStore = new ListStore(typeof(string));
276 List<DatasetData> dbs = BioLib.OMERO.GetDatasetsData();
277 foreach (var im in dbs)
278 {
279 comStore.AppendValues(im.getName() + " " + im.getId());
280 }
281 comboBox.Model = comStore;
282
283 }
284 public void UpdateROIs()
285 {
286 var ro = BioLib.OMERO.gateway.getROIService(BioLib.OMERO.sc);
287
288 }
289 public void UpdateItems(string filt)
290 {
291 var listStore = new ListStore(typeof(Gdk.Pixbuf), typeof(string));
292 view.PixbufColumn = 0;
293 view.TextColumn = 1;
294 foreach (var im in images)
295 {
296 if(im.name.Contains(filt) || filt == "")
297 listStore.AppendValues(im.pixbuf, im.name);
298 }
299 view.Model = listStore;
300 }
301 private void SearchBox_Changed(object sender, EventArgs e)
302 {
303 UpdateItems(searchBox.Buffer.Text);
304 }
305
306 }
307}
static OMERO Create()
Definition OMERO.cs:63
Definition ML.cs:17
Definition Zarr.cs:20