void CQueryTable::refresh() { if (isBlocked()) return; reset(); m_cancel = false; if (!query()->isResultNull()) { setBlocked(true); query()->dataSeek(0); uint num_fields = query()->numFields(); ulong num_rows = query()->numRows(); setNumRows(num_rows); setNumCols(num_fields); QPixmap icon; bool columns_ok = (keepColumnWidth() && previous_columns_map.count() == num_fields); if (columns_ok) for (uint i = 0; i < num_fields; i++) columns_ok &= (previous_columns_map[i].label == query()->fields(i).name); if (!columns_ok && keepColumnWidth()) previous_columns_map.clear(); for (uint i = 0; i < num_fields; i++) { if (IS_PRI_KEY(query()->fields(i).flags)) icon = pkIcon; else if (IS_MUL_KEY(query()->fields(i).flags)) icon = mulIcon; else if (IS_UNI_KEY(query()->fields(i).flags)) icon = uniIcon; else icon = nothingIcon; if (columns_ok && previous_columns_map[i].label == query()->fields(i).name) horizontalHeader()->setLabel(i, icon, query()->fields(i).name, previous_columns_map[i].size); else horizontalHeader()->setLabel(i, icon, query()->fields(i).name); } if (hasProcessEvents()) qApp->processEvents(); else updateScrollBars(); ulong j = 0; while (query()->next(!hasProcessEvents())) { if (m_cancel) break; for (uint i = 0; i < num_fields; i++) setText(j, i, query()->row(i)); j++; } setBlocked(false); emit refreshed(); } else if (!previous_columns_map.empty()) previous_columns_map.clear(); }
void CProcessListTable::refresh() { if (isBlocked()) return; setBlocked(true); bool max_scroll = false; int scroll = is_first ? 0 : verticalScrollBar()->value(); if (scroll >= verticalScrollBar()->maxValue() - 1 && scroll != 0) max_scroll = true; if (keepColumnWidth() && numCols() > 0) for (int i = 0; i < numCols(); i++) previous_columns_map.insert(i, CTable::OldColumn(horizontalHeader()->sectionSize(i), horizontalHeader()->label(i))); clearCellWidget(currentRow(), currentColumn()); if (is_first) ensureVisible(0, 0); query()->freeResult(); setNumRows(0); horizontalHeader()->setSortIndicator( -1 ); if (query()->exec(sql)) { uint num_rows = qry->numRows(); uint num_fields = qry->numFields(); bool columns_ok = (keepColumnWidth() && previous_columns_map.count() == num_fields); if (columns_ok) for (uint i = 0; i < num_fields; i++) columns_ok &= (previous_columns_map[i].label == query()->fields(i).name); if (!columns_ok && keepColumnWidth()) previous_columns_map.clear(); setNumRows(num_rows); setNumCols(num_fields); if (is_first) { for (uint i = 0; i < num_fields; i++) { if (columns_ok && previous_columns_map[i].label == query()->fields(i).name) horizontalHeader()->setLabel(i, qry->fields(i).name, previous_columns_map[i].size); else horizontalHeader()->setLabel(i, qry->fields(i).name); setColumnReadOnly (i, (i != 0)); } is_first = false; } if (hasProcessEvents()) qApp->processEvents(); else updateScrollBars(); uint j = 0; while (query()->next()) { for (uint i = 0; i < num_fields; i++) { const char *val = query()->row(i) ? query()->row(i) : NULL_TEXT; if (i == 0) setItem (j, i, new CCheckTableItem(this, val)); else setText(j, i, val); } j++; } if (!columns_ok) for (j = 0; j < num_fields; j++) adjustColumn(j); if (max_scroll) scroll = verticalScrollBar()->maxValue(); verticalScrollBar()->setValue(scroll); } setBlocked(false); applyLastSort(); }
void CQueryTable::save() { if (isBlocked()) return; tmpFileName = getSaveFileName(tmpFileName, "txt", tr("Text Files (*.txt);;All Files(*.*)")); if (tmpFileName.isEmpty()) return; QFile file( tmpFileName ); if (file.exists() && myApp()->confirmCritical()) if ((QMessageBox::warning(0, tr("Replace File"), tr("The specified file name already exists.\nDo you want to replace it ?"), QMessageBox::Yes, QMessageBox::No) != QMessageBox::Yes)) return; if ( !file.open( IO_WriteOnly ) ) { if (mysql()->messagePanel()) mysql()->messagePanel()->critical(tr("An error occurred while saving the file")); return; } setBlocked(true); QString line_terminator = mysql()->lineTerminator(true); QString title = caption() + line_terminator; title += tr("Connection") + ": " + mysql()->connectionName() + line_terminator; title += tr("Host") + ": " + mysql()->hostName() + line_terminator; title += tr("Saved") + ": " + QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") + line_terminator; title = CApplication::commentText(title, line_terminator) + line_terminator; QTextStream ts( &file ); ts << title; QString tmp = tr("Query") + ":" + line_terminator; tmp += query()->lastQuery().replace(QRegExp("\n"), line_terminator) + line_terminator; ts << CApplication::commentText(tmp, line_terminator) << line_terminator; query()->dataSeek(0); uint num_fields = query()->numFields(); QString encl = mysql()->fieldEncloser(true); QString sep = mysql()->fieldSeparator(true); uint j; bool add_sep = false; for (j = 0; j < num_fields; j++) { if (horizontalHeader()->sectionSize(j) != 0) { if (add_sep) ts << sep; ts << encl << query()->fields(j).name << encl; if (!add_sep) add_sep = true; } } ts << line_terminator; if (numRows() <= 0 || numCols() <= 0) return; QString repl_empty = mysql()->replaceEmpty(true); while (query()->next(!hasProcessEvents())) { add_sep = false; for (j = 0; j < num_fields; j++) if (horizontalHeader()->sectionSize(j) != 0) { const char* r = query()->row(j); if (!r) r = "[NULL]"; if (!*r) r = (const char*)repl_empty; if (add_sep) ts << sep; ts << encl << r << encl; if (!add_sep) add_sep = true; } ts << line_terminator; } file.close(); if (mysql()->messagePanel()) mysql()->messagePanel()->information(tr("Successfully saved") + ": " + tmpFileName); setBlocked(false); }