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 CServerStatusTable::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 (is_traditional) { 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); setNumRows(0); if (sorting()) horizontalHeader()->setSortIndicator( -1 ); } if (query()->exec("SHOW STATUS")) { uint num_rows = query()->numRows(); uint num_fields = query()->numFields(); bool adjust = false; if (is_traditional) { 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) { adjust = true; if (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, query()->fields(i).name, previous_columns_map[i].size); else horizontalHeader()->setLabel(i, query()->fields(i).name); if (columnsWindow->isVisible()) columnsWindow->refresh(); is_first = false; adjust = true; } 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; setText(j, i, val); } j++; } } else { if (is_first) { setNumRows(0); setNumCols(num_rows); int i = 0; while (query()->next()) horizontalHeader()->setLabel(i++, query()->row(0)); if (columnsWindow->isVisible()) columnsWindow->refresh(); is_first = false; adjust = true; query()->dataSeek(0); } setNumRows(numRows() + 1); ulong i = 0; while (query()->next()) { const char * val = query()->row(1) ? query()->row(1) : NULL_TEXT; setText(numRows() - 1, i++, val); } } if (adjust) for (int j = 0; j < numCols(); j++) adjustColumn(j); if (max_scroll) scroll = verticalScrollBar()->maxValue(); verticalScrollBar()->setValue(scroll); } setBlocked(false); applyLastSort(); }
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(); }