Untitled
unknown
plain_text
2 years ago
17 kB
7
Indexable
#include <SFML/Graphics.hpp> #include <iostream> #include "dirent.h" #include <sys/stat.h> #include <ctime> struct fileInfo { std::string name; std::string ext; std::string size; std::string date; }dir1[10000], dir2[10000]; int start1 = 0, end1, start2 = 0, end2, endMax1, endMax2, emaxi; void drawColumnHeaders(sf::RenderWindow* window, sf::Font* font); std::string getFormattedDate(time_t timestamp); void drawColumnFooters(sf::RenderWindow* window, sf::Font* font, float rectangleLength); void getFiles(int& endMax1, int& endMax2); void drawFiles(sf::RenderWindow* window, sf::Font* font, int maxFiles); void updateAndDrawFiles(sf::RenderWindow* window, sf::Font* font, int maxFiles) { window->clear(sf::Color(79, 75, 75)); sf::RectangleShape Bar1(sf::Vector2f(window->getSize().x, 60)); Bar1.setFillColor(sf::Color(48, 47, 47)); Bar1.setPosition(0, 0); window->draw(Bar1); float rectangleLength = 0.2f * window->getSize().x; drawColumnHeaders(window, font); drawFiles(window, font, maxFiles); //Bara de jos , deasupra butoanelor sf::RectangleShape Bar2(sf::Vector2f(window->getSize().x, 60)); Bar2.setFillColor(sf::Color(48, 47, 47)); Bar2.setPosition(0, window->getSize().y - 120); Bar2.setOutlineColor(sf::Color::Black); Bar2.setOutlineThickness(3); window->draw(Bar2); // Bara de la jumatate sf::RectangleShape verticalBar(sf::Vector2f(3, window->getSize().y)); verticalBar.setFillColor(sf::Color::Black); verticalBar.setPosition(window->getSize().x / 2.0f - 2.5f, 0); window->draw(verticalBar); drawColumnFooters(window, font, rectangleLength); window->display(); } int main() { sf::RenderWindow window(sf::VideoMode(2000, 1000), "Commander"); float rectangleLength = 0.2f * window.getSize().x; sf::Font font; font.loadFromFile("Raleway-Medium.ttf"); window.clear(sf::Color(79, 75, 75)); //Bara de sus sf::RectangleShape Bar1(sf::Vector2f(window.getSize().x, 60)); Bar1.setFillColor(sf::Color(48, 47, 47)); Bar1.setPosition(0, 0); window.draw(Bar1); drawColumnHeaders(&window, &font); end1 = end2 = emaxi = (window.getSize().y - 240) / 63;// setat la 12 int maxFiles = window.getSize().y - 120; getFiles(endMax1,endMax2);// nr file din director if (endMax1 < end1) end1 = endMax1; if (endMax2 < end2) end2 = endMax2; drawFiles(&window, &font, maxFiles); //Bara de jos , deasupra butoanelor sf::RectangleShape Bar2(sf::Vector2f(window.getSize().x, 60)); Bar2.setFillColor(sf::Color(48, 47, 47)); Bar2.setPosition(0, window.getSize().y - 120); Bar2.setOutlineColor(sf::Color::Black); Bar2.setOutlineThickness(3); window.draw(Bar2); // Bara de la jumatate sf::RectangleShape verticalBar(sf::Vector2f(3, window.getSize().y)); verticalBar.setFillColor(sf::Color::Black); verticalBar.setPosition(window.getSize().x / 2.0f - 2.5f, 0); window.draw(verticalBar); drawColumnFooters(&window, &font, rectangleLength); window.display(); sf::RenderWindow secondwindow(sf::VideoMode(1000, 600), "Create a new folder"); secondwindow.clear(sf::Color(79, 75, 75)); secondwindow.setVisible(false); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left) { int col = event.mouseButton.x / (window.getSize().x / 5); if (event.mouseButton.y >= window.getSize().y - 60) { switch (col) { case 0: std::cout << "F1 Rename\n"; break; case 1: std::cout << "F2 Create\n"; secondwindow.setVisible(true); while (secondwindow.isOpen()) { sf::Event event; while (secondwindow.pollEvent(event)) { if (event.type == sf::Event::Closed) { secondwindow.close(); secondwindow.setVisible(false); } } } break; case 2: std::cout << "F3 Copy\n"; break; case 3: std::cout << "F4 Move\n"; break; case 4: std::cout << "F5 Delete\n"; break; } } } if (event.type == sf::Event::KeyPressed) { if (event.key.code == sf::Keyboard::F1) { std::cout << "F1 Rename\n"; } if (event.key.code == sf::Keyboard::F2) { std::cout << "F2 Create\n"; } if (event.key.code == sf::Keyboard::F3) { std::cout << "F3 Copy\n"; } if (event.key.code == sf::Keyboard::F4) { std::cout << "F4 Move\n"; } if (event.key.code == sf::Keyboard::F5) { std::cout << "F5 Delete\n"; } if (event.key.code == sf::Keyboard::S) { if (endMax1 > emaxi) if (start1 < endMax1 && end1 <= endMax1) start1++, end1++; updateAndDrawFiles(&window, &font, maxFiles); } if (event.key.code == sf::Keyboard::W) { if (start1 > 0) start1--, end1--; updateAndDrawFiles(&window, &font, maxFiles); } if (event.key.code == sf::Keyboard::Down) { if (endMax2 > emaxi) if (start2 < endMax2 && end2 <= endMax2) start2++, end2++; updateAndDrawFiles(&window, &font, maxFiles); } if (event.key.code == sf::Keyboard::Up) { if (start2 > 0) start2--, end2--; updateAndDrawFiles(&window, &font, maxFiles); } } } } return 0; } void drawColumnHeaders(sf::RenderWindow* window, sf::Font* font) { int halfLength = window->getSize().x / 2; char labels[4][10] = { "Name", "Ext", "Size", "Date" }; double proportionalLength[4] = { 0.5, 0.1, 0.2, 0.2 }; // left column headers int offset = 0; for (int i = 0; i < 4; i++) { float rectangleLength = halfLength * proportionalLength[i]; sf::RectangleShape rectangle(sf::Vector2f(rectangleLength, 60)); rectangle.setFillColor(sf::Color(128, 128, 128)); rectangle.setOutlineColor(sf::Color::Black); rectangle.setOutlineThickness(3); rectangle.setPosition(offset, 63); window->draw(rectangle); offset = offset + rectangleLength; sf::Text text(labels[i], *font, 25); text.setFillColor(sf::Color::White); sf::FloatRect textRect = text.getLocalBounds(); text.setOrigin(textRect.left + textRect.width / 2.0f, textRect.top + textRect.height / 2.0f); // Afisare text in mjl butonului text.setPosition(rectangle.getPosition().x + rectangle.getSize().x / 2.0f, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - textRect.height / 2.0f + textRect.height / 2.0f); window->draw(text); } // right column headers for (int i = 0; i < 4; i++) { float rectangleLength = halfLength * proportionalLength[i]; sf::RectangleShape rectangle(sf::Vector2f(rectangleLength, 60)); rectangle.setFillColor(sf::Color(128, 128, 128)); rectangle.setOutlineColor(sf::Color::Black); rectangle.setOutlineThickness(3); rectangle.setPosition(offset, 63); window->draw(rectangle); offset = offset + rectangleLength; sf::Text text(labels[i], *font, 25); text.setFillColor(sf::Color::White); sf::FloatRect textRect = text.getLocalBounds(); text.setOrigin(textRect.left + textRect.width / 2.0f, textRect.top + textRect.height / 2.0f); // Afisare text in mjl butonului text.setPosition(rectangle.getPosition().x + rectangle.getSize().x / 2.0f, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - textRect.height / 2.0f + textRect.height / 2.0f); window->draw(text); } } std::string getFormattedDate(time_t timestamp) { struct tm* timeinfo = localtime(×tamp); char buffer[20]; strftime(buffer, sizeof(buffer), "%m/%d/%Y", timeinfo); return std::string(buffer); } void drawColumnFooters(sf::RenderWindow* window, sf::Font* font, float rectangleLength) { char f[5][10] = { "F1 Rename", "F2 Create", "F3 Copy", "F4 Move", "F5 Delete" }; for (int i = 0; i < 5; ++i) { sf::RectangleShape rectangle(sf::Vector2f(rectangleLength, 60)); rectangle.setFillColor(sf::Color(79, 75, 75)); rectangle.setOutlineColor(sf::Color::Black); rectangle.setOutlineThickness(3); rectangle.setPosition(i * rectangleLength, window->getSize().y - 60); window->draw(rectangle); sf::Text text(f[i], *font, 25); text.setFillColor(sf::Color::White); sf::FloatRect textRect = text.getLocalBounds(); text.setOrigin(textRect.left + textRect.width / 2.0f, textRect.top + textRect.height / 2.0f); // Afisare text in mjl butonului text.setPosition(rectangle.getPosition().x + rectangle.getSize().x / 2.0f, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - textRect.height / 2.0f + textRect.height / 2.0f); window->draw(text); } } void getFiles(int &endMax1,int &endMax2) { struct dirent* de; DIR* dr1 = opendir("."); int ind1 = 0; while ((de = readdir(dr1)) != NULL) { dir1[ind1].name = de->d_name; std::string fileName(de->d_name); std::size_t found = fileName.find_last_of("."); std::string extension = (found != std::string::npos && found != 0 && found != fileName.length() - 1) ? fileName.substr(found + 1) : "<file>"; dir1[ind1].ext = extension; struct stat fileStat; if (stat(de->d_name, &fileStat) == 0) { dir1[ind1].size = std::to_string(fileStat.st_size) + " Bytes"; dir1[ind1].date = getFormattedDate(fileStat.st_mtime); } ind1++; } endMax1 = ind1 - 1; closedir(dr1); DIR* dr2 = opendir("."); int ind2 = 0; while ((de = readdir(dr2)) != NULL) { dir2[ind2].name = de->d_name; std::string fileName(de->d_name); std::size_t found = fileName.find_last_of("."); std::string extension = (found != std::string::npos && found != 0 && found != fileName.length() - 1) ? fileName.substr(found + 1) : "<file>"; dir2[ind2].ext = extension; struct stat fileStat; if (stat(de->d_name, &fileStat) == 0) { dir2[ind2].size = std::to_string(fileStat.st_size) + " Bytes"; dir2[ind2].date = getFormattedDate(fileStat.st_mtime); } ind2++; } endMax2 = ind2 - 1; } void drawFiles(sf::RenderWindow* window, sf::Font* font, int maxFiles) { int yOffset = 63 * 2; // left column int ind1 = start1; int halfLength = window->getSize().x / 2; double proportionalLength[4] = { 0.5, 0.1, 0.2, 0.2 }; for (int l1 = 0; l1 <= end1; l1++) { int offset = 0; for (int i = 0; i < 4 && yOffset < maxFiles; i++) { float rectangleLength; if (i != 3) rectangleLength = halfLength * proportionalLength[i]; else rectangleLength = halfLength * proportionalLength[i] - 3; sf::RectangleShape rectangle(sf::Vector2f(rectangleLength, 60)); rectangle.setFillColor(sf::Color(73, 70, 70)); rectangle.setOutlineColor(sf::Color::Black); rectangle.setOutlineThickness(3); rectangle.setPosition(offset, yOffset); window->draw(rectangle); offset = offset + rectangleLength; if (i == 0) { sf::Text text(dir1[ind1].name, *font, 25); text.setFillColor(sf::Color::White); text.setPosition(rectangle.getPosition().x + 20, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - text.getCharacterSize() / 2.0f); window->draw(text); } else if (i == 1) { sf::Text text(dir1[ind1].ext, *font, 25); text.setFillColor(sf::Color::White); text.setPosition(rectangle.getPosition().x + 5, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - text.getCharacterSize() / 2.0f); window->draw(text); } else if (i == 2) { sf::Text text(dir1[ind1].size, *font, 25); text.setFillColor(sf::Color::White); text.setPosition(rectangle.getPosition().x + 10, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - text.getCharacterSize() / 2.0f); window->draw(text); } else if (i == 3) { sf::Text text(dir1[ind1].date, *font, 25); text.setFillColor(sf::Color::White); text.setPosition(rectangle.getPosition().x + 10, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - text.getCharacterSize() / 2.0f); window->draw(text); ind1++; } } yOffset += 63; } yOffset = 63 * 2; int ind2 = start2; // right column halfLength = window->getSize().x / 2; for (int l2 = 0; l2 <= end2; l2++) { int offset = window->getSize().x / 2; for (int i = 0; i < 4 && yOffset < maxFiles; i++) { float rectangleLength = halfLength * proportionalLength[i]; sf::RectangleShape rectangle(sf::Vector2f(rectangleLength, 60)); rectangle.setFillColor(sf::Color(73, 70, 70)); rectangle.setOutlineColor(sf::Color::Black); rectangle.setOutlineThickness(3); rectangle.setPosition(offset, yOffset); window->draw(rectangle); offset = offset + rectangleLength; if (i == 0) { sf::Text text(dir2[ind2].name, *font, 25); text.setFillColor(sf::Color::White); text.setPosition(rectangle.getPosition().x + 20, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - text.getCharacterSize() / 2.0f); window->draw(text); } else if (i == 1) { sf::Text text(dir2[ind2].ext, *font, 25); text.setFillColor(sf::Color::White); text.setPosition(rectangle.getPosition().x + 5, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - text.getCharacterSize() / 2.0f); window->draw(text); } else if (i == 2) { sf::Text text(dir2[ind2].size, *font, 25); text.setFillColor(sf::Color::White); text.setPosition(rectangle.getPosition().x + 10, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - text.getCharacterSize() / 2.0f); window->draw(text); } else if (i == 3) { sf::Text text(dir2[ind2].date, *font, 25); text.setFillColor(sf::Color::White); text.setPosition(rectangle.getPosition().x + 10, rectangle.getPosition().y + rectangle.getSize().y / 2.0f - text.getCharacterSize() / 2.0f); window->draw(text); ind2++; } } yOffset += 63; } }
Editor is loading...
Leave a Comment