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/kcolumnsview.h

169 lines
5.5 KiB

/***************************************************************************
kcolumnsview.h - description
-------------------
begin : Mit Mai 21 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. *
* *
***************************************************************************/
#ifndef KHE_KCOLUMNSVIEW_H
#define KHE_KCOLUMNSVIEW_H
// qt specific
#include <qptrlist.h>
#include <qwidget.h>
#include <qpixmap.h>
#include <qscrollview.h>
// lib specific
#include "kadds.h"
#include "ksection.h" // TODO: think about moving this out of the public API
namespace KHE
{
class KColumn;
class KColumnsViewPrivate;
/** general class for widgets with columns that display different aspects of the same data
* with the same lineheight for all lines
*
*@author Friedrich W. H. Kossebau
*/
class KColumnsView : public QScrollView
{
Q_OBJECT
friend class KColumn;
public:
KColumnsView( /*bool R = false,*/ QWidget *parent=0, const char *name=0, WFlags Flags=0 );
virtual ~KColumnsView();
public: // drawing
virtual void paintEmptyArea( QPainter *p, int cx, int cy, int cw, int ch );
virtual void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
public: // data-wise sizes
/** returns the number of all lines */
int noOfLines() const;
/** returns number of fully visible lines, at least 1 (as needed by page down/up)
* doesn't care about the total height being smaller than the display height
*/
int noOfLinesPerPage() const;
public: // pixel-wise sizes
/** returns the height of each line */
KPixelY lineHeight() const;
/** returns the size of all visible columns together */
QSize totalViewSize() const;
/** returns the width of all visible columns together */
KPixelX totalWidth() const;
/** returns the height of all lines together */
KPixelY totalHeight() const;
public: // services
/** gives the index of the line that would include y in pixel coord.
* y is not forced to be inside the total height.
*/
uint lineAt( KPixelY y ) const;
/** gives the index of the first and the last line that would be visible
* these lines might not contain anything
*/
KSection visibleLines() const;
/** gives the index of the first and the last line that would be visible in the given pixel range
* these lines might not contain anything
*/
KSection visibleLines( KPixelYs YPixels ) const;
protected:
/** called by KColumn */
void addColumn( KColumn *C );
void removeColumn( KColumn *C );
protected: //
/** sets height of all lines and propagates this information to all columns
* doesn't update the content size
* @param NewLineHeight height in pixels
*/
virtual void setLineHeight( KPixelY NewLineHeight );
/** sets the number of lines
* doesn't update the content size
* @param NewNoOfLines new number of lines to display
*/
virtual void setNoOfLines( int NewNoOfLines );
protected: // recalculations
/** recalculates the positions of the columns and the total width */
void updateWidths();
/** ensures that the line buffer has the size of the whole line */
void updateLineBufferSize();
protected: // painting
void updateView();
void repaintView();
private:
/** hiding it*/
void drawContents( QPainter* );
protected: // calculated
/** collection of all the columns. All columns will be autodeleted. */
QPtrList<KColumn> Columns;
/** the number of lines which the column view has */
int NoOfLines;
/** the height of each line in pixels */
KPixelY LineHeight;
/** the width of all visible columns together */
KPixelX TotalWidth;
// /** width that is used by columns that are not resizeable (if shown) */
// KPixelX ReservedWidth;
protected:
// TODO: do we really want this?
bool HorizontalGrid;
/** Buffer where each line is drawn to before it is copied onto the screen */
QPixmap LineBuffer;
// bool Reversed;
private:
KColumnsViewPrivate *d;
};
inline int KColumnsView::noOfLines() const { return NoOfLines; }
inline KPixelY KColumnsView::lineHeight() const { return LineHeight; }
inline uint KColumnsView::lineAt( KPixelY y ) const { return LineHeight!=0 ? y / LineHeight : 0; }
inline KSection KColumnsView::visibleLines() const
{
KPixelY cy = contentsY();
KPixelY ch = visibleHeight();
return KSection( lineAt(cy), lineAt(cy+ch-1) );
}
inline KSection KColumnsView::visibleLines( KPixelYs YPixels ) const
{
return KSection( lineAt(YPixels.start()), lineAt(YPixels.end()) );
}
inline KPixelY KColumnsView::totalHeight() const { return NoOfLines*LineHeight; }
inline KPixelX KColumnsView::totalWidth() const { return TotalWidth; }
inline QSize KColumnsView::totalViewSize() const { return QSize( totalWidth(), totalHeight() ); }
}
#endif