Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
- Re-apply the Composite pattern to PropertiesViewer.
- Remove the "prefs" parameter from the TreeViewer constructor.

Based on apptk 2.0.0
  • Loading branch information
peter88213 committed Oct 30, 2024
1 parent 938e45c commit dcbdccf
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 37 deletions.
2 changes: 1 addition & 1 deletion src/mdnvlib/view/nv_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def __init__(self, model, controller, title):
self.leftFrame.pack(side='left', expand=True, fill='both')

#--- Create a novel tree window in the left frame.
self.tv = TreeViewer(self.leftFrame, self._mdl, self, self._ctrl, prefs)
self.tv = TreeViewer(self.leftFrame, self._mdl, self, self._ctrl)
self.register_view(self.tv)
self.tv.pack(expand=True, fill='both')

Expand Down
6 changes: 3 additions & 3 deletions src/mdnvlib/view/pop_up/export_options_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@
from mdnvlib.nv_globals import open_help
from mdnvlib.nv_globals import prefs
from mdnvlib.view.platform.platform_settings import KEYS
from apptk.view.pop_up_base import PopUpBase
from apptk.view.modal_dialog import ModalDialog
import tkinter as tk


class ExportOptionsWindow(PopUpBase):
class ExportOptionsWindow(ModalDialog):
"""A pop-up window with export preference settings."""

