void QueueListBox::ItemRightClicked(GG::ListBox::iterator it, const GG::Pt& pt, const GG::Flags<GG::ModKey>& modkeys) { GG::MenuItem menu_contents; menu_contents.next_level.push_back(GG::MenuItem(UserString("MOVE_UP_QUEUE_ITEM"), 1, false, false)); menu_contents.next_level.push_back(GG::MenuItem(UserString("MOVE_DOWN_QUEUE_ITEM"), 2, false, false)); menu_contents.next_level.push_back(GG::MenuItem(UserString("DELETE_QUEUE_ITEM"), 3, false, false)); GG::PopupMenu popup(pt.x, pt.y, ClientUI::GetFont(), menu_contents, ClientUI::TextColor(), ClientUI::WndOuterBorderColor(), ClientUI::WndColor(), ClientUI::EditHiliteColor()); if (popup.Run()) { switch (popup.MenuID()) { case 1: { // move item to top if (GG::ListBox::Row* row = *it) QueueItemMovedSignal(row, 0); break; } case 2: { // move item to bottom if (GG::ListBox::Row* row = *it) QueueItemMovedSignal(row, NumRows()); break; } case 3: { // delete item QueueItemDeletedSignal(it); break; } default: break; } } }
void QueueListBox::ItemRightClicked(GG::ListBox::iterator it, const GG::Pt& pt) { // Create popup menu with a Delete Item command to provide same functionality as // DoubleClick since under laggy conditions it DoubleClick can have trouble // being interpreted correctly (can instead be treated as simply two unrelated left clicks) GG::MenuItem menu_contents; menu_contents.next_level.push_back(GG::MenuItem(UserString("MOVE_UP_QUEUE_ITEM"), 1, false, false)); menu_contents.next_level.push_back(GG::MenuItem(UserString("MOVE_DOWN_QUEUE_ITEM"), 2, false, false)); menu_contents.next_level.push_back(GG::MenuItem(UserString("DELETE_QUEUE_ITEM"), 3, false, false)); GG::PopupMenu popup(pt.x, pt.y, ClientUI::GetFont(), menu_contents, ClientUI::TextColor(), ClientUI::WndOuterBorderColor(), ClientUI::WndColor(), ClientUI::EditHiliteColor()); if (popup.Run()) { switch (popup.MenuID()) { case 1: { // move item to top if (GG::ListBox::Row* row = *it) QueueItemMovedSignal(row, 0); break; } case 2: { // move item to bottom if (GG::ListBox::Row* row = *it) QueueItemMovedSignal(row, NumRows()); break; } case 3: { // delete item DoubleClickedSignal(it); break; } default: break; } } }
void QueueListBox::AcceptDrops(const std::vector<GG::Wnd*>& wnds, const GG::Pt& pt) { if (wnds.size() != 1) return; GG::Wnd* wnd = *wnds.begin(); const std::string& drop_type = wnd->DragDropDataType(); if (AllowedDropTypes().find(drop_type) == AllowedDropTypes().end()) return; GG::ListBox::Row* row = boost::polymorphic_downcast<GG::ListBox::Row*>(wnd); if (!row) return; if (std::find(begin(), end(), row) == end()) return; iterator it = RowUnderPt(pt); QueueItemMovedSignal(row, std::distance(begin(), it)); }
void QueueListBox::AcceptDrops(const GG::Pt& pt, const std::vector<GG::Wnd*>& wnds, GG::Flags<GG::ModKey> mod_keys) { if (wnds.empty()) return; if (wnds.size() > 1) { // delete any extra wnds that won't be processed below for (std::vector<GG::Wnd*>::const_iterator it = ++wnds.begin(); it != wnds.end(); ++it) delete *it; ErrorLogger() << "QueueListBox::AcceptDrops given multiple wnds unexpectedly..."; } GG::Wnd* wnd = *wnds.begin(); const std::string& drop_type = wnd->DragDropDataType(); GG::ListBox::Row* row = boost::polymorphic_downcast<GG::ListBox::Row*>(wnd); if (AllowedDropTypes().find(drop_type) == AllowedDropTypes().end() || !row || std::find(begin(), end(), row) == end()) { delete wnd; return; } iterator it = RowUnderPt(pt); QueueItemMovedSignal(row, std::distance(begin(), it)); }