📄 createsmileywindow.cpp
字号:
emit customSmileyChanged(); } close();}// add a groupvoid CustomSmileyManager::slotAddGroupClicked( ){ QString name = QString(i18n("Group%1")).arg(m_Config->numGroups()); QString path = EvaMain::user->getSetting()->getCustomSmileyDir() + "/"; QDir dir(path + name); if(!dir.exists()){ // if the dest dir doesn't exist, if(dir.mkdir( path + name )) // create the dir m_IsChanged = true; else{ // create failed KMessageBox::error( this, i18n( "Cannot create the directory \"%1\". " ).arg( dir.path() ), i18n( "Add Group" ) ); return; } } else { // the directory exists, the group name should be used already KMessageBox::error( this, i18n( "A directory named \"%1\" already exists. " ).arg( dir.path() ), i18n( "Directory Exists!" ) ); return; } QListViewItem *item = new QListViewItem(lvGroups, lvGroups->lastItem(), name); m_Config->addGroup( name ); m_IsChanged = true; m_Config->saveXML(); lvGroups->setSelected( item, true); d->m_Action = GroupActionPrivate::GEdit; d->m_Item = item; d->m_OldName = name; item->setRenameEnabled( 0, true); item->startRename( 0 );}// rename the groupvoid CustomSmileyManager::slotEditGroupClicked( ){ QListViewItem *item = lvGroups->selectedItem(); if(item){ if(item == lvGroups->firstChild()) return; d->m_Action = GroupActionPrivate::GEdit; d->m_Item = item; d->m_OldName = item->text( 0 ); item->setRenameEnabled( 0, true ); item->startRename( 0 ); }}/** remove one group, 2 options: 1: remove all smileys in this group, then remove the group itself 2: move all sub items into another group, then remove the empty group NOTE: this operation is un-recoverable.*/void CustomSmileyManager::slotRemoveGroupClicked( ){ if(!m_Config) return; QListViewItem *item = lvGroups->selectedItem(); if(item){ if(item == lvGroups->firstChild()) return; // never remove default group int index = m_Config->groupIndex( item->text( 0 ) ); if(index <= -1) return; QString path = EvaMain::user->getSetting()->getCustomSmileyDir() + "/"; QDir dir( path + item->text(0) ); FaceList list = m_Config->groupMembers( index); int result = -2; if(list.size() > 0 ){ result = RmSmileyGroupDialog::QueryDialog( index, m_Config, this); switch(result){ case -2: // abort return; break; case -1: // remove all break; default: // otherwise, move to result { if(dir.exists()){ dir.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks ); const QFileInfoList *list = dir.entryInfoList(); QFileInfoListIterator it( *list); QFileInfo *fi; QString destDir = path; if(result>0) destDir += ( m_Config->groupName( result ) + "/") ; while( (fi = it.current() ) != 0 ){ EvaHelper::copyFile(fi->absFilePath(), (destDir + fi->fileName()) ); ++it; } } m_Config->moveChildrenTo(index, result); m_IsChanged = true; } } } if(dir.exists()){ // update the in-memory config if(m_Config->removeGroup( index )){ lvGroups->takeItem( item); delete item; m_IsChanged = true; } else return; dir.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks ); const QFileInfoList *list = dir.entryInfoList(); QFileInfoListIterator it( *list); QFileInfo *fi; while( (fi = it.current() ) != 0 ){ dir.remove( fi->absFilePath() ); ++it; } // as all files have been deleted, we need keep the config file up to date. m_Config->saveXML(); if( ! dir.rmdir( dir.path(), true)){ KMessageBox::error( this, i18n( "Remove directory \"%1\" failed. " ).arg( dir.path() ), i18n( "Remove Directory!" ) ); } } }}void CustomSmileyManager::slotGroupRenamed( QListViewItem *item, int /*col*/, const QString & text){ item->setRenameEnabled( 0, false ); // make it un-editable if(!m_Config) return; if(d->m_Action != GroupActionPrivate::GEdit) return; if(d->m_Item != item ) return; if(d->m_OldName == text) return; if( ! m_Config->renameGroup(d->m_OldName, text)){ KMessageBox::information( this, i18n( "Cannot rename the group name \"%1\" to \"%2\". " ) .arg( d->m_OldName).arg( text), i18n( "Rename Group" ) ); } else{ QString path = EvaMain::user->getSetting()->getCustomSmileyDir() + "/"; QDir dir(path + d->m_OldName); if(dir.exists()){ if(!dir.rename(path + d->m_OldName, path + text, true)){ KMessageBox::error( this, i18n( "Can not change the directory name: %1. " ) .arg( dir.path()), i18n("Rename Group") ); } else{ m_IsChanged = true; } } else { if(dir.mkdir( path + text )){ m_IsChanged = true; }else KMessageBox::error( this, i18n( "Cannot create the directory: \"%1\". " ).arg( dir.path() ), i18n( "Rename Group" ) ); } }}void CustomSmileyManager::slotGroupSelectionChanged( QListViewItem * group){ if(!group) return; group->setSelected( true ); loadSmileys(m_Config->groupIndex( group->text(0) ) );}void CustomSmileyManager::slotFaceSelectionChanged( ){ // QTable::numSelections() doesn't return the correct value // if use select some rows by pressing shift key int numSelections = 0; int first = -1; for(int r = 0; r < tblFaceList->numRows(); r++){ numSelections += ((tblFaceList->isRowSelected(r))?1:0); if( (numSelections == 1) && (first == -1) ){ first = r; } } bool isSingle = (numSelections == 1); btnEdit->setEnabled(isSingle); btnUp->setEnabled(isSingle); btnDown->setEnabled(isSingle); if(numSelections){ QListViewItem *item = lvGroups->selectedItem(); if(item){ int gId = m_Config->groupIndex( item->text( 0 ) ); if(gId < 0) return; CustomFace face = m_Config->getFace( gId, first); QString path = EvaMain::user->getSetting()->getCustomSmileyDir() + "/"; if(gId > 0 ) path += (item->text(0) + "/"); QString ext = face.org().right(3); lblPreview->clear(); if(ext.lower() == "gif"){ lblPreview->setMovie( QMovie(path + face.org())); } else { QImage img(path + face.org() ); lblPreview->setPixmap( QPixmap(img.smoothScale( lblPreview->size(), QImage::ScaleMin))); } } }}void CustomSmileyManager::slotFaceValueChanged( int row, int col ){ if(!m_Config) return; QListViewItem *item = lvGroups->selectedItem(); if(item){ int gId = m_Config->groupIndex( item->text( 0 ) ); if(gId < 0) return; QString text = tblFaceList->text(row, col); switch(col){ case 1: // tip m_Config->updateFaceTip(gId, row, tblFaceList->text(row, col)); m_Config->saveXML(); m_IsChanged = true; break; case 2: // shortcut m_Config->updateFaceShortcut(gId, row, tblFaceList->text(row, col)); m_Config->saveXML(); m_IsChanged = true; break; default: // anything else, ignore break; } }}void CustomSmileyManager::slotAddSmiley( ){ if(!m_Config) return; QListViewItem *item = lvGroups->selectedItem(); if(! item) return; int gId = m_Config->groupIndex( item->text( 0 ) ); if(gId < 0) return; CreateSmileyWindow *win = new CreateSmileyWindow(QString::null, gId); connect(win, SIGNAL(addCustomSmileyReady( bool )), this, SLOT(slotAddCustomSmileyReady( bool ))); win->show();}void CustomSmileyManager::slotAddCustomSmileyReady( bool ok){ if(!ok) return; if(!m_Config) return; QListViewItem *item = lvGroups->selectedItem(); if(! item) return; int gId = m_Config->groupIndex( item->text( 0 ) ); if(gId < 0) return; m_Config->loadXML(); loadSmileys(gId); // notify smiley popup window to update emit customSmileyChanged();}bool CustomSmileyManager::removeSmileyFile( const CustomFace & face ){ QString path = EvaMain::user->getSetting()->getCustomSmileyDir() + "/"; if(face.group() > 0){ path += ( m_Config->groupName( face.group()) + "/"); } QDir dir( path); if(dir.exists()){ if(dir.remove( path + face.fixed())) // remove thumbnail return dir.remove(path + face.org()); // remove smiley } return false;}void CustomSmileyManager::slotRemoveSmiley( ){ if(!m_Config) return; QListViewItem *item = lvGroups->selectedItem(); if(item){ int gId = m_Config->groupIndex( item->text( 0 ) ); if(gId < 0) return; // as removing row also clear the selection( or change to the last row), // so we have to record the selection first bool *flags = new bool[tblFaceList->numRows()]; int row = 0; for(row = 0; row < tblFaceList->numRows(); row++){ if (tblFaceList->isRowSelected(row)) flags[row] = true; else flags[row] = false; } for( row = tblFaceList->numRows() -1; row >= 0; row--){ if (flags[row]){ CustomFace face = m_Config->getFace( gId, row); if(removeSmileyFile(face)){ // update config first m_Config->removeFace( gId, row); m_Config->saveXML(); // update config file in case // update display tblFaceList->removeRow(row); m_IsChanged = true; } } } delete []flags; }}void CustomSmileyManager::slotEditSmiley( ){ int row = 0; for(row = 0; row < tblFaceList->numRows(); row++){ if (tblFaceList->isRowSelected(row)) break; } // start editing tip. (should we set editing shortcut as default?) tblFaceList->editCell(row, 1);}void CustomSmileyManager::slotUpSmiley( ){ if(!m_Config) return; QListViewItem *item = lvGroups->selectedItem(); if(item){ int gId = m_Config->groupIndex( item->text( 0 ) ); if(gId < 0) return; int row = 1; // the first row cannot be moved up for(row = 1; row < tblFaceList->numRows(); row++){ if (tblFaceList->isRowSelected(row)){ m_Config->moveFaceUp(gId, row); tblFaceList->swapRows(row, row -1); //tblFaceList->updateContents(); tblFaceList->clearSelection(); tblFaceList->selectRow(row - 1); m_IsChanged = true; break; } } }}void CustomSmileyManager::slotDownSmiley( ){ if(!m_Config) return; QListViewItem *item = lvGroups->selectedItem(); if(item){ int gId = m_Config->groupIndex( item->text( 0 ) ); if(gId < 0) return; int row = 0; for(row = 0; row < tblFaceList->numRows() - 1; row++){ // ignore the last row if (tblFaceList->isRowSelected(row)) { m_Config->moveFaceDown( gId, row); tblFaceList->swapRows(row, row + 1); //tblFaceList->updateContents(); tblFaceList->clearSelection(); tblFaceList->selectRow(row + 1); m_IsChanged = true; break; } } }}void CustomSmileyManager::slotMoveToSmiley( ){ if(!m_Config) return; QListViewItem *item = lvGroups->selectedItem(); if(item){ if(m_MoveToMenu){ disconnect(m_MoveToMenu, 0, 0, 0); delete m_MoveToMenu; } m_MoveToMenu = new QPopupMenu(0,"moveto"); int currIndex = m_Config->groupIndex( item->text( 0 ) ); QStringList groups = m_Config->groupNames(); for( int i=0; i < (int)(groups.count()); i++){ if(i != currIndex ) // ignore the group we are operating on m_MoveToMenu->insertItem(groups[i], i); } connect(m_MoveToMenu, SIGNAL(activated(int)), this, SLOT(slotMoveSmileyTo(int))); QPoint p = btnMoveTo->mapToGlobal(QPoint(btnMoveTo->width()+1,0)); m_MoveToMenu->popup( p ); }}void CustomSmileyManager::slotMoveSmileyTo( int Id ){ if(!m_Config) return; QListViewItem *item = lvGroups->selectedItem(); if(item){ QString srcGName = item->text(0); // selected group name int gId = m_Config->groupIndex( srcGName ); // selected group index QString destGName = m_Config->groupName( Id); // dest group name if( (gId < 0) || (Id < 0) || (gId == Id) ) return; QString dir = EvaMain::user->getSetting()->getCustomSmileyDir() + "/"; QString src = dir, dest = dir; if(gId != 0) src += (srcGName + "/"); if(Id != 0 ) dest += (destGName + "/"); int row = 0; bool moved = false; // as removing row also clear the selection( or change to the last row), // so we have to record the selection first bool *flags = new bool[tblFaceList->numRows()]; for(row = 0; row < tblFaceList->numRows(); row++){ if (tblFaceList->isRowSelected(row)) flags[row] = true; else flags[row] = false; } for( row = tblFaceList->numRows() -1; row >= 0; row--){ if (flags[row]){ CustomFace face = m_Config->getFace( gId, row); if(m_Config->moveFaceTo( gId, row, Id)){ // if update config true EvaHelper::copyFile( src + face.fixed(), dest + face.fixed()); EvaHelper::copyFile( src + face.org(), dest + face.org()); QDir smileyDir(src); smileyDir.remove( src + face.fixed()); smileyDir.remove( src + + face.org()); // update display tblFaceList->removeRow(row); m_IsChanged = true; moved = true; } } } delete []flags; if(moved) m_Config->saveXML(); // save config in case of some unexpected situations }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -