Skip to content

Commit

Permalink
Create ability to close open database without closing RTK.
Browse files Browse the repository at this point in the history
- Fixes issue #21.
- Create new methods to clear GUI widgets in response to 'closedProgram' PyPubSub signal.

Signed-off-by: Doyle Rowland <andrew.rowland@reliaqual.com>
  • Loading branch information
weibullguy committed Jul 14, 2018
1 parent 5a7d536 commit 687bdbe
Show file tree
Hide file tree
Showing 15 changed files with 644 additions and 29 deletions.
11 changes: 7 additions & 4 deletions src/rtk/RTK.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,10 +231,10 @@ def open_program(self, database):

return _error_code, _msg

def close_program(self):
def do_close_program(self):
"""Close the open RTK Program database."""
self.program_dao.db_close()

print self.program_dao.engine, self.program_dao.session, self.program_dao.metadata, self.program_dao.database
return None

def save_program(self):
Expand Down Expand Up @@ -777,7 +777,7 @@ def request_open_program(self):

return _return

def request_close_program(self):
def request_do_close_program(self):
"""
Request the open RTK Program database be closed.
Expand All @@ -795,7 +795,10 @@ def request_close_program(self):
if not self.__test:
pub.sendMessage('closedProgram')

return self.rtk_model.close_program()
if not self.rtk_model.do_close_program():
self.loaded = False

return self.loaded

def request_save_program(self):
"""
Expand Down
5 changes: 5 additions & 0 deletions src/rtk/dao/DAO.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from sqlalchemy import create_engine, exc, MetaData
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import NullPool

# Import tables objects for the RTK Common database.
from .RTKCommonDB import create_common_db
Expand Down Expand Up @@ -81,8 +82,12 @@ def db_close(self):
:rtype: bool
"""
self.session.close()
self.RTK_SESSION.close_all()
self.engine.dispose()
self.session = None
self.engine = None
self.metadata = None
self.database = None

return False

Expand Down
24 changes: 24 additions & 0 deletions src/rtk/gui/gtk/mwi/ListBook.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,30 @@ def __init__(self, controller):
self.show_all()

pub.subscribe(self._on_module_change, 'mvwSwitchedPage')
pub.subscribe(self._on_close, 'closedProgram')

def _on_close(self):
"""
Update the Modules Views when a RTK Program database is closed.
:return: None
:rtype: None
"""
for _key in self.dic_list_view:
for _listview in self.dic_list_view[_key]:
try:
_view = _listview.treeview
except AttributeError:
_view = _listview.matrix

_model = _view.get_model()
_columns = _view.get_columns()
for _column in _columns:
_view.remove_column(_column)

_model.clear()

return None

def _on_module_change(self, module=''):
"""
Expand Down
20 changes: 17 additions & 3 deletions src/rtk/gui/gtk/mwi/ModuleBook.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ def __init__(self, controller):

pub.subscribe(self._on_request_open, 'requestOpen')
pub.subscribe(self._on_open, 'openedProgram')
pub.subscribe(self._on_close, 'closedProgram')

def _make_menu(self):
"""
Expand Down Expand Up @@ -177,7 +178,7 @@ def _make_menu(self):
_menu.append(_menu_item)

_menu_item = gtk.MenuItem(label=_(u"_Close"), use_underline=True)
_menu_item.connect('activate', self._request_close_project)
_menu_item.connect('activate', self._do_request_close_project)
_menu.append(_menu_item)

_menu_item = gtk.ImageMenuItem()
Expand Down Expand Up @@ -401,6 +402,19 @@ def _on_request_open(self):

return _return

def _on_close(self):
"""
Update the Modules Views when a RTK Program database is closed.
:return: None
:rtype: None
"""
for _moduleview in self._lst_module_views:
_model = _moduleview[0].treeview.get_model()
_model.clear()

return None

def _on_open(self):
"""
Update the status bar and clear the progress bar.
Expand Down Expand Up @@ -492,14 +506,14 @@ def _request_save_project(self, __widget, end=False):

return False

def _request_close_project(self, __widget):
def _do_request_close_project(self, __widget):
"""
Request to close the open RTK Program.
:param gtk.Widget __widget: the gtk.Widget() that called this method.
:return: False if successful or True if an error is encountered.
:rtype: bool
"""
self._mdcRTK.close_project()
self._mdcRTK.request_do_close_program()

return False
10 changes: 5 additions & 5 deletions src/rtk/gui/gtk/mwi/WorkBook.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
from rtk.gui.gtk.workviews import wvwHazOps
from rtk.gui.gtk.workviews import wvwPoF
from rtk.gui.gtk.workviews import wvwSimilarItem
from rtk.gui.gtk.workviews import wvwFunctionGD, wvwFunctionAR
from rtk.gui.gtk.workviews import wvwRevisionGD, wvwRevisionAR
from rtk.gui.gtk.workviews import wvwFunctionGD
from rtk.gui.gtk.workviews import wvwRevisionGD
from rtk.gui.gtk.workviews import wvwRequirementGD, wvwRequirementAnalysis
from rtk.gui.gtk.workviews import wvwHardwareGD, wvwHardwareAI, wvwHardwareAR
from rtk.gui.gtk.workviews import wvwValidationGD, wvwBurndownCurve
Expand All @@ -44,12 +44,12 @@ def __init__(self, controller):

# Initialize public dictionary attributes.
self.dic_work_views = {
'revision': [wvwRevisionGD(controller),
wvwRevisionAR(controller)],
'revision': [
wvwRevisionGD(controller),
],
'function': [
wvwFunctionGD(controller),
wvwFFMEA(controller),
wvwFunctionAR(controller)
],
'requirement':
[wvwRequirementGD(controller),
Expand Down
32 changes: 26 additions & 6 deletions src/rtk/gui/gtk/workviews/Allocation.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,29 @@ def __init__(self, controller, **kwargs): # pylint: disable=unused-argument
self.show_all()

pub.subscribe(self._on_select, 'selectedHardware')
pub.subscribe(self._do_clear_page, 'closedProgram')

def _do_clear_page(self):
"""
Clear the contents of the page.
:return: None
:rtype: None
"""
_model = self.treeview.get_model()
_columns = self.treeview.get_columns()
for _column in _columns:
self.treeview.remove_column(_column)

_model.clear()

self.cmbAllocationMethod.set_active(0)
self.cmbAllocationGoal.set_active(0)
self.txtHazardRateGoal.set_text('')
self.txtMTBFGoal.set_text('')
self.txtReliabilityGoal.set_text('')

return None

def _do_change_row(self, treeview):
"""
Expand Down Expand Up @@ -288,8 +311,7 @@ def _do_load_page(self, **kwargs): # pylint: disable=unused-argument
"{0:s} for Hardware ID {1:s} is the "
"wrong type for one or more "
"columns.".format(
str(_node_id),
str(self._parent_id)))
str(_node_id), str(self._parent_id)))
except ValueError:
_error_code = 1
_user_msg = _(u"One or more Allocation line items was "
Expand All @@ -298,8 +320,7 @@ def _do_load_page(self, **kwargs): # pylint: disable=unused-argument
_debug_msg = ("RTK ERROR: Too few fields for "
"Allocation ID {0:s} for Hardware ID "
"{1:s}.".format(
str(_node_id),
str(self._parent_id)))
str(_node_id), str(self._parent_id)))
except AttributeError:
if _node_id != 0:
_error_code = 1
Expand All @@ -309,8 +330,7 @@ def _do_load_page(self, **kwargs): # pylint: disable=unused-argument
_debug_msg = ("RTK ERROR: There is no data package "
"for Allocation ID {0:s} for Hardware "
"ID {1:s}.".format(
str(_node_id),
str(self._parent_id)))
str(_node_id), str(self._parent_id)))

return (_error_code, _user_msg, _debug_msg)

Expand Down
39 changes: 39 additions & 0 deletions src/rtk/gui/gtk/workviews/FMEA.py
Original file line number Diff line number Diff line change
Expand Up @@ -522,6 +522,7 @@ def __init__(self, controller, **kwargs): # pylint: disable=unused-argument
self.show_all()

pub.subscribe(self._on_select, 'selectedFunction')
pub.subscribe(self._do_clear_page, 'closedProgram')

def _do_change_row(self, treeview):
"""
Expand Down Expand Up @@ -603,6 +604,22 @@ def _do_change_row(self, treeview):

return _return

def _do_clear_page(self):
"""
Clear the contents of the page.
:return: None
:rtype: None
"""
_model = self.treeview.get_model()
_columns = self.treeview.get_columns()
for _column in _columns:
self.treeview.remove_column(_column)

_model.clear()

return None

def _do_edit_cell(self, __cell, path, new_text, position, model):
"""
Handle edits of the FMEA Work View RTKTreeview().
Expand Down Expand Up @@ -1002,6 +1019,7 @@ def __init__(self, controller, **kwargs): # pylint: disable=unused-argument
pub.subscribe(self._do_load_missions, 'selectedRevision')
pub.subscribe(self._on_select, 'selectedHardware')
pub.subscribe(self._do_load_missions, 'editedUsage')
pub.subscribe(self._do_clear_page, 'closedProgram')

def _do_change_row(self, treeview):
"""
Expand Down Expand Up @@ -1132,6 +1150,27 @@ def _do_change_row(self, treeview):

return _return

def _do_clear_page(self):
"""
Clear the contents of the page.
:return: None
:rtype: None
"""
_model = self.treeview.get_model()
_columns = self.treeview.get_columns()
for _column in _columns:
self.treeview.remove_column(_column)

_model.clear()

self.chkCriticality.set_active(False)
self.chkRPN.set_active(False)
_buffer = self.txtItemCriticality.do_get_buffer()
_buffer.set_text('')

return None

def _do_edit_cell(self, __cell, path, new_text, position, model):
"""
Handle edits of the (D)FME(C)A RTKTreeview().
Expand Down
24 changes: 24 additions & 0 deletions src/rtk/gui/gtk/workviews/Function.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,30 @@ def __init__(self, controller, **kwargs): # pylint: disable=unused-argument

pub.subscribe(self._on_select, 'selectedFunction')
pub.subscribe(self._on_edit, 'mvwEditedFunction')
pub.subscribe(self._do_clear_page, 'closedProgram')

def _do_clear_page(self):
"""
Clear the contents of the page.
:return: None
:rtype: None
"""
self.txtCode.handler_block(self._lst_handler_id[0])
self.txtCode.set_text('')
self.txtCode.handler_unblock(self._lst_handler_id[0])
self.txtName.handler_block(self._lst_handler_id[1])
self.txtName.set_text('')
self.txtName.handler_unblock(self._lst_handler_id[1])
_buffer = self.txtRemarks.do_get_buffer()
_buffer.handler_block(self._lst_handler_id[2])
_buffer.set_text('')
_buffer.handler_block(self._lst_handler_id[2])
self.chkSafetyCritical.handler_block(self._lst_handler_id[3])
self.chkSafetyCritical.set_active(False)
self.chkSafetyCritical.handler_unblock(self._lst_handler_id[3])

return None

def _do_load_page(self, **kwargs): # pylint: disable=unused-argument
"""
Expand Down
Loading

0 comments on commit 687bdbe

Please sign in to comment.