Merge changes regarding Tab/ space management in editor (use 4 spaces instead of tab like before).

This commit is contained in:
Joachim Beerwerth 2018-03-29 15:07:18 +02:00
parent cc812f58c9
commit 591cf8bdea

View File

@ -53,9 +53,11 @@ matplotlib.rcParams[ "axes.formatter.limits" ] = "-3,3"
if matplotlib.rcParams[ "backend" ] == "GTK":
from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
max_points_to_display = 0 # no limit
elif matplotlib.rcParams[ "backend" ] == "GTKCairo":
from matplotlib.backends.backend_gtkcairo import FigureCanvasGTKCairo as FigureCanvas
max_points_to_display = 1 << 14 # cairo cannot render longer paths than 18???
else:
# default
@ -181,7 +183,7 @@ class DamarisGUI:
# my notebook
self.main_notebook = self.xml_gui.get_widget( "main_notebook" )
self.log = LogWindow( self.xml_gui )
self.log = LogWindow( self.xml_gui , self)
self.sw = ScriptWidgets( self.xml_gui )
@ -277,11 +279,14 @@ class DamarisGUI:
self.toolbar_run_button.emit("clicked")
gtk.main( )
gtk.gdk.threads_leave( )
self.si = None
self.sw = None
self.config = None
self.xml_gui = None
# event handling: the real acitons in gui programming
# first global events
def quit_event( self, widget, data=None ):
@ -684,7 +689,7 @@ class DamarisGUI:
# keep data to display but throw away everything else
self.si = None
# delete locak file so that other experiment can start
# delete lock file so that other experiment can start
self.lockfile.del_experiment(self.id)
return False
@ -1017,7 +1022,7 @@ class DamarisGUI:
# check generic debian location
self.doc_urls[ "Python DAMARIS" ] = "file:///usr/share/doc/python-damaris/html/index.html"
else:
self.doc_urls[ "Python DAMARIS" ] = "http://damaris.berlios.de/wiki/index.php/Tutorial"
self.doc_urls[ "Python DAMARIS" ] = "https://element.fkp.physik.tu-darmstadt.de/damaris_cms/index.php?id=documentation"
self.doc_browser = None
@ -1087,10 +1092,12 @@ class LogWindow:
writes messages to the log window
"""
def __init__( self, xml_gui ):
def __init__( self, xml_gui, damaris_gui ):
self.xml_gui = xml_gui
self.damaris_gui = damaris_gui
self.textview = self.xml_gui.get_widget( "messages_textview" )
self.textview.connect( "key-press-event", self.textview_keypress)
self.textbuffer = self.textview.get_buffer( )
self.logstream = log
self.logstream.gui_log = self
@ -1114,6 +1121,14 @@ class LogWindow:
self.textview.scroll_to_mark( self.textbuffer.get_insert( ), 0.1 )
gtk.gdk.threads_leave( )
def textview_keypress( self, widget, event, data=None ):
if event.state & gtk.gdk.CONTROL_MASK != 0:
if event.keyval == gtk.gdk.keyval_from_name("f"):
self.damaris_gui.sw.search(None, None)
return True
return False
def __del__( self ):
self.logstream.gui_log = None
self.logstream = None
@ -1152,13 +1167,22 @@ class ScriptWidgets:
self.data_handling_textbuffer.set_language(langpython)
self.data_handling_textbuffer.set_highlight_syntax(True)
fontdesc = pango.FontDescription("monospace")
self.experiment_script_textview.set_buffer( self.experiment_script_textbuffer )
self.experiment_script_textview.set_show_line_numbers(True)
self.experiment_script_textview.set_auto_indent(True)
self.experiment_script_textview.set_insert_spaces_instead_of_tabs(True)
self.experiment_script_textview.set_tab_width(4)
self.experiment_script_textview.set_smart_home_end(True)
self.experiment_script_textview.modify_font(fontdesc)
self.data_handling_textview.set_buffer( self.data_handling_textbuffer )
self.data_handling_textview.set_show_line_numbers(True)
self.data_handling_textview.set_auto_indent(True)
self.data_handling_textview.set_insert_spaces_instead_of_tabs(True)
self.data_handling_textview.set_tab_width(4)
self.data_handling_textview.set_smart_home_end(True)
self.data_handling_textview.modify_font(fontdesc)
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
@ -1482,10 +1506,62 @@ get_job_id get_description set_description get_xdata get_ydata set_xdate set_yda
elif event.keyval == gtk.gdk.keyval_from_name("f"):
self.search(None, None)
return True
return 0
return False
#Handle Backspace (delete more than one space on line beginning)
if event.keyval == 0xFF08:
textbuffer = widget.get_buffer( )
if textbuffer.get_has_selection():
return False
cursor_mark = textbuffer.get_insert( )
cursor_iter = textbuffer.get_iter_at_mark( cursor_mark )
linestart_iter = cursor_iter.copy( )
linestart_iter.set_line_offset( 0 )
linebegin = textbuffer.get_text( linestart_iter, cursor_iter ).expandtabs(4)
if linebegin.isspace() and len(linebegin) > 0:
linebegin = u' ' * int((len( linebegin ) - 1) / 4) * 4
textbuffer.delete( linestart_iter, cursor_iter )
textbuffer.insert( linestart_iter, linebegin )
return True
elif event.keyval == 0xFF0D:
textbuffer = widget.get_buffer( )
if textbuffer.get_has_selection():
return False
cursor_mark = textbuffer.get_insert( )
cursor_iter = textbuffer.get_iter_at_mark( cursor_mark )
lastchar_iter = cursor_iter.copy()
lastchar = lastchar_iter.backward_char( )
if not lastchar_iter.get_char( ) == u":":
return False
linestart_iter = cursor_iter.copy( )
linestart_iter.set_line_offset( 0 )
spaceend_iter = linestart_iter.copy( )
while (not spaceend_iter.ends_line( ) and not spaceend_iter.is_end( ) and spaceend_iter.get_char( ).isspace( )):
spaceend_iter.forward_char( )
linebegin = textbuffer.get_text( linestart_iter, spaceend_iter ).expandtabs(4)
indent_length = int((int(len(linebegin)/4)+1)*4)
intext = u"\n" + (u" " * indent_length)
textbuffer.insert(cursor_iter, intext)
widget.scroll_to_mark( cursor_mark, 0.0, 0 )
return True
#self.textviews_moved(widget)
return 0
return False
def load_file_as_unicode( self, script_filename ):
script_file = file( script_filename, "rU" )
@ -3236,6 +3312,7 @@ class ScriptInterface:
self.data = DataPool( )
def runScripts( self ):
try:
# get script engines
self.exp_handling = self.res_handling = None