Browse Source

refactor(plugin): include panels in the plugin engine

pull/458/head
Parodi, Eugenio 🌶 8 months ago
parent
commit
641fa8bf46
  1. 97
      apps/ttkode/ttkode/app/ttkode.py
  2. 8
      apps/ttkode/ttkode/helper.py

97
apps/ttkode/ttkode/app/ttkode.py

@ -20,10 +20,14 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE. # SOFTWARE.
from __future__ import annotations
__all__ = ['TTKode', 'TTKodeWidget'] __all__ = ['TTKode', 'TTKodeWidget']
import os import os
from typing import List,Tuple,Optional,Any from dataclasses import dataclass
from enum import IntEnum
from typing import List,Tuple,Optional,Any,Dict
import TermTk as ttk import TermTk as ttk
from TermTk.TTkWidgets.tabwidget import _TTkNewTabWidgetDragData from TermTk.TTkWidgets.tabwidget import _TTkNewTabWidgetDragData
@ -167,8 +171,68 @@ class _TextEdit(ttk.TTkTextEdit, TTKodeWidget):
tedit.ensureCursorVisible() tedit.ensureCursorVisible()
tedit.textCursor().setPosition(line=linenum,pos=0) tedit.textCursor().setPosition(line=linenum,pos=0)
class _Panel():
class Position(IntEnum):
BOTTOM = 0x01
class _PanelDef():
def __init__(
self,
position: _Panel.Position,
layout: ttk.TTkLayout,
menuBar: ttk.TTkMenuBarLayout,
widgets: List[ttk.TTkWidget] = []):
self.position = position
self.layout = layout
self.menuBar = menuBar
self.widgets = widgets
__slots__ = ('_panels')
_panels:Dict[_Panel.Position,_Panel._PanelDef]
def __init__(self):
self._panels = {}
def addPanel(
self,
position:_Panel.Position,
layout: ttk.TTkLayout,
menuBar: ttk.TTkMenuBarLayout):
if position in self._panels:
raise ValueError(f"Panel '{position.name}' already exists")
panel = _Panel._PanelDef(
position=position,
layout=layout,
menuBar=menuBar
)
self._panels[position] = panel
def addWidget(
self,
position:_Panel.Position,
widget: ttk.TTkWidget,
name: ttk.TTkString,
visible: bool=False):
if not (panel:=self._panels.get(position,None)):
raise ValueError(f"Panel '{position.name}' does not exists")
widget.setVisible(visible)
panel.layout.addWidget(widget)
panel.widgets.append(widget)
mb = panel.menuBar.addMenu(name, alignment=ttk.TTkK.LEFT_ALIGN)
@ttk.pyTTkSlot()
def _showBottomTab():
for _w in self._panels[self.Position.BOTTOM].widgets:
_w.hide()
widget.show()
mb.menuButtonClicked.connect(_showBottomTab)
class TTKode(ttk.TTkGridLayout): class TTKode(ttk.TTkGridLayout):
__slots__ = ('_kodeTab', '_activityBar', '_lastDoc') __slots__ = ('_kodeTab', '_activityBar', '_panel', '_lastDoc')
_panel:_Panel
_lastDoc:Optional[_TextDocument] _lastDoc:Optional[_TextDocument]
def __init__(self, **kwargs): def __init__(self, **kwargs):
self._lastDoc = None self._lastDoc = None
@ -210,18 +274,27 @@ class TTKode(ttk.TTkGridLayout):
appTemplate.setItem(bottomLayout, ttk.TTkAppTemplate.BOTTOM, size=3) appTemplate.setItem(bottomLayout, ttk.TTkAppTemplate.BOTTOM, size=3)
appTemplate.setMenuBar(bottomMenuBar:=ttk.TTkMenuBarLayout(), ttk.TTkAppTemplate.BOTTOM) appTemplate.setMenuBar(bottomMenuBar:=ttk.TTkMenuBarLayout(), ttk.TTkAppTemplate.BOTTOM)
bottomLayout.addWidget(_logViewer:=ttk.TTkLogViewer()) self._panel = _Panel()
bottomLayout.addWidget(_terminal:=ttk.TTkTerminal(visible=False)) self._panel.addPanel(
position=_Panel.Position.BOTTOM,
layout=bottomLayout,
menuBar=bottomMenuBar)
_logViewer=ttk.TTkLogViewer()
_terminal=ttk.TTkTerminal(visible=False)
_th = ttk.TTkTerminalHelper(term=_terminal) _th = ttk.TTkTerminalHelper(term=_terminal)
_th.runShell() _th.runShell()
@ttk.pyTTkSlot(ttk.TTkWidget)
def _showBottomTab(wid:ttk.TTkWidget): self._panel.addWidget(
_logViewer.hide() position=_Panel.Position.BOTTOM,
_terminal.hide() widget=_logViewer,
wid.show() name="Logs",
visible=True)
bottomMenuBar.addMenu("Logs", alignment=ttk.TTkK.LEFT_ALIGN).menuButtonClicked.connect(lambda : _showBottomTab(_logViewer)) self._panel.addWidget(
bottomMenuBar.addMenu(" Terminal", alignment=ttk.TTkK.LEFT_ALIGN).menuButtonClicked.connect(lambda : _showBottomTab(_terminal)) position=_Panel.Position.BOTTOM,
widget=_terminal,
name=" Terminal")
fileTree.fileActivated.connect(lambda x: self._openFile(x.path())) fileTree.fileActivated.connect(lambda x: self._openFile(x.path()))
self._kodeTab.tabAdded.connect(self._tabAdded) self._kodeTab.tabAdded.connect(self._tabAdded)

8
apps/ttkode/ttkode/helper.py

@ -70,6 +70,14 @@ class TTkodeHelper():
name=_pluginWidget.activityName, name=_pluginWidget.activityName,
icon=_pluginWidget.icon, icon=_pluginWidget.icon,
widget=_pluginWidget.widget) widget=_pluginWidget.widget)
if isinstance(_pluginWidget, TTkodePluginWidgetPanel):
_panel = ttkodeProxy.ttkode()._panel
_panel.addWidget(
position=_panel.Position.BOTTOM,
widget=_pluginWidget.widget,
name=_pluginWidget.panelName
)
if mod.apply is not None: if mod.apply is not None:
mod.apply() mod.apply()

Loading…
Cancel
Save