Ctrl-H shortcut to toggle hidden files' visibility
[case] / src / case.cpp
1 // case - file manager for N900
2 // Copyright (C) 2010 Lukas Hrazky <lukkash@email.cz>
3 // 
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 // 
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 // 
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17
18 #include "case.h"
19
20 #include <QHBoxLayout>
21 #include <QVBoxLayout>
22
23
24 Case::Case(QWidget *parent) :
25     QMainWindow(parent),
26     leftPane(new Pane(this)),
27     rightPane(new Pane(this)),
28     activePane(leftPane),
29     inactivePane(rightPane),
30     cloneBtn(new Button(">", 0, 60, 70)),
31     swapBtn(new Button("<>", 0, 60, 70)),
32     copyBtn(new Button("cp>", 0, 60, 70)),
33     moveBtn(new Button("mv>", 0, 60, 70)),
34     delBtn(new Button("rm", 0, 60, 70)),
35     fileOperator(new FileOperator(this))
36 {
37     QVBoxLayout *layout = new QVBoxLayout;
38     layout->setContentsMargins(0, 0, 0, 0);
39     layout->setSpacing(0);
40
41     QHBoxLayout *paneLayout = new QHBoxLayout;
42     paneLayout->setContentsMargins(0, 0, 0, 0);
43     paneLayout->setSpacing(1);
44
45     QWidget *central = new QWidget;
46     setCentralWidget(central);
47     central->setLayout(layout);
48     layout->addLayout(paneLayout);
49
50     paneLayout->addWidget(leftPane);
51     leftPane->toggleActive();
52
53     QVBoxLayout *middleButtons = new QVBoxLayout;
54     paneLayout->addLayout(middleButtons);
55     middleButtons->setSpacing(10);
56     middleButtons->setContentsMargins(0, 0, 0, 0);
57
58     cloneBtn->setContentsMargins(0, 0, 0, 0);
59
60     middleButtons->addWidget(cloneBtn);
61     middleButtons->addWidget(swapBtn);
62     middleButtons->addWidget(copyBtn);
63     middleButtons->addWidget(moveBtn);
64     middleButtons->addWidget(delBtn);
65
66     paneLayout->addWidget(rightPane);
67
68     layout->addWidget(fileOperator);
69
70     connect(this, SIGNAL(activePaneSwitched()), leftPane, SLOT(toggleActive()));
71     connect(this, SIGNAL(activePaneSwitched()), rightPane, SLOT(toggleActive()));
72
73     connect(cloneBtn, SIGNAL(pressed()), this, SLOT(clonePane()));
74     connect(swapBtn, SIGNAL(pressed()), this, SLOT(swapPanes()));
75     connect(copyBtn, SIGNAL(pressed()), this, SLOT(copyFiles()));
76     connect(moveBtn, SIGNAL(pressed()), this, SLOT(moveFiles()));
77     connect(delBtn, SIGNAL(pressed()), this, SLOT(deleteFiles()));
78 }
79
80
81 void Case::switchActivePane() {
82     Pane *tmpPane = activePane;
83     activePane = inactivePane;
84     inactivePane = tmpPane;
85
86     if (leftPane == activePane) {
87         cloneBtn->setText(">");
88         copyBtn->setText("cp>");
89         moveBtn->setText("mv>");
90     } else {
91         cloneBtn->setText("<");
92         copyBtn->setText("<cp");
93         moveBtn->setText("<mv");
94     }
95
96     emit activePaneSwitched();
97 }
98
99
100 void Case::keyPressEvent(QKeyEvent *e) {
101     if(e->key() == Qt::Key_H && e->modifiers() == Qt::ControlModifier) {
102         activePane->toggleShowHiddenFiles();
103     } else {
104         QMainWindow::keyPressEvent(e);
105     }
106 }
107
108
109 void Case::clonePane() {
110     inactivePane->changePath(activePane->path());
111 }
112
113
114 void Case::swapPanes() {
115     QString tmpPath = activePane->path();
116     activePane->changePath(inactivePane->path());
117     inactivePane->changePath(tmpPath);
118 }
119
120
121 void Case::copyFiles() {
122     if (activePane->selection().size()) {
123         QDir dest = inactivePane->path();
124         fileOperator->copyFiles(activePane->selection(), dest);
125     }
126 }
127
128
129 void Case::moveFiles() {
130     if (activePane->selection().size()) {
131         QDir dest = inactivePane->path();
132         fileOperator->moveFiles(activePane->selection(), dest);
133     }
134 }
135
136
137 void Case::deleteFiles() {
138     if (activePane->selection().size()) {
139         fileOperator->deleteFiles(activePane->selection());
140     }
141 }