File indexing completed on 2024-11-10 08:11:56
0001 /*************************************************************************** 0002 * Copyright (C) 2005 by David Saxton * 0003 * david@bluehaze.org * 0004 * * 0005 * This program is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 ***************************************************************************/ 0010 0011 #include "filemetainfo.h" 0012 #include "textdocument.h" 0013 #include "textview.h" 0014 0015 #include <KConfig> 0016 #include <KConfigGroup> 0017 0018 #include <QStandardPaths> 0019 0020 // BEGIN class MetaInfo 0021 MetaInfo::MetaInfo() 0022 { 0023 m_cursorLine = 0; 0024 m_cursorColumn = 0; 0025 } 0026 0027 bool MetaInfo::hasDefaultData() const 0028 { 0029 return bookmarks().isEmpty() && breakpoints().isEmpty() && (m_outputMethodInfo.method() == OutputMethodInfo::Method::Direct) && (m_cursorLine == 0) && (m_cursorColumn == 0); 0030 } 0031 0032 void MetaInfo::save(KConfigGroup *conf) 0033 { 0034 conf->writeEntry("Bookmarks", bookmarks()); 0035 conf->writeEntry("Breakpoints", breakpoints()); 0036 conf->writeEntry("OutputMethod", toID(outputMethodInfo().method())); 0037 conf->writePathEntry("OutputPath", outputMethodInfo().outputFile().toDisplayString(QUrl::PreferLocalFile)); 0038 conf->writeEntry("OutputPicID", outputMethodInfo().picID()); 0039 conf->writeEntry("CursorLine", cursorLine()); 0040 conf->writeEntry("CursorColumn", cursorColumn()); 0041 } 0042 0043 void MetaInfo::load(KConfigGroup *conf) 0044 { 0045 setBookmarks(conf->readEntry("Bookmarks", IntList())); 0046 setBreakpoints(conf->readEntry("Breakpoints", IntList())); 0047 m_outputMethodInfo.setMethod(toMethod(conf->readEntry("OutputMethod"))); 0048 m_outputMethodInfo.setOutputFile(QUrl::fromUserInput(conf->readPathEntry("OutputPath", QString()))); 0049 m_outputMethodInfo.setPicID(conf->readEntry("OutputPicID")); 0050 setCursorLine(conf->readEntry("CursorLine", 0)); 0051 setCursorColumn(conf->readEntry("CursorColumn", 0)); 0052 } 0053 0054 OutputMethodInfo::Method::Type MetaInfo::toMethod(const QString &id) 0055 { 0056 if (id == "SaveAndLoad") 0057 return OutputMethodInfo::Method::SaveAndLoad; 0058 0059 else if (id == "SaveAndForget") 0060 return OutputMethodInfo::Method::SaveAndForget; 0061 0062 return OutputMethodInfo::Method::Direct; 0063 } 0064 0065 QString MetaInfo::toID(OutputMethodInfo::Method::Type method) 0066 { 0067 switch (method) { 0068 case OutputMethodInfo::Method::SaveAndLoad: 0069 return "SaveAndLoad"; 0070 0071 case OutputMethodInfo::Method::SaveAndForget: 0072 return "SaveAndForget"; 0073 0074 case OutputMethodInfo::Method::Direct: 0075 default: 0076 return "Direct"; 0077 } 0078 } 0079 // END class MetaInfo 0080 0081 // BEGIN class FileMetaInfo 0082 FileMetaInfo::FileMetaInfo() 0083 : QObject() 0084 { 0085 // m_metaInfoConfig = new KConfig( "metainfo", false, false, "appdata" ); 0086 m_metaInfoConfig = new KConfig("metainfo", KConfig::SimpleConfig, QStandardPaths::AppDataLocation); 0087 loadAllMetaInfo(); 0088 } 0089 0090 FileMetaInfo::~FileMetaInfo() 0091 { 0092 saveAllMetaInfo(); 0093 delete m_metaInfoConfig; 0094 } 0095 0096 void FileMetaInfo::grabMetaInfo(const QUrl &url, TextDocument *textDocument) 0097 { 0098 if (!textDocument) 0099 return; 0100 0101 m_metaInfoMap[url].setBookmarks(textDocument->bookmarkList()); 0102 m_metaInfoMap[url].setBreakpoints(textDocument->breakpointList()); 0103 } 0104 0105 void FileMetaInfo::initializeFromMetaInfo(const QUrl &url, TextDocument *textDocument) 0106 { 0107 if (!textDocument) 0108 return; 0109 0110 textDocument->setBookmarks(m_metaInfoMap[url].bookmarks()); 0111 textDocument->setBreakpoints(m_metaInfoMap[url].breakpoints()); 0112 } 0113 0114 void FileMetaInfo::grabMetaInfo(const QUrl &url, TextView *textView) 0115 { 0116 if (!textView) 0117 return; 0118 0119 m_metaInfoMap[url].setCursorLine(textView->currentLine()); 0120 m_metaInfoMap[url].setCursorColumn(textView->currentColumn()); 0121 } 0122 0123 void FileMetaInfo::initializeFromMetaInfo(const QUrl &url, TextView *textView) 0124 { 0125 if (!textView) 0126 return; 0127 0128 textView->setCursorPosition(m_metaInfoMap[url].cursorLine(), m_metaInfoMap[url].cursorColumn()); 0129 } 0130 0131 void FileMetaInfo::grabMetaInfo(const QUrl &url, OutputMethodDlg *dlg) 0132 { 0133 if (!dlg) 0134 return; 0135 0136 m_metaInfoMap[url].setOutputMethodInfo(dlg->info()); 0137 } 0138 0139 void FileMetaInfo::initializeFromMetaInfo(const QUrl &url, OutputMethodDlg *dlg) 0140 { 0141 if (!dlg || url.isEmpty() || !m_metaInfoMap.contains(url)) 0142 return; 0143 0144 OutputMethodInfo::Method::Type method = m_metaInfoMap[url].outputMethodInfo().method(); 0145 dlg->setMethod(method); 0146 0147 if (method != OutputMethodInfo::Method::Direct) 0148 dlg->setOutputFile(m_metaInfoMap[url].outputMethodInfo().outputFile()); 0149 0150 dlg->setPicID(m_metaInfoMap[url].outputMethodInfo().picID()); 0151 } 0152 0153 void FileMetaInfo::saveAllMetaInfo() 0154 { 0155 const MetaInfoMap::iterator end = m_metaInfoMap.end(); 0156 for (MetaInfoMap::iterator it = m_metaInfoMap.begin(); it != end; ++it) { 0157 if (it.value().hasDefaultData()) 0158 m_metaInfoConfig->deleteGroup(it.key().toDisplayString()); 0159 0160 else { 0161 KConfigGroup grUrl = m_metaInfoConfig->group(it.key().toDisplayString()); 0162 it.value().save(&grUrl); 0163 } 0164 } 0165 } 0166 0167 void FileMetaInfo::loadAllMetaInfo() 0168 { 0169 QStringList urlList = m_metaInfoConfig->groupList(); 0170 const QStringList::iterator end = urlList.end(); 0171 for (QStringList::iterator it = urlList.begin(); it != end; ++it) { 0172 KConfigGroup grUrl = m_metaInfoConfig->group(*it); 0173 m_metaInfoMap[QUrl::fromUserInput(*it)].load(&grUrl); 0174 } 0175 } 0176 // END class FileMetaInfo 0177 0178 #include "moc_filemetainfo.cpp"