generalinfowidget.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <qlineedit.h>
00012 #include <qtextedit.h>
00013 #include <qcombobox.h>
00014 #include <qlabel.h>
00015 #include <qfileinfo.h>
00016 #include <qdir.h>
00017
00018 #include <kurl.h>
00019 #include <klocale.h>
00020 #include <kiconloader.h>
00021
00022 #include "generalinfowidget.h"
00023 #include "generalinfowidget.moc"
00024 #include "domutil.h"
00025 #include "projectmanager.h"
00026
00027 QString makeRelativePath(const QString& fromPath, const QString& toPath);
00028
00029 GeneralInfoWidget::GeneralInfoWidget(QDomDocument &projectDom, QWidget *parent, const char *name)
00030 : GeneralInfoWidgetBase(parent, name), m_projectDom(projectDom) {
00031
00032 connect(project_directory_edit, SIGNAL(textChanged(const QString&)),
00033 this, SLOT(slotProjectDirectoryChanged(const QString&)));
00034 connect(project_directory_combo, SIGNAL(activated(int)),
00035 this, SLOT(slotProjectDirectoryComboChanged()));
00036 readConfig();
00037 }
00038
00039
00040
00041 GeneralInfoWidget::~GeneralInfoWidget() {}
00042
00043 void GeneralInfoWidget::readConfig() {
00044 if(DomUtil::readBoolEntry(m_projectDom,"/general/absoluteprojectpath",false))
00045 this->project_directory_combo->setCurrentItem(0);
00046 else
00047 this->project_directory_combo->setCurrentItem(1);
00048 this->project_directory_edit->setText(DomUtil::readEntry(m_projectDom,"/general/projectdirectory","."));
00049 this->author_edit->setText(DomUtil::readEntry(m_projectDom,"/general/author"));
00050 this->email_edit->setText(DomUtil::readEntry(m_projectDom,"/general/email"));
00051 this->version_edit->setText(DomUtil::readEntry(m_projectDom,"/general/version"));
00052 this->description_edit->setText(DomUtil::readEntry(m_projectDom,"/general/description"));
00053 }
00054
00055 void GeneralInfoWidget::writeConfig() {
00056 DomUtil::writeEntry(m_projectDom,"/general/projectdirectory",project_directory_edit->text());
00057 DomUtil::writeBoolEntry(m_projectDom,"/general/absoluteprojectpath",isProjectDirectoryAbsolute());
00058 DomUtil::writeEntry(m_projectDom,"/general/email",email_edit->text());
00059 DomUtil::writeEntry(m_projectDom,"/general/author",author_edit->text());
00060 DomUtil::writeEntry(m_projectDom,"/general/email",email_edit->text());
00061 DomUtil::writeEntry(m_projectDom,"/general/version",version_edit->text());
00062 DomUtil::writeEntry(m_projectDom,"/general/description",description_edit->text());
00063 }
00064
00065 void GeneralInfoWidget::accept() {
00066 writeConfig();
00067 }
00068
00069 bool GeneralInfoWidget::isProjectDirectoryAbsolute() {
00070 return project_directory_combo->currentItem() == 0;
00071 }
00072
00073 QString GeneralInfoWidget::projectDirectory() {
00074 return ProjectManager::projectDirectory( project_directory_edit->text(), isProjectDirectoryAbsolute() );
00075 }
00076
00077 void GeneralInfoWidget::slotProjectDirectoryChanged( const QString& text ) {
00078 if(text.isEmpty())
00079 {
00080 setProjectDirectoryError(i18n("Please enter a path."));
00081 }
00082 else if(isProjectDirectoryAbsolute() && text[0] != '/')
00083 {
00084 setProjectDirectoryError(
00085 i18n("'%1' is not an absolute path.").arg(
00086 project_directory_edit->text()));
00087 }
00088 else if(!isProjectDirectoryAbsolute() && text[0] == '/')
00089 {
00090 setProjectDirectoryError(
00091 i18n("'%1' is not a relative path.").arg(
00092 project_directory_edit->text()));
00093 }
00094 else
00095 {
00096 QFileInfo info(projectDirectory());
00097 if(!info.exists())
00098 setProjectDirectoryError(
00099 i18n("'%1' does not exist.").arg(
00100 project_directory_edit->text()));
00101 else if(!info.isDir())
00102 setProjectDirectoryError(
00103 i18n("'%1' is not a directory.").arg(
00104 project_directory_edit->text()));
00105 else
00106 setProjectDirectorySuccess();
00107 }
00108 }
00109
00110 void GeneralInfoWidget::slotProjectDirectoryComboChanged() {
00111 QString text = project_directory_edit->text();
00112 if(isProjectDirectoryAbsolute() && text[0] != '/' )
00113 project_directory_edit->setText(ProjectManager::projectDirectory(text,false));
00114 else if(!isProjectDirectoryAbsolute() && text[0] == '/')
00115 {
00116 project_directory_edit->setText(KURL(ProjectManager::getInstance()->projectFile(), text).url());
00117 }
00118 }
00119
00120 void GeneralInfoWidget::setProjectDirectoryError( const QString& error ) {
00121 project_directory_diagnostic_icon->setPixmap(SmallIcon("no"));
00122 project_directory_diagnostic_label->setText( error );
00123 }
00124
00125 void GeneralInfoWidget::setProjectDirectorySuccess() {
00126 project_directory_diagnostic_icon->setPixmap(SmallIcon("ok"));
00127 if(isProjectDirectoryAbsolute())
00128 project_directory_diagnostic_label->setText(
00129 i18n("'%1' is a valid project directory.").arg(projectDirectory()));
00130 else
00131 project_directory_diagnostic_label->setText(
00132 i18n("'%1' is a valid project directory.").arg(projectDirectory()));
00133 }
00134
00135 QString makeRelativePath(const QString& fromPath, const QString& toPath)
00136 {
00137 if ( fromPath == toPath )
00138 return ".";
00139
00140 QStringList fromDirs = QStringList::split( '/', fromPath );
00141 QStringList toDirs = QStringList::split( '/', toPath );
00142 QStringList::iterator fromIt = fromDirs.begin();
00143 QStringList::iterator toIt = toDirs.begin();
00144
00145 QString relative;
00146
00147 for ( ; (*fromIt) == (*toIt); ++fromIt, ++toIt )
00148 ;
00149
00150 for ( ; fromIt != fromDirs.end(); ++fromIt )
00151 relative += "../";
00152
00153 for ( ; toIt != toDirs.end(); ++toIt )
00154 relative += *toIt + "/";
00155
00156 return relative;
00157 }
This file is part of the documentation for KDevelop Version 3.1.2.