You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeutils/tdefilereplace/knewprojectdlg.cpp

584 lines
17 KiB

/***************************************************************************
knewprojectdlg.cpp - description
-------------------
begin : Tue Dec 28 1999
copyright : (C) 1999 by François Dupoux
(C) 2004 Emiliano Gulmini <emi_barbarossa@yahoo.it>
email : dupoux@dupoux.com
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
//QT
#include <tqwhatsthis.h>
#include <tqcheckbox.h>
#include <tqspinbox.h>
#include <tqdatetimeedit.h>
#include <tqlabel.h>
#include <tqradiobutton.h>
#include <tqtextedit.h>
#include <tqlistview.h>
//KDE
#include <kseparator.h>
#include <tdemessagebox.h>
#include <kcharsets.h>
#include <kcombobox.h>
#include <tdeconfig.h>
#include <tdefiledialog.h>
#include <klineedit.h>
#include <tdeglobal.h>
#include <tdelocale.h>
#include <kpushbutton.h>
#include <kstandarddirs.h>
#include <tdeversion.h>
#include <kiconloader.h>
#include <kdebug.h>
#include <tdeapplication.h>
// local
#include "knewprojectdlg.h"
#include "whatthis.h"
using namespace whatthisNameSpace;
KNewProjectDlg::KNewProjectDlg(RCOptions* info, TQWidget *parent, const char *name) : KNewProjectDlgS(parent, name)
{
m_searchNowFlag = "";
m_option = info;
initGUI();
connect(m_chbIncludeSubfolders, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotEnableMaxDepthControls(bool)));
connect(m_chbLimitDepth, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotEnableSpinboxMaxDepth(bool)));
connect(m_pbLocation, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotDir()));
connect(m_pbCancel, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotReject()));
connect(m_pbSearchNow, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotSearchNow()));
connect(m_pbSearchLater, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotSearchLater()));
connect(m_cbSearch, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(slotSearchLineEdit(const TQString&)));
connect(m_chbSizeMin, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotEnableSpinboxSizeMin(bool)));
connect(m_chbSizeMax, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotEnableSpinboxSizeMax(bool)));
connect(m_chbDateMin, TQT_SIGNAL(toggled(bool)), m_dedDateMin, TQT_SLOT(setEnabled(bool)));
connect(m_chbDateMax, TQT_SIGNAL(toggled(bool)), m_dedDateMax, TQT_SLOT(setEnabled(bool)));
connect(m_chbDateMin,TQT_SIGNAL(toggled(bool)),this, TQT_SLOT(slotEnableCbValidDate(bool)));
connect(m_chbDateMax,TQT_SIGNAL(toggled(bool)),this, TQT_SLOT(slotEnableCbValidDate(bool)));
connect(m_chbOwnerUser, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotEnableChbUser(bool)));
connect(m_chbOwnerGroup, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotEnableChbGroup(bool)));
connect(m_chbBackup, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotEnableChbBackup(bool)));
connect(m_pbHelp, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotHelp()));
whatsThis();
}
KNewProjectDlg::~KNewProjectDlg()
{
}
void KNewProjectDlg::saveRCOptions()
{
saveOptions();
saveFileSizeOptions();
saveDateAccessOptions();
saveOwnerOptions();
saveCBLists();
saveFiltersList();
saveBackupExtensionOptions();
}
void KNewProjectDlg::slotDir()
{
TQString directoryString = KFileDialog::getExistingDirectory(TQString(), this, i18n("Project Directory"));
if(!directoryString.isEmpty())
m_cbLocation->setEditText(directoryString);
}
void KNewProjectDlg::slotOK()
{
// Check that Search text and Filter are not empty
if(!m_cbSearch->currentText().isEmpty())
{
if(m_cbReplace->currentText().isEmpty())
m_option->m_searchingOnlyMode = true;
else
m_option->m_searchingOnlyMode = false;
}
m_option->m_quickSearchString = m_searchNowFlag + m_cbSearch->currentText();
m_option->m_quickReplaceString = m_searchNowFlag + m_cbReplace->currentText();
if (m_cbLocation->currentText().isEmpty() || m_cbFilter->currentText().isEmpty())
{
KMessageBox::error(this, i18n("You must fill the combo boxes (location and filter) before continuing."));
return;
}
// OWNER OPTIONS
if ((m_chbOwnerUser->isChecked() && m_edOwnerUser->text().isEmpty()) ||
(m_chbOwnerGroup->isChecked() && m_edOwnerGroup->text().isEmpty()))
{
KMessageBox::error(this, i18n("Some edit boxes are empty in the <b>Owner</b> page."));
return ;
}
// Check option "Size Min/Max": check MinSize is not greater than MaxSize
int minSize = m_spbSizeMin->value(),
maxSize = m_spbSizeMax->value();
if ((minSize != FileSizeOption) && (maxSize != FileSizeOption))
if (minSize > maxSize)
{
KMessageBox::error(this, i18n("The minimum size is greater than the maximum size."));
return ;
}
accept();
}
void KNewProjectDlg::slotReject()
{
m_option->m_quickSearchString = m_searchNowFlag;
m_option->m_quickReplaceString = m_searchNowFlag;
reject();
}
void KNewProjectDlg::slotSearchNow()
{ //Add a 'N' to represent the status search-now
m_searchNowFlag = "N";
slotOK();
}
void KNewProjectDlg::slotSearchLater()
{ //Add a 'L' to represent the status search-later
m_searchNowFlag = "L";
slotOK();
}
void KNewProjectDlg::slotSearchLineEdit(const TQString& t)
{
m_pbSearchNow->setEnabled(!t.isEmpty());
m_pbSearchLater->setEnabled(!t.isEmpty());
}
void KNewProjectDlg::slotEnableSpinboxSizeMin(bool b)
{
m_spbSizeMin->setEnabled(b);
}
void KNewProjectDlg::slotEnableSpinboxSizeMax(bool b)
{
m_spbSizeMax->setEnabled(b);
}
void KNewProjectDlg::slotEnableSpinboxMaxDepth(bool b)
{
m_spbMaxDepth->setEnabled(b);
}
void KNewProjectDlg::slotEnableMaxDepthControls(bool b)
{
m_chbLimitDepth->setEnabled(b);
m_spbMaxDepth->setEnabled(b && m_chbLimitDepth->isChecked());
}
void KNewProjectDlg::slotEnableCbValidDate(bool b)
{
Q_UNUSED(b);
m_cbDateValid->setEnabled(m_chbDateMax->isChecked() || m_chbDateMin->isChecked());
}
void KNewProjectDlg::slotEnableChbUser(bool b)
{
m_cbOwnerUserType->setEnabled(b);
m_cbOwnerUserBool->setEnabled(b);
m_edOwnerUser->setEnabled(b);
}
void KNewProjectDlg::slotEnableChbGroup(bool b)
{
m_cbOwnerGroupType->setEnabled(b);
m_cbOwnerGroupBool->setEnabled(b);
m_edOwnerGroup->setEnabled(b);
}
void KNewProjectDlg::slotEnableChbBackup(bool b)
{
m_leBackup->setEnabled(b);
m_tlBackup->setEnabled(b);
}
//PRIVATE
void KNewProjectDlg::initGUI()
{
TQIconSet iconSet = SmallIconSet("document-open");
TQPixmap pixMap = iconSet.pixmap( TQIconSet::Small, TQIconSet::Normal );
m_pbLocation->setIconSet(iconSet);
m_pbLocation->setFixedSize(pixMap.width() + 8, pixMap.height() + 8);
m_pbSearchNow->setEnabled(false);
m_pbSearchLater->setEnabled(false);
loadOptions();
loadFileSizeOptions();
loadDateAccessOptions();
loadOwnerOptions();
loadBackupExtensionOptions();
loadCBLists();
loadFiltersList();
m_cbSearch->setFocus();
}
void KNewProjectDlg::loadOptions()
{
TQStringList availableEncodingNames(TDEGlobal::charsets()->availableEncodingNames());
m_cbEncoding->insertStringList(availableEncodingNames);
int idx = -1;
int utf8Idx = -1;
for (uint i = 0; i < availableEncodingNames.count(); i++)
{
if (availableEncodingNames[i] == m_option->m_encoding)
{
idx = i;
break;
}
if (availableEncodingNames[i] == "utf8")
{
utf8Idx = i;
}
}
if (idx != -1)
m_cbEncoding->setCurrentItem(idx);
else
m_cbEncoding->setCurrentItem(utf8Idx);
m_chbIncludeSubfolders->setChecked(m_option->m_recursive);
m_chbCaseSensitive->setChecked(m_option->m_caseSensitive);
m_chbEnableVariables->setChecked(m_option->m_variables);
m_chbRegularExpressions->setChecked(m_option->m_regularExpressions);
m_chbLimitDepth->setEnabled(m_option->m_recursive);
m_chbLimitDepth->setChecked(m_option->m_limitDepth);
m_spbMaxDepth->setEnabled(m_option->m_recursive && m_option->m_limitDepth);
m_spbMaxDepth->setValue(m_option->m_maxDepth);
}
void KNewProjectDlg::loadFileSizeOptions()
{
int size = m_option->m_minSize;
if(size == FileSizeOption)
{
m_chbSizeMin->setChecked(false);
m_spbSizeMin->setEnabled(false);
m_spbSizeMin->setValue(0);
}
else
{
m_chbSizeMin->setChecked(true);
m_spbSizeMin->setEnabled(true);
m_spbSizeMin->setValue(size);
}
size = m_option->m_maxSize;
if(size == FileSizeOption)
{
m_chbSizeMax->setChecked(false);
m_spbSizeMax->setEnabled(false);
m_spbSizeMax->setValue(0);
}
else
{
m_chbSizeMax->setChecked(true);
m_spbSizeMax->setEnabled(true);
m_spbSizeMax->setValue(size);
}
}
void KNewProjectDlg::loadDateAccessOptions()
{
// ================== DATE OPTIONS ========================
TQString date = m_option->m_minDate;
if(date == AccessDateOption)
{
m_chbDateMin->setChecked(false);
m_dedDateMin->setDate(m_dedDateMin->minValue());
m_dedDateMin->setEnabled(false);
}
else
{
m_chbDateMin->setChecked(true);
m_dedDateMin->setDate(TQDate::fromString(date,Qt::ISODate));
m_dedDateMin->setEnabled(true);
}
date = m_option->m_maxDate;
if(date == AccessDateOption)
{
m_chbDateMax->setChecked(false);
m_dedDateMax->setDate(m_dedDateMax->maxValue());
m_dedDateMax->setEnabled(false);
}
else
{
m_chbDateMax->setChecked(true);
m_dedDateMax->setDate(TQDate::fromString(date,Qt::ISODate));
m_dedDateMax->setEnabled(true);
}
m_cbDateValid->setEnabled(m_chbDateMax->isChecked() || m_chbDateMin->isChecked());
}
void KNewProjectDlg::loadOwnerOptions()
{
bool enableOwner = m_option->m_ownerUserIsChecked;
m_chbOwnerUser->setChecked(enableOwner);
m_cbOwnerUserType->setEnabled(enableOwner);
m_cbOwnerUserBool->setEnabled(enableOwner);
m_edOwnerUser->setEnabled(enableOwner);
m_cbOwnerUserType->setCurrentText(m_option->m_ownerUserType);
m_cbOwnerUserBool->setCurrentText(m_option->m_ownerUserBool);
m_edOwnerUser->setText(m_option->m_ownerUserValue);
enableOwner = m_option->m_ownerGroupIsChecked;
m_chbOwnerGroup->setChecked(enableOwner);
m_cbOwnerGroupType->setEnabled(enableOwner);
m_cbOwnerGroupBool->setEnabled(enableOwner);
m_edOwnerGroup->setEnabled(enableOwner);
m_cbOwnerGroupType->setCurrentText(m_option->m_ownerGroupType);
m_cbOwnerGroupBool->setCurrentText(m_option->m_ownerGroupBool);
m_edOwnerGroup->setText(m_option->m_ownerGroupValue);
}
void KNewProjectDlg::loadCBLists()
{
m_cbSearch->insertStringList(m_option->m_searchStrings);
m_cbReplace->insertStringList(m_option->m_replaceStrings);
m_cbLocation->insertStringList(m_option->m_directories);
slotSearchLineEdit(m_cbSearch->currentText());
}
void KNewProjectDlg::loadFiltersList()
{
m_cbFilter->insertStringList(m_option->m_filters);
}
void KNewProjectDlg::loadBackupExtensionOptions()
{
bool enableBackup = m_option->m_backup;
m_chbBackup->setChecked(enableBackup);
m_leBackup->setEnabled(enableBackup);
m_tlBackup->setEnabled(enableBackup);
m_leBackup->setText(m_option->m_backupExtension);
}
void KNewProjectDlg::saveOptions()
{
m_option->m_encoding = m_cbEncoding->currentText();
m_option->m_recursive = m_chbIncludeSubfolders->isChecked();
m_option->m_caseSensitive = m_chbCaseSensitive->isChecked();
m_option->m_variables = m_chbEnableVariables->isChecked();
m_option->m_regularExpressions = m_chbRegularExpressions->isChecked();
m_option->m_limitDepth = m_chbLimitDepth->isChecked();
m_option->m_maxDepth = m_spbMaxDepth->value();
}
void KNewProjectDlg::saveFileSizeOptions()
{
if(m_chbSizeMax->isChecked())
m_option->m_maxSize = m_spbSizeMax->value();
else
m_option->m_maxSize = FileSizeOption;
if(m_chbSizeMin->isChecked())
m_option->m_minSize = m_spbSizeMin->value();
else
m_option->m_minSize = FileSizeOption;
}
void KNewProjectDlg::saveDateAccessOptions()
{
if(m_chbDateMin->isChecked() || m_chbDateMax->isChecked())
m_option->m_dateAccess = m_cbDateValid->currentText();
else
m_option->m_dateAccess = ValidAccessDateOption;
if(m_chbDateMin->isChecked())
{
TQString date = m_dedDateMin->date().toString(Qt::ISODate);
m_option->m_minDate = date;
}
else
m_option->m_minDate = AccessDateOption;
if(m_chbDateMax->isChecked())
{
TQString date = m_dedDateMax->date().toString(Qt::ISODate);
m_option->m_maxDate = date;
}
else
m_option->m_maxDate = AccessDateOption;
}
void KNewProjectDlg::saveOwnerOptions()
{
bool isChecked = m_chbOwnerUser->isChecked();
if(isChecked)
{
m_option->m_ownerUserIsChecked = true;
m_option->m_ownerUserType = m_cbOwnerUserType->currentText();
m_option->m_ownerUserBool = m_cbOwnerUserBool->currentText();
m_option->m_ownerUserValue = m_edOwnerUser->text();
}
else
{
m_option->m_ownerUserIsChecked = false;
m_option->m_ownerUserType = "Name";
m_option->m_ownerUserBool = "Equals To";
m_option->m_ownerUserValue = "";
}
isChecked = m_chbOwnerGroup->isChecked();
if(isChecked)
{
m_option->m_ownerGroupIsChecked = true;
m_option->m_ownerGroupType = m_cbOwnerGroupType->currentText();
m_option->m_ownerGroupBool = m_cbOwnerGroupBool->currentText();
m_option->m_ownerGroupValue = m_edOwnerGroup->text();
}
else
{
m_option->m_ownerGroupIsChecked = false;
m_option->m_ownerGroupType = "Name";
m_option->m_ownerGroupBool = "Equals To";
m_option->m_ownerGroupValue = "";
}
}
void KNewProjectDlg::saveCBLists()
{
// Search list
TQString current = m_cbSearch->currentText();
m_option->m_searchStrings.clear();
m_option->m_searchStrings.append(current);
int count = m_cbSearch->listBox()->count();
for (int i = 0; i < count; ++i)
{
TQString text = m_cbSearch->listBox()->item(i)->text();
if (text != "" && text != current)
m_option->m_searchStrings.append(text);
}
// Replace list
current = m_cbReplace->currentText();
m_option->m_replaceStrings.clear();
m_option->m_replaceStrings.append(current);
count = m_cbReplace->listBox()->count();
for (int i = 0; i < count; ++i)
{
TQString text = m_cbReplace->listBox()->item(i)->text();
if (text != "" && text != current)
m_option->m_replaceStrings.append(text);
}
// Location list
current = m_cbLocation->currentText();
m_option->m_directories.clear();
m_option->m_directories.append(current);
count = m_cbLocation->listBox()->count();
for (int i = 0; i < count; ++i)
{
TQString text = m_cbLocation->listBox()->item(i)->text();
if (text != "" && text != current)
m_option->m_directories.append(text);
}
}
void KNewProjectDlg::saveFiltersList()
{
TQString current = m_cbFilter->currentText();
TQStringList list = current;
int count = m_cbFilter->listBox()->count(),
i;
for(i = 0; i < count; i++)
{
TQString text = m_cbFilter->listBox()->item(i)->text();
if(text != current)
list.append(text);
}
m_option->m_filters = list;
}
void KNewProjectDlg::saveBackupExtensionOptions()
{
TQString backupExt = m_leBackup->text();
m_option->m_backup = (m_chbBackup->isChecked() && !backupExt.isEmpty());
m_option->m_backupExtension = backupExt;
}
void KNewProjectDlg::setDatas(const TQString& directoryString, const TQString& filterString)
{
if (!directoryString.isEmpty())
m_cbLocation->setEditText(directoryString);
if (!filterString.isEmpty())
m_cbFilter->setEditText(filterString);
}
bool KNewProjectDlg::contains(TQListView* lv,const TQString& s, int column)
{
TQListViewItem* i = lv->firstChild();
while (i != 0)
{
if(i->text(column) == s)
return true;
i = i->nextSibling();
}
return false;
}
void KNewProjectDlg::whatsThis()
{
TQWhatsThis::add(m_cbLocation, cbLocationWhatthis);
TQWhatsThis::add(m_cbFilter, cbFilterWhatthis);
TQWhatsThis::add(m_chbSizeMin, edSizeMinWhatthis);
TQWhatsThis::add(m_spbSizeMin, edSizeMinWhatthis);
TQWhatsThis::add(m_chbSizeMax, edSizeMaxWhatthis);
TQWhatsThis::add(m_spbSizeMax, edSizeMaxWhatthis);
TQWhatsThis::add(m_chbLimitDepth, edMaxDepthWhatthis);
TQWhatsThis::add(m_spbMaxDepth, edMaxDepthWhatthis);
TQWhatsThis::add(m_cbDateValid, cbDateValidWhatthis);
TQWhatsThis::add(m_chbDateMin, chbDateMinWhatthis);
TQWhatsThis::add(m_chbDateMax, chbDateMaxWhatthis);
TQWhatsThis::add(m_chbIncludeSubfolders, chbRecursiveWhatthis);
TQWhatsThis::add(m_chbRegularExpressions, chbRegularExpressionsWhatthis);
TQWhatsThis::add(m_chbEnableVariables, chbVariablesWhatthis);
TQWhatsThis::add(m_chbCaseSensitive, chbCaseSensitiveWhatthis);
TQWhatsThis::add(m_chbBackup, chbBackupWhatthis);
TQWhatsThis::add(m_leBackup, chbBackupWhatthis);
TQWhatsThis::add(m_cbSearch, leSearchWhatthis);
TQWhatsThis::add(m_cbReplace, leReplaceWhatthis);
}
#include "knewprojectdlg.moc"