reworked the cursor
This commit is contained in:
+129
-109
@@ -206,7 +206,7 @@ class DamarisGUI:
|
|||||||
else:
|
else:
|
||||||
self.start_immediately = False
|
self.start_immediately = False
|
||||||
self.statusbar_init( )
|
self.statusbar_init( )
|
||||||
|
|
||||||
#connect event handlers
|
#connect event handlers
|
||||||
eventhandlers = {"on_toolbar_run_button_clicked": self.start_experiment,
|
eventhandlers = {"on_toolbar_run_button_clicked": self.start_experiment,
|
||||||
"on_toolbar_pause_button_toggled": self.pause_experiment,
|
"on_toolbar_pause_button_toggled": self.pause_experiment,
|
||||||
@@ -241,7 +241,7 @@ class DamarisGUI:
|
|||||||
"on_main_notebook_switch_page": self.nopevent,
|
"on_main_notebook_switch_page": self.nopevent,
|
||||||
"main_window_close": self.nopevent
|
"main_window_close": self.nopevent
|
||||||
}
|
}
|
||||||
self.xml_gui.connect_signals(eventhandlers)
|
self.xml_gui.connect_signals(eventhandlers)
|
||||||
|
|
||||||
self.main_window.maximize()
|
self.main_window.maximize()
|
||||||
self.main_window.show_all( )
|
self.main_window.show_all( )
|
||||||
@@ -255,8 +255,8 @@ class DamarisGUI:
|
|||||||
self.main_window.connect( "delete-event", self.quit_event )
|
self.main_window.connect( "delete-event", self.quit_event )
|
||||||
self.main_window.set_icon_from_file( os.path.join( os.path.dirname( __file__ ), "DAMARIS3.png" ) )
|
self.main_window.set_icon_from_file( os.path.join( os.path.dirname( __file__ ), "DAMARIS3.png" ) )
|
||||||
self.main_window.set_title( "DAMARIS-%s" % __version__ )
|
self.main_window.set_title( "DAMARIS-%s" % __version__ )
|
||||||
|
|
||||||
|
|
||||||
def statusbar_init( self ):
|
def statusbar_init( self ):
|
||||||
"""
|
"""
|
||||||
experiment and result thread status, backend state
|
experiment and result thread status, backend state
|
||||||
@@ -277,7 +277,7 @@ class DamarisGUI:
|
|||||||
self.toolbar_run_button.set_sensitive( True )
|
self.toolbar_run_button.set_sensitive( True )
|
||||||
self.toolbar_stop_button.set_sensitive( False )
|
self.toolbar_stop_button.set_sensitive( False )
|
||||||
self.toolbar_pause_button.set_sensitive( False )
|
self.toolbar_pause_button.set_sensitive( False )
|
||||||
|
|
||||||
def run( self ):
|
def run( self ):
|
||||||
# prolong lifetime of clipboard till the very end (avoid error message)
|
# prolong lifetime of clipboard till the very end (avoid error message)
|
||||||
self.main_clipboard = self.sw.main_clipboard
|
self.main_clipboard = self.sw.main_clipboard
|
||||||
@@ -296,7 +296,7 @@ class DamarisGUI:
|
|||||||
# event handling: the real acitons in gui programming
|
# event handling: the real acitons in gui programming
|
||||||
|
|
||||||
# first global events
|
# first global events
|
||||||
|
|
||||||
def nopevent(self, widget, data=None, otherargument=None):
|
def nopevent(self, widget, data=None, otherargument=None):
|
||||||
#print(widget)
|
#print(widget)
|
||||||
#print(data)
|
#print(data)
|
||||||
@@ -310,7 +310,7 @@ class DamarisGUI:
|
|||||||
if self.state in [ DamarisGUI.Edit_State, DamarisGUI.Quit_State ]:
|
if self.state in [ DamarisGUI.Edit_State, DamarisGUI.Quit_State ]:
|
||||||
self.state = DamarisGUI.Quit_State
|
self.state = DamarisGUI.Quit_State
|
||||||
# do a cleanup...
|
# do a cleanup...
|
||||||
|
|
||||||
if self.sw.experiment_script_textbuffer.get_modified( ):
|
if self.sw.experiment_script_textbuffer.get_modified( ):
|
||||||
question = gtk.MessageDialog(parent=self.xml_gui.get_object( "main_window"),
|
question = gtk.MessageDialog(parent=self.xml_gui.get_object( "main_window"),
|
||||||
type=gtk.MessageType.WARNING,
|
type=gtk.MessageType.WARNING,
|
||||||
@@ -320,7 +320,7 @@ class DamarisGUI:
|
|||||||
|
|
||||||
response = question.run()
|
response = question.run()
|
||||||
question.destroy()
|
question.destroy()
|
||||||
|
|
||||||
if response == gtk.ResponseType.CANCEL:
|
if response == gtk.ResponseType.CANCEL:
|
||||||
return True
|
return True
|
||||||
elif response == gtk.ResponseType.YES:
|
elif response == gtk.ResponseType.YES:
|
||||||
@@ -331,7 +331,7 @@ class DamarisGUI:
|
|||||||
else:
|
else:
|
||||||
self.sw.save_file()
|
self.sw.save_file()
|
||||||
self.main_notebook.set_current_page(current_page)
|
self.main_notebook.set_current_page(current_page)
|
||||||
|
|
||||||
if self.sw.data_handling_textbuffer.get_modified( ):
|
if self.sw.data_handling_textbuffer.get_modified( ):
|
||||||
question = gtk.MessageDialog(parent=self.xml_gui.get_object( "main_window"),
|
question = gtk.MessageDialog(parent=self.xml_gui.get_object( "main_window"),
|
||||||
type=gtk.MessageType.WARNING,
|
type=gtk.MessageType.WARNING,
|
||||||
@@ -341,7 +341,7 @@ class DamarisGUI:
|
|||||||
|
|
||||||
response = question.run()
|
response = question.run()
|
||||||
question.destroy()
|
question.destroy()
|
||||||
|
|
||||||
if response == gtk.ResponseType.CANCEL:
|
if response == gtk.ResponseType.CANCEL:
|
||||||
return True
|
return True
|
||||||
elif response == gtk.ResponseType.YES:
|
elif response == gtk.ResponseType.YES:
|
||||||
@@ -352,8 +352,8 @@ class DamarisGUI:
|
|||||||
else:
|
else:
|
||||||
self.sw.save_file()
|
self.sw.save_file()
|
||||||
self.main_notebook.set_current_page(current_page)
|
self.main_notebook.set_current_page(current_page)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.config = None
|
self.config = None
|
||||||
self.sw = None
|
self.sw = None
|
||||||
@@ -474,7 +474,7 @@ class DamarisGUI:
|
|||||||
self.experiment_script_statusbar_label.set_text("Waiting for other experiment to finish")
|
self.experiment_script_statusbar_label.set_text("Waiting for other experiment to finish")
|
||||||
loop_run = 0
|
loop_run = 0
|
||||||
loop_run += interval
|
loop_run += interval
|
||||||
|
|
||||||
if self.stop_experiment_flag.isSet():
|
if self.stop_experiment_flag.isSet():
|
||||||
#Experiment has been stopped, clean up and leave
|
#Experiment has been stopped, clean up and leave
|
||||||
self.experiment_script_statusbar_label.set_text("Experiment stopped")
|
self.experiment_script_statusbar_label.set_text("Experiment stopped")
|
||||||
@@ -570,18 +570,18 @@ class DamarisGUI:
|
|||||||
r = self.si.data.get( "__recentresult", -1 ) + 1
|
r = self.si.data.get( "__recentresult", -1 ) + 1
|
||||||
b = self.si.data.get( "__resultsinadvance", -1 ) + 1
|
b = self.si.data.get( "__resultsinadvance", -1 ) + 1
|
||||||
e = self.si.data.get( "__recentexperiment", -1 ) + 1
|
e = self.si.data.get( "__recentexperiment", -1 ) + 1
|
||||||
|
|
||||||
experimentstarttime = self.si.data.get( "__experimentstarted", 0 )
|
experimentstarttime = self.si.data.get( "__experimentstarted", 0 )
|
||||||
expectedexperimentruntime = self.si.data.get( "__totalexperimentlength", 0 )
|
expectedexperimentruntime = self.si.data.get( "__totalexperimentlength", 0 )
|
||||||
experimentsfinishedtime = 0.0
|
experimentsfinishedtime = 0.0
|
||||||
|
|
||||||
for i in range(0, b):
|
for i in range(0, b):
|
||||||
experimentsfinishedtime += self.si.data.get("__experimentlengths", {}).get(i, 0.0)
|
experimentsfinishedtime += self.si.data.get("__experimentlengths", {}).get(i, 0.0)
|
||||||
|
|
||||||
experimentruntime = time.time() - experimentstarttime
|
experimentruntime = time.time() - experimentstarttime
|
||||||
|
|
||||||
experimenttimetext = ""
|
experimenttimetext = ""
|
||||||
|
|
||||||
if experimentstarttime > 0 and expectedexperimentruntime > 0:
|
if experimentstarttime > 0 and expectedexperimentruntime > 0:
|
||||||
runtimemin, runtimesec = divmod(math.floor(experimentruntime), 60)
|
runtimemin, runtimesec = divmod(math.floor(experimentruntime), 60)
|
||||||
runtimehours, runtimemin = divmod(runtimemin, 60)
|
runtimehours, runtimemin = divmod(runtimemin, 60)
|
||||||
@@ -589,14 +589,14 @@ class DamarisGUI:
|
|||||||
expectedmin, expectedsec = divmod(math.ceil(expectedexperimentruntime), 60)
|
expectedmin, expectedsec = divmod(math.ceil(expectedexperimentruntime), 60)
|
||||||
expectedhours, expectedmin = divmod(expectedmin, 60)
|
expectedhours, expectedmin = divmod(expectedmin, 60)
|
||||||
experimenttimetext += "{:02d}:{:02d}:{:02d})".format(int(expectedhours), int(expectedmin), int(expectedsec))
|
experimenttimetext += "{:02d}:{:02d}:{:02d})".format(int(expectedhours), int(expectedmin), int(expectedsec))
|
||||||
|
|
||||||
backendtimetext = ""
|
backendtimetext = ""
|
||||||
|
|
||||||
if experimentsfinishedtime > 0:
|
if experimentsfinishedtime > 0:
|
||||||
finexperimmin, finexperimsec = divmod(round(experimentsfinishedtime), 60)
|
finexperimmin, finexperimsec = divmod(round(experimentsfinishedtime), 60)
|
||||||
finexperimhours, finexperimmin = divmod(finexperimmin, 60)
|
finexperimhours, finexperimmin = divmod(finexperimmin, 60)
|
||||||
backendtimetext = " ({:02d}:{:02d}:{:02d})".format(int(finexperimhours), int(finexperimmin), int(finexperimsec))
|
backendtimetext = " ({:02d}:{:02d}:{:02d})".format(int(finexperimhours), int(finexperimmin), int(finexperimsec))
|
||||||
|
|
||||||
e_text = None
|
e_text = None
|
||||||
r_text = None
|
r_text = None
|
||||||
b_text = None
|
b_text = None
|
||||||
@@ -917,7 +917,7 @@ class DamarisGUI:
|
|||||||
# del logtextbuffer, logtext_start, logtext_end, last_end
|
# del logtextbuffer, logtext_start, logtext_end, last_end
|
||||||
for l in logtext.splitlines( ):
|
for l in logtext.splitlines( ):
|
||||||
dump_file.root.log.append( numpy.array( [ l ], dtype="S120" ) )
|
dump_file.root.log.append( numpy.array( [ l ], dtype="S120" ) )
|
||||||
|
|
||||||
dump_file.flush( )
|
dump_file.flush( )
|
||||||
dump_file.close( )
|
dump_file.close( )
|
||||||
self.last_dumped = time.time( )
|
self.last_dumped = time.time( )
|
||||||
@@ -1080,13 +1080,13 @@ class LogWindow:
|
|||||||
self.textbuffer.insert_at_cursor( date_tag + str( message ) )
|
self.textbuffer.insert_at_cursor( date_tag + str( message ) )
|
||||||
self.textview.scroll_to_mark( self.textbuffer.get_insert( ), 0.1 , False, 0.5, 0.5)
|
self.textview.scroll_to_mark( self.textbuffer.get_insert( ), 0.1 , False, 0.5, 0.5)
|
||||||
gdk.threads_leave( )
|
gdk.threads_leave( )
|
||||||
|
|
||||||
def textview_keypress( self, widget, event, data=None ):
|
def textview_keypress( self, widget, event, data=None ):
|
||||||
if event.state & gdk.ModifierType.CONTROL_MASK != 0:
|
if event.state & gdk.ModifierType.CONTROL_MASK != 0:
|
||||||
if event.keyval == gdk.keyval_from_name("f"):
|
if event.keyval == gdk.keyval_from_name("f"):
|
||||||
self.damaris_gui.sw.search(None, None)
|
self.damaris_gui.sw.search(None, None)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def __del__( self ):
|
def __del__( self ):
|
||||||
@@ -1118,17 +1118,17 @@ class ScriptWidgets:
|
|||||||
# create and set syntax-highlighting text-buffers as textview backends
|
# create and set syntax-highlighting text-buffers as textview backends
|
||||||
self.experiment_script_textbuffer = gtksourceview2.Buffer()
|
self.experiment_script_textbuffer = gtksourceview2.Buffer()
|
||||||
self.data_handling_textbuffer = gtksourceview2.Buffer()
|
self.data_handling_textbuffer = gtksourceview2.Buffer()
|
||||||
|
|
||||||
lm = gtksourceview2.LanguageManager()
|
lm = gtksourceview2.LanguageManager()
|
||||||
langpython = lm.get_language("python")
|
langpython = lm.get_language("python")
|
||||||
|
|
||||||
self.experiment_script_textbuffer.set_language(langpython)
|
self.experiment_script_textbuffer.set_language(langpython)
|
||||||
self.experiment_script_textbuffer.set_highlight_syntax(True)
|
self.experiment_script_textbuffer.set_highlight_syntax(True)
|
||||||
self.data_handling_textbuffer.set_language(langpython)
|
self.data_handling_textbuffer.set_language(langpython)
|
||||||
self.data_handling_textbuffer.set_highlight_syntax(True)
|
self.data_handling_textbuffer.set_highlight_syntax(True)
|
||||||
|
|
||||||
fontdesc = pango.FontDescription("monospace")
|
fontdesc = pango.FontDescription("monospace")
|
||||||
|
|
||||||
self.experiment_script_textview.set_buffer( self.experiment_script_textbuffer )
|
self.experiment_script_textview.set_buffer( self.experiment_script_textbuffer )
|
||||||
self.experiment_script_textview.set_show_line_numbers(True)
|
self.experiment_script_textview.set_show_line_numbers(True)
|
||||||
self.experiment_script_textview.set_auto_indent(True)
|
self.experiment_script_textview.set_auto_indent(True)
|
||||||
@@ -1143,32 +1143,32 @@ class ScriptWidgets:
|
|||||||
self.data_handling_textview.set_tab_width(4)
|
self.data_handling_textview.set_tab_width(4)
|
||||||
self.data_handling_textview.set_smart_home_end(True)
|
self.data_handling_textview.set_smart_home_end(True)
|
||||||
self.data_handling_textview.modify_font(fontdesc)
|
self.data_handling_textview.modify_font(fontdesc)
|
||||||
|
|
||||||
keywords = """for if else elif in print try finally except global lambda not or pass def
|
keywords = """for if else elif in print try finally except global lambda not or pass def
|
||||||
class import from as return yield while continue break assert None True False AccumulatedValue
|
class import from as return yield while continue break assert None True False AccumulatedValue
|
||||||
Accumulation MeasurementResult ADC_Result Experiment synchronize sleep result data isinstance
|
Accumulation MeasurementResult ADC_Result Experiment synchronize sleep result data isinstance
|
||||||
issubclass min max abs pow range xrange log_range lin_range staggered_range int float zip file
|
issubclass min max abs pow range xrange log_range lin_range staggered_range int float zip file
|
||||||
combine_ranges interleaved_range get_sampling_rate uses_statistics write_to_csv write_to_hdf
|
combine_ranges interleaved_range get_sampling_rate uses_statistics write_to_csv write_to_hdf
|
||||||
get_job_id get_description set_description get_xdata get_ydata set_xdate set_ydata"""
|
get_job_id get_description set_description get_xdata get_ydata set_xdate set_ydata"""
|
||||||
|
|
||||||
keywordsbuffer = gtksourceview2.Buffer()
|
keywordsbuffer = gtksourceview2.Buffer()
|
||||||
keywordsbuffer.set_text(keywords)
|
keywordsbuffer.set_text(keywords)
|
||||||
|
|
||||||
compexp = self.experiment_script_textview.get_completion()
|
compexp = self.experiment_script_textview.get_completion()
|
||||||
compres = self.data_handling_textview.get_completion()
|
compres = self.data_handling_textview.get_completion()
|
||||||
|
|
||||||
compwgen = gtksourceview2.CompletionWords()
|
compwgen = gtksourceview2.CompletionWords()
|
||||||
compwgen.register(keywordsbuffer)
|
compwgen.register(keywordsbuffer)
|
||||||
|
|
||||||
compwexp = gtksourceview2.CompletionWords()
|
compwexp = gtksourceview2.CompletionWords()
|
||||||
compwexp.register(self.experiment_script_textbuffer)
|
compwexp.register(self.experiment_script_textbuffer)
|
||||||
|
|
||||||
compwres = gtksourceview2.CompletionWords()
|
compwres = gtksourceview2.CompletionWords()
|
||||||
compwres.register(self.data_handling_textbuffer)
|
compwres.register(self.data_handling_textbuffer)
|
||||||
|
|
||||||
compexp.add_provider(compwgen)
|
compexp.add_provider(compwgen)
|
||||||
compres.add_provider(compwgen)
|
compres.add_provider(compwgen)
|
||||||
|
|
||||||
compexp.add_provider(compwexp)
|
compexp.add_provider(compwexp)
|
||||||
compres.add_provider(compwres)
|
compres.add_provider(compwres)
|
||||||
|
|
||||||
@@ -1185,8 +1185,8 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
self.experiment_script_column_indicator = self.xml_gui.get_object( "experiment_script_column_textfield" )
|
self.experiment_script_column_indicator = self.xml_gui.get_object( "experiment_script_column_textfield" )
|
||||||
self.data_handling_line_indicator = self.xml_gui.get_object( "data_handling_line_textfield" )
|
self.data_handling_line_indicator = self.xml_gui.get_object( "data_handling_line_textfield" )
|
||||||
self.data_handling_column_indicator = self.xml_gui.get_object( "data_handling_column_textfield" )
|
self.data_handling_column_indicator = self.xml_gui.get_object( "data_handling_column_textfield" )
|
||||||
|
|
||||||
|
|
||||||
# some event handlers
|
# some event handlers
|
||||||
self.experiment_script_textbuffer.connect( "modified-changed", self.textviews_modified )
|
self.experiment_script_textbuffer.connect( "modified-changed", self.textviews_modified )
|
||||||
self.experiment_script_textview.connect_after( "move-cursor", self.textviews_moved )
|
self.experiment_script_textview.connect_after( "move-cursor", self.textviews_moved )
|
||||||
@@ -1208,7 +1208,7 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
self.toolbar_undo_button = self.xml_gui.get_object( "toolbar_undo_button" )
|
self.toolbar_undo_button = self.xml_gui.get_object( "toolbar_undo_button" )
|
||||||
self.toolbar_redo_button = self.xml_gui.get_object( "toolbar_redo_button" )
|
self.toolbar_redo_button = self.xml_gui.get_object( "toolbar_redo_button" )
|
||||||
self.toolbar_search_button = self.xml_gui.get_object("toolbar_search_button")
|
self.toolbar_search_button = self.xml_gui.get_object("toolbar_search_button")
|
||||||
|
|
||||||
# my notebook
|
# my notebook
|
||||||
self.main_notebook = self.xml_gui.get_object( "main_notebook" )
|
self.main_notebook = self.xml_gui.get_object( "main_notebook" )
|
||||||
# config toolbar
|
# config toolbar
|
||||||
@@ -1271,7 +1271,7 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
|
|
||||||
def set_toolbuttons_status( self ):
|
def set_toolbuttons_status( self ):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ToDo: care about associated file names
|
ToDo: care about associated file names
|
||||||
"""
|
"""
|
||||||
current_page = self.main_notebook.get_current_page( )
|
current_page = self.main_notebook.get_current_page( )
|
||||||
@@ -1368,7 +1368,7 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
textview = None
|
textview = None
|
||||||
newline = None
|
newline = None
|
||||||
newcol = None
|
newcol = None
|
||||||
|
|
||||||
if page == 0:
|
if page == 0:
|
||||||
textview = self.experiment_script_textview
|
textview = self.experiment_script_textview
|
||||||
newline = self.experiment_script_line_indicator.get_value_as_int( ) - 1
|
newline = self.experiment_script_line_indicator.get_value_as_int( ) - 1
|
||||||
@@ -1379,7 +1379,7 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
newcol = self.data_handling_column_indicator.get_value_as_int( ) - 1
|
newcol = self.data_handling_column_indicator.get_value_as_int( ) - 1
|
||||||
else:
|
else:
|
||||||
print("unknown line/column selector")
|
print("unknown line/column selector")
|
||||||
|
|
||||||
textbuffer = textview.get_buffer( )
|
textbuffer = textview.get_buffer( )
|
||||||
new_place = textbuffer.get_iter_at_line( newline )
|
new_place = textbuffer.get_iter_at_line( newline )
|
||||||
if not newcol > new_place.get_chars_in_line( ):
|
if not newcol > new_place.get_chars_in_line( ):
|
||||||
@@ -1401,13 +1401,13 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
return self.textviews_moved( widget )
|
return self.textviews_moved( widget )
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def textviews_clicked( self, widget, event ):
|
def textviews_clicked( self, widget, event ):
|
||||||
return self.textviews_moved( widget )
|
return self.textviews_moved( widget )
|
||||||
|
|
||||||
def textviews_moved( self, widget, text=None, count=None, ext_selection=None, data=None ):
|
def textviews_moved( self, widget, text=None, count=None, ext_selection=None, data=None ):
|
||||||
|
|
||||||
textbuffer = widget.get_buffer( )
|
textbuffer = widget.get_buffer( )
|
||||||
cursor_mark = textbuffer.get_insert( )
|
cursor_mark = textbuffer.get_insert( )
|
||||||
cursor_iter = textbuffer.get_iter_at_mark( cursor_mark )
|
cursor_iter = textbuffer.get_iter_at_mark( cursor_mark )
|
||||||
@@ -1455,43 +1455,43 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
self.search(None, None)
|
self.search(None, None)
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
#Handle Backspace (delete more than one space on line beginning)
|
#Handle Backspace (delete more than one space on line beginning)
|
||||||
if event.keyval == 0xFF08:
|
if event.keyval == 0xFF08:
|
||||||
textbuffer = widget.get_buffer( )
|
textbuffer = widget.get_buffer( )
|
||||||
|
|
||||||
if textbuffer.get_has_selection():
|
if textbuffer.get_has_selection():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
cursor_mark = textbuffer.get_insert( )
|
cursor_mark = textbuffer.get_insert( )
|
||||||
cursor_iter = textbuffer.get_iter_at_mark( cursor_mark )
|
cursor_iter = textbuffer.get_iter_at_mark( cursor_mark )
|
||||||
|
|
||||||
linestart_iter = cursor_iter.copy( )
|
linestart_iter = cursor_iter.copy( )
|
||||||
linestart_iter.set_line_offset( 0 )
|
linestart_iter.set_line_offset( 0 )
|
||||||
|
|
||||||
linebegin = textbuffer.get_text( linestart_iter, cursor_iter, True ).expandtabs(4)
|
linebegin = textbuffer.get_text( linestart_iter, cursor_iter, True ).expandtabs(4)
|
||||||
|
|
||||||
if linebegin.isspace() and len(linebegin) > 0:
|
if linebegin.isspace() and len(linebegin) > 0:
|
||||||
linebegin = ' ' * int((len( linebegin ) - 1) / 4) * 4
|
linebegin = ' ' * int((len( linebegin ) - 1) / 4) * 4
|
||||||
textbuffer.delete( linestart_iter, cursor_iter )
|
textbuffer.delete( linestart_iter, cursor_iter )
|
||||||
textbuffer.insert( linestart_iter, linebegin )
|
textbuffer.insert( linestart_iter, linebegin )
|
||||||
return True
|
return True
|
||||||
|
|
||||||
elif event.keyval == 0xFF0D:
|
elif event.keyval == 0xFF0D:
|
||||||
textbuffer = widget.get_buffer( )
|
textbuffer = widget.get_buffer( )
|
||||||
|
|
||||||
if textbuffer.get_has_selection():
|
if textbuffer.get_has_selection():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
cursor_mark = textbuffer.get_insert( )
|
cursor_mark = textbuffer.get_insert( )
|
||||||
cursor_iter = textbuffer.get_iter_at_mark( cursor_mark )
|
cursor_iter = textbuffer.get_iter_at_mark( cursor_mark )
|
||||||
|
|
||||||
lastchar_iter = cursor_iter.copy()
|
lastchar_iter = cursor_iter.copy()
|
||||||
lastchar = lastchar_iter.backward_char( )
|
lastchar = lastchar_iter.backward_char( )
|
||||||
|
|
||||||
if not lastchar_iter.get_char( ) == ":":
|
if not lastchar_iter.get_char( ) == ":":
|
||||||
return False
|
return False
|
||||||
|
|
||||||
linestart_iter = cursor_iter.copy( )
|
linestart_iter = cursor_iter.copy( )
|
||||||
linestart_iter.set_line_offset( 0 )
|
linestart_iter.set_line_offset( 0 )
|
||||||
spaceend_iter = linestart_iter.copy( )
|
spaceend_iter = linestart_iter.copy( )
|
||||||
@@ -1499,14 +1499,14 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
spaceend_iter.forward_char( )
|
spaceend_iter.forward_char( )
|
||||||
linebegin = textbuffer.get_text( linestart_iter, spaceend_iter, True ).expandtabs(4)
|
linebegin = textbuffer.get_text( linestart_iter, spaceend_iter, True ).expandtabs(4)
|
||||||
indent_length = int((int(len(linebegin)/4)+1)*4)
|
indent_length = int((int(len(linebegin)/4)+1)*4)
|
||||||
|
|
||||||
intext = "\n" + (" " * indent_length)
|
intext = "\n" + (" " * indent_length)
|
||||||
|
|
||||||
textbuffer.insert(cursor_iter, intext)
|
textbuffer.insert(cursor_iter, intext)
|
||||||
widget.scroll_to_mark( cursor_mark, 0.0, False, 0.5, 0.5 )
|
widget.scroll_to_mark( cursor_mark, 0.0, False, 0.5, 0.5 )
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
#self.textviews_moved(widget)
|
#self.textviews_moved(widget)
|
||||||
return False
|
return False
|
||||||
@@ -1551,7 +1551,7 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
|
|
||||||
response = question.run()
|
response = question.run()
|
||||||
question.destroy()
|
question.destroy()
|
||||||
|
|
||||||
if response == gtk.ResponseType.YES:
|
if response == gtk.ResponseType.YES:
|
||||||
self.save_file()
|
self.save_file()
|
||||||
elif response == gtk.ResponseType.CANCEL:
|
elif response == gtk.ResponseType.CANCEL:
|
||||||
@@ -1657,7 +1657,7 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
|
|
||||||
response = question.run()
|
response = question.run()
|
||||||
question.destroy()
|
question.destroy()
|
||||||
|
|
||||||
if response != gtk.ResponseType.YES:
|
if response != gtk.ResponseType.YES:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -1715,7 +1715,7 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
self.save_file( )
|
self.save_file( )
|
||||||
|
|
||||||
self.main_notebook.set_current_page( current_page )
|
self.main_notebook.set_current_page( current_page )
|
||||||
|
|
||||||
def undo(self, widget=None, Data=None ):
|
def undo(self, widget=None, Data=None ):
|
||||||
if not self.editing_state:
|
if not self.editing_state:
|
||||||
return 0
|
return 0
|
||||||
@@ -1725,7 +1725,7 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
elif current_page == 1:
|
elif current_page == 1:
|
||||||
self.data_handling_textview.do_undo(self.data_handling_textview)
|
self.data_handling_textview.do_undo(self.data_handling_textview)
|
||||||
self.set_toolbuttons_status()
|
self.set_toolbuttons_status()
|
||||||
|
|
||||||
def redo(self, widget=None, Data=None ):
|
def redo(self, widget=None, Data=None ):
|
||||||
if not self.editing_state:
|
if not self.editing_state:
|
||||||
return 0
|
return 0
|
||||||
@@ -1735,20 +1735,20 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
elif current_page == 1:
|
elif current_page == 1:
|
||||||
self.data_handling_textview.do_redo(self.data_handling_textview)
|
self.data_handling_textview.do_redo(self.data_handling_textview)
|
||||||
self.set_toolbuttons_status()
|
self.set_toolbuttons_status()
|
||||||
|
|
||||||
def search(self, widget=None, Data=None):
|
def search(self, widget=None, Data=None):
|
||||||
def response(script_widget, response_id, damsw, tb ):
|
def response(script_widget, response_id, damsw, tb ):
|
||||||
if response_id != -1 and response_id != 1:
|
if response_id != -1 and response_id != 1:
|
||||||
script_widget.destroy()
|
script_widget.destroy()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
current_page = damsw.main_notebook.get_current_page( )
|
current_page = damsw.main_notebook.get_current_page( )
|
||||||
|
|
||||||
startiter = None
|
startiter = None
|
||||||
enditer = None
|
enditer = None
|
||||||
logview = None
|
logview = None
|
||||||
logbuffer = None
|
logbuffer = None
|
||||||
|
|
||||||
if current_page == 0:
|
if current_page == 0:
|
||||||
if damsw.experiment_script_textbuffer.get_has_selection():
|
if damsw.experiment_script_textbuffer.get_has_selection():
|
||||||
startiter, enditer = damsw.experiment_script_textbuffer.get_selection_bounds()
|
startiter, enditer = damsw.experiment_script_textbuffer.get_selection_bounds()
|
||||||
@@ -1775,14 +1775,14 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
else:
|
else:
|
||||||
script_widget.destroy()
|
script_widget.destroy()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
searchstring = tb.get_text()
|
searchstring = tb.get_text()
|
||||||
|
|
||||||
if len(searchstring) > 0:
|
if len(searchstring) > 0:
|
||||||
|
|
||||||
match_start = None
|
match_start = None
|
||||||
match_end = None
|
match_end = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if response_id == -1:
|
if response_id == -1:
|
||||||
match_start, match_end = startiter.backward_search(searchstring, gtk.TEXT_SEARCH_TEXT_ONLY)
|
match_start, match_end = startiter.backward_search(searchstring, gtk.TEXT_SEARCH_TEXT_ONLY)
|
||||||
@@ -1790,7 +1790,7 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
match_start, match_end = enditer.forward_search(searchstring, gtk.TEXT_SEARCH_TEXT_ONLY)
|
match_start, match_end = enditer.forward_search(searchstring, gtk.TEXT_SEARCH_TEXT_ONLY)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if match_start is not None and match_end is not None:
|
if match_start is not None and match_end is not None:
|
||||||
if current_page == 0:
|
if current_page == 0:
|
||||||
damsw.experiment_script_textbuffer.select_range(match_start, match_end)
|
damsw.experiment_script_textbuffer.select_range(match_start, match_end)
|
||||||
@@ -1803,21 +1803,21 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
elif current_page == 3:
|
elif current_page == 3:
|
||||||
logbuffer.select_range(match_start, match_end)
|
logbuffer.select_range(match_start, match_end)
|
||||||
logview.scroll_to_iter(match_start, 0.2)
|
logview.scroll_to_iter(match_start, 0.2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dialog = gtk.Dialog(title="Search", parent=self.xml_gui.get_object("main_window"), flags=0,
|
dialog = gtk.Dialog(title="Search", parent=self.xml_gui.get_object("main_window"), flags=0,
|
||||||
buttons=("_Close", gtk.ResponseType.CLOSE, "Find last", -1, "Find next", 1))
|
buttons=("_Close", gtk.ResponseType.CLOSE, "Find last", -1, "Find next", 1))
|
||||||
cont = dialog.get_content_area()
|
cont = dialog.get_content_area()
|
||||||
|
|
||||||
markedstring = ""
|
markedstring = ""
|
||||||
current_page = self.main_notebook.get_current_page( )
|
current_page = self.main_notebook.get_current_page( )
|
||||||
|
|
||||||
startit = None
|
startit = None
|
||||||
endit = None
|
endit = None
|
||||||
logbuffer = None
|
logbuffer = None
|
||||||
|
|
||||||
if current_page == 0:
|
if current_page == 0:
|
||||||
if self.experiment_script_textbuffer.get_has_selection():
|
if self.experiment_script_textbuffer.get_has_selection():
|
||||||
startit, endit = self.experiment_script_textbuffer.get_selection_bounds()
|
startit, endit = self.experiment_script_textbuffer.get_selection_bounds()
|
||||||
@@ -1832,20 +1832,20 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
if logbuffer.get_has_selection():
|
if logbuffer.get_has_selection():
|
||||||
startit, endit = logbuffer.get_selection_bounds()
|
startit, endit = logbuffer.get_selection_bounds()
|
||||||
markedstring = logbuffer.get_text(startit, endit, True)
|
markedstring = logbuffer.get_text(startit, endit, True)
|
||||||
|
|
||||||
markedstring = markedstring.strip()
|
markedstring = markedstring.strip()
|
||||||
|
|
||||||
textbox = gtk.Entry()
|
textbox = gtk.Entry()
|
||||||
textbox.set_text(markedstring)
|
textbox.set_text(markedstring)
|
||||||
|
|
||||||
cont.add(textbox)
|
cont.add(textbox)
|
||||||
|
|
||||||
dialog.set_default_response(1)
|
dialog.set_default_response(1)
|
||||||
dialog.connect("response", response, self, textbox)
|
dialog.connect("response", response, self, textbox)
|
||||||
dialog.set_resizable(False)
|
dialog.set_resizable(False)
|
||||||
|
|
||||||
dialog.show()
|
dialog.show()
|
||||||
|
|
||||||
if startit is not None and endit is not None:
|
if startit is not None and endit is not None:
|
||||||
if current_page == 0:
|
if current_page == 0:
|
||||||
self.experiment_script_textbuffer.select_range(startit, endit)
|
self.experiment_script_textbuffer.select_range(startit, endit)
|
||||||
@@ -1853,9 +1853,9 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
self.data_handling_textbuffer.select_range(startit, endit)
|
self.data_handling_textbuffer.select_range(startit, endit)
|
||||||
elif current_page == 3:
|
elif current_page == 3:
|
||||||
logbuffer.select_range(startit, endit)
|
logbuffer.select_range(startit, endit)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def new_file( self, widget, Data=None ):
|
def new_file( self, widget, Data=None ):
|
||||||
|
|
||||||
@@ -1872,12 +1872,12 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
|
|
||||||
response = question.run()
|
response = question.run()
|
||||||
question.destroy()
|
question.destroy()
|
||||||
|
|
||||||
if response == gtk.ResponseType.YES:
|
if response == gtk.ResponseType.YES:
|
||||||
self.save_file()
|
self.save_file()
|
||||||
elif response == gtk.ResponseType.CANCEL:
|
elif response == gtk.ResponseType.CANCEL:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
self.set_scripts( "", None )
|
self.set_scripts( "", None )
|
||||||
self.exp_script_filename = None
|
self.exp_script_filename = None
|
||||||
elif current_page == 1:
|
elif current_page == 1:
|
||||||
@@ -1890,12 +1890,12 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
|
|||||||
|
|
||||||
response = question.run()
|
response = question.run()
|
||||||
question.destroy()
|
question.destroy()
|
||||||
|
|
||||||
if response == gtk.ResponseType.YES:
|
if response == gtk.ResponseType.YES:
|
||||||
self.save_file()
|
self.save_file()
|
||||||
elif response == gtk.ResponseType.CANCEL:
|
elif response == gtk.ResponseType.CANCEL:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
self.set_scripts( None, "" )
|
self.set_scripts( None, "" )
|
||||||
self.res_script_filename = None
|
self.res_script_filename = None
|
||||||
self.set_toolbuttons_status( )
|
self.set_toolbuttons_status( )
|
||||||
@@ -2014,7 +2014,7 @@ pygobject version %(pygobject)s
|
|||||||
info_text %= { "moduleversions": components_text % components_versions, "damarisversion": __version__ }
|
info_text %= { "moduleversions": components_text % components_versions, "damarisversion": __version__ }
|
||||||
info_textbuffer.set_text( info_text )
|
info_textbuffer.set_text( info_text )
|
||||||
del info_textbuffer, info_text, components_text, components_versions
|
del info_textbuffer, info_text, components_text, components_versions
|
||||||
|
|
||||||
for self.system_default_filename in self.system_default_filenames:
|
for self.system_default_filename in self.system_default_filenames:
|
||||||
if self.system_default_filename:
|
if self.system_default_filename:
|
||||||
if os.access( self.system_default_filename, os.R_OK ):
|
if os.access( self.system_default_filename, os.R_OK ):
|
||||||
@@ -2204,7 +2204,7 @@ pygobject version %(pygobject)s
|
|||||||
dirs = os.path.dirname( filename )
|
dirs = os.path.dirname( filename )
|
||||||
if not os.path.isdir( dirs ):
|
if not os.path.isdir( dirs ):
|
||||||
os.makedirs( dirs )
|
os.makedirs( dirs )
|
||||||
|
|
||||||
print("save config to: "+filename)
|
print("save config to: "+filename)
|
||||||
|
|
||||||
configfile = open( filename, "w" )
|
configfile = open( filename, "w" )
|
||||||
@@ -2287,6 +2287,23 @@ class MonitorWidgets:
|
|||||||
|
|
||||||
# add matplotlib toolbar (display_table, 2nd row)
|
# add matplotlib toolbar (display_table, 2nd row)
|
||||||
self.matplot_toolbar = matplotlib.backends.backend_gtk3.NavigationToolbar2GTK3( self.matplot_canvas )
|
self.matplot_toolbar = matplotlib.backends.backend_gtk3.NavigationToolbar2GTK3( self.matplot_canvas )
|
||||||
|
# remove subplots:
|
||||||
|
#self.matplot_toolbar.DeleteToolByPos(1)
|
||||||
|
#self.matplot_toolbar.remove(self.matplot_toolbar.get_nth_item(3))
|
||||||
|
self.matplot_toolbar.remove(self.matplot_toolbar.get_nth_item(6))
|
||||||
|
# now let's add a button to the toolbar
|
||||||
|
button = gtk.ToggleButton(label='')
|
||||||
|
try:
|
||||||
|
image = gtk.Image.new_from_file("/usr/share/icons/breeze/actions/24/crosshairs-symbolic.svg")
|
||||||
|
button.set_image(image)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
button.set_tooltip_text('Enable Crosshairs')
|
||||||
|
button.show()
|
||||||
|
button.connect('toggled', self.toggle_cursor)
|
||||||
|
toolitem = gtk.ToolItem()
|
||||||
|
toolitem.add(button)
|
||||||
|
self.matplot_toolbar.insert(toolitem, 5)
|
||||||
|
|
||||||
# Make cursor position text bigger and bold - access message label directly
|
# Make cursor position text bigger and bold - access message label directly
|
||||||
try:
|
try:
|
||||||
@@ -2314,6 +2331,12 @@ class MonitorWidgets:
|
|||||||
# enable display scaling
|
# enable display scaling
|
||||||
self.display_x_scaling_combobox.set_active( 0 )
|
self.display_x_scaling_combobox.set_active( 0 )
|
||||||
self.display_y_scaling_combobox.set_active( 0 )
|
self.display_y_scaling_combobox.set_active( 0 )
|
||||||
|
for i in ("lin", "log10"):
|
||||||
|
self.display_x_scaling_combobox.append_text(i)
|
||||||
|
self.display_y_scaling_combobox.append_text(i)
|
||||||
|
self.display_x_scaling_combobox.append_text("ppm")
|
||||||
|
self.display_x_scaling_combobox.set_active(0)
|
||||||
|
self.display_y_scaling_combobox.set_active(0)
|
||||||
self.display_x_scaling_combobox.set_sensitive( True )
|
self.display_x_scaling_combobox.set_sensitive( True )
|
||||||
self.display_y_scaling_combobox.set_sensitive( True )
|
self.display_y_scaling_combobox.set_sensitive( True )
|
||||||
|
|
||||||
@@ -2665,7 +2688,7 @@ class MonitorWidgets:
|
|||||||
tmpdata = tempfile.TemporaryFile(mode="w+" )
|
tmpdata = tempfile.TemporaryFile(mode="w+" )
|
||||||
tmpdata.write("# saved from monitor as %s\n" % data_to_save[ 0 ] )
|
tmpdata.write("# saved from monitor as %s\n" % data_to_save[ 0 ] )
|
||||||
data_to_save[ 1 ].write_to_csv( tmpdata )
|
data_to_save[ 1 ].write_to_csv( tmpdata )
|
||||||
|
|
||||||
parentfordialog = self.main_window
|
parentfordialog = self.main_window
|
||||||
|
|
||||||
# show save dialog
|
# show save dialog
|
||||||
@@ -2685,7 +2708,7 @@ class MonitorWidgets:
|
|||||||
|
|
||||||
response = question.run()
|
response = question.run()
|
||||||
question.destroy()
|
question.destroy()
|
||||||
|
|
||||||
if response != gtk.ResponseType.YES:
|
if response != gtk.ResponseType.YES:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -2720,19 +2743,16 @@ class MonitorWidgets:
|
|||||||
|
|
||||||
def toggle_cursor(self, widget):
|
def toggle_cursor(self, widget):
|
||||||
"""Toggle matplotlib crosshair cursor"""
|
"""Toggle matplotlib crosshair cursor"""
|
||||||
from matplotlib.widgets import Cursor
|
|
||||||
if widget.get_active():
|
if widget.get_active():
|
||||||
if hasattr(self, 'matplot_cursor') and self.matplot_cursor is not None:
|
self.matplot_cursor = matplotlib.widgets.Cursor(self.matplot_axes, useblit=False, color='red', linewidth=1)
|
||||||
self.matplot_cursor.disconnect_events()
|
|
||||||
self.matplot_cursor = Cursor(self.matplot_axes, useblit=False, color='red', linewidth=1)
|
|
||||||
else:
|
else:
|
||||||
if hasattr(self, 'matplot_cursor') and self.matplot_cursor is not None:
|
if hasattr(self, 'matplot_cursor'):
|
||||||
self.matplot_cursor.disconnect_events()
|
self.matplot_cursor = None
|
||||||
self.matplot_cursor = None
|
|
||||||
self.matplot_canvas.draw_idle()
|
self.matplot_canvas.draw_idle()
|
||||||
|
|
||||||
def on_canvas_button_press(self, widget, event):
|
def on_canvas_button_press(self, widget, event):
|
||||||
"""Handle button press events on matplotlib canvas"""
|
"""Handle button press events on matplotlib canvas"""
|
||||||
|
|
||||||
if event.button == 3: # Right click
|
if event.button == 3: # Right click
|
||||||
self.show_canvas_context_menu(event)
|
self.show_canvas_context_menu(event)
|
||||||
return True
|
return True
|
||||||
@@ -2752,7 +2772,6 @@ class MonitorWidgets:
|
|||||||
toggle_cursor.connect("toggled", self.toggle_cursor)
|
toggle_cursor.connect("toggled", self.toggle_cursor)
|
||||||
menu.append(toggle_cursor)
|
menu.append(toggle_cursor)
|
||||||
|
|
||||||
|
|
||||||
# Copy as PNG
|
# Copy as PNG
|
||||||
item_copy_png = gtk.MenuItem(label="Copy as PNG")
|
item_copy_png = gtk.MenuItem(label="Copy as PNG")
|
||||||
item_copy_png.connect("activate", self.copy_canvas_as_png)
|
item_copy_png.connect("activate", self.copy_canvas_as_png)
|
||||||
@@ -2843,9 +2862,10 @@ class MonitorWidgets:
|
|||||||
"""
|
"""
|
||||||
self.display_x_scaling_combobox.set_sensitive( True )
|
self.display_x_scaling_combobox.set_sensitive( True )
|
||||||
self.display_y_scaling_combobox.set_sensitive( True )
|
self.display_y_scaling_combobox.set_sensitive( True )
|
||||||
|
|
||||||
x_scale = self.display_x_scaling_combobox.get_active_text()
|
x_scale = self.display_x_scaling_combobox.get_active_text()
|
||||||
y_scale = self.display_y_scaling_combobox.get_active_text()
|
y_scale = self.display_y_scaling_combobox.get_active_text()
|
||||||
|
print(x_scale)
|
||||||
if x_scale == "lin":
|
if x_scale == "lin":
|
||||||
self.matplot_axes.set_xscale("linear")
|
self.matplot_axes.set_xscale("linear")
|
||||||
elif x_scale == "log10":
|
elif x_scale == "log10":
|
||||||
@@ -2948,10 +2968,10 @@ class MonitorWidgets:
|
|||||||
self.matplot_axes.set_xlim(xmin, xmax)
|
self.matplot_axes.set_xlim(xmin, xmax)
|
||||||
|
|
||||||
ylim_min, ylim_max = self.matplot_axes.get_ylim()
|
ylim_min, ylim_max = self.matplot_axes.get_ylim()
|
||||||
|
|
||||||
# Check if y-axis is log scale
|
# Check if y-axis is log scale
|
||||||
yscale = self.matplot_axes.get_yscale()
|
yscale = self.matplot_axes.get_yscale()
|
||||||
|
|
||||||
if yscale == 'log' or yscale == 'symlog':
|
if yscale == 'log' or yscale == 'symlog':
|
||||||
# For log scales, work with log values to avoid issues with
|
# For log scales, work with log values to avoid issues with
|
||||||
# small numbers (undetected rescale)
|
# small numbers (undetected rescale)
|
||||||
|
|||||||
+2
-15
@@ -1044,7 +1044,7 @@ Public License instead of this License.
|
|||||||
<object class="GtkLabel" id="label65">
|
<object class="GtkLabel" id="label65">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
<property name="label" translatable="yes">Source </property>
|
<property name="label" translatable="yes">Source:</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
@@ -1053,7 +1053,7 @@ Public License instead of this License.
|
|||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBoxText" id="display_source_combobox">
|
<object class="GtkComboBox" id="display_source_combobox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
<property name="add-tearoffs">True</property>
|
<property name="add-tearoffs">True</property>
|
||||||
@@ -1075,12 +1075,6 @@ Public License instead of this License.
|
|||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
<property name="focus-on-click">False</property>
|
<property name="focus-on-click">False</property>
|
||||||
<signal name="changed" handler="on_display_y_scaling_combobox_changed" swapped="no"/>
|
<signal name="changed" handler="on_display_y_scaling_combobox_changed" swapped="no"/>
|
||||||
<child>
|
|
||||||
<object class="GtkCellRendererText" id="renderer1"/>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="text">0</attribute>
|
|
||||||
</attributes>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left-attach">1</property>
|
<property name="left-attach">1</property>
|
||||||
@@ -1114,12 +1108,6 @@ Public License instead of this License.
|
|||||||
<property name="can-focus">False</property>
|
<property name="can-focus">False</property>
|
||||||
<property name="focus-on-click">False</property>
|
<property name="focus-on-click">False</property>
|
||||||
<signal name="changed" handler="on_display_x_scaling_combobox_changed" swapped="no"/>
|
<signal name="changed" handler="on_display_x_scaling_combobox_changed" swapped="no"/>
|
||||||
<child>
|
|
||||||
<object class="GtkCellRendererText" id="renderer2"/>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="text">0</attribute>
|
|
||||||
</attributes>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left-attach">1</property>
|
<property name="left-attach">1</property>
|
||||||
@@ -1931,7 +1919,6 @@ Public License instead of this License.
|
|||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
|
||||||
<object class="GtkComboBoxText" id="CompLibs">
|
<object class="GtkComboBoxText" id="CompLibs">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="model">model3</property>
|
<property name="model">model3</property>
|
||||||
|
|||||||
Reference in New Issue
Block a user