* 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. *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include "viewpropertiesdialog.h"
#include "viewpropsprogressinfo.h"
#include "dolphinview.h"
#include "dolphinsettings.h"
-#include "generalsettings.h"
+#include "dolphinsortfilterproxymodel.h"
+#include "dolphin_generalsettings.h"
#include "viewproperties.h"
+#include <assert.h>
+
+#include <kcomponentdata.h>
#include <klocale.h>
#include <kiconloader.h>
+#include <kio/netaccess.h>
#include <kmessagebox.h>
-#include <assert.h>
+#include <kstandarddirs.h>
+#include <kurl.h>
+#include <QButtonGroup>
#include <QCheckBox>
#include <QComboBox>
#include <QGridLayout>
m_sortOrder(0),
m_showPreview(0),
m_showHiddenFiles(0),
+ m_applyToCurrentFolder(0),
m_applyToSubFolders(0),
m_useAsDefault(0)
{
assert(dolphinView != 0);
+ const bool useGlobalViewProps = DolphinSettings::instance().generalSettings()->globalViewProps();
setCaption(i18n("View Properties"));
setButtons(KDialog::Ok | KDialog::Cancel | KDialog::Apply);
QVBoxLayout* topLayout = new QVBoxLayout();
// create 'Properties' group containing view mode, sorting, sort order and show hidden files
- QGroupBox* propsBox = new QGroupBox(i18n("Properties"), main);
+ QWidget* propsBox = main;
+ if (!useGlobalViewProps) {
+ propsBox = new QGroupBox(i18n("Properties"), main);
+ }
QLabel* viewModeLabel = new QLabel(i18n("View mode:"), propsBox);
m_viewMode = new QComboBox(propsBox);
m_sorting->addItem("By Name");
m_sorting->addItem("By Size");
m_sorting->addItem("By Date");
- int sortingIdx = 0;
- switch (m_viewProps->sorting()) {
- case DolphinView::SortByName: sortingIdx = 0; break;
- case DolphinView::SortBySize: sortingIdx = 1; break;
- case DolphinView::SortByDate: sortingIdx = 2; break;
- default: break;
- }
- m_sorting->setCurrentIndex(sortingIdx);
+ m_sorting->addItem("By Permissions");
+ m_sorting->addItem("By Owner");
+ m_sorting->addItem("By Group");
+ m_sorting->setCurrentIndex(m_viewProps->sorting());
QLabel* sortOrderLabel = new QLabel(i18n("Sort order:"), propsBox);
m_sortOrder = new QComboBox(propsBox);
// Only show the following settings if the view properties are remembered
// for each directory:
- if (!DolphinSettings::instance().generalSettings()->globalViewProps()) {
- m_applyToSubFolders = new QCheckBox(i18n("Apply changes to all sub folders"), main);
- m_useAsDefault = new QCheckBox(i18n("Use as default"), main);
- topLayout->addWidget(m_applyToSubFolders);
+ if (!useGlobalViewProps) {
+ // create 'Apply view properties to:' group
+ QGroupBox* applyBox = new QGroupBox(i18n("Apply view properties to:"), main);
+
+ m_applyToCurrentFolder = new QRadioButton(i18n("Current folder"), applyBox);
+ m_applyToCurrentFolder->setChecked(true);
+ m_applyToSubFolders = new QRadioButton(i18n("Current folder including all sub folders"), applyBox);
+ m_applyToAllFolders = new QRadioButton(i18n("All folders"),applyBox);
+
+ QButtonGroup* applyGroup = new QButtonGroup(this);
+ applyGroup->addButton(m_applyToCurrentFolder);
+ applyGroup->addButton(m_applyToSubFolders);
+ applyGroup->addButton(m_applyToAllFolders);
+
+ QVBoxLayout* applyBoxLayout = new QVBoxLayout(applyBox);
+ applyBoxLayout->addWidget(m_applyToCurrentFolder);
+ applyBoxLayout->addWidget(m_applyToSubFolders);
+ applyBoxLayout->addWidget(m_applyToAllFolders);
+
+ m_useAsDefault = new QCheckBox(i18n("Use as default for new folders"), main);
+
+ topLayout->addWidget(applyBox);
topLayout->addWidget(m_useAsDefault);
+ connect(m_applyToCurrentFolder, SIGNAL(clicked()),
+ this, SLOT(markAsDirty()));
connect(m_applyToSubFolders, SIGNAL(clicked()),
this, SLOT(markAsDirty()));
+ connect(m_applyToAllFolders, SIGNAL(clicked()),
+ this, SLOT(markAsDirty()));
connect(m_useAsDefault, SIGNAL(clicked()),
this, SLOT(markAsDirty()));
}
void ViewPropertiesDialog::slotSortingChanged(int index)
{
- DolphinView::Sorting sorting = DolphinView::SortByName;
- switch (index) {
- case 1: sorting = DolphinView::SortBySize; break;
- case 2: sorting = DolphinView::SortByDate; break;
- default: break;
- }
+ const DolphinView::Sorting sorting = DolphinSortFilterProxyModel::sortingForColumn(index);
m_viewProps->setSorting(sorting);
m_isDirty = true;
}
info->show();
}
+ const bool applyToAllFolders = m_isDirty &&
+ (m_applyToAllFolders != 0) &&
+ m_applyToAllFolders->isChecked();
+ if (applyToAllFolders) {
+ const QString text(i18n("The view properties of all folders will be changed. Do you want to continue?"));
+ if (KMessageBox::questionYesNo(this, text) == KMessageBox::No) {
+ return;
+ }
+
+ // Updating the global view properties time stamp in the general settings makes
+ // all existing viewproperties invalid, as they have a smaller time stamp.
+ GeneralSettings* settings = DolphinSettings::instance().generalSettings();
+ settings->setViewPropsTimestamp(QDateTime::currentDateTime());
+
+ // This is also a good chance to make a cleanup of all mirrored view properties:
+ const KUrl mirroredDir = ViewProperties::mirroredDirectory();
+ KIO::NetAccess::del(mirroredDir, this);
+ }
+
m_viewProps->save();
m_dolphinView->setMode(m_viewProps->viewMode());
m_isDirty = false;
- // TODO: handle m_useAsDefault setting
+ if (m_useAsDefault->isChecked()) {
+ // For directories where no .directory file is available, the .directory
+ // file stored for the global view properties is used as fallback. To update
+ // this file we temporary turn on the global view properties mode.
+ GeneralSettings* settings = DolphinSettings::instance().generalSettings();
+ assert(!settings->globalViewProps());
+
+ settings->setGlobalViewProps(true);
+ ViewProperties defaultProps(m_dolphinView->url());
+ defaultProps.setDirProperties(*m_viewProps);
+ defaultProps.save();
+ settings->setGlobalViewProps(false);
+ }
}
#include "viewpropertiesdialog.moc"