Skip to content

Commit 081e575

Browse files
committed
use-bottom-panel
1 parent 7fbd7e0 commit 081e575

File tree

3 files changed

+81
-13
lines changed

3 files changed

+81
-13
lines changed

sourcecodebrowser/data/configure_dialog.ui

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,25 @@
4545
<property name="visible">True</property>
4646
<property name="can_focus">False</property>
4747
<property name="orientation">vertical</property>
48+
<child>
49+
<object class="GtkCheckButton" id="use_bottom_panel">
50+
<property name="label" translatable="yes">Use _bottom panel</property>
51+
<property name="visible">True</property>
52+
<property name="can_focus">True</property>
53+
<property name="receives_default">False</property>
54+
<property name="use_action_appearance">False</property>
55+
<property name="use_underline">True</property>
56+
<property name="xalign">0</property>
57+
<property name="draw_indicator">True</property>
58+
<signal name="toggled" handler="on_use_bottom_panel_toggled" swapped="no"/>
59+
</object>
60+
<packing>
61+
<property name="expand">False</property>
62+
<property name="fill">True</property>
63+
<property name="padding">6</property>
64+
<property name="position">0</property>
65+
</packing>
66+
</child>
4867
<child>
4968
<object class="GtkCheckButton" id="show_line_numbers">
5069
<property name="label" translatable="yes">Show _line numbers in tree</property>

sourcecodebrowser/data/org.gnome.gedit.plugins.sourcecodebrowser.gschema.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<schemalist>
33
<schema id="org.gnome.gedit.plugins.sourcecodebrowser" path="/org/gnome/gedit/plugins/sourcecodebrowser/">
4+
<key type="b" name="use-bottom-panel">
5+
<default>true</default>
6+
<summary>Use bottom panel</summary>
7+
<description>Use the bottom panel for the source tree.</description>
8+
</key>
49
<key type="b" name="show-line-numbers">
510
<default>false</default>
611
<summary>Show Line Numbers</summary>

sourcecodebrowser/plugin.py

Lines changed: 57 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
from . import ctags
66
from 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+
1215
logging.basicConfig()
1316
LOG_LEVEL = logging.WARN
1417
SETTINGS_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

Comments
 (0)