void UCModel::changeUC(const QModelIndex &i){ if (!i.isValid()) return; UCItem *item = reinterpret_cast<UCItem*>(i.internalPointer()); if (!rootItem->childItems.contains(item)) return; UCDialog ucd(MainWindow::getInstance()); initDlgFromItem(ucd, *item); if (ucd.exec() == QDialog::Accepted){ UserCommand uc; FavoriteManager::getInstance()->getUserCommand(item->id, uc); uc.setName(_tq(ucd.getName())); uc.setCommand(_tq(ucd.getCmd())); uc.setHub(_tq(ucd.getHub())); uc.setType(ucd.getType()); uc.setCtx(ucd.getCtx()); uc.setTo(_tq(ucd.lineEdit_TO->text())); FavoriteManager::getInstance()->updateUserCommand(uc); item->name = ((uc.getType() == dcpp::UserCommand::TYPE_SEPARATOR)? tr("Separator") : _q(uc.getName())); item->comm = _q(uc.getCommand()); item->hub = _q(uc.getHub()); item->id = uc.getId(); item->type = uc.getType(); item->ctx = uc.getCtx(); emit layoutChanged(); } }
LRESULT UCPage::onChangeMenu(WORD , WORD , HWND , BOOL& ) { if(ctrlCommands.GetSelectedCount() == 1) { int sel = ctrlCommands.GetSelectedIndex(); UserCommand uc; FavoriteManager::getInstance()->getUserCommand(ctrlCommands.GetItemData(sel), uc); CommandDlg dlg; dlg.type = uc.getType(); dlg.ctx = uc.getCtx(); dlg.name = Text::toT(uc.getName()); dlg.command = Text::toT(uc.getCommand()); dlg.to = Text::toT(uc.getTo()); dlg.hub = Text::toT(uc.getHub()); if(dlg.DoModal() == IDOK) { if(dlg.type == UserCommand::TYPE_SEPARATOR) ctrlCommands.SetItemText(sel, 0, CTSTRING(SEPARATOR)); else ctrlCommands.SetItemText(sel, 0, dlg.name.c_str()); ctrlCommands.SetItemText(sel, 1, dlg.command.c_str()); ctrlCommands.SetItemText(sel, 2, dlg.hub.c_str()); uc.setName(Text::fromT(dlg.name)); uc.setCommand(Text::fromT(dlg.command)); uc.setTo(Text::fromT(dlg.to)); uc.setHub(Text::fromT(dlg.hub)); uc.setType(dlg.type); uc.setCtx(dlg.ctx); FavoriteManager::getInstance()->updateUserCommand(uc); } } return 0; }
void UCPage::addEntry(const UserCommand& uc, int pos) { TStringList lst; if(uc.getType() == UserCommand::TYPE_SEPARATOR) lst.push_back(TSTRING(SEPARATOR)); else lst.push_back(Text::toT(uc.getName())); lst.push_back(Text::toT(uc.getCommand())); lst.push_back(Text::toT(uc.getHub())); ctrlCommands.insert(pos, lst, 0, (LPARAM)uc.getId()); }
QMenu *WulforUtil::buildUserCmdMenu(const StringList& hub_list, int ctx, QWidget* parent) { UserCommand::List userCommands = FavoriteManager::getInstance()->getUserCommands(ctx, hub_list); if (userCommands.empty()) return nullptr; QMenu *ucMenu = new QMenu(tr("User commands"), parent); QMenu *menuPtr = ucMenu; for (size_t n = 0; n < userCommands.size(); ++n) { UserCommand *uc = &userCommands[n]; if (uc->getType() == UserCommand::TYPE_SEPARATOR) { // Avoid double separators... if (!menuPtr->actions().isEmpty() && !menuPtr->actions().last()->isSeparator()) { menuPtr->addSeparator(); } } else if (uc->isRaw() || uc->isChat()) { menuPtr = ucMenu; auto _begin = uc->getDisplayName().begin(); auto _end = uc->getDisplayName().end(); for(; _begin != _end; ++_begin) { const QString name = _q(*_begin); if (_begin + 1 == _end) { menuPtr->addAction(name)->setData(uc->getId()); } else { bool found = false; QListIterator<QAction*> iter(menuPtr->actions()); while(iter.hasNext()) { QAction *item = iter.next(); if (item->menu() && item->text() == name) { found = true; menuPtr = item->menu(); break; } } if (!found) menuPtr = menuPtr->addMenu(name); } } } } return ucMenu; }