⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 contextmodel.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the Qt Linguist of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "contextmodel.h"#include "messagemodel.h"#include "trwindow.h"static Qt::SortOrder sSortOrder = Qt::AscendingOrder;static int sSortColumn = 1;ContextItem::ContextItem(QString c): sortColumn(-1), com(""), ctxt(c){    unfinishedCount = 0;    dangerCount   = 0;    obsoleteCount = 0;}ContextItem::~ContextItem(){    // delete all the message items    for (int i=0; i<msgItemList.count(); ++i)    {        delete msgItemList[i];    }}void ContextItem::appendToComment(const QString& x){    if (!com.isEmpty())        com += QString("\n\n");    com += x;}MessageItem *ContextItem::messageItem(int i){    if ((i >= msgItemList.count()) || (i < 0))        return 0;    return msgItemList[i];}bool ContextItem::sortParameters(Qt::SortOrder &so, int &sc) const{    if (sortColumn == -1)        return false;    so = sortOrder;    sc = sortColumn;    return true;}void ContextItem::sortMessages(int column, Qt::SortOrder order){    sortOrder = sSortOrder = order;    sortColumn = sSortColumn = column;    qSort(msgItemList.begin(), msgItemList.end(), ContextItem::compare);}bool ContextItem::compare(const MessageItem *left, const MessageItem *right){    int res, nleft, nright;    if (sSortColumn == 0) {        nleft = left->danger() + left->finished() + left->translation().isEmpty();        nright = right->danger() + right->finished() + right->translation().isEmpty();        if ((sSortOrder == Qt::AscendingOrder) ? (nleft < nright) : !(nleft < nright))            return true;    }    else if (sSortColumn == 1) {        res = QString::localeAwareCompare(left->sourceText().remove('&'),            right->sourceText().remove('&'));        if ((sSortOrder == Qt::AscendingOrder) ? (res < 0) : !(res < 0))            return true;    }    else if (sSortColumn == 2) {        res = QString::localeAwareCompare(left->translation().remove('&'),            right->translation().remove('&'));        if ((sSortOrder == Qt::AscendingOrder) ? (res < 0) : !(res < 0))            return true;    }    return false;}ContextModel::ContextModel(QObject *parent): QAbstractTableModel(parent), sortColumn(-1){}ContextItem *ContextModel::contextItem(const QModelIndex &indx) const{    if (indx.isValid())        return cntxtList.at(indx.row());    return 0;}bool ContextModel::sortParameters(Qt::SortOrder &so, int &sc) const{    if (sortColumn == -1)        return false;    so = sortOrder;    sc = sortColumn;    return true;}void ContextModel::updateItem(QModelIndex indx){    QModelIndex strtindx = createIndex(indx.row(), 0);    QModelIndex endindx = createIndex(indx.row(), 2);    emit dataChanged(strtindx, endindx);}void ContextModel::clearContextList(){    int r = cntxtList.count();    if (r <= 0) // no items        return;    for (int i=0; i<r; ++i)        delete cntxtList[i];    cntxtList.clear();    reset();}// since we don't add or remove single rows, update all at once...void ContextModel::updateAll(){    reset();}int ContextModel::rowCount(const QModelIndex &) const{    return cntxtList.count();}int ContextModel::columnCount(const QModelIndex &) const{    return 3;}QVariant ContextModel::headerData(int section, Qt::Orientation orientation, int role) const{    if ((role == Qt::DisplayRole) && (orientation == Qt::Horizontal)) {        switch(section)    {        case 0:            return tr("Done");        case 1:            return tr("Context");        case 2:            return tr("Items");        }        return "Error";    }    return QVariant();}QVariant ContextModel::data(const QModelIndex &index, int role) const{    int row = index.row();    int column = index.column();    if (row >= cntxtList.count() || !index.isValid())        return QVariant();    ContextItem *cntxtItem = cntxtList.at(row);    if (role == Qt::DisplayRole) {        switch(column) {        case 0: // done            return QVariant();        case 1: // context            return cntxtItem->context().simplified();        case 2: // items            QString s;            int itemCount = cntxtItem->messageItemsInList();            int obsoleteCount = cntxtItem->obsolete();            int unfinishedCount = cntxtItem->unfinished();            s.sprintf("%d/%d", itemCount - unfinishedCount - obsoleteCount,                itemCount - obsoleteCount);            return s;        }    }    else if ((role == Qt::DecorationRole) && (column == 0)) {        if (cntxtItem->isContextObsolete())            return qVariantFromValue(*TrWindow::pxObsolete);        else if (cntxtItem->finished())            return qVariantFromValue(*TrWindow::pxOn);        else            return qVariantFromValue(*TrWindow::pxOff);    }    return QVariant();}void ContextModel::sort(int column, Qt::SortOrder order){    if (cntxtList.count() <= 0)        return;    sortOrder = sSortOrder = order;    sortColumn = sSortColumn = column;    qSort(cntxtList.begin(), cntxtList.end(), ContextModel::compare);    emit dataChanged(index(0,0), index(cntxtList.count()-1, 2));}bool ContextModel::compare(const ContextItem *left, const ContextItem *right){    int res;    int nleft, nright;    switch (sSortColumn)    {    case 0:        nleft = left->isContextObsolete() + left->finished();        nright = right->isContextObsolete() + right->finished();        if ((sSortOrder == Qt::AscendingOrder) ? (nleft < nright) : !(nleft < nright))            return true;        break;    case 1:        res = QString::localeAwareCompare(left->context(), right->context());        if ((sSortOrder == Qt::AscendingOrder) ? (res < 0) : !(res < 0))            return true;        break;    case 2:        nleft = left->messageItemsInList() - left->unfinished() - left->obsolete();        nright = right->messageItemsInList() - right->unfinished() - right->obsolete();        if ((sSortOrder == Qt::AscendingOrder) ? (nleft < nright) : !(nleft < nright))            return true;        break;    }    return false;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -