/************************************************************************** ** ** Copyright (c) 2014 Lorenz Haas ** Contact: http://www.qt-project.org/legal ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://www.qt.io/licensing. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ // Tested with version 2.01, 2.02, 2.02.1, 2.03 and 2.04 #include "artisticstyle.h" #include "artisticstyleconstants.h" #include "artisticstyleoptionspage.h" #include "artisticstylesettings.h" #include "../beautifierconstants.h" #include "../beautifierplugin.h" #include "../command.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Beautifier { namespace Internal { namespace ArtisticStyle { ArtisticStyle::ArtisticStyle(BeautifierPlugin *parent) : BeautifierAbstractTool(parent), m_beautifierPlugin(parent), m_settings(new ArtisticStyleSettings) { } ArtisticStyle::~ArtisticStyle() { delete m_settings; } bool ArtisticStyle::initialize() { Core::ActionContainer *menu = Core::ActionManager::createMenu(Constants::ArtisticStyle::MENU_ID); menu->menu()->setTitle(QLatin1String(Constants::ArtisticStyle::DISPLAY_NAME)); m_formatFile = new QAction(BeautifierPlugin::msgFormatCurrentFile(), this); Core::Command *cmd = Core::ActionManager::registerAction(m_formatFile, Constants::ArtisticStyle::ACTION_FORMATFILE, Core::Context(Core::Constants::C_GLOBAL)); menu->addAction(cmd); connect(m_formatFile, SIGNAL(triggered()), this, SLOT(formatFile())); Core::ActionManager::actionContainer(Constants::MENU_ID)->addMenu(menu); return true; } void ArtisticStyle::updateActions(Core::IEditor *editor) { m_formatFile->setEnabled(editor && editor->document()->id() == CppEditor::Constants::CPPEDITOR_ID); } QList ArtisticStyle::autoReleaseObjects() { ArtisticStyleOptionsPage *optionsPage = new ArtisticStyleOptionsPage(m_settings, this); return QList() << optionsPage; } void ArtisticStyle::formatFile() { QString cfgFileName; if (m_settings->useOtherFiles()) { if (const ProjectExplorer::Project *project = ProjectExplorer::ProjectExplorerPlugin::currentProject()) { const QStringList files = project->files(ProjectExplorer::Project::AllFiles); for (int i = 0, total = files.size(); i < total; ++i) { const QString &file = files.at(i); if (!file.endsWith(QLatin1String(".astylerc"))) continue; const QFileInfo fi(file); if (fi.isReadable()) { cfgFileName = file; break; } } } } if (cfgFileName.isEmpty() && m_settings->useHomeFile()) { const QDir homeDirectory = QDir::home(); QString file = homeDirectory.filePath(QLatin1String(".astylerc")); if (QFile::exists(file)) { cfgFileName = file; } else { file = homeDirectory.filePath(QLatin1String("astylerc")); if (QFile::exists(file)) cfgFileName = file; } } if (m_settings->useCustomStyle()) cfgFileName = m_settings->styleFileName(m_settings->customStyle()); if (cfgFileName.isEmpty()) { BeautifierPlugin::showError(BeautifierPlugin::msgCannotGetConfigurationFile( QLatin1String(Constants::ArtisticStyle::DISPLAY_NAME))); } else { Command command; command.setExecutable(m_settings->command()); command.addOption(QLatin1String("-q")); command.addOption(QLatin1String("--options=") + cfgFileName); if (m_settings->version() > ArtisticStyleSettings::Version_2_03) { command.setProcessing(Command::PipeProcessing); command.setPipeAddsNewline(true); command.setReturnsCRLF(Utils::HostOsInfo::isWindowsHost()); } else { command.addOption(QLatin1String("%file")); } m_beautifierPlugin->formatCurrentFile(command); } } } // namespace ArtisticStyle } // namespace Internal } // namespace Beautifier