def __init__(self, grid): self._tooltip = Tooltip(grid, (250, 80), False, True) self._information_popup = Tooltip(grid, (450, 300)) self._grid = grid self._tooltip_timer = wx.Timer(grid.GetGridWindow()) grid.GetGridWindow().Bind(wx.EVT_MOTION, self.OnMouseMotion) grid.GetGridWindow().Bind(wx.EVT_TIMER, self.OnShowToolTip) grid.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.OnGridEditorHidden)
def __init__(self, parent, plugin, controller=None): self._parent = parent self._plugin = plugin self._main_popup = RidePopupWindow(parent, _PREFERRED_POPUP_SIZE) self._details_popup = Tooltip(parent, _PREFERRED_POPUP_SIZE) self._selection = -1 self._list = ContentAssistList(self._main_popup, self.OnListItemSelected, self.OnListItemActivated) self._suggestions = Suggestions(self._plugin, controller)
class GridToolTips(object): def __init__(self, grid): self._tooltip = Tooltip(grid, (250, 80), False, True) self._information_popup = Tooltip(grid, (450, 300)) self._grid = grid self._tooltip_timer = wx.Timer(grid.GetGridWindow()) grid.GetGridWindow().Bind(wx.EVT_MOTION, self.OnMouseMotion) grid.GetGridWindow().Bind(wx.EVT_TIMER, self.OnShowToolTip) grid.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.OnGridEditorHidden) def OnMouseMotion(self, event): self._hide_tooltip() self._start_tooltip_timer() event.Skip() def _start_tooltip_timer(self): self._tooltip_timer.Start(1000, True) def OnShowToolTip(self, event): self._hide_tooltip() content = self._grid.get_tooltip_content() if content and self._application_has_focus(): self._show_tooltip_at(content, self._calculate_tooltip_position()) self._grid.SetFocus() def _application_has_focus(self): window = wx.Window.FindFocus() if window is None: return False rect = window.GetTopLevelParent().GetScreenRect() return rect.Inside(wx.GetMousePosition()) def OnGridEditorHidden(self, event): cell = event.Row, event.Col if cell == self._grid.cell_under_cursor: self._start_tooltip_timer() def _show_tooltip_at(self, content, position): if not self._information_popup.IsShown(): self._tooltip.set_content(content) self._tooltip.show_at(position) def _calculate_tooltip_position(self): x, y = wx.GetMousePosition() return x+5, y+5 def _hide_tooltip(self): self._tooltip.hide() def hide_information(self): self._information_popup.hide() def hide(self): self._hide_tooltip() self.hide_information() def show_info_at(self, info, title, position): self._tooltip.hide() self._information_popup.set_content(info, title) self._information_popup.show_at(position)
class ContentAssistPopup(object): def __init__(self, parent, plugin, controller=None): self._parent = parent self._plugin = plugin self._main_popup = RidePopupWindow(parent, _PREFERRED_POPUP_SIZE) self._details_popup = Tooltip(parent, _PREFERRED_POPUP_SIZE) self._selection = -1 self._list = ContentAssistList(self._main_popup, self.OnListItemSelected, self.OnListItemActivated) self._suggestions = Suggestions(self._plugin, controller) def reset(self): self._selection = -1 def get_value(self): return self._selection != -1 and self._list.get_text(self._selection) or None def content_assist_for(self, value, row=None): self._choices = self._suggestions.get_for(value, row=row) if not self._choices: self._list.ClearAll() self._parent.hide() return False self._list.populate(self._choices) return True def _starts(self, val1, val2): return val1.lower().startswith(val2.lower()) def content_assist_value(self, value): if self._selection > -1: return self._list.GetItem(self._selection).GetText() return None def show(self, xcoord, ycoord, cell_height): self._main_popup.SetPosition((xcoord, self._move_y_where_room(ycoord, cell_height))) self._details_popup.SetPosition((self._move_x_where_room(xcoord), self._move_y_where_room(ycoord, cell_height))) self._main_popup.Show() self._list.SetFocus() def _move_x_where_room(self, start_x): width = _PREFERRED_POPUP_SIZE[0] max_horizontal = wx.GetDisplaySize()[0] free_right = max_horizontal - start_x - width free_left = start_x - width if max_horizontal - start_x < 2 * width: if free_left > free_right: return start_x - width return start_x + width def _move_y_where_room(self, start_y, cell_height): height = _PREFERRED_POPUP_SIZE[1] max_vertical = wx.GetDisplaySize()[1] if max_vertical - start_y - cell_height < height: return start_y - height return start_y + cell_height def is_shown(self): return self._main_popup.IsShown() def select_and_scroll(self, keycode): sel = self._list.GetFirstSelected() if keycode == wx.WXK_DOWN : if sel < (self._list.GetItemCount() - 1): self._select_and_scroll(sel + 1) else: self._select_and_scroll(0) elif keycode == wx.WXK_UP: if sel > 0 : self._select_and_scroll(sel - 1) else: self._select_and_scroll(self._list.GetItemCount() - 1) elif keycode == wx.WXK_PAGEDOWN: if self._list.ItemCount - self._selection > 14: self._select_and_scroll(self._selection + 14) else: self._select_and_scroll(self._list.ItemCount - 1) elif keycode == wx.WXK_PAGEUP: if self._selection > 14: self._select_and_scroll(self._selection - 14) else: self._select_and_scroll(0) def _select_and_scroll(self, selection): self._selection = selection self._list.Select(self._selection) self._list.EnsureVisible(self._selection) def hide(self): self._selection = -1 self._main_popup.Show(False) self._details_popup.Show(False) def OnListItemActivated(self, event): self._parent.OnFocusLost(event) def OnListItemSelected(self, event): self._selection = event.GetIndex() item = self._suggestions.get_item(event.GetText()) if item.details: self._details_popup.Show() self._details_popup.set_content(item.details, item.name) elif self._details_popup.IsShown(): self._details_popup.Show(False)