00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "filemetainfo.h"
00012 #include "textdocument.h"
00013 #include "textview.h"
00014
00015 #include <kconfig.h>
00016
00017
00018
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
00088
00089
00090
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
00197
00198 #include "filemetainfo.moc"