use list framework over old method
parent
b5eba5346c
commit
673e15f164
|
@ -54,9 +54,11 @@ set(SOURCES ${CMAKE_SOURCE_DIR}/src/main.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/handler/mainMenu.cpp
|
${CMAKE_SOURCE_DIR}/src/handler/mainMenu.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/util/nextcloud.cpp
|
${CMAKE_SOURCE_DIR}/src/util/nextcloud.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/util/item.cpp
|
${CMAKE_SOURCE_DIR}/src/util/item.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/ui/listView.cpp
|
${CMAKE_SOURCE_DIR}/src/ui/listView/listView.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/ui/listViewEntry.cpp
|
${CMAKE_SOURCE_DIR}/src/ui/listView/listViewEntry.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/ui/loginView.cpp
|
${CMAKE_SOURCE_DIR}/src/ui/webDAVView/webDAVView.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/ui/webDAVView/webDAVViewEntry.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/ui/loginView/loginView.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/util/util.cpp
|
${CMAKE_SOURCE_DIR}/src/util/util.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/util/log.cpp
|
${CMAKE_SOURCE_DIR}/src/util/log.cpp
|
||||||
${CMAKE_SOURCE_DIR}/src/api/webDAV.cpp
|
${CMAKE_SOURCE_DIR}/src/api/webDAV.cpp
|
||||||
|
@ -72,6 +74,9 @@ include_directories(
|
||||||
${CMAKE_SOURCE_DIR}/src/handler/
|
${CMAKE_SOURCE_DIR}/src/handler/
|
||||||
${CMAKE_SOURCE_DIR}/src/util/
|
${CMAKE_SOURCE_DIR}/src/util/
|
||||||
${CMAKE_SOURCE_DIR}/src/ui/
|
${CMAKE_SOURCE_DIR}/src/ui/
|
||||||
|
${CMAKE_SOURCE_DIR}/src/ui/listView/
|
||||||
|
${CMAKE_SOURCE_DIR}/src/ui/webDAVView/
|
||||||
|
${CMAKE_SOURCE_DIR}/src/ui/loginView/
|
||||||
${CMAKE_SOURCE_DIR}/src/api/
|
${CMAKE_SOURCE_DIR}/src/api/
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -10,14 +10,17 @@
|
||||||
#include "eventHandler.h"
|
#include "eventHandler.h"
|
||||||
#include "mainMenu.h"
|
#include "mainMenu.h"
|
||||||
#include "contextMenu.h"
|
#include "contextMenu.h"
|
||||||
#include "listView.h"
|
#include "webDAVView.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
#include "webDAV.h"
|
||||||
|
#include "webDAVModel.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
|
using std::vector;
|
||||||
|
|
||||||
std::unique_ptr<EventHandler> EventHandler::_eventHandlerStatic;
|
std::unique_ptr<EventHandler> EventHandler::_eventHandlerStatic;
|
||||||
|
|
||||||
|
@ -27,25 +30,34 @@ EventHandler::EventHandler()
|
||||||
_eventHandlerStatic = std::unique_ptr<EventHandler>(this);
|
_eventHandlerStatic = std::unique_ptr<EventHandler>(this);
|
||||||
|
|
||||||
_loginView = nullptr;
|
_loginView = nullptr;
|
||||||
_listView = nullptr;
|
_webDAVView = nullptr;
|
||||||
|
|
||||||
if (iv_access(NEXTCLOUD_CONFIG_PATH.c_str(), W_OK) == 0)
|
if (iv_access(NEXTCLOUD_CONFIG_PATH.c_str(), W_OK) == 0)
|
||||||
{
|
{
|
||||||
if (_nextcloud.login())
|
//if (_nextcloud.login())
|
||||||
{
|
//this one is always required --> if does not work -> say to the user that it did not work, to sync use
|
||||||
_listView = std::unique_ptr<ListView>(new ListView(_menu.getContentRect(), _nextcloud.getItems()));
|
//menubar
|
||||||
FullUpdate();
|
//explanation on first login?
|
||||||
return;
|
//TODO here mark folders that are unsynced?
|
||||||
}
|
//compare both datasets, if fromDB etag is different, mark as unsycned
|
||||||
else
|
WebDAV test = WebDAV();
|
||||||
|
_currentWebDAVItems = test.getDataStructure(Util::accessConfig(Action::IReadString,"UUID"));
|
||||||
|
//vector<WebDAVItem> fromDB = _sqllite.getItemsChildren(_tempPath);
|
||||||
|
if(_currentWebDAVItems.empty())
|
||||||
{
|
{
|
||||||
Message(ICON_ERROR, "Error", "Could not login, please try again.", 1200);
|
Message(ICON_ERROR, "Error", "Could not login, please try again.", 1200);
|
||||||
_nextcloud.logout();
|
_nextcloud.logout();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_webDAVView = std::unique_ptr<WebDAVView>(new WebDAVView(_menu.getContentRect(), _currentWebDAVItems,1));
|
||||||
|
_sqllite.saveItemsChildren(_currentWebDAVItems);
|
||||||
|
FullUpdate();
|
||||||
|
//TODO avoid
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_loginView = std::unique_ptr<LoginView>(new LoginView(_menu.getContentRect()));
|
_loginView = std::unique_ptr<LoginView>(new LoginView(_menu.getContentRect()));
|
||||||
|
|
||||||
FullUpdate();
|
FullUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +124,7 @@ void EventHandler::mainMenuHandler(const int index)
|
||||||
_nextcloud.logout();
|
_nextcloud.logout();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_listView.release();
|
_webDAVView.release();
|
||||||
_loginView = std::unique_ptr<LoginView>(new LoginView(_menu.getContentRect()));
|
_loginView = std::unique_ptr<LoginView>(new LoginView(_menu.getContentRect()));
|
||||||
FullUpdate();
|
FullUpdate();
|
||||||
break;
|
break;
|
||||||
|
@ -171,7 +183,7 @@ void EventHandler::contextMenuHandler(const int index)
|
||||||
{
|
{
|
||||||
updatePBLibrary();
|
updatePBLibrary();
|
||||||
CloseProgressbar();
|
CloseProgressbar();
|
||||||
_listView->drawEntry(_tempItemID);
|
_webDAVView->reDrawCurrentEntry();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -182,7 +194,7 @@ void EventHandler::contextMenuHandler(const int index)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
_listView->invertEntryColor(_tempItemID);
|
_webDAVView->invertCurrentEntryColor();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,13 +207,13 @@ int EventHandler::pointerHandler(const int type, const int par1, const int par2)
|
||||||
//long press to open up context menu
|
//long press to open up context menu
|
||||||
if (type == EVT_POINTERLONG)
|
if (type == EVT_POINTERLONG)
|
||||||
{
|
{
|
||||||
if (_listView != nullptr)
|
if (_webDAVView != nullptr)
|
||||||
{
|
{
|
||||||
_tempItemID = _listView->listClicked(par1, par2);
|
_webDAVView->checkIfEntryClicked(par1, par2);
|
||||||
_listView->invertEntryColor(_tempItemID);
|
_webDAVView->invertCurrentEntryColor();
|
||||||
if (_tempItemID != -1)
|
if (_tempItemID != -1)
|
||||||
{
|
{
|
||||||
if (_nextcloud.getItems().at(_tempItemID).getTitle().compare("...") != 0)
|
if (_webDAVView->getCurrentEntry()->title.compare("...") != 0)
|
||||||
{
|
{
|
||||||
_contextMenu = std::unique_ptr<ContextMenu>(new ContextMenu());
|
_contextMenu = std::unique_ptr<ContextMenu>(new ContextMenu());
|
||||||
_contextMenu->createMenu(par2, _nextcloud.getItems().at(_tempItemID).getState(), EventHandler::contextMenuHandlerStatic);
|
_contextMenu->createMenu(par2, _nextcloud.getItems().at(_tempItemID).getState(), EventHandler::contextMenuHandlerStatic);
|
||||||
|
@ -216,21 +228,20 @@ int EventHandler::pointerHandler(const int type, const int par1, const int par2)
|
||||||
{
|
{
|
||||||
return _menu.createMenu(_nextcloud.isLoggedIn(), _nextcloud.isWorkOffline(), EventHandler::mainMenuHandlerStatic);
|
return _menu.createMenu(_nextcloud.isLoggedIn(), _nextcloud.isWorkOffline(), EventHandler::mainMenuHandlerStatic);
|
||||||
}
|
}
|
||||||
//if listView is shown
|
//if webDAVView is shown
|
||||||
else if (_listView != nullptr)
|
else if (_webDAVView != nullptr)
|
||||||
{
|
{
|
||||||
_tempItemID = _listView->listClicked(par1, par2);
|
if(_webDAVView->checkIfEntryClicked(par1, par2))
|
||||||
if (_tempItemID != -1)
|
|
||||||
{
|
{
|
||||||
_listView->invertEntryColor(_tempItemID);
|
_webDAVView->invertCurrentEntryColor();
|
||||||
|
|
||||||
if (_nextcloud.getItems().at(_tempItemID).getType() == Itemtype::IFOLDER)
|
if (_webDAVView->getCurrentEntry()->type == Itemtype::IFOLDER)
|
||||||
{
|
{
|
||||||
openFolder();
|
openFolder();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_nextcloud.getItems().at(_tempItemID).getState() == FileState::ISYNCED || (_nextcloud.isWorkOffline() && _nextcloud.getItems().at(_tempItemID).getState() == FileState::IOUTSYNCED))
|
if (_webDAVView->getCurrentEntry()->state == FileState::ISYNCED || (_nextcloud.isWorkOffline() && _nextcloud.getItems().at(_tempItemID).getState() == FileState::IOUTSYNCED))
|
||||||
{
|
{
|
||||||
openItem();
|
openItem();
|
||||||
}
|
}
|
||||||
|
@ -250,9 +261,10 @@ int EventHandler::pointerHandler(const int type, const int par1, const int par2)
|
||||||
{
|
{
|
||||||
ShowHourglassForce();
|
ShowHourglassForce();
|
||||||
|
|
||||||
|
//TODO replace
|
||||||
if (_nextcloud.login(_loginView->getURL(), _loginView->getUsername(), _loginView->getPassword()))
|
if (_nextcloud.login(_loginView->getURL(), _loginView->getUsername(), _loginView->getPassword()))
|
||||||
{
|
{
|
||||||
_listView = std::unique_ptr<ListView>(new ListView(_menu.getContentRect(), _nextcloud.getItems()));
|
_webDAVView = std::unique_ptr<WebDAVView>(new WebDAVView(_menu.getContentRect(), _currentWebDAVItems,1));
|
||||||
_loginView.reset();
|
_loginView.reset();
|
||||||
|
|
||||||
FullUpdate();
|
FullUpdate();
|
||||||
|
@ -284,13 +296,6 @@ void EventHandler::updatePBLibrary()
|
||||||
|
|
||||||
void EventHandler::startDownload()
|
void EventHandler::startDownload()
|
||||||
{
|
{
|
||||||
if (_nextcloud.isWorkOffline())
|
|
||||||
{
|
|
||||||
int dialogResult = DialogSynchro(ICON_QUESTION, "Action", "You are in offline modus. Go back online?", "Yes", "No", "Cancel");
|
|
||||||
if (dialogResult == 2 || dialogResult == 3)
|
|
||||||
return; // 1;
|
|
||||||
_nextcloud.switchWorkOffline();
|
|
||||||
}
|
|
||||||
OpenProgressbar(1, "Downloading...", "Checking network connection", 0, NULL);
|
OpenProgressbar(1, "Downloading...", "Checking network connection", 0, NULL);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -298,32 +303,45 @@ void EventHandler::startDownload()
|
||||||
}
|
}
|
||||||
catch (const std::exception &e)
|
catch (const std::exception &e)
|
||||||
{
|
{
|
||||||
Log::writeLog(e.what());
|
Log::writeErrorLog(e.what());
|
||||||
Message(ICON_ERROR, "Error", "Something has gone wrong. Please check the logs. (/system/config/nextcloud/)", 1200);
|
Message(ICON_ERROR, "Error", "Something has gone wrong. Please check the logs. (/system/config/nextcloud/)", 1200);
|
||||||
}
|
}
|
||||||
updatePBLibrary();
|
updatePBLibrary();
|
||||||
|
|
||||||
CloseProgressbar();
|
CloseProgressbar();
|
||||||
_listView->drawEntry(_tempItemID);
|
_webDAVView->reDrawCurrentEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventHandler::openItem()
|
void EventHandler::openItem()
|
||||||
{
|
{
|
||||||
_listView->invertEntryColor(_tempItemID);
|
_webDAVView->invertCurrentEntryColor();
|
||||||
_nextcloud.getItems().at(_tempItemID).open();
|
_nextcloud.getItems().at(_tempItemID).open();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventHandler::openFolder()
|
void EventHandler::openFolder()
|
||||||
{
|
{
|
||||||
FillAreaRect(_menu.getContentRect(), WHITE);
|
FillAreaRect(_menu.getContentRect(), WHITE);
|
||||||
|
////TODO hourglass needed?
|
||||||
ShowHourglassForce();
|
ShowHourglassForce();
|
||||||
|
|
||||||
_tempPath = _nextcloud.getItems().at(_tempItemID).getPath();
|
_tempPath = _nextcloud.getItems().at(_tempItemID).getPath();
|
||||||
if (!_tempPath.empty())
|
if (!_tempPath.empty())
|
||||||
|
{
|
||||||
_nextcloud.setItems(_nextcloud.getDataStructure(_tempPath));
|
_nextcloud.setItems(_nextcloud.getDataStructure(_tempPath));
|
||||||
_listView.release();
|
//if folder is unsynced sync
|
||||||
_listView = std::unique_ptr<ListView>(new ListView(_menu.getContentRect(), _nextcloud.getItems()));
|
WebDAV test = WebDAV();
|
||||||
_listView->drawHeader(_tempPath.substr(NEXTCLOUD_ROOT_PATH.length()));
|
vector<WebDAVItem> testitems = test.getDataStructure(_tempPath);
|
||||||
|
_sqllite.saveItemsChildren(testitems);
|
||||||
|
|
||||||
|
//if folder is synced, get only from DB
|
||||||
|
vector<WebDAVItem> fromDB = _sqllite.getItemsChildren(_tempPath);
|
||||||
|
//get etags from DB, if etag for path is unchanged, stays the same, same for foldersjj
|
||||||
|
}
|
||||||
|
_webDAVView.release();
|
||||||
|
_webDAVView = std::unique_ptr<WebDAVView>(new WebDAVView(_menu.getContentRect(), _currentWebDAVItems,1));
|
||||||
|
//_sqllite.saveItemsChildren(_nextcloud.getItems());
|
||||||
|
//TODO include the header (where am i currently aka)
|
||||||
|
//_webDAVView->drawHeader(_tempPath.substr(NEXTCLOUD_ROOT_PATH.length()));
|
||||||
PartialUpdate(_menu.getContentRect()->x, _menu.getContentRect()->y, _menu.getContentRect()->w, _menu.getContentRect()->h);
|
PartialUpdate(_menu.getContentRect()->x, _menu.getContentRect()->y, _menu.getContentRect()->w, _menu.getContentRect()->h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,19 +352,19 @@ int EventHandler::keyHandler(const int type, const int par1, const int par2)
|
||||||
//menu button
|
//menu button
|
||||||
if (par1 == 23)
|
if (par1 == 23)
|
||||||
{
|
{
|
||||||
_listView->firstPage();
|
_webDAVView->firstPage();
|
||||||
}
|
}
|
||||||
else if (_listView != nullptr)
|
else if (_webDAVView != nullptr)
|
||||||
{
|
{
|
||||||
//left button
|
//left button
|
||||||
if (par1 == 24)
|
if (par1 == 24)
|
||||||
{
|
{
|
||||||
_listView->prevPage();
|
_webDAVView->prevPage();
|
||||||
}
|
}
|
||||||
//right button
|
//right button
|
||||||
else if (par1 == 25)
|
else if (par1 == 25)
|
||||||
{
|
{
|
||||||
_listView->nextPage();
|
_webDAVView->nextPage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -12,12 +12,15 @@
|
||||||
#include "contextMenu.h"
|
#include "contextMenu.h"
|
||||||
#include "mainMenu.h"
|
#include "mainMenu.h"
|
||||||
#include "nextcloud.h"
|
#include "nextcloud.h"
|
||||||
#include "listView.h"
|
#include "webDAVView.h"
|
||||||
#include "loginView.h"
|
#include "loginView.h"
|
||||||
|
#include "sqliteConnector.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
const std::string LOG_PATH = "/mnt/ext1/system/config/nextcloud";
|
const std::string CONFIG_FOLDER = "/mnt/ext1/system/config/nextcloud";
|
||||||
|
//TODO use folder of nextcloud conifg temp
|
||||||
|
const std::string DB_PATH = CONFIG_FOLDER + "/data.db";
|
||||||
|
|
||||||
class EventHandler
|
class EventHandler
|
||||||
{
|
{
|
||||||
|
@ -39,11 +42,13 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static std::unique_ptr<EventHandler> _eventHandlerStatic;
|
static std::unique_ptr<EventHandler> _eventHandlerStatic;
|
||||||
std::unique_ptr<ListView> _listView;
|
std::unique_ptr<WebDAVView> _webDAVView;
|
||||||
std::unique_ptr<LoginView> _loginView;
|
std::unique_ptr<LoginView> _loginView;
|
||||||
std::unique_ptr<ContextMenu> _contextMenu;
|
std::unique_ptr<ContextMenu> _contextMenu;
|
||||||
|
std::vector<WebDAVItem> _currentWebDAVItems;
|
||||||
MainMenu _menu = MainMenu("Nextcloud");
|
MainMenu _menu = MainMenu("Nextcloud");
|
||||||
Nextcloud _nextcloud = Nextcloud();
|
Nextcloud _nextcloud = Nextcloud();
|
||||||
|
SqliteConnector _sqllite = SqliteConnector(DB_PATH);
|
||||||
std::string _tempPath;
|
std::string _tempPath;
|
||||||
int _tempItemID;
|
int _tempItemID;
|
||||||
|
|
||||||
|
|
|
@ -1,186 +0,0 @@
|
||||||
//------------------------------------------------------------------
|
|
||||||
// listView.cpp
|
|
||||||
//
|
|
||||||
// Author: JuanJakobo
|
|
||||||
// Date: 04.08.2020
|
|
||||||
//
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include "inkview.h"
|
|
||||||
#include "item.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include "listView.h"
|
|
||||||
#include "listViewEntry.h"
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
using std::string;
|
|
||||||
using std::vector;
|
|
||||||
|
|
||||||
ListView::ListView(const irect *contentRect, const vector<Item> &items) : _contentRect(contentRect), _items(&items)
|
|
||||||
{
|
|
||||||
FillAreaRect(_contentRect, WHITE);
|
|
||||||
|
|
||||||
_entries.clear();
|
|
||||||
|
|
||||||
int entrySize = _contentRect->h / (_itemCount + 1);
|
|
||||||
|
|
||||||
_headerHeight = 0.25 * entrySize;
|
|
||||||
_footerHeight = 0.75 * entrySize;
|
|
||||||
|
|
||||||
_headerFontHeight = 0.8 * _headerHeight;
|
|
||||||
_footerFontHeight = 0.3 * _footerHeight;
|
|
||||||
_entryFontHeight = 0.2 * entrySize;
|
|
||||||
|
|
||||||
_headerFont = OpenFont("LiberationMono", _headerFontHeight, FONT_STD);
|
|
||||||
_footerFont = OpenFont("LiberationMono", _footerFontHeight, FONT_STD);
|
|
||||||
_entryFont = OpenFont("LiberationMono", _entryFontHeight, FONT_STD);
|
|
||||||
_entryFontBold = OpenFont("LiberationMono-Bold", _entryFontHeight, FONT_BOLD);
|
|
||||||
|
|
||||||
_page = 1;
|
|
||||||
_shownPage = _page;
|
|
||||||
|
|
||||||
auto i = _items->size();
|
|
||||||
auto z = 0;
|
|
||||||
|
|
||||||
_entries.reserve(i);
|
|
||||||
|
|
||||||
while (i > 0)
|
|
||||||
{
|
|
||||||
if (z >= _itemCount)
|
|
||||||
{
|
|
||||||
_page++;
|
|
||||||
z = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
irect rect = iRect(_contentRect->x, z * entrySize + _headerHeight + _contentRect->y, _contentRect->w, entrySize, 0);
|
|
||||||
this->_entries.emplace_back(_page, rect);
|
|
||||||
i--;
|
|
||||||
z++;
|
|
||||||
}
|
|
||||||
|
|
||||||
_pageIcon = iRect(_contentRect->w - 100, _contentRect->h + _contentRect->y - _footerHeight, 100, _footerHeight, ALIGN_CENTER);
|
|
||||||
|
|
||||||
_firstPageButton = iRect(_contentRect->x, _contentRect->h + _contentRect->y - _footerHeight, 130, _footerHeight, ALIGN_CENTER);
|
|
||||||
_prevPageButton = iRect(_contentRect->x + 150, _contentRect->h + _contentRect->y - _footerHeight, 130, _footerHeight, ALIGN_CENTER);
|
|
||||||
_nextPageButton = iRect(_contentRect->x + 300, _contentRect->h + _contentRect->y - _footerHeight, 130, _footerHeight, ALIGN_CENTER);
|
|
||||||
_lastPageButton = iRect(_contentRect->x + 450, _contentRect->h + _contentRect->y - _footerHeight, 130, _footerHeight, ALIGN_CENTER);
|
|
||||||
|
|
||||||
drawEntries();
|
|
||||||
drawFooter();
|
|
||||||
}
|
|
||||||
|
|
||||||
ListView::~ListView()
|
|
||||||
{
|
|
||||||
CloseFont(_entryFont);
|
|
||||||
CloseFont(_entryFontBold);
|
|
||||||
CloseFont(_headerFont);
|
|
||||||
CloseFont(_footerFont);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ListView::drawHeader(string headerText)
|
|
||||||
{
|
|
||||||
SetFont(_headerFont, BLACK);
|
|
||||||
Util::decodeUrl(headerText);
|
|
||||||
DrawTextRect(_contentRect->x, _contentRect->y, _contentRect->w, _headerHeight - 1, headerText.c_str(), ALIGN_LEFT);
|
|
||||||
|
|
||||||
int line = (_contentRect->y + _headerHeight) - 2;
|
|
||||||
DrawLine(0, line, ScreenWidth(), line, BLACK);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ListView::drawEntry(int itemID)
|
|
||||||
{
|
|
||||||
FillAreaRect(_entries[itemID].getPosition(), WHITE);
|
|
||||||
_entries[itemID].draw(_items->at(itemID), _entryFont, _entryFontBold, _entryFontHeight);
|
|
||||||
updateEntry(itemID);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ListView::invertEntryColor(int itemID)
|
|
||||||
{
|
|
||||||
InvertAreaBW(_entries[itemID].getPosition()->x, _entries[itemID].getPosition()->y, _entries[itemID].getPosition()->w, _entries[itemID].getPosition()->h);
|
|
||||||
updateEntry(itemID);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ListView::drawEntries()
|
|
||||||
{
|
|
||||||
for (unsigned int i = 0; i < _entries.size(); i++)
|
|
||||||
{
|
|
||||||
if (_entries[i].getPage() == _shownPage)
|
|
||||||
_entries[i].draw(_items->at(i), _entryFont, _entryFontBold, _entryFontHeight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int ListView::listClicked(int x, int y)
|
|
||||||
{
|
|
||||||
if (IsInRect(x, y, &_firstPageButton))
|
|
||||||
{
|
|
||||||
firstPage();
|
|
||||||
}
|
|
||||||
else if (IsInRect(x, y, &_nextPageButton))
|
|
||||||
{
|
|
||||||
nextPage();
|
|
||||||
}
|
|
||||||
else if (IsInRect(x, y, &_prevPageButton))
|
|
||||||
{
|
|
||||||
prevPage();
|
|
||||||
}
|
|
||||||
else if (IsInRect(x, y, &_lastPageButton))
|
|
||||||
{
|
|
||||||
actualizePage(_page);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (unsigned int i = 0; i < _entries.size(); i++)
|
|
||||||
{
|
|
||||||
if (_entries[i].getPage() == _shownPage && IsInRect(x, y, _entries[i].getPosition()) == 1)
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ListView::drawFooter()
|
|
||||||
{
|
|
||||||
SetFont(_footerFont, WHITE);
|
|
||||||
string footer = std::to_string(_shownPage) + "/" + std::to_string(_page);
|
|
||||||
FillAreaRect(&_pageIcon, BLACK);
|
|
||||||
|
|
||||||
DrawTextRect2(&_pageIcon, footer.c_str());
|
|
||||||
FillAreaRect(&_firstPageButton, BLACK);
|
|
||||||
DrawTextRect2(&_firstPageButton, "First");
|
|
||||||
FillAreaRect(&_prevPageButton, BLACK);
|
|
||||||
DrawTextRect2(&_prevPageButton, "Prev");
|
|
||||||
FillAreaRect(&_nextPageButton, BLACK);
|
|
||||||
DrawTextRect2(&_nextPageButton, "Next");
|
|
||||||
FillAreaRect(&_lastPageButton, BLACK);
|
|
||||||
DrawTextRect2(&_lastPageButton, "Last");
|
|
||||||
}
|
|
||||||
|
|
||||||
void ListView::updateEntry(int itemID)
|
|
||||||
{
|
|
||||||
PartialUpdate(_entries[itemID].getPosition()->x, _entries[itemID].getPosition()->y, _entries[itemID].getPosition()->w, _entries[itemID].getPosition()->h);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ListView::actualizePage(int pageToShown)
|
|
||||||
{
|
|
||||||
if (pageToShown > _page)
|
|
||||||
{
|
|
||||||
Message(ICON_INFORMATION, "Info", "You have reached the last page, to return to the first, please click \"first.\"", 1200);
|
|
||||||
}
|
|
||||||
else if (pageToShown < 1)
|
|
||||||
{
|
|
||||||
Message(ICON_INFORMATION, "Info", "You are already on the first page.", 1200);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_shownPage = pageToShown;
|
|
||||||
FillArea(_contentRect->x, _contentRect->y + _headerHeight, _contentRect->w, _contentRect->h, WHITE);
|
|
||||||
drawEntries();
|
|
||||||
drawFooter();
|
|
||||||
PartialUpdate(_contentRect->x, _contentRect->y + _headerHeight, _contentRect->w, _contentRect->h);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
// listView.cpp
|
||||||
|
//
|
||||||
|
// Author: JuanJakobo
|
||||||
|
// Date: 04.08.2020
|
||||||
|
//
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "inkview.h"
|
||||||
|
#include "listView.h"
|
||||||
|
#include "listViewEntry.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using std::string;
|
||||||
|
using std::vector;
|
||||||
|
|
||||||
|
ListView::ListView(const irect *contentRect, int page) : _contentRect(contentRect), _shownPage(page)
|
||||||
|
{
|
||||||
|
_entries.clear();
|
||||||
|
|
||||||
|
_footerHeight = _contentRect->h / 10;
|
||||||
|
_footerFontHeight = 0.3 * _footerHeight;
|
||||||
|
_entryFontHeight = 30; //0.2 * _footerFontHeight;//entrySize; //TODO how much?
|
||||||
|
|
||||||
|
_footerFont = OpenFont("LiberationMono", _footerFontHeight, 1);
|
||||||
|
_entryFont = OpenFont("LiberationMono", _entryFontHeight, 1);
|
||||||
|
_entryFontBold = OpenFont("LiberationMono-Bold", _entryFontHeight, 1);
|
||||||
|
|
||||||
|
SetFont(_entryFont, BLACK);
|
||||||
|
|
||||||
|
_pageIcon = iRect(_contentRect->w - 100, _contentRect->h - _footerHeight, 100, _footerHeight, ALIGN_CENTER);
|
||||||
|
_firstPageButton = iRect(_contentRect->x, _contentRect->h - _footerHeight, 130, _footerHeight, ALIGN_CENTER);
|
||||||
|
_prevPageButton = iRect(_contentRect->x + 150, _contentRect->h - _footerHeight, 130, _footerHeight, ALIGN_CENTER);
|
||||||
|
_nextPageButton = iRect(_contentRect->x + 300, _contentRect->h - _footerHeight, 130, _footerHeight, ALIGN_CENTER);
|
||||||
|
_lastPageButton = iRect(_contentRect->x + 450, _contentRect->h - _footerHeight, 130, _footerHeight, ALIGN_CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
ListView::~ListView()
|
||||||
|
{
|
||||||
|
CloseFont(_entryFont);
|
||||||
|
CloseFont(_entryFontBold);
|
||||||
|
CloseFont(_footerFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListView::draw()
|
||||||
|
{
|
||||||
|
FillAreaRect(_contentRect, WHITE);
|
||||||
|
drawEntries();
|
||||||
|
drawFooter();
|
||||||
|
PartialUpdate(_contentRect->x, _contentRect->y, _contentRect->w, _contentRect->h);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListView::reDrawCurrentEntry()
|
||||||
|
{
|
||||||
|
FillAreaRect(_entries.at(_selectedEntry)->getPosition(), WHITE);
|
||||||
|
_entries.at(_selectedEntry)->draw(_entryFont, _entryFontBold, _entryFontHeight);
|
||||||
|
updateEntry(_selectedEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListView::invertCurrentEntryColor()
|
||||||
|
{
|
||||||
|
InvertAreaBW(_entries.at(_selectedEntry)->getPosition()->x, _entries.at(_selectedEntry)->getPosition()->y, _entries.at(_selectedEntry)->getPosition()->w, _entries.at(_selectedEntry)->getPosition()->h);
|
||||||
|
updateEntry(_selectedEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListView::drawEntries()
|
||||||
|
{
|
||||||
|
for (unsigned int i = 0; i < _entries.size(); i++)
|
||||||
|
{
|
||||||
|
if (_entries.at(i)->getPage() == _shownPage)
|
||||||
|
_entries.at(i)->draw(_entryFont, _entryFontBold, _entryFontHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ListView::checkIfEntryClicked(int x, int y)
|
||||||
|
{
|
||||||
|
if (IsInRect(x, y, &_firstPageButton))
|
||||||
|
{
|
||||||
|
firstPage();
|
||||||
|
}
|
||||||
|
else if (IsInRect(x, y, &_nextPageButton))
|
||||||
|
{
|
||||||
|
nextPage();
|
||||||
|
}
|
||||||
|
else if (IsInRect(x, y, &_prevPageButton))
|
||||||
|
{
|
||||||
|
prevPage();
|
||||||
|
}
|
||||||
|
else if (IsInRect(x, y, &_lastPageButton))
|
||||||
|
{
|
||||||
|
actualizePage(_page);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (unsigned int i = 0; i < _entries.size(); i++)
|
||||||
|
{
|
||||||
|
if (_entries.at(i)->getPage() == _shownPage && IsInRect(x, y, _entries.at(i)->getPosition()) == 1)
|
||||||
|
{
|
||||||
|
_selectedEntry = i;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListView::drawFooter()
|
||||||
|
{
|
||||||
|
SetFont(_footerFont, WHITE);
|
||||||
|
string footer = std::to_string(_shownPage) + "/" + std::to_string(_page);
|
||||||
|
FillAreaRect(&_pageIcon, BLACK);
|
||||||
|
|
||||||
|
DrawTextRect2(&_pageIcon, footer.c_str());
|
||||||
|
FillAreaRect(&_firstPageButton, BLACK);
|
||||||
|
DrawTextRect2(&_firstPageButton, "First");
|
||||||
|
FillAreaRect(&_prevPageButton, BLACK);
|
||||||
|
DrawTextRect2(&_prevPageButton, "Prev");
|
||||||
|
FillAreaRect(&_nextPageButton, BLACK);
|
||||||
|
DrawTextRect2(&_nextPageButton, "Next");
|
||||||
|
FillAreaRect(&_lastPageButton, BLACK);
|
||||||
|
DrawTextRect2(&_lastPageButton, "Last");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListView::updateEntry(int entryID)
|
||||||
|
{
|
||||||
|
PartialUpdate(_entries.at(entryID)->getPosition()->x, _entries.at(entryID)->getPosition()->y, _entries.at(entryID)->getPosition()->w, _entries.at(entryID)->getPosition()->h);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListView::actualizePage(int pageToShow)
|
||||||
|
{
|
||||||
|
if (pageToShow > _page)
|
||||||
|
{
|
||||||
|
Message(ICON_INFORMATION, "Info", "You have reached the last page, to return to the first, please click \"first.\"", 1200);
|
||||||
|
}
|
||||||
|
else if (pageToShow < 1)
|
||||||
|
{
|
||||||
|
Message(ICON_INFORMATION, "Info", "You are already on the first page.", 1200);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_shownPage = pageToShow;
|
||||||
|
FillArea(_contentRect->x, _contentRect->y, _contentRect->w, _contentRect->h, WHITE);
|
||||||
|
drawEntries();
|
||||||
|
drawFooter();
|
||||||
|
PartialUpdate(_contentRect->x, _contentRect->y, _contentRect->w, _contentRect->h);
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,10 +10,9 @@
|
||||||
#define LISTVIEW
|
#define LISTVIEW
|
||||||
|
|
||||||
#include "inkview.h"
|
#include "inkview.h"
|
||||||
#include "item.h"
|
|
||||||
#include "listViewEntry.h"
|
#include "listViewEntry.h"
|
||||||
|
#include "model.h"
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
@ -26,36 +25,14 @@ public:
|
||||||
* @param ContentRect area of the screen where the list view is placed
|
* @param ContentRect area of the screen where the list view is placed
|
||||||
* @param Items items that shall be shown in the listview
|
* @param Items items that shall be shown in the listview
|
||||||
*/
|
*/
|
||||||
ListView(const irect *contentRect, const std::vector<Item> &items);
|
ListView(const irect *contentRect, int page);
|
||||||
|
|
||||||
~ListView();
|
virtual ~ListView();
|
||||||
|
|
||||||
/**
|
virtual Entry *getCurrentEntry() = 0;
|
||||||
* Draws the header
|
virtual Entry *getEntry(int entryID) = 0;
|
||||||
*
|
|
||||||
* @param headerText the text that shall be displayed in the header
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void drawHeader(std::string headerText);
|
|
||||||
|
|
||||||
/**
|
int getShownPage(){return _shownPage;};
|
||||||
* Draws an single entry to the screen
|
|
||||||
*
|
|
||||||
* @param itemID the id of the item that shall be drawn
|
|
||||||
*/
|
|
||||||
void drawEntry(int itemID);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* inverts the color of an entry
|
|
||||||
*
|
|
||||||
* @param itemID the id of the item that shall be inverted
|
|
||||||
*/
|
|
||||||
void invertEntryColor(int itemID);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterates through the items and sends them to the listViewEntry Class for drawing
|
|
||||||
*/
|
|
||||||
void drawEntries();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Navigates to the next page
|
* Navigates to the next page
|
||||||
|
@ -72,36 +49,56 @@ public:
|
||||||
*/
|
*/
|
||||||
void firstPage() { this->actualizePage(1); };
|
void firstPage() { this->actualizePage(1); };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws an single entry to the screen
|
||||||
|
*/
|
||||||
|
void reDrawCurrentEntry();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* inverts the color of the currently selected entry
|
||||||
|
*/
|
||||||
|
void invertCurrentEntryColor();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checkes if the listview has been clicked and either changes the page or returns item ID
|
* Checkes if the listview has been clicked and either changes the page or returns item ID
|
||||||
*
|
*
|
||||||
* @param x x-coordinate
|
* @param x x-coordinate
|
||||||
* @param y y-coordinate
|
* @param y y-coordinate
|
||||||
* @return int Item ID that has been clicked, -1 if no Item was clicked
|
* @return true if was clicked
|
||||||
*/
|
*/
|
||||||
int listClicked(int x, int y);
|
bool checkIfEntryClicked(int x, int y);
|
||||||
|
|
||||||
private:
|
int getCurrentEntryItertator() const {return _selectedEntry;};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the screen and draws entries and footer
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void draw();
|
||||||
|
|
||||||
|
protected:
|
||||||
int _footerHeight;
|
int _footerHeight;
|
||||||
int _headerHeight;
|
|
||||||
int _headerFontHeight;
|
|
||||||
int _footerFontHeight;
|
int _footerFontHeight;
|
||||||
int _entryFontHeight;
|
int _entryFontHeight;
|
||||||
const irect *_contentRect;
|
const irect *_contentRect;
|
||||||
std::unique_ptr<const std::vector<Item>> _items;
|
std::vector<std::shared_ptr<ListViewEntry>> _entries;
|
||||||
std::vector<ListViewEntry> _entries;
|
|
||||||
ifont *_headerFont;
|
|
||||||
ifont *_footerFont;
|
ifont *_footerFont;
|
||||||
ifont *_entryFont;
|
ifont *_entryFont;
|
||||||
ifont *_entryFontBold;
|
ifont *_entryFontBold;
|
||||||
int _page;
|
int _page = 1;
|
||||||
int _shownPage;
|
int _shownPage;
|
||||||
irect _pageIcon;
|
irect _pageIcon;
|
||||||
irect _nextPageButton;
|
irect _nextPageButton;
|
||||||
irect _prevPageButton;
|
irect _prevPageButton;
|
||||||
irect _firstPageButton;
|
irect _firstPageButton;
|
||||||
irect _lastPageButton;
|
irect _lastPageButton;
|
||||||
int _itemCount = 7;
|
int _selectedEntry;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates through the items and sends them to the listViewEntry Class for drawing
|
||||||
|
*/
|
||||||
|
void drawEntries();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draws the footer including a page changer
|
* Draws the footer including a page changer
|
||||||
|
@ -111,15 +108,15 @@ private:
|
||||||
/**
|
/**
|
||||||
* updates an entry
|
* updates an entry
|
||||||
*
|
*
|
||||||
* @param itemID the id of the item that shall be inverted
|
* @param entryID the id of the item that shall be inverted
|
||||||
*/
|
*/
|
||||||
void updateEntry(int itemID);
|
void updateEntry(int entryID);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Navigates to the selected page
|
* Navigates to the selected page
|
||||||
*
|
*
|
||||||
* @param pageToShown page that shall be shown
|
* @param pageToShow page that shall be shown
|
||||||
*/
|
*/
|
||||||
void actualizePage(int pageToShown);
|
void actualizePage(int pageToShow);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
|
@ -0,0 +1,14 @@
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
// hnCommentViewEntry.cpp
|
||||||
|
//
|
||||||
|
// Author: JuanJakobo
|
||||||
|
// Date: 04.08.2020
|
||||||
|
//
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "inkview.h"
|
||||||
|
#include "listViewEntry.h"
|
||||||
|
|
||||||
|
ListViewEntry::ListViewEntry(int page, const irect &rect) : _page(page), _position(rect)
|
||||||
|
{
|
||||||
|
}
|
|
@ -10,7 +10,7 @@
|
||||||
#define LISTVIEWENTRY
|
#define LISTVIEWENTRY
|
||||||
|
|
||||||
#include "inkview.h"
|
#include "inkview.h"
|
||||||
#include "item.h"
|
#include "model.h"
|
||||||
|
|
||||||
class ListViewEntry
|
class ListViewEntry
|
||||||
{
|
{
|
||||||
|
@ -21,7 +21,9 @@ public:
|
||||||
* @param Page site of the listView the Entry is shown
|
* @param Page site of the listView the Entry is shown
|
||||||
* @param Rect area of the screen the item is positioned
|
* @param Rect area of the screen the item is positioned
|
||||||
*/
|
*/
|
||||||
ListViewEntry(int page, irect position);
|
ListViewEntry(int page, const irect &position);
|
||||||
|
|
||||||
|
virtual ~ListViewEntry(){};
|
||||||
|
|
||||||
irect *getPosition() { return &_position; }
|
irect *getPosition() { return &_position; }
|
||||||
int getPage() const { return _page; }
|
int getPage() const { return _page; }
|
||||||
|
@ -29,14 +31,15 @@ public:
|
||||||
/**
|
/**
|
||||||
* draws the listViewEntry to the screen
|
* draws the listViewEntry to the screen
|
||||||
*
|
*
|
||||||
* @param item item that shall be drawn
|
|
||||||
* @param entryFont font for the entry itself
|
* @param entryFont font for the entry itself
|
||||||
* @param entryFontBold bold font for the header
|
* @param entryFontBold bold font for the header
|
||||||
* @param fontHeight height of the font
|
* @param fontHeight height of the font
|
||||||
*/
|
*/
|
||||||
void draw(const Item &item, ifont *entryFont, ifont *entryFontBold, int fontHeight);
|
virtual void draw(const ifont *entryFont, const ifont *entryFontBold, int fontHeight) = 0;
|
||||||
|
|
||||||
private:
|
virtual Entry* get() = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
int _page;
|
int _page;
|
||||||
irect _position;
|
irect _position;
|
||||||
};
|
};
|
|
@ -1,62 +0,0 @@
|
||||||
//------------------------------------------------------------------
|
|
||||||
// listViewEntry.cpp
|
|
||||||
//
|
|
||||||
// Author: JuanJakobo
|
|
||||||
// Date: 04.08.2020
|
|
||||||
//
|
|
||||||
//-------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include "inkview.h"
|
|
||||||
#include "item.h"
|
|
||||||
#include "listViewEntry.h"
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
ListViewEntry::ListViewEntry(int page, irect rect) : _page(page), _position(rect)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void ListViewEntry::draw(const Item &item, ifont *entryFont, ifont *entryFontBold, int fontHeight)
|
|
||||||
{
|
|
||||||
SetFont(entryFontBold, BLACK);
|
|
||||||
DrawTextRect(_position.x, _position.y, _position.w, fontHeight, item.getTitle().c_str(), ALIGN_LEFT);
|
|
||||||
|
|
||||||
SetFont(entryFont, BLACK);
|
|
||||||
|
|
||||||
if (item.getState() == FileState::ILOCAL)
|
|
||||||
{
|
|
||||||
DrawTextRect(_position.x, _position.y + 3 * fontHeight, _position.w, fontHeight, "Local", ALIGN_RIGHT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (item.getType() == IFILE)
|
|
||||||
{
|
|
||||||
DrawTextRect(_position.x, _position.y + fontHeight, _position.w, fontHeight, item.getFiletype().c_str(), ALIGN_LEFT);
|
|
||||||
|
|
||||||
if (item.getState() == FileState::ISYNCED)
|
|
||||||
{
|
|
||||||
DrawTextRect(_position.x, _position.y + 3 * fontHeight, _position.w, fontHeight, "Synced", ALIGN_RIGHT);
|
|
||||||
}
|
|
||||||
else if(item.getState() == FileState::IOUTSYNCED)
|
|
||||||
{
|
|
||||||
DrawTextRect(_position.x, _position.y + 3 * fontHeight, _position.w, fontHeight, "Out of sync", ALIGN_RIGHT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DrawTextRect(_position.x, _position.y + 3 * fontHeight, _position.w, fontHeight, "Click to Download", ALIGN_RIGHT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (item.getState() == FileState::ISYNCED)
|
|
||||||
{
|
|
||||||
DrawTextRect(_position.x, _position.y + 3 * fontHeight, _position.w, fontHeight, "Folder synced", ALIGN_RIGHT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DrawTextRect(_position.x, _position.y + 2 * fontHeight, _position.w, fontHeight, item.getLastEditDate().c_str(), ALIGN_LEFT);
|
|
||||||
DrawTextRect(_position.x, _position.y + 3 * fontHeight, _position.w, fontHeight, item.getSizeString().c_str(), ALIGN_LEFT);
|
|
||||||
}
|
|
||||||
|
|
||||||
int line = (_position.y + _position.h) - 1;
|
|
||||||
DrawLine(0, line, ScreenWidth(), line, BLACK);
|
|
||||||
}
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
// webDAVView.cpp
|
||||||
|
//
|
||||||
|
// Author: JuanJakobo
|
||||||
|
// Date: 08.09.2021
|
||||||
|
//
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "webDAVView.h"
|
||||||
|
#include "webDAVModel.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using std::vector;
|
||||||
|
|
||||||
|
WebDAVView::WebDAVView(const irect *contentRect, const vector<WebDAVItem> &items, int page) : ListView(contentRect, page)
|
||||||
|
{
|
||||||
|
auto pageHeight = 0;
|
||||||
|
auto contentHeight = _contentRect->h - _footerHeight;
|
||||||
|
auto entrycount = items.size();
|
||||||
|
|
||||||
|
_entries.reserve(entrycount);
|
||||||
|
|
||||||
|
auto i = 0;
|
||||||
|
while (i < entrycount)
|
||||||
|
{
|
||||||
|
auto entrySize = TextRectHeight(contentRect->w, items.at(i).title.c_str(), 0) + 2.5 * _entryFontHeight;
|
||||||
|
if ((pageHeight + entrySize) > contentHeight)
|
||||||
|
{
|
||||||
|
pageHeight = 0;
|
||||||
|
_page++;
|
||||||
|
}
|
||||||
|
irect rect = iRect(_contentRect->x, _contentRect->y + pageHeight, _contentRect->w, entrySize, 0);
|
||||||
|
|
||||||
|
_entries.emplace_back(std::unique_ptr<WebDAVViewEntry>(new WebDAVViewEntry(_page, rect, items.at(i))));
|
||||||
|
|
||||||
|
i++;
|
||||||
|
pageHeight = pageHeight + entrySize;
|
||||||
|
}
|
||||||
|
draw();
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
// webDAVView.h
|
||||||
|
//
|
||||||
|
// Author: JuanJakobo
|
||||||
|
// Date: 08.09.2021
|
||||||
|
// Description: An UI class to display items in a listview
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef WEBDAVVIEW
|
||||||
|
#define WEBDAVVIEW
|
||||||
|
|
||||||
|
#include "webDAVModel.h"
|
||||||
|
#include "listView.h"
|
||||||
|
#include "webDAVViewEntry.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
class WebDAVView final : public ListView
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Displays a list view
|
||||||
|
*
|
||||||
|
* @param ContentRect area of the screen where the list view is placed
|
||||||
|
* @param Items items that shall be shown in the listview
|
||||||
|
* @param page page that is shown, default is 1
|
||||||
|
*/
|
||||||
|
WebDAVView(const irect *contentRect, const std::vector<WebDAVItem> &items, int page = 1);
|
||||||
|
|
||||||
|
//TODO make other pointer...
|
||||||
|
WebDAVItem *getCurrentEntry() { return getEntry(_selectedEntry); };
|
||||||
|
|
||||||
|
WebDAVItem *getEntry(int entryID) { return std::dynamic_pointer_cast<WebDAVViewEntry>(_entries.at(entryID))->get(); };
|
||||||
|
};
|
||||||
|
#endif
|
|
@ -0,0 +1,35 @@
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
// WebDAVViewEntry.cpp
|
||||||
|
//
|
||||||
|
// Author: JuanJakobo
|
||||||
|
// Date: 08.09.2021
|
||||||
|
//
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "webDAVViewEntry.h"
|
||||||
|
#include "webDAVModel.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
WebDAVViewEntry::WebDAVViewEntry(int page, const irect &position, const WebDAVItem &entry) : ListViewEntry(page, position), _entry(entry)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebDAVViewEntry::draw(const ifont *entryFont, const ifont *entryFontBold, int fontHeight)
|
||||||
|
{
|
||||||
|
SetFont(entryFontBold, BLACK);
|
||||||
|
int heightOfTitle = TextRectHeight(_position.w, _entry.title.c_str(), 0);
|
||||||
|
DrawTextRect(_position.x, _position.y, _position.w, heightOfTitle, _entry.title.c_str(), ALIGN_LEFT);
|
||||||
|
|
||||||
|
SetFont(entryFont, BLACK);
|
||||||
|
|
||||||
|
//DrawTextRect(_position.x, _position.y + heightOfTitle, _position.w, fontHeight, _entry.name.c_str(), ALIGN_LEFT);
|
||||||
|
DrawTextRect(_position.x, _position.y + heightOfTitle + fontHeight, _position.w, fontHeight, _entry.path.c_str(), ALIGN_LEFT);
|
||||||
|
std::string type = "File";
|
||||||
|
//if(_entry.type == Itemtype::FOLDER)
|
||||||
|
//type = "Folder";
|
||||||
|
DrawTextRect(_position.x, _position.y + heightOfTitle + fontHeight, _position.w, fontHeight, type.c_str(), ALIGN_RIGHT);
|
||||||
|
|
||||||
|
int line = (_position.y + _position.h) - 1;
|
||||||
|
DrawLine(0, line, ScreenWidth(), line, BLACK);
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
// webDAVViewEntry.h
|
||||||
|
//
|
||||||
|
// Author: JuanJakobo
|
||||||
|
// Date: 08.09.2021
|
||||||
|
// Description:
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef WEBDAVVIEWENTRY
|
||||||
|
#define WEBDAVVIEWENTRY
|
||||||
|
|
||||||
|
#include "listViewEntry.h"
|
||||||
|
#include "webDAVModel.h"
|
||||||
|
|
||||||
|
class WebDAVViewEntry : public ListViewEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates an WebDAVViewEntry
|
||||||
|
*
|
||||||
|
* @param Page site of the listView the Entry is shown
|
||||||
|
* @param Rect area of the screen the item is positioned
|
||||||
|
* @param entry entry that shall be drawn
|
||||||
|
*/
|
||||||
|
WebDAVViewEntry(int page, const irect &position, const WebDAVItem &entry);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* draws the WebDAVViewEntry to the screen
|
||||||
|
*
|
||||||
|
* @param entryFont font for the entry itself
|
||||||
|
* @param entryFontBold bold font for the header
|
||||||
|
* @param fontHeight height of the font
|
||||||
|
*/
|
||||||
|
void draw(const ifont *entryFont, const ifont *entryFontBold, int fontHeight) override;
|
||||||
|
|
||||||
|
WebDAVItem *get() override { return &_entry; };
|
||||||
|
|
||||||
|
private:
|
||||||
|
WebDAVItem _entry;
|
||||||
|
};
|
||||||
|
#endif
|
Loading…
Reference in New Issue