int TableWidgetItem::setWhatsThis( lua_State * L )// ( const QString & whatsThis ) void { QTableWidgetItem* lhs = ValueInstaller2<QTableWidgetItem>::check( L, 1 ); //QString* whatsThis = ValueInstaller2<QString>::check( L, 2 ); lhs->setStatusTip( Util::toString( L, 2 ) ); return 0; }
int TableWidgetItem::setToolTip ( lua_State * L )// ( const QString & toolTip ) void { QTableWidgetItem* lhs = ValueInstaller2<QTableWidgetItem>::check( L, 1 ); //QString* toolTip = ValueInstaller2<QString>::check( L, 2 ); lhs->setStatusTip( Util::toString( L, 2 ) ); return 0; }
void BabelWindow::setContactStatus(int row, bool available) { QTableWidgetItem *contact = ui->_contactsTable->item(row, 0); if (available) { contact->setIcon(QPixmap(":Images/Available.png")); contact->setStatusTip("available"); } else { contact->setIcon(QPixmap(":Images/Busy.png")); contact->setStatusTip("busy"); } }
static void eventCallback(struct event_handler_args args) { CHNODE *pNode = (CHNODE *)ca_puser(args.chid); AttachChannelAccess *pacacc = (AttachChannelAccess *)pNode->acacc; pNode->dbfType = ca_field_type(pNode->ch_id); QString pvname = ca_name(args.chid); QString strvalue; unsigned int chindex = pNode->chindex; //qDebug("Event Callback...:PVName(%s)", pvname.toStdString().c_str()); if( args.status != ECA_NORMAL ) { printChidInfo(args.chid,"eventCallback"); } else { QString objName = pNode->objname; if(objName.contains("CATableList", Qt::CaseInsensitive) == true) { struct dbr_time_string *pdata = (struct dbr_time_string*)args.dbr; QTableWidgetItem *pItem = pNode->pItem; strvalue = QString(pdata->value); pItem->setText(strvalue); CATableList *pTable = (CATableList*)pItem->tableWidget(); pItem->setStatusTip(QString("PVname : ").append(pvname).append(QString(", Value: ")).append(strvalue)); pTable->TableUpdate(); return; }; //++leesi switch(pNode->dbrequest) { //case DBR_GR_CHAR: case DBR_TIME_STRING: { struct dbr_time_string *pdata = (struct dbr_time_string*)args.dbr; strvalue = QString(pdata->value); pacacc->UpdateObj(pNode->objname, strvalue, pdata->severity); } break; case DBR_GR_DOUBLE: default: { struct dbr_gr_double* pdata = (struct dbr_gr_double*)args.dbr; if(objName.contains("CAPopUp", Qt::CaseInsensitive) == true) qDebug("PVName: %s, Value:%f", pvname.toStdString().c_str(), pdata->value); #if 0 //for test,,, static int count = 0; qDebug("CAMon Value:%f, count(%d)",pdata->value, count++); #endif pacacc->UpdateObj(pNode->objname, pdata->value, pdata->severity, pdata->precision); } break; }; }; };
//Главная функция, которая рисует дни void MainWindow::SetDays(int DaysCount){ ClearTTable(); //Очищаем таблицу ui->ttable->insertRow(0); // Две строчки ui->ttable->insertRow(0); // и столбец для ui->ttable->insertColumn(0); // имитации заголовков int placesCount; //Число площадок int beginRow, addedRows =0; //Начальная строка объединения и число дополнительно вставленных строчек if (db.isOpen()){ QSqlQuery query, subq, subq2; //Узнаём, сколько имеется площадок query.exec("select count(place_id) from places"); query.first(); placesCount= query.value(0).toInt(); //Получаем список площадок query.exec("select place_id, name, color from places order by name"); query.first(); for (int k=0;k<DaysCount;k++){ int j=1; // Забиваем список площадок в массив заголовков столько раз, // сколько требуется показать дней do { ui->ttable->insertColumn(j); QTableWidgetItem * nitm = new QTableWidgetItem (query.value(1).toString()); nitm->setBackgroundColor("lightgray"); nitm->setStatusTip("ac"); ui->ttable->setItem(1,j, nitm); j++; } while (query.next()); query.first(); } //Узнаём рабочее время QSqlQuery q2; q2.exec("select value from settings where name='work_start_time'"); q2.first(); int work_start_time=q2.value(0).toInt(); q2.exec("select value from settings where name='work_end_time'"); q2.first(); int work_end_time=q2.value(0).toInt(); //Узнаём обеденное время QSqlQuery queryD; queryD.exec("select value from settings where name='dinner_start_time'"); queryD.first(); int dinner_start_time=queryD.value(0).toInt(); queryD.exec("select value from settings where name='dinner_end_time'"); queryD.first(); int dinner_end_time=queryD.value(0).toInt(); int hr; for (hr=work_start_time; hr<=work_end_time; hr++) { //Добавляем строчку часа ui->ttable->insertRow(ui->ttable->rowCount()); beginRow=ui->ttable->rowCount()-1; addedRows=0; //Добавляем имитацию заголовка QTableWidgetItem * nitm = new QTableWidgetItem (QString("%1:00").arg(hr)); nitm->setBackgroundColor("lightgray"); nitm->setStatusTip("ac"); ui->ttable->setItem(beginRow, 0, nitm); //Смотрим, не обеденное ли сейчас время? if (hr>=dinner_start_time && hr<dinner_end_time && dinner_start_time<dinner_end_time ){ //Обеденное - закрашиваем строчку цветом обеда for (int j=1; j<ui->ttable->columnCount(); j++){ QTableWidgetItem *newItem1 = new QTableWidgetItem(""); newItem1->setBackgroundColor(dinner_color); newItem1->setStatusTip("dt"); newItem1->setToolTip(tr("Dinner")); ui->ttable->setItem(ui->ttable->rowCount()-1,j, newItem1); } } else { //Время не обеденное, но учитывать обед всё равно надо //int dinnerlap=0; //if (hr>=dinner_end_time) dinnerlap=dinner_end_time-dinner_start_time; for (int dd=0; dd<DaysCount; dd++){ //Добавляем в строчку часа закрашенные ячейки //Получаем список площадок, на которых работы начинаются в этот час в i-й день. query.exec("select place_id, client_id, service_id, date, TIME(date), record_id, hours from ttable where DATE(date)='"+ day.addDays(dd).toString("yyyy-MM-dd") +"' and TIME(date)<='"+QTime::fromString("00:00:00").addSecs(3600*hr).toString("hh:mm:ss")+"'"); while (query.next()) { if (QTime::fromString(query.value(4).toString()).toString("h:mm:ss")==QString("%1:00:00").arg(hr)){ //Получаем id площадки и вычисляем её положение среди столбцов QSqlQuery plname; plname.exec("select name, color from places where place_id="+query.value(0).toString()); plname.first(); int col=1; for (int i=1+(ui->ttable->columnCount()/DaysCount)*dd; i<1+(ui->ttable->columnCount()/DaysCount)*dd+placesCount; i++) if(ui->ttable->item(1,i)->text()==plname.value(0).toString()) col=i; //Создаём закрашенную ячейку //Убираем заголовок ячейки из массива - он попадёт в объединённый заголовок subq.exec("select * from clients where client_id="+query.value(1).toString()+";"); subq.first(); subq2.exec("select * from services where service_id="+query.value(2).toString()+";"); subq2.first(); QString ttip = query.value(4).toString()+"\n"+subq.value(1).toString()+"\n"+subq2.value(1).toString()+"\n"+subq.value(3).toString()+"\n"+subq.value(2).toString(); QColor colr = plname.value(1).toString(); QTableWidgetItem *newItem = new QTableWidgetItem(); newItem->setBackgroundColor(colr); newItem->setToolTip(ttip); newItem->setStatusTip(query.value(5).toString()); ui->ttable->setItem(beginRow,col, newItem); bool arfilled=false; if (addedRows>0){ for (int m=1; m<=addedRows; m++){ if (!ui->ttable->item(beginRow+m, 1+(ui->ttable->columnCount()/DaysCount)*dd )){ //Новую строчку добавлять не надо, пишем в найденной пустой QTableWidgetItem * nitm = new QTableWidgetItem (subq.value(1).toString()+" "+subq2.value(1).toString()+" "+subq.value(3).toString()+" "+subq.value(2).toString()); nitm->setBackgroundColor("#ffffff"); nitm->setStatusTip("ac"); ui->ttable->setItem(beginRow+m, 1+(ui->ttable->columnCount()/DaysCount)*dd, nitm); arfilled=true; break; } } }; if (!arfilled){ //Добавляем дополнительную строчку ui->ttable->insertRow(ui->ttable->rowCount()); addedRows++; //Делаем объединение ячеек for (int ds=0; ds<DaysCount; ds++) ui->ttable->setSpan(ui->ttable->rowCount()-1, 1+(ui->ttable->columnCount()/DaysCount)*ds,1,placesCount); QTableWidgetItem * nitm = new QTableWidgetItem (subq.value(1).toString()+" "+subq2.value(1).toString()+" "+subq.value(3).toString()+" "+subq.value(2).toString()); nitm->setBackgroundColor("#ffffff"); nitm->setStatusTip("ac"); ui->ttable->setItem(ui->ttable->rowCount()-1, 1+(ui->ttable->columnCount()/DaysCount)*dd, nitm); }; }else if( (hr>QTime::fromString(query.value(4).toString()).toString("hh").toInt()) &&(hr<=(QTime::fromString(query.value(4).toString()).toString("hh").toInt() + query.value(6).toInt())) ) { //Просто заливаем ячейку //Получаем id площадки и вычисляем её положение среди столбцов QSqlQuery plname; plname.exec("select name, color from places where place_id="+query.value(0).toString()); plname.first(); int col=1; for (int i=1+(ui->ttable->columnCount()/DaysCount)*dd; i<1+(ui->ttable->columnCount()/DaysCount)*dd+placesCount; i++) if(ui->ttable->item(1,i)->text()==plname.value(0).toString()) col=i; subq.exec("select * from clients where client_id="+query.value(1).toString()+";"); subq.first(); subq2.exec("select * from services where service_id="+query.value(2).toString()+";"); subq2.first(); QString ttip = query.value(4).toString()+"\n"+subq.value(1).toString()+"\n"+subq2.value(1).toString()+"\n"+subq.value(3).toString()+"\n"+subq.value(2).toString(); QColor colr = plname.value(1).toString(); QTableWidgetItem *newItem = new QTableWidgetItem(); newItem->setBackgroundColor(colr); newItem->setToolTip(ttip); newItem->setStatusTip(query.value(5).toString()); ui->ttable->setItem(ui->ttable->rowCount()-1-addedRows,col, newItem); }; }; }; }; //Объединяем горизонтальные заголовки в часы if (addedRows>0) ui->ttable->setSpan(beginRow, 0,addedRows+1,1); }; //А теперь объединяем площадки в дни for (int k=0;k<DaysCount;k++){ QString cday=day.addDays(k).toString("dd.MM.yyyy dddd"); QTableWidgetItem * nitm = new QTableWidgetItem (cday); nitm->setBackgroundColor("lightgray"); nitm->setStatusTip("ac"); ui->ttable->setItem(0, 1+(ui->ttable->columnCount()/DaysCount)*k, nitm); ui->ttable->setSpan(0, 1+(ui->ttable->columnCount()/DaysCount)*k,1,placesCount); } ui->ttable->horizontalHeader()->setResizeMode(QHeaderView::Stretch); }; }