예제 #1
0
void chanFileSystemDockWidget::renameFile() {

    QList<QTreeWidgetItem*> items = m_fileSystemTree->selectedItems();

    if (items.isEmpty()) return;

    QTreeWidgetItem* parent = items.front();

    QString fileName = QFileDialog::getSaveFileName(this, tr("edit name"), ".",
                       tr("c/c++ header file(*.h)\n"
                          "c/c++ header file(*.hpp)\n"
                          "c source file(*.c)\n"
                          "c++ source file(*.cpp)"
                         ));

    if (fileName.isEmpty()) return;

    QTreeWidgetItem* item = items.front();

    //修改了硬盘中的数据
    if (!QFile::rename(item->data(0, FILE_NAME_KEY).toString(), fileName)) {
        QMessageBox::warning(this, "error", "failed to rename the file");
        return;
    }

    if (QFile().exists(fileName)) {
        QMessageBox::warning(this, tr("error"), tr("failed to rename the file"));
        return;
    }

    //发射修改了的信号
    emit renamedFile(item->data(0, FILE_NAME_KEY).toString(), fileName);

    QFileInfo info(fileName);

    item->setData(0, FILE_NAME_KEY, fileName);
    item->setText(0, info.completeBaseName());

    QString suffix = info.completeSuffix();
    if (suffix == "c")
        item->setIcon(0, QIcon(resourceFileName::pC));
    else if (suffix == "cpp")
        item->setIcon(0, QIcon(resourceFileName::pCpp));
    else if (suffix == "h" || suffix == "hpp")
        item->setIcon(0, QIcon(resourceFileName::pH));
}
TEST( ResourceDependenciesGraph, renamingFile )
{
   ResourceDependenciesGraph graph;

   FilePath file( "a.res" );
   FilePath renamedFile( "a_renamed.res" );
   FilePath res( "b.tmat" );
   FilePath renamedRes( "b_renamed.tmat" );
   graph.addDependency( file, res );

   graph.onFileRenamed( file, renamedFile );
   CPPUNIT_ASSERT_EQUAL( ( uint ) 0, graph.getAffectedResources( file ).size() );
   CPPUNIT_ASSERT_EQUAL( ( uint ) 1, graph.getAffectedResources( renamedFile ).size() );
   CPPUNIT_ASSERT_EQUAL( res.getRelativePath(), graph.getAffectedResources( renamedFile ).front().getRelativePath() );
   CPPUNIT_ASSERT_EQUAL( ( uint ) 0, graph.getAffectedResources( res ).size() );

   graph.onFileRenamed( res, renamedRes );
   CPPUNIT_ASSERT_EQUAL( ( uint ) 1, graph.getAffectedResources( renamedFile ).size() );
   CPPUNIT_ASSERT_EQUAL( renamedRes.getRelativePath(), graph.getAffectedResources( renamedFile ).front().getRelativePath() );
   CPPUNIT_ASSERT_EQUAL( ( uint ) 0, graph.getAffectedResources( res ).size() );
   CPPUNIT_ASSERT_EQUAL( ( uint ) 0, graph.getAffectedResources( renamedRes ).size() );

}
TEST( ResourceDependenciesGraph, removingDirectory )
{
   ResourceDependenciesGraph graph;

   FilePath file( "/directory1/a.res" );
   FilePath renamedFile( "/renamedDirectory1/a.res" );
   FilePath res( "/directory2/b.tmat" );
   FilePath renamedRes( "/renamedDirectory2/b.tmat" );
   FilePath dir1( "/directory1" );
   FilePath renmamedDir1( "/renamedDirectory1" );
   FilePath dir2( "/directory2" );
   FilePath renmamedDir2( "/renamedDirectory2" );

   graph.addDependency( file, res );

   graph.onDirRenamed( dir1, renmamedDir1 );
   CPPUNIT_ASSERT_EQUAL( ( uint ) 0, graph.getAffectedResources( file ).size() );
   CPPUNIT_ASSERT_EQUAL( ( uint ) 1, graph.getAffectedResources( renamedFile ).size() );
   CPPUNIT_ASSERT_EQUAL( res.getRelativePath(), graph.getAffectedResources( renamedFile ).front().getRelativePath() );

   graph.onDirRenamed( dir2, renmamedDir2 );
   CPPUNIT_ASSERT_EQUAL( ( uint ) 1, graph.getAffectedResources( renamedFile ).size() );
   CPPUNIT_ASSERT_EQUAL( renamedRes.getRelativePath(), graph.getAffectedResources( renamedFile ).front().getRelativePath() );
}