forked from qt-creator/qt-creator
Move SDK Manager instal/uninstall checkbox to left of package name
This will makes it much easier selecting packages for install/uninstall operations, and makes more space for the package name by removing the operation column, as well as making changes more apparent by marking pending changes in bold font. Change-Id: Iec86c384195dd8c51fd8f00c1de56cdbb2bab62a Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -98,12 +98,10 @@ AndroidSdkManagerWidget::AndroidSdkManagerWidget(AndroidConfig &config,
|
|||||||
|
|
||||||
auto proxyModel = new PackageFilterModel(m_sdkModel);
|
auto proxyModel = new PackageFilterModel(m_sdkModel);
|
||||||
m_ui->packagesView->setModel(proxyModel);
|
m_ui->packagesView->setModel(proxyModel);
|
||||||
|
m_ui->packagesView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
m_ui->packagesView->header()->setSectionResizeMode(AndroidSdkModel::packageNameColumn,
|
m_ui->packagesView->header()->setSectionResizeMode(AndroidSdkModel::packageNameColumn,
|
||||||
QHeaderView::ResizeToContents);
|
QHeaderView::Stretch);
|
||||||
m_ui->packagesView->header()->setSectionResizeMode(AndroidSdkModel::apiLevelColumn,
|
m_ui->packagesView->header()->setStretchLastSection(false);
|
||||||
QHeaderView::ResizeToContents);
|
|
||||||
m_ui->packagesView->header()->setSectionResizeMode(AndroidSdkModel::packageRevisionColumn,
|
|
||||||
QHeaderView::ResizeToContents);
|
|
||||||
connect(m_ui->expandCheck, &QCheckBox::stateChanged, [this](int state) {
|
connect(m_ui->expandCheck, &QCheckBox::stateChanged, [this](int state) {
|
||||||
if (state == Qt::Checked)
|
if (state == Qt::Checked)
|
||||||
m_ui->packagesView->expandAll();
|
m_ui->packagesView->expandAll();
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ static Q_LOGGING_CATEGORY(androidSdkModelLog, "qtc.android.sdkmodel", QtWarningM
|
|||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
const int packageColCount = 4;
|
const int packageColCount = 3;
|
||||||
|
|
||||||
AndroidSdkModel::AndroidSdkModel(const AndroidConfig &config, AndroidSdkManager *sdkManager,
|
AndroidSdkModel::AndroidSdkModel(const AndroidConfig &config, AndroidSdkManager *sdkManager,
|
||||||
QObject *parent)
|
QObject *parent)
|
||||||
@@ -74,9 +74,6 @@ QVariant AndroidSdkModel::headerData(int section, Qt::Orientation orientation, i
|
|||||||
case apiLevelColumn:
|
case apiLevelColumn:
|
||||||
data = tr("API");
|
data = tr("API");
|
||||||
break;
|
break;
|
||||||
case operationColumn:
|
|
||||||
data = tr("Operation");
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -162,7 +159,6 @@ QVariant AndroidSdkModel::data(const QModelIndex &index, int role) const
|
|||||||
if (!index.isValid())
|
if (!index.isValid())
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
||||||
|
|
||||||
if (!index.parent().isValid()) {
|
if (!index.parent().isValid()) {
|
||||||
// Top level tools
|
// Top level tools
|
||||||
if (index.row() == 0) {
|
if (index.row() == 0) {
|
||||||
@@ -202,25 +198,29 @@ QVariant AndroidSdkModel::data(const QModelIndex &index, int role) const
|
|||||||
return p->revision().toString();
|
return p->revision().toString();
|
||||||
case apiLevelColumn:
|
case apiLevelColumn:
|
||||||
return apiLevelStr;
|
return apiLevelStr;
|
||||||
case operationColumn:
|
|
||||||
if (p->type() == AndroidSdkPackage::SdkToolsPackage &&
|
|
||||||
p->state() == AndroidSdkPackage::Installed) {
|
|
||||||
return tr("Update Only");
|
|
||||||
} else {
|
|
||||||
return p->state() == AndroidSdkPackage::Installed ? tr("Uninstall") : tr("Install");
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (role == Qt::DecorationRole && index.column() == packageNameColumn) {
|
if (index.column() == packageNameColumn) {
|
||||||
return p->state() == AndroidSdkPackage::Installed ? Utils::Icons::OK.icon() :
|
if (role == Qt::CheckStateRole) {
|
||||||
Utils::Icons::EMPTY16.icon();
|
if (p->state() == AndroidSdkPackage::Installed)
|
||||||
|
return m_changeState.contains(p) ? Qt::Unchecked : Qt::Checked;
|
||||||
|
else
|
||||||
|
return m_changeState.contains(p) ? Qt::Checked : Qt::Unchecked;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (role == Qt::FontRole) {
|
||||||
|
QFont font;
|
||||||
|
if (m_changeState.contains(p))
|
||||||
|
font.setBold(true);
|
||||||
|
return font;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (role == Qt::CheckStateRole && index.column() == operationColumn )
|
if (role == Qt::TextAlignmentRole && index.column() == packageRevisionColumn)
|
||||||
return m_changeState.contains(p) ? Qt::Checked : Qt::Unchecked;
|
return Qt::AlignHCenter;
|
||||||
|
|
||||||
if (role == Qt::ToolTipRole)
|
if (role == Qt::ToolTipRole)
|
||||||
return QString("%1 - (%2)").arg(p->descriptionText()).arg(p->sdkStylePath());
|
return QString("%1 - (%2)").arg(p->descriptionText()).arg(p->sdkStylePath());
|
||||||
@@ -245,14 +245,14 @@ QHash<int, QByteArray> AndroidSdkModel::roleNames() const
|
|||||||
Qt::ItemFlags AndroidSdkModel::flags(const QModelIndex &index) const
|
Qt::ItemFlags AndroidSdkModel::flags(const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
Qt::ItemFlags f = QAbstractItemModel::flags(index);
|
Qt::ItemFlags f = QAbstractItemModel::flags(index);
|
||||||
if (index.column() == operationColumn)
|
if (index.column() == packageNameColumn)
|
||||||
f |= Qt::ItemIsUserCheckable;
|
f |= Qt::ItemIsUserCheckable;
|
||||||
|
|
||||||
void *ip = index.internalPointer();
|
void *ip = index.internalPointer();
|
||||||
if (ip && index.column() == operationColumn) {
|
if (ip && index.column() == packageNameColumn) {
|
||||||
auto package = static_cast<const AndroidSdkPackage *>(ip);
|
auto package = static_cast<const AndroidSdkPackage *>(ip);
|
||||||
if (package->state() == AndroidSdkPackage::Installed &&
|
if (package->state() == AndroidSdkPackage::Installed
|
||||||
package->type() == AndroidSdkPackage::SdkToolsPackage) {
|
&& package->type() == AndroidSdkPackage::SdkToolsPackage) {
|
||||||
f &= ~Qt::ItemIsEnabled;
|
f &= ~Qt::ItemIsEnabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -264,11 +264,14 @@ bool AndroidSdkModel::setData(const QModelIndex &index, const QVariant &value, i
|
|||||||
void *ip = index.internalPointer();
|
void *ip = index.internalPointer();
|
||||||
if (ip && role == Qt::CheckStateRole) {
|
if (ip && role == Qt::CheckStateRole) {
|
||||||
auto package = static_cast<const AndroidSdkPackage *>(ip);
|
auto package = static_cast<const AndroidSdkPackage *>(ip);
|
||||||
if (value.toInt() == Qt::Checked) {
|
if (value.toInt() == Qt::Checked && package->state() != AndroidSdkPackage::Installed) {
|
||||||
m_changeState << package;
|
m_changeState << package;
|
||||||
emit dataChanged(index, index, {Qt::CheckStateRole});
|
emit dataChanged(index, index, {Qt::CheckStateRole});
|
||||||
} else if (m_changeState.remove(package)) {
|
} else if (m_changeState.remove(package)) {
|
||||||
emit dataChanged(index, index, {Qt::CheckStateRole});
|
emit dataChanged(index, index, {Qt::CheckStateRole});
|
||||||
|
} else if (value.toInt() == Qt::Unchecked) {
|
||||||
|
m_changeState.insert(package);
|
||||||
|
emit dataChanged(index, index, {Qt::CheckStateRole});
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,8 +42,7 @@ public:
|
|||||||
enum PackageColumn {
|
enum PackageColumn {
|
||||||
packageNameColumn = 0,
|
packageNameColumn = 0,
|
||||||
apiLevelColumn,
|
apiLevelColumn,
|
||||||
packageRevisionColumn,
|
packageRevisionColumn
|
||||||
operationColumn
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ExtraRoles {
|
enum ExtraRoles {
|
||||||
|
|||||||
Reference in New Issue
Block a user