55from . import ctags
66from gi .repository import GObject , GdkPixbuf , Gedit , Gtk , PeasGtk , Gio
77
8- import gi
9- gi .require_version ('Tepl' , '6' )
10- from gi .repository import Tepl
11-
8+ try :
9+ import gi
10+ gi .require_version ('Tepl' , '6' )
11+ from gi .repository import Tepl
12+ except :
13+ Tepl = None
14+
1215logging .basicConfig ()
1316LOG_LEVEL = logging .WARN
1417SETTINGS_SCHEMA = "org.gnome.gedit.plugins.sourcecodebrowser"
@@ -36,6 +39,7 @@ def __init__(self):
3639
3740 # preferences (should be set by plugin)
3841 self .show_line_numbers = True
42+ self .use_bottom_panel = False
3943 self .ctags_executable = 'ctags'
4044 self .expand_rows = True
4145 self .sort_list = True
@@ -267,6 +271,9 @@ def get_widget(self, has_schema):
267271 builder .get_object ("show_line_numbers" ).set_active (
268272 self ._settings .get_boolean ('show-line-numbers' )
269273 )
274+ builder .get_object ("use_bottom_panel" ).set_active (
275+ self ._settings .get_boolean ('use-bottom-panel' )
276+ )
270277 builder .get_object ("expand_rows" ).set_active (
271278 self ._settings .get_boolean ('expand-rows' )
272279 )
@@ -285,6 +292,9 @@ def get_widget(self, has_schema):
285292 def on_show_line_numbers_toggled (self , button , data = None ):
286293 self ._settings .set_boolean ('show-line-numbers' , button .get_active ())
287294
295+ def on_use_bottom_panel_toggled (self , button , data = None ):
296+ self ._settings .set_boolean ('use-bottom-panel' , button .get_active ())
297+
288298 def on_expand_rows_toggled (self , button , data = None ):
289299 self ._settings .set_boolean ('expand-rows' , button .get_active ())
290300
@@ -331,12 +341,12 @@ def do_activate(self):
331341 self ._sourcetree = SourceTree ()
332342 self ._sourcetree .ctags_executable = self .ctags_executable
333343 self ._sourcetree .show_line_numbers = self .show_line_numbers
344+ self ._sourcetree .use_bottom_panel = self .use_bottom_panel
334345 self ._sourcetree .expand_rows = self .expand_rows
335346 self ._sourcetree .sort_list = self .sort_list
336- panel = self .window .get_side_panel ()
337- panel .add_titled (self ._sourcetree , "SymbolBrowserPlugin" , "Source Code" )
347+ self ._insert_sourcetree_pane ()
338348 self ._handlers = []
339- hid = self ._sourcetree .connect ("focus" , self .on_sourcetree_focus )
349+ hid = self ._sourcetree .connect ("focus" if Tepl else "draw" , self .on_sourcetree_focus )
340350 self ._handlers .append ((self ._sourcetree , hid ))
341351 if self .ctags_version is not None :
342352 hid = self ._sourcetree .connect ('tag-activated' , self .on_tag_activated )
@@ -349,15 +359,33 @@ def do_activate(self):
349359 self ._handlers .append ((self .window , hid ))
350360 else :
351361 self ._sourcetree .set_sensitive (False )
352-
362+
363+ def _insert_sourcetree_pane (self ):
364+ if self ._sourcetree .use_bottom_panel :
365+ panel = self .window .get_bottom_panel ()
366+ panel .add_titled (self ._sourcetree , "SymbolBrowserPlugin" , "Source Tags" )
367+ panel .show ()
368+ self ._sourcetree .show_all ()
369+ panel .set_visible_child (self ._sourcetree )
370+ else :
371+ panel = self .window .get_side_panel ()
372+ panel .add_titled (self ._sourcetree , "SymbolBrowserPlugin" , "Source Code" )
373+
374+ def _remove_sourcetree_pane (self ):
375+ if self ._sourcetree .use_bottom_panel :
376+ panel = self .window .get_bottom_panel ()
377+ panel .remove (self ._sourcetree )
378+ else :
379+ panel = self .window .get_side_panel ()
380+ panel .remove (self ._sourcetree )
381+
353382 def do_deactivate (self ):
354383 """ Deactivate the plugin """
355384 self ._log .debug ("Deactivating plugin" )
356385 for obj , hid in self ._handlers :
357386 obj .disconnect (hid )
358387 self ._handlers = None
359- pane = self .window .get_side_panel ()
360- pane .remove (self ._sourcetree )
388+ self ._remove_sourcetree_pane ()
361389 self ._sourcetree = None
362390
363391 def _has_settings_schema (self ):
@@ -373,11 +401,13 @@ def _init_settings(self):
373401 settings = Gio .Settings .new (SETTINGS_SCHEMA )
374402 self .load_remote_files = settings .get_boolean ("load-remote-files" )
375403 self .show_line_numbers = settings .get_boolean ("show-line-numbers" )
404+ self .use_bottom_panel = settings .get_boolean ("use-bottom-panel" )
376405 self .expand_rows = settings .get_boolean ("expand-rows" )
377406 self .sort_list = settings .get_boolean ("sort-list" )
378407 self .ctags_executable = settings .get_string ("ctags-executable" )
379408 settings .connect ("changed::load-remote-files" , self .on_setting_changed )
380409 settings .connect ("changed::show-line-numbers" , self .on_setting_changed )
410+ settings .connect ("changed::use-bottom-panel" , self .on_setting_changed )
381411 settings .connect ("changed::expand-rows" , self .on_setting_changed )
382412 settings .connect ("changed::sort-list" , self .on_setting_changed )
383413 settings .connect ("changed::ctags-executable" , self .on_setting_changed )
@@ -387,6 +417,7 @@ def _init_settings(self):
387417 self ._settings = None
388418 self .load_remote_files = True
389419 self .show_line_numbers = False
420+ self .use_bottom_panel = False
390421 self .expand_rows = True
391422 self .sort_list = True
392423 self .ctags_executable = 'ctags'
@@ -396,7 +427,11 @@ def _load_active_document_symbols(self):
396427 self ._sourcetree .clear ()
397428 self ._is_loaded = False
398429 # do not load if not the active tab in the panel
399- panel = self .window .get_side_panel ()
430+ if self ._sourcetree .use_bottom_panel :
431+ panel = self .window .get_bottom_panel ()
432+ panel .props .visible_child = self ._sourcetree
433+ else :
434+ panel = self .window .get_side_panel ()
400435 if panel .get_visible_child () != self ._sourcetree :
401436 return
402437
@@ -433,13 +468,16 @@ def on_setting_changed(self, settings, key, data=None):
433468 """
434469 self.load_remote_files = True
435470 self.show_line_numbers = False
471+ self.use_bottom_panel = False
436472 self.expand_rows = True
437473 self.ctags_executable = 'ctags'
438474 """
439475 if key == 'load-remote-files' :
440476 self .load_remote_files = self ._settings .get_boolean (key )
441477 elif key == 'show-line-numbers' :
442478 self .show_line_numbers = self ._settings .get_boolean (key )
479+ elif key == 'use-bottom-panel' :
480+ self .use_bottom_panel = self ._settings .get_boolean (key )
443481 elif key == 'expand-rows' :
444482 self .expand_rows = self ._settings .get_boolean (key )
445483 elif key == 'sort-list' :
@@ -450,6 +488,9 @@ def on_setting_changed(self, settings, key, data=None):
450488 if self ._sourcetree is not None :
451489 self ._sourcetree .ctags_executable = self .ctags_executable
452490 self ._sourcetree .show_line_numbers = self .show_line_numbers
491+ self ._remove_sourcetree_pane ()
492+ self ._sourcetree .use_bottom_panel = self .use_bottom_panel
493+ self ._insert_sourcetree_pane ()
453494 self ._sourcetree .expand_rows = self .expand_rows
454495 self ._sourcetree .sort_list = self .sort_list
455496 self ._sourcetree .expanded_rows = {}
@@ -474,8 +515,11 @@ def on_tag_activated(self, sourcetree, location, data=None):
474515 document = self .window .get_active_document ()
475516 view = self .window .get_active_view ()
476517 line = int (line ) - 1 # lines start from 0
477-
478- Tepl .View .goto_line (view , line )
518+ if Tepl :
519+ Tepl .View .goto_line (view , line )
520+ else :
521+ document .goto_line (line )
522+ view .scroll_to_cursor ()
479523
480524 def _version_check (self ):
481525 """ Make sure the exhuberant ctags is installed. """
0 commit comments