@@ -0,0 +1,175 | |||||
|
1 | /*------------------------------------------------------------------------------ | |||
|
2 | -- This file is a part of the SocExplorer Software | |||
|
3 | -- Copyright (C) 2014, Plasma Physics Laboratory - CNRS | |||
|
4 | -- | |||
|
5 | -- This program is free software; you can redistribute it and/or modify | |||
|
6 | -- it under the terms of the GNU General Public License as published by | |||
|
7 | -- the Free Software Foundation; either version 2 of the License, or | |||
|
8 | -- (at your option) any later version. | |||
|
9 | -- | |||
|
10 | -- This program is distributed in the hope that it will be useful, | |||
|
11 | -- but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
12 | -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
13 | -- GNU General Public License for more details. | |||
|
14 | -- | |||
|
15 | -- You should have received a copy of the GNU General Public License | |||
|
16 | -- along with this program; if not, write to the Free Software | |||
|
17 | -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
|
18 | -------------------------------------------------------------------------------*/ | |||
|
19 | /*-- Author : Alexis Jeandet | |||
|
20 | -- Mail : alexis.jeandet@member.fsf.org | |||
|
21 | ----------------------------------------------------------------------------*/ | |||
|
22 | #include "binaryfile.h" | |||
|
23 | #include "srecfile.h" | |||
|
24 | ||||
|
25 | binaryFile::binaryFile() | |||
|
26 | { | |||
|
27 | } | |||
|
28 | ||||
|
29 | binaryFile::binaryFile(const QString &File) | |||
|
30 | { | |||
|
31 | openFile(File); | |||
|
32 | } | |||
|
33 | ||||
|
34 | binaryFile::binaryFile(const QStringList &Files) | |||
|
35 | { | |||
|
36 | openFiles(Files); | |||
|
37 | } | |||
|
38 | ||||
|
39 | binaryFile::~binaryFile() | |||
|
40 | { | |||
|
41 | ||||
|
42 | } | |||
|
43 | ||||
|
44 | bool binaryFile::openFile(const QString &File) | |||
|
45 | { | |||
|
46 | return openFiles(QStringList()<<File); | |||
|
47 | } | |||
|
48 | ||||
|
49 | bool binaryFile::openFiles(const QStringList &Files) | |||
|
50 | { | |||
|
51 | for(int i=0;i<Files.count();i++) | |||
|
52 | { | |||
|
53 | this->p_files.append(new QFile(Files.at(i))); | |||
|
54 | this->p_files.at(i)->open(QIODevice::ReadOnly); | |||
|
55 | loadFile(this->p_files.at(i)); | |||
|
56 | } | |||
|
57 | return true; | |||
|
58 | } | |||
|
59 | ||||
|
60 | bool binaryFile::isopened() | |||
|
61 | { | |||
|
62 | bool opened = true; | |||
|
63 | for(int i=0;i<this->p_files.count();i++) | |||
|
64 | { | |||
|
65 | opened &= p_files.at(i)->isOpen(); | |||
|
66 | } | |||
|
67 | return opened; | |||
|
68 | } | |||
|
69 | ||||
|
70 | int binaryFile::closeFile() | |||
|
71 | { | |||
|
72 | for(int i=0;i<p_files.count();i++) | |||
|
73 | { | |||
|
74 | delete p_files.at(i); | |||
|
75 | for(int j=0;j<p_fragments.count();j++) | |||
|
76 | { | |||
|
77 | if(p_fragments.at(j)->header == p_files.at(i)->fileName()) | |||
|
78 | { | |||
|
79 | codeFragment* fragment = p_fragments.at(j); | |||
|
80 | p_fragments.removeAt(j); | |||
|
81 | delete fragment; | |||
|
82 | } | |||
|
83 | } | |||
|
84 | } | |||
|
85 | p_files.clear(); | |||
|
86 | p_fileName.clear(); | |||
|
87 | return 0; | |||
|
88 | } | |||
|
89 | ||||
|
90 | QList<codeFragment *> binaryFile::getFragments() | |||
|
91 | { | |||
|
92 | return p_fragments; | |||
|
93 | } | |||
|
94 | ||||
|
95 | int binaryFile::getFragmentsCount() | |||
|
96 | { | |||
|
97 | return p_fragments.count(); | |||
|
98 | } | |||
|
99 | ||||
|
100 | int binaryFile::getFragmentAddress(int index) | |||
|
101 | { | |||
|
102 | if((index>=0)&&(index<p_fragments.count())) | |||
|
103 | return p_fragments.at(index)->address; | |||
|
104 | return 0; | |||
|
105 | } | |||
|
106 | ||||
|
107 | int binaryFile::getFragmentSize(int index) | |||
|
108 | { | |||
|
109 | if((index>=0)&&(index<p_fragments.count())) | |||
|
110 | return p_fragments.at(index)->size; | |||
|
111 | return 0; | |||
|
112 | } | |||
|
113 | ||||
|
114 | QString binaryFile::getFragmentHeader(int index) | |||
|
115 | { | |||
|
116 | if((index>=0)&&(index<p_fragments.count())) | |||
|
117 | return p_fragments.at(index)->header; | |||
|
118 | return ""; | |||
|
119 | } | |||
|
120 | ||||
|
121 | codeFragment *binaryFile::getFragment(int index) | |||
|
122 | { | |||
|
123 | if((index>=0)&&(index<p_fragments.count())) | |||
|
124 | return p_fragments.at(index); | |||
|
125 | return NULL; | |||
|
126 | } | |||
|
127 | ||||
|
128 | bool binaryFile::getFragmentData(int index, char **buffer) | |||
|
129 | { | |||
|
130 | if((index>=0)&&(index<p_fragments.count())) | |||
|
131 | { | |||
|
132 | *buffer = p_fragments.at(index)->data; | |||
|
133 | return true; | |||
|
134 | } | |||
|
135 | return false; | |||
|
136 | } | |||
|
137 | ||||
|
138 | bool binaryFile::toSrec(const QString &fileName) | |||
|
139 | { | |||
|
140 | srecFile::toSrec(p_fragments,fileName); | |||
|
141 | } | |||
|
142 | ||||
|
143 | bool binaryFile::toBinary(const QString &fileName) | |||
|
144 | { | |||
|
145 | toBinary(p_fragments,fileName); | |||
|
146 | } | |||
|
147 | ||||
|
148 | bool binaryFile::toBinary(QList<codeFragment *> fragments, const QString &File) | |||
|
149 | { | |||
|
150 | QFile file(File); | |||
|
151 | file.open(QIODevice::WriteOnly); | |||
|
152 | if(file.isOpen()) | |||
|
153 | { | |||
|
154 | for(int i=0;i<fragments.count();i++) | |||
|
155 | { | |||
|
156 | file.write(fragments.at(i)->data,fragments.at(i)->size); | |||
|
157 | } | |||
|
158 | return true; | |||
|
159 | } | |||
|
160 | return false; | |||
|
161 | } | |||
|
162 | ||||
|
163 | void binaryFile::loadFile(QFile *file) | |||
|
164 | { | |||
|
165 | if (file->isOpen()) | |||
|
166 | { | |||
|
167 | codeFragment* fragment = new codeFragment(); | |||
|
168 | fragment->header = file->fileName(); | |||
|
169 | fragment->address = 0; | |||
|
170 | fragment->size = file->size(); | |||
|
171 | fragment->data = (char*)malloc(file->size()); | |||
|
172 | file->read(fragment->data,file->size()); | |||
|
173 | p_fragments.append(fragment); | |||
|
174 | } | |||
|
175 | } |
@@ -0,0 +1,64 | |||||
|
1 | /*------------------------------------------------------------------------------ | |||
|
2 | -- This file is a part of the SocExplorer Software | |||
|
3 | -- Copyright (C) 2014, Plasma Physics Laboratory - CNRS | |||
|
4 | -- | |||
|
5 | -- This program is free software; you can redistribute it and/or modify | |||
|
6 | -- it under the terms of the GNU General Public License as published by | |||
|
7 | -- the Free Software Foundation; either version 2 of the License, or | |||
|
8 | -- (at your option) any later version. | |||
|
9 | -- | |||
|
10 | -- This program is distributed in the hope that it will be useful, | |||
|
11 | -- but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
12 | -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
13 | -- GNU General Public License for more details. | |||
|
14 | -- | |||
|
15 | -- You should have received a copy of the GNU General Public License | |||
|
16 | -- along with this program; if not, write to the Free Software | |||
|
17 | -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
|
18 | -------------------------------------------------------------------------------*/ | |||
|
19 | /*-- Author : Alexis Jeandet | |||
|
20 | -- Mail : alexis.jeandet@member.fsf.org | |||
|
21 | ----------------------------------------------------------------------------*/ | |||
|
22 | #ifndef BINARYFILE_H | |||
|
23 | #define BINARYFILE_H | |||
|
24 | #include "abstractbinfile.h" | |||
|
25 | #include <QObject> | |||
|
26 | #include <QString> | |||
|
27 | #include <QList> | |||
|
28 | #include <QStringList> | |||
|
29 | #include <QFile> | |||
|
30 | ||||
|
31 | class binaryFile : public abstractBinFile | |||
|
32 | { | |||
|
33 | Q_OBJECT | |||
|
34 | public: | |||
|
35 | explicit binaryFile(); | |||
|
36 | binaryFile(const QString& File); | |||
|
37 | binaryFile(const QStringList& Files); | |||
|
38 | ~binaryFile(); | |||
|
39 | bool openFile(const QString& File); | |||
|
40 | bool openFiles(const QStringList& Files); | |||
|
41 | bool isopened(); | |||
|
42 | int closeFile(); | |||
|
43 | QList<codeFragment*> getFragments(); | |||
|
44 | int getFragmentsCount(); | |||
|
45 | int getFragmentAddress(int index); | |||
|
46 | int getFragmentSize(int index); | |||
|
47 | QString getFragmentHeader(int index); | |||
|
48 | codeFragment* getFragment(int index); | |||
|
49 | bool getFragmentData(int index, char **buffer); | |||
|
50 | bool toSrec(const QString& fileName); | |||
|
51 | bool toBinary(const QString& fileName); | |||
|
52 | static bool toBinary(QList<codeFragment*> fragments,const QString& File); | |||
|
53 | signals: | |||
|
54 | ||||
|
55 | public slots: | |||
|
56 | ||||
|
57 | private: | |||
|
58 | void loadFile(QFile *file); | |||
|
59 | QStringList p_fileNames; | |||
|
60 | QList<QFile*>p_files; | |||
|
61 | QList<codeFragment*> p_fragments; | |||
|
62 | }; | |||
|
63 | ||||
|
64 | #endif // BINARYFILE_H |
@@ -0,0 +1,150 | |||||
|
1 | #include "binaryfilewidget.h" | |||
|
2 | #include "ui_binaryfilewidget.h" | |||
|
3 | #include "qtablewidgetintitem.h" | |||
|
4 | #include <QtWidgets/QTableWidget> | |||
|
5 | #include <QtWidgets/QFileDialog> | |||
|
6 | #include "srecfile.h" | |||
|
7 | ||||
|
8 | binaryFileWidget::binaryFileWidget(QWidget *parent) : | |||
|
9 | abstractBinFileWidget(parent), | |||
|
10 | ui(new Ui::binaryFileWidget) | |||
|
11 | { | |||
|
12 | ui->setupUi(this); | |||
|
13 | connect(this->ui->fragmentList,SIGNAL(cellActivated(int,int)),this,SLOT(fragmentCellActivated(int,int))); | |||
|
14 | connect(this->ui->fragmentList,SIGNAL(cellChanged(int,int)),this,SLOT(fragmentCellChanged(int,int))); | |||
|
15 | exportToSREC_action = new QAction(tr("Export to SREC"),this); | |||
|
16 | exportToBIN_action = new QAction(tr("Export to Binary"),this); | |||
|
17 | this->ui->fragmentList->addAction(exportToBIN_action); | |||
|
18 | this->ui->fragmentList->addAction(exportToSREC_action); | |||
|
19 | connect(this->exportToBIN_action,SIGNAL(triggered()),this,SLOT(exportToBIN())); | |||
|
20 | connect(this->exportToSREC_action,SIGNAL(triggered()),this,SLOT(exportToSREC())); | |||
|
21 | } | |||
|
22 | ||||
|
23 | binaryFileWidget::~binaryFileWidget() | |||
|
24 | { | |||
|
25 | delete ui; | |||
|
26 | } | |||
|
27 | ||||
|
28 | void binaryFileWidget::setFile(abstractBinFile *file) | |||
|
29 | { | |||
|
30 | this->p_binfile = (binaryFile*)file; | |||
|
31 | if(p_binfile->isopened()) | |||
|
32 | { | |||
|
33 | reloadFile(); | |||
|
34 | } | |||
|
35 | } | |||
|
36 | ||||
|
37 | void binaryFileWidget::reloadFile() | |||
|
38 | { | |||
|
39 | this->ui->fragmentList->clear(); | |||
|
40 | this->ui->fragmentList->setRowCount(p_binfile->getFragmentsCount()); | |||
|
41 | this->ui->fragmentList->setHorizontalHeaderLabels(QStringList()<<"File"<<"Size"<<"Address"); | |||
|
42 | for(int i=0;i<p_binfile->getFragmentsCount();i++) | |||
|
43 | { | |||
|
44 | QTableWidgetItem *newItem = new QTableWidgetItem(p_binfile->getFragmentHeader(i)); | |||
|
45 | newItem->setFlags(newItem->flags() ^ Qt::ItemIsEditable); | |||
|
46 | this->ui->fragmentList->setItem(i, 0, newItem); | |||
|
47 | ||||
|
48 | newItem = (QTableWidgetItem*)new QTableWidgetIntItem(QString("%1").arg(p_binfile->getFragmentSize(i)),DecimalItem); | |||
|
49 | newItem->setFlags(newItem->flags() ^ Qt::ItemIsEditable); | |||
|
50 | this->ui->fragmentList->setItem(i, 1, newItem); | |||
|
51 | ||||
|
52 | newItem = (QTableWidgetItem*)new QTableWidgetIntItem(QString("0x%1").arg(p_binfile->getFragmentAddress(i),8,16).replace(" ","0"),HexaDecimalItem); | |||
|
53 | // newItem->setFlags(newItem->flags() ^ Qt::ItemIsEditable); | |||
|
54 | this->ui->fragmentList->setItem(i, 2, newItem); | |||
|
55 | ||||
|
56 | } | |||
|
57 | this->ui->fragmentList->resizeColumnsToContents(); | |||
|
58 | } | |||
|
59 | ||||
|
60 | void binaryFileWidget::fragmentCellActivated(int row, int column) | |||
|
61 | { | |||
|
62 | Q_UNUSED(column) | |||
|
63 | char* buff=NULL; | |||
|
64 | int index = this->ui->fragmentList->item(row,0)->text().toInt(); | |||
|
65 | if(index!=-1) | |||
|
66 | { | |||
|
67 | this->p_binfile->getFragmentData(index,&buff); | |||
|
68 | this->ui->hexViewer->setData(QByteArray(buff,this->p_binfile->getFragmentSize(index))); | |||
|
69 | this->ui->hexViewer->setAddressOffset(this->p_binfile->getFragmentAddress(index)); | |||
|
70 | } | |||
|
71 | } | |||
|
72 | ||||
|
73 | void binaryFileWidget::fragmentCellChanged(int row, int column) | |||
|
74 | { | |||
|
75 | if(column==2) | |||
|
76 | { | |||
|
77 | QString newAddressStr = this->ui->fragmentList->item(row,column)->text(); | |||
|
78 | int newAddress = 0; | |||
|
79 | newAddressStr.remove(" "); | |||
|
80 | if(newAddressStr.at(0)=='0' && newAddressStr.at(1)=='x') | |||
|
81 | { | |||
|
82 | newAddress = newAddressStr.remove("0x").toUInt(0,16); | |||
|
83 | } | |||
|
84 | else | |||
|
85 | { | |||
|
86 | newAddress = newAddressStr.toUInt(); | |||
|
87 | } | |||
|
88 | this->p_binfile->getFragments().at(row)->address = newAddress; | |||
|
89 | } | |||
|
90 | } | |||
|
91 | ||||
|
92 | void binaryFileWidget::exportToSREC() | |||
|
93 | { | |||
|
94 | QList<codeFragment *> SelectedFragmentsList=getSelectedFragments(); | |||
|
95 | if(SelectedFragmentsList.count()>0) | |||
|
96 | { | |||
|
97 | QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), | |||
|
98 | NULL, | |||
|
99 | tr("SREC Files (*.srec)")); | |||
|
100 | if(!fileName.isEmpty()) | |||
|
101 | { | |||
|
102 | srecFile::toSrec(SelectedFragmentsList,fileName); | |||
|
103 | } | |||
|
104 | } | |||
|
105 | } | |||
|
106 | ||||
|
107 | void binaryFileWidget::exportToBIN() | |||
|
108 | { | |||
|
109 | QList<codeFragment *> SelectedFragmentsList=getSelectedFragments(); | |||
|
110 | if(SelectedFragmentsList.count()>0) | |||
|
111 | { | |||
|
112 | QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), | |||
|
113 | NULL, | |||
|
114 | tr("Binary Files (*.bin)")); | |||
|
115 | if(!fileName.isEmpty()) | |||
|
116 | { | |||
|
117 | binaryFile::toBinary(SelectedFragmentsList,fileName); | |||
|
118 | } | |||
|
119 | } | |||
|
120 | } | |||
|
121 | ||||
|
122 | QStringList binaryFileWidget::getSelectedFilesNames() | |||
|
123 | { | |||
|
124 | QStringList SelectedFilesList; | |||
|
125 | QList<QTableWidgetItem*> items = this->ui->fragmentList->selectedItems(); | |||
|
126 | for(int i=0;i<items.count();i++) | |||
|
127 | { | |||
|
128 | QString file = p_binfile->getFragmentHeader(items.at(i)->row()); | |||
|
129 | if(!SelectedFilesList.contains(file)) | |||
|
130 | { | |||
|
131 | SelectedFilesList.append(file); | |||
|
132 | } | |||
|
133 | } | |||
|
134 | return SelectedFilesList; | |||
|
135 | } | |||
|
136 | ||||
|
137 | QList<codeFragment *> binaryFileWidget::getSelectedFragments() | |||
|
138 | { | |||
|
139 | QList<codeFragment *> SelectedFragmentsList; | |||
|
140 | QList<QTableWidgetItem*> items = this->ui->fragmentList->selectedItems(); | |||
|
141 | for(int i=0;i<items.count();i++) | |||
|
142 | { | |||
|
143 | codeFragment * fragment = p_binfile->getFragment(items.at(i)->row()); | |||
|
144 | if(!SelectedFragmentsList.contains(fragment)) | |||
|
145 | { | |||
|
146 | SelectedFragmentsList.append(fragment); | |||
|
147 | } | |||
|
148 | } | |||
|
149 | return SelectedFragmentsList; | |||
|
150 | } |
@@ -0,0 +1,60 | |||||
|
1 | /*------------------------------------------------------------------------------ | |||
|
2 | -- This file is a part of the SocExplorer Software | |||
|
3 | -- Copyright (C) 2014, Plasma Physics Laboratory - CNRS | |||
|
4 | -- | |||
|
5 | -- This program is free software; you can redistribute it and/or modify | |||
|
6 | -- it under the terms of the GNU General Public License as published by | |||
|
7 | -- the Free Software Foundation; either version 2 of the License, or | |||
|
8 | -- (at your option) any later version. | |||
|
9 | -- | |||
|
10 | -- This program is distributed in the hope that it will be useful, | |||
|
11 | -- but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
12 | -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
13 | -- GNU General Public License for more details. | |||
|
14 | -- | |||
|
15 | -- You should have received a copy of the GNU General Public License | |||
|
16 | -- along with this program; if not, write to the Free Software | |||
|
17 | -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
|
18 | -------------------------------------------------------------------------------*/ | |||
|
19 | /*-- Author : Alexis Jeandet | |||
|
20 | -- Mail : alexis.jeandet@member.fsf.org | |||
|
21 | ----------------------------------------------------------------------------*/ | |||
|
22 | #ifndef BINARYFILEWIDGET_H | |||
|
23 | #define BINARYFILEWIDGET_H | |||
|
24 | ||||
|
25 | #include <QWidget> | |||
|
26 | #include "binaryfile.h" | |||
|
27 | #include <QAction> | |||
|
28 | ||||
|
29 | namespace Ui { | |||
|
30 | class binaryFileWidget; | |||
|
31 | } | |||
|
32 | ||||
|
33 | class binaryFileWidget : public abstractBinFileWidget | |||
|
34 | { | |||
|
35 | Q_OBJECT | |||
|
36 | ||||
|
37 | public: | |||
|
38 | explicit binaryFileWidget(QWidget *parent = 0); | |||
|
39 | ~binaryFileWidget(); | |||
|
40 | ||||
|
41 | public slots: | |||
|
42 | void setFile(abstractBinFile* file); | |||
|
43 | void reloadFile(); | |||
|
44 | ||||
|
45 | private slots: | |||
|
46 | void fragmentCellActivated(int row, int column); | |||
|
47 | void fragmentCellChanged(int row, int column); | |||
|
48 | void exportToSREC(); | |||
|
49 | void exportToBIN(); | |||
|
50 | ||||
|
51 | private: | |||
|
52 | QStringList getSelectedFilesNames(); | |||
|
53 | QList<codeFragment *> getSelectedFragments(); | |||
|
54 | Ui::binaryFileWidget *ui; | |||
|
55 | binaryFile* p_binfile; | |||
|
56 | QAction* exportToSREC_action; | |||
|
57 | QAction* exportToBIN_action; | |||
|
58 | }; | |||
|
59 | ||||
|
60 | #endif // BINARYFILEWIDGET_H |
@@ -0,0 +1,64 | |||||
|
1 | <?xml version="1.0" encoding="UTF-8"?> | |||
|
2 | <ui version="4.0"> | |||
|
3 | <class>binaryFileWidget</class> | |||
|
4 | <widget class="QWidget" name="binaryFileWidget"> | |||
|
5 | <property name="geometry"> | |||
|
6 | <rect> | |||
|
7 | <x>0</x> | |||
|
8 | <y>0</y> | |||
|
9 | <width>637</width> | |||
|
10 | <height>342</height> | |||
|
11 | </rect> | |||
|
12 | </property> | |||
|
13 | <property name="windowTitle"> | |||
|
14 | <string>Form</string> | |||
|
15 | </property> | |||
|
16 | <layout class="QGridLayout" name="gridLayout"> | |||
|
17 | <item row="0" column="0"> | |||
|
18 | <widget class="QSplitter" name="splitter"> | |||
|
19 | <property name="orientation"> | |||
|
20 | <enum>Qt::Horizontal</enum> | |||
|
21 | </property> | |||
|
22 | <widget class="QHexEdit" name="hexViewer" native="true"> | |||
|
23 | <property name="minimumSize"> | |||
|
24 | <size> | |||
|
25 | <width>200</width> | |||
|
26 | <height>0</height> | |||
|
27 | </size> | |||
|
28 | </property> | |||
|
29 | </widget> | |||
|
30 | <widget class="QTableWidget" name="fragmentList"> | |||
|
31 | <property name="contextMenuPolicy"> | |||
|
32 | <enum>Qt::ActionsContextMenu</enum> | |||
|
33 | </property> | |||
|
34 | <column> | |||
|
35 | <property name="text"> | |||
|
36 | <string>File</string> | |||
|
37 | </property> | |||
|
38 | </column> | |||
|
39 | <column> | |||
|
40 | <property name="text"> | |||
|
41 | <string>Size</string> | |||
|
42 | </property> | |||
|
43 | </column> | |||
|
44 | <column> | |||
|
45 | <property name="text"> | |||
|
46 | <string>Address</string> | |||
|
47 | </property> | |||
|
48 | </column> | |||
|
49 | </widget> | |||
|
50 | </widget> | |||
|
51 | </item> | |||
|
52 | </layout> | |||
|
53 | </widget> | |||
|
54 | <customwidgets> | |||
|
55 | <customwidget> | |||
|
56 | <class>QHexEdit</class> | |||
|
57 | <extends>QWidget</extends> | |||
|
58 | <header location="global">qhexedit.h</header> | |||
|
59 | <container>1</container> | |||
|
60 | </customwidget> | |||
|
61 | </customwidgets> | |||
|
62 | <resources/> | |||
|
63 | <connections/> | |||
|
64 | </ui> |
General Comments 0
You need to be logged in to leave comments.
Login now