• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

okteta

  • sources
  • kde-4.12
  • kdesdk
  • okteta
  • gui
offsetcolumnrenderer.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the Okteta Gui library, made within the KDE community.
3 
4  Copyright 2003,2008 Friedrich W. H. Kossebau <kossebau@kde.org>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either
9  version 2.1 of the License, or (at your option) version 3, or any
10  later version accepted by the membership of KDE e.V. (or its
11  successor approved by the membership of KDE e.V.), which shall
12  act as a proxy defined in Section 6 of version 3 of the license.
13 
14  This library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  Lesser General Public License for more details.
18 
19  You should have received a copy of the GNU Lesser General Public
20  License along with this library. If not, see <http://www.gnu.org/licenses/>.
21 */
22 
23 #include "offsetcolumnrenderer.h"
24 
25 // lib
26 #include "bytearraytablelayout.h"
27 // lib
28 #include <abstractcolumnstylist.h>
29 // Qt
30 #include <QtGui/QPainter>
31 #include <QtGui/QPalette>
32 #include <QtGui/QFontMetrics>
33 
34 
35 namespace Okteta
36 {
37 
38 static const PixelX leftOffsetMargin = 2;
39 static const PixelX rightOffsetMargin = 2;
40 
41 
42 OffsetColumnRenderer::OffsetColumnRenderer( AbstractColumnStylist* stylist,
43  ByteArrayTableLayout* layout, OffsetFormat::Format format )
44  : AbstractColumnRenderer( stylist ),
45  mLayout( layout ),
46  mOffsetTextWidth( 0 ),
47  mDigitBaseLine( 0 ),
48  mFormat( format ),
49  PrintFunction( OffsetFormat::printFunction(format) )
50 {
51  recalcX();
52 }
53 
54 void OffsetColumnRenderer::renderLine( QPainter* painter, Line lineIndex )
55 {
56  const PixelX offset = mLayout->firstLineOffset() + mLayout->noOfBytesPerLine() * lineIndex;
57  printFunction()( mCodedOffset, offset );
58 
59  const QColor& buttonColor = stylist()->palette().buttonText().color();
60  painter->setPen( buttonColor );
61  painter->drawText( leftOffsetMargin, mDigitBaseLine, QLatin1String(mCodedOffset) );
62 }
63 
64 void OffsetColumnRenderer::renderColumnBackground( QPainter* painter, const PixelXRange& _Xs, const PixelYRange& Ys )
65 {
66  PixelXRange Xs( _Xs );
67  restrictToXSpan( &Xs );
68 
69  const QBrush& buttonBrush = stylist()->palette().button();
70  painter->fillRect( Xs.start(), Ys.start(), Xs.width(), Ys.width(), buttonBrush );
71 }
72 
73 void OffsetColumnRenderer::renderFirstLine( QPainter *painter, const PixelXRange &, Line firstLineIndex )
74 {
75  mRenderLineIndex = firstLineIndex;
76  renderLine( painter, mRenderLineIndex++ );
77 }
78 
79 
80 void OffsetColumnRenderer::renderNextLine( QPainter *painter )
81 {
82  renderLine( painter, mRenderLineIndex++ );
83 }
84 
85 
86 void OffsetColumnRenderer::renderColumn( QPainter* painter, const PixelXRange& Xs, const PixelYRange& Ys )
87 {
88  renderColumnBackground( painter, Xs, Ys );
89 }
90 
91 
92 void OffsetColumnRenderer::renderEmptyColumn( QPainter* painter, const PixelXRange& Xs, const PixelYRange& Ys )
93 {
94  renderColumnBackground( painter, Xs, Ys );
95 }
96 
97 void OffsetColumnRenderer::setFormat( OffsetFormat::Format format, const QFontMetrics& fontMetrics )
98 {
99  // no changes?
100  if( mFormat == format )
101  return;
102 
103  mFormat = format;
104 
105  PrintFunction = OffsetFormat::printFunction( mFormat );
106 
107  setFontMetrics( fontMetrics );
108 }
109 
110 void OffsetColumnRenderer::setFormat( OffsetFormat::Format format )
111 {
112  // no changes?
113  if( mFormat == format )
114  return;
115 
116  mFormat = format;
117 
118  PrintFunction = OffsetFormat::printFunction( mFormat );
119 
120  // TODO: without QFontMetrics this will fail. do we need to keep one around?
121  recalcX();
122 }
123 
124 void OffsetColumnRenderer::setFontMetrics( const QFontMetrics& fontMetrics )
125 {
126  mDigitBaseLine = fontMetrics.ascent();
127 
128  // use 0 as reference, using a fixed font should always yield same width
129  printFunction()( mCodedOffset, 0 );
130  const int newOffsetTextWidth = fontMetrics.width( QLatin1String(mCodedOffset) );
131 
132  if( newOffsetTextWidth == mOffsetTextWidth )
133  return;
134 
135  mOffsetTextWidth = newOffsetTextWidth;
136 
137  recalcX();
138 }
139 
140 void OffsetColumnRenderer::recalcX()
141 {
142  // recalculate depend sizes
143  setWidth( mOffsetTextWidth + leftOffsetMargin + rightOffsetMargin );
144 }
145 
146 
147 OffsetColumnRenderer::~OffsetColumnRenderer() {}
148 
149 }
Okteta::OffsetColumnRenderer::mRenderLineIndex
Line mRenderLineIndex
Definition: offsetcolumnrenderer.h:92
Okteta::OffsetColumnRenderer::recalcX
void recalcX()
recalculates all x values
Definition: offsetcolumnrenderer.cpp:140
Okteta::AbstractColumnRenderer::restrictToXSpan
void restrictToXSpan(PixelXRange *xSpan) const
Definition: abstractcolumnrenderer.cpp:54
Okteta::OffsetColumnRenderer::format
OffsetFormat::Format format() const
Definition: offsetcolumnrenderer.h:97
Okteta::OffsetColumnRenderer::renderFirstLine
virtual void renderFirstLine(QPainter *painter, const PixelXRange &Xs, Line firstLineIndex)
Definition: offsetcolumnrenderer.cpp:73
Okteta::ByteArrayTableLayout::noOfBytesPerLine
Size noOfBytesPerLine() const
returns number of bytes per line
Definition: bytearraytablelayout.h:209
abstractcolumnstylist.h
Okteta::ByteArrayTableLayout::firstLineOffset
Address firstLineOffset() const
Definition: bytearraytablelayout.h:208
offsetcolumnrenderer.h
Okteta::OffsetColumnRenderer::~OffsetColumnRenderer
virtual ~OffsetColumnRenderer()
Definition: offsetcolumnrenderer.cpp:147
KDE::NumberRange< PixelX >
Okteta::leftOffsetMargin
static const PixelX leftOffsetMargin
Definition: offsetcolumnrenderer.cpp:38
KDE::Range::start
T start() const
Definition: range.h:86
Okteta::OffsetColumnRenderer::renderColumn
virtual void renderColumn(QPainter *painter, const PixelXRange &Xs, const PixelYRange &Ys)
Definition: offsetcolumnrenderer.cpp:86
Okteta::OffsetFormat::Format
Format
Definition: offsetformat.h:43
Okteta::OffsetColumnRenderer::printFunction
OffsetFormat::print printFunction() const
Definition: offsetcolumnrenderer.h:96
Okteta::Line
qint32 Line
Definition: line.h:33
KDE::NumberRange::width
S width() const
Definition: numberrange.h:141
Okteta::AbstractColumnStylist
Definition: abstractcolumnstylist.h:38
bytearraytablelayout.h
Okteta::ByteArrayTableLayout
the logical layout of a byte array table for a view
Definition: bytearraytablelayout.h:61
Okteta::PixelX
int PixelX
Definition: kadds.h:34
Okteta::OffsetFormat::printFunction
static print printFunction(int i)
Definition: offsetformat.h:73
Okteta::rightOffsetMargin
static const PixelX rightOffsetMargin
Definition: offsetcolumnrenderer.cpp:39
Okteta::OffsetColumnRenderer::setFormat
void setFormat(OffsetFormat::Format format, const QFontMetrics &fontMetrics)
Definition: offsetcolumnrenderer.cpp:97
Okteta::OffsetColumnRenderer::mCodedOffset
char mCodedOffset[OffsetFormat::MaxFormatWidth+1]
buffer to hold the formatted coding
Definition: offsetcolumnrenderer.h:88
Okteta::OffsetFormat
Definition: offsetformat.h:37
Okteta::AbstractColumnRenderer::setWidth
void setWidth(PixelX width)
sets width of the column
Definition: abstractcolumnrenderer.cpp:50
Okteta::OffsetColumnRenderer::mLayout
ByteArrayTableLayout * mLayout
Definition: offsetcolumnrenderer.h:74
Okteta::AbstractColumnRenderer::stylist
AbstractColumnStylist * stylist() const
Definition: abstractcolumnrenderer.cpp:40
Okteta::OffsetColumnRenderer::renderLine
void renderLine(QPainter *painter, Line lineIndex)
paints full line
Definition: offsetcolumnrenderer.cpp:54
Okteta::OffsetColumnRenderer::OffsetColumnRenderer
OffsetColumnRenderer(AbstractColumnStylist *stylist, ByteArrayTableLayout *layout, OffsetFormat::Format format)
Definition: offsetcolumnrenderer.cpp:42
Okteta::OffsetColumnRenderer::mFormat
OffsetFormat::Format mFormat
Definition: offsetcolumnrenderer.h:83
Okteta::OffsetColumnRenderer::mDigitBaseLine
PixelY mDigitBaseLine
Definition: offsetcolumnrenderer.h:80
Okteta::OffsetColumnRenderer::renderNextLine
virtual void renderNextLine(QPainter *painter)
the actual painting call for a column's line.
Definition: offsetcolumnrenderer.cpp:80
Okteta::AbstractColumnRenderer
base class for columns of the ColumnsView
Definition: abstractcolumnrenderer.h:46
Okteta::OffsetColumnRenderer::mOffsetTextWidth
PixelX mOffsetTextWidth
Definition: offsetcolumnrenderer.h:78
Okteta::AbstractColumnStylist::palette
virtual const QPalette & palette() const =0
Okteta::OffsetColumnRenderer::setFontMetrics
void setFontMetrics(const QFontMetrics &fontMetrics)
Definition: offsetcolumnrenderer.cpp:124
Okteta::OffsetColumnRenderer::renderColumnBackground
void renderColumnBackground(QPainter *painter, const PixelXRange &Xs, const PixelYRange &Ys)
Definition: offsetcolumnrenderer.cpp:64
Okteta::OffsetColumnRenderer::renderEmptyColumn
virtual void renderEmptyColumn(QPainter *painter, const PixelXRange &Xs, const PixelYRange &Ys)
Definition: offsetcolumnrenderer.cpp:92
Okteta::OffsetColumnRenderer::PrintFunction
OffsetFormat::print PrintFunction
Definition: offsetcolumnrenderer.h:85
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okteta

Skip menu "okteta"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal