• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdevelop API Reference
  • KDE Home
  • Contact Us
 

kdevplatform/project

  • sources
  • kfour-appscomplete
  • kdevelop
  • kdevplatform
  • project
  • widgets
dependencieswidget.cpp
Go to the documentation of this file.
1 /* This file is part of KDevelop
2  Copyright 2009 Andreas Pakulat <[email protected]>
3  Copyright 2009 Niko Sams <[email protected]>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Library General Public License for more details.
14 
15  You should have received a copy of the GNU Library General Public License
16  along with this library; see the file COPYING.LIB. If not, write to
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  Boston, MA 02110-1301, USA.
19 */
20 
21 #include "dependencieswidget.h"
22 #include "ui_dependencieswidget.h"
23 #include <project/projectmodel.h>
24 #include <interfaces/icore.h>
25 #include <interfaces/iprojectcontroller.h>
26 #include <util/kdevstringhandler.h>
27 
28 using namespace KDevelop;
29 
30 static KDevelop::ProjectBaseItem* itemForPath(const QStringList& path, KDevelop::ProjectModel* model)
31 {
32  return model->itemFromIndex(model->pathToIndex(path));
33 }
34 
35 DependenciesWidget::DependenciesWidget(QWidget* parent)
36  : QWidget(parent)
37  , m_ui(new Ui::DependenciesWidget)
38 {
39  m_ui->setupUi(this);
40 
41  connect( m_ui->addDependency, &QPushButton::clicked, this, &DependenciesWidget::addDep );
42  connect( m_ui->addDependency, &QPushButton::clicked, this, &DependenciesWidget::changed );
43  connect( m_ui->removeDependency, &QPushButton::clicked, this, &DependenciesWidget::changed );
44  connect( m_ui->removeDependency, &QPushButton::clicked, this, &DependenciesWidget::removeDep );
45  connect( m_ui->moveDepDown, &QPushButton::clicked, this, &DependenciesWidget::changed );
46  connect( m_ui->moveDepUp, &QPushButton::clicked, this, &DependenciesWidget::changed );
47  connect( m_ui->moveDepDown, &QPushButton::clicked, this, &DependenciesWidget::moveDependencyDown );
48  connect( m_ui->moveDepUp, &QPushButton::clicked, this, &DependenciesWidget::moveDependencyUp );
49  connect( m_ui->dependencies->selectionModel(), &QItemSelectionModel::selectionChanged, this, &DependenciesWidget::checkActions );
50  connect( m_ui->targetDependency, &ProjectItemLineEdit::textChanged, this, &DependenciesWidget::depEdited);
51  connect( m_ui->browseProject, &QPushButton::clicked, this, &DependenciesWidget::selectItemDialog);
52 }
53 
54 DependenciesWidget::~DependenciesWidget()
55 {
56  delete m_ui;
57 }
58 
59 void DependenciesWidget::setSuggestion(KDevelop::IProject* project)
60 {
61  m_ui->targetDependency->setSuggestion(project);
62 }
63 
64 void DependenciesWidget::depEdited( const QString& str )
65 {
66  int pos;
67  QString tmp = str;
68  m_ui->addDependency->setEnabled( !str.isEmpty()
69  && ( !m_ui->targetDependency->validator()
70  || m_ui->targetDependency->validator()->validate( tmp, pos ) == QValidator::Acceptable ) );
71 }
72 
73 void DependenciesWidget::checkActions( const QItemSelection& selected, const QItemSelection& unselected )
74 {
75  Q_UNUSED( unselected );
76  if( !selected.indexes().isEmpty() )
77  {
78  Q_ASSERT( selected.indexes().count() == 1 );
79  QModelIndex idx = selected.indexes().at( 0 );
80  m_ui->moveDepUp->setEnabled( idx.row() > 0 );
81  m_ui->moveDepDown->setEnabled( idx.row() < m_ui->dependencies->count() - 1 );
82  m_ui->removeDependency->setEnabled( true );
83  } else
84  {
85  m_ui->removeDependency->setEnabled( false );
86  m_ui->moveDepUp->setEnabled( false );
87  m_ui->moveDepDown->setEnabled( false );
88  }
89 }
90 
91 void DependenciesWidget::moveDependencyDown()
92 {
93  QList<QListWidgetItem*> list = m_ui->dependencies->selectedItems();
94  if( !list.isEmpty() )
95  {
96  Q_ASSERT( list.count() == 1 );
97  QListWidgetItem* item = list.at( 0 );
98  int row = m_ui->dependencies->row( item );
99  m_ui->dependencies->takeItem( row );
100  m_ui->dependencies->insertItem( row+1, item );
101  m_ui->dependencies->selectionModel()->select( m_ui->dependencies->model()->index( row+1, 0, QModelIndex() ), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::SelectCurrent );
102  }
103 }
104 
105 void DependenciesWidget::moveDependencyUp()
106 {
107 
108  QList<QListWidgetItem*> list = m_ui->dependencies->selectedItems();
109  if( !list.isEmpty() )
110  {
111  Q_ASSERT( list.count() == 1 );
112  QListWidgetItem* item = list.at( 0 );
113  int row = m_ui->dependencies->row( item );
114  m_ui->dependencies->takeItem( row );
115  m_ui->dependencies->insertItem( row-1, item );
116  m_ui->dependencies->selectionModel()->select( m_ui->dependencies->model()->index( row-1, 0, QModelIndex() ), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::SelectCurrent );
117  }
118 }
119 
120 void DependenciesWidget::addDep()
121 {
122  QIcon icon;
123  KDevelop::ProjectBaseItem* pitem = m_ui->targetDependency->currentItem();
124  if(pitem)
125  icon = QIcon::fromTheme(pitem->iconName());
126 
127  auto* item = new QListWidgetItem(icon, m_ui->targetDependency->text(), m_ui->dependencies);
128  item->setData( Qt::UserRole, m_ui->targetDependency->itemPath() );
129  m_ui->targetDependency->clear();
130  m_ui->addDependency->setEnabled( false );
131  m_ui->dependencies->selectionModel()->clearSelection();
132  item->setSelected(true);
133 // dependencies->selectionModel()->select( dependencies->model()->index( dependencies->model()->rowCount() - 1, 0, QModelIndex() ), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::SelectCurrent );
134 }
135 
136 void DependenciesWidget::selectItemDialog()
137 {
138  if(m_ui->targetDependency->selectItemDialog()) {
139  addDep();
140  }
141 }
142 
143 void DependenciesWidget::removeDep()
144 {
145  QList<QListWidgetItem*> list = m_ui->dependencies->selectedItems();
146  if( !list.isEmpty() )
147  {
148  Q_ASSERT( list.count() == 1 );
149  int row = m_ui->dependencies->row( list.at(0) );
150  delete m_ui->dependencies->takeItem( row );
151 
152  m_ui->dependencies->selectionModel()->select( m_ui->dependencies->model()->index( row - 1, 0, QModelIndex() ), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::SelectCurrent );
153  }
154 }
155 
156 void DependenciesWidget::setDependencies(const QVariantList &deps)
157 {
158  for (const QVariant& dep : deps) {
159  QStringList deplist = dep.toStringList();
160  KDevelop::ProjectModel* model = KDevelop::ICore::self()->projectController()->projectModel();
161  KDevelop::ProjectBaseItem* pitem=itemForPath(deplist, model);
162  QIcon icon;
163  if(pitem)
164  icon=QIcon::fromTheme(pitem->iconName());
165 
166  auto* item = new QListWidgetItem(icon, KDevelop::joinWithEscaping(deplist, QLatin1Char('/'), QLatin1Char('\\')), m_ui->dependencies);
167  item->setData( Qt::UserRole, dep );
168  }
169 }
170 
171 QVariantList DependenciesWidget::dependencies() const
172 {
173  const int dependenciesCount = m_ui->dependencies->count();
174  QVariantList deps;
175  deps.reserve(dependenciesCount);
176  for (int i = 0; i < dependenciesCount; ++i) {
177  deps << m_ui->dependencies->item( i )->data( Qt::UserRole );
178  }
179  return deps;
180 }
QItemSelectionModel::selectionChanged
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
KDevelop::DependenciesWidget::dependencies
QVariantList dependencies() const
Definition: dependencieswidget.cpp:171
KDevelop::ProjectBaseItem::iconName
virtual QString iconName() const
Definition: projectmodel.cpp:505
itemForPath
static KDevelop::ProjectBaseItem * itemForPath(const QStringList &path, KDevelop::ProjectModel *model)
Definition: dependencieswidget.cpp:30
QWidget::pos
QPoint pos() const
KDevelop::DependenciesWidget::setDependencies
void setDependencies(const QVariantList &deps)
Definition: dependencieswidget.cpp:156
QListWidgetItem
KDevelop::ProjectBaseItem
Interface that allows a developer to implement the three basic types of items you would see in a mult...
Definition: projectmodel.h:101
QList::count
int count(const T &value) const
QAbstractButton::clicked
void clicked(bool checked)
QWidget
QIcon::fromTheme
QIcon fromTheme(const QString &name, const QIcon &fallback)
KDevelop::ProjectModel
Class providing some convenience methods for accessing the project model.
Definition: projectmodel.h:420
KDevelop::ProjectModel::itemFromIndex
ProjectBaseItem * itemFromIndex(const QModelIndex &) const
Definition: projectmodel.cpp:971
QList
Definition: projectmodel.h:31
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QItemSelection::indexes
QModelIndexList indexes() const
KDevelop::DependenciesWidget
Definition: dependencieswidget.h:32
projectmodel.h
QListWidgetItem::setData
virtual void setData(int role, const QVariant &value)
QString
Ui
Definition: dependencieswidget.h:28
QWidget::icon
const QPixmap * icon() const
QLineEdit::textChanged
void textChanged(const QString &text)
QString::isEmpty
bool isEmpty() const
QList::at
const T & at(int i) const
dependencieswidget.h
QList::isEmpty
bool isEmpty() const
KDevelop::DependenciesWidget::DependenciesWidget
DependenciesWidget(QWidget *parent)
Definition: dependencieswidget.cpp:35
QIcon
KDevelop::DependenciesWidget::changed
void changed()
QItemSelection
QLatin1Char
KDevelop::DependenciesWidget::~DependenciesWidget
~DependenciesWidget() override
Definition: dependencieswidget.cpp:54
KDevelop
Definition: abstractfilemanagerplugin.h:33
KDevelop::DependenciesWidget::setSuggestion
void setSuggestion(KDevelop::IProject *project)
Definition: dependencieswidget.cpp:59
QModelIndex
QVariant
KDevelop::ProjectModel::pathToIndex
QModelIndex pathToIndex(const QStringList &tofetch) const
Definition: projectmodel.cpp:889
QStringList
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Mon Jan 18 2021 23:35:31 by doxygen 1.8.16 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kdevplatform/project

Skip menu "kdevplatform/project"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdevelop API Reference

Skip menu "kdevelop API Reference"
  • kdevplatform
  •   debugger
  •   documentation
  •   interfaces
  •   language
  •     assistant
  •     backgroundparser
  •     checks
  •     classmodel
  •     codecompletion
  •     codegen
  •     duchain
  •     editor
  •     highlighting
  •     interfaces
  •     util
  •   outputview
  •   project
  •   serialization
  •   shell
  •   sublime
  •   tests
  •   util
  •   vcs

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal