generated from itdominator/Python-With-Gtk-Template
Tab inferastructure setup
This commit is contained in:
parent
45f813a1b0
commit
2dcfdabe37
@ -9,6 +9,8 @@ from gi.repository import Gtk
|
|||||||
from ..widgets.separator_widget import Separator
|
from ..widgets.separator_widget import Separator
|
||||||
from ..widgets.miniview_widget import MiniViewWidget
|
from ..widgets.miniview_widget import MiniViewWidget
|
||||||
from ..widgets.base.notebook.editor_notebook import EditorNotebook
|
from ..widgets.base.notebook.editor_notebook import EditorNotebook
|
||||||
|
|
||||||
|
from ..widgets.controls.tab_bar import TabBar
|
||||||
from .fixed_box import FixedBox
|
from .fixed_box import FixedBox
|
||||||
|
|
||||||
|
|
||||||
@ -35,8 +37,30 @@ class EditorsPaned(Gtk.Paned):
|
|||||||
event_system.subscribe("update_paned_handle", self._update_paned_handle)
|
event_system.subscribe("update_paned_handle", self._update_paned_handle)
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
self.add1(FixedBox())
|
left_view = Gtk.Box()
|
||||||
self.add2(FixedBox())
|
right_view = Gtk.Box()
|
||||||
|
|
||||||
|
left_view.add( TabBar() )
|
||||||
|
left_view.add( FixedBox() )
|
||||||
|
|
||||||
|
right_view.add( TabBar() )
|
||||||
|
right_view.add( FixedBox() )
|
||||||
|
|
||||||
|
left_view.set_orientation( Gtk.Orientation.VERTICAL )
|
||||||
|
right_view.set_orientation( Gtk.Orientation.VERTICAL )
|
||||||
|
|
||||||
|
left_view.show()
|
||||||
|
right_view.show()
|
||||||
|
|
||||||
|
self.add1(left_view)
|
||||||
|
self.add2(right_view)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# self.add1(FixedBox())
|
||||||
|
# self.add2(FixedBox())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# self.add1(EditorNotebook())
|
# self.add1(EditorNotebook())
|
||||||
# self.add2(EditorNotebook())
|
# self.add2(EditorNotebook())
|
||||||
@ -77,6 +101,8 @@ class EditorsContainer(Gtk.Box):
|
|||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
miniview = MiniViewWidget()
|
miniview = MiniViewWidget()
|
||||||
|
miniview.hide()
|
||||||
|
|
||||||
self.add(Separator("separator_left"))
|
self.add(Separator("separator_left"))
|
||||||
self.add(EditorsPaned())
|
self.add(EditorsPaned())
|
||||||
self.add(Separator("separator_right"))
|
self.add(Separator("separator_right"))
|
||||||
|
@ -29,7 +29,7 @@ class FixedBox(Gtk.Fixed):
|
|||||||
|
|
||||||
|
|
||||||
def _setup_styling(self):
|
def _setup_styling(self):
|
||||||
self.size_allocate( self.get_parent().get_allocated_size().allocation )
|
...
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
self.connect("realize", self._on_realize)
|
self.connect("realize", self._on_realize)
|
||||||
|
96
src/core/widgets/controls/tab_bar.py
Normal file
96
src/core/widgets/controls/tab_bar.py
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# Python imports
|
||||||
|
|
||||||
|
# Lib imports
|
||||||
|
import gi
|
||||||
|
gi.require_version('Gtk', '3.0')
|
||||||
|
from gi.repository import Gtk
|
||||||
|
|
||||||
|
# Application imports
|
||||||
|
from ..tab_header_widget import TabHeaderWidget
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TabBar(Gtk.Notebook):
|
||||||
|
def __init__(self):
|
||||||
|
super(TabBar, self).__init__()
|
||||||
|
|
||||||
|
self.set_group_name("editor_widget")
|
||||||
|
|
||||||
|
self._setup_styling()
|
||||||
|
self._setup_signals()
|
||||||
|
self._subscribe_to_events()
|
||||||
|
self._load_widgets()
|
||||||
|
|
||||||
|
self.show_all()
|
||||||
|
|
||||||
|
|
||||||
|
def _setup_styling(self):
|
||||||
|
...
|
||||||
|
|
||||||
|
def _setup_signals(self):
|
||||||
|
self.connect("switch-page", self._switch_page_update)
|
||||||
|
# self.connect("key-press-event", self._key_press_event)
|
||||||
|
# self.connect("key-release-event", self._key_release_event)
|
||||||
|
...
|
||||||
|
|
||||||
|
def _subscribe_to_events(self):
|
||||||
|
...
|
||||||
|
|
||||||
|
def _load_widgets(self):
|
||||||
|
start_box = Gtk.Box()
|
||||||
|
end_box = Gtk.Box()
|
||||||
|
|
||||||
|
add_tab = Gtk.Button(label = "+")
|
||||||
|
add_tab.connect("released", self.add_tab_click)
|
||||||
|
|
||||||
|
end_box.add(add_tab)
|
||||||
|
|
||||||
|
start_box.show_all()
|
||||||
|
end_box.show_all()
|
||||||
|
|
||||||
|
self.set_action_widget(start_box, 0)
|
||||||
|
self.set_action_widget(end_box, 1)
|
||||||
|
|
||||||
|
self.add_tab_click(None)
|
||||||
|
|
||||||
|
def _switch_page_update(self, notebook, page, page_num):
|
||||||
|
...
|
||||||
|
|
||||||
|
def add_tab_click(self, widget):
|
||||||
|
container = Gtk.Box()
|
||||||
|
page_num = self.append_page(container, TabHeaderWidget(container, self._close_tab))
|
||||||
|
|
||||||
|
self.set_tab_detachable(container, True)
|
||||||
|
self.set_tab_reorderable(container, True)
|
||||||
|
|
||||||
|
self.show_all()
|
||||||
|
self.set_current_page(page_num)
|
||||||
|
|
||||||
|
# Note: Need to get parent instead given we pass the close_tab method
|
||||||
|
# from a potentially former notebook.
|
||||||
|
def _close_tab(self, widget, container):
|
||||||
|
notebook = container.get_parent()
|
||||||
|
page_num = notebook.page_num(container)
|
||||||
|
notebook.remove_page(page_num)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# def close_tab(self, button, container, source_view, eve = None):
|
||||||
|
# notebook = container.get_parent()
|
||||||
|
# if notebook.NAME == "notebook_1" and notebook.get_n_pages() == 1:
|
||||||
|
# return
|
||||||
|
|
||||||
|
# file_type = source_view.get_filetype()
|
||||||
|
# if not file_type == "buffer":
|
||||||
|
# uri = source_view.get_current_file().get_uri()
|
||||||
|
# event_system.emit("textDocument/didClose", (file_type, uri,))
|
||||||
|
|
||||||
|
# page_num = notebook.page_num(container)
|
||||||
|
# source_view._cancel_current_file_watchers()
|
||||||
|
# notebook.remove_page(page_num)
|
||||||
|
|
||||||
|
# if notebook.NAME == "notebook_2" and notebook.get_n_pages() == 0:
|
||||||
|
# notebook.hide()
|
||||||
|
# event_system.emit("focused_target_changed", ("notebook_1",))
|
||||||
|
|
||||||
|
|
@ -12,28 +12,17 @@ from gi.repository import Gtk
|
|||||||
class TabHeaderWidget(Gtk.Box):
|
class TabHeaderWidget(Gtk.Box):
|
||||||
""" docstring for TabHeaderWidget """
|
""" docstring for TabHeaderWidget """
|
||||||
|
|
||||||
ccount = 0
|
def __init__(self, content, close_tab):
|
||||||
def __new__(cls, *args, **kwargs):
|
|
||||||
obj = super(TabHeaderWidget, cls).__new__(cls)
|
|
||||||
cls.ccount += 1
|
|
||||||
return obj
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, scroll_view, source_view, close_tab):
|
|
||||||
super(TabHeaderWidget, self).__init__()
|
super(TabHeaderWidget, self).__init__()
|
||||||
|
|
||||||
self.INDEX = self.ccount
|
self.content = content
|
||||||
self.NAME = f"tab_{self.INDEX}"
|
self.close_tab = close_tab
|
||||||
self._scroll_view = scroll_view
|
|
||||||
self._source_view = source_view
|
|
||||||
self._close_tab = close_tab # NOTE: Close method in tab_mixin
|
|
||||||
|
|
||||||
self._setup_styling()
|
self._setup_styling()
|
||||||
self._setup_signals()
|
self._setup_signals()
|
||||||
self._subscribe_to_events()
|
self._subscribe_to_events()
|
||||||
self._load_widgets()
|
self._load_widgets()
|
||||||
|
|
||||||
self.set_tab_label()
|
|
||||||
self.show_all()
|
self.show_all()
|
||||||
|
|
||||||
|
|
||||||
@ -48,11 +37,11 @@ class TabHeaderWidget(Gtk.Box):
|
|||||||
...
|
...
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
label = Gtk.Label()
|
label = Gtk.Label(label = "buffer")
|
||||||
close = Gtk.Button()
|
close = Gtk.Button()
|
||||||
icon = Gtk.Image(stock = Gtk.STOCK_CLOSE)
|
icon = Gtk.Image(stock = Gtk.STOCK_CLOSE)
|
||||||
|
|
||||||
# NOTE: Setup with settings and from file
|
# TODO: Setup with settings and from file
|
||||||
label.set_xalign(0.0)
|
label.set_xalign(0.0)
|
||||||
label.set_margin_left(25)
|
label.set_margin_left(25)
|
||||||
label.set_margin_right(25)
|
label.set_margin_right(25)
|
||||||
@ -61,16 +50,7 @@ class TabHeaderWidget(Gtk.Box):
|
|||||||
close.set_always_show_image(True)
|
close.set_always_show_image(True)
|
||||||
close.set_hexpand(False)
|
close.set_hexpand(False)
|
||||||
close.set_image( Gtk.Image.new_from_icon_name("gtk-close", 4) )
|
close.set_image( Gtk.Image.new_from_icon_name("gtk-close", 4) )
|
||||||
close.connect("released", self._close_tab, *(self._scroll_view, self._source_view,))
|
close.connect("released", self.close_tab, *(self.content,))
|
||||||
|
|
||||||
self.add(label)
|
self.add(label)
|
||||||
self.add(close)
|
self.add(close)
|
||||||
|
|
||||||
def set_tab_label(self, label = "untitled"):
|
|
||||||
self.get_children()[0].set_label(label)
|
|
||||||
|
|
||||||
def set_status(self, changed = False):
|
|
||||||
label = self.get_children()[0]
|
|
||||||
ctx = label.get_style_context()
|
|
||||||
|
|
||||||
ctx.add_class("buffer_changed") if changed else ctx.remove_class("buffer_changed")
|
|
||||||
|
@ -28,12 +28,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/* CLASSES */
|
/* CLASSES */
|
||||||
.editor-container {
|
|
||||||
position: relative;
|
|
||||||
width: 100vw;
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ace_status-indicator {
|
.ace_status-indicator {
|
||||||
color: gray;
|
color: gray;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
Loading…
Reference in New Issue
Block a user