summaryrefslogtreecommitdiffstats
path: root/src/devices/gui/memory_editor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/gui/memory_editor.h')
-rw-r--r--src/devices/gui/memory_editor.h156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/devices/gui/memory_editor.h b/src/devices/gui/memory_editor.h
new file mode 100644
index 0000000..9836261
--- /dev/null
+++ b/src/devices/gui/memory_editor.h
@@ -0,0 +1,156 @@
+/***************************************************************************
+ * Copyright (C) 2006 Nicolas Hadacek <hadacek@kde.org> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ ***************************************************************************/
+#ifndef MEMORY_EDITOR_H
+#define MEMORY_EDITOR_H
+
+#include <qframe.h>
+#include <qscrollbar.h>
+#include <qlabel.h>
+#include "common/common/qflags.h"
+#include "common/common/bitvalue.h"
+class QVBoxLayout;
+class QHBoxLayout;
+class QHBox;
+class KAction;
+class PopupButton;
+
+namespace Device
+{
+class HexView;
+class HexWordEditor;
+class Memory;
+
+enum Action { Clear = 0, Zero, ChecksumCheck, Reload,
+ Program, Verify, Read, Erase, BlankCheck, Nb_Actions };
+enum ActionProperty { NoProperty = 0, SeparatorAfter = 1, NeedProgrammer = 2,
+ NeedWrite = 4, NeedModified = 8 };
+Q_DECLARE_FLAGS(ActionProperties, ActionProperty)
+Q_DECLARE_OPERATORS_FOR_FLAGS(ActionProperties)
+struct ActionData {
+ const char *label, *icon;
+ ActionProperties properties;
+};
+extern const ActionData ACTION_DATA[Nb_Actions];
+
+//----------------------------------------------------------------------------
+class MemoryEditor : public QFrame
+{
+Q_OBJECT
+public:
+ MemoryEditor(Device::Memory *memory, QWidget *parent, const char *name);
+ virtual void setReadOnly(bool readOnly) = 0;
+
+public slots:
+ virtual void updateDisplay() = 0;
+
+signals:
+ void modified();
+
+protected:
+ Device::Memory *_memory;
+ QVBoxLayout *_top;
+};
+
+//----------------------------------------------------------------------------
+class MemoryRangeEditor : public MemoryEditor
+{
+Q_OBJECT
+public:
+ MemoryRangeEditor(Device::Memory &memory, uint nbLines, uint nbCols,
+ uint offset, int nb, QWidget *parent, const char *name);
+ virtual void init();
+ virtual void setReadOnly(bool readOnly);
+ void setComment(const QString &text);
+
+public slots:
+ virtual void updateDisplay();
+ void moveNext();
+ void movePrev();
+ void moveFirst();
+ void moveLast();
+ void moveUp();
+ void moveDown();
+ void moveNextPage();
+ void movePrevPage();
+
+protected slots:
+ void setStartWord(int index);
+ void setEndWord(int index);
+ void setIndex(int index);
+
+protected:
+ uint _nbLines, _nbCols, _offset;
+ int _nb;
+ QValueList<QLabel *> _addresses;
+ QValueList<QWidget *> _blocks;
+ QValueList<HexWordEditor *> _editors;
+ QScrollBar *_scrollbar;
+ QLabel *_comment;
+ QWidget *_spacer;
+
+ uint wordOffset() const { return _offset + current() * _nbCols; }
+ uint current() const { return _scrollbar->value(); }
+ virtual uint nbWords() const = 0;
+ virtual uint addressIncrement() const = 0;
+ virtual Address startAddress() const = 0;
+ virtual HexWordEditor *createHexWordEditor(QWidget *parent) = 0;
+ virtual bool isRangeReadOnly() const = 0;
+ virtual void updateAddressColor(uint i, Address address) { Q_UNUSED(i); Q_UNUSED(address); }
+ virtual void addLegend(QVBoxLayout *vbox) { Q_UNUSED(vbox); }
+};
+
+//----------------------------------------------------------------------------
+class MemoryEditorGroup : public MemoryEditor
+{
+Q_OBJECT
+public:
+ MemoryEditorGroup(Device::Memory *memory, QWidget *parent, const char *name);
+ void addEditor(MemoryEditor *editor);
+ virtual void setReadOnly(bool readOnly);
+
+public slots:
+ virtual void updateDisplay();
+
+protected:
+ bool _modified;
+ QValueList<MemoryEditor *> _editors;
+};
+
+//----------------------------------------------------------------------------
+class MemoryTypeEditor : public MemoryEditorGroup
+{
+Q_OBJECT
+public:
+ MemoryTypeEditor(const HexView *hexview, Device::Memory &memory, QWidget *parent, const char *name);
+ virtual void init(bool first);
+ virtual void setReadOnly(bool readOnly);
+
+protected slots:
+ void doAction();
+ void stateChanged();
+
+protected:
+ PopupButton *_title;
+ QLabel *_comment;
+ const HexView *_hexview;
+ virtual bool internalDoAction(Action action) = 0; // return true if memory modified
+ virtual bool hasAction(Action) const { return true; }
+ void addAction(KAction *action);
+ const Device::Memory *originalMemory() const;
+
+private:
+ bool _readOnly;
+ KAction *_actions[Nb_Actions];
+
+ void doAction(Action action);
+};
+
+} // namespace
+
+#endif