addservicedlg.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "addservicedlg.h"
00013
00014 #include <qcombobox.h>
00015 #include <qfile.h>
00016 #include <qheader.h>
00017 #include <qlineedit.h>
00018 #include <qlistview.h>
00019 #include <qtextstream.h>
00020 #include <kdebug.h>
00021 #include <kicondialog.h>
00022 #include <kinputdialog.h>
00023 #include <klocale.h>
00024 #include <kmessagebox.h>
00025 #include <kservicetype.h>
00026
00027 #include "autolistviewitems.h"
00028
00029 #include "misc.h"
00030 #include "autoprojectwidget.h"
00031 #include "autoprojectpart.h"
00032
00033
00034 AddServiceDialog::AddServiceDialog(AutoProjectWidget *widget, SubprojectItem *spitem,
00035 QWidget *parent, const char *name)
00036 : AddServiceDialogBase(parent, name, true)
00037 {
00038 filename_edit->setText(".desktop");
00039 filename_edit->home(false);
00040 filename_edit->setFocus();
00041 chosentypes_listview->header()->hide();
00042 availtypes_listview->header()->hide();
00043
00044 m_widget = widget;
00045 subProject = spitem;
00046
00047
00048 QPtrListIterator<TargetItem> tit(spitem->targets);
00049 for (; tit.current(); ++tit) {
00050 if ((*tit)->primary == "LTLIBRARIES")
00051 library_combo->insertItem(QString((*tit)->name));
00052 }
00053
00054
00055 KServiceType::List l = KServiceType::allServiceTypes();
00056 KServiceType::List::Iterator it;
00057 for (it = l.begin(); it != l.end(); ++it)
00058 if (!(*it)->isType(KST_KMimeType))
00059 new QListViewItem(availtypes_listview, (*it)->name());
00060
00061 setIcon ( SmallIcon ( "servicenew_kdevelop.png" ) );
00062 }
00063
00064
00065 AddServiceDialog::~AddServiceDialog()
00066 {}
00067
00068
00069 void AddServiceDialog::updateProperties()
00070 {
00071 QStringList props;
00072
00073 QListViewItem *item = static_cast<QCheckListItem*>(chosentypes_listview->firstChild());
00074 while (item) {
00075 KServiceType::Ptr type = KServiceType::serviceType(item->text(0));
00076 if (type) {
00077 QStringList stprops = type->propertyDefNames();
00078 QStringList::ConstIterator stit;
00079 for (stit = stprops.begin(); stit != stprops.end(); ++stit)
00080 if (props.find(*stit) == props.end() && (*stit) != "Name" && (*stit) != "Comment"
00081 && (*stit) != "Icon")
00082 props.append(*stit);
00083 }
00084 item = item->nextSibling();
00085 }
00086
00087 properties_listview->clear();
00088 QStringList::ConstIterator it;
00089 for (it = props.begin(); it != props.end(); ++it)
00090 new QListViewItem(properties_listview, *it);
00091 }
00092
00093
00094 void AddServiceDialog::iconClicked()
00095 {
00096 KIconLoader *loader = AutoProjectFactory::instance()->iconLoader();
00097 KIconDialog dlg(loader, this);
00098 QString name = dlg.selectIcon(KIcon::Desktop);
00099 if (!name.isNull()) {
00100 iconName = name;
00101 icon_button->setPixmap(loader->loadIcon(name, KIcon::Desktop));
00102 }
00103 }
00104
00105
00106 void AddServiceDialog::addTypeClicked()
00107 {
00108 QListViewItem *selitem = availtypes_listview->selectedItem();
00109 if (!selitem)
00110 return;
00111
00112 QListViewItem *olditem = chosentypes_listview->firstChild();
00113 while (olditem) {
00114 if (selitem->text(0) == olditem->text(0))
00115 return;
00116 olditem = olditem->nextSibling();
00117 }
00118 new QListViewItem(chosentypes_listview, selitem->text(0));
00119
00120 updateProperties();
00121 }
00122
00123
00124 void AddServiceDialog::removeTypeClicked()
00125 {
00126 delete chosentypes_listview->currentItem();
00127
00128 updateProperties();
00129 }
00130
00131
00132 void AddServiceDialog::propertyExecuted(QListViewItem *item)
00133 {
00134 if (!item)
00135 return;
00136
00137 QString prop = item->text(0);
00138 QString value = item->text(1);
00139 bool ok;
00140 value = KInputDialog::getText(i18n("Enter Value"), i18n("Property %1:").arg(prop), value, &ok, this);
00141 if (!ok)
00142 return;
00143
00144 item->setText(1, value);
00145 }
00146
00147
00148 void AddServiceDialog::accept()
00149 {
00150
00151 QStringList serviceTypes;
00152 QListViewItem *item = chosentypes_listview->firstChild();
00153 while (item) {
00154 serviceTypes.append(item->text(0));
00155 item = item->nextSibling();
00156 }
00157
00158
00159 QString fileName = filename_edit->text();
00160 if (fileName.isEmpty() || fileName == ".desktop") {
00161 KMessageBox::sorry(this, i18n("You have to enter a file name."));
00162 filename_edit->setFocus();
00163 return;
00164 }
00165
00166 QString name = name_edit->text();
00167 if (name.isEmpty()) {
00168 KMessageBox::sorry(this, i18n("You have to enter a service name."));
00169 name_edit->setFocus();
00170 return;
00171 }
00172
00173 QFile f(subProject->path + "/" + fileName);
00174 if (f.exists()) {
00175 KMessageBox::sorry(this, i18n("A file with this name exists already."));
00176 filename_edit->setFocus();
00177 return;
00178 }
00179 if (!f.open(IO_WriteOnly)) {
00180 KMessageBox::sorry(this, i18n("Could not open file for writing."));
00181 return;
00182 }
00183
00184 QTextStream stream(&f);
00185 stream << "[Desktop Entry]" << endl;
00186 stream << "Type=Service" << endl;
00187 stream << "Name=" << name << endl;
00188 stream << "Comment=" << comment_edit->text() << endl;
00189 if (!iconName.isNull())
00190 stream << "Icon=" << iconName << endl;
00191 stream << "ServiceTypes=" << serviceTypes.join(",") << endl;
00192 item = properties_listview->firstChild();
00193 while (item) {
00194 stream << item->text(0) << "=" << item->text(1) << endl;
00195 item = item->nextSibling();
00196 }
00197 f.close();
00198
00199
00200
00201 QMap<QString,QString>::ConstIterator it;
00202 for (it = subProject->prefixes.begin(); it != subProject->prefixes.end(); ++it)
00203 if (it.data() == "$(kde_servicesdir)")
00204 break;
00205 QString prefix = (it == subProject->prefixes.end())? QString("kde_services") : it.key();
00206 QString varname = prefix + "_DATA";
00207
00208
00209
00210 TargetItem *titem = 0;
00211 for (uint i=0; i < subProject->targets.count(); ++i) {
00212 TargetItem *tmptitem = subProject->targets.at(i);
00213 if ("DATA" == tmptitem->primary && prefix == tmptitem->prefix) {
00214 titem = tmptitem;
00215 break;
00216 }
00217 }
00218 if (!titem) {
00219 titem = m_widget->createTargetItem("", prefix, "DATA", false);
00220 subProject->targets.append(titem);
00221 }
00222
00223 FileItem *fitem = m_widget->createFileItem(fileName, subProject);
00224 titem->sources.append(fitem);
00225
00226 subProject->variables[varname] += (" " + fileName);
00227 QMap<QString, QString> replaceMap;
00228 replaceMap.insert(varname, subProject->variables[varname]);
00229 AutoProjectTool::modifyMakefileam(subProject->path + "/Makefile.am", replaceMap);
00230
00231 QDialog::accept();
00232 }
00233
00234 #include "addservicedlg.moc"
This file is part of the documentation for KDevelop Version 3.1.2.