00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef UNITLISTPAGE_H
00023 #define UNITLISTPAGE_H
00024
00025
00026 #include <unitlistlayout.h>
00027
00028
00029 #include <qwidget.h>
00030 #include <qtable.h>
00031 #include <qpushbutton.h>
00032 #include <qmap.h>
00033 #include <qregexp.h>
00034 #include <qheader.h>
00035 #include <qmemarray.h>
00036 #include <qlineedit.h>
00037
00038
00039
00040
00041
00042 #include <iostream>
00043 using namespace std;
00044
00045
00050 class UnitListPage : public UnitListLayout
00051 {
00052 Q_OBJECT
00053
00054 public:
00056 UnitListPage(QWidget* parent = 0, const char *name = 0);
00058 ~UnitListPage();
00062 void setUnits(const QMap<int, QValueList<QString> >& units);
00066 void getUnits(QMap<int, QValueList<QString> >& units)const;
00070 inline void setNbUnits(int nbUnits)
00071 {
00072 this->nbUnits = nbUnits;
00073 for(int i =0; i<unitTable->numRows();++i) unitTable->removeRow(i);
00074 unitTable->setNumRows(nbUnits);
00075 };
00077 inline bool isModified()const{return modified;};
00078
00079 protected:
00084 bool eventFilter(QObject* object,QEvent* event);
00085
00086 public slots:
00088 inline void addUnit()
00089 {
00090 if(isIncorrect) return;
00091 modified = true;
00092 unitTable->insertRows(unitTable->numRows());
00093
00094 for(int i=0;i<6;++i)
00095 {
00096 QTableItem* item = new QTableItem(unitTable,QTableItem::WhenCurrent,"");
00097 item->setWordWrap(true);
00098 unitTable->setItem(unitTable->numRows() - 1,i,item);
00099 }
00100 };
00102 void removeUnit();
00104 inline void currentChanged()
00105 {
00106 if(isIncorrect)
00107 {
00108 unitTable->selectRow(incorrectRow);
00109 unitTable->setCurrentCell(incorrectRow,incorrectColumn);
00110 }
00111 };
00113 inline void unitChanged(int row,int column)
00114 {
00115 QString unit = unitTable->text(row,column);
00116
00117
00118 if((column==0||column==1)&&(unit.contains(QRegExp("[^\\d]"))!=0)||(column==4&&(unit.contains(QRegExp("[^\\d.]"))!=0)))
00119 {
00120 isIncorrect = true;
00121 incorrectRow = row;
00122 incorrectColumn = column;
00123
00124
00125 }
00126 else
00127 {
00128 isIncorrect = false;
00129 unitTable->adjustRow(row);
00130 }
00131 };
00133 inline void propertyModified(){modified = true;};
00135 inline void resetModificationStatus(){modified = false;};
00136
00137 private:
00138
00139 int nbUnits;
00140 bool isIncorrect;
00141 int incorrectRow,incorrectColumn;
00142 bool modified;
00143 };
00144
00145
00146
00147 #endif