/****************************************************************************
**
** Copyright (C) 2002-2006 Frank Hemer <frank@hemer.org>,
** Tilo Riemer <riemer@crossvc.com>
**
**
**----------------------------------------------------------------------------
**
**----------------------------------------------------------------------------
**
** CrossVC is available under two different licenses:
**
** If CrossVC is linked against the GPLed version of Qt
** CrossVC is released under the terms of GPL also.
**
** If CrossVC is linked against a nonGPLed version of Qt
** CrossVC is released under the terms of the
** CrossVC License for non-Unix platforms (CLNU)
**
**
** CrossVC License for non-Unix platforms (CLNU):
**
** Redistribution and use in binary form, without modification,
** are permitted provided that the following conditions are met:
**
** 1. Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
** 2. It is not permitted to distribute the binary package under a name
** different than CrossVC.
** 3. The name of the authors may not be used to endorse or promote
** products derived from this software without specific prior written
** permission.
** 4. The source code is the creative property of the authors.
** Extensions and development under the terms of the Gnu Public License
** are limited to the Unix platform. Any distribution or compilation of
** the source code against libraries licensed other than gpl requires
** the written permission of the authors.
**
**
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
** ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
** GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**
**
**
** CrossVC License for Unix platforms:
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, version 2 of the License.
** This program is distributed in
** the hope that it will be useful, but WITHOUT ANY WARRANTY; without
** even the implied warranty of MERCHANTABILITY or FITNESS FOR A
** PARTICULAR PURPOSE.
**
** See the GNU General Public License version 2 for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software Foundation,
** Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
*****************************************************************************/
#ifndef FILETABLEIMPL_H
#define FILETABLEIMPL_H
#include <qtable.h>
class FileTableImpl : public QTable {
Q_OBJECT
signals:
void clicked(int,int);
void focused(int,int);
void unselected(int,int);
void selectionChanged(int,int,QString);
void xScrollValueChanged(int);
void yScrollValueChanged(int);
void clear(int,int);
void selectedBlock(int,int,int);
void unSelectedBlock(int,int,int);
public:
FileTableImpl( QWidget* parent = 0,
const char* name = 0);
virtual ~FileTableImpl();
virtual void keyPressEvent( QKeyEvent*);
virtual void setFont ( const QFont & );
virtual void setItem(int,int,QTableItem *);
virtual void resizeData(int) {}
virtual QTableItem * item(int,int) const;
virtual void clearCell(int,int);
virtual void takeItem(QTableItem *);
virtual void paintCell(QPainter *,int,int,const QRect &,bool,const QColorGroup &);
virtual void swapCells(int,int,int,int);
virtual int rowHeight(int) const;
virtual int rowPos(int) const;
virtual int rowAt(int) const;
void setID(int);
void setBlock(int,bool);
int setBlockState(int,int,bool);
void setBackground(QColor);
void reserveLines(int);
void addLine(QString,QString,bool unchangeable=false,const QColor=QColor("green"),const QColor=QColor("gray"),const QColor=QColor("red"));
void addBlock(QString,bool unchangeable=false,const QColor=QColor("green"),const QColor=QColor("gray"),const QColor=QColor("red"));
void addParagraph(QString,bool unchangeable=false,const QColor=QColor("green"),const QColor=QColor("gray"),const QColor=QColor("red"));
void addLine(QString,QString,bool,const QColor,const QColor,const QColor,const QColor);
void addBlock(QString,bool,const QColor,const QColor,const QColor,const QColor);
void addParagraph(QString,bool,const QColor,const QColor,const QColor,const QColor);
void setText(int,const QString&);
const QString getText(int);
void move(int,int,int);
void render();
void adjustScrollBarOffsets(int &from, int &to);
int getTopLine();
int getFocusedLine();
public slots:
void cancelRead();
void tableClicked(int,int,int,const QPoint&);
void setSelected(int,bool);
void setFocusRow(int);
void setFocusPos(int);
void setFocus(int,int);
void xScrollPosChanged(int val);
void yScrollPosChanged(int val);
void setXScrollPos(int);
void setYScrollPos(int);
protected:
virtual void contentsMousePressEvent(QMouseEvent *);
void focusInEvent( QFocusEvent*);
void focusOutEvent( QFocusEvent*);
void resizeEvent( QResizeEvent *e);
private:
class FileTableItem : public QTableItem {
public:
FileTableItem(QTable*,QTableItem::EditType,QString,const QColor&,const QColor&,bool unchangeable=false,int id=0);
virtual ~FileTableItem();
void setColorGroup(QColorGroup&);
virtual void paint( QPainter*, const QColorGroup&, const QRect&, bool);
void toggle();
bool isSelected() { return m_state;}
void setSelected(bool b) { if (m_state != b) toggle();}
bool changeable() { return !m_unchangeable;}
int id() { return m_id;}
QColor m_selectedColor;
QColor m_unselectedColor;
QColorGroup m_colorGroup;
bool m_state;
bool m_unchangeable;
int m_id;
};
QIntDict<QTableItem> items;
QIntDict<QWidget> widgets;
bool m_stop;
int m_ID;
int m_rows;
int m_lines;
int m_blocks;
int m_selectedRow;
int m_focusedRowPos;
int m_lastMarked;
bool m_wasBlockSelect;
FileTableImpl* m_Partner;
int m_maxWidth0;
int m_maxWidth1;
QFontMetrics* fm;
int m_lineSpacing;
int m_ScrollBarMinPos;
int m_ScrollBarMaxPos;
bool m_blockScrollPos;
};
#endif // FILETABLEIMPL_H
syntax highlighted by Code2HTML, v. 0.9.1