Esempio n. 1
0
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();
}