OSDN Git Service

Ver 0.11pre
authorMasayuki Satoh <miyabi.satoh@gmail.com>
Mon, 25 Aug 2014 12:48:19 +0000 (21:48 +0900)
committerMasayuki Satoh <miyabi.satoh@gmail.com>
Mon, 25 Aug 2014 12:48:19 +0000 (21:48 +0900)
15 files changed:
ReadMe.txt [new file with mode: 0644]
clickablelabel.cpp [deleted file]
clickablelabel.h [deleted file]
filetableview.cpp [deleted file]
filetableview.h [deleted file]
folderpanel.cpp [deleted file]
folderpanel.h [deleted file]
folderpanel.ui [deleted file]
folderview.cpp [new file with mode: 0644]
folderview.h [new file with mode: 0644]
locationbox.cpp [new file with mode: 0644]
locationbox.h [new file with mode: 0644]
searchbox.cpp [new file with mode: 0644]
searchbox.h [new file with mode: 0644]
singleton.hpp [deleted file]

diff --git a/ReadMe.txt b/ReadMe.txt
new file mode 100644 (file)
index 0000000..e8ce75e
--- /dev/null
@@ -0,0 +1,179 @@
+===============================================================================
+    Gefu(げふぅ) - Gefu is an Experimental File Utility - 
+    Version 0.10
+===============================================================================
+                                                       2014/08/24 @miyabi_satoh
+
+◇ 概要 ◇
+
+ Gefu(げふぅ)は、クロスプラットフォームのGUIフレームワーク「Qt(キュート)」を
+ 使用して作成した2画面型のファイラー(ファイル管理ソフト)です。
+
+ キーボードだけ、あるいはマウスだけでほとんどの操作ができます。
+ (さすがにマウスだけで文字入力はできませんが…)
+
+◇ 動作確認済みOS ◇
+
+ Windows : Windows Vista Home Premium (SP2)
+           Windows 7 Enterprise (SP1)
+
+ Mac     : OS X 10.9.4
+
+◇ ファイル構成 ◇
+ Windows
+  - Gefu.exe            ... Gefu本体
+  - icudt52.dll         ... Qtライブラリ
+  - icuin52.dll         ...     〃
+  - icuuc52.dll         ...     〃
+  - libgcc_s_dw2-1.dll  ...     〃
+  - libstdc++-6.dll     ...     〃
+  - libwinpthread-1.dll ...     〃
+  - Qt5Core.dll         ...     〃
+  - Qt5Gui.dll          ...     〃
+  - Qt5Network.dll      ...     〃
+  - Qt5Widgets.dll      ...     〃
+
+ Mac
+  - Gefu.app            ... Gefu本体
+
+◇ インストール ◇
+ Windows
+  1. GefuXXX.zip をダウンロード、展開します。
+  2. Gefu_QtDLL.zip をダウンロード、展開します。
+  3. 展開された Gefu.exe とQtライブラリ(*.dll)を同じフォルダに格納します。
+
+ Mac
+  1. GefuXXX.app.zip をダウンロード、展開します。
+  2. 展開された Getu.app を適当なフォルダに格納します。
+
+◇ アップデート ◇
+ Windows
+  1. GefuXXX.zip をダウンロード、展開します。
+  2. Gefu.exe が起動している場合は、終了します。
+  3. 展開された Gefu.exe を、既存の Gefu.exe に上書きします。
+
+ Mac
+  1. GefuXXX.app.zip をダウンロード、展開します。
+  2. Gefu.app が起動している場合は、終了します。
+  3. 展開された Getu.app を、既存の Gefu.app に上書きします。
+
+◇ アンインストール ◇
+ Windows
+  1. Gefu.exe と Qtライブラリ(*.dll)を削除します。
+  2. 設定ファイルまで削除したい場合は、以下のファイルを削除します。
+     %APPDATA%¥miyabi¥Gefu.ini
+
+ Mac
+  1. Gefu.app を削除します。
+  2. 設定ファイルまで削除したい場合は、以下のファイルを削除します。
+     ~/.config/rakusaba.jp/Gefu.ini
+
+◇ 使い方 ◇
+ 基本的には、WindowsのエクスプローラやMacのFinderと同じ感覚で使ってください。
+ フォルダをダブルクリックすれば、フォルダを開きます。
+ ファイルをダブルクリックすれば、ファイルを開きます。
+ ドラッグ&ドロップすれば、コピーします。
+
+◇ 免責事項 ◇
+ - Gefu(げふぅ)はオープンソース・フリーソフトウェアです。
+   個人・法人に限らず、どなたでも自由にご使用ください。
+ - 著作権は @miyabi_satoh が保有します。
+ - Gefu(げふぅ)を利用したことによる損害には、一切の責任を負いません。
+   自己の責任の上でご利用ください。
+ - 配布・転載を行う場合は @miyabi_satoh までご連絡ください。
+   特に利益を生じる無断配布・無断転載は固く禁じます。
+
+◇ 連絡先 ◇
+ Web:     https://sourceforge.jp/projects/gefu/
+ Mail:    miyabi.satoh@gmail.com
+ Twitter: https://twitter.com/miyabi_satoh
+
+◇ 履歴 ◇
+#### 2014/08/24 Ver0.10
+- SourceForge.jp でプロジェクト公開。
+- 環境設定ダイアログの変更
+    - コントロールの活性・非活性切り替えを修正。
+    - フォント選択をダイアログ使用に変更。
+    - ファイルビューのサンプル表示を実際の形に変更。
+    - テキストビューアの設定を追加。
+- 安直な文字コード判別を実装
+    - BOMがあれば、それに従う。
+    - 先頭1KB中に文字コードを示す文字列("shift_jis"等)があれば、その文字コードに変換する。
+    - バイト単位で調べて推測(http://dobon.net/vb/dotnet/string/detectcode.html よりコードを拝借)
+
+#### 2014/08/24 Ver0.09
+- 左右矢印キーに機能割り当て
+    - 左ペインで左矢印/右ペインで右矢印 → 親フォルダに移動
+    - 左ペインで右矢印/右ペインで左矢印 → 反対側のペインにフォーカス
+- ファイル名をクリップボードにコピーを実装。
+- フォルダ名をクリップボードにコピーを実装。
+- 簡易テキストビューアをとりあえず実装。
+  → 次バージョンでオプション設定等
+- 不具合修正
+    - Windows版で初回起動時、タイトルバーが画面外に出ていた。
+      → デフォルト位置・サイズ変更。
+
+#### 2014/08/23 Ver0.08
+- 「ターミナルで開く」を実装。
+- Shift+ダブルクリックで、ファイルを外部エディタで開くようにした。
+- Ctrl+ダブルクリックで、フォルダをターミナルで開くようにした。
+- 「色とフォント」にインポート・エクスポート機能を追加。
+- マスク表示(フィルタ)機能を追加。
+- 最新バージョンのチェック機能を追加。
+- 不具合修正
+    - Windows版でドライブ直下のフォルダを開くと落ちるのを修正。
+
+#### 2014/08/23 Ver0.07
+- ダブルクリック時、ファイルは標準の関連付けで実行するようにした。
+- 設定項目追加。
+- 「外部エディタで開く」を実装。
+- 不具合修正
+    - 初期表示時にカーソルがハイライトされない問題を修正。
+
+#### 2014/08/22 Ver0.06
+- 外部および内部のドラッグ&ドロップ処理を実装。
+- 一部ダイアログのレイアウト、初期サイズを調整。
+- 不具合修正
+    - 同一ファイルに対する強制上書きが考慮されていなかった。
+      → 先・元が同一の場合はスキップするようにした。
+
+#### 2014/08/22 Ver0.05
+- 外部アプリケーションからのドロップ処理を実装。
+
+#### 2014/08/22 Ver0.04
+- 不具合修正
+    - ソート順でフォルダ位置が先頭以外の場合、".."もソートされていたのを修正。
+      (ソート方法によらず、".."は必ず先頭にした)
+    - 各ダイアログのフォーカス周りを修正。
+    - is "an" Experimental ... とか、バージョン情報ダイアログの修正。
+    - MacのDockにアイコンが正しく表示されていなかったのを修正。
+    - フォルダ内容変更による再読込時、カーソル位置が初期化されていたのを修正。
+- 「最新の情報に更新」を追加。
+
+#### 2014/08/21 Ver0.03
+- 環境設定ダイアログおよびオプションを実装。
+    - 終了時の確認ダイアログ。
+    - 起動時のウィンドウ位置・サイズ。
+    - 起動時に設定をリセット。
+    - 色とフォントの設定。
+
+#### 2014/08/20 Ver0.02
+- QTableWidget -> QTableView + Modelへ変更し高速化。
+- フォルダ履歴機能を実装。
+- 行の高さを調整。
+- マーク時の背景色、前景色を変更。
+- ウィンドウの位置・サイズを保存するようにした。
+
+#### 2014/08/18 Ver0.01
+- 名前変更ダイアログ(単一)のレイアウトを修正。
+- すべて選択等で、カーソル位置が変わらないようにした。
+- マークしているフォルダ数、ファイル数、合計ファイルサイズの表示を追加。
+- ファイルサイズを小数点第一位まで表示するようにした。
+- システム属性ファイルの表示/非表示機能を追加。
+- 名前ソートで大文字小文字を区別しないようにした。
+- ソート方法の選択機能を追加。
+
+#### 2014/08/18 Ver0.00
+- 新規作成。
+
+
diff --git a/clickablelabel.cpp b/clickablelabel.cpp
deleted file mode 100644 (file)
index 52442a8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "clickablelabel.h"
-
-ClickableLabel::ClickableLabel(QWidget *parent) :
-    QLabel(parent)
-{
-}
-
-
-void ClickableLabel::mouseReleaseEvent(QMouseEvent *)
-{
-    emit clicked();
-}
diff --git a/clickablelabel.h b/clickablelabel.h
deleted file mode 100644 (file)
index 81abe05..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef CLICKABLELABEL_H
-#define CLICKABLELABEL_H
-
-#include <QLabel>
-
-class ClickableLabel : public QLabel
-{
-    Q_OBJECT
-public:
-    explicit ClickableLabel(QWidget *parent = 0);
-
-signals:
-    void clicked();
-
-public slots:
-
-
-    // QWidget interface
-protected:
-    void mouseReleaseEvent(QMouseEvent *);
-};
-
-#endif // CLICKABLELABEL_H
diff --git a/filetableview.cpp b/filetableview.cpp
deleted file mode 100644 (file)
index 2b88e16..0000000
+++ /dev/null
@@ -1,1247 +0,0 @@
-#include "common.h"\r
-#include "copymoveworker.h"\r
-#include "deleteworker.h"\r
-#include "filetablemodel.h"\r
-#include "filetableview.h"\r
-#include "historydialog.h"\r
-#include "mainwindow.h"\r
-#include "operationdialog.h"\r
-#include "overwritedialog.h"\r
-#include "renamemultidialog.h"\r
-#include "renamesingledialog.h"\r
-#include "renameworker.h"\r
-#include "sortdialog.h"\r
-\r
-#include <QDebug>\r
-#include <QDesktopServices>\r
-#include <QInputDialog>\r
-#include <QMessageBox>\r
-#include <QProcess>\r
-#include <QUrl>\r
-#include <QAction>\r
-#include <QSettings>\r
-#include <QFileDialog>\r
-#include <QKeyEvent>\r
-#include <QStatusBar>\r
-#include <QMimeData>\r
-#include <QDrag>\r
-#include <QApplication>\r
-#include <QClipboard>\r
-#include <QShortcut>\r
-\r
-#define CHECK_FOCUS {                   \\r
-        if (!hasFocus()) { return; }    \\r
-    }\r
-\r
-#define MENU_TRRIGGERED(x) \\r
-    getMainWnd()->findChild<QAction*>(#x), SIGNAL(triggered())\r
-#define MENU_TOGGLED(x) \\r
-    getMainWnd()->findChild<QAction*>(#x), SIGNAL(toggled(bool))\r
-\r
-FileTableView::FileTableView(QWidget *parent) :\r
-    QTableView(parent),\r
-    m_side(),\r
-    m_history(),\r
-    m_dragStartPos(),\r
-    m_dragging(false)\r
-{\r
-    // シグナル/スロットを設定する\r
-    connect(MENU_TRRIGGERED(action_Open), this, SLOT(openItem()));\r
-    connect(MENU_TRRIGGERED(action_Exec), this, SLOT(openUrl()));\r
-    connect(MENU_TRRIGGERED(action_OpenEditor), this, SLOT(openEditor()));\r
-    connect(MENU_TRRIGGERED(action_OpenTerminal), this, SLOT(openTerminal()));\r
-    connect(MENU_TRRIGGERED(action_Command), this, SLOT(kickProcess()));\r
-\r
-    connect(MENU_TRRIGGERED(mark_Toggle), this, SLOT(toggleChecked()));\r
-    connect(MENU_TRRIGGERED(mark_All), this, SLOT(checkAllItems()));\r
-    connect(MENU_TRRIGGERED(mark_AllFiles), this, SLOT(checkAllFiles()));\r
-    connect(MENU_TRRIGGERED(mark_AllOff), this, SLOT(uncheckAllItems()));\r
-    connect(MENU_TRRIGGERED(mark_Invert), this, SLOT(invertAllChecked()));\r
-\r
-    connect(MENU_TRRIGGERED(view_FromOther), this, SLOT(setPathFromOther()));\r
-    connect(MENU_TRRIGGERED(view_ToOther), this, SLOT(setPathToOther()));\r
-    connect(MENU_TRRIGGERED(view_Swap), this, SLOT(swapPath()));\r
-    connect(MENU_TRRIGGERED(view_Sort), this, SLOT(setSort()));\r
-    connect(MENU_TRRIGGERED(view_Refresh), this, SLOT(refresh()));\r
-    connect(MENU_TRRIGGERED(view_Filter), this, SLOT(setFilter()));\r
-\r
-    connect(MENU_TRRIGGERED(move_Back), this, SLOT(back()));\r
-    connect(MENU_TRRIGGERED(move_Forward), this, SLOT(forward()));\r
-    connect(MENU_TRRIGGERED(move_History), this, SLOT(showHidtory()));\r
-    connect(MENU_TRRIGGERED(move_Home), this, SLOT(jumpToHome()));\r
-    connect(MENU_TRRIGGERED(move_Parent), this, SLOT(jumpToParent()));\r
-    connect(MENU_TRRIGGERED(move_Root), this, SLOT(jumpToRoot()));\r
-    connect(MENU_TRRIGGERED(move_Jump), this, SLOT(jumpTo()));\r
-    connect(MENU_TRRIGGERED(move_Down), this, SLOT(cursorDown()));\r
-    connect(MENU_TRRIGGERED(move_Up), this, SLOT(cursorUp()));\r
-    connect(MENU_TRRIGGERED(move_Begin), this, SLOT(cursorToBegin()));\r
-    connect(MENU_TRRIGGERED(move_End), this, SLOT(cursorToEnd()));\r
-\r
-    connect(MENU_TRRIGGERED(cmd_Copy), this, SLOT(cmdCopy()));\r
-    connect(MENU_TRRIGGERED(cmd_Move), this, SLOT(cmdMove()));\r
-    connect(MENU_TRRIGGERED(cmd_Delete), this, SLOT(cmdDelete()));\r
-    connect(MENU_TRRIGGERED(cmd_Rename), this, SLOT(cmdRename()));\r
-    connect(MENU_TRRIGGERED(cmd_NewFile), this, SLOT(newFile()));\r
-    connect(MENU_TRRIGGERED(cmd_NewFolder), this, SLOT(newFolder()));\r
-    connect(MENU_TRRIGGERED(copy_Filename), this, SLOT(copyFilenameToClipboard()));\r
-    connect(MENU_TRRIGGERED(copy_Fullpath), this, SLOT(copyFullpathToClipboard()));\r
-\r
-    connect(getMainWnd(), SIGNAL(showHiddenFiles(bool)),\r
-            this, SLOT(showHiddenFiles(bool)));\r
-    connect(getMainWnd(), SIGNAL(showSystemFiles(bool)),\r
-            this, SLOT(showSystemFiles(bool)));\r
-    connect(this, SIGNAL(openRequested(QFileInfo)),\r
-            getMainWnd(), SLOT(openRequest(QFileInfo)));\r
-\r
-    connect(this, SIGNAL(doubleClicked(QModelIndex)),\r
-            this, SLOT(onDoubleClick(QModelIndex)));\r
-\r
-    // Drag & Drop\r
-    setDragEnabled(true);\r
-    setAcceptDrops(true);\r
-    setDropIndicatorShown(true);\r
-\r
-    // Context Menu\r
-    setContextMenuPolicy(Qt::CustomContextMenu);\r
-    connect(this, SIGNAL(customContextMenuRequested(QPoint)),\r
-            this, SLOT(contextMenuRequested(QPoint)));\r
-}\r
-\r
-FileTableView::~FileTableView()\r
-{\r
-    QSettings settings;\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-\r
-    settings.setValue(side() + slash + IniKey_Dir, m->absolutePath());\r
-}\r
-\r
-QString FileTableView::side() const\r
-{\r
-    return m_side;\r
-}\r
-\r
-void FileTableView::setSide(const QString &side)\r
-{\r
-    m_side = side;\r
-\r
-    // コンストラクタではステータスバーが生成されていないため\r
-    // このタイミングでconnectする\r
-    connect(this, SIGNAL(indexChanged(QString)),\r
-            getMainWnd()->statusBar(), SLOT(showMessage(QString)));\r
-}\r
-\r
-void FileTableView::setRootPath(const QString &path, bool addHistory)\r
-{\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    QFileInfo info(path);\r
-\r
-    if (info.isDir()) {\r
-        getMainWnd()->statusBar()->showMessage(tr("ファイルリストの取得中..."));\r
-\r
-        setUpdatesEnabled(false);\r
-        m->setPath(info.absoluteFilePath());\r
-        setUpdatesEnabled(true);\r
-\r
-        if (addHistory) {\r
-            m_history.add(info.absoluteFilePath());\r
-        }\r
-        updateMenu();\r
-\r
-        selectRow(0);\r
-        getMainWnd()->statusBar()->showMessage(tr("レディ"), 5000);\r
-    }\r
-}\r
-\r
-QFileInfoList FileTableView::selectedItems() const\r
-{\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    QFileInfoList list = m->checkedItems();\r
-    if (list.isEmpty()) {\r
-        QFileInfo info = m->fileInfo(currentIndex());\r
-        if (info.fileName() != "..") {\r
-            list.append(info);\r
-        }\r
-    }\r
-\r
-    return list;\r
-}\r
-\r
-void FileTableView::updateMenu()\r
-{\r
-    if (m_history.isEmpty()) {\r
-        getMainWnd()->findChild<QAction*>("move_Back")->setEnabled(false);\r
-        getMainWnd()->findChild<QAction*>("move_Forward")->setEnabled(false);\r
-\r
-    }\r
-    else {\r
-        getMainWnd()->findChild<QAction*>("move_Back")\r
-                ->setEnabled(!m_history.isBegin());\r
-        getMainWnd()->findChild<QAction*>("move_Forward")\r
-                ->setEnabled(!m_history.isEnd());\r
-    }\r
-}\r
-\r
-void FileTableView::openItem()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QModelIndex index = currentIndex();\r
-    if (!index.isValid()) {\r
-        return;\r
-    }\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    if (m->fileInfo(index).isDir()) {\r
-        setRootIndex(index);\r
-    }\r
-    else {\r
-        QSettings settings;\r
-        if (!settings.value(IniKey_ViewerForceOpen).toBool()) {\r
-            QStringList list = settings.value(IniKey_ViewerIgnoreExt).toString().split(",");\r
-            foreach (const QString &ext, list) {\r
-                if (ext.toLower() == m->fileInfo(index).suffix().toLower()) {\r
-                    openUrl(index);\r
-                    return;\r
-                }\r
-            }\r
-        }\r
-        emit openRequested(m->fileInfo(index));\r
-    }\r
-}\r
-\r
-void FileTableView::openUrl(const QModelIndex &index)\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    if (index.isValid()) {\r
-        FileTableModel *m = static_cast<FileTableModel*>(model());\r
-        QString path = QDir::toNativeSeparators(m->fileInfo(index).absoluteFilePath());\r
-        QDesktopServices::openUrl(QUrl("file:///" + path));\r
-    }\r
-    else {\r
-        QFileInfoList list = selectedItems();\r
-        foreach (const QFileInfo &info, list) {\r
-            QString path = QDir::toNativeSeparators(info.absoluteFilePath());\r
-            QDesktopServices::openUrl(QUrl("file:///" + path));\r
-        }\r
-    }\r
-}\r
-\r
-void FileTableView::openEditor(const QString &path)\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QSettings settings;\r
-    if (settings.value(IniKey_EditorPath).toString().isEmpty()) {\r
-        QMessageBox::critical(\r
-                    this, tr("エラー"),\r
-                    tr("外部エディタのパスが未定義です。"));\r
-        return;\r
-    }\r
-\r
-    QFileInfo info;\r
-    if (path.isEmpty()) {\r
-        FileTableModel *m = static_cast<FileTableModel*>(model());\r
-        info.setFile(m->fileInfo(currentIndex()).absoluteFilePath());\r
-    }\r
-    else {\r
-        info.setFile(path);\r
-    }\r
-\r
-    QString exe = settings.value(IniKey_EditorPath).toString();\r
-    QString opt = settings.value(IniKey_EditorOption).toString();\r
-    opt.replace("$B", info.completeBaseName());\r
-    opt.replace("$E", info.suffix());\r
-    opt.replace("$F", info.fileName());\r
-    opt.replace("$D", info.absolutePath());\r
-    opt.replace("$P", info.absoluteFilePath());\r
-\r
-    QString command;\r
-#ifdef Q_OS_MAC\r
-    command = "open -a " + exe + " " + opt;\r
-#else\r
-    command = QQ(exe) + " " + opt;\r
-#endif\r
-    qDebug() << command;\r
-    QProcess process(this);\r
-    process.setWorkingDirectory(info.absolutePath());\r
-    if (!process.startDetached(command)) {\r
-        QMessageBox::critical(\r
-                    this, tr("エラー"),\r
-                    tr("外部エディタの起動に失敗しました。<br/>")\r
-                    + command);\r
-    }\r
-}\r
-\r
-void FileTableView::openTerminal(const QString &path)\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QSettings settings;\r
-    if (settings.value(IniKey_TerminalPath).toString().isEmpty()) {\r
-        QMessageBox::critical(\r
-                    this, tr("エラー"),\r
-                    tr("ターミナルのパスが未定義です。"));\r
-        return;\r
-    }\r
-\r
-    QFileInfo info;\r
-    if (path.isEmpty()) {\r
-        FileTableModel *m = static_cast<FileTableModel*>(model());\r
-        info.setFile(m->fileInfo(currentIndex()).absoluteFilePath());\r
-    }\r
-    else {\r
-        info.setFile(path);\r
-    }\r
-\r
-    QString exe = settings.value(IniKey_TerminalPath).toString();\r
-    QString opt = settings.value(IniKey_TerminalOption).toString();\r
-    opt.replace("$B", info.completeBaseName());\r
-    opt.replace("$E", info.suffix());\r
-    opt.replace("$F", info.fileName());\r
-    if (info.isDir()) {\r
-        opt.replace("$D", info.absoluteFilePath());\r
-    }\r
-    else {\r
-        opt.replace("$D", info.absolutePath());\r
-    }\r
-    opt.replace("$P", info.absoluteFilePath());\r
-\r
-    QString command;\r
-#ifdef Q_OS_MAC\r
-    command = "open -a " + exe + " --args " + opt;\r
-#else\r
-    command = QQ(exe) + " " + opt;\r
-#endif\r
-    qDebug() << command;\r
-    QProcess process(this);\r
-    process.setWorkingDirectory(info.absolutePath());\r
-    if (!process.startDetached(command)) {\r
-        QMessageBox::critical(\r
-                    this, tr("エラー"),\r
-                    tr("ターミナルの起動に失敗しました。<br/>")\r
-                    + command);\r
-    }\r
-}\r
-\r
-void FileTableView::kickProcess()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QFileInfoList list = selectedItems();\r
-    QString command = QString::null;\r
-    foreach (const QFileInfo &info, list) {\r
-        if (info.isExecutable()) {\r
-            command = QQ(info.fileName()) + " " + command;\r
-        }\r
-        else {\r
-            command += " " + QQ(info.fileName());\r
-        }\r
-    }\r
-\r
-    QInputDialog dlg(this);\r
-    dlg.setInputMode(QInputDialog::TextInput);\r
-    dlg.setWindowTitle(tr("コマンドを実行"));\r
-    dlg.setLabelText(tr("コマンド:"));\r
-    dlg.setTextValue(command);\r
-    dlg.resize(getMainWnd()->width() * 0.8, dlg.height());\r
-\r
-    int ret = dlg.exec();\r
-    command = dlg.textValue();\r
-    if (ret == QDialog::Accepted && !command.isEmpty()) {\r
-        FileTableModel *m = static_cast<FileTableModel*>(model());\r
-        QProcess process(this);\r
-        process.setWorkingDirectory(m->absolutePath());\r
-        if (!process.startDetached(command)) {\r
-            QMessageBox::critical(\r
-                        this, tr("エラー"),\r
-                        tr("コマンドの実行に失敗しました。<br/>") + command);\r
-        }\r
-    }\r
-}\r
-\r
-void FileTableView::toggleChecked()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-\r
-    QModelIndex index = currentIndex();\r
-\r
-    QFileInfo info = m->fileInfo(index);\r
-    if (info.fileName() != "..") {\r
-        if (m->checkState(index) == Qt::Checked) {\r
-            m->setCheckState(index, Qt::Unchecked);\r
-        }\r
-        else {\r
-            m->setCheckState(index, Qt::Checked);\r
-        }\r
-    }\r
-    // 最終行でなければ、次のアイテムに移動する\r
-    if (index.row() == m->rowCount() - 1) {\r
-        setCurrentIndex(index);\r
-    }\r
-    else if (index.row() < m->rowCount() - 1) {\r
-        setCurrentIndex(m->index(index.row() + 1, 1));\r
-    }\r
-}\r
-\r
-void FileTableView::checkAllItems()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QModelIndex index = currentIndex();\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    setUpdatesEnabled(false);\r
-    m->setCheckStateAll(Qt::Checked);\r
-    setUpdatesEnabled(true);\r
-    setCurrentIndex(index);\r
-}\r
-\r
-void FileTableView::checkAllFiles()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QModelIndex index = currentIndex();\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    setUpdatesEnabled(false);\r
-    for (int n = 0; n < m->rowCount(); n++) {\r
-        QModelIndex index = m->index(n, 0);\r
-        QFileInfo info = m->fileInfo(index);\r
-        if (info.isDir()) {\r
-            m->setCheckState(index, Qt::Unchecked);\r
-        }\r
-        else {\r
-            m->setCheckState(index, Qt::Checked);\r
-        }\r
-        update(index);\r
-    }\r
-    setUpdatesEnabled(true);\r
-    setCurrentIndex(index);\r
-}\r
-\r
-void FileTableView::uncheckAllItems()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QModelIndex index = currentIndex();\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    setUpdatesEnabled(false);\r
-    m->setCheckStateAll(Qt::Unchecked);\r
-    setUpdatesEnabled(true);\r
-    setCurrentIndex(index);\r
-}\r
-\r
-void FileTableView::invertAllChecked()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QModelIndex index = currentIndex();\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    setUpdatesEnabled(false);\r
-    for (int n = 0; n < m->rowCount(); n++) {\r
-        QModelIndex index = m->index(n, 0);\r
-        if (m->checkState(index) == Qt::Checked) {\r
-            m->setCheckState(index, Qt::Unchecked);\r
-        }\r
-        else {\r
-            m->setCheckState(index, Qt::Checked);\r
-        }\r
-        update(index);\r
-    }\r
-    setUpdatesEnabled(true);\r
-    setCurrentIndex(index);\r
-}\r
-\r
-void FileTableView::setPathFromOther()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    FileTableView *other = getMainWnd()->otherSideView(this);\r
-    if (other == NULL) {\r
-        return;\r
-    }\r
-\r
-    FileTableModel *mOther = static_cast<FileTableModel*>(other->model());\r
-\r
-    setRootPath(mOther->absolutePath(), true);\r
-}\r
-\r
-void FileTableView::setPathToOther()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    FileTableView *other = getMainWnd()->otherSideView(this);\r
-    if (other == NULL) {\r
-        return;\r
-    }\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-\r
-    other->setRootPath(m->absolutePath(), true);\r
-}\r
-\r
-void FileTableView::swapPath()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    FileTableView *other = getMainWnd()->otherSideView(this);\r
-    if (other == NULL) {\r
-        return;\r
-    }\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    FileTableModel *mOther = static_cast<FileTableModel*>(other->model());\r
-\r
-    QString path = m->absolutePath();\r
-    QString pathOther = mOther->absolutePath();\r
-\r
-    setRootPath(pathOther, true);\r
-    other->setRootPath(path, true);\r
-}\r
-\r
-void FileTableView::showHiddenFiles(bool show)\r
-{\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    if (show) {\r
-        m->setFilter(m->filter() | QDir::Hidden);\r
-    }\r
-    else {\r
-        m->setFilter(m->filter() ^ QDir::Hidden);\r
-    }\r
-\r
-    setUpdatesEnabled(false);\r
-    refresh();\r
-    setUpdatesEnabled(true);\r
-}\r
-\r
-void FileTableView::showSystemFiles(bool show)\r
-{\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    if (show) {\r
-        m->setFilter(m->filter() | QDir::System);\r
-    }\r
-    else {\r
-        m->setFilter(m->filter() ^ QDir::System);\r
-    }\r
-\r
-    setUpdatesEnabled(false);\r
-    refresh();\r
-    setUpdatesEnabled(true);\r
-}\r
-\r
-void FileTableView::setSort()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    SortDialog dlg(this);\r
-    dlg.setRightOrLeft(side());\r
-    if (dlg.exec() == QDialog::Accepted) {\r
-        QSettings settings;\r
-        FileTableModel *m = static_cast<FileTableModel*>(model());\r
-        m->setSorting(QDir::Name);  // 0\r
-\r
-        int sortBy = settings.value(side() + slash + IniKey_SortBy).toInt();\r
-        switch (sortBy) {\r
-        case SortByDate:    m->setSorting(m->sorting() | QDir::Time); break;\r
-        case SortBySize:    m->setSorting(m->sorting() | QDir::Size); break;\r
-        case SortByType:    m->setSorting(m->sorting() | QDir::Type); break;\r
-        default:            m->setSorting(m->sorting() | QDir::Name); break;\r
-        }\r
-\r
-        // デフォルトだと文字列は昇順で、数値は降順…orz\r
-        int orderBy = settings.value(side() + slash + IniKey_OrderBy).toInt();\r
-        if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||\r
-            ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))\r
-        {\r
-            m->setSorting(m->sorting() | QDir::Reversed);\r
-        }\r
-\r
-        switch (settings.value(side() + slash + IniKey_PutDirs).toInt()) {\r
-        case PutDirsFirst:  m->setSorting(m->sorting() | QDir::DirsFirst); break;\r
-        case PutDirsLast:   m->setSorting(m->sorting() | QDir::DirsLast); break;\r
-        }\r
-\r
-        if (settings.value(side() + slash + IniKey_IgnoreCase).toBool()) {\r
-            m->setSorting(m->sorting() | QDir::IgnoreCase);\r
-        }\r
-\r
-        setUpdatesEnabled(false);\r
-        refresh();\r
-        setUpdatesEnabled(true);\r
-    }\r
-}\r
-\r
-void FileTableView::refresh()\r
-{\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    int row = currentIndex().row();\r
-    setRootPath(m->absolutePath(), false);\r
-    if (m->rowCount() <= row) {\r
-        row = m->rowCount() - 1;\r
-    }\r
-    setCurrentIndex(m->index(row, 0));\r
-    selectRow(row);\r
-}\r
-\r
-void FileTableView::setFilter()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QString filters = QString::null;\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    foreach (const QString &filter, m->nameFilters()) {\r
-        filters += filter + " ";\r
-    }\r
-\r
-    QInputDialog dlg(this);\r
-    dlg.setInputMode(QInputDialog::TextInput);\r
-    dlg.setWindowTitle(tr("フィルタを設定"));\r
-    dlg.setLabelText(tr("フィルタ:"));\r
-    dlg.setTextValue(filters);\r
-    dlg.resize(getMainWnd()->width() * 0.8, dlg.height());\r
-\r
-    if (dlg.exec() == QDialog::Accepted) {\r
-        filters = dlg.textValue();\r
-        if (filters.isEmpty()) {\r
-            filters = "*";\r
-        }\r
-        m->setNameFilters(filters.split(" ", QString::SkipEmptyParts));\r
-        refresh();\r
-        emit filterChanged();\r
-    }\r
-}\r
-\r
-void FileTableView::back()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    if (!m_history.isBegin()) {\r
-        const QString &path = m_history.back();\r
-        setRootPath(path, false);\r
-\r
-        updateMenu();\r
-    }\r
-}\r
-\r
-void FileTableView::forward()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    if (!m_history.isEnd()) {\r
-        const QString &path = m_history.forward();\r
-        setRootPath(path, false);\r
-\r
-        updateMenu();\r
-    }\r
-}\r
-\r
-void FileTableView::showHidtory()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    FileTableView *other = getMainWnd()->otherSideView(this);\r
-\r
-    HistoryDialog dlg(this);\r
-    if (side() == "Left") {\r
-        dlg.setDefaultLeft(true);\r
-        dlg.setHistory(&m_history, other->history());\r
-    }\r
-    else {\r
-        dlg.setDefaultLeft(false);\r
-        dlg.setHistory(other->history(), &m_history);\r
-    }\r
-\r
-    if (dlg.exec() == QDialog::Accepted) {\r
-        if (side() == dlg.selectedSide()) {\r
-            m_history.setAt(dlg.selectedIndex());\r
-            setRootPath(m_history.current(), false);\r
-        }\r
-        else {\r
-            setRootPath(other->history()->at(dlg.selectedIndex()), true);\r
-        }\r
-        updateMenu();\r
-    }\r
-}\r
-\r
-void FileTableView::jumpToHome()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    setRootPath(QDir::homePath(), true);\r
-}\r
-\r
-void FileTableView::jumpToParent()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    QDir dir(m->absolutePath());\r
-    if (!dir.isRoot()) {\r
-        dir.cdUp();\r
-        setRootPath(dir.absolutePath(), true);\r
-    }\r
-}\r
-\r
-void FileTableView::jumpToRoot()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    setRootPath(QDir::rootPath(), true);\r
-}\r
-\r
-void FileTableView::jumpTo()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    QString path = QFileDialog::getExistingDirectory(\r
-                this, tr("フォルダを選択"), m->absolutePath());\r
-    if (!path.isEmpty()) {\r
-        setRootPath(path, true);\r
-    }\r
-}\r
-\r
-void FileTableView::cursorDown()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    int row = currentIndex().row();\r
-    if (row < model()->rowCount() - 1) {\r
-        setCurrentIndex(model()->index(row + 1, 1));\r
-    }\r
-}\r
-\r
-void FileTableView::cursorUp()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    int row = currentIndex().row();\r
-    if (row > 0) {\r
-        setCurrentIndex(model()->index(row - 1, 1));\r
-    }\r
-}\r
-\r
-void FileTableView::cursorToBegin()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    setCurrentIndex(model()->index(0, 1));\r
-}\r
-\r
-void FileTableView::cursorToEnd()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    setCurrentIndex(model()->index(model()->rowCount() - 1, 1));\r
-}\r
-\r
-void FileTableView::cmdCopy()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QFileInfoList list = selectedItems();\r
-    if (list.isEmpty()) {\r
-        return;\r
-    }\r
-\r
-    QSettings settings;\r
-    if (settings.value(IniKey_ConfirmCopy).toBool()) {\r
-        int ret = QMessageBox::question(this, tr("確認"),\r
-                                        tr("コピーを実行しますか?"));\r
-        if (ret != QMessageBox::Yes) {\r
-            return;\r
-        }\r
-    }\r
-\r
-    FileTableView *other = getMainWnd()->otherSideView(this);\r
-    FileTableModel *mOther = static_cast<FileTableModel*>(other->model());\r
-    CopyMoveWorker *worker = new CopyMoveWorker();\r
-    connect(worker, SIGNAL(askOverWrite(bool*,int*,int*,QString*,QString,QString)),\r
-            this, SLOT(askOverWrite(bool*,int*,int*,QString*,QString,QString)));\r
-    worker->setCopyList(&list);\r
-    worker->setTargetDir(mOther->absolutePath());\r
-    worker->setMoveMode(false);\r
-\r
-    OperationDialog opDlg(this);\r
-    opDlg.setWindowTitle(tr("コピー"));\r
-    opDlg.setWorker(worker);\r
-    opDlg.setAutoClose(settings.value(IniKey_AutoCloseCopy).toBool());\r
-\r
-    opDlg.exec();\r
-\r
-    settings.setValue(IniKey_AutoCloseCopy, opDlg.autoClose());\r
-}\r
-\r
-void FileTableView::cmdMove()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QFileInfoList list = selectedItems();\r
-    if (list.isEmpty()) {\r
-        return;\r
-    }\r
-\r
-    QSettings settings;\r
-    if (settings.value(IniKey_ConfirmMove).toBool()) {\r
-        int ret = QMessageBox::question(this, tr("確認"),\r
-                                        tr("移動を実行しますか?"));\r
-        if (ret != QMessageBox::Yes) {\r
-            return;\r
-        }\r
-    }\r
-\r
-    FileTableView *other = getMainWnd()->otherSideView(this);\r
-    FileTableModel *mOther = static_cast<FileTableModel*>(other->model());\r
-    CopyMoveWorker *worker = new CopyMoveWorker();\r
-    connect(worker, SIGNAL(askOverWrite(bool*,int*,int*,QString*,QString,QString)),\r
-            this, SLOT(askOverWrite(bool*,int*,int*,QString*,QString,QString)));\r
-    worker->setCopyList(&list);\r
-    worker->setTargetDir(mOther->absolutePath());\r
-    worker->setMoveMode(true);\r
-\r
-    OperationDialog opDlg(this);\r
-    opDlg.setWindowTitle(tr("移動"));\r
-    opDlg.setWorker(worker);\r
-    opDlg.setAutoClose(settings.value(IniKey_AutoCloseMove).toBool());\r
-\r
-    opDlg.exec();\r
-\r
-    settings.setValue(IniKey_AutoCloseMove, opDlg.autoClose());\r
-}\r
-\r
-void FileTableView::cmdDelete()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QFileInfoList list = selectedItems();\r
-    if (list.isEmpty()) {\r
-        return;\r
-    }\r
-\r
-    QSettings settings;\r
-    if (settings.value(IniKey_ConfirmDelete).toBool()) {\r
-        QString msg;\r
-        if (list.size() == 1) {\r
-            msg = list[0].fileName();\r
-        }\r
-        else {\r
-            msg = tr("%1個のアイテム").arg(list.size());\r
-        }\r
-        int ret = QMessageBox::question(\r
-                    this, tr("確認"),\r
-                    msg + tr("を削除しますか?"));\r
-        if (ret != QMessageBox::Yes) {\r
-            return;\r
-        }\r
-    }\r
-    DeleteWorker *worker = new DeleteWorker();\r
-    worker->setDeleteList(&list);\r
-\r
-    OperationDialog opDlg(this);\r
-    opDlg.setWindowTitle(tr("削除"));\r
-    opDlg.setWorker(worker);\r
-    opDlg.setAutoClose(settings.value(IniKey_AutoCloseDelete).toBool());\r
-\r
-    opDlg.exec();\r
-\r
-    settings.setValue(IniKey_AutoCloseDelete, opDlg.autoClose());\r
-}\r
-\r
-void FileTableView::cmdRename()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QFileInfoList list = selectedItems();\r
-    if (list.isEmpty()) {\r
-        return;\r
-    }\r
-\r
-    IRenameDialog *dlg;\r
-    if (list.size() == 1) {\r
-        dlg = new RenameSingleDialog(this);\r
-    }\r
-    else {\r
-        dlg = new RenameMultiDialog(this);\r
-    }\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    dlg->setWorkingDirectory(m->absolutePath());\r
-    dlg->setNames(list);\r
-    int dlgResult = dlg->exec();\r
-    if (dlgResult == QDialog::Accepted && !dlg->renameMap().isEmpty()) {\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
-        }\r
-\r
-        RenameWorker *worker = new RenameWorker();\r
-        worker->setRenameMap(&dlg->renameMap());\r
-\r
-        OperationDialog opDlg(this);\r
-        opDlg.setWindowTitle(tr("名前を変更"));\r
-        opDlg.setWorker(worker);\r
-        opDlg.setAutoClose(settings.value(IniKey_AutoCloseRename).toBool());\r
-\r
-        opDlg.exec();\r
-\r
-        settings.setValue(IniKey_AutoCloseRename, opDlg.autoClose());\r
-    }\r
-}\r
-\r
-void FileTableView::newFile()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    bool bOk;\r
-    QString name = QInputDialog::getText(\r
-                this, tr("ファイルを作成"), tr("ファイル名:"),\r
-                QLineEdit::Normal, "", &bOk);\r
-    if (bOk && !name.isEmpty()) {\r
-        FileTableModel *m = static_cast<FileTableModel*>(model());\r
-        QDir dir(m->absolutePath());\r
-        QFile file(dir.absoluteFilePath(name));\r
-        if (!file.open(QIODevice::WriteOnly)) {\r
-            QMessageBox::critical(\r
-                        this, tr("エラー"),\r
-                        tr("ファイルの作成に失敗しました。"));\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
-    }\r
-}\r
-\r
-void FileTableView::newFolder()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    bool bOk;\r
-    QString name = QInputDialog::getText(\r
-                this, tr("フォルダを作成"), tr("フォルダ名:"),\r
-                QLineEdit::Normal, "", &bOk);\r
-    if (bOk && !name.isEmpty()) {\r
-        FileTableModel *m = static_cast<FileTableModel*>(model());\r
-        QDir dir(m->absolutePath());\r
-        if (!dir.mkpath(name)) {\r
-            QMessageBox::critical(\r
-                        this, tr("エラー"),\r
-                        tr("フォルダの作成に失敗しました。"));\r
-        }\r
-        else {\r
-            QSettings settings;\r
-            if (settings.value(IniKey_MoveAfterCreateFolder).toBool()) {\r
-                setRootPath(dir.absoluteFilePath(name), true);\r
-            }\r
-        }\r
-    }\r
-}\r
-\r
-void FileTableView::copyFilenameToClipboard()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QModelIndex index = currentIndex();\r
-    if (!index.isValid()) {\r
-        return;\r
-    }\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    QClipboard *clipboard = QApplication::clipboard();\r
-    clipboard->setText(m->fileInfo(index).fileName());\r
-}\r
-\r
-void FileTableView::copyFullpathToClipboard()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    QModelIndex index = currentIndex();\r
-    if (!index.isValid()) {\r
-        return;\r
-    }\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    QClipboard *clipboard = QApplication::clipboard();\r
-    clipboard->setText(m->fileInfo(index).absoluteFilePath());\r
-}\r
-\r
-void FileTableView::XXX()\r
-{\r
-    CHECK_FOCUS;\r
-\r
-    qDebug() << sender()->objectName() << "に対するスロットは未実装です。";\r
-}\r
-\r
-void FileTableView::askOverWrite(bool *bOk, int *prevCopyMethod, int *copyMethod,\r
-                                 QString *alias, const QString &srcPath,\r
-                                 const QString &tgtPath)\r
- {\r
-     OverWriteDialog dlg;\r
-     if (*prevCopyMethod == OverWriteDialog::Undefined) {\r
-         QSettings settings;\r
-         QString method = settings.value(IniKey_DefaultOnCopy).toString();\r
-         if (method == "owDefOverWrite") {\r
-             *prevCopyMethod = OverWriteDialog::OverWrite;\r
-         }\r
-         else if (method == "owDefSkip") {\r
-             *prevCopyMethod = OverWriteDialog::Skip;\r
-         }\r
-         else if (method == "owDefAppendNumber") {\r
-             *prevCopyMethod = OverWriteDialog::AppendNumber;\r
-         }\r
-         else if (method == "owDefRename") {\r
-             *prevCopyMethod = OverWriteDialog::Rename;\r
-         }\r
-         else {\r
-             *prevCopyMethod = OverWriteDialog::OverWriteIfNew;\r
-         }\r
-     }\r
-     dlg.setCopyMethod(*prevCopyMethod);\r
-     dlg.setSameMethodChecked(*copyMethod != OverWriteDialog::Undefined);\r
-     dlg.setFileInfo(srcPath, tgtPath);\r
-     if (dlg.exec() == QDialog::Rejected) {\r
-         *bOk = false;\r
-     }\r
-     else {\r
-         *prevCopyMethod = dlg.copyMethod();\r
-         if (dlg.isSameMethodChecked()) {\r
-             *copyMethod = *prevCopyMethod;\r
-         }\r
-         *alias = dlg.alias();\r
-         *bOk = true;\r
-     }\r
-     CopyMoveWorker *worker = static_cast<CopyMoveWorker*>(sender());\r
-     worker->endAsking();\r
-}\r
-\r
-void FileTableView::onDoubleClick(const QModelIndex &index)\r
-{\r
-    if (!index.isValid()) {\r
-        return;\r
-    }\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-\r
-    if (m->fileInfo(index).isDir()) {\r
-        if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier)) {\r
-            openTerminal(m->fileInfo(index).absoluteFilePath());\r
-        }\r
-        else {\r
-            setRootPath(m->fileInfo(index).absoluteFilePath(), true);\r
-        }\r
-    }\r
-    else if (QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier)){\r
-        openEditor(m->fileInfo(index).absoluteFilePath());\r
-    }\r
-    else {\r
-        openUrl(index);\r
-    }\r
-\r
-}\r
-\r
-void FileTableView::contextMenuRequested(const QPoint &pos)\r
-{\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    QModelIndex index = indexAt(pos);\r
-    if (!index.isValid()) {\r
-        return;\r
-    }\r
-\r
-    Q_UNUSED(m);\r
-}\r
-\r
-void FileTableView::setRootIndex(const QModelIndex &index)\r
-{\r
-    if (!index.isValid()) {\r
-        return;\r
-    }\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-\r
-    if (m->fileInfo(index).isDir()) {\r
-        setRootPath(m->fileInfo(index).absoluteFilePath(), true);\r
-    }\r
-}\r
-\r
-void FileTableView::keyPressEvent(QKeyEvent *event)\r
-{\r
-    // Macでアクションが処理されないケースがあるため、\r
-    // キーイベントを拾ってアクションシグナルを起動する\r
-    QString modifier = QString::null;\r
-    if (event->modifiers() & Qt::ShiftModifier)     { modifier += "Shift+"; }\r
-    if (event->modifiers() & Qt::ControlModifier)   { modifier += "Ctrl+"; }\r
-    if (event->modifiers() & Qt::AltModifier)       { modifier += "Alt+"; }\r
-    if (event->modifiers() & Qt::MetaModifier)      { modifier += "Meta+"; }\r
-\r
-    QString key = QKeySequence(event->key()).toString();\r
-    QString ksq = QKeySequence(modifier + key).toString();\r
-\r
-    if (!ksq.isEmpty()) {\r
-        foreach (QObject *obj, getMainWnd()->children()) {\r
-            QAction *action = qobject_cast<QAction*>(obj);\r
-            if (action && action->isEnabled()) {\r
-                foreach (const QKeySequence &keySeq, action->shortcuts()) {\r
-                    if (ksq == keySeq.toString()) {\r
-                        qDebug() << "emit " << ksq << " " << action->objectName();\r
-                        emit action->triggered();\r
-                        event->accept();\r
-                        return;\r
-                    }\r
-                }\r
-            }\r
-        }\r
-    }\r
-\r
-    if (ksq == "Left" || ksq == "Right") {\r
-        if (side() == ksq) {\r
-            jumpToParent();\r
-        }\r
-        else {\r
-            getMainWnd()->otherSideView(this)->setFocus();\r
-        }\r
-        event->accept();\r
-        return;\r
-    }\r
-\r
-    if (!ksq.isEmpty() && ksq != "Down" && ksq != "Up") {\r
-        qDebug() << ksq;\r
-    }\r
-    QTableView::keyPressEvent(event);\r
-}\r
-\r
-void FileTableView::focusInEvent(QFocusEvent *event)\r
-{\r
-    if (!currentIndex().isValid()) {\r
-        FileTableModel *m = static_cast<FileTableModel*>(model());\r
-        if (m) {\r
-            setCurrentIndex(m->index(0, 0));\r
-        }\r
-    }\r
-\r
-    updateMenu();\r
-\r
-    QTableView::focusInEvent(event);\r
-}\r
-\r
-void FileTableView::currentChanged(const QModelIndex &current, const QModelIndex &previous)\r
-{\r
-    Q_UNUSED(previous);\r
-\r
-    if (current.isValid()) {\r
-        FileTableModel *m = static_cast<FileTableModel*>(model());\r
-        emit indexChanged(m->fileInfo(current).absoluteFilePath());\r
-    }\r
-\r
-    QTableView::currentChanged(current, previous);\r
-}\r
-\r
-\r
-void FileTableView::dropEvent(QDropEvent *event)\r
-{\r
-    if (m_dragging) {\r
-        event->ignore();\r
-        return;\r
-    }\r
-\r
-    QFileInfoList list;\r
-    foreach (const QUrl &url, event->mimeData()->urls()) {\r
-        QFileInfo info(url.toLocalFile());\r
-        QString path = info.canonicalFilePath();\r
-        if (!path.isEmpty()) {\r
-            list << path;\r
-        }\r
-        else {\r
-            qDebug() << "path is empty.";\r
-        }\r
-    }\r
-\r
-    if (list.isEmpty()) {\r
-        event->ignore();\r
-        return;\r
-    }\r
-    event->acceptProposedAction();\r
-\r
-    FileTableModel *m = static_cast<FileTableModel*>(model());\r
-    CopyMoveWorker *worker = new CopyMoveWorker();\r
-    connect(worker, SIGNAL(askOverWrite(bool*,int*,int*,QString*,QString,QString)),\r
-            this, SLOT(askOverWrite(bool*,int*,int*,QString*,QString,QString)));\r
-    worker->setCopyList(&list);\r
-    worker->setTargetDir(m->absolutePath());\r
-    worker->setMoveMode(false);\r
-\r
-    OperationDialog opDlg(this);\r
-    opDlg.setWindowTitle(tr("コピー"));\r
-    opDlg.setWorker(worker);\r
-\r
-    opDlg.exec();\r
-}\r
-\r
-\r
-void FileTableView::dragEnterEvent(QDragEnterEvent *event)\r
-{\r
-    if (event->mimeData()->hasUrls()) {\r
-        event->acceptProposedAction();\r
-        return;\r
-    }\r
-\r
-    QTableView::dragEnterEvent(event);\r
-}\r
-\r
-void FileTableView::mousePressEvent(QMouseEvent *event)\r
-{\r
-    if ((event->buttons() & Qt::LeftButton) || (event->buttons() & Qt::RightButton))\r
-    {\r
-        m_dragStartPos = event->pos();\r
-    }\r
-\r
-    QTableView::mousePressEvent(event);\r
-}\r
-\r
-void FileTableView::mouseMoveEvent(QMouseEvent *event)\r
-{\r
-    if (!(event->buttons() & Qt::LeftButton) &&\r
-        !(event->buttons() & Qt::RightButton))\r
-    {\r
-        QTableView::mouseMoveEvent(event);\r
-        return;\r
-    }\r
-    if ((event->pos() - m_dragStartPos).manhattanLength()\r
-            < QApplication::startDragDistance())\r
-    {\r
-        QTableView::mouseMoveEvent(event);\r
-        return;\r
-    }\r
-\r
-    QFileInfoList list = selectedItems();\r
-    if (list.isEmpty()) {\r
-        QTableView::mousePressEvent(event);\r
-        return;\r
-    }\r
-\r
-    QList<QUrl> urls;\r
-    foreach (const QFileInfo &info, list) {\r
-        urls << QUrl::fromLocalFile(info.absoluteFilePath());\r
-    }\r
-\r
-    QDrag *drag = new QDrag(this);\r
-    QMimeData *mimeData = new QMimeData;\r
-    mimeData->setUrls(urls);\r
-    drag->setMimeData(mimeData);\r
-\r
-    m_dragging = true;\r
-    if (event->buttons() & Qt::RightButton) {\r
-        drag->exec(Qt::CopyAction | Qt::MoveAction);\r
-    }\r
-    else {\r
-        drag->exec(Qt::CopyAction);\r
-    }\r
-    m_dragging = false;\r
-}\r
diff --git a/filetableview.h b/filetableview.h
deleted file mode 100644 (file)
index d3ed0e5..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#ifndef FILETABLEVIEW_H\r
-#define FILETABLEVIEW_H\r
-\r
-#include "history.h"\r
-\r
-#include <QFileInfoList>\r
-#include <QTableView>\r
-\r
-class FileTableView : public QTableView\r
-{\r
-    Q_OBJECT\r
-public:\r
-    explicit FileTableView(QWidget *parent = 0);\r
-    ~FileTableView();\r
-\r
-    QString side() const;\r
-    void setSide(const QString &side);\r
-\r
-    History* history() { return &m_history; }\r
-\r
-    void setRootPath(const QString &path, bool addHistory);\r
-\r
-private:\r
-    QString m_side;\r
-    History m_history;\r
-    QPoint m_dragStartPos;\r
-    bool m_dragging;\r
-\r
-    QFileInfoList selectedItems() const;\r
-    void updateMenu();\r
-\r
-signals:\r
-    void indexChanged(const QString &text);\r
-    void filterChanged();\r
-    void openRequested(const QFileInfo &info);\r
-\r
-private slots:\r
-    void openItem();\r
-    void openUrl(const QModelIndex &index = QModelIndex());\r
-    void openEditor(const QString &path = QString());\r
-    void openTerminal(const QString &path = QString());\r
-    void kickProcess();\r
-\r
-    void toggleChecked();\r
-    void checkAllItems();\r
-    void checkAllFiles();\r
-    void uncheckAllItems();\r
-    void invertAllChecked();\r
-\r
-    void setPathFromOther();\r
-    void setPathToOther();\r
-    void swapPath();\r
-    void showHiddenFiles(bool show);\r
-    void showSystemFiles(bool show);\r
-    void setSort();\r
-    void refresh();\r
-    void setFilter();\r
-\r
-    void back();\r
-    void forward();\r
-    void showHidtory();\r
-    void jumpToHome();\r
-    void jumpToParent();\r
-    void jumpToRoot();\r
-    void jumpTo();\r
-    void cursorDown();\r
-    void cursorUp();\r
-    void cursorToBegin();\r
-    void cursorToEnd();\r
-\r
-    void cmdCopy();\r
-    void cmdMove();\r
-    void cmdDelete();\r
-    void cmdRename();\r
-    void newFile();\r
-    void newFolder();\r
-    void copyFilenameToClipboard();\r
-    void copyFullpathToClipboard();\r
-\r
-    void XXX();\r
-\r
-private slots:\r
-    void askOverWrite(bool *bOk, int *prevCopyMethod, int *copyMethod,\r
-                      QString *alias, const QString &srcPath,\r
-                      const QString &tgtPath);\r
-    void onDoubleClick(const QModelIndex &index);\r
-    void contextMenuRequested(const QPoint & pos);\r
-\r
-    // QAbstractItemView interface\r
-public slots:\r
-    void setRootIndex(const QModelIndex &index);\r
-\r
-    // QWidget interface\r
-protected:\r
-    void keyPressEvent(QKeyEvent *event);\r
-    void focusInEvent(QFocusEvent *event);\r
-    void dropEvent(QDropEvent *event);\r
-    void dragEnterEvent(QDragEnterEvent *event);\r
-    void mousePressEvent(QMouseEvent *event);\r
-    void mouseMoveEvent(QMouseEvent *event);\r
-\r
-    // QAbstractItemView interface\r
-protected slots:\r
-    void currentChanged(const QModelIndex &current, const QModelIndex &previous);\r
-};\r
-\r
-#endif // FILETABLEVIEW_H\r
diff --git a/folderpanel.cpp b/folderpanel.cpp
deleted file mode 100644 (file)
index 7a576f1..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-#include "common.h"\r
-#include "filetablemodel.h"\r
-#include "folderpanel.h"\r
-#include "mainwindow.h"\r
-#include "ui_folderpanel.h"\r
-\r
-#include <QSettings>\r
-\r
-QString FilesizeToString(quint64 size)\r
-{\r
-    if (size >= 1024 * 1024 * 1024) {\r
-        return QString("%1GB").arg(int(10 * size / (1024 * 1024 * 1024)) / 10.0);\r
-    }\r
-    if (size >= 1024 * 1024) {\r
-        return QString("%1MB").arg(int(10 * size / (1024 * 1024)) / 10.0);\r
-    }\r
-    if (size >= 1024) {\r
-        return QString("%1KB").arg(int(10 * size / 1024) / 10.0);\r
-    }\r
-    return QString("%1B").arg(size);\r
-}\r
-\r
-FolderPanel::FolderPanel(QWidget *parent) :\r
-    QWidget(parent),\r
-    ui(new Ui::FolderPanel)\r
-{\r
-    ui->setupUi(this);\r
-    ui->fileTable->setModel(new FileTableModel(this));\r
-\r
-    // リサイズ時の動作を設定する\r
-    QHeaderView *header = ui->fileTable->horizontalHeader();\r
-    header->setSectionResizeMode(0, QHeaderView::ResizeToContents);\r
-    header->setSectionResizeMode(1, QHeaderView::Stretch);\r
-    header->setSectionResizeMode(2, QHeaderView::ResizeToContents);\r
-    header->setSectionResizeMode(3, QHeaderView::ResizeToContents);\r
-    header->setDefaultSectionSize(header->minimumSectionSize());\r
-    // 行の高さを75%に調整\r
-    QHeaderView *vHeader = ui->fileTable->verticalHeader();\r
-    vHeader->setDefaultSectionSize(vHeader->defaultSectionSize() * 0.75);\r
-}\r
-\r
-FolderPanel::~FolderPanel()\r
-{\r
-    delete ui;\r
-}\r
-\r
-const QString FolderPanel::side() const\r
-{\r
-    return ui->fileTable->side();\r
-}\r
-\r
-void FolderPanel::setSide(const QString &side)\r
-{\r
-    ui->fileTable->setSide(side);\r
-\r
-    QSettings settings;\r
-    FileTableModel *model = new FileTableModel();\r
-    connect(model, SIGNAL(rootChanged(QString)),\r
-            ui->locationField, SLOT(setText(QString)));\r
-    connect(model, SIGNAL(stateChanged(int,int,quint64)),\r
-            this, SLOT(onStateChanged(int,int,quint64)));\r
-    connect(model, SIGNAL(listUpdated()),\r
-            ui->fileTable, SLOT(refresh()));\r
-    connect(ui->fileTable, SIGNAL(filterChanged()),\r
-            this, SLOT(onFilterChanged()));\r
-\r
-    //>>>>> フィルタ初期化\r
-    model->setFilter(QDir::NoDot | QDir::AllDirs | QDir::Files);\r
-    if (settings.value(IniKey_ShowHidden).toBool()) {\r
-        model->setFilter(model->filter() | QDir::Hidden);\r
-    }\r
-    if (settings.value(IniKey_ShowSystem).toBool()) {\r
-        model->setFilter(model->filter() | QDir::System);\r
-    }\r
-    //>>>>> ソート順初期化\r
-    model->setSorting(QDir::Name);  // 0\r
-    int sortBy = settings.value(side + slash + IniKey_SortBy).toInt();\r
-    switch (sortBy) {\r
-    case SortByDate:    model->setSorting(model->sorting() | QDir::Time); break;\r
-    case SortBySize:    model->setSorting(model->sorting() | QDir::Size); break;\r
-    case SortByType:    model->setSorting(model->sorting() | QDir::Type); break;\r
-    default:            model->setSorting(model->sorting() | QDir::Name); break;\r
-    }\r
-    // デフォルトだと文字列は昇順で、数値は降順…orz\r
-    int orderBy = settings.value(side + slash + IniKey_OrderBy).toInt();\r
-    if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||\r
-        ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))\r
-    {\r
-        model->setSorting(model->sorting() | QDir::Reversed);\r
-    }\r
-    // フォルダの位置\r
-    switch (settings.value(side + slash + IniKey_PutDirs).toInt()) {\r
-    case PutDirsFirst:  model->setSorting(model->sorting() | QDir::DirsFirst); break;\r
-    case PutDirsLast:   model->setSorting(model->sorting() | QDir::DirsLast); break;\r
-    }\r
-    // 大文字小文字の区別\r
-    if (settings.value(side + slash + IniKey_IgnoreCase).toBool()) {\r
-        model->setSorting(model->sorting() | QDir::IgnoreCase);\r
-    }\r
-    //>>>>> 監視フォルダ初期化\r
-    QString path = settings.value(side + slash + IniKey_Dir).toString();\r
-\r
-    model->updateAppearance();\r
-    ui->fileTable->setModel(model);\r
-    ui->fileTable->setRootPath(path, true);\r
-    onFilterChanged();\r
-}\r
-\r
-void FolderPanel::updateAppearance()\r
-{\r
-    QSettings settings;\r
-    QPalette palette;\r
-    QFont font;\r
-\r
-    font = settings.value(IniKey_BoxFont).value<QFont>();\r
-    palette = ui->locationField->palette();\r
-    palette.setColor(QPalette::Base,\r
-                     settings.value(IniKey_BoxColorBg).value<QColor>());\r
-    palette.setColor(QPalette::Text,\r
-                     settings.value(IniKey_BoxColorFg).value<QColor>());\r
-    ui->locationField->setFont(font);\r
-    ui->locationField->setPalette(palette);\r
-\r
-    palette = ui->fileTable->palette();\r
-    palette.setColor(QPalette::Base,\r
-                     settings.value(IniKey_ViewColorBgNormal).value<QColor>());\r
-    ui->fileTable->setPalette(palette);\r
-\r
-    FileTableModel *model = static_cast<FileTableModel*>(ui->fileTable->model());\r
-    if (model) {\r
-        model->updateAppearance();\r
-    }\r
-}\r
-\r
-void FolderPanel::onStateChanged(int checkedFolders, int checkedFiles, quint64 totalSize)\r
-{\r
-    QString msg = "";\r
-    if (checkedFolders > 0) {\r
-        msg += tr("%1個のフォルダ ").arg(checkedFolders);\r
-    }\r
-    if (checkedFiles > 0) {\r
-        msg += tr("%1個のファイル ").arg(checkedFiles);\r
-    }\r
-    if (msg.length() > 0) {\r
-        msg += "を選択 合計 ";\r
-        msg += FilesizeToString(totalSize);\r
-    }\r
-\r
-    if (msg.isEmpty()) {\r
-        onFilterChanged();\r
-    }\r
-    else {\r
-        ui->label->setText(msg);\r
-    }\r
-}\r
-\r
-void FolderPanel::onFilterChanged()\r
-{\r
-    FileTableModel *m = static_cast<FileTableModel*>(ui->fileTable->model());\r
-    QString filters = "フィルタ:";\r
-    foreach (const QString &filter, m->nameFilters()) {\r
-        filters += filter + " ";\r
-    }\r
-    ui->label->setText(filters);\r
-}\r
-\r
-void FolderPanel::on_locationField_editingFinished()\r
-{\r
-    ui->locationField->blockSignals(true);\r
-\r
-    QString path = ui->locationField->text();\r
-    ui->fileTable->setRootPath(path, true);\r
-\r
-    ui->locationField->blockSignals(false);\r
-}\r
diff --git a/folderpanel.h b/folderpanel.h
deleted file mode 100644 (file)
index 2193e5f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef FOLDERPANEL_H\r
-#define FOLDERPANEL_H\r
-\r
-#include <QWidget>\r
-\r
-namespace Ui {\r
-class FolderPanel;\r
-}\r
-\r
-class FolderPanel : public QWidget\r
-{\r
-    Q_OBJECT\r
-\r
-public:\r
-    explicit FolderPanel(QWidget *parent = 0);\r
-    ~FolderPanel();\r
-\r
-    const QString side() const;\r
-    void setSide(const QString &side);\r
-\r
-    void updateAppearance();\r
-\r
-private:\r
-    Ui::FolderPanel *ui;\r
-\r
-private slots:\r
-    void onStateChanged(int checkedFolders, int checkedFiles, quint64 totalSize);\r
-    void onFilterChanged();\r
-    void on_locationField_editingFinished();\r
-};\r
-\r
-#endif // FOLDERPANEL_H\r
diff --git a/folderpanel.ui b/folderpanel.ui
deleted file mode 100644 (file)
index cf22040..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ui version="4.0">\r
- <class>FolderPanel</class>\r
- <widget class="QWidget" name="FolderPanel">\r
-  <property name="geometry">\r
-   <rect>\r
-    <x>0</x>\r
-    <y>0</y>\r
-    <width>256</width>\r
-    <height>238</height>\r
-   </rect>\r
-  </property>\r
-  <property name="sizePolicy">\r
-   <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
-    <horstretch>0</horstretch>\r
-    <verstretch>0</verstretch>\r
-   </sizepolicy>\r
-  </property>\r
-  <property name="windowTitle">\r
-   <string>Form</string>\r
-  </property>\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
-    <layout class="QHBoxLayout" name="horizontalLayout">\r
-     <property name="spacing">\r
-      <number>0</number>\r
-     </property>\r
-     <item>\r
-      <widget class="QLineEdit" name="locationField">\r
-       <property name="focusPolicy">\r
-        <enum>Qt::ClickFocus</enum>\r
-       </property>\r
-      </widget>\r
-     </item>\r
-    </layout>\r
-   </item>\r
-   <item>\r
-    <widget class="FileTableView" name="fileTable">\r
-     <property name="focusPolicy">\r
-      <enum>Qt::StrongFocus</enum>\r
-     </property>\r
-     <property name="verticalScrollBarPolicy">\r
-      <enum>Qt::ScrollBarAlwaysOn</enum>\r
-     </property>\r
-     <property name="horizontalScrollBarPolicy">\r
-      <enum>Qt::ScrollBarAlwaysOff</enum>\r
-     </property>\r
-     <property name="tabKeyNavigation">\r
-      <bool>false</bool>\r
-     </property>\r
-     <property name="selectionMode">\r
-      <enum>QAbstractItemView::SingleSelection</enum>\r
-     </property>\r
-     <property name="selectionBehavior">\r
-      <enum>QAbstractItemView::SelectRows</enum>\r
-     </property>\r
-     <property name="textElideMode">\r
-      <enum>Qt::ElideMiddle</enum>\r
-     </property>\r
-     <property name="showGrid">\r
-      <bool>false</bool>\r
-     </property>\r
-     <property name="wordWrap">\r
-      <bool>false</bool>\r
-     </property>\r
-     <attribute name="horizontalHeaderHighlightSections">\r
-      <bool>false</bool>\r
-     </attribute>\r
-     <attribute name="verticalHeaderVisible">\r
-      <bool>false</bool>\r
-     </attribute>\r
-    </widget>\r
-   </item>\r
-   <item>\r
-    <widget class="QLabel" name="label">\r
-     <property name="sizePolicy">\r
-      <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
-       <horstretch>0</horstretch>\r
-       <verstretch>0</verstretch>\r
-      </sizepolicy>\r
-     </property>\r
-     <property name="text">\r
-      <string>TextLabel</string>\r
-     </property>\r
-    </widget>\r
-   </item>\r
-  </layout>\r
- </widget>\r
- <customwidgets>\r
-  <customwidget>\r
-   <class>FileTableView</class>\r
-   <extends>QTableView</extends>\r
-   <header>filetableview.h</header>\r
-  </customwidget>\r
- </customwidgets>\r
- <tabstops>\r
-  <tabstop>fileTable</tabstop>\r
-  <tabstop>locationField</tabstop>\r
- </tabstops>\r
- <resources/>\r
- <connections/>\r
-</ui>\r
diff --git a/folderview.cpp b/folderview.cpp
new file mode 100644 (file)
index 0000000..747bf01
--- /dev/null
@@ -0,0 +1,6 @@
+#include "folderview.h"
+
+FolderView::FolderView(QWidget *parent) :
+    QTableView(parent)
+{
+}
diff --git a/folderview.h b/folderview.h
new file mode 100644 (file)
index 0000000..1bf1731
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef FOLDERVIEW_H
+#define FOLDERVIEW_H
+
+#include <QTableView>
+
+class FolderView : public QTableView
+{
+    Q_OBJECT
+public:
+    explicit FolderView(QWidget *parent = 0);
+
+signals:
+
+public slots:
+
+};
+
+#endif // FOLDERVIEW_H
diff --git a/locationbox.cpp b/locationbox.cpp
new file mode 100644 (file)
index 0000000..bbd0550
--- /dev/null
@@ -0,0 +1,6 @@
+#include "locationbox.h"
+
+LocationBox::LocationBox(QWidget *parent) :
+    QLineEdit(parent)
+{
+}
diff --git a/locationbox.h b/locationbox.h
new file mode 100644 (file)
index 0000000..0cd5449
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef LOCATIONBOX_H
+#define LOCATIONBOX_H
+
+#include <QLineEdit>
+
+class LocationBox : public QLineEdit
+{
+    Q_OBJECT
+public:
+    explicit LocationBox(QWidget *parent = 0);
+
+signals:
+
+public slots:
+
+};
+
+#endif // LOCATIONBOX_H
diff --git a/searchbox.cpp b/searchbox.cpp
new file mode 100644 (file)
index 0000000..4748908
--- /dev/null
@@ -0,0 +1,6 @@
+#include "searchbox.h"
+
+SearchBox::SearchBox(QWidget *parent) :
+    QLineEdit(parent)
+{
+}
diff --git a/searchbox.h b/searchbox.h
new file mode 100644 (file)
index 0000000..d397e62
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef SEARCHBOX_H
+#define SEARCHBOX_H
+
+#include <QLineEdit>
+
+class SearchBox : public QLineEdit
+{
+    Q_OBJECT
+public:
+    explicit SearchBox(QWidget *parent = 0);
+
+signals:
+
+public slots:
+
+};
+
+#endif // SEARCHBOX_H
diff --git a/singleton.hpp b/singleton.hpp
deleted file mode 100644 (file)
index 5382cee..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef SINGLETON_HPP\r
-#define SINGLETON_HPP\r
-\r
-#include <memory>\r
-\r
-///\r
-/// シングルトンパターンの基底クラス\r
-///\r
-template <class T>\r
-class Singleton\r
-{\r
-public:\r
-    static T& instance() {\r
-        static pointer_type instance(createInstance());\r
-\r
-        return getReference(instance);\r
-    }\r
-\r
-protected:\r
-    Singleton() {\r
-    }\r
-\r
-private:\r
-    typedef std::auto_ptr<T> pointer_type;\r
-\r
-    static T* createInstance() { return new T(); }\r
-    static T& getReference(const pointer_type &p) { return *p; }\r
-\r
-    explicit Singleton(const Singleton&);\r
-    Singleton& operator=(const Singleton&);\r
-};\r
-\r
-#endif // SINGLETON_HPP\r