diff --git a/src/console/piscreentile.cpp b/src/console/piscreentile.cpp index 9225ac01..bf07c4c7 100644 --- a/src/console/piscreentile.cpp +++ b/src/console/piscreentile.cpp @@ -161,6 +161,7 @@ void PIScreenTile::sizeHint(int & w, int & h) const { if (direction == Horizontal) w += sl; else h += sl; piForeachC (PIScreenTile * t, tiles) { + if (!t->visible) continue; int cw(0), ch(0); t->sizeHint(cw, ch); cw = piClampi(cw, t->minimumWidth, t->maximumWidth); diff --git a/src/console/piscreentiles.cpp b/src/console/piscreentiles.cpp index 041381ae..ba750dfb 100644 --- a/src/console/piscreentiles.cpp +++ b/src/console/piscreentiles.cpp @@ -95,8 +95,10 @@ void TileList::sizeHint(int & w, int & h) const { void TileList::drawEvent(PIScreenDrawer * d) { lhei = height - 2; + 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()); if (is > 0) d->drawText(x, y, PIString(" /\\ ").repeat(width / 4), Green, Default, Bold); + //piCout << is << ie << offset << lhei << content.size_s(); for (int i = is; i < ie; ++i) { Row & r(content[i]); bool sel = i == cur && has_focus; @@ -178,6 +180,7 @@ bool TileList::keyEvent(PIKbdListener::KeyEvent key) { if (cur >= content.size_s()) cur = content.size_s() - 1; if (cur - offset >= lhei - osp) offset += oo; if (offset >= content.size_s() - lhei) offset = content.size_s() - lhei; + if (offset < 0) offset = 0; return true; case PIKbdListener::Home: cur = offset = 0; @@ -185,6 +188,7 @@ bool TileList::keyEvent(PIKbdListener::KeyEvent key) { case PIKbdListener::End: cur = content.size_s() - 1; offset = content.size_s() - lhei; + if (offset < 0) offset = 0; return true; case PIKbdListener::Return: if (cur >= 0 && cur < content.size_s()) diff --git a/utils/system_daemon/daemon.cpp b/utils/system_daemon/daemon.cpp index a595e358..bb216d5a 100644 --- a/utils/system_daemon/daemon.cpp +++ b/utils/system_daemon/daemon.cpp @@ -4,7 +4,7 @@ extern PIScreen screen; -Daemon::Daemon(): PIPeer("_pisd_" + PISystemInfo::instance()->hostname + "_" + PIString(rand() % 100)) { +Daemon::Daemon(): PIPeer("_pisd_" + PISystemInfo::instance()->hostname + "_" + PIString(rand() % 100)), fm(this) { setName("Daemon"); timer.setName("__S__Daemon_timer"); mode = offset = cur = height = 0; @@ -58,6 +58,7 @@ void Daemon::hideAll() { list_actions->hide(); tile_info->hide(); list_daemons->hide(); + tile_fm->hide(); } diff --git a/utils/system_daemon/daemon.h b/utils/system_daemon/daemon.h index 377d1b47..2fce9c29 100644 --- a/utils/system_daemon/daemon.h +++ b/utils/system_daemon/daemon.h @@ -82,8 +82,8 @@ private: PISystemMonitor sys_mon_other; HostInfo info_my, info_other; FileManager fm; - PIScreenTile * tile_root; - TileSimple * tile_info, * tile_fm, * tile_header; + PIScreenTile * tile_root, * tile_fm; + TileSimple * tile_info, * tile_header; TileList * list_daemons, * list_actions; int mode, offset, cur, height; diff --git a/utils/system_daemon/file_manager.h b/utils/system_daemon/file_manager.h index 17a86d2c..8b4a37f2 100644 --- a/utils/system_daemon/file_manager.h +++ b/utils/system_daemon/file_manager.h @@ -9,7 +9,7 @@ class Daemon; class FileManager: public PIObject { PIOBJECT(FileManager) public: - FileManager(Daemon * d); + FileManager(Daemon * d = 0); PIScreenTile * tile() const; diff --git a/utils/system_daemon/main.cpp b/utils/system_daemon/main.cpp index 21b91d4c..c23c24e3 100755 --- a/utils/system_daemon/main.cpp +++ b/utils/system_daemon/main.cpp @@ -33,7 +33,7 @@ _Init _pisd_init; PIScreen screen(false); PISystemMonitor sys_mon; Daemon daemon_; -FileManager file_manager(&daemon_); +FileManager file_manager; class MainMenu: public PITimer {