This example shows how to use an object of the class QdbtTabular. Some things the user of the application can do:
#ifndef _EXAMPLE1_H
#define _EXAMPLE1_H
#include <qwidget.h>
#include <qpixmap.h>
#include <qlined.h>
#include <qcombo.h>
class QdbtTabular;
class Example : public QWidget
{
Q_OBJECT
public:
Example(QWidget *parent=0, const char *name=0, WFlags f=0);
~Example();
private slots:
void toggleHeader(bool);
void addRow();
void delRows();
void addCol();
void delCol();
void clear();
private:
QLineEdit *nameEdit,*sizeEdit;
QComboBox *type;
QdbtTabular *tabular;
QPixmap folder,file;
};
#endif
#include <stdio.h>
#include <stdlib.h>
#include <qapp.h>
#include <qlayout.h>
#include <qpushbt.h>
#include <qlabel.h>
#include "example1.h"
#include <qdbt/qdbttabular.h>
#include <qdbt/qdbttabcell.h>
#include <qdbt/qdbtsection.h>
// constructor
Example::Example(QWidget *parent,const char *name, WFlags f)
: QWidget(parent,name,f)
{
// Set the caption of the window
setCaption("Example");
// The Layout managers
QGridLayout *layout = new QGridLayout(this,3,1,5);
QGridLayout *input = new QGridLayout(1,5,5);
QBoxLayout *buttons = new QBoxLayout(QBoxLayout::LeftToRight);
// Create a new QdbtTabular object
tabular=new QdbtTabular(this);
// Set the font of the cells in the table
tabular->setCellFont(QFont("helvetica",12,QFont::Bold));
// Set the minimal widget size
tabular->setMinimumSize(100,100);
// Load the folder pixmap (No error checking!)
folder.load("folder.xpm");
// Load the file pixmap (No error checking!)
file.load("file.xpm");
// set the initial table size (this is faster than
// inserting the columns and rows one by one
tabular->setDimensions(10,2);
// Set the font of the header
tabular->setHeaderFont(QFont("helvetica",16,QFont::Bold));
// change the heading of column 0 (default is empty)
QdbtSection *section0=tabular->section(0);
section0->setText("Name");
// change the heading and alignment of column 1
QdbtSection *section1=tabular->section(1);
section1->setText("Size");
section1->setAlignment(AlignRight);
int i;
for (i=0;i<10;i++)
{
QString name,size;
name.sprintf("%s%d\n",i<5 ? "folder" : "file",i<5 ? i : i-5);
size.sprintf("%d",i*1024+1024);
QdbtTableCell cell;
// define a cell `cell'
cell.setText(name);
cell.setPixmap(i<5 ? &folder : &file);
cell.setEditable(FALSE);
cell.setAlignment(AlignLeft);
cell.setPixmapAlignment(AlignLeft);
cell.setColor(i<5 ? blue : black);
// let cell (i,0) be a (deep) copy of `cell'
tabular->changeCell(&cell,i,0);
// modify the cell `cell'
if (i<5) cell.setText(0); else cell.setText(size);
cell.setPixmap(0);
cell.setEditable(TRUE);
cell.setAlignment(AlignRight);
// let cell (i,1) be a (deep) copy of `cell'
tabular->changeCell(&cell,i,1);
}
// Set the width of the columns, so all cells fit
tabular->setColumnWidth(0,tabular->columnWidthHint(0));
tabular->setColumnWidth(1,tabular->columnWidthHint(1));
// Get the height of the default font (can be changed with the -fn option)
int fh=fontMetrics().height();
// Create the input widgets
QLabel *nameLab = new QLabel("Name",this);
QLabel *sizeLab = new QLabel("Size",this);
nameEdit = new QLineEdit(this);
sizeEdit = new QLineEdit(this);
type = new QComboBox(this);
// Set their minimum sizes
nameLab->setMinimumSize(nameLab->sizeHint());
sizeLab->setMinimumSize(sizeLab->sizeHint());
type->insertItem("folder");
type->insertItem("file");
type->setMinimumSize(type->sizeHint());
nameEdit->setMinimumSize(50,fh+6); // height depends on the font that is used
sizeEdit->setMinimumSize(50,fh+6);
// Create the control button
QPushButton *add = new QPushButton("Add",this);
QPushButton *addCol = new QPushButton("AddCol",this);
QPushButton *del = new QPushButton("Del",this);
QPushButton *delCol = new QPushButton("DelCol",this);
QPushButton *clear = new QPushButton("Clear",this);
QPushButton *header = new QPushButton("Header",this);
QPushButton *close = new QPushButton("Close",this);
// Set their minimum sizes
add ->setMinimumSize(add->sizeHint());
del ->setMinimumSize(del->sizeHint());
addCol->setMinimumSize(addCol->sizeHint());
delCol->setMinimumSize(delCol->sizeHint());
close ->setMinimumSize(close->sizeHint());
clear ->setMinimumSize(clear->sizeHint());
header->setMinimumSize(header->sizeHint());
header->setToggleButton(TRUE); // make the header button a toggle button
header->setOn(TRUE); // and turn it on
// Add Widgets and layouts to the layout-manager
layout->addWidget(tabular,0,0);
layout->addLayout(input ,1,0);
layout->addLayout(buttons,2,0);
layout->setColStretch(0,1); // make the table strechable
layout->setRowStretch(0,1);
// Add Widgets to the button layout
buttons->addStretch(1);
buttons->addWidget(add);
buttons->addWidget(del);
buttons->addWidget(addCol);
buttons->addWidget(delCol);
buttons->addWidget(clear);
buttons->addWidget(header);
buttons->addWidget(close);
// Add Widgets to the input layout
input->addWidget(type,0,4);
input->addWidget(nameLab,0,0);
input->addWidget(nameEdit,0,1);
input->setColStretch(1,1); // make the edit field horizontal stretchable
input->addWidget(sizeLab,0,2);
input->addWidget(sizeEdit,0,3);
input->setColStretch(3,1);
// don't forget to activate the top layout manager
layout->activate();
// Let the close button quit the application
connect(close, SIGNAL(clicked()),qApp,SLOT(quit()));
// Let the toggle button hide/show the header
connect(header, SIGNAL(toggled(bool)),SLOT(toggleHeader(bool)));
// Connect the add button to the addRow() function
connect(add, SIGNAL(clicked()),SLOT(addRow()));
// Connect the del button to the delRow() function
connect(del, SIGNAL(clicked()),SLOT(delRows()));
// Connect the add column button to the addCol() function
connect(addCol, SIGNAL(clicked()),SLOT(addCol()));
// Connect the del column button to the delCol() function
connect(delCol, SIGNAL(clicked()),SLOT(delCol()));
// Connect the clean button to the clear() function
connect(clear, SIGNAL(clicked()),SLOT(clear()));
// Resize the widget to its minimal size
resize(layout->mainWidget()->sizeHint());
}
// destructor
Example::~Example()
{
}
// hide/show table's header
void Example::toggleHeader(bool state)
{
if (state) tabular->showHeader(); else tabular->hideHeader();
}
// add a row to the table
void Example::addRow()
{
if (nameEdit->text() && strlen(nameEdit->text())>0) // text field not empty
{
int nRows=tabular->numRows();
int nCols=tabular->numCols();
tabular->insertRow(nRows); // add a new row at the end of the table
if (type->currentItem()==0) // type==folder
{
if (nCols>0) tabular->changeCell(nameEdit->text(),&folder,nRows,0,blue,AlignLeft,TRUE);
if (nCols>1) tabular->changeCell("",nRows,1,blue);
}
else // type->currentItem()==1 // type==file
{
if (nCols>0) tabular->changeCell(nameEdit->text(),&file,nRows,0,black,AlignLeft,TRUE);
if (nCols>1) tabular->changeCell(sizeEdit->text(),nRows,1,black,AlignRight);
}
}
}
// delete all selected rows from the table
void Example::delRows()
{
tabular->setAutoUpdate(FALSE); // temporarily disable updates, otherwise
// update is called for each row
int i=0;
while (i<tabular->numRows()) // not all rows inspected
{
if (!tabular->rowSelected(i)) // if row not selected
i++; // proceed with the next row
else // otherwise
tabular->removeRow(i); // remove this row (will decrease numRows())
}
tabular->setAutoUpdate(TRUE); // enable the update again
tabular->repaint(); // repaint the table
}
// add a new column to the table
void Example::addCol()
{
tabular->setAutoUpdate(FALSE); // temporarily disable updates, otherwise
int colIndex=tabular->numCols();
tabular->insertCol(colIndex);
tabular->section(colIndex)->setText("New Column");
tabular->setColumnWidth(colIndex,tabular->columnWidthHint(colIndex));
// modify the cells of the new column
int i,nRows=tabular->numRows();
for (i=0;i<nRows;i++)
{
QdbtTableCell cell;
QString text;
text.sprintf("cell (%d,%d)",i,colIndex);
cell.setText(text);
cell.setEditable(TRUE);
tabular->changeCell(&cell,i,colIndex);
}
tabular->setAutoUpdate(TRUE); // enable the update again
tabular->repaint(); // repaint the table
}
// delete the last column from the table (if any)
void Example::delCol()
{
int nCols=tabular->numCols();
if (nCols>0)
{
tabular->removeCol(nCols-1);
}
}
// clear the whole table (removes all rows and columns)
void Example::clear()
{
tabular->clear();
}
int main(int argc,char **argv)
{
QApplication app(argc, argv);
Example example;
app.setMainWidget(&example);
example.show();
return app.exec();
}
written by Dimitri van Heesch, © 1997-1998