pisdr windows drives support
git-svn-id: svn://db.shs.com.ru/pip@57 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
project(pip)
|
project(pip)
|
||||||
cmake_minimum_required(VERSION 2.6)
|
cmake_minimum_required(VERSION 2.6)
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
include(CheckFunctionExists)
|
include(CheckFunctionExists)
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
* */
|
* */
|
||||||
|
|
||||||
bool PIKbdListener::exiting;
|
bool PIKbdListener::exiting;
|
||||||
|
PIKbdListener * PIKbdListener::_object = 0;
|
||||||
|
|
||||||
|
|
||||||
#ifndef WINDOWS
|
#ifndef WINDOWS
|
||||||
@@ -105,6 +106,7 @@ PRIVATE_DEFINITION_END(PIKbdListener)
|
|||||||
|
|
||||||
PIKbdListener::PIKbdListener(KBFunc slot, void * _data): PIThread() {
|
PIKbdListener::PIKbdListener(KBFunc slot, void * _data): PIThread() {
|
||||||
setName("keyboard_listener");
|
setName("keyboard_listener");
|
||||||
|
_object = this;
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
PRIVATE->hIn = GetStdHandle(STD_INPUT_HANDLE);
|
PRIVATE->hIn = GetStdHandle(STD_INPUT_HANDLE);
|
||||||
GetConsoleMode(PRIVATE->hIn, &PRIVATE->smode);
|
GetConsoleMode(PRIVATE->hIn, &PRIVATE->smode);
|
||||||
@@ -140,7 +142,7 @@ void PIKbdListener::begin() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PIKbdListener::run() {
|
void PIKbdListener::readKeyboard() {
|
||||||
ke.key = 0;
|
ke.key = 0;
|
||||||
ke.modifiers = 0;
|
ke.modifiers = 0;
|
||||||
memset(rc, 0, 8);
|
memset(rc, 0, 8);
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ public:
|
|||||||
//! Returns exit key, default 'Q'
|
//! Returns exit key, default 'Q'
|
||||||
char exitKey() const {return exit_key;}
|
char exitKey() const {return exit_key;}
|
||||||
|
|
||||||
|
void readKeyboard();
|
||||||
|
|
||||||
//! Returns if keyboard listening is active (not running!)
|
//! Returns if keyboard listening is active (not running!)
|
||||||
bool isActive() {return is_active;}
|
bool isActive() {return is_active;}
|
||||||
@@ -144,10 +145,11 @@ public:
|
|||||||
//! \}
|
//! \}
|
||||||
|
|
||||||
static bool exiting;
|
static bool exiting;
|
||||||
|
static PIKbdListener * instance() {return _object;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void begin();
|
void begin();
|
||||||
void run();
|
void run() {readKeyboard();}
|
||||||
void end();
|
void end();
|
||||||
|
|
||||||
PRIVATE_DECLARATION
|
PRIVATE_DECLARATION
|
||||||
@@ -163,6 +165,7 @@ private:
|
|||||||
void * data_;
|
void * data_;
|
||||||
char rc[8];
|
char rc[8];
|
||||||
KeyEvent ke;
|
KeyEvent ke;
|
||||||
|
static PIKbdListener * _object;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -77,9 +77,6 @@ public:
|
|||||||
//! \fn void waitForFinish()
|
//! \fn void waitForFinish()
|
||||||
//! \brief block until finished (exit key will be pressed)
|
//! \brief block until finished (exit key will be pressed)
|
||||||
|
|
||||||
//! \fn void clearVariables(bool clearScreen = true)
|
|
||||||
//! \brief Remove all columns at current tab and if "clearScreen" clear the screen
|
|
||||||
|
|
||||||
//! \fn void start(bool wait = false)
|
//! \fn void start(bool wait = false)
|
||||||
//! \brief Start console output and if "wait" block until finished (exit key will be pressed)
|
//! \brief Start console output and if "wait" block until finished (exit key will be pressed)
|
||||||
|
|
||||||
@@ -93,6 +90,9 @@ public:
|
|||||||
//! \fn void keyPressed(PIKbdListener::KeyEvent key, void * data)
|
//! \fn void keyPressed(PIKbdListener::KeyEvent key, void * data)
|
||||||
//! \brief Raise on key "key" pressed, "data" is pointer to %PIConsole object
|
//! \brief Raise on key "key" pressed, "data" is pointer to %PIConsole object
|
||||||
|
|
||||||
|
//! \fn void tileEvent(PIScreenTile * tile, PIScreenTypes::TileEvent e)
|
||||||
|
//! \brief Raise on some event "e" from tile "tile"
|
||||||
|
|
||||||
//! \}
|
//! \}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -53,6 +53,12 @@ TileSimple::TileSimple(const PIString & n): PIScreenTile(n) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TileSimple::TileSimple(const TileSimple::Row & r): PIScreenTile() {
|
||||||
|
alignment = Left;
|
||||||
|
content << r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TileSimple::sizeHint(int & w, int & h) const {
|
void TileSimple::sizeHint(int & w, int & h) const {
|
||||||
w = h = 0;
|
w = h = 0;
|
||||||
piForeachC (Row & r, content)
|
piForeachC (Row & r, content)
|
||||||
@@ -95,7 +101,7 @@ void TileList::sizeHint(int & w, int & h) const {
|
|||||||
|
|
||||||
void TileList::drawEvent(PIScreenDrawer * d) {
|
void TileList::drawEvent(PIScreenDrawer * d) {
|
||||||
lhei = height - 2;
|
lhei = height - 2;
|
||||||
int osp = piMini(3, lhei / 4);
|
//int osp = piMini(3, lhei / 4);
|
||||||
int is = piClampi(offset, 0, piMaxi(0, content.size_s() - 1)), ie = piClampi(offset + lhei, 0, content.size_s());
|
int is = piClampi(offset, 0, piMaxi(0, content.size_s() - 1)), ie = piClampi(offset + lhei, 0, content.size_s());
|
||||||
if (is > 0) d->drawText(x, y, PIString(" /\\ ").repeat(width / 4), Green, Default, Bold);
|
if (is > 0) d->drawText(x, y, PIString(" /\\ ").repeat(width / 4), Green, Default, Bold);
|
||||||
//piCout << is << ie << offset << lhei << content.size_s();
|
//piCout << is << ie << offset << lhei << content.size_s();
|
||||||
@@ -428,3 +434,141 @@ bool TilePICout::keyEvent(PIKbdListener::KeyEvent key) {
|
|||||||
}
|
}
|
||||||
return TileList::keyEvent(key);
|
return TileList::keyEvent(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TileInput::TileInput(const PIString & n): PIScreenTile(n) {
|
||||||
|
focus_flags = CanHasFocus | NextByTab;
|
||||||
|
back_format.color_back = White;
|
||||||
|
format.color_char = Black;
|
||||||
|
format.color_back = White;
|
||||||
|
max_length = 1024;
|
||||||
|
cur = offset = 0;
|
||||||
|
inv = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TileInput::sizeHint(int & w, int & h) const {
|
||||||
|
w = 32;
|
||||||
|
h = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TileInput::drawEvent(PIScreenDrawer * d) {
|
||||||
|
PIString ps = text.mid(offset, width - 2);
|
||||||
|
d->drawText(x + 1, y, ps, (Color)format.color_char, Transparent, (CharFlags)format.flags);
|
||||||
|
if (offset > 0)
|
||||||
|
d->drawText(x, y, "<", Green, Black, Bold);
|
||||||
|
if (text.size_s() - offset >= width - 2)
|
||||||
|
d->drawText(x + width - 1, y, ">", Green, Black, Bold);
|
||||||
|
if (!has_focus) return;
|
||||||
|
Color cb = (Color)format.color_char, cc = (Color)format.color_back;
|
||||||
|
if (tm_blink.elapsed_m() >= 650) {
|
||||||
|
tm_blink.reset();
|
||||||
|
inv = !inv;
|
||||||
|
}
|
||||||
|
if (inv) piSwap(cb, cc);
|
||||||
|
d->drawText(x + 1 + cur - offset, y, text.mid(cur, 1).expandLeftTo(1, ' '), cc, cb, (CharFlags)format.flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool TileInput::keyEvent(PIKbdListener::KeyEvent key) {
|
||||||
|
int lwid = piMaxi(0, width - 2);
|
||||||
|
int oo(0), osp = piMini(3, lwid / 4);
|
||||||
|
lwid--;
|
||||||
|
switch (key.key) {
|
||||||
|
case PIKbdListener::LeftArrow:
|
||||||
|
cur--;
|
||||||
|
oo--;
|
||||||
|
if (key.modifiers[PIKbdListener::Ctrl]) {
|
||||||
|
cur -= 4;
|
||||||
|
oo -= 4;
|
||||||
|
}
|
||||||
|
if (cur < 0) cur = 0;
|
||||||
|
if (cur - offset < osp) offset += oo;
|
||||||
|
if (offset < 0) offset = 0;
|
||||||
|
reserCursor();
|
||||||
|
return true;
|
||||||
|
case PIKbdListener::RightArrow:
|
||||||
|
cur++;
|
||||||
|
oo++;
|
||||||
|
if (key.modifiers[PIKbdListener::Ctrl]) {
|
||||||
|
cur += 4;
|
||||||
|
oo += 4;
|
||||||
|
}
|
||||||
|
if (cur > text.size_s()) cur = text.size_s();
|
||||||
|
if (cur - offset >= lwid - osp) offset += oo;
|
||||||
|
if (offset >= text.size_s() - lwid) offset = text.size_s() - lwid;
|
||||||
|
if (offset < 0) offset = 0;
|
||||||
|
reserCursor();
|
||||||
|
return true;
|
||||||
|
case PIKbdListener::Home:
|
||||||
|
cur = offset = 0;
|
||||||
|
reserCursor();
|
||||||
|
return true;
|
||||||
|
case PIKbdListener::End:
|
||||||
|
cur = text.size_s();
|
||||||
|
offset = text.size_s() - lwid;
|
||||||
|
if (offset < 0) offset = 0;
|
||||||
|
reserCursor();
|
||||||
|
return true;
|
||||||
|
case PIKbdListener::Backspace:
|
||||||
|
if (cur > text.size_s() || text.isEmpty())
|
||||||
|
return true;
|
||||||
|
text.remove(cur - 1, 1);
|
||||||
|
cur--;
|
||||||
|
if (cur > text.size_s()) cur = text.size_s();
|
||||||
|
if (cur - offset >= lwid - osp) offset += oo;
|
||||||
|
if (offset >= text.size_s() - lwid) offset = text.size_s() - lwid;
|
||||||
|
if (offset < 0) offset = 0;
|
||||||
|
reserCursor();
|
||||||
|
return true;
|
||||||
|
case PIKbdListener::Delete:
|
||||||
|
if (cur >= text.size_s() || text.isEmpty())
|
||||||
|
return true;
|
||||||
|
text.remove(cur, 1);
|
||||||
|
if (cur < 0) cur = 0;
|
||||||
|
if (cur > text.size_s()) cur = text.size_s();
|
||||||
|
if (cur - offset < osp) offset += oo;
|
||||||
|
if (offset < 0) offset = 0;
|
||||||
|
reserCursor();
|
||||||
|
return true;
|
||||||
|
case PIKbdListener::UpArrow:
|
||||||
|
case PIKbdListener::DownArrow:
|
||||||
|
case PIKbdListener::PageUp:
|
||||||
|
case PIKbdListener::PageDown:
|
||||||
|
case PIKbdListener::Insert:
|
||||||
|
case PIKbdListener::Return:
|
||||||
|
case PIKbdListener::Esc:
|
||||||
|
case PIKbdListener::F1:
|
||||||
|
case PIKbdListener::F2:
|
||||||
|
case PIKbdListener::F3:
|
||||||
|
case PIKbdListener::F4:
|
||||||
|
case PIKbdListener::F5:
|
||||||
|
case PIKbdListener::F6:
|
||||||
|
case PIKbdListener::F7:
|
||||||
|
case PIKbdListener::F8:
|
||||||
|
case PIKbdListener::F9:
|
||||||
|
case PIKbdListener::F10:
|
||||||
|
case PIKbdListener::F11:
|
||||||
|
case PIKbdListener::F12:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
text.insert(cur, PIChar(key.key));
|
||||||
|
cur++;
|
||||||
|
oo++;
|
||||||
|
if (cur - offset >= lwid - osp) offset += oo;
|
||||||
|
if (offset >= text.size_s() - lwid) offset = text.size_s() - lwid;
|
||||||
|
if (offset < 0) offset = 0;
|
||||||
|
reserCursor();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return PIScreenTile::keyEvent(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TileInput::reserCursor() {
|
||||||
|
tm_blink.reset();
|
||||||
|
inv = false;
|
||||||
|
}
|
||||||
|
|||||||
@@ -28,8 +28,9 @@
|
|||||||
|
|
||||||
class PIP_EXPORT TileSimple: public PIScreenTile {
|
class PIP_EXPORT TileSimple: public PIScreenTile {
|
||||||
public:
|
public:
|
||||||
TileSimple(const PIString & n = PIString());
|
|
||||||
typedef PIPair<PIString, PIScreenTypes::CellFormat> Row;
|
typedef PIPair<PIString, PIScreenTypes::CellFormat> Row;
|
||||||
|
TileSimple(const PIString & n = PIString());
|
||||||
|
TileSimple(const Row & r);
|
||||||
PIVector<Row> content;
|
PIVector<Row> content;
|
||||||
PIScreenTypes::Alignment alignment;
|
PIScreenTypes::Alignment alignment;
|
||||||
protected:
|
protected:
|
||||||
@@ -148,4 +149,26 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class PIP_EXPORT TileInput: public PIScreenTile {
|
||||||
|
public:
|
||||||
|
TileInput(const PIString & n = PIString());
|
||||||
|
/*enum EventType {
|
||||||
|
EditFinished
|
||||||
|
};*/
|
||||||
|
PIScreenTypes::CellFormat format;
|
||||||
|
PIString text;
|
||||||
|
int max_length;
|
||||||
|
protected:
|
||||||
|
void sizeHint(int & w, int & h) const;
|
||||||
|
void drawEvent(PIScreenDrawer * d);
|
||||||
|
bool keyEvent(PIKbdListener::KeyEvent key);
|
||||||
|
void reserCursor();
|
||||||
|
int cur, offset;
|
||||||
|
bool inv;
|
||||||
|
PITimeMeasurer tm_blink;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // PISCREENTILES_H
|
#endif // PISCREENTILES_H
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ bool PIString::operator >(const PIString & str) const {
|
|||||||
PIString PIString::mid(const int start, const int len) const {
|
PIString PIString::mid(const int start, const int len) const {
|
||||||
//PIString str;
|
//PIString str;
|
||||||
int s = start, l = len;
|
int s = start, l = len;
|
||||||
if (l == 0) return PIString();
|
if (l == 0 || start >= length()) return PIString();
|
||||||
if (s < 0) {
|
if (s < 0) {
|
||||||
l += s;
|
l += s;
|
||||||
s = 0;
|
s = 0;
|
||||||
@@ -273,12 +273,13 @@ PIString PIString::mid(const int start, const int len) const {
|
|||||||
if (l < 0) {
|
if (l < 0) {
|
||||||
//for (uint i = s; i < size(); ++i)
|
//for (uint i = s; i < size(); ++i)
|
||||||
// str += at(i);
|
// str += at(i);
|
||||||
return PIString(&(at(s)), size() - s);
|
return PIString(&(at(s)), size_s() - s);
|
||||||
} else {
|
} else {
|
||||||
if (l > length() - s)
|
if (l > length() - s)
|
||||||
l = length() - s;
|
l = length() - s;
|
||||||
//for (int i = s; i < s + l; ++i)
|
//for (int i = s; i < s + l; ++i)
|
||||||
// str += at(i);
|
// str += at(i);
|
||||||
|
//std::cout << "mid " << s << " " << l << " " << size_s() << " " << start << " " << len << "\n";
|
||||||
return PIString(&(at(s)), l);
|
return PIString(&(at(s)), l);
|
||||||
}
|
}
|
||||||
return PIString();
|
return PIString();
|
||||||
|
|||||||
@@ -698,6 +698,7 @@ void PIPeer::syncPeers() {
|
|||||||
PIMutexLocker locker(eth_mutex);
|
PIMutexLocker locker(eth_mutex);
|
||||||
PIString pn;
|
PIString pn;
|
||||||
bool change = false;
|
bool change = false;
|
||||||
|
PIStringList dpeers;
|
||||||
peers_mutex.lock();
|
peers_mutex.lock();
|
||||||
for (int i = 0; i < peers.size_s(); ++i) {
|
for (int i = 0; i < peers.size_s(); ++i) {
|
||||||
PeerInfo & cp(peers[i]);
|
PeerInfo & cp(peers[i]);
|
||||||
@@ -710,8 +711,7 @@ void PIPeer::syncPeers() {
|
|||||||
sendPeerRemove(pn);
|
sendPeerRemove(pn);
|
||||||
--i;
|
--i;
|
||||||
removeNeighbour(pn);
|
removeNeighbour(pn);
|
||||||
peerDisconnected(pn);
|
dpeers << pn;
|
||||||
peerDisconnectedEvent(pn);
|
|
||||||
change = true;
|
change = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -731,6 +731,10 @@ void PIPeer::syncPeers() {
|
|||||||
ba << int(3) << self_info.name << self_info << peers;
|
ba << int(3) << self_info.name << self_info << peers;
|
||||||
peers_mutex.unlock();
|
peers_mutex.unlock();
|
||||||
sendMBcast(ba);
|
sendMBcast(ba);
|
||||||
|
piForeachC (PIString & p, dpeers) {
|
||||||
|
peerDisconnected(p);
|
||||||
|
peerDisconnectedEvent(p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ void Daemon::tileEvent(PIScreenTile * t, TileEvent e) {
|
|||||||
|
|
||||||
void Daemon::keyEvent(PIKbdListener::KeyEvent key) {
|
void Daemon::keyEvent(PIKbdListener::KeyEvent key) {
|
||||||
if (!tile_root->visible) return;
|
if (!tile_root->visible) return;
|
||||||
|
if (screen.dialogTile()) return;
|
||||||
switch (key.key) {
|
switch (key.key) {
|
||||||
case PIKbdListener::Esc:
|
case PIKbdListener::Esc:
|
||||||
if (mode == 0)
|
if (mode == 0)
|
||||||
@@ -158,7 +159,7 @@ void Daemon::keyEvent(PIKbdListener::KeyEvent key) {
|
|||||||
void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) {
|
void Daemon::fmKeyEvent(PIKbdListener::KeyEvent key) {
|
||||||
PIByteArray ba;
|
PIByteArray ba;
|
||||||
//Remote * r = remotes.value(conn_name);
|
//Remote * r = remotes.value(conn_name);
|
||||||
//piCout << key.key << key.modifiers;
|
piCout << key.key << key.modifiers;
|
||||||
switch (key.key) {
|
switch (key.key) {
|
||||||
case PIKbdListener::Return:
|
case PIKbdListener::Return:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
extern PIScreen screen;
|
extern PIScreen screen;
|
||||||
|
|
||||||
|
|
||||||
FileManager::TileDir::TileDir(): TileList() {
|
FileManager::TileDir::TileDir(): TileList() {
|
||||||
label_path = 0;
|
label_path = 0;
|
||||||
selection_mode = TileList::MultiSelection;
|
selection_mode = TileList::MultiSelection;
|
||||||
@@ -13,19 +14,38 @@ FileManager::TileDir::TileDir(): TileList() {
|
|||||||
|
|
||||||
|
|
||||||
bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) {
|
bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) {
|
||||||
if (key.key == 'R') {
|
bool pass = false;
|
||||||
if (remote) {
|
PIString nd;
|
||||||
((void(*)(void*,PIKbdListener::KeyEvent))key_func)(fm, key);
|
switch (key.key) {
|
||||||
} else {
|
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();
|
updateDir();
|
||||||
}
|
}
|
||||||
return true;
|
pass = true;
|
||||||
}
|
break;
|
||||||
if (key.key == PIKbdListener::Return) {
|
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 (cur < entries.size_s() && cur >= 0) {
|
||||||
if (remote) {
|
if (!remote) {
|
||||||
((void(*)(void*,PIKbdListener::KeyEvent))key_func)(fm, key);
|
|
||||||
} else {
|
|
||||||
//piCout << entries[cur];
|
//piCout << entries[cur];
|
||||||
if (entries[cur].isDir()) {
|
if (entries[cur].isDir()) {
|
||||||
prev_pos[dir.path()] = PIPair<int, int>(cur, offset);
|
prev_pos[dir.path()] = PIPair<int, int>(cur, offset);
|
||||||
@@ -37,7 +57,12 @@ bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) {
|
|||||||
updateDir();
|
updateDir();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pass = true;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (remote && pass) {
|
||||||
|
((void(*)(void*,PIKbdListener::KeyEvent))key_func)(fm, key);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return TileList::keyEvent(key);
|
return TileList::keyEvent(key);
|
||||||
@@ -75,8 +100,8 @@ void FileManager::TileDir::setContent(const PIVector<PIFile::FileInfo> & l) {
|
|||||||
bool root = dir.path() == PIDir::separator;
|
bool root = dir.path() == PIDir::separator;
|
||||||
for (int i = 0; i < l.size_s(); ++i) {
|
for (int i = 0; i < l.size_s(); ++i) {
|
||||||
if (l[i].name() == ".") continue;
|
if (l[i].name() == ".") continue;
|
||||||
if (l[i].name() == ".." && !root) {
|
if (l[i].name() == "..") {
|
||||||
dl.push_front(l[i]);
|
if (!root) dl.push_front(l[i]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (l[i].isDir()) dl << l[i];
|
if (l[i].isDir()) dl << l[i];
|
||||||
@@ -191,7 +216,7 @@ FileManager::FileManager(Daemon * d) {
|
|||||||
labels->size_policy = Fixed;
|
labels->size_policy = Fixed;
|
||||||
labels->direction = Horizontal;
|
labels->direction = Horizontal;
|
||||||
PIVector<SSPair> ll;
|
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) {
|
piForeachC (SSPair & l, ll) {
|
||||||
tl = new TileSimple(); labels->addTile(tl);
|
tl = new TileSimple(); labels->addTile(tl);
|
||||||
tl->content << TileSimple::Row(l.first, CellFormat(White, Transparent, Bold));
|
tl->content << TileSimple::Row(l.first, CellFormat(White, Transparent, Bold));
|
||||||
@@ -259,6 +284,7 @@ void FileManager::remoteRestoreDir() {
|
|||||||
|
|
||||||
void FileManager::keyEvent(PIKbdListener::KeyEvent key) {
|
void FileManager::keyEvent(PIKbdListener::KeyEvent key) {
|
||||||
if (!tile_root->visible) return;
|
if (!tile_root->visible) return;
|
||||||
|
if (screen.dialogTile()) return;
|
||||||
switch (key.key) {
|
switch (key.key) {
|
||||||
case PIKbdListener::Esc:
|
case PIKbdListener::Esc:
|
||||||
menuRequest();
|
menuRequest();
|
||||||
|
|||||||
@@ -196,6 +196,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, e) {
|
EVENT_HANDLER1(void, keyEvent, PIKbdListener::KeyEvent, e) {
|
||||||
|
if (screen.dialogTile()) return;
|
||||||
if (tpeer->visible || tinfo->visible)
|
if (tpeer->visible || tinfo->visible)
|
||||||
if (e.key == PIKbdListener::Esc) menuRequest();
|
if (e.key == PIKbdListener::Esc) menuRequest();
|
||||||
//piCout << "key" << e.key;
|
//piCout << "key" << e.key;
|
||||||
|
|||||||
122
utils/system_daemon/shared.cpp
Normal file
122
utils/system_daemon/shared.cpp
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,15 @@
|
|||||||
|
#ifndef SHARED_H
|
||||||
|
#define SHARED_H
|
||||||
|
|
||||||
|
#include "pidir.h"
|
||||||
#include "piscreen.h"
|
#include "piscreen.h"
|
||||||
#include "piscreentiles.h"
|
#include "piscreentiles.h"
|
||||||
|
|
||||||
using namespace PIScreenTypes;
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user