/*************************************************************************** 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 // 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, TDEBufferLayout *L, TDEBufferRanges *R ) : TDEBufferColumn( 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 ); }