/*
Message handler for when a header is clicked.
*/
void CMultiColumnSortListCtrl::OnHeaderClicked(NMHDR* pNMHDR, LRESULT* pResult) 
{
	HD_NOTIFY *pHDN = (HD_NOTIFY *) pNMHDR;
	if( pHDN->iButton == 0 )
	{
		if( IsControlPressed() )
			SortColumn( pHDN->iItem, MULTI_COLUMN_SORT );
		else
			SortColumn( pHDN->iItem, SINGLE_COLUMN_SORT );
	}
	*pResult = 0;
}
BOOL CListCtrl_Sortable::OnHeaderClick(NMHDR* pNMHDR, LRESULT* pResult)
{
	NMLISTVIEW* pLV = reinterpret_cast<NMLISTVIEW*>(pNMHDR);

	SetFocus();	// Ensure other controls gets kill-focus

	int colIndex = pLV->iSubItem;

	if (m_SortCol==colIndex)
	{
		m_Ascending = !m_Ascending;
	}
	else
	{
		m_SortCol = colIndex;
		m_Ascending = true;
	}

	if (SortColumn(m_SortCol, m_Ascending))
		SetSortArrow(m_SortCol, m_Ascending);

	*pResult = 0;

	return FALSE;	// Let parent-dialog get chance
}
示例#3
0
void BaseSqlTableModel::setSort(int column, Qt::SortOrder order) {
    if (sDebug) {
        qDebug() << this << "setSort()" << column << order << m_tableColumns;
    }

    int trackSourceColumnCount = m_trackSource ? m_trackSource->columnCount() : 0;

    if (column < 0 ||
            column >= trackSourceColumnCount + m_sortColumns.size() - 1) {
        // -1 because id column is in both tables
        qWarning() << "BaseSqlTableModel::setSort invalid column:" << column;
        return;
    }
        
    // There's no item to sort already, load from Settings last sort
    if (m_sortColumns.isEmpty()) {
        QString val = getModelSetting(COLUMNS_SORTING);
        QTextStream in(&val);
        
        while (!in.atEnd()) {
            int ordI = -1;
            QString name;
            
            in >> name >> ordI;
            
            int col = fieldIndex(name);
            if (col < 0) continue;
            
            Qt::SortOrder ord;
            ord = ordI > 0 ? Qt::AscendingOrder : Qt::DescendingOrder;
            
            m_sortColumns << SortColumn(col, ord);
        }
    }
示例#4
0
void wxExListViewFile::OnIdle(wxIdleEvent& event)
{
  event.Skip();

  if (
    !IsShown() ||
     GetItemCount() == 0 ||
     !wxConfigBase::Get()->ReadBool("AllowSync", true))
  {
    return;
  }

  if (m_ItemNumber < GetItemCount())
  {
    wxExListItem item(this, m_ItemNumber);

    if ( item.GetFileName().FileExists() &&
        (item.GetFileName().GetStat().GetModificationTime() != 
         GetItemText(m_ItemNumber, _("Modified")) ||
         item.GetFileName().GetStat().IsReadOnly() != item.IsReadOnly())
        )
    {
      item.Update();
      wxExLogStatus(item.GetFileName(), STAT_SYNC | STAT_FULLPATH);
      m_ItemUpdated = true;
    }

    m_ItemNumber++;
  }
  else
  {
    m_ItemNumber = 0;

    if (m_ItemUpdated)
    {
      if (wxConfigBase::Get()->ReadBool("List/SortSync", true))
      {
        SortColumn(_("Modified"), SORT_KEEP);
      }

      m_ItemUpdated = false;
    }
  }

  if (
    IsShown() &&
    GetItemCount() > 0)
  {
    CheckSync();
  }
}
示例#5
0
void wxExListViewFile::AddItems()
{
  int flags = 0;

  if (wxConfigBase::Get()->ReadBool(m_TextAddFiles, true)) 
  {
    flags |= wxDIR_FILES;
  }

  if (wxConfigBase::Get()->ReadBool(m_TextAddRecursive, true)) 
  {
    flags |= wxDIR_DIRS;
  }

  wxExDirWithListView dir(
    this,
    wxExConfigFirstOf(m_TextInFolder),
    wxExConfigFirstOf(m_TextAddWhat),
    flags);

  const int old_count = GetItemCount();

  dir.FindFiles();

  const int added = GetItemCount() - old_count;

  if (added > 0)
  {
    m_ContentsChanged = true;

    if (wxConfigBase::Get()->ReadBool("List/SortSync", true))
    {
      SortColumn(_("Modified"), SORT_KEEP);
    }
  }

  const wxString text = 
    _("Added") + wxString::Format(" %d ", added) + _("file(s)");

  wxLogStatus(text);
}
示例#6
0
int main(){
	string str = "data.txt";
	ATTRIBUTE_REC attriRec;

	strcpy(attriRec.attributeName,"Attribute1");
	attriRec.tableID = 12;
	attriRec.attributeID = 5;
	attriRec.dataType = INT;
	attriRec.dataLength = sizeof(int);
	attriRec.primary = false;
	attriRec.isCompress = true;
	attriRec.isSort = false;



	cout << "AttriRec DATA:" << endl;
	cout << attriRec.attributeName << " : " << attriRec.tableID << " : " << attriRec.attributeID << endl;

	SortColumn SC = SortColumn(str, attriRec);
	SC.exec();
}
示例#7
0
void BaseSqlTableModel::setSort(int column, Qt::SortOrder order) {
    if (sDebug) {
        qDebug() << this << "setSort()" << column << order;
    }

    int trackSourceColumnCount = m_trackSource ? m_trackSource->columnCount() : 0;

    if (column < 0 ||
            column >= trackSourceColumnCount + m_sortColumns.size() - 1) {
        // -1 because id column is in both tables
        qWarning() << "BaseSqlTableModel::setSort invalid column:" << column;
        return;
    }

    if (m_sortColumns.size() > 0 &&
            m_sortColumns.at(0).m_column == column) {
        // Only the order has changed
        m_sortColumns.replace(0, SortColumn(column, order));
    } else {
        // Remove column if already in history
        // As reverse loop to not skip an entry when removing the previous
        for (int i = m_sortColumns.size() - 1; i >= 0; --i) {
            if (m_sortColumns.at(i).m_column == column) {
                m_sortColumns.removeAt(i);
                break;
            }
        }

        // set new sort as head and shift out old sort
        m_sortColumns.prepend(SortColumn(column, order));

        if (m_sortColumns.size() > kMaxSortColumns) {
            m_sortColumns.removeLast();
        }
    }

    // we have two selects for sorting, since keeping the select history
    // across the two selects is hard, we do this only for the trackSource
    // this is OK, because the colums of the table are virtual in case of
    // preview column or individual like playlist track number so that we
    // do not need the history anyway.

    // reset the old order by clauses
    m_trackSourceOrderBy.clear();
    m_tableOrderBy.clear();
    m_trackSourceSortColumn = 0;
    m_trackSourceSortOrder = Qt::AscendingOrder;

    if (column > 0 && column < m_tableColumns.size()) {
        // Table sorting, no history
        m_tableOrderBy.append("ORDER BY ");
        QString field = m_tableColumns[column];
        QString sort_field = QString("%1.%2").arg(m_tableName, field);
        m_tableOrderBy.append(sort_field);
    #ifdef __SQLITE3__
        m_tableOrderBy.append(" COLLATE localeAwareCompare");
    #endif
        m_tableOrderBy.append((order == Qt::AscendingOrder) ?
                " ASC" : " DESC");
        m_sortColumns.clear();
    } else if (m_trackSource) {
        for (int i = 0; i < m_sortColumns.size(); ++i) {
            SortColumn sc = m_sortColumns.at(i);
            // TrackSource Sorting, current sort + two from history
            if (i == 0) {
                m_trackSourceOrderBy.append("ORDER BY ");
            } else {
                // second cycle
                m_trackSourceOrderBy.append(", ");
            }
            QString sort_field;
            if (sc.m_column == kIdColumn) {
                sort_field = m_trackSource->columnSortForFieldIndex(kIdColumn);
            } else {
                // + 1 to skip id column
                int ccColumn = sc.m_column - m_tableColumns.size() + 1;
                sort_field = m_trackSource->columnSortForFieldIndex(ccColumn);
                if (i == 0) {
                    // first cycle: main sort criteria
                    m_trackSourceSortColumn = ccColumn;
                    m_trackSourceSortOrder = sc.m_order;
                }
            }

            m_trackSourceOrderBy.append(sort_field);

    #ifdef __SQLITE3__
            m_trackSourceOrderBy.append(" COLLATE localeAwareCompare");
    #endif
            m_trackSourceOrderBy.append((sc.m_order == Qt::AscendingOrder) ?
                    " ASC" : " DESC");
            //qDebug() << m_trackSourceOrderBy;
        }
    }
}