Skip to content
Snippets Groups Projects
Commit 9fbad808 authored by Michael DM Dryden's avatar Michael DM Dryden
Browse files

Autosave functionality implemented. Removed unused view options.

parent 481ef431
Branches
Tags
No related merge requests found
......@@ -85,18 +85,17 @@
<property name="can_focus">False</property>
<property name="stock">gtk-save-as</property>
</object>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-save</property>
</object>
<object class="GtkListStore" id="serial_liststore">
<columns>
<!-- column-name serial -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkAdjustment" id="updatesamples_adj">
<property name="upper">100</property>
<property name="value">5</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="border_width">6</property>
......@@ -151,12 +150,12 @@
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="gtk-save-as">
<property name="label">gtk-save-as</property>
<object class="GtkImageMenuItem" id="file_save_plot">
<property name="label">Save Plot…</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="image">image3</property>
<property name="use_stock">False</property>
</object>
</child>
<child>
......@@ -426,8 +425,8 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkCheckButton" id="plotinteractive_checkbutton">
<property name="label" translatable="yes">Plot updates during measurement</property>
<object class="GtkCheckButton" id="autosave_checkbutton">
<property name="label" translatable="yes">Autosave</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
......@@ -440,51 +439,38 @@
</packing>
</child>
<child>
<object class="GtkSpinButton" id="samples_spinbutton">
<object class="GtkFileChooserButton" id="autosavedir_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char"></property>
<property name="truncate_multiline">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="adjustment">updatesamples_adj</property>
<property name="snap_to_ticks">True</property>
<property name="numeric">True</property>
<property name="update_policy">if-valid</property>
<property name="can_focus">False</property>
<property name="action">select-folder</property>
<property name="preview_widget_active">False</property>
<property name="title" translatable="yes">Select a Save Folder</property>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<object class="GtkEntry" id="autosavename">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">samples per update</property>
<property name="can_focus">True</property>
<property name="max_length">32</property>
<property name="invisible_char"></property>
<property name="text" translatable="yes">file</property>
<property name="overwrite_mode">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
......@@ -648,4 +634,10 @@
</object>
</child>
</object>
<object class="GtkAdjustment" id="updatesamples_adj">
<property name="upper">100</property>
<property name="value">5</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
</interface>
#!/usr/bin/env python
import gtk, io
import gtk, io, os
import numpy as np
class npSave:
def __init__(self, current_exp):
self.exp = current_exp
self.fcd = gtk.FileChooserDialog("Save...", None, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK))
self.filters = [gtk.FileFilter()]
self.filters[0].set_name("NumPy binary (.npy)")
self.filters[0].add_pattern("*.npy")
self.filters.append(gtk.FileFilter())
self.filters[1].set_name("Space separated text (.txt)")
self.filters[1].add_pattern("*.txt")
def manSave(current_exp):
exp = current_exp
fcd = gtk.FileChooserDialog("Save...", None, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK))
filters = [gtk.FileFilter()]
filters[0].set_name("NumPy binary (.npy)")
filters[0].add_pattern("*.npy")
filters.append(gtk.FileFilter())
filters[1].set_name("Space separated text (.txt)")
filters[1].add_pattern("*.txt")
fcd.set_do_overwrite_confirmation(True)
for i in filters:
fcd.add_filter(i)
response = fcd.run()
if response == gtk.RESPONSE_OK:
path = fcd.get_filename()
print "Selected filepath: %s" % path
filter_selection = fcd.get_filter().get_name()
self.fcd.set_do_overwrite_confirmation(True)
for i in self.filters:
self.fcd.add_filter(i)
self.response = self.fcd.run()
if filter_selection.endswith("(.npy)"):
npy(exp, path)
elif filter_selection.endswith("(.txt)"):
text(exp, path)
fcd.destroy()
if self.response == gtk.RESPONSE_OK:
self.path = self.fcd.get_filename()
print "Selected filepath: %s" % self.path
filter_selection = self.fcd.get_filter().get_name()
if filter_selection.endswith("(.npy)"):
self.npy()
elif filter_selection.endswith("(.txt)"):
self.text()
self.fcd.destroy()
def autoSave(current_exp, dir_button, name, expnumber):
if name == "":
name = "file"
path = dir_button.get_filename()
path += '/'
path += name
path += str(expnumber)
text(current_exp, path)
def npy(exp, path):
if path.endswith(".npy"):
path = path.rstrip(".npy")
data = np.array(exp.data)
j = 1
while os.path.exists("".join([path, ".npy"])):
if j > 1:
path = path[:-len(str(j))]
path += str(j)
j += 1
np.save(path, data)
def text(exp, path):
if path.endswith(".txt"):
path = path.rstrip(".txt")
j = 1
def npy(self):
self.data = np.array(self.exp.data)
np.save(self.path, self.data())
while os.path.exists("".join([path, ".txt"])):
if j > 1:
path = path[:-len(str(j))]
path += str(j)
j += 1
path += ".txt"
data = np.array(exp.data)
header = ""
for i in exp.commands:
header += i
def text(self):
if not self.path.endswith(".txt"):
self.path += ".txt"
self.data = np.array(self.exp.data)
header = ""
for i in self.exp.commands:
header += i
np.savetxt(self.path, self.data.transpose(), header=header, newline='\n')
np.savetxt(path, data.transpose(), header=header, newline='\n')
......@@ -78,8 +78,12 @@ class main:
self.error_context_id = self.statusbar.get_context_id("error")
self.plotwindow = self.builder.get_object('plotbox')
self.plotint_checkbox = self.builder.get_object('plotinteractive_checkbutton')
self.updatelimit_adj = self.builder.get_object('updatesamples_adj')
#setup autosave
self.autosave_checkbox = self.builder.get_object('autosave_checkbutton')
self.autosavedir_button = self.builder.get_object('autosavedir_button')
self.autosavename = self.builder.get_object('autosavename')
self.plot = mpltest.plotbox(self.plotwindow)
#fill exp_section
......@@ -138,6 +142,8 @@ class main:
self.acv_container.hide()
self.pd_container.hide()
self.expnumber = 0
def exp_param_show(self, selection):
self.chronoamp_container.hide()
self.lsv_container.hide()
......@@ -207,9 +213,6 @@ class main:
parameters['adc_pga'] = pga_model.get_value(self.adc_pot.pga_combobox.get_active_iter(), 2)
parameters['gain'] = gain_model.get_value(self.adc_pot.gain_combobox.get_active_iter(), 2)
view_parameters['update'] = self.plotint_checkbox.get_active()
view_parameters['updatelimit'] = int(self.updatelimit_adj.get_value())
self.line = 0
self.lastline = 0
self.lastdataline = 0
......@@ -537,7 +540,10 @@ class main:
for row in col:
self.databuffer.insert_at_cursor(str(row)+ "\t")
self.databuffer.insert_at_cursor("\n")
if self.autosave_checkbox.get_active():
save_inst = save.autoSave(self.current_exp, self.autosavedir_button, self.autosavename.get_text(), self.expnumber)
self.expnumber += 1
self.spinner.stop()
self.startbutton.set_sensitive(True)
......@@ -550,7 +556,7 @@ class main:
def on_file_save_exp_activate(self, menuitem, data=None):
if self.current_exp:
self.save = save.npSave(self.current_exp)
save_inst = save.manSave(self.current_exp)
if __name__ == "__main__":
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment