[california/wip/725767-week] Show events, request event creation when clicking on week days
- From: Jim Nelson <jnelson src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [california/wip/725767-week] Show events, request event creation when clicking on week days
- Date: Fri, 16 May 2014 03:12:39 +0000 (UTC)
commit 0cc5fdd1a1bf0ded5eb169742be5422a339c02a8
Author: Jim Nelson <jim yorba org>
Date: Thu May 15 20:12:05 2014 -0700
Show events, request event creation when clicking on week days
src/calendar/calendar-exact-time-span.vala | 8 ++++
src/toolkit/toolkit-button-connector.vala | 2 +-
src/toolkit/toolkit-button-event.vala | 49 +++++++++++++++++++++++----
src/toolkit/toolkit.vala | 31 -----------------
src/view/week/week-day-pane.vala | 14 ++++++++
src/view/week/week-grid.vala | 17 ++++-----
src/view/week/week-pane.vala | 14 ++++++++
7 files changed, 86 insertions(+), 49 deletions(-)
---
diff --git a/src/calendar/calendar-exact-time-span.vala b/src/calendar/calendar-exact-time-span.vala
index 2ed1473..60aa3bd 100644
--- a/src/calendar/calendar-exact-time-span.vala
+++ b/src/calendar/calendar-exact-time-span.vala
@@ -88,6 +88,14 @@ public class ExactTimeSpan : BaseObject, Gee.Comparable<ExactTimeSpan>, Gee.Hash
}
/**
+ * Returns true if the { link ExactTime} is in this { link ExactTimeSpan}.
+ */
+ public bool contains(ExactTime exact_time) {
+ return start_exact_time.compare_to(exact_time) <= 0
+ && end_exact_time.compare_to(exact_time) >= 0;
+ }
+
+ /**
* Compares the { link start_exact_time} of two { link ExactTimeSpan}s.
*/
public int compare_to(ExactTimeSpan other) {
diff --git a/src/toolkit/toolkit-button-connector.vala b/src/toolkit/toolkit-button-connector.vala
index 9c62e70..042d977 100644
--- a/src/toolkit/toolkit-button-connector.vala
+++ b/src/toolkit/toolkit-button-connector.vala
@@ -57,7 +57,7 @@ public class ButtonConnector : EventConnector {
base.update_release(widget, release_event);
cancel_timeout();
- timeout_id = Timeout.add(CLICK_DETERMINATION_DELAY_MSEC, on_timeout);
+ timeout_id = Timeout.add(CLICK_DETERMINATION_DELAY_MSEC, on_timeout, Priority.LOW);
}
private bool on_timeout() {
diff --git a/src/toolkit/toolkit-button-event.vala b/src/toolkit/toolkit-button-event.vala
index 1aa3f80..917a54f 100644
--- a/src/toolkit/toolkit-button-event.vala
+++ b/src/toolkit/toolkit-button-event.vala
@@ -7,6 +7,37 @@
namespace California.Toolkit {
/**
+ * Enumeration for (mouse) buttons.
+ *
+ * @see ButtonConnector
+ */
+public enum Button {
+ PRIMARY,
+ SECONDARY,
+ TERTIARY,
+ OTHER;
+
+ /**
+ * Converts the button field of a Gdk.EventButton to a { link Button} enumeration.
+ */
+ public static Button from_event(Gdk.EventButton event) {
+ switch (event.button) {
+ case 1:
+ return PRIMARY;
+
+ case 3:
+ return SECONDARY;
+
+ case 2:
+ return TERTIARY;
+
+ default:
+ return OTHER;
+ }
+ }
+}
+
+/**
* Details of a (mouse) button event as reported by { link ButtonConnector}.
*/
@@ -32,19 +63,21 @@ public class ButtonEvent : BaseObject {
/**
* The x,y coordinates (in { link widget}'s coordinate system} the last press occurred.
*/
- public Gdk.Point press_point { get; private set; }
+ private Gdk.Point _press_point = Gdk.Point();
+ public Gdk.Point press_point { get { return _press_point; } }
/**
* The x,y coordinates (in { link widget}'s coordinate system} the last release occurred.
*/
- public Gdk.Point release_point { get; private set; }
+ private Gdk.Point _release_point = Gdk.Point();
+ public Gdk.Point release_point { get { return _release_point; } }
internal ButtonEvent(Gtk.Widget widget, Gdk.EventButton press_event) {
this.widget = widget;
button = Button.from_event(press_event);
press_type = press_event.type;
- press_point.x = (int) press_event.x;
- press_point.y = (int) press_event.y;
+ _press_point.x = (int) press_event.x;
+ _press_point.y = (int) press_event.y;
}
// Update state with the next button press
@@ -53,8 +86,8 @@ public class ButtonEvent : BaseObject {
assert(Button.from_event(press_event) == button);
press_type = press_event.type;
- press_point.x = (int) press_event.x;
- press_point.y = (int) press_event.y;
+ _press_point.x = (int) press_event.x;
+ _press_point.y = (int) press_event.y;
}
// Update state with the next button release and start the release timer
@@ -62,8 +95,8 @@ public class ButtonEvent : BaseObject {
assert(this.widget == widget);
assert(Button.from_event(release_event) == button);
- release_point.x = (int) release_event.x;
- release_point.y = (int) release_event.y;
+ _release_point.x = (int) release_event.x;
+ _release_point.y = (int) release_event.y;
}
public override string to_string() {
diff --git a/src/toolkit/toolkit.vala b/src/toolkit/toolkit.vala
index 5661dd8..ec84471 100644
--- a/src/toolkit/toolkit.vala
+++ b/src/toolkit/toolkit.vala
@@ -22,37 +22,6 @@ public const int DEFAULT_STACK_TRANSITION_DURATION_MSEC = 300;
*/
public const int SLOW_STACK_TRANSITION_DURATION_MSEC = 500;
-/**
- * Enumeration for (mouse) buttons.
- *
- * @see ButtonConnector
- */
-public enum Button {
- PRIMARY,
- SECONDARY,
- TERTIARY,
- OTHER;
-
- /**
- * Converts the button field of a Gdk.EventButton to a { link Button} enumeration.
- */
- public static Button from_event(Gdk.EventButton event) {
- switch (event.button) {
- case 1:
- return PRIMARY;
-
- case 3:
- return SECONDARY;
-
- case 2:
- return TERTIARY;
-
- default:
- return OTHER;
- }
- }
-}
-
private int init_count = 0;
public void init() throws Error {
diff --git a/src/view/week/week-day-pane.vala b/src/view/week/week-day-pane.vala
index 66d570f..6af8151 100644
--- a/src/view/week/week-day-pane.vala
+++ b/src/view/week/week-day-pane.vala
@@ -57,6 +57,20 @@ internal class DayPane : Pane {
queue_draw();
}
+ public Component.Event? get_event_at(Gdk.Point point) {
+ Calendar.ExactTime exact_time = new Calendar.ExactTime(Calendar.Timezone.local, date,
+ get_wall_time(point.y));
+ foreach (Component.Event event in days_events) {
+ if (event.is_all_day)
+ continue;
+
+ if (exact_time in event.exact_time_span)
+ return event;
+ }
+
+ return null;
+ }
+
// note that a painter's algorithm should be used here: background should be painted before
// calling base method, and foreground afterward
protected override bool on_draw(Cairo.Context ctx) {
diff --git a/src/view/week/week-grid.vala b/src/view/week/week-grid.vala
index 799ac61..eb4f214 100644
--- a/src/view/week/week-grid.vala
+++ b/src/view/week/week-grid.vala
@@ -101,7 +101,6 @@ internal class Grid : Gtk.Box {
// connect panes' event signal handlers
day_pane_button_connector.clicked.connect(on_day_pane_clicked);
day_pane_button_connector.double_clicked.connect(on_day_pane_double_clicked);
- day_pane_button_connector.triple_clicked.connect(on_day_pane_triple_clicked);
// set up calendar subscriptions for the week
subscriptions = new Backing.CalendarSubscriptionManager(
@@ -176,21 +175,21 @@ internal class Grid : Gtk.Box {
if (details.button != Toolkit.Button.PRIMARY)
return;
- debug("clicked");
+ DayPane day_pane = (DayPane) details.widget;
+
+ Component.Event? event = day_pane.get_event_at(details.press_point);
+ if (event != null)
+ owner.request_display_event(event, day_pane, details.press_point);
}
private void on_day_pane_double_clicked(Toolkit.ButtonEvent details) {
if (details.button != Toolkit.Button.PRIMARY)
return;
- debug("double clicked");
- }
-
- private void on_day_pane_triple_clicked(Toolkit.ButtonEvent details) {
- if (details.button != Toolkit.Button.PRIMARY)
- return;
+ DayPane day_pane = (DayPane) details.widget;
- debug("triple clicked");
+ owner.request_create_all_day_event(new Calendar.DateSpan.from_span(day_pane.date),
+ day_pane, details.press_point);
}
}
diff --git a/src/view/week/week-pane.vala b/src/view/week/week-pane.vala
index 3a03826..b9fac89 100644
--- a/src/view/week/week-pane.vala
+++ b/src/view/week/week-pane.vala
@@ -115,6 +115,20 @@ internal abstract class Pane : Gtk.EventBox {
protected int get_text_y(Calendar.WallTime wall_time) {
return get_line_y(wall_time) + Palette.LINE_PADDING_PX;
}
+
+ /**
+ * Returns the { link Calendar.WallTime} for a y-coordinate down to the minute;
+ */
+ protected Calendar.WallTime get_wall_time(int y) {
+ // every hour gets two "lines" of text
+ int one_hour = line_height_px * 2;
+
+ int hour = y / one_hour;
+ int rem = y % one_hour;
+ double min = ((double) rem / (double) one_hour) * 60.0;
+
+ return new Calendar.WallTime(hour, (int) min, 0);
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]