| Summary: | Changing permissions of multiple selected files / directories. | ||
|---|---|---|---|
| Product: | [Unmaintained] kftpgrabber | Reporter: | Christoph Tavan <chefturner> |
| Component: | general | Assignee: | Jernej Kos <kostko> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Gentoo Packages | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Christoph Tavan
2007-02-10 19:24:41 UTC
SVN commit 632365 by kostko:
Implemented properties for multiple selected items.
BUG: 141498
M +11 -6 actions.cpp
M +113 -74 propsplugin.cpp
M +9 -12 propsplugin.h
--- trunk/extragear/network/kftpgrabber/src/widgets/browser/actions.cpp #632364:632365
@@ -423,15 +423,20 @@
}
// Show the dialog
+ KPropertiesDialog *propsDialog;
+
if (item->isLocalFile()) {
- KPropertiesDialog *propsDialog = new KPropertiesDialog(item);
- propsDialog->exec();
+ if (selectedItems->count() == 0)
+ propsDialog = new KPropertiesDialog(item);
+ else
+ propsDialog = new KPropertiesDialog(*selectedItems);
} else {
- KPropertiesDialog *propsDialog = new KPropertiesDialog(item->name());
- propsDialog->insertPlugin(new KFTPWidgets::Browser::PropsPlugin(propsDialog, item));
- propsDialog->insertPlugin(new KFTPWidgets::Browser::PermissionsPropsPlugin(propsDialog, item, m_view->getSession()));
- propsDialog->exec();
+ propsDialog = new KPropertiesDialog(item->name());
+ propsDialog->insertPlugin(new KFTPWidgets::Browser::PropsPlugin(propsDialog, *selectedItems));
+ propsDialog->insertPlugin(new KFTPWidgets::Browser::PermissionsPropsPlugin(propsDialog, *selectedItems, m_view->getSession()));
}
+
+ propsDialog->exec();
}
void Actions::addPriorityItems(int priority)
--- trunk/extragear/network/kftpgrabber/src/widgets/browser/propsplugin.cpp #632364:632365
@@ -52,47 +52,73 @@
namespace Browser {
-PropsPlugin::PropsPlugin(KPropertiesDialog *_props, KFileItem *item)
- : KPropsDlgPlugin(_props),
- m_item(item)
+PropsPlugin::PropsPlugin(KPropertiesDialog *props, KFileItemList items)
+ : KPropsDlgPlugin(props)
{
QFrame *frame = properties->addPage(i18n("&General"));
frame->setMinimumWidth(320);
frame->setMinimumHeight(300);
+ // Some differences between a single file and multiple files
+ KFileItem *item = items.at(0);
KURL fileUrl = item->url();
+ filesize_t fileSize = item->size();
+ QString nameText;
QString iconText;
QString mimeComment;
- bool isDir = false;
- // Guess file type
- if (item->isDir()) {
- iconText = "folder";
- isDir = true;
- mimeComment = i18n("Remote folder");
- } else if (item->isLink()) {
- // We can't know if the sym-linked file is realy a directory, but most of
- // the time it is. So if we can't determine the MIME type, set it to directory.
- KMimeType::Ptr mimeType = KMimeType::findByURL(fileUrl, 0, false, true);
+ if (items.count() == 1) {
+ bool isDir = false;
- if (mimeType->name() == KMimeType::defaultMimeType()) {
+ // Guess file type
+ if (item->isDir()) {
iconText = "folder";
isDir = true;
mimeComment = i18n("Remote folder");
+ } else if (item->isLink()) {
+ // We can't know if the sym-linked file is realy a directory, but most of
+ // the time it is. So if we can't determine the MIME type, set it to directory.
+ KMimeType::Ptr mimeType = KMimeType::findByURL(fileUrl, 0, false, true);
+
+ if (mimeType->name() == KMimeType::defaultMimeType()) {
+ iconText = "folder";
+ isDir = true;
+ mimeComment = i18n("Remote folder");
+ } else {
+ iconText = mimeType->icon(QString::null, false);
+ mimeComment = mimeType->comment();
+ }
} else {
+ KMimeType::Ptr mimeType = KMimeType::findByURL(fileUrl, 0, false, true);
iconText = mimeType->icon(QString::null, false);
mimeComment = mimeType->comment();
}
+
+ if (mimeComment.isEmpty()) {
+ mimeComment = i18n("Unknown");
+ }
+
+ nameText = item->name();
} else {
- KMimeType::Ptr mimeType = KMimeType::findByURL(fileUrl, 0, false, true);
- iconText = mimeType->icon(QString::null, false);
- mimeComment = mimeType->comment();
+ // Count files and folders selected
+ int countFiles = 0;
+ int countFolders = 0;
+ fileSize = 0;
+
+ KFileItemListIterator i(items);
+ for (; i.current(); ++i) {
+ if ((*i)->isDir())
+ countFolders++;
+ else
+ countFiles++;
+
+ fileSize += (*i)->size();
+ }
+
+ iconText = "kmultiple";
+ nameText = KIO::itemsSummaryString(countFiles + countFolders, countFiles, countFolders, 0, false);
}
- if (mimeComment.isEmpty()) {
- mimeComment = i18n("Unknown");
- }
-
QVBoxLayout *vbl = new QVBoxLayout(frame, 0, KDialog::spacingHint(), "vbl");
QGridLayout *grid = new QGridLayout(0, 3);
grid->setColStretch(0, 0);
@@ -101,7 +127,7 @@
grid->addColSpacing(1, KDialog::spacingHint());
vbl->addLayout(grid);
- // BEGIN first part
+ // Display file name and icon
QLabel *iconLabel = new QLabel(frame);
int bsize = 66 + 2 * iconLabel->style().pixelMetric(QStyle::PM_ButtonMargin);
iconLabel->setFixedSize(bsize, bsize);
@@ -109,58 +135,58 @@
grid->addWidget(iconLabel, 0, 0, AlignLeft);
QLabel *nameLabel = new QLabel(frame);
- nameLabel->setText(item->name());
+ nameLabel->setText(nameText);
grid->addWidget(nameLabel, 0, 2);
KSeparator *sep = new KSeparator(KSeparator::HLine, frame);
grid->addMultiCellWidget(sep, 2, 2, 0, 2);
- // END first part
- // BEGIN second part
- QLabel *l = new QLabel(i18n("Type:"), frame);
- grid->addWidget(l, 3, 0);
+ // Display file information
+ QLabel *l;
+ int currentRow = 3;
- l = new QLabel(mimeComment, frame);
- grid->addWidget(l, 3, 2);
+ if (items.count() == 1) {
+ l = new QLabel(i18n("Type:"), frame);
+ grid->addWidget(l, currentRow, 0);
+
+ l = new QLabel(mimeComment, frame);
+ grid->addWidget(l, currentRow++, 2);
+ }
l = new QLabel(i18n("Location:"), frame);
- grid->addWidget(l, 4, 0);
+ grid->addWidget(l, currentRow, 0);
l = new KSqueezedTextLabel(frame);
l->setText(fileUrl.directory());
- grid->addWidget(l, 4, 2);
+ grid->addWidget(l, currentRow++, 2);
l = new QLabel(i18n("Size:"), frame);
- grid->addWidget(l, 5, 0);
+ grid->addWidget(l, currentRow, 0);
l = new QLabel(frame);
- grid->addWidget(l, 5, 2);
+ grid->addWidget(l, currentRow++, 2);
- l->setText(QString::fromLatin1("%1 (%2)").arg(KIO::convertSize(item->size()))
- .arg(KGlobal::locale()->formatNumber(item->size(), 0)));
-
+ l->setText(QString::fromLatin1("%1 (%2)").arg(KIO::convertSize(fileSize))
+ .arg(KGlobal::locale()->formatNumber(fileSize, 0)));
+
sep = new KSeparator(KSeparator::HLine, frame);
- grid->addMultiCellWidget(sep, 6, 6, 0, 2);
- // END second part
+ grid->addMultiCellWidget(sep, currentRow, currentRow, 0, 2);
+ currentRow++;
- // BEGIN third part
- l = new QLabel(i18n("Created:"), frame);
- grid->addWidget(l, 7, 0);
+ // Display modification time
+ if (items.count() == 1) {
+ l = new QLabel(i18n("Created:"), frame);
+ grid->addWidget(l, currentRow, 0);
+
+ QDateTime dt;
+ dt.setTime_t(item->time(KIO::UDS_MODIFICATION_TIME));
+ l = new QLabel(KGlobal::locale()->formatDateTime(dt), frame);
+ grid->addWidget(l, currentRow++, 2);
+ }
- QDateTime dt;
- dt.setTime_t(item->time(KIO::UDS_MODIFICATION_TIME));
- l = new QLabel(KGlobal::locale()->formatDateTime(dt), frame);
- grid->addWidget(l, 7, 2);
- // END third part
-
vbl->addStretch(1);
}
-
-PropsPlugin::~PropsPlugin()
-{
-}
-
void PropsPlugin::applyChanges()
{
}
@@ -171,9 +197,9 @@
{S_IROTH, S_IWOTH, S_IXOTH, S_ISVTX}
};
-PermissionsPropsPlugin::PermissionsPropsPlugin(KPropertiesDialog *_props, KFileItem *item, KFTPSession::Session *session)
+PermissionsPropsPlugin::PermissionsPropsPlugin(KPropertiesDialog *_props, KFileItemList items, KFTPSession::Session *session)
: KPropsDlgPlugin(_props),
- m_item(item),
+ m_items(items),
m_session(session),
m_cbRecursive(0)
{
@@ -181,19 +207,32 @@
frame->setMinimumWidth(320);
frame->setMinimumHeight(300);
+ // Some differences between a single file and multiple files
+ KFileItem *item = items.at(0);
KURL fileUrl = item->url();
bool isDir = false;
- // Guess file type
- if (item->isDir()) {
- isDir = true;
- } else if (item->isLink()) {
- // We can't know if the sym-linked file is realy a directory, but most of
- // the time it is. So if we can't determine the MIME type, set it to directory.
- KMimeType::Ptr mimeType = KMimeType::findByURL(fileUrl, 0, false, true);
-
- if (mimeType->name() == KMimeType::defaultMimeType())
+ if (items.count() == 1) {
+ // Guess file type
+ if (item->isDir()) {
isDir = true;
+ } else if (item->isLink()) {
+ // We can't know if the sym-linked file is realy a directory, but most of
+ // the time it is. So if we can't determine the MIME type, set it to directory.
+ KMimeType::Ptr mimeType = KMimeType::findByURL(fileUrl, 0, false, true);
+
+ if (mimeType->name() == KMimeType::defaultMimeType())
+ isDir = true;
+ }
+ } else {
+ // Check for directories
+ KFileItemListIterator i(items);
+ for (; i.current(); ++i) {
+ if ((*i)->isDir()) {
+ isDir = true;
+ break;
+ }
+ }
}
QBoxLayout *box = new QVBoxLayout(frame, 0, KDialog::spacingHint());
@@ -253,7 +292,7 @@
mode_t permissions = item->permissions();
- // BEGIN checkboxes
+ // Display checkboxes
for (int row = 0; row < 3; ++row) {
for (int col = 0; col < 4; ++col) {
QCheckBox *cb = new QCheckBox(gb);
@@ -264,21 +303,17 @@
gl->addWidget(cb, row + 2, col + 1);
}
}
- // END checkboxes
+
gl->setColStretch(6, 10);
box->addStretch(10);
- if (item->isDir()) {
+ if (isDir) {
m_cbRecursive = new QCheckBox(i18n("Apply changes to all subfolders and their contents"), frame);
connect(m_cbRecursive, SIGNAL(clicked()), this, SLOT(changed()));
box->addWidget(m_cbRecursive);
}
}
-PermissionsPropsPlugin::~PermissionsPropsPlugin()
-{
-}
-
void PermissionsPropsPlugin::applyChanges()
{
// Generate new permissions =)
@@ -307,11 +342,15 @@
// Actually do a chmod
int mode = newPerms[0] * 1000 + newPerms[1] * 100 + newPerms[2] * 10 + newPerms[3];
+ bool recursive = m_cbRecursive && m_cbRecursive->isChecked();
- if (m_cbRecursive && m_cbRecursive->isChecked())
- m_session->getClient()->chmod(m_item->url(), mode, true);
- else
- m_session->getClient()->chmod(m_item->url(), mode);
+ KFileItemListIterator i(m_items);
+ for (; i.current(); ++i) {
+ if ((*i)->isDir())
+ m_session->getClient()->chmod((*i)->url(), mode, recursive);
+ else
+ m_session->getClient()->chmod((*i)->url(), mode);
+ }
}
}
--- trunk/extragear/network/kftpgrabber/src/widgets/browser/propsplugin.h #632364:632365
@@ -54,7 +54,8 @@
namespace Browser {
/**
- * This is a plugin for displaying remote file properties using standard KDE file properties dialog.
+ * This is a plugin for displaying remote file properties using the
+ * standard KDE file properties dialog.
*
* @author Jernej Kos
*/
@@ -62,17 +63,14 @@
{
Q_OBJECT
public:
- PropsPlugin(KPropertiesDialog *_props, KFileItem *item);
- ~PropsPlugin();
+ PropsPlugin(KPropertiesDialog *props, KFileItemList items);
- virtual void applyChanges();
-private:
- KFileItem *m_item;
+ void applyChanges();
};
/**
- * This is a plugin for displaying remote file permissions and their changing using the standard KDE
- * file properties dialog.
+ * This is a plugin for displaying remote file permissions and their
+ * changing using the standard KDE file properties dialog.
*
* @author Jernej Kos
*/
@@ -80,12 +78,11 @@
{
Q_OBJECT
public:
- PermissionsPropsPlugin(KPropertiesDialog *_props, KFileItem *item, KFTPSession::Session *session);
- ~PermissionsPropsPlugin();
+ PermissionsPropsPlugin(KPropertiesDialog *props, KFileItemList items, KFTPSession::Session *session);
- virtual void applyChanges();
+ void applyChanges();
private:
- KFileItem *m_item;
+ KFileItemList m_items;
KFTPSession::Session *m_session;
static mode_t fperm[3][4];
|