📄 categoryedit_p.cpp
字号:
gl->addWidget( d->deleteBtn, 1, 2 );#endif } d->mStrApp = appName; d->mVisible = visibleName;#ifdef QTOPIA_DESKTOP // This was set before this function call d->checkable = gCheckable;#else d->checkable = TRUE;#endif QStringList appCats = d->mCategories.labels( d->mStrApp ); QArray<int> cats = d->mCategories.ids(d->mStrApp, appCats); lvView->clear(); QStringList::ConstIterator it; int i, j; for ( i = 0, it = appCats.begin(); it != appCats.end(); i++, ++it ) { CategoryEditListItem *chk = new CategoryEditListItem( lvView, (*it), d->checkable ); d->setGlobal( chk, d->mCategories.isGlobal((*it)) ); if ( d->checkable ) { // Is this record using this category, then we should check it for ( j = 0; j < (int)recCats.count(); j++ ) { if ( cats[i] == recCats[j] ) { chk->setOn( true ); break; } } } } lvView->setSorting( 0, TRUE ); lvView->sort(); if ( lvView->childCount() >= 1 ) { lvView->setSelected( lvView->firstChild(), TRUE ); } enableButtons();}#ifdef QTOPIA_DESKTOPvoid CategoryEdit::setCategories( const QArray<int> &recCats, QString appName, QString visibleName, bool checkable ){ // setCategories will grab this value and put it into the d pointer gCheckable = checkable; setCategories( recCats, appName, visibleName );}void CategoryEdit::refresh(){ if ( !d ) return; d->mCategories.load( categoryFileName() ); setCategories( QArray<int>(), d->mStrApp, d->mVisible, d->checkable );}#endifCategoryEdit::~CategoryEdit(){ if ( d ) delete d;}void CategoryEdit::slotSetText( QListViewItem *newItem ){ updateInline(); d->editItem = (CategoryEditListItem*)newItem; d->nameChanged = FALSE; if ( !d->editItem ) return; d->orgName = d->editItem->text(0);}void CategoryEdit::slotAdd(){ QString name = ""; d->mCategories.addCategory( d->mStrApp, name ); QListViewItem *chk = new CategoryEditListItem( lvView, name, d->checkable ); d->setGlobal( chk, FALSE ); lvView->setSelected( chk, TRUE ); d->nameChanged = TRUE; enableButtons(); d->editingNew = TRUE;}void CategoryEdit::slotRemove(){ d->editItem = (CategoryEditListItem*)lvView->selectedItem(); if ( d->editItem ) { QListViewItem *nextItem = d->editItem->itemBelow(); if ( !nextItem ) nextItem = d->editItem->itemAbove(); if ( !d->editingNew ) { if ( d->isGlobal( d->editItem ) ) { switch( QMessageBox::warning( this, tr( "Removing Category" ), tr( "<qt>Deleting a global category " "effects all applications. " "Any items in this category " "will become unfiled." "<br>Are you sure you want to do this?</qt>"), QMessageBox::Yes, QMessageBox::No | QMessageBox::Default ) ) { case QMessageBox::Yes: break; default: return; } } else { switch( QMessageBox::warning( this, tr( "Removing Category" ), tr( "<qt>Deleting a local category will make " "all items in this category unfiled." "<br>Are you sure you want to do this?</qt>"), QMessageBox::Yes, QMessageBox::No ) ) { case QMessageBox::Yes: break; default: return; } } } d->mCategories.removeCategory( d->mStrApp, d->orgName ); d->settingItem = TRUE; delete d->editItem; d->editItem = 0; d->settingItem = FALSE; if ( nextItem ) lvView->setSelected( nextItem, TRUE ); } if ( lvView->childCount() < 1 ) { d->settingItem = TRUE; d->settingItem = FALSE; } enableButtons();}void CategoryEdit::slotSetGlobal( bool isChecked ){ if ( d->settingItem ) return; if ( d->editItem ) { if ( isChecked ) { d->setGlobal( d->editItem, isChecked ); } else { switch( QMessageBox::warning( this, tr( "Global Category" ), tr( "<qt>Making this category local " "will delete it from all other apps. " "Any items in this category will become " "unfiled.<br>Continue?</qt>" ), QMessageBox::Yes, QMessageBox::No ) ) { case QMessageBox::Yes : break; default: return; } d->setGlobal( d->editItem, isChecked ); } d->mCategories.setGlobal( d->mStrApp, d->orgName, isChecked ); }}void CategoryEdit::slotTextChanged( const QString &str ){ if ( d->editItem == 0 || d->settingItem ) return; d->nameChanged = TRUE; d->editItem->setText( str );}QArray<int> CategoryEdit::newCategories(){ QArray<int> a; if ( d ) { QStringList sl; d->mCategories.save( categoryFileName() ); QListViewItemIterator it( lvView ); QValueList<int> l; for ( ; it.current(); ++it ) { CategoryEditListItem* item = (CategoryEditListItem*)it.current(); if ( item->isOn() ) l.append( d->mCategories.id( d->mStrApp, item->label() ) ); } int i = 0; a.resize( l.count() ); for ( QValueList<int>::ConstIterator lit = l.begin(); lit != l.end(); ++lit ) { a[(int)i++] = *lit; } } return a;}void CategoryEdit::accept(){}#ifdef QTOPIA_DESKTOPstatic QString mCatFileName;void Categories::setCategoryFileName(const QString &s){ mCatFileName = s;}#endifQString categoryFileName(){#ifdef QTOPIA_DESKTOP return mCatFileName;#else QDir dir = QString(QDir::homeDirPath() + "/Settings"); if ( !dir.exists() )#ifndef Q_OS_WIN32 mkdir( dir.path().local8Bit(), 0700 );#else dir.mkdir(dir.path());#endif return dir.path() + "/" + "Categories" + ".xml"; // No tr#endif // QTOPIA_DESKTOP}void CategoryEdit::kludge(){ lvView->setMaximumHeight( 130 );}bool CategoryEdit::tryAccept(){ if ( d->editDialogHack ) { slotSetText( d->editItem ); if ( d->changedGlobal ) slotSetGlobal( !d->isGlobal( d->editItem ) ); return TRUE; } else { return updateInline(); }}bool CategoryEdit::updateInline(){ bool result = TRUE; disconnect( lvView, SIGNAL( selectionChanged(QListViewItem*) ), this, SLOT( slotSetText(QListViewItem*) ) ); if ( d->nameChanged && d->editItem ) { d->settingItem = TRUE; QString newName = d->editItem->text( 0 ); RenameResult r = (RenameResult) tryRename(newName, d->isGlobal( d->editItem ) ); if ( r == Ok ) { d->editItem->setText( newName ); } else if ( r == Failed ) { d->editItem->setText( d->orgName ); result = FALSE; } else if ( r == MadeGlobal ) { d->editItem->setText( d->orgName ); QListViewItem *c = new CategoryEditListItem( lvView, newName, d->checkable ); d->setGlobal( c, TRUE ); result = FALSE; } d->settingItem = FALSE; } connect( lvView, SIGNAL( selectionChanged(QListViewItem*) ), this, SLOT( slotSetText(QListViewItem*) ) ); return result;}static bool contains(const Categories &c, const QString &label){ if ( c.globalGroup().contains(label) ) return TRUE; for ( QMap<QString, CategoryGroup>::ConstIterator it = c.appGroupMap().begin(); it != c.appGroupMap().end(); ++it ) { if ( (*it).contains(label) ) return TRUE; } return FALSE;}static void setGlobal(Categories &c, const QString &catname){ for ( QMap<QString, CategoryGroup>::ConstIterator it = c.appGroupMap().begin(); it != c.appGroupMap().end(); ++it ) { if ( (*it).contains(catname) ) { c.setGlobal( it.key(), catname, TRUE ); return; } }}int CategoryEdit::tryRename(const QString &newName, bool global){ QString name = newName.stripWhiteSpace(); if ( name == d->orgName ) return (int) Ok; if (name.isEmpty() ) return (int) Failed; if ( contains(d->mCategories, newName) && !d->mCategories.globalGroup().contains(newName) && !d->mCategories.appGroupMap()[d->mStrApp].contains(newName) ) { switch( QMessageBox::warning( d->w, tr("Duplicate categories"), tr("<qt>There already exists a local category named " "<b>%1</b> in another application." "<br>Make that category a global group?</qt>").arg(newName), QMessageBox::Yes, QMessageBox::No) ) { case QMessageBox::Yes: setGlobal(d->mCategories, newName); return (int) MadeGlobal; case QMessageBox::No: return (int) Failed; } } bool success; if ( global ) { success = d->mCategories.renameGlobalCategory( d->orgName, newName ); } else { success = d->mCategories.renameCategory( d->mStrApp, d->orgName, newName ); } if ( !success ) { //append number to cat name until we find a name that doesn't exist yet int version = 2; QString tmpName; while (!success) { tmpName = newName; tmpName += QString::number(version); if (global) { success = d->mCategories.renameGlobalCategory( d->orgName, tmpName ); } else { success = d->mCategories.renameCategory( d->mStrApp, d->orgName, tmpName ); } if (success) d->orgName = tmpName; version++; } QMessageBox::warning( d->w, tr("Duplicate categories"), tr("<qt>There is already a category named " "%1. Please choose another name, or delete " "the duplicate.</qt>").arg(newName) ); return (int) Failed; } else return (int) Ok;}void CategoryEdit::enableButtons(){ CategoryEditListItem *editItem = (CategoryEditListItem*)lvView->currentItem(); bool e = editItem?editItem->editable():FALSE; d->editAction->setEnabled(e); d->deleteAction->setEnabled(e);#ifndef QTOPIA_PHONE d->editBtn->setEnabled(e); d->deleteBtn->setEnabled(e);#endif}#include "categoryedit_p.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -