installer/window.py
f4d17450
 #!/usr/bin/python2
 #
 #    Copyright (C) 2015 vmware inc.
 #
 #    Author: Mahmoud Bassiouny <mbassiouny@vmware.com>
 
 import curses
 from actionresult import ActionResult
 from action import Action
 
 class Window(Action):
 
     def __init__(self, height, width, maxy, maxx, title, can_go_back, action_panel = None):
         self.can_go_back = can_go_back
         self.height = height
         self.width = width;
         self.y = (maxy - height) / 2
         self.x = (maxx - width ) / 2
         title = ' ' + title + ' '
 
         self.contentwin = curses.newwin(height - 1, width -1)
         self.contentwin.bkgd(' ', curses.color_pair(2)) #Default Window color
         self.contentwin.erase()
         self.contentwin.box()
         self.contentwin.addstr(0, (width - 1 - len(title)) / 2 , title)#
         if self.can_go_back:
             self.contentwin.addstr(height - 3, 5, '<Go Back>')
 
         self.textwin = curses.newwin(height - 5, width - 5)
         self.textwin.bkgd(' ', curses.color_pair(2)) #Default Window color
 
         self.shadowwin = curses.newwin(height - 1, width - 1)
         self.shadowwin.bkgd(' ', curses.color_pair(0)) #Default shadow color
 
         self.contentpanel = curses.panel.new_panel(self.contentwin)
         self.textpanel = curses.panel.new_panel(self.textwin)
         self.shadowpanel = curses.panel.new_panel(self.shadowwin)
 
         self.action_panel = action_panel
 
         self.hide_window()
 
     def set_action_panel(self, action_panel):
         self.action_panel = action_panel
 
     def do_action(self):
         self.show_window()
         action_result = self.action_panel.do_action()
 
         if action_result.success:
             self.hide_window()
             return action_result
         else:
1ec3a643
             if (action_result.result != None and 'goBack' in action_result.result and action_result.result['goBack']):
                 self.hide_window()
                 self.action_panel.hide()
                 return action_result
             else:
                 #highlight the GoBack and keep going
                 self.contentwin.addstr(self.height - 3, 5, '<Go Back>', curses.color_pair(3))
                 self.contentwin.refresh()
f4d17450
 
         while action_result.success == False:
             key = self.contentwin.getch()
             if key in [curses.KEY_ENTER, ord('\n')]:
                 #remove highlight from Go Back
                 self.contentwin.addstr(self.height - 3, 5, '<Go Back>')
                 self.contentwin.refresh()
                 self.hide_window()
                 self.action_panel.hide()
                 return ActionResult(False, None)
             elif key in [ord('\t')]:
                 #remove highlight from Go Back
                 self.contentwin.addstr(self.height - 3, 5, '<Go Back>')
                 self.contentwin.refresh()
                 # go do the action inside the panel
                 action_result = self.action_panel.do_action()
                 if action_result.success:
                     self.hide_window()
                     return action_result
                 else:
                     #highlight the GoBack and keep going
                     self.contentwin.addstr(self.height - 3, 5, '<Go Back>', curses.color_pair(3))
                     self.contentwin.refresh()
 
     def show_window(self):
         y = self.y
         x = self.x
         self.shadowpanel.top()
         self.contentpanel.top()
         self.textpanel.top()
 
         self.shadowpanel.move(y + 1, x + 1)
         self.contentpanel.move(y, x)
         self.textpanel.move(y + 2, x + 2)
 
         self.shadowpanel.show()
         self.contentpanel.show()
         self.textpanel.show()
 
         curses.panel.update_panels()
         curses.doupdate()
 
     def hide_window(self):
         self.shadowpanel.hide()
         self.contentpanel.hide()
         self.textpanel.hide()
         curses.panel.update_panels()
         curses.doupdate()
 
     def addstr(self, y, x, str, mode = 0):
         self.textwin.addstr(y, x, str, mode)
 
     def adderror(self, str):
         self.textwin.addstr(self.height - 7, 0, str, curses.color_pair(4))
         self.textwin.refresh()
 
     def clearerror(self):
         spaces = ' ' * (self.width - 6)
         self.textwin.addstr(self.height - 7, 0, spaces)
         self.textwin.refresh()
 
     def content_window(self):
         return self.textwin