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

okteta

  • sources
  • kde-4.12
  • kdesdk
  • okteta
  • kasten
  • gui
  • system
bytearrayviewprofilemanager.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the Okteta Kasten module, made within the KDE community.
3 
4  Copyright 2010,2012 Friedrich W. H. Kossebau <kossebau@kde.org>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either
9  version 2.1 of the License, or (at your option) version 3, or any
10  later version accepted by the membership of KDE e.V. (or its
11  successor approved by the membership of KDE e.V.), which shall
12  act as a proxy defined in Section 6 of version 3 of the license.
13 
14  This library 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 GNU
17  Lesser General Public License for more details.
18 
19  You should have received a copy of the GNU Lesser General Public
20  License along with this library. If not, see <http://www.gnu.org/licenses/>.
21 */
22 
23 #include "bytearrayviewprofilemanager.h"
24 
25 // library
26 #include "bytearrayviewprofilelock.h"
27 // KDE
28 #include <KGlobal>
29 #include <KStandardDirs>
30 #include <KConfigGroup>
31 #include <KConfig>
32 #include <KDirWatch>
33 #include <KLockFile>
34 // Qt
35 #include <QtCore/QFileInfo>
36 #include <QtCore/QDir>
37 #include <QtCore/QUuid>
38 
39 #include <KDebug>
40 
41 namespace Kasten2
42 {
43 static const QStringList viewProfileFileNameFilter =
44  QStringList() << QLatin1String( "*.obavp" ) << QLatin1String( "*.olock" );
45 static const QString viewProfileFileSuffix = QLatin1String( ".obavp" );
46 static const QString viewProfileDirSubPath = QLatin1String( "okteta/viewprofiles" );
47 static const QString defaultViewProfileFileSubPath = QLatin1String( "okteta/defaultviewprofile" );
48 static const int DefaultNoOfBytesPerLine = 16;
49 static const int DefaultNoOfBytesPerGroup = 4;
50 static const int DefaultLayoutStyle = 0;
51 static const int DefaultViewModus = 0;
52 static const int DefaultVisibleByteArrayCodings = 3;
53 static const int DefaultOffsetCoding = 0;
54 static const int DefaultValueCoding = 0;
55 static const QString DefaultCharCoding;
56 
57 static QList<ByteArrayViewProfile::Id>
58 viewProfileIds( const QList<ByteArrayViewProfile>& viewProfiles )
59 {
60  QList<ByteArrayViewProfile::Id> result;
61  result.reserve(viewProfiles.count());
62 
63  foreach( const ByteArrayViewProfile& viewProfile, viewProfiles )
64  result.append( viewProfile.id() );
65 
66  return result;
67 }
68 
69 static QList<ByteArrayViewProfile::Id>
70 lockedViewProfileIds( const ByteArrayViewProfileFileInfoLookup& viewProfileFileInfoLookup )
71 {
72  QList<ByteArrayViewProfile::Id> result;
73 
74  ByteArrayViewProfileFileInfoLookup::ConstIterator end =
75  viewProfileFileInfoLookup.constEnd();
76  for( ByteArrayViewProfileFileInfoLookup::ConstIterator it =
77  viewProfileFileInfoLookup.constBegin();
78  it != end;
79  ++it )
80  {
81  if( it.value().isLocked() )
82  result.append( it.key() );
83  }
84 
85  return result;
86 }
87 
88 static void
89 updateLockStatus( ByteArrayViewProfileFileInfoLookup& viewProfileFileInfoLookup,
90  const QList<ByteArrayViewProfile::Id>& lockedViewProfileIds,
91  const QList<ByteArrayViewProfile::Id>& unlockedViewProfileIds )
92 {
93  if( lockedViewProfileIds.isEmpty() && unlockedViewProfileIds.isEmpty() )
94  return;
95 
96  ByteArrayViewProfileFileInfoLookup::Iterator end =
97  viewProfileFileInfoLookup.end();
98  for( ByteArrayViewProfileFileInfoLookup::Iterator it = viewProfileFileInfoLookup.begin();
99  it != end;
100  ++it )
101  {
102  bool isLocked;
103 
104  if( lockedViewProfileIds.contains(it.key()) )
105  isLocked = true;
106  else if( unlockedViewProfileIds.contains(it.key()) )
107  isLocked = false;
108  else
109  continue;
110 
111  it.value().setLocked( isLocked );
112  }
113 }
114 
115 static QString
116 defaultViewProfileFilePath()
117 {
118  return KGlobal::dirs()->saveLocation( "data" ) + defaultViewProfileFileSubPath;
119 }
120 
121 static QString
122 viewProfileFilePath( const ByteArrayViewProfile::Id& viewProfileId )
123 {
124  return KGlobal::dirs()->saveLocation( "data", viewProfileDirSubPath ) + viewProfileId + viewProfileFileSuffix;
125 }
126 
127 static QString
128 viewProfileFileName( const ByteArrayViewProfile::Id& viewProfileId )
129 {
130  return viewProfileId + viewProfileFileSuffix;
131 }
132 
133 // TODO: add global lock
134 // TODO: make calls async
135 // TODO: only load view profiles on demand
136 ByteArrayViewProfileManager::ByteArrayViewProfileManager()
137 {
138  mViewProfileFileWatcher = new KDirWatch( this );
139  connect( mViewProfileFileWatcher, SIGNAL(dirty(QString)),
140  SLOT(onViewProfilesFolderChanged(QString)) );
141 
142  // get all folder where viewProfiles could be stored
143  const KStandardDirs* const standardDirs = KGlobal::dirs();
144  const QStringList dataFolderPaths = standardDirs->resourceDirs( "data" );
145 
146  foreach( const QString& dataFolderPath, dataFolderPaths )
147  {
148  const QString viewProfileFolderPath = dataFolderPath + viewProfileDirSubPath;
149  // watch folder for changes
150  mViewProfileFileWatcher->addDir( viewProfileFolderPath, KDirWatch::WatchDirOnly );
151 kDebug() << "adding Dir"<<viewProfileFolderPath;
152 
153  // read current files
154  onViewProfilesFolderChanged( viewProfileFolderPath );
155  }
156 
157  // default view profile
158  // While there is no proper config syncing offer in the used frameworks, use a
159  // single file with the id as content as workaround and watch for it changing
160  KDirWatch* defaultViewProfileWatcher = new KDirWatch( this );
161  connect( defaultViewProfileWatcher, SIGNAL(created(QString)),
162  SLOT(onDefaultViewProfileChanged(QString)) );
163  connect( defaultViewProfileWatcher, SIGNAL(dirty(QString)),
164  SLOT(onDefaultViewProfileChanged(QString)) );
165  const QString _defaultViewProfileFilePath = defaultViewProfileFilePath();
166 
167  defaultViewProfileWatcher->addFile( _defaultViewProfileFilePath );
168 
169  onDefaultViewProfileChanged( _defaultViewProfileFilePath );
170 
171  // report any problems with existing view profiles?
172 }
173 
174 int
175 ByteArrayViewProfileManager::viewProfilesCount() const
176 {
177  return mViewProfiles.count();
178 }
179 
180 
181 QList<ByteArrayViewProfile>
182 ByteArrayViewProfileManager::viewProfiles() const
183 {
184  return mViewProfiles;
185 }
186 
187 ByteArrayViewProfile
188 ByteArrayViewProfileManager::viewProfile( const ByteArrayViewProfile::Id& viewProfileId ) const
189 {
190  ByteArrayViewProfile result;
191 
192  foreach( const ByteArrayViewProfile& viewProfile, mViewProfiles )
193  {
194  if( viewProfile.id() == viewProfileId )
195  {
196  result = viewProfile;
197  break;
198  }
199  }
200 
201  return result;
202 }
203 
204 ByteArrayViewProfile::Id
205 ByteArrayViewProfileManager::defaultViewProfileId() const
206 {
207  return mDefaultViewProfileId;
208 }
209 
210 ByteArrayViewProfile
211 ByteArrayViewProfileManager::defaultViewProfile() const
212 {
213  return viewProfile( mDefaultViewProfileId );
214 }
215 
216 bool
217 ByteArrayViewProfileManager::isViewProfileLocked( const ByteArrayViewProfile::Id& viewProfileId ) const
218 {
219  bool result = false;
220 
221  // search in all folders for the info
222  foreach( const ByteArrayViewProfileFileInfoLookup& viewProfileFileInfoLookup, mViewProfileFileInfoLookupPerFolder )
223  {
224  ByteArrayViewProfileFileInfoLookup::ConstIterator it =
225  viewProfileFileInfoLookup.find( viewProfileId );
226  if( it != viewProfileFileInfoLookup.constEnd() )
227  {
228  result = it->isLocked();
229  break;
230  }
231  }
232 
233  return result;
234 }
235 
236 void ByteArrayViewProfileManager::saveViewProfiles( QList<ByteArrayViewProfile>& viewProfiles )
237 {
238  //TODO: do not save if locked by someone else -> needs passing of our lock? or just registering our own and check?
239  // create and set unique id
240  for( QList<ByteArrayViewProfile>::Iterator it = viewProfiles.begin(); it != viewProfiles.end(); ++it )
241  {
242  ByteArrayViewProfile& viewProfile = *it;
243  const ByteArrayViewProfile::Id viewProfileId = viewProfile.id();
244  const ByteArrayViewProfile::Id oldViewProfileId = viewProfile.id();
245 
246  bool needsId = true;
247  if( ! viewProfileId.isEmpty() )
248  {
249  // already existing?
250  QList<ByteArrayViewProfile>::ConstIterator existingIt = mViewProfiles.constBegin();
251  QList<ByteArrayViewProfile>::ConstIterator existingEnd = mViewProfiles.constEnd();
252  for( ; existingIt != existingEnd; ++existingIt )
253  {
254  if( viewProfileId == existingIt->id() )
255  {
256  needsId = false;
257  break;
258  }
259  }
260  }
261 
262  // set new uuid for non-existing
263  if( needsId )
264  viewProfile.setId( QUuid::createUuid().toString() );
265 
266 kDebug() << "going to save"<<viewProfile.viewProfileTitle()<<viewProfile.id()<<oldViewProfileId;
267  saveViewProfile( viewProfile );
268  }
269 }
270 
271 
272 void
273 ByteArrayViewProfileManager::removeViewProfiles( const QList<ByteArrayViewProfile::Id>& viewProfileIds )
274 {
275  foreach( const ByteArrayViewProfile::Id& viewProfileId, viewProfileIds )
276  {
277  removeViewProfile( viewProfileId );
278  }
279 }
280 
281 
282 void
283 ByteArrayViewProfileManager::setDefaultViewProfile( const ByteArrayViewProfile::Id& viewProfileId )
284 {
285  QFile defaultViewProfileFile( defaultViewProfileFilePath() );
286  defaultViewProfileFile.open( QIODevice::WriteOnly );
287 
288  defaultViewProfileFile.write( viewProfileId.toUtf8() );
289  defaultViewProfileFile.close();
290 }
291 
292 ByteArrayViewProfileLock
293 ByteArrayViewProfileManager::createLock( const ByteArrayViewProfile::Id& viewProfileId )
294 {
295  const QString viewProfileFilePath = filePathOfViewProfile( viewProfileId );
296 
297  return ByteArrayViewProfileLock( viewProfileFilePath, viewProfileId );
298 }
299 
300 /*
301 bool
302 ByteArrayViewProfileManager::lockViewProfile( const Kasten::ByteArrayViewProfile::Id& viewProfileId )
303 {
304  bool isSuccessfull;
305 
306  const QString viewProfileFilePath = filePathOfViewProfile( viewProfileId );
307 
308  // viewProfile known
309  if( not viewProfileFilePath.isEmpty() )
310  {
311  const QString lockFilePath = viewProfileFileLockPath( viewProfileFilePath );
312  KLockFile::Ptr lock = new KLockFile( lockFilePath );
313  const KLockFile::LockResult lockResult =
314  lock->lock(KLockFile::NoBlockFlag | KLockFile::ForceFlag);
315  isSuccessfull = (lockResult == KLockFile::LockOK );
316  }
317  // if found
318  // try to create lock file
319  return isSuccessfull;
320 }
321 */
322 // bool
323 // ByteArrayViewProfileManager::unlockViewProfile( const Kasten::ByteArrayViewProfile::Id& viewProfileId )
324 // {
325 // const QString filePath = filePathOfViewProfile( viewProfileId );
326 //
327 // if( filePath.isEmpty() )
328 // return false;
329 // }
330 
331 ByteArrayViewProfile
332 ByteArrayViewProfileManager::loadViewProfile( const QString& absoluteFilePath ) const
333 {
334 kDebug() << "Loading" << QFileInfo(absoluteFilePath).baseName() << absoluteFilePath;
335  ByteArrayViewProfile result;
336 
337  KConfig configFile( absoluteFilePath, KConfig::SimpleConfig );
338 
339  // check version
340  KConfigGroup formatConfigGroup = configFile.group( "OBAVP" );
341  const QString formatVersion = formatConfigGroup.readEntry( "Version" );
342  if( ! formatVersion.startsWith(QLatin1String( "1." )) )
343  {
344 kDebug() << "ViewProfile file has an unsupported version:" << formatVersion;
345  return result;
346  }
347 
348  result.setId( QFileInfo(absoluteFilePath).baseName() );
349 
350  KConfigGroup generalConfigGroup = configFile.group( "General" );
351  result.setViewProfileTitle( generalConfigGroup.readEntry("Title") );
352 
353  KConfigGroup layoutConfigGroup = configFile.group( "Layout" );
354  result.setNoOfBytesPerLine( layoutConfigGroup.readEntry("NoOfBytesPerLine", DefaultNoOfBytesPerLine) );
355  result.setNoOfGroupedBytes( layoutConfigGroup.readEntry("NoOfBytesPerGroup", DefaultNoOfBytesPerGroup) );
356  result.setLayoutStyle( layoutConfigGroup.readEntry("LayoutStyle", DefaultLayoutStyle) );
357 
358  KConfigGroup displayConfigGroup = configFile.group( "Display" );
359  result.setOffsetColumnVisible( displayConfigGroup.readEntry("OffsetColumnVisible", true) );
360  result.setOffsetCoding( displayConfigGroup.readEntry("OffsetCoding", DefaultOffsetCoding) );
361  result.setViewModus( displayConfigGroup.readEntry("ViewModus", DefaultViewModus) );
362  result.setVisibleByteArrayCodings( displayConfigGroup.readEntry("VisibleByteArrayCodings", DefaultVisibleByteArrayCodings) );
363 
364  KConfigGroup interpretationConfigGroup = configFile.group( "Interpretation" );
365 
366  KConfigGroup valuesConfigGroup = interpretationConfigGroup.group( "Values" );
367  result.setValueCoding( valuesConfigGroup.readEntry("Coding", DefaultValueCoding) );
368 
369  KConfigGroup charsConfigGroup = interpretationConfigGroup.group( "Chars" );
370  result.setCharCoding( charsConfigGroup.readEntry("Coding", DefaultCharCoding) );
371  result.setShowsNonprinting( charsConfigGroup.readEntry("NonprintingShown", false) );
372  result.setSubstituteChar( charsConfigGroup.readEntry("SubstituteChar", ".").at(0) );
373  result.setUndefinedChar( charsConfigGroup.readEntry("UndefinedChar", "?").at(0) );
374 
375  return result;
376 }
377 
378 void
379 ByteArrayViewProfileManager::saveViewProfile( const ByteArrayViewProfile& viewProfile ) const
380 {
381 kDebug() << "------------------ Saving"<<viewProfile.id();
382 {
383  const QString fileName = viewProfileFilePath( viewProfile.id() );
384  KConfig configFile( fileName, KConfig::SimpleConfig );
385 
386  KConfigGroup formatConfigGroup = configFile.group( "OBAVP" );
387  formatConfigGroup.writeEntry( "Version", "1.1" );
388 
389  KConfigGroup generalConfigGroup = configFile.group( "General" );
390  generalConfigGroup.writeEntry( "Title", viewProfile.viewProfileTitle() );
391 
392  KConfigGroup layoutConfigGroup = configFile.group( "Layout" );
393  layoutConfigGroup.writeEntry( "NoOfBytesPerLine", viewProfile.noOfBytesPerLine() );
394  layoutConfigGroup.writeEntry( "NoOfBytesPerGroup", viewProfile.noOfGroupedBytes() );
395  layoutConfigGroup.writeEntry( "LayoutStyle", viewProfile.layoutStyle() );
396 
397  KConfigGroup displayConfigGroup = configFile.group( "Display" );
398  displayConfigGroup.writeEntry( "OffsetColumnVisible", viewProfile.offsetColumnVisible() );
399  displayConfigGroup.writeEntry( "OffsetCoding", viewProfile.offsetCoding() );
400  displayConfigGroup.writeEntry( "ViewModus", viewProfile.viewModus() );
401  displayConfigGroup.writeEntry( "VisibleByteArrayCodings", viewProfile.visibleByteArrayCodings() );
402 
403  KConfigGroup interpretationConfigGroup = configFile.group( "Interpretation" );
404 
405  KConfigGroup valuesConfigGroup = interpretationConfigGroup.group( "Values" );
406  valuesConfigGroup.writeEntry( "Coding", viewProfile.valueCoding() );
407 
408  KConfigGroup charsConfigGroup = interpretationConfigGroup.group( "Chars" );
409  charsConfigGroup.writeEntry( "Coding", viewProfile.charCodingName() );
410  charsConfigGroup.writeEntry( "NonprintingShown", viewProfile.showsNonprinting() );
411  charsConfigGroup.writeEntry( "SubstituteChar", QString(viewProfile.substituteChar()) );
412  charsConfigGroup.writeEntry( "UndefinedChar", QString(viewProfile.undefinedChar()) );
413 }
414 kDebug() << "------------------ Saved"<<viewProfile.id();
415 }
416 
417 void
418 ByteArrayViewProfileManager::removeViewProfile( const ByteArrayViewProfile::Id& viewProfileId )
419 {
420  const QString filePath = filePathOfViewProfile( viewProfileId );
421 kDebug() << "------------------ Removing"<<viewProfileId<<filePath;
422  if( ! filePath.isEmpty() )
423  QFile::remove( filePath );
424 }
425 
426 QString
427 ByteArrayViewProfileManager::filePathOfViewProfile( const ByteArrayViewProfile::Id& viewProfileId ) const
428 {
429  QString result;
430 
431  for( QHash<QString, ByteArrayViewProfileFileInfoLookup>::ConstIterator foldersIt =
432  mViewProfileFileInfoLookupPerFolder.constBegin();
433  foldersIt != mViewProfileFileInfoLookupPerFolder.constEnd() && result.isEmpty();
434  ++foldersIt )
435  {
436  const ByteArrayViewProfileFileInfoLookup& fileInfoList = foldersIt.value();
437  for( ByteArrayViewProfileFileInfoLookup::ConstIterator folderIt = fileInfoList.constBegin();
438  folderIt != fileInfoList.constEnd();
439  ++folderIt )
440  {
441  if( folderIt.key() == viewProfileId )
442  {
443  result = foldersIt.key() + QLatin1Char('/') + viewProfileFileName( viewProfileId );
444  break;
445  }
446  }
447  }
448 
449  return result;
450 }
451 
452 void
453 ByteArrayViewProfileManager::onViewProfilesFolderChanged( const QString& viewProfileFolderPath )
454 {
455 kDebug() << "looking into folder"<< viewProfileFolderPath;
456  ByteArrayViewProfileFileInfoLookup& viewProfileFileInfoLookup =
457  mViewProfileFileInfoLookupPerFolder[viewProfileFolderPath];
458 
459  // TODO: reparse for new, removed and changed files
460  // assume all are removed and unlocked in the beginning
461  QList<ByteArrayViewProfile::Id> removedViewProfileIds = viewProfileFileInfoLookup.keys();
462  QList<ByteArrayViewProfile> newViewProfiles;
463  QList<ByteArrayViewProfile> changedViewProfiles;
464 
465  QList<ByteArrayViewProfile::Id> newUnlockedViewProfileIds = lockedViewProfileIds(viewProfileFileInfoLookup);
466  QList<ByteArrayViewProfile::Id> newLockedViewProfileIds;
467 kDebug() << "old profiles:" << removedViewProfileIds;
468 kDebug() << "locked profiles:" << newUnlockedViewProfileIds;
469  // iterate all files in folder
470  const QFileInfoList viewProfileFileInfoList =
471  QDir( viewProfileFolderPath ).entryInfoList( viewProfileFileNameFilter, QDir::Files );
472 
473  foreach( const QFileInfo& viewProfileFileInfo, viewProfileFileInfoList )
474  {
475  // a lock file ?
476  if( viewProfileFileInfo.suffix() == QLatin1String("olock") )
477  {
478  const ByteArrayViewProfile::Id lockedViewProfileId = viewProfileFileInfo.baseName();
479  // if not in old locks, is a new lock
480  if( ! newUnlockedViewProfileIds.removeOne(lockedViewProfileId) )
481  newLockedViewProfileIds.append( lockedViewProfileId );
482  continue;
483  }
484 
485  // not a viewprofile file ?
486  if( viewProfileFileInfo.suffix() != QLatin1String("obavp") )
487  continue;
488 
489  // all other files assumed to be viewProfile files
490  const ByteArrayViewProfile::Id viewProfileId = viewProfileFileInfo.baseName();
491 kDebug() <<"going to load"<<viewProfileId;
492  // load file
493  const ByteArrayViewProfile viewProfile = loadViewProfile( viewProfileFileInfo.absoluteFilePath() );
494  // loading failed? Treat as not existing
495  if( viewProfile.id().isEmpty() )
496  continue;
497 
498  const ByteArrayViewProfileFileInfoLookup::Iterator infoIt =
499  viewProfileFileInfoLookup.find( viewProfileId );
500  const bool isKnown = ( infoIt != viewProfileFileInfoLookup.end() );
501  const QDateTime fileInfoLastModified = viewProfileFileInfo.lastModified();
502  // is known?
503  if( isKnown )
504  {
505  removedViewProfileIds.removeOne( viewProfileId );
506 
507  // check timestamp
508  if( fileInfoLastModified == infoIt->lastModified() )
509  continue;
510 
511  // update timestamp
512  infoIt->setLastModified( fileInfoLastModified );
513  }
514  else
515  {
516  ByteArrayViewProfileFileInfo info( fileInfoLastModified, false );
517  viewProfileFileInfoLookup.insert( viewProfileId, info );
518  }
519 
520  if( isKnown )
521  {
522  QList<ByteArrayViewProfile>::Iterator it = mViewProfiles.begin();
523  QList<ByteArrayViewProfile>::Iterator end = mViewProfiles.end();
524  for( ; it != end; ++it )
525  {
526  if( it->id() == viewProfileId )
527  {
528  *it = viewProfile;
529  break;
530  }
531  }
532  }
533  else
534  newViewProfiles.append( viewProfile );
535  changedViewProfiles.append( viewProfile );
536  }
537 
538  // remove all removed viewprofiles
539  {
540  QList<ByteArrayViewProfile>::Iterator it = mViewProfiles.begin();
541  while( it != mViewProfiles.end() )
542  {
543  // contained in removed?
544  if( removedViewProfileIds.contains(it->id()) )
545  it = mViewProfiles.erase(it);
546  else
547  ++it;
548  }
549  }
550  foreach( const ByteArrayViewProfile::Id& viewProfileId, removedViewProfileIds )
551  {
552  viewProfileFileInfoLookup.remove( viewProfileId );
553  if( viewProfileId == mDefaultViewProfileId )
554  mDefaultViewProfileId.clear();
555  // TODO: how to select new one?
556  }
557 
558  // add new viewprofiles
559  mViewProfiles.append( newViewProfiles );
560  // if there was no default viewprofile before, set default to first
561  const bool isDefaultViewProfileChanged = ( mDefaultViewProfileId.isEmpty() && ! mViewProfiles.isEmpty() );
562  if( isDefaultViewProfileChanged )
563  mDefaultViewProfileId = mViewProfiles.at(0).id();
564 
565  // update lock info
566  updateLockStatus( viewProfileFileInfoLookup, newLockedViewProfileIds, newUnlockedViewProfileIds );
567 
568 kDebug() << "new profiles:" << viewProfileFileInfoLookup.keys();
569 
570  // signal changes
571  if( ! changedViewProfiles.isEmpty() )
572  emit viewProfilesChanged( changedViewProfiles );
573 kDebug() << "changed profiles" << viewProfileIds(changedViewProfiles);
574  if( ! removedViewProfileIds.isEmpty() )
575  emit viewProfilesRemoved( removedViewProfileIds );
576 kDebug() << "removed profiles" << removedViewProfileIds;
577 
578  if( ! newUnlockedViewProfileIds.isEmpty() )
579  emit viewProfilesUnlocked( newUnlockedViewProfileIds );
580 kDebug() << "unlocked profiles" << newUnlockedViewProfileIds;
581  if( ! newLockedViewProfileIds.isEmpty() )
582  emit viewProfilesLocked( newLockedViewProfileIds );
583 kDebug() << "locked profiles" << newLockedViewProfileIds;
584  if( isDefaultViewProfileChanged )
585  emit defaultViewProfileChanged( mDefaultViewProfileId );
586 }
587 
588 void ByteArrayViewProfileManager::onDefaultViewProfileChanged( const QString& path )
589 {
590  QFile defaultViewProfileFile( path );
591  defaultViewProfileFile.open( QIODevice::ReadOnly );
592 
593  const QByteArray fileContent = defaultViewProfileFile.readAll();
594  const QString viewProfileId = QString::fromUtf8( fileContent, fileContent.size() );
595  defaultViewProfileFile.close();
596 
597 kDebug() << "Default viewprofile read:" << viewProfileId;
598 
599  // no id set?
600  if( viewProfileId.isEmpty() )
601  return;
602 
603  // no change?
604  if( mDefaultViewProfileId == viewProfileId )
605  return;
606 
607  bool isExisting = false;
608  foreach( const ByteArrayViewProfile& viewProfile, mViewProfiles )
609  {
610  if( viewProfile.id() == viewProfileId )
611  {
612  isExisting = true;
613  break;
614  }
615  }
616 
617  if( isExisting )
618  {
619  mDefaultViewProfileId = viewProfileId;
620  emit defaultViewProfileChanged( mDefaultViewProfileId );
621  }
622 }
623 
624 
625 ByteArrayViewProfileManager::~ByteArrayViewProfileManager()
626 {
627 }
628 
629 }
Kasten2::ByteArrayViewProfile::setValueCoding
void setValueCoding(int valueCoding)
Definition: bytearrayviewprofile.cpp:126
Kasten2::ByteArrayViewProfile::id
Id id() const
Definition: bytearrayviewprofile.cpp:108
Kasten2::viewProfileDirSubPath
static const QString viewProfileDirSubPath
Definition: bytearrayviewprofilemanager.cpp:46
Kasten2::DefaultNoOfBytesPerGroup
static const int DefaultNoOfBytesPerGroup
Definition: bytearrayviewprofilemanager.cpp:49
Kasten2::ByteArrayViewProfile::setNoOfGroupedBytes
void setNoOfGroupedBytes(int noOfGroupedBytes)
Definition: bytearrayviewprofile.cpp:135
Kasten2::ByteArrayViewProfileManager::~ByteArrayViewProfileManager
virtual ~ByteArrayViewProfileManager()
Definition: bytearrayviewprofilemanager.cpp:625
bytearrayviewprofilelock.h
Kasten2::DefaultNoOfBytesPerLine
static const int DefaultNoOfBytesPerLine
Definition: bytearrayviewprofilemanager.cpp:48
Kasten2::ByteArrayViewProfileManager::viewProfilesCount
int viewProfilesCount() const
Definition: bytearrayviewprofilemanager.cpp:175
Kasten2::ByteArrayViewProfileManager::removeViewProfiles
void removeViewProfiles(const QList< ByteArrayViewProfile::Id > &viewProfileIds)
Definition: bytearrayviewprofilemanager.cpp:273
Kasten2::ByteArrayViewProfile::Id
QString Id
Definition: bytearrayviewprofile.h:42
Kasten2::ByteArrayViewProfile::setOffsetCoding
void setOffsetCoding(int offsetCoding)
Definition: bytearrayviewprofile.cpp:125
Kasten2::ByteArrayViewProfileManager::viewProfilesUnlocked
void viewProfilesUnlocked(const QList< Kasten2::ByteArrayViewProfile::Id > &viewProfileIds)
Kasten2::ByteArrayViewProfile
Definition: bytearrayviewprofile.h:39
Kasten2::ByteArrayViewProfile::setOffsetColumnVisible
void setOffsetColumnVisible(bool visible)
Definition: bytearrayviewprofile.cpp:130
Kasten2::viewProfileFileSuffix
static const QString viewProfileFileSuffix
Definition: bytearrayviewprofilemanager.cpp:45
Kasten2::ByteArrayViewProfileManager::isViewProfileLocked
bool isViewProfileLocked(const ByteArrayViewProfile::Id &id) const
Definition: bytearrayviewprofilemanager.cpp:217
Kasten2::ByteArrayViewProfile::setSubstituteChar
void setSubstituteChar(const QChar &substituteChar)
Definition: bytearrayviewprofile.cpp:128
bytearrayviewprofilemanager.h
Kasten2::ByteArrayViewProfileLock
Definition: bytearrayviewprofilelock.h:38
Kasten2::DefaultCharCoding
static const QString DefaultCharCoding
Definition: bytearrayviewprofilemanager.cpp:55
Kasten2::ByteArrayViewProfileManager::saveViewProfiles
void saveViewProfiles(QList< ByteArrayViewProfile > &viewProfiles)
Definition: bytearrayviewprofilemanager.cpp:236
Kasten2::ByteArrayViewProfileManager::viewProfilesChanged
void viewProfilesChanged(const QList< Kasten2::ByteArrayViewProfile > &viewProfiles)
Kasten2::ByteArrayViewProfileManager::viewProfiles
QList< ByteArrayViewProfile > viewProfiles() const
Definition: bytearrayviewprofilemanager.cpp:182
Kasten2::viewProfileFileName
static QString viewProfileFileName(const ByteArrayViewProfile::Id &viewProfileId)
Definition: bytearrayviewprofilemanager.cpp:128
Kasten2::ByteArrayViewProfileManager::ByteArrayViewProfileManager
ByteArrayViewProfileManager()
Definition: bytearrayviewprofilemanager.cpp:136
Kasten2::ByteArrayViewProfile::setShowsNonprinting
void setShowsNonprinting(bool showsNonprinting)
Definition: bytearrayviewprofile.cpp:134
Kasten2::ByteArrayViewProfileManager::defaultViewProfileId
ByteArrayViewProfile::Id defaultViewProfileId() const
Definition: bytearrayviewprofilemanager.cpp:205
Kasten2::ByteArrayViewProfileManager::setDefaultViewProfile
void setDefaultViewProfile(const ByteArrayViewProfile::Id &viewProfileId)
Definition: bytearrayviewprofilemanager.cpp:283
Kasten2::ByteArrayViewProfile::setUndefinedChar
void setUndefinedChar(const QChar &undefinedChar)
Definition: bytearrayviewprofile.cpp:129
Kasten2::ByteArrayViewProfile::setNoOfBytesPerLine
void setNoOfBytesPerLine(int noOfBytesPerLine)
Definition: bytearrayviewprofile.cpp:133
Kasten2::ByteArrayViewProfileManager::createLock
ByteArrayViewProfileLock createLock(const ByteArrayViewProfile::Id &viewProfileId)
Definition: bytearrayviewprofilemanager.cpp:293
Kasten2::ByteArrayViewProfileFileInfoLookup
QHash< ByteArrayViewProfile::Id, ByteArrayViewProfileFileInfo > ByteArrayViewProfileFileInfoLookup
Definition: bytearrayviewprofilemanager.h:62
Kasten2::DefaultVisibleByteArrayCodings
static const int DefaultVisibleByteArrayCodings
Definition: bytearrayviewprofilemanager.cpp:52
Kasten2::ByteArrayViewProfileManager::defaultViewProfileChanged
void defaultViewProfileChanged(const Kasten2::ByteArrayViewProfile::Id &viewProfileId)
Kasten2::viewProfileFilePath
static QString viewProfileFilePath(const ByteArrayViewProfile::Id &viewProfileId)
Definition: bytearrayviewprofilemanager.cpp:122
Kasten2::lockedViewProfileIds
static QList< ByteArrayViewProfile::Id > lockedViewProfileIds(const ByteArrayViewProfileFileInfoLookup &viewProfileFileInfoLookup)
Definition: bytearrayviewprofilemanager.cpp:70
Kasten2::ByteArrayViewProfileManager::defaultViewProfile
ByteArrayViewProfile defaultViewProfile() const
Definition: bytearrayviewprofilemanager.cpp:211
Kasten2::DefaultLayoutStyle
static const int DefaultLayoutStyle
Definition: bytearrayviewprofilemanager.cpp:50
Kasten2::ByteArrayViewProfileManager::viewProfilesLocked
void viewProfilesLocked(const QList< Kasten2::ByteArrayViewProfile::Id > &viewProfileIds)
Kasten2::updateLockStatus
static void updateLockStatus(ByteArrayViewProfileFileInfoLookup &viewProfileFileInfoLookup, const QList< ByteArrayViewProfile::Id > &lockedViewProfileIds, const QList< ByteArrayViewProfile::Id > &unlockedViewProfileIds)
Definition: bytearrayviewprofilemanager.cpp:89
Kasten2::viewProfileIds
static QList< ByteArrayViewProfile::Id > viewProfileIds(const QList< ByteArrayViewProfile > &viewProfiles)
Definition: bytearrayviewprofilemanager.cpp:58
ScriptValueConverter::toString
StringDataInformation * toString(const QScriptValue &value, const ParserInfo &info)
Kasten2::DefaultViewModus
static const int DefaultViewModus
Definition: bytearrayviewprofilemanager.cpp:51
Kasten2::viewProfileFileNameFilter
static const QStringList viewProfileFileNameFilter
Definition: bytearrayviewprofilemanager.cpp:43
Kasten2::ByteArrayViewProfile::setVisibleByteArrayCodings
void setVisibleByteArrayCodings(int columns)
Definition: bytearrayviewprofile.cpp:131
Kasten2::defaultViewProfileFilePath
static QString defaultViewProfileFilePath()
Definition: bytearrayviewprofilemanager.cpp:116
Kasten2::ByteArrayViewProfile::setViewModus
void setViewModus(int viewModus)
Definition: bytearrayviewprofile.cpp:136
Kasten2::ByteArrayViewProfile::viewProfileTitle
QString viewProfileTitle() const
Definition: bytearrayviewprofile.cpp:109
Kasten2::DefaultOffsetCoding
static const int DefaultOffsetCoding
Definition: bytearrayviewprofilemanager.cpp:53
Kasten2::DefaultValueCoding
static const Okteta::ValueCoding DefaultValueCoding
Definition: statistictablemodel.cpp:39
Kasten2::ByteArrayViewProfile::setCharCoding
void setCharCoding(const QString &charCodingName)
Definition: bytearrayviewprofile.cpp:127
Kasten2::ByteArrayViewProfileManager::viewProfilesRemoved
void viewProfilesRemoved(const QList< Kasten2::ByteArrayViewProfile::Id > &viewProfileIds)
Kasten2::ByteArrayViewProfile::setLayoutStyle
void setLayoutStyle(int layoutStyle)
Definition: bytearrayviewprofile.cpp:132
QList
Definition: bookmarkable.h:29
Kasten2::ByteArrayViewProfile::setViewProfileTitle
void setViewProfileTitle(const QString &title)
Definition: bytearrayviewprofile.cpp:124
Kasten2::ByteArrayViewProfile::setId
void setId(const Id &id)
Definition: bytearrayviewprofile.cpp:123
Kasten2::defaultViewProfileFileSubPath
static const QString defaultViewProfileFileSubPath
Definition: bytearrayviewprofilemanager.cpp:47
Kasten2::ByteArrayViewProfileManager::viewProfile
ByteArrayViewProfile viewProfile(const ByteArrayViewProfile::Id &id) const
Definition: bytearrayviewprofilemanager.cpp:188
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:07 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okteta

Skip menu "okteta"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • 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