00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "distpart_widget.h"
00021
00022 #include <kparts/part.h>
00023 #include <klibloader.h>
00024 #include <kurl.h>
00025 #include <kdebug.h>
00026 #include <kprocess.h>
00027 #include <kfiledialog.h>
00028 #include <kio/netaccess.h>
00029 #include <klocale.h>
00030 #include "kdevproject.h"
00031 #include "domutil.h"
00032 #include <ktar.h>
00033 #include <kmessagebox.h>
00034
00035 #include <kdevcore.h>
00036 #include <qgroupbox.h>
00037 #include <qlayout.h>
00038 #include <qnetwork.h>
00039 #include <qurloperator.h>
00040 #include <qmessagebox.h>
00041 #include "distpart_part.h"
00042 #include <qdir.h>
00043 #include <qfile.h>
00044 #include <qregexp.h>
00045 #include <qstringlist.h>
00046 #include <qtabwidget.h>
00047 #include "kdevmakefrontend.h"
00048 #include <kprogress.h>
00049
00050 #include <qerrormessage.h>
00051 #include "specsupport.h"
00052 #include "lsmsupport.h"
00053
00054 DistpartDialog::DistpartDialog(DistpartPart *part, QWidget *parent)
00055 :distpart_ui(parent, "dist_widget"), m_part(part) {
00056 m_spec = new SpecSupport(m_part);
00057
00058 connect( customProjectCheckBox, SIGNAL(toggled(bool) ),
00059 this, SLOT(slotcustomProjectCheckBoxChanged()));
00060 connect( uploadCustomCheckBox, SIGNAL(toggled(bool)),
00061 this, SLOT(slotuploadCustomCheckBoxChanged()));
00062
00063
00064
00065
00066
00067
00068
00069 connect( createSrcArchPushButton, SIGNAL(clicked()),
00070 this, SLOT(slotcreateSrcArchPushButtonPressed()));
00071 connect( resetSrcPushButton, SIGNAL(clicked()),
00072 this, SLOT(slotresetSrcPushButtonPressed()));
00073
00074 connect( genHTMLPushButton, SIGNAL(clicked()),
00075 this, SLOT(slotgenHTMLPushButtonPressed()));
00076 connect( resetHTMLPushButton, SIGNAL(clicked()),
00077 this, SLOT(slotresetHTMLPushButtonPressed()));
00078 connect( uploadSubmitPushButton, SIGNAL(clicked()),
00079 this, SLOT(slotuploadSubmitPushButtonPressed()));
00080 connect( uploadResetPushButton, SIGNAL(clicked()),
00081 this, SLOT(slotuploadResetPushButtonPressed()));
00082 connect( uploadAddFileToolButton, SIGNAL(clicked()),
00083 this, SLOT(slotuploadAddFileToolButtonPressed()));
00084 connect( uploadRemoveToolButton, SIGNAL(clicked()),
00085 this, SLOT(slotuploadRemoveToolButtonPressed()));
00086
00087
00088
00089
00090 loadSettings();
00091
00092
00093 localOptionsGroupBox->setEnabled(false);
00094 devPackageCheckBox->setEnabled(false);
00095 docsPackageCheckBox->setEnabled(false);
00096 appIconCheckBox->setEnabled(false);
00097 uploadftpkdeorgCheckBox->setEnabled(false);
00098 uploadAppsKDEcomCheckBox->setEnabled(false);
00099 }
00100
00101
00102 DistpartDialog::~DistpartDialog() {
00103 }
00104
00105
00106
00107 void DistpartDialog::slotokayPushButtonPressed() {
00108 storeSettings();
00109
00110 }
00111
00112
00113 void DistpartDialog::slotcancelPushButtonPressed() {
00114
00115 }
00116
00117
00118
00119
00120
00121
00122
00123 void DistpartDialog::slotcreateSrcArchPushButtonPressed() {
00124 kdDebug() << "Starting archive..." << endl;
00125 QString dist = (getcustomProjectCheckBoxState() && getbzipCheckBoxState()) ? "application/x-bzip2" : "application/x-gzip";
00126
00127 QString filename = m_part->project()->projectDirectory() + "/" + getappNameFormatLineEditText() +
00128 "-" +
00129 getversionLineEditText() +
00130 ((getcustomProjectCheckBoxState() && getbzipCheckBoxState()) ? ".tar.bz2" : ".tar.gz");
00131
00132 KTar tar(filename, dist);
00133 if ( tar.open(IO_WriteOnly) )
00134 {
00135 QStringList files = m_part->project()->distFiles();
00136 KProgressDialog *prog = new KProgressDialog( m_part->widget(), "dialog", i18n("Building Package"), "", true );
00137 prog->show();
00138 for( uint idx = 0; idx < files.count(); ++idx)
00139 {
00140 if ( !tar.addLocalFile( m_part->project()->projectDirectory() + "/" + files[idx], getappNameFormatLineEditText() + "/" + files[idx]) )
00141 {
00142 kdDebug() << "Failed to write file " << files[idx] << endl;
00143 }
00144 else
00145 {
00146 prog->setLabel(i18n("Adding file: ") + files[idx]);
00147 prog->progressBar()->setValue( (idx*100)/files.count() );
00148 }
00149 }
00150 tar.close( );
00151 prog->hide();
00152 delete prog;
00153 KMessageBox::information(this, "Archive made at: " + filename,"Archive Done");
00154
00155 }
00156 else
00157 {
00158 kdDebug() << "Failed to open archive..." << endl;
00159 }
00160
00161 }
00162
00163
00164 void DistpartDialog::slotresetSrcPushButtonPressed() {}
00165
00166
00167
00168
00169 void DistpartDialog::slotgenHTMLPushButtonPressed() {}
00170
00171
00172 void DistpartDialog::slotresetHTMLPushButtonPressed() {}
00173
00174
00175 void DistpartDialog::slotuploadAddFileToolButtonPressed() {
00176 uploadFileListBox->insertStringList(KFileDialog::getOpenFileNames());
00177 }
00178
00179
00180 void DistpartDialog::slotuploadRemoveToolButtonPressed() {
00181 for(unsigned int i=0; i< uploadFileListBox->count(); i++)
00182 if ( uploadFileListBox->isSelected(i)) uploadFileListBox->removeItem(i);
00183 }
00184
00185
00186 void DistpartDialog::slotuploadSubmitPushButtonPressed() {
00187
00188 if(getuploadftpkdeorgCheckBoxState() || getuploadAppsKDEcomCheckBoxState())
00189 kdDebug() << "Implement ftp.kde.org & apps.kde.com ftp transfer" << endl;
00190 else {
00191 for(unsigned int i=0; i< uploadFileListBox->count(); i++)
00192 KIO::NetAccess::copy(KURL::fromPathOrURL( uploadFileListBox->text(i) ),
00193 KURL::fromPathOrURL( getuploadURLLineEditText() + uploadFileListBox->text(i).replace(QRegExp("[^/]*/"),"") ));
00194 }
00195 }
00196
00197
00198 void DistpartDialog::slotuploadResetPushButtonPressed() {
00199 uploadFileListBox->clear();
00200 }
00201
00202
00203
00204
00205
00206
00207 void DistpartDialog::slotcustomProjectCheckBoxChanged() {
00208 kdDebug () << "New State" << customProjectCheckBox->isChecked() << endl;
00209 sourceOptionsGroupBox->setEnabled( customProjectCheckBox->isChecked());
00210 }
00211
00212 bool DistpartDialog::getcustomProjectCheckBoxState() {
00213 return customProjectCheckBox->isChecked();
00214 }
00215
00216 void DistpartDialog::setcustomProjectCheckBoxState(bool state) {
00217 customProjectCheckBox->setChecked(state);
00218 }
00219
00220
00221 void DistpartDialog::slotuploadCustomCheckBoxChanged() {
00222 uploadURLLineEdit->setEnabled( uploadCustomCheckBox->isChecked());
00223 }
00224
00225 bool DistpartDialog::getuploadCustomCheckBoxState() {
00226 return uploadCustomCheckBox->isChecked();
00227 }
00228
00229 void DistpartDialog::setuploadCustomCheckBoxState(bool state) {
00230 uploadCustomCheckBox->setChecked(state);
00231 }
00232
00233
00234
00235
00236 bool DistpartDialog::getbzipCheckBoxState() {
00237 return bzipCheckBox->isChecked();
00238 }
00239
00240 void DistpartDialog::setbzipCheckBoxState(bool state) {
00241 bzipCheckBox->setChecked(state);
00242 }
00243
00244
00245 bool DistpartDialog::getappIconCheckBoxState() {
00246 return appIconCheckBox->isChecked();
00247 }
00248
00249 void DistpartDialog::setappIconCheckBoxState(bool state) {
00250 appIconCheckBox->setChecked(state);
00251 }
00252
00253
00254 bool DistpartDialog::getgenHTMLCheckBoxState() {
00255 return genHTMLCheckBox->isChecked();
00256 }
00257
00258 void DistpartDialog::setgenHTMLCheckBoxState(bool state) {
00259 genHTMLCheckBox->setChecked(state);
00260 }
00261
00262
00263 bool DistpartDialog::getuseRPMInfoCheckBoxState() {
00264 return useRPMInfoCheckBox->isChecked();
00265 }
00266
00267 void DistpartDialog::setuseRPMInfoCheckBoxState(bool state) {
00268 useRPMInfoCheckBox->setChecked(state);
00269 }
00270
00271
00272 bool DistpartDialog::getuploadAppsKDEcomCheckBoxState() {
00273 return uploadAppsKDEcomCheckBox->isChecked();
00274 }
00275
00276 void DistpartDialog::setuploadAppsKDEcomCheckBoxState(bool state) {
00277 uploadAppsKDEcomCheckBox->setChecked(state);
00278 }
00279
00280
00281 bool DistpartDialog::getuploadftpkdeorgCheckBoxState() {
00282 return uploadftpkdeorgCheckBox->isChecked();
00283 }
00284
00285 void DistpartDialog::setuploadftpkdeorgCheckBoxState(bool state) {
00286 uploadftpkdeorgCheckBox->setChecked(state);
00287 }
00288
00289
00290 bool DistpartDialog::getdevPackageCheckBoxState() {
00291 return devPackageCheckBox->isChecked();
00292 }
00293
00294 void DistpartDialog::setdevPackageCheckBoxState(bool state) {
00295 devPackageCheckBox->setChecked(state);
00296 }
00297
00298
00299 bool DistpartDialog::getdocsPackageCheckBoxState() {
00300 return docsPackageCheckBox->isChecked();
00301 }
00302
00303 void DistpartDialog::setdocsPackageCheckBoxState(bool state) {
00304 docsPackageCheckBox->setChecked(state);
00305 }
00306
00307
00308 QString DistpartDialog::getarchNameFormatLineEditText() {
00309 return archNameFormatLineEdit->text();
00310 }
00311
00312 void DistpartDialog::setarchNameFormatLineEditText(QString text) {
00313 archNameFormatLineEdit->setText(text);
00314 }
00315
00316
00317 QString DistpartDialog::getappNameFormatLineEditText() {
00318 return appNameLineEdit->text();
00319 }
00320
00321 void DistpartDialog::setappNameFormatLineEditText(QString text) {
00322 appNameLineEdit->setText(text);
00323 }
00324
00325
00326 QString DistpartDialog::getsummaryLineEditText() {
00327 return summaryLineEdit->text();
00328 }
00329
00330 void DistpartDialog::setsummaryLineEditText(QString text) {
00331 summaryLineEdit->setText(text);
00332 }
00333
00334
00335 QString DistpartDialog::getgroupLineEditText() {
00336 return groupLineEdit->text();
00337 }
00338
00339 void DistpartDialog::setgroupLineEditText(QString text) {
00340 groupLineEdit->setText(text);
00341 }
00342
00343
00344 QString DistpartDialog::getreleaseLineEditText() {
00345 return releaseLineEdit->text();
00346 }
00347
00348 void DistpartDialog::setreleaseLineEditText(QString text) {
00349 releaseLineEdit->setText(text);
00350 }
00351
00352
00353 QString DistpartDialog::getversionLineEditText() {
00354 return versionLineEdit->text();
00355 }
00356
00357 void DistpartDialog::setversionLineEditText(QString text) {
00358 versionLineEdit->setText( text );
00359 }
00360
00361
00362 QString DistpartDialog::getvendorLineEditText() {
00363 return vendorLineEdit->text();
00364 }
00365
00366 void DistpartDialog::setvendorLineEditText(QString text) {
00367 vendorLineEdit->setText(text);
00368 }
00369
00370
00371 QString DistpartDialog::getlicenseLineEditText() {
00372 return licenseLineEdit->text();
00373 }
00374
00375 void DistpartDialog::setlicenseLineEditText(QString text) {
00376 licenseLineEdit->setText(text);
00377 }
00378
00379
00380 QString DistpartDialog::getuploadURLLineEditText() {
00381 return uploadURLLineEdit->text();
00382 }
00383
00384 void DistpartDialog::setuploadURLLineEditText(QString text) {
00385 uploadURLLineEdit->setText(text);
00386 }
00387
00388
00389 QString DistpartDialog::getpackagerLineEditText() {
00390 return packagerLineEdit->text();
00391 }
00392
00393 void DistpartDialog::setpackagerLineEditText(QString text) {
00394 packagerLineEdit->setText(text);
00395 }
00396
00397
00398 QString DistpartDialog::getarchComboBoxText() {
00399 return archComboBox->currentText();
00400 }
00401
00402 int DistpartDialog::getarchComboBoxItem() {
00403 return archComboBox->currentItem();
00404 }
00405
00406 void DistpartDialog::setarchComboBoxItem(int item) {
00407 archComboBox->setCurrentItem( item );
00408 }
00409
00410
00411 QString DistpartDialog::getuploadFileListBoxText() {
00412 return uploadFileListBox->currentText();
00413 }
00414
00415 int DistpartDialog::getuploadFileListBoxItem() {
00416 return uploadFileListBox->currentItem();
00417 }
00418
00419 void DistpartDialog::setuploadFileListBoxItem(int item) {
00420 uploadFileListBox->setCurrentItem( item);
00421 }
00422
00423
00424 QString DistpartDialog::getsrcDistFileListBoxText() {
00425 return srcDistFileListBox->currentText ();
00426 }
00427
00428 int DistpartDialog::getsrcDistFileListBoxItem() {
00429 return srcDistFileListBox->currentItem ();
00430 }
00431
00432 void DistpartDialog::setsrcDistFileListBoxItem(int item) {
00433 srcDistFileListBox->setCurrentItem( item );
00434 }
00435
00436
00437 QString DistpartDialog::getprojectDescriptionMultilineEditText() {
00438 return projectDescriptionMultilineEdit->text();
00439 }
00440
00441 void DistpartDialog::setprojectDescriptionMultilineEditText(QString text) {
00442 projectDescriptionMultilineEdit->setText(text);
00443 }
00444
00445 QString DistpartDialog::getprojectChangelogMultilineEditText() {
00446 return projectChangelogMultilineEdit->text();
00447 }
00448
00449 void DistpartDialog::setprojectChangelogMultilineEditText(QString text) {
00450 projectChangelogMultilineEdit->setText(text);
00451 }
00452
00453 QString DistpartDialog::getSourceName() {
00454 QString name = (getcustomProjectCheckBoxState()) ? getarchNameFormatLineEditText() : QString("%n-%v");
00455 name += (getcustomProjectCheckBoxState() && getbzipCheckBoxState()) ? ".tar.bz2" : ".tar.gz";
00456 return name.replace(QRegExp("%n"),getappNameFormatLineEditText())
00457 .replace(QRegExp("%v"),getversionLineEditText())
00458 .replace(QRegExp("%d"),QDate::currentDate().toString("yyyyMMdd"));
00459 }
00460
00461 void DistpartDialog::loadSettings() {
00462 QDomDocument &dom = *m_part->projectDom();
00463
00464 srcDistFileListBox->insertStringList( m_part->project()->distFiles() );
00465
00466
00467 setcustomProjectCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/custom",false));
00468 slotcustomProjectCheckBoxChanged();
00469 setbzipCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/bzip",false));
00470 setarchNameFormatLineEditText(DomUtil::readEntry(dom,"/dist/archname"));
00471
00472
00473
00474 setappNameFormatLineEditText(DomUtil::readEntry(dom,"/dist/appname", m_part->project()->projectName() ));
00475 setversionLineEditText(DomUtil::readEntry(dom,"/dist/version",DomUtil::readEntry(dom,"/general/version")));
00476 setreleaseLineEditText(DomUtil::readEntry(dom,"/dist/release"));
00477 setvendorLineEditText(DomUtil::readEntry(dom,"/dist/vendor"));
00478 setlicenseLineEditText(DomUtil::readEntry(dom,"/dist/licence"));
00479 setsummaryLineEditText(DomUtil::readEntry(dom,"/dist/summary"));
00480 setgroupLineEditText(DomUtil::readEntry(dom,"/dist/group"));
00481 setpackagerLineEditText(DomUtil::readEntry(dom,"/dist/packager"));
00482 setprojectDescriptionMultilineEditText(DomUtil::readEntry(dom,"/dist/description",DomUtil::readEntry(dom,"/general/description")));
00483 setprojectChangelogMultilineEditText(DomUtil::readEntry(dom,"/dist/changelog"));
00484 setdevPackageCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/devpackage"));
00485 setdocsPackageCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/docspackage"));
00486 setappIconCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/appicon"));
00487 setarchComboBoxItem(DomUtil::readIntEntry(dom,"/dist/arch"));
00488
00489
00490 setgenHTMLCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/genHTML"));
00491 setuseRPMInfoCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/useRPM"));
00492 setuploadftpkdeorgCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/ftpkde"));
00493 setuploadAppsKDEcomCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/appskde"));
00494 setuploadCustomCheckBoxState(DomUtil::readBoolEntry(dom,"/dist/custom"));
00495 slotuploadCustomCheckBoxChanged();
00496 setuploadURLLineEditText(DomUtil::readEntry(dom,"/dist/url"));
00497 }
00498
00499 void DistpartDialog::storeSettings() {
00500 QDomDocument &dom = *m_part->projectDom();
00501
00502
00503 DomUtil::writeBoolEntry(dom,"/dist/custom",getcustomProjectCheckBoxState());
00504 DomUtil::writeBoolEntry(dom,"/dist/bzip",getbzipCheckBoxState());
00505 DomUtil::writeEntry(dom,"/dist/archname",getarchNameFormatLineEditText());
00506
00507
00508 DomUtil::writeEntry(dom,"/dist/appname",getappNameFormatLineEditText());
00509 DomUtil::writeEntry(dom,"/dist/version",getversionLineEditText());
00510 DomUtil::writeEntry(dom,"/dist/release",getreleaseLineEditText());
00511 DomUtil::writeEntry(dom,"/dist/vendor",getvendorLineEditText());
00512 DomUtil::writeEntry(dom,"/dist/licence",getlicenseLineEditText());
00513 DomUtil::writeEntry(dom,"/dist/summary",getsummaryLineEditText());
00514 DomUtil::writeEntry(dom,"/dist/group",getgroupLineEditText());
00515 DomUtil::writeEntry(dom,"/dist/packager",getpackagerLineEditText());
00516 DomUtil::writeEntry(dom,"/dist/description",getprojectDescriptionMultilineEditText());
00517 DomUtil::writeEntry(dom,"/dist/changelog",getprojectChangelogMultilineEditText());
00518 DomUtil::writeBoolEntry(dom,"/dist/devpackage",getdevPackageCheckBoxState());
00519 DomUtil::writeBoolEntry(dom,"/dist/docspackage",getdocsPackageCheckBoxState());
00520 DomUtil::writeBoolEntry(dom,"/dist/appicon",getappIconCheckBoxState());
00521 DomUtil::writeIntEntry(dom,"/dist/arch",getarchComboBoxItem());
00522
00523
00524 DomUtil::writeBoolEntry(dom,"/dist/genHTML",getgenHTMLCheckBoxState());
00525 DomUtil::writeBoolEntry(dom,"/dist/useRPM",getuseRPMInfoCheckBoxState());
00526 DomUtil::writeBoolEntry(dom,"/dist/ftpkde",getuploadftpkdeorgCheckBoxState());
00527 DomUtil::writeBoolEntry(dom,"/dist/appskde",getuploadAppsKDEcomCheckBoxState());
00528 DomUtil::writeBoolEntry(dom,"/dist/custom",getuploadCustomCheckBoxState());
00529 DomUtil::writeEntry(dom,"/dist/url",getuploadURLLineEditText());
00530 }
00531
00532 void DistpartDialog::setPackageData()
00533 {
00534 m_spec->setAppRevision( releaseLineEdit->text());
00535 m_spec->setAppName( appNameLineEdit->text());
00536 m_spec->setAppVendor( vendorLineEdit->text());
00537 m_spec->setAppLicense( licenseLineEdit->text());
00538 m_spec->setAppSummary( summaryLineEdit->text());
00539 m_spec->setAppPackager( packagerLineEdit->text());
00540 m_spec->setAppVersion( versionLineEdit->text());
00541 m_spec->setAppGroup( groupLineEdit->text());
00542 m_spec->setAppDescription( projectDescriptionMultilineEdit->text());
00543 m_spec->setAppChangelog( projectChangelogMultilineEdit->text());
00544 }
00545
00546 void DistpartDialog::getPackageData()
00547 {
00548 releaseLineEdit->setText(m_spec->getAppRevision());
00549 appNameLineEdit->setText(m_spec->getAppName());
00550 vendorLineEdit->setText(m_spec->getAppVendor());
00551 licenseLineEdit->setText(m_spec->getAppLicense( ));
00552 summaryLineEdit->setText(m_spec->getAppSummary( ));
00553 packagerLineEdit->setText(m_spec->getAppPackager( ));
00554 versionLineEdit->setText(m_spec->getAppVersion());
00555 groupLineEdit->setText(m_spec->getAppGroup( ));
00556 projectDescriptionMultilineEdit->setText(m_spec->getAppDescription( ));
00557 projectChangelogMultilineEdit->setText(m_spec->getAppChangelog( ));
00558 }
00559 void DistpartDialog::slotbuildAllPushButtonPressed( )
00560 {
00561 setPackageData();
00562 m_spec->slotbuildAllPushButtonPressed();
00563 }
00564
00565 void DistpartDialog::slotexportSPECPushButtonPressed( )
00566 {
00567 setPackageData();
00568 m_spec->slotexportSPECPushButtonPressed();
00569 }
00570
00571 void DistpartDialog::slotimportSPECPushButtonPressed( )
00572 {
00573 m_spec->slotimportSPECPushButtonPressed();
00574 getPackageData();
00575 }
00576
00577 void DistpartDialog::slotsrcPackagePushButtonPressed( )
00578 {
00579 setPackageData();
00580 m_spec->slotsrcPackagePushButtonPressed();
00581 }
00582
00583
00584 #include "distpart_widget.moc"