Пример #1
0
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?
             */
        }
    }
}
Пример #2
0
Rect Widget::screen_rect() const {
    return parent() ? (parent_rect() + parent()->screen_pos()) : parent_rect();
}
Пример #3
0
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);
  }
}