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

📄 projectmanager.cpp

📁 用Qt4编写的linux IDE开发环境
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/** This file is part of QDevelop, an open-source cross-platform IDE* Copyright (C) 2006  Jean-Luc Biord** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA** Contact e-mail: Jean-Luc Biord <jl.biord@free.fr>* Program URL   : http://qdevelop.org**/#include "mainimpl.h"#include "projectmanager.h"#include "ui_exechoice.h"#include "addexistantimpl.h"#include "addnewimpl.h"#include "addnewclassimpl.h"#include "addscopeimpl.h"#include "misc.h"#include "newprojectimpl.h"#include "projectpropertieimpl.h"#include "subclassingimpl.h"#include "parametersimpl.h"#include "tabwidget.h"#include "editor.h"//#include <QTreeWidget>#include <QFile>#include <QDir>#include <QDateTime>#include <QDebug>#include <QDialog>#include <QMessageBox>#include <QProcess>#include <QInputDialog>#include <QUiLoader>#include <QScrollArea>#include <QDesktopWidget>#include <QMetaMethod>#include <QSqlQuery>#include <QSqlError>#include <QProgressBar>#include <QPlastiqueStyle>#include <QSplashScreen>//ProjectManager::ProjectManager(MainImpl * parent, TreeProject *treeFiles, TreeClasses *treeClasses)        : m_parent(parent), m_treeFiles(treeFiles), m_treeClasses(treeClasses){}void ProjectManager::init(QString name){    m_treeFiles->clear();    m_treeClasses->clear();    //    QTreeWidgetItem *newProjectItem = new QTreeWidgetItem(m_treeFiles);    //    //    connect(m_treeFiles, SIGNAL(addNewItem(QTreeWidgetItem *, QString)), this, SLOT(slotAddNewItem(QTreeWidgetItem *, QString)));    connect(m_treeFiles, SIGNAL(addNewClass(QTreeWidgetItem *)), this, SLOT(slotAddNewClass(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(addExistingsFiles(QTreeWidgetItem *)), this, SLOT(slotAddExistingFiles(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(addScope(QTreeWidgetItem *)), this, SLOT(slotAddScope(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(lupdate(QTreeWidgetItem *)), this, SLOT(slotlupdate(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(lrelease(QTreeWidgetItem *)), this, SLOT(slotlrelease(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(addSubProject(QTreeWidgetItem *)), this, SLOT(slotAddSubProject(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(projectPropertie(QTreeWidgetItem *)), this, SLOT(slotProjectPropertie(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(open(QTreeWidgetItem *, int)), m_parent, SLOT(slotDoubleClickTreeFiles(QTreeWidgetItem *, int)));    connect(m_treeFiles, SIGNAL(deleteItem(QTreeWidgetItem *)), this, SLOT(slotDeleteItem(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(renameItem(QTreeWidgetItem *)), this, SLOT(slotRenameItem(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(subclassing(QTreeWidgetItem *)), this, SLOT(slotSubclassing(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(previewForm(QTreeWidgetItem *)), this, SLOT(slotPreviewForm(QTreeWidgetItem *)));    connect(m_treeFiles, SIGNAL(sort()), this, SLOT(slotSort()));    m_isModifiedProject = false;    m_previewForm = 0;    m_parameters.isEmpty = true;    loadProject(name, newProjectItem);    parseTreeClasses();    loadProjectSettings();}//ProjectManager::~ProjectManager(){    QString directory = projectDirectory(m_treeFiles->topLevelItem(0));    if ( m_treeFiles->topLevelItem ( 0 ) )        m_treeClasses->toDB( directory );    m_treeFiles->clear();    m_treeClasses->clear();    if ( m_previewForm )        delete m_previewForm;    QSqlDatabase::database().close();}//QStringList ProjectManager::parents(QTreeWidgetItem *it){    QStringList parentsList;    if ( !it )        return QStringList();    QTreeWidgetItem *parent = it;    if ( toKey( it->data(0, Qt::UserRole) ) == "PROJECT" || toKey( it->data(0, Qt::UserRole) ) == "SCOPE" )        parentsList.prepend( it->text( 0 ) );    //    while ( (parent = parent->parent()) )    {        if ( toKey( parent->data(0, Qt::UserRole) ) == "PROJECT" || toKey( parent->data(0, Qt::UserRole) ) == "SCOPE" )            parentsList.prepend( parent->text( 0 ) );    }    return parentsList;}//void ProjectManager::parseTreeClasses(bool force){    if ( !m_parent->showTreeClasses() )        return;    m_treeClasses->clear();    QString directory = projectDirectory( m_treeFiles->topLevelItem( 0 ) );    if ( QFile::exists( directory+"/qdevelop-settings.db" ) && !force)    {        m_treeClasses->fromDB( directory );    }    else    {        //        QList<QTreeWidgetItem *> projectsList;        childsList(0, "PROJECT", projectsList);        for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++)        {            QString projectName = projectsList.at(nbProjects)->text(0);            QString projectDir = findData(projectName, "projectDirectory");            QStringList files;            sources(projectsList.at(nbProjects), files );            headers(projectsList.at(nbProjects), files );            files.sort();            extern QSplashScreen *splash;            QProgressBar *bar = 0;            if ( !splash )            {                bar = new QProgressBar( 0 );                bar->setStyle( new QPlastiqueStyle() );                QRect screenGeometry = QDesktopWidget().screenGeometry();                bar->setGeometry(                    (screenGeometry.width()-(screenGeometry.width()/8))/2,                    (screenGeometry.height()-30)/2,                    screenGeometry.width()/8,                    30                );                bar->setWindowFlags( Qt::Tool | Qt::WindowStaysOnTopHint );                bar->setAlignment( Qt::AlignHCenter );                bar->setMaximum( files.count() );                bar->setFormat( tr("Project parsing")+" %p%" );                bar->show();            }            int value = 0;            foreach(QString s, files)            {                QStringList parentsList = parents(projectsList.at(nbProjects));                QString buffer;                Editor *editor = 0;    			foreach(Editor *ed, m_parent->allEditors() )                {                    if ( ed->filename() == s)                    {                        editor = ed;                    }                }                if ( editor )                {                    buffer = editor->toPlainText();                }                else                {                    QFile file(s);                    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))                        continue;                    buffer = file.readAll();                    file.close();                }                m_treeClasses->updateClasses(s, buffer, parentsList, "."+s.section(".", -1, -1));                if ( !splash )                    bar->setValue( value++ );                else                    splash->showMessage(QObject::tr("Current project parsing")+" "+QString::number((100/files.count())*value++)+"%", Qt::AlignRight | Qt::AlignTop,  Qt::white);            }            if ( !splash )                delete bar;        }    }}//Parameters ProjectManager::parameters(){    if ( m_parameters.isEmpty )    {        ParametersImpl *parametersimpl = new ParametersImpl(0);        m_parameters = parametersimpl->parameters();        delete parametersimpl;    }    m_parameters.isEmpty = false;    return m_parameters;}//void ProjectManager::setParameters(Parameters p){    m_parameters = p;    m_parameters.isEmpty = false;}//QStringList ProjectManager::dependpath(QTreeWidgetItem *it){    if ( !it )        return QStringList();    while ( toKey( it->data(0, Qt::UserRole) ) != "PROJECT" )        it = it->parent();    QTreeWidgetItem *itDepend = 0;    for (int i=0; i<it->childCount(); i++)    {        if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "DEPENDPATH" )        {            itDepend = it->child(i);            break;        }    }    if ( !itDepend )        return QStringList();    QStringList path;    for (int i=0; i<itDepend->childCount(); i++)    {        path << itDepend->child( i )->text(0);    }    return path;}//bool ProjectManager::close(){    QTreeWidgetItem *it = item(m_treeFiles->topLevelItem ( 0 ), "PROJECT", Key);    if ( !it )        return true;    QString projectName = it->text(0);    if ( isModifiedProject() )    {        // Save?        int rep = QMessageBox::question(0, "QDevelop",                                        tr("Save project changes ?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 );        if ( rep == 2 )            return false;        if ( rep == 0 )        {            slotSaveProject();        }    }    return true;}//void ProjectManager::saveProjectSettings(){    // Save opened files    QString directory = projectDirectory(m_treeFiles->topLevelItem(0));    if ( !connectDB( directory + "/qdevelop-settings.db" ) )        return;    QSqlQuery query(QSqlDatabase::database( directory + "/qdevelop-settings.db") );    QString queryString = "delete from editors where 1";    if (!query.exec(queryString))    {        qDebug() << "Failed to execute" << queryString;        return;    }    queryString = "delete from bookmarks where 1";    if (!query.exec(queryString))    {        qDebug() << "Failed to execute" << queryString;        return;    }    queryString = "delete from breakpoints where 1";    if (!query.exec(queryString))    {        qDebug() << "Failed to execute" << queryString;        return;    }    queryString = "delete from config where 1";    if (!query.exec(queryString))    {        qDebug() << "Failed to execute" << queryString;        return;    }    queryString = "delete from projectsDirectories where 1";    if (!query.exec(queryString))    {        qDebug() << "Failed to execute" << queryString;        return;    }	foreach(Editor *editor, m_parent->allEditors() )    {        if ( editor )        {            QString filename = QDir( directory ).relativeFilePath( editor->filename() );            QSqlQuery query( QSqlDatabase::database( directory + "/qdevelop-settings.db" ));            query.prepare("INSERT INTO editors (filename, scrollbar, numline) "                          "VALUES (:filename, :scrollbar, :numline)");            query.bindValue(":filename", filename);            query.bindValue(":scrollbar", editor->verticalScrollBar());            query.bindValue(":numline", editor->currentLineNumber());            if ( !query.exec() )                qDebug() << query.lastError();            foreach(int line, editor->bookmarksList())            {                filename = QDir( directory ).relativeFilePath( editor->filename() );	            QSqlQuery query( QSqlDatabase::database( directory + "/qdevelop-settings.db" ));                query.prepare("INSERT INTO bookmarks (filename, numline) "                              "VALUES (:filename, :numline)");                query.bindValue(":filename", filename);                query.bindValue(":numline", line);                if ( !query.exec() )                    qDebug() << query.lastError();            }            foreach(QTextBlock block, editor->breakpointsList())            {		        BlockUserData *blockUserData = (BlockUserData*)block.userData();                filename = QDir( directory ).relativeFilePath( editor->filename() );	            QSqlQuery query( QSqlDatabase::database( directory + "/qdevelop-settings.db" ));                query.prepare("INSERT INTO breakpoints (filename, numline, breakpointCondition, isTrue) "                              "VALUES (:filename, :numline, :breakpointCondition, :isTrue)");                query.bindValue(":filename", filename);                query.bindValue(":numline", editor->currentLineNumber(block));                query.bindValue(":breakpointCondition", blockUserData->breakpointCondition);                query.bindValue(":isTrue", blockUserData->isTrue);                if ( !query.exec() )                    qDebug() << query.lastError();            }        }    }    //    QList<QTreeWidgetItem *> projectsList;    childsList(0, "PROJECT", projectsList);

⌨️ 快捷键说明

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