summaryrefslogtreecommitdiffstats
path: root/parts/distpart
diff options
context:
space:
mode:
Diffstat (limited to 'parts/distpart')
-rw-r--r--parts/distpart/Makefile.am16
-rw-r--r--parts/distpart/README3
-rw-r--r--parts/distpart/README.dox24
-rw-r--r--parts/distpart/distpart_part.cpp84
-rw-r--r--parts/distpart/distpart_part.h55
-rw-r--r--parts/distpart/distpart_ui.ui1243
-rw-r--r--parts/distpart/distpart_widget.cpp605
-rw-r--r--parts/distpart/distpart_widget.h210
-rw-r--r--parts/distpart/kdevdistpart.desktop70
-rw-r--r--parts/distpart/kdevpart_distpart.rc8
-rw-r--r--parts/distpart/lsmsupport.cpp32
-rw-r--r--parts/distpart/lsmsupport.h35
-rw-r--r--parts/distpart/packagebase.cpp117
-rw-r--r--parts/distpart/packagebase.h84
-rw-r--r--parts/distpart/specsupport.cpp315
-rw-r--r--parts/distpart/specsupport.h54
16 files changed, 2955 insertions, 0 deletions
diff --git a/parts/distpart/Makefile.am b/parts/distpart/Makefile.am
new file mode 100644
index 00000000..0a1d949f
--- /dev/null
+++ b/parts/distpart/Makefile.am
@@ -0,0 +1,16 @@
+INCLUDES = -I$(top_srcdir)/lib/interfaces \
+ -I$(top_srcdir)/lib/interfaces/extensions -I$(top_srcdir)/lib/util $(all_includes)
+
+kde_module_LTLIBRARIES = libkdevdistpart.la
+libkdevdistpart_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
+libkdevdistpart_la_LIBADD = $(top_builddir)/lib/libkdevelop.la
+
+libkdevdistpart_la_SOURCES = distpart_ui.ui distpart_part.cpp distpart_widget.cpp packagebase.cpp lsmsupport.cpp specsupport.cpp
+
+METASOURCES = AUTO
+KDEICON = AUTO
+servicedir = $(kde_servicesdir)
+service_DATA = kdevdistpart.desktop
+
+rc_DATA = kdevpart_distpart.rc
+rcdir = $(kde_datadir)/kdevdistpart
diff --git a/parts/distpart/README b/parts/distpart/README
new file mode 100644
index 00000000..731741e1
--- /dev/null
+++ b/parts/distpart/README
@@ -0,0 +1,3 @@
+Please read the on-line, automaticaly updated KDevelop API documentation at:
+http://www.kdevelop.org
+or read the README.dox file.
diff --git a/parts/distpart/README.dox b/parts/distpart/README.dox
new file mode 100644
index 00000000..994b4f84
--- /dev/null
+++ b/parts/distpart/README.dox
@@ -0,0 +1,24 @@
+/** \class DistpartPart
+This part aims to provide some help to the developpers for packaging
+and publishing their projects by ftp protocol.
+
+Only RPM package format is supported for now. More to come.
+If you want to develop a new package support, please have a look at
+specsupport.h and specsupport.cpp. Help is always welcome :-)
+
+\authors <a href="mailto:geiseri AT yahoo.com">Ian Reinart Geiser</a>
+
+\maintainer <a href="mailto:Yann.Hodique AT lifl.fr">Yann Hodique</a>
+
+\feature provide some help to the developpers for packaging and publishing their projects by ftp protocol
+\feature support RPM package format
+
+\bug Development package, documentation package, application icon and local
+options (in publishing tab) are currently ignored.
+
+\bug The creation of the source archive is just a
+call to "dist" or "dist-bzip2" target of the Makefile. If those
+targets don't exist, nothing is done to solve the problem (for
+example when the project is QMake-based)
+
+*/
diff --git a/parts/distpart/distpart_part.cpp b/parts/distpart/distpart_part.cpp
new file mode 100644
index 00000000..b719533d
--- /dev/null
+++ b/parts/distpart/distpart_part.cpp
@@ -0,0 +1,84 @@
+/***************************************************************************
+ * Copyright (C) 2004 by ian reinhart geiser *
+ * geiseri@kde.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#include "distpart_part.h"
+
+#include <qwhatsthis.h>
+
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kdevgenericfactory.h>
+#include <kdebug.h>
+
+#include "kdevcore.h"
+#include <kdevplugininfo.h>
+
+#include "distpart_widget.h"
+
+#include <kdialogbase.h>
+
+typedef KDevGenericFactory<DistpartPart> DistpartFactory;
+static const KDevPluginInfo data("kdevdistpart");
+K_EXPORT_COMPONENT_FACTORY( libkdevdistpart, DistpartFactory( data ) )
+
+DistpartPart::DistpartPart(QObject *parent, const char *name, const QStringList &)
+ : KDevPlugin(&data, parent, name ? name : "DistpartPart") {
+
+ kdDebug(9007) << "DistpartPart::DistpartPart()" << endl;
+ setInstance(DistpartFactory::instance());
+
+ setXMLFile("kdevpart_distpart.rc");
+
+ m_action = new KAction( i18n("Distribution && Publishing"), "package", 0,
+ this, SLOT(show()),
+ actionCollection(), "make_dist" );
+
+ m_action->setToolTip(i18n("Make source and binary distribution"));
+ m_action->setWhatsThis(i18n("<b>Project distribution & publishing</b><p>Helps users package and publish their software."));
+ //QWhatsThis::add(m_widget, i18n("This will help users package and publish their software."));
+
+ m_dlg = new KDialogBase( 0 , "dist_part", false, i18n("Distribution & Publishing"), KDialogBase::Ok|KDialogBase::Cancel);
+
+ m_dialog = new DistpartDialog(this, m_dlg );
+ m_dlg->setMainWidget(m_dialog);
+
+ connect( m_dlg, SIGNAL(okClicked()), m_dialog, SLOT(slotokayPushButtonPressed()));
+ connect( m_dlg, SIGNAL(cancelClicked()), m_dialog, SLOT(slotcancelPushButtonPressed()));
+ // Package types
+ //RpmPackage = new SpecSupport(this);
+ //LsmPackage = new LsmSupport(this);
+}
+
+
+DistpartPart::~DistpartPart() {
+ kdDebug(9007) << "DistpartPart::~DistpartPart()" << endl;
+ delete m_dialog;
+ //delete RpmPackage;
+ //delete LsmPackage;
+}
+
+void DistpartPart::show() {
+ m_dlg->exec();
+}
+
+void DistpartPart::hide() {
+ m_dlg->cancel();
+}
+
+#include "distpart_part.moc"
diff --git a/parts/distpart/distpart_part.h b/parts/distpart/distpart_part.h
new file mode 100644
index 00000000..c8caa0a3
--- /dev/null
+++ b/parts/distpart/distpart_part.h
@@ -0,0 +1,55 @@
+/***************************************************************************
+ * Copyright (C) 2004 by ian reinhart geiser *
+ * geiseri@kde.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+
+#ifndef __KDEVPART_DISTPART_H__
+#define __KDEVPART_DISTPART_H__
+
+
+#include <qguardedptr.h>
+#include <kdevplugin.h>
+#include <kaction.h>
+
+#include "packagebase.h"
+
+class DistpartDialog;
+class KDialogBase;
+
+class DistpartPart : public KDevPlugin {
+ Q_OBJECT
+
+public:
+
+ DistpartPart(QObject *parent, const char *name, const QStringList &);
+ ~DistpartPart();
+
+public slots:
+ void show();
+ void hide();
+
+private:
+ packageBase *RpmPackage, *LsmPackage;
+ QGuardedPtr<DistpartDialog> m_dialog;
+ KAction *m_action;
+ QGuardedPtr<KDialogBase> m_dlg;
+};
+
+
+#endif
diff --git a/parts/distpart/distpart_ui.ui b/parts/distpart/distpart_ui.ui
new file mode 100644
index 00000000..a987c009
--- /dev/null
+++ b/parts/distpart/distpart_ui.ui
@@ -0,0 +1,1243 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>distpart_ui</class>
+<author>Ian Reinhart Geiser &lt;geiseri@yahoo.com&gt;</author>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>packaging_dialog</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>606</width>
+ <height>649</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>Prepare for Release</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout30</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>titleLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>250</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>&lt;H2&gt;Project Packaging &amp; Publishing&lt;/H2&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>KDevelopGraphic</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>48</width>
+ <height>48</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>48</width>
+ <height>48</height>
+ </size>
+ </property>
+ <property name="pixmap">
+ <pixmap>"kdevelop"</pixmap>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>actions_box</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="tabPosition">
+ <enum>Top</enum>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Source &amp;Distribution</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListBox" row="1" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>srcDistFileListBox</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>customProjectCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Use custom options</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Default is: %n-%v.tar.gz</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0">
+ <property name="name">
+ <cstring>Layout19</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>sourceOptionsGroupBox</cstring>
+ </property>
+ <property name="title">
+ <string>Source Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>bzipCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Use &amp;bzip2 instead of gzip</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout34</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>archiveNameLabel</cstring>
+ </property>
+ <property name="text">
+ <string>&lt;b&gt;Archive name format: &lt;/b&gt;&lt;br&gt; %n - File name &lt;br&gt; %v - File version &lt;br&gt; %d - Date of archive</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>archNameFormatLineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>archNameFormatLineEdit</cstring>
+ </property>
+ <property name="text">
+ <string>%n-%v</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enter the filename using the format options. </string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer37</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>addFile</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Add Files</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>createSrcArchPushButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Create Source Archive</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>resetSrcPushButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>R&amp;eset</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>fileListLabel</cstring>
+ </property>
+ <property name="text">
+ <string>File &amp;list:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>srcDistFileListBox</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Package &amp;Information</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>licenseLineEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>vendorLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Ve&amp;ndor:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>vendorLineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>releaseLineEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>appNameLineEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Application name</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>vendorLineEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>appNameLabel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Application name:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>appNameLineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>summaryLabel</cstring>
+ </property>
+ <property name="text">
+ <string>S&amp;ummary:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>summaryLineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>licenseLabel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;License:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>licenseLineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>releaseLabel</cstring>
+ </property>
+ <property name="text">
+ <string>R&amp;elease:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>releaseLineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>versionLabel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Version:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>versionLineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>summaryLineEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="7" column="1">
+ <property name="name">
+ <cstring>packagerLineEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>versionLineEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Version of the file package.
+Menu item: Project/Project Options/General/Version
+changes project compiled version number</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>groupLabel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Group:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>groupLineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="7" column="0">
+ <property name="name">
+ <cstring>packagerLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Pac&amp;kager:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>packagerLineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="6" column="1">
+ <property name="name">
+ <cstring>groupLineEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>advancedOptionsGroupBox</cstring>
+ </property>
+ <property name="title">
+ <string>Advanced Package Op&amp;tions</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>devPackageCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Create development package</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>docsPackageCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Create documentation package</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>appIconCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Include application icon</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>archLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Architecture target:&lt;BR&gt;&lt;b&gt;(Note: You must have a compiler that supports this target)&lt;/b&gt;</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>i386</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>i586</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>i686</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>AMD K6</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>AMD K7</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>PPC</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>PPC G3</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>PPC Altevec</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Dec Alpha (AXP)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Sparc</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>archComboBox</cstring>
+ </property>
+ <property name="currentItem">
+ <number>0</number>
+ </property>
+ <property name="autoResize">
+ <bool>true</bool>
+ </property>
+ <property name="sizeLimit">
+ <number>10</number>
+ </property>
+ <property name="autoCompletion">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="1">
+ <property name="name">
+ <cstring>layout13</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>srcPackagePushButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Build Source
+Package</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buildAllPushButton</cstring>
+ </property>
+ <property name="text">
+ <string>Build Binar&amp;y
+Package</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>exportSPECPushButton</cstring>
+ </property>
+ <property name="text">
+ <string>E&amp;xport
+Build Files</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>importSPECPushButton</cstring>
+ </property>
+ <property name="text">
+ <string>I&amp;mport
+Build Files</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout14</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>projectDescriptionLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Description:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>projectDescriptionMultilineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KTextEdit">
+ <property name="name">
+ <cstring>projectDescriptionMultilineEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="resizePolicy">
+ <enum>Manual</enum>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>C&amp;hangelog:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>projectChangelogMultilineEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KTextEdit">
+ <property name="name">
+ <cstring>projectChangelogMultilineEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Pr&amp;oject Publishing</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>localOptionsGroupBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Local Options</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout15</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>genHTMLCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Ge&amp;nerate HTML information page</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>useRPMInfoCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;User information generated by RPM</string>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>Spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout21</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>genHTMLPushButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Generate</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>resetHTMLPushButton</cstring>
+ </property>
+ <property name="text">
+ <string>R&amp;eset</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>remoteOptionsGroupBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Re&amp;mote Options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListBox" row="1" column="1">
+ <property name="name">
+ <cstring>uploadFileListBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>250</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>Layout23</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>fileSubmissionLabel</cstring>
+ </property>
+ <property name="text">
+ <string>File su&amp;bmission list:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>uploadFileListBox</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer24</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Minimum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>uploadAddFileToolButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>+</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>uploadRemoveToolButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>-</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>Layout25</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>uploadCustomCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Upload to &amp;custom FTP site</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>uploadftpkdeorgCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Upload files to ftp.&amp;kde.org</string>
+ </property>
+ </widget>
+ <spacer row="4" column="0">
+ <property name="name">
+ <cstring>Spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton" row="7" column="0">
+ <property name="name">
+ <cstring>uploadSubmitPushButton</cstring>
+ </property>
+ <property name="text">
+ <string>Sub&amp;mit</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>uploadURLLineEdit</cstring>
+ </property>
+ <property name="text">
+ <string>ftp://username:password@ftp.server.com/path/</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="7" column="1">
+ <property name="name">
+ <cstring>uploadResetPushButton</cstring>
+ </property>
+ <property name="text">
+ <string>Reset</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>uploadAppsKDEcomCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Upload to &amp;apps.kde.com</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buildAllPushButton</sender>
+ <signal>clicked()</signal>
+ <receiver>packaging_dialog</receiver>
+ <slot>slotbuildAllPushButtonPressed()</slot>
+ </connection>
+ <connection>
+ <sender>exportSPECPushButton</sender>
+ <signal>clicked()</signal>
+ <receiver>packaging_dialog</receiver>
+ <slot>slotexportSPECPushButtonPressed()</slot>
+ </connection>
+ <connection>
+ <sender>srcPackagePushButton</sender>
+ <signal>clicked()</signal>
+ <receiver>packaging_dialog</receiver>
+ <slot>slotsrcPackagePushButtonPressed()</slot>
+ </connection>
+ <connection>
+ <sender>importSPECPushButton</sender>
+ <signal>clicked()</signal>
+ <receiver>packaging_dialog</receiver>
+ <slot>slotimportSPECPushButtonPressed()</slot>
+ </connection>
+ <connection>
+ <sender>addFile</sender>
+ <signal>clicked()</signal>
+ <receiver>packaging_dialog</receiver>
+ <slot>slotAddFileButtonPressed()</slot>
+ </connection>
+ <connection>
+ <sender>srcDistFileListBox</sender>
+ <signal>clicked(QListBoxItem*)</signal>
+ <receiver>packaging_dialog</receiver>
+ <slot>slotRemoveFile(QListBoxItem*)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>actions_box</tabstop>
+ <tabstop>customProjectCheckBox</tabstop>
+ <tabstop>bzipCheckBox</tabstop>
+ <tabstop>archNameFormatLineEdit</tabstop>
+ <tabstop>createSrcArchPushButton</tabstop>
+ <tabstop>resetSrcPushButton</tabstop>
+ <tabstop>srcDistFileListBox</tabstop>
+ <tabstop>appNameLineEdit</tabstop>
+ <tabstop>versionLineEdit</tabstop>
+ <tabstop>releaseLineEdit</tabstop>
+ <tabstop>vendorLineEdit</tabstop>
+ <tabstop>licenseLineEdit</tabstop>
+ <tabstop>summaryLineEdit</tabstop>
+ <tabstop>groupLineEdit</tabstop>
+ <tabstop>packagerLineEdit</tabstop>
+ <tabstop>projectDescriptionMultilineEdit</tabstop>
+ <tabstop>projectChangelogMultilineEdit</tabstop>
+ <tabstop>devPackageCheckBox</tabstop>
+ <tabstop>docsPackageCheckBox</tabstop>
+ <tabstop>appIconCheckBox</tabstop>
+ <tabstop>archComboBox</tabstop>
+ <tabstop>genHTMLCheckBox</tabstop>
+ <tabstop>useRPMInfoCheckBox</tabstop>
+ <tabstop>genHTMLPushButton</tabstop>
+ <tabstop>resetHTMLPushButton</tabstop>
+ <tabstop>uploadftpkdeorgCheckBox</tabstop>
+ <tabstop>uploadAppsKDEcomCheckBox</tabstop>
+ <tabstop>uploadCustomCheckBox</tabstop>
+ <tabstop>uploadURLLineEdit</tabstop>
+ <tabstop>uploadSubmitPushButton</tabstop>
+ <tabstop>uploadResetPushButton</tabstop>
+ <tabstop>uploadAddFileToolButton</tabstop>
+ <tabstop>uploadRemoveToolButton</tabstop>
+ <tabstop>uploadFileListBox</tabstop>
+</tabstops>
+<includes>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+ <include location="global" impldecl="in implementation">kiconloader.h</include>
+ <include location="global" impldecl="in implementation">kpushbutton.h</include>
+ <include location="global" impldecl="in implementation">klistbox.h</include>
+ <include location="global" impldecl="in implementation">klineedit.h</include>
+ <include location="global" impldecl="in implementation">ktextedit.h</include>
+</includes>
+<slots>
+ <slot>slotbuildAllPushButtonPressed()</slot>
+ <slot>slotexportSPECPushButtonPressed()</slot>
+ <slot>slotimportSPECPushButtonPressed()</slot>
+ <slot>slotsrcPackagePushButtonPressed()</slot>
+ <slot>slotAddFileButtonPressed()</slot>
+ <slot>slotRemoveFile(QListBoxItem *item)</slot>
+</slots>
+<pixmapfunction>DesktopIcon</pixmapfunction>
+<layoutdefaults spacing="6" margin="11"/>
+<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+<includehints>
+ <includehint>klistbox.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>ktextedit.h</includehint>
+ <includehint>ktextedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klistbox.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/parts/distpart/distpart_widget.cpp b/parts/distpart/distpart_widget.cpp
new file mode 100644
index 00000000..71c981e8
--- /dev/null
+++ b/parts/distpart/distpart_widget.cpp
@@ -0,0 +1,605 @@
+/***************************************************************************
+ * Copyright (C) 2004 by ian reinhart geiser *
+ * geiseri@kde.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#include "distpart_widget.h"
+
+#include <kparts/part.h>
+#include <klibloader.h>
+#include <kurl.h>
+#include <kdebug.h>
+#include <kprocess.h>
+#include <kfiledialog.h>
+#include <kio/netaccess.h>
+#include <klocale.h>
+#include "kdevproject.h"
+#include "domutil.h"
+#include <ktar.h>
+#include <kmessagebox.h>
+
+#include <kdevcore.h>
+#include <qgroupbox.h>
+#include <qlayout.h>
+#include <qnetwork.h>
+#include <qurloperator.h>
+#include <qmessagebox.h>
+#include "distpart_part.h"
+#include <qdir.h>
+#include <qfile.h>
+#include <qregexp.h>
+#include <qstringlist.h>
+#include <qtabwidget.h>
+#include "kdevmakefrontend.h"
+#include <kprogress.h>
+
+#include <qerrormessage.h>
+#include "specsupport.h"
+#include "lsmsupport.h"
+
+DistpartDialog::DistpartDialog(DistpartPart *part, QWidget *parent)
+ :distpart_ui(parent, "dist_widget"), m_part(part) {
+ m_spec = new SpecSupport(m_part);
+
+ connect( customProjectCheckBox, SIGNAL(toggled(bool) ),
+ this, SLOT(slotcustomProjectCheckBoxChanged()));
+ connect( uploadCustomCheckBox, SIGNAL(toggled(bool)),
+ this, SLOT(slotuploadCustomCheckBoxChanged()));
+
+// connect( okayPushButton, SIGNAL(clicked()),
+// this, SLOT(slotokayPushButtonPressed()));
+// connect( cancelPushButton, SIGNAL(clicked()),
+// this, SLOT(slotcancelPushButtonPressed()));
+/* connect(help_PushButton, SIGNAL(clicked()),
+ this, SLOT(slothelp_PushButtonPressed()));*/
+ connect( createSrcArchPushButton, SIGNAL(clicked()),
+ this, SLOT(slotcreateSrcArchPushButtonPressed()));
+ connect( resetSrcPushButton, SIGNAL(clicked()),
+ this, SLOT(slotresetSrcPushButtonPressed()));
+
+ connect( genHTMLPushButton, SIGNAL(clicked()),
+ this, SLOT(slotgenHTMLPushButtonPressed()));
+ connect( resetHTMLPushButton, SIGNAL(clicked()),
+ this, SLOT(slotresetHTMLPushButtonPressed()));
+ connect( uploadSubmitPushButton, SIGNAL(clicked()),
+ this, SLOT(slotuploadSubmitPushButtonPressed()));
+ connect( uploadResetPushButton, SIGNAL(clicked()),
+ this, SLOT(slotuploadResetPushButtonPressed()));
+ connect( uploadAddFileToolButton, SIGNAL(clicked()),
+ this, SLOT(slotuploadAddFileToolButtonPressed()));
+ connect( uploadRemoveToolButton, SIGNAL(clicked()),
+ this, SLOT(slotuploadRemoveToolButtonPressed()));
+ connect ( srcDistFileListBox, SIGNAL(clicked(QListBoxItem *item)), this, SLOT(slotRemoveFile(QListBoxItem *item)));
+// connect( buildAllPushButton, SIGNAL( clicked() ), this, SLOT( slotbuildAllPushButtonPressed() ));
+// connect( exportSPECPushButton, SIGNAL( clicked() ), this, SLOT( slotexportSPECPushButtonPressed( ) ) );
+// connect( srcPackagePushButton, SIGNAL( clicked() ), this, SLOT( slotsrcPackagePushButtonPressed() ) );
+// connect( importSPECPushButton, SIGNAL( clicked() ), this, SLOT( slotimportSPECPushButtonPressed() ) );
+ loadSettings();
+
+
+ localOptionsGroupBox->setEnabled(false);
+ devPackageCheckBox->setEnabled(false);
+ docsPackageCheckBox->setEnabled(false);
+ appIconCheckBox->setEnabled(false);
+ uploadftpkdeorgCheckBox->setEnabled(false);
+ uploadAppsKDEcomCheckBox->setEnabled(false);
+}
+
+
+DistpartDialog::~DistpartDialog() {
+}
+
+// QPushButton* okayPushButton;
+
+void DistpartDialog::slotokayPushButtonPressed() {
+ storeSettings();
+// accept();
+}
+// QPushButton* cancelPushButton;
+
+void DistpartDialog::slotcancelPushButtonPressed() {
+// reject();
+}
+// QPushButton* help_PushButton;
+
+/*void DistpartDialog::slothelp_PushButtonPressed() {
+ QMessageBox::about(this,i18n("Distpart Help"),i18n("In order to build a RPM package :\n\t1) Create a source archive\n\t2) Generate a SPEC File\n\t3) Build the package"));
+}*/
+
+// QPushButton* createSrcArchPushButton;
+void DistpartDialog::slotcreateSrcArchPushButtonPressed() {
+ kdDebug() << "Starting archive..." << endl;
+ QString dist = (getcustomProjectCheckBoxState() && getbzipCheckBoxState()) ? "application/x-bzip2" : "application/x-gzip";
+
+ QString filename = m_part->project()->projectDirectory() + "/" + getSourceName();
+
+ KTar tar(filename, dist);
+ if ( tar.open(IO_WriteOnly) )
+ {
+ //QStringList files = m_part->project()->distFiles();
+ KProgressDialog *prog = new KProgressDialog( 0, "dialog", i18n("Building Package"), "", true );
+ prog->show();
+ for( uint idx = 0; idx < srcDistFileListBox->numRows(); ++idx)
+ {
+ QString file = srcDistFileListBox->text(idx);
+ if ( !tar.addLocalFile( m_part->project()->projectDirectory() + "/" + file, getappNameFormatLineEditText() + "/" + file) )
+ {
+ kdDebug() << "Failed to write file " << file << endl;
+ }
+ else
+ {
+ prog->setLabel(i18n("Adding file: %1").arg( file) );
+ prog->progressBar()->setValue( (idx*100)/srcDistFileListBox->numRows() );
+ }
+ }
+ tar.close( );
+ prog->hide();
+ delete prog;
+ KMessageBox::information( this, i18n("Archive made at: %1").arg( filename ), i18n("Archive Done") );
+
+ }
+ else
+ {
+ kdDebug() << "Failed to open archive..." << endl;
+ }
+
+}
+
+// QPushButton* resetSrcPushButton;
+void DistpartDialog::slotresetSrcPushButtonPressed() {
+ srcDistFileListBox->clear();
+ loadSettings();
+}
+
+
+
+// QPushButton* genHTMLPushButton;
+void DistpartDialog::slotgenHTMLPushButtonPressed() {}
+
+// QPushButton* resetHTMLPushButton;
+void DistpartDialog::slotresetHTMLPushButtonPressed() {}
+
+// QToolButton* uploadAddFileToolButton;
+void DistpartDialog::slotuploadAddFileToolButtonPressed() {
+ uploadFileListBox->insertStringList(KFileDialog::getOpenFileNames());
+}
+
+// QToolButton* uploadRemoveToolButton;
+void DistpartDialog::slotuploadRemoveToolButtonPressed() {
+ for(unsigned int i=0; i< uploadFileListBox->count(); i++)
+ if ( uploadFileListBox->isSelected(i)) uploadFileListBox->removeItem(i);
+}
+
+// QPushButton* uploadSubmitPushButton;
+void DistpartDialog::slotuploadSubmitPushButtonPressed() {
+
+ if(getuploadftpkdeorgCheckBoxState() || getuploadAppsKDEcomCheckBoxState())
+ kdDebug() << "Implement ftp.kde.org & apps.kde.com ftp transfer" << endl;
+ else {
+ for(unsigned int i=0; i< uploadFileListBox->count(); i++)
+ KIO::NetAccess::copy(KURL::fromPathOrURL( uploadFileListBox->text(i) ),
+ KURL::fromPathOrURL( getuploadURLLineEditText() + uploadFileListBox->text(i).replace(QRegExp("[^/]*/"),"") ));
+ }
+}
+
+// QPushButton* uploadResetPushButton;
+void DistpartDialog::slotuploadResetPushButtonPressed() {
+ uploadFileListBox->clear();
+}
+
+// Connect Slots to the following widgets and add
+// accessors and mutators
+
+
+// QCheckBox* customProjectCheckBox;
+void DistpartDialog::slotcustomProjectCheckBoxChanged() {
+ kdDebug () << "New State" << customProjectCheckBox->isChecked() << endl;
+ sourceOptionsGroupBox->setEnabled( customProjectCheckBox->isChecked());
+}
+
+bool DistpartDialog::getcustomProjectCheckBoxState() {
+ return customProjectCheckBox->isChecked();
+}
+
+void DistpartDialog::setcustomProjectCheckBoxState(bool state) {
+ customProjectCheckBox->setChecked(state);
+}
+
+// QCheckBox* uploadCustomCheckBox;
+void DistpartDialog::slotuploadCustomCheckBoxChanged() {
+ uploadURLLineEdit->setEnabled( uploadCustomCheckBox->isChecked());
+}
+
+bool DistpartDialog::getuploadCustomCheckBoxState() {
+ return uploadCustomCheckBox->isChecked();
+}
+
+void DistpartDialog::setuploadCustomCheckBoxState(bool state) {
+ uploadCustomCheckBox->setChecked(state);
+}
+
+// Add accessors and mutators for the following
+
+// QCheckBox* bzipCheckBox;
+bool DistpartDialog::getbzipCheckBoxState() {
+ return bzipCheckBox->isChecked();
+}
+
+void DistpartDialog::setbzipCheckBoxState(bool state) {
+ bzipCheckBox->setChecked(state);
+}
+
+// QCheckBox* appIconCheckBox;
+bool DistpartDialog::getappIconCheckBoxState() {
+ return appIconCheckBox->isChecked();
+}
+
+void DistpartDialog::setappIconCheckBoxState(bool state) {
+ appIconCheckBox->setChecked(state);
+}
+
+// QCheckBox* genHTMLCheckBox;
+bool DistpartDialog::getgenHTMLCheckBoxState() {
+ return genHTMLCheckBox->isChecked();
+}
+
+void DistpartDialog::setgenHTMLCheckBoxState(bool state) {
+ genHTMLCheckBox->setChecked(state);
+}
+
+// QCheckBox* useRPMInfoCheckBox;
+bool DistpartDialog::getuseRPMInfoCheckBoxState() {
+ return useRPMInfoCheckBox->isChecked();
+}
+
+void DistpartDialog::setuseRPMInfoCheckBoxState(bool state) {
+ useRPMInfoCheckBox->setChecked(state);
+}
+
+// QCheckBox* uploadAppsKDEcomCheckBox;
+bool DistpartDialog::getuploadAppsKDEcomCheckBoxState() {
+ return uploadAppsKDEcomCheckBox->isChecked();
+}
+
+void DistpartDialog::setuploadAppsKDEcomCheckBoxState(bool state) {
+ uploadAppsKDEcomCheckBox->setChecked(state);
+}
+
+// QCheckBox* uploadftpkdeorgCheckBox;
+bool DistpartDialog::getuploadftpkdeorgCheckBoxState() {
+ return uploadftpkdeorgCheckBox->isChecked();
+}
+
+void DistpartDialog::setuploadftpkdeorgCheckBoxState(bool state) {
+ uploadftpkdeorgCheckBox->setChecked(state);
+}
+
+// QCheckBox* devPackageCheckBox;
+bool DistpartDialog::getdevPackageCheckBoxState() {
+ return devPackageCheckBox->isChecked();
+}
+
+void DistpartDialog::setdevPackageCheckBoxState(bool state) {
+ devPackageCheckBox->setChecked(state);
+}
+
+// QCheckBox* docsPackageCheckBox;
+bool DistpartDialog::getdocsPackageCheckBoxState() {
+ return docsPackageCheckBox->isChecked();
+}
+
+void DistpartDialog::setdocsPackageCheckBoxState(bool state) {
+ docsPackageCheckBox->setChecked(state);
+}
+
+// QLineEdit* archNameFormatLineEdit;
+QString DistpartDialog::getarchNameFormatLineEditText() {
+ return archNameFormatLineEdit->text();
+}
+
+void DistpartDialog::setarchNameFormatLineEditText(QString text) {
+ archNameFormatLineEdit->setText(text);
+}
+
+// QLineEdit* appNameLineEdit;
+QString DistpartDialog::getappNameFormatLineEditText() {
+ return appNameLineEdit->text();
+}
+
+void DistpartDialog::setappNameFormatLineEditText(QString text) {
+ appNameLineEdit->setText(text);
+}
+
+// QLineEdit* summaryLineEdit;
+QString DistpartDialog::getsummaryLineEditText() {
+ return summaryLineEdit->text();
+}
+
+void DistpartDialog::setsummaryLineEditText(QString text) {
+ summaryLineEdit->setText(text);
+}
+
+// QLineEdit* groupLineEdit;
+QString DistpartDialog::getgroupLineEditText() {
+ return groupLineEdit->text();
+}
+
+void DistpartDialog::setgroupLineEditText(QString text) {
+ groupLineEdit->setText(text);
+}
+
+// QLineEdit* releaseLineEdit;
+QString DistpartDialog::getreleaseLineEditText() {
+ return releaseLineEdit->text();
+}
+
+void DistpartDialog::setreleaseLineEditText(QString text) {
+ releaseLineEdit->setText(text);
+}
+
+// QLineEdit* VersionLineEdit;
+QString DistpartDialog::getversionLineEditText() {
+ return versionLineEdit->text();
+}
+
+void DistpartDialog::setversionLineEditText(QString text) {
+ versionLineEdit->setText( text );
+}
+
+// QLineEdit* VendorLineEdit;
+QString DistpartDialog::getvendorLineEditText() {
+ return vendorLineEdit->text();
+}
+
+void DistpartDialog::setvendorLineEditText(QString text) {
+ vendorLineEdit->setText(text);
+}
+
+// QLineEdit* LicenseLineEdit;
+QString DistpartDialog::getlicenseLineEditText() {
+ return licenseLineEdit->text();
+}
+
+void DistpartDialog::setlicenseLineEditText(QString text) {
+ licenseLineEdit->setText(text);
+}
+
+// QLineEdit* uploadURLLineEdit;
+QString DistpartDialog::getuploadURLLineEditText() {
+ return uploadURLLineEdit->text();
+}
+
+void DistpartDialog::setuploadURLLineEditText(QString text) {
+ uploadURLLineEdit->setText(text);
+}
+
+// QLineEdit* PackagerLineEdit;
+QString DistpartDialog::getpackagerLineEditText() {
+ return packagerLineEdit->text();
+}
+
+void DistpartDialog::setpackagerLineEditText(QString text) {
+ packagerLineEdit->setText(text);
+}
+
+// QComboBox* archComboBox;
+QString DistpartDialog::getarchComboBoxText() {
+ return archComboBox->currentText();
+}
+
+int DistpartDialog::getarchComboBoxItem() {
+ return archComboBox->currentItem();
+}
+
+void DistpartDialog::setarchComboBoxItem(int item) {
+ archComboBox->setCurrentItem( item );
+}
+
+// QListBox* uploadFileListBox;
+QString DistpartDialog::getuploadFileListBoxText() {
+ return uploadFileListBox->currentText();
+}
+
+int DistpartDialog::getuploadFileListBoxItem() {
+ return uploadFileListBox->currentItem();
+}
+
+void DistpartDialog::setuploadFileListBoxItem(int item) {
+ uploadFileListBox->setCurrentItem( item);
+}
+
+// QListBox* srcDistFileListBox;
+QString DistpartDialog::getsrcDistFileListBoxText() {
+ return srcDistFileListBox->currentText ();
+}
+
+int DistpartDialog::getsrcDistFileListBoxItem() {
+ return srcDistFileListBox->currentItem ();
+}
+
+void DistpartDialog::setsrcDistFileListBoxItem(int item) {
+ srcDistFileListBox->setCurrentItem( item );
+}
+
+// QMultiLineEdit* projectDescriptionMultilineEdit;
+QString DistpartDialog::getprojectDescriptionMultilineEditText() {
+ return projectDescriptionMultilineEdit->text();
+}
+
+void DistpartDialog::setprojectDescriptionMultilineEditText(QString text) {
+ projectDescriptionMultilineEdit->setText(text);
+}
+
+QString DistpartDialog::getprojectChangelogMultilineEditText() {
+ return projectChangelogMultilineEdit->text();
+}
+
+void DistpartDialog::setprojectChangelogMultilineEditText(QString text) {
+ projectChangelogMultilineEdit->setText(text);
+}
+
+QString DistpartDialog::getSourceName() {
+ QString name = (getcustomProjectCheckBoxState()) ? getarchNameFormatLineEditText() : QString("%n-%v");
+ name += (getcustomProjectCheckBoxState() && getbzipCheckBoxState()) ? ".tar.bz2" : ".tar.gz";
+ return name.replace(QRegExp("%n"),getappNameFormatLineEditText())
+ .replace(QRegExp("%v"),getversionLineEditText())
+ .replace(QRegExp("%d"),QDate::currentDate().toString("yyyyMMdd"));
+}
+
+void DistpartDialog::loadSettings() {
+ QDomDocument &dom = *m_part->projectDom();
+
+ srcDistFileListBox->insertStringList( m_part->project()->distFiles() );
+
+ // First Tab
+ setcustomProjectCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/custom",false));
+ slotcustomProjectCheckBoxChanged();
+ setbzipCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/bzip",false));
+ setarchNameFormatLineEditText(DomUtil::readEntry(dom,"/dist/archname"));
+
+
+ // Second Tab
+ setappNameFormatLineEditText(DomUtil::readEntry(dom,"/dist/appname", m_part->project()->projectName() ));
+ setversionLineEditText(DomUtil::readEntry(dom,"/dist/version",DomUtil::readEntry(dom,"/general/version")));
+ setreleaseLineEditText(DomUtil::readEntry(dom,"/dist/release"));
+ setvendorLineEditText(DomUtil::readEntry(dom,"/dist/vendor"));
+ setlicenseLineEditText(DomUtil::readEntry(dom,"/dist/licence"));
+ setsummaryLineEditText(DomUtil::readEntry(dom,"/dist/summary"));
+ setgroupLineEditText(DomUtil::readEntry(dom,"/dist/group"));
+ setpackagerLineEditText(DomUtil::readEntry(dom,"/dist/packager"));
+ setprojectDescriptionMultilineEditText(DomUtil::readEntry(dom,"/dist/description",DomUtil::readEntry(dom,"/general/description")));
+ setprojectChangelogMultilineEditText(DomUtil::readEntry(dom,"/dist/changelog"));
+ setdevPackageCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/devpackage"));
+ setdocsPackageCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/docspackage"));
+ setappIconCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/appicon"));
+ setarchComboBoxItem(DomUtil::readIntEntry(dom,"/dist/arch"));
+
+ // Third Tab
+ setgenHTMLCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/genHTML"));
+ setuseRPMInfoCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/useRPM"));
+ setuploadftpkdeorgCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/ftpkde"));
+ setuploadAppsKDEcomCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/appskde"));
+ setuploadCustomCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/custom"));
+ slotuploadCustomCheckBoxChanged();
+ setuploadURLLineEditText(DomUtil::readEntry(dom,"/dist/url"));
+}
+
+void DistpartDialog::storeSettings() {
+ QDomDocument &dom = *m_part->projectDom();
+
+ // First Tab
+ DomUtil::writeBoolEntry(dom,"/dist/custom",getcustomProjectCheckBoxState());
+ DomUtil::writeBoolEntry(dom,"/dist/bzip",getbzipCheckBoxState());
+ DomUtil::writeEntry(dom,"/dist/archname",getarchNameFormatLineEditText());
+
+ // Second Tab
+ DomUtil::writeEntry(dom,"/dist/appname",getappNameFormatLineEditText());
+ DomUtil::writeEntry(dom,"/dist/version",getversionLineEditText());
+ DomUtil::writeEntry(dom,"/dist/release",getreleaseLineEditText());
+ DomUtil::writeEntry(dom,"/dist/vendor",getvendorLineEditText());
+ DomUtil::writeEntry(dom,"/dist/licence",getlicenseLineEditText());
+ DomUtil::writeEntry(dom,"/dist/summary",getsummaryLineEditText());
+ DomUtil::writeEntry(dom,"/dist/group",getgroupLineEditText());
+ DomUtil::writeEntry(dom,"/dist/packager",getpackagerLineEditText());
+ DomUtil::writeEntry(dom,"/dist/description",getprojectDescriptionMultilineEditText());
+ DomUtil::writeEntry(dom,"/dist/changelog",getprojectChangelogMultilineEditText());
+ DomUtil::writeBoolEntry(dom,"/dist/devpackage",getdevPackageCheckBoxState());
+ DomUtil::writeBoolEntry(dom,"/dist/docspackage",getdocsPackageCheckBoxState());
+ DomUtil::writeBoolEntry(dom,"/dist/appicon",getappIconCheckBoxState());
+ DomUtil::writeIntEntry(dom,"/dist/arch",getarchComboBoxItem());
+
+ // Third Tab
+ DomUtil::writeBoolEntry(dom,"/dist/genHTML",getgenHTMLCheckBoxState());
+ DomUtil::writeBoolEntry(dom,"/dist/useRPM",getuseRPMInfoCheckBoxState());
+ DomUtil::writeBoolEntry(dom,"/dist/ftpkde",getuploadftpkdeorgCheckBoxState());
+ DomUtil::writeBoolEntry(dom,"/dist/appskde",getuploadAppsKDEcomCheckBoxState());
+ DomUtil::writeBoolEntry(dom,"/dist/custom",getuploadCustomCheckBoxState());
+ DomUtil::writeEntry(dom,"/dist/url",getuploadURLLineEditText());
+}
+// Populate Spec Data from UI;
+void DistpartDialog::setPackageData()
+{
+ m_spec->setAppRevision( releaseLineEdit->text());
+ m_spec->setAppName( appNameLineEdit->text());
+ m_spec->setAppVendor( vendorLineEdit->text());
+ m_spec->setAppLicense( licenseLineEdit->text());
+ m_spec->setAppSummary( summaryLineEdit->text());
+ m_spec->setAppPackager( packagerLineEdit->text());
+ m_spec->setAppVersion( versionLineEdit->text());
+ m_spec->setAppGroup( groupLineEdit->text());
+ m_spec->setAppDescription( projectDescriptionMultilineEdit->text());
+ m_spec->setAppChangelog( projectChangelogMultilineEdit->text());
+}
+// Populate UI from Spec data;
+void DistpartDialog::getPackageData()
+{
+ releaseLineEdit->setText(m_spec->getAppRevision());
+ appNameLineEdit->setText(m_spec->getAppName());
+ vendorLineEdit->setText(m_spec->getAppVendor());
+ licenseLineEdit->setText(m_spec->getAppLicense( ));
+ summaryLineEdit->setText(m_spec->getAppSummary( ));
+ packagerLineEdit->setText(m_spec->getAppPackager( ));
+ versionLineEdit->setText(m_spec->getAppVersion());
+ groupLineEdit->setText(m_spec->getAppGroup( ));
+ projectDescriptionMultilineEdit->setText(m_spec->getAppDescription( ));
+ projectChangelogMultilineEdit->setText(m_spec->getAppChangelog( ));
+}
+void DistpartDialog::slotbuildAllPushButtonPressed( )
+{
+ setPackageData();
+ m_spec->slotbuildAllPushButtonPressed();
+}
+
+void DistpartDialog::slotexportSPECPushButtonPressed( )
+{
+ setPackageData();
+ m_spec->slotexportSPECPushButtonPressed();
+}
+
+void DistpartDialog::slotimportSPECPushButtonPressed( )
+{
+ m_spec->slotimportSPECPushButtonPressed();
+ getPackageData();
+}
+
+void DistpartDialog::slotsrcPackagePushButtonPressed( )
+{
+ setPackageData();
+ m_spec->slotsrcPackagePushButtonPressed();
+}
+
+
+void DistpartDialog::slotAddFileButtonPressed(){
+ QStringList filenames = KFileDialog::getOpenFileNames();
+ for(uint count =0; count< filenames.size(); count++){
+ QString base = m_part->project()->projectDirectory() +"/";
+ srcDistFileListBox->insertItem(filenames[count].remove(base));
+ }
+}
+
+void DistpartDialog::slotRemoveFile(QListBoxItem *item){
+ if ( KMessageBox::Yes == KMessageBox::warningYesNo( this, i18n("Remove %1").arg( item->text() ), i18n("Remove File") )){
+ for(uint count =0; count< srcDistFileListBox->numRows(); count++){
+ if ( item == srcDistFileListBox->item(count)){
+ srcDistFileListBox->removeItem(count);
+ break;
+ }
+ }
+ }
+}
+
+#include "distpart_widget.moc"
diff --git a/parts/distpart/distpart_widget.h b/parts/distpart/distpart_widget.h
new file mode 100644
index 00000000..81d91700
--- /dev/null
+++ b/parts/distpart/distpart_widget.h
@@ -0,0 +1,210 @@
+/***************************************************************************
+ * Copyright (C) 2004 by ian reinhart geiser *
+ * geiseri@kde.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#ifndef __DISTPART_WIDGET_H__
+#define __DISTPART_WIDGET_H__
+
+
+#include <qwidget.h>
+#include <qstring.h>
+#include "distpart_ui.h"
+#include <klistbox.h>
+#include <qcheckbox.h>
+#include <kpushbutton.h>
+#include <klineedit.h>
+#include <ktextedit.h>
+#include <qcombobox.h>
+#include <qprogressbar.h>
+
+class KDevProject;
+class DistpartPart;
+class QUrlOperator;
+class KProcess;
+class QTabWidget;
+class SpecSupport;
+
+namespace KParts {
+class ReadOnlyPart;
+}
+
+
+class DistpartDialog : public distpart_ui {
+ Q_OBJECT
+
+public:
+
+ DistpartDialog(DistpartPart *part, QWidget *parent);
+ ~DistpartDialog();
+
+signals:
+ void okay();
+ void cancel();
+ void help();
+ void createsrc();
+ void resetsrc();
+ void buildall();
+ void savespec();
+ void loadspec();
+ void srcrpm();
+ void genhtml();
+ void resethtml();
+ void upload();
+ void resetupload();
+
+ // Accessors and mutators to control GUI
+ // Connect Slots to the following widgets
+
+
+public slots:
+ // QPushButton* okayPushButton;
+
+
+ void slotokayPushButtonPressed();
+ // QPushButton* cancelPushButton;
+ void slotcancelPushButtonPressed();
+ // QPushButton* help_PushButton;
+// void slothelp_PushButtonPressed();
+ // QPushButton* createSrcArchPushButton;
+ void slotcreateSrcArchPushButtonPressed();
+ // QPushButton* resetSrcPushButton;
+ void slotresetSrcPushButtonPressed();
+
+ // QPushButton* genHTMLPushButton;
+ void slotgenHTMLPushButtonPressed();
+ // QPushButton* resetHTMLPushButton;
+ void slotresetHTMLPushButtonPressed();
+ // QToolButton* uploadAddFileToolButton;
+ void slotuploadAddFileToolButtonPressed();
+ // QToolButton* uploadRemoveToolButton;
+ void slotuploadRemoveToolButtonPressed();
+ // QPushButton* uploadSubmitPushButton;
+ void slotuploadSubmitPushButtonPressed();
+ // QPushButton* uploadResetPushButton;
+ void slotuploadResetPushButtonPressed();
+
+ // Connect Slots to the following widgets and add
+ // accessors and mutators
+ // QCheckBox* customProjectCheckBox;
+ void slotcustomProjectCheckBoxChanged();
+ // QCheckBox* uploadCustomCheckBox;
+ void slotuploadCustomCheckBoxChanged();
+
+ void slotbuildAllPushButtonPressed();
+ void slotexportSPECPushButtonPressed();
+ void slotimportSPECPushButtonPressed();
+ void slotsrcPackagePushButtonPressed();
+ void slotAddFileButtonPressed();
+ void slotRemoveFile(QListBoxItem *item);
+
+public:
+ bool getcustomProjectCheckBoxState();
+ void setcustomProjectCheckBoxState(bool state);
+ bool getuploadCustomCheckBoxState();
+ void setuploadCustomCheckBoxState(bool state);
+
+ // Add accessors and mutators for the following
+
+ // QCheckBox* bzipCheckBox;
+ bool getbzipCheckBoxState();
+ void setbzipCheckBoxState(bool state);
+ // QCheckBox* appIconCheckBox;
+ bool getappIconCheckBoxState();
+ void setappIconCheckBoxState(bool state);
+ // QCheckBox* genHTMLCheckBox;
+ bool getgenHTMLCheckBoxState();
+ void setgenHTMLCheckBoxState(bool state);
+ // QCheckBox* useRPMInfoCheckBox;
+ bool getuseRPMInfoCheckBoxState();
+ void setuseRPMInfoCheckBoxState(bool state);
+ // QCheckBox* uploadAppsKDEcomCheckBox;
+ bool getuploadAppsKDEcomCheckBoxState();
+ void setuploadAppsKDEcomCheckBoxState(bool state);
+ // QCheckBox* uploadftpkdeorgCheckBox;
+ bool getuploadftpkdeorgCheckBoxState();
+ void setuploadftpkdeorgCheckBoxState(bool state);
+ // QCheckBox* devPackageCheckBox;
+ bool getdevPackageCheckBoxState();
+ void setdevPackageCheckBoxState(bool state);
+ // QCheckBox* docsPackageCheckBox;
+ bool getdocsPackageCheckBoxState();
+ void setdocsPackageCheckBoxState(bool state);
+ // QLineEdit* archNameFormatLineEdit;
+ QString getarchNameFormatLineEditText();
+ void setarchNameFormatLineEditText(QString text);
+ // QLineEdit* appNameLineEdit;
+ QString getappNameFormatLineEditText();
+ void setappNameFormatLineEditText(QString text);
+ // QLineEdit* summaryLineEdit;
+ QString getsummaryLineEditText();
+ void setsummaryLineEditText(QString text);
+ // QLineEdit* groupLineEdit;
+ QString getgroupLineEditText();
+ void setgroupLineEditText(QString text);
+ // QLineEdit* releaseLineEdit;
+ QString getreleaseLineEditText();
+ void setreleaseLineEditText(QString text);
+ // QLineEdit* VersionLineEdit;
+ QString getversionLineEditText();
+ void setversionLineEditText(QString text);
+ // QLineEdit* VendorLineEdit;
+ QString getvendorLineEditText();
+ void setvendorLineEditText(QString text);
+ // QLineEdit* LicenseLineEdit;
+ QString getlicenseLineEditText();
+ void setlicenseLineEditText(QString text);
+ // QLineEdit* uploadURLLineEdit;
+ QString getuploadURLLineEditText();
+ void setuploadURLLineEditText(QString text);
+ // QLineEdit* PackagerLineEdit;
+ QString getpackagerLineEditText();
+ void setpackagerLineEditText(QString text);
+ // QComboBox* archComboBox;
+ QString getarchComboBoxText();
+ int getarchComboBoxItem();
+ void setarchComboBoxItem(int item);
+ // QListBox* uploadFileListBox;
+ QString getuploadFileListBoxText();
+ int getuploadFileListBoxItem();
+ void setuploadFileListBoxItem(int item);
+ // QListBox* srcDistFileListBox;
+ QString getsrcDistFileListBoxText();
+ int getsrcDistFileListBoxItem();
+ void setsrcDistFileListBoxItem(int item);
+ // QMultiLineEdit* projectDescriptionMultilineEdit;
+ QString getprojectDescriptionMultilineEditText();
+ void setprojectDescriptionMultilineEditText(QString text);
+
+ QString getprojectChangelogMultilineEditText();
+ void setprojectChangelogMultilineEditText(QString text);
+
+ QString getSourceName();
+
+private:
+ void loadSettings();
+ void storeSettings();
+ void setPackageData();
+ void getPackageData();
+
+ SpecSupport *m_spec;
+ DistpartPart *m_part;
+ QString dir;
+};
+
+
+#endif
diff --git a/parts/distpart/kdevdistpart.desktop b/parts/distpart/kdevdistpart.desktop
new file mode 100644
index 00000000..8eaf44ee
--- /dev/null
+++ b/parts/distpart/kdevdistpart.desktop
@@ -0,0 +1,70 @@
+[Desktop Entry]
+Type=Service
+Exec=blubb
+Comment=Aids in building and publishing the final project. Supports creation of RPM packages or source packages.
+Comment[ca]=Ajuda en la construcció i publicació del projecte final. Suporta la creació de paquets RPM o paquets font.
+Comment[da]=Hjælper til med at bygge og publicere det færdige projekt. Understøtter at oprette RPM-pakker og kildekodepakker.
+Comment[de]=Unterstützt beim Erstellen und Ausliefern des fertigen Projekts. Derzeit werden RPM- und Quell-Pakete unterstützt.
+Comment[el]=Βοηθά στην κατασκευή και δημοσίευση του τελικού έργου. Για την ώρα υποστηρίζεται μόνο η μορφή RPM.
+Comment[es]=Ayuda en la construcción y publicación del proyecto final. Contempla la creación de paquetes RPM y de código fuente.
+Comment[et]=Abi valmisprojekti ehitamisel ja avaldamisel. Toetatud on RPM-pakettide ja lähtekoodipakettide loomine.
+Comment[fr]=Outil d'aide à la construction et à la publication du projet final. Prend en charge la création de paquetages RPM ou de paquetages de sources.
+Comment[hu]=A projekt felépítésében és publikálásában segít. RPM és forráscsomagok készítését teszi lehetővé.
+Comment[it]=Aiuta nella compilazione e pubblicazione del progetto finale. Supporta la creazione di pacchetti RPM o di pacchetti sorgenti.
+Comment[ms]=Membantu dalam membina dan menerbitkan projek akhir. Menyokong penciptaan pakej RPM atau pakej sumber.
+Comment[nds]=Ünnerstütten för't Opstellen un Apenmaken vun't fardige Projekt. Ünnerstütt dat Opstellen vun RPMs un Bornpaketen.
+Comment[nl]=Helpt bij het bouwen en publiceren van het uiteindelijke project. Ondersteunt het aanmaken van RPM-pakketten of broncodepakketten.
+Comment[pl]=Pomoc w budowaniu i publikowaniu projektu. Obsługuje tworzenie pakietów RPM i paczek ze źródłami.
+Comment[pt]=Ajuda na construção e publicação do projecto final. Suporta a criação de pacotes RPM ou pacotes com código-fonte.
+Comment[pt_BR]=Auxilia na compilação e publicação do projeto final. Suporta a criação de pacotes RPM ou pacotes fontes.
+Comment[ru]=Помощник по сборке и распространению окончательных версий проекта. Поддерживает создание пакетов RPM или пакетов с исходным кодом.
+Comment[sk]=Pomáha pri vytváraní a publikovaní finálneho projektu. Podporované sú RPM a zdrojové balíčky.
+Comment[sr]=Помаже у грађењу и објављивању коначног пројекта. За сада је подржано стварање RPM и изворних пакета.
+Comment[sr@Latn]=Pomaže u građenju i objavljivanju konačnog projekta. Za sada je podržano stvaranje RPM i izvornih paketa.
+Comment[sv]=Hjälper till att bygga och publicera det färdiga projektet. Stöder att skapa RPM-paket och källkodspaket.
+Comment[zh_TW]=協助建立與發布最終專案版本。支援建立 RPM 套件與 RPM 源碼套件。
+Name=KDevdistpart
+Name[da]=KDevelop distpart
+Name[de]=Unterstützung für Paketerstellung (KDevelop)
+Name[hi]=के-डेव-डिस्टपार्ट
+Name[nds]=Paketopstell-Ünnerstütten för't KDevelop
+Name[sk]=KDev distribúcia
+Name[sv]=KDevelop distributionsdel
+Name[zh_TW]=KDevelop 發布元件
+GenericName=Final Packaging Support
+GenericName[ca]=Suport per a l'empaquetat final
+GenericName[da]=Endelig pakkestøtte
+GenericName[de]=Unterstützung für Paketerstellung
+GenericName[el]=Υποστήριξη τελικού πακέτου
+GenericName[es]=Soporte para empaquetado final
+GenericName[et]=Lõpp-pakendamise toetus
+GenericName[eu]=Azken paketatze euskarria
+GenericName[fa]=پشتیبانی بسته‌بندی نهایی
+GenericName[fr]=Gestion du conditionnement final
+GenericName[gl]=Soporte para empaquetado final
+GenericName[hu]=Csomagelőkészítő
+GenericName[it]=Supporto finale per la creazione di pacchetti
+GenericName[ja]=最終パッケージ化サポート
+GenericName[nds]=Ünnerstütten för't Paketopstellen
+GenericName[ne]=अन्तिम प्याकेजिङ समर्थन
+GenericName[nl]=Ondersteuning voor projectpublicatie
+GenericName[pl]=Obsługa ostatecznego pakowania
+GenericName[pt]=Suporte a Empacotamento Final
+GenericName[pt_BR]=Suporte ao Empacotamento Final
+GenericName[ru]=Сборка и распространение пакетов
+GenericName[sk]=Podpora finálneho balíčkovania
+GenericName[sl]=Podpora končnemu ustarjanju paketov
+GenericName[sr]=Подршка за коначно паковање
+GenericName[sr@Latn]=Podrška za konačno pakovanje
+GenericName[sv]=Stöd för slutpaketering
+GenericName[ta]=ஆதரவுள்ள கடைசி தொகுப்பு
+GenericName[tg]=Ҷамъкунӣ ва ҷорӣ намудани пакетҳо
+GenericName[tr]=Son Paketleme Desteği
+GenericName[zh_CN]=最终打包支持
+GenericName[zh_TW]=最終包裝支援
+Icon=kdevelop
+ServiceTypes=KDevelop/Plugin
+X-KDE-Library=libkdevdistpart
+X-KDevelop-Version=5
+X-KDevelop-Scope=Project
+X-KDevelop-Properties=ProjectPackaging
diff --git a/parts/distpart/kdevpart_distpart.rc b/parts/distpart/kdevpart_distpart.rc
new file mode 100644
index 00000000..8b142d04
--- /dev/null
+++ b/parts/distpart/kdevpart_distpart.rc
@@ -0,0 +1,8 @@
+<!DOCTYPE kpartgui>
+<kpartplugin name="distpart" library="libdistpartplugin" version="2">
+<MenuBar>
+ <Menu name="project"><Text>&amp;Project</Text>
+ <Action name="make_dist" group="tools_project_operations"/>
+ </Menu>
+</MenuBar>
+</kpartplugin>
diff --git a/parts/distpart/lsmsupport.cpp b/parts/distpart/lsmsupport.cpp
new file mode 100644
index 00000000..84414f6a
--- /dev/null
+++ b/parts/distpart/lsmsupport.cpp
@@ -0,0 +1,32 @@
+/***************************************************************************
+ * Copyright (C) 2004 by ian reinhart geiser *
+ * geiseri@kde.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#include "lsmsupport.h"
+
+LsmSupport::LsmSupport() : packageBase() {
+
+}
+
+LsmSupport::~LsmSupport() {
+}
+
+QString LsmSupport::generatePackage( )
+{
+ return "";
+}
diff --git a/parts/distpart/lsmsupport.h b/parts/distpart/lsmsupport.h
new file mode 100644
index 00000000..3f50c7ea
--- /dev/null
+++ b/parts/distpart/lsmsupport.h
@@ -0,0 +1,35 @@
+/***************************************************************************
+ * Copyright (C) 2004 by ian reinhart geiser *
+ * geiseri@kde.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#ifndef __LSMSUPPORT_H__
+#define __LSMSUPPORT_H__
+
+#include "packagebase.h"
+#include "distpart_part.h"
+
+class LsmSupport : public packageBase
+{
+
+public:
+ LsmSupport();
+ virtual ~LsmSupport();
+QString generatePackage( );
+};
+
+#endif
diff --git a/parts/distpart/packagebase.cpp b/parts/distpart/packagebase.cpp
new file mode 100644
index 00000000..797c2613
--- /dev/null
+++ b/parts/distpart/packagebase.cpp
@@ -0,0 +1,117 @@
+#include "packagebase.h"
+
+packageBase::packageBase() {
+
+}
+
+packageBase::~packageBase() {}
+
+QString packageBase::getAppName() {
+ return AppName;
+}
+
+QString packageBase::getAppVersion() {
+ return AppVersion;
+}
+
+QString packageBase::getAppRevision() {
+ return AppRevision;
+}
+
+QString packageBase::getAppGroup() {
+ return AppGroup;
+}
+
+QString packageBase::getAppPackager() {
+ return AppPackager;
+}
+
+QString packageBase::getAppURL() {
+ return AppURL;
+}
+
+QString packageBase::getAppSummary() {
+ return AppSummary;
+}
+
+QString packageBase::getAppVendor() {
+ return AppVendor;
+}
+
+QString packageBase::getAppLicense() {
+ return AppLicense;
+}
+
+QString packageBase::getAppArch() {
+ return AppArch;
+}
+
+QString packageBase::getAppDescription() {
+ return AppDescription;
+}
+
+QString packageBase::getAppChangelog() {
+ return AppChangelog;
+}
+
+QString packageBase::getAppSource() {
+ return AppSource;
+}
+
+QStringList packageBase::getAppFileList() {
+ return AppFileList;
+}
+
+void packageBase::setAppName(const QString& name) {
+ AppName = name;
+}
+
+void packageBase::setAppVersion(const QString& version){
+ AppVersion = version;
+}
+
+void packageBase::setAppRevision(const QString& revision){
+ AppRevision = revision;
+}
+
+void packageBase::setAppGroup(const QString& group){
+ AppGroup = group;
+}
+
+void packageBase::setAppPackager(const QString& packager){
+ AppPackager = packager;
+}
+
+void packageBase::setAppURL(const QString& url)
+{
+ AppURL = url;
+}
+
+void packageBase::setAppSummary(const QString& summary){
+ AppSummary = summary;
+}
+
+void packageBase::setAppVendor(const QString& vendor){
+ AppVendor = vendor;
+}
+
+void packageBase::setAppLicense(const QString& licence){
+ AppLicense = licence;
+}
+
+void packageBase::setAppArch(const QString& arch){
+ AppArch = arch;
+}
+
+void packageBase::setAppDescription(const QString& description){
+ AppDescription = description;
+}
+
+void packageBase::setAppChangelog(const QString& changelog){
+ AppChangelog = changelog;
+}
+
+void packageBase::setAppFileList( const QStringList & list )
+{
+ AppFileList = list;
+}
diff --git a/parts/distpart/packagebase.h b/parts/distpart/packagebase.h
new file mode 100644
index 00000000..17148982
--- /dev/null
+++ b/parts/distpart/packagebase.h
@@ -0,0 +1,84 @@
+/***************************************************************************
+ * Copyright (C) 2004 by ian reinhart geiser *
+ * geiseri@kde.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#ifndef __PACKAGEBASE_H__
+#define __PACKAGEBASE_H__
+
+#include <kurl.h>
+#include <qstringlist.h>
+
+class packageBase
+{
+
+public:
+ packageBase();
+ virtual ~packageBase();
+
+// Generic accessors and mutators for child classes
+ virtual QString generatePackage( ) = 0 ;
+ //virtual bool loadFile(KURL theFile) = 0;
+ //virtual bool saveFile(KURL theFile) = 0;
+
+ virtual QString getAppName();
+ virtual QString getAppVersion();
+ virtual QString getAppRevision();
+ virtual QString getAppGroup();
+ virtual QString getAppPackager();
+ virtual QString getAppURL();
+ virtual QString getAppSummary();
+ virtual QString getAppVendor();
+ virtual QString getAppLicense();
+ virtual QString getAppArch();
+ virtual QString getAppDescription();
+ virtual QString getAppChangelog();
+ virtual QString getAppSource();
+ virtual QStringList getAppFileList();
+
+ virtual void setAppName(const QString&);
+ virtual void setAppVersion(const QString&);
+ virtual void setAppRevision(const QString&);
+ virtual void setAppGroup(const QString&);
+ virtual void setAppPackager(const QString&);
+ virtual void setAppURL(const QString&);
+ virtual void setAppSummary(const QString&);
+ virtual void setAppVendor(const QString&);
+ virtual void setAppLicense(const QString&);
+ virtual void setAppArch(const QString&);
+ virtual void setAppDescription(const QString&);
+ virtual void setAppChangelog(const QString&);
+ virtual void setAppFileList(const QStringList &list);
+
+ private:
+ QString AppName;
+ QString AppVersion;
+ QString AppRevision;
+ QString AppGroup;
+ QString AppPackager;
+ QString AppURL;
+ QString AppSummary;
+ QString AppVendor;
+ QString AppLicense;
+ QString AppArch;
+ QString AppDescription;
+ QString AppChangelog;
+ QString AppSource;
+ QStringList AppFileList;
+};
+
+#endif
diff --git a/parts/distpart/specsupport.cpp b/parts/distpart/specsupport.cpp
new file mode 100644
index 00000000..b9ba6e1e
--- /dev/null
+++ b/parts/distpart/specsupport.cpp
@@ -0,0 +1,315 @@
+/***************************************************************************
+ * Copyright (C) 2004 by ian reinhart geiser *
+ * geiseri@kde.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "specsupport.h"
+#include "kdevproject.h"
+#include "kdevmakefrontend.h"
+#include "distpart_widget.h"
+
+#include <kdebug.h>
+#include <kfiledialog.h>
+#include <klocale.h>
+#include <kprocess.h>
+#include <qfile.h>
+#include <qdir.h>
+#include <qerrormessage.h>
+#include <qregexp.h>
+#include <qpushbutton.h>
+//#include <qvbox.h>
+#include <qgroupbox.h>
+#include <qtabwidget.h>
+#include <qmessagebox.h>
+
+/// \FIXME This is at least the fifth place in the kdevelop code something like this exists
+QString QRegExp_escape(const QString& str )
+{
+#if QT_VERSION >= 0x030100
+ return QRegExp::escape(str);
+#else
+ // this block is copyrighted by Trolltech AS (GPL)
+ static const char meta[] = "$()*+.?[\\]^{|}";
+ QString quoted = str;
+ int i = 0;
+
+ while ( i < (int) quoted.length() ) {
+ if ( strchr(meta, quoted[i].latin1()) != 0 )
+ quoted.insert( i++, "\\" );
+ i++;
+ }
+ return quoted;
+#endif
+}
+
+SpecSupport::SpecSupport(DistpartPart *part) : packageBase(), m_part(part) {
+ dir = "";
+
+// srcPackagePushButton = new QPushButton(i18n("Src Package"),area());
+// buildAllPushButton = new QPushButton(i18n("Src/Binary Packages"),area());
+// exportSPECPushButton = new QPushButton(i18n("Export SPEC File"),area());
+// importSPECPushButton = new QPushButton(i18n("Import SPEC File"),area());
+//
+//
+//
+// connect(buildAllPushButton, SIGNAL(clicked()),
+// this, SLOT(slotbuildAllPushButtonPressed()));
+// connect(exportSPECPushButton, SIGNAL(clicked()),
+// this, SLOT(slotexportSPECPushButtonPressed()));
+// connect(importSPECPushButton, SIGNAL(clicked()),
+// this, SLOT(slotimportSPECPushButtonPressed()));
+// connect(srcPackagePushButton, SIGNAL(clicked()),
+// this, SLOT(slotsrcPackagePushButtonPressed()));
+
+ parseDotRpmmacros();
+}
+
+SpecSupport::~SpecSupport() {
+}
+
+// QPushButton* buildAllPushButton;
+void SpecSupport::slotbuildAllPushButtonPressed() {
+ QMap<QString,QString>::Iterator it;
+ QFile file1(dir + "/" + getAppSource());
+ QFile file2(*(map.find("_sourcedir")) + "/" + getAppSource());
+ if (!file2.exists()) {
+ if (!file1.exists()) {
+ QMessageBox::critical(0 ,i18n("Error"),i18n("You need to create a source archive first."));
+ return;
+ }
+ else
+ if (KDevMakeFrontend *makeFrontend = m_part->extension<KDevMakeFrontend>("KDevelop/MakeFrontend"))
+ makeFrontend->queueCommand(dir,"cd " + KProcess::quote(dir) +
+ " && cp " + KProcess::quote(getAppSource()) + " " + KProcess::quote(*(map.find("_sourcedir"))));
+ }
+ if (KDevMakeFrontend *makeFrontend = m_part->extension<KDevMakeFrontend>("KDevelop/MakeFrontend"))
+ makeFrontend->queueCommand(dir,"cd " + KProcess::quote((((it = map.find("_specdir")) != map.end()) ? (*it) : dir)) +
+ " && rpmbuild -ba " + m_part->project()->projectName() + ".spec");
+}
+
+// QPushButton* exportSPECPushButton;
+void SpecSupport::slotexportSPECPushButtonPressed() {
+ QMap<QString,QString>::Iterator it;
+ QString specname = ((it = map.find("_specdir")) != map.end()) ? (*it) : (m_part->project()->projectDirectory());
+ specname += ("/" + m_part->project()->projectName() + ".spec");
+ QFile file(specname);
+
+ if(file.open(IO_WriteOnly)) {
+ QTextStream stream(&file);
+ stream << generatePackage();
+ file.close();
+ } else {
+ kdDebug() << "TODO : intercept write error in SpecSupport::slotexportSPECPushButtonPressed()";
+ }
+}
+
+QString SpecSupport::getInfo(QString s, QString motif) {
+ QRegExp re(motif + "[ \t]*([^ \t].*[^ \t])[ \t]*");
+ if (re.exactMatch(s))
+ return re.cap(1);
+ return QString::null;
+}
+
+// QPushButton* importSPECPushButton;
+void SpecSupport::slotimportSPECPushButtonPressed() {
+ QString fileName = KFileDialog::getOpenFileName(dir,"*.spec");
+ if( fileName.isEmpty())
+ return;
+ QFile file(fileName);
+
+ if(file.open(IO_ReadOnly)) {
+ QTextStream stream(&file);
+
+ while (!stream.atEnd()) {
+ QString s = stream.readLine();
+ QString info;
+ if (!(info = getInfo(s,"Name:")).isEmpty())
+ setAppName(info);
+ else if (!(info = getInfo(s,"Version:")).isEmpty())
+ setAppVersion(info);
+ else if (!(info = getInfo(s,"Release:")).isEmpty())
+ setAppRevision(info);
+ else if (!(info = getInfo(s,"Vendor:")).isEmpty())
+ setAppVendor(info);
+ else if (!(info = getInfo(s,"Copyright:")).isEmpty())
+ setAppLicense(info);
+ else if (!(info = getInfo(s,"Summary:")).isEmpty())
+ setAppSummary(info);
+ else if (!(info = getInfo(s,"Group:")).isEmpty())
+ setAppGroup(info);
+ else if (!(info = getInfo(s,"Packager:")).isEmpty())
+ setAppPackager(info);
+ else if (s.startsWith("%description")) {
+ QString desc;
+ while (!stream.atEnd()) {
+ QString str = stream.readLine();
+ if (str.startsWith("%")) break;
+ else desc += str + "\n";
+ }
+ setAppDescription(desc);
+ }
+ else if (s.startsWith("%changelog")) {
+ QString change;
+ while (!stream.atEnd()) {
+ QString str = stream.readLine();
+ if (str.startsWith("%")) break;
+ else change += str + "\n";
+ }
+ setAppChangelog(change);
+ }
+ }
+ }
+}
+
+void SpecSupport::slotAddFileButtonPressed(){
+QString filename = KFileDialog::getOpenFileName ();
+}
+
+// QPushButton* srcPackagePushButton;
+void SpecSupport::slotsrcPackagePushButtonPressed() {
+ QMap<QString,QString>::Iterator it;
+
+ QFile file1(dir + "/" + getAppSource());
+ QFile file2(*(map.find("_sourcedir")) + "/" + getAppSource());
+ if (!file2.exists()) {
+ if (!file1.exists()) {
+ QMessageBox::critical(0,i18n("Error"),i18n("You need to create a source archive first."));
+ return;
+ }
+ else
+ if (KDevMakeFrontend *makeFrontend = m_part->extension<KDevMakeFrontend>("KDevelop/MakeFrontend"))
+ makeFrontend->queueCommand(dir,"cd " + KProcess::quote(dir) +
+ " && cp " + KProcess::quote(getAppSource()) + " " + KProcess::quote(*(map.find("_sourcedir"))));
+ }
+ if (KDevMakeFrontend *makeFrontend = m_part->extension<KDevMakeFrontend>("KDevelop/MakeFrontend"))
+ makeFrontend->queueCommand(dir,"cd " + KProcess::quote((((it = map.find("_specdir")) != map.end()) ? (*it) : dir)) +
+ " && rpmbuild -bs " + m_part->project()->projectName() + ".spec");
+}
+
+void SpecSupport::parseDotRpmmacros() {
+ QFile dotfile(QDir::homeDirPath() + "/.rpmmacros");
+
+ if (!dotfile.open(IO_ReadOnly)) {
+// QErrorMessage * msg = new QErrorMessage(this);
+// msg->message("It seems you don't have a ~/.rpmmacros\nYou may experience problems building packages.\n");
+// msg->exec();
+ return;
+ }
+ QTextStream stream(&dotfile);
+
+ // Perhaps will it appear as a necessity to parse the global rpm config file?
+
+ // Pre defined macros :
+ map.insert("name",getAppName());
+
+ // .rpmmacros parsing :
+ while (!stream.atEnd()) {
+ QString s = stream.readLine();
+ QRegExp re("%([^ \t]*)[ \t][ \t]*([^\t]*)$");
+ if(re.exactMatch(s)) {
+ QRegExp subst("%\\{([^%]*)\\}");
+ QString value = re.cap(2).stripWhiteSpace();
+
+ while(subst.search(value) != -1) {
+ value.replace(QRegExp("%\\{"+ QRegExp_escape( subst.cap(1) ) +"\\}"),*map.find(subst.cap(1)));
+ }
+ map.insert(re.cap(1),value);
+ }
+ }
+ dotfile.close();
+
+ // create directories if necessary :
+ createRpmDirectoryFromMacro("_topdir");
+ createRpmDirectoryFromMacro("_tmppath");
+ createRpmDirectoryFromMacro("_builddir");
+ createRpmDirectoryFromMacro("_rpmdir");
+ createRpmDirectoryFromMacro("_sourcedir");
+ createRpmDirectoryFromMacro("_specdir");
+ createRpmDirectoryFromMacro("_srcrpmdir");
+}
+
+bool SpecSupport::createRpmDirectoryFromMacro(const QString & name) {
+ QMap<QString,QString>::Iterator it;
+ if((it = map.find(name)) != map.end()) {
+ QDir dir(*it);
+ if (!dir.exists()) return dir.mkdir(*it);
+ }
+ return false;
+}
+
+QString SpecSupport::generatePackage( )
+{
+ QString spec;
+ spec += "# This spec file was generated by KDevelop \n";
+ spec += "# Please report any problem to KDevelop Team <kdevelop-devel@kdevelop.org> \n";
+ spec += "# Thanks to Matthias Saou for his explanations on http://freshrpms.net/docs/fight.html\n\n";
+
+ spec += "Name: " + getAppName() + "\n";
+ spec += "Version: " + getAppVersion() + "\n";
+ spec += "Release: " + getAppRevision() + "\n";
+ spec += "Vendor: " + getAppVendor() + "\n";
+ spec += "Copyright: " + getAppLicense() + "\n";
+ spec += "Summary: " + getAppSummary() + "\n";
+ spec += "Group: " + getAppGroup() + "\n";
+ spec += "Packager: " + getAppPackager() + "\n";
+ spec += "BuildRoot: %{_tmppath}/%{name}-root \n";
+ spec += "Source: " + getAppSource() + "\n";
+
+ spec += "\n";
+ spec += "%description\n";
+ spec += getAppDescription()+ "\n";
+
+ spec += "\n";
+ spec += "%prep\n";
+ spec += "%setup\n";
+ spec += "CFLAGS=\"$RPM_OPT_FLAGS\" CXXFLAGS=\"$RPM_OPT_FLAGS\" ./configure \\ \n";
+ spec += "--target=" + getAppArch() + "\n";
+ spec += "--disable-debug --enable-debug=no \n";
+
+ spec += "\n";
+ spec += "%build\n";
+ spec += "%configure\n";
+ spec += "make\n";
+
+ spec += "\n";
+ spec += "%install\n";
+ spec += "rm -rf %{buildroot}\n";
+ spec += "%makeinstall\n";
+
+ spec += "\n";
+ spec += "%clean\n";
+ spec += "rm -rf %{buildroot}\n";
+
+ spec += "\n";
+ spec += "%post -p /sbin/ldconfig\n";
+
+ spec += "%postun -p /sbin/ldconfig\n";
+
+ spec += "%files\n";
+ spec += "%defattr(-, root, root)\n";
+ spec += "%doc AUTHORS COPYING ChangeLog NEWS README TODO\n";
+ spec += "%{_bindir}/*\n";
+ spec += "%{_libdir}/*.so.*\n";
+ spec += "%{_datadir}/%{name}\n";
+ spec += "%{_mandir}/man8/*\n";
+
+ spec += "%changelog\n";
+ spec += getAppChangelog() + "\n";
+
+ return spec;
+}
diff --git a/parts/distpart/specsupport.h b/parts/distpart/specsupport.h
new file mode 100644
index 00000000..d64642e9
--- /dev/null
+++ b/parts/distpart/specsupport.h
@@ -0,0 +1,54 @@
+/***************************************************************************
+ * Copyright (C) 2004 by ian reinhart geiser *
+ * geiseri@kde.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#ifndef __SPECSUPPORT_H__
+#define __SPECSUPPORT_H__
+
+#include <qstring.h>
+#include <qmap.h>
+#include "packagebase.h"
+#include "distpart_part.h"
+#include "distpart_widget.h"
+
+class SpecSupport : public packageBase {
+
+public:
+ SpecSupport(DistpartPart *part);
+ ~SpecSupport();
+
+public:
+ QString generatePackage();
+ void slotbuildAllPushButtonPressed();
+ void slotexportSPECPushButtonPressed();
+ void slotimportSPECPushButtonPressed();
+ void slotsrcPackagePushButtonPressed();
+ void slotAddFileButtonPressed();
+
+private:
+ void parseDotRpmmacros();
+ bool createRpmDirectoryFromMacro(const QString & name);
+
+ QString getInfo(QString s, QString motif);
+
+ QString dir;
+ DistpartPart *m_part;
+ QMap<QString,QString> map;
+};
+
+#endif