cleanupwizard.cpp

来自「Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3」· C++ 代码 · 共 1,132 行 · 第 1/3 页

CPP
1,132
字号
#ifdef QTOPIA_PHONE            tooltip = new QLabel(this, "TooltipLabel");            tooltip->setFrameStyle(QFrame::Panel|QFrame::Raised);            tooltip->setAlignment(Qt::AlignCenter | Qt::WordBreak);            tooltip->setBackgroundMode(QWidget::PaletteHighlightedText);            tooltip->setAutoResize(TRUE);            tooltip->hide();                        timer = new QTimer(this, "TooltipTimer");#endif        }        virtual ~DocResultWidget() { };        void performSearch()        {              list->clear();            DocLnk *dl;            DocLnkSet allDocs;            selectedFileSize = 0;            uint hits = 0;#ifdef QTOPIA_PHONE            int width = (list->width()- list->style().scrollBarExtent().width()) /2  ;#endif            QFontMetrics fmt = list->fontMetrics();            for (QStringList::ConstIterator fit=filter.begin(); fit != filter.end(); ++fit) {                DocLnkSet resultDocs;                Global::findDocuments( &resultDocs, *fit );                const QList<DocLnk> doclist = resultDocs.children();                QListIterator<DocLnk> it(doclist);                DocCheckListItem *item = 0;                 QString unit;                int displayedSize;                while ((dl=it.current())) {                    QFileInfo fInfo(dl->file());                    //qDebug("%s %i", dl->name().latin1(), fInfo.size());                    if (minFileSize*1024 < (int)fInfo.size()){                        item = new DocCheckListItem(list, #ifdef QTOPIA_PHONE                                calcVisibleStrg(dl->name(), fmt, width)#else                                dl->name()#endif                                , QCheckListItem::CheckBox, *dl);                        selectedFileSize += fInfo.size(); //ignore size of link file (insignificant size)                        item->setOn(TRUE);                        sizeUnit(fInfo.size(), unit, &displayedSize);                        bool isMB = FALSE;                        if ( fInfo.size()/1024 > 10000 )                            isMB = TRUE;                        item->setText(1, tr("%1 %2").arg(displayedSize).arg(unit));                         list->insertItem(item);                        connect(item, SIGNAL(selectionChanged(int)), this, SLOT(selectionChanged(int)) );                        hits++;                    }                    ++it;                }            }           qDebug("%i documents found", hits);                         if (!hits) {                summary->setText(tr("<qt>There are no documents on this device"                    " that match the given filter critieria.</qt>"));                list->hide();                details->hide();                summary->setFocus();//update ContextBar            } else {                               QString unit;                int displayedSize = 0;                sizeUnit(selectedFileSize, unit, &displayedSize);                                    summary->setText(tr("<qt>%1 documents have been found. "                           "Deleting these documents would free up %2 %3 of "                           "storage.</qt>", "%1 = number, %2 = number, %3 = MB/kB/Bytes" )                        .arg(hits)                        .arg(displayedSize).arg(unit));                                details->setText(tr("Show details"));                details->disconnect();                connect(details, SIGNAL(clicked()), this, SLOT(showDetails()));                list->hide();                  details->setFocus();                details->show();                            }        };    public slots:                void cleanup() {                        DocCheckListItem *item = (DocCheckListItem *) list->firstChild();            if (!item) //empty list                return;                        qDebug("Deleting Documents...");            while (item && !cleanupStopped) {                if (item->isOn()) {                    QFileInfo info(item->docLink().file());                    emit docDeleted(item->docLink().name(), info.size());                    qApp->processEvents();                    item->docLink().removeFiles();                    item->setOn(FALSE); // uncheck to keep track what was done                }                item = (DocCheckListItem *) item->nextSibling();            }            if (cleanupStopped)                emit docDeleted(tr("Aborted"), -1);            else {                emit docDeleted(tr("Done"), -1);                list->clear();            }                    };        void stopCleanup() {            cleanupStopped = TRUE;                    };    public:        void setMinimalFileSize(int minSize) { minFileSize = minSize; };                void setFilter(QStringList& filterList) { filter = filterList; };        uint hasDocumentsToRemove(){ return selectedFileSize; };    signals:        void docDeleted(const QString & fileName, int fileSize);    protected:        void showEvent(QShowEvent *se) {            cleanupStopped = FALSE;            QWidget::showEvent(se);        };#ifdef QTOPIA_PHONE        void hideEvent(QHideEvent *) {            tooltip->hide();            timer->stop();        };#endif    private slots:        void showDetails() {            details->hide();            selectionChanged(0);            list->show();            list->setFocus();        };                //fileSize in Bytes - display in unit        void sizeUnit(int fileSize, QString& unit, int* display)        {            if (fileSize < 1024){                unit = tr("bytes");                *display=fileSize;            } else if (fileSize / 1024 < 10240) {// < 10MB                unit = tr("kB", "KiloByte");                *display = fileSize/1024;            } else {                unit = tr("MB", "MegaByte");                *display = fileSize/1024/1024;            }        };            void selectionChanged(int size) {            selectedFileSize += size;            QString unit;            int displayedSize;            sizeUnit(selectedFileSize, unit, &displayedSize);            summary->setText(tr("<qt>Uncheck documents you want to "                        "keep (%1 %2 selected)</qt>")                    .arg(displayedSize).arg(unit));#ifdef QTOPIA_PHONE            tooltip->hide();#endif        };        void documentSelected(QListViewItem * item) {#ifdef QTOPIA_PHONE                tooltip->hide();            if (!item)                return;            DocCheckListItem * dcli = (DocCheckListItem*) item;                        connect(timer, SIGNAL(timeout()), this, SLOT(showToolTip()));            timer->start(1000, TRUE);                        tooltip->setText(dcli->docLink().name());                        int x = (width() - tooltip->width())/2;                        tooltip->move(x, 0);#else            Q_UNUSED(item);#endif        };                void showToolTip() {#ifdef QTOPIA_PHONE            tooltip->raise();            tooltip->show();              timer->disconnect();            connect(timer, SIGNAL(timeout()), this, SLOT(hideToolTip()));            timer->start(2000, TRUE);#endif        };        void hideToolTip() {#ifdef QTOPIA_PHONE            tooltip->hide();#endif        };    private:#ifdef QTOPIA_PHONE        QString calcVisibleStrg(const QString& text, QFontMetrics& fmt, int availSpace) {            int i = 1;            int length = text.length();            while (i <= length && fmt.width(text, i) < availSpace)                 i++;            if (i <= length)                return text.left(i-3)+"..."; //no tr             else                return text;        };                QLabel * tooltip;        QTimer * timer;#endif        QListView *list;        QLabel *summary ;        QPushButton *details;        int minFileSize;        QStringList filter;        uint selectedFileSize;        bool cleanupStopped;        enum SizeCategory { Bytes, KBytes, MBytes };        friend class CleanupWizard;};class MailCleanWidget : public QWidget {    Q_OBJECT    public:        MailCleanWidget(QWidget* p = 0, const char* name = 0, WFlags f = 0)            :QWidget(p, name, f)        {            QVBoxLayout* vl = new QVBoxLayout(this);            vl->setSpacing( 6 );            vl->setMargin( 0 );#ifdef QTOPIA_PHONE            vl->addWidget(new QLabel(tr("<qt>Cleanup Messages</qt>"), this));            QFrame *line = new QFrame( this, "Line");            line->setFrameStyle(QFrame::HLine | QFrame::Sunken );            vl->addWidget(line);#endif            QGridLayout *grid = new QGridLayout(vl, 2, 2, 3);            grid->addWidget(new QLabel(tr("older than"), this), 0, 0);            dp = new QPEDateEdit( this, 0, FALSE, TRUE );            grid->addWidget( dp, 0, 1 );            grid->addWidget(new QLabel(tr("bigger than"), this), 1, 0);            sizeBox = new QSpinBox( 0, 10000, 10, this );            sizeBox->setButtonSymbols(QSpinBox::UpDownArrows);            sizeBox->setSuffix(" " + tr("kB", "KiloByte"));            sizeBox->setMinValue( 0 );            sizeBox->setMaxValue( 100000 );            sizeBox->setValue( 10 );            sizeBox->setLineStep( 10 );            grid->addWidget(sizeBox, 1, 1);                        QSpacerItem *spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum,                    QSizePolicy::Expanding);            vl->addItem(spacer);         };        private:        QSpinBox *sizeBox;        QPEDateEdit *dp;    friend class CleanupWizard;};class DatebookCleanWidget : public QWidget {    Q_OBJECT    public:        DatebookCleanWidget(QWidget* p = 0, const char* name = 0, WFlags f = 0)            :QWidget(p, name, f)        {               QVBoxLayout* vl = new QVBoxLayout(this);            vl->setSpacing( 6 );            vl->setMargin( 0 );#ifdef QTOPIA_PHONE            vl->addWidget(new QLabel(tr("<qt>Cleanup Events</qt>"), this));            QFrame *line = new QFrame( this, "Line");            line->setFrameStyle(QFrame::HLine | QFrame::Sunken );            vl->addWidget(line);#endif            QGridLayout *grid = new QGridLayout(vl, 2, 2, 3);            grid->addWidget(new QLabel(tr("older than"), this), 0, 0);            dp = new QPEDateEdit( this, 0, FALSE, TRUE );            grid->addWidget( dp, 0, 1 );             QSpacerItem *spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum,                    QSizePolicy::Expanding);            vl->addItem(spacer);         };        private:        QSpinBox *dayBox;        QPEDateEdit *dp;    friend class CleanupWizard;};CleanupWizard::CleanupWizard(QWidget * parent, const char* name, WFlags fl) #ifdef QTOPIA_PHONE    : QWidget(parent, name, fl ), wStack(0)#else    : QWizard(parent, name, TRUE, fl)#endif{    setCaption(tr("Cleanup Wizard"));#ifdef QTOPIA_PHONE    QVBoxLayout* vb = new QVBoxLayout(this) ;    wStack = new QWidgetStack(this);    vb->addWidget(wStack);#endif    init();}CleanupWizard::~CleanupWizard() {  }void CleanupWizard::init() {    m_PreselectionWidget = new PreselectionWidget(this);    m_PreselectionWidget->installEventFilter(this);    m_DocCleanWidget = new DocCleanWidget(this);    m_DocResultWidget = new DocResultWidget(this);    m_DocSummaryWidget = new DocSummaryWidget(this);    m_MailCleanWidget = new MailCleanWidget(this);    m_DatebookCleanWidget = new DatebookCleanWidget(this);    m_FinalCleanupWidget = new FinalCleanupWidget(this);#ifdef QTOPIA_PHONE     wStack->addWidget(m_PreselectionWidget, 0);    wStack->addWidget(m_DocCleanWidget, 1);    wStack->addWidget(m_DocResultWidget, 2);    wStack->addWidget(m_DocSummaryWidget, 3);    wStack->addWidget(m_MailCleanWidget, 4);    wStack->addWidget(m_DatebookCleanWidget, 5);    wStack->addWidget(m_FinalCleanupWidget, 6);        wStack->raiseWidget(m_PreselectionWidget);#else    addPage(m_PreselectionWidget, qApp->translate("PreselectionWidget", "What would you like to clean up?"));    addPage(m_DocCleanWidget, tr("Cleanup Documents"));    addPage(m_DocResultWidget, tr("Cleanup Documents"));    addPage(m_DocSummaryWidget, tr("Cleanup Documents"));    addPage(m_MailCleanWidget, tr("Cleanup Messages"));    addPage(m_DatebookCleanWidget, tr("Cleanup Events"));    addPage(m_FinalCleanupWidget, tr("Results"));    helpButton()->setEnabled(FALSE);    helpButton()->hide();    setFinishEnabled(m_FinalCleanupWidget, TRUE);#endif    connect(m_DocSummaryWidget, SIGNAL(startDocCleanup()), 

⌨️ 快捷键说明

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