filemetainfo.cpp

00001 /***************************************************************************
00002  *   Copyright (C) 2005 by David Saxton                                    *
00003  *   david@bluehaze.org                                                    *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  ***************************************************************************/
00010 
00011 #include "filemetainfo.h"
00012 #include "textdocument.h"
00013 #include "textview.h"
00014 
00015 #include <kconfig.h>
00016 
00017 
00018 //BEGIN class MetaInfo
00019 MetaInfo::MetaInfo()
00020 {
00021         m_cursorLine = 0;
00022         m_cursorColumn = 0;
00023 }
00024 
00025 
00026 bool MetaInfo::hasDefaultData() const
00027 {
00028         return bookmarks().isEmpty() &&
00029                         breakpoints().isEmpty()  &&
00030                         (m_outputMethodInfo.method() == OutputMethodInfo::Method::Direct ) &&
00031                         (m_cursorLine == 0) &&
00032                         (m_cursorColumn == 0);
00033 }
00034 
00035 
00036 void MetaInfo::save( KConfig * conf )
00037 {
00038         conf->writeEntry( "Bookmarks", bookmarks() );
00039         conf->writeEntry( "Breakpoints", breakpoints() );
00040         conf->writeEntry( "OutputMethod", toID(outputMethodInfo().method()) );
00041         conf->writePathEntry( "OutputPath", outputMethodInfo().outputFile().prettyURL() );
00042         conf->writeEntry( "OutputPicID", outputMethodInfo().picID() );
00043         conf->writeEntry( "CursorLine", cursorLine() );
00044         conf->writeEntry( "CursorColumn", cursorColumn() );
00045 }
00046 
00047 
00048 void MetaInfo::load( KConfig * conf )
00049 {
00050         setBookmarks( conf->readIntListEntry("Bookmarks") );
00051         setBreakpoints( conf->readIntListEntry("Breakpoints") );
00052         m_outputMethodInfo.setMethod( toMethod( conf->readEntry("OutputMethod") ) );
00053         m_outputMethodInfo.setOutputFile( conf->readPathEntry("OutputPath") );
00054         m_outputMethodInfo.setPicID( conf->readEntry("OutputPicID") );
00055         setCursorLine( conf->readNumEntry( "CursorLine", 0 ) );
00056         setCursorColumn( conf->readNumEntry( "CursorColumn", 0 ) );
00057 }
00058 
00059 
00060 OutputMethodInfo::Method::Type MetaInfo::toMethod( const QString & id )
00061 {
00062         if ( id == "SaveAndLoad" )
00063                 return OutputMethodInfo::Method::SaveAndLoad;
00064         
00065         else if ( id == "SaveAndForget" )
00066                 return OutputMethodInfo::Method::SaveAndForget;
00067         
00068         return OutputMethodInfo::Method::Direct;
00069 }
00070 
00071 
00072 QString MetaInfo::toID( OutputMethodInfo::Method::Type method )
00073 {
00074         switch (method)
00075         {
00076                 case OutputMethodInfo::Method::SaveAndLoad:
00077                         return "SaveAndLoad";
00078                         
00079                 case OutputMethodInfo::Method::SaveAndForget:
00080                         return "SaveAndForget";
00081                         
00082                 case OutputMethodInfo::Method::Direct:
00083                 default:
00084                         return "Direct";
00085         }
00086 }
00087 //END class MetaInfo
00088 
00089 
00090 //BEGIN class FileMetaInfo
00091 FileMetaInfo::FileMetaInfo()
00092         : QObject()
00093 {
00094         m_metaInfoConfig = new KConfig( "metainfo", false, false, "appdata" );
00095         loadAllMetaInfo();
00096 }
00097 
00098 
00099 FileMetaInfo::~FileMetaInfo()
00100 {
00101         saveAllMetaInfo();
00102         delete m_metaInfoConfig;
00103 }
00104 
00105 
00106 void FileMetaInfo::grabMetaInfo( const KURL & url, TextDocument * textDocument )
00107 {
00108         if (!textDocument)
00109                 return;
00110         
00111         m_metaInfoMap[url].setBookmarks( textDocument->bookmarkList() );
00112         m_metaInfoMap[url].setBreakpoints( textDocument->breakpointList() );
00113 }
00114 
00115 
00116 void FileMetaInfo::initializeFromMetaInfo( const KURL & url, TextDocument * textDocument )
00117 {
00118         if (!textDocument)
00119                 return;
00120         
00121         textDocument->setBookmarks(m_metaInfoMap[url].bookmarks());
00122         textDocument->setBreakpoints(m_metaInfoMap[url].breakpoints());
00123 }
00124 
00125 
00126 void FileMetaInfo::grabMetaInfo( const KURL & url, TextView * textView )
00127 {
00128         if (!textView)
00129                 return;
00130         
00131         m_metaInfoMap[url].setCursorLine( textView->currentLine() );
00132         m_metaInfoMap[url].setCursorColumn( textView->currentColumn() );
00133 }
00134 
00135 
00136 void FileMetaInfo::initializeFromMetaInfo( const KURL & url, TextView * textView )
00137 {
00138         if (!textView)
00139                 return;
00140         
00141         textView->setCursorPosition( m_metaInfoMap[url].cursorLine(), m_metaInfoMap[url].cursorColumn() );
00142 }
00143 
00144 
00145 void FileMetaInfo::grabMetaInfo( const KURL & url, OutputMethodDlg * dlg )
00146 {
00147         if (!dlg)
00148                 return;
00149         
00150         m_metaInfoMap[url].setOutputMethodInfo( dlg->info() );
00151 }
00152 
00153 
00154 void FileMetaInfo::initializeFromMetaInfo( const KURL & url, OutputMethodDlg * dlg )
00155 {
00156         if ( !dlg || url.isEmpty() || !m_metaInfoMap.contains(url) )
00157                 return;
00158         
00159         OutputMethodInfo::Method::Type method = m_metaInfoMap[url].outputMethodInfo().method();
00160         dlg->setMethod(method);
00161         
00162         if ( method != OutputMethodInfo::Method::Direct )
00163                 dlg->setOutputFile( m_metaInfoMap[url].outputMethodInfo().outputFile() );
00164         
00165         dlg->setPicID( m_metaInfoMap[url].outputMethodInfo().picID() );
00166 }
00167 
00168 
00169 void FileMetaInfo::saveAllMetaInfo()
00170 {
00171         const MetaInfoMap::iterator end = m_metaInfoMap.end();
00172         for ( MetaInfoMap::iterator it = m_metaInfoMap.begin(); it != end; ++it )
00173         {
00174                 if ( it.data().hasDefaultData() )
00175                         m_metaInfoConfig->deleteGroup(it.key().prettyURL());
00176                 
00177                 else
00178                 {
00179                         m_metaInfoConfig->setGroup( it.key().prettyURL() );
00180                         it.data().save( m_metaInfoConfig );
00181                 }
00182         }
00183 }
00184 
00185 
00186 void FileMetaInfo::loadAllMetaInfo()
00187 {
00188         QStringList urlList = m_metaInfoConfig->groupList();
00189         const QStringList::iterator end = urlList.end();
00190         for ( QStringList::iterator it = urlList.begin(); it != end; ++it )
00191         {
00192                 m_metaInfoConfig->setGroup(*it);
00193                 m_metaInfoMap[*it].load(m_metaInfoConfig);
00194         }
00195 }
00196 //END class FileMetaInfo
00197 
00198 #include "filemetainfo.moc"

Generated on Tue May 8 17:05:29 2007 for KTechLab by  doxygen 1.5.1