Subtrees hinzugefügt
This commit is contained in:
parent
6e9f2223d2
commit
a6d1e09ddb
15 changed files with 2338 additions and 0 deletions
332
Quellcodes/duc_bit_hexeditor/Edit.java
Normal file
332
Quellcodes/duc_bit_hexeditor/Edit.java
Normal file
|
|
@ -0,0 +1,332 @@
|
|||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import javax.swing.*;
|
||||
import java.io.*;
|
||||
|
||||
|
||||
class Edit extends JComponent {
|
||||
Datei file;
|
||||
int pos, subpos, modus;
|
||||
int ueberschreiben=1;
|
||||
int breite, hoehe, proZeile, luecke, anzahl;
|
||||
|
||||
String searchString="";
|
||||
int searchPos = -1;
|
||||
|
||||
HexEditor parent;
|
||||
|
||||
|
||||
class myKeyListener implements KeyListener
|
||||
{
|
||||
public void keyPressed( KeyEvent k )
|
||||
{
|
||||
int iHeight = getSize().height;
|
||||
|
||||
if (k.getKeyCode()==8) delete(-1);
|
||||
if (k.getKeyCode()==127) delete(0);
|
||||
if (k.getKeyCode()==37) movePos(-1);
|
||||
if (k.getKeyCode()==39) movePos(1);
|
||||
if (k.getKeyCode()==38) movePos(-proZeile);
|
||||
if (k.getKeyCode()==40) movePos(proZeile);
|
||||
if (k.getKeyCode()==33) movePos(-proZeile*(iHeight/hoehe));
|
||||
if (k.getKeyCode()==34) movePos(proZeile*(iHeight/hoehe));
|
||||
|
||||
}
|
||||
public void keyReleased(KeyEvent k){}
|
||||
|
||||
public void keyTyped(KeyEvent k){
|
||||
|
||||
switch(modus) {
|
||||
case 1: {
|
||||
if (k.getKeyChar()>='0' && k.getKeyChar()<='1') modifyByte(k.getKeyChar());
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
if (k.getKeyChar()>='0' && k.getKeyChar()<='9') modifyByte(k.getKeyChar());
|
||||
if (k.getKeyChar()>='a' && k.getKeyChar()<='f') modifyByte(k.getKeyChar());
|
||||
if (k.getKeyChar()>='A' && k.getKeyChar()<='F') modifyByte(k.getKeyChar());
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
if (k.getKeyCode()!= 127) modifyByte(k.getKeyChar());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class myMouseListener implements MouseListener
|
||||
{
|
||||
public void mouseClicked( MouseEvent m )
|
||||
{
|
||||
moveToMousePos(m.getX(),m.getY() );
|
||||
}
|
||||
public void mouseExited(MouseEvent e) {
|
||||
}
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
}
|
||||
public void mousePressed(MouseEvent e) {
|
||||
}
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public Edit(HexEditor p){
|
||||
super();
|
||||
parent = p;
|
||||
file = null;
|
||||
pos = 0;
|
||||
subpos = 0;
|
||||
addKeyListener(new myKeyListener());
|
||||
addMouseListener(new myMouseListener());
|
||||
modus = 1;
|
||||
}
|
||||
|
||||
public void adjustTextMetrics()
|
||||
{
|
||||
int iWidth = getSize().width;
|
||||
int iHeight = getSize().height;
|
||||
Graphics g = getGraphics();
|
||||
|
||||
g.setFont(new Font("Monospaced",Font.PLAIN,12));
|
||||
FontMetrics fm = g.getFontMetrics( g.getFont() );
|
||||
|
||||
hoehe = fm.getHeight();
|
||||
switch (modus) {
|
||||
case 1: breite = fm.stringWidth("01010101")+4; luecke = 4; anzahl = 8;
|
||||
break;
|
||||
case 2: breite = fm.stringWidth("FF")+4; luecke = 4; anzahl = 2;
|
||||
break;
|
||||
default : breite = fm.stringWidth("F"); luecke = 0; anzahl = 1;
|
||||
}
|
||||
|
||||
proZeile = iWidth / breite;
|
||||
}
|
||||
|
||||
public void paint(Graphics g){
|
||||
String s;
|
||||
int iWidth = getSize().width;
|
||||
int iHeight = getSize().height;
|
||||
|
||||
Rectangle r = getVisibleRect();
|
||||
|
||||
adjustTextMetrics();
|
||||
|
||||
g.setFont(new Font("Monospaced",Font.PLAIN,12));
|
||||
g.setColor( Color.black );
|
||||
int zeile, spalte;
|
||||
|
||||
if (file != null) {
|
||||
|
||||
int laenge = file.getLength();
|
||||
|
||||
|
||||
int start = (int)(r.getY() / hoehe) * proZeile;
|
||||
int ende = ((int) ((r.getY()+r.getHeight()) / hoehe)+1)*proZeile;
|
||||
zeile = (int) (r.getY() / hoehe);
|
||||
spalte = 0;
|
||||
for (int i=start; i<ende && i<laenge; i++){
|
||||
|
||||
if (file.getSearchByte(i) == 1) {
|
||||
g.setColor( Color.red);
|
||||
g.fillRect((spalte)*breite+luecke/2-1,4+(zeile)*hoehe-1,breite-luecke/2+1,hoehe+2);
|
||||
g.setColor( Color.black);
|
||||
}
|
||||
|
||||
if (i==pos) {
|
||||
g.setColor( Color.lightGray);
|
||||
g.fillRect((spalte)*breite+luecke/2,4+(zeile)*hoehe,breite-luecke/2-1,hoehe);
|
||||
if (subpos != 0) {
|
||||
g.setColor( Color.GRAY);
|
||||
g.fillRect((spalte)*breite+subpos*(breite-luecke)/anzahl+luecke/2,4+(zeile)*hoehe,(breite-luecke/2)/anzahl-1,hoehe);
|
||||
}
|
||||
g.setColor( Color.black);
|
||||
}
|
||||
switch (modus) {
|
||||
case 1: s = file.getByteBinary(i);
|
||||
break;
|
||||
case 2: s = file.getByteHex(i);
|
||||
break;
|
||||
default : s = file.getByteChar(i);
|
||||
|
||||
}
|
||||
g.drawString(s,(spalte)*breite+luecke/2,hoehe+(zeile)*hoehe);
|
||||
spalte++;
|
||||
|
||||
if (spalte >= proZeile) {
|
||||
zeile++;
|
||||
spalte = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (pos<ende && pos==laenge) { // Cursor steht hinter dem letzten Zeichen => leeres Rechteck zeichnen
|
||||
g.setColor( Color.lightGray);
|
||||
g.fillRect((spalte)*breite+luecke/2,4+(zeile)*hoehe,breite-luecke/2-1,hoehe);
|
||||
g.setColor( Color.black);
|
||||
}
|
||||
parent.showLabels(file.getByteBinary(pos), file.getByteHex(pos), file.getByteChar(pos), pos+1);
|
||||
}
|
||||
}
|
||||
|
||||
public void setDatei(Datei file) {
|
||||
this.file = file;
|
||||
pos = 0;
|
||||
subpos = 0;
|
||||
}
|
||||
|
||||
public Datei getDatei(){
|
||||
return file;
|
||||
}
|
||||
|
||||
public Dimension getPreferredSize()
|
||||
{
|
||||
adjustTextMetrics();
|
||||
|
||||
if (file == null)
|
||||
{
|
||||
return new Dimension( 300, 200 );
|
||||
}
|
||||
else
|
||||
{
|
||||
int laenge = file.getLength();
|
||||
|
||||
int komponentenhoehe = hoehe+(laenge/proZeile)*hoehe+5;
|
||||
if (komponentenhoehe < 200) {
|
||||
komponentenhoehe = 200;
|
||||
}
|
||||
return new Dimension( 300, komponentenhoehe);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public Dimension getMinimumSize()
|
||||
{
|
||||
return getPreferredSize();
|
||||
}
|
||||
|
||||
public void setMode( int i) {
|
||||
modus = i;
|
||||
subpos = 0;
|
||||
repaint();
|
||||
}
|
||||
|
||||
public void setUeberschreiben(int i) {
|
||||
ueberschreiben = i;
|
||||
}
|
||||
|
||||
public int getUeberschreiben() {
|
||||
return ueberschreiben;
|
||||
}
|
||||
|
||||
public void movePos ( int i ){
|
||||
if (file!=null) {
|
||||
subpos = 0;
|
||||
pos += i;
|
||||
if (pos > file.getLength()) pos = file.getLength();
|
||||
if (pos < 0) pos = 0;
|
||||
repaint();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void moveToMousePos(int x, int y) {
|
||||
if(file!=null) {
|
||||
pos = (y / hoehe)*proZeile + (x / breite);
|
||||
subpos = 0;
|
||||
if (pos > file.getLength()) pos = file.getLength();
|
||||
if (pos < 0) pos = 0;
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
||||
public int compare(File vergleichDatei) {
|
||||
int gefunden = -1;
|
||||
if (file!=null)
|
||||
{
|
||||
gefunden = file.compare(vergleichDatei);
|
||||
}
|
||||
repaint();
|
||||
return gefunden;
|
||||
}
|
||||
|
||||
|
||||
public int search(String s) {
|
||||
int gefunden = -1;
|
||||
if (file!=null)
|
||||
{
|
||||
String s2="";
|
||||
char b;
|
||||
for (int i = 0; i < s.length(); i++)
|
||||
{
|
||||
b = s.charAt(i);
|
||||
if (modus==1 && (b == '0' || b == '1')) s2 = s2 + b;
|
||||
if (modus==2 && ((b >= '0' && b <= '9')|| (b>='A' && b <='F') || (b>='a' && b<='f'))) s2 = s2+b;
|
||||
if (modus==3) s2 = s2+b;
|
||||
}
|
||||
if (modus==2) s2 = s2.toUpperCase();
|
||||
if (s2.length()>0) gefunden = file.search(s2,modus);
|
||||
}
|
||||
repaint();
|
||||
return gefunden;
|
||||
}
|
||||
|
||||
public void delete( int i) {
|
||||
if (file != null && pos+i>0 && pos+i<file.getLength()) {
|
||||
file.deleteByte(pos+i);
|
||||
subpos = 0;
|
||||
pos += i;
|
||||
if (pos > file.getLength()) pos--;
|
||||
}
|
||||
repaint();
|
||||
}
|
||||
|
||||
public void modifyByte( char c ) {
|
||||
String s;
|
||||
if (file!= null) {
|
||||
if (pos == file.getLength() || (subpos == 0 && !(ueberschreiben==1))) file.insertByte(pos);
|
||||
|
||||
switch (modus) {
|
||||
case 1: s = file.getByteBinary(pos);
|
||||
break;
|
||||
case 2: s = file.getByteHex(pos);
|
||||
break;
|
||||
default : s = file.getByteChar(pos);
|
||||
}
|
||||
|
||||
|
||||
s = s.substring(0,subpos)+c+s.substring(subpos+1);
|
||||
subpos++;
|
||||
|
||||
int maxSubpos;
|
||||
switch (modus) {
|
||||
case 1: maxSubpos = 7;
|
||||
file.setByteBinary(pos,s);
|
||||
break;
|
||||
case 2: maxSubpos = 1;
|
||||
file.setByteHex(pos,s);
|
||||
break;
|
||||
default : maxSubpos = 0;
|
||||
file.setByteChar(pos,c);
|
||||
}
|
||||
|
||||
if (subpos > maxSubpos)
|
||||
{
|
||||
subpos = 0;
|
||||
movePos(1);
|
||||
}
|
||||
repaint();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void keyPressed ( KeyEvent e){
|
||||
}
|
||||
public void keyReleased ( KeyEvent e ){
|
||||
}
|
||||
|
||||
public boolean isFocusable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue