5
5
from . import ctags
6
6
from gi .repository import GObject , GdkPixbuf , Gedit , Gtk , PeasGtk , Gio
7
7
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
+
12
15
logging .basicConfig ()
13
16
LOG_LEVEL = logging .WARN
14
17
SETTINGS_SCHEMA = "org.gnome.gedit.plugins.sourcecodebrowser"
@@ -36,6 +39,7 @@ def __init__(self):
36
39
37
40
# preferences (should be set by plugin)
38
41
self .show_line_numbers = True
42
+ self .use_bottom_panel = False
39
43
self .ctags_executable = 'ctags'
40
44
self .expand_rows = True
41
45
self .sort_list = True
@@ -267,6 +271,9 @@ def get_widget(self, has_schema):
267
271
builder .get_object ("show_line_numbers" ).set_active (
268
272
self ._settings .get_boolean ('show-line-numbers' )
269
273
)
274
+ builder .get_object ("use_bottom_panel" ).set_active (
275
+ self ._settings .get_boolean ('use-bottom-panel' )
276
+ )
270
277
builder .get_object ("expand_rows" ).set_active (
271
278
self ._settings .get_boolean ('expand-rows' )
272
279
)
@@ -285,6 +292,9 @@ def get_widget(self, has_schema):
285
292
def on_show_line_numbers_toggled (self , button , data = None ):
286
293
self ._settings .set_boolean ('show-line-numbers' , button .get_active ())
287
294
295
+ def on_use_bottom_panel_toggled (self , button , data = None ):
296
+ self ._settings .set_boolean ('use-bottom-panel' , button .get_active ())
297
+
288
298
def on_expand_rows_toggled (self , button , data = None ):
289
299
self ._settings .set_boolean ('expand-rows' , button .get_active ())
290
300
@@ -331,12 +341,12 @@ def do_activate(self):
331
341
self ._sourcetree = SourceTree ()
332
342
self ._sourcetree .ctags_executable = self .ctags_executable
333
343
self ._sourcetree .show_line_numbers = self .show_line_numbers
344
+ self ._sourcetree .use_bottom_panel = self .use_bottom_panel
334
345
self ._sourcetree .expand_rows = self .expand_rows
335
346
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 ()
338
348
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 )
340
350
self ._handlers .append ((self ._sourcetree , hid ))
341
351
if self .ctags_version is not None :
342
352
hid = self ._sourcetree .connect ('tag-activated' , self .on_tag_activated )
@@ -349,15 +359,33 @@ def do_activate(self):
349
359
self ._handlers .append ((self .window , hid ))
350
360
else :
351
361
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
+
353
382
def do_deactivate (self ):
354
383
""" Deactivate the plugin """
355
384
self ._log .debug ("Deactivating plugin" )
356
385
for obj , hid in self ._handlers :
357
386
obj .disconnect (hid )
358
387
self ._handlers = None
359
- pane = self .window .get_side_panel ()
360
- pane .remove (self ._sourcetree )
388
+ self ._remove_sourcetree_pane ()
361
389
self ._sourcetree = None
362
390
363
391
def _has_settings_schema (self ):
@@ -373,11 +401,13 @@ def _init_settings(self):
373
401
settings = Gio .Settings .new (SETTINGS_SCHEMA )
374
402
self .load_remote_files = settings .get_boolean ("load-remote-files" )
375
403
self .show_line_numbers = settings .get_boolean ("show-line-numbers" )
404
+ self .use_bottom_panel = settings .get_boolean ("use-bottom-panel" )
376
405
self .expand_rows = settings .get_boolean ("expand-rows" )
377
406
self .sort_list = settings .get_boolean ("sort-list" )
378
407
self .ctags_executable = settings .get_string ("ctags-executable" )
379
408
settings .connect ("changed::load-remote-files" , self .on_setting_changed )
380
409
settings .connect ("changed::show-line-numbers" , self .on_setting_changed )
410
+ settings .connect ("changed::use-bottom-panel" , self .on_setting_changed )
381
411
settings .connect ("changed::expand-rows" , self .on_setting_changed )
382
412
settings .connect ("changed::sort-list" , self .on_setting_changed )
383
413
settings .connect ("changed::ctags-executable" , self .on_setting_changed )
@@ -387,6 +417,7 @@ def _init_settings(self):
387
417
self ._settings = None
388
418
self .load_remote_files = True
389
419
self .show_line_numbers = False
420
+ self .use_bottom_panel = False
390
421
self .expand_rows = True
391
422
self .sort_list = True
392
423
self .ctags_executable = 'ctags'
@@ -396,7 +427,11 @@ def _load_active_document_symbols(self):
396
427
self ._sourcetree .clear ()
397
428
self ._is_loaded = False
398
429
# 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 ()
400
435
if panel .get_visible_child () != self ._sourcetree :
401
436
return
402
437
@@ -433,13 +468,16 @@ def on_setting_changed(self, settings, key, data=None):
433
468
"""
434
469
self.load_remote_files = True
435
470
self.show_line_numbers = False
471
+ self.use_bottom_panel = False
436
472
self.expand_rows = True
437
473
self.ctags_executable = 'ctags'
438
474
"""
439
475
if key == 'load-remote-files' :
440
476
self .load_remote_files = self ._settings .get_boolean (key )
441
477
elif key == 'show-line-numbers' :
442
478
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 )
443
481
elif key == 'expand-rows' :
444
482
self .expand_rows = self ._settings .get_boolean (key )
445
483
elif key == 'sort-list' :
@@ -450,6 +488,9 @@ def on_setting_changed(self, settings, key, data=None):
450
488
if self ._sourcetree is not None :
451
489
self ._sourcetree .ctags_executable = self .ctags_executable
452
490
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 ()
453
494
self ._sourcetree .expand_rows = self .expand_rows
454
495
self ._sourcetree .sort_list = self .sort_list
455
496
self ._sourcetree .expanded_rows = {}
@@ -474,8 +515,11 @@ def on_tag_activated(self, sourcetree, location, data=None):
474
515
document = self .window .get_active_document ()
475
516
view = self .window .get_active_view ()
476
517
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 ()
479
523
480
524
def _version_check (self ):
481
525
""" Make sure the exhuberant ctags is installed. """
0 commit comments