⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treeclasses.cpp

📁 用Qt4编写的linux IDE开发环境
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            return;        }    }    for (int i=0; i<it->childCount(); i++)    {        setSortingSymbols( it->child( i ), active, filename, ext, parents);    }}//void TreeClasses::markForDeletion(QTreeWidgetItem *current, QString filename, QString ext, QStringList parents ){    ParsedItem parsedItem = current->data(0, Qt::UserRole).value<ParsedItem>();    parsedItem.markedForDelete = false;    if ( ext==".cpp" && parsedItem.implementation.section("|", 0, 0) == filename && parsedItem.parents == parents)    {        if ( !parsedItem.declaration.toLower().endsWith(".h") )        {            parsedItem.markedForDelete = true;        }        parsedItem.implementation = "";    }    else if ( ext==".h" && parsedItem.declaration.section("|", 0, 0) == filename && parsedItem.parents == parents )    {        if ( !parsedItem.implementation.toLower().endsWith(".cpp") )        {            parsedItem.markedForDelete = true;        }        parsedItem.declaration = "";    }    else        parsedItem.markedForDelete = false;    QVariant v;    v.setValue( parsedItem );    current->setData(0, Qt::UserRole, v );}//void TreeClasses::deleteMarked(QTreeWidgetItem *current){    ParsedItem parsedItem = current->data(0, Qt::UserRole).value<ParsedItem>();    if ( parsedItem.markedForDelete )    {        //delete current;        m_listDeletion.append( current );		//emit modifiedClasse( parsedItem.classname );        return;    }    for (int i=0; i<current->childCount(); i++)    {        deleteMarked( current->child( i ));    }    return;}////QTreeWidgetItem *TreeClasses::findAndCreate(QTreeWidgetItem *begin, QString pixname, QString text, QString key, bool recursive, bool update, ParsedItem parsedItem){    QTreeWidgetItem *newItem = findItem(begin, text, key, recursive);    if ( !newItem  )    {		//emit modifiedClasse( parsedItem.classname );        if ( begin )            newItem = new QTreeWidgetItem( begin );        else            newItem = new QTreeWidgetItem( this );        parsedItem.key = key;        parsedItem.markedForDelete = false;        QVariant v;        v.setValue( parsedItem );        text = markForSorting(parsedItem.kind, text);        newItem->setText(0, text);        setTooltip(newItem, parsedItem);        newItem->setData(0, Qt::UserRole, v );        if ( !pixname.isEmpty() )        {            newItem->setIcon(0, QIcon(":/CV/images/CV"+pixname+".png"));            parsedItem.icon = ":/CV/images/CV"+pixname+".png";        }    }    if ( update )    {        ParsedItem oldParsedItem = newItem->data(0, Qt::UserRole).value<ParsedItem>();        if ( parsedItem.declaration.isEmpty() && !oldParsedItem.declaration.isEmpty() )            parsedItem.declaration = oldParsedItem.declaration;        if ( parsedItem.implementation.isEmpty()  && !oldParsedItem.implementation.isEmpty() )            parsedItem.implementation = oldParsedItem.implementation;        if ( parsedItem.access.isEmpty()  && !oldParsedItem.access.isEmpty() )            parsedItem.access = oldParsedItem.access;        parsedItem.icon = oldParsedItem.icon;        text = markForSorting(parsedItem.kind, text);        setTooltip(newItem, parsedItem);        newItem->setText(0, text);        parsedItem.key = key;        if ( !pixname.isEmpty() )        {            newItem->setIcon(0, QIcon(":/CV/images/CV"+pixname+".png"));            parsedItem.icon = ":/CV/images/CV"+pixname+".png";        }        parsedItem.markedForDelete = false;        QVariant v;        v.setValue( parsedItem );        newItem->setData(0, Qt::UserRole, v );    }    return newItem;}//void TreeClasses::setTooltip(QTreeWidgetItem *item, ParsedItem parsedItem){    if ( parsedItem.key.indexOf( "parent:" ) != 0 )    {        QString ex_cmd = parsedItem.ex_cmd;        //if( parsedItem.kind == "p" || parsedItem.kind == "f" || parsedItem.kind == "c" )        //{        ex_cmd = ex_cmd.section(";", 0, 0).simplified();        ex_cmd = ex_cmd.section("$", 0, 0).simplified();        ex_cmd = ex_cmd.section("{", 0, 0).simplified();        //}        //else        //ex_cmd = ex_cmd.section(";", 0, 0).simplified();        QString tooltip;        if ( !parsedItem.access.isEmpty() )            tooltip = '['+parsedItem.access+']'+" ";        tooltip += ex_cmd;        item->setToolTip(0, tooltip);    }}//QString TreeClasses::markForSorting(QString kind, QString text ){    if ( text.contains( '|' ) )        text = text.section('|', -1, -1);    if ( kind == "c" )        text = "A|"+text;    else if ( kind == "f" || kind == "p" )        text = "B|"+text;    else if ( kind == "s" )        text = "C|"+text;    else if ( kind == "g" )        text = "D|"+text;    else if ( kind == "t" )        text = "E|"+text;    else if ( kind == "m" || kind == "v" || kind == "e" )        text = "F|"+text;    return text;}//QTreeWidgetItem *TreeClasses::findItem(const QTreeWidgetItem *begin, const QString text, const QString key, const bool recursive){    QTreeWidgetItem *newItem = 0;    QTreeWidgetItem *it = (QTreeWidgetItem *)begin;    if ( it == 0 )        it = topLevelItem( 0 );    if ( it )    {        ParsedItem parsedItem = it->data(0, Qt::UserRole).value<ParsedItem>();        if ( parsedItem.key == key )        {            return it;        }        else        {            for (int i=0; i<it->childCount(); i++)            {                ParsedItem parsedItem = it->child( i )->data(0, Qt::UserRole).value<ParsedItem>();                if ( parsedItem.key == key )                    return it->child( i );                else if ( recursive )                    newItem = findItem(it->child( i ), text, key, recursive);            }        }    }    return newItem;}//void TreeClasses::mousePressEvent( QMouseEvent * event ){    m_itemClicked = itemAt( event->pos() );    if ( event->button() == Qt::RightButton )    {        QMenu *menu = new QMenu(this);        if ( m_itemClicked )        {            setCurrentItem( m_itemClicked );            ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value<ParsedItem>();            if ( parsedItem.key.left(10) != "parent:" )            {                if ( !parsedItem.declaration.isEmpty() )                    connect(menu->addAction(QIcon(":/treeview/images/h.png"), tr("Open Declaration")), SIGNAL(triggered()), this, SLOT(slotOpenDeclaration()) );                if ( !parsedItem.implementation.isEmpty() )                    connect(menu->addAction(QIcon(":/treeview/images/cpp.png"), tr("Open Implementation")), SIGNAL(triggered()), this, SLOT(slotOpenImplementation()) );            }            if ( parsedItem.kind == "c" )            {                connect(menu->addAction(QIcon(""), tr("Add Method...")), SIGNAL(triggered()), this, SLOT(slotAddNewClassMethod()) );                connect(menu->addAction(QIcon(""), tr("Add Variable...")), SIGNAL(triggered()), this, SLOT(slotAddNewClassVariable()) );            }            else if ( parsedItem.kind == "m" )            {                connect(menu->addAction(QIcon(""), tr("Add get/set Methods...")), SIGNAL(triggered()), this, SLOT(slotAddGetSetMethod()) );            }        }        else        {            menu->addSeparator();        }        connect(menu->addAction(QIcon(":/toolbar/images/refresh.png"), tr("Refresh contents")), SIGNAL(triggered()), this, SLOT(slotRefresh()) );        menu->exec(event->globalPos());        delete menu;    }    QTreeWidget::mousePressEvent(event);}//void TreeClasses::slotOpenImplementation(){    ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value<ParsedItem>();    QString s = parsedItem.implementation;    QString filename = s.section("|", 0, 0);    int numLine = s.section("|", -1, -1).toInt();    m_mainImpl->openFile(QStringList(filename) , numLine, false, true);}//void TreeClasses::slotOpenDeclaration(){    ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value<ParsedItem>();    QString s = parsedItem.declaration;    QString filename = s.section("|", 0, 0);    int numLine = s.section("|", -1, -1).toInt();    m_mainImpl->openFile(QStringList(filename) , numLine, false, true);}//void TreeClasses::slotRefresh(){    if ( m_projectManager )        m_projectManager->parseTreeClasses(true);}//void TreeClasses::toDB(QString projectDirectory){    if ( !topLevelItem(0) )        return;    QApplication::setOverrideCursor(Qt::WaitCursor);    QSqlQuery query( QSqlDatabase::database( projectDirectory + "/qdevelop-settings.db" ));    QString queryString = "delete from classesbrowser where 1";    if (!query.exec(queryString))    {        qDebug() << "Failed to execute" << queryString;        return;    }    queryString = "delete from checksums where 1";    if (!query.exec(queryString))    {        qDebug() << "Failed to execute" << queryString;        return;    }    query.exec("BEGIN TRANSACTION;");    writeItemsInDB(topLevelItem(0), QString(), query, projectDirectory);    /** Here, for each file, a checksum is computed with his contents then     this checksum is saved in database. When the database is reloaded in fromDB() function,     the checksum is computed again. If the new checksum and the checksum in database are different,     the file was modified between the recording and the reloading (certainly by an external editor).     A new parsing for this file is required to populate correctly the classes browser.       */    QStringList files;    m_projectManager->sources( 0, files );    m_projectManager->headers( 0, files );    foreach(QString filename, files)    {        QFile file(filename);        if (!file.open(QIODevice::ReadOnly | QIODevice::Text))            continue;        QByteArray array( file.readAll() );        if ( !array.count() )            continue;        char *ptr = array.data();        quint16 check = qChecksum(ptr, array.length());        queryString = "insert into checksums values(";        queryString = queryString                      + "'" + filename + "', "                      + "'" + QString::number(check) + "')";        bool rc = query.exec(queryString);        if (rc == false)        {            qDebug() << "Failed to insert record to db" << query.lastError();            qDebug() << queryString;            exit(0);        }        file.close();    }    query.exec("END TRANSACTION;");    QApplication::restoreOverrideCursor();}//void TreeClasses::writeItemsInDB(const QTreeWidgetItem *it, QString parents, QSqlQuery query, QString projectDirectory){    //    ParsedItem parsedItem = it->data(0, Qt::UserRole).value<ParsedItem>();    QString queryString = "insert into classesbrowser values(";

⌨️ 快捷键说明

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