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

lokalize

  • sources
  • kde-4.14
  • kdesdk
  • lokalize
  • src
binunitsview.cpp
Go to the documentation of this file.
1 /* ****************************************************************************
2  This file is part of Lokalize
3 
4  Copyright (C) 2009 by Nick Shaforostoff <shafff@ukr.net>
5 
6  This program is free software; you can redistribute it and/or
7  modify it under the terms of the GNU General Public License as
8  published by the Free Software Foundation; either version 2 of
9  the License or (at your option) version 3 or any later version
10  accepted by the membership of KDE e.V. (or its successor approved
11  by the membership of KDE e.V.), which shall act as a proxy
12  defined in Section 14 of version 3 of the license.
13 
14  This program is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  GNU General Public License for more details.
18 
19  You should have received a copy of the GNU General Public License
20  along with this program. If not, see <http://www.gnu.org/licenses/>.
21 
22 **************************************************************************** */
23 
24 #include "binunitsview.h"
25 #include "phaseswindow.h" //MyTreeView
26 #include "catalog.h"
27 #include "cmd.h"
28 #include "project.h"
29 
30 #include <klocale.h>
31 #include <krun.h>
32 #include <QContextMenuEvent>
33 #include <QMenu>
34 #include <kfiledialog.h>
35 #include <kdirwatch.h>
36 
37 
38 //BEGIN BinUnitsModel
39 BinUnitsModel::BinUnitsModel(Catalog* catalog, QObject* parent)
40  : QAbstractListModel(parent)
41  , m_catalog(catalog)
42 {
43  connect(catalog,SIGNAL(signalFileLoaded()),this,SLOT(fileLoaded()));
44  connect(catalog,SIGNAL(signalEntryModified(DocPosition)),this,SLOT(entryModified(DocPosition)));
45 
46  connect(KDirWatch::self(),SIGNAL(dirty(QString)),this,SLOT(updateFile(QString)));
47 }
48 
49 void BinUnitsModel::fileLoaded()
50 {
51  m_imageCache.clear();
52  reset();
53 }
54 
55 void BinUnitsModel::entryModified(const DocPosition& pos)
56 {
57  if (pos.entry<m_catalog->numberOfEntries())
58  return;
59 
60  QModelIndex item=index(pos.entry-m_catalog->numberOfEntries(),TargetFilePath);
61  emit dataChanged(item,item);
62 }
63 
64 void BinUnitsModel::updateFile(QString path)
65 {
66  QString relPath=KUrl::relativePath(Project::instance()->projectDir(),path);
67 
68  DocPosition pos(m_catalog->numberOfEntries());
69  int limit=m_catalog->numberOfEntries()+m_catalog->binUnitsCount();
70  while (pos.entry<limit)
71  {
72  kWarning()<<m_catalog->target(pos);
73  if (m_catalog->target(pos)==relPath || m_catalog->source(pos)==relPath)
74  {
75  int row=pos.entry-m_catalog->numberOfEntries();
76  m_imageCache.remove(relPath);
77  emit dataChanged(index(row,SourceFilePath),index(row,TargetFilePath));
78  return;
79  }
80 
81  pos.entry++;
82  }
83 }
84 
85 void BinUnitsModel::setTargetFilePath(int row, const QString& path)
86 {
87  DocPosition pos(row+m_catalog->numberOfEntries());
88  QString old=m_catalog->target(pos);
89  if (!old.isEmpty())
90  {
91  m_catalog->push(new DelTextCmd(m_catalog, pos, old));
92  m_imageCache.remove(old);
93  }
94 
95  m_catalog->push(new InsTextCmd(m_catalog, pos, KUrl::relativePath(Project::instance()->projectDir(),path)));
96  QModelIndex item=index(row,TargetFilePath);
97  emit dataChanged(item,item);
98 }
99 
100 int BinUnitsModel::rowCount(const QModelIndex& parent) const
101 {
102  if (parent.isValid())
103  return 0;
104  return m_catalog->binUnitsCount();
105 }
106 
107 QVariant BinUnitsModel::data(const QModelIndex& index, int role) const
108 {
109  if (role==Qt::DecorationRole)
110  {
111  DocPosition pos(index.row()+m_catalog->numberOfEntries());
112  if (index.column()<Approved)
113  {
114  QString path=index.column()==SourceFilePath?m_catalog->source(pos):m_catalog->target(pos);
115  if (!m_imageCache.contains(path))
116  {
117  QString absPath=Project::instance()->absolutePath(path);
118  KDirWatch::self()->addFile(absPath); //TODO remember watched files to react only on them in dirty() signal handler
119  m_imageCache.insert(path, QImage(absPath).scaled(128,128,Qt::KeepAspectRatio));
120  }
121  return m_imageCache.value(path);
122  }
123  }
124  else if (role==Qt::TextAlignmentRole)
125  return int(Qt::AlignLeft|Qt::AlignTop);
126 
127  if (role!=Qt::DisplayRole)
128  return QVariant();
129 
130  static const char* noyes[]={I18N_NOOP("no"),I18N_NOOP("yes")};
131  DocPosition pos(index.row()+m_catalog->numberOfEntries());
132  switch (index.column())
133  {
134  case SourceFilePath: return m_catalog->source(pos);
135  case TargetFilePath: return m_catalog->target(pos);
136  case Approved: return noyes[m_catalog->isApproved(pos)];
137  }
138  return QVariant();
139 }
140 
141 QVariant BinUnitsModel::headerData(int section, Qt::Orientation, int role) const
142 {
143  if (role!=Qt::DisplayRole)
144  return QVariant();
145 
146  switch (section)
147  {
148  case SourceFilePath: return i18nc("@title:column","Source");
149  case TargetFilePath: return i18nc("@title:column","Target");
150  case Approved: return i18nc("@title:column","Approved");
151  }
152  return QVariant();
153 }
154 //END BinUnitsModel
155 
156 
157 BinUnitsView::BinUnitsView(Catalog* catalog, QWidget* parent)
158  : QDockWidget(i18nc("@title toolview name","Binary Units"),parent)
159  , m_catalog(catalog)
160  , m_model(new BinUnitsModel(catalog, this))
161  , m_view(new MyTreeView(this))
162 {
163  setObjectName("binUnits");
164  hide();
165 
166  setWidget(m_view);
167  m_view->setModel(m_model);
168  m_view->setRootIsDecorated(false);
169  m_view->setAlternatingRowColors(true);
170  m_view->viewport()->setBackgroundRole(QPalette::Background);
171  connect(m_view,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(mouseDoubleClicked(QModelIndex)));
172 
173  connect(catalog,SIGNAL(signalFileLoaded()),this,SLOT(fileLoaded()));
174 }
175 
176 void BinUnitsView::fileLoaded()
177 {
178  setVisible(m_catalog->binUnitsCount());
179 }
180 
181 void BinUnitsView::selectUnit(const QString& id)
182 {
183  QModelIndex item=m_model->index(m_catalog->unitById(id)-m_catalog->numberOfEntries());
184  m_view->setCurrentIndex(item);
185  m_view->scrollTo(item);
186  show();
187 }
188 
189 void BinUnitsView::contextMenuEvent(QContextMenuEvent *event)
190 {
191  QModelIndex item=m_view->currentIndex();
192  if (!item.isValid())
193  return;
194 
195  QMenu menu;
196  QAction* setTarget=menu.addAction(i18nc("@action:inmenu","Set the file"));
197  QAction* useSource=menu.addAction(i18nc("@action:inmenu","Use source file"));
198 
199 // menu.addSeparator();
200 // QAction* openSource=menu.addAction(i18nc("@action:inmenu","Open source file in external program"));
201 // QAction* openTarget=menu.addAction(i18nc("@action:inmenu","Open target file in external program"));
202 
203  QAction* result=menu.exec(event->globalPos());
204  if (!result)
205  return;
206 
207  QString sourceFilePath=item.sibling(item.row(),BinUnitsModel::SourceFilePath).data().toString();
208  if (result==useSource)
209  m_model->setTargetFilePath(item.row(), sourceFilePath);
210  else if (result==setTarget)
211  {
212  KUrl targetFileUrl=KFileDialog::getOpenFileName(Project::instance()->projectDir(),
213  "*."+QFileInfo(sourceFilePath).completeSuffix(),this);
214  if (!targetFileUrl.isEmpty())
215  m_model->setTargetFilePath(item.row(), targetFileUrl.toLocalFile());
216  }
217  event->accept();
218 }
219 
220 void BinUnitsView::mouseDoubleClicked(const QModelIndex& item)
221 {
222  //FIXME child processes don't notify us about changes ;(
223  if (item.column()<BinUnitsModel::Approved)
224  new KRun(Project::instance()->absolutePath(item.data().toString()),this);
225 }
QModelIndex
noyes
static const char *const noyes[]
Definition: tsstorage.cpp:43
BinUnitsModel::data
QVariant data(const QModelIndex &, int role=Qt::DisplayRole) const
Definition: binunitsview.cpp:107
project.h
QWidget
QHash::insert
iterator insert(const Key &key, const T &value)
QAbstractItemView::setAlternatingRowColors
void setAlternatingRowColors(bool enable)
InsTextCmd
how undo system works: undo() and redo() functions call appropriate private method of Catalog to chan...
Definition: cmd.h:85
QAbstractItemView::setCurrentIndex
void setCurrentIndex(const QModelIndex &index)
BinUnitsModel
Definition: binunitsview.h:62
QDockWidget
Project::instance
static Project * instance()
Definition: project.cpp:67
QMenu::addAction
void addAction(QAction *action)
BinUnitsView::selectUnit
void selectUnit(const QString &id)
Definition: binunitsview.cpp:181
QWidget::setVisible
virtual void setVisible(bool visible)
QAbstractScrollArea::viewport
QWidget * viewport() const
Catalog::push
void push(QUndoCommand *cmd)
Definition: catalog.cpp:155
cmd.h
Catalog::binUnitsCount
int binUnitsCount() const
so DocPosition::entry may actually be < size()+binUnitsCount()
Definition: catalog.cpp:448
QContextMenuEvent::globalPos
const QPoint & globalPos() const
DelTextCmd
Definition: cmd.h:99
BinUnitsModel::BinUnitsModel
BinUnitsModel(Catalog *catalog, QObject *parent)
Definition: binunitsview.cpp:39
DocPosition::entry
int entry
Definition: pos.h:48
DocPosition
This struct represents a position in a catalog.
Definition: pos.h:38
QAbstractItemModel::reset
void reset()
QModelIndex::isValid
bool isValid() const
Catalog::target
QString target(const DocPosition &pos) const
Definition: catalog.h:96
BinUnitsModel::TargetFilePath
Definition: binunitsview.h:69
QAbstractItemModel::dataChanged
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
QContextMenuEvent
QObject
catalog.h
BinUnitsView::BinUnitsView
BinUnitsView(Catalog *catalog, QWidget *parent)
Definition: binunitsview.cpp:157
QAbstractListModel::index
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const
QAbstractListModel
QObject::setObjectName
void setObjectName(const QString &name)
QModelIndex::row
int row() const
BinUnitsModel::setTargetFilePath
void setTargetFilePath(int row, const QString &)
Definition: binunitsview.cpp:85
BinUnitsModel::SourceFilePath
Definition: binunitsview.h:68
QString
QWidget::hide
void hide()
QHash::remove
int remove(const Key &key)
QMenu::exec
QAction * exec()
MyTreeView
Definition: phaseswindow.h:71
QFileInfo
QHash::clear
void clear()
QHash::value
const T value(const Key &key) const
QMenu
QTreeView::scrollTo
virtual void scrollTo(const QModelIndex &index, ScrollHint hint)
QImage
BinUnitsModel::Approved
Definition: binunitsview.h:70
QDockWidget::setWidget
void setWidget(QWidget *widget)
BinUnitsModel::rowCount
int rowCount(const QModelIndex &parent=QModelIndex()) const
Definition: binunitsview.cpp:100
QModelIndex::data
QVariant data(int role) const
Project::absolutePath
Q_SCRIPTABLE QString absolutePath(const QString &) const
Definition: project.cpp:178
QModelIndex::sibling
QModelIndex sibling(int row, int column) const
QTreeView::setModel
virtual void setModel(QAbstractItemModel *model)
QAction
Catalog::isApproved
bool isApproved(uint index) const
Definition: catalog.cpp:410
Catalog::numberOfEntries
int numberOfEntries() const
Definition: catalog.cpp:171
QModelIndex::column
int column() const
Catalog::source
QString source(const DocPosition &pos) const
Definition: catalog.h:95
Catalog
This class represents a catalog It uses CatalogStorage interface to work with catalogs in different f...
Definition: catalog.h:74
QHash::contains
bool contains(const Key &key) const
QWidget::show
void show()
QWidget::setBackgroundRole
void setBackgroundRole(QPalette::ColorRole role)
QAbstractItemView::currentIndex
QModelIndex currentIndex() const
QTreeView::setRootIsDecorated
void setRootIsDecorated(bool show)
BinUnitsModel::headerData
QVariant headerData(int section, Qt::Orientation, int role=Qt::DisplayRole) const
Definition: binunitsview.cpp:141
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
binunitsview.h
QVariant::toString
QString toString() const
Catalog::unitById
int unitById(const QString &id) const
Definition: catalog.cpp:453
phaseswindow.h
QVariant
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:40:06 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

lokalize

Skip menu "lokalize"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • umbrello
  •   umbrello

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