Open Dialog Box - okno wyboru pliku

Open Dialog Box - okno wyboru pliku
tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:około 2 godziny
  • Lokalizacja:Poznań
  • Postów:319
0

Witam. Piszę sobie ostatnio Open Dialog Box. To znaczy program, który ma wyświetlać okienko z listowaniem plików w którym można wybrać jakiś plik. Napisałem już program częściowo, ale mam kilka błędów, które nie wiem jak naprawić. Pomoże ktoś ?

Github

Błędy które ja wykryłem:
*wpisywanie w pasku nazwę zaznaczonego folderu
*pojawiający się na chwilę scrollbar po lewej stronie
*niedziałający powrót do poprzedniego folderu

Błąd 1 - wyświetlanie nazwy zaznaczonego folderu
Open Dialog Box Folder Name.png
Błąd 2 - Pojawiający się surowy scrollbar
Open Dialog Box Scrollbar.png

Kopiuj
void testOpenDialogBox() {

    //window->setFramerateLimit(4);
    
    cam = new Camera();
    
    OpenDialogBox* openDial = new OpenDialogBox();
    
    while (window->isOpen())
    {
        prevTime = currentTime;
        currentTime = timeClock.getElapsedTime();
        dt = currentTime.asSeconds() - prevTime.asSeconds();

        mousePosition = sf::Mouse::getPosition(*window);	// Pobierz aktualną pozycję myszy względem bieżącego okna
        worldMousePosition = window->mapPixelToCoords(mousePosition);

        GUIwasHover = false;
        GUIwasClicked = false;

        sf::Event event;
        while (window->pollEvent(event)) {

            if (openDial) {
                openDial->update(event, dt);

                
                if (openDial->fileSelected) {
                    cout << openDial->getFilename() << "\n";
                    delete openDial;
                    openDial = nullptr;
                }
                
            }
        }

        // RENDER
        window->clear();
        if(openDial)
            openDial->draw();
        window->display();
    }

}

W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 7x, ostatnio: tBane
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około 4 godziny
  • Postów:4936
1

"Kilka błędów", jakich błędów, debugowałeś? Która cześć kodu jest za to odpowiedzialna? Co jest nie tak z tym screenem i gdzie szukałeś rozwiązania, wyszukiwarka, dokumentacja?


tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:około 2 godziny
  • Lokalizacja:Poznań
  • Postów:319
0

Błędów tzn. Open Dialog Box nie działa tak jak powinien i nie wiem jak to naprawić.

// edit
Błędy które ja wykryłem:
*wpisywanie w pasku nazwę zaznaczonego folderu
*pojawiający się na chwilę scrollbar po lewej stronie
*niedziałający powrót do poprzedniego folderu

Nie wiem gdzie szukać porad w tym temacie. Nic w necie nie znalazłem.


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 5x, ostatnio: tBane
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około 4 godziny
  • Postów:4936
0

Nie ma? A w dokumentacji tego obiektu OpenDialogBox?


tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:około 2 godziny
  • Lokalizacja:Poznań
  • Postów:319
0

Sam pisałem ten Dialog Box i dokumentacji nie ma bo na razie jest to faza tworzenia.


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:około 2 godziny
  • Lokalizacja:Poznań
  • Postów:319
0

Naprawiłem błąd związany z wyświetlaniem surowego scrollbara. Wystarczyło pozycjonować go w konstruktorze. Pozostały jeszcze dwa błędy do naprawienia : wpisywanie w pasku nazwy pliku nazwy zaznaczonego folderu oraz niedziałający "powrót" do poprzedniego folderu

nowy kod konstruktora Scrollbar'a

Kopiuj
Scrollbar(sf::Vector2f size, sf::Vector2f position, float minValue, float maxValue, float scrollValue, float scrollLength) {
    this->size = size;
    this->position = position;

    this->minValue = minValue;
    this->maxValue = maxValue;
    this->scrollValue = scrollValue;

    this->scrollLength = scrollLength;

    pressed = false;
    
    // create bar
    bar = sf::RectangleShape(size);
    bar.setFillColor(sf::Color::Blue);
    bar.setPosition(position);

    barTop = sf::Sprite();
    barTop.setTexture(*getTexture("GUI/scrollbar/bar_top")->texture);
    barTop.setPosition(position.x, position.y);
    barTop.setScale(bar.getSize().x / 16.0f, bar.getSize().x / 16.0f);

    barCenter = sf::Sprite();
    barCenter.setTexture(*getTexture("GUI/scrollbar/bar_center")->texture);
    barCenter.setPosition(position.x, position.y + scroll.getSize().x);
    barCenter.setScale(bar.getSize().x / 16.0f, (bar.getSize().y - 2.0f * bar.getSize().x) / 16.0f);

    barBottom = sf::Sprite();
    barBottom.setTexture(*getTexture("GUI/scrollbar/bar_bottom")->texture);
    barBottom.setPosition(position.x, position.y + bar.getSize().y - bar.getSize().x);
    barBottom.setScale(bar.getSize().x / 16.0f, bar.getSize().x / 16.0f);
    
    // create scroll
    sf::Vector2f scrollPosition;
    scrollPosition.x = position.x;
    scrollPosition.y = position.y + (scrollValue - minValue) / (maxValue - scrollLength + 1) * (size.y - getScrollHeight());

    scroll = sf::RectangleShape(sf::Vector2f(size.x, getScrollHeight()));
    scroll.setOrigin(0, 0);
    scroll.setFillColor(sf::Color::Red);
    scroll.setPosition(scrollPosition);

    scrollTop = sf::Sprite();
    scrollTop.setTexture(*getTexture("GUI/scrollbar/scroll_top")->texture);
    scrollTop.setPosition(scrollPosition.x, scrollPosition.y);
    scrollTop.setScale(scroll.getSize().x / 16.0f, scroll.getSize().x / 16.0f);

    scrollCenter = sf::Sprite();
    scrollCenter.setTexture(*getTexture("GUI/scrollbar/scroll_center")->texture);
    scrollCenter.setPosition(scrollPosition.x, scrollPosition.y + scroll.getSize().x);
    scrollCenter.setScale(scroll.getSize().x / 16.0f, (getScrollHeight() - 2.0f * scroll.getSize().x) / 16.0f);

    scrollBottom = sf::Sprite();
    scrollBottom.setTexture(*getTexture("GUI/scrollbar/scroll_bottom")->texture);
    scrollBottom.setPosition(scrollPosition.x, scrollPosition.y + getScrollHeight() - scroll.getSize().x);
    scrollBottom.setScale(scroll.getSize().x / 16.0f, scroll.getSize().x / 16.0f);
    
}

W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 3x, ostatnio: tBane
tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:około 2 godziny
  • Lokalizacja:Poznań
  • Postów:319
0

Błędne było sortowanie plików i folderów. Należało zrobić tak:

Kopiuj
void loadDirectory() {
    paths.clear();
    if( filesystem::exists( current_path ) && filesystem::is_directory( current_path ) ) {
       
        for( auto & entry: filesystem::directory_iterator( current_path ) ) {
            paths.push_back( entry );
        }
    }
    std::sort( paths.begin(), paths.end(), sortkey );
   
    paths.emplace( paths.begin(), current_path.parent_path() );
   
}

W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.