コード例 #1
0
void MainWindow::reloadAssistantXml(const QString &path)
{
    if (m_assistantXmlPath != path) {
        m_assistantXmlPath = path;

        foreach (QListWidget* widget, m_assistantWidgets) {
            widget->deleteLater();
        }
        m_assistantWidgets.clear();

        if (m_assistantXmlPath.isEmpty()) {
            qDebug() << "No assistant defined.";
        } else {
            AssistantXmlReader reader;
            reader.readFile(m_assistantXmlPath);

            QAction* action_insert = new QAction(this);
            action_insert->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Enter));

            for (int i = 0; i < reader.size(); ++i) {
                const Assistant* assistant = reader.assistant(i);
                QListWidget* view = newAssistantListWidget(ASSISTANT_ICON_SIZE, this);
                for (int j = 0; j < assistant->size(); ++j) {
                    const AssistantItem* assistantItem = assistant->item(j);
                    QListWidgetItem* listWidgetItem =
                            new QListWidgetItem(iconFromSvg(ASSISTANT_ICON_SIZE, assistantItem->icon()),
                                                assistantItem->name(), view);
                    listWidgetItem->setData(ASSISTANT_ITEM_DATA_ROLE, assistantItem->data());
                    listWidgetItem->setData(ASSISTANT_ITEM_NOTES_ROLE, assistantItem->notes());
                }
                m_assistantToolBox->addItem(view, assistant->name());
                connect(view, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
                        this, SLOT(onAssistanItemDoubleClicked(QListWidgetItem*)));
                connect(view, SIGNAL(itemSelectionChanged()),
                        this, SLOT(onAssistantItemSelectionChanged()));

                QAction* action = new QAction(this);
                action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Return));
                m_assistantInsertSignalMapper->setMapping(action, view);
                connect(action, SIGNAL(triggered()),
                        m_assistantInsertSignalMapper, SLOT(map()));
                view->addAction(action);

                m_assistantWidgets << view;
            }
        }
    }