~aleteoryx/muditaos

0be7e4bc0ac3e2724dcf5df74edb22db4db79883 — Przemyslaw Brudny 5 years ago ac06bd3
[EGD-3333] Resize fixes. Model fetching changes. ListView and Box fixes.
M module-apps/application-phonebook/models/ContactDetailsModel.cpp => module-apps/application-phonebook/models/ContactDetailsModel.cpp +3 -7
@@ 35,11 35,7 @@ auto ContactDetailsModel::getItem(gui::Order order) -> gui::ListItem *
void ContactDetailsModel::createData(bool showInformationWidget, bool showAddressWidget, bool showNoteWidget)
{
    if (showInformationWidget) {
        auto temp = new gui::InformationWidget(application);

        temp->setMinimumSize(phonebookStyle::multiLineTextWithLabelItem::w,
                             phonebookStyle::multiLineTextWithLabelItem::h * 3);
        internalData.push_back(temp);
        internalData.push_back(new gui::InformationWidget(application));
    }

    if (showAddressWidget) {


@@ 68,11 64,11 @@ void ContactDetailsModel::loadData(std::shared_ptr<ContactRecord> contactRecord)

    createData(isInformationDataExist(), isAddressDataExist(), isNoteDataExist());

    requestRecords(0, internalData.size());

    for (auto item : internalData) {
        if (item->onLoadCallback) {
            item->onLoadCallback(contactRecord);
        }
    }

    requestRecords(0, internalData.size());
}

M module-apps/application-phonebook/widgets/InformationWidget.cpp => module-apps/application-phonebook/widgets/InformationWidget.cpp +30 -9
@@ 13,6 13,7 @@ namespace gui
        setMargins(gui::Margins(0, style::margins::very_big, 0, 0));

        setMinimumSize(phonebookStyle::multiLineTextWithLabelItem::w, phonebookStyle::multiLineTextWithLabelItem::h);
        setMaximumSize(phonebookStyle::multiLineTextWithLabelItem::w, phonebookStyle::multiLineTextWithLabelItem::h);

        vBox = new VBox(this, 0, 0, 0, 0);
        vBox->setEdges(RectangleEdgeFlags::GUI_RECT_ALL_EDGES);


@@ 21,7 22,7 @@ namespace gui
                               0,
                               0,
                               phonebookStyle::multiLineTextWithLabelItem::w,
                               40,
                               phonebookStyle::multiLineTextWithLabelItem::h,
                               utils::localize.get("app_phonebook_contact_information"));
        titleLabel->setEdges(RectangleEdgeFlags::GUI_RECT_ALL_EDGES);
        titleLabel->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Top));


@@ 32,35 33,43 @@ namespace gui
        onLoadCallback = [&](std::shared_ptr<ContactRecord> contact) {
            if (contact->numbers.size() > 0) {

                setMinimumHeight(widgetMinimumArea.h + phonebookStyle::multiLineTextWithLabelItem::h);

                primaryNumberHBox = new NumberWithIconsWidget(app,
                                                              contact->numbers[0].number,
                                                              nullptr,
                                                              0,
                                                              0,
                                                              widgetArea.w,
                                                              phonebookStyle::multiLineTextWithLabelItem::w,
                                                              phonebookStyle::multiLineTextWithLabelItem::h);
                vBox->addWidget(primaryNumberHBox);
            }
            if (contact->numbers.size() > 1) {
            if (contact->numbers.size() > 0) {
                setMinimumHeight(widgetMinimumArea.h + phonebookStyle::multiLineTextWithLabelItem::h);
                alternativeNumberHBox = new NumberWithIconsWidget(app,
                                                                  contact->numbers[1].number,
                                                                  this,
                                                                  contact->numbers[0].number,
                                                                  nullptr,
                                                                  0,
                                                                  0,
                                                                  phonebookStyle::multiLineTextWithLabelItem::w,
                                                                  phonebookStyle::multiLineTextWithLabelItem::h);

                vBox->addWidget(alternativeNumberHBox);
            }
            if (contact->mail.length() > 0) {
                setMinimumHeight(widgetMinimumArea.h + phonebookStyle::multiLineTextWithLabelItem::h);

                emailText = new Text(nullptr, 0, 0, 0, 0);
                emailText->setMaximumSize(widgetArea.w, phonebookStyle::multiLineTextWithLabelItem::h);
                emailText->setEdges(RectangleEdgeFlags::GUI_RECT_ALL_EDGES);
                emailText->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
                emailText->setMaximumSize(phonebookStyle::multiLineTextWithLabelItem::w,
                                          phonebookStyle::multiLineTextWithLabelItem::h);
                emailText->setFont(style::window::font::medium);
                emailText->setPenFocusWidth(style::window::default_border_focus_w);
                emailText->setPenWidth(style::window::default_border_no_focus_w);
                emailText->setEditMode(EditMode::BROWSE);
                vBox->addWidget(emailText);
                emailText->setEdges(RectangleEdgeFlags::GUI_RECT_ALL_EDGES);
                emailText->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
                emailText->setText(contact->mail);
                vBox->addWidget(emailText);
            }
        };



@@ 84,8 93,20 @@ namespace gui

    auto InformationWidget::onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim) -> bool
    {

        LOG_INFO("Jaki nowy rozmiar %d, %d, %d, %d", newDim.x, newDim.y, newDim.w, newDim.h);

        vBox->setPosition(0, 0);
        vBox->setSize(newDim.w, newDim.h);
        vBox->resizeItems();

        LOG_INFO("Co do chuja z tym vBoxem %d, %d, %d, %d",
                 vBox->widgetArea.x,
                 vBox->widgetArea.y,
                 vBox->widgetArea.w,
                 vBox->widgetArea.h);

        LOG_INFO("Co do chuja z tym vBoxem rozmiar %lu", vBox->children.size());

        return true;
    }

M module-apps/application-phonebook/widgets/NumberWithIconsWidget.cpp => module-apps/application-phonebook/widgets/NumberWithIconsWidget.cpp +6 -2
@@ 50,8 50,6 @@ namespace gui
        numberText->setPenWidth(style::window::default_border_no_focus_w);
        numberText->setEditMode(EditMode::BROWSE);
        numberText->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));

        this->resizeItems();
        numberText->setText(number.getFormatted());

        inputCallback = [&](gui::Item &item, const gui::InputEvent &event) {


@@ 65,4 63,10 @@ namespace gui
        };
    }

    bool NumberWithIconsWidget::onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim)
    {
        resizeItems();
        return true;
    }

} /* namespace gui */

M module-apps/application-phonebook/widgets/NumberWithIconsWidget.hpp => module-apps/application-phonebook/widgets/NumberWithIconsWidget.hpp +2 -0
@@ 24,6 24,8 @@ namespace gui
        Text *numberText  = nullptr;
        ImageBox *phoneImage = nullptr;
        ImageBox *smsImage   = nullptr;

        bool onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim) override;
    };

} /* namespace gui */

M module-gui/gui/widgets/ListView.cpp => module-gui/gui/widgets/ListView.cpp +3 -3
@@ 116,13 116,13 @@ namespace gui

    void ListView::setProvider(std::shared_ptr<ListItemProvider> prov)
    {
        provider = prov;
        if (provider != nullptr) {
        if (prov != nullptr) {
            provider       = prov;
            provider->list = this;
            setElementsCount(provider->getItemCount());
            provider->requestRecords(0, calculateLimit());
            refresh();
        }
        refresh();
    }

    std::shared_ptr<ListItemProvider> ListView::getProvider()

M module-gui/gui/widgets/Text.cpp => module-gui/gui/widgets/Text.cpp +20 -19
@@ 224,6 224,7 @@ namespace gui
    bool Text::onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim)
    {
        Rect::onDimensionChanged(oldDim, newDim);
        drawLines();
        return true;
    }



@@ 342,25 343,25 @@ namespace gui
        // silly case resize - there request space and all is nice
        // need to at least erase last line if it wont fit
        // should be done on each loop
        {
            uint16_t h_used = line_y_position + padding.bottom;
            uint16_t w_used = lines.maxWidth();
            if (lines.size() == 0) {
                debug_text("No lines to show, try to at least fit in cursor");
                if (font != nullptr) {
                    h_used += font->info.line_height;
                    w_used += TextCursor::default_width;
                    debug_text("epty line height: %d", h_used);
                }
            }
            if (h_used != area(Area::Normal).size(Axis::Y) || w_used != area(Area::Normal).size(Axis::X)) {
                debug_text("size request: %d %d", w_used, h_used);
                auto [w, h] = requestSize(w_used, h_used);
                LOG_INFO("size granted: {%" PRIu32 ", %" PRIu32 "}", w, h);
                // if last wont fit lines.eraseLast();
                // break;
            }
        }
        //        {
        //            uint16_t h_used = line_y_position + padding.bottom;
        //            uint16_t w_used = lines.maxWidth();
        //            if (lines.size() == 0) {
        //                debug_text("No lines to show, try to at least fit in cursor");
        //                if (font != nullptr) {
        //                    h_used += font->info.line_height;
        //                    w_used += TextCursor::default_width;
        //                    debug_text("epty line height: %d", h_used);
        //                }
        //            }
        //            if (h_used != area(Area::Normal).size(Axis::Y) || w_used != area(Area::Normal).size(Axis::X)) {
        //                debug_text("size request: %d %d", w_used, h_used);
        //                auto [w, h] = requestSize(w_used, h_used);
        //                LOG_INFO("size granted: {%" PRIu32 ", %" PRIu32 "}", w, h);
        //                // if last wont fit lines.eraseLast();
        //                // break;
        //            }
        //        }

        lines.linesVAlign(sizeMinusPadding(Axis::Y, Area::Normal));