00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include <tqvariant.h>
00030 #include <tqpushbutton.h>
00031 #include <tqlabel.h>
00032 #include <tqlineedit.h>
00033 #include <tqcombobox.h>
00034 #include <tqlayout.h>
00035 #include <tqtooltip.h>
00036 #include <tqwhatsthis.h>
00037 #include <tqregexp.h>
00038
00039 #include <klocale.h>
00040 #include <kdialogbase.h>
00041 #include <kmessagebox.h>
00042
00043 #include "folderutil.h"
00044 #include "newfolderdialog.h"
00045 #include "kmfolder.h"
00046 #include "folderstorage.h"
00047 #include "kmfolderimap.h"
00048 #include "kmfoldercachedimap.h"
00049 #include "kmfoldermgr.h"
00050 #include "kmfolderdir.h"
00051 #include "folderstorage.h"
00052 #include "kmailicalifaceimpl.h"
00053 #include "kmacctimap.h"
00054 #include "kmacctcachedimap.h"
00055
00056 using namespace KMail;
00057
00058 NewFolderDialog::NewFolderDialog( TQWidget* parent, KMFolder *folder )
00059 : KDialogBase( parent, "new_folder_dialog", false, i18n( "New Folder" ),
00060 KDialogBase::Ok|KDialogBase::Cancel,
00061 KDialogBase::Ok, true ),
00062 mFormatComboBox( 0 ),
00063 mContentsComboBox( 0 ),
00064 mNamespacesComboBox( 0 ),
00065 mFolder( folder )
00066 {
00067 setWFlags( getWFlags() | WDestructiveClose );
00068 if ( mFolder ) {
00069 setCaption( i18n("New Subfolder of %1").arg( mFolder->prettyURL() ) );
00070 }
00071 TQWidget* privateLayoutWidget = new TQWidget( this, "mTopLevelLayout" );
00072 privateLayoutWidget->setGeometry( TQRect( 10, 10, 260, 80 ) );
00073 setMainWidget( privateLayoutWidget );
00074 mTopLevelLayout = new TQVBoxLayout( privateLayoutWidget, 0, spacingHint(),
00075 "mTopLevelLayout");
00076
00077 mNameHBox = new TQHBoxLayout( 0, 0, 6, "mNameHBox");
00078
00079 mNameLabel = new TQLabel( privateLayoutWidget, "mNameLabel" );
00080 mNameLabel->setText( i18n( "&Name:" ) );
00081 mNameHBox->addWidget( mNameLabel );
00082
00083 mNameLineEdit = new TQLineEdit( privateLayoutWidget, "mNameLineEdit" );
00084 mNameLabel->setBuddy( mNameLineEdit );
00085 TQWhatsThis::add( mNameLineEdit, i18n( "Enter a name for the new folder." ) );
00086 mNameLineEdit->setFocus();
00087 mNameHBox->addWidget( mNameLineEdit );
00088 mTopLevelLayout->addLayout( mNameHBox );
00089 connect( mNameLineEdit, TQT_SIGNAL( textChanged ( const TQString & ) ), this, TQT_SLOT( slotFolderNameChanged( const TQString & ) ) );
00090
00091 if ( !mFolder ||
00092 ( mFolder->folderType() != KMFolderTypeImap &&
00093 mFolder->folderType() != KMFolderTypeCachedImap ) ) {
00094 mFormatHBox = new TQHBoxLayout( 0, 0, 6, "mFormatHBox");
00095 mMailboxFormatLabel = new TQLabel( privateLayoutWidget, "mMailboxFormatLabel" );
00096 mMailboxFormatLabel->setText( i18n( "Mailbox &format:" ) );
00097 mFormatHBox->addWidget( mMailboxFormatLabel );
00098
00099 mFormatComboBox = new TQComboBox( false, privateLayoutWidget, "mFormatComboBox" );
00100 mMailboxFormatLabel->setBuddy( mFormatComboBox );
00101 TQWhatsThis::add( mFormatComboBox, i18n( "Select whether you want to store the messages in this folder as one file per message (maildir) or as one big file (mbox). KMail uses maildir by default and this only needs to be changed in rare circumstances. If you are unsure, leave this option as-is." ) );
00102
00103 mFormatComboBox->insertItem("mbox", 0);
00104 mFormatComboBox->insertItem("maildir", 1);
00105
00106
00107 {
00108 KConfig *config = KMKernel::config();
00109 KConfigGroupSaver saver(config, "General");
00110 int type = config->readNumEntry("default-mailbox-format", 1);
00111 if ( type < 0 || type > 1 ) type = 1;
00112 mFormatComboBox->setCurrentItem( type );
00113 }
00114 mFormatHBox->addWidget( mFormatComboBox );
00115 mTopLevelLayout->addLayout( mFormatHBox );
00116 }
00117
00118
00119 if ( kmkernel->iCalIface().isEnabled() &&
00120 mFolder && mFolder->folderType() != KMFolderTypeImap ) {
00121 mContentsHBox = new TQHBoxLayout( 0, 0, 6, "mContentsHBox");
00122
00123 mContentsLabel = new TQLabel( privateLayoutWidget, "mContentsLabel" );
00124 mContentsLabel->setText( i18n( "Folder &contains:" ) );
00125 mContentsHBox->addWidget( mContentsLabel );
00126
00127 mContentsComboBox = new TQComboBox( false, privateLayoutWidget, "mContentsComboBox" );
00128 mContentsLabel->setBuddy( mContentsComboBox );
00129 TQWhatsThis::add( mContentsComboBox, i18n( "Select whether you want the new folder to be used for mail storage of for storage of groupware items such as tasks or notes. The default is mail. If you are unsure, leave this option as-is." ) );
00130 mContentsComboBox->insertItem( i18n( "Mail" ) );
00131 mContentsComboBox->insertItem( i18n( "Calendar" ) );
00132 mContentsComboBox->insertItem( i18n( "Contacts" ) );
00133 mContentsComboBox->insertItem( i18n( "Notes" ) );
00134 mContentsComboBox->insertItem( i18n( "Tasks" ) );
00135 mContentsComboBox->insertItem( i18n( "Journal" ) );
00136 if ( mFolder )
00137 mContentsComboBox->setCurrentItem( mFolder->storage()->contentsType() );
00138 mContentsHBox->addWidget( mContentsComboBox );
00139 mTopLevelLayout->addLayout( mContentsHBox );
00140 }
00141
00142 if ( mFolder &&
00143 ( mFolder->folderType() == KMFolderTypeImap ||
00144 mFolder->folderType() == KMFolderTypeCachedImap ) ) {
00145 bool rootFolder = false;
00146 TQStringList namespaces;
00147 if ( mFolder->folderType() == KMFolderTypeImap ) {
00148 ImapAccountBase* ai = static_cast<KMFolderImap*>(mFolder->storage())->account();
00149 if ( mFolder->storage() == ai->rootFolder() ) {
00150 rootFolder = true;
00151 namespaces = ai->namespaces()[ImapAccountBase::PersonalNS];
00152 }
00153 }
00154 if ( mFolder->folderType() == KMFolderTypeCachedImap ) {
00155 ImapAccountBase* ai = static_cast<KMFolderCachedImap*>(mFolder->storage())->account();
00156 if ( ai && mFolder->storage() == ai->rootFolder() ) {
00157 rootFolder = true;
00158 namespaces = ai->namespaces()[ImapAccountBase::PersonalNS];
00159 }
00160 }
00161 if ( rootFolder && namespaces.count() > 1 ) {
00162 mNamespacesHBox = new TQHBoxLayout( 0, 0, 6, "mNamespaceHBox");
00163
00164 mNamespacesLabel = new TQLabel( privateLayoutWidget, "mNamespacesLabel" );
00165 mNamespacesLabel->setText( i18n( "Namespace for &folder:" ) );
00166 mNamespacesHBox->addWidget( mNamespacesLabel );
00167
00168 mNamespacesComboBox = new TQComboBox( false, privateLayoutWidget, "mNamespacesComboBox" );
00169 mNamespacesLabel->setBuddy( mNamespacesComboBox );
00170 TQWhatsThis::add( mNamespacesComboBox, i18n( "Select the personal namespace the folder should be created in." ) );
00171 mNamespacesComboBox->insertStringList( namespaces );
00172 mNamespacesHBox->addWidget( mNamespacesComboBox );
00173 mTopLevelLayout->addLayout( mNamespacesHBox );
00174 } else {
00175 mNamespacesComboBox = 0;
00176 }
00177 }
00178
00179 resize( TQSize(282, 108).expandedTo(minimumSizeHint()) );
00180 clearWState( WState_Polished );
00181 slotFolderNameChanged( mNameLineEdit->text());
00182 }
00183
00184 void NewFolderDialog::slotFolderNameChanged( const TQString & _text)
00185 {
00186 enableButtonOK( !_text.isEmpty() );
00187 }
00188
00189 void NewFolderDialog::slotOk()
00190 {
00191 const TQString fldName = mNameLineEdit->text();
00192 if ( fldName.isEmpty() ) {
00193 KMessageBox::error( this, i18n("Please specify a name for the new folder."),
00194 i18n( "No Name Specified" ) );
00195 return;
00196 }
00197
00198 TQString msg;
00199 if ( mFolder && !mFolder->isValidName( fldName, msg ) ) {
00200 KMessageBox::error( this, msg );
00201 return;
00202 }
00203
00204
00205 KMFolderDir * selectedFolderDir = &(kmkernel->folderMgr()->dir());
00206
00207 if ( mFolder )
00208 selectedFolderDir = mFolder->createChildFolder();
00209
00210
00211 if( selectedFolderDir->hasNamedFolder( fldName )
00212 && ( !( mFolder
00213 && ( selectedFolderDir == mFolder->parent() )
00214 && ( mFolder->storage()->name() == fldName ) ) ) )
00215 {
00216 const TQString message = i18n( "<qt>Failed to create folder <b>%1</b>, folder already exists.</qt>" ).arg(fldName);
00217 KMessageBox::error( this, message );
00218 return;
00219 }
00220
00221
00222 const TQString message = i18n( "<qt>Failed to create folder <b>%1</b>."
00223 "</qt> " ).arg(fldName);
00224
00225 TQString namespaceName;
00226 if ( mNamespacesComboBox ) {
00227 namespaceName = mNamespacesComboBox->currentText();
00228 }
00229
00230 KMFolderType folderType = KMFolderTypeUnknown;
00231 if ( mFormatComboBox && mFormatComboBox->currentItem() == 1 )
00232 folderType = KMFolderTypeMaildir;
00233 else if ( mFormatComboBox )
00234 folderType = KMFolderTypeMbox;
00235
00236 KMFolder *newFolder = KMail::FolderUtil::createSubFolder( mFolder, selectedFolderDir, fldName,
00237 namespaceName, folderType );
00238 if ( !newFolder ) {
00239 KMessageBox::error( this, message );
00240 return;
00241 }
00242
00243
00244 if ( kmkernel->iCalIface().isEnabled() && mContentsComboBox ) {
00245 KMail::FolderContentsType type =
00246 static_cast<KMail::FolderContentsType>( mContentsComboBox->currentItem() );
00247 newFolder->storage()->setContentsType( type );
00248 newFolder->storage()->writeConfig();
00249 }
00250 KDialogBase::slotOk();
00251 }
00252
00253 #include "newfolderdialog.moc"