renamesingledialog.cpp \
renamemultidialog.cpp \
operationdialog.cpp \
- irenamedialog.cpp \
renameworker.cpp \
deleteworker.cpp \
overwritedialog.cpp \
copymoveworker.cpp \
sortdialog.cpp \
- filetablemodel.cpp \
- history.cpp \
historydialog.cpp \
preferencedialog.cpp \
- colorsamplemodel.cpp \
simpletextview.cpp \
- searchbox.cpp \
folderview.cpp \
- anyview.cpp \
folderpanel.cpp \
bookmarkdialog.cpp \
simpleimageview.cpp \
- abstractworker.cpp
+ abstractworker.cpp \
+ foldermodel.cpp \
+ panel.cpp \
+ preferences.cpp \
+ global.cpp \
+ win32.cpp \
+ thumbnailview.cpp \
+ thumbnaildelegate.cpp
HEADERS += mainwindow.h \
renamesingledialog.h \
renamemultidialog.h \
operationdialog.h \
- common.h \
- irenamedialog.h \
renameworker.h \
deleteworker.h \
overwritedialog.h \
copymoveworker.h \
sortdialog.h \
- filetablemodel.h \
- history.h \
historydialog.h \
preferencedialog.h \
- colorsamplemodel.h \
simpletextview.h \
- searchbox.h \
folderview.h \
version.h \
- anyview.h \
folderpanel.h \
bookmarkdialog.h \
simpleimageview.h \
- abstractworker.h
+ abstractworker.h \
+ foldermodel.h \
+ panel.h \
+ preferences.h \
+ global.h \
+ win32.h \
+ abstractview.h \
+ abstractrenamedialog.h \
+ thumbnailview.h \
+ thumbnaildelegate.h
FORMS += mainwindow.ui \
renamesingledialog.ui \
sortdialog.ui \
historydialog.ui \
preferencedialog.ui \
- anyview.ui \
folderpanel.ui \
- bookmarkdialog.ui
+ bookmarkdialog.ui \
+ panel.ui
RESOURCES += \
resource.qrc
Gefu is an Experimental File Utility.
+#### Ver0.21
+ * 設定ダイアログを刷新。
+ * iniファイルのパスも変更したため、設定が初期化されます。
+ * 画像ビューアの画質を向上。
+ * アイコンを変更。
+ * フォルダビューの列ヘッダーを削除。
+
#### 2014/08/31 Ver0.20
* ウィンドウ自体が非アクティブになったとき、両パネルとも暗くなっていたのを修正。
* ドロップ時、コピー・移動・キャンセルのポップアップメニューを出すようにした。
===============================================================================\r
Gefu(げふぅ) - Gefu is an Experimental File Utility - \r
- Version 0.20\r
+ Version 0.21\r
===============================================================================\r
2014/08/31 @miyabi_satoh\r
\r
- 配布・転載を行う場合は @miyabi_satoh までご連絡ください。\r
特に利益を生じる無断配布・無断転載は固く禁じます。\r
- メニューおよびツールバーのアイコンには、以下を使用しています\r
- - Tango Icon Library http://tango.freedesktop.org/Tango_Icon_Library\r
- - Utilities-file-archiver.png http://chakraos.org/wiki/index.php?title=File:Utilities-file-archiver.png\r
- - Cats Icons 2 http://www.softicons.com/system-icons/cats-icons-2-by-mcdo-design\r
+ - Cats Icons 2 http://www.softicons.com/system-icons/cats-icons-2-by-mcdo-design\r
+ - NuoveXT Icons by Saki http://www.iconarchive.com/show/nuoveXT-icons-by-saki.html\r
+ - 32x32 Free Design Icons http://www.small-icons.com/packs/32x32-free-design-icons.htm\r
+\r
\r
◇ 連絡先 ◇\r
Web: https://sourceforge.jp/projects/gefu/\r
--- /dev/null
+#ifndef ABSTRACTRENAMEDIALOG_H\r
+#define ABSTRACTRENAMEDIALOG_H\r
+\r
+#include "global.h"\r
+\r
+#include <QDialog>\r
+#include <QDir>\r
+\r
+class AbstractRenameDialog : public QDialog\r
+{\r
+ Q_OBJECT\r
+public:\r
+ explicit AbstractRenameDialog(QWidget *parent = 0) :\r
+ QDialog(parent)\r
+ {\r
+ }\r
+\r
+ const StringMap& renameMap() const\r
+ {\r
+ return m_RenameMap;\r
+ }\r
+\r
+ void setWorkingDirectory(const QString &path)\r
+ {\r
+ m_dir.setPath(path);\r
+ }\r
+\r
+ virtual void setNames(const QFileInfoList &names) = 0;\r
+\r
+signals:\r
+\r
+public slots:\r
+\r
+protected:\r
+ QDir m_dir;\r
+ StringMap m_RenameMap;\r
+};\r
+\r
+#endif // ABSTRACTRENAMEDIALOG_H\r
--- /dev/null
+#ifndef ABSTRACTVIEW_H
+#define ABSTRACTVIEW_H
+
+class AbstractView
+{
+public:
+ AbstractView() {}
+
+ virtual void scaleUp() = 0;
+ virtual void scaleDown() = 0;
+};
+
+#endif // ABSTRACTVIEW_H
+++ /dev/null
-#include "common.h"
-#include "folderview.h"
-#include "anyview.h"
-#include "ui_anyview.h"
-
-#include <QDebug>
-#include <QSettings>
-
-AnyView::AnyView(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::AnyView)
-{
- ui->setupUi(this);
-
- // 初期状態では全て非表示
- ui->folderPanel->setVisible(false);
- ui->graphicsView->setVisible(false);
- ui->textView->setVisible(false);
-}
-
-AnyView::~AnyView()
-{
- delete ui;
-}
-
-void AnyView::changeView(int viewType)
-{
- qDebug() << "AnyView::changeView();" << viewType;
-
- // 一度すべてを非表示にする
- ui->folderPanel->setVisible(false);
- ui->graphicsView->setVisible(false);
- ui->textView->setVisible(false);
-
- QWidget *w;
- switch (viewType) {
- case AnyView::ViewFolder: w = ui->folderPanel; break;
- case AnyView::ViewImage: w = ui->graphicsView; break;
- case AnyView::ViewText: w = ui->textView; break;
- default: Q_ASSERT(false); w = NULL; break;
- }
-
- this->setVisible(true);
- w->setVisible(true);
-}
-
-bool AnyView::setViewItem(const QFileInfo &info)
-{
- // フォルダ
- if (info.isDir()) {
- changeView(ViewFolder);
- ui->folderPanel->folderView()->setPath(info.absoluteFilePath(), true);
- return true;
- }
-
- // 画像ファイル
- changeView(ViewImage);
- if (ui->graphicsView->setSource(info.absoluteFilePath())) {
- return true;
- }
-
- QSettings settings;
- bool isBinary = false;
- if (!settings.value(IniKey_ViewerForceOpen).toBool()) {
- QStringList list = settings.value(IniKey_ViewerIgnoreExt).toString().split(",");
- foreach (const QString &ext, list) {
- if (ext.toLower() == info.suffix().toLower()) {
- isBinary = true;
- break;
- }
- }
- }
-
- if (!isBinary) {
- changeView(ViewText);
- QFile file(info.absoluteFilePath());
- if (file.open(QIODevice::ReadOnly)) {
- ui->textView->setSource(file.readAll());
- file.close();
- return true;
- }
- }
-
- changeView(ViewText);
- ui->textView->setSource("");
- return false;
-}
-
-FolderPanel *AnyView::folderPanel() const
-{
- return ui->folderPanel;
-}
-
-SimpleImageView *AnyView::imageView() const
-{
- return ui->graphicsView;
-}
-
-SimpleTextView *AnyView::textView() const
-{
- return ui->textView;
-}
-
-QWidget *AnyView::visibleView() const
-{
- if (ui->folderPanel->isVisible()) {
- return ui->folderPanel->folderView();
- }
- if (ui->graphicsView->isVisible()) {
- return ui->graphicsView;
- }
- if (ui->textView->isVisible()) {
- return ui->textView;
- }
- return NULL;
-}
-
-void AnyView::focusInEvent(QFocusEvent *)
-{
- qDebug() << "AnyView::focusInEvent();";
-
- if (ui->folderPanel->isVisible()) {
- ui->folderPanel->folderView()->setFocus();
- }
- else if (ui->graphicsView->isVisible()) {
- ui->graphicsView->setFocus();
- }
- else {
- Q_ASSERT(ui->textView->isVisible());
- ui->textView->setFocus();
- }
-}
+++ /dev/null
-#ifndef ANYVIEW_H
-#define ANYVIEW_H
-
-#include <QFileInfo>
-#include <QWidget>
-class FolderPanel;
-class SimpleTextView;
-class SimpleImageView;
-
-namespace Ui {
-class AnyView;
-}
-
-class AnyView : public QWidget
-{
- Q_OBJECT
-
-public:
- enum {
- ViewFolder = 1,
- ViewText = 2,
- ViewImage = 3,
- };
-
- explicit AnyView(QWidget *parent = 0);
- ~AnyView();
-
- // action
- void changeView(int viewType);
- bool setViewItem(const QFileInfo &info);
-
- // getter
- FolderPanel* folderPanel() const;
- SimpleImageView* imageView() const;
- SimpleTextView* textView() const;
- QWidget* visibleView() const;
-
-private:
- Ui::AnyView *ui;
-
- // QWidget interface
-protected:
- void focusInEvent(QFocusEvent *);
-};
-
-#endif // ANYVIEW_H
-#include "common.h"
+#include "preferences.h"
#include "bookmarkdialog.h"
#include "ui_bookmarkdialog.h"
#include <QFileDialog>
#include <QFileInfo>
#include <QMessageBox>
-#include <QSettings>
BookmarkDialog::BookmarkDialog(QWidget *parent) :
QDialog(parent),
setWindowTitle(tr("ブックマークを開く"));
}
- QSettings settings;
- for (int i = 0; ; i++) {
- QString name = settings.value(IniKey_BookmarkEntryName(i), "").toString();
+ Preferences prefs(this);
+ for (int i = 1; ; i++) {
+ QString name = prefs.getBookmarkEntry(i);
if (name.isEmpty()) {
break;
}
- QString path = settings.value(IniKey_BookmarkEntryPath(i)).toString();
- insertData(i, name, path);
+ QString path = prefs.getBookmarkPath(i);
+ insertData(i - 1, name, path);
}
ui->tableWidget->resizeColumnsToContents();
ui->tableWidget->resizeRowsToContents();
+ ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget->setCurrentCell(0, 0);
}
void BookmarkDialog::accept()
{
- QSettings settings;
+ Preferences prefs(this);
+ prefs.clearBookmark();
+
QModelIndex index;
int i;
for (i = 0; i < ui->tableWidget->rowCount(); i++) {
index = ui->tableWidget->model()->index(i, 1);
QString path = ui->tableWidget->model()->data(index).toString();
- settings.setValue(IniKey_BookmarkEntryName(i), name);
- settings.setValue(IniKey_BookmarkEntryPath(i), path);
- }
- while (!settings.value(IniKey_BookmarkEntryName(i), "").toString().isEmpty()) {
- settings.remove(IniKey_BookmarkEntryName(i));
- settings.remove(IniKey_BookmarkEntryPath(i));
- i++;
+ prefs.addBookmark(name, path);
}
QDialog::accept();
+++ /dev/null
-#include "colorsamplemodel.h"
-
-#include <QBrush>
-
-ColorSampleModel::ColorSampleModel(QObject *parent) :
- QAbstractTableModel(parent)
-{
-}
-
-void ColorSampleModel::setFont(const QFont &font)
-{
- m_font = font;
-}
-
-int ColorSampleModel::rowCount(const QModelIndex &parent) const
-{
- Q_UNUSED(parent);
- return 5;
-}
-
-int ColorSampleModel::columnCount(const QModelIndex &parent) const
-{
- Q_UNUSED(parent);
- return 3;
-}
-
-QVariant ColorSampleModel::data(const QModelIndex &index, int role) const
-{
- if (!index.isValid()) {
- return QVariant();
- }
-
- const QString strText[5][3] = {
- { tr("通常"), tr("<DIR>"), tr("12/34/56 78:90") },
- { tr("マーク"), tr("123B"), tr("12/34/56 78:90") },
- { tr("システム"), tr("456KB"), tr("12/34/56 78:90") },
- { tr("隠し属性"), tr("789MB"), tr("12/34/56 78:90") },
- { tr("読取専用"), tr("10.2GB"), tr("12/34/56 78:90") }
- };
-
- switch (role) {
- case Qt::DisplayRole:
- return strText[index.row()][index.column()];
-
- case Qt::FontRole:
- return m_font;
- break;
-
- case Qt::BackgroundRole:
- if (index.row() == 1) {
- return QBrush(m_colorMap->value("clrBgMark"));
- }
- else {
- return QBrush(m_colorMap->value("clrBgNormal"));
- }
- break;
-
- case Qt::ForegroundRole:
- switch (index.row()) {
- case 0: return QBrush(m_colorMap->value("clrFgNormal"));
- case 1: return QBrush(m_colorMap->value("clrFgMark"));
- case 2: return QBrush(m_colorMap->value("clrFgSystem"));
- case 3: return QBrush(m_colorMap->value("clrFgHidden"));
- case 4: return QBrush(m_colorMap->value("clrFgReadonly"));
- break;
- }
- }
-
- return QVariant();
-}
+++ /dev/null
-#ifndef COLORSAMPLEMODEL_H
-#define COLORSAMPLEMODEL_H
-
-#include <QAbstractTableModel>
-#include <QFont>
-#include <QMap>
-
-typedef QMap<QString, QColor> ColorMap;
-
-class ColorSampleModel : public QAbstractTableModel
-{
- Q_OBJECT
-public:
- explicit ColorSampleModel(QObject *parent = 0);
-
- const QFont& font() { return m_font; }
- void setFont(const QFont &font);
-
- void setColorMap(ColorMap *colorMap) {
- m_colorMap = colorMap;
- }
-
- void update() {
- beginResetModel();
- endResetModel();
- }
-
-private:
- ColorMap *m_colorMap;
- QFont m_font;
-
-signals:
-
-public slots:
-
-
- // QAbstractItemModel interface
-public:
- int rowCount(const QModelIndex &parent) const;
- int columnCount(const QModelIndex &parent) const;
- QVariant data(const QModelIndex &index, int role) const;
-};
-
-
-#endif // COLORSAMPLEMODEL_H
+++ /dev/null
-#ifndef COMMON_H\r
-#define COMMON_H\r
-\r
-#include <QMap>\r
-typedef QMap<QString, QString> StringMap;\r
-\r
-class QObject;\r
-class QKeyEvent;\r
-extern QString FilesizeToString(quint64 size);\r
-extern QString ViewerIgnoreExt();\r
-extern QString KeyEventToSequence(const QKeyEvent *event);\r
-extern bool IsKeyUpDown(const QKeyEvent *event);\r
-extern bool ProcessShortcut(const QString &ksq, const QObject *object);\r
-extern void Sleep(int msec);\r
-\r
-#define slash QString("/")\r
-#define QQ(x) ("\"" + QString(x) + "\"")\r
-\r
-#define IniKey_ShowHidden "Common/ShowHidden"\r
-#define IniKey_ShowSystem "Common/ShowSystem"\r
-#define IniKey_DefaultOnCopy "Common/DefaultCopyMode"\r
-#define IniKey_MoveAfterCreateFolder "Common/MoveAfterFolderCreation"\r
-#define IniKey_OpenAfterCreateFile "Common/OpenAfterFileCreation"\r
-#define IniKey_CheckUpdates "Common/CheckUpdates"\r
-#define IniKey_BookmarkEntryName(x) QString("Bookmark/Name%1").arg(x)\r
-#define IniKey_BookmarkEntryPath(x) QString("Bookmark/Path%1").arg(x)\r
-#define IniKey_BootSizeSpec "BootAndExit/SizeSpec"\r
-#define IniKey_BootSizeRel "BootAndExit/SizeRel"\r
-#define IniKey_BootSizeAbs "BootAndExit/SizeAbs"\r
-#define IniKey_BootPosSpec "BootAndExit/PosSpec"\r
-#define IniKey_BootPosRel "BootAndExit/PosRel"\r
-#define IniKey_BootPosAbs "BootAndExit/PosAbs"\r
-#define IniKey_ResetOnBoot "BootAndExit/Reset"\r
-#define IniKey_BoxColorFg "Appearance/BoxColorFg"\r
-#define IniKey_BoxColorBg "Appearance/BoxColorBg"\r
-#define IniKey_BoxFont "Appearance/BoxFont"\r
-#define IniKey_ViewFont "Appearance/ViewFont"\r
-#define IniKey_ViewColorBgNormal "Appearance/ViewColorBgNormal"\r
-#define IniKey_ViewColorBgMark "Appearance/ViewColorBgMark"\r
-#define IniKey_ViewColorFgNormal "Appearance/ViewColorFgNormal"\r
-#define IniKey_ViewColorFgMark "Appearance/ViewColorFgMark"\r
-#define IniKey_ViewColorFgSystem "Appearance/ViewColorFgSystem"\r
-#define IniKey_ViewColorFgHidden "Appearance/ViewColorFgHidden"\r
-#define IniKey_ViewColorFgReadonly "Appearance/ViewColorFgReadonly"\r
-#define IniKey_Darkness "Appearance/Darkness"\r
-#define IniKey_ConfirmExit "Confirm/Exit"\r
-#define IniKey_ConfirmCopy "Confirm/Copy"\r
-#define IniKey_ConfirmMove "Confirm/Move"\r
-#define IniKey_ConfirmDelete "Confirm/Delete"\r
-#define IniKey_ConfirmRename "Confirm/Rename"\r
-#define IniKey_AutoCloseCopy "AutoClose/Copy"\r
-#define IniKey_AutoCloseMove "AutoClose/Move"\r
-#define IniKey_AutoCloseDelete "AutoClose/Delete"\r
-#define IniKey_AutoCloseRename "AutoClose/Rename"\r
-#define IniKey_PathEditor "Path/Editor"\r
-#define IniKey_PathTerminal "Path/Terminal"\r
-#define IniKey_PathArchiver "Path/Archiver"\r
-#define IniKey_InflateOptions "Path/InflateOptions"\r
-#define IniKey_DeflateOptions "Path/DeflateOptions"\r
-#define IniKey_ViewerFont "Viewer/Font"\r
-#define IniKey_ViewerColorBg "Viewer/ColorBg"\r
-#define IniKey_ViewerColorFg "Viewer/ColorFg"\r
-#define IniKey_ViewerInherit "Viewer/Inherit"\r
-#define IniKey_ViewerForceOpen "Viewer/ForceOpen"\r
-#define IniKey_ViewerIgnoreExt "Viewer/IgnoreExt"\r
-#define IniKey_WindowGeometry "Window/Geometry"\r
-#define iniKey_WindowState "Window/State"\r
-// 以下は[Left/Right]セクションのキー\r
-#define IniKey_Dir "dir"\r
-#define IniKey_SortBy "SortBy"\r
-#define IniKey_OrderBy "OrderBy"\r
-#define IniKey_PutDirs "PutDirs"\r
-#define IniKey_IgnoreCase "IgnoreCase"\r
-\r
-#define SortByName QDir::Name\r
-#define SortByDate QDir::Time\r
-#define SortBySize QDir::Size\r
-#define SortByType QDir::Type\r
-\r
-#define OrderByAsc 0\r
-#define OrderByDesc QDir::Reversed\r
-\r
-#define PutDirsFirst QDir::DirsFirst\r
-#define PutDirsLast QDir::DirsLast\r
-#define PutDirsDefault 0\r
-\r
-#endif // COMMON_H\r
#ifndef COPYWORKER_H\r
#define COPYWORKER_H\r
\r
-#include "common.h"\r
#include "abstractworker.h"\r
+#include "global.h"\r
\r
#include <QFileInfo>\r
-#include <QMap>\r
\r
class CopyMoveWorker : public AbstractWorker\r
{\r
+++ /dev/null
-#include "common.h"\r
-#include "filetablemodel.h"\r
-\r
-#include <QDateTime>\r
-#include <QDebug>\r
-#include <QApplication>\r
-#include <QSettings>\r
-#include <QPalette>\r
-#ifdef Q_OS_WIN32\r
- #include <windows.h>\r
-#endif\r
-\r
-FileTableModel::FileTableModel(QObject *parent) :\r
- QAbstractTableModel(parent),\r
- m_dir(),\r
- m_fileInfoList(),\r
- m_checkStates(),\r
- m_IconFactory(),\r
- m_fsWatcher(this),\r
- m_font(),\r
- m_NormalBrush(),\r
- m_NormalTextBrush(),\r
- m_MarkBrush(),\r
- m_MarkTextBrush(),\r
- m_SystemBrush(),\r
- m_HiddenBrush(),\r
- m_ReadonlyBrush()\r
-{\r
- // デフォルトフィルタを設定する\r
- setFilter(QDir::NoDot | QDir::AllDirs | QDir::Files);\r
-}\r
-\r
-bool FileTableModel::setPath(const QString &path)\r
-{\r
- qDebug() << "FileTableModel::setPath" << path;\r
-\r
- if (!QFileInfo::exists(path)) {\r
- qDebug() << "パスが存在しません";\r
- qDebug() << path;\r
- return false;\r
- }\r
- QFileInfo info(path);\r
- if (!info.isDir()) {\r
- qDebug() << "フォルダではありません";\r
- qDebug() << path;\r
- return false;\r
- }\r
-\r
- beginResetModel();\r
-\r
- m_dir.setPath(path);\r
- m_fileInfoList = m_dir.entryInfoList();\r
- m_checkStates.clear();\r
-\r
- if (m_fileInfoList.isEmpty()) {\r
- qDebug() << "ファイルリストを取得できません";\r
- qDebug() << path;\r
- }\r
- else {\r
- QFileInfoList::iterator it;\r
- for (it = m_fileInfoList.begin(); it != m_fileInfoList.end(); ) {\r
-#ifdef Q_OS_WIN32\r
- if (!(filter() & QDir::System)){\r
- DWORD dwFlags = ::GetFileAttributes(\r
- it->absoluteFilePath().toStdWString().c_str());\r
- if (dwFlags != DWORD(-1) && it->fileName() != ".." &&\r
- ((dwFlags & FILE_ATTRIBUTE_SYSTEM) == FILE_ATTRIBUTE_SYSTEM))\r
- {\r
- qDebug() << it->fileName() << " is system file.";\r
- it = m_fileInfoList.erase(it);\r
- continue;\r
- }\r
- }\r
-#endif\r
- if (it->fileName() == "..") {\r
- if (m_dir.isRoot()) {\r
- qDebug() << m_dir.absolutePath() << " is root.";\r
- it = m_fileInfoList.erase(it);\r
- continue;\r
- }\r
- }\r
- it++;\r
- }\r
- // ソート方法によらず、".."は必ず先頭にする\r
- QFileInfoList::iterator itRoot = m_fileInfoList.end();\r
- for (it = m_fileInfoList.begin(); it != m_fileInfoList.end(); it++) {\r
- if (it->fileName() == "..") {\r
- itRoot = it;\r
- break;\r
- }\r
- }\r
- if (itRoot != m_fileInfoList.end()) {\r
- QFileInfo info(*itRoot);\r
- m_fileInfoList.erase(itRoot);\r
- m_fileInfoList.push_front(info);\r
- }\r
- }\r
-\r
- m_checkStates.resize(m_fileInfoList.size());\r
- m_checkStates.fill(Qt::Unchecked);\r
-\r
- m_fsWatcher.addPath(path);\r
- connect(&m_fsWatcher, SIGNAL(directoryChanged(QString)),\r
- this, SLOT(directoryChange(QString)));\r
-\r
- endResetModel();\r
-\r
- emit dataChanged(QModelIndex(), QModelIndex());\r
-\r
- return !m_fileInfoList.isEmpty();\r
-}\r
-\r
-QFileInfo FileTableModel::fileInfo(const QModelIndex &index) const\r
-{\r
- qDebug() << "FileTableModel::fileInfo()" << index;\r
-\r
- if (index.isValid()) {\r
- return m_fileInfoList[index.row()];\r
- }\r
- return QFileInfo();\r
-}\r
-\r
-void FileTableModel::updateAppearance(int darkness)\r
-{\r
- qDebug() << "FileTableModel::updateAppearance();" << darkness;\r
-\r
- QSettings settings;\r
-\r
- m_font = settings.value(IniKey_ViewFont).value<QFont>();\r
- m_NormalBrush = QBrush(settings.value(IniKey_ViewColorBgNormal).value<QColor>().darker(darkness));\r
- m_NormalTextBrush = QBrush(settings.value(IniKey_ViewColorFgNormal).value<QColor>().darker(darkness));\r
- m_MarkBrush = QBrush(settings.value(IniKey_ViewColorBgMark).value<QColor>().darker(darkness));\r
- m_MarkTextBrush = QBrush(settings.value(IniKey_ViewColorFgMark).value<QColor>().darker(darkness));\r
- m_SystemBrush = QBrush(settings.value(IniKey_ViewColorFgSystem).value<QColor>().darker(darkness));\r
- m_HiddenBrush = QBrush(settings.value(IniKey_ViewColorFgHidden).value<QColor>().darker(darkness));\r
- m_ReadonlyBrush = QBrush(settings.value(IniKey_ViewColorFgReadonly).value<QColor>().darker(darkness));\r
- m_ReadonlyBrush = QBrush(settings.value(IniKey_ViewColorFgReadonly).value<QColor>().darker(darkness));\r
-}\r
-\r
-void FileTableModel::directoryChange(const QString &path)\r
-{\r
- qDebug() << "FileTableModel::directoryChange" << path;\r
-\r
- emit preReload();\r
-\r
- m_fsWatcher.removePath(m_dir.absolutePath());\r
- setPath(path);\r
-\r
- emit postReload();\r
-}\r
-\r
-int FileTableModel::rowCount(const QModelIndex &parent) const\r
-{\r
- Q_UNUSED(parent);\r
- return m_fileInfoList.size();\r
-}\r
-\r
-int FileTableModel::columnCount(const QModelIndex &parent) const\r
-{\r
- Q_UNUSED(parent);\r
- return 5;\r
-}\r
-\r
-QVariant FileTableModel::data(const QModelIndex &index, int role) const\r
-{\r
- if (!index.isValid()) {\r
- return QVariant();\r
- }\r
-\r
- const QFileInfo &info = m_fileInfoList.at(index.row());\r
- int checked = m_checkStates.at(index.row());\r
-\r
- switch (role) {\r
- case Qt::DisplayRole:\r
- switch (index.column()) {\r
- case 0: // チェックボックス\r
- return QString("");\r
-\r
- case 1: // ファイル名\r
- if (info.isDir()) {\r
- return info.fileName();\r
- }\r
- if (info.fileName().left(1) == ".") { // "."で始まるファイル\r
- int pos = info.fileName().lastIndexOf(".");\r
- if (pos == 0) {\r
- return info.fileName();\r
- }\r
- }\r
- return info.completeBaseName();\r
-\r
- case 2: // 拡張子\r
- if (info.isDir()) {\r
- return QString();\r
- }\r
- if (info.fileName().left(1) == ".") { // "."で始まるファイル\r
- int pos = info.fileName().lastIndexOf(".");\r
- if (pos == 0) {\r
- return QString();\r
- }\r
- }\r
- return info.suffix();\r
-\r
- case 3: // サイズ\r
- if (info.isDir()) {\r
- return QString("<DIR>");\r
- }\r
- else {\r
- return FilesizeToString(info.size());\r
- }\r
- break;\r
-\r
- case 4: // 更新日時\r
- return info.lastModified().toString("yy/MM/dd hh:mm");\r
- }\r
- break;\r
-\r
- case Qt::DecorationRole:\r
- if (index.column() == 1) {\r
- if (info.fileName() == "..") {\r
- return QIcon(":/images/Up.png");\r
- }\r
- else {\r
- // infoを使うと、正しいアイコンが取れない場合がある…なぜ?\r
- return m_IconFactory.icon(QFileInfo(info));\r
- }\r
- }\r
- break;\r
-\r
- case Qt::FontRole:\r
- return m_font;\r
-\r
- case Qt::TextAlignmentRole:\r
- switch (index.column()) {\r
- case 3:\r
- case 4:\r
- return Qt::AlignRight + Qt::AlignVCenter;\r
- default:\r
- return Qt::AlignLeft + Qt::AlignVCenter;\r
- }\r
- break;\r
-\r
- case Qt::BackgroundRole:\r
- if (checked) {\r
- return m_MarkBrush;\r
- }\r
- return m_NormalBrush;\r
-\r
- case Qt::ForegroundRole:\r
- if (checked) {\r
- return m_MarkTextBrush;\r
- }\r
-#ifdef Q_OS_WIN32\r
- {\r
- DWORD dwFlags = ::GetFileAttributes(\r
- info.absoluteFilePath().toStdWString().c_str());\r
- if (dwFlags != DWORD(-1) && (dwFlags & FILE_ATTRIBUTE_SYSTEM) == FILE_ATTRIBUTE_SYSTEM)\r
- {\r
- return m_SystemBrush;\r
- }\r
- }\r
-#endif\r
- if (info.isHidden() && info.fileName() != "..") {\r
- return m_HiddenBrush;\r
- }\r
- if (!info.isWritable()) {\r
- return m_ReadonlyBrush;\r
- }\r
- return m_NormalTextBrush;\r
-\r
- case Qt::CheckStateRole:\r
- if (index.column() == 0 && info.fileName() != "..") {\r
- return checked;\r
- }\r
- break;\r
- }\r
-\r
- return QVariant();\r
-}\r
-\r
-QVariant FileTableModel::headerData(int section, Qt::Orientation orientation, int role) const\r
-{\r
- if (role == Qt::DisplayRole) {\r
- if (orientation == Qt::Horizontal) {\r
- switch (section) {\r
- case 0: return QString("");\r
- case 1: return tr("名前");\r
- case 2: return tr("拡張子");\r
- case 3: return tr("サイズ");\r
- case 4: return tr("更新日時");\r
- }\r
- }\r
- }\r
- return QVariant();\r
-}\r
-\r
-Qt::ItemFlags FileTableModel::flags(const QModelIndex &index) const\r
-{\r
- Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;\r
-\r
- if (!index.isValid()) {\r
- return flags | Qt::ItemIsDropEnabled;\r
- }\r
-\r
- if (m_fileInfoList[index.row()].fileName() != "..") {\r
- if (index.column() == 0) {\r
- flags |= Qt::ItemIsUserCheckable;\r
- }\r
- flags |= Qt::ItemIsDropEnabled;\r
- }\r
- return flags;\r
-}\r
-\r
-bool FileTableModel::setData(const QModelIndex &index, const QVariant &value, int role)\r
-{\r
- qDebug() << "FileTableModel::setData()" << index;\r
-\r
- if (!index.isValid()) {\r
- return false;\r
- }\r
-\r
- switch (role) {\r
- case Qt::CheckStateRole:\r
- if (index.column() == 0) {\r
- m_checkStates[index.row()] = static_cast<Qt::CheckState>(value.toInt());\r
- emit dataChanged(index, this->index(index.row(), 4));\r
- return true;\r
- }\r
- break;\r
- }\r
-\r
- return false;\r
-}\r
-\r
-Qt::DropActions FileTableModel::supportedDropActions() const\r
-{\r
- qDebug() << "FileTableModel::supportedDropActions()";\r
-\r
- return Qt::CopyAction;\r
-}\r
-\r
-QStringList FileTableModel::mimeTypes() const\r
-{\r
- qDebug() << "FileTableModel::mimeTypes()";\r
-\r
- QStringList types;\r
-\r
- types << "text/uri-list";\r
-\r
- return types;\r
-}\r
+++ /dev/null
-#ifndef FILETABLEMODEL_H\r
-#define FILETABLEMODEL_H\r
-\r
-#include <QAbstractTableModel>\r
-#include <QDir>\r
-#include <QFileIconProvider>\r
-#include <QFileSystemWatcher>\r
-#include <QBrush>\r
-#include <QFont>\r
-\r
-class FileTableModel : public QAbstractTableModel\r
-{\r
- Q_OBJECT\r
-public:\r
- explicit FileTableModel(QObject *parent = 0);\r
-\r
- // action\r
- bool setPath(const QString &path);\r
- void updateAppearance(int darkness = false);\r
-\r
- // getter\r
- QDir::SortFlags sorting() const { return m_dir.sorting(); }\r
- QDir::Filters filter() const { return m_dir.filter(); }\r
- QStringList nameFilters() const { return m_dir.nameFilters(); }\r
- const QString absolutePath() const { return m_dir.absolutePath(); }\r
- QFileInfo fileInfo(const QModelIndex &index) const;\r
- QFont font() const { return m_font; }\r
-\r
- // setter\r
- void setSorting(QDir::SortFlags sort) { m_dir.setSorting(sort); }\r
- void setFilter(QDir::Filters filters) { m_dir.setFilter(filters); }\r
- void setNameFilters(const QStringList &nameFiltes) {\r
- m_dir.setNameFilters(nameFiltes);\r
- }\r
-\r
-signals:\r
- void selectionChanged(int checkedFoldrs, int checkedFiles, quint64 totalSize);\r
- void preReload();\r
- void postReload();\r
-\r
-public slots:\r
- void directoryChange(const QString &path);\r
-\r
-private:\r
- QDir m_dir;\r
- QFileInfoList m_fileInfoList;\r
- QVector<Qt::CheckState> m_checkStates;\r
- QFileIconProvider m_IconFactory;\r
- QFileSystemWatcher m_fsWatcher;\r
- QFont m_font;\r
- QBrush m_NormalBrush;\r
- QBrush m_NormalTextBrush;\r
- QBrush m_MarkBrush;\r
- QBrush m_MarkTextBrush;\r
- QBrush m_SystemBrush;\r
- QBrush m_HiddenBrush;\r
- QBrush m_ReadonlyBrush;\r
-\r
- // QAbstractItemModel interface\r
-public:\r
- int rowCount(const QModelIndex &parent = QModelIndex()) const;\r
- int columnCount(const QModelIndex &parent = QModelIndex()) const;\r
- QVariant data(const QModelIndex &index, int role) const;\r
- QVariant headerData(int section, Qt::Orientation orientation, int role) const;\r
- Qt::ItemFlags flags(const QModelIndex &index) const;\r
- bool setData(const QModelIndex &index, const QVariant &value, int role);\r
- Qt::DropActions supportedDropActions() const;\r
- QStringList mimeTypes() const;\r
-};\r
-\r
-#endif // FILETABLEMODEL_H\r
--- /dev/null
+#include "global.h"\r
+#include "preferences.h"\r
+#include "win32.h"\r
+#include "foldermodel.h"\r
+\r
+#include <QDateTime>\r
+#include <QDebug>\r
+#include <QApplication>\r
+#include <QSettings>\r
+#include <QPalette>\r
+\r
+FolderModel* FolderModel::m_activeModel = NULL;\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::FolderModel\r
+/// \param parent 親オブジェクト\r
+///\r
+/// コンストラクタ\r
+///\r
+FolderModel::FolderModel(QObject *parent) :\r
+ QAbstractTableModel(parent),\r
+ m_dir(),\r
+ m_fileInfoList(),\r
+ m_checkStates(),\r
+ m_IconProvider(),\r
+ m_fsWatcher(this),\r
+ m_history(),\r
+ m_historyPos(-1)\r
+{\r
+ connect(&m_fsWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(fsWatcher_directoryChanged(QString)));\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::fileIcon\r
+/// \param index アイテムのインデックス\r
+/// \return アイコンを返します。\r
+///\r
+QIcon FolderModel::fileIcon(const QModelIndex &index) const\r
+{\r
+ if (fileName(index) == "..") {\r
+ return QIcon("://images/Up.png");\r
+ }\r
+ return m_IconProvider.icon(fileInfo(index));\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::isMarked\r
+/// \param index アイテムのインデックス\r
+/// \return マークされていればtrueを返します。\r
+///\r
+bool FolderModel::isMarked(const QModelIndex &index) const\r
+{\r
+ CheckContainer::const_iterator it = m_checkStates.find(fileName(index));\r
+ if (it != m_checkStates.end()) {\r
+ return *it == Qt::Checked;\r
+ }\r
+ return false;\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::markedItems\r
+/// \return マークされているアイテムのリストを返します。\r
+///\r
+QFileInfoList FolderModel::markedItems() const\r
+{\r
+ QFileInfoList list;\r
+ for (int n = 0; n < rowCount(); ++n) {\r
+ QModelIndex index = this->index(n, 0);\r
+ if (isMarked(index)) {\r
+ list << fileInfo(index);\r
+ }\r
+ }\r
+\r
+ return list;\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::mkdir\r
+/// \param name 作成するフォルダ名\r
+/// \return 作成したフォルダのインデックス\r
+///\r
+/// フォルダを作成します。\r
+///\r
+QModelIndex FolderModel::mkdir(const QString &name)\r
+{\r
+ qDebug() << "FolderModel::mkdir()" << name;\r
+\r
+ if (!m_dir.mkdir(name)) {\r
+ return QModelIndex();\r
+ }\r
+\r
+ refresh();\r
+\r
+ for (int n = 0; n < rowCount(); ++n) {\r
+ if (m_fileInfoList[n].fileName() == name) {\r
+ return index(n, 0);\r
+ }\r
+ }\r
+\r
+ return QModelIndex();\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::search\r
+/// \param value 検索する文字列\r
+/// \param start 開始位置\r
+/// \param step ステップ数\r
+/// \return 見つかったアイテムのインデックスを返します。\r
+///\r
+QModelIndex FolderModel::search(const QString &value, const QModelIndex &start, int step)\r
+{\r
+ qDebug() << "FolderModel::search()" << value << start << step;\r
+\r
+ const QString searchText = value.toLower();\r
+ for (int n = start.row() + step; 0 <= n && n < rowCount(); n += step) {\r
+ if (m_fileInfoList[n].fileName().toLower().indexOf(searchText) != -1) {\r
+ return index(n, 0);\r
+ }\r
+ }\r
+\r
+ return QModelIndex();\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::setHistoryAt\r
+/// \param path 設定するパス\r
+///\r
+/// 指定したパスに履歴を移動します。\r
+///\r
+void FolderModel::setHistoryAt(const QString &path)\r
+{\r
+ qDebug() << "FolderModel::setHistoryAt()" << path;\r
+\r
+ for (int n = 0; n < m_history.size(); ++n) {\r
+ if (m_history[n] == path) {\r
+ m_historyPos = n;\r
+ setRootPath(path, false);\r
+ return;\r
+ }\r
+ }\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::setRootPath\r
+/// \param path 設定するパス\r
+/// \param addHistory 履歴に追加する場合はtrue\r
+///\r
+/// ルートパスを設定します。\r
+///\r
+void FolderModel::setRootPath(const QString &path, bool addHistory)\r
+{\r
+ qDebug() << "FolderModel::setRootPath()" << path;\r
+\r
+ beginResetModel();\r
+ setError();\r
+\r
+ try {\r
+ if (!QFileInfo::exists(path)) {\r
+ throw tr("フォルダが存在しないか、利用できません:%1").arg(path);\r
+ }\r
+\r
+ QDir dir(path);\r
+ dir.setFilter(m_dir.filter());\r
+ dir.setNameFilters(m_dir.nameFilters());\r
+ dir.setSorting(m_dir.sorting());\r
+\r
+ QFileInfoList list = dir.entryInfoList();\r
+ if (list.isEmpty()) {\r
+ throw tr("ファイルリストを取得できません:%1").arg(path);\r
+ }\r
+\r
+ m_fileInfoList.clear();\r
+ if (m_dir.absolutePath() != dir.absolutePath()) {\r
+ m_fsWatcher.removePath(m_dir.absolutePath());\r
+ m_fsWatcher.addPath(dir.absolutePath());\r
+ m_checkStates.clear();\r
+ m_dir.setPath(dir.absolutePath());\r
+ if (addHistory) {\r
+ m_history.resize(m_historyPos + 1);\r
+ m_history << m_dir.absolutePath();\r
+ m_historyPos = m_history.size() - 1;\r
+ }\r
+ }\r
+\r
+ foreach (const QFileInfo &fi, list) {\r
+ if (fi.fileName() == "..") {\r
+ if (!m_dir.isRoot()) {\r
+ m_fileInfoList.push_front(fi);\r
+ }\r
+ continue;\r
+ }\r
+ else if (!(filter() & QDir::System) &&\r
+ Win32::hasSystemAttribute(fi.absoluteFilePath()))\r
+ {\r
+ continue;\r
+ }\r
+\r
+ m_fileInfoList << fi;\r
+ if (m_checkStates.find(fi.fileName()) == m_checkStates.end()) {\r
+ m_checkStates[fi.fileName()] = Qt::Unchecked;\r
+ }\r
+ }\r
+ }\r
+ catch (const QString &s) {\r
+ setError(s);\r
+ }\r
+\r
+ endResetModel();\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::touch\r
+/// \param name 作成するファイル名\r
+/// \return 作成したファイルのインデックス\r
+///\r
+/// 空のファイルを作成します。\r
+///\r
+QModelIndex FolderModel::touch(const QString &name)\r
+{\r
+ QFile file(m_dir.absoluteFilePath(name));\r
+ if (!file.open(QIODevice::WriteOnly)) {\r
+ return QModelIndex();\r
+ }\r
+ file.close();\r
+\r
+ refresh();\r
+\r
+ for (int n = 0; n < rowCount(); ++n) {\r
+ if (m_fileInfoList[n].fileName() == name) {\r
+ return index(n, 0);\r
+ }\r
+ }\r
+\r
+ return QModelIndex();\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::activeModel\r
+/// \return アクティブなモデルを返します。\r
+///\r
+FolderModel *FolderModel::activeModel()\r
+{\r
+ return m_activeModel;\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::onCdHome\r
+///\r
+/// ホームフォルダに移動します。\r
+///\r
+void FolderModel::onCdHome()\r
+{\r
+ setRootPath(QDir::homePath());\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::onCdRoot\r
+///\r
+/// ルートフォルダに移動します。\r
+///\r
+void FolderModel::onCdRoot()\r
+{\r
+ setRootPath(QDir::rootPath());\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::onCdUp\r
+///\r
+/// 親フォルダに移動します。\r
+///\r
+void FolderModel::onCdUp()\r
+{\r
+ if (!m_dir.isRoot()) {\r
+ QDir dir(m_dir);\r
+ dir.cdUp();\r
+ setRootPath(dir.absolutePath());\r
+ }\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::onHistoryBack\r
+///\r
+/// 履歴を戻ります。\r
+///\r
+void FolderModel::onHistoryBack()\r
+{\r
+ if (m_historyPos > 0) {\r
+ setRootPath(m_history[--m_historyPos], false);\r
+ }\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::onHistoryForward\r
+///\r
+/// 履歴を進みます。\r
+///\r
+void FolderModel::onHistoryForward()\r
+{\r
+ if (m_historyPos < m_history.size() - 1) {\r
+ setRootPath(m_history[++m_historyPos], false);\r
+ }\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::onMarkAll\r
+///\r
+/// 全てのマークをONにします。\r
+///\r
+void FolderModel::onMarkAll()\r
+{\r
+ CheckContainer::iterator it;\r
+ for (it = m_checkStates.begin(); it != m_checkStates.end(); ++it) {\r
+ it.value() = Qt::Checked;\r
+ }\r
+ emit dataChanged(index(0, 0), index(rowCount(), columnCount()));\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::onMarkAllFiles\r
+///\r
+/// 全てのフォルダをマークOFF、ファイルをマークONにします。\r
+///\r
+void FolderModel::onMarkAllFiles()\r
+{\r
+ foreach (const QFileInfo &fi, m_fileInfoList) {\r
+ if (fi.fileName() == "..") {\r
+ continue;\r
+ }\r
+ if (fi.isDir()) {\r
+ m_checkStates[fi.fileName()] = Qt::Unchecked;\r
+ }\r
+ else {\r
+ m_checkStates[fi.fileName()] = Qt::Checked;\r
+ }\r
+ }\r
+ emit dataChanged(index(0, 0), index(rowCount(), columnCount()));\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::onMarkAllOff\r
+///\r
+/// 全てのマークをOFFにします。\r
+///\r
+void FolderModel::onMarkAllOff()\r
+{\r
+ CheckContainer::iterator it;\r
+ for (it = m_checkStates.begin(); it != m_checkStates.end(); ++it) {\r
+ it.value() = Qt::Unchecked;\r
+ }\r
+ emit dataChanged(index(0, 0), index(rowCount(), columnCount()));\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief FolderModel::onMarkInvert\r
+///\r
+/// 全てのマークを反転します。\r
+///\r
+void FolderModel::onMarkInvert()\r
+{\r
+ CheckContainer::iterator it;\r
+ for (it = m_checkStates.begin(); it != m_checkStates.end(); ++it) {\r
+ it.value() = (it.value() == Qt::Checked) ? Qt::Unchecked : Qt::Checked;\r
+ }\r
+ emit dataChanged(index(0, 0), index(rowCount(), columnCount()));\r
+}\r
+\r
+int FolderModel::rowCount(const QModelIndex &parent) const\r
+{\r
+ Q_UNUSED(parent);\r
+ return m_fileInfoList.size();\r
+}\r
+\r
+int FolderModel::columnCount(const QModelIndex &parent) const\r
+{\r
+ Q_UNUSED(parent);\r
+ return ColumnCount;\r
+}\r
+\r
+QVariant FolderModel::data(const QModelIndex &index, int role) const\r
+{\r
+ if (!index.isValid()) {\r
+ return QVariant();\r
+ }\r
+\r
+ Preferences prefs(const_cast<FolderModel*>(this));\r
+\r
+ switch (role) {\r
+ case Qt::DisplayRole:\r
+ switch (index.column()) {\r
+ case Name:\r
+ if (isDir(index) || isDotFile(index)) {\r
+ return fileName(index);\r
+ }\r
+ return fileInfo(index).completeBaseName();\r
+\r
+ case Extension:\r
+ if (isDir(index) || isDotFile(index)) {\r
+ return QVariant();\r
+ }\r
+ return fileInfo(index).suffix();\r
+\r
+ case Size: // サイズ\r
+ if (isDir(index)) {\r
+ return QString("<DIR>");\r
+ }\r
+ return FileSizeToString(fileInfo(index).size());\r
+\r
+ case LastModified: // 更新日時\r
+ return fileInfo(index).lastModified().toString("yy/MM/dd hh:mm");\r
+ }\r
+ break;\r
+\r
+ case Qt::DecorationRole:\r
+ if (index.column() == Name) {\r
+ return fileIcon(index);\r
+ }\r
+ break;\r
+\r
+ case Qt::FontRole:\r
+ return prefs.getFolderViewFont();\r
+\r
+ case Qt::TextAlignmentRole:\r
+ switch (index.column()) {\r
+ case Size:\r
+ case LastModified:\r
+ return Qt::AlignRight + Qt::AlignVCenter;\r
+ }\r
+ return Qt::AlignLeft + Qt::AlignVCenter;\r
+\r
+ case Qt::BackgroundRole:\r
+ if (isMarked(index)) {\r
+ return QBrush(prefs.folderViewMarkedBgColor(isActive()));\r
+ }\r
+ return QBrush(prefs.folderViewBgColor(isActive()));\r
+\r
+ case Qt::ForegroundRole:\r
+ if (isMarked(index)) {\r
+ return QBrush(prefs.folderViewMarkedFgColor(isActive()));\r
+ }\r
+ if (fileName(index) != ".." && Win32::hasSystemAttribute(filePath(index))) {\r
+ return QBrush(prefs.folderViewSystemColor(isActive()));\r
+ }\r
+ if (fileName(index) != ".." && fileInfo(index).isHidden()) {\r
+ return QBrush(prefs.folderViewHiddenColor(isActive()));\r
+ }\r
+ if (fileName(index) != ".." && !fileInfo(index).isWritable()) {\r
+ return QBrush(prefs.folderViewReadOnlyColor(isActive()));\r
+ }\r
+ return QBrush(prefs.folderViewFgColor(isActive()));\r
+\r
+ case Qt::CheckStateRole:\r
+ if (index.column() == Name && fileName(index) != "..") {\r
+ return isMarked(index) ? Qt::Checked : Qt::Unchecked;\r
+ }\r
+ break;\r
+ }\r
+\r
+ return QVariant();\r
+}\r
+\r
+QVariant FolderModel::headerData(int section, Qt::Orientation orientation, int role) const\r
+{\r
+ if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {\r
+ switch (section) {\r
+ case Name: return tr("名前");\r
+ case Extension: return tr("拡張子");\r
+ case Size: return tr("サイズ");\r
+ case LastModified: return tr("更新日時");\r
+ }\r
+ }\r
+ return QVariant();\r
+}\r
+\r
+Qt::ItemFlags FolderModel::flags(const QModelIndex &index) const\r
+{\r
+ Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;\r
+\r
+ if (!index.isValid()) {\r
+ return flags | Qt::ItemIsDropEnabled;\r
+ }\r
+\r
+ if (m_fileInfoList[index.row()].fileName() != "..") {\r
+ if (index.column() == Name) {\r
+ flags |= Qt::ItemIsUserCheckable;\r
+ }\r
+ flags |= Qt::ItemIsDropEnabled;\r
+ }\r
+ return flags;\r
+}\r
+\r
+bool FolderModel::setData(const QModelIndex &index, const QVariant &value, int role)\r
+{\r
+ qDebug() << "FolderModel::setData()" << index;\r
+\r
+ if (!index.isValid()) {\r
+ return false;\r
+ }\r
+\r
+ switch (role) {\r
+ case Qt::CheckStateRole:\r
+ if (index.column() == Name && fileName(index) != "..") {\r
+ m_checkStates[fileName(index)] = value.toInt();\r
+ emit dataChanged(this->index(index.row(), 0),\r
+ this->index(index.row(), ColumnCount - 1));\r
+ return true;\r
+ }\r
+ break;\r
+ }\r
+\r
+ return false;\r
+}\r
+\r
+Qt::DropActions FolderModel::supportedDropActions() const\r
+{\r
+ qDebug() << "FolderModel::supportedDropActions()";\r
+\r
+ return Qt::CopyAction;\r
+}\r
+\r
+QStringList FolderModel::mimeTypes() const\r
+{\r
+ qDebug() << "FolderModel::mimeTypes()";\r
+\r
+ QStringList types;\r
+\r
+ types << "text/uri-list";\r
+\r
+ return types;\r
+}\r
--- /dev/null
+#ifndef FOLDERMODEL_H\r
+#define FOLDERMODEL_H\r
+\r
+#include <QAbstractTableModel>\r
+#include <QDir>\r
+#include <QFileIconProvider>\r
+#include <QFileSystemWatcher>\r
+#include <QBrush>\r
+#include <QFont>\r
+\r
+class FolderModel : public QAbstractTableModel\r
+{\r
+ Q_OBJECT\r
+public:\r
+ enum Column {\r
+ Name = 0,\r
+ Extension,\r
+ Size,\r
+ LastModified,\r
+ ColumnCount,\r
+ };\r
+ typedef QVector<QString> History;\r
+\r
+ explicit FolderModel(QObject *parent = 0);\r
+\r
+ QString error() const;\r
+ QIcon fileIcon(const QModelIndex &index) const;\r
+ QFileInfo fileInfo(const QModelIndex &index) const;\r
+ QString fileName(const QModelIndex &index) const;\r
+ QString filePath(const QModelIndex &index) const;\r
+ QDir::Filters filter() const;\r
+ const History& history() const;\r
+ bool isActive() const;\r
+ bool isDir(const QModelIndex &index) const;\r
+ bool isHistoryBegin() const;\r
+ bool isHistoryEnd() const;\r
+ bool isMarked(const QModelIndex &index) const;\r
+ QFileInfoList markedItems() const;\r
+ QModelIndex mkdir(const QString &name);\r
+ QStringList nameFilters() const;\r
+ QString rootPath() const;\r
+ QModelIndex search(const QString &value, const QModelIndex &start = QModelIndex(), int step = 1);\r
+ void setActive();\r
+ void setFilter(QDir::Filters filters);\r
+ void setHistoryAt(const QString &path);\r
+ void setNameFilters(const QStringList &nameFiltes);\r
+ void setRootPath(const QString &path, bool addHistory = true);\r
+ void setSorting(QDir::SortFlags sort);\r
+ QDir::SortFlags sorting() const;\r
+ QModelIndex touch(const QString &name);\r
+\r
+ static FolderModel* activeModel();\r
+\r
+signals:\r
+\r
+public slots:\r
+ void onCdHome();\r
+ void onCdRoot();\r
+ void onCdUp();\r
+ void onHistoryBack();\r
+ void onHistoryForward();\r
+ void onMarkAll();\r
+ void onMarkAllFiles();\r
+ void onMarkAllOff();\r
+ void onMarkInvert();\r
+ void refresh();\r
+\r
+private slots:\r
+ void fsWatcher_directoryChanged(const QString &path);\r
+\r
+private:\r
+ static FolderModel* m_activeModel;\r
+\r
+ typedef QMap<QString, int> CheckContainer;\r
+\r
+ QString m_error;\r
+ QDir m_dir;\r
+ QFileInfoList m_fileInfoList;\r
+ CheckContainer m_checkStates;\r
+ QFileIconProvider m_IconProvider;\r
+ QFileSystemWatcher m_fsWatcher;\r
+ History m_history;\r
+ int m_historyPos;\r
+\r
+ bool isDotFile(const QModelIndex &index) const;\r
+ void setError(const QString &error = QString());\r
+\r
+ // QAbstractItemModel interface\r
+public:\r
+ int rowCount(const QModelIndex &parent = QModelIndex()) const;\r
+ int columnCount(const QModelIndex &parent = QModelIndex()) const;\r
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;\r
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;\r
+ Qt::ItemFlags flags(const QModelIndex &index) const;\r
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);\r
+ Qt::DropActions supportedDropActions() const;\r
+ QStringList mimeTypes() const;\r
+};\r
+\r
+inline QString FolderModel::error() const\r
+{\r
+ return m_error;\r
+}\r
+\r
+inline QFileInfo FolderModel::fileInfo(const QModelIndex &index) const\r
+{\r
+ Q_ASSERT(index.isValid());\r
+ return m_fileInfoList[index.row()];\r
+}\r
+\r
+inline QString FolderModel::fileName(const QModelIndex &index) const\r
+{\r
+ Q_ASSERT(index.isValid());\r
+ return m_fileInfoList[index.row()].fileName();\r
+}\r
+\r
+inline QString FolderModel::filePath(const QModelIndex &index) const\r
+{\r
+ Q_ASSERT(index.isValid());\r
+ return m_fileInfoList[index.row()].absoluteFilePath();\r
+}\r
+\r
+inline QDir::Filters FolderModel::filter() const\r
+{\r
+ return m_dir.filter();\r
+}\r
+\r
+inline const FolderModel::History &FolderModel::history() const\r
+{\r
+ return m_history;\r
+}\r
+\r
+inline bool FolderModel::isActive() const\r
+{\r
+ return m_activeModel == this;\r
+}\r
+\r
+inline bool FolderModel::isDir(const QModelIndex &index) const\r
+{\r
+ return m_fileInfoList[index.row()].isDir();\r
+}\r
+\r
+inline bool FolderModel::isHistoryBegin() const\r
+{\r
+ return m_historyPos == 0;\r
+}\r
+\r
+inline bool FolderModel::isHistoryEnd() const\r
+{\r
+ return m_historyPos == m_history.size() - 1;\r
+}\r
+\r
+inline bool FolderModel::isDotFile(const QModelIndex &index) const\r
+{\r
+ return fileName(index).lastIndexOf(".") == 0;\r
+}\r
+\r
+inline QStringList FolderModel::nameFilters() const\r
+{\r
+ return m_dir.nameFilters();\r
+}\r
+\r
+inline void FolderModel::refresh()\r
+{\r
+ setRootPath(rootPath());\r
+}\r
+\r
+inline QString FolderModel::rootPath() const\r
+{\r
+ return m_dir.absolutePath();\r
+}\r
+\r
+inline void FolderModel::setActive()\r
+{\r
+ m_activeModel = this;\r
+}\r
+\r
+inline void FolderModel::setError(const QString &error)\r
+{\r
+ m_error = error;\r
+}\r
+\r
+inline void FolderModel::setFilter(QDir::Filters filters)\r
+{\r
+ m_dir.setFilter(filters);\r
+}\r
+\r
+inline void FolderModel::setSorting(QDir::SortFlags sort)\r
+{\r
+ m_dir.setSorting(sort);\r
+}\r
+\r
+inline void FolderModel::setNameFilters(const QStringList &nameFiltes)\r
+{\r
+ m_dir.setNameFilters(nameFiltes);\r
+}\r
+\r
+inline QDir::SortFlags FolderModel::sorting() const\r
+{\r
+ return m_dir.sorting();\r
+}\r
+\r
+inline void FolderModel::fsWatcher_directoryChanged(const QString &path)\r
+{\r
+ Q_UNUSED(path);\r
+ refresh();\r
+}\r
+\r
+#endif // FOLDERMODEL_H\r
-#include "common.h"
+#include "global.h"
+#include "preferences.h"
#include "mainwindow.h"
-#include "searchbox.h"
#include "folderpanel.h"
#include "ui_folderpanel.h"
#include <QSettings>
#include <QStatusBar>
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::FolderPanel
+/// \param parent 親ウィジェット
+///
+/// コンストラクタ
+///
FolderPanel::FolderPanel(QWidget *parent) :
QWidget(parent),
ui(new Ui::FolderPanel),
m_mainWnd(NULL)
{
ui->setupUi(this);
+ ui->searchBox->setText("");
+ ui->searchBox->setVisible(false);
+ ui->thumbnailView->setVisible(false);
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::~FolderPanel
+///
+/// デストラクタ
+///
FolderPanel::~FolderPanel()
{
delete ui;
}
-void FolderPanel::initialize(MainWindow *mainWnd)
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::initialize
+/// \param w メインウィンドウオブジェクト
+///
+/// 初期化処理を行います。
+///
+void FolderPanel::initialize(MainWindow *w)
{
qDebug() << "FolderPanel::initialize();";
- m_mainWnd = mainWnd;
-
- // シグナル&スロット
- connect(ui->searchBox, SIGNAL(textEdited(QString)), this, SLOT(searchItem(QString)));
- connect(ui->folderView, SIGNAL(doubleClicked(QModelIndex)), mainWnd, SLOT(open(QModelIndex)));
- connect(ui->folderView, SIGNAL(dropAccepted(QFileInfoList,QDropEvent*)), mainWnd, SLOT(dropAccept(QFileInfoList,QDropEvent*)));
- connect(ui->folderView, SIGNAL(currentChanged(QFileInfo)), mainWnd, SLOT(currentChange(QFileInfo)));
- connect(ui->folderView, SIGNAL(requestContextMenu(QContextMenuEvent*)), mainWnd, SLOT(showContextMenu(QContextMenuEvent*)));
- connect(ui->folderView, SIGNAL(retrieveStarted(QString)), ui->locationBox, SLOT(setText(QString)));
- connect(ui->folderView, SIGNAL(dataChanged()), this, SLOT(dataChange()));
- connect(ui->folderView, SIGNAL(itemFound()), this, SLOT(itemFound()));
- connect(ui->folderView, SIGNAL(itemNotFound()), this, SLOT(itemNotFound()));
- connect(ui->bookmarkBtn, SIGNAL(clicked()), this, SLOT(addBookmark()));
-
- // 初期状態では検索ボックスは非表示
- ui->searchBox->setVisible(false);
// フォルダビューを初期化する
- ui->folderView->initialize(mainWnd);
+ ui->folderView->initialize(w);
+ // サムネイルビューを初期化する
+ ui->thumbnailView->initialize(w);
+
+ connect(ui->bookmarkBtn, SIGNAL(clicked()), w, SLOT(onAddBookmark()));
}
-void FolderPanel::updateAppearance(bool darker)
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::itemView
+/// \return アイテムビューを返します。
+///
+QAbstractItemView *FolderPanel::itemView() const
{
- QSettings settings;
- QPalette pal;
- int darkness = 100;
- if (darker) {
- darkness += settings.value(IniKey_Darkness).toInt();
+ if (ui->thumbnailView->isVisible()) {
+ return ui->thumbnailView;
}
-
- // ロケーションボックス
- pal = ui->locationBox->palette();
- pal.setColor(QPalette::Base, settings.value(IniKey_BoxColorBg).value<QColor>().darker(darkness));
- pal.setColor(QPalette::Text, settings.value(IniKey_BoxColorFg).value<QColor>().darker(darkness));
- ui->locationBox->setPalette(pal);
- ui->locationBox->setFont(settings.value(IniKey_BoxFont).value<QFont>());
-
- // モデル
- FileTableModel *model = qobject_cast<FileTableModel*>(ui->folderView->model());
- model->updateAppearance(darkness);
-
- // ビュー
- pal = ui->folderView->palette();
- pal.setColor(QPalette::Base, settings.value(IniKey_ViewColorBgNormal).value<QColor>().darker(darkness));
- ui->folderView->setPalette(pal);
-
- // 行の高さを設定する
- QHeaderView *header = ui->folderView->verticalHeader();
- header->setDefaultSectionSize(QFontMetrics(model->font()).height() * 1.5);
-
- // 列の幅を設定する
- header = ui->folderView->horizontalHeader();
- header->setSectionResizeMode(0, QHeaderView::Fixed);
- header->setSectionResizeMode(1, QHeaderView::Stretch);
- header->setSectionResizeMode(2, QHeaderView::ResizeToContents);
- header->setSectionResizeMode(3, QHeaderView::ResizeToContents);
- header->setSectionResizeMode(4, QHeaderView::ResizeToContents);
+ return ui->folderView;
}
-QLineEdit *FolderPanel::locationBox() const
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::folderView
+/// \return フォルダビューを返します。
+///
+//FolderView *FolderPanel::folderView() const
+//{
+// return ui->folderView;
+//}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::model
+/// \return 関連付けられたフォルダモデルを返します。
+///
+FolderModel *FolderPanel::model() const
{
- return ui->locationBox;
+ return static_cast<FolderModel*>(ui->folderView->model());
}
-FolderView *FolderPanel::folderView() const
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::setModel
+/// \param m 設定するモデル
+///
+/// モデルを設定します。
+///
+void FolderPanel::setModel(FolderModel *m)
{
- return ui->folderView;
-}
+ qDebug() << "FolderPanel::setModel()" << m;
+ if (model()) {
+ model()->disconnect(this);
+ }
-SearchBox *FolderPanel::searchBox() const
-{
- return ui->searchBox;
-}
+ ui->folderView->setModel(m);
+ ui->thumbnailView->setModel(m);
-QLabel *FolderPanel::filterLabel() const
-{
- return ui->filterLabel;
-}
+ if (model()) {
+ connect(model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(model_dataChanged(QModelIndex,QModelIndex)));
+ connect(model(), SIGNAL(modelReset()), this, SLOT(model_Reset()));
-void FolderPanel::setNameFilters(const QString &filters)
-{
- QStringList list = filters.split(" ", QString::SkipEmptyParts);
- if (list.isEmpty()) {
- list << "*";
+ model_Reset();
+ model_dataChanged(QModelIndex(), QModelIndex());
}
- ui->folderView->setNameFilters(list);
- showNameFilters();
-}
-
-void FolderPanel::showNameFilters()
-{
- ui->filterLabel->setText(tr("フィルタ:") + ui->folderView->nameFilters().join(" "));
}
-void FolderPanel::dataChange()
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::toggleSearch
+/// \param checked メニューのチェック状態
+///
+/// 検索ボックスの表示/非表示を切り替えます。
+///
+void FolderPanel::toggleSearch(bool checked)
{
- qDebug() << "FolderPanel::dataChange();";
+ qDebug() << "FolderPanel::toggleSearch()" << checked;
- FolderView *view = static_cast<FolderView*>(sender());
- Q_CHECK_PTR(view);
+ if (checked) {
+ if (!model()->isActive()) {
+ return;
+ }
- QFileInfoList list = view->checkedItems();
- if (list.isEmpty()) {
- showNameFilters();
+ ui->searchBox->setVisible(true);
+ ui->searchBox->setFocus();
+ ui->searchBox->selectAll();
}
else {
- int numFolders = 0;
- int numFiles = 0;
- quint64 size = 0;
- foreach (const QFileInfo &info, list) {
- if (info.isDir()) {
- numFolders++;
- }
- else {
- numFiles++;
- size += info.size();
- }
- }
-
- QString msg = QString::null;
- if (numFolders > 0) {
- msg += tr("%1個のフォルダ ").arg(numFolders);
- }
- if (numFiles > 0) {
- msg += tr("%1個のファイル ").arg(numFiles);
+ if (!ui->searchBox->isVisible()) {
+ return;
}
- if (!msg.isEmpty()) {
- msg += tr("を選択 合計%1").arg(FilesizeToString(size));
+ if (ui->searchBox->hasFocus()) {
+ itemView()->setFocus();
}
+ ui->searchBox->setVisible(false);
+ }
+}
- ui->filterLabel->setText(msg);
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::toggleView
+/// \param checked メニューのチェック状態
+///
+/// リスト/サムネイルを切り替えます。
+///
+void FolderPanel::toggleView(bool checked)
+{
+ QModelIndex index = itemView()->currentIndex();
+ if (checked) {
+ ui->folderView->setVisible(false);
+ ui->thumbnailView->setVisible(true);
+ ui->thumbnailView->setFocus();
}
+ else {
+ ui->thumbnailView->setVisible(false);
+ ui->folderView->setVisible(true);
+ ui->folderView->setFocus();
+ }
+ itemView()->setCurrentIndex(index);
}
-void FolderPanel::addBookmark()
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::updateAppearance
+///
+/// 外観を変更します。
+///
+void FolderPanel::updateAppearance()
{
- qDebug() << "FolderPanel::addBookmark();";
+ qDebug() << "FolderPanel::updateAppearance()";
- QSettings settings;
- int i = 0;
- while (!settings.value(IniKey_BookmarkEntryName(i), "").toString().isEmpty()) {
- i++;
- }
+ Preferences prefs(this);
+ QPalette pal;
- QFileInfo info(ui->folderView->dir());
- QString name = info.fileName();
- if (name.isEmpty()) {
- name = "root";
- }
- settings.setValue(IniKey_BookmarkEntryName(i), name);
- settings.setValue(IniKey_BookmarkEntryPath(i), info.absoluteFilePath());
+ pal = ui->locationBox->palette();
+ pal.setColor(QPalette::Base, prefs.locationBoxBgColor(model()->isActive()));
+ pal.setColor(QPalette::Text, prefs.locationBoxFgColor(model()->isActive()));
+ ui->locationBox->setPalette(pal);
+
+ pal = ui->searchBox->palette();
+ pal.setColor(QPalette::Base, prefs.getSearchBoxBgColor());
+ pal.setColor(QPalette::Text, prefs.getSearchBoxFgColor());
+ ui->searchBox->setPalette(pal);
+
+ pal = ui->folderView->palette();
+ pal.setColor(QPalette::Base, prefs.folderViewBgColor(model()->isActive()));
+ ui->folderView->setPalette(pal);
+
+ pal = ui->thumbnailView->palette();
+ pal.setColor(QPalette::Base, prefs.folderViewBgColor(model()->isActive()));
+ ui->thumbnailView->setPalette(pal);
- m_mainWnd->statusBar()->showMessage(tr("%1をブックマークに追加しました").arg(name));
+ QHeaderView *header = ui->folderView->verticalHeader();
+ QFont font = prefs.getFolderViewFont();
+ header->setDefaultSectionSize(QFontMetrics(font).height() * prefs.getLineHeight());
}
-void FolderPanel::itemFound()
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::searchNext
+/// \param step 次なら1, 前なら-1
+///
+/// 次または前のアイテムを検索します。
+///
+void FolderPanel::searchNext(int step)
{
- qDebug() << "FolderPanel::itemFound";
+ qDebug() << "FolderPanel::searchNext()" << step;
- QPalette pal = ui->searchBox->palette();
- pal.setColor(QPalette::Text, QPalette().text().color());
- ui->searchBox->setPalette(pal);
+ QModelIndex index = model()->search(ui->searchBox->text(),
+ itemView()->currentIndex(),
+ step);
+ showSearchResult(index);
}
-void FolderPanel::itemNotFound()
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::showSearchResult
+/// \param index 検索されたアイテム
+///
+/// 検索結果を表示します。
+///
+void FolderPanel::showSearchResult(const QModelIndex &index)
{
- qDebug() << "FolderPanel::itemNotFound";
+ Preferences prefs(this);
QPalette pal = ui->searchBox->palette();
- pal.setColor(QPalette::Text, Qt::red);
+ if (index.isValid()) {
+ itemView()->setCurrentIndex(index);
+ pal.setColor(QPalette::Base, prefs.getSearchBoxBgColor());
+ pal.setColor(QPalette::Text, prefs.getSearchBoxFgColor());
+ }
+ else {
+ pal.setColor(QPalette::Base, prefs.getSearchBoxUnmatchBgColor());
+ pal.setColor(QPalette::Text, prefs.getSearchBoxUnmatchFgColor());
+ }
ui->searchBox->setPalette(pal);
}
-void FolderPanel::searchItem(const QString &text)
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::model_dataChanged
+/// \param topLeft (使用しません)
+/// \param bottomRight (使用しません)
+///
+/// アイテムの選択状態変更に伴う処理を行います。
+///
+void FolderPanel::model_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
- qDebug() << "FolderPanel::searchItem" << text;
+ Q_UNUSED(topLeft);
+ Q_UNUSED(bottomRight);
- if (text.right(1) == "/") {
- // '/'が入力されたら、検索終了
- ui->searchBox->setText(text.left(text.length() - 1));
- ui->folderView->setFocus();
+ QFileInfoList list = model()->markedItems();
+ if (list.isEmpty()) {
+ ui->filterLabel->setText(tr("フィルタ:%1").arg(model()->nameFilters().join(" ")));
}
else {
- ui->folderView->searchItem(ui->searchBox->text());
+ int numFolders = 0;
+ int numFiles = 0;
+ qint64 totalSize = 0;
+ foreach (const QFileInfo &fi, list) {
+ if (fi.isDir()) {
+ ++numFolders;
+ }
+ else {
+ ++numFiles;
+ totalSize += fi.size();
+ }
+ }
+
+ QString text;
+ if (numFolders > 0) {
+ text += tr("%1個のフォルダ ").arg(numFolders);
+ }
+ if (numFiles > 0) {
+ text += tr("%1個のファイル ").arg(numFiles);
+ }
+ if (!text.isEmpty()) {
+ text += tr("を選択 合計%1").arg(FileSizeToString(totalSize));
+ }
+ ui->filterLabel->setText(text);
}
}
-void FolderPanel::focusInEvent(QFocusEvent *)
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::model_Reset
+///
+/// モデルリセット後の処理を行います。
+///
+void FolderPanel::model_Reset()
{
- qDebug() << "FolderPanel::focusInEvent();";
+ ui->locationBox->setText(model()->rootPath());
+ ui->filterLabel->setText(tr("フィルタ:%1").arg(model()->nameFilters().join(" ")));
+}
- ui->folderView->setFocus();
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::on_searchBox_textEdited
+/// \param arg1 入力テキスト
+///
+/// 検索ボックスのテキストが変更された場合の処理を行います。
+///
+void FolderPanel::on_searchBox_textEdited(const QString &arg1)
+{
+ if (arg1.right(1) == "/") {
+ ui->searchBox->setText(arg1.left(arg1.size() - 1));
+ // 検索終了
+ itemView()->setFocus();
+ }
+ else {
+ showSearchResult(model()->search(arg1));
+ }
}
#define FOLDERPANEL_H
#include <QWidget>
-class QLabel;
-class QLineEdit;
-class LocationBox;
-class FolderView;
-class SearchBox;
+#include <QAbstractItemView>
+class FolderModel;
class MainWindow;
+
namespace Ui {
class FolderPanel;
}
explicit FolderPanel(QWidget *parent = 0);
~FolderPanel();
- void initialize(MainWindow *mainWnd);
- void updateAppearance(bool darker = false);
-
- // getter
- QLineEdit *locationBox() const;
- FolderView* folderView() const;
- SearchBox* searchBox() const;
- QLabel* filterLabel() const;
-
- // setter
- void setNameFilters(const QString &filters = QString());
+// FolderView* folderView() const;
+ void initialize(MainWindow *w);
+ QAbstractItemView* itemView() const;
+ FolderModel* model() const;
+ void searchNext(int step = 1);
+ void setModel(FolderModel *m);
+ void toggleSearch(bool checked);
+ void toggleView(bool checked);
+ void updateAppearance();
private:
Ui::FolderPanel *ui;
MainWindow *m_mainWnd;
- void showNameFilters();
+ void showSearchResult(const QModelIndex &index);
public slots:
- void dataChange();
- void addBookmark();
- void itemFound();
- void itemNotFound();
- void searchItem(const QString& text);
-
- // QWidget interface
-protected:
- void focusInEvent(QFocusEvent *);
+
+private slots:
+ void model_dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight);
+ void model_Reset();
+ void on_searchBox_textEdited(const QString &arg1);
};
#endif // FOLDERPANEL_H
</property>
<item>
<widget class="QLineEdit" name="locationBox">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>26</height>
+ </size>
+ </property>
<property name="focusPolicy">
<enum>Qt::ClickFocus</enum>
</property>
+ <property name="text">
+ <string>LocationBox</string>
+ </property>
</widget>
</item>
<item>
<property name="wordWrap">
<bool>false</bool>
</property>
+ <attribute name="horizontalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
</widget>
</item>
<item>
- <widget class="SearchBox" name="searchBox">
+ <widget class="ThumbnailView" name="thumbnailView">
+ <property name="textElideMode">
+ <enum>Qt::ElideMiddle</enum>
+ </property>
+ <property name="viewMode">
+ <enum>QListView::IconMode</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="searchBox">
<property name="focusPolicy">
<enum>Qt::ClickFocus</enum>
</property>
+ <property name="text">
+ <string>SearchBox</string>
+ </property>
</widget>
</item>
<item>
</widget>
<customwidgets>
<customwidget>
- <class>SearchBox</class>
- <extends>QLineEdit</extends>
- <header>searchbox.h</header>
- </customwidget>
- <customwidget>
<class>FolderView</class>
<extends>QTableView</extends>
<header>folderview.h</header>
</customwidget>
+ <customwidget>
+ <class>ThumbnailView</class>
+ <extends>QListView</extends>
+ <header>thumbnailview.h</header>
+ </customwidget>
</customwidgets>
<resources>
<include location="resource.qrc"/>
-#include "common.h"
#include "mainwindow.h"
+#include "preferences.h"
#include "folderpanel.h"
#include "folderview.h"
+#include <QApplication>
#include <QDebug>
+#include <QDrag>
#include <QHeaderView>
-#include <QKeyEvent>
-#include <QSettings>
+#include <QMouseEvent>
#include <QMimeData>
-#include <QApplication>
-#include <QDrag>
-#include <QMenu>
-#include <QStatusBar>
-
-QString FilesizeToString(quint64 size)
-{
- if (size >= 1024 * 1024 * 1024) {
- return QString("%1GB").arg(int(10 * size / (1024 * 1024 * 1024)) / 10);
- }
- if (size >= 1024 * 1024) {
- return QString("%1MB").arg(int(10 * size / (1024 * 1024)) / 10);
- }
- if (size >= 1024) {
- return QString("%1KB").arg(int(10 * size / (1024)) / 10);
- }
- return QString("%1B").arg(size);
-}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderView::FolderView
+/// \param parent 親ウィジェット
+///
+/// コンストラクタ
+///
FolderView::FolderView(QWidget *parent) :
QTableView(parent),
- m_mainWnd(NULL),
- m_model(),
+ AbstractView(),
m_dragStartPos(),
- m_dragging(false)
+ m_dragging(false),
+ m_saveRow(0),
+ m_savePath(),
+ m_saveName()
{
- setModel(&m_model);
- connect(&m_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(dataChanged(QModelIndex,QModelIndex)));
- connect(&m_model, SIGNAL(preReload()), this, SLOT(preReload()));
- connect(&m_model, SIGNAL(postReload()), this, SLOT(postReload()));
-
setDragEnabled(true);
setAcceptDrops(true);
setDropIndicatorShown(true);
-
setContextMenuPolicy(Qt::DefaultContextMenu);
}
-QString FolderView::side() const
-{
- if (this->objectName() == "folderView1") {
- return QString("Left");
- }
- else {
- Q_ASSERT(this->objectName() == "folderView2");
- return QString("Right");
- }
-}
-
-void FolderView::initialize(MainWindow *mainWnd)
-{
- qDebug() << side() << "initialize";
-
- m_mainWnd = mainWnd;
-
- setColumnWidth(0, 30);
-
- // ソート順を初期化する
- setSorting();
-
- // ネームフィルタを初期化する
- setNameFilters(QStringList() << "*");
-
- // 前回終了時のパスを開く
- QSettings settings;
- setPath(settings.value(side() + slash + IniKey_Dir).toString(), true);
-}
-
-void FolderView::refresh()
-{
- qDebug() << side() << "refresh";
-
- preReload();
-
- setPath(m_model.absolutePath(), false);
-
- postReload();
-}
-
-void FolderView::preReload()
-{
- // 現在行と名前を保存しておく
- m_saveRow = currentIndex().row();
- m_saveName = currentItem().fileName();
-}
-
-void FolderView::postReload()
-{
- // 保存した名前と同名アイテムが見つかれば、再選択する
- for (int row = 0; row < m_model.rowCount(); row++) {
- QModelIndex index = m_model.index(row, 1);
- if (m_model.fileInfo(index).fileName().indexOf(m_saveName) != -1) {
- setCurrentIndex(index);
- return;
- }
- }
-
- // 同名アイテムが見つからなければ、行を維持する
- if (m_saveRow >= m_model.rowCount()) {
- m_saveRow = m_model.rowCount() - 1;
- }
- setCurrentIndex(m_model.index(m_saveRow, 1));
-}
-
-void FolderView::searchItem(const QString &text)
-{
- qDebug() << side() << "searchItem" << text;
-
- for (int row = 0; row < m_model.rowCount(); row++) {
- QModelIndex index = m_model.index(row, 1);
- QString name = m_model.fileInfo(index).fileName().toLower();
- if (name.indexOf(text.toLower()) != -1) {
- setCurrentIndex(index);
- emit itemFound();
- return;
- }
- }
-
- emit itemNotFound();
-}
-
-void FolderView::searchNext(const QString &text)
-{
- qDebug() << side() << "searchNext" << text;
-
- for (int row = currentIndex().row() + 1; row < m_model.rowCount(); row++) {
- QModelIndex index = m_model.index(row, 1);
- QString name = m_model.fileInfo(index).fileName().toLower();
- if (name.indexOf(text.toLower()) != -1) {
- setCurrentIndex(index);
- emit itemFound();
- return;
- }
- }
-
- emit itemNotFound();
-}
-
-void FolderView::searchPrev(const QString &text)
-{
- qDebug() << side() << "searchPrev" << text;
-
- for (int row = currentIndex().row() - 1; row >= 0; row--) {
- QModelIndex index = m_model.index(row, 1);
- QString name = m_model.fileInfo(index).fileName().toLower();
- if (name.indexOf(text.toLower()) != -1) {
- setCurrentIndex(index);
- emit itemFound();
- return;
- }
- }
-
- emit itemNotFound();
-}
-
-void FolderView::setCheckStateAll(Qt::CheckState state)
-{
- qDebug() << side() << "setCheckStateAll();" << state;
-
- QModelIndex current = currentIndex();
-
- for (int n = 0; n < m_model.rowCount(); n++) {
- m_model.setData(m_model.index(n, 0), state, Qt::CheckStateRole);
- }
-
- setCurrentIndex(current);
-}
-
-void FolderView::setCheckStateAllFiles()
-{
- qDebug() << side() << "setCheckStateAllFiles();";
-
- QModelIndex current = currentIndex();
-
- for (int n = 0; n < m_model.rowCount(); n++) {
- QModelIndex index = m_model.index(n, 0);
- QFileInfo info = m_model.fileInfo(index);
- if (info.isDir()) {
- m_model.setData(index, Qt::Unchecked, Qt::CheckStateRole);
- }
- else {
- m_model.setData(index, Qt::Checked, Qt::CheckStateRole);
- }
- }
-
- setCurrentIndex(current);
-}
-
-void FolderView::invertCheckState()
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderView::initialize
+/// \param w メインウィンドウオブジェクト
+///
+/// 初期化処理を行います。
+///
+void FolderView::initialize(MainWindow *w)
{
- qDebug() << side() << "invertCheckState();";
+ qDebug() << "FolderView::initialize()";
- QModelIndex current = currentIndex();
+ connect(this, SIGNAL(doubleClicked(QModelIndex)), w, SLOT(onOpen(QModelIndex)));
+ connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ w, SLOT(view_currentChanged(QModelIndex,QModelIndex)));
- for (int n = 0; n < m_model.rowCount(); n++) {
- QModelIndex index = m_model.index(n, 0);
- if (m_model.data(index, Qt::CheckStateRole).toInt() == Qt::Checked) {
- m_model.setData(index, Qt::Unchecked, Qt::CheckStateRole);
- }
- else {
- m_model.setData(index, Qt::Checked, Qt::CheckStateRole);
- }
- }
-
- setCurrentIndex(current);
-}
-
-void FolderView::toggleCheckState(const QModelIndex &index)
-{
- qDebug() << side() << "toggleCheckState();" << index;
-
- QFileInfo info = m_model.fileInfo(index);
- if (info.fileName() != "..") {
- QModelIndex chkIndex = m_model.index(index.row(), 0);
- if (m_model.data(chkIndex, Qt::CheckStateRole).toInt() == Qt::Checked) {
- m_model.setData(chkIndex, Qt::Unchecked, Qt::CheckStateRole);
- }
- else {
- m_model.setData(chkIndex, Qt::Checked, Qt::CheckStateRole);
- }
- }
- // 最終行でなければ、次のアイテムに移動する
- if (index.row() == m_model.rowCount() - 1) {
- setCurrentIndex(index);
- }
- else if (index.row() < m_model.rowCount() - 1) {
- setCurrentIndex(m_model.index(index.row() + 1, 1));
- }
-}
-
-bool FolderView::historyBack()
-{
- if (!m_history.isBegin()) {
- setPath(m_history.back(), false);
- return true;
- }
- return false;
-}
-
-bool FolderView::historyForward()
-{
- if (!m_history.isEnd()) {
- setPath(m_history.forward(), false);
- return true;
- }
- return false;
-}
-
-QFileInfo FolderView::currentItem() const
-{
- qDebug() << side() << "currentItem";
-
- return m_model.fileInfo(currentIndex());
-}
-
-QFileInfoList FolderView::checkedItems() const
-{
- qDebug() << side() << "checkedItems()";
-
- QFileInfoList list;
- for (int n = 0; n < m_model.rowCount(); n++) {
- QModelIndex index = m_model.index(n, 0);
- if (m_model.data(index, Qt::CheckStateRole).toInt() == Qt::Checked) {
- list << m_model.fileInfo(index);
- }
- }
- return list;
+ installEventFilter(w);
+ viewport()->installEventFilter(w);
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderView::selectedItems
+/// \return
+///
QFileInfoList FolderView::selectedItems() const
{
- qDebug() << side() << "selectedItems";
-
- // マークされているアイテムを取得する
- QFileInfoList list = checkedItems();
-
- // 一つもマークされていなければ、カーソル位置のアイテムを取得する
+ QFileInfoList list = folderModel()->markedItems();
if (list.isEmpty()) {
- list << currentItem();
+ list << folderModel()->fileInfo(currentIndex());
}
return list;
}
-FolderPanel *FolderView::parentPanel() const
-{
- return qobject_cast<FolderPanel*>(parentWidget());
-}
-
-void FolderView::setPath(const QString &path, bool addHistory)
-{
- qDebug() << side() << "setPath" << path << addHistory;
-
- Q_ASSERT(QFileInfo(path).isDir());
-
- m_mainWnd->statusBar()->showMessage(tr("ファイルリストを取得しています..."));
- emit retrieveStarted(path);
-
- m_model.setPath(path);
- setCurrentIndex(m_model.index(0, 1));
-
- if (addHistory) {
- m_history.add(path);
- }
-
- m_mainWnd->statusBar()->showMessage(tr("レディ"));
-}
-
-void FolderView::setFilter(QDir::Filters filter, bool enable)
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderView::model_PreReset
+///
+/// モデルリセット前の処理
+///
+void FolderView::model_PreReset()
{
- qDebug() << side() << "setFilter" << enable;
+ qDebug() << "FolderView::model_PreReset()";
- if (enable) {
- m_model.setFilter(m_model.filter() | filter);
+ // 現在行と名前を保存しておく
+ if (model() && currentIndex().isValid()) {
+ m_saveRow = currentIndex().row();
+ m_saveName = folderModel()->fileName(currentIndex());
+ m_savePath = folderModel()->rootPath();
}
else {
- m_model.setFilter(m_model.filter() ^ filter);
+ m_saveRow = 0;
+ m_saveName = QString::null;
+ m_savePath = QString::null;
}
}
-void FolderView::setHistoryIndexAt(int index)
-{
- m_history.setAt(index);
- setPath(m_history.current(), false);
-}
-
-void FolderView::setNameFilters(const QStringList &list)
-{
- m_model.setNameFilters(list);
-}
-
-void FolderView::setSorting()
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderView::model_PostReset
+///
+/// モデルリセット後の処理
+///
+void FolderView::model_PostReset()
{
- qDebug() << side() << "setSorting();";
-
- QSettings settings;
- QDir::SortFlags flags;
+ qDebug() << "FolderView::model_PostReset()";
- int sortBy = settings.value(side() + slash + IniKey_SortBy).toInt();
- switch (sortBy) {
- case SortByDate: flags |= QDir::Time; break;
- case SortBySize: flags |= QDir::Size; break;
- case SortByType: flags |= QDir::Type; break;
- default: flags |= QDir::Name; break;
- }
-
- // デフォルトだと文字列は昇順で、数値は降順…orz
- int orderBy = settings.value(side() + slash + IniKey_OrderBy).toInt();
- if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||
- ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))
- {
- flags |= QDir::Reversed;
- }
-
- switch (settings.value(side() + slash + IniKey_PutDirs).toInt()) {
- case PutDirsFirst: flags |= QDir::DirsFirst; break;
- case PutDirsLast: flags |= QDir::DirsLast; break;
+ // フォルダが変わった場合は先頭行を選択する
+ if (m_savePath != folderModel()->rootPath()) {
+ setCurrentIndex(model()->index(0, 0));
+ return;
}
- if (settings.value(side() + slash + IniKey_IgnoreCase).toBool()) {
- flags |= QDir::IgnoreCase;
+ // 保存した名前と同名アイテムが見つかれば、再選択する
+ for (int row = 0; row < model()->rowCount(); row++) {
+ QModelIndex index = model()->index(row, 0);
+ if (folderModel()->fileName(index) == m_saveName) {
+ setCurrentIndex(index);
+ return;
+ }
}
- m_model.setSorting(flags);
-}
-
-void FolderView::keyPressEvent(QKeyEvent *event)
-{
- qDebug() << side() << "keyPressEvent";
-
- if (IsKeyUpDown(event)) {
- QTableView::keyPressEvent(event);
- event->accept();
- return;
+ // 同名アイテムが見つからなければ、行を維持する
+ if (m_saveRow >= model()->rowCount()) {
+ m_saveRow = model()->rowCount() - 1;
}
-
- // MainWindowへ
- event->ignore();
-}
-
-void FolderView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)
-{
- qDebug() << side() << "dataChanged();";
-
- emit dataChanged();
-
- QTableView::dataChanged(topLeft, bottomRight, roles);
-}
-
-void FolderView::currentChanged(const QModelIndex ¤t, const QModelIndex &previous)
-{
- qDebug() << side() << "currentChanged();" << current;
-
- emit currentChanged(m_model.fileInfo(current));
-
- QTableView::currentChanged(current, previous);
+ setCurrentIndex(model()->index(m_saveRow, 1));
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderView::mousePressEvent
+/// \param event
+///
void FolderView::mousePressEvent(QMouseEvent *event)
{
- if ((event->buttons() & Qt::LeftButton) || (event->buttons() & Qt::RightButton))
+ m_dragStartPos = QPoint();
+ if ((event->buttons() & Qt::LeftButton) ||
+ (event->buttons() & Qt::RightButton))
{
- m_dragStartPos = event->pos();
+ QModelIndex index = indexAt(event->pos());
+ if (index.isValid() && folderModel()->fileName(index) != "..") {
+ m_dragStartPos = event->pos();
+ }
}
QTableView::mousePressEvent(event);
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderView::mouseMoveEvent
+/// \param event
+///
void FolderView::mouseMoveEvent(QMouseEvent *event)
{
if (!(event->buttons() & Qt::LeftButton) &&
- !(event->buttons() & Qt::RightButton))
+ !(event->buttons() & Qt::RightButton))
{
QTableView::mouseMoveEvent(event);
return;
}
- if ((event->pos() - m_dragStartPos).manhattanLength()
- < QApplication::startDragDistance())
+ if (m_dragStartPos.isNull() ||
+ (event->pos() - m_dragStartPos).manhattanLength() < qApp->startDragDistance())
{
QTableView::mouseMoveEvent(event);
return;
}
QFileInfoList list = selectedItems();
- if (list.isEmpty()) {
- QTableView::mousePressEvent(event);
+ if (list.size() == 1 && list[0].fileName() == "..") {
+ QTableView::mouseMoveEvent(event);
return;
}
drag->setMimeData(mimeData);
m_dragging = true;
- if (event->buttons() & Qt::RightButton) {
- drag->exec(Qt::CopyAction | Qt::MoveAction);
- }
- else {
- drag->exec(Qt::CopyAction);
- }
+ drag->exec(Qt::CopyAction);
m_dragging = false;
+ m_dragStartPos = QPoint();
}
void FolderView::dragEnterEvent(QDragEnterEvent *event)
{
+ qDebug() << "FolderView::dragEnterEvent()";
+
if (event->mimeData()->hasUrls()) {
event->acceptProposedAction();
return;
QTableView::dragEnterEvent(event);
}
-void FolderView::dropEvent(QDropEvent *event)
+void FolderView::setModel(QAbstractItemModel *model)
{
- qDebug() << side() << "dropEvent();";
-
- if (m_dragging) {
- event->ignore();
- return;
+ if (this->model()) {
+ this->model()->disconnect(this);
}
- QFileInfoList list;
- foreach (const QUrl &url, event->mimeData()->urls()) {
- QString path = QFileInfo(url.toLocalFile()).canonicalFilePath();
- if (!path.isEmpty()) {
- list << path;
- }
- else {
- qDebug() << "path is empty." << url;
- }
- }
+ QTableView::setModel(model);
- if (list.isEmpty()) {
- event->ignore();
- return;
- }
+ if (this->model()) {
+ connect(this->model(), SIGNAL(modelAboutToBeReset()), this, SLOT(model_PreReset()));
+ connect(this->model(), SIGNAL(modelReset()), this, SLOT(model_PostReset()));
- event->acceptProposedAction();
-
- emit dropAccepted(list, event);
+ // 列の幅を設定する
+ horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
+ horizontalHeader()->setSectionResizeMode(FolderModel::Name,
+ QHeaderView::Stretch);
+ }
}
-
-void FolderView::contextMenuEvent(QContextMenuEvent *event)
+void FolderView::scaleUp()
{
- qDebug() << side() << "contextMenuEvent();";
+ Preferences prefs(this);
+ QFont font = prefs.getFolderViewFont();
+ font.setPointSize(font.pointSize() + 1);
+ prefs.setFolderViewFont(font);
+}
- emit requestContextMenu(event);
+void FolderView::scaleDown()
+{
+ Preferences prefs(this);
+ QFont font = prefs.getFolderViewFont();
+ font.setPointSize(font.pointSize() - 1);
+ prefs.setFolderViewFont(font);
}
#ifndef FOLDERVIEW_H
#define FOLDERVIEW_H
-#include "filetablemodel.h"
-#include "history.h"
+#include "abstractview.h"
+#include "foldermodel.h"
#include <QTableView>
class MainWindow;
-class FolderPanel;
-class FolderView : public QTableView
+class FolderView : public QTableView, public AbstractView
{
Q_OBJECT
+ Q_PROPERTY(bool dragging MEMBER m_dragging READ isDragging())
+
public:
explicit FolderView(QWidget *parent = 0);
- QString side() const;
-
- // actions
- void initialize(MainWindow *mainWnd);
-
- void searchItem(const QString &text);
- void searchNext(const QString &text);
- void searchPrev(const QString &text);
-
- void setCheckStateAll(Qt::CheckState state);
- void setCheckStateAllFiles();
- void invertCheckState();
- void toggleCheckState(const QModelIndex &index);
-
- bool historyBack();
- bool historyForward();
-
- // getter
- QFileInfo currentItem() const;
- QString dir() const { return m_model.absolutePath(); }
- QFileInfoList checkedItems() const;
- QFileInfoList selectedItems() const;
- const History* history() const { return &m_history; }
- QStringList nameFilters() const { return m_model.nameFilters(); }
- FolderPanel *parentPanel() const;
-
-
- // setter
- void setPath(const QString &path, bool addHistory);
- void setFilter(QDir::Filters filter, bool enable);
- void setHistoryIndexAt(int index);
- void setNameFilters(const QStringList &list);
- void setSorting();
+ void initialize(MainWindow *w);
+ bool isDragging();
+ FolderModel* folderModel() const;
+ QFileInfoList selectedItems() const;
private:
- MainWindow *m_mainWnd;
- FileTableModel m_model;
- History m_history;
- QPoint m_dragStartPos;
- bool m_dragging;
- int m_saveRow;
+ QPoint m_dragStartPos;
+ bool m_dragging;
+ int m_saveRow;
+ QString m_savePath;
QString m_saveName;
signals:
- void currentChanged(const QFileInfo &info);
- void dataChanged();
- void dropAccepted(const QFileInfoList &list, QDropEvent *event);
- void itemFound();
- void itemNotFound();
- void retrieveStarted(const QString &path);
- void requestContextMenu(QContextMenuEvent *event);
-public slots:
- void refresh();
- void preReload();
- void postReload();
-
- // QAbstractItemView interface
-protected slots:
- void currentChanged(const QModelIndex ¤t, const QModelIndex &previous);
- void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>());
+private slots:
+ void model_PreReset();
+ void model_PostReset();
// QWidget interface
protected:
- void keyPressEvent(QKeyEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void dragEnterEvent(QDragEnterEvent *event);
- void dropEvent(QDropEvent *event);
- void contextMenuEvent(QContextMenuEvent *event);
+
+ // QAbstractItemView interface
+public:
+ void setModel(QAbstractItemModel *model);
+
+ // AbstractView interface
+public:
+ void scaleUp();
+ void scaleDown();
};
+inline bool FolderView::isDragging()
+{
+ return m_dragging;
+}
+
+inline FolderModel *FolderView::folderModel() const
+{
+ return static_cast<FolderModel*>(model());
+}
+
#endif // FOLDERVIEW_H
--- /dev/null
+#include "global.h"
+
+void appendActionShortcut(QAction *action, const QString &ks)
+{
+ QList<QKeySequence> shortcuts = action->shortcuts();
+ shortcuts << QKeySequence(ks);
+ action->setShortcuts(shortcuts);
+}
+
+QString FileSizeToString(qint64 size)
+{
+ if (size >= 1024 * 1024 * 1024) {
+ return QString("%1GB").arg(int(10 * size / (1024 * 1024 * 1024)) / 10);
+ }
+ if (size >= 1024 * 1024) {
+ return QString("%1MB").arg(int(10 * size / (1024 * 1024)) / 10);
+ }
+ if (size >= 1024) {
+ return QString("%1KB").arg(int(10 * size / (1024)) / 10);
+ }
+ return QString("%1B").arg(size);
+}
--- /dev/null
+#ifndef GLOBAL_H
+#define GLOBAL_H
+
+#define QQ(x) ("\"" + QString(x) + "\"")
+
+#include <QAction>
+#include <QKeySequence>
+#include <QMap>
+#include <QString>
+
+typedef QMap<QString, QString> StringMap;
+
+extern void appendActionShortcut(QAction *action, const QString &ks);
+extern QString FileSizeToString(qint64 size);
+
+#endif // GLOBAL_H
+++ /dev/null
-#include "history.h"
-
-History::History() :
- m_list(),
- m_pos(0)
-{
-}
-
-void History::add(const QString &path)
-{
- // 現在位置より後ろのデータは削除する
- if (!isEmpty() && !isEnd()) {
- m_list.resize(m_pos + 1);
- }
- // 現在位置と異なるパスであれば追加する
- if (isEmpty() || (m_list[m_pos] != path)) {
- m_list << path;
- }
- m_pos = m_list.size() - 1;
-}
-
-const QString &History::back()
-{
- if (!isBegin()) {
- m_pos--;
- }
- return m_list[m_pos];
-}
-
-const QString &History::forward()
-{
- if (!isEnd()) {
- m_pos++;
- }
- return m_list[m_pos];
-}
+++ /dev/null
-#include <QStringList>
-
-#ifndef HISTORY_H
-#define HISTORY_H
-
-#include <QVector>
-
-class History
-{
- typedef QVector<QString> Container;
-
-public:
- History();
-
- void add(const QString &path);
-
- const QString& back();
- const QString& forward();
- const QString& current() const { return m_list[m_pos]; }
-
- bool isBegin() const { return m_pos == 0; }
- bool isEnd() const { return m_pos == m_list.size() - 1; }
- bool isEmpty() const { return m_list.isEmpty(); }
-
- int size() const { return m_list.size(); }
- const QString& at(int n) const { return m_list.at(n); }
- void setAt(int n) { m_pos = n; }
-
-private:
- Container m_list;
- int m_pos;
-};
-
-#endif // HISTORY_H
-#include "common.h"
-#include "mainwindow.h"
+#include "foldermodel.h"
#include "historydialog.h"
#include "ui_historydialog.h"
HistoryDialog::HistoryDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::HistoryDialog),
- m_leftHistory(NULL),
- m_rightHistory(NULL),
- m_displaying(NULL)
+ m_leftModel(NULL),
+ m_rightModel(NULL),
+ m_activeModel(NULL)
{
ui->setupUi(this);
resize(parent->width() * 0.8, height());
delete ui;
}
-void HistoryDialog::setHistory(const History *left, const History *right)
+void HistoryDialog::setModel(const FolderModel *left, const FolderModel *right, FolderModel *active)
{
- m_leftHistory = left;
- m_rightHistory = right;
-}
+ m_leftModel = left;
+ m_rightModel = right;
+ m_activeModel = active;
-void HistoryDialog::setDefaultLeft(bool bLeft)
-{
- if (bLeft) {
- ui->leftPane->setChecked(true);
+ if (active == left) {
+ ui->radioLeft->click();
}
else {
- ui->rightPane->setChecked(true);
+ ui->radioRight->click();
}
-}
-int HistoryDialog::selectedIndex() const
-{
- int row = ui->listWidget->currentIndex().row();
- return m_displaying->size() - row - 1;
-}
-
-const QString HistoryDialog::selectedSide() const
-{
- if (ui->leftPane->isChecked()) {
- return QString("Left");
+ for (int n = left->history().size() - 1; n >= 0; --n) {
+ ui->listLeft->addItem(left->history().at(n));
}
- else {
- return QString("Right");
+ for (int n = right->history().size() - 1; n >= 0; --n) {
+ ui->listRight->addItem(right->history().at(n));
}
}
-void HistoryDialog::showLeftHistory()
+void HistoryDialog::on_radioLeft_clicked()
{
- if (m_displaying != m_leftHistory) {
- m_displaying = m_leftHistory;
- showHistory();
- }
-
+ ui->listRight->setVisible(false);
+ ui->listLeft->setVisible(true);
}
-void HistoryDialog::showRightHistory()
+void HistoryDialog::on_radioRight_clicked()
{
- if (m_displaying != m_rightHistory) {
- m_displaying = m_rightHistory;
- showHistory();
- }
+ ui->listLeft->setVisible(false);
+ ui->listRight->setVisible(true);
}
-void HistoryDialog::showHistory()
+void HistoryDialog::accept()
{
- ui->listWidget->clear();
- for (int n = 0; n < m_displaying->size(); n++) {
- ui->listWidget->insertItem(0, m_displaying->at(n));
+ QString path;
+ const FolderModel *selected;
+ if (ui->radioLeft->isChecked()) {
+ selected = m_leftModel;
+ path = ui->listLeft->currentItem()->text();
+ }
+ else {
+ selected = m_rightModel;
+ path = ui->listRight->currentItem()->text();
}
- ui->listWidget->setCurrentRow(0);
-}
-
-void HistoryDialog::showEvent(QShowEvent *event)
-{
- Q_UNUSED(event);
- if (ui->leftPane->isChecked()) {
- showLeftHistory();
+ if (selected == m_activeModel) {
+ m_activeModel->setHistoryAt(path);
}
else {
- showRightHistory();
+ m_activeModel->setRootPath(path);
}
-
- connect(ui->leftPane, SIGNAL(clicked()), this, SLOT(showLeftHistory()));
- connect(ui->rightPane, SIGNAL(clicked()), this, SLOT(showRightHistory()));
- connect(ui->listWidget, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept()));
}
#ifndef HISTORYDIALOG_H
#define HISTORYDIALOG_H
-#include "history.h"
-
#include <QDialog>
+class FolderModel;
namespace Ui {
class HistoryDialog;
explicit HistoryDialog(QWidget *parent = 0);
~HistoryDialog();
- void setHistory(const History *left, const History *right);
- void setDefaultLeft(bool bLeft);
+ void setModel(const FolderModel *left,
+ const FolderModel *right,
+ FolderModel *active);
- int selectedIndex() const;
- const QString selectedSide() const;
+private slots:
+ void on_radioLeft_clicked();
+ void on_radioRight_clicked();
private:
Ui::HistoryDialog *ui;
- const History *m_leftHistory;
- const History *m_rightHistory;
- const History *m_displaying;
-
-private slots:
- void showLeftHistory();
- void showRightHistory();
- void showHistory();
+ const FolderModel *m_leftModel;
+ const FolderModel *m_rightModel;
+ FolderModel *m_activeModel;
- // QWidget interface
-protected:
- void showEvent(QShowEvent *event);
+ // QDialog interface
+public slots:
+ void accept();
};
#endif // HISTORYDIALOG_H
<rect>
<x>0</x>
<y>0</y>
- <width>280</width>
- <height>286</height>
+ <width>548</width>
+ <height>288</height>
</rect>
</property>
<property name="windowTitle">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="QRadioButton" name="leftPane">
+ <widget class="QRadioButton" name="radioLeft">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>å·¦ã\83\9aã\82¤ã\83³</string>
+ <string>å·¦ã\83\91ã\83\8dã\83«</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</widget>
</item>
<item>
- <widget class="QRadioButton" name="rightPane">
+ <widget class="QRadioButton" name="radioRight">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>å\8f³ã\83\9aã\82¤ã\83³</string>
+ <string>å\8f³ã\83\91ã\83\8dã\83«</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</layout>
</item>
<item>
- <widget class="QListWidget" name="listWidget">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- </widget>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QListWidget" name="listLeft">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QListWidget" name="listRight">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
</layout>
</widget>
<tabstops>
- <tabstop>listWidget</tabstop>
- <tabstop>leftPane</tabstop>
- <tabstop>rightPane</tabstop>
+ <tabstop>listLeft</tabstop>
+ <tabstop>radioLeft</tabstop>
+ <tabstop>radioRight</tabstop>
</tabstops>
<resources/>
<connections>
\r
; HM NIS Edit Wizard helper defines\r
!define PRODUCT_NAME "Gefu"\r
-!define PRODUCT_VERSION "0.20"\r
+!define PRODUCT_VERSION "0.21"\r
!define PRODUCT_PUBLISHER "@miyabi_satoh"\r
!define PRODUCT_WEB_SITE "http://gefu.sourceforge.jp/"\r
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Gefu.exe"\r
; MUI end ------\r
\r
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"\r
-OutFile "Gefu020_full_setup.exe"\r
+OutFile "Gefu021_full_setup.exe"\r
InstallDir "$PROGRAMFILES\Gefu"\r
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""\r
ShowInstDetails show\r
\r
; HM NIS Edit Wizard helper defines\r
!define PRODUCT_NAME "Gefu"\r
-!define PRODUCT_VERSION "0.20"\r
+!define PRODUCT_VERSION "0.21"\r
!define PRODUCT_PUBLISHER "@miyabi_satoh"\r
!define PRODUCT_WEB_SITE "http://gefu.sourceforge.jp/"\r
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Gefu.exe"\r
; MUI end ------\r
\r
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"\r
-OutFile "Gefu020_Setup.exe"\r
+OutFile "Gefu021_Setup.exe"\r
InstallDir "$PROGRAMFILES\Gefu"\r
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""\r
ShowInstDetails show\r
+++ /dev/null
-#include "irenamedialog.h"\r
-\r
-IRenameDialog::IRenameDialog(QWidget *parent) :\r
- QDialog(parent)\r
-{\r
-}\r
-\r
-void IRenameDialog::setWorkingDirectory(const QString &path)\r
-{\r
- m_dir.setPath(path);\r
-}\r
+++ /dev/null
-#ifndef IRENAMEDIALOG_H\r
-#define IRENAMEDIALOG_H\r
-\r
-#include <QDialog>\r
-#include <QDir>\r
-#include "common.h"\r
-\r
-class IRenameDialog : public QDialog\r
-{\r
- Q_OBJECT\r
-public:\r
- explicit IRenameDialog(QWidget *parent = 0);\r
-\r
- const StringMap& renameMap() const { return m_RenameMap; }\r
-\r
- void setWorkingDirectory(const QString &path);\r
- virtual void setNames(const QFileInfoList &names) = 0;\r
-\r
-signals:\r
-\r
-public slots:\r
-\r
-protected:\r
- QDir m_dir;\r
- StringMap m_RenameMap;\r
-};\r
-\r
-#endif // IRENAMEDIALOG_H\r
= フォルダビュー
||キー ||装飾なし ||Shift ||Alt ||Ctrl(Command) ||覚え方 ||
||A ||すべてのファイルをマーク ||すべてマーク || || ||All ||
-||B ||ブックマークを表示 ||ブックマークを編集 || || ||Bookmark ||
+||B ||ブックマークを表示 ||ブックマークを編集 || ||ブックマークを追加 ||Bookmark ||
||C ||ファイル名をクリップボードにコピー ||フルパスをクリップボードにコピー || ||隣のパネルにアイテムをコピー ||Copy ||
||D || || || ||選択アイテムを削除 ||Delete ||
-||E ||外部エディタで開く || || ||ファイルを作成 ||Edit, newの「E」 ||
+||E ||外部エディタで開く || || ||ファイルを作成 ||Edit ||
||G ||フォルダを選択して移動 || || || ||Go ||
||H ||ホームフォルダに移動 ||隠しファイルを表示/非表示 || || ||Home, Hide ||
||I ||マークを反転 || || || ||Invert ||
||M ||開く ||アプリケーションで開く || ||隣のパネルにアイテムを移動 ||viのキーバインド, Move ||
||O ||隣のパネルと同じフォルダを表示 ||隣のパネルに同じフォルダを表示 || || ||Onaji(同じ) ||
||P ||プレビューモードに切り替え/解除 || || || ||Preview ||
-||R ||履歴を表示 || || ||名前の変更 ||Rireki, Rename ||
+||R ||履歴を表示 || || ||名前の変更 ||Rireki(履歴), Rename ||
||S ||ソート方法を選択 ||システムファイルを表示/非表示 || || ||Sort, System ||
||U ||すべてのマークを解除 ||アーカイバで開く || || ||Unmark, Unpack ||
||W ||表示フォルダを交換 || || || ||swapの「W」 ||
||/ ||ファイル検索開始/終了 || || || || ||
||← ||親フォルダに移動/隣のパネルに移動 ||右パネルを拡大 || || || ||
||→ ||親フォルダに移動/隣のパネルに移動 ||左パネルを拡大 || || || ||
+||, ||単画面/二画面を切り替え || || || ||< ||
+||. ||リスト/サムネイルを切り替え || || || ||> ||
= テキストビューア
||キー ||装飾なし ||Shift ||Alt ||Ctrl(Command) ||覚え方 ||
-#include "common.h"\r
#include "mainwindow.h"\r
\r
-#include <QDebug>\r
#include <QApplication>\r
-#include <QSettings>\r
-#include <QDir>\r
-#include <QAction>\r
-#include <QTimer>\r
\r
int main(int argc, char *argv[])\r
{\r
QApplication a(argc, argv);\r
- a.setOrganizationName("gefu");\r
- a.setOrganizationDomain("sourceforge.jp");\r
- a.setApplicationName("Gefu");\r
- a.setWindowIcon(QIcon("://images/file-manager.png"));\r
-\r
- QSettings::setDefaultFormat(QSettings::IniFormat);\r
- QSettings settings;\r
- if (settings.value(IniKey_ResetOnBoot, false).toBool()) {\r
- settings.clear();\r
- }\r
-\r
- // 各オプションのデフォルト値を設定する\r
- QFont font = a.font();\r
-#ifdef Q_OS_WIN\r
- font.setFamily("MS ゴシック");\r
-#else\r
- font.setFamily("Monaco");\r
-#endif\r
- //>>>>> 起動と終了\r
- if (settings.value(IniKey_ConfirmExit, "").toString().isEmpty()) {\r
- settings.setValue(IniKey_ConfirmExit, true);\r
- settings.setValue(IniKey_BootSizeSpec, "sizeRelative");\r
- settings.setValue(IniKey_BootSizeAbs, QSize(800,600));\r
- settings.setValue(IniKey_BootSizeRel, QSize(75,75));\r
- settings.setValue(IniKey_BootPosSpec, "posCenter");\r
- settings.setValue(IniKey_BootPosAbs, QPoint(0, 0));\r
- settings.setValue(IniKey_BootPosRel, QPoint(0, 0));\r
- }\r
- //>>>>> 色とフォント\r
- if (settings.value(IniKey_BoxFont, "").toString().isEmpty()) {\r
- settings.setValue(IniKey_BoxFont, font);\r
- settings.setValue(IniKey_BoxColorBg, QPalette().base().color());\r
- settings.setValue(IniKey_BoxColorFg, QPalette().text().color());\r
- }\r
- if (settings.value(IniKey_ViewFont, "").toString().isEmpty()) {\r
- settings.setValue(IniKey_ViewFont, font);\r
- settings.setValue(IniKey_ViewColorBgMark, QColor(0,192,0));\r
- settings.setValue(IniKey_ViewColorBgNormal, QPalette().base().color());\r
- settings.setValue(IniKey_ViewColorFgHidden, QColor(128,128,128));\r
- settings.setValue(IniKey_ViewColorFgMark, QColor(128,0,0));\r
- settings.setValue(IniKey_ViewColorFgNormal, QPalette().text().color());\r
- settings.setValue(IniKey_ViewColorFgReadonly, QColor(0,128,0));\r
- settings.setValue(IniKey_ViewColorFgSystem, QColor(128,0,128));\r
- }\r
- //>>>>> ファイル操作\r
- if (settings.value(IniKey_AutoCloseCopy, "").toString().isEmpty()) {\r
- settings.setValue(IniKey_AutoCloseCopy, false);\r
- settings.setValue(IniKey_AutoCloseDelete, false);\r
- settings.setValue(IniKey_AutoCloseMove, false);\r
- settings.setValue(IniKey_AutoCloseRename, false);\r
- }\r
- if (settings.value(IniKey_ConfirmCopy, "").toString().isEmpty()) {\r
- settings.setValue(IniKey_ConfirmCopy, true);\r
- settings.setValue(IniKey_ConfirmDelete, true);\r
- settings.setValue(IniKey_ConfirmMove, true);\r
- settings.setValue(IniKey_ConfirmRename, true);\r
- }\r
- if (settings.value(IniKey_DefaultOnCopy, "").toString().isEmpty())\r
- settings.setValue(IniKey_DefaultOnCopy, "owDefIfNew");\r
- if (settings.value(IniKey_MoveAfterCreateFolder, "").toString().isEmpty())\r
- settings.setValue(IniKey_MoveAfterCreateFolder, false);\r
- if (settings.value(IniKey_OpenAfterCreateFile, "").toString().isEmpty())\r
- settings.setValue(IniKey_OpenAfterCreateFile, false);\r
- //>>>>> パス設定\r
- // エディタ\r
- if (settings.value(IniKey_PathEditor, "").toString().isEmpty()) {\r
-#if defined(Q_OS_WIN)\r
- settings.setValue(IniKey_PathEditor, "notepad.exe");\r
-#elif defined(Q_OS_MAC)\r
- settings.setValue(IniKey_PathEditor, "/Applications/TextEdit.app");\r
-#else\r
- settings.setValue(IniKey_PathEditor, "gedit");\r
-#endif\r
- }\r
- // ターミナル\r
- if (settings.value(IniKey_PathTerminal, "").toString().isEmpty()) {\r
-#if defined(Q_OS_WIN)\r
- settings.setValue(IniKey_PathTerminal, "cmd.exe /k cd");\r
-#elif defined(Q_OS_MAC)\r
- settings.setValue(IniKey_PathTerminal, "/Applications/Utilities/Terminal.app --args -c cd");\r
-#else\r
- settings.setValue(IniKey_TerminalPath, "gnome-terminal");\r
-#endif\r
- }\r
- // アーカイバ\r
- if (settings.value(IniKey_PathArchiver, "").toString().isEmpty()) {\r
-#if defined(Q_OS_WIN)\r
- if (QFileInfo::exists("C:/Program Files/Lhaplus/Lhaplus.exe")) {\r
- settings.setValue(IniKey_PathArchiver, QQ("C:/Program Files/Lhaplus/Lhaplus.exe"));\r
- }\r
- else if (QFileInfo::exists("C:/Program Files/Lhaca/Lhaca.exe")) {\r
- settings.setValue(IniKey_PathArchiver, QQ("C:/Program Files/Lhaca/Lhaca.exe"));\r
- }\r
- else if (QFileInfo::exists("C:/Program Files/7-zip/7zFM.exe")) {\r
- settings.setValue(IniKey_PathArchiver, QQ("C:/Program Files/7-zip/7zFM.exe"));\r
- }\r
-\r
-#elif defined(Q_OS_MAC)\r
- settings.setValue(IniKey_PathArchiver, QQ("/System/Library/CoreServices/Archive Utility.app"));\r
-#else\r
-#endif\r
- }\r
-\r
- //>>>>> テキストビューア\r
- if (settings.value(IniKey_ViewerFont, "").toString().isEmpty()) {\r
- settings.setValue(IniKey_ViewerColorBg, QPalette().base().color());\r
- settings.setValue(IniKey_ViewerColorFg, QPalette().text().color());\r
- settings.setValue(IniKey_ViewerFont, font);\r
- settings.setValue(IniKey_ViewerForceOpen, false);\r
- settings.setValue(IniKey_ViewerInherit, true);\r
- settings.setValue(IniKey_ViewerIgnoreExt, ViewerIgnoreExt());\r
- }\r
-\r
- //>>>>> 隠しファイルの表示\r
- if (settings.value(IniKey_ShowHidden, "").toString().isEmpty())\r
- settings.setValue(IniKey_ShowHidden, false);\r
- //>>>>> システムファイルの表示\r
- if (settings.value(IniKey_ShowSystem, "").toString().isEmpty())\r
- settings.setValue(IniKey_ShowSystem, false);\r
- //>>>>> 最新版のチェック\r
- if (settings.value(IniKey_CheckUpdates, "").toString().isEmpty())\r
- settings.setValue(IniKey_CheckUpdates, true);\r
- //>>>>> 最後のフォルダとソート方法\r
- QString side = "Left/";\r
- if (settings.value(side + IniKey_Dir, "").toString().isEmpty()) {\r
- settings.setValue(side + IniKey_Dir, QDir::homePath());\r
- settings.setValue(side + IniKey_SortBy, SortByName);\r
- settings.setValue(side + IniKey_OrderBy, OrderByAsc);\r
- settings.setValue(side + IniKey_PutDirs, PutDirsFirst);\r
- settings.setValue(side + IniKey_IgnoreCase, true);\r
- }\r
- side = "Right/";\r
- if (settings.value(side + IniKey_Dir, "").toString().isEmpty()) {\r
- settings.setValue(side + IniKey_Dir, QDir::homePath());\r
- settings.setValue(side + IniKey_SortBy, SortByName);\r
- settings.setValue(side + IniKey_OrderBy, OrderByAsc);\r
- settings.setValue(side + IniKey_PutDirs, PutDirsFirst);\r
- settings.setValue(side + IniKey_IgnoreCase, true);\r
- }\r
-\r
MainWindow w;\r
w.show();\r
\r
return a.exec();\r
}\r
-\r
-QString ViewerIgnoreExt()\r
-{\r
- QStringList list;\r
- // 画像系\r
- list << "ico" << "ai" << "psd" << "xcf" << "tif" << "tiff" << "wmf";\r
- // 音・動画系\r
- list << "wav" << "mp3" << "ogg" << "midi" << "mid" << "aif" << "aiff";\r
- list << "mov" << "mpg" << "mpeg" << "wma" << "wmv" << "asf" << "avi";\r
- list << "flac" << "mkv";\r
- // 実行ファイル系\r
- list << "exe" << "com" << "lib" << "dll" << "msi" << "scr" << "sys";\r
- list << "o" << "obj" << "ocx" << "a" << "so" << "app";\r
- // アーカイブ系\r
- list << "lzh" << "zip" << "cab" << "tar" << "rar" << "gz" << "tgz";\r
- list << "bz2" << "xz" << "jar" << "7z" << "dmg";\r
- // ドキュメント系\r
- list << "pdf" << "doc" << "docx" << "xls" << "xlsx" << "ppt" << "pptx";\r
- // フォント\r
- list << "ttf" << "ttc";\r
-\r
- list.sort();\r
-\r
- return list.join(",");\r
-}\r
-\r
-bool ProcessShortcut(const QString &ksq, const QObject *object)\r
-{\r
- qDebug() << "ProcessShortcut()";\r
-\r
- if (ksq.isEmpty()) {\r
- return false;\r
- }\r
-\r
- foreach (QObject *obj, object->children()) {\r
- QAction *action = qobject_cast<QAction*>(obj);\r
- if (!action || !action->isEnabled()) {\r
- continue;\r
- }\r
-\r
- foreach (const QKeySequence &k, action->shortcuts()) {\r
- if (ksq == k.toString()) {\r
- if (action->isCheckable()) {\r
- action->setChecked(!action->isChecked());\r
- }\r
- else {\r
- emit action->triggered();\r
- }\r
- qDebug() << "emit" << action->objectName();\r
- return true;\r
- }\r
- }\r
- }\r
- return false;\r
-}\r
-\r
-void Sleep(int msec)\r
-{\r
- QEventLoop loop;\r
- QTimer::singleShot(msec, &loop, SLOT(quit()));\r
- loop.exec();\r
-}\r
-#include "common.h"\r
+#include "global.h"\r
#include "version.h"\r
#include "preferencedialog.h"\r
-#include "folderview.h"\r
-#include "searchbox.h"\r
+#include "foldermodel.h"\r
+#include "folderpanel.h"\r
+//#include "folderview.h"\r
#include "copymoveworker.h"\r
#include "operationdialog.h"\r
#include "overwritedialog.h"\r
#include "sortdialog.h"\r
#include "simpletextview.h"\r
#include "simpleimageview.h"\r
+#include "bookmarkdialog.h"\r
+#include "preferences.h"\r
#include "mainwindow.h"\r
#include "ui_mainwindow.h"\r
-#include "bookmarkdialog.h"\r
\r
#include <QCheckBox>\r
#include <QCloseEvent>\r
#include <QDebug>\r
-#include <QDesktopWidget>\r
#include <QMessageBox>\r
-#include <QSettings>\r
+#include <QMimeData>\r
#include <QNetworkAccessManager>\r
-#include <QNetworkReply>\r
#include <QInputDialog>\r
#include <QProcess>\r
#include <QDesktopServices>\r
#include <QClipboard>\r
#include <QFileDialog>\r
-#include <folderpanel.h>\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::MainWindow\r
+/// \param parent 親ウィジェット\r
+///\r
+/// コンストラクタ\r
+///\r
MainWindow::MainWindow(QWidget *parent) :\r
QMainWindow(parent),\r
ui(new Ui::MainWindow),\r
- m_activeView(NULL),\r
- m_overwriteDialog(NULL),\r
- m_viewMode(ModeBasic)\r
+ m_overwriteDialog(this),\r
+ m_viewMode(ModeBasic),\r
+ m_prevMode(ModeBasic)\r
{\r
- qDebug() << ">>>>>>>>>> MainWindowの構築開始 <<<<<";\r
ui->setupUi(this);\r
-\r
- m_overwriteDialog = new OverWriteDialog(this);\r
-\r
- initActionConnections();\r
- connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)), this, SLOT(focusChange(QWidget*,QWidget*)));\r
- connect(ui->pane3->textView(), SIGNAL(viewFinished()), this, SLOT(viewFinish()));\r
- connect(ui->pane3->imageView(), SIGNAL(viewFinished()), this, SLOT(viewFinish()));\r
- connect(ui->pane1->textView(), SIGNAL(fileInfo(QString)), this, SLOT(showFileInfo(QString)));\r
- connect(ui->pane2->textView(), SIGNAL(fileInfo(QString)), this, SLOT(showFileInfo(QString)));\r
- connect(ui->pane3->textView(), SIGNAL(fileInfo(QString)), this, SLOT(showFileInfo(QString)));\r
- connect(ui->pane1->imageView(), SIGNAL(fileInfo(QString)), this, SLOT(showFileInfo(QString)));\r
- connect(ui->pane2->imageView(), SIGNAL(fileInfo(QString)), this, SLOT(showFileInfo(QString)));\r
- connect(ui->pane3->imageView(), SIGNAL(fileInfo(QString)), this, SLOT(showFileInfo(QString)));\r
-\r
- // ビューアは初期状態で非表示\r
- ui->pane3->setVisible(false);\r
+ connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)), this, SLOT(app_focusChange(QWidget*,QWidget*)));\r
\r
// ステータスバーにウィジェットを設定する\r
- QLabel *label = new QLabel("", this);\r
+ QLabel *label = new QLabel(this);\r
label->setAlignment(Qt::AlignRight);\r
label->setObjectName("Right");\r
ui->statusBar->addPermanentWidget(label, 0);\r
\r
- for (int i = 1; i <= 2; i++) {\r
- // pane1 or pane2\r
- AnyView *anyView = findChild<AnyView*>(QString("pane%1").arg(i));\r
- Q_CHECK_PTR(anyView);\r
-\r
- FolderPanel *fp = anyView->findChild<FolderPanel*>("folderPanel");\r
- Q_CHECK_PTR(fp);\r
-\r
- // FolderPanelとFolderViewの名前を変更する\r
- fp->setObjectName(QString("folderPanel%1").arg(i));\r
- fp->folderView()->setObjectName(QString("folderView%1").arg(i));\r
+ // アプリケーション情報を初期化する\r
+ qApp->setApplicationDisplayName(tr("げふぅ Ver%1").arg(VERSION_VALUE));\r
+ qApp->setApplicationName("Gefu");\r
+ qApp->setApplicationVersion(QString("%1").arg(VERSION_VALUE));\r
+ qApp->setOrganizationDomain("sourceforge.jp");\r
+ qApp->setOrganizationName("gefu");\r
+ qApp->setWindowIcon(QIcon("://images/file-manager.png"));\r
+\r
+ // 古い設定ファイルを削除する\r
+ QSettings::setDefaultFormat(QSettings::IniFormat);\r
+ QSettings settings(this);\r
+ if (QFileInfo::exists(settings.fileName())) {\r
+ QFile(settings.fileName()).remove();\r
+ QDir().rmdir(QFileInfo(settings.fileName()).absolutePath());\r
+ }\r
+\r
+ // パネルにモデルを割り当てる\r
+ ui->LPanel->setModel(new FolderModel(this));\r
+ ui->RPanel->setModel(new FolderModel(this));\r
+ setActiveModel(ui->LPanel->model());\r
+\r
+ // パネルを初期化する\r
+ ui->LPanel->initialize(this);\r
+ ui->RPanel->initialize(this);\r
+ ui->FPanel->initialize(this);\r
+ ui->FPanel->setVisible(false);\r
+\r
+ // モデルを初期化する\r
+ Preferences prefs(this);\r
+ prefs.restoreModel("Left", ui->LPanel->model());\r
+ prefs.restoreModel("Right", ui->RPanel->model());\r
+\r
+ // アクションを初期化する\r
+ initActions();\r
\r
- fp->initialize(this);\r
- fp->updateAppearance(i == 2);\r
- }\r
-\r
- QSettings settings;\r
// ブックマークメニューを初期化する\r
- initBookmark();\r
-\r
- // メニュー項目の状態を初期化する\r
- ui->view_Hidden->setChecked(settings.value(IniKey_ShowHidden).toBool());\r
- ui->view_System->setChecked(settings.value(IniKey_ShowSystem).toBool());\r
-\r
- // 追加のショートカットキーを設定する\r
- QList<QKeySequence> shortcuts;\r
- shortcuts = ui->action_Open->shortcuts();\r
- shortcuts.append(QKeySequence("M"));\r
- ui->action_Open->setShortcuts(shortcuts);\r
-\r
- shortcuts = ui->action_Exec->shortcuts();\r
- shortcuts.append(QKeySequence("Shift+M"));\r
- ui->action_Exec->setShortcuts(shortcuts);\r
+ initBookmarkMenu();\r
\r
- // MacだとShift+の形で認識されてしまうもの\r
- shortcuts = ui->view_FontSizeUp->shortcuts();\r
- shortcuts.append(QKeySequence("Shift++"));\r
- ui->view_FontSizeUp->setShortcuts(shortcuts);\r
-\r
- shortcuts = ui->view_Filter->shortcuts();\r
- shortcuts.append(QKeySequence("Shift+*"));\r
- ui->view_Filter->setShortcuts(shortcuts);\r
-\r
- shortcuts = ui->action_OpenTerminal->shortcuts();\r
- shortcuts.append(QKeySequence("Shift+>"));\r
- ui->action_OpenTerminal->setShortcuts(shortcuts);\r
-\r
- shortcuts = ui->help_About->shortcuts();\r
- shortcuts.append(QKeySequence("Shift+?"));\r
- ui->help_About->setShortcuts(shortcuts);\r
-\r
- // ウィンドウタイトルを設定する\r
- setWindowTitle(tr("げふぅ v%1").arg(VERSION_VALUE));\r
-\r
- // ウィンドウアイコンを設定する\r
+ // メインウィンドウを初期化する\r
+ setWindowTitle(qApp->applicationDisplayName());\r
setWindowIcon(QIcon("://images/file-manager.png"));\r
-\r
- //>>>>> ウィンドウサイズと位置を設定する\r
- QString strValue;\r
- QPoint point = this->geometry().topLeft();\r
- QSize size = this->geometry().size();\r
- //>>>> 前回の位置・サイズ・状態を復元する\r
- if (!settings.value(IniKey_WindowGeometry, "").toString().isEmpty()) {\r
- restoreGeometry(settings.value(IniKey_WindowGeometry).toByteArray());\r
- restoreState(settings.value(iniKey_WindowState).toByteArray());\r
- }\r
- //>>>> INIファイルの設定から復元する\r
- //>>> サイズ\r
- strValue = settings.value(IniKey_BootSizeSpec).toString();\r
- if (strValue == "sizeAbsolute") {\r
- size = settings.value(IniKey_BootSizeAbs).toSize();\r
- }\r
- else if (strValue == "sizeRelative") {\r
- size = settings.value(IniKey_BootSizeRel).toSize();\r
- size.setWidth(size.width() * QApplication::desktop()->width() / 100.0);\r
- size.setHeight(size.height() * QApplication::desktop()->height() / 100.0);\r
- }\r
- else if (strValue == "sizeLast") {\r
- size = this->geometry().size();\r
- }\r
- //>>> 位置\r
- strValue = settings.value(IniKey_BootPosSpec).toString();\r
- if (strValue == "posAbsolute") {\r
- point = settings.value(IniKey_BootPosAbs).toPoint();\r
- }\r
- else if (strValue == "posRelative") {\r
- point = settings.value(IniKey_BootPosRel).toPoint();\r
- point.setX(point.x() * QApplication::desktop()->width() / 100.0);\r
- point.setY(point.y() * QApplication::desktop()->height() / 100.0);\r
- }\r
- else if (strValue == "posLast") {\r
- point = this->geometry().topLeft();\r
- }\r
- else {\r
- point.setX((QApplication::desktop()->width() - size.width()) / 2);\r
- point.setY((QApplication::desktop()->height() - size.height()) / 2);\r
- }\r
- this->setGeometry(QRect(point, size));\r
+ prefs.restoreWindow(this);\r
\r
// 最新バージョンをチェックする\r
- if (settings.value(IniKey_CheckUpdates).toBool()) {\r
- checkUpdate(true);\r
+ if (prefs.isCheckUpdate()) {\r
+ onCheckUpdate(true);\r
}\r
-\r
- ui->pane2->changeView(AnyView::ViewFolder);\r
- ui->pane2->repaint();\r
-\r
- ui->pane1->changeView(AnyView::ViewFolder);\r
- ui->pane1->repaint();\r
-\r
- qDebug() << ">>>>>>>>>> MainWindowの構築終了 <<<<<";\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::~MainWindow\r
+///\r
+/// デストラクタ\r
+///\r
MainWindow::~MainWindow()\r
{\r
delete ui;\r
}\r
\r
-void MainWindow::focusChange(QWidget *old, QWidget *now)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::app_focusChange\r
+/// \param old フォーカスを失うウィジェット\r
+/// \param now フォーカスを得るウィジェット\r
+///\r
+/// フォーカス変更時の処理\r
+///\r
+void MainWindow::app_focusChange(QWidget *old, QWidget *now)\r
{\r
- qDebug() << ">>>>> フォーカス変更";\r
- if (old) qDebug() << "old is" << old->objectName();\r
- if (now) qDebug() << "now is" << now->objectName();\r
+ qDebug() << "MainWindow::app_focusChange()";\r
+ if (old) qDebug() << " old is" << old->objectName();\r
+ if (now) qDebug() << " now is" << now->objectName();\r
\r
- // 検索ボックスがフォーカスを失ったら、非表示にする\r
- if (old == ui->pane1->folderPanel()->searchBox() ||\r
- old == ui->pane2->folderPanel()->searchBox())\r
+ // フォルダビューがフォーカスを得た場合\r
+ if (now && (now->objectName() == "folderView" ||\r
+ now->objectName() == "thumbnailView"))\r
{\r
- ui->action_Search->setChecked(false);\r
+ FolderModel *m = static_cast<FolderModel*>(focusItemView()->model());\r
+ setActiveModel(m);\r
+ ui->statusBar->showMessage(m->filePath(focusItemView()->currentIndex()));\r
}\r
\r
- // フォルダビューにフォーカスが移ったら、ステータスバーの表示を更新する\r
- if (now == ui->pane1->folderPanel()->folderView() ||\r
- now == ui->pane2->folderPanel()->folderView())\r
- {\r
- m_activeView = qobject_cast<FolderView*>(now);\r
- ui->statusBar->showMessage(m_activeView->currentItem().absoluteFilePath());\r
- m_activeView->parentPanel()->updateAppearance(false);\r
- otherSideFolderView(m_activeView)->parentPanel()->updateAppearance(true);\r
+ // 検索ボックスがフォーカスを失った場合\r
+ if (old && old->objectName() == "searchBox") {\r
+ // 検索モード終了\r
+ ui->toggle_Search->setChecked(false);\r
}\r
\r
+ // アクションの有効/無効を設定する\r
if (now) {\r
updateActions();\r
}\r
}\r
\r
-void MainWindow::executeCommand()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::model_PreReset\r
+///\r
+/// FolderModelリセット前の処理\r
+///\r
+void MainWindow::model_PreReset()\r
{\r
- qDebug() << "MainWindow::executeCommand";\r
+ qDebug() << "MainWindow::model_PreReset()";\r
+\r
+ ui->statusBar->showMessage(tr("ファイルリストを取得しています..."));\r
+}\r
\r
- QFileInfoList list = m_activeView->selectedItems();\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::model_PostReset\r
+///\r
+/// FolderModelリセット後の処理\r
+///\r
+void MainWindow::model_PostReset()\r
+{\r
+ qDebug() << "MainWindow::model_PostReset()";\r
+\r
+ FolderModel *m = static_cast<FolderModel*>(sender());\r
+ if (!m->error().isEmpty()) {\r
+ ui->statusBar->showMessage(m->error());\r
+ }\r
+ else {\r
+ ui->statusBar->showMessage(tr("レディ"));\r
+ }\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onRunCommand\r
+///\r
+/// 入力されたコマンドを実行します。\r
+///\r
+void MainWindow::onRunCommand()\r
+{\r
+ qDebug() << "MainWindow::onRunCommand";\r
+\r
+ QFileInfoList list = selectedItems();\r
QString command = QString::null;\r
foreach (const QFileInfo &info, list) {\r
#ifdef Q_OS_MAC\r
int ret = dlg.exec();\r
command = dlg.textValue();\r
if (ret == QDialog::Accepted && !command.isEmpty()) {\r
- startProcess(command, m_activeView->dir(), tr("コマンドの実行に失敗しました。"));\r
+ startProcess(command, tr("コマンドの実行に失敗しました。"));\r
}\r
}\r
\r
-void MainWindow::expandLeft()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onExpandLeft\r
+///\r
+/// 左パネルを拡大します。\r
+///\r
+void MainWindow::onExpandLeft()\r
{\r
- qDebug() << "MainWindow::expandLeft();";\r
+ qDebug() << "MainWindow::onExpandLeft()";\r
\r
QList<int> sizes = ui->splitter->sizes();\r
QList<int> newSizes;\r
newSizes << sizes[1] - 30;\r
\r
ui->splitter->setSizes(newSizes);\r
-\r
}\r
\r
-void MainWindow::expandRight()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onExpandRight\r
+///\r
+/// 右パネルを拡大します。\r
+///\r
+void MainWindow::onExpandRight()\r
{\r
- qDebug() << "MainWindow::expandLeft();";\r
+ qDebug() << "MainWindow::onExpandLeft()";\r
\r
QList<int> sizes = ui->splitter->sizes();\r
QList<int> newSizes;\r
newSizes << sizes[1] + 30;\r
\r
ui->splitter->setSizes(newSizes);\r
-\r
}\r
\r
-void MainWindow::historyBack()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onToggleMark\r
+///\r
+/// マーク状態を反転します。\r
+///\r
+void MainWindow::onToggleMark()\r
{\r
- qDebug() << "MainWindow::historyBack();";\r
+ qDebug() << "MainWindow::onToggleMark()";\r
\r
- if (m_activeView->historyBack()) {\r
- updateActions();\r
+ QModelIndex index = focusItemView()->currentIndex();\r
+ if (activeModel()->isMarked(index)) {\r
+ activeModel()->setData(index, Qt::Unchecked, Qt::CheckStateRole);\r
+ }\r
+ else {\r
+ activeModel()->setData(index, Qt::Checked, Qt::CheckStateRole);\r
}\r
-}\r
-\r
-void MainWindow::historyForward()\r
-{\r
- qDebug() << "MainWindow::historyForward();";\r
\r
- if (m_activeView->historyForward()) {\r
- updateActions();\r
+ if (index.row() < activeModel()->rowCount() - 1) {\r
+ index = activeModel()->index(index.row() + 1, 0);\r
+ focusItemView()->setCurrentIndex(index);\r
}\r
}\r
\r
-void MainWindow::markAll()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::view_statusChanged\r
+/// \param text ステータス文字列\r
+///\r
+/// ビューから受け取った文字列をステータスバーに表示します。\r
+///\r
+void MainWindow::view_statusChanged(const QString &text)\r
{\r
- qDebug() << "MainWindow::markAll();";\r
-\r
- m_activeView->setCheckStateAll(Qt::Checked);\r
+ ui->statusBar->findChild<QLabel*>("Right")->setText(text);\r
}\r
\r
-void MainWindow::markAllFiles()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::view_currentChanged\r
+/// \param current 新しいカレントインデックス\r
+/// \param previous (使用しません)\r
+///\r
+/// カレントインデックスが変更された場合の処理を行います。\r
+///\r
+void MainWindow::view_currentChanged(const QModelIndex ¤t, const QModelIndex &previous)\r
{\r
- qDebug() << "MainWindow::markAllFiles();";\r
-\r
- m_activeView->setCheckStateAllFiles();\r
-}\r
+ qDebug() << "MainWindow::view_currentChanged()" << current;\r
+ Q_UNUSED(previous);\r
\r
-void MainWindow::markAllOff()\r
-{\r
- qDebug() << "MainWindow::markAllOff();";\r
+ if (focusItemView() != sender()->parent()) {\r
+ return;\r
+ }\r
\r
- m_activeView->setCheckStateAll(Qt::Unchecked);\r
-}\r
+ ui->statusBar->showMessage(activeModel()->filePath(current));\r
\r
-void MainWindow::markInvert()\r
-{\r
- qDebug() << "MainWindow::markInvert();";\r
+ if (m_viewMode == ModePreview) {\r
+ inactivePanel()->setViewItem(current);\r
+ }\r
\r
- m_activeView->invertCheckState();\r
+ updateActions();\r
}\r
\r
-void MainWindow::markToggle()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::view_finished\r
+///\r
+/// ビューアの終了\r
+///\r
+void MainWindow::view_finished()\r
{\r
- qDebug() << "MainWindow::markToggle();";\r
+ qDebug() << "MainWindow::view_finished()";\r
+\r
+ ui->statusBar->findChild<QLabel*>("Right")->setText("");\r
\r
- m_activeView->toggleCheckState(m_activeView->currentIndex());\r
+ setViewMode(m_prevMode);\r
}\r
\r
-void MainWindow::moveItems()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onMove\r
+///\r
+/// 選択アイテムを隣のパネルに移動します。\r
+///\r
+void MainWindow::onMove()\r
{\r
- qDebug() << "MainWindow::moveItems";\r
+ qDebug() << "MainWindow::onMove";\r
\r
- QFileInfoList list = m_activeView->selectedItems();\r
+ QFileInfoList list = selectedItems();\r
if (list.isEmpty()) {\r
return;\r
}\r
\r
- int row = m_activeView->currentIndex().row();\r
+ int row = focusItemView()->currentIndex().row();\r
\r
- QString tgtPath = otherSideFolderView(m_activeView)->dir();\r
+ QString tgtPath = inactiveModel()->rootPath();\r
moveItems(list, tgtPath);\r
- m_activeView->refresh();\r
\r
- if (row >= m_activeView->model()->rowCount()) {\r
- row = m_activeView->model()->rowCount() - 1;\r
+ if (row >= activeModel()->rowCount()) {\r
+ row = activeModel()->rowCount() - 1;\r
}\r
- m_activeView->setCurrentIndex(m_activeView->model()->index(row, 1));\r
+ focusItemView()->setCurrentIndex(activeModel()->index(row, 1));\r
}\r
\r
-\r
-void MainWindow::leftKeyPress()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyLeft\r
+///\r
+/// ←キー押下時の処理を行います。\r
+///\r
+void MainWindow::onKeyLeft()\r
{\r
- qDebug() << "MainWindow::leftKeyPress();";\r
+ qDebug() << "MainWindow::onKeyLeft()";\r
\r
- if (ui->pane3->textView()->hasFocus()) {\r
- QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_PageUp, Qt::NoModifier);\r
- QApplication::sendEvent(ui->pane3->textView(), &event);\r
- }\r
- else if (ui->pane1->folderPanel()->folderView()->hasFocus()) {\r
- setPathToParent();\r
+ QWidget *w = qApp->focusWidget();\r
+ if (w->objectName() == "folderView")\r
+ {\r
+ QWidget *panel = w->parentWidget()->parentWidget();\r
+ if (panel == ui->LPanel) {\r
+ activeModel()->onCdUp();\r
+ }\r
+ else if (ui->LPanel->folderPanel()->isVisible()){\r
+ ui->LPanel->folderPanel()->itemView()->setFocus();\r
+ }\r
}\r
- else if (ui->pane2->folderPanel()->folderView()->hasFocus()) {\r
- ui->pane1->folderPanel()->folderView()->setFocus();\r
+ else {\r
+ QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_PageUp, Qt::NoModifier);\r
+ qApp->sendEvent(w, &event);\r
}\r
}\r
\r
-void MainWindow::rightKeyPress()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyRight\r
+///\r
+/// →キー押下時の処理を行います。\r
+///\r
+void MainWindow::onKeyRight()\r
{\r
- qDebug() << "MainWindow::rightKeyPress();";\r
+ qDebug() << "MainWindow::onKeyRight()";\r
\r
- if (ui->pane3->textView()->hasFocus()) {\r
- QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_PageDown, Qt::NoModifier);\r
- QApplication::sendEvent(ui->pane3->textView(), &event);\r
- }\r
- else if (ui->pane1->folderPanel()->folderView()->hasFocus()) {\r
- ui->pane2->folderPanel()->folderView()->setFocus();\r
+ QWidget *w = qApp->focusWidget();\r
+ if (w->objectName() == "folderView")\r
+ {\r
+ QWidget *panel = w->parentWidget()->parentWidget();\r
+ if (panel == ui->RPanel) {\r
+ activeModel()->onCdUp();\r
+ }\r
+ else if (ui->RPanel->folderPanel()->isVisible()){\r
+ ui->RPanel->folderPanel()->itemView()->setFocus();\r
+ }\r
}\r
- else if (ui->pane2->folderPanel()->folderView()->hasFocus()) {\r
- setPathToParent();\r
+ else {\r
+ QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_PageDown, Qt::NoModifier);\r
+ qApp->sendEvent(w, &event);\r
}\r
}\r
\r
-void MainWindow::showFileInfo(const QString &str)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onChooseFolder\r
+///\r
+/// 選択したフォルダに移動します。\r
+///\r
+void MainWindow::onChooseFolder()\r
{\r
- qDebug() << "MainWindow::showFileInfo();" << str;\r
- QLabel *label = ui->statusBar->findChild<QLabel*>("Right");\r
- Q_CHECK_PTR(label);\r
-\r
- label->setText(str);\r
-}\r
-\r
-void MainWindow::chooseFolder()\r
-{\r
- qDebug() << "MainWindow::chooseFolder();";\r
+ qDebug() << "MainWindow::onChooseFolder()";\r
\r
QString path = QFileDialog::getExistingDirectory(\r
- this, tr("フォルダを選択"), m_activeView->dir());\r
+ this, tr("フォルダを選択"), activeModel()->rootPath());\r
if (!path.isEmpty()) {\r
- m_activeView->setPath(path, true);\r
- updateActions();\r
+ activeModel()->setRootPath(path);\r
+// updateActions();\r
}\r
}\r
\r
-void MainWindow::copyFilenameToClipboard()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onCopyFileName\r
+///\r
+/// ファイル名をクリップボードにコピーします。\r
+///\r
+void MainWindow::onCopyFileName()\r
{\r
- qDebug() << "MainWindow::copyFilenameToClipboard();";\r
+ qDebug() << "MainWindow::onCopyFileName()";\r
\r
- QClipboard *clipboard = QApplication::clipboard();\r
- clipboard->setText(m_activeView->currentItem().fileName());\r
+ QClipboard *clipboard = qApp->clipboard();\r
+ clipboard->setText(activeModel()->fileName(focusItemView()->currentIndex()));\r
}\r
\r
-void MainWindow::copyFullpathTpClipboard()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onCopyFilePath\r
+///\r
+/// フルパスをクリップボードにコピーします。\r
+///\r
+void MainWindow::onCopyFilePath()\r
{\r
- qDebug() << "MainWindow::copyFullpathTpClipboard();";\r
+ qDebug() << "MainWindow::onCopyFilePath()";\r
\r
- QClipboard *clipboard = QApplication::clipboard();\r
- clipboard->setText(m_activeView->currentItem().absoluteFilePath());\r
+ QClipboard *clipboard = qApp->clipboard();\r
+ clipboard->setText(activeModel()->filePath(focusItemView()->currentIndex()));\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::askOverWrite\r
+/// \param copyMethod 上書き方法\r
+/// \param alias 別名\r
+/// \param srcPath コピー元パス\r
+/// \param tgtPath コピー先パス\r
+///\r
+/// 上書きの処理方法を選択するダイアログを表示します。\r
+///\r
void MainWindow::askOverWrite(QString *copyMethod,\r
QString *alias,\r
const QString &srcPath,\r
const QString &tgtPath)\r
{\r
- qDebug() << "MainWindow::askOverWrite();";\r
+ qDebug() << "MainWindow::askOverWrite()";\r
\r
CopyMoveWorker *worker = static_cast<CopyMoveWorker*>(sender());\r
- if (!m_overwriteDialog->isKeepSetting() ||\r
- m_overwriteDialog->copyMethod() == "rbRename")\r
+ if (!m_overwriteDialog.isKeepSetting() ||\r
+ m_overwriteDialog.copyMethod() == "rbRename")\r
{\r
- m_overwriteDialog->setFileInfo(srcPath, tgtPath);\r
- if (m_overwriteDialog->exec() == QDialog::Rejected) {\r
+ m_overwriteDialog.setFileInfo(srcPath, tgtPath);\r
+ if (m_overwriteDialog.exec() == QDialog::Rejected) {\r
worker->requestStop();\r
}\r
}\r
- *copyMethod = m_overwriteDialog->copyMethod();\r
- *alias = m_overwriteDialog->alias();\r
+ *copyMethod = m_overwriteDialog.copyMethod();\r
+ *alias = m_overwriteDialog.alias();\r
\r
worker->endAsking();\r
}\r
\r
-void MainWindow::currentChange(const QFileInfo &info)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onAddBookmark\r
+///\r
+/// ブックマークを追加します。\r
+///\r
+void MainWindow::onAddBookmark()\r
{\r
- qDebug() << ">>>>> カーソル変更 <<<<<";\r
-\r
- FolderView *view = static_cast<FolderView*>(sender());\r
- Q_CHECK_PTR(view);\r
+ qDebug() << "MainWindow::onAddBookmark()";\r
+ qDebug() << sender()->objectName();\r
\r
- if (!view->hasFocus()) {\r
- return;\r
+ FolderModel *m;\r
+ if (sender()->objectName() == "bookmarkBtn") {\r
+ FolderPanel *p = static_cast<FolderPanel*>(sender()->parent());\r
+ m = p->model();\r
}\r
-\r
- // ステータスバーにカーソルのフルパスを表示する\r
- ui->statusBar->showMessage(info.absoluteFilePath());\r
-\r
- // ハーフモードで変更された場合\r
- if (m_viewMode & ModeHalfView) {\r
- AnyView *otherSide = static_cast<AnyView*>(\r
- otherSideFolderView(view)->parent()->parent());\r
- Q_CHECK_PTR(otherSide);\r
-\r
- if (!otherSide->setViewItem(view->currentItem())) {\r
- showFileInfo("");\r
- }\r
+ else {\r
+ m = activeModel();\r
}\r
\r
- updateActions();\r
+ QFileInfo fi(m->rootPath());\r
+ Preferences(this).addBookmark(fi.fileName(), fi.absoluteFilePath());\r
+ initBookmarkMenu();\r
+\r
+ activePanel()->folderPanel()->itemView()->setFocus();\r
+ ui->statusBar->showMessage(tr("%1をブックマークに追加しました").arg(fi.absoluteFilePath()));\r
}\r
\r
-void MainWindow::dropAccept(const QFileInfoList &list, QDropEvent *event)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::view_copyAvailable\r
+/// \param yes コピー可能ならtrue\r
+///\r
+/// 選択範囲の有無をメニューに反映します。\r
+///\r
+void MainWindow::view_copyAvailable(bool yes)\r
{\r
- qDebug() << "MainWindow::dropAccept();";\r
-\r
- FolderView *view = static_cast<FolderView*>(sender());\r
- Q_CHECK_PTR(view);\r
-\r
- QMenu menu(this);\r
- QAction *actCopy = menu.addAction(tr("コピー"));\r
- QAction *actMove = menu.addAction(tr("移動"));\r
- menu.addSeparator();\r
- menu.addAction(tr("キャンセル"));\r
-\r
- QAction *selected = menu.exec(view->mapToGlobal(event->pos()));\r
- if (selected == actMove) {\r
- moveItems(list, view->dir());\r
- }\r
- else if (selected == actCopy) {\r
- copyItems(list, view->dir());\r
- }\r
+ ui->text_Copy->setEnabled(yes);\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::copyItems\r
+/// \param list コピー元リスト\r
+/// \param tgtDir コピー先フォルダ\r
+///\r
+/// アイテムをコピーします。\r
+///\r
void MainWindow::copyItems(const QFileInfoList &list, const QString &tgtDir)\r
{\r
- qDebug() << "MainWindow::copyItems();" << tgtDir;\r
+ qDebug() << "MainWindow::copyItems()" << tgtDir;\r
\r
- QSettings settings;\r
- if (settings.value(IniKey_ConfirmCopy).toBool()) {\r
- if (QMessageBox::question(this, tr("確認"), tr("コピーを実行しますか?"))\r
+ Preferences prefs(this);\r
+ if (prefs.isConfirmCopy() &&\r
+ QMessageBox::question(this, tr("確認"), tr("コピーを実行しますか?"))\r
!= QMessageBox::Yes)\r
- {\r
- return;\r
- }\r
+ {\r
+ return;\r
}\r
\r
// 上書き確認ダイアログを初期化する\r
- m_overwriteDialog->reset();\r
+ m_overwriteDialog.reset();\r
\r
// ワーカースレッドを作成する\r
CopyMoveWorker *worker = new CopyMoveWorker();\r
OperationDialog opDlg(this);\r
opDlg.setWindowTitle(tr("コピー"));\r
opDlg.setWorker(worker);\r
- opDlg.setAutoClose(settings.value(IniKey_AutoCloseCopy).toBool());\r
+ opDlg.setAutoClose(prefs.isAutoCloseCopy());\r
\r
opDlg.exec();\r
\r
- settings.setValue(IniKey_AutoCloseCopy, opDlg.autoClose());\r
+ prefs.setAutoCloseCopy(opDlg.autoClose());\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::moveItems\r
+/// \param list 移動元リスト\r
+/// \param tgtDir 移動先フォルダ\r
+///\r
+/// アイテムを移動します。\r
+///\r
void MainWindow::moveItems(const QFileInfoList &list, const QString &tgtDir)\r
{\r
- qDebug() << "MainWindow::moveItems();" << tgtDir;\r
+ qDebug() << "MainWindow::moveItems()" << tgtDir;\r
\r
- QSettings settings;\r
- if (settings.value(IniKey_ConfirmMove).toBool()) {\r
- if (QMessageBox::question(this, tr("確認"), tr("移動を実行しますか?"))\r
+ Preferences prefs(this);\r
+ if (prefs.isConfirmMove() &&\r
+ QMessageBox::question(this, tr("確認"), tr("移動を実行しますか?"))\r
!= QMessageBox::Yes)\r
- {\r
- return;\r
- }\r
+ {\r
+ return;\r
}\r
\r
// 上書き確認ダイアログを初期化する\r
- m_overwriteDialog->reset();\r
+ m_overwriteDialog.reset();\r
\r
// ワーカースレッドを作成する\r
CopyMoveWorker *worker = new CopyMoveWorker();\r
OperationDialog opDlg(this);\r
opDlg.setWindowTitle(tr("移動"));\r
opDlg.setWorker(worker);\r
- opDlg.setAutoClose(settings.value(IniKey_AutoCloseMove).toBool());\r
+ opDlg.setAutoClose(prefs.isAutoCloseMove());\r
\r
opDlg.exec();\r
\r
- settings.setValue(IniKey_AutoCloseMove, opDlg.autoClose());\r
+ prefs.setAutoCloseMove(opDlg.autoClose());\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onContextMenuEvent\r
+/// \param obj イベントが発生したオブジェクト\r
+/// \param e コンテキストメニューイベント\r
+/// \return 処理した場合はtrue, 処理しなかった場合はfalseを返します。\r
+///\r
+bool MainWindow::onContextMenuEvent(QObject *obj, QContextMenuEvent *e)\r
+{\r
+ QMenu menu(this);\r
+ if (obj->objectName() == "textView") {\r
+ menu.addAction(ui->text_ConvertFromEUC);\r
+ menu.addAction(ui->text_ConvertFromJIS);\r
+ menu.addAction(ui->text_ConvertFromSJIS);\r
+ menu.addAction(ui->text_ConvertFromUTF8);\r
+ menu.addAction(ui->text_ConvertFromUTF16);\r
+ menu.addAction(ui->text_ConvertFromUTF16BE);\r
+ menu.addAction(ui->text_ConvertFromUTF16LE);\r
+ menu.addSeparator();\r
+ menu.addAction(ui->text_Copy);\r
+ if (m_viewMode == ModeView) {\r
+ menu.addSeparator();\r
+ menu.addAction(ui->view_Back);\r
+ }\r
+ }\r
+ else if (obj->objectName() == "imageView") {\r
+ menu.addAction(ui->image_FitToWindow);\r
+ menu.addAction(ui->action_ScaleDown);\r
+ menu.addAction(ui->action_ScaleUp);\r
+ menu.addAction(ui->image_ScaleNormal);\r
+ menu.addSeparator();\r
+ menu.addAction(ui->image_Rotate90);\r
+ menu.addAction(ui->image_Rotate180);\r
+\r
+ if (m_viewMode == ModeView) {\r
+ menu.addSeparator();\r
+ menu.addAction(ui->view_Back);\r
+ }\r
+ }\r
+ else if (obj->objectName() == "folderView" || obj->objectName() == "thumbnailView") {\r
+ QModelIndex index = focusItemView()->indexAt(e->pos());\r
+ if (index.isValid()) {\r
+ menu.addAction(ui->action_Open);\r
+ menu.addAction(ui->action_OpenWith);\r
+ menu.addAction(ui->action_OpenEditor);\r
+ menu.addAction(ui->action_OpenTerminal);\r
+ menu.addAction(ui->action_OpenArchiver);\r
+ menu.addSeparator();\r
+ menu.addAction(ui->action_Copy);\r
+ menu.addAction(ui->action_Move);\r
+ menu.addSeparator();\r
+ menu.addAction(ui->action_Delete);\r
+ menu.addSeparator();\r
+ menu.addAction(ui->action_CopyFileName);\r
+ menu.addAction(ui->action_CopyFilePath);\r
+ menu.addSeparator();\r
+ menu.addAction(ui->action_Rename);\r
+ }\r
+ else {\r
+ menu.addAction(ui->action_historyBack);\r
+ menu.addAction(ui->action_HistoryForward);\r
+ menu.addSeparator();\r
+ menu.addAction(ui->action_CdUp);\r
+ menu.addAction(ui->action_CdHome);\r
+ menu.addAction(ui->action_CdRoot);\r
+ menu.addAction(ui->action_Cd);\r
+ menu.addSeparator();\r
+ menu.addAction(ui->action_CreateFile);\r
+ menu.addAction(ui->action_CreateFolder);\r
+ }\r
+ }\r
+ else {\r
+ qDebug() << "No context menu" << obj->objectName();\r
+ return false;\r
+ }\r
+\r
+ QAction *selected = menu.exec(e->globalPos());\r
+ if (selected == ui->action_ScaleDown ||\r
+ selected == ui->action_ScaleUp)\r
+ {\r
+ ui->image_FitToWindow->blockSignals(true);\r
+ ui->image_FitToWindow->setChecked(false);\r
+ ui->image_FitToWindow->blockSignals(false);\r
+ }\r
+\r
+ return true;\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onDropEvent\r
+/// \param obj イベントが発生したオブジェクト\r
+/// \param e ドロップイベントオブジェクト\r
+/// \return 処理した場合はtrue, 処理しなかった場合はfalseを返します。\r
+///\r
+bool MainWindow::onDropEvent(QObject *obj, QDropEvent *e)\r
+{\r
+ qDebug() << "MainWindow::onDropEvent()";\r
+\r
+ if (obj->parent()->objectName() == "folderView" ||\r
+ obj->parent()->objectName() == "thumbnailView")\r
+ {\r
+ QAbstractItemView *v = static_cast<QAbstractItemView*>(obj->parent());\r
+ if (v->property("dragging").toBool()) {\r
+ // 自分自身へのドロップなら何もしない\r
+ return true;\r
+ }\r
+\r
+ QFileInfoList list;\r
+ foreach (const QUrl &url, e->mimeData()->urls()) {\r
+ QString path = QFileInfo(url.toLocalFile()).canonicalFilePath();\r
+ if (!path.isEmpty()) {\r
+ list << path;\r
+ }\r
+ else {\r
+ qDebug() << "drop path is empty." << url;\r
+ }\r
+ }\r
+\r
+ if (list.isEmpty()) {\r
+ // ローカルファイルのドロップでなければ何もしない\r
+ return true;\r
+ }\r
+\r
+ e->acceptProposedAction();\r
+\r
+ QMenu menu(this);\r
+ QAction *actCopy = menu.addAction(tr("コピー"));\r
+ QAction *actMove = menu.addAction(tr("移動"));\r
+ menu.addSeparator();\r
+ menu.addAction(tr("キャンセル"));\r
+\r
+ QAction *selected = menu.exec(v->mapToGlobal(e->pos()));\r
+ FolderModel *m = static_cast<FolderModel*>(v->model());\r
+ if (selected == actMove) {\r
+ moveItems(list, m->rootPath());\r
+ }\r
+ else if (selected == actCopy) {\r
+ copyItems(list, m->rootPath());\r
+ }\r
+ return true;\r
+ }\r
+ else {\r
+ qDebug() << obj->parent()->objectName();\r
+ }\r
+\r
+ return true;\r
}\r
\r
-void MainWindow::copyItems()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyPressEvent\r
+/// \param obj イベントが発生したオブジェクト\r
+/// \param e キーイベントオブジェクト\r
+/// \return 処理した場合はtrue, 処理しなかった場合はfalseを返します。\r
+///\r
+bool MainWindow::onKeyPressEvent(QObject *obj, QKeyEvent *e)\r
{\r
- qDebug() << "MainWindow::copyItems";\r
+ qDebug() << "MainWindow::onKeyPressEvent()";\r
+\r
+ QString modifier = QString::null;\r
+ if (e->modifiers() & Qt::ShiftModifier) { modifier += "Shift+"; }\r
+ if (e->modifiers() & Qt::ControlModifier) { modifier += "Ctrl+"; }\r
+ if (e->modifiers() & Qt::AltModifier) { modifier += "Alt+"; }\r
+ if (e->modifiers() & Qt::MetaModifier) { modifier += "Meta+"; }\r
+\r
+ QString key = modifier + QKeySequence(e->key()).toString();\r
\r
- QFileInfoList list = m_activeView->selectedItems();\r
+ foreach (QAction *action, findChildren<QAction*>()) {\r
+ if (action->isEnabled()) {\r
+ foreach (const QKeySequence &ks, action->shortcuts()) {\r
+ if (ks.toString() == key) {\r
+ qDebug() << "emit" << action->objectName();\r
+ if (action->isCheckable()) {\r
+ action->toggle();\r
+ }\r
+ else {\r
+ action->trigger();\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ if (obj->objectName() == "folderView" || obj->objectName() == "thumbnailView")\r
+ {\r
+ // カーソル移動系のみ有効にする\r
+ switch (e->key()) {\r
+ case Qt::Key_Down:\r
+ case Qt::Key_Up:\r
+ case Qt::Key_Left:\r
+ case Qt::Key_Right:\r
+ case Qt::Key_Home:\r
+ case Qt::Key_End:\r
+ case Qt::Key_PageDown:\r
+ case Qt::Key_PageUp:\r
+ case Qt::Key_Tab:\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+\r
+\r
+\r
+\r
+ return false;\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onCopy\r
+///\r
+/// 選択アイテムを隣のパネルにコピーします。\r
+///\r
+void MainWindow::onCopy()\r
+{\r
+ qDebug() << "MainWindow::onCopy";\r
+\r
+ QFileInfoList list = selectedItems();\r
if (list.isEmpty()) {\r
return;\r
}\r
\r
- QString tgtPath = otherSideFolderView(m_activeView)->dir();\r
+ QString tgtPath = inactiveModel()->rootPath();\r
copyItems(list, tgtPath);\r
}\r
\r
-void MainWindow::createFile()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onCreateFile\r
+///\r
+/// ファイルを作成します。\r
+///\r
+void MainWindow::onCreateFile()\r
{\r
- qDebug() << "MainWindow::createFile";\r
+ qDebug() << "MainWindow::onCreateFile";\r
\r
bool bOk;\r
QString name = QInputDialog::getText(\r
return;\r
}\r
\r
- QDir dir(m_activeView->dir());\r
- QFile file(dir.absoluteFilePath(name));\r
- if (!file.open(QIODevice::WriteOnly)) {\r
+ QModelIndex index = activeModel()->touch(name);\r
+ if (!index.isValid()) {\r
QMessageBox::critical(\r
this, tr("エラー"),\r
tr("ファイルの作成に失敗しました。"));\r
+ return;\r
}\r
- else {\r
- file.close();\r
\r
- QSettings settings;\r
- if (settings.value(IniKey_OpenAfterCreateFile).toBool()) {\r
- openEditor(dir.absoluteFilePath(name));\r
- }\r
-\r
- m_activeView->refresh();\r
- m_activeView->searchItem(name);\r
+ focusItemView()->setCurrentIndex(index);\r
+ if (Preferences(this).isOpenAfterCreation()) {\r
+ onOpenEditor(index);\r
}\r
}\r
\r
-void MainWindow::createFolder()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onCreateFolder\r
+///\r
+/// フォルダを作成します。\r
+///\r
+void MainWindow::onCreateFolder()\r
{\r
- qDebug() << "MainWindow::createFolder";\r
+ qDebug() << "MainWindow::onCreateFolder";\r
\r
bool bOk;\r
QString name = QInputDialog::getText(\r
return;\r
}\r
\r
- QDir dir(m_activeView->dir());\r
- if (!dir.mkpath(name)) {\r
+ QModelIndex index = activeModel()->mkdir(name);\r
+ if (!index.isValid()) {\r
QMessageBox::critical(\r
this, tr("エラー"),\r
tr("フォルダの作成に失敗しました。"));\r
+ return;\r
}\r
- else {\r
- QSettings settings;\r
- if (settings.value(IniKey_MoveAfterCreateFolder).toBool()) {\r
- m_activeView->setPath(dir.absoluteFilePath(name), true);\r
- }\r
\r
- m_activeView->refresh();\r
- m_activeView->searchItem(name);\r
+ focusItemView()->setCurrentIndex(index);\r
+ if (Preferences(this).isMoveAfterCreation()) {\r
+ onOpen(index);\r
}\r
}\r
\r
-void MainWindow::deleteItems()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onDelete\r
+///\r
+/// 選択アイテムを削除します。\r
+///\r
+void MainWindow::onDelete()\r
{\r
- qDebug() << "MainWindow::deleteItems";\r
+ qDebug() << "MainWindow::onDelete";\r
\r
- QFileInfoList list = m_activeView->selectedItems();\r
+ QFileInfoList list = selectedItems();\r
if (list.isEmpty()) {\r
return;\r
}\r
\r
- QSettings settings;\r
- if (settings.value(IniKey_ConfirmDelete).toBool()) {\r
+ Preferences prefs(this);\r
+ if (prefs.isConfirmDelete()) {\r
QString msg;\r
if (list.size() == 1) {\r
msg = list[0].fileName();\r
OperationDialog opDlg(this);\r
opDlg.setWindowTitle(tr("削除"));\r
opDlg.setWorker(worker);\r
- opDlg.setAutoClose(settings.value(IniKey_AutoCloseDelete).toBool());\r
+ opDlg.setAutoClose(prefs.isAutoCloseDelete());\r
\r
- int row = m_activeView->currentIndex().row();\r
+ int row = focusItemView()->currentIndex().row();\r
\r
opDlg.exec();\r
- m_activeView->refresh();\r
\r
- if (row >= m_activeView->model()->rowCount()) {\r
- row = m_activeView->model()->rowCount() - 1;\r
+ if (row >= activeModel()->rowCount()) {\r
+ row = activeModel()->rowCount() - 1;\r
}\r
- m_activeView->setCurrentIndex(m_activeView->model()->index(row, 1));\r
+ focusItemView()->setCurrentIndex(activeModel()->index(row, 1));\r
\r
- settings.setValue(IniKey_AutoCloseDelete, opDlg.autoClose());\r
+ prefs.setAutoCloseDelete(opDlg.autoClose());\r
}\r
\r
-void MainWindow::open(const QModelIndex &index)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onOpen\r
+/// \param index (使用しません)\r
+///\r
+/// アイテムを開きます。\r
+///\r
+void MainWindow::onOpen(const QModelIndex &index)\r
{\r
Q_UNUSED(index);\r
- qDebug() << "MainWindow::open" << index;\r
+ qDebug() << "MainWindow::onOpen()" << index;\r
\r
- QFileInfo info = m_activeView->currentItem();\r
- if (info.isDir()) {\r
- m_activeView->setPath(info.absoluteFilePath(), true);\r
- updateActions();\r
+ QModelIndex current = focusItemView()->currentIndex();\r
+ if (activeModel()->isDir(current)) {\r
+ activeModel()->setRootPath(activeModel()->filePath(current));\r
return;\r
}\r
\r
- if (ui->pane3->setViewItem(info)) {\r
- ui->pane3->setVisible(true);\r
- ui->splitter->setVisible(false);\r
-\r
- setViewMode(ModeFullView);\r
- }\r
- else {\r
- ui->pane3->setVisible(false);\r
- if (index.isValid()) {\r
- QString path = QDir::toNativeSeparators(info.absoluteFilePath());\r
+ // 外部アプリを優先する場合\r
+ QString ext = activeModel()->fileInfo(current).suffix().toLower();\r
+ QStringList list = Preferences(this).getPreferExtensions().split(",", QString::SkipEmptyParts);\r
+ foreach (const QString& s, list) {\r
+ if (ext == s.trimmed().toLower()) {\r
+ QString path = QDir::toNativeSeparators(activeModel()->filePath(current));\r
QDesktopServices::openUrl(QUrl("file:///" + path));\r
+ return;\r
}\r
}\r
+\r
+ // 内蔵ビューアで表示する\r
+ setViewMode(ModeView);\r
}\r
\r
-void MainWindow::openEditor(const QString &path)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onOpenEditor\r
+/// \param path\r
+///\r
+/// 選択アイテムを外部エディタで開きます。\r
+///\r
+void MainWindow::onOpenEditor(const QModelIndex &index)\r
{\r
- qDebug() << "MainWindow::openEditor";\r
+ qDebug() << "MainWindow::onOpenEditor";\r
\r
- QSettings settings;\r
- QString exe = settings.value(IniKey_PathEditor).toString();\r
+ QString exe = Preferences(this).getEditorPath();\r
if (exe.isEmpty()) {\r
QMessageBox::critical(\r
this, tr("エラー"),\r
}\r
\r
QFileInfoList list;\r
- if (path.isEmpty()) {\r
- list = m_activeView->selectedItems();\r
+ if (index.isValid()) {\r
+ list << activeModel()->fileInfo(index);\r
}\r
else {\r
- list << path;\r
+ list = selectedItems();\r
}\r
\r
QString files;\r
#else\r
QString command = exe + files;\r
#endif\r
- if (!startProcess(command, m_activeView->dir(), tr("外部エディタの起動に失敗しました。"))) {\r
+ if (!startProcess(command, tr("外部エディタの起動に失敗しました。"))) {\r
qDebug() << command;\r
}\r
}\r
\r
-void MainWindow::openTerminal()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onOpenTerminal\r
+///\r
+/// 選択アイテムをターミナルで開きます。\r
+///\r
+void MainWindow::onOpenTerminal()\r
{\r
- qDebug() << "MainWindow::openTerminal";\r
+ qDebug() << "MainWindow::onOpenTerminal";\r
\r
- QSettings settings;\r
- QString exe = settings.value(IniKey_PathTerminal).toString();\r
+ QString exe = Preferences(this).getTerminalPath();\r
if (exe.isEmpty()) {\r
QMessageBox::critical(\r
this, tr("エラー"),\r
}\r
\r
QSet<QString> dirs;\r
- foreach (const QFileInfo &info, m_activeView->selectedItems()) {\r
+ foreach (const QFileInfo &info, selectedItems()) {\r
if (info.isDir()) {\r
dirs.insert(info.absoluteFilePath());\r
}\r
#else\r
QString command = exe + " " + QQ(dir);\r
#endif\r
- if (!startProcess(command, m_activeView->dir(), tr("ターミナルの起動に失敗しました。"))) {\r
+ if (!startProcess(command, tr("ターミナルの起動に失敗しました。"))) {\r
qDebug() << command;\r
break;\r
}\r
}\r
}\r
\r
-void MainWindow::openArchiver()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onOpenArchiver\r
+///\r
+/// 選択アイテムをアーカイバで開きます。\r
+///\r
+void MainWindow::onOpenArchiver()\r
{\r
- qDebug() << "MainWindow::openArchiver";\r
+ qDebug() << "MainWindow::onOpenArchiver";\r
\r
- QSettings settings;\r
- QString exe = settings.value(IniKey_PathArchiver).toString();\r
+ QString exe = Preferences(this).getArchiverPath();\r
if (exe.isEmpty()) {\r
QMessageBox::critical(\r
this, tr("エラー"),\r
}\r
\r
QString files;\r
- foreach (const QFileInfo &info, m_activeView->selectedItems()) {\r
+ foreach (const QFileInfo &info, selectedItems()) {\r
files += " " + QQ(info.absoluteFilePath());\r
}\r
#ifdef Q_OS_MAC\r
#else\r
QString command = exe + files;\r
#endif\r
- if (!startProcess(command, m_activeView->dir(), tr("アーカイバの起動に失敗しました。"))) {\r
+ if (!startProcess(command, tr("アーカイバの起動に失敗しました。"))) {\r
qDebug() << command;\r
}\r
}\r
\r
-void MainWindow::openBookmark()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onOpenBookmark\r
+///\r
+/// ブックマークのメニュー項目をクリックしたときの処理を行います。\r
+///\r
+void MainWindow::onOpenBookmark()\r
{\r
- qDebug() << "MainWindow::openBookmark();";\r
+ qDebug() << "MainWindow::onOpenBookmark()";\r
\r
QAction *action = qobject_cast<QAction*>(sender());\r
Q_CHECK_PTR(action);\r
\r
- QSettings settings;\r
int i = action->data().toInt();\r
- m_activeView->setPath(settings.value(IniKey_BookmarkEntryPath(i)).toString(), true);\r
+ activeModel()->setRootPath(Preferences(this).getBookmarkPath(i));\r
}\r
\r
-void MainWindow::refresh()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onRename\r
+///\r
+/// 選択アイテムの名前を変更します。\r
+///\r
+void MainWindow::onRename()\r
{\r
- qDebug() << "MainWindow::refresh();";\r
+ qDebug() << "MainWindow::onRename";\r
\r
- m_activeView->refresh();\r
-}\r
-\r
-void MainWindow::renameItems()\r
-{\r
- qDebug() << "MainWindow::renameItems";\r
-\r
- QFileInfoList list = m_activeView->selectedItems();\r
+ QFileInfoList list = selectedItems();\r
if (list.isEmpty()) {\r
return;\r
}\r
\r
- IRenameDialog *dlg;\r
+ AbstractRenameDialog *dlg;\r
if (list.size() == 1) {\r
dlg = new RenameSingleDialog(this);\r
}\r
else {\r
dlg = new RenameMultiDialog(this);\r
}\r
- dlg->setWorkingDirectory(m_activeView->dir());\r
+ dlg->setWorkingDirectory(activeModel()->rootPath());\r
dlg->setNames(list);\r
int dlgResult = dlg->exec();\r
if (dlgResult != QDialog::Accepted || dlg->renameMap().isEmpty()) {\r
return;\r
}\r
\r
- QSettings settings;\r
- if (settings.value(IniKey_ConfirmRename).toBool()) {\r
- int ret = QMessageBox::question(this, tr("確認"),\r
- tr("名前の変更を実行しますか?"));\r
- if (ret != QMessageBox::Yes) {\r
- return;\r
- }\r
+ Preferences prefs(this);\r
+ if (prefs.isConfirmRename() &&\r
+ QMessageBox::question(this, tr("確認"), tr("名前の変更を実行しますか?"))\r
+ != QMessageBox::Yes)\r
+ {\r
+ return;\r
}\r
\r
RenameWorker *worker = new RenameWorker();\r
OperationDialog opDlg(this);\r
opDlg.setWindowTitle(tr("名前を変更"));\r
opDlg.setWorker(worker);\r
- opDlg.setAutoClose(settings.value(IniKey_AutoCloseRename).toBool());\r
+ opDlg.setAutoClose(prefs.isAutoCloseRename());\r
\r
opDlg.exec();\r
- m_activeView->refresh();\r
\r
- QFileInfo info(dlg->renameMap().first());\r
- m_activeView->searchItem(info.fileName());\r
+ focusItemView()->setCurrentIndex(\r
+ activeModel()->search(dlg->renameMap().first()));\r
\r
- settings.setValue(IniKey_AutoCloseRename, opDlg.autoClose());\r
+ prefs.setAutoCloseRename(opDlg.autoClose());\r
}\r
\r
-void MainWindow::shellExecute()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onOpenWith\r
+///\r
+/// 関連付けられたアプリで開きます。\r
+///\r
+void MainWindow::onOpenWith()\r
{\r
- qDebug() << "MainWindow::shellExecute";\r
+ qDebug() << "MainWindow::onOpenWith";\r
\r
- foreach (const QFileInfo &info, m_activeView->selectedItems()) {\r
+ foreach (const QFileInfo &info, selectedItems()) {\r
QString path = QDir::toNativeSeparators(info.absoluteFilePath());\r
QDesktopServices::openUrl(QUrl("file:///" + path));\r
}\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::showBookmarkDialog\r
+///\r
+/// ブックマーク一覧ダイアログを表示します。\r
+///\r
void MainWindow::showBookmarkDialog()\r
{\r
- qDebug() << "MainWindow::showBookmarkDialog();";\r
+ qDebug() << "MainWindow::showBookmarkDialog()";\r
\r
BookmarkDialog dlg(this);\r
dlg.setEditMode(false);\r
if (dlg.exec() == QDialog::Accepted) {\r
int n = dlg.selectedIndex();\r
-\r
- QSettings settings;\r
- m_activeView->setPath(settings.value(IniKey_BookmarkEntryPath(n)).toString(), true);\r
+ activeModel()->setRootPath(Preferences(this).getBookmarkPath(n + 1));\r
}\r
}\r
\r
-void MainWindow::editBookmark()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onEditBookmark\r
+///\r
+/// ブックマークの編集ダイアログを表示します。\r
+///\r
+void MainWindow::onEditBookmark()\r
{\r
- qDebug() << "MainWindow::showBookmarkDialog();";\r
+ qDebug() << "MainWindow::onEditBookmark()";\r
\r
BookmarkDialog dlg(this);\r
dlg.setEditMode(true);\r
\r
if (dlg.exec() == QDialog::Accepted) {\r
- initBookmark();\r
+ initBookmarkMenu();\r
}\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::showFilterDialog\r
+///\r
+/// フィルタ設定ダイアログを表示します。\r
+///\r
void MainWindow::showFilterDialog()\r
{\r
- qDebug() << "MainWindow::showFilterDialog();";\r
+ qDebug() << "MainWindow::showFilterDialog()";\r
\r
- QString filters = m_activeView->nameFilters().join(" ");\r
+ QString filters = activeModel()->nameFilters().join(" ");\r
\r
QInputDialog dlg(this);\r
dlg.setInputMode(QInputDialog::TextInput);\r
dlg.resize(width() * 0.8, dlg.height());\r
\r
if (dlg.exec() == QDialog::Accepted) {\r
- static_cast<FolderPanel*>(m_activeView->parent())->setNameFilters(dlg.textValue());\r
- int row = m_activeView->currentIndex().row();\r
-\r
- m_activeView->refresh();\r
-\r
- if (row >= m_activeView->model()->rowCount()) {\r
- row = m_activeView->model()->rowCount() - 1;\r
+ filters = dlg.textValue();\r
+ if (filters.isEmpty()) {\r
+ filters = "*";\r
}\r
\r
- m_activeView->setCurrentIndex(m_activeView->model()->index(row, 1));\r
-\r
+ activeModel()->setNameFilters(filters.split(" ", QString::SkipEmptyParts));\r
+ activeModel()->refresh();\r
}\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::showHistoryDialog\r
+///\r
+/// 履歴選択ダイアログを表示します。\r
+///\r
void MainWindow::showHistoryDialog()\r
{\r
- qDebug() << "MainWindow::showHistoryDialog();";\r
-\r
- FolderView *vOther = otherSideFolderView(m_activeView);\r
+ qDebug() << "MainWindow::showHistoryDialog()";\r
\r
HistoryDialog dlg(this);\r
- if (m_activeView->side() == "Left") {\r
- dlg.setDefaultLeft(true);\r
- dlg.setHistory(m_activeView->history(), vOther->history());\r
- }\r
- else {\r
- dlg.setDefaultLeft(false);\r
- dlg.setHistory(vOther->history(), m_activeView->history());\r
- }\r
-\r
- if (dlg.exec() == QDialog::Accepted) {\r
- if (m_activeView->side() == dlg.selectedSide()) {\r
- m_activeView->setHistoryIndexAt(dlg.selectedIndex());\r
- }\r
- else {\r
- m_activeView->setPath(vOther->history()->at(dlg.selectedIndex()), true);\r
- }\r
- }\r
+ dlg.setModel(ui->LPanel->model(), ui->RPanel->model(), activeModel());\r
+ dlg.exec();\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::showSortDialog\r
+///\r
+/// ソート方法選択ダイアログを表示します。\r
+///\r
void MainWindow::showSortDialog()\r
{\r
- qDebug() << "MainWindow::showSortDialog();";\r
+ qDebug() << "MainWindow::showSortDialog()";\r
\r
SortDialog dlg(this);\r
- dlg.setRightOrLeft(m_activeView->side());\r
-\r
- if (dlg.exec() == QDialog::Accepted) {\r
- m_activeView->setSorting();\r
- m_activeView->refresh();\r
- }\r
+ dlg.setModel(activeModel());\r
+ dlg.exec();\r
}\r
\r
-void MainWindow::splitCenter()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onSplitCenter\r
+///\r
+/// パネルを中央で分割します。\r
+///\r
+void MainWindow::onSplitCenter()\r
{\r
- qDebug() << "MainWindow::splitCenter();";\r
+ qDebug() << "MainWindow::onSplitCenter()";\r
\r
QList<int> sizes = ui->splitter->sizes();\r
int sizeTotal = sizes[0] + sizes[1];\r
ui->splitter->setSizes(sizes);\r
}\r
\r
-void MainWindow::swapView()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onSwap\r
+///\r
+/// 左右のパネルでモデルを入れ替えます。\r
+///\r
+void MainWindow::onSwap()\r
{\r
- qDebug() << "MainWindow::swapView();";\r
-\r
- QString dir1 = ui->pane1->folderPanel()->folderView()->dir();\r
- QString dir2 = ui->pane2->folderPanel()->folderView()->dir();\r
+ qDebug() << "MainWindow::onSwap()";\r
\r
- ui->pane1->folderPanel()->folderView()->setPath(dir2, true);\r
- ui->pane2->folderPanel()->folderView()->setPath(dir1, true);\r
+ FolderModel *tmp = ui->LPanel->model();\r
+ ui->LPanel->setModel(ui->RPanel->model());\r
+ ui->RPanel->setModel(tmp);\r
\r
- updateActions();\r
+ // アクティブ状態も変更する\r
+ if (ui->LPanel->model()->isActive()) {\r
+ setActiveModel(ui->RPanel->model());\r
+ }\r
+ else {\r
+ setActiveModel(ui->LPanel->model());\r
+ }\r
}\r
\r
-void MainWindow::switchHalfMode(bool checked)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onTogglePreviewMode\r
+/// \param checked メニューのチェック状態\r
+///\r
+/// 通常モード/プレビューモードを切り替えます。\r
+///\r
+void MainWindow::onTogglePreviewMode(bool checked)\r
{\r
- qDebug() << "MainWindow::switchHalfMode();" << checked;\r
-\r
- AnyView *pane = static_cast<AnyView*>(\r
- otherSideFolderView(m_activeView)->parent()->parent());\r
- Q_CHECK_PTR(pane);\r
+ qDebug() << "MainWindow::onTogglePreviewMode()" << checked;\r
\r
if (checked) {\r
- // ハーフモードへ移行する\r
- setViewMode(ModeHalfView);\r
- pane->setViewItem(m_activeView->currentItem());\r
+ setViewMode(ModePreview);\r
}\r
else {\r
- // ハーフモードを解除する\r
setViewMode(ModeBasic);\r
- pane->changeView(AnyView::ViewFolder);\r
}\r
- updateActions();\r
}\r
\r
-void MainWindow::searchNext()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onSearchNext\r
+///\r
+/// 次のアイテムを検索します。\r
+///\r
+void MainWindow::onSearchNext()\r
{\r
- qDebug() << "MainWindow::searchNext";\r
-\r
- SearchBox *box = qobject_cast<SearchBox*>(qApp->focusWidget());\r
- Q_CHECK_PTR(box);\r
+ qDebug() << "MainWindow::onSearchNext";\r
\r
- m_activeView->searchNext(box->text());\r
+ static_cast<FolderPanel*>(qApp->focusWidget()->parentWidget())->searchNext();\r
}\r
\r
-void MainWindow::searchPrev()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onSearchPrev\r
+///\r
+/// 前のアイテムを検索します。\r
+///\r
+void MainWindow::onSearchPrev()\r
{\r
- qDebug() << "MainWindow::searchPrev";\r
+ qDebug() << "MainWindow::onSearchPrev";\r
\r
- SearchBox *box = qobject_cast<SearchBox*>(qApp->focusWidget());\r
- Q_CHECK_PTR(box);\r
-\r
- m_activeView->searchPrev(box->text());\r
+ static_cast<FolderPanel*>(qApp->focusWidget()->parentWidget())->searchNext(-1);\r
}\r
\r
-void MainWindow::setCursorToBegin()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyDown\r
+///\r
+/// フォーカスウィジェットに↓キーイベントを送信します。\r
+///\r
+void MainWindow::onKeyDown()\r
{\r
- qDebug() << "MainWindow::setCursorToBegin();";\r
-\r
- QKeyEvent event1 = QKeyEvent(QEvent::KeyPress, Qt::Key_Home, Qt::NoModifier);\r
- QApplication::sendEvent(QApplication::focusWidget(), &event1);\r
+ qDebug() << "MainWindow::onKeyDown()";\r
\r
- QKeyEvent event2 = QKeyEvent(QEvent::KeyPress, Qt::Key_Home, Qt::ControlModifier);\r
- QApplication::sendEvent(QApplication::focusWidget(), &event2);\r
+ QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier);\r
+ qApp->sendEvent(qApp->focusWidget(), &event);\r
}\r
\r
-void MainWindow::cursorDown()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyEnd\r
+///\r
+/// フォーカスウィジェットにEND, Ctrl+ENDキーイベントを送信します。\r
+///\r
+void MainWindow::onKeyEnd()\r
{\r
- qDebug() << "MainWindow::cursorDown();";\r
+ qDebug() << "MainWindow::onKeyEnd()";\r
\r
- QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier);\r
- QApplication::sendEvent(QApplication::focusWidget(), &event);\r
+ QKeyEvent event1 = QKeyEvent(QEvent::KeyPress, Qt::Key_End, Qt::NoModifier);\r
+ qApp->sendEvent(qApp->focusWidget(), &event1);\r
+\r
+ QKeyEvent event2 = QKeyEvent(QEvent::KeyPress, Qt::Key_End, Qt::ControlModifier);\r
+ qApp->sendEvent(qApp->focusWidget(), &event2);\r
}\r
\r
-void MainWindow::cursorUp()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyHome\r
+///\r
+/// フォーカスウィジェットにHOME, Ctrl+HOMEキーイベントを送信します。\r
+///\r
+void MainWindow::onKeyHome()\r
{\r
- qDebug() << "MainWindow::cursorUp();";\r
+ qDebug() << "MainWindow::onKeyHome()";\r
\r
- QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier);\r
- QApplication::sendEvent(QApplication::focusWidget(), &event);\r
+ QKeyEvent event1 = QKeyEvent(QEvent::KeyPress, Qt::Key_Home, Qt::NoModifier);\r
+ qApp->sendEvent(qApp->focusWidget(), &event1);\r
+\r
+ QKeyEvent event2 = QKeyEvent(QEvent::KeyPress, Qt::Key_Home, Qt::ControlModifier);\r
+ qApp->sendEvent(qApp->focusWidget(), &event2);\r
}\r
\r
-void MainWindow::setCursorToEnd()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyUp\r
+///\r
+/// フォーカスウィジェットに↑キーイベントを送信します。\r
+///\r
+void MainWindow::onKeyUp()\r
{\r
- qDebug() << "MainWindow::setCursorToEnd();";\r
+ qDebug() << "MainWindow::onKeyUp()";\r
\r
- QKeyEvent event1 = QKeyEvent(QEvent::KeyPress, Qt::Key_End, Qt::NoModifier);\r
- QApplication::sendEvent(QApplication::focusWidget(), &event1);\r
-\r
- QKeyEvent event2 = QKeyEvent(QEvent::KeyPress, Qt::Key_End, Qt::ControlModifier);\r
- QApplication::sendEvent(QApplication::focusWidget(), &event2);\r
+ QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier);\r
+ qApp->sendEvent(qApp->focusWidget(), &event);\r
}\r
\r
-void MainWindow::setCursorToBeginOther()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyHomeOther\r
+///\r
+/// 非フォーカスビューにHOME, Ctrl+HOMEキーイベントを送信します。\r
+///\r
+void MainWindow::onKeyHomeOther()\r
{\r
- qDebug() << "MainWindow::setCursorToBeginOther();";\r
+ qDebug() << "MainWindow::onKeyHomeOther()";\r
\r
QKeyEvent event1 = QKeyEvent(QEvent::KeyPress, Qt::Key_Home, Qt::NoModifier);\r
sendEventOther(&event1);\r
sendEventOther(&event2);\r
}\r
\r
-void MainWindow::cursorDownOther()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyDownOther\r
+///\r
+/// 非フォーカスビューに↓キーイベントを送信します。\r
+///\r
+void MainWindow::onKeyDownOther()\r
{\r
- qDebug() << "MainWindow::cursorDownOther();";\r
+ qDebug() << "MainWindow::onKeyDownOther()";\r
\r
QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier);\r
sendEventOther(&event);\r
}\r
\r
-void MainWindow::cursorUpOther()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyUpOther\r
+///\r
+/// 非フォーカスビューに↑キーイベントを送信します。\r
+///\r
+void MainWindow::onKeyUpOther()\r
{\r
- qDebug() << "MainWindow::cursorUpOther();";\r
+ qDebug() << "MainWindow::onKeyUpOther()";\r
\r
QKeyEvent event = QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier);\r
sendEventOther(&event);\r
}\r
\r
-void MainWindow::setCursorToEndOther()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onKeyEndOther\r
+///\r
+/// 非フォーカスビューにEND, Ctrl+ENDキーイベントを送信します。\r
+///\r
+void MainWindow::onKeyEndOther()\r
{\r
- qDebug() << "MainWindow::setCursorToEndOther();";\r
+ qDebug() << "MainWindow::onKeyEndOther()";\r
\r
QKeyEvent event1 = QKeyEvent(QEvent::KeyPress, Qt::Key_End, Qt::NoModifier);\r
sendEventOther(&event1);\r
sendEventOther(&event2);\r
}\r
\r
-void MainWindow::setFontSizeDown()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onScaleDown\r
+///\r
+/// 表示を縮小します。\r
+///\r
+void MainWindow::onScaleDown()\r
{\r
- qDebug() << "MainWindow::setFontSizeDown();";\r
-\r
- changeFontSize(-1);\r
-}\r
+ qDebug() << "MainWindow::onScaleDown()";\r
\r
-void MainWindow::setFontSizeUp()\r
-{\r
- qDebug() << "MainWindow::setFontSizeUp();";\r
+ AbstractView *view = dynamic_cast<AbstractView*>(qApp->focusWidget());\r
+ if (view) {\r
+ view->scaleDown();\r
+ }\r
\r
- changeFontSize(1);\r
+ ui->LPanel->updateAppearance();\r
+ ui->RPanel->updateAppearance();\r
+ ui->FPanel->updateAppearance();\r
}\r
\r
-void MainWindow::changeFontSize(int diff)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onScaleUp\r
+///\r
+/// 表示を拡大します。\r
+///\r
+void MainWindow::onScaleUp()\r
{\r
- qDebug() << "MainWindow::changeFontSize(;";\r
-\r
- QSettings settings;\r
- QFont font;\r
+ qDebug() << "MainWindow::onScaleUp()";\r
\r
- // フォルダビューのフォントサイズ変更\r
- if (ui->pane1->folderPanel()->folderView()->hasFocus() ||\r
- ui->pane2->folderPanel()->folderView()->hasFocus())\r
- {\r
- font = settings.value(IniKey_ViewFont).value<QFont>();\r
- font.setPointSize(font.pointSize() + diff);\r
- settings.setValue(IniKey_ViewFont, font);\r
-\r
- ui->pane1->folderPanel()->updateAppearance();\r
- ui->pane2->folderPanel()->updateAppearance();\r
+ AbstractView *view = dynamic_cast<AbstractView*>(qApp->focusWidget());\r
+ if (view) {\r
+ view->scaleUp();\r
}\r
\r
- // テキストビューのフォントサイズ変更\r
- if (ui->pane1->textView()->hasFocus() ||\r
- ui->pane2->textView()->hasFocus() ||\r
- ui->pane3->textView()->hasFocus())\r
- {\r
- font = settings.value(IniKey_ViewerFont).value<QFont>();\r
- font.setPointSize(font.pointSize() + diff);\r
- settings.setValue(IniKey_ViewerFont, font);\r
-\r
- ui->pane1->textView()->updateAppearance();\r
- ui->pane2->textView()->updateAppearance();\r
- ui->pane3->textView()->updateAppearance();\r
- }\r
-\r
- if (ui->pane1->imageView()->hasFocus() ||\r
- ui->pane2->imageView()->hasFocus() ||\r
- ui->pane3->imageView()->hasFocus())\r
- {\r
- ui->pane1->imageView()->changeScale(diff > 0);\r
- ui->pane2->imageView()->changeScale(diff > 0);\r
- ui->pane3->imageView()->changeScale(diff > 0);\r
- }\r
+ ui->LPanel->updateAppearance();\r
+ ui->RPanel->updateAppearance();\r
+ ui->FPanel->updateAppearance();\r
}\r
\r
-void MainWindow::initBookmark()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::initBookmarkMenu\r
+///\r
+/// ブックマークメニューを初期化します。\r
+///\r
+void MainWindow::initBookmarkMenu()\r
{\r
- QSettings settings;\r
+ qDebug() << "MainWindow::initBookmarkMenu()";\r
+\r
+ Preferences prefs(this);\r
QFileIconProvider iconProvider;\r
\r
ui->menu_Bookmark->clear();\r
- ui->menu_Bookmark->addAction(ui->bookmark_Edit);\r
+ ui->menu_Bookmark->addAction(ui->action_AddBookmark);\r
+ ui->menu_Bookmark->addAction(ui->action_EditBookmark);\r
ui->menu_Bookmark->addSeparator();\r
- int i = 0;\r
- while (!settings.value(IniKey_BookmarkEntryName(i), "").toString().isEmpty()) {\r
- QString path = settings.value(IniKey_BookmarkEntryPath(i)).toString();\r
- QAction *action = new QAction(this);\r
- action->setText(settings.value(IniKey_BookmarkEntryName(i)).toString());\r
- action->setData(i);\r
- action->setIcon(iconProvider.icon(QFileInfo(path)));\r
- ui->menu_Bookmark->addAction(action);\r
- connect(action, SIGNAL(triggered()), this, SLOT(openBookmark()));\r
- i++;\r
+ for (int n = 1; ; n++) {\r
+ QString name = prefs.getBookmarkEntry(n);\r
+ if (name.isEmpty()) {\r
+ break;\r
+ }\r
+ QString path = prefs.getBookmarkPath(n);\r
+\r
+ QAction *action = ui->menu_Bookmark->addAction(\r
+ iconProvider.icon(QFileInfo(path)), name, this,\r
+ SLOT(onOpenBookmark()));\r
+ action->setData(n);\r
}\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::sendEventOther\r
+/// \param event 送信するイベント\r
+///\r
+/// 非フォーカスのビューにイベントを送信します。\r
+///\r
void MainWindow::sendEventOther(QEvent *event)\r
{\r
- qDebug() << "MainWindow::sendEventOther();";\r
-\r
- QWidget *widget = NULL;\r
+ qDebug() << "MainWindow::sendEventOther()";\r
\r
- if (m_viewMode & ModeBasic) {\r
- // 検索ボックスにフォーカスがある場合も考慮して、\r
- // FolderPanalを介してViewを取得する\r
- FolderPanel *fp = qobject_cast<FolderPanel*>(qApp->focusWidget()->parentWidget());\r
- Q_CHECK_PTR(fp);\r
-\r
- widget = otherSideFolderView(fp->folderView());\r
- }\r
- else if (m_viewMode & ModeHalfView) {\r
- AnyView *focusedView = qobject_cast<AnyView*>(qApp->focusWidget()->parentWidget());\r
- if (!focusedView) {\r
- focusedView = qobject_cast<AnyView*>(qApp->focusWidget()->parentWidget()->parentWidget());\r
- }\r
- Q_CHECK_PTR(focusedView);\r
-\r
- if (focusedView == ui->pane1) {\r
- widget = ui->pane2->visibleView();\r
- }\r
- else {\r
- Q_ASSERT(focusedView == ui->pane2);\r
- widget = ui->pane1->visibleView();\r
+ // フォーカスを持たない、可視状態のビューを検索する\r
+ foreach (QWidget *w, findChildren<QWidget*>()) {\r
+ AbstractView *view = dynamic_cast<AbstractView*>(w);\r
+ if (view) {\r
+ if (w->isVisible() && !w->hasFocus()) {\r
+ qDebug() << "Send event to" << w->objectName();\r
+ qApp->sendEvent(w, event);\r
+ }\r
}\r
}\r
- else {\r
- return;\r
- }\r
-\r
- Q_CHECK_PTR(widget);\r
- QApplication::sendEvent(widget, event);\r
-}\r
-\r
-void MainWindow::setPathFromOther()\r
-{\r
- qDebug() << "MainWindow::setPathFromOther();";\r
-\r
- FolderView *other = otherSideFolderView(m_activeView);\r
-\r
- m_activeView->setPath(other->dir(), true);\r
}\r
\r
-void MainWindow::setPathToHome()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onSyncPanel\r
+///\r
+/// 隣のパネルと同じフォルダを表示します。\r
+///\r
+void MainWindow::onSyncPanel()\r
{\r
- qDebug() << "MainWindow::setPathToHome();";\r
+ qDebug() << "MainWindow::onSyncPanel()";\r
\r
- m_activeView->setPath(QDir::homePath(), true);\r
+ activeModel()->setRootPath(inactiveModel()->rootPath());\r
}\r
\r
-void MainWindow::setPathToOther()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onSyncPanelTo\r
+///\r
+/// 隣のパネルに同じフォルダを表示します。\r
+///\r
+void MainWindow::onSyncPanelTo()\r
{\r
- qDebug() << "MainWindow::setPathToOther();";\r
-\r
- FolderView *other = otherSideFolderView(m_activeView);\r
+ qDebug() << "MainWindow::onSyncPanelTo()";\r
\r
- other->setPath(m_activeView->dir(), true);\r
+ inactiveModel()->setRootPath(activeModel()->rootPath());\r
}\r
\r
-void MainWindow::setPathToParent()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onToggleFullMode\r
+/// \param checked メニューのチェック状態\r
+///\r
+/// 単画面/二画面を切り替えます。\r
+///\r
+void MainWindow::onToggleFullMode(bool checked)\r
{\r
- qDebug() << "MainWindow::setPathToParent();";\r
+ qDebug() << "MainWindow::onToggleFullMode()" << checked;\r
\r
- QDir dir(m_activeView->dir());\r
- if (!dir.isRoot()) {\r
- dir.cdUp();\r
- m_activeView->setPath(dir.absolutePath(), true);\r
+ if (checked) {\r
+ setViewMode(ModeFull);\r
+ }\r
+ else {\r
+ setViewMode(ModeBasic);\r
}\r
}\r
\r
-void MainWindow::setPathToRoot()\r
-{\r
- qDebug() << "MainWindow::setPathToRoot();";\r
-\r
- m_activeView->setPath(QDir::rootPath(), true);\r
-}\r
\r
-void MainWindow::toggleSearchBox(bool checked)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onToggleSearch\r
+/// \param checked メニューのチェック状態\r
+///\r
+/// 検索ボックスの表示/非表示を切り替えます。\r
+///\r
+void MainWindow::onToggleSearch(bool checked)\r
{\r
- qDebug() << "MainWindow::toggleSearchBox" << checked;\r
-\r
- FolderView *view;\r
- SearchBox *box;\r
+ qDebug() << "MainWindow::onToggleSearch" << checked;\r
\r
- if (checked) {\r
- setViewMode(m_viewMode | ModeSearch);\r
-\r
- box = m_activeView->parent()->findChild<SearchBox*>("searchBox");\r
- Q_CHECK_PTR(box);\r
-\r
- box->setVisible(true);\r
- box->setFocus();\r
- box->selectAll();\r
- }\r
- else {\r
- setViewMode(m_viewMode ^ ModeSearch);\r
- if (ui->pane1->folderPanel()->searchBox()->isVisible()) {\r
- box = ui->pane1->folderPanel()->searchBox();\r
- view = ui->pane1->folderPanel()->folderView();\r
- }\r
- else {\r
- Q_ASSERT(ui->pane2->folderPanel()->searchBox()->isVisible());\r
- box = ui->pane2->folderPanel()->searchBox();\r
- view = ui->pane2->folderPanel()->folderView();\r
- }\r
-\r
- if (box->hasFocus()) {\r
- view->setFocus();\r
- }\r
- box->setVisible(false);\r
- }\r
+ // 丸投げ\r
+ ui->LPanel->folderPanel()->toggleSearch(checked);\r
+ ui->RPanel->folderPanel()->toggleSearch(checked);\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::showPreferenceDialog\r
+///\r
+/// 環境設定ダイアログを表示します。\r
+///\r
void MainWindow::showPreferenceDialog()\r
{\r
qDebug() << "MainWindow::showPreferenceDialog";\r
\r
PreferenceDialog dlg(this);\r
if (dlg.exec() == QDialog::Accepted) {\r
- bool dark1 = m_activeView != ui->pane1->folderPanel()->folderView();\r
- bool dark2 = m_activeView != ui->pane2->folderPanel()->folderView();\r
-\r
- ui->pane1->folderPanel()->updateAppearance(dark1);\r
- ui->pane2->folderPanel()->updateAppearance(dark2);\r
- ui->pane1->textView()->updateAppearance();\r
- ui->pane2->textView()->updateAppearance();\r
- ui->pane3->textView()->updateAppearance();\r
-\r
- updateActions();\r
+ ui->LPanel->updateAppearance();\r
+ ui->RPanel->updateAppearance();\r
+ ui->FPanel->updateAppearance();\r
}\r
}\r
\r
-void MainWindow::toggleShowHiddenFiles(bool checked)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onToggleHidden\r
+/// \param checked メニューのチェック状態\r
+///\r
+/// 隠しファイルの表示/非表示を切り替えます。\r
+///\r
+void MainWindow::onToggleHidden(bool checked)\r
{\r
- qDebug() << "MainWindow::toggleShowHiddenFiles" << checked;\r
+ qDebug() << "MainWindow::onToggleHidden" << checked;\r
\r
- ui->pane1->folderPanel()->folderView()->setFilter(QDir::Hidden, checked);\r
- ui->pane1->folderPanel()->folderView()->refresh();\r
+ if (checked) {\r
+ activeModel()->setFilter(activeModel()->filter() | QDir::Hidden);\r
+ }\r
+ else {\r
+ activeModel()->setFilter(activeModel()->filter() ^ QDir::Hidden);\r
+ }\r
\r
- ui->pane2->folderPanel()->folderView()->setFilter(QDir::Hidden, checked);\r
- ui->pane2->folderPanel()->folderView()->refresh();\r
+ activeModel()->refresh();\r
}\r
\r
-void MainWindow::toggleShowSystemFiles(bool checked)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onToggleSystem\r
+/// \param checked メニューのチェック状態\r
+///\r
+/// システムファイルの表示/非表示を切り替えます。\r
+///\r
+void MainWindow::onToggleSystem(bool checked)\r
{\r
- qDebug() << "MainWindow::toggleShowSystemFiles" << checked;\r
+ qDebug() << "MainWindow::onToggleSystem" << checked;\r
\r
- ui->pane1->folderPanel()->folderView()->setFilter(QDir::System, checked);\r
- ui->pane1->folderPanel()->folderView()->refresh();\r
+ if (checked) {\r
+ activeModel()->setFilter(activeModel()->filter() | QDir::System);\r
+ }\r
+ else {\r
+ activeModel()->setFilter(activeModel()->filter() ^ QDir::System);\r
+ }\r
\r
- ui->pane2->folderPanel()->folderView()->setFilter(QDir::System, checked);\r
- ui->pane2->folderPanel()->folderView()->refresh();\r
+ activeModel()->refresh();\r
}\r
\r
-void MainWindow::showContextMenu(QContextMenuEvent *event)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onToggleThumbnailMode\r
+/// \param checked メニューのチェック状態\r
+///\r
+/// サムネイルモードの切り替えを行います。\r
+///\r
+void MainWindow::onToggleThumbnailMode(bool checked)\r
{\r
- qDebug() << "MainWindow::showContextMenu();";\r
-\r
- FolderView *view = static_cast<FolderView*>(sender());\r
- Q_CHECK_PTR(view);\r
-\r
- QModelIndex index = view->indexAt(event->pos());\r
-\r
- QMenu menu(this);\r
- if (index.isValid()) {\r
- menu.addAction(ui->action_Open);\r
- menu.addAction(ui->action_Exec);\r
- menu.addAction(ui->action_OpenEditor);\r
- menu.addAction(ui->action_OpenTerminal);\r
- menu.addAction(ui->action_OpenArchiver);\r
- menu.addSeparator();\r
- menu.addAction(ui->cmd_Copy);\r
- menu.addAction(ui->cmd_Move);\r
- menu.addSeparator();\r
- menu.addAction(ui->cmd_Delete);\r
- menu.addSeparator();\r
- menu.addAction(ui->copy_Filename);\r
- menu.addAction(ui->copy_Fullpath);\r
- menu.addSeparator();\r
- menu.addAction(ui->cmd_Rename);\r
- }\r
- else {\r
- menu.addAction(ui->move_Back);\r
- menu.addAction(ui->move_Forward);\r
- menu.addSeparator();\r
- menu.addAction(ui->move_Parent);\r
- menu.addAction(ui->move_Home);\r
- menu.addAction(ui->move_Root);\r
- menu.addAction(ui->move_Jump);\r
- menu.addSeparator();\r
- menu.addAction(ui->cmd_NewFile);\r
- menu.addAction(ui->cmd_NewFolder);\r
- }\r
+ qDebug() << "MainWindow::onToggleThumbnailMode()" << checked;\r
\r
- menu.exec(event->globalPos());\r
+ activePanel()->folderPanel()->toggleView(checked);\r
}\r
\r
-void MainWindow::checkUpdate(bool silent)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onCheckUpdate\r
+/// \param silent 最新版を使用している場合に何も表示しないならtrue\r
+///\r
+/// アップデートの有無を確認します。\r
+///\r
+void MainWindow::onCheckUpdate(bool silent)\r
{\r
- qDebug() << "MainWindow::checkUpdate()" << silent;\r
+ qDebug() << "MainWindow::onCheckUpdate()" << silent;\r
\r
QNetworkAccessManager *manager = new QNetworkAccessManager(this);\r
\r
}\r
}\r
\r
-void MainWindow::viewFinish()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::initActions\r
+///\r
+/// アクションを初期化します。\r
+///\r
+void MainWindow::initActions()\r
{\r
- qDebug() << "MainWindow::viewFinish();" << sender()->objectName();\r
+ qDebug() << "MainWindow::initActions()";\r
+\r
+ QList<QKeySequence> shortcuts;\r
+\r
+ //>>>>> 追加のショートカットキーを設定する\r
+ appendActionShortcut(ui->action_Open, "M");\r
+ appendActionShortcut(ui->action_OpenWith, "Shift+M");\r
+ appendActionShortcut(ui->view_Back, "Backspace");\r
+ // MacだとShift+の形で認識されてしまうもの\r
+ appendActionShortcut(ui->action_ScaleUp, "Shift++");\r
+ appendActionShortcut(ui->action_Filter, "Shift+*");\r
+ appendActionShortcut(ui->action_OpenTerminal, "Shift+>");\r
+ appendActionShortcut(ui->action_About, "Shift+?");\r
+ appendActionShortcut(ui->image_ScaleNormal, "Shift+=");\r
+\r
+ // SIGNAL -> SLOT\r
+ connect(ui->action_About, SIGNAL(triggered()), this, SLOT(onAbout()));\r
+ connect(ui->action_AddBookmark, SIGNAL(triggered()), this, SLOT(onAddBookmark()));\r
+ connect(ui->action_Cd, SIGNAL(triggered()), this, SLOT(onChooseFolder()));\r
+ connect(ui->action_CheckUpdate, SIGNAL(triggered()), this, SLOT(onCheckUpdate()));\r
+ connect(ui->action_Copy, SIGNAL(triggered()), this, SLOT(onCopy()));\r
+ connect(ui->action_CopyFileName, SIGNAL(triggered()), this, SLOT(onCopyFileName()));\r
+ connect(ui->action_CopyFilePath, SIGNAL(triggered()), this, SLOT(onCopyFilePath()));\r
+ connect(ui->action_CreateFile, SIGNAL(triggered()), this, SLOT(onCreateFile()));\r
+ connect(ui->action_CreateFolder, SIGNAL(triggered()), this, SLOT(onCreateFolder()));\r
+ connect(ui->action_Delete, SIGNAL(triggered()), this, SLOT(onDelete()));\r
+ connect(ui->action_EditBookmark, SIGNAL(triggered()), this, SLOT(onEditBookmark()));\r
+ connect(ui->action_ExpandLeft, SIGNAL(triggered()), this, SLOT(onExpandLeft()));\r
+ connect(ui->action_ExpandRight, SIGNAL(triggered()), this, SLOT(onExpandRight()));\r
+ connect(ui->action_Filter, SIGNAL(triggered()), this, SLOT(showFilterDialog()));\r
+ connect(ui->action_History, SIGNAL(triggered()), this, SLOT(showHistoryDialog()));\r
+ connect(ui->action_KeyDown, SIGNAL(triggered()), this, SLOT(onKeyDown()));\r
+ connect(ui->action_KeyDownOther, SIGNAL(triggered()), this, SLOT(onKeyDownOther()));\r
+ connect(ui->action_KeyEnd, SIGNAL(triggered()), this, SLOT(onKeyEnd()));\r
+ connect(ui->action_KeyEndOther, SIGNAL(triggered()), this, SLOT(onKeyEndOther()));\r
+ connect(ui->action_KeyHome, SIGNAL(triggered()), this, SLOT(onKeyHome()));\r
+ connect(ui->action_KeyHomeOther, SIGNAL(triggered()), this, SLOT(onKeyHomeOther()));\r
+ connect(ui->action_KeyLeft, SIGNAL(triggered()), this, SLOT(onKeyLeft()));\r
+ connect(ui->action_KeyUp, SIGNAL(triggered()), this, SLOT(onKeyUp()));\r
+ connect(ui->action_KeyUpOther, SIGNAL(triggered()), this, SLOT(onKeyUpOther()));\r
+ connect(ui->action_Move, SIGNAL(triggered()), this, SLOT(onMove()));\r
+ connect(ui->action_Open, SIGNAL(triggered()), this, SLOT(onOpen()));\r
+ connect(ui->action_OpenArchiver, SIGNAL(triggered()), this, SLOT(onOpenArchiver()));\r
+ connect(ui->action_OpenEditor, SIGNAL(triggered()), this, SLOT(onOpenEditor()));\r
+ connect(ui->action_OpenTerminal, SIGNAL(triggered()), this, SLOT(onOpenTerminal()));\r
+ connect(ui->action_OpenWith, SIGNAL(triggered()), this, SLOT(onOpenWith()));\r
+ connect(ui->action_Quit, SIGNAL(triggered()), this, SLOT(close()));\r
+ connect(ui->action_Rename, SIGNAL(triggered()), this, SLOT(onRename()));\r
+ connect(ui->action_KeyRight, SIGNAL(triggered()), this, SLOT(onKeyRight()));\r
+ connect(ui->action_RunCommand, SIGNAL(triggered()), this, SLOT(onRunCommand()));\r
+ connect(ui->action_ScaleDown, SIGNAL(triggered()), this, SLOT(onScaleDown()));\r
+ connect(ui->action_ScaleUp, SIGNAL(triggered()), this, SLOT(onScaleUp()));\r
+ connect(ui->action_SearchNext, SIGNAL(triggered()), this, SLOT(onSearchNext()));\r
+ connect(ui->action_SearchPrev, SIGNAL(triggered()), this, SLOT(onSearchPrev()));\r
+ connect(ui->action_Setting, SIGNAL(triggered()), this, SLOT(showPreferenceDialog()));\r
+ connect(ui->action_ShowBookmark, SIGNAL(triggered()), this, SLOT(showBookmarkDialog()));\r
+ connect(ui->action_Sort, SIGNAL(triggered()), this, SLOT(showSortDialog()));\r
+ connect(ui->action_SplitCenter, SIGNAL(triggered()), this, SLOT(onSplitCenter()));\r
+ connect(ui->action_Swap, SIGNAL(triggered()), this, SLOT(onSwap()));\r
+ connect(ui->action_SyncPanel, SIGNAL(triggered()), this, SLOT(onSyncPanel()));\r
+ connect(ui->action_SyncPanelTo, SIGNAL(triggered()), this, SLOT(onSyncPanelTo()));\r
+\r
+ connect(ui->toggle_FullMode, SIGNAL(toggled(bool)), this, SLOT(onToggleFullMode(bool)));\r
+ connect(ui->toggle_Hidden, SIGNAL(toggled(bool)), this, SLOT(onToggleHidden(bool)));\r
+ connect(ui->toggle_Mark, SIGNAL(triggered()), this, SLOT(onToggleMark()));\r
+ connect(ui->toggle_PreviewMode, SIGNAL(toggled(bool)), this, SLOT(onTogglePreviewMode(bool)));\r
+ connect(ui->toggle_Search, SIGNAL(toggled(bool)), this, SLOT(onToggleSearch(bool)));\r
+ connect(ui->toggle_System, SIGNAL(toggled(bool)), this, SLOT(onToggleSystem(bool)));\r
+ connect(ui->toggle_ThumbnailMode, SIGNAL(toggled(bool)), this, SLOT(onToggleThumbnailMode(bool)));\r
+\r
+ connect(ui->view_Back, SIGNAL(triggered()), this, SLOT(view_finished()));\r
\r
- ui->statusBar->findChild<QLabel*>("Right")->setText("");\r
- ui->pane3->setVisible(false);\r
- ui->splitter->setVisible(true);\r
- m_activeView->setFocus();\r
}\r
\r
-void MainWindow::initActionConnections()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::setActiveModel\r
+/// \param m 新しいアクティブモデル\r
+///\r
+/// アクティブモデルを変更します。\r
+///\r
+void MainWindow::setActiveModel(FolderModel *m)\r
{\r
- qDebug() << "MainWindow::initActionConnections";\r
+ qDebug() << "MainWindow::setActiveModel()" << m;\r
\r
- connect(ui->key_Left, SIGNAL(triggered()), this, SLOT(leftKeyPress()));\r
- connect(ui->key_Right, SIGNAL(triggered()), this, SLOT(rightKeyPress()));\r
+ if (activeModel()) {\r
+ activeModel()->disconnect(this);\r
+ ui->action_CdHome->disconnect();\r
+ ui->action_CdRoot->disconnect();\r
+ ui->action_CdUp->disconnect();\r
+ ui->action_historyBack->disconnect();\r
+ ui->action_HistoryForward->disconnect();\r
+ ui->action_MarkAll->disconnect();\r
+ ui->action_MarkAllFiles->disconnect();\r
+ ui->action_MarkAllOff->disconnect();\r
+ ui->action_MarkInvert->disconnect();\r
+ ui->action_Refresh->disconnect();\r
+ }\r
\r
- connect(ui->action_Command, SIGNAL(triggered()), this, SLOT(executeCommand()));\r
- connect(ui->action_Exec, SIGNAL(triggered()), this, SLOT(shellExecute()));\r
- connect(ui->action_Open, SIGNAL(triggered()), this, SLOT(open()));\r
- connect(ui->action_OpenEditor, SIGNAL(triggered()), this, SLOT(openEditor()));\r
- connect(ui->action_OpenTerminal, SIGNAL(triggered()), this, SLOT(openTerminal()));\r
- connect(ui->action_OpenArchiver, SIGNAL(triggered()), this, SLOT(openArchiver()));\r
- connect(ui->action_Quit, SIGNAL(triggered()), this, SLOT(close()));\r
- connect(ui->action_Search, SIGNAL(toggled(bool)), this, SLOT(toggleSearchBox(bool)));\r
- connect(ui->action_SearchNext, SIGNAL(triggered()), this, SLOT(searchNext()));\r
- connect(ui->action_SearchPrev, SIGNAL(triggered()), this, SLOT(searchPrev()));\r
- connect(ui->action_Setting, SIGNAL(triggered()), this, SLOT(showPreferenceDialog()));\r
- connect(ui->check_Update, SIGNAL(triggered()), this, SLOT(checkUpdate()));\r
- connect(ui->cmd_Copy, SIGNAL(triggered()), this, SLOT(copyItems()));\r
- connect(ui->cmd_Delete, SIGNAL(triggered()), this, SLOT(deleteItems()));\r
- connect(ui->cmd_Move, SIGNAL(triggered()), this, SLOT(moveItems()));\r
- connect(ui->cmd_NewFile, SIGNAL(triggered()), this, SLOT(createFile()));\r
- connect(ui->cmd_NewFolder, SIGNAL(triggered()), this, SLOT(createFolder()));\r
- connect(ui->cmd_Rename, SIGNAL(triggered()), this, SLOT(renameItems()));\r
- connect(ui->copy_Filename, SIGNAL(triggered()), this, SLOT(copyFilenameToClipboard()));\r
- connect(ui->copy_Fullpath, SIGNAL(triggered()), this, SLOT(copyFullpathTpClipboard()));\r
- connect(ui->help_About, SIGNAL(triggered()), this, SLOT(about()));\r
- connect(ui->mark_All, SIGNAL(triggered()), this, SLOT(markAll()));\r
- connect(ui->mark_AllFiles, SIGNAL(triggered()), this, SLOT(markAllFiles()));\r
- connect(ui->mark_AllOff, SIGNAL(triggered()), this, SLOT(markAllOff()));\r
- connect(ui->mark_Invert, SIGNAL(triggered()), this, SLOT(markInvert()));\r
- connect(ui->mark_Toggle, SIGNAL(triggered()), this, SLOT(markToggle()));\r
- connect(ui->move_Back, SIGNAL(triggered()), this, SLOT(historyBack()));\r
- connect(ui->move_Begin, SIGNAL(triggered()), this, SLOT(setCursorToBegin()));\r
- connect(ui->move_Down, SIGNAL(triggered()), this, SLOT(cursorDown()));\r
- connect(ui->move_End, SIGNAL(triggered()), this, SLOT(setCursorToEnd()));\r
- connect(ui->move_Up, SIGNAL(triggered()), this, SLOT(cursorUp()));\r
- connect(ui->move_BeginOther, SIGNAL(triggered()), this, SLOT(setCursorToBeginOther()));\r
- connect(ui->move_DownOther, SIGNAL(triggered()), this, SLOT(cursorDownOther()));\r
- connect(ui->move_EndOther, SIGNAL(triggered()), this, SLOT(setCursorToEndOther()));\r
- connect(ui->move_UpOther, SIGNAL(triggered()), this, SLOT(cursorUpOther()));\r
- connect(ui->move_Forward, SIGNAL(triggered()), this, SLOT(historyForward()));\r
- connect(ui->move_History, SIGNAL(triggered()), this, SLOT(showHistoryDialog()));\r
- connect(ui->move_Home, SIGNAL(triggered()), this, SLOT(setPathToHome()));\r
- connect(ui->move_Jump, SIGNAL(triggered()), this, SLOT(chooseFolder()));\r
- connect(ui->move_Parent, SIGNAL(triggered()), this, SLOT(setPathToParent()));\r
- connect(ui->move_Root, SIGNAL(triggered()), this, SLOT(setPathToRoot()));\r
- connect(ui->view_Filter, SIGNAL(triggered()), this, SLOT(showFilterDialog()));\r
- connect(ui->view_FontSizeDown, SIGNAL(triggered()), this, SLOT(setFontSizeDown()));\r
- connect(ui->view_FontSizeUp, SIGNAL(triggered()), this, SLOT(setFontSizeUp()));\r
- connect(ui->view_FromOther, SIGNAL(triggered()), this, SLOT(setPathFromOther()));\r
- connect(ui->view_HalfMode, SIGNAL(toggled(bool)), this, SLOT(switchHalfMode(bool)));\r
- connect(ui->view_Hidden, SIGNAL(toggled(bool)), this, SLOT(toggleShowHiddenFiles(bool)));\r
- connect(ui->view_Refresh, SIGNAL(triggered()), this, SLOT(refresh()));\r
-\r
- connect(ui->view_Sort, SIGNAL(triggered()), this, SLOT(showSortDialog()));\r
- connect(ui->view_Swap, SIGNAL(triggered()), this, SLOT(swapView()));\r
- connect(ui->view_System, SIGNAL(toggled(bool)), this, SLOT(toggleShowSystemFiles(bool)));\r
- connect(ui->view_ToOther, SIGNAL(triggered()), this, SLOT(setPathToOther()));\r
- connect(ui->bookmark_Edit, SIGNAL(triggered()), this, SLOT(editBookmark()));\r
- connect(ui->bookmark_Show, SIGNAL(triggered()), this, SLOT(showBookmarkDialog()));\r
- connect(ui->split_Center, SIGNAL(triggered()), this, SLOT(splitCenter()));\r
- connect(ui->expand_Left, SIGNAL(triggered()), this, SLOT(expandLeft()));\r
- connect(ui->expand_Right, SIGNAL(triggered()), this, SLOT(expandRight()));\r
-}\r
-\r
-void MainWindow::replaceVars(QString &str, const QFileInfo info)\r
-{\r
- qDebug() << "MainWindow::replaceVars" << str;\r
-\r
- str.replace("$B", info.completeBaseName());\r
- str.replace("$E", info.suffix());\r
- str.replace("$F", info.fileName());\r
- if (info.isDir()) {\r
- str.replace("$D", info.absoluteFilePath());\r
+ m->setActive();\r
+\r
+ connect(activeModel(), SIGNAL(modelAboutToBeReset()), this, SLOT(model_PreReset()));\r
+ connect(activeModel(), SIGNAL(modelReset()), this, SLOT(model_PostReset()));\r
+ connect(ui->action_CdHome, SIGNAL(triggered()), activeModel(), SLOT(onCdHome()));\r
+ connect(ui->action_CdRoot, SIGNAL(triggered()), activeModel(), SLOT(onCdRoot()));\r
+ connect(ui->action_CdUp, SIGNAL(triggered()), activeModel(), SLOT(onCdUp()));\r
+ connect(ui->action_historyBack, SIGNAL(triggered()), activeModel(), SLOT(onHistoryBack()));\r
+ connect(ui->action_HistoryForward, SIGNAL(triggered()), activeModel(), SLOT(onHistoryForward()));\r
+ connect(ui->action_MarkAll, SIGNAL(triggered()), activeModel(), SLOT(onMarkAll()));\r
+ connect(ui->action_MarkAllFiles, SIGNAL(triggered()), activeModel(), SLOT(onMarkAllFiles()));\r
+ connect(ui->action_MarkAllOff, SIGNAL(triggered()), activeModel(), SLOT(onMarkAllOff()));\r
+ connect(ui->action_MarkInvert, SIGNAL(triggered()), activeModel(), SLOT(onMarkInvert()));\r
+ connect(ui->action_Refresh, SIGNAL(triggered()), activeModel(), SLOT(refresh()));\r
+\r
+ ui->LPanel->updateAppearance();\r
+ ui->RPanel->updateAppearance();\r
+ ui->FPanel->updateAppearance();\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::activeModel\r
+/// \return アクティブなフォルダモデルを返します。\r
+///\r
+FolderModel *MainWindow::activeModel() const\r
+{\r
+ return FolderModel::activeModel();\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::activePanel\r
+/// \return アクティブモデルを所有している可視状態のパネルを返します。\r
+///\r
+Panel *MainWindow::activePanel() const\r
+{\r
+ if (ui->FPanel->model() == activeModel() && ui->FPanel->isVisible()) {\r
+ return ui->FPanel;\r
}\r
- else {\r
- str.replace("$D", info.absolutePath());\r
+ if (ui->LPanel->model() == activeModel() && ui->LPanel->isVisible()) {\r
+ return ui->LPanel;\r
+ }\r
+ if (ui->RPanel->model() == activeModel() && ui->RPanel->isVisible()) {\r
+ return ui->RPanel;\r
}\r
- str.replace("$P", info.absoluteFilePath());\r
+\r
+ qDebug() << ">>>>>>>>>> activePanel() Logic error <<<<<<<<<<";\r
+ return NULL;\r
}\r
\r
-FolderView* MainWindow::otherSideFolderView(const FolderView *view) const\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::inactiveModel\r
+/// \return 非アクティブなフォルダモデルを返します。\r
+///\r
+FolderModel *MainWindow::inactiveModel() const\r
{\r
- qDebug() << "MainWindow::otherSideFolderView()";\r
+ if (ui->LPanel->model()->isActive()) {\r
+ return ui->RPanel->model();\r
+ }\r
+ Q_ASSERT(ui->RPanel->model()->isActive());\r
+ return ui->LPanel->model();\r
+}\r
\r
- if (view == ui->pane1->folderPanel()->folderView()) {\r
- return ui->pane2->folderPanel()->folderView();\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::inactivePanel\r
+/// \return 非アクティブモデルを所有している可視状態のパネルを返します。\r
+///\r
+Panel *MainWindow::inactivePanel() const\r
+{\r
+ if (ui->LPanel->model() == inactiveModel() && ui->LPanel->isVisible()) {\r
+ return ui->LPanel;\r
}\r
- else {\r
- Q_ASSERT(view == ui->pane2->folderPanel()->folderView());\r
- return ui->pane1->folderPanel()->folderView();\r
+ if (ui->RPanel->model() == inactiveModel() && ui->RPanel->isVisible()) {\r
+ return ui->RPanel;\r
+ }\r
+ if (ui->FPanel->model() == inactiveModel() && ui->FPanel->isVisible()) {\r
+ return ui->FPanel;\r
}\r
+\r
+ qDebug() << ">>>>>>>>>> inactivePanel() Logic error <<<<<<<<<<";\r
+ return NULL;\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::selectedItems\r
+/// \return マークされているアイテムまたはカレントアイテムのリスト\r
+///\r
+QFileInfoList MainWindow::selectedItems() const\r
+{\r
+ QFileInfoList list = activeModel()->markedItems();\r
+ if (list.isEmpty()) {\r
+ qDebug() << focusItemView();\r
+ qDebug() << focusItemView()->currentIndex();\r
+ Q_ASSERT(focusItemView()->currentIndex().isValid());\r
+ list << activeModel()->fileInfo(focusItemView()->currentIndex());\r
+ }\r
+\r
+ return list;\r
}\r
\r
-void MainWindow::setViewMode(ModeFlags flags)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::focusItemView\r
+/// \return フォーカスを持つアイテムビュー\r
+///\r
+QAbstractItemView *MainWindow::focusItemView() const\r
{\r
- qDebug() << "MainWindow::setViewMode();" << flags;\r
- m_viewMode = flags;\r
+ return static_cast<QAbstractItemView*>(qApp->focusWidget());\r
}\r
\r
-bool MainWindow::startProcess(const QString &cmd, const QString &workDir, const QString &errMsg)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::setViewMode\r
+/// \param mode 新しいビューモード\r
+///\r
+/// ビューモードを変更します。\r
+///\r
+void MainWindow::setViewMode(Mode mode)\r
{\r
- qDebug() << "MainWindow::startProcess" << cmd << workDir << errMsg;\r
+ qDebug() << "MainWindow::setViewMode()" << mode;\r
+\r
+ QWidget *newFocusWidget = NULL;\r
+\r
+ switch (mode) {\r
+ case ModeBasic:\r
+ ui->FPanel->setVisible(false);\r
+ ui->splitter->setVisible(true);\r
+ ui->LPanel->setViewItem();\r
+ ui->RPanel->setViewItem();\r
+ if (m_viewMode == ModeFull) {\r
+ activePanel()->folderPanel()->itemView()->setCurrentIndex(\r
+ focusItemView()->currentIndex());\r
+ ui->FPanel->setModel(NULL);\r
+ }\r
+ newFocusWidget = activePanel()->folderPanel()->itemView();\r
+ break;\r
+\r
+ case ModeFull:\r
+ if (m_viewMode == ModeBasic) {\r
+ ui->FPanel->setModel(activeModel());\r
+ ui->splitter->setVisible(false);\r
+ ui->FPanel->setVisible(true);\r
+ ui->FPanel->folderPanel()->itemView()->setCurrentIndex(\r
+ focusItemView()->currentIndex());\r
+ }\r
+ ui->FPanel->setViewItem();\r
+ newFocusWidget = activePanel()->folderPanel()->itemView();\r
+ break;\r
+\r
+ case ModeView:\r
+ ui->FPanel->setViewItem(focusItemView()->currentIndex());\r
+ ui->splitter->setVisible(false);\r
+ ui->FPanel->setVisible(true);\r
+ newFocusWidget = ui->FPanel->visibleView();\r
+ break;\r
+\r
+ case ModePreview:\r
+ inactivePanel()->setViewItem(focusItemView()->currentIndex());\r
+ break;\r
+ }\r
+\r
+ m_prevMode = m_viewMode;\r
+ m_viewMode = mode;\r
+\r
+ if (newFocusWidget)\r
+ newFocusWidget->setFocus();\r
+ else\r
+ updateActions();\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::startProcess\r
+/// \param cmd 実行するコマンド\r
+/// \param errMsg エラー時の表示メッセージ\r
+/// \return true:成功, false:失敗\r
+///\r
+bool MainWindow::startProcess(const QString &cmd, const QString &errMsg)\r
+{\r
+ qDebug() << "MainWindow::startProcess" << cmd << errMsg;\r
\r
QProcess process(this);\r
- process.setWorkingDirectory(workDir);\r
+ process.setWorkingDirectory(activeModel()->rootPath());\r
if (!process.startDetached(cmd)) {\r
QMessageBox::critical(this, tr("エラー"), errMsg + "<br/>" + cmd);\r
return false;\r
return true;\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::updateActions\r
+///\r
+/// アクションの有効/無効を設定します。\r
+///\r
void MainWindow::updateActions()\r
{\r
- qDebug() << "MainWindow::updateActions" << m_viewMode;\r
+ qDebug() << "MainWindow::updateActions";\r
+\r
+ bool isView = true;\r
+ bool isSearch = false;\r
+ bool isImageView = false;\r
+ bool toggleSearch = true;\r
+\r
\r
QWidget *w = qApp->focusWidget();\r
+ if (w->objectName() == "folderView" || w->objectName() == "thumbnailView") {\r
+ setEnabledAllActions(true);\r
+\r
+ // 現在の選択アイテムが".."の場合、ファイル操作系アクションは無効にする\r
+ QFileInfoList list = selectedItems();\r
+ if (list.size() == 1 && list[0].fileName() == "..") {\r
+ ui->action_Copy->setEnabled(false);\r
+ ui->action_Delete->setEnabled(false);\r
+ ui->action_Move->setEnabled(false);\r
+ ui->action_Rename->setEnabled(false);\r
+ }\r
+\r
+ // 非二画面の場合、隣のパネルが必要な操作は無効にする\r
+ if (!ui->LPanel->folderPanel()->isVisible() ||\r
+ !ui->RPanel->folderPanel()->isVisible())\r
+ {\r
+ ui->action_Copy->setEnabled(false);\r
+ ui->action_Move->setEnabled(false);\r
+ ui->action_Swap->setEnabled(false);\r
+ ui->action_SyncPanel->setEnabled(false);\r
+ ui->action_SyncPanelTo->setEnabled(false);\r
+ }\r
+\r
+ // 単画面の場合、プレビューモードは無効にする\r
+ if (m_viewMode == ModeFull) {\r
+ ui->toggle_PreviewMode->setEnabled(false);\r
+ }\r
+\r
+ // サムネイル表示の場合、左右キーはカーソル移動\r
+ if (w->objectName() == "thumbnailView") {\r
+ ui->action_KeyLeft->setEnabled(false);\r
+ ui->action_KeyRight->setEnabled(false);\r
+ }\r
+ }\r
+ else if (w->objectName() == "searchBox"){\r
+ setEnabledAllActions(false);\r
+ isView = false;\r
+ isSearch = true;\r
+ }\r
+ else if (w->objectName() == "locationBox") {\r
+ setEnabledAllActions(false);\r
+ isView = false;\r
+ }\r
+ else if (w->objectName() == "textView") {\r
+ SimpleTextView *v = static_cast<SimpleTextView*>(w);\r
+ setEnabledAllActions(false);\r
+ toggleSearch = false;\r
+\r
+ ui->text_ConvertFromEUC->setEnabled(true);\r
+ ui->text_ConvertFromEUC->disconnect();\r
+ connect(ui->text_ConvertFromEUC, SIGNAL(triggered()), v, SLOT(convertFromEUC()));\r
+\r
+ ui->text_ConvertFromJIS->setEnabled(true);\r
+ ui->text_ConvertFromJIS->disconnect();\r
+ connect(ui->text_ConvertFromJIS, SIGNAL(triggered()), v, SLOT(convertFromJIS()));\r
+\r
+ ui->text_ConvertFromSJIS->setEnabled(true);\r
+ ui->text_ConvertFromSJIS->disconnect();\r
+ connect(ui->text_ConvertFromSJIS, SIGNAL(triggered()), v, SLOT(convertFromSJIS()));\r
+\r
+ ui->text_ConvertFromUTF8->setEnabled(true);\r
+ ui->text_ConvertFromUTF8->disconnect();\r
+ connect(ui->text_ConvertFromUTF8, SIGNAL(triggered()), v, SLOT(convertFromUTF8()));\r
+\r
+ ui->text_ConvertFromUTF16->setEnabled(true);\r
+ ui->text_ConvertFromUTF16->disconnect();\r
+ connect(ui->text_ConvertFromUTF16, SIGNAL(triggered()), v, SLOT(convertFromUTF16()));\r
+\r
+ ui->text_ConvertFromUTF16BE->setEnabled(true);\r
+ ui->text_ConvertFromUTF16BE->disconnect();\r
+ connect(ui->text_ConvertFromUTF16BE, SIGNAL(triggered()), v, SLOT(convertFromUTF16BE()));\r
+\r
+ ui->text_ConvertFromUTF16LE->setEnabled(true);\r
+ ui->text_ConvertFromUTF16LE->disconnect();\r
+ connect(ui->text_ConvertFromUTF16LE, SIGNAL(triggered()), v, SLOT(convertFromUTF16LE()));\r
+\r
+ ui->text_Copy->disconnect();\r
+ connect(ui->text_Copy, SIGNAL(triggered()), v, SLOT(copy()));\r
+\r
+ }\r
+ else if (w->objectName() == "imageView") {\r
+ SimpleImageView *v = static_cast<SimpleImageView*>(w);\r
+ setEnabledAllActions(false);\r
+ toggleSearch = false;\r
+ isImageView = true;\r
+\r
+ ui->image_FitToWindow->setEnabled(true);\r
+ ui->image_FitToWindow->disconnect();\r
+ connect(ui->image_FitToWindow, SIGNAL(toggled(bool)), v, SLOT(fitToWindow(bool)));\r
+\r
+ ui->image_ScaleNormal->setEnabled(true);\r
+ ui->image_ScaleNormal->disconnect();\r
+ connect(ui->image_ScaleNormal, SIGNAL(triggered()), v, SLOT(scaleNormal()));\r
+\r
+ ui->image_Rotate90->setEnabled(true);\r
+ ui->image_Rotate90->disconnect();\r
+ connect(ui->image_Rotate90, SIGNAL(triggered()), v, SLOT(rotate90()));\r
+\r
+ ui->image_Rotate180->setEnabled(true);\r
+ ui->image_Rotate180->disconnect();\r
+ connect(ui->image_Rotate180, SIGNAL(triggered()), v, SLOT(rotate180()));\r
+ }\r
+\r
+ ui->action_About->setEnabled(true);\r
+ ui->action_CheckUpdate->setEnabled(true);\r
+ ui->action_KeyDown->setEnabled(isView);\r
+ ui->action_KeyEnd->setEnabled(isView);\r
+ ui->action_KeyHome->setEnabled(isView);\r
+ ui->action_KeyUp->setEnabled(isView);\r
+ ui->action_Quit->setEnabled(true);\r
+ ui->action_ScaleDown->setEnabled(isView);\r
+ ui->action_ScaleUp->setEnabled(isView);\r
+ ui->action_SearchNext->setEnabled(isSearch);\r
+ ui->action_SearchPrev->setEnabled(isSearch);\r
+ ui->action_Setting->setEnabled(true);\r
+ ui->toggle_Search->setEnabled(toggleSearch);\r
+ ui->view_Back->setEnabled(m_viewMode == ModeView);\r
+\r
+ if (isImageView) {\r
+ ui->action_ScaleDown->setText(tr("縮小"));\r
+ ui->action_ScaleUp->setText(tr("拡大"));\r
+ }\r
+ else {\r
+ ui->action_ScaleDown->setText(tr("文字を小さく"));\r
+ ui->action_ScaleUp->setText(tr("文字を大きく"));\r
+ }\r
+\r
+ if (m_viewMode == ModeBasic || m_viewMode == ModeFull) {\r
+ ui->toggle_FullMode->setEnabled(true);\r
+ }\r
+ else {\r
+ ui->toggle_FullMode->setEnabled(false);\r
+ }\r
+\r
+ ui->action_historyBack->setEnabled(!activeModel()->isHistoryBegin());\r
+ ui->action_HistoryForward->setEnabled(!activeModel()->isHistoryEnd());\r
+\r
+#if 0\r
FolderView *view;\r
if ((view = qobject_cast<FolderView*>(w))) {\r
setEnabledAllActions(true);\r
ui->action_SearchPrev->setEnabled(false);\r
\r
// 「開く」アクションを変更する\r
- QFileInfo info(view->currentItem());\r
+ QFileInfo info(activeModel()->fileInfo(view->currentIndex()));\r
if (info.isDir()) {\r
- ui->action_Open->setIcon(QIcon(":/images/Open.png"));\r
+ ui->action_Open->setIcon(QIcon("://images/Open.png"));\r
ui->action_Open->setText(tr("開く"));\r
ui->action_Open->setToolTip(tr("開く"));\r
}\r
else {\r
- ui->action_Open->setIcon(QIcon(":/images/Search text.png"));\r
+ ui->action_Open->setIcon(QIcon("://images/Search text.png"));\r
ui->action_Open->setText(tr("内蔵ビューアで開く"));\r
ui->action_Open->setToolTip(tr("内蔵ビューアで開く"));\r
\r
}\r
}\r
\r
- if (info.fileName() == ".." && view->checkedItems().isEmpty()) {\r
+ if (info.fileName() == ".." && activeModel()->markedItems().isEmpty()) {\r
// ファイル操作を抑止\r
- ui->cmd_Copy->setEnabled(false);\r
- ui->cmd_Delete->setEnabled(false);\r
- ui->cmd_Move->setEnabled(false);\r
- ui->cmd_Rename->setEnabled(false);\r
+ ui->action_Copy->setEnabled(false);\r
+ ui->action_Delete->setEnabled(false);\r
+ ui->action_Move->setEnabled(false);\r
+ ui->action_Rename->setEnabled(false);\r
}\r
\r
if (m_viewMode & ModeBasic) {\r
ui->action_SearchNext->setEnabled(false);\r
ui->action_SearchPrev->setEnabled(false);\r
\r
- ui->move_Back->setEnabled(!view->history()->isBegin());\r
- ui->move_Forward->setEnabled(!view->history()->isEnd());\r
+ ui->action_historyBack->setEnabled(!activeModel()->isHistoryBegin());\r
+ ui->action_HistoryForward->setEnabled(!activeModel()->isHistoryEnd());\r
\r
QSettings settings;\r
ui->action_OpenEditor->setEnabled(!settings.value(IniKey_PathEditor).toString().isEmpty());\r
}\r
else if (!otherSideFolderView(view)->isVisible()) {\r
qDebug() << ">>>>> ハーフモードのメニュー設定 <<<<<";\r
- ui->view_FromOther->setEnabled(false);\r
- ui->view_ToOther->setEnabled(false);\r
- ui->cmd_Copy->setEnabled(false);\r
- ui->cmd_Move->setEnabled(false);\r
+ ui->action_SyncPanel->setEnabled(false);\r
+ ui->action_SyncPanelTo->setEnabled(false);\r
+ ui->action_Copy->setEnabled(false);\r
+ ui->action_Move->setEnabled(false);\r
}\r
}\r
else if (qobject_cast<SearchBox*>(w)) {\r
qDebug() << ">>>>> 検索モードのメニュー設定 <<<<<";\r
setEnabledAllActions(false);\r
- ui->action_Search->setEnabled(true);\r
+ ui->toggle_Search->setEnabled(true);\r
ui->action_SearchNext->setEnabled(true);\r
ui->action_SearchPrev->setEnabled(true);\r
- ui->help_About->setEnabled(true);\r
+ ui->action_About->setEnabled(true);\r
}\r
else if (qobject_cast<SimpleImageView*>(w) ||\r
qobject_cast<SimpleTextView*>(w))\r
setEnabledAllActions(false);\r
ui->action_Quit->setEnabled(true);\r
ui->action_Setting->setEnabled(true);\r
- ui->check_Update->setEnabled(true);\r
+ ui->action_CheckUpdate->setEnabled(true);\r
ui->view_FontSizeDown->setEnabled(true);\r
ui->view_FontSizeUp->setEnabled(true);\r
- ui->move_Begin->setEnabled(true);\r
- ui->move_Down->setEnabled(true);\r
- ui->move_End->setEnabled(true);\r
- ui->move_Up->setEnabled(true);\r
- ui->help_About->setEnabled(true);\r
+ ui->action_KeyDown->setEnabled(true);\r
+ ui->action_KeyEnd->setEnabled(true);\r
+ ui->action_KeyHome->setEnabled(true);\r
+ ui->action_KeyUp->setEnabled(true);\r
+ ui->action_About->setEnabled(true);\r
ui->key_Left->setEnabled(true);\r
ui->key_Right->setEnabled(true);\r
- if (m_viewMode & ModeHalfView) {\r
+ if (m_viewMode == ModePreview) {\r
ui->view_HalfMode->setEnabled(true);\r
}\r
}\r
+#endif\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::setEnabledAllActions\r
+/// \param enable 有効にする場合はtrue\r
+///\r
+/// 全てのアクションを有効または無効にします。\r
+///\r
void MainWindow::setEnabledAllActions(bool enable)\r
{\r
- qDebug() << "MainWindow::setEnabledAllActions();" << enable;\r
- foreach (QObject *obj, children()) {\r
- QAction *action = qobject_cast<QAction*>(obj);\r
- if (action) {\r
- action->setEnabled(enable);\r
- }\r
+ qDebug() << "MainWindow::setEnabledAllActions()" << enable;\r
+ foreach (QAction *action, findChildren<QAction*>()) {\r
+ action->setEnabled(enable);\r
}\r
}\r
\r
-void MainWindow::about()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::onAbout\r
+///\r
+/// Aboutダイアログを表示します。\r
+///\r
+void MainWindow::onAbout()\r
{\r
- qDebug() << ">>>>> about <<<<<";\r
-\r
QMessageBox::about(\r
this,\r
tr("げふぅ について"),\r
- tr("<h3>Gefu Ver%1</h3>").arg(VERSION_VALUE) +\r
+ qApp->applicationDisplayName() +\r
tr("<center>Gefu is an Experimental File Utility.<br/>"\r
"<small>(げふぅは実験的なファイルユーティリティです)</small></center>"\r
- "<p>最新版の情報は<a href='https://sourceforge.jp/projects/gefu/'>プロジェクトサイト</a>で公開しています。</p>"\r
+ "<p>最新版の情報は<a href='http://gefu.sourceforge.jp/'>公式サイト</a>で公開しています。</p>"\r
"<p><small>Copyright 2014 @miyabi_satoh All rights reserved.</small></p>"));\r
}\r
\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::closeEvent\r
+/// \param event クローズイベント\r
+///\r
+/// 終了処理を行います。\r
+///\r
void MainWindow::closeEvent(QCloseEvent *event)\r
{\r
- qDebug() << "MainWindow::closeEvent();";\r
- qDebug() << ">>>>> アプリケーションの終了要求 <<<<<";\r
- QSettings settings;\r
+ qDebug() << "MainWindow::closeEvent()";\r
+ Preferences prefs(this);\r
\r
- if (settings.value(IniKey_ConfirmExit).toBool()) {\r
+ if (prefs.isConfirmQuit()) {\r
QMessageBox msgBox;\r
QCheckBox *checkBox = new QCheckBox();\r
checkBox->setText(tr("次回以降は確認しない"));\r
event->ignore();\r
return;\r
}\r
- settings.setValue(IniKey_ConfirmExit, !checkBox->isChecked());\r
+ prefs.setConfirmQuit(!checkBox->isChecked());\r
}\r
\r
- settings.setValue(QString("Left/") + IniKey_Dir, ui->pane1->folderPanel()->folderView()->dir());\r
- settings.setValue(QString("Right/") + IniKey_Dir, ui->pane2->folderPanel()->folderView()->dir());\r
- settings.setValue(IniKey_ShowHidden, ui->view_Hidden->isChecked());\r
- settings.setValue(IniKey_ShowSystem, ui->view_System->isChecked());\r
- settings.setValue(IniKey_WindowGeometry, saveGeometry());\r
- settings.setValue(iniKey_WindowState, saveState());\r
+ prefs.saveModel("Left", ui->LPanel->model());\r
+ prefs.saveModel("Right", ui->RPanel->model());\r
+ prefs.saveWindow(this);\r
QMainWindow::closeEvent(event);\r
}\r
\r
-\r
-void MainWindow::keyPressEvent(QKeyEvent *event)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::eventFilter\r
+/// \param watched イベントの発生元オブジェクト\r
+/// \param e 発生したイベント\r
+/// \return イベントを処理した場合はtrueを返します。\r
+///\r
+bool MainWindow::eventFilter(QObject *watched, QEvent *e)\r
{\r
+ switch (e->type()) {\r
+ case QEvent::KeyPress:\r
+ // キーイベントの処理\r
+ return onKeyPressEvent(watched, static_cast<QKeyEvent*>(e));\r
\r
- QString ksq = KeyEventToSequence(event);\r
+ case QEvent::ContextMenu:\r
+ // コンテキストメニューイベントの処理\r
+ return onContextMenuEvent(watched, static_cast<QContextMenuEvent*>(e));\r
\r
- qDebug() << ">>>>> キーイベントを受信(MainWindow)" << ksq << "<<<<<";\r
- qDebug() << qApp->keyboardModifiers().testFlag(Qt::ShiftModifier);\r
+ case QEvent::Drop:\r
+ qDebug() << "QEvent::Drop";\r
+ // ドロップイベントの処理\r
+ return onDropEvent(watched, static_cast<QDropEvent*>(e));\r
\r
- if (ProcessShortcut(ksq, this)) {\r
- event->accept();\r
- return;\r
+ default:\r
+ break;\r
}\r
\r
- QMainWindow::keyPressEvent(event);\r
+ return false;\r
}\r
#ifndef MAINWINDOW_H\r
#define MAINWINDOW_H\r
\r
+#include "overwritedialog.h"\r
+\r
#include <QFileInfo>\r
#include <QModelIndex>\r
+#include <QNetworkReply>\r
+#include <QAbstractItemView>\r
#include <QMainWindow>\r
-class QNetworkReply;\r
-class OverWriteDialog;\r
-class QLabel;\r
+\r
class FolderView;\r
-class SearchBox;\r
-class AnyView;\r
+class FolderModel;\r
+class Panel;\r
\r
namespace Ui {\r
class MainWindow;\r
~MainWindow();\r
\r
signals:\r
- void showHiddenFiles(bool show);\r
- void showSystemFiles(bool show);\r
-\r
-public slots:\r
- void askOverWrite(QString *copyMethod, QString *alias,\r
- const QString &srcPath, const QString &tgtPath);\r
\r
- void currentChange(const QFileInfo &info);\r
- void dropAccept(const QFileInfoList &list, QDropEvent *event);\r
- void focusChange(QWidget * old, QWidget * now);\r
- void leftKeyPress();\r
- void rightKeyPress();\r
- void showFileInfo(const QString &str);\r
+private slots:\r
+ void app_focusChange(QWidget *old, QWidget *now);\r
+ void checkUpdateFinished(QNetworkReply *reply, bool silent = false);\r
+ void checkUpdateFinishedSilent(QNetworkReply *reply);\r
+ void model_PreReset();\r
+ void model_PostReset();\r
+ void onAbout();\r
+ void onCheckUpdate(bool silent = false);\r
+ void onChooseFolder();\r
+ void onCopy();\r
+ void onCopyFileName();\r
+ void onCopyFilePath();\r
+ void onCreateFile();\r
+ void onCreateFolder();\r
+ void onDelete();\r
+ void onEditBookmark();\r
+ void onExpandLeft();\r
+ void onExpandRight();\r
+ void onKeyDown();\r
+ void onKeyDownOther();\r
+ void onKeyEnd();\r
+ void onKeyEndOther();\r
+ void onKeyHome();\r
+ void onKeyHomeOther();\r
+ void onKeyLeft();\r
+ void onKeyRight();\r
+ void onKeyUp();\r
+ void onKeyUpOther();\r
+ void onMove();\r
+ void onOpenArchiver();\r
+ void onOpenBookmark();\r
+ void onOpenEditor(const QModelIndex &index = QModelIndex());\r
+ void onOpenTerminal();\r
+ void onOpenWith();\r
+ void onRename();\r
+ void onRunCommand();\r
+ void onScaleDown();\r
+ void onScaleUp();\r
+ void onSearchNext();\r
+ void onSearchPrev();\r
+ void onSplitCenter();\r
+ void onSwap();\r
+ void onSyncPanel();\r
+ void onSyncPanelTo();\r
+ void onToggleFullMode(bool checked);\r
+ void onToggleHidden(bool checked);\r
+ void onToggleMark();\r
+ void onTogglePreviewMode(bool checked);\r
+ void onToggleSearch(bool checked);\r
+ void onToggleSystem(bool checked);\r
+ void onToggleThumbnailMode(bool checked);\r
+ void showBookmarkDialog();\r
+ void showFilterDialog();\r
+ void showHistoryDialog();\r
+ void showPreferenceDialog();\r
+ void showSortDialog();\r
\r
- void about();\r
- void checkUpdate(bool silent = false);\r
- void checkUpdateFinished(QNetworkReply *reply, bool silent = false);\r
- void checkUpdateFinishedSilent(QNetworkReply *reply);\r
- void chooseFolder();\r
- void copyFilenameToClipboard();\r
- void copyFullpathTpClipboard();\r
- void copyItems();\r
- void createFile();\r
- void createFolder();\r
- void cursorDown();\r
- void cursorUp();\r
- void cursorDownOther();\r
- void cursorUpOther();\r
- void deleteItems();\r
- void editBookmark();\r
- void executeCommand();\r
- void expandLeft();\r
- void expandRight();\r
- void historyBack();\r
- void historyForward();\r
- void markAll();\r
- void markAllFiles();\r
- void markAllOff();\r
- void markInvert();\r
- void markToggle();\r
- void moveItems();\r
- void open(const QModelIndex &index = QModelIndex());\r
- void openEditor(const QString &path = QString());\r
- void openTerminal();\r
- void openArchiver();\r
- void openBookmark();\r
- void refresh();\r
- void renameItems();\r
- void searchNext();\r
- void searchPrev();\r
- void setCursorToBegin();\r
- void setCursorToEnd();\r
- void setCursorToBeginOther();\r
- void setCursorToEndOther();\r
- void setFontSizeDown();\r
- void setFontSizeUp();\r
- void setPathFromOther();\r
- void setPathToHome();\r
- void setPathToOther();\r
- void setPathToParent();\r
- void setPathToRoot();\r
- void shellExecute();\r
- void showBookmarkDialog();\r
- void showFilterDialog();\r
- void showHistoryDialog();\r
- void showPreferenceDialog();\r
- void showSortDialog();\r
- void splitCenter();\r
- void swapView();\r
- void switchHalfMode(bool checked);\r
- void toggleSearchBox(bool checked);\r
- void toggleShowHiddenFiles(bool checked);\r
- void toggleShowSystemFiles(bool checked);\r
-\r
- void showContextMenu(QContextMenuEvent *event);\r
-\r
- void viewFinish();\r
+public slots:\r
+ void askOverWrite(QString *copyMethod, QString *alias,\r
+ const QString &srcPath, const QString &tgtPath);\r
+ void onAddBookmark();\r
+ void onOpen(const QModelIndex &index = QModelIndex());\r
+ void view_copyAvailable(bool yes);\r
+ void view_currentChanged(const QModelIndex & current, const QModelIndex & previous);\r
+ void view_finished();\r
+ void view_statusChanged(const QString &text);\r
\r
private:\r
enum Mode {\r
- ModeBasic = 0x01,\r
- ModeSearch = 0x02,\r
- ModeFullView = 0x04,\r
- ModeHalfView = 0x08,\r
+ ModeBasic, // 二画面モード\r
+ ModeFull, // 単画面モード\r
+ ModeView, // ビューモード\r
+ ModePreview, // プレビューモード\r
};\r
- typedef QFlags<Mode> ModeFlags;\r
-\r
Ui::MainWindow *ui;\r
- FolderView *m_activeView;\r
- OverWriteDialog *m_overwriteDialog;\r
- ModeFlags m_viewMode;\r
-\r
- // action\r
- void initActionConnections();\r
- static void replaceVars(QString &str, const QFileInfo info);\r
- bool startProcess(const QString &cmd, const QString &workDir, const QString &errMsg);\r
- void updateActions();\r
- void setEnabledAllActions(bool enable);\r
- void showNameFilters(FolderView *view);\r
- void copyItems(const QFileInfoList &list, const QString &tgtDir);\r
- void moveItems(const QFileInfoList &list, const QString &tgtDir);\r
- void changeFontSize(int diff);\r
- void initBookmark();\r
- void sendEventOther(QEvent *event);\r
-\r
- // getter\r
- FolderView* otherSideFolderView(const FolderView *view) const;\r
-\r
- // setter\r
- void setViewMode(ModeFlags flags);\r
+ OverWriteDialog m_overwriteDialog;\r
+ Mode m_viewMode;\r
+ Mode m_prevMode;\r
+\r
+ FolderModel* activeModel() const;\r
+ Panel* activePanel() const;\r
+ void copyItems(const QFileInfoList &list, const QString &tgtDir);\r
+ QAbstractItemView* focusItemView() const;\r
+ FolderModel* inactiveModel() const;\r
+ Panel* inactivePanel() const;\r
+ void initActions();\r
+ void initBookmarkMenu();\r
+ void moveItems(const QFileInfoList &list, const QString &tgtDir);\r
+ bool onContextMenuEvent(QObject *obj, QContextMenuEvent *e);\r
+ bool onDropEvent(QObject *obj, QDropEvent *e);\r
+ bool onKeyPressEvent(QObject *obj, QKeyEvent *e);\r
+ QFileInfoList selectedItems() const;\r
+ void sendEventOther(QEvent *event);\r
+ void setActiveModel(FolderModel *m);\r
+ void setEnabledAllActions(bool enable);\r
+ void setViewMode(Mode mode);\r
+ bool startProcess(const QString &cmd, const QString &errMsg);\r
+ void updateActions();\r
\r
// QWidget interface\r
protected:\r
void closeEvent(QCloseEvent *event);\r
- void keyPressEvent(QKeyEvent *event);\r
+\r
+ // QObject interface\r
+public:\r
+ bool eventFilter(QObject *watched, QEvent *e);\r
};\r
\r
#endif // MAINWINDOW_H\r
<rect>\r
<x>0</x>\r
<y>0</y>\r
- <width>656</width>\r
- <height>133</height>\r
+ <width>669</width>\r
+ <height>433</height>\r
</rect>\r
</property>\r
<property name="windowTitle">\r
</property>\r
<widget class="QWidget" name="centralWidget">\r
<layout class="QVBoxLayout" name="verticalLayout">\r
+ <property name="spacing">\r
+ <number>0</number>\r
+ </property>\r
+ <property name="leftMargin">\r
+ <number>0</number>\r
+ </property>\r
+ <property name="topMargin">\r
+ <number>0</number>\r
+ </property>\r
+ <property name="rightMargin">\r
+ <number>0</number>\r
+ </property>\r
+ <property name="bottomMargin">\r
+ <number>0</number>\r
+ </property>\r
<item>\r
<widget class="QSplitter" name="splitter">\r
<property name="orientation">\r
<enum>Qt::Horizontal</enum>\r
</property>\r
- <widget class="AnyView" name="pane1" native="true">\r
- <property name="sizePolicy">\r
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
- <horstretch>0</horstretch>\r
- <verstretch>0</verstretch>\r
- </sizepolicy>\r
- </property>\r
- </widget>\r
- <widget class="AnyView" name="pane2" native="true">\r
- <property name="sizePolicy">\r
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
- <horstretch>0</horstretch>\r
- <verstretch>0</verstretch>\r
- </sizepolicy>\r
- </property>\r
- </widget>\r
+ <widget class="Panel" name="LPanel" native="true"/>\r
+ <widget class="Panel" name="RPanel" native="true"/>\r
</widget>\r
</item>\r
<item>\r
- <widget class="AnyView" name="pane3" native="true">\r
- <property name="sizePolicy">\r
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
- <horstretch>0</horstretch>\r
- <verstretch>0</verstretch>\r
- </sizepolicy>\r
- </property>\r
- </widget>\r
+ <widget class="Panel" name="FPanel" native="true"/>\r
</item>\r
</layout>\r
</widget>\r
<attribute name="toolBarBreak">\r
<bool>false</bool>\r
</attribute>\r
- <addaction name="action_Search"/>\r
+ <addaction name="toggle_Search"/>\r
<addaction name="action_Setting"/>\r
<addaction name="separator"/>\r
- <addaction name="mark_All"/>\r
- <addaction name="mark_AllFiles"/>\r
- <addaction name="mark_AllOff"/>\r
+ <addaction name="action_MarkAll"/>\r
+ <addaction name="action_MarkAllFiles"/>\r
+ <addaction name="action_MarkAllOff"/>\r
<addaction name="separator"/>\r
- <addaction name="view_Refresh"/>\r
- <addaction name="view_HalfMode"/>\r
- <addaction name="view_Filter"/>\r
+ <addaction name="action_Refresh"/>\r
+ <addaction name="toggle_FullMode"/>\r
+ <addaction name="toggle_ThumbnailMode"/>\r
+ <addaction name="toggle_PreviewMode"/>\r
+ <addaction name="action_Filter"/>\r
<addaction name="separator"/>\r
- <addaction name="move_Back"/>\r
- <addaction name="move_Forward"/>\r
- <addaction name="move_Root"/>\r
- <addaction name="move_Home"/>\r
- <addaction name="move_Jump"/>\r
+ <addaction name="action_historyBack"/>\r
+ <addaction name="action_HistoryForward"/>\r
+ <addaction name="action_CdRoot"/>\r
+ <addaction name="action_CdHome"/>\r
+ <addaction name="action_Cd"/>\r
<addaction name="separator"/>\r
- <addaction name="cmd_NewFile"/>\r
- <addaction name="cmd_NewFolder"/>\r
+ <addaction name="action_CreateFile"/>\r
+ <addaction name="action_CreateFolder"/>\r
<addaction name="separator"/>\r
- <addaction name="help_About"/>\r
+ <addaction name="action_About"/>\r
</widget>\r
<widget class="QStatusBar" name="statusBar"/>\r
<widget class="QMenuBar" name="menuBar">\r
<rect>\r
<x>0</x>\r
<y>0</y>\r
- <width>656</width>\r
+ <width>669</width>\r
<height>22</height>\r
</rect>\r
</property>\r
<property name="title">\r
<string>ファイル(&F)</string>\r
</property>\r
- <addaction name="action_Open"/>\r
- <addaction name="action_Exec"/>\r
+ <addaction name="action_OpenWith"/>\r
<addaction name="action_OpenEditor"/>\r
<addaction name="action_OpenTerminal"/>\r
<addaction name="action_OpenArchiver"/>\r
- <addaction name="action_Command"/>\r
+ <addaction name="action_RunCommand"/>\r
<addaction name="separator"/>\r
- <addaction name="action_Search"/>\r
+ <addaction name="toggle_Search"/>\r
<addaction name="action_SearchNext"/>\r
<addaction name="action_SearchPrev"/>\r
<addaction name="separator"/>\r
<property name="title">\r
<string>マーク(&M)</string>\r
</property>\r
- <addaction name="mark_Toggle"/>\r
- <addaction name="mark_All"/>\r
- <addaction name="mark_AllFiles"/>\r
- <addaction name="mark_AllOff"/>\r
- <addaction name="mark_Invert"/>\r
+ <addaction name="action_MarkAll"/>\r
+ <addaction name="action_MarkAllFiles"/>\r
+ <addaction name="action_MarkAllOff"/>\r
+ <addaction name="action_MarkInvert"/>\r
</widget>\r
<widget class="QMenu" name="menu_View">\r
<property name="title">\r
<string>表示(&V)</string>\r
</property>\r
- <addaction name="view_FromOther"/>\r
- <addaction name="view_ToOther"/>\r
- <addaction name="view_Swap"/>\r
- <addaction name="view_Refresh"/>\r
- <addaction name="view_HalfMode"/>\r
+ <addaction name="action_SyncPanel"/>\r
+ <addaction name="action_SyncPanelTo"/>\r
+ <addaction name="action_Swap"/>\r
+ <addaction name="action_Refresh"/>\r
+ <addaction name="toggle_FullMode"/>\r
+ <addaction name="toggle_ThumbnailMode"/>\r
+ <addaction name="toggle_PreviewMode"/>\r
<addaction name="separator"/>\r
- <addaction name="view_Hidden"/>\r
- <addaction name="view_System"/>\r
+ <addaction name="toggle_Hidden"/>\r
+ <addaction name="toggle_System"/>\r
<addaction name="separator"/>\r
- <addaction name="view_FontSizeUp"/>\r
- <addaction name="view_FontSizeDown"/>\r
+ <addaction name="action_ScaleUp"/>\r
+ <addaction name="action_ScaleDown"/>\r
<addaction name="separator"/>\r
- <addaction name="view_Sort"/>\r
- <addaction name="view_Filter"/>\r
+ <addaction name="action_Sort"/>\r
+ <addaction name="action_Filter"/>\r
</widget>\r
<widget class="QMenu" name="menu_Move">\r
<property name="title">\r
<string>移動(&E)</string>\r
</property>\r
- <addaction name="move_Back"/>\r
- <addaction name="move_Forward"/>\r
- <addaction name="move_History"/>\r
+ <addaction name="action_historyBack"/>\r
+ <addaction name="action_HistoryForward"/>\r
+ <addaction name="action_History"/>\r
<addaction name="separator"/>\r
- <addaction name="move_Home"/>\r
- <addaction name="move_Parent"/>\r
- <addaction name="move_Root"/>\r
- <addaction name="move_Jump"/>\r
+ <addaction name="action_CdHome"/>\r
+ <addaction name="action_CdUp"/>\r
+ <addaction name="action_CdRoot"/>\r
+ <addaction name="action_Cd"/>\r
<addaction name="separator"/>\r
- <addaction name="move_Up"/>\r
- <addaction name="move_Down"/>\r
- <addaction name="move_Begin"/>\r
- <addaction name="move_End"/>\r
+ <addaction name="action_KeyUp"/>\r
+ <addaction name="action_KeyDown"/>\r
+ <addaction name="action_KeyHome"/>\r
+ <addaction name="action_KeyEnd"/>\r
<addaction name="separator"/>\r
- <addaction name="move_UpOther"/>\r
- <addaction name="move_DownOther"/>\r
- <addaction name="move_BeginOther"/>\r
- <addaction name="move_EndOther"/>\r
+ <addaction name="action_KeyUpOther"/>\r
+ <addaction name="action_KeyDownOther"/>\r
+ <addaction name="action_KeyHomeOther"/>\r
+ <addaction name="action_KeyEndOther"/>\r
</widget>\r
<widget class="QMenu" name="menu_Operate">\r
<property name="title">\r
<string>操作(&O)</string>\r
</property>\r
- <addaction name="cmd_Copy"/>\r
- <addaction name="cmd_Move"/>\r
- <addaction name="cmd_Delete"/>\r
+ <addaction name="action_Copy"/>\r
+ <addaction name="action_Move"/>\r
+ <addaction name="action_Delete"/>\r
<addaction name="separator"/>\r
- <addaction name="cmd_Rename"/>\r
+ <addaction name="action_Rename"/>\r
<addaction name="separator"/>\r
- <addaction name="cmd_NewFile"/>\r
- <addaction name="cmd_NewFolder"/>\r
+ <addaction name="action_CreateFile"/>\r
+ <addaction name="action_CreateFolder"/>\r
<addaction name="separator"/>\r
- <addaction name="copy_Filename"/>\r
- <addaction name="copy_Fullpath"/>\r
+ <addaction name="action_CopyFileName"/>\r
+ <addaction name="action_CopyFilePath"/>\r
</widget>\r
<widget class="QMenu" name="menu_Help">\r
<property name="title">\r
<string>ヘルプ(&H)</string>\r
</property>\r
- <addaction name="check_Update"/>\r
- <addaction name="help_About"/>\r
+ <addaction name="action_CheckUpdate"/>\r
+ <addaction name="action_About"/>\r
</widget>\r
<widget class="QMenu" name="menu_Bookmark">\r
<property name="title">\r
<string>ブックマーク(&B)</string>\r
</property>\r
- <addaction name="bookmark_Edit"/>\r
+ <addaction name="action_EditBookmark"/>\r
<addaction name="separator"/>\r
</widget>\r
<widget class="QMenu" name="menu_Panel">\r
<property name="title">\r
<string>パネル(&P)</string>\r
</property>\r
- <addaction name="split_Center"/>\r
- <addaction name="expand_Left"/>\r
- <addaction name="expand_Right"/>\r
+ <addaction name="action_SplitCenter"/>\r
+ <addaction name="action_ExpandLeft"/>\r
+ <addaction name="action_ExpandRight"/>\r
</widget>\r
<addaction name="menu_File"/>\r
<addaction name="menu_Mark"/>\r
<addaction name="menu_Panel"/>\r
<addaction name="menu_Help"/>\r
</widget>\r
+ <widget class="QToolBar" name="toolBar">\r
+ <property name="windowTitle">\r
+ <string>toolBar</string>\r
+ </property>\r
+ <attribute name="toolBarArea">\r
+ <enum>TopToolBarArea</enum>\r
+ </attribute>\r
+ <attribute name="toolBarBreak">\r
+ <bool>false</bool>\r
+ </attribute>\r
+ </widget>\r
<action name="action_Quit">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<string>Return</string>\r
</property>\r
</action>\r
- <action name="action_Exec">\r
+ <action name="action_OpenWith">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Play.png</normaloff>:/images/Play.png</iconset>\r
<string>Shift+Return</string>\r
</property>\r
</action>\r
- <action name="view_FromOther">\r
+ <action name="action_SyncPanel">\r
<property name="icon">\r
- <iconset theme="隣のパネルと同じフォルダを表示"/>\r
+ <iconset theme="隣のパネルと同じフォルダを表示">\r
+ <normaloff/>\r
+ </iconset>\r
</property>\r
<property name="text">\r
<string>隣のパネルと同じフォルダを表示</string>\r
<string>O</string>\r
</property>\r
</action>\r
- <action name="view_ToOther">\r
+ <action name="action_SyncPanelTo">\r
<property name="text">\r
<string>隣のパネルに同じフォルダを表示</string>\r
</property>\r
<string>Shift+O</string>\r
</property>\r
</action>\r
- <action name="mark_Toggle">\r
+ <action name="toggle_Mark">\r
<property name="text">\r
<string>マーク/解除</string>\r
</property>\r
<string>Space</string>\r
</property>\r
</action>\r
- <action name="mark_All">\r
+ <action name="action_MarkAll">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Ok.png</normaloff>:/images/Ok.png</iconset>\r
<string>Shift+A</string>\r
</property>\r
</action>\r
- <action name="mark_AllFiles">\r
+ <action name="action_MarkAllFiles">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Check boxes.png</normaloff>:/images/Check boxes.png</iconset>\r
<string>A</string>\r
</property>\r
</action>\r
- <action name="mark_AllOff">\r
+ <action name="action_MarkAllOff">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Cancel.png</normaloff>:/images/Cancel.png</iconset>\r
<string>U</string>\r
</property>\r
</action>\r
- <action name="mark_Invert">\r
+ <action name="action_MarkInvert">\r
<property name="text">\r
<string>マークを反転</string>\r
</property>\r
<string>I</string>\r
</property>\r
</action>\r
- <action name="view_Swap">\r
+ <action name="action_Swap">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Flip.png</normaloff>:/images/Flip.png</iconset>\r
<enum>QAction::PreferencesRole</enum>\r
</property>\r
</action>\r
- <action name="view_Hidden">\r
+ <action name="toggle_Hidden">\r
<property name="checkable">\r
<bool>true</bool>\r
</property>\r
<string>Shift+H</string>\r
</property>\r
</action>\r
- <action name="view_Sort">\r
+ <action name="action_Sort">\r
<property name="text">\r
<string>ソート方法...</string>\r
</property>\r
<string>S</string>\r
</property>\r
</action>\r
- <action name="move_Down">\r
+ <action name="action_KeyDown">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Go down.png</normaloff>:/images/Go down.png</iconset>\r
<string>J</string>\r
</property>\r
</action>\r
- <action name="move_Up">\r
+ <action name="action_KeyUp">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Go up.png</normaloff>:/images/Go up.png</iconset>\r
<string>K</string>\r
</property>\r
</action>\r
- <action name="move_Back">\r
+ <action name="action_historyBack">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Back.png</normaloff>:/images/Back.png</iconset>\r
<string>[</string>\r
</property>\r
</action>\r
- <action name="move_Forward">\r
+ <action name="action_HistoryForward">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Forward.png</normaloff>:/images/Forward.png</iconset>\r
<string>]</string>\r
</property>\r
</action>\r
- <action name="move_History">\r
+ <action name="action_History">\r
<property name="text">\r
<string>履歴...</string>\r
</property>\r
<string>R</string>\r
</property>\r
</action>\r
- <action name="move_Parent">\r
+ <action name="action_CdUp">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Up.png</normaloff>:/images/Up.png</iconset>\r
<string>Backspace</string>\r
</property>\r
</action>\r
- <action name="move_Root">\r
+ <action name="action_CdRoot">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Monitor.png</normaloff>:/images/Monitor.png</iconset>\r
<string>Shift+Backspace</string>\r
</property>\r
</action>\r
- <action name="move_Jump">\r
+ <action name="action_Cd">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Folder.png</normaloff>:/images/Folder.png</iconset>\r
<string>G</string>\r
</property>\r
</action>\r
- <action name="move_Home">\r
+ <action name="action_CdHome">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Home.png</normaloff>:/images/Home.png</iconset>\r
<string>H</string>\r
</property>\r
</action>\r
- <action name="move_Begin">\r
+ <action name="action_KeyHome">\r
<property name="text">\r
<string>カーソルを先頭に</string>\r
</property>\r
<string>Shift+J</string>\r
</property>\r
</action>\r
- <action name="move_End">\r
+ <action name="action_KeyEnd">\r
<property name="text">\r
<string>カーソルを末尾に</string>\r
</property>\r
<string>E</string>\r
</property>\r
</action>\r
- <action name="action_Command">\r
+ <action name="action_RunCommand">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Export.png</normaloff>:/images/Export.png</iconset>\r
<string>X</string>\r
</property>\r
</action>\r
- <action name="cmd_Copy">\r
+ <action name="action_Copy">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Copy.png</normaloff>:/images/Copy.png</iconset>\r
<string>Ctrl+C</string>\r
</property>\r
</action>\r
- <action name="cmd_Move">\r
+ <action name="action_Move">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Paste.png</normaloff>:/images/Paste.png</iconset>\r
<string>Ctrl+M</string>\r
</property>\r
</action>\r
- <action name="cmd_Delete">\r
+ <action name="action_Delete">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Close file.png</normaloff>:/images/Close file.png</iconset>\r
<string>Ctrl+D</string>\r
</property>\r
</action>\r
- <action name="cmd_Rename">\r
+ <action name="action_Rename">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Rename.png</normaloff>:/images/Rename.png</iconset>\r
<string>Ctrl+R</string>\r
</property>\r
</action>\r
- <action name="cmd_NewFile">\r
+ <action name="action_CreateFile">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/New file.png</normaloff>:/images/New file.png</iconset>\r
<string>Ctrl+E</string>\r
</property>\r
</action>\r
- <action name="cmd_NewFolder">\r
+ <action name="action_CreateFolder">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Add folder.png</normaloff>:/images/Add folder.png</iconset>\r
<string>Ctrl+K</string>\r
</property>\r
</action>\r
- <action name="help_About">\r
+ <action name="action_About">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Help.png</normaloff>:/images/Help.png</iconset>\r
<enum>QAction::AboutRole</enum>\r
</property>\r
</action>\r
- <action name="view_System">\r
+ <action name="toggle_System">\r
<property name="checkable">\r
<bool>true</bool>\r
</property>\r
<string>Shift+S</string>\r
</property>\r
</action>\r
- <action name="view_Refresh">\r
+ <action name="action_Refresh">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Refresh.png</normaloff>:/images/Refresh.png</iconset>\r
<string>></string>\r
</property>\r
</action>\r
- <action name="view_Filter">\r
+ <action name="action_Filter">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Funnel.png</normaloff>:/images/Funnel.png</iconset>\r
<string>*</string>\r
</property>\r
</action>\r
- <action name="check_Update">\r
+ <action name="action_CheckUpdate">\r
<property name="text">\r
<string>アップデートを確認</string>\r
</property>\r
<string>Shift+Z</string>\r
</property>\r
</action>\r
- <action name="copy_Filename">\r
+ <action name="action_CopyFileName">\r
<property name="text">\r
<string>ファイル名をクリップボードにコピー</string>\r
</property>\r
<string>C</string>\r
</property>\r
</action>\r
- <action name="copy_Fullpath">\r
+ <action name="action_CopyFilePath">\r
<property name="text">\r
<string>フルパス名をクリップボードにコピー</string>\r
</property>\r
<string>Shift+C</string>\r
</property>\r
</action>\r
- <action name="action_Search">\r
+ <action name="toggle_Search">\r
<property name="checkable">\r
<bool>true</bool>\r
</property>\r
<string>Shift+Return</string>\r
</property>\r
</action>\r
- <action name="view_FontSizeUp">\r
+ <action name="action_ScaleUp">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Zoom in.png</normaloff>:/images/Zoom in.png</iconset>\r
<string>+</string>\r
</property>\r
</action>\r
- <action name="view_FontSizeDown">\r
+ <action name="action_ScaleDown">\r
<property name="icon">\r
<iconset resource="resource.qrc">\r
<normaloff>:/images/Zoom out.png</normaloff>:/images/Zoom out.png</iconset>\r
<string>-</string>\r
</property>\r
</action>\r
- <action name="move_UpOther">\r
+ <action name="action_KeyUpOther">\r
<property name="text">\r
- <string>隣ペインのカーソルを上に</string>\r
- </property>\r
- <property name="toolTip">\r
- <string>隣ペインのカーソルを上に</string>\r
+ <string>隣パネルのカーソルを上に</string>\r
</property>\r
<property name="shortcut">\r
<string>Shift+Up</string>\r
</property>\r
</action>\r
- <action name="move_DownOther">\r
+ <action name="action_KeyDownOther">\r
<property name="text">\r
- <string>隣ペインのカーソルを下に</string>\r
- </property>\r
- <property name="toolTip">\r
- <string>隣ペインのカーソルを下に</string>\r
+ <string>隣パネルのカーソルを下に</string>\r
</property>\r
<property name="shortcut">\r
<string>Shift+Down</string>\r
</property>\r
</action>\r
- <action name="move_BeginOther">\r
+ <action name="action_KeyHomeOther">\r
<property name="text">\r
- <string>隣ペインのカーソルを先頭に</string>\r
- </property>\r
- <property name="toolTip">\r
- <string>隣ペインのカーソルを先頭に</string>\r
+ <string>隣パネルのカーソルを先頭に</string>\r
</property>\r
<property name="shortcut">\r
<string>Alt+Up</string>\r
</property>\r
</action>\r
- <action name="move_EndOther">\r
+ <action name="action_KeyEndOther">\r
<property name="text">\r
- <string>隣ペインのカーソルを末尾に</string>\r
- </property>\r
- <property name="toolTip">\r
- <string>隣ペインのカーソルを末尾に</string>\r
+ <string>隣パネルのカーソルを末尾に</string>\r
</property>\r
<property name="shortcut">\r
<string>Alt+Down</string>\r
</property>\r
</action>\r
- <action name="key_Left">\r
+ <action name="action_KeyLeft">\r
<property name="text">\r
<string>key_Left</string>\r
</property>\r
<string>Left</string>\r
</property>\r
</action>\r
- <action name="key_Right">\r
+ <action name="action_KeyRight">\r
<property name="text">\r
<string>key_Right</string>\r
</property>\r
<string>Right</string>\r
</property>\r
</action>\r
- <action name="view_HalfMode">\r
+ <action name="toggle_PreviewMode">\r
<property name="checkable">\r
<bool>true</bool>\r
</property>\r
<string>P</string>\r
</property>\r
</action>\r
- <action name="bookmark_Edit">\r
+ <action name="action_EditBookmark">\r
<property name="text">\r
<string>ブックマークを編集...</string>\r
</property>\r
<string>Shift+B</string>\r
</property>\r
</action>\r
- <action name="bookmark_Show">\r
+ <action name="action_ShowBookmark">\r
<property name="text">\r
<string>ブックマークを表示</string>\r
</property>\r
<string>B</string>\r
</property>\r
</action>\r
- <action name="split_Center">\r
+ <action name="action_SplitCenter">\r
<property name="text">\r
<string>中央で分割</string>\r
</property>\r
<string>Shift+Space</string>\r
</property>\r
</action>\r
- <action name="expand_Left">\r
+ <action name="action_ExpandLeft">\r
<property name="text">\r
<string>左パネルを拡大</string>\r
</property>\r
<string>Shift+Right</string>\r
</property>\r
</action>\r
- <action name="expand_Right">\r
+ <action name="action_ExpandRight">\r
<property name="text">\r
<string>右パネルを拡大</string>\r
</property>\r
<string>Shift+U</string>\r
</property>\r
</action>\r
+ <action name="text_ConvertFromEUC">\r
+ <property name="text">\r
+ <string>EUC-JPで再読込</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Ctrl+E</string>\r
+ </property>\r
+ </action>\r
+ <action name="text_ConvertFromJIS">\r
+ <property name="text">\r
+ <string>ISO 2022-JP(JIS)で再読込</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Ctrl+J</string>\r
+ </property>\r
+ </action>\r
+ <action name="text_ConvertFromSJIS">\r
+ <property name="text">\r
+ <string>Shift-JISで再読込</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Ctrl+S</string>\r
+ </property>\r
+ </action>\r
+ <action name="text_ConvertFromUTF8">\r
+ <property name="text">\r
+ <string>UTF-8で再読込</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Ctrl+U</string>\r
+ </property>\r
+ </action>\r
+ <action name="text_ConvertFromUTF16">\r
+ <property name="text">\r
+ <string>UTF-16で再読込</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Ctrl+I</string>\r
+ </property>\r
+ </action>\r
+ <action name="text_ConvertFromUTF16BE">\r
+ <property name="text">\r
+ <string>UTF-16BEで再読込</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Ctrl+O</string>\r
+ </property>\r
+ </action>\r
+ <action name="text_ConvertFromUTF16LE">\r
+ <property name="text">\r
+ <string>UTF-16LEで再読込</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Ctrl+P</string>\r
+ </property>\r
+ </action>\r
+ <action name="text_Copy">\r
+ <property name="text">\r
+ <string>選択範囲をクリップボードにコピー</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Ctrl+C</string>\r
+ </property>\r
+ </action>\r
+ <action name="view_Back">\r
+ <property name="text">\r
+ <string>戻る</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Return</string>\r
+ </property>\r
+ </action>\r
+ <action name="image_FitToWindow">\r
+ <property name="checkable">\r
+ <bool>true</bool>\r
+ </property>\r
+ <property name="text">\r
+ <string>ウィンドウにフィット</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Space</string>\r
+ </property>\r
+ </action>\r
+ <action name="image_ScaleNormal">\r
+ <property name="text">\r
+ <string>等倍</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>=</string>\r
+ </property>\r
+ </action>\r
+ <action name="image_Rotate90">\r
+ <property name="text">\r
+ <string>右に90度回転</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>9</string>\r
+ </property>\r
+ </action>\r
+ <action name="image_Rotate180">\r
+ <property name="text">\r
+ <string>右に180度回転</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>0</string>\r
+ </property>\r
+ </action>\r
+ <action name="action_AddBookmark">\r
+ <property name="icon">\r
+ <iconset resource="resource.qrc">\r
+ <normaloff>:/images/Favourites.png</normaloff>:/images/Favourites.png</iconset>\r
+ </property>\r
+ <property name="text">\r
+ <string>現在のフォルダをブックマークに追加</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>Ctrl+B</string>\r
+ </property>\r
+ </action>\r
+ <action name="toggle_FullMode">\r
+ <property name="checkable">\r
+ <bool>true</bool>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="resource.qrc">\r
+ <normaloff>:/images/windows_fullscreen.png</normaloff>:/images/windows_fullscreen.png</iconset>\r
+ </property>\r
+ <property name="text">\r
+ <string>単画面モード</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>,</string>\r
+ </property>\r
+ </action>\r
+ <action name="toggle_ThumbnailMode">\r
+ <property name="checkable">\r
+ <bool>true</bool>\r
+ </property>\r
+ <property name="icon">\r
+ <iconset resource="resource.qrc">\r
+ <normaloff>:/images/Pictures.png</normaloff>:/images/Pictures.png</iconset>\r
+ </property>\r
+ <property name="text">\r
+ <string>サムネイルモード</string>\r
+ </property>\r
+ <property name="shortcut">\r
+ <string>.</string>\r
+ </property>\r
+ </action>\r
</widget>\r
<layoutdefault spacing="6" margin="11"/>\r
<customwidgets>\r
<customwidget>\r
- <class>AnyView</class>\r
+ <class>Panel</class>\r
<extends>QWidget</extends>\r
- <header>anyview.h</header>\r
+ <header>panel.h</header>\r
<container>1</container>\r
</customwidget>\r
</customwidgets>\r
-#include "common.h"\r
#include "mainwindow.h"\r
#include "operationdialog.h"\r
#include "ui_operationdialog.h"\r
-#include "common.h"\r
+#include "preferences.h"\r
#include "overwritedialog.h"\r
#include "ui_overwritedialog.h"\r
\r
#include <QDir>\r
#include <QMessageBox>\r
#include <QDateTime>\r
-#include <QSettings>\r
\r
OverWriteDialog::OverWriteDialog(QWidget *parent) :\r
QDialog(parent),\r
\r
void OverWriteDialog::reset()\r
{\r
- QSettings settings;\r
- QString method = settings.value(IniKey_DefaultOnCopy).toString();\r
- QRadioButton *radio = findChild<QRadioButton*>(method);\r
+ QString method = Preferences(this).getCopyBehavior();\r
+ QRadioButton *radio = findChild<QRadioButton*>("rb" + method);\r
if (radio == NULL) {\r
radio = ui->rbOverWriteIfNew;\r
}\r
--- /dev/null
+#include "foldermodel.h"
+#include "folderview.h"
+#include "mainwindow.h"
+#include "preferences.h"
+#include "panel.h"
+#include "ui_panel.h"
+
+#include <QDebug>
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Panel::Panel
+/// \param parent 親ウィジェット
+///
+/// コンストラクタ
+///
+Panel::Panel(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::Panel)
+{
+ ui->setupUi(this);
+ ui->imageView->setVisible(false);
+ ui->textView->setVisible(false);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Panel::~Panel
+///
+/// デストラクタ
+///
+Panel::~Panel()
+{
+ delete ui;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Panel::folderPanel
+/// \return フォルダパネルを返します。
+///
+FolderPanel *Panel::folderPanel() const
+{
+ return ui->folderPanel;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Panel::initialize
+/// \param w メインウィンドウオブジェクト
+///
+/// パネルを初期化します。
+///
+void Panel::initialize(MainWindow *w)
+{
+ qDebug() << "Panel::initialize()";
+
+ ui->imageView->initialize(w);
+ ui->folderPanel->initialize(w);
+ ui->textView->initialize(w);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Panel::model
+/// \return フォルダモデルを返します。
+///
+FolderModel *Panel::model() const
+{
+ return ui->folderPanel->model();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Panel::setModel
+/// \param m 設定するモデル
+///
+/// モデルを設定します。
+///
+void Panel::setModel(FolderModel *m)
+{
+ qDebug() << "Panel::setModel()";
+
+ ui->folderPanel->setModel(m);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Panel::setViewItem
+/// \param index 設定するアイテムのインデックス
+///
+/// ビューにアイテムを設定し、表示します。
+///
+void Panel::setViewItem(const QModelIndex &index)
+{
+ qDebug() << "Panel::setViewItem()" << index;
+
+ if (!index.isValid()) {
+ ui->imageView->setVisible(false);
+ ui->textView->setVisible(false);
+ ui->folderPanel->setVisible(true);
+ return;
+ }
+
+ const FolderModel *m = static_cast<const FolderModel*>(index.model());
+ QString path = m->filePath(index);
+ if (m->isDir(index)) {
+ model()->setRootPath(path);
+ ui->imageView->setVisible(false);
+ ui->textView->setVisible(false);
+ ui->folderPanel->setVisible(true);
+ return;
+ }
+
+ QPixmap pixmap(path);
+ if (!pixmap.isNull()) {
+ ui->imageView->setSource(pixmap);
+ ui->folderPanel->setVisible(false);
+ ui->textView->setVisible(false);
+ ui->imageView->setVisible(true);
+ return;
+ }
+
+ QFile file(path);
+ QByteArray data;
+ if (file.open(QIODevice::ReadOnly)) {
+ data = file.readAll();
+ file.close();
+ }
+
+ ui->textView->setSource(data);
+ ui->folderPanel->setVisible(false);
+ ui->imageView->setVisible(false);
+ ui->textView->setVisible(true);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Panel::updateAppearance
+///
+/// 外観を変更します。
+///
+void Panel::updateAppearance()
+{
+ qDebug() << "Panel::updateAppearance()";
+
+ Preferences prefs(this);
+ QPalette pal;
+
+ pal = ui->imageView->palette();
+ pal.setColor(QPalette::Base, prefs.getImageViewBgColor());
+ ui->imageView->setPalette(pal);
+
+ pal = ui->textView->palette();
+ pal.setColor(QPalette::Base, prefs.getTextViewBgColor());
+ pal.setColor(QPalette::Text, prefs.getTextViewFgColor());
+ ui->textView->setPalette(pal);
+ ui->textView->setFont(prefs.getTextViewFont());
+
+ ui->folderPanel->updateAppearance();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Panel::visibleView
+/// \return 可視状態のビューを返します。
+///
+QWidget *Panel::visibleView() const
+{
+ if (ui->textView->isVisible()) {
+ return ui->textView;
+ }
+ if (ui->imageView->isVisible()) {
+ return ui->imageView;
+ }
+ if (ui->folderPanel->isVisible()) {
+ return ui->folderPanel->itemView();
+ }
+
+ qDebug() << ">>>>>>>>>> visibleView() Logic error <<<<<<<<<<";
+ return NULL;
+}
--- /dev/null
+#ifndef PANEL_H
+#define PANEL_H
+
+#include <QWidget>
+#include <QModelIndex>
+class MainWindow;
+class FolderPanel;
+class FolderModel;
+
+namespace Ui {
+class Panel;
+}
+
+class Panel : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit Panel(QWidget *parent = 0);
+ ~Panel();
+
+ FolderPanel* folderPanel() const;
+ void initialize(MainWindow *w);
+ FolderModel* model() const;
+ void setModel(FolderModel *m);
+ void setViewItem(const QModelIndex &index = QModelIndex());
+ void updateAppearance();
+ QWidget* visibleView() const;
+
+private:
+ Ui::Panel *ui;
+};
+
+#endif // PANEL_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <class>AnyView</class>
- <widget class="QWidget" name="AnyView">
+ <class>Panel</class>
+ <widget class="QWidget" name="Panel">
<property name="geometry">
<rect>
<x>0</x>
</property>
<item>
<widget class="SimpleTextView" name="textView">
- <property name="acceptDrops">
- <bool>false</bool>
- </property>
- <property name="tabChangesFocus">
- <bool>true</bool>
- </property>
- <property name="readOnly">
- <bool>true</bool>
- </property>
<property name="plainText">
- <string>Simple Text View</string>
+ <string>TextView</string>
</property>
</widget>
</item>
<item>
- <widget class="SimpleImageView" name="graphicsView"/>
+ <widget class="FolderPanel" name="folderPanel" native="true"/>
</item>
<item>
- <widget class="FolderPanel" name="folderPanel" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
+ <widget class="SimpleImageView" name="imageView"/>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
- <class>SimpleTextView</class>
- <extends>QPlainTextEdit</extends>
- <header>simpletextview.h</header>
- </customwidget>
- <customwidget>
<class>FolderPanel</class>
<extends>QWidget</extends>
<header>folderpanel.h</header>
<container>1</container>
</customwidget>
<customwidget>
+ <class>SimpleTextView</class>
+ <extends>QPlainTextEdit</extends>
+ <header>simpletextview.h</header>
+ </customwidget>
+ <customwidget>
<class>SimpleImageView</class>
<extends>QGraphicsView</extends>
<header>simpleimageview.h</header>
-#include "colorsamplemodel.h"
-#include"common.h"
+#include "global.h"
+#include "preferences.h"
#include "preferencedialog.h"
#include "ui_preferencedialog.h"
-#include <QAbstractTableModel>
#include <QColorDialog>
-#include <QSettings>
#include <QDebug>
#include <QDir>
#include <QFileDialog>
-#include <QStandardPaths>
#include <QFontDialog>
+#include <QStandardPaths>
PreferenceDialog::PreferenceDialog(QWidget *parent) :
QDialog(parent),
- ui(new Ui::PreferenceDialog),
- m_model(),
- m_colorMap()
+ ui(new Ui::PreferenceDialog)
{
- m_model.setColorMap(&m_colorMap);
-
ui->setupUi(this);
ui->tabWidget->setCurrentIndex(0);
- // アドレスボックスの外観サンプル
- ui->sampleEdit->setText(QDir::homePath());
- // ファイルビューの外観サンプル
- ui->sampleTable->setModel(&m_model);
-
- QHeaderView *header;
- header = ui->sampleTable->horizontalHeader();
- header->setSectionResizeMode(0, QHeaderView::Stretch);
- header->setSectionResizeMode(1, QHeaderView::ResizeToContents);
- header->setSectionResizeMode(2, QHeaderView::ResizeToContents);
- header = ui->sampleTable->verticalHeader();
- header->setDefaultSectionSize(header->defaultSectionSize() * 0.75);
-
- // シグナル&スロット
- connect(ui->bootSize, SIGNAL(toggled(bool)), this, SLOT(setControlsEnabled(bool)));
- connect(ui->sizeAbsolute, SIGNAL(toggled(bool)), this, SLOT(setControlsEnabled(bool)));
- connect(ui->sizeRelative, SIGNAL(toggled(bool)), this, SLOT(setControlsEnabled(bool)));
- connect(ui->bootPos, SIGNAL(toggled(bool)), this, SLOT(setControlsEnabled(bool)));
- connect(ui->posAbsolute, SIGNAL(toggled(bool)), this, SLOT(setControlsEnabled(bool)));
- connect(ui->posRelative, SIGNAL(toggled(bool)), this, SLOT(setControlsEnabled(bool)));
-
- connect(ui->boxClrBg, SIGNAL(clicked()), this, SLOT(selectBoxColor()));
- connect(ui->boxClrFg, SIGNAL(clicked()), this, SLOT(selectBoxColor()));
- connect(ui->chooseBoxFont, SIGNAL(clicked()), this, SLOT(chooseFont()));
-
- connect(ui->clrBgMark, SIGNAL(clicked()), this, SLOT(selectViewColor()));
- connect(ui->clrBgNormal, SIGNAL(clicked()), this, SLOT(selectViewColor()));
- connect(ui->clrFgHidden, SIGNAL(clicked()), this, SLOT(selectViewColor()));
- connect(ui->clrFgMark, SIGNAL(clicked()), this, SLOT(selectViewColor()));
- connect(ui->clrFgNormal, SIGNAL(clicked()), this, SLOT(selectViewColor()));
- connect(ui->clrFgReadonly, SIGNAL(clicked()), this, SLOT(selectViewColor()));
- connect(ui->clrFgSystem, SIGNAL(clicked()), this, SLOT(selectViewColor()));
- connect(ui->chooseViewFont, SIGNAL(clicked()), this, SLOT(chooseFont()));
+ ui->lBoxSample->setText(QDir::homePath());
+
+ connect(ui->fvNormal, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->fvNormalBg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->fvMarked, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->fvMarkedBg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->fvSystem, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->fvHidden, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->fvReadOnly, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->lBoxBg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->lBoxFg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->sBoxNormal, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->sBoxNormalBg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->sBoxUnmatch, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->sBoxUnmatchBg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->tvBg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->tvFg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->gvBg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->allBg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+ connect(ui->allFg, SIGNAL(clicked()), this, SLOT(chooseColor()));
+
+ connect(ui->fvFont, SIGNAL(clicked()), this, SLOT(chooseFont()));
+ connect(ui->lBoxFont, SIGNAL(clicked()), this, SLOT(chooseFont()));
+ connect(ui->sBoxFont, SIGNAL(clicked()), this, SLOT(chooseFont()));
+ connect(ui->tvFont, SIGNAL(clicked()), this, SLOT(chooseFont()));
+ connect(ui->allFont, SIGNAL(clicked()), this, SLOT(chooseFont()));
+
+ connect(ui->browseArchiver, SIGNAL(clicked()), this, SLOT(choosePath()));
+ connect(ui->browseEditor, SIGNAL(clicked()), this, SLOT(choosePath()));
+ connect(ui->browseTerminal, SIGNAL(clicked()), this, SLOT(choosePath()));
- connect(ui->importAppearance, SIGNAL(clicked()), this, SLOT(importAppearance()));
connect(ui->exportAppearance, SIGNAL(clicked()), this, SLOT(exportAppearance()));
+ connect(ui->importAppearance, SIGNAL(clicked()), this, SLOT(importAppearance()));
- connect(ui->browseArchiver, SIGNAL(clicked()), this, SLOT(browseApp()));
- connect(ui->browseEditor, SIGNAL(clicked()), this, SLOT(browseApp()));
- connect(ui->browseTerminal, SIGNAL(clicked()), this, SLOT(browseApp()));
-
- connect(ui->chooseViewerFont, SIGNAL(clicked()), this, SLOT(chooseFont()));
- connect(ui->viewerClrBg, SIGNAL(clicked()), this, SLOT(selectViewerColor()));
- connect(ui->viewerClrFg, SIGNAL(clicked()), this, SLOT(selectViewerColor()));
- connect(ui->viewerInherit, SIGNAL(toggled(bool)), this, SLOT(setControlsEnabled(bool)));
- connect(ui->enableViewerIgnoreExt, SIGNAL(toggled(bool)), this, SLOT(setControlsEnabled(bool)));
- connect(ui->defaultIgnoreExt, SIGNAL(clicked()), this, SLOT(setIgnoreExtDefault()));
-
- // 現在の設定で各コントロールを初期化する
- QSettings settings;
- QString strValue;
- QSize size;
- QPoint point;
- QRadioButton *radioBtn;
-
- //>>>>> 起動と終了
- // 起動時のサイズ
- ui->bootSize->setChecked(true);
- strValue = settings.value(IniKey_BootSizeSpec).toString();
- radioBtn = findChild<QRadioButton*>(strValue);
- if (radioBtn == NULL) {
- radioBtn = ui->sizeRelative;
- }
- radioBtn->setChecked(true);
- if (strValue.isEmpty()) {
- ui->bootSize->setChecked(false);
- }
- size = settings.value(IniKey_BootSizeAbs).toSize();
- ui->absoluteWidth->setValue(size.width());
- ui->absoluteHeight->setValue(size.height());
- size = settings.value(IniKey_BootSizeRel).toSize();
- ui->relativeWidth->setValue(size.width());
- ui->relativeHeight->setValue(size.height());
- // 起動時の位置
- ui->bootPos->setChecked(true);
- strValue = settings.value(IniKey_BootPosSpec).toString();
- radioBtn = findChild<QRadioButton*>(strValue);
- if (radioBtn == NULL) {
- radioBtn = ui->posCenter;
- }
- radioBtn->setChecked(true);
- if (strValue.isEmpty()) {
- ui->bootPos->setChecked(false);
- }
- point = settings.value(IniKey_BootPosAbs).toPoint();
- ui->absoluteLeft->setValue(point.x());
- ui->absoluteTop->setValue(point.y());
- point = settings.value(IniKey_BootPosRel).toPoint();
- ui->relativeLeft->setValue(point.x());
- ui->relativeTop->setValue(point.y());
- // 起動時の設定削除
- ui->resetOnBoot->setChecked(settings.value(IniKey_ResetOnBoot).toBool());
- // アップデートの確認
- ui->checkUpdates->setChecked(settings.value(IniKey_CheckUpdates).toBool());
- // 終了時の確認ダイアログ
- ui->confirmExit->setChecked(settings.value(IniKey_ConfirmExit).toBool());
-
- //>>>>> 色とフォント、テキストビューア
- loadAppearance(settings, false);
- ui->dark->setValue(settings.value(IniKey_Darkness).toInt());
-
- //>>>>> ファイル操作
- // 確認ダイアログの表示
- ui->confirmCopy->setChecked(settings.value(IniKey_ConfirmCopy).toBool());
- ui->confirmDelete->setChecked(settings.value(IniKey_ConfirmDelete).toBool());
- ui->confirmMove->setChecked(settings.value(IniKey_ConfirmMove).toBool());
- ui->confirmRename->setChecked(settings.value(IniKey_ConfirmRename).toBool());
- // 完了ダイアログの自動クローズ
- ui->autoCloseCopy->setChecked(settings.value(IniKey_AutoCloseCopy).toBool());
- ui->autoCloseDelete->setChecked(settings.value(IniKey_AutoCloseDelete).toBool());
- ui->autoCloseMove->setChecked(settings.value(IniKey_AutoCloseMove).toBool());
- ui->autoCloseRename->setChecked(settings.value(IniKey_AutoCloseRename).toBool());
- // 上書き時の既定動作
- strValue = settings.value(IniKey_DefaultOnCopy).toString();
- if (strValue.isEmpty()) {
- strValue = "owDefIfNew";
- }
- radioBtn = findChild<QRadioButton*>(strValue);
- if (radioBtn == NULL) {
- radioBtn = ui->rbOverWriteIfNew;
- }
- radioBtn->setChecked(true);
- ui->moveAfterCreate->setChecked(settings.value(IniKey_MoveAfterCreateFolder).toBool());
- ui->openAfterCreate->setChecked(settings.value(IniKey_OpenAfterCreateFile).toBool());
-
- //>>>>> パス設定
- // エディタ
- ui->editorPath->setText(settings.value(IniKey_PathEditor).toString());
- // ターミナル
- ui->terminalPath->setText(settings.value(IniKey_PathTerminal).toString());
- // アーカイバ
- ui->archiverPath->setText(settings.value(IniKey_PathArchiver).toString());
-
- //>>>>> テキストビューア
- ui->enableViewerIgnoreExt->setChecked(true);
- ui->enableViewerIgnoreExt->setChecked(!settings.value(IniKey_ViewerForceOpen).toBool());
- ui->viewerIgnoreExt->setPlainText(settings.value(IniKey_ViewerIgnoreExt).toString());
+ Preferences prefs(this);
+
+ // [全般]
+ ui->checkUpdate->setChecked(prefs.isCheckUpdate());
+ ui->confirmQuit->setChecked(prefs.isConfirmQuit());
+ ui->moveAfterCreation->setChecked(prefs.isMoveAfterCreation());
+ ui->openAfterCreation->setChecked(prefs.isOpenAfterCreation());
+ ui->confirmCopy->setChecked(prefs.isConfirmCopy());
+ ui->confirmMove->setChecked(prefs.isConfirmMove());
+ ui->confirmDelete->setChecked(prefs.isConfirmDelete());
+ ui->confirmRename->setChecked(prefs.isConfirmRename());
+ ui->autoCloseCopy->setChecked(prefs.isAutoCloseCopy());
+ ui->autoCloseMove->setChecked(prefs.isAutoCloseMove());
+ ui->autoCloseDelete->setChecked(prefs.isAutoCloseDelete());
+ ui->autoCloseRename->setChecked(prefs.isAutoCloseRename());
+ QRadioButton *radio = findChild<QRadioButton*>("rb" + prefs.getCopyBehavior());
+ if (radio)
+ radio->setChecked(true);
+ else
+ ui->rbOverWriteIfNew->setChecked(true);
+ ui->preferExtensions->setPlainText(prefs.getPreferExtensions());
+
+ // [外観(色)]
+ loadAppearance(prefs);
+
+ // [外観(フォント)]
+ setFont(ui->fvFontSpec, prefs.getFolderViewFont());
+ setFont(ui->lBoxFontSpec, prefs.getLocationBoxFont());
+ setFont(ui->sBoxFontSpec, prefs.getSearchBoxFont());
+ setFont(ui->tvFontSpec, prefs.getTextViewFont());
+
+ ui->lineHeight->setValue(prefs.getLineHeight());
+
+ // [プログラムパス]
+ ui->editorPath->setText(prefs.getEditorPath());
+ ui->terminalPath->setText(prefs.getTerminalPath());
+ ui->archiverPath->setText(prefs.getArchiverPath());
}
PreferenceDialog::~PreferenceDialog()
delete ui;
}
-void PreferenceDialog::saveAppearance(QSettings &settings)
+void PreferenceDialog::loadAppearance(Preferences &prefs)
{
- QFont font = ui->sampleEdit->font();
- QPalette palette = ui->sampleEdit->palette();
- settings.setValue(IniKey_BoxColorBg, palette.base().color());
- settings.setValue(IniKey_BoxColorFg, palette.text().color());
- settings.setValue(IniKey_BoxFont, font);
-
- settings.setValue(IniKey_ViewColorBgMark, m_colorMap["clrBgMark"]);
- settings.setValue(IniKey_ViewColorBgNormal, m_colorMap["clrBgNormal"]);
- settings.setValue(IniKey_ViewColorFgHidden, m_colorMap["clrFgHidden"]);
- settings.setValue(IniKey_ViewColorFgMark, m_colorMap["clrFgMark"]);
- settings.setValue(IniKey_ViewColorFgNormal, m_colorMap["clrFgNormal"]);
- settings.setValue(IniKey_ViewColorFgReadonly, m_colorMap["clrFgReadonly"]);
- settings.setValue(IniKey_ViewColorFgSystem, m_colorMap["clrFgSystem"]);
- settings.setValue(IniKey_ViewFont, m_model.font());
-}
+ setPalette(ui->fvNormalSample, QPalette::Base, prefs.getFolderViewBgColor());
+ setPalette(ui->fvNormalSample, QPalette::Text, prefs.getFolderViewFgColor());
-void PreferenceDialog::loadAppearance(QSettings &settings, bool import)
-{
- QPalette palette;
- QColor color;
- QFont font;
+ setPalette(ui->fvMarkedSample, QPalette::Base, prefs.getFolderViewMarkedBgColor());
+ setPalette(ui->fvMarkedSample, QPalette::Text, prefs.getFolderViewMarkedFgColor());
- //>>>> アドレスボックス
- palette = QPalette();
- // 背景色
- color = settings.value(IniKey_BoxColorBg).value<QColor>();
- palette.setColor(QPalette::Base, color);
- // 文字色
- color = settings.value(IniKey_BoxColorFg).value<QColor>();
- palette.setColor(QPalette::Text, color);
- // フォント
- font = settings.value(IniKey_BoxFont).value<QFont>();
- ui->boxFont->setText(tr("%1, %2pt").arg(font.family()).arg(font.pointSize()));
- // サンプル表示
- ui->sampleEdit->setPalette(palette);
- ui->sampleEdit->setFont(font);
-
- //>>>> ファイルビュー
- // 背景色
- color = settings.value(IniKey_ViewColorBgMark).value<QColor>();
- m_colorMap["clrBgMark"] = color;
- color = settings.value(IniKey_ViewColorBgNormal).value<QColor>();
- m_colorMap["clrBgNormal"] = color;
- // 文字色
- color = settings.value(IniKey_ViewColorFgHidden).value<QColor>();
- m_colorMap["clrFgHidden"] = color;
- color = settings.value(IniKey_ViewColorFgMark).value<QColor>();
- m_colorMap["clrFgMark"] = color;
- color = settings.value(IniKey_ViewColorFgNormal).value<QColor>();
- m_colorMap["clrFgNormal"] = color;
- color = settings.value(IniKey_ViewColorFgReadonly).value<QColor>();
- m_colorMap["clrFgReadonly"] = color;
- color = settings.value(IniKey_ViewColorFgSystem).value<QColor>();
- m_colorMap["clrFgSystem"] = color;
- // フォント
- font = settings.value(IniKey_ViewFont).value<QFont>();
- ui->viewFont->setText(tr("%1, %2pt").arg(font.family()).arg(font.pointSize()));
- // サンプル表示
- QHeaderView *header = ui->sampleTable->verticalHeader();
- header->setDefaultSectionSize(QFontMetrics(font).height() * 1.5);
- ui->sampleTable->setMinimumHeight(header->sectionSize(0) * 5);
- ui->sampleTable->setMaximumHeight(ui->sampleTable->minimumHeight() + 2);
- m_model.setFont(font);
- m_model.update();
-
- //>>>> テキストビューア
- // 文字色と背景色
- if (settings.value(IniKey_ViewerInherit).toBool()) {
- ui->viewerInherit->setChecked(true);
- color = settings.value(IniKey_ViewColorBgNormal).value<QColor>();
- palette.setColor(QPalette::Base, color);
- color = settings.value(IniKey_ViewColorFgNormal).value<QColor>();
- palette.setColor(QPalette::Text, color);
- }
- else if (!import){
- ui->viewerInherit->setChecked(false);
- color = settings.value(IniKey_ViewerColorBg).value<QColor>();
- palette.setColor(QPalette::Base, color);
- color = settings.value(IniKey_ViewerColorFg).value<QColor>();
- palette.setColor(QPalette::Text, color);
- }
- ui->viewerSample->setPalette(palette);
- // フォント
- if (!import) {
- font = settings.value(IniKey_ViewerFont).value<QFont>();
- ui->viewerFont->setText(tr("%1, %2pt").arg(font.family()).arg(font.pointSize()));
- ui->viewerSample->setFont(font);
- }
+ setPalette(ui->fvSystemSample, QPalette::Base, prefs.getFolderViewBgColor());
+ setPalette(ui->fvSystemSample, QPalette::Text, prefs.getFolderViewSystemColor());
+
+ setPalette(ui->fvHiddenSample, QPalette::Base, prefs.getFolderViewBgColor());
+ setPalette(ui->fvHiddenSample, QPalette::Text, prefs.getFolderViewHiddenColor());
+
+ setPalette(ui->fvReadOnlySample, QPalette::Base, prefs.getFolderViewBgColor());
+ setPalette(ui->fvReadOnlySample, QPalette::Text, prefs.getFolderViewReadOnlyColor());
+
+ setPalette(ui->lBoxSample, QPalette::Base, prefs.getLocationBoxBgColor());
+ setPalette(ui->lBoxSample, QPalette::Text, prefs.getLocationBoxFgColor());
+
+ setPalette(ui->sBoxNormalSample, QPalette::Base, prefs.getSearchBoxBgColor());
+ setPalette(ui->sBoxNormalSample, QPalette::Text, prefs.getSearchBoxFgColor());
+
+ setPalette(ui->sBoxUnmatchSample, QPalette::Base, prefs.getSearchBoxUnmatchBgColor());
+ setPalette(ui->sBoxUnmatchSample, QPalette::Text, prefs.getSearchBoxUnmatchFgColor());
+
+ setPalette(ui->tvSample, QPalette::Base, prefs.getTextViewBgColor());
+ setPalette(ui->tvSample, QPalette::Text, prefs.getTextViewFgColor());
+
+ setPalette(ui->gvSample, QPalette::Base, prefs.getImageViewBgColor());
+
+ ui->darkFactor->setValue(prefs.getDarkFacotr());
}
-void PreferenceDialog::chooseFont()
+void PreferenceDialog::saveAppearance(Preferences &prefs)
{
- bool ok;
- QFont font;
- QLabel *label = NULL;
+ prefs.setFolderViewBgColor(ui->fvNormalSample->palette().base().color());
+ prefs.setFolderViewFgColor(ui->fvNormalSample->palette().text().color());
- if (sender() == ui->chooseViewerFont) {
- font = ui->viewerSample->font();
- }
- else if (sender() == ui->chooseBoxFont) {
- font = ui->sampleEdit->font();
- }
- else if (sender() == ui->chooseViewFont) {
- font = m_model.font();
- }
+ prefs.setFolderViewMarkedBgColor(ui->fvMarkedSample->palette().base().color());
+ prefs.setFolderViewMarkedFgColor(ui->fvMarkedSample->palette().text().color());
- font = QFontDialog::getFont(&ok, font, this);
+ prefs.setFolderViewHiddenColor(ui->fvHiddenSample->palette().text().color());
+ prefs.setFolderViewReadOnlyColor(ui->fvReadOnlySample->palette().text().color());
+ prefs.setFolderViewSystemColor(ui->fvSystemSample->palette().text().color());
- if (sender() == ui->chooseViewerFont) {
- ui->viewerSample->setFont(font);
- label = ui->viewerFont;
- }
- else if (sender() == ui->chooseBoxFont) {
- ui->sampleEdit->setFont(font);
- label = ui->boxFont;
- }
- else if (sender() == ui->chooseViewFont) {
- QHeaderView *header = ui->sampleTable->verticalHeader();
- header->setDefaultSectionSize(QFontMetrics(font).height() * 1.5);
- ui->sampleTable->setMinimumHeight(header->sectionSize(0) * 5);
- ui->sampleTable->setMaximumHeight(ui->sampleTable->minimumHeight() + 2);
- m_model.setFont(font);
- m_model.update();
- label = ui->viewFont;
- }
- label->setText(tr("%1, %2pt").arg(font.family()).arg(font.pointSize()));
+ prefs.setLocationBoxBgColor(ui->lBoxSample->palette().base().color());
+ prefs.setLocationBoxFgColor(ui->lBoxSample->palette().text().color());
+
+ prefs.setSearchBoxBgColor(ui->sBoxNormalSample->palette().base().color());
+ prefs.setSearchBoxFgColor(ui->sBoxNormalSample->palette().text().color());
+
+ prefs.setSearchBoxUnmatchBgColor(ui->sBoxUnmatchSample->palette().base().color());
+ prefs.setSearchBoxUnmatchFgColor(ui->sBoxUnmatchSample->palette().text().color());
+
+ prefs.setTextViewBgColor(ui->tvSample->palette().base().color());
+ prefs.setTextViewFgColor(ui->tvSample->palette().text().color());
+ prefs.setImageViewBgColor(ui->gvSample->palette().base().color());
+
+ prefs.setDarkFacotr(ui->darkFactor->value());
}
-void PreferenceDialog::setControlsEnabled(bool enabled)
+void PreferenceDialog::setFont(QLabel *label, const QFont &font)
{
- if (sender() == ui->bootSize) {
- ui->sizeAbsolute->setEnabled(enabled);
- ui->sizeLast->setEnabled(enabled);
- ui->sizeRelative->setEnabled(enabled);
- if (enabled) {
- emit ui->sizeAbsolute->toggled(ui->sizeAbsolute->isChecked());
- emit ui->sizeRelative->toggled(ui->sizeRelative->isChecked());
- }
- else {
- emit ui->sizeAbsolute->toggled(false);
- emit ui->sizeRelative->toggled(false);
- }
- }
- else if (sender() == ui->sizeAbsolute) {
- ui->absoluteHeight->setEnabled(enabled);
- ui->absoluteWidth->setEnabled(enabled);
- }
- else if (sender() == ui->sizeRelative) {
- ui->relativeHeight->setEnabled(enabled);
- ui->relativeWidth->setEnabled(enabled);
- }
- else if (sender() == ui->bootPos) {
- ui->posAbsolute->setEnabled(enabled);
- ui->posCenter->setEnabled(enabled);
- ui->posLast->setEnabled(enabled);
- ui->posRelative->setEnabled(enabled);
- if (enabled) {
- emit ui->posAbsolute->toggled(ui->posAbsolute->isChecked());
- emit ui->posRelative->toggled(ui->posRelative->isChecked());
- }
- else {
- emit ui->posAbsolute->toggled(false);
- emit ui->posRelative->toggled(false);
- }
- }
- else if (sender() == ui->posAbsolute) {
- ui->absoluteLeft->setEnabled(enabled);
- ui->absoluteTop->setEnabled(enabled);
- }
- else if (sender() == ui->posRelative) {
- ui->relativeLeft->setEnabled(enabled);
- ui->relativeTop->setEnabled(enabled);
- }
- else if (sender() == ui->viewerInherit) {
- ui->viewerClrBg->setEnabled(!enabled);
- ui->viewerClrFg->setEnabled(!enabled);
- // サンプル表示も更新
- QPalette pal = ui->viewerSample->palette();
- if (enabled) {
- pal.setColor(QPalette::Base, m_colorMap["clrBgNormal"]);
- pal.setColor(QPalette::Text, m_colorMap["clrFgNormal"]);
- }
- else {
- QSettings settings;
- pal.setColor(QPalette::Base, settings.value(IniKey_ViewerColorBg).value<QColor>());
- pal.setColor(QPalette::Text, settings.value(IniKey_ViewerColorFg).value<QColor>());
- }
- ui->viewerSample->setPalette(pal);
- }
- else if (sender() == ui->enableViewerIgnoreExt) {
- ui->viewerIgnoreExt->setEnabled(enabled);
- }
+ label->setFont(font);
+ label->setText(QString("%1, %2pt").arg(font.family()).arg(font.pointSize()));
}
-void PreferenceDialog::setIgnoreExtDefault()
+void PreferenceDialog::setPalette(QWidget *w, QPalette::ColorRole role, const QColor &color)
{
- ui->viewerIgnoreExt->setPlainText(ViewerIgnoreExt());
+ QPalette pal = w->palette();
+ pal.setColor(role, color);
+ w->setPalette(pal);
}
-void PreferenceDialog::selectBoxColor()
+void PreferenceDialog::chooseColor()
{
QColor color;
- QPalette palette = ui->sampleEdit->palette();
- if (sender() == ui->boxClrBg) {
- color = palette.background().color();
+
+ if (sender() == ui->fvNormal) {
+ color = ui->fvNormalSample->palette().text().color();
}
- else if (sender() == ui->boxClrFg) {
- color = palette.text().color();
+ else if (sender() == ui->fvNormalBg) {
+ color = ui->fvNormalSample->palette().base().color();
}
-
- color = QColorDialog::getColor(color, this, tr("色選択"));
- if (!color.isValid()) {
- return;
+ else if (sender() == ui->fvMarked) {
+ color = ui->fvMarkedSample->palette().text().color();
}
-
- if (sender() == ui->boxClrBg) {
- palette.setColor(QPalette::Base, color);
+ else if (sender() == ui->fvMarkedBg) {
+ color = ui->fvMarkedSample->palette().base().color();
}
- else if (sender() == ui->boxClrFg) {
- palette.setColor(QPalette::Text, color);
+ else if (sender() == ui->fvSystem) {
+ color = ui->fvSystemSample->palette().text().color();
+ }
+ else if (sender() == ui->fvHidden) {
+ color = ui->fvHiddenSample->palette().text().color();
+ }
+ else if (sender() == ui->fvReadOnly) {
+ color = ui->fvReadOnlySample->palette().text().color();
+ }
+ else if (sender() == ui->lBoxBg) {
+ color = ui->lBoxSample->palette().base().color();
+ }
+ else if (sender() == ui->lBoxFg) {
+ color = ui->lBoxSample->palette().text().color();
+ }
+ else if (sender() == ui->sBoxNormal) {
+ color = ui->sBoxNormalSample->palette().text().color();
+ }
+ else if (sender() == ui->sBoxNormalBg) {
+ color = ui->sBoxNormalSample->palette().base().color();
+ }
+ else if (sender() == ui->sBoxUnmatch) {
+ color = ui->sBoxUnmatchSample->palette().text().color();
+ }
+ else if (sender() == ui->sBoxUnmatchBg) {
+ color = ui->sBoxUnmatchSample->palette().base().color();
+ }
+ else if (sender() == ui->tvBg) {
+ color = ui->tvSample->palette().base().color();
+ }
+ else if (sender() == ui->tvFg) {
+ color = ui->tvSample->palette().text().color();
+ }
+ else if (sender() == ui->gvBg) {
+ color = ui->gvSample->palette().base().color();
+ }
+ else if (sender() == ui->allBg) {
+ color = ui->fvNormalSample->palette().base().color();
+ }
+ else if (sender() == ui->allFg) {
+ color = ui->fvNormalSample->palette().text().color();
}
- ui->sampleEdit->setPalette(palette);
-}
-
-void PreferenceDialog::selectViewColor()
-{
- const QString objName = sender()->objectName();
- QColor color = m_colorMap[objName];
- color = QColorDialog::getColor(color, this, tr("色選択"));
+ color = QColorDialog::getColor(color, this, tr("色を選択"));
if (!color.isValid()) {
return;
}
- m_colorMap[objName] = color;
- m_model.update();
+ QPalette pal;
+ if (sender() == ui->fvNormal) {
+ setPalette(ui->fvNormalSample, QPalette::Text, color);
+ }
+ else if (sender() == ui->fvNormalBg) {
+ setPalette(ui->fvNormalSample, QPalette::Base, color);
+ setPalette(ui->fvHiddenSample, QPalette::Base, color);
+ setPalette(ui->fvReadOnlySample, QPalette::Base, color);
+ setPalette(ui->fvSystemSample, QPalette::Base, color);
+ }
+ else if (sender() == ui->fvMarked) {
+ setPalette(ui->fvMarkedSample, QPalette::Text, color);
+ }
+ else if (sender() == ui->fvMarkedBg) {
+ setPalette(ui->fvMarkedSample, QPalette::Base, color);
+ }
+ else if (sender() == ui->fvSystem) {
+ setPalette(ui->fvSystemSample, QPalette::Text, color);
+ }
+ else if (sender() == ui->fvHidden) {
+ setPalette(ui->fvHiddenSample, QPalette::Text, color);
+ }
+ else if (sender() == ui->fvReadOnly) {
+ setPalette(ui->fvReadOnlySample, QPalette::Text, color);
+ }
+ else if (sender() == ui->lBoxBg) {
+ setPalette(ui->lBoxSample, QPalette::Base, color);
+ }
+ else if (sender() == ui->lBoxFg) {
+ setPalette(ui->lBoxSample, QPalette::Text, color);
+ }
+ else if (sender() == ui->sBoxNormal) {
+ setPalette(ui->sBoxNormalSample, QPalette::Text, color);
+ }
+ else if (sender() == ui->sBoxNormalBg) {
+ setPalette(ui->sBoxNormalSample, QPalette::Base, color);
+ }
+ else if (sender() == ui->sBoxUnmatch) {
+ setPalette(ui->sBoxUnmatchSample, QPalette::Text, color);
+ }
+ else if (sender() == ui->sBoxUnmatchBg) {
+ setPalette(ui->sBoxUnmatchSample, QPalette::Base, color);
+ }
+ else if (sender() == ui->tvBg) {
+ setPalette(ui->tvSample, QPalette::Base, color);
+ }
+ else if (sender() == ui->tvFg) {
+ setPalette(ui->tvSample, QPalette::Text, color);
+ }
+ else if (sender() == ui->gvBg) {
+ setPalette(ui->gvSample, QPalette::Base, color);
+ }
+ else if (sender() == ui->allBg) {
+ setPalette(ui->fvNormalSample, QPalette::Base, color);
+ setPalette(ui->fvHiddenSample, QPalette::Base, color);
+ setPalette(ui->fvReadOnlySample, QPalette::Base, color);
+ setPalette(ui->fvSystemSample, QPalette::Base, color);
+ setPalette(ui->lBoxSample, QPalette::Base, color);
+ setPalette(ui->sBoxNormalSample, QPalette::Base, color);
+ setPalette(ui->tvSample, QPalette::Base, color);
+ setPalette(ui->gvSample, QPalette::Base, color);
+ }
+ else if (sender() == ui->allFg) {
+ setPalette(ui->fvNormalSample, QPalette::Text, color);
+ setPalette(ui->lBoxSample, QPalette::Text, color);
+ setPalette(ui->sBoxNormalSample, QPalette::Text, color);
+ setPalette(ui->tvSample, QPalette::Text, color);
+ }
}
-void PreferenceDialog::selectViewerColor()
+void PreferenceDialog::chooseFont()
{
- QColor color;
- QPalette palette = ui->viewerSample->palette();
- if (sender() == ui->viewerClrBg) {
- color = palette.background().color();
+ QFont font;
+ if (sender() == ui->fvFont) {
+ font = ui->fvFontSpec->font();
+ }
+ else if (sender() == ui->lBoxFont) {
+ font = ui->lBoxFontSpec->font();
}
- else if (sender() == ui->viewerClrFg) {
- color = palette.text().color();
+ else if (sender() == ui->sBoxFont) {
+ font = ui->sBoxFontSpec->font();
+ }
+ else if (sender() == ui->tvFont) {
+ font = ui->tvFontSpec->font();
+ }
+ else if (sender() == ui->allFont) {
+ font = ui->fvFontSpec->font();
}
- color = QColorDialog::getColor(color, this, tr("色選択"));
- if (!color.isValid()) {
+ bool ok;
+ font = QFontDialog::getFont(&ok, font, this, tr("フォントを選択"));
+
+ if (!ok) {
return;
}
- if (sender() == ui->viewerClrBg) {
- palette.setColor(QPalette::Base, color);
+ if (sender() == ui->fvFont) {
+ setFont(ui->fvFontSpec, font);
+ }
+ else if (sender() == ui->lBoxFont) {
+ setFont(ui->lBoxFontSpec, font);
+ }
+ else if (sender() == ui->sBoxFont) {
+ setFont(ui->sBoxFontSpec, font);
}
- else if (sender() == ui->viewerClrFg) {
- palette.setColor(QPalette::Text, color);
+ else if (sender() == ui->tvFont) {
+ setFont(ui->tvFontSpec, font);
+ }
+ else if (sender() == ui->allFont) {
+ setFont(ui->fvFontSpec, font);
+ setFont(ui->lBoxFontSpec, font);
+ setFont(ui->sBoxFontSpec, font);
+ setFont(ui->tvFontSpec, font);
}
- ui->viewerSample->setPalette(palette);
}
-void PreferenceDialog::browseApp()
+void PreferenceDialog::choosePath()
{
QStringList list = QStandardPaths::standardLocations(
QStandardPaths::ApplicationsLocation);
this, tr("アプリケーションを選択"), list.at(0),
tr("すべてのファイル (*)"));
#endif
- if (!path.isEmpty()) {
- if (path.indexOf(" ") != -1) {
- path = QQ(path);
- }
-
- if (sender() == ui->browseEditor) {
- ui->editorPath->setText(path);
- }
- else if (sender() == ui->browseTerminal) {
- ui->terminalPath->setText(path);
- }
- else if (sender() == ui->browseArchiver) {
- ui->archiverPath->setText(path);
- }
+ if (path.isEmpty()) {
+ return;
+ }
+
+ if (path.indexOf(" ") != -1) {
+ path = QQ(path);
+ }
+
+ if (sender() == ui->browseEditor) {
+ ui->editorPath->setText(path);
+ }
+ else if (sender() == ui->browseTerminal) {
+ ui->terminalPath->setText(path);
+ }
+ else if (sender() == ui->browseArchiver) {
+ ui->archiverPath->setText(path);
}
}
-void PreferenceDialog::importAppearance()
+void PreferenceDialog::exportAppearance()
{
QStringList list = QStandardPaths::standardLocations(
QStandardPaths::DocumentsLocation);
- QString path = QFileDialog::getOpenFileName(
- this, tr("ファイルを選択"), list.at(0),
+ QString path = QFileDialog::getSaveFileName(
+ this, tr("ファイルを選択"), list.at(0) + "/gefu_appearance.ini",
tr("設定ファイル (*.ini);;すべてのファイル (*)"));
if (path.isEmpty()) {
return;
}
- QSettings settings(path, QSettings::IniFormat);
- loadAppearance(settings, true);
+ Preferences prefs(path, this);
+ saveAppearance(prefs);
}
-void PreferenceDialog::exportAppearance()
+void PreferenceDialog::importAppearance()
{
QStringList list = QStandardPaths::standardLocations(
QStandardPaths::DocumentsLocation);
- QString path = QFileDialog::getSaveFileName(
- this, tr("ファイルを選択"), list.at(0) + "/gefu_appearance.ini",
+ QString path = QFileDialog::getOpenFileName(
+ this, tr("ファイルを選択"), list.at(0),
tr("設定ファイル (*.ini);;すべてのファイル (*)"));
if (path.isEmpty()) {
return;
}
- QSettings settings(path, QSettings::IniFormat);
- saveAppearance(settings);
+ Preferences prefs(path, this);
+ loadAppearance(prefs);
}
void PreferenceDialog::accept()
{
- QSettings settings;
- QAbstractButton *selected;
-
- //>>>>> 起動と終了
- // 起動時のサイズ
- if (!ui->bootSize->isChecked()) {
- settings.setValue(IniKey_BootSizeSpec, "");
- }
- else {
- selected = ui->sizeOptions->checkedButton();
- settings.setValue(IniKey_BootSizeSpec, selected->objectName());
- QSize size;
- // 絶対指定
- size = QSize(ui->absoluteWidth->value(), ui->absoluteHeight->value());
- settings.setValue(IniKey_BootSizeAbs, size);
- // 相対指定
- size = QSize(ui->relativeWidth->value(), ui->relativeHeight->value());
- settings.setValue(IniKey_BootSizeRel, size);
- }
- // 起動時の位置
- if (!ui->bootPos->isChecked()) {
- settings.setValue(IniKey_BootPosSpec, "");
- }
- else {
- selected = ui->posOptions->checkedButton();
- settings.setValue(IniKey_BootPosSpec, selected->objectName());
- // 絶対指定
- QPoint pos;
- pos = QPoint(ui->absoluteLeft->value(), ui->absoluteTop->value());
- settings.setValue(IniKey_BootPosAbs, pos);
- // 相対指定
- pos = QPoint(ui->relativeLeft->value(), ui->relativeTop->value());
- settings.setValue(IniKey_BootPosRel, pos);
- }
- // 起動時の設定削除
- settings.setValue(IniKey_ResetOnBoot, ui->resetOnBoot->isChecked());
- // 終了時の確認ダイアログ
- settings.setValue(IniKey_ConfirmExit, ui->confirmExit->isChecked());
- // アップデートのチェック
- settings.setValue(IniKey_CheckUpdates, ui->checkUpdates->isChecked());
-
- //>>>>> 色とフォント
- saveAppearance(settings);
- settings.setValue(IniKey_Darkness, ui->dark->value());
-
- //>>>>> ファイル操作
- settings.setValue(IniKey_ConfirmCopy, ui->confirmCopy->isChecked());
- settings.setValue(IniKey_ConfirmDelete, ui->confirmDelete->isChecked());
- settings.setValue(IniKey_ConfirmMove, ui->confirmMove->isChecked());
- settings.setValue(IniKey_ConfirmRename, ui->confirmRename->isChecked());
-
- settings.setValue(IniKey_AutoCloseCopy, ui->autoCloseCopy->isChecked());
- settings.setValue(IniKey_AutoCloseDelete, ui->autoCloseDelete->isChecked());
- settings.setValue(IniKey_AutoCloseMove, ui->autoCloseMove->isChecked());
- settings.setValue(IniKey_AutoCloseRename, ui->autoCloseRename->isChecked());
-
- selected = ui->overwriteOptions->checkedButton();
- settings.setValue(IniKey_DefaultOnCopy, selected->objectName());
-
- settings.setValue(IniKey_MoveAfterCreateFolder, ui->moveAfterCreate->isChecked());
- settings.setValue(IniKey_OpenAfterCreateFile, ui->openAfterCreate->isChecked());
-
- //>>>>> パス設定
- settings.setValue(IniKey_PathEditor, ui->editorPath->text().trimmed());
- settings.setValue(IniKey_PathTerminal, ui->terminalPath->text().trimmed());
- settings.setValue(IniKey_PathArchiver, ui->archiverPath->text().trimmed());
-
- //>>>>> テキストビューア
- settings.setValue(IniKey_ViewerFont, ui->viewerSample->font());
- settings.setValue(IniKey_ViewerColorBg, ui->viewerSample->palette().base().color());
- settings.setValue(IniKey_ViewerColorFg, ui->viewerSample->palette().text().color());
- settings.setValue(IniKey_ViewerInherit, ui->viewerInherit->isChecked());
- settings.setValue(IniKey_ViewerForceOpen, !ui->enableViewerIgnoreExt->isChecked());
- QStringList list = ui->viewerIgnoreExt->toPlainText().split(",", QString::SkipEmptyParts);
- QStringList::iterator it;
- for (it = list.begin(); it != list.end(); it++) {
- *it = it->trimmed();
- }
- settings.setValue(IniKey_ViewerIgnoreExt, list.join(","));
+ Preferences prefs(this);
+
+ // [全般]
+ prefs.setCheckUpdate(ui->checkUpdate->isChecked());
+ prefs.setConfirmQuit(ui->confirmQuit->isChecked());
+ prefs.setMoveAfterCreation(ui->moveAfterCreation->isChecked());
+ prefs.setOpenAfterCreation(ui->openAfterCreation->isChecked());
+ prefs.setConfirmCopy(ui->confirmCopy->isChecked());
+ prefs.setConfirmMove(ui->confirmMove->isChecked());
+ prefs.setConfirmDelete(ui->confirmDelete->isChecked());
+ prefs.setConfirmRename(ui->confirmRename->isChecked());
+ prefs.setAutoCloseCopy(ui->autoCloseCopy->isChecked());
+ prefs.setAutoCloseMove(ui->autoCloseMove->isChecked());
+ prefs.setAutoCloseDelete(ui->autoCloseDelete->isChecked());
+ prefs.setAutoCloseRename(ui->autoCloseRename->isChecked());
+
+ QAbstractButton *checked = ui->copyBehavior->checkedButton();
+ prefs.setCopyBehavior(checked->objectName().mid(2));
+
+ prefs.setPreferExtensions(ui->preferExtensions->toPlainText());
+
+ // [外観(色)]
+ saveAppearance(prefs);
+
+ // [外観(フォント)]
+ prefs.setFolderViewFont(ui->fvFontSpec->font());
+ prefs.setLocationBoxFont(ui->lBoxFontSpec->font());
+ prefs.setSearchBoxFont(ui->sBoxFontSpec->font());
+ prefs.setTextViewFont(ui->tvFontSpec->font());
+
+ prefs.setLineHeight(ui->lineHeight->value());
+
+ // [プログラムパス]
+ prefs.setEditorPath(ui->editorPath->text());
+ prefs.setTerminalPath(ui->terminalPath->text());
+ prefs.setArchiverPath(ui->archiverPath->text());
QDialog::accept();
}
+
#ifndef PREFERENCEDIALOG_H
#define PREFERENCEDIALOG_H
-#include "colorsamplemodel.h"
-
#include <QDialog>
-#include <QAbstractTableModel>
-#include <QSettings>
+#include <QLabel>
+class Preferences;
namespace Ui {
class PreferenceDialog;
private:
Ui::PreferenceDialog *ui;
- ColorSampleModel m_model;
- ColorMap m_colorMap;
- void saveAppearance(QSettings &settings);
- void loadAppearance(QSettings &settings, bool import);
+ void loadAppearance(Preferences &prefs);
+ void saveAppearance(Preferences &prefs);
+ void setFont(QLabel *label, const QFont &font);
+ void setPalette(QWidget *w, QPalette::ColorRole role, const QColor &color);
private slots:
- void chooseFont();
- void setControlsEnabled(bool enabled);
- void setIgnoreExtDefault();
- void selectBoxColor();
- void selectViewColor();
- void selectViewerColor();
- void browseApp();
- void importAppearance();
- void exportAppearance();
+ void chooseColor();
+ void chooseFont();
+ void choosePath();
+ void exportAppearance();
+ void importAppearance();
// QDialog interface
public slots:
<rect>
<x>0</x>
<y>0</y>
- <width>671</width>
- <height>535</height>
+ <width>673</width>
+ <height>553</height>
</rect>
</property>
<property name="sizePolicy">
<property name="windowTitle">
<string>環境設定</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_9">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="font">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
+ <property name="tabShape">
+ <enum>QTabWidget::Rounded</enum>
+ </property>
<property name="currentIndex">
- <number>4</number>
+ <number>0</number>
</property>
- <widget class="QWidget" name="tabBoot_Exit">
+ <widget class="QWidget" name="tabGeneral">
<attribute name="title">
- <string>起動と終了</string>
+ <string>全般</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
- <widget class="QGroupBox" name="bootSize">
- <property name="title">
- <string>起動時のウィンドウサイズを指定する</string>
+ <widget class="QCheckBox" name="checkUpdate">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
</property>
- <property name="flat">
- <bool>true</bool>
+ <property name="text">
+ <string>起動時にアップデートを確認する</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="confirmQuit">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
</property>
- <property name="checkable">
- <bool>true</bool>
+ <property name="text">
+ <string>終了時に確認ダイアログを表示する</string>
</property>
- <layout class="QHBoxLayout" name="horizontalLayout_9">
- <item>
- <layout class="QGridLayout" name="gridLayout_2">
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="moveAfterCreation">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>フォルダ作成後は、そのフォルダに移動する</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="openAfterCreation">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>ファイル作成後は、そのファイルを外部エディタで開く</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_26">
+ <item>
+ <widget class="QGroupBox" name="groupBox_12">
+ <property name="title">
+ <string>操作の開始時、確認ダイアログを表示する</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_27">
<property name="spacing">
<number>-1</number>
</property>
- <item row="0" column="0">
- <widget class="QRadioButton" name="sizeAbsolute">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>24</height>
- </size>
- </property>
+ <property name="leftMargin">
+ <number>12</number>
+ </property>
+ <property name="topMargin">
+ <number>12</number>
+ </property>
+ <property name="rightMargin">
+ <number>12</number>
+ </property>
+ <property name="bottomMargin">
+ <number>12</number>
+ </property>
+ <item>
+ <widget class="QCheckBox" name="confirmCopy">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>絶対指定</string>
+ <string>コピー</string>
</property>
- <attribute name="buttonGroup">
- <string notr="true">sizeOptions</string>
- </attribute>
</widget>
</item>
- <item row="0" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>幅</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="absoluteWidth">
- <property name="suffix">
- <string> px</string>
- </property>
- <property name="maximum">
- <number>9999</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="0" column="2">
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>高さ</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="absoluteHeight">
- <property name="suffix">
- <string> px</string>
- </property>
- <property name="maximum">
- <number>9999</number>
- </property>
- </widget>
- </item>
- </layout>
+ <item>
+ <widget class="QCheckBox" name="confirmMove">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>移動</string>
+ </property>
+ </widget>
</item>
- <item row="1" column="0">
- <widget class="QRadioButton" name="sizeRelative">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <item>
+ <widget class="QCheckBox" name="confirmDelete">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
</property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>24</height>
- </size>
+ <property name="text">
+ <string>削除</string>
</property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="confirmRename">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>相対指定</string>
+ <string>名前変更</string>
</property>
- <attribute name="buttonGroup">
- <string notr="true">sizeOptions</string>
- </attribute>
</widget>
</item>
- <item row="1" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>幅</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="relativeWidth">
- <property name="suffix">
- <string> %</string>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_7">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>0</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_13">
+ <property name="title">
+ <string>操作の成功時、進捗ダイアログを自動で閉じる</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_33">
+ <property name="spacing">
+ <number>-1</number>
+ </property>
+ <property name="leftMargin">
+ <number>12</number>
+ </property>
+ <property name="topMargin">
+ <number>12</number>
+ </property>
+ <property name="rightMargin">
+ <number>12</number>
+ </property>
+ <property name="bottomMargin">
+ <number>12</number>
+ </property>
+ <item>
+ <widget class="QCheckBox" name="autoCloseCopy">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>コピー</string>
+ </property>
+ </widget>
</item>
- <item row="1" column="2">
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>高さ</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="relativeHeight">
- <property name="suffix">
- <string> %</string>
- </property>
- <property name="prefix">
- <string/>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_8">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>0</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
+ <item>
+ <widget class="QCheckBox" name="autoCloseMove">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>移動</string>
+ </property>
+ </widget>
</item>
- <item row="2" column="0" colspan="2">
- <widget class="QRadioButton" name="sizeLast">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>24</height>
- </size>
+ <item>
+ <widget class="QCheckBox" name="autoCloseDelete">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
</property>
+ <property name="text">
+ <string>削除</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="autoCloseRename">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>å\89\8då\9b\9eçµ\82äº\86æ\99\82ã\81®ã\82µã\82¤ã\82º</string>
+ <string>å\90\8då\89\8då¤\89æ\9b´</string>
</property>
- <attribute name="buttonGroup">
- <string notr="true">sizeOptions</string>
- </attribute>
</widget>
</item>
</layout>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>95</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_11">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>1</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
</item>
<item>
- <widget class="QGroupBox" name="bootPos">
- <property name="title">
- <string>起動時のウィンドウ位置を指定する</string>
- </property>
- <property name="flat">
- <bool>true</bool>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_10">
- <item>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="0" column="0">
- <widget class="QRadioButton" name="posAbsolute">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>24</height>
- </size>
- </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QGroupBox" name="groupBox_14">
+ <property name="title">
+ <string>同名ファイル存在時の既定の動作</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_34">
+ <item>
+ <widget class="QRadioButton" name="rbOverWrite">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>絶対指定</string>
+ <string>上書き</string>
</property>
<attribute name="buttonGroup">
- <string notr="true">posOptions</string>
+ <string notr="true">copyBehavior</string>
</attribute>
</widget>
</item>
- <item row="0" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_7">
- <item>
- <widget class="QLabel" name="label_13">
- <property name="text">
- <string>X</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="absoluteLeft">
- <property name="suffix">
- <string> px</string>
- </property>
- <property name="maximum">
- <number>9999</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="0" column="2">
- <layout class="QHBoxLayout" name="horizontalLayout_5">
- <item>
- <widget class="QLabel" name="label_15">
- <property name="text">
- <string>Y</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="absoluteTop">
- <property name="suffix">
- <string> px</string>
- </property>
- <property name="maximum">
- <number>9999</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="1" column="0">
- <widget class="QRadioButton" name="posRelative">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>24</height>
- </size>
+ <item>
+ <widget class="QRadioButton" name="rbOverWriteIfNew">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>新しければ上書き</string>
</property>
+ <attribute name="buttonGroup">
+ <string notr="true">copyBehavior</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="rbSkip">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>相対指定</string>
+ <string>スキップ</string>
</property>
<attribute name="buttonGroup">
- <string notr="true">posOptions</string>
+ <string notr="true">copyBehavior</string>
</attribute>
</widget>
</item>
- <item row="1" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_8">
- <item>
- <widget class="QLabel" name="label_9">
- <property name="text">
- <string>X</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="relativeLeft">
- <property name="suffix">
- <string> %</string>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_5">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>0</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="1" column="2">
- <layout class="QHBoxLayout" name="horizontalLayout_6">
- <item>
- <widget class="QLabel" name="label_11">
- <property name="text">
- <string>Y</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="relativeTop">
- <property name="suffix">
- <string> %</string>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_6">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>0</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="2" column="0">
- <widget class="QRadioButton" name="posCenter">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>24</height>
- </size>
- </property>
+ <item>
+ <widget class="QRadioButton" name="rbAppendNumber">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>画面中央</string>
+ <string>ファイル名末尾に数字を付与</string>
</property>
<attribute name="buttonGroup">
- <string notr="true">posOptions</string>
+ <string notr="true">copyBehavior</string>
</attribute>
</widget>
</item>
- <item row="3" column="0" colspan="2">
- <widget class="QRadioButton" name="posLast">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>24</height>
- </size>
- </property>
+ <item>
+ <widget class="QRadioButton" name="rbRename">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>å\89\8då\9b\9eçµ\82äº\86æ\99\82ã\81®ä½\8dç½®</string>
+ <string>å\90\8då\89\8dã\82\92å¤\89æ\9b´</string>
</property>
<attribute name="buttonGroup">
- <string notr="true">posOptions</string>
+ <string notr="true">copyBehavior</string>
</attribute>
</widget>
</item>
</layout>
- </item>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_14">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>1</width>
+ <height>41</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_5">
+ <property name="title">
+ <string>外部アプリを優先する拡張子</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
+ <widget class="QPlainTextEdit" name="preferExtensions"/>
</item>
</layout>
</widget>
</item>
<item>
- <widget class="QCheckBox" name="checkUpdates">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
- <property name="text">
- <string>起動時にアップデートを確認する</string>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
</property>
- </widget>
+ </spacer>
</item>
<item>
<widget class="QCheckBox" name="resetOnBoot">
</property>
</widget>
</item>
- <item>
- <widget class="QCheckBox" name="confirmExit">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>終了時に確認ダイアログを表示する</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>45</height>
- </size>
- </property>
- </spacer>
- </item>
</layout>
</widget>
- <widget class="QWidget" name="tabAppearance">
+ <widget class="QWidget" name="tabAppearance1">
<attribute name="title">
- <string>色とフォント</string>
+ <string>外観(色)</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
- <widget class="QGroupBox" name="groupBox">
+ <widget class="QGroupBox" name="groupBox_2">
<property name="title">
- <string>ã\82¢ã\83\89ã\83¬ã\82¹ã\83\9cã\83\83ã\82¯ã\82¹</string>
+ <string>ã\83\95ã\82©ã\83«ã\83\80ã\83\93ã\83¥ã\83¼</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_16">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item>
- <widget class="QLabel" name="label_17">
+ <layout class="QGridLayout" name="gridLayout_6">
+ <item row="0" column="0">
+ <widget class="QPushButton" name="fvNormal">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
<property name="text">
- <string>フォント:</string>
+ <string>通 常</string>
</property>
</widget>
</item>
- <item>
- <widget class="QLabel" name="boxFont">
+ <item row="0" column="1" colspan="2">
+ <widget class="QLineEdit" name="fvNormalSample">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
- <string>font family, point</string>
+ <string>Normal</string>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
</property>
</widget>
</item>
- <item>
- <widget class="QPushButton" name="chooseBoxFont">
+ <item row="1" column="0">
+ <widget class="QPushButton" name="fvMarked">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>選択</string>
+ <string> マーク </string>
</property>
</widget>
</item>
- <item>
- <spacer name="horizontalSpacer_13">
+ <item row="1" column="1" colspan="2">
+ <widget class="QLineEdit" name="fvMarkedSample">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>Marked</string>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
- <width>40</width>
+ <width>85</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
- <item>
- <widget class="QPushButton" name="boxClrFg">
+ <item row="2" column="1">
+ <widget class="QPushButton" name="fvNormalBg">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>背景</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QPushButton" name="fvMarkedBg">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>マーク背景</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QPushButton" name="fvSystem">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>文字色</string>
+ <string>システム</string>
</property>
</widget>
</item>
- <item>
- <widget class="QPushButton" name="boxClrBg">
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="fvSystemSample">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>System</string>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QPushButton" name="fvHidden">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>背景色</string>
+ <string>隠し属性</string>
</property>
</widget>
</item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_17">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item>
- <widget class="QLineEdit" name="sampleEdit">
+ <item row="2" column="0">
+ <widget class="QPushButton" name="fvReadOnly">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>読取専用</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="fvReadOnlySample">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>ReadOnly</string>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="fvHiddenSample">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
<property name="text">
- <string>サンプルテキスト</string>
+ <string>Hidden</string>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
</property>
</widget>
</item>
</widget>
</item>
<item>
- <widget class="QGroupBox" name="groupBox_2">
- <property name="title">
- <string>ファイルビュー</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <property name="spacing">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_21">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>ロケーションボックス</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <property name="verticalSpacing">
<number>4</number>
</property>
- <item>
- <widget class="QLabel" name="label_23">
+ <item row="0" column="1">
+ <widget class="QPushButton" name="lBoxBg">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
<property name="text">
- <string>フォント:</string>
+ <string>背景</string>
</property>
</widget>
</item>
- <item>
- <widget class="QLabel" name="viewFont">
+ <item row="0" column="0">
+ <widget class="QPushButton" name="lBoxFg">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
<property name="text">
- <string>font family, point</string>
+ <string>文字</string>
</property>
</widget>
</item>
- <item>
- <widget class="QPushButton" name="chooseViewFont">
+ <item row="1" column="0" colspan="2">
+ <widget class="QLineEdit" name="lBoxSample">
<property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
+ <enum>Qt::NoFocus</enum>
</property>
- <property name="text">
- <string>選択</string>
+ <property name="readOnly">
+ <bool>true</bool>
</property>
</widget>
</item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_6">
+ <property name="title">
+ <string>検索ボックス</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
- <spacer name="horizontalSpacer_12">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="verticalSpacing">
+ <number>4</number>
</property>
- </spacer>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>通 常</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QPushButton" name="sBoxNormal">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>文字</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QPushButton" name="sBoxNormalBg">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>背景</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="3">
+ <widget class="QLineEdit" name="sBoxNormalSample">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>abc123あいう</string>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
<item>
- <widget class="QPushButton" name="clrFgNormal">
+ <layout class="QGridLayout" name="gridLayout_4">
+ <property name="verticalSpacing">
+ <number>4</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>不一致</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QPushButton" name="sBoxUnmatch">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>文字</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QPushButton" name="sBoxUnmatchBg">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>背景</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="3">
+ <widget class="QLineEdit" name="sBoxUnmatchSample">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>abc123あいう</string>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>13</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_8">
+ <item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
+ <string>内蔵テキストビューア</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_5">
+ <property name="verticalSpacing">
+ <number>4</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QPushButton" name="tvFg">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>文字色</string>
+ <string>文字</string>
</property>
</widget>
</item>
- <item>
- <widget class="QPushButton" name="clrBgNormal">
+ <item row="0" column="1">
+ <widget class="QPushButton" name="tvBg">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>背景色</string>
+ <string>背景</string>
</property>
</widget>
</item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_14">
- <property name="spacing">
- <number>-1</number>
- </property>
- <item>
- <widget class="QGroupBox" name="groupBox_3">
- <property name="title">
- <string>文字色</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_13">
- <property name="topMargin">
- <number>12</number>
- </property>
- <item>
- <widget class="QPushButton" name="clrFgSystem">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>100</width>
- <height>0</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>システム</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="clrFgMark">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>100</width>
- <height>0</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string> マーク </string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="clrFgHidden">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>100</width>
- <height>0</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>隠し属性</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="clrFgReadonly">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>100</width>
- <height>0</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>読取専用</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_9">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <item row="1" column="0" colspan="2">
+ <widget class="QLineEdit" name="tvSample">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
</property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
+ <property name="text">
+ <string>abc123あいう</string>
</property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>10</width>
- <height>20</height>
- </size>
+ <property name="readOnly">
+ <bool>true</bool>
</property>
- </spacer>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBox_4">
- <property name="title">
- <string>背景色</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_20">
- <item>
- <widget class="QPushButton" name="clrBgMark">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>マーク</string>
- </property>
- </widget>
- </item>
- </layout>
</widget>
</item>
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
</layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_11">
- <item>
- <widget class="QLabel" name="label_18">
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_4">
+ <property name="title">
+ <string>内蔵画像ビューア</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_7">
+ <property name="verticalSpacing">
+ <number>4</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QPushButton" name="gvBg">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
<property name="text">
- <string>非アクティブパネルの暗さ(0〜100)</string>
+ <string>背景</string>
</property>
</widget>
</item>
- <item>
- <widget class="QSpinBox" name="dark">
- <property name="prefix">
- <string/>
+ <item row="1" column="0">
+ <widget class="QLineEdit" name="gvSample">
+ <property name="focusPolicy">
+ <enum>Qt::NoFocus</enum>
</property>
- <property name="maximum">
- <number>100</number>
+ <property name="readOnly">
+ <bool>true</bool>
</property>
</widget>
</item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
</layout>
- </item>
- <item>
- <widget class="QTableView" name="sampleTable">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>100</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>100</height>
- </size>
- </property>
- <property name="focusPolicy">
- <enum>Qt::ClickFocus</enum>
- </property>
- <property name="selectionMode">
- <enum>QAbstractItemView::SingleSelection</enum>
- </property>
- <property name="selectionBehavior">
- <enum>QAbstractItemView::SelectRows</enum>
- </property>
- <property name="textElideMode">
- <enum>Qt::ElideMiddle</enum>
- </property>
- <property name="showGrid">
- <bool>false</bool>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- <attribute name="horizontalHeaderVisible">
- <bool>false</bool>
- </attribute>
- <attribute name="verticalHeaderVisible">
- <bool>false</bool>
- </attribute>
- </widget>
- </item>
- </layout>
- </widget>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>13</width>
+ <height>17</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QPushButton" name="allFg">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>全ての通常文字を一括指定</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="allBg">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>全ての通常背景を一括指定</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_28">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
- <widget class="QPushButton" name="importAppearance">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
+ <widget class="QLabel" name="label_3">
<property name="text">
- <string>インポート</string>
+ <string>非アクティブパネルの暗さ(0〜1)</string>
</property>
</widget>
</item>
<item>
- <widget class="QPushButton" name="exportAppearance">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
+ <widget class="QDoubleSpinBox" name="darkFactor">
+ <property name="maximum">
+ <double>1.000000000000000</double>
</property>
- <property name="text">
- <string>エクスポート</string>
+ <property name="singleStep">
+ <double>0.010000000000000</double>
</property>
</widget>
</item>
<item>
- <spacer name="horizontalSpacer_17">
+ <spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
- <width>40</width>
- <height>20</height>
+ <width>13</width>
+ <height>17</height>
</size>
</property>
</spacer>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>1</height>
+ <height>0</height>
</size>
</property>
</spacer>
</item>
- </layout>
- </widget>
- <widget class="QWidget" name="tabOperation">
- <attribute name="title">
- <string>ファイル操作</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_6">
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_12">
+ <layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
- <widget class="QGroupBox" name="groupBox_5">
- <property name="title">
- <string>操作の開始時、確認ダイアログを表示する</string>
+ <widget class="QPushButton" name="importAppearance">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>インポート</string>
</property>
- <layout class="QHBoxLayout" name="horizontalLayout_24">
- <property name="spacing">
- <number>-1</number>
- </property>
- <property name="leftMargin">
- <number>12</number>
- </property>
- <property name="topMargin">
- <number>12</number>
- </property>
- <property name="rightMargin">
- <number>12</number>
- </property>
- <property name="bottomMargin">
- <number>12</number>
- </property>
- <item>
- <widget class="QCheckBox" name="confirmCopy">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>コピー</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="confirmMove">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>移動</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="confirmDelete">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>削除</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="confirmRename">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>名前変更</string>
- </property>
- </widget>
- </item>
- </layout>
</widget>
</item>
<item>
- <widget class="QGroupBox" name="groupBox_6">
- <property name="title">
- <string>操作の成功時、進捗ダイアログを自動で閉じる</string>
+ <widget class="QPushButton" name="exportAppearance">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>エクスポート</string>
</property>
- <layout class="QHBoxLayout" name="horizontalLayout_25">
- <property name="spacing">
- <number>-1</number>
- </property>
- <property name="leftMargin">
- <number>12</number>
- </property>
- <property name="topMargin">
- <number>12</number>
- </property>
- <property name="rightMargin">
- <number>12</number>
- </property>
- <property name="bottomMargin">
- <number>12</number>
- </property>
- <item>
- <widget class="QCheckBox" name="autoCloseCopy">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>コピー</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="autoCloseMove">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>移動</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="autoCloseDelete">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>削除</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="autoCloseRename">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>名前変更</string>
- </property>
- </widget>
- </item>
- </layout>
</widget>
</item>
<item>
- <spacer name="horizontalSpacer_10">
+ <spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</item>
</layout>
</item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tabAppearance2">
+ <attribute name="title">
+ <string>外観(フォント)</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_5">
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_15">
- <item>
- <widget class="QGroupBox" name="groupBox_7">
- <property name="title">
- <string>同名ファイル存在時の既定の動作</string>
+ <layout class="QGridLayout" name="gridLayout_8">
+ <item row="0" column="0">
+ <widget class="QPushButton" name="fvFont">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>フォルダビューのフォント</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" colspan="2">
+ <widget class="QLabel" name="fvFontSpec">
+ <property name="text">
+ <string>font family, point</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QPushButton" name="lBoxFont">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>ロケーションボックスのフォント</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" colspan="2">
+ <widget class="QLabel" name="lBoxFontSpec">
+ <property name="text">
+ <string>font family, point</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QPushButton" name="sBoxFont">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>検索ボックスのフォント</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" colspan="2">
+ <widget class="QLabel" name="sBoxFontSpec">
+ <property name="text">
+ <string>font family, point</string>
</property>
- <layout class="QHBoxLayout" name="horizontalLayout_18">
- <item>
- <widget class="QRadioButton" name="rbOverWrite">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>上書き</string>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">overwriteOptions</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="rbOverWriteIfNew">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>新しければ上書き</string>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">overwriteOptions</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="rbSkip">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>スキップ</string>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">overwriteOptions</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="rbAppendNumber">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>ファイル名末尾に数字を付与</string>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">overwriteOptions</string>
- </attribute>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="rbRename">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>名前を変更</string>
- </property>
- <attribute name="buttonGroup">
- <string notr="true">overwriteOptions</string>
- </attribute>
- </widget>
- </item>
- </layout>
</widget>
</item>
+ <item row="3" column="0">
+ <widget class="QPushButton" name="tvFont">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>内蔵テキストビューアのフォント</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1" colspan="2">
+ <widget class="QLabel" name="tvFontSpec">
+ <property name="text">
+ <string>font family, point</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>フォルダビューの行の高さ(1〜2)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QDoubleSpinBox" name="lineHeight">
+ <property name="decimals">
+ <number>2</number>
+ </property>
+ <property name="minimum">
+ <double>1.000000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>2.000000000000000</double>
+ </property>
+ <property name="singleStep">
+ <double>0.010000000000000</double>
+ </property>
+ <property name="value">
+ <double>1.500000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="2">
+ <spacer name="horizontalSpacer_6">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</item>
<item>
- <widget class="QCheckBox" name="moveAfterCreate">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
+ <spacer name="verticalSpacer_7">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
- <property name="text">
- <string>フォルダ作成後は、そのフォルダに移動する</string>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>223</height>
+ </size>
</property>
- </widget>
+ </spacer>
</item>
<item>
- <widget class="QCheckBox" name="openAfterCreate">
+ <widget class="QPushButton" name="allFont">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="text">
- <string>ファイル作成後は、そのファイルをエディタで開く</string>
+ <string>全てのフォントを一括指定</string>
</property>
</widget>
</item>
- <item>
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>102</height>
- </size>
- </property>
- </spacer>
- </item>
</layout>
</widget>
<widget class="QWidget" name="tabPath">
<attribute name="title">
- <string>ã\83\91ã\82¹è¨å®\9a</string>
+ <string>ã\83\97ã\83ã\82°ã\83©ã\83 ã\83\91ã\82¹</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
</item>
<item>
<widget class="QPushButton" name="browseEditor">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
<property name="text">
<string>参照</string>
</property>
</item>
<item>
<widget class="QPushButton" name="browseTerminal">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
<property name="text">
<string>参照</string>
</property>
</item>
<item>
<widget class="QPushButton" name="browseArchiver">
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
<property name="text">
<string>参照</string>
</property>
</item>
</layout>
</widget>
- <widget class="QWidget" name="tabTextViewer">
- <attribute name="title">
- <string>内蔵ビューア</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout_13">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item>
- <widget class="QGroupBox" name="groupBox_8">
- <property name="title">
- <string>テキストビューアの外観</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_12">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_29">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item>
- <widget class="QLabel" name="label_21">
- <property name="text">
- <string>フォント:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="viewerFont">
- <property name="text">
- <string>font family, point</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="chooseViewerFont">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>選択</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_18">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="viewerClrFg">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>文字色</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="viewerClrBg">
- <property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>背景色</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_30">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item>
- <spacer name="horizontalSpacer_19">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QCheckBox" name="viewerInherit">
- <property name="text">
- <string>文字色と背景色はファイルビューを継承</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QPlainTextEdit" name="viewerSample">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>130</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>130</height>
- </size>
- </property>
- <property name="readOnly">
- <bool>true</bool>
- </property>
- <property name="plainText">
- <string>01234567890
-abcdefghijklmnopqrstuvwxyz
-ABCDEFGHIJKLMNOPQRSTUVWXYZ
-!"#$%&'()+-*=^~¥|@`[]{}<>;:,./?_
-あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_11">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_31">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item>
- <widget class="QCheckBox" name="enableViewerIgnoreExt">
- <property name="text">
- <string>以下の拡張子は外部アプリを優先する</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_21">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="defaultIgnoreExt">
- <property name="text">
- <string>デフォルトに戻す</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_32">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="sizeConstraint">
- <enum>QLayout::SetDefaultConstraint</enum>
- </property>
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item>
- <spacer name="horizontalSpacer_20">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>13</width>
- <height>17</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPlainTextEdit" name="viewerIgnoreExt">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>100</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>110</height>
- </size>
- </property>
- <property name="font">
- <font>
- <family>Monaco</family>
- <pointsize>13</pointsize>
- </font>
- </property>
- <property name="plainText">
- <string>1
-2
-3
-4
-5
-6</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer_5">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>3</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
</widget>
</item>
<item>
</layout>
</widget>
<tabstops>
- <tabstop>bootSize</tabstop>
- <tabstop>sizeAbsolute</tabstop>
- <tabstop>absoluteWidth</tabstop>
- <tabstop>absoluteHeight</tabstop>
- <tabstop>sizeRelative</tabstop>
- <tabstop>relativeWidth</tabstop>
- <tabstop>relativeHeight</tabstop>
- <tabstop>sizeLast</tabstop>
- <tabstop>bootPos</tabstop>
- <tabstop>posAbsolute</tabstop>
- <tabstop>absoluteLeft</tabstop>
- <tabstop>absoluteTop</tabstop>
- <tabstop>posRelative</tabstop>
- <tabstop>relativeLeft</tabstop>
- <tabstop>relativeTop</tabstop>
- <tabstop>posCenter</tabstop>
- <tabstop>posLast</tabstop>
- <tabstop>checkUpdates</tabstop>
- <tabstop>resetOnBoot</tabstop>
- <tabstop>confirmExit</tabstop>
- <tabstop>chooseBoxFont</tabstop>
- <tabstop>boxClrFg</tabstop>
- <tabstop>boxClrBg</tabstop>
- <tabstop>sampleEdit</tabstop>
- <tabstop>chooseViewFont</tabstop>
- <tabstop>clrFgNormal</tabstop>
- <tabstop>clrBgNormal</tabstop>
- <tabstop>clrFgSystem</tabstop>
- <tabstop>clrFgMark</tabstop>
- <tabstop>clrFgHidden</tabstop>
- <tabstop>clrFgReadonly</tabstop>
- <tabstop>clrBgMark</tabstop>
- <tabstop>dark</tabstop>
- <tabstop>importAppearance</tabstop>
- <tabstop>exportAppearance</tabstop>
+ <tabstop>checkUpdate</tabstop>
+ <tabstop>confirmQuit</tabstop>
+ <tabstop>moveAfterCreation</tabstop>
+ <tabstop>openAfterCreation</tabstop>
<tabstop>confirmCopy</tabstop>
<tabstop>confirmMove</tabstop>
<tabstop>confirmDelete</tabstop>
<tabstop>rbSkip</tabstop>
<tabstop>rbAppendNumber</tabstop>
<tabstop>rbRename</tabstop>
- <tabstop>moveAfterCreate</tabstop>
- <tabstop>openAfterCreate</tabstop>
+ <tabstop>preferExtensions</tabstop>
+ <tabstop>resetOnBoot</tabstop>
+ <tabstop>fvNormal</tabstop>
+ <tabstop>fvMarked</tabstop>
+ <tabstop>fvNormalBg</tabstop>
+ <tabstop>fvMarkedBg</tabstop>
+ <tabstop>fvSystem</tabstop>
+ <tabstop>fvHidden</tabstop>
+ <tabstop>fvReadOnly</tabstop>
+ <tabstop>lBoxFg</tabstop>
+ <tabstop>lBoxBg</tabstop>
+ <tabstop>sBoxNormal</tabstop>
+ <tabstop>sBoxNormalBg</tabstop>
+ <tabstop>sBoxUnmatch</tabstop>
+ <tabstop>sBoxUnmatchBg</tabstop>
+ <tabstop>tvFg</tabstop>
+ <tabstop>tvBg</tabstop>
+ <tabstop>gvBg</tabstop>
+ <tabstop>importAppearance</tabstop>
+ <tabstop>exportAppearance</tabstop>
+ <tabstop>fvFont</tabstop>
+ <tabstop>lBoxFont</tabstop>
+ <tabstop>sBoxFont</tabstop>
+ <tabstop>tvFont</tabstop>
+ <tabstop>allFont</tabstop>
<tabstop>editorPath</tabstop>
<tabstop>browseEditor</tabstop>
<tabstop>terminalPath</tabstop>
<tabstop>browseTerminal</tabstop>
- <tabstop>chooseViewerFont</tabstop>
- <tabstop>viewerClrFg</tabstop>
- <tabstop>viewerClrBg</tabstop>
- <tabstop>viewerInherit</tabstop>
- <tabstop>viewerSample</tabstop>
- <tabstop>enableViewerIgnoreExt</tabstop>
- <tabstop>viewerIgnoreExt</tabstop>
- <tabstop>defaultIgnoreExt</tabstop>
+ <tabstop>archiverPath</tabstop>
+ <tabstop>browseArchiver</tabstop>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
</connection>
</connections>
<buttongroups>
- <buttongroup name="overwriteOptions"/>
- <buttongroup name="sizeOptions"/>
- <buttongroup name="posOptions"/>
+ <buttongroup name="copyBehavior"/>
</buttongroups>
</ui>
--- /dev/null
+#include "foldermodel.h"
+#include "global.h"
+#include "preferences.h"
+
+#include <QApplication>
+#include <QDebug>
+#include <QDesktopWidget>
+
+QString DefaultPreferExtensions()
+{
+ QStringList list;
+
+ // 画像系
+ list << "ico" << "ai" << "psd" << "xcf" << "tif" << "tiff" << "wmf";
+ // 音・動画系
+ list << "wav" << "mp3" << "ogg" << "midi" << "mid" << "aif" << "aiff";
+ list << "mov" << "mpg" << "mpeg" << "wma" << "wmv" << "asf" << "avi";
+ list << "flac" << "mkv";
+ // 実行ファイル系
+ list << "exe" << "com" << "msi" << "scr";
+ // アーカイブ系
+ list << "lzh" << "zip" << "cab" << "tar" << "rar" << "gz" << "tgz";
+ list << "bz2" << "xz" << "jar" << "7z" << "dmg";
+ // ドキュメント系
+ list << "pdf" << "doc" << "docx" << "xls" << "xlsx" << "ppt" << "pptx";
+ // フォント
+ list << "ttf" << "ttc";
+
+ list.sort();
+
+ return list.join(",");
+}
+
+QFont DefaultFixedFont()
+{
+ QFont font = qApp->font();
+#ifdef Q_OS_WIN
+ font.setFamily("MS ゴシック");
+#elif defined(Q_OS_MAC)
+ font.setFamily("Monaco");
+#else
+#endif
+ return font;
+}
+
+Preferences::Preferences(QObject *parent) :
+ QSettings(QSettings::IniFormat,
+ QSettings::UserScope,
+ qApp->organizationName(),
+ qApp->applicationName(),
+ parent)
+{
+}
+
+Preferences::Preferences(const QString &path, QObject *parent) :
+ QSettings(path, QSettings::IniFormat, parent)
+{
+}
+
+#define Key_Filter(side) (side + "/Filter")
+#define Key_NameFilter(side) (side + "/NameFilter")
+#define Key_Sort(side) (side + "/Sort")
+#define Key_Path(side) (side + "/Path")
+void Preferences::restoreModel(const QString &side, FolderModel *m)
+{
+ qDebug() << "Preferences::restoreModel()" << side;
+
+ int filter = value(Key_Filter(side), 0).toInt();
+ filter |= QDir::NoDot | QDir::AllDirs | QDir::Files;
+ m->setFilter(QFlag(filter));
+
+ QString nameFilter = value(Key_NameFilter(side), "*").toString();
+ m->setNameFilters(nameFilter.split(" ", QString::SkipEmptyParts));
+
+ int sort = QDir::Name | QDir::DirsFirst | QDir::IgnoreCase;
+ sort = value(Key_Sort(side), sort).toInt();
+ m->setSorting(QFlag(sort));
+
+ QString path = QDir::homePath();
+ path = value(Key_Path(side), path).toString();
+ m->setRootPath(path);
+}
+
+void Preferences::saveModel(const QString &side, const FolderModel *m)
+{
+ qDebug() << "Preferences::saveModel()" << side;
+
+ setValue(Key_Filter(side), static_cast<int>(m->filter()));
+ setValue(Key_Sort(side), static_cast<int>(m->sorting()));
+ setValue(Key_Path(side), m->rootPath());
+}
+
+#define Key_WindowGeometry "WindowGeometry"
+#define Key_WindowState "WindowState"
+void Preferences::restoreWindow(QMainWindow *w)
+{
+ qDebug() << "Preferences::restoreWindow()";
+
+ QByteArray geometry = value(Key_WindowGeometry).toByteArray();
+ if (geometry.isNull()) {
+ QSize size(700, 400);
+ QPoint point;
+ point.setX((qApp->desktop()->width() - size.width()) / 2);
+ point.setY((qApp->desktop()->height() - size.height()) / 2);
+ w->setGeometry(QRect(point, size));
+ }
+ else {
+ w->restoreGeometry(geometry);
+ }
+
+ QByteArray state = value(Key_WindowState).toByteArray();
+ if (!state.isEmpty()) {
+ w->restoreState(state);
+ }
+}
+
+void Preferences::saveWindow(const QMainWindow *w)
+{
+ setValue(Key_WindowGeometry, w->saveGeometry());
+ setValue(Key_WindowState, w->saveState());
+}
+
+///////////////////////////////////////////////////////////////////////////////
+#define Key_BookmarkEntry(i) QString("Bookmark/Entry%1").arg(i)
+#define Key_BookmarkPath(i) QString("Bookmark/Path%1").arg(i)
+void Preferences::addBookmark(const QString &name, const QString &path)
+{
+ int n;
+ for (n = 1; !value(Key_BookmarkEntry(n)).isNull(); n++)
+ ;
+
+ setValue(Key_BookmarkEntry(n), name);
+ setValue(Key_BookmarkPath(n), path);
+}
+
+void Preferences::clearBookmark()
+{
+ beginGroup("Bookmark");
+ remove("");
+ endGroup();
+}
+
+QString Preferences::getBookmarkEntry(int n) const
+{
+ return value(Key_BookmarkEntry(n)).toString();
+}
+
+QString Preferences::getBookmarkPath(int n) const
+{
+ return value(Key_BookmarkPath(n)).toString();
+}
+
+QColor Preferences::folderViewFgColor(bool active)
+{
+ int darkFactor = 100;
+ if (!active) {
+ darkFactor += getDarkFacotr() * 100;
+ }
+ return getFolderViewFgColor().darker(darkFactor);
+}
+
+QColor Preferences::folderViewBgColor(bool active)
+{
+ int darkFactor = 100;
+ if (!active) {
+ darkFactor += getDarkFacotr() * 100;
+ }
+ return getFolderViewBgColor().darker(darkFactor);
+}
+
+QColor Preferences::folderViewMarkedFgColor(bool active)
+{
+ int darkFactor = 100;
+ if (!active) {
+ darkFactor += getDarkFacotr() * 100;
+ }
+ return getFolderViewMarkedFgColor().darker(darkFactor);
+}
+
+QColor Preferences::folderViewMarkedBgColor(bool active)
+{
+ int darkFactor = 100;
+ if (!active) {
+ darkFactor += getDarkFacotr() * 100;
+ }
+ return getFolderViewMarkedBgColor().darker(darkFactor);
+}
+
+QColor Preferences::folderViewSystemColor(bool active)
+{
+ int darkFactor = 100;
+ if (!active) {
+ darkFactor += getDarkFacotr() * 100;
+ }
+ return getFolderViewSystemColor().darker(darkFactor);
+}
+
+QColor Preferences::folderViewHiddenColor(bool active)
+{
+ int darkFactor = 100;
+ if (!active) {
+ darkFactor += getDarkFacotr() * 100;
+ }
+ return getFolderViewHiddenColor().darker(darkFactor);
+}
+
+QColor Preferences::folderViewReadOnlyColor(bool active)
+{
+ int darkFactor = 100;
+ if (!active) {
+ darkFactor += getDarkFacotr() * 100;
+ }
+ return getFolderViewReadOnlyColor().darker(darkFactor);
+}
+
+QColor Preferences::locationBoxFgColor(bool active)
+{
+ int darkFactor = 100;
+ if (!active) {
+ darkFactor += getDarkFacotr() * 100;
+ }
+ return getLocationBoxFgColor().darker(darkFactor);
+}
+
+QColor Preferences::locationBoxBgColor(bool active)
+{
+ int darkFactor = 100;
+ if (!active) {
+ darkFactor += getDarkFacotr() * 100;
+ }
+ return getLocationBoxBgColor().darker(darkFactor);
+}
+
+#define IMPLEMENT_BOOL(key, defVal) \
+ bool Preferences::is##key() const { \
+ return value(#key, def##key()).toBool(); \
+ } \
+ bool Preferences::def##key() const { \
+ return defVal; \
+ } \
+ void Preferences::set##key(bool value) { \
+ setValue(#key, value); \
+ }
+
+IMPLEMENT_BOOL(CheckUpdate, true)
+IMPLEMENT_BOOL(ConfirmQuit, true)
+IMPLEMENT_BOOL(ConfirmCopy, true)
+IMPLEMENT_BOOL(AutoCloseCopy, false)
+IMPLEMENT_BOOL(ConfirmMove, true)
+IMPLEMENT_BOOL(AutoCloseMove, false)
+IMPLEMENT_BOOL(ConfirmDelete, true)
+IMPLEMENT_BOOL(AutoCloseDelete, false)
+IMPLEMENT_BOOL(ConfirmRename, true)
+IMPLEMENT_BOOL(AutoCloseRename, false)
+IMPLEMENT_BOOL(OpenAfterCreation, false)
+IMPLEMENT_BOOL(MoveAfterCreation, false)
+
+#define IMPLEMENT_STRING(key, defVal) \
+ QString Preferences::get##key() const { \
+ return value(#key, def##key()).toString(); \
+ } \
+ QString Preferences::def##key() const { \
+ return defVal; \
+ } \
+ void Preferences::set##key(const QString &value) { \
+ setValue(#key, value); \
+ }
+
+#ifdef Q_OS_LINUX
+
+#elif defined(Q_OS_MAC)
+ IMPLEMENT_STRING(ArchiverPath, QQ("/System/Library/CoreServices/Archive Utility.app"))
+ IMPLEMENT_STRING(EditorPath, "/Applications/TextEdit.app")
+ IMPLEMENT_STRING(TerminalPath, "/Applications/Utilities/Terminal.app --args -c cd")
+#else
+ IMPLEMENT_STRING(ArchiverPath, QQ("C:/Program Files/Lhaplus/Lhaplus.exe"))
+ IMPLEMENT_STRING(EditorPath, "notepad.exe")
+ IMPLEMENT_STRING(TerminalPath, "cmd.exe /k cd")
+#endif
+
+IMPLEMENT_STRING(CopyBehavior, "OverWriteIfNew")
+IMPLEMENT_STRING(PreferExtensions, DefaultPreferExtensions())
+
+#define IMPLEMENT_COLOR(key, defVal) \
+ QColor Preferences::get##key() const { \
+ return value("Appearance/"#key, def##key()).value<QColor>(); \
+ } \
+ QColor Preferences::def##key() const { \
+ return defVal; \
+ } \
+ void Preferences::set##key(const QColor &value) { \
+ setValue("Appearance/"#key, value); \
+ }
+
+IMPLEMENT_COLOR(FolderViewFgColor, QPalette().text().color())
+IMPLEMENT_COLOR(FolderViewBgColor, QPalette().base().color())
+IMPLEMENT_COLOR(FolderViewMarkedFgColor, QColor(128, 0, 0))
+IMPLEMENT_COLOR(FolderViewMarkedBgColor, QColor(0, 192, 0))
+IMPLEMENT_COLOR(FolderViewSystemColor, QColor(128, 0, 128))
+IMPLEMENT_COLOR(FolderViewHiddenColor, QColor(128, 128, 128))
+IMPLEMENT_COLOR(FolderViewReadOnlyColor, QColor(0, 128, 0))
+IMPLEMENT_COLOR(LocationBoxFgColor, QPalette().text().color())
+IMPLEMENT_COLOR(LocationBoxBgColor, QPalette().base().color())
+IMPLEMENT_COLOR(SearchBoxFgColor, QPalette().text().color())
+IMPLEMENT_COLOR(SearchBoxBgColor, QPalette().base().color())
+IMPLEMENT_COLOR(SearchBoxUnmatchFgColor, QColor(255, 0, 0))
+IMPLEMENT_COLOR(SearchBoxUnmatchBgColor, QPalette().base().color())
+IMPLEMENT_COLOR(TextViewFgColor, QPalette().text().color())
+IMPLEMENT_COLOR(TextViewBgColor, QPalette().base().color())
+IMPLEMENT_COLOR(ImageViewBgColor, QPalette().base().color())
+
+#define IMPLEMENT_DOUBLE(key, defVal) \
+ double Preferences::get##key() const { \
+ return value("Appearance/"#key, def##key()).toDouble(); \
+ } \
+ double Preferences::def##key() const { \
+ return defVal; \
+ } \
+ void Preferences::set##key(double value) { \
+ setValue("Appearance/"#key, value); \
+ }
+
+IMPLEMENT_DOUBLE(DarkFacotr, 0)
+IMPLEMENT_DOUBLE(LineHeight, 1.5)
+
+#define IMPLEMENT_FONT(key, defVal) \
+ QFont Preferences::get##key() const { \
+ return value("Appearance/"#key, def##key()).value<QFont>(); \
+ } \
+ QFont Preferences::def##key() const { \
+ return defVal; \
+ } \
+ void Preferences::set##key(const QFont &value) { \
+ setValue("Appearance/"#key, value); \
+ }
+
+IMPLEMENT_FONT(FolderViewFont, DefaultFixedFont())
+IMPLEMENT_FONT(LocationBoxFont, DefaultFixedFont())
+IMPLEMENT_FONT(SearchBoxFont, DefaultFixedFont())
+IMPLEMENT_FONT(TextViewFont, DefaultFixedFont())
--- /dev/null
+#ifndef PREFERENCES_H
+#define PREFERENCES_H
+
+#include <QMainWindow>
+#include <QSettings>
+class FolderModel;
+
+#define DECLARE_BOOL(key) \
+ bool is##key() const; \
+ bool def##key() const; \
+ void set##key(bool value)
+
+#define DECLARE_OBJECT(Type, key) \
+ Type get##key() const; \
+ Type def##key() const; \
+ void set##key(const Type &value)
+
+#define DECLARE_PRIMITIVE(Type, key) \
+ Type get##key() const; \
+ Type def##key() const; \
+ void set##key(Type value)
+
+class Preferences : public QSettings
+{
+ Q_OBJECT
+public:
+ explicit Preferences(QObject *parent = 0);
+ Preferences(const QString &path, QObject *parent = 0);
+
+ void restoreModel(const QString &side, FolderModel *m);
+ void saveModel(const QString &side, const FolderModel *m);
+
+ void restoreWindow(QMainWindow *w);
+ void saveWindow(const QMainWindow *w);
+
+ void addBookmark(const QString &name, const QString &path);
+ void clearBookmark();
+ QString getBookmarkEntry(int n) const;
+ QString getBookmarkPath(int n) const;
+
+ QColor folderViewFgColor(bool active);
+ QColor folderViewBgColor(bool active);
+ QColor folderViewMarkedFgColor(bool active);
+ QColor folderViewMarkedBgColor(bool active);
+ QColor folderViewSystemColor(bool active);
+ QColor folderViewHiddenColor(bool active);
+ QColor folderViewReadOnlyColor(bool active);
+ QColor locationBoxFgColor(bool active);
+ QColor locationBoxBgColor(bool active);
+
+ DECLARE_BOOL(CheckUpdate);
+ DECLARE_BOOL(ConfirmQuit);
+ DECLARE_BOOL(ConfirmCopy);
+ DECLARE_BOOL(AutoCloseCopy);
+ DECLARE_BOOL(ConfirmMove);
+ DECLARE_BOOL(AutoCloseMove);
+ DECLARE_BOOL(ConfirmDelete);
+ DECLARE_BOOL(AutoCloseDelete);
+ DECLARE_BOOL(ConfirmRename);
+ DECLARE_BOOL(AutoCloseRename);
+ DECLARE_BOOL(OpenAfterCreation);
+ DECLARE_BOOL(MoveAfterCreation);
+
+ DECLARE_OBJECT(QString, ArchiverPath);
+ DECLARE_OBJECT(QString, EditorPath);
+ DECLARE_OBJECT(QString, TerminalPath);
+ DECLARE_OBJECT(QString, CopyBehavior);
+ DECLARE_OBJECT(QString, PreferExtensions);
+
+ DECLARE_OBJECT(QColor, FolderViewFgColor);
+ DECLARE_OBJECT(QColor, FolderViewBgColor);
+ DECLARE_OBJECT(QColor, FolderViewMarkedFgColor);
+ DECLARE_OBJECT(QColor, FolderViewMarkedBgColor);
+ DECLARE_OBJECT(QColor, FolderViewSystemColor);
+ DECLARE_OBJECT(QColor, FolderViewHiddenColor);
+ DECLARE_OBJECT(QColor, FolderViewReadOnlyColor);
+ DECLARE_OBJECT(QColor, LocationBoxFgColor);
+ DECLARE_OBJECT(QColor, LocationBoxBgColor);
+ DECLARE_OBJECT(QColor, SearchBoxFgColor);
+ DECLARE_OBJECT(QColor, SearchBoxBgColor);
+ DECLARE_OBJECT(QColor, SearchBoxUnmatchFgColor);
+ DECLARE_OBJECT(QColor, SearchBoxUnmatchBgColor);
+ DECLARE_OBJECT(QColor, TextViewFgColor);
+ DECLARE_OBJECT(QColor, TextViewBgColor);
+ DECLARE_OBJECT(QColor, ImageViewBgColor);
+
+ DECLARE_PRIMITIVE(double, DarkFacotr);
+ DECLARE_PRIMITIVE(double, LineHeight);
+
+ DECLARE_OBJECT(QFont, FolderViewFont);
+ DECLARE_OBJECT(QFont, LocationBoxFont);
+ DECLARE_OBJECT(QFont, SearchBoxFont);
+ DECLARE_OBJECT(QFont, TextViewFont);
+
+
+
+signals:
+
+public slots:
+
+};
+
+#endif // PREFERENCES_H
#include <QMessageBox>\r
\r
RenameMultiDialog::RenameMultiDialog(QWidget *parent) :\r
- IRenameDialog(parent),\r
+ AbstractRenameDialog(parent),\r
ui(new Ui::RenameMultiDialog)\r
{\r
ui->setupUi(this);\r
}\r
}\r
\r
- IRenameDialog::accept();\r
+ AbstractRenameDialog::accept();\r
}\r
\r
#define RENAMEMULTIDIALOG_H\r
\r
#include <QAbstractButton>\r
-#include "irenamedialog.h"\r
+#include "abstractrenamedialog.h"\r
\r
namespace Ui {\r
class RenameMultiDialog;\r
}\r
\r
-class RenameMultiDialog : public IRenameDialog\r
+class RenameMultiDialog : public AbstractRenameDialog\r
{\r
Q_OBJECT\r
\r
#include <QMessageBox>\r
\r
RenameSingleDialog::RenameSingleDialog(QWidget *parent) :\r
- IRenameDialog(parent),\r
+ AbstractRenameDialog(parent),\r
ui(new Ui::RenameSingleDialog)\r
{\r
ui->setupUi(this);\r
m_dir.absoluteFilePath(ui->nameAfter->text()));\r
}\r
\r
- IRenameDialog::accept();\r
+ AbstractRenameDialog::accept();\r
}\r
#ifndef RENAMESINGLEDIALOG_H\r
#define RENAMESINGLEDIALOG_H\r
\r
-#include "irenamedialog.h"\r
+#include "abstractrenamedialog.h"\r
\r
namespace Ui {\r
class RenameSingleDialog;\r
}\r
\r
-class RenameSingleDialog : public IRenameDialog\r
+class RenameSingleDialog : public AbstractRenameDialog\r
{\r
Q_OBJECT\r
\r
#ifndef RENAMEWORKER_H\r
#define RENAMEWORKER_H\r
\r
-#include "common.h"\r
#include "abstractworker.h"\r
+#include "global.h"\r
\r
class RenameWorker : public AbstractWorker\r
{\r
<file>images/Zoom in.png</file>
<file>images/Zoom out.png</file>
<file>images/Search text.png</file>
- <file>images/Picture.png</file>
<file>images/Lightbrown Zip.png</file>
<file>images/file-manager.png</file>
+ <file>images/windows_fullscreen.png</file>
+ <file>images/Pictures.png</file>
</qresource>
</RCC>
+++ /dev/null
-#include "common.h"
-#include "mainwindow.h"
-#include "searchbox.h"
-
-#include <QAction>
-#include <QDebug>
-#include <QKeyEvent>
-#include <QApplication>
-
-SearchBox::SearchBox(QWidget *parent) :
- QLineEdit(parent)
-{
-}
-
-void SearchBox::itemFound()
-{
- QPalette palette = this->palette();
- palette.setColor(QPalette::Text, Qt::black);
- setPalette(palette);
-}
-
-void SearchBox::itemNotFound()
-{
- QPalette palette = this->palette();
- palette.setColor(QPalette::Text, Qt::red);
- setPalette(palette);
-}
-
-void SearchBox::keyPressEvent(QKeyEvent *event)
-{
-#if 0
- QString ksq = KeyEventToSequence(event);
-
- if (ksq == "/") {
- QAction *action = getMainWnd()->findChild<QAction*>("action_Search");
- action->toggle();
- event->accept();
- return;
- }
-
- QString textBefore = text();
- QLineEdit::keyPressEvent(event);
-
-
- if (ksq == "Shift+Return"){
- qDebug() << ksq;
- emit getMainWnd()->findChild<QAction*>("action_SearchPrev")->triggered();
- }
- else if (ksq.indexOf("Return") != -1) {
- qDebug() << ksq;
- emit getMainWnd()->findChild<QAction*>("action_SearchNext")->triggered();
- }
- else if (textBefore != text()) {
- emit searchItem(text());
- }
- else {
- qDebug() << ksq;
- }
-#endif
-
- QLineEdit::keyPressEvent(event);
-
-}
+++ /dev/null
-#ifndef SEARCHBOX_H
-#define SEARCHBOX_H
-
-#include <QLineEdit>
-
-class SearchBox : public QLineEdit
-{
- Q_OBJECT
-public:
- explicit SearchBox(QWidget *parent = 0);
-
-signals:
- void searchItem(const QString &text);
- void searchNext(const QString &text);
- void searchPrev(const QString &next);
-
-private slots:
- void itemFound();
- void itemNotFound();
-
-public slots:
-
- // QWidget interface
-protected:
- void keyPressEvent(QKeyEvent *event);
-};
-
-#endif // SEARCHBOX_H
-#include "common.h"
+#include "mainwindow.h"
#include "simpleimageview.h"
#include <QDebug>
#include <QAction>
#include <QMenu>
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::SimpleImageView
+/// \param parent 親ウィジェット
+///
+/// コンストラクタ
+///
SimpleImageView::SimpleImageView(QWidget *parent) :
QGraphicsView(parent),
- m_back(NULL),
- m_fitToWindow(NULL),
- m_scaleUp(NULL),
- m_scaleDown(NULL),
- m_scaleNormal(NULL),
- m_rot90(NULL),
- m_rot180(NULL),
+ AbstractView(),
m_imgSrc(),
+ m_scene(this),
m_scaleFactor(0),
m_rotateDeg(0)
{
- QSettings settings;
- QPalette pal = palette();
- pal.setColor(QPalette::Base, settings.value(IniKey_ViewColorBgNormal).value<QColor>());
- setBackgroundRole(QPalette::Base);
- setPalette(pal);
-
- setContextMenuPolicy(Qt::DefaultContextMenu);
-
- QList<QKeySequence> shortcuts;
- //>>>>> 「戻る」メニュー
- m_back = new QAction(tr("戻る"), this);
- m_back->setObjectName("back");
- shortcuts.clear();
- shortcuts << QKeySequence("Return");
- shortcuts << QKeySequence("Backspace");
- m_back->setShortcuts(shortcuts);
-
- //>>>>> 「ウィンドウにフィット」メニュー
- m_fitToWindow = new QAction(tr("ウィンドウにフィット"), this);
- m_fitToWindow->setObjectName("fitToWindow");
- m_fitToWindow->setCheckable(true);
- m_fitToWindow->setChecked(true);
- m_fitToWindow->setShortcut(QKeySequence("Space"));
-
- //>>>>> 「拡大」メニュー
- m_scaleUp = new QAction(tr("拡大"), this);
- m_scaleUp->setObjectName("scaleUp");
- shortcuts.clear();
- shortcuts << QKeySequence("+");
- shortcuts << QKeySequence("Shift++");
- m_scaleUp->setShortcuts(shortcuts);
-
- //>>>>> 「縮小」メニュー
- m_scaleDown = new QAction(tr("縮小"), this);
- m_scaleDown->setObjectName("scaleDown");
- m_scaleDown->setShortcut(QKeySequence("-"));
-
- //>>>>> 「等倍」メニュー
- m_scaleNormal = new QAction(tr("等倍"), this);
- m_scaleNormal->setObjectName("scaleNormal");
- shortcuts.clear();
- shortcuts << QKeySequence("=");
- shortcuts << QKeySequence("Shift+=");
- m_scaleNormal->setShortcuts(shortcuts);
-
- //>>>>> 「右に90度回転」メニュー
- m_rot90 = new QAction(tr("右に90度回転"), this);
- m_rot90->setObjectName("rot90");
- m_rot90->setShortcut(QKeySequence("9"));
-
- //>>>>> 「右に180度回転」メニュー
- m_rot180 = new QAction(tr("右に180度回転"), this);
- m_rot180->setObjectName("rot180");
- m_rot180->setShortcut(QKeySequence("0"));
-
- connect(m_back, SIGNAL(triggered()), this, SIGNAL(viewFinished()));
- connect(m_fitToWindow, SIGNAL(toggled(bool)), this, SLOT(fitToWindow(bool)));
- connect(m_scaleDown, SIGNAL(triggered()), this, SLOT(scaleDown()));
- connect(m_scaleNormal, SIGNAL(triggered()), this, SLOT(scaleNormal()));
- connect(m_scaleUp, SIGNAL(triggered()), this, SLOT(scaleUp()));
- connect(m_rot90, SIGNAL(triggered()), this, SLOT(rotate90()));
- connect(m_rot180, SIGNAL(triggered()), this, SLOT(rotate180()));
-
+ setContextMenuPolicy(Qt::NoContextMenu);
setDragMode(ScrollHandDrag);
+ setScene(&m_scene);
}
-bool SimpleImageView::setSource(const QString &path)
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::initialize
+/// \param w メインウィンドウオブジェクト
+///
+/// 初期化処理を行います。
+///
+void SimpleImageView::initialize(MainWindow *w)
{
- QPixmap pixmap(path);
- if (pixmap.isNull()) {
- return false;
- }
+ connect(this, SIGNAL(statusChanged(QString)), w, SLOT(view_statusChanged(QString)));
+ installEventFilter(w);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::setSource
+/// \param pixmap
+///
+void SimpleImageView::setSource(const QPixmap &pixmap)
+{
+ qDebug() << "SimpleImageView::setSource()";
m_imgSrc = pixmap;
m_rotateDeg = 0;
- m_scaleFactor = 0;
- m_fitToWindow->blockSignals(true);
- m_fitToWindow->setChecked(true);
- m_fitToWindow->blockSignals(false);
+ m_scaleFactor = -1;
- QGraphicsScene *scene = new QGraphicsScene(this);
- scene->addPixmap(pixmap);
- setScene(scene);
resizeImage();
-
- return true;
}
-void SimpleImageView::changeScale(bool up)
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::scaleFactor
+/// \return 倍率を返します。
+///
+double SimpleImageView::scaleFactor()
{
- if (up) {
- scaleUp();
+ // すでに倍率が指定されている場合は、そのまま。
+ if (m_scaleFactor > 0) {
+ return m_scaleFactor;
}
- else {
- scaleDown();
- }
-}
-double SimpleImageView::scaleFactor(const QSize &size)
-{
- double scaleFactor;
- if (m_scaleFactor == 0) {
- double scaleX, scaleY;
- if (m_rotateDeg == 90 || m_rotateDeg == 270) {
- scaleX = 1.0 * size.width() / m_imgSrc.height();
- scaleY = 1.0 * size.height() / m_imgSrc.width();
- }
- else {
- scaleX = 1.0 * size.width() / m_imgSrc.width();
- scaleY = 1.0 * size.height() / m_imgSrc.height();
- }
- scaleFactor = (scaleX > scaleY) ? scaleY : scaleX;
+ // ビューポートに対する適切な倍率を計算する
+ double scaleFactor, scaleX, scaleY;
+ if (m_rotateDeg == 90 || m_rotateDeg == 270) {
+ scaleX = 1.0 * viewport()->width() / m_imgSrc.height();
+ scaleY = 1.0 * viewport()->height() / m_imgSrc.width();
}
else {
- scaleFactor = m_scaleFactor;
+ scaleX = 1.0 * viewport()->width() / m_imgSrc.width();
+ scaleY = 1.0 * viewport()->height() / m_imgSrc.height();
+ }
+ scaleFactor = (scaleX > scaleY) ? scaleY : scaleX;
+
+ // 縮小もしくは等倍の場合
+ if (m_scaleFactor == -1) {
+ return (scaleFactor > 1) ? 1 : scaleFactor;
}
return scaleFactor;
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::sizeChanged
+///
+/// サイズ変更後の処理を行います。
+///
void SimpleImageView::sizeChanged()
{
QString str;
.arg(m_imgSrc.width())
.arg(m_imgSrc.height())
.arg(m_imgSrc.depth())
- .arg(int(scaleFactor(viewport()->size()) * 100));
- emit fileInfo(str);
+ .arg(int(scaleFactor() * 100));
+ emit statusChanged(str);
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::resizeImage
+/// \return 倍率
+///
+/// イメージの拡大・縮小と回転を行います。
+///
double SimpleImageView::resizeImage()
{
- if (m_imgSrc.isNull()) {
- return 1;
- }
-
- double scaleFactor = this->scaleFactor(viewport()->size());
- m_rotateDeg %= 360;
-
+ double scaleFactor = this->scaleFactor();
+ QPixmap scaledImg = m_imgSrc.scaled(scaleFactor * m_imgSrc.width(),
+ scaleFactor * m_imgSrc.height(),
+ Qt::IgnoreAspectRatio,
+ Qt::SmoothTransformation);
+ this->scene()->clear();
+ this->scene()->addPixmap(scaledImg);
+ this->setSceneRect(scaledImg.rect());
this->setTransform(QTransform());
this->translate(width() / 2, height() / 2);
this->rotate(m_rotateDeg);
- this->scale(scaleFactor, scaleFactor);
sizeChanged();
return scaleFactor;
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::fitToWindow
+/// \param checked メニューのチェック状態
+///
+/// ウィンドウへのフィットを切り替えます。
+///
void SimpleImageView::fitToWindow(bool checked)
{
if (checked) {
if (!checked) {
m_scaleFactor = scaleFactor;
}
-
- sizeChanged();
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::scaleNormal
+///
+/// 等倍で表示します。
+///
void SimpleImageView::scaleNormal()
{
m_scaleFactor = 1;
resizeImage();
-
- m_fitToWindow->blockSignals(true);
- m_fitToWindow->setChecked(false);
- m_fitToWindow->blockSignals(false);
-}
-
-void SimpleImageView::scaleUp()
-{
- m_scaleFactor = scaleFactor(viewport()->size()) * 1.25;
- resizeImage();
-
- m_fitToWindow->blockSignals(true);
- m_fitToWindow->setChecked(false);
- m_fitToWindow->blockSignals(false);
-}
-
-void SimpleImageView::scaleDown()
-{
- m_scaleFactor = scaleFactor(viewport()->size()) * 0.8;
- resizeImage();
-
- m_fitToWindow->blockSignals(true);
- m_fitToWindow->setChecked(false);
- m_fitToWindow->blockSignals(false);
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::rotate90
+///
+/// 右に90度回転します。
+///
void SimpleImageView::rotate90()
{
m_rotateDeg += 90;
+ m_rotateDeg %= 360;
resizeImage();
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::rotate180
+///
+/// 180度回転します。
+///
void SimpleImageView::rotate180()
{
m_rotateDeg += 180;
+ m_rotateDeg %= 360;
resizeImage();
}
-void SimpleImageView::keyPressEvent(QKeyEvent *event)
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::resizeEvent
+/// \param event
+///
+void SimpleImageView::resizeEvent(QResizeEvent *event)
{
- qDebug() << "SimpleImageView::keyPressEvent();";
-
- QString ksq = KeyEventToSequence(event);
-
- if (ProcessShortcut(ksq, this)) {
- event->accept();
- return;
- }
-
- QGraphicsView::keyReleaseEvent(event);
- if (IsKeyUpDown(event)) {
- event->accept();
- return;
- }
-
- // MainWindowへ
- event->ignore();
+ resizeImage();
+ QGraphicsView::resizeEvent(event);
}
-void SimpleImageView::contextMenuEvent(QContextMenuEvent *event)
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::scaleUp
+///
+void SimpleImageView::scaleUp()
{
- qDebug() << "SimpleImageView::contextMenuEvent();";
-
- QMenu menu(this);
- menu.addAction(m_fitToWindow);
- menu.addAction(m_scaleUp);
- menu.addAction(m_scaleDown);
- menu.addAction(m_scaleNormal);
- menu.addSeparator();
- menu.addAction(m_rot90);
- menu.addAction(m_rot180);
- menu.addSeparator();
- menu.addAction(m_back);
- menu.exec(event->globalPos());
+ m_scaleFactor = scaleFactor() * 1.25;
+ resizeImage();
}
-void SimpleImageView::resizeEvent(QResizeEvent *event)
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleImageView::scaleDown
+///
+void SimpleImageView::scaleDown()
{
+ m_scaleFactor = scaleFactor() * 0.8;
resizeImage();
- QGraphicsView::resizeEvent(event);
}
#ifndef SIMPLEIMAGEVIEW_H
#define SIMPLEIMAGEVIEW_H
+#include "abstractview.h"
+
#include <QGraphicsView>
-class SimpleImageView : public QGraphicsView
+class MainWindow;
+
+class SimpleImageView : public QGraphicsView, public AbstractView
{
Q_OBJECT
public:
explicit SimpleImageView(QWidget *parent = 0);
- bool setSource(const QString &path);
-
- void changeScale(bool up);
+ void initialize(MainWindow *w);
+ void setSource(const QPixmap &pixmap);
private:
- QAction *m_back;
- QAction *m_fitToWindow;
- QAction *m_scaleUp;
- QAction *m_scaleDown;
- QAction *m_scaleNormal;
- QAction *m_rot90;
- QAction *m_rot180;
- QPixmap m_imgSrc;
- double m_scaleFactor;
- int m_rotateDeg;
+ QPixmap m_imgSrc;
+ QGraphicsScene m_scene;
+ double m_scaleFactor;
+ int m_rotateDeg;
private:
- double scaleFactor(const QSize &size);
- void updateActions();
- void sizeChanged();
- double resizeImage();
+ double scaleFactor();
+ void sizeChanged();
+ double resizeImage();
signals:
- void viewFinished();
- void fileInfo(const QString &info);
+ void statusChanged(const QString &info);
-private slots:
- void fitToWindow(bool checked);
- void scaleNormal();
- void scaleUp();
- void scaleDown();
- void rotate90();
- void rotate180();
+public slots:
+ void fitToWindow(bool checked);
+ void scaleNormal();
+ void rotate90();
+ void rotate180();
// QWidget interface
protected:
- void keyPressEvent(QKeyEvent *event);
- void contextMenuEvent(QContextMenuEvent *event);
void resizeEvent(QResizeEvent *event);
+
+ // AbstractView interface
+public slots:
+ void scaleUp();
+ void scaleDown();
};
#endif // SIMPLEIMAGEVIEW_H
-#include "common.h"
-#include "simpletextview.h"
#include "mainwindow.h"
+#include "preferences.h"
+#include "simpletextview.h"
#include <QDebug>
#include <QMenu>
#include <QApplication>
///////////////////////////////////////////////////////////////////////////////
-/// \brief KeyEventToSequence
-/// \param event キーイベントオブジェクト
-/// \return キーシーケンスの文字列(Ctrl+C等)
+/// \brief SimpleTextView::SimpleTextView
+/// \param parent 親ウィジェット
///
-/// ã\82ã\83¼ã\82¤ã\83\99ã\83³ã\83\88ã\81§æ\8a¼ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\82ã\83¼ã\82\92ã\82ã\83¼ã\82·ã\83¼ã\82±ã\83³ã\82¹æ\96\87å\97å\88\97ã\81«å¤\89æ\8f\9bã\81\97ã\81¾ã\81\99
+/// ã\82³ã\83³ã\82¹ã\83\88ã\83©ã\82¯ã\82¿
///
-QString KeyEventToSequence(const QKeyEvent *event)
+SimpleTextView::SimpleTextView(QWidget *parent) :
+ QPlainTextEdit(parent),
+ AbstractView(),
+ m_source()
{
- QString modifier = QString::null;
-
- if (event->modifiers() & Qt::ShiftModifier) { modifier += "Shift+"; }
- if (event->modifiers() & Qt::ControlModifier) { modifier += "Ctrl+"; }
- if (event->modifiers() & Qt::AltModifier) { modifier += "Alt+"; }
- if (event->modifiers() & Qt::MetaModifier) { modifier += "Meta+"; }
-
- QString key = QKeySequence(event->key()).toString();
-
- return modifier + key;
+ setReadOnly(true);
+ setContextMenuPolicy(Qt::NoContextMenu);
}
///////////////////////////////////////////////////////////////////////////////
-/// \brief IsKeyUpDown
-/// \param event キーイベントオブジェクト
-/// \return (Up/Down/Home/End)+(!Shift)の場合true
+/// \brief SimpleTextView::initialize
+/// \param w メインウィンドウオブジェクト
///
-/// カーソル移動系のキーが押されたかを判定します
+/// 初期化処理を行います。
///
-bool IsKeyUpDown(const QKeyEvent *event)
-{
- QString ksq = KeyEventToSequence(event);
-
- switch (event->key()) {
- case Qt::Key_Up:
- case Qt::Key_Down:
- case Qt::Key_Home:
- case Qt::Key_End:
- if (event->modifiers() & Qt::ShiftModifier) {
- return false;
- }
- else {
- return true;
- }
- }
- return false;
-}
-
-SimpleTextView::SimpleTextView(QWidget *parent) :
- QPlainTextEdit(parent),
- m_convEUC(NULL),
- m_convJIS(NULL),
- m_convSJIS(NULL),
- m_convUTF8(NULL),
- m_convUTF16BE(NULL),
- m_convUTF16LE(NULL),
- m_copy(NULL),
- m_back(NULL)
+void SimpleTextView::initialize(MainWindow *w)
{
- setReadOnly(true);
- updateAppearance();
-
- setContextMenuPolicy(Qt::DefaultContextMenu);
- m_convEUC = new QAction(tr("EUC-JPで再読込"), this);
- m_convJIS = new QAction(tr("ISO 2022-JP(JIS)で再読込"), this);
- m_convSJIS = new QAction(tr("Shift-JISで再読込"), this);
- m_convUTF8 = new QAction(tr("UTF-8で再読込"), this);
- m_convUTF16 = new QAction(tr("UTF-16で再読込"), this);
- m_convUTF16BE = new QAction(tr("UTF-16BEで再読込"), this);
- m_convUTF16LE = new QAction(tr("UTF-16LEで再読込"), this);
- m_copy = new QAction(tr("選択範囲をクリップボードにコピー"), this);
- m_back = new QAction(tr("戻る"), this);
-
- m_convEUC->setObjectName("convertFromEUC");
- m_convJIS->setObjectName("convertFromJIS");
- m_convSJIS->setObjectName("convertFromSJIS");
- m_convUTF8->setObjectName("convertFromUTF8");
- m_convUTF16->setObjectName("convertFromUTF16");
- m_convUTF16BE->setObjectName("convertFromUTF16BE");
- m_convUTF16LE->setObjectName("convertFromUTF16LE");
- m_copy->setObjectName("copy");
- m_back->setObjectName("back");
+ qDebug() << "SimpleTextView::initialize()";
- m_convEUC->setShortcut(QKeySequence("Ctrl+E"));
- m_convJIS->setShortcut(QKeySequence("Ctrl+J"));
- m_convSJIS->setShortcut(QKeySequence("Ctrl+S"));
- m_convUTF8->setShortcut(QKeySequence("Ctrl+U"));
- m_convUTF16->setShortcut(QKeySequence("Ctrl+I"));
- m_convUTF16BE->setShortcut(QKeySequence("Ctrl+O"));
- m_convUTF16LE->setShortcut(QKeySequence("Ctrl+P"));
- m_copy->setShortcut(QKeySequence::Copy);
+ connect(this, SIGNAL(statusChanged(QString)), w, SLOT(view_statusChanged(QString)));
+ connect(this, SIGNAL(copyAvailable(bool)), w, SLOT(view_copyAvailable(bool)));
- QList<QKeySequence> shortcuts;
- shortcuts << QKeySequence("Return");
- shortcuts << QKeySequence("Backspace");
- m_back->setShortcuts(shortcuts);
-
- connect(m_convEUC, SIGNAL(triggered()), this, SLOT(convertFromEUC()));
- connect(m_convJIS, SIGNAL(triggered()), this, SLOT(convertFromJIS()));
- connect(m_convSJIS, SIGNAL(triggered()), this, SLOT(convertFromSJIS()));
- connect(m_convUTF8, SIGNAL(triggered()), this, SLOT(convertFromUTF8()));
- connect(m_convUTF16, SIGNAL(triggered()), this, SLOT(convertFromUTF16()));
- connect(m_convUTF16BE, SIGNAL(triggered()), this, SLOT(convertFromUTF16BE()));
- connect(m_convUTF16LE, SIGNAL(triggered()), this, SLOT(convertFromUTF16LE()));
- connect(m_copy, SIGNAL(triggered()), this, SLOT(copy()));
- connect(m_back, SIGNAL(triggered()), this, SLOT(back()));
-
- connect(this, SIGNAL(copyAvailable(bool)), this, SLOT(onCopyAvailable(bool)));
-
- m_copy->setEnabled(false);
+ installEventFilter(w);
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleTextView::setSource
+/// \param source 表示するデータ
+///
+/// データを表示します。
+///
void SimpleTextView::setSource(const QByteArray &source)
{
+ qDebug() << "SimpleTextView::setSource()" << source.size();
+
m_source = source;
if (m_source.size() == 0) {
setPlainText("");
- emit fileInfo("");
+ emit statusChanged("");
return;
}
setPlainText(codec->toUnicode(m_source));
- emit fileInfo(code.c_str());
-}
-
-void SimpleTextView::updateAppearance()
-{
- QSettings settings;
-
- QPalette pal = this->palette();
- if (settings.value(IniKey_ViewerInherit).toBool()) {
- pal.setColor(QPalette::Base,
- settings.value(IniKey_ViewColorBgNormal).value<QColor>());
- pal.setColor(QPalette::Text,
- settings.value(IniKey_ViewColorFgNormal).value<QColor>());
- }
- else {
- pal.setColor(QPalette::Base,
- settings.value(IniKey_ViewerColorBg).value<QColor>());
- pal.setColor(QPalette::Text,
- settings.value(IniKey_ViewerColorFg).value<QColor>());
- }
- setPalette(pal);
- setFont(settings.value(IniKey_ViewerFont).value<QFont>());
+ emit statusChanged(code.c_str());
}
void SimpleTextView::convertFromEUC()
{
QTextCodec *codec = QTextCodec::codecForName("EUC-JP");
setPlainText(codec->toUnicode(m_source));
- emit fileInfo("EUC-JP");
+ emit statusChanged("EUC-JP");
}
void SimpleTextView::convertFromJIS()
{
QTextCodec *codec = QTextCodec::codecForName("ISO 2022-JP");
setPlainText(codec->toUnicode(m_source));
- emit fileInfo("ISO 2022-JP");
+ emit statusChanged("ISO 2022-JP");
}
void SimpleTextView::convertFromSJIS()
{
QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
setPlainText(codec->toUnicode(m_source));
- emit fileInfo("Shift-JIS");
+ emit statusChanged("Shift-JIS");
}
void SimpleTextView::convertFromUTF8()
{
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
setPlainText(codec->toUnicode(m_source));
- emit fileInfo("UTF-8");
+ emit statusChanged("UTF-8");
}
void SimpleTextView::convertFromUTF16()
{
QTextCodec *codec = QTextCodec::codecForName("UTF-16");
setPlainText(codec->toUnicode(m_source));
- emit fileInfo("UTF-16");
+ emit statusChanged("UTF-16");
}
void SimpleTextView::convertFromUTF16BE()
{
QTextCodec *codec = QTextCodec::codecForName("UTF-16BE");
setPlainText(codec->toUnicode(m_source));
- emit fileInfo("UTF-16BE");
+ emit statusChanged("UTF-16BE");
}
void SimpleTextView::convertFromUTF16LE()
{
QTextCodec *codec = QTextCodec::codecForName("UTF-16LE");
setPlainText(codec->toUnicode(m_source));
- emit fileInfo("UTF-16LE");
-}
-
-void SimpleTextView::onCopyAvailable(bool yes)
-{
- m_copy->setEnabled(yes);
-}
-
-void SimpleTextView::back()
-{
- emit viewFinished();
-}
-
-void SimpleTextView::keyPressEvent(QKeyEvent *event)
-{
- QString ksq = KeyEventToSequence(event);
-
- if (ProcessShortcut(ksq, this)) {
- event->accept();
- return;
- }
-
- QPlainTextEdit::keyPressEvent(event);
- if (IsKeyUpDown(event)) {
- event->accept();
- return;
- }
-
- // MainWindowへ
- event->ignore();
-}
-
-
-void SimpleTextView::contextMenuEvent(QContextMenuEvent *event)
-{
- qDebug() << "SimpleTextView::contextMenuEvent();";
-
- QMenu menu(this);
- menu.addAction(m_convEUC);
- menu.addAction(m_convJIS);
- menu.addAction(m_convSJIS);
- menu.addAction(m_convUTF8);
- menu.addAction(m_convUTF16BE);
- menu.addAction(m_convUTF16LE);
- menu.addSeparator();
- menu.addAction(m_copy);
- menu.addSeparator();
- menu.addAction(m_back);
- menu.exec(event->globalPos());
+ emit statusChanged("UTF-16LE");
}
// http://dobon.net/vb/dotnet/string/detectcode.html より拝借
return "UTF-8";
#endif
}
+
+
+void SimpleTextView::scaleUp()
+{
+ qDebug() << "SimpleTextView::scaleUp()";
+
+ Preferences prefs(this);
+ QFont font = prefs.getTextViewFont();
+ font.setPointSize(font.pointSize() + 1);
+ prefs.setTextViewFont(font);
+}
+
+void SimpleTextView::scaleDown()
+{
+ qDebug() << "SimpleTextView::scaleDown()";
+
+ Preferences prefs(this);
+ QFont font = prefs.getTextViewFont();
+ font.setPointSize(font.pointSize() - 1);
+ prefs.setTextViewFont(font);
+}
#ifndef SIMPLETEXTVIEW_H
#define SIMPLETEXTVIEW_H
+#include "abstractview.h"
+
#include <QPlainTextEdit>
-class SimpleTextView : public QPlainTextEdit
+class MainWindow;
+
+class SimpleTextView : public QPlainTextEdit, public AbstractView
{
Q_OBJECT
public:
explicit SimpleTextView(QWidget *parent = 0);
- void setSource(const QByteArray &source);
- void updateAppearance();
+ void initialize(MainWindow *w);
+ void setSource(const QByteArray &source);
private:
- QAction *m_convEUC;
- QAction *m_convJIS;
- QAction *m_convSJIS;
- QAction *m_convUTF8;
- QAction *m_convUTF16;
- QAction *m_convUTF16BE;
- QAction *m_convUTF16LE;
- QAction *m_copy;
- QAction *m_back;
QByteArray m_source;
- std::string detectCode(const QByteArray &bytes);
+ static std::string detectCode(const QByteArray &bytes);
signals:
- void viewFinished();
- void fileInfo(const QString &info);
+ void statusChanged(const QString &info);
public slots:
-
-private slots:
- void convertFromEUC();
- void convertFromJIS();
- void convertFromSJIS();
- void convertFromUTF8();
- void convertFromUTF16();
- void convertFromUTF16BE();
- void convertFromUTF16LE();
- void onCopyAvailable(bool yes);
- void back();
-
- // QWidget interface
-protected:
- void keyPressEvent(QKeyEvent *event);
- void contextMenuEvent(QContextMenuEvent *event);
+ void convertFromEUC();
+ void convertFromJIS();
+ void convertFromSJIS();
+ void convertFromUTF8();
+ void convertFromUTF16();
+ void convertFromUTF16BE();
+ void convertFromUTF16LE();
+
+ // AbstractView interface
+public:
+ void scaleUp();
+ void scaleDown();
};
#endif // SIMPLETEXTVIEW_H
-#include "common.h"\r
+#include "foldermodel.h"\r
#include "sortdialog.h"\r
#include "ui_sortdialog.h"\r
-#include <QSettings>\r
-#include <QDir>\r
\r
SortDialog::SortDialog(QWidget *parent) :\r
QDialog(parent),\r
ui(new Ui::SortDialog),\r
- m_RightOrLeft()\r
+ m_model(NULL)\r
{\r
ui->setupUi(this);\r
}\r
delete ui;\r
}\r
\r
-void SortDialog::setRightOrLeft(const QString &s)\r
+void SortDialog::setModel(FolderModel *m)\r
{\r
- QSettings settings;\r
+ m_model = m;\r
+ QDir::SortFlags sort = m->sorting();\r
\r
- m_RightOrLeft = s;\r
- int sortBy = settings.value(m_RightOrLeft + slash + IniKey_SortBy).toInt();\r
- if (sortBy == SortByType) {\r
- ui->sortByType->setChecked(true);\r
+ if (sort & QDir::Time) {\r
+ ui->sortByDate->setChecked(true);\r
+ if (sort & QDir::Reversed)\r
+ ui->orderAsc->setChecked(true);\r
}\r
- else if (sortBy == SortBySize) {\r
+ else if (sort & QDir::Size) {\r
ui->sortBySize->setChecked(true);\r
+ if (sort & QDir::Reversed)\r
+ ui->orderAsc->setChecked(true);\r
}\r
- else if (sortBy == SortByDate) {\r
- ui->sortByDate->setChecked(true);\r
+ else if (sort & QDir::Type) {\r
+ ui->sortByType->setChecked(true);\r
+ if (sort & QDir::Reversed)\r
+ ui->orderDesc->setChecked(true);\r
}\r
else {\r
ui->sortByName->setChecked(true);\r
+ if (sort & QDir::Reversed)\r
+ ui->orderDesc->setChecked(true);\r
}\r
\r
- int orderBy = settings.value(m_RightOrLeft + slash + IniKey_OrderBy).toInt();\r
- if (orderBy == OrderByDesc) {\r
- ui->orderDesc->setChecked(true);\r
- }\r
- else {\r
- ui->orderAsc->setChecked(true);\r
- }\r
-\r
- int putDirs = settings.value(m_RightOrLeft + slash + IniKey_PutDirs).toInt();\r
- if (putDirs == PutDirsDefault) {\r
- ui->dirsDefault->setChecked(true);\r
+ if (sort & QDir::DirsFirst) {\r
+ ui->dirsFirst->setChecked(true);\r
}\r
- else if (putDirs == PutDirsLast) {\r
+ else if (sort & QDir::DirsLast) {\r
ui->dirsLast->setChecked(true);\r
}\r
else {\r
- ui->dirsFirst->setChecked(true);\r
+ ui->dirsLast->setChecked(true);\r
}\r
\r
- bool ignoreCase = settings.value(m_RightOrLeft + slash + IniKey_IgnoreCase).toBool();\r
- ui->ignoreCase->setChecked(ignoreCase);\r
+ if (sort & QDir::IgnoreCase)\r
+ ui->ignoreCase->setChecked(true);\r
}\r
\r
+\r
void SortDialog::accept()\r
{\r
- QSettings settings;\r
+ QDir::SortFlags sort;\r
\r
- QString key = m_RightOrLeft + slash + IniKey_SortBy;\r
if (ui->sortByDate->isChecked()) {\r
- settings.setValue(key, SortByDate);\r
- }\r
- else if (ui->sortByName->isChecked()) {\r
- settings.setValue(key, SortByName);\r
+ sort |= QDir::Time;\r
+ if (ui->orderAsc->isChecked())\r
+ sort |= QDir::Reversed;\r
}\r
else if (ui->sortBySize->isChecked()) {\r
- settings.setValue(key, SortBySize);\r
+ sort |= QDir::Size;\r
+ if (ui->orderAsc->isChecked())\r
+ sort |= QDir::Reversed;\r
}\r
- else {\r
- settings.setValue(key, SortByType);\r
- }\r
-\r
- key = m_RightOrLeft + slash + IniKey_OrderBy;\r
- if (ui->orderAsc->isChecked()) {\r
- settings.setValue(key, OrderByAsc);\r
+ else if (ui->sortByType->isChecked()) {\r
+ sort |= QDir::Type;\r
+ if (ui->orderDesc->isChecked())\r
+ sort |= QDir::Reversed;\r
}\r
else {\r
- settings.setValue(key, OrderByDesc);\r
+ sort |= QDir::Name;\r
+ if (ui->orderDesc->isChecked())\r
+ sort |= QDir::Reversed;\r
}\r
\r
- key = m_RightOrLeft + slash + IniKey_PutDirs;\r
- if (ui->dirsDefault->isChecked()) {\r
- settings.setValue(key, PutDirsDefault);\r
- }\r
- else if (ui->dirsFirst->isChecked()) {\r
- settings.setValue(key, PutDirsFirst);\r
+ if (ui->dirsFirst->isChecked()) {\r
+ sort |= QDir::DirsFirst;\r
}\r
- else {\r
- settings.setValue(key, PutDirsLast);\r
+ else if (ui->dirsLast->isChecked()) {\r
+ sort |= QDir::DirsLast;\r
}\r
\r
- key = m_RightOrLeft + slash + IniKey_IgnoreCase;\r
- settings.setValue(key, ui->ignoreCase->isChecked());\r
+ if (ui->ignoreCase->isChecked())\r
+ sort |= QDir::IgnoreCase;\r
+\r
+ m_model->setSorting(sort);\r
+ m_model->refresh();\r
\r
QDialog::accept();\r
}\r
#define SORTDIALOG_H\r
\r
#include <QDialog>\r
+class FolderModel;\r
\r
namespace Ui {\r
class SortDialog;\r
explicit SortDialog(QWidget *parent = 0);\r
~SortDialog();\r
\r
- void setRightOrLeft(const QString &s);\r
+ void setModel(FolderModel *m);\r
\r
protected:\r
void accept();\r
\r
private:\r
Ui::SortDialog *ui;\r
- QString m_RightOrLeft;\r
+ FolderModel *m_model;\r
};\r
\r
#endif // SORTDIALOG_H\r
--- /dev/null
+#include "foldermodel.h"
+#include "thumbnaildelegate.h"
+
+#include <QApplication>
+#include <QDebug>
+#include <QPainter>
+#include <QStylePainter>
+
+ThumbnailDelegate::ThumbnailDelegate(QObject *parent) :
+ QStyledItemDelegate(parent),
+ m_pixmapCache()
+{
+}
+
+void ThumbnailDelegate::model_Reset()
+{
+ m_pixmapCache.clear();
+}
+
+void ThumbnailDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ const FolderModel *model = static_cast<const FolderModel*>(index.model());
+ bool checked = model->data(index, Qt::CheckStateRole).toInt() == Qt::Checked;
+
+ // マーク
+ if (checked) {
+ painter->fillRect(option.rect, model->data(index, Qt::BackgroundRole).value<QBrush>());
+ }
+ // ハイライト
+ if (option.state & QStyle::State_Selected) {
+ painter->fillRect(option.rect, option.palette.highlight());
+ }
+
+ // ファイル名
+ QFont font = model->data(index, Qt::FontRole).value<QFont>();
+ QFontMetrics fm(font);
+ QSize padding(20, fm.height());
+ QRect rc(option.rect);
+ rc.setLeft(rc.left() + padding.width());
+ QString name = fm.elidedText(model->fileName(index), Qt::ElideMiddle, rc.width());
+ painter->setFont(font);
+ painter->setPen(model->data(index, Qt::ForegroundRole).value<QBrush>().color());
+ painter->drawText(rc, name, Qt::AlignCenter | Qt::AlignBottom);
+
+ // チェックボックス
+ if (model->flags(index) & Qt::ItemIsUserCheckable) {
+ QStyleOptionButton optBtn;
+ optBtn.rect = option.rect;
+ optBtn.state = option.state;
+ if (checked)
+ optBtn.state |= QStyle::State_On;
+ qApp->style()->drawControl(QStyle::CE_CheckBox, &optBtn, painter);
+ }
+
+ // アイコンまたは画像
+ QSize size(option.rect.size());
+ size -= padding;
+ if (m_pixmapCache.find(model->fileName(index)) == m_pixmapCache.end()) {
+ QPixmap pixmap(model->filePath(index));
+ if (pixmap.isNull()) {
+ pixmap = model->fileIcon(index).pixmap(32, 32);
+ }
+ if (pixmap.width() > size.width() || pixmap.height() > size.height()) {
+ double scaleX = 1.0 * size.width() / pixmap.width();
+ double scaleY = 1.0 * size.height() / pixmap.height();
+ double scaleFactor = (scaleX > scaleY) ? scaleY : scaleX;
+ pixmap = pixmap.scaled(pixmap.size() * scaleFactor,
+ Qt::IgnoreAspectRatio,
+ Qt::SmoothTransformation);
+ }
+ const_cast<ThumbnailDelegate*>(this)->m_pixmapCache[model->fileName(index)] = pixmap;
+ }
+ const QPixmap &pixmap = m_pixmapCache[model->fileName(index)];
+
+ painter->drawPixmap(padding.width() + option.rect.left() + (size.width() - pixmap.width()) / 2,
+ option.rect.top() + (size.height() - pixmap.height()) / 2,
+ pixmap);
+
+ //QStyledItemDelegate::paint(painter, option, index);
+}
+
+QSize ThumbnailDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ Q_UNUSED(option);
+
+ const FolderModel *model = static_cast<const FolderModel*>(index.model());
+ int pointSize = model->data(index, Qt::FontRole).value<QFont>().pointSize();
+
+ return QSize(pointSize * 10, pointSize * 10 * 11 / 16);
+}
--- /dev/null
+#ifndef THUMBNAILDELEGATE_H
+#define THUMBNAILDELEGATE_H
+
+#include <QStyledItemDelegate>
+
+class ThumbnailDelegate : public QStyledItemDelegate
+{
+ Q_OBJECT
+public:
+ explicit ThumbnailDelegate(QObject *parent = 0);
+
+private:
+ typedef QMap<QString, QPixmap> ImageMap;
+ ImageMap m_pixmapCache;
+
+signals:
+
+public slots:
+ void model_Reset();
+
+ // QAbstractItemDelegate interface
+public:
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+};
+
+#endif // THUMBNAILDELEGATE_H
--- /dev/null
+#include "mainwindow.h"
+#include "thumbnaildelegate.h"
+#include "thumbnailview.h"
+
+#include <QDebug>
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief ThumbnailView::ThumbnailView
+/// \param parent 親ウィジェット
+///
+/// コンストラクタ
+///
+ThumbnailView::ThumbnailView(QWidget *parent) :
+ QListView(parent)
+{
+ setItemDelegate(new ThumbnailDelegate(this));
+ setSpacing(12);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief ThumbnailView::initialize
+/// \param w メインウィンドウオブジェクト
+///
+/// 初期化処理を行います。
+///
+void ThumbnailView::initialize(MainWindow *w)
+{
+ qDebug() << "ThumbnailView::initialize()";
+
+ connect(this, SIGNAL(doubleClicked(QModelIndex)), w, SLOT(onOpen(QModelIndex)));
+ connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ w, SLOT(view_currentChanged(QModelIndex,QModelIndex)));
+
+ installEventFilter(w);
+ viewport()->installEventFilter(w);
+}
+
+void ThumbnailView::scaleUp()
+{
+ // TODO
+}
+
+void ThumbnailView::scaleDown()
+{
+ // TODO
+}
+
+void ThumbnailView::setModel(QAbstractItemModel *model)
+{
+ ThumbnailDelegate *delegate = static_cast<ThumbnailDelegate*>(itemDelegate());
+ if (this->model()) {
+ this->model()->disconnect(delegate);
+ }
+
+ QListView::setModel(model);
+
+ if (this->model()) {
+ connect(this->model(), SIGNAL(modelReset()), delegate, SLOT(model_Reset()));
+ }
+}
+
--- /dev/null
+#ifndef THUMBNAILVIEW_H
+#define THUMBNAILVIEW_H
+
+#include "abstractview.h"
+
+#include <QListView>
+
+class MainWindow;
+
+class ThumbnailView : public QListView, public AbstractView
+{
+ Q_OBJECT
+public:
+ explicit ThumbnailView(QWidget *parent = 0);
+
+ void initialize(MainWindow *w);
+
+signals:
+
+public slots:
+
+
+ // AbstractView interface
+public:
+ void scaleUp();
+ void scaleDown();
+
+ // QAbstractItemView interface
+public:
+ void setModel(QAbstractItemModel *model);
+
+};
+
+#endif // THUMBNAILVIEW_H
--- /dev/null
+//#define Q_OS_WIN
+
+#include "win32.h"
+
+#ifdef Q_OS_WIN
+ #include <windows.h>
+#endif
+
+bool Win32::hasSystemAttribute(const QString &path)
+{
+#ifdef Q_OS_WIN
+ DWORD dwFlags = ::GetFileAttributes(path.toStdWString().c_str());
+ if (dwFlags != DWORD(-1) &&
+ (dwFlags & FILE_ATTRIBUTE_SYSTEM) == FILE_ATTRIBUTE_SYSTEM)
+ {
+ return true;
+ }
+#else
+ Q_UNUSED(path);
+#endif
+ return false;
+}
--- /dev/null
+#ifndef WIN32_H
+#define WIN32_H
+
+#include <QString>
+
+namespace Win32 {
+
+bool hasSystemAttribute(const QString &path);
+
+}
+#endif // WIN32_H