public static Account ShowAccountSelectMenu(QWidget attachWidget) { AccountService accountService = ServiceManager.Get <AccountService>(); if (accountService.ConnectedAccounts.Count == 0) { var widget = (attachWidget != null) ? attachWidget.TopLevelWidget() : Gui.MainWindow; QMessageBox.Critical(widget, "Synapse", "You are not connected."); return(null); } Account selectedAccount = null; if (accountService.ConnectedAccounts.Count > 1) { QMenu menu = new QMenu(); menu.AddAction("Select Account:").SetDisabled(true); foreach (Account account in accountService.ConnectedAccounts) { QAction action = menu.AddAction(account.Jid.ToString()); if (menu.ActiveAction() == null) { menu.SetActiveAction(action); } } var pos = (attachWidget != null) ? attachWidget.MapToGlobal(new QPoint(0, attachWidget.Height())) : QCursor.Pos(); QAction selectedAction = menu.Exec(pos); if (selectedAction != null) { selectedAccount = accountService.GetAccount(new jabber.JID(selectedAction.Text)); } } else { selectedAccount = accountService.ConnectedAccounts[0]; } return(selectedAccount); }
void UpdateHoverItem() { var oldItem = m_HoverItem; var pos = this.MapFromGlobal(QCursor.Pos()); var item = this.ItemAt(pos); // Since we map the point to scene coords, we could accidently // focus items outside the visible viewport. if (m_SuppressTooltips || !this.Viewport().Geometry.Contains(pos) || !this.IsVisible()) { m_TooltipTimer.Stop(); m_HoverItem = null; m_InfoPopup.Item = null; } else { if (item is RosterItem <T> ) { m_HoverItem = (RosterItem <T>)item; m_HoverItem.Update(); if (m_InfoPopup.Item != m_HoverItem) { if (m_InfoPopup.IsVisible()) { m_InfoPopup.Item = m_HoverItem; } else { m_TooltipTimer.Stop(); m_InfoPopup.Item = m_HoverItem; m_TooltipTimer.Start(); } } } else { m_TooltipTimer.Stop(); m_HoverItem = null; // Allow a buffer around the active item so that the tooltip // can change items without having to be closed/re-opened. if (m_InfoPopup.Item != null) { var itemRect = m_InfoPopup.Item.SceneBoundingRect(); var itemPos = this.MapFromScene(itemRect.X(), itemRect.Y()); QRectF rect = new QRectF(itemPos.X() - IconPadding, itemPos.Y() - IconPadding, itemRect.Width() + IconPadding + IconPadding, itemRect.Height() + IconPadding + IconPadding); if (!rect.Contains(pos)) { m_InfoPopup.Item = null; } } } } if (oldItem != null && oldItem != m_HoverItem) { oldItem.Update(); } }