def __init__(self, model, view, controller, **kw):
PopUpBase.__init__(self, model, view, controller, **kw)
ModalDialog.__init__(self, model, view, controller, **kw)
self.title(_('"Export" options'))
window = ttk.Frame(self)
window.pack(
Expand Down
6 changes: 3 additions & 3 deletions src/mdnvlib/view/pop_up/view_options_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,16 @@
from mdnvlib.nv_globals import open_help
from mdnvlib.nv_globals import prefs
from mdnvlib.view.platform.platform_settings import KEYS
from apptk.view.pop_up_base import PopUpBase
from apptk.view.modal_dialog import ModalDialog
from apptk.widgets.drag_drop_listbox import DragDropListbox
import tkinter as tk


class ViewOptionsWindow(PopUpBase):
class ViewOptionsWindow(ModalDialog):
"""A pop-up window with view preference settings."""

def __init__(self, model, view, controller, **kw):
PopUpBase.__init__(self, model, view, controller, **kw)
ModalDialog.__init__(self, model, view, controller, **kw)
self.title(_('"View" options'))
window = ttk.Frame(self)
window.pack(
Expand Down
25 changes: 14 additions & 11 deletions src/mdnvlib/view/properties_window/properties_viewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,11 @@ def __init__(self, parent, model, view, controller, **kw):
ViewComponentBase.__init__(self, model, view, controller)
ttk.Frame.__init__(self, parent, **kw)

# Call a factory method to instantiate one view per element type.
self._noView = self._make_view(NoView, isClient=False)
self._viewComponents = []
# applying the Composite design pattern

# Call a factory method to instantiate and register one view component per element type.
self._noView = self._make_view(NoView)
self._projectView = self._make_view(ProjectView)
self._chapterView = self._make_view(ChapterView)
self._stageView = self._make_view(StageView)
Expand Down Expand Up @@ -100,18 +103,18 @@ def refresh(self):
except:
pass

def _make_view(self, viewClass, isClient=True):
"""Return a viewClass instance.
def _make_view(self, viewClass):
"""Return a viewClass instance that is registered as a local view..
Positional arguments:
viewClass: BasicView subclass.
Optional arguments:
isClient: Boolean -- If True, register the Object as a view.
"""
newView = viewClass(self, self._mdl, self._ui, self._ctrl)
if isClient:
self._ui.register_view(newView)
self._viewComponents.append(newView)
# registering the view component locally
# NOTE: the new view component must not be registered by the main view,
# because the PropertiesViewer instance may be deleted and recreated
# due to re-parenting when docking the properties window.
return newView

def _set_data(self, elemId):
Expand All @@ -124,9 +127,9 @@ def _view_arc(self, plId):
Positional arguments:
plId: str -- Plot line ID
"""
if not self._activeView is self._plotlineView:
if not self._activeView is self._plotLineView:
self._activeView.hide()
self._activeView = self._plotlineView
self._activeView = self._plotLineView
self._activeView.show()
self._set_data(plId)

Expand Down
38 changes: 19 additions & 19 deletions src/mdnvlib/view/tree_window/tree_viewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class TreeViewer(ViewComponentBase, ttk.Frame):

_NOTE_INDICATOR = _('N')

def __init__(self, parent, model, view, controller, kwargs, **kw):
def __init__(self, parent, model, view, controller, **kw):
"""Put a tkinter tree in the specified parent widget.
Positional arguments:
Expand Down Expand Up @@ -106,23 +106,23 @@ def __init__(self, parent, model, view, controller, kwargs, **kw):
#--- configure tree row display.
fontSize = tkFont.nametofont('TkDefaultFont').actual()['size']
self.tree.tag_configure('root', font=('', fontSize, 'bold'))
self.tree.tag_configure('chapter', foreground=kwargs['color_chapter'])
self.tree.tag_configure('arc', font=('', fontSize, 'bold'), foreground=kwargs['color_arc'])
self.tree.tag_configure('plot_point', foreground=kwargs['color_arc'])
self.tree.tag_configure('unused', foreground=kwargs['color_unused'])
self.tree.tag_configure('stage1', font=('', fontSize, 'bold'), foreground=kwargs['color_stage'])
self.tree.tag_configure('stage2', foreground=kwargs['color_stage'])
self.tree.tag_configure('chapter', foreground=prefs['color_chapter'])
self.tree.tag_configure('arc', font=('', fontSize, 'bold'), foreground=prefs['color_arc'])
self.tree.tag_configure('plot_point', foreground=prefs['color_arc'])
self.tree.tag_configure('unused', foreground=prefs['color_unused'])
self.tree.tag_configure('stage1', font=('', fontSize, 'bold'), foreground=prefs['color_stage'])
self.tree.tag_configure('stage2', foreground=prefs['color_stage'])
self.tree.tag_configure('part', font=('', fontSize, 'bold'))
self.tree.tag_configure('major', foreground=kwargs['color_major'])
self.tree.tag_configure('minor', foreground=kwargs['color_minor'])
self.tree.tag_configure('status1', foreground=kwargs['color_outline'])
self.tree.tag_configure('status2', foreground=kwargs['color_draft'])
self.tree.tag_configure('status3', foreground=kwargs['color_1st_edit'])
self.tree.tag_configure('status4', foreground=kwargs['color_2nd_edit'])
self.tree.tag_configure('status5', foreground=kwargs['color_done'])
self.tree.tag_configure('On_schedule', foreground=kwargs['color_on_schedule'])
self.tree.tag_configure('Behind_schedule', foreground=kwargs['color_behind_schedule'])
self.tree.tag_configure('Before_schedule', foreground=kwargs['color_before_schedule'])
self.tree.tag_configure('major', foreground=prefs['color_major'])
self.tree.tag_configure('minor', foreground=prefs['color_minor'])
self.tree.tag_configure('status1', foreground=prefs['color_outline'])
self.tree.tag_configure('status2', foreground=prefs['color_draft'])
self.tree.tag_configure('status3', foreground=prefs['color_1st_edit'])
self.tree.tag_configure('status4', foreground=prefs['color_2nd_edit'])
self.tree.tag_configure('status5', foreground=prefs['color_done'])
self.tree.tag_configure('On_schedule', foreground=prefs['color_on_schedule'])
self.tree.tag_configure('Behind_schedule', foreground=prefs['color_behind_schedule'])
self.tree.tag_configure('Before_schedule', foreground=prefs['color_before_schedule'])

#--- Browsing history.
self._history = HistoryList()
Expand All @@ -139,7 +139,7 @@ def __init__(self, parent, model, view, controller, kwargs, **kw):
self._build_menus()

#--- Bind events.
self._bind_events(**kwargs)
self._bind_events()

def close_children(self, parent):
"""Recursively close children nodes.
Expand Down Expand Up @@ -425,7 +425,7 @@ def update_branch(node, scnPos=0):
update_branch('')
self.tree.configure(selectmode='extended')

def _bind_events(self, **kwargs):
def _bind_events(self):
self.tree.bind('<<TreeviewSelect>>', self._on_select_node)
self.tree.bind('<<TreeviewOpen>>', self._on_open_branch)
self.tree.bind('<<TreeviewClose>>', self._on_close_branch)
Expand Down

0 comments on commit dcbdccf

Please # to comment.