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 + -
显示快捷键?