forked from qt-creator/qt-creator
Axivion: Handle links more appropriate
If the user clicks on a row's column holding a location information then use this explicitly instead of always using the first available link. Change-Id: Ifecbecac632a4bfd4d31614a8c43ab6c80de4819 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include <solutions/tasking/tasktreerunner.h>
|
#include <solutions/tasking/tasktreerunner.h>
|
||||||
|
|
||||||
|
#include <utils/algorithm.h>
|
||||||
#include <utils/layoutbuilder.h>
|
#include <utils/layoutbuilder.h>
|
||||||
#include <utils/link.h>
|
#include <utils/link.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
@@ -190,6 +191,12 @@ void DashboardWidget::updateUi()
|
|||||||
addValuesWidgets(Tr::tr("Total:"), allTotal, allAdded, allRemoved, row);
|
addValuesWidgets(Tr::tr("Total:"), allTotal, allAdded, allRemoved, row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct LinkWithColumns
|
||||||
|
{
|
||||||
|
Link link;
|
||||||
|
QList<int> columns;
|
||||||
|
};
|
||||||
|
|
||||||
class IssueListItem final : public ListItem
|
class IssueListItem final : public ListItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -200,7 +207,7 @@ public:
|
|||||||
, m_toolTips(toolTips)
|
, m_toolTips(toolTips)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void setLinks(const Links &links) { m_links = links; }
|
void setLinks(const QList<LinkWithColumns> &links) { m_links = links; }
|
||||||
|
|
||||||
QVariant data(int column, int role) const
|
QVariant data(int column, int role) const
|
||||||
{
|
{
|
||||||
@@ -215,8 +222,10 @@ public:
|
|||||||
{
|
{
|
||||||
if (role == BaseTreeView::ItemActivatedRole) {
|
if (role == BaseTreeView::ItemActivatedRole) {
|
||||||
if (!m_links.isEmpty()) {
|
if (!m_links.isEmpty()) {
|
||||||
// TODO for now only simple - just the first..
|
Link link
|
||||||
Link link = m_links.first();
|
= Utils::findOr(m_links, m_links.first(), [column](const LinkWithColumns &link) {
|
||||||
|
return link.columns.contains(column);
|
||||||
|
}).link;
|
||||||
Project *project = ProjectManager::startupProject();
|
Project *project = ProjectManager::startupProject();
|
||||||
FilePath baseDir = project ? project->projectDirectory() : FilePath{};
|
FilePath baseDir = project ? project->projectDirectory() : FilePath{};
|
||||||
link.targetFilePath = baseDir.resolvePath(link.targetFilePath);
|
link.targetFilePath = baseDir.resolvePath(link.targetFilePath);
|
||||||
@@ -234,7 +243,7 @@ private:
|
|||||||
const QString m_id;
|
const QString m_id;
|
||||||
QStringList m_data;
|
QStringList m_data;
|
||||||
QStringList m_toolTips;
|
QStringList m_toolTips;
|
||||||
Links m_links;
|
QList<LinkWithColumns> m_links;
|
||||||
};
|
};
|
||||||
|
|
||||||
class IssuesWidget : public QScrollArea
|
class IssuesWidget : public QScrollArea
|
||||||
@@ -399,19 +408,34 @@ void IssuesWidget::updateTable()
|
|||||||
m_headerView->resizeSections(QHeaderView::ResizeToContents);
|
m_headerView->resizeSections(QHeaderView::ResizeToContents);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Links linksForIssue(const std::map<QString, Dto::Any> &issueRow)
|
static QList<LinkWithColumns> linksForIssue(const std::map<QString, Dto::Any> &issueRow,
|
||||||
|
const std::vector<Dto::ColumnInfoDto> &columnInfos)
|
||||||
{
|
{
|
||||||
Links links;
|
QList<LinkWithColumns> links;
|
||||||
|
|
||||||
auto end = issueRow.end();
|
auto end = issueRow.end();
|
||||||
auto findAndAppend = [&links, &issueRow, &end](const QString &path, const QString &line) {
|
auto findColumn = [columnInfos](const QString &columnKey) {
|
||||||
|
int col = 0;
|
||||||
|
for (auto it = columnInfos.cbegin(), end = columnInfos.cend(); it != end; ++it) {
|
||||||
|
if (it->key == columnKey)
|
||||||
|
return col;
|
||||||
|
++col;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
auto findAndAppend = [&links, &issueRow, &columnInfos, &findColumn, &end](const QString &path,
|
||||||
|
const QString &line) {
|
||||||
|
QList<int> columns;
|
||||||
auto it = issueRow.find(path);
|
auto it = issueRow.find(path);
|
||||||
if (it != end) {
|
if (it != end) {
|
||||||
Link link{ FilePath::fromUserInput(it->second.getString()) };
|
Link link{ FilePath::fromUserInput(it->second.getString()) };
|
||||||
|
columns.append(findColumn(it->first));
|
||||||
it = issueRow.find(line);
|
it = issueRow.find(line);
|
||||||
if (it != end)
|
if (it != end) {
|
||||||
link.targetLine = it->second.getDouble();
|
link.targetLine = it->second.getDouble();
|
||||||
links.append(link);
|
columns.append(findColumn(it->first));
|
||||||
|
}
|
||||||
|
links.append({link, columns});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// do these always? or just for their "expected" kind
|
// do these always? or just for their "expected" kind
|
||||||
@@ -455,7 +479,7 @@ void IssuesWidget::addIssues(const Dto::IssueTableDto &dto, int startRow)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
IssueListItem *it = new IssueListItem(startRow++, id, data, data);
|
IssueListItem *it = new IssueListItem(startRow++, id, data, data);
|
||||||
it->setLinks(linksForIssue(row));
|
it->setLinks(linksForIssue(row, tableColumns));
|
||||||
items.append(it);
|
items.append(it);
|
||||||
}
|
}
|
||||||
m_issuesModel->setItems(items);
|
m_issuesModel->setItems(items);
|
||||||
|
|||||||
Reference in New Issue
Block a user