summaryrefslogtreecommitdiff
path: root/utils/regtools
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-05-02 00:32:41 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2014-05-11 19:54:48 +0200
commitdc869e70acaadb7ef2d96101fe8e938d53f18e65 (patch)
treef3a3b73c239d3e3baee26e48a0183fd767f23cbd /utils/regtools
parent8d0d3cb6f5528811fabde7e08c876723febe0a0d (diff)
qeditor: add support for deletion of items
Change-Id: I886e15585bd3bfed3303e4b845cd8960a9461277
Diffstat (limited to 'utils/regtools')
-rw-r--r--utils/regtools/lib/soc_desc.hpp8
-rw-r--r--utils/regtools/qeditor/main.cpp1
-rw-r--r--utils/regtools/qeditor/mainwindow.cpp13
-rw-r--r--utils/regtools/qeditor/qeditor.pro4
-rw-r--r--utils/regtools/qeditor/regedit.cpp82
-rw-r--r--utils/regtools/qeditor/regedit.h1
6 files changed, 102 insertions, 7 deletions
diff --git a/utils/regtools/lib/soc_desc.hpp b/utils/regtools/lib/soc_desc.hpp
index d9dbf0cc20..4aa8c975ac 100644
--- a/utils/regtools/lib/soc_desc.hpp
+++ b/utils/regtools/lib/soc_desc.hpp
@@ -45,6 +45,14 @@
* ignores the position of the WORD_LENGTH field in the register.
*/
+#define SOCDESC_VERSION_MAJOR 1
+#define SOCDESC_VERSION_MINOR 1
+#define SOCDESC_VERSION_REV 0
+
+#define SOCDESC_VERSION__(maj,min,rev) #maj"."#min"."#rev
+#define SOCDESC_VERSION_(maj,min,rev) SOCDESC_VERSION__(maj,min,rev)
+#define SOCDESC_VERSION SOCDESC_VERSION_(SOCDESC_VERSION_MAJOR,SOCDESC_VERSION_MINOR,SOCDESC_VERSION_REV)
+
/**
* Typedef for SoC types: word, address and flags */
typedef uint32_t soc_addr_t;
diff --git a/utils/regtools/qeditor/main.cpp b/utils/regtools/qeditor/main.cpp
index 576d3a16fc..c1f8df66d6 100644
--- a/utils/regtools/qeditor/main.cpp
+++ b/utils/regtools/qeditor/main.cpp
@@ -5,6 +5,7 @@
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
+ app.setApplicationVersion(APP_VERSION);
Backend backend;;
QDir dir(QCoreApplication::applicationDirPath());
diff --git a/utils/regtools/qeditor/mainwindow.cpp b/utils/regtools/qeditor/mainwindow.cpp
index cd0926851c..1a88ebb47e 100644
--- a/utils/regtools/qeditor/mainwindow.cpp
+++ b/utils/regtools/qeditor/mainwindow.cpp
@@ -97,7 +97,18 @@ void MainWindow::OnQuit()
void MainWindow::OnAbout()
{
- QMessageBox::about(this, "About", "Written by Amaury Pouly for Rockbox");
+ QMessageBox::about(this, "About",
+ "<h1>QEditor</h1>"
+ "<h2>Version "APP_VERSION"</h2>"
+ "<p>Written by Amaury Pouly</p>"
+ "<p>Libraries:</p>"
+ "<ul><li>soc_desc: "SOCDESC_VERSION"</li>"
+#ifdef HAVE_HWSTUB
+ "<li>hwstub: "HWSTUB_VERSION"</li>"
+#else
+ "<li>hwstub: not compiled in</li>"
+#endif
+ "</ul>");
}
void MainWindow::OnAboutQt()
diff --git a/utils/regtools/qeditor/qeditor.pro b/utils/regtools/qeditor/qeditor.pro
index 38d7c987bf..279b3532c0 100644
--- a/utils/regtools/qeditor/qeditor.pro
+++ b/utils/regtools/qeditor/qeditor.pro
@@ -7,6 +7,10 @@ SOURCES += main.cpp mainwindow.cpp regtab.cpp backend.cpp analyser.cpp \
LIBS += -L../lib/ -lsocdesc -lxml2
INCLUDEPATH += ../lib/ ../../hwstub/lib
+VERSION = 2.0.1
+
+DEFINES += APP_VERSION=\\\"$$VERSION\\\"
+
unix {
!nohwstub {
message("Use 'qmake -config nohwstub' if you want to disable hwstub support")
diff --git a/utils/regtools/qeditor/regedit.cpp b/utils/regtools/qeditor/regedit.cpp
index 5e498ce496..bb1abc0825 100644
--- a/utils/regtools/qeditor/regedit.cpp
+++ b/utils/regtools/qeditor/regedit.cpp
@@ -206,6 +206,7 @@ void DevEditPanel::OnInstActivated(int row, int column)
{
m_ref.GetDev().addr.erase(m_ref.GetDev().addr.begin() + row);
m_instances_table->removeRow(row);
+ emit OnModified(true);
}
else if(type == DevInstNewType)
{
@@ -526,6 +527,7 @@ void RegEditPanel::OnInstActivated(int row, int column)
{
m_ref.GetReg().addr.erase(m_ref.GetReg().addr.begin() + row);
m_instances_table->removeRow(row);
+ emit OnModified(true);
}
else if(type == RegInstNewType)
{
@@ -729,6 +731,7 @@ void FieldEditPanel::OnValueActivated(int row, int column)
{
m_ref.GetField().value.erase(m_ref.GetField().value.begin() + row);
m_value_table->removeRow(row);
+ emit OnModified(true);
}
else if(type == FieldValueNewType)
{
@@ -921,6 +924,11 @@ RegEdit::RegEdit(Backend *backend, QWidget *parent)
m_soc_tree = new QTreeWidget(this);
m_soc_tree->setColumnCount(1);
m_soc_tree->setHeaderLabel(QString("Name"));
+ m_soc_tree->setContextMenuPolicy(Qt::ActionsContextMenu);
+ QAction *soc_tree_delete_action = new QAction("&Delete", this);
+ soc_tree_delete_action->setIcon(QIcon::fromTheme("list-remove"));
+ connect(soc_tree_delete_action, SIGNAL(triggered()), this, SLOT(OnSocItemDelete()));
+ m_soc_tree->addAction(soc_tree_delete_action);
m_splitter->addWidget(m_soc_tree);
m_splitter->setStretchFactor(0, 0);
@@ -962,12 +970,11 @@ bool RegEdit::CloseSoc()
{
if(!m_modified)
return true;
- QMessageBox msgBox;
- msgBox.setText("The description has been modified.");
- msgBox.setInformativeText("Do you want to save your changes?");
- msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
- msgBox.setDefaultButton(QMessageBox::Save);
- int ret = msgBox.exec();
+ QMessageBox msgbox(QMessageBox::Question, "Save changes ?",
+ "The description has been modified. Do you want to save your changes ?",
+ QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, this);
+ msgbox.setDefaultButton(QMessageBox::Cancel);
+ int ret = msgbox.exec();
if(ret == QMessageBox::Discard)
return true;
if(ret == QMessageBox::Cancel)
@@ -1188,6 +1195,66 @@ void RegEdit::SetModified(bool add, bool mod)
emit OnModified(mod);
}
+namespace
+{
+
+template< typename T >
+void my_remove_at(std::vector< T >& v, size_t at)
+{
+ v.erase(v.begin() + at);
+}
+
+}
+
+void RegEdit::OnSocItemDelete()
+{
+ QTreeWidgetItem *current = m_soc_tree->currentItem();
+ if(current == 0)
+ return;
+ QMessageBox msgbox(QMessageBox::Question, "Delete item ?",
+ "Are you sure you want to delete this item ?",
+ QMessageBox::Yes | QMessageBox::No, this);
+ msgbox.setDefaultButton(QMessageBox::No);
+ int ret = msgbox.exec();
+ if(ret != QMessageBox::Yes)
+ return;
+ if(current->type() == SocTreeSocType)
+ {
+ SocTreeItem *item = dynamic_cast< SocTreeItem * >(current);
+ item->GetRef().GetSoc().dev.clear();
+ item->takeChildren();
+ FillSocTreeItem(item);
+ m_soc_tree->expandItem(item);
+ }
+ else if(current->type() == SocTreeDevType)
+ {
+ DevTreeItem *item = dynamic_cast< DevTreeItem * >(current);
+ my_remove_at(item->GetRef().GetSoc().dev, item->GetRef().GetDevIndex());
+ QTreeWidgetItem *parent = item->parent();
+ parent->takeChildren();
+ FillSocTreeItem(parent);
+ m_soc_tree->expandItem(parent);
+ }
+ else if(current->type() == SocTreeRegType)
+ {
+ RegTreeItem *item = dynamic_cast< RegTreeItem * >(current);
+ my_remove_at(item->GetRef().GetDev().reg, item->GetRef().GetRegIndex());
+ QTreeWidgetItem *parent = item->parent();
+ parent->takeChildren();
+ FillDevTreeItem(parent);
+ m_soc_tree->expandItem(parent);
+ }
+ else if(current->type() == SocTreeFieldType)
+ {
+ FieldTreeItem *item = dynamic_cast< FieldTreeItem * >(current);
+ my_remove_at(item->GetRef().GetReg().field, item->GetRef().GetFieldIndex());
+ QTreeWidgetItem *parent = item->parent();
+ parent->takeChildren();
+ FillRegTreeItem(parent);
+ m_soc_tree->expandItem(parent);
+ }
+}
+
void RegEdit::OnSocModified(bool modified)
{
// we might need to update the name in the tree
@@ -1293,6 +1360,7 @@ void RegEdit::AddDevice(QTreeWidgetItem *_item)
item->parent()->insertChild(item->parent()->indexOfChild(item), dev_item);
CreateNewRegisterItem(dev_item);
m_soc_tree->setCurrentItem(dev_item);
+ emit OnModified(true);
}
void RegEdit::AddRegister(QTreeWidgetItem *_item)
@@ -1305,6 +1373,7 @@ void RegEdit::AddRegister(QTreeWidgetItem *_item)
item->parent()->insertChild(item->parent()->indexOfChild(item), reg_item);
CreateNewFieldItem(reg_item);
m_soc_tree->setCurrentItem(reg_item);
+ emit OnModified(true);
}
void RegEdit::AddField(QTreeWidgetItem *_item)
@@ -1316,6 +1385,7 @@ void RegEdit::AddField(QTreeWidgetItem *_item)
FixupEmptyItem(field_item);
item->parent()->insertChild(item->parent()->indexOfChild(item), field_item);
m_soc_tree->setCurrentItem(field_item);
+ emit OnModified(true);
}
bool RegEdit::Quit()
diff --git a/utils/regtools/qeditor/regedit.h b/utils/regtools/qeditor/regedit.h
index 8615816783..b5ccd249fa 100644
--- a/utils/regtools/qeditor/regedit.h
+++ b/utils/regtools/qeditor/regedit.h
@@ -238,6 +238,7 @@ protected slots:
void OnSaveAs();
void OnSocModified(bool modified);
void OnNew();
+ void OnSocItemDelete();
protected:
void LoadSocFile(const QString& filename);