From b700071a54e9ce9e9097a704fb1d71dc2a795bfb Mon Sep 17 00:00:00 2001 From: am Date: Fri, 10 Jul 2009 18:35:14 +0000 Subject: -fixed display of windowTitle -focus FileView after startup and changing dir via directorybar -implemented createFolder -display action in statusBar() git-svn-id: file:///var/svn/repos2/shemov/trunk@383 f440f766-f032-0410-8965-dc7d17de2ca0 --- filesystemwidget.cpp | 10 ++++++---- filesystemwidget.h | 2 ++ fileview.cpp | 36 +++++++++++++++++++++++++++++++++++- fileview.h | 4 ++++ shemov.cpp | 23 +++++++++++++++++++---- shemov.h | 2 ++ shemoviconprovider.cpp | 4 ++-- 7 files changed, 70 insertions(+), 11 deletions(-) diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 365adaf..c424eaa 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -30,6 +30,7 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent) { mModel = new QDirModel; mModel->setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); mModel->setSorting(QDir::DirsFirst | QDir::IgnoreCase); + mModel->setReadOnly(false); SheMovIconProvider *p = new SheMovIconProvider; mModel->setIconProvider(p); @@ -90,6 +91,7 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent) { } mFileView->resizeColumnToContents(0); + setWindowTitle(startDir); QVBoxLayout *mainLayout = new QVBoxLayout; QSplitter *splitter = new QSplitter; @@ -108,7 +110,7 @@ void FilesystemWidget::directoryChanged(const QModelIndex &selected, const QMode return; } mDirEdit->setText(mModel->filePath(real)); - windowTitle(mModel->filePath(real)); + setWindowTitle(mModel->filePath(real)); QModelIndex oldSelected = mDirProxy->mapToSource(deselected); mFileView->selectionModel()->setCurrentIndex(mFileProxy->mapFromSource(oldSelected), QItemSelectionModel::NoUpdate); mFileView->setRootIndex(mFileProxy->mapFromSource(real)); @@ -123,10 +125,10 @@ void FilesystemWidget::directoryEdited(){ if(index.isValid()){ mDirView->setCurrentIndex(mDirProxy->mapFromSource(index)); } + mFileView->setFocus(Qt::ActiveWindowFocusReason); } void FilesystemWidget::fileViewActivated(const QModelIndex &idx){ - qDebug() << "trying to activate elem"; QModelIndex real = mFileProxy->mapToSource(idx); if(mModel->isDir(real)){ mDirView->setCurrentIndex(mDirProxy->mapFromSource(real)); @@ -157,7 +159,7 @@ void FilesystemWidget::parentDir(){ } void FilesystemWidget::setWindowTitle(const QString &dir){ - QString title = QString("%1 - %2").arg(qApp->applicationName(), dir); - emit windowTitle(title); + mWindowTitle = QString("%1 - %2").arg(qApp->applicationName()).arg(dir); + emit windowTitle(mWindowTitle); } diff --git a/filesystemwidget.h b/filesystemwidget.h index 916ca83..a5d89d7 100644 --- a/filesystemwidget.h +++ b/filesystemwidget.h @@ -24,6 +24,7 @@ class FilesystemWidget : public QWidget { FilesystemWidget(QWidget *parent = 0); ~FilesystemWidget() {}; FileView *fileView() { return mFileView; }; + const QString windowTitle() const { return mWindowTitle; }; signals: void windowTitle(const QString &); @@ -42,6 +43,7 @@ class FilesystemWidget : public QWidget { FilesystemDirProxy *mDirProxy; FilesystemFileProxy *mFileProxy; QLineEdit *mDirEdit; + QString mWindowTitle; }; #endif diff --git a/fileview.cpp b/fileview.cpp index 31c9aca..5995d60 100644 --- a/fileview.cpp +++ b/fileview.cpp @@ -22,6 +22,8 @@ FileView::FileView(QWidget *parent) : QTreeView(parent) { setRootIsDecorated(false); mMarkDialog = new MessageDialog(tr("Enter pattern to mark"), this); connect(mMarkDialog, SIGNAL(accepted()), this, SLOT(doMark())); + mCreateFolderDialog = new MessageDialog(tr("Enter folder name"), this); + connect(mCreateFolderDialog, SIGNAL(accepted()), this, SLOT(doCreateFolder())); } void FileView::markFiles(){ @@ -32,6 +34,10 @@ void FileView::unmarkFiles(){ selectionModel()->clearSelection(); } +void FileView::createFolder(){ + mCreateFolderDialog->show(); +} + void FileView::doMark(){ int rowCount = model()->rowCount(rootIndex()); QString sRegex = mMarkDialog->text(); @@ -39,6 +45,7 @@ void FileView::doMark(){ QRegExp re(sRegex); QSortFilterProxyModel *proxy = static_cast(model()); QDirModel *model = static_cast(proxy->sourceModel()); + bool match(false); for(int i = 0; i < rowCount; ++i){ QModelIndex cur = rootIndex().child(i, 0); QModelIndex sCur = proxy->mapToSource(cur); @@ -47,8 +54,35 @@ void FileView::doMark(){ } if(re.indexIn(cur.data().toString()) != -1){ selectionModel()->select(cur, QItemSelectionModel::Select | QItemSelectionModel::Rows); + match = true; } } + if(match){ + statusbarMessage(QString()); + }else{ + emit statusbarMessage(tr("No match found!")); + } + }else{ + emit statusbarMessage(tr("Nothing to mark!")); + } +} + +void FileView::doCreateFolder(){ + QString folderName = mCreateFolderDialog->text(); + if(folderName.isEmpty()){ + emit statusbarMessage(tr("No foldername given!")); + return; + } + QSortFilterProxyModel *proxy = static_cast(model()); + QDirModel *model = static_cast(proxy->sourceModel()); + QModelIndex sRoot = proxy->mapToSource(rootIndex()); + QModelIndex newIdx = model->mkdir(sRoot, folderName); + if(newIdx == QModelIndex()){ + QString msg = QString(tr("Failed to create %1/%2")).arg(model->filePath(sRoot)).arg(folderName); + emit statusbarMessage(msg); + }else{ + QString msg = QString(tr("Created folder %1")).arg(model->filePath(newIdx)); + emit statusbarMessage(msg); } } @@ -57,7 +91,7 @@ void FileView::contextMenuEvent(QContextMenuEvent *e){ int ctr(0); foreach(QAction *a, actions()){ contextMenu.addAction(a); - if(false){ + if((ctr == 1)){ contextMenu.addSeparator(); } ++ctr; diff --git a/fileview.h b/fileview.h index 242f0a7..1b3649e 100644 --- a/fileview.h +++ b/fileview.h @@ -25,13 +25,16 @@ class FileView : public QTreeView { signals: void upDir(); void enterPressed(const QModelIndex &); + void statusbarMessage(const QString &); public slots: void markFiles(); void unmarkFiles(); + void createFolder(); private slots: void doMark(); + void doCreateFolder(); protected: virtual void contextMenuEvent(QContextMenuEvent *e); @@ -40,6 +43,7 @@ class FileView : public QTreeView { private: MessageDialog *mMarkDialog; + MessageDialog *mCreateFolderDialog; }; #endif diff --git a/shemov.cpp b/shemov.cpp index a005f8d..b76e1d1 100644 --- a/shemov.cpp +++ b/shemov.cpp @@ -22,6 +22,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) { mFSWidget = new FilesystemWidget; + setWindowTitle(mFSWidget->windowTitle()); mTab = new QTabWidget; mTab->addTab(mFSWidget, tr("Filemanager")); @@ -35,12 +36,13 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla connect(mFSWidget->fileView()->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(updateSelectionCount(const QItemSelection &, const QItemSelection &))); connect(mFSWidget, SIGNAL(windowTitle(const QString &)), this, SLOT(newWindowTitle(const QString &))); + connect(mFSWidget->fileView(), SIGNAL(statusbarMessage(const QString &)), this, SLOT(statusbarMessage(const QString &))); QWidget *centralWidget = new QWidget; centralWidget->setLayout(mainLayout); setCentralWidget(centralWidget); - show(); - + showMaximized(); + mFSWidget->fileView()->setFocus(Qt::ActiveWindowFocusReason); } void SheMov::updateSelectionCount(const QItemSelection & /* sel */, const QItemSelection & /* prev */){ @@ -51,6 +53,10 @@ void SheMov::newWindowTitle(const QString &title){ setWindowTitle(title); } +void SheMov::statusbarMessage(const QString &message){ + statusBar()->showMessage(message); +} + void SheMov::createStatusbar(){ QLabel *selCountL = new QLabel(tr("Sel. Items")); mSelectedItems = new QLabel("0"); @@ -63,12 +69,18 @@ void SheMov::createActions(){ mQuitA = new QAction(tr("Quit"), this); mQuitA->setShortcut(tr("CTRL+q")); connect(mQuitA, SIGNAL(triggered()), qApp, SLOT(quit())); - mMarkFilesA = new QAction(tr("Mark files"), this); + mMarkFilesA = new QAction(tr("Select files..."), this); mMarkFilesA->setShortcut(tr("CTRL++")); + mFSWidget->fileView()->addAction(mMarkFilesA); connect(mMarkFilesA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(markFiles())); - mUnmarkFilesA = new QAction(tr("Unmark all files"), this); + mUnmarkFilesA = new QAction(tr("Deselect all files"), this); mUnmarkFilesA->setShortcut(tr("CTRL+-")); + mFSWidget->fileView()->addAction(mUnmarkFilesA); connect(mUnmarkFilesA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(unmarkFiles())); + mCreateFolderA = new QAction(tr("Create folder..."), this); + mCreateFolderA->setShortcut(tr("CTRL+n")); + connect(mCreateFolderA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(createFolder())); + mFSWidget->fileView()->addAction(mCreateFolderA); } void SheMov::createMenus(){ @@ -77,6 +89,9 @@ void SheMov::createMenus(){ QMenu *editMenu = new QMenu(tr("&Edit"), this); editMenu->addAction(mMarkFilesA); editMenu->addAction(mUnmarkFilesA); + editMenu->addSeparator(); + editMenu->addAction(mCreateFolderA); + editMenu->addSeparator(); menuBar()->addMenu(fileMenu); menuBar()->addMenu(editMenu); diff --git a/shemov.h b/shemov.h index cc54643..51c1934 100644 --- a/shemov.h +++ b/shemov.h @@ -25,6 +25,7 @@ class SheMov : public QMainWindow { private slots: void updateSelectionCount(const QItemSelection &sel, const QItemSelection &prev); void newWindowTitle(const QString &title); + void statusbarMessage(const QString &message); private: void createStatusbar(); @@ -38,6 +39,7 @@ class SheMov : public QMainWindow { QAction *mQuitA; QAction *mMarkFilesA; QAction *mUnmarkFilesA; + QAction *mCreateFolderA; //EndActions QTabWidget *mTab; diff --git a/shemoviconprovider.cpp b/shemoviconprovider.cpp index ed3febb..f0ea01e 100644 --- a/shemoviconprovider.cpp +++ b/shemoviconprovider.cpp @@ -14,9 +14,9 @@ SheMovIconProvider::SheMovIconProvider() {}; QIcon SheMovIconProvider::icon(const QFileInfo &info) const { - /*if(info.isDir()){ + if(info.isDir()){ return QIcon(":/dildo.png"); - }*/ + } QString type = Helper::mimeType(info.absoluteFilePath()); if(type.toLower().startsWith("video")){ return QIcon(":/movie.svg"); -- cgit v1.2.3-70-g09d2