PROP_0,
PROP_HORIZONTAL_POLICY,
PROP_VERTICAL_POLICY,
+ PROP_MOVEMENT_MODE,
+ PROP_HORIZONTAL_MAX_OVERSHOOT,
+ PROP_VERTICAL_MAX_OVERSHOOT,
};
/* globals */
GTK_POLICY_AUTOMATIC,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_MOVEMENT_MODE,
+ g_param_spec_enum ("movement_mode",
+ "Directions scroll is allowed",
+ "Movements allowed in the scrollable",
+ MODEST_TYPE_MOVEMENT_MODE,
+ MODEST_MOVEMENT_MODE_VERTICAL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (gobject_class,
+ PROP_HORIZONTAL_MAX_OVERSHOOT,
+ g_param_spec_int ("horizontal-max-overshoot",
+ "Horizontal max overshoot",
+ "Horizontal maximum overshoot (0 disables)",
+ 0, G_MAXINT, 150,
+ G_PARAM_READWRITE |G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (gobject_class,
+ PROP_VERTICAL_MAX_OVERSHOOT,
+ g_param_spec_int ("vertical-max-overshoot",
+ "Vertical max overshoot",
+ "Vertical maximum overshoot (0 disables)",
+ 0, G_MAXINT, 150,
+ G_PARAM_READWRITE |G_PARAM_CONSTRUCT));
}
static void
GParamSpec *pspec)
{
GtkPolicyType policy;
+ HildonMovementMode mov_mode;
+ gint overshoot;
switch (prop_id) {
case PROP_VERTICAL_POLICY:
g_object_get (obj, "hscrollbar-policy", &policy, NULL);
g_value_set_enum (value, policy);
break;
+ case PROP_MOVEMENT_MODE:
+ g_object_get (obj, "mov-mode", &mov_mode, NULL);
+ switch (mov_mode) {
+ case HILDON_MOVEMENT_MODE_HORIZ:
+ g_value_set_enum (value, MODEST_MOVEMENT_MODE_HORIZONTAL);
+ break;
+ case HILDON_MOVEMENT_MODE_BOTH:
+ g_value_set_enum (value, MODEST_MOVEMENT_MODE_BOTH);
+ break;
+ default:
+ case HILDON_MOVEMENT_MODE_VERT:
+ g_value_set_enum (value, MODEST_MOVEMENT_MODE_VERTICAL);
+ break;
+ }
+ break;
+ case PROP_HORIZONTAL_MAX_OVERSHOOT:
+ g_object_get (obj, "hovershoot-max", &overshoot, NULL);
+ g_value_set_int (value, overshoot);
+ break;
+ case PROP_VERTICAL_MAX_OVERSHOOT:
+ g_object_get (obj, "vovershoot-max", &overshoot, NULL);
+ g_value_set_int (value, overshoot);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
break;
GParamSpec *pspec)
{
GtkPolicyType policy;
+ ModestMovementMode mov_mode;
+ gint overshoot;
switch (prop_id) {
case PROP_VERTICAL_POLICY:
policy = g_value_get_enum (value);
g_object_set (obj, "hscrollbar-policy", policy, NULL);
break;
+ case PROP_MOVEMENT_MODE:
+ mov_mode = g_value_get_enum (value);
+ switch (mov_mode) {
+ case MODEST_MOVEMENT_MODE_HORIZONTAL:
+ g_object_set (obj, "mov-mode", HILDON_MOVEMENT_MODE_HORIZ, NULL);
+ break;
+ case HILDON_MOVEMENT_MODE_BOTH:
+ g_object_set (obj, "mov-mode", HILDON_MOVEMENT_MODE_BOTH, NULL);
+ break;
+ default:
+ case MODEST_MOVEMENT_MODE_VERTICAL:
+ g_object_set (obj, "mov-mode", HILDON_MOVEMENT_MODE_VERT, NULL);
+ break;
+ }
+ break;
+ case PROP_HORIZONTAL_MAX_OVERSHOOT:
+ overshoot = g_value_get_int (value);
+ g_object_set (obj, "hovershoot-max", overshoot, NULL);
+ break;
+ case PROP_VERTICAL_MAX_OVERSHOOT:
+ overshoot = g_value_get_int (value);
+ g_object_set (obj, "vovershoot-max", overshoot, NULL);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
break;
return modest_singletons_get_platform_factory (_singletons);
}
+ModestToolkitFactory*
+modest_runtime_get_toolkit_factory (void)
+{
+ g_return_val_if_fail (_singletons, NULL);
+ return modest_singletons_get_toolkit_factory (_singletons);
+}
+
ModestTnySendQueue*
modest_runtime_get_send_queue (TnyTransportAccount *account,
gboolean create)
#include <modest-protocol-registry.h>
#include <tny-stream-cache.h>
#include <modest-plugin-factory.h>
+#include <widgets/modest-toolkit-factory.h>
G_BEGIN_DECLS
**/
TnyPlatformFactory* modest_runtime_get_platform_factory (void);
-
-
+/**
+ * modest_runtime_get_toolkit_factory:
+ *
+ * get the #ModestToolkitFactory singleton instance
+ *
+ * Returns: the #ModestToolkitFactory singleton. This should NOT be unref'd.
+ **/
+ModestToolkitFactory* modest_runtime_get_toolkit_factory (void);
/**
* modest_runtime_get_mail_operation_queue:
ModestWindowMgr *window_mgr;
ModestProtocolRegistry *protocol_registry;
ModestPluginFactory *plugin_factory;
+ ModestToolkitFactory *toolkit_factory;
TnyStreamCache *images_cache;
};
#define MODEST_SINGLETONS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
priv->window_mgr = NULL;
priv->protocol_registry = NULL;
priv->plugin_factory = NULL;
+ priv->toolkit_factory = NULL;
priv->protocol_registry = modest_protocol_registry_new ();
if (!priv->protocol_registry) {
return;
}
+ priv->toolkit_factory = modest_toolkit_factory_get_instance ();
+ if (!priv->toolkit_factory) {
+ g_printerr ("modest: cannot create toolkit factory instance\n");
+ return;
+ }
+
priv->device = tny_platform_factory_new_device (priv->platform_fact);
if (!priv->device) {
g_printerr ("modest: cannot create tny device instance\n");
return MODEST_SINGLETONS_GET_PRIVATE(self)->platform_fact;
}
+ModestToolkitFactory*
+modest_singletons_get_toolkit_factory (ModestSingletons *self)
+{
+ g_return_val_if_fail (self, NULL);
+ return MODEST_SINGLETONS_GET_PRIVATE(self)->toolkit_factory;
+}
+
ModestWindowMgr*
modest_singletons_get_window_mgr (ModestSingletons *self)
{
#include <modest-mail-operation-queue.h>
#include <modest-cache-mgr.h>
#include <modest-tny-platform-factory.h>
+#include <widgets/modest-toolkit-factory.h>
#include "modest-plugin-factory.h"
#include "widgets/modest-window-mgr.h"
#include "modest-protocol-registry.h"
**/
TnyPlatformFactory* modest_singletons_get_platform_factory (ModestSingletons *self);
+/**
+ * modest_singletons_get_toolkit_factory:
+ * @self: a valid #ModestSingletons instance
+ *
+ * get the #TnyToolkitFactory singleton instance
+ * don't use this function directly, use the modest-runtime
+ * functions instead.
+ *
+ * Returns: the #ModestToolkitFactory singleton
+ **/
+ModestToolkitFactory* modest_singletons_get_toolkit_factory (ModestSingletons *self);
+
/**
* modest_singletons_get_device:
#include <modest-tny-folder.h>
#include <modest-text-utils.h>
#include <modest-account-mgr-helpers.h>
-#include <hildon/hildon-pannable-area.h>
+#include <modest-toolkit-factory.h>
+#include <modest-scrollable.h>
#include <hildon/hildon-picker-dialog.h>
#include <hildon/hildon-app-menu.h>
#include "modest-defs.h"
}
if (step)
- modest_maemo_utils_scroll_pannable((HildonPannableArea *) priv->main_scroll, 0, step);
+ modest_scrollable_scroll ((ModestScrollable *) priv->main_scroll, 0, step);
return (gboolean) step;
}
priv->msg_view = GTK_WIDGET (tny_platform_factory_new_msg_view (modest_tny_platform_factory_get_instance ()));
modest_msg_view_set_shadow_type (MODEST_MSG_VIEW (priv->msg_view), GTK_SHADOW_NONE);
main_vbox = gtk_vbox_new (FALSE, 6);
- /****** HILDON2:START
- * create panning widget, and set parameters
- */
- priv->main_scroll = hildon_pannable_area_new ();
+
+ priv->main_scroll = modest_toolkit_factory_create_scrollable (modest_runtime_get_toolkit_factory ());
+ modest_scrollable_set_horizontal_policy (MODEST_SCROLLABLE (priv->main_scroll), GTK_POLICY_AUTOMATIC);
g_object_set (G_OBJECT (priv->main_scroll),
- "mov-mode", HILDON_MOVEMENT_MODE_BOTH,
- "hovershoot-max", 0,
+ "movement-mode", MODEST_MOVEMENT_MODE_BOTH,
+ "horizontal-max-overshoot", 0,
NULL);
gtk_container_add (GTK_CONTAINER (priv->main_scroll), priv->msg_view);
gtk_box_pack_start (GTK_BOX(main_vbox), priv->main_scroll, TRUE, TRUE, 0);
- /****** HILDON2:END */
gtk_container_add (GTK_CONTAINER(obj), main_vbox);
/* NULL-ize fields if the window is destroyed */
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
+ g_object_interface_install_property (g_iface,
+ g_param_spec_enum ("movement_mode",
+ "Directions scroll is allowed",
+ "Movements allowed in the scrollable",
+ MODEST_TYPE_MOVEMENT_MODE,
+ MODEST_MOVEMENT_MODE_VERTICAL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_interface_install_property (g_iface,
+ g_param_spec_int ("horizontal-max-overshoot",
+ "Horizontal max overshoot",
+ "Horizontal maximum overshoot (0 disables)",
+ 0, G_MAXINT, 150,
+ G_PARAM_READWRITE |G_PARAM_CONSTRUCT));
+
+ g_object_interface_install_property (g_iface,
+ g_param_spec_int ("vertical-max-overshoot",
+ "Vertical max overshoot",
+ "Vertical maximum overshoot (0 disables)",
+ 0, G_MAXINT, 150,
+ G_PARAM_READWRITE |G_PARAM_CONSTRUCT));
+
}
}
return type;
}
+
+void
+modest_scrollable_scroll (ModestScrollable *scrollable,
+ gint horizontal, gint vertical)
+{
+ g_return_if_fail (MODEST_IS_SCROLLABLE (scrollable));
+ gint h_pos = -1;
+ gint v_pos = -1;
+
+ g_assert (scrollable);
+ /* at atleast one of values have to be valid */
+ g_return_if_fail (h_pos == -1 && v_pos == -1);
+
+ if (horizontal != 0) {
+ GtkAdjustment *h_adj;
+
+ h_adj = modest_scrollable_get_hadjustment (scrollable);
+ g_return_if_fail (h_adj);
+
+ h_pos = h_adj->value + h_adj->step_increment * horizontal;
+ if (horizontal > 0) {
+ h_pos += h_adj->page_size;
+ }
+ }
+
+ if (vertical != 0) {
+ GtkAdjustment *v_adj;
+
+ v_adj = modest_scrollable_get_vadjustment (scrollable);
+ g_return_if_fail (v_adj);
+
+ v_pos = v_adj->value + v_adj->step_increment * vertical;
+ if (vertical > 0) {
+ v_pos += v_adj->page_size;
+ }
+ }
+
+ modest_scrollable_scroll_to (scrollable, h_pos, v_pos);
+}
+
+GType
+modest_movement_mode_get_type (void)
+{
+ static GType etype = 0;
+ if (etype == 0) {
+ static const GFlagsValue values[] = {
+ { MODEST_MOVEMENT_MODE_HORIZONTAL, "HILDON_MOVEMENT_MODE_HORIZONTAL", "horizontal" },
+ { MODEST_MOVEMENT_MODE_VERTICAL, "MODEST_MOVEMENT_MODE_VERTICAL", "vertical" },
+ { MODEST_MOVEMENT_MODE_BOTH, "MODEST_MOVEMENT_MODE_BOTH", "both" },
+ { 0, NULL, NULL }
+ };
+ etype = g_flags_register_static ("ModestMovementMode", values);
+ }
+ return etype;
+}
void (*set_horizontal_policy) (ModestScrollable *self, GtkPolicyType policy);
/* properties */
- /* hscrollbar-policy; */
- /* vscrollbar-policy; */
+ /* horizontal-policy; */
+ /* vertical-policy; */
+ /* movement-mode */
+ /* horizontal-max-overshoot */
+ /* vertical-max-overshoot */
+
};
GType modest_scrollable_get_type (void);
+typedef enum {
+ MODEST_MOVEMENT_MODE_HORIZONTAL = 1 << 1,
+ MODEST_MOVEMENT_MODE_VERTICAL = 1 << 2,
+ MODEST_MOVEMENT_MODE_BOTH = 0x000006
+} ModestMovementMode;
+
+
+GType modest_movement_mode_get_type (void);
+#define MODEST_TYPE_MOVEMENT_MODE (modest_movement_mode_get_type())
+
+
+/* virtual methods */
void modest_scrollable_add_with_viewport (ModestScrollable *self, GtkWidget *widget);
GtkAdjustment * modest_scrollable_get_vadjustment (ModestScrollable *self);
GtkAdjustment * modest_scrollable_get_hadjustment (ModestScrollable *self);
void modest_scrollable_set_vertical_policy (ModestScrollable *self, GtkPolicyType policy);
void modest_scrollable_set_horizontal_policy (ModestScrollable *self, GtkPolicyType policy);
+/* utils */
+void modest_scrollable_scroll (ModestScrollable *self, gint horizontal, gint vertical);
+
G_END_DECLS
#endif
G_TYPE_OBJECT);
ModestToolkitFactory *
-modest_toolkit_factory_new (void)
+modest_toolkit_factory_get_instance (void)
{
GObject* self = g_object_new (MODEST_TYPE_TOOLKIT_FACTORY, NULL);
modest_toolkit_factory_get_type (void) G_GNUC_CONST;
ModestToolkitFactory *
-modest_toolkit_factory_new (void);
+modest_toolkit_factory_get_instance (void);
GtkWidget *
modest_toolkit_factory_create_scrollable (ModestToolkitFactory *self);