Skip to content

Commit

Permalink
GH-2101 POC for inline renaming
Browse files Browse the repository at this point in the history
  • Loading branch information
peterix committed Nov 22, 2018
1 parent c4a4729 commit c214c13
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 26 deletions.
23 changes: 22 additions & 1 deletion api/logic/InstanceList.cpp
Expand Up @@ -95,6 +95,7 @@ QVariant InstanceList::data(const QModelIndex &index, int role) const
{
return pdata->id();
}
case Qt::EditRole:
case Qt::DisplayRole:
{
return pdata->name();
Expand All @@ -118,12 +119,32 @@ QVariant InstanceList::data(const QModelIndex &index, int role) const
return QVariant();
}

bool InstanceList::setData(const QModelIndex& index, const QVariant& value, int role)
{
if (!index.isValid())
{
return false;
}
if(role != Qt::EditRole)
{
return false;
}
BaseInstance *pdata = static_cast<BaseInstance *>(index.internalPointer());
auto newName = value.toString();
if(pdata->name() == newName)
{
return true;
}
pdata->setName(newName);
return true;
}

Qt::ItemFlags InstanceList::flags(const QModelIndex &index) const
{
Qt::ItemFlags f;
if (index.isValid())
{
f |= (Qt::ItemIsEnabled | Qt::ItemIsSelectable);
f |= (Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable);
}
return f;
}
Expand Down
10 changes: 6 additions & 4 deletions api/logic/InstanceList.h
Expand Up @@ -58,10 +58,12 @@ class MULTIMC_LOGIC_EXPORT InstanceList : public QAbstractListModel
virtual ~InstanceList();

public:
QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const;
Qt::ItemFlags flags(const QModelIndex &index) const;
QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override;

bool setData(const QModelIndex & index, const QVariant & value, int role) override;

enum AdditionalRoles
{
Expand Down
16 changes: 3 additions & 13 deletions application/MainWindow.cpp
Expand Up @@ -1091,10 +1091,12 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *ev)
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
switch (keyEvent->key())
{
/*
case Qt::Key_Enter:
case Qt::Key_Return:
activateInstance(m_selectedInstance);
return true;
*/
case Qt::Key_Delete:
on_actionDeleteInstance_triggered();
return true;
Expand Down Expand Up @@ -1639,19 +1641,7 @@ void MainWindow::on_actionRenameInstance_triggered()
{
if (m_selectedInstance)
{
bool ok = false;
QString name(m_selectedInstance->name());
name = QInputDialog::getText(this, tr("Instance name"), tr("Enter a new instance name."), QLineEdit::Normal, name, &ok);

name = name.trimmed();
if (name.length() > 0)
{
if (ok && name.length())
{
m_selectedInstance->setName(name);
ui->renameButton->setText(name);
}
}
view->edit(view->currentIndex());
}
}

Expand Down
22 changes: 18 additions & 4 deletions application/groupview/InstanceDelegate.cpp
Expand Up @@ -19,11 +19,13 @@
#include <QTextLayout>
#include <QApplication>
#include <QtMath>
#include <QDebug>

#include "GroupView.h"
#include "BaseInstance.h"
#include "InstanceList.h"
#include <xdgicon.h>
#include <QPlainTextEdit>

// Origin: Qt
static void viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height,
Expand Down Expand Up @@ -165,8 +167,7 @@ static QSize viewItemTextSize(const QStyleOptionViewItem *option)
textLayout.setTextOption(textOption);
textLayout.setFont(option->font);
textLayout.setText(option->text);
const int textMargin =
style->pixelMetric(QStyle::PM_FocusFrameHMargin, option, option->widget) + 1;
const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin, option, option->widget) + 1;
QRect bounds(0, 0, 100 - 2 * textMargin, 600);
qreal height = 0, widthUsed = 0;
viewItemTextLayout(textLayout, bounds.width(), height, widthUsed);
Expand Down Expand Up @@ -331,8 +332,7 @@ QSize ListViewDelegate::sizeHint(const QStyleOptionViewItem &option,
opt.displayAlignment = Qt::AlignTop | Qt::AlignHCenter;

QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
const int textMargin =
style->pixelMetric(QStyle::PM_FocusFrameHMargin, &option, opt.widget) + 1;
const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin, &option, opt.widget) + 1;
int height = 48 + textMargin * 2 + 5; // TODO: turn constants into variables
QSize szz = viewItemTextSize(&opt);
height += szz.height();
Expand All @@ -341,3 +341,17 @@ QSize ListViewDelegate::sizeHint(const QStyleOptionViewItem &option,
return sz;
}

void ListViewDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
const int iconSize = 48;
QRect textRect = option.rect;
textRect.adjust(0, iconSize + 5, 0, 0);
editor->setGeometry(textRect);
}

QWidget * ListViewDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
auto *le = new QLineEdit(parent);
le->setFrame(false);
return le;
}
15 changes: 11 additions & 4 deletions application/groupview/InstanceDelegate.h
Expand Up @@ -20,11 +20,18 @@

class ListViewDelegate : public QStyledItemDelegate
{
Q_OBJECT

public:
explicit ListViewDelegate(QObject *parent = 0);
virtual ~ListViewDelegate() {}

protected:
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
void updateEditorGeometry(QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const override;
QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const override;
/*
void setEditorData(QWidget * editor, const QModelIndex & index) const override;
void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const override;
*/
};

0 comments on commit c214c13

Please sign in to comment.