void Widget::hidden(bool hide) { if( hide != flags.hidden ) { flags.hidden = hide; // If parent is hidden, either of these is a no-op. if( hide ) { // TODO: Instead of dirtying parent entirely, dirty only children // that overlap with this widget. parent()->dirty_overlapping_children_in_rect(parent_rect()); /* TODO: Notify self and all non-hidden children that they're * now effectively hidden? */ } else { set_dirty(); /* TODO: Notify self and all non-hidden children that they're * now effectively shown? */ } } }
Rect Widget::screen_rect() const { return parent() ? (parent_rect() + parent()->screen_pos()) : parent_rect(); }
void desktop_task_controller_impl::createReminderUI( cherry_kit::session_sync *a_session) { cherry_kit::window *window = new cherry_kit::window(); cherry_kit::fixed_layout *view = new cherry_kit::fixed_layout(window); view->set_content_margin(0, 0, 0, 5); view->set_geometry(0, 0, 320, 160); view->add_rows(2); view->add_segments(0, 1); view->add_segments(1, 4); view->set_row_height(0, "85%"); view->set_row_height(1, "15%"); cherry_kit::widget_properties_t top_label_prop; top_label_prop["label"] = "reminder"; cherry_kit::widget_properties_t text_editor_prop; text_editor_prop["text"] = ""; if (a_session->session_keys().contains("text")) { text_editor_prop["text"] = std::string(a_session->session_data("text").toByteArray()); } cherry_kit::widget_properties_t accept_button_prop; view->add_widget(0, 0, "text_edit", text_editor_prop, [=]() {}); accept_button_prop["label"] = ""; accept_button_prop["icon"] = "toolbar/ck_event.png"; view->add_widget(1, 0, "image_button", accept_button_prop, [=]() {}); if (a_session->session_keys().contains("state") && (a_session->session_data("state").toString() == "done")) { accept_button_prop["label"] = ""; accept_button_prop["icon"] = "toolbar/ck_play.png"; cherry_kit::text_editor *editor = dynamic_cast<cherry_kit::text_editor *>(view->at(0, 0)); if (editor) { editor->style("border: 0; background: #29CDA8; color: #ffffff"); } } else { accept_button_prop["label"] = ""; accept_button_prop["icon"] = "toolbar/ck_ok.png"; } view->add_widget(1, 1, "image_button", accept_button_prop,[=]() {}); accept_button_prop["label"] = ""; accept_button_prop["icon"] = "toolbar/ck_save.png"; view->add_widget(1, 2, "image_button", accept_button_prop, [=]() {}); accept_button_prop["label"] = ""; accept_button_prop["icon"] = "toolbar/ck_delete.png"; view->add_widget(1, 3, "image_button", accept_button_prop, [=]() {}); window->set_window_content(view->viewport()); window->set_window_title("Task"); a_session->bind_to_window(window); insert(window); cherry_kit::icon_button *delete_btn = dynamic_cast<cherry_kit::icon_button *>(view->at(1, 3)); if (delete_btn) { std::function<void()> func = [=]() { a_session->unbind_window(window); window->close(); }; delete_btn->on_click(func); } cherry_kit::icon_button *save_btn = dynamic_cast<cherry_kit::icon_button *>(view->at(1, 2)); if (save_btn) { std::function<void()> func = [=]() { cherry_kit::text_editor *editor = dynamic_cast<cherry_kit::text_editor *>(view->at(0, 0)); if (editor) { a_session->save_session_attribute(session_store_name("reminders"), "Reminders", "reminders_id", a_session->session_id_to_string(), "text", editor->text().toStdString()); } }; save_btn->on_click(func); } cherry_kit::icon_button *done_btn = dynamic_cast<cherry_kit::icon_button *>(view->at(1, 1)); if (done_btn) { std::function<void()> func = [=]() { cherry_kit::text_editor *editor = dynamic_cast<cherry_kit::text_editor *>(view->at(0, 0)); bool is_complete = 0; if (a_session->session_keys().contains("state")) { qDebug() << Q_FUNC_INFO << "Current state : " << a_session->session_data("state").toString(); } if (a_session->session_keys().contains("state") && (a_session->session_data("state").toString() == "done")) { is_complete = 1; } if (editor) { if (is_complete) editor->style("border: 0; background: #ffffff; color: #000000"); else editor->style("border: 0; background: #29CDA8; color: #ffffff"); } cherry_kit::widget_properties_t update_prop; if (is_complete) { update_prop["label"] = ""; update_prop["icon"] = "toolbar/ck_ok.png"; } else { update_prop["label"] = ""; update_prop["icon"] = "toolbar/ck_play.png"; } view->update_property(1, 1, update_prop); a_session->save_session_attribute( session_store_name("reminders"), "Reminders", "reminders_id", a_session->session_id_to_string(), "state", (is_complete == 1) ? "wip" : "done"); }; done_btn->on_click(func); } cherry_kit::icon_button *set_btn = dynamic_cast<cherry_kit::icon_button *>(view->at(1, 0)); if (set_btn) { std::function<void()> func = [=]() { if (!viewport()) return; QRectF parent_rect(window->x(), window->y(), window->geometry().width(), window->geometry().height()); QRectF dialog_rect(0, 0, 320, 320); QPointF dialog_pos = viewport()->center( dialog_rect, parent_rect, cherry_kit::space::kCenterOnWindow); cherry_kit::desktop_dialog_ref ck_date_dialog = viewport()->open_desktop_dialog("date_dialog", "Date", dialog_pos, dialog_rect, QVariantMap()); // todo handle dialog close. }; set_btn->on_click(func); } window->on_window_discarded([this](cherry_kit::window *aWindow) { delete aWindow; }); if (viewport()) { QPointF window_location; window_location.setX(a_session->session_data("x").toFloat()); window_location.setY(a_session->session_data("y").toFloat()); window->setPos(window_location); } }