pisdr windows drives support

git-svn-id: svn://db.shs.com.ru/pip@57 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
2015-04-01 11:58:17 +00:00
parent 136e5ea040
commit fce75cb88f
13 changed files with 364 additions and 26 deletions

View File

@@ -135,6 +135,7 @@ void Daemon::tileEvent(PIScreenTile * t, TileEvent e) {
void Daemon::keyEvent(PIKbdListener::KeyEvent key) {
if (!tile_root->visible) return;
if (screen.dialogTile()) return;
switch (key.key) {
case PIKbdListener::Esc:
if (mode == 0)
@@ -158,7 +159,7 @@ void Daemon::keyEvent(PIKbdListener::KeyEvent key) {
void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) {
PIByteArray ba;
//Remote * r = remotes.value(conn_name);
//piCout << key.key << key.modifiers;
piCout << key.key << key.modifiers;
switch (key.key) {
case PIKbdListener::Return:
{

View File

@@ -4,6 +4,7 @@
extern PIScreen screen;
FileManager::TileDir::TileDir(): TileList() {
label_path = 0;
selection_mode = TileList::MultiSelection;
@@ -13,19 +14,38 @@ FileManager::TileDir::TileDir(): TileList() {
bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) {
if (key.key == 'R') {
if (remote) {
((void(*)(void*,PIKbdListener::KeyEvent))key_func)(fm, key);
} else {
bool pass = false;
PIString nd;
switch (key.key) {
case 'R': if (!remote) updateDir(); pass = true; break;
case PIKbdListener::F7:
nd = askNewDir();
setFocus();
if (nd.isEmpty()) return true;
if (!remote) {
PIDir::make(dir.absolutePath() + PIDir::separator + nd);
updateDir();
}
return true;
}
if (key.key == PIKbdListener::Return) {
pass = true;
break;
case PIKbdListener::F8:
if (selected.isEmpty())
selected << cur;
if (!askQuestion("Delete selected?")) return false;
setFocus();
if (!remote) {
PIStringList sl;
PIVector<int> sind = selected.toVector();
piForeachC (int i, sind)
sl << entries[i].name();
removeFiles(dir, sl);
updateDir();
}
pass = true;
break;
case PIKbdListener::Return:
if (cur < entries.size_s() && cur >= 0) {
if (remote) {
((void(*)(void*,PIKbdListener::KeyEvent))key_func)(fm, key);
} else {
if (!remote) {
//piCout << entries[cur];
if (entries[cur].isDir()) {
prev_pos[dir.path()] = PIPair<int, int>(cur, offset);
@@ -37,7 +57,12 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) {
updateDir();
}
}
pass = true;
}
break;
}
if (remote && pass) {
((void(*)(void*,PIKbdListener::KeyEvent))key_func)(fm, key);
return true;
}
return TileList::keyEvent(key);
@@ -75,8 +100,8 @@ void FileManager::TileDir::setContent(const PIVector<PIFile::FileInfo> & l) {
bool root = dir.path() == PIDir::separator;
for (int i = 0; i < l.size_s(); ++i) {
if (l[i].name() == ".") continue;
if (l[i].name() == ".." && !root) {
dl.push_front(l[i]);
if (l[i].name() == "..") {
if (!root) dl.push_front(l[i]);
continue;
}
if (l[i].isDir()) dl << l[i];
@@ -191,7 +216,7 @@ FileManager::FileManager(Daemon * d) {
labels->size_policy = Fixed;
labels->direction = Horizontal;
PIVector<SSPair> ll;
ll << SSPair(" Esc", "Exit") << SSPair(" F5", "Copy") << SSPair(" F6", "Move") << SSPair(" F8", "Delete");
ll << SSPair(" Esc", "Exit") << SSPair(" F5", "Copy") << SSPair(" F6", "Move") << SSPair(" F7", "MkDir") << SSPair(" F8", "Delete");
piForeachC (SSPair & l, ll) {
tl = new TileSimple(); labels->addTile(tl);
tl->content << TileSimple::Row(l.first, CellFormat(White, Transparent, Bold));
@@ -259,6 +284,7 @@ void FileManager::remoteRestoreDir() {
void FileManager::keyEvent(PIKbdListener::KeyEvent key) {
if (!tile_root->visible) return;
if (screen.dialogTile()) return;
switch (key.key) {
case PIKbdListener::Esc:
menuRequest();

View File

@@ -196,6 +196,7 @@ public:
}
}
EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, e) {
if (screen.dialogTile()) return;
if (tpeer->visible || tinfo->visible)
if (e.key == PIKbdListener::Esc) menuRequest();
//piCout << "key" << e.key;

View File

@@ -0,0 +1,122 @@
#include "shared.h"
extern PIScreen screen;
class DlgWatcher: public PIThread {
PIOBJECT(DlgWatcher)
public:
DlgWatcher() {close = ok = false;}
EVENT_HANDLER2(void, tileEvent, PIScreenTile * , tile, PIScreenTypes::TileEvent, e) {
if (e.type == TileButtons::ButtonSelected) {
ok = e.data.toInt() == 0;
close = true;
}
}
EVENT_HANDLER1(void, keyPressed, PIKbdListener::KeyEvent, key) {
if (key.key == PIKbdListener::Return) {
ok = true;
close = true;
}
if (key.key == PIKbdListener::Esc) {
ok = false;
close = true;
}
}
bool ok;
bool close;
};
PIString askNewDir() {
PIScreenTile dlg;
dlg.setMargins(1, 1, 1, 1);
dlg.spacing = 1;
dlg.back_format.color_back = Yellow;
TileSimple * lbl = new TileSimple();
TileInput * input = new TileInput();
TileButtons * btns = new TileButtons();
lbl->back_format.color_back = Yellow;
btns->back_format.color_back = Yellow;
lbl->content << TileSimple::Row("Enter new directory name:", CellFormat(Black, Transparent));
btns->content << TileButtons::Button(" Ok ", CellFormat());
btns->content << TileButtons::Button("Cancel", CellFormat());
dlg.addTile(lbl);
dlg.addTile(input);
dlg.addTile(btns);
DlgWatcher w;
CONNECTU(&screen, keyPressed, &w, keyPressed)
CONNECTU(&screen, tileEvent, &w, tileEvent)
screen.setDialogTile(&dlg);
while (!w.close) {
PIKbdListener::instance()->readKeyboard();
piMSleep(10);
}
if (!w.ok) return PIString();
return input->text;
}
bool askQuestion(const PIString & t) {
PIScreenTile dlg;
dlg.setMargins(1, 1, 1, 1);
dlg.spacing = 1;
dlg.back_format.color_back = Yellow;
TileSimple * lbl = new TileSimple();
TileButtons * btns = new TileButtons();
lbl->back_format.color_back = Yellow;
btns->back_format.color_back = Yellow;
lbl->content << TileSimple::Row(t, CellFormat(Black, Transparent));
btns->content << TileButtons::Button(" Ok ", CellFormat());
btns->content << TileButtons::Button("Cancel", CellFormat());
dlg.addTile(lbl);
dlg.addTile(btns);
DlgWatcher w;
CONNECTU(&screen, keyPressed, &w, keyPressed)
CONNECTU(&screen, tileEvent, &w, tileEvent)
screen.setDialogTile(&dlg);
while (!w.close) {
PIKbdListener::instance()->readKeyboard();
piMSleep(10);
}
return w.ok;
}
void showInfo(const PIString & t) {
PIScreenTile dlg;
dlg.setMargins(1, 1, 1, 1);
dlg.spacing = 1;
dlg.back_format.color_back = Yellow;
TileSimple * lbl = new TileSimple();
TileButtons * btns = new TileButtons();
lbl->back_format.color_back = Yellow;
btns->back_format.color_back = Yellow;
lbl->content << TileSimple::Row(t, CellFormat(Black, Transparent));
btns->content << TileButtons::Button(" Ok ", CellFormat());
dlg.addTile(lbl);
dlg.addTile(btns);
DlgWatcher w;
CONNECTU(&screen, keyPressed, &w, keyPressed)
CONNECTU(&screen, tileEvent, &w, tileEvent)
screen.setDialogTile(&dlg);
while (!w.close) {
PIKbdListener::instance()->readKeyboard();
piMSleep(10);
}
}
void removeFiles(const PIDir & dir, PIStringList l) {
l.removeOne("..");
PIString ap = dir.absolutePath();
piForeachC (PIString & s, l) {
PIFile::FileInfo fi = PIFile::fileInfo(ap + PIDir::separator + s);
if (fi.isDir()) {
PIVector<PIFile::FileInfo> el = PIDir::allEntries(fi.path);
piForeachCR (PIFile::FileInfo & e, el)
PIFile::remove(e.path);
}
PIFile::remove(fi.path);
}
}

View File

@@ -1,4 +1,15 @@
#ifndef SHARED_H
#define SHARED_H
#include "pidir.h"
#include "piscreen.h"
#include "piscreentiles.h"
using namespace PIScreenTypes;
PIString askNewDir();
bool askQuestion(const PIString & t);
void showInfo(const PIString & t);
void removeFiles(const PIDir & dir, PIStringList l);
#endif // SHARED_H