You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeutils/khexedit/lib/kvaluecolumn.cpp

135 lines
3.3 KiB

/***************************************************************************
kvaluecolumn.cpp - description
-------------------
begin : Mit Sep 3 2003
copyright : (C) 2003 by Friedrich W. H. Kossebau
email : Friedrich.W.H@Kossebau.de
***************************************************************************/
/***************************************************************************
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License version 2 as published by the Free Software Foundation. *
* *
***************************************************************************/
// qt specific
#include <tqpainter.h>
// lib specific
#include "kcolumnsview.h"
#include "kbuffercursor.h"
#include "kbufferlayout.h"
#include "kbufferranges.h"
#include "kvaluecolumn.h"
#include "helper.h"
#include "kcharcodec.h"
using namespace KHE;
static const KCoding DefaultCoding = HexadecimalCoding;
static const KCoding NotDefaultCoding = DecimalCoding;
static const int DefaultBinaryGapWidth = 1;
KValueColumn::KValueColumn( KColumnsView *CV, KDataBuffer *B, KBufferLayout *L, KBufferRanges *R )
: KBufferColumn( CV, B, L, R ),
Coding( NotDefaultCoding ),
ByteCodec( 0 ),
BinaryGapWidth( DefaultBinaryGapWidth )
{
setCoding( DefaultCoding );
}
KValueColumn::~KValueColumn()
{
}
bool KValueColumn::setCoding( KCoding C )
{
// no changes?
if( Coding == C )
return false;
delete ByteCodec;
Coding = C;
ByteCodec = KByteCodec::createCodec( Coding );
CodedByte.setLength( ByteCodec->encodingWidth() );
// recalculate depend sizes
recalcByteWidth();
if( PosX )
recalcX();
return true;
}
bool KValueColumn::setBinaryGapWidth( KPixelX BGW )
{
// no changes?
if( BinaryGapWidth == BGW )
return false;
BinaryGapWidth = BGW;
// recalculate depend sizes
recalcByteWidth();
if( PosX )
recalcX();
return true;
}
void KValueColumn::recalcByteWidth()
{
ByteWidth = ByteCodec->encodingWidth() * DigitWidth;
if( Coding == BinaryCoding )
{
BinaryHalfOffset = 4 * DigitWidth + BinaryGapWidth;
ByteWidth += BinaryGapWidth;
}
recalcVerticalGridX();
}
// perhaps sometimes there will be a grammar
void KValueColumn::paintEditedByte( TQPainter *P, char Byte, const TQString &EditBuffer )
{
KHEChar B = Codec->decode( Byte );
const TQColorGroup &CG = View->colorGroup();
P->fillRect( 0,0,ByteWidth,LineHeight, TQBrush(colorForChar(B),TQt::SolidPattern) );
drawCode( P, EditBuffer, CG.base() );
}
void KValueColumn::drawByte( TQPainter *P, char Byte, KHEChar /*B*/, const TQColor &Color ) const
{
ByteCodec->encode( CodedByte, 0, Byte );
drawCode( P, CodedByte, Color );
}
void KValueColumn::drawCode( TQPainter *P, const TQString &Code, const TQColor &Color ) const
{
P->setPen( Color );
if( Coding == BinaryCoding )
{
// leave a gap in the middle
P->drawText( 0, DigitBaseLine, Code.left(4) );
P->drawText( BinaryHalfOffset, DigitBaseLine, Code.right(4) );
}
else
P->drawText( 0, DigitBaseLine, Code );
}