findtablewidget.cpp

Go to the documentation of this file.
00001 #include "main.h"
00002 #include "findtablewidget.h"
00003 
00004 #include <QWidget>
00005 #include <QRegion>
00006 #include <QtGui/qlayout.h>
00007 #include <QtCore/qstring.h>
00008 #include <QtGui/qwidget.h>
00009 #include <QtCore/qvariant.h>
00010 
00011 
00012 findtablewidget::findtablewidget(QWidget *parent) : QWidget(parent)
00013 {
00014  setup_ui();
00015  setup_signals();
00016  assembly();
00017  
00018  clear_all();
00019 }
00020 
00021 
00022 findtablewidget::~findtablewidget(void)
00023 {
00024 
00025 }
00026 
00027 void findtablewidget::setup_ui(void)
00028 {
00029  findtableview=new QTableWidget();
00030  findtableview->setObjectName("findtableview");
00031  findtableview->setMinimumSize(1,1);
00032  findtableview->horizontalHeader()->hide();
00033  findtableview->verticalHeader()->setDefaultSectionSize ( findtableview->verticalHeader()->minimumSectionSize () );
00034 
00035  // Устанавливается режим что могут выделяться только строки 
00036  // а не отдельный item таблицы
00037  findtableview->setSelectionBehavior(QAbstractItemView::SelectRows);
00038   
00039  // Устанавливается режим что редактирование невозможно
00040  findtableview->setEditTriggers(QAbstractItemView::NoEditTriggers);
00041 
00042  // Проверка отрисовки виджета
00043  // findtableview->viewport()->installEventFilter( this );
00044 }
00045 
00046 void findtablewidget::setup_signals(void)
00047 {
00048 
00049  connect(findtableview, SIGNAL(cellActivated(int, int)),
00050          this, SLOT(select_cell(int, int)));
00051 
00052 }
00053  
00054 void findtablewidget::assembly(void)
00055 {
00056  QHBoxLayout *central_layout=new QHBoxLayout();
00057  
00058  central_layout->addWidget(findtableview);
00059  central_layout->setContentsMargins(0,0,0,0); // Границы убираются
00060 
00061  this->setLayout(central_layout);
00062 }
00063 
00064 
00065 void findtablewidget::update_columns_width(void)
00066 {
00067  findtableview->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
00068  findtableview->hide();
00069  findtableview->show();
00070 }
00071 
00072 
00073 void findtablewidget::clear_all(void)
00074 {
00075  // Таблица очищается
00076  findtableview->setRowCount(0);
00077  findtableview->setColumnCount(0);
00078  
00079   // Устанавливается в таблице две колонки Path и Title
00080  findtableview->setColumnCount(2);
00081  
00082  // Устанавливаются заголовки колонок
00083  QStringList list;
00084  list << tr("Title") << tr("About");
00085  findtableview->setHorizontalHeaderLabels(list);
00086  
00087  findtableview->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
00088  findtableview->horizontalHeader()->setStretchLastSection(true);
00089 }
00090 
00091 
00092 void findtablewidget::add_row(QString title, QString branchname, QString tags, QStringList path, int num_in_recordtable)
00093 {
00094  int i=findtableview->rowCount();
00095 
00096  findtableview->insertRow(i);
00097 
00098  // Заголовок записи
00099  QTableWidgetItem *item_title=new QTableWidgetItem();
00100  item_title->setText(title);
00101  
00102  // В ячейке заголовка также хранится информация о пути к ветке
00103  // и номере записи в таблице конечных записей
00104  item_title->setData(Qt::UserRole  ,path);
00105  item_title->setData(Qt::UserRole+1,num_in_recordtable);
00106  
00107  // Информация о записи
00108  QTableWidgetItem *item_info=new QTableWidgetItem();
00109  QString info;
00110  tags=tags.trimmed();
00111  if(tags.length()>0)
00112   item_info->setText(branchname+" ("+tags+")");
00113  else 
00114   item_info->setText(branchname);
00115  
00116  findtableview->setItem(i,0,item_title);
00117  findtableview->setItem(i,1,item_info);
00118  
00119  qDebug() << "In findtablewidget add_row() row count " << findtableview->rowCount();
00120 }
00121 
00122 
00123 bool findtablewidget::eventFilter( QObject * o, QEvent * e )
00124 {
00125   if ( o == findtableview->viewport() && e->type() == QEvent::Paint )
00126   {
00127     QPaintEvent * pe = static_cast<QPaintEvent*>( e );
00128     qDebug() << "Rect to paint:" << pe->rect();
00129     qDebug() << "Visible rect:" << (findtableview->viewport()->visibleRegion()).boundingRect();
00130     qDebug() << " ";
00131     return false;
00132   }
00133   return false;
00134 }
00135 
00136 
00137 void findtablewidget::select_cell(int row, int column)
00138 {
00139  QTableWidgetItem *item=findtableview->item(row,0);
00140  
00141  // Выясняется путь к ветке и номер в таблице конечных записей
00142  QStringList path=item->data(Qt::UserRole).toStringList();
00143  int n=item->data(Qt::UserRole+1).toInt();
00144  
00145  find_object<mainwindow>("mainwindow")->set_tree_position(path);
00146  find_object<mainwindow>("mainwindow")->set_recordtable_position(n);
00147 }
00148 

Generated on Mon Feb 2 00:25:34 2009 for mytetra by  doxygen 1.5.1