PIString fix
git-svn-id: svn://db.shs.com.ru/pip@44 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -8,22 +8,34 @@ FileManager::TileDir::TileDir(): TileList() {
|
||||
label_path = 0;
|
||||
selection_mode = TileList::MultiSelection;
|
||||
dir = PIDir::current();
|
||||
resized = false;
|
||||
resized = remote = false;
|
||||
}
|
||||
|
||||
|
||||
bool FileManager::TileDir::keyEvent(PIKbdListener::KeyEvent key) {
|
||||
if (key.key == 'R') {
|
||||
if (remote) {
|
||||
((void(*)(void*,PIKbdListener::KeyEvent))key_func)(fm, key);
|
||||
} else {
|
||||
updateDir();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (key.key == PIKbdListener::Return) {
|
||||
if (cur < entries.size_s() && cur >= 0) {
|
||||
//piCout << entries[cur];
|
||||
if (entries[cur].isDir()) {
|
||||
prev_pos[dir.path()] = PIPair<int, int>(cur, offset);
|
||||
dir.cd(entries[cur].name());
|
||||
PIPair<int, int> cp = prev_pos.value(dir.path());
|
||||
cur = cp.first;
|
||||
offset = cp.second;
|
||||
selected.clear();
|
||||
updateDir();
|
||||
if (remote) {
|
||||
((void(*)(void*,PIKbdListener::KeyEvent))key_func)(fm, key);
|
||||
} else {
|
||||
//piCout << entries[cur];
|
||||
if (entries[cur].isDir()) {
|
||||
prev_pos[dir.path()] = PIPair<int, int>(cur, offset);
|
||||
dir.cd(entries[cur].name());
|
||||
PIPair<int, int> cp = prev_pos.value(dir.path());
|
||||
cur = cp.first;
|
||||
offset = cp.second;
|
||||
selected.clear();
|
||||
updateDir();
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -42,34 +54,45 @@ void FileManager::TileDir::unlock() {
|
||||
}
|
||||
|
||||
|
||||
void FileManager::TileDir::updateDir() {
|
||||
//if (!enabled) return;
|
||||
entries.clear();
|
||||
lock();
|
||||
int pc = cur, po = offset;
|
||||
void FileManager::TileDir::showReading() {
|
||||
cur = -1;
|
||||
offset = 0;
|
||||
entries.clear();
|
||||
content.resize(1);
|
||||
content[0] = Row("... Reading ...", CellFormat());
|
||||
unlock();
|
||||
}
|
||||
|
||||
|
||||
void FileManager::TileDir::setContent(const PIVector<PIFile::FileInfo> & l) {
|
||||
PIVector<PIFile::FileInfo> el = dir.entries(), fl, dl;
|
||||
if (el.isEmpty()) {
|
||||
entries.clear();
|
||||
if (l.isEmpty()) {
|
||||
PIFile::FileInfo fi;
|
||||
fi.path = "..";
|
||||
fi.flags |= PIFile::FileInfo::DotDot | PIFile::FileInfo::Dir;
|
||||
entries << fi;
|
||||
} else {
|
||||
for (int i = 0; i < el.size_s(); ++i) {
|
||||
if (el[i].name() == ".") continue;
|
||||
if (el[i].name() == "..") {
|
||||
dl.push_front(el[i]);
|
||||
for (int i = 0; i < l.size_s(); ++i) {
|
||||
if (l[i].name() == ".") continue;
|
||||
if (l[i].name() == "..") {
|
||||
dl.push_front(l[i]);
|
||||
continue;
|
||||
}
|
||||
if (el[i].isDir()) dl << el[i];
|
||||
else fl << el[i];
|
||||
if (l[i].isDir()) dl << l[i];
|
||||
else fl << l[i];
|
||||
}
|
||||
entries << dl << fl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void FileManager::TileDir::updateDir() {
|
||||
//if (!enabled) return;
|
||||
lock();
|
||||
int pc = cur, po = offset;
|
||||
showReading();
|
||||
unlock();
|
||||
setContent(dir.entries());
|
||||
if (label_path) {
|
||||
label_path->content.resize(1);
|
||||
label_path->content[0].first = dir.absolutePath();
|
||||
@@ -152,6 +175,8 @@ FileManager::FileManager(Daemon * d) {
|
||||
plabel->maximumWidth = 1;
|
||||
panel->direction = Vertical;
|
||||
panels[i] = new TileDir();
|
||||
panels[i]->fm = this;
|
||||
panels[i]->key_func = (void*)tileKey_s;
|
||||
panels[i]->name = "file panel " + PIString(i);
|
||||
panels[i]->label_path = plabel;
|
||||
panel->addTile(plabel);
|
||||
@@ -184,6 +209,53 @@ PIScreenTile * FileManager::tile() const {
|
||||
}
|
||||
|
||||
|
||||
void FileManager::setRemoteDir(const PIString & d) {
|
||||
panels[1]->dir.setDir(d);
|
||||
if (panels[1]->label_path) {
|
||||
panels[1]->label_path->content.resize(1);
|
||||
panels[1]->label_path->content[0].first = panels[1]->dir.absolutePath();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void FileManager::setRemoteContent(const PIVector< PIFile::FileInfo > & el) {
|
||||
panels[1]->setContent(el);
|
||||
panels[1]->buildNames();
|
||||
}
|
||||
|
||||
|
||||
PIStringList FileManager::selectedRemote() const {
|
||||
PIStringList ret;
|
||||
panels[1]->lock();
|
||||
PIVector<int> sil = panels[1]->selected.toVector();
|
||||
piForeachC (int i, sil)
|
||||
ret << panels[1]->entries[i].path;
|
||||
panels[1]->unlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
PIFile::FileInfo FileManager::currentRemoteEntry() const {
|
||||
if ((panels[1]->cur < 0) || (panels[1]->cur >= panels[1]->content.size_s())) return PIFile::FileInfo();
|
||||
return panels[1]->entries[panels[1]->cur];
|
||||
}
|
||||
|
||||
|
||||
void FileManager::remoteSaveDir() {
|
||||
panels[1]->prev_pos[panels[1]->dir.path()] = PIPair<int, int>(panels[1]->cur, panels[1]->offset);
|
||||
}
|
||||
|
||||
|
||||
void FileManager::remoteRestoreDir() {
|
||||
PIPair<int, int> cp = panels[1]->prev_pos.value(panels[1]->dir.path());
|
||||
panels[1]->selected.clear();
|
||||
panels[1]->cur = cp.first;
|
||||
panels[1]->offset = cp.second;
|
||||
if ((panels[1]->cur < 0) || (panels[1]->cur >= panels[1]->content.size_s()))
|
||||
panels[1]->cur = 0;
|
||||
}
|
||||
|
||||
|
||||
void FileManager::keyEvent(PIKbdListener::KeyEvent key) {
|
||||
if (!tile_root->visible) return;
|
||||
switch (key.key) {
|
||||
|
||||
Reference in New Issue
Block a user