added browsing history

This commit is contained in:
Miodrag Milanovic 2018-07-15 16:20:35 +02:00
parent 3eb34bf38b
commit 82c9fef3de
2 changed files with 61 additions and 0 deletions

View File

@ -88,18 +88,42 @@ DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr), net
actionFirst = new QAction("", this);
actionFirst->setIcon(QIcon(":/icons/resources/resultset_first.png"));
actionFirst->setEnabled(false);
connect(actionFirst, &QAction::triggered, this, [this] {
history_ignore = true;
history_index = 0;
treeWidget->setCurrentItem(history.at(history_index));
updateButtons();
});
actionPrev = new QAction("", this);
actionPrev->setIcon(QIcon(":/icons/resources/resultset_previous.png"));
actionPrev->setEnabled(false);
connect(actionPrev, &QAction::triggered, this, [this] {
history_ignore = true;
history_index--;
treeWidget->setCurrentItem(history.at(history_index));
updateButtons();
});
actionNext = new QAction("", this);
actionNext->setIcon(QIcon(":/icons/resources/resultset_next.png"));
actionNext->setEnabled(false);
connect(actionNext, &QAction::triggered, this, [this] {
history_ignore = true;
history_index++;
treeWidget->setCurrentItem(history.at(history_index));
updateButtons();
});
actionLast = new QAction("", this);
actionLast->setIcon(QIcon(":/icons/resources/resultset_last.png"));
actionLast->setEnabled(false);
connect(actionLast, &QAction::triggered, this, [this] {
history_ignore = true;
history_index = int(history.size() - 1);
treeWidget->setCurrentItem(history.at(history_index));
updateButtons();
});
QToolBar *toolbar = new QToolBar();
toolbar->addAction(actionFirst);
@ -148,13 +172,43 @@ DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr), net
connect(propertyEditor->treeWidget(), &QTreeWidget::itemDoubleClicked, this, &DesignWidget::onItemDoubleClicked);
connect(treeWidget, SIGNAL(itemSelectionChanged()), SLOT(onItemSelectionChanged()));
history_index = -1;
history_ignore = false;
}
DesignWidget::~DesignWidget() {}
void DesignWidget::updateButtons()
{
int count = int(history.size());
actionFirst->setEnabled(history_index > 0);
actionPrev->setEnabled(history_index > 0);
actionNext->setEnabled(history_index < (count - 1));
actionLast->setEnabled(history_index < (count - 1));
}
void DesignWidget::addToHistory(QTreeWidgetItem *item)
{
if (!history_ignore) {
int count = int(history.size());
for (int i = count - 1; i > history_index; i--)
history.pop_back();
history.push_back(item);
history_index++;
}
history_ignore = false;
updateButtons();
}
void DesignWidget::newContext(Context *ctx)
{
treeWidget->clear();
history_ignore = false;
history_index = -1;
history.clear();
updateButtons();
for (int i = 0; i < 6; i++)
nameToItem[i].clear();
@ -444,6 +498,8 @@ void DesignWidget::onItemSelectionChanged()
std::vector<DecalXY> decals;
addToHistory(clickItem);
clearProperties();
if (type == ElementType::BEL) {
IdString c = static_cast<IdStringTreeItem *>(clickItem)->getData();

View File

@ -57,6 +57,8 @@ class DesignWidget : public QWidget
QString getElementTypeName(ElementType type);
ElementType getElementTypeByName(QString type);
int getElementIndex(ElementType type);
void updateButtons();
void addToHistory(QTreeWidgetItem *item);
Q_SIGNALS:
void info(std::string text);
void selected(std::vector<DecalXY> decal);
@ -86,6 +88,9 @@ class DesignWidget : public QWidget
QMap<QString, QtProperty *> idToProperty;
QMap<QString, QTreeWidgetItem *> nameToItem[6];
std::vector<QTreeWidgetItem *> history;
int history_index;
bool history_ignore;
QTreeWidgetItem *nets_root;
QTreeWidgetItem *cells_root;