Skip to content

Commit

Permalink
Make order of tab configurable by user
Browse files Browse the repository at this point in the history
Ref #288
  • Loading branch information
algorys committed Mar 26, 2018
1 parent 9176939 commit 8f65c24
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 10 deletions.
30 changes: 27 additions & 3 deletions alignak_app/qobjects/panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,18 +90,20 @@ def initialize(self):

self.tab_widget.setMovable(True)
self.layout.addWidget(self.tab_widget)
tab_order = self.get_tab_order()

# Synthesis
self.init_synthesis_widget()
self.tab_widget.addTab(self.synthesis_widget, _("Host Synthesis"))
self.tab_widget.insertTab(tab_order.index('h'), self.synthesis_widget, _("Host Synthesis"))
self.tab_widget.setTabToolTip(
self.tab_widget.indexOf(self.synthesis_widget), _('See a synthesis view of a host')
)

# Problems
self.problems_widget.initialize(self.spy_widget)
self.problems_widget.host_btn.clicked.connect(self.display_host)
self.tab_widget.addTab(
self.tab_widget.insertTab(
tab_order.index('p'),
self.problems_widget,
_('Problems (%d)') % len(data_manager.get_problems()['problems'])
)
Expand All @@ -111,7 +113,7 @@ def initialize(self):

# Spied hosts
self.spy_widget.initialize()
self.tab_widget.addTab(self.spy_widget, _('Spied Hosts'))
self.tab_widget.insertTab(tab_order.index('s'), self.spy_widget, _('Spied Hosts'))
self.tab_widget.setTabToolTip(
self.tab_widget.indexOf(self.spy_widget), 'See the hosts spied by Alignak-app'
)
Expand Down Expand Up @@ -144,6 +146,28 @@ def init_synthesis_widget(self):
# Align all widgets to Top
synthesis_layout.setAlignment(Qt.AlignTop)

@staticmethod
def get_tab_order():
"""
Return tab order defined by user, else default order
:return: tab order of App
:rtype: list
"""

default_order = ['h', 'p', 's']
tab_order = settings.get_config('Alignak-app', 'tab_order').split(',')

try:
assert len(tab_order) == len(default_order)
for nb in default_order:
assert nb in tab_order
except AssertionError:
logger.error('Wrong "tab_order" value in config file %s', tab_order)
tab_order = ['h', 'p', 's']

return tab_order

def get_search_widget(self):
"""
Create and return the search QWidget
Expand Down
9 changes: 8 additions & 1 deletion etc/settings.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,16 @@ display = min
; Problems at start
; ------------------------------------------------------------------------------------------
; Defines if "Problems" tab is displayed by default at start
; Default is no. Set to "yes" to display problems by default.
; Default is no. Set to "yes" to display "Problems" tab by default.
problems = no

; Tab order
; ------------------------------------------------------------------------------------------
; Defines order of App tabs: host synthesis, problems and spy views.
; h = host synthesis, p = problems, s = spy,
; Default is h,p,s
tab_order = h,p,s

; Requests interval
; ------------------------------------------------------------------------------------------
; Define interval of App requests. App make regular requests
Expand Down
7 changes: 7 additions & 0 deletions test/etc/settings.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,13 @@ display = min
; Default is no. Set to "yes" to display problems by default.
problems = no

; Tab order
; ------------------------------------------------------------------------------------------
; Defines order of App tabs: host synthesis, problems and spy views.
; h = host synthesis, p = problems, s = spy,
; Default is h,p,s
tab_order = h,p,s

; Requests interval
; ------------------------------------------------------------------------------------------
; Define interval of App requests. App make regular requests
Expand Down
11 changes: 9 additions & 2 deletions test/test_app_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,13 @@ def test_default_view_is_problems(self):
self.assertEqual(-1, under_test.panel_widget.tab_widget.currentIndex())

under_test.initialize()
problems_index = under_test.panel_widget.get_tab_order().index('p')

self.assertFalse(settings.get_config('Alignak-app', 'problems', boolean=True))
self.assertEqual(0, under_test.panel_widget.tab_widget.currentIndex())
self.assertEqual(
problems_index,
under_test.panel_widget.tab_widget.indexOf(under_test.panel_widget.problems_widget)
)

# Make "Problems" as default view
settings.set_config('Alignak-app', 'problems', 'yes')
Expand All @@ -133,7 +137,10 @@ def test_default_view_is_problems(self):
under_test.initialize()

self.assertTrue(settings.get_config('Alignak-app', 'problems', boolean=True))
self.assertEqual(1, under_test.panel_widget.tab_widget.currentIndex())
self.assertEqual(
problems_index,
under_test.panel_widget.tab_widget.indexOf(under_test.panel_widget.problems_widget)
)

# Reset settings
settings.set_config('Alignak-app', 'problems', 'no')
11 changes: 7 additions & 4 deletions test/test_panel_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,10 @@ def test_spy_host(self):
# Host is not in hostname_list
under_test.line_search.setText('no_host')
under_test.spy_host()
spy_index = under_test.get_tab_order().index('s')

self.assertTrue(under_test.spy_button.isEnabled())
self.assertEqual('Spied Hosts', under_test.tab_widget.tabText(2))
self.assertEqual('Spied Hosts', under_test.tab_widget.tabText(spy_index))
# Host Id is not added in spied_hosts of SpyQWidget.SpyQListWidget
self.assertFalse('_id0' in under_test.spy_widget.spy_list_widget.spied_hosts)

Expand All @@ -166,15 +168,16 @@ def test_update_panels(self):
under_test.initialize()

# 10 problems for CRITICAL services
self.assertEqual('Problems (20)', under_test.tab_widget.tabText(1))
problems_index = under_test.get_tab_order().index('p')
self.assertEqual('Problems (20)', under_test.tab_widget.tabText(problems_index))

# Remove a service from problems
data_manager.database['problems'].remove(self.service_list[0])

under_test.tab_widget.widget(1).update_problems_data()
under_test.tab_widget.widget(problems_index).update_problems_data()

# There are only 9 services in CRITICAL condition
self.assertEqual('Problems (19)', under_test.tab_widget.tabText(1))
self.assertEqual('Problems (19)', under_test.tab_widget.tabText(problems_index))

def test_display_host(self):
"""Display Host in Panel"""
Expand Down

0 comments on commit 8f65c24

Please sign in to comment.