677044727a5df3d91c15c46894dcab589dbf35d2
[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::clonePane() {
101     inactivePane->changePath(activePane->path());
102 }
103
104
105 void Case::swapPanes() {
106     QString tmpPath = activePane->path();
107     activePane->changePath(inactivePane->path());
108     inactivePane->changePath(tmpPath);
109 }
110
111
112 void Case::copyFiles() {
113     if (activePane->selection().size()) {
114         QDir dest = inactivePane->path();
115         fileOperator->copyFiles(activePane->selection(), dest);
116     }
117 }
118
119
120 void Case::moveFiles() {
121     if (activePane->selection().size()) {
122         QDir dest = inactivePane->path();
123         fileOperator->moveFiles(activePane->selection(), dest);
124     }
125 }
126
127
128 void Case::deleteFiles() {
129     if (activePane->selection().size()) {
130         fileOperator->deleteFiles(activePane->selection());
131     }
132 }