summaryrefslogtreecommitdiff
diff options
authorNick Dedekind <nicholas.dedekind@gmail.com>2012-09-13 12:43:46 +0100
committerNick Dedekind <nicholas.dedekind@gmail.com>2012-09-13 12:43:46 +0100
commitb2d39cdf4d9e3032d7cad6838043d9e3749b1dc1 (patch)
tree6b4d074bd6b4cb05c951efdfe68aca9ad89cbe5d
parent5bc7ab468221a113f4b9cf7114b62c27b830ae5a (diff)
Added extra-text to preview actions (for price tags).
(bzr r2684.2.1)
-rw-r--r--dash/previews/ActionButton.cpp41
-rw-r--r--dash/previews/ActionButton.h6
-rw-r--r--dash/previews/Preview.cpp4
-rw-r--r--dash/previews/StandaloneApplicationPreview.cpp25
-rw-r--r--unity-shared/PreviewStyle.cpp9
-rw-r--r--unity-shared/PreviewStyle.h3
6 files changed, 76 insertions, 12 deletions
diff --git a/dash/previews/ActionButton.cpp b/dash/previews/ActionButton.cpp
index 822697087..bdeb4260e 100644
--- a/dash/previews/ActionButton.cpp
+++ b/dash/previews/ActionButton.cpp
@@ -50,7 +50,7 @@ ActionButton::ActionButton(std::string const& action_hint, std::string const& la
SetAcceptKeyNavFocusOnMouseDown(false);
SetAcceptKeyNavFocusOnMouseEnter(false);
Init();
- BuildLayout(label, icon_hint);
+ BuildLayout(label, icon_hint, "");
}
ActionButton::~ActionButton()
@@ -105,7 +105,19 @@ void ActionButton::InitTheme()
SetMinimumWidth(kMinButtonWidth);
}
-void ActionButton::BuildLayout(std::string const& label, std::string const& icon_hint)
+void ActionButton::SetExtraHint(std::string const& extra_hint, std::string const& font_hint)
+{
+ extra_font_hint_= font_hint;
+ if (extra_text_)
+ {
+ extra_text_->SetFont(extra_font_hint_);
+ ComputeContentSize();
+ QueueDraw();
+ }
+ BuildLayout(label_, icon_hint_, extra_hint);
+}
+
+void ActionButton::BuildLayout(std::string const& label, std::string const& icon_hint, std::string const& extra_hint)
{
if (icon_hint != icon_hint_)
{
@@ -121,7 +133,7 @@ void ActionButton::BuildLayout(std::string const& label, std::string const& icon
image_ = new IconTexture(icon_hint, icon_size);
image_->texture_updated.connect([&](nux::BaseTexture*)
{
- BuildLayout(label_, icon_hint_);
+ BuildLayout(label_, icon_hint_, extra_hint_);
});
image_->SetInputEventSensitivity(false);
image_->SetMinMaxSize(icon_size, icon_size);
@@ -147,16 +159,37 @@ void ActionButton::BuildLayout(std::string const& label, std::string const& icon
}
}
+ if (extra_hint != extra_hint_)
+ {
+ extra_hint_ = extra_hint;
+ if (extra_text_)
+ {
+ extra_text_.Release();
+ extra_text_ = NULL;
+ }
+
+ if (!extra_hint_.empty())
+ {
+ extra_text_ = new nux::StaticCairoText(extra_hint_, true, NUX_TRACKER_LOCATION);
+ if (!extra_font_hint_.empty())
+ extra_text_->SetFont(extra_font_hint_);
+ extra_text_->SetInputEventSensitivity(false);
+ extra_text_->SetTextAlignment(nux::StaticCairoText::NUX_ALIGN_CENTRE);
+ }
+ }
+
RemoveLayout();
nux::HLayout* layout = new nux::HLayout();
layout->SetHorizontalInternalMargin(6);
- layout->SetPadding(2, 11, 2, 11);
+ layout->SetPadding(2, 0, 2, 0);
layout->AddSpace(0,1);
if (image_)
layout->AddView(image_.GetPointer(), 1, nux::MINOR_POSITION_CENTER, nux::MINOR_SIZE_MATCHCONTENT);
if (static_text_)
layout->AddView(static_text_.GetPointer(), 1, nux::MINOR_POSITION_CENTER, nux::MINOR_SIZE_MATCHCONTENT);
+ if (extra_text_)
+ layout->AddView(extra_text_.GetPointer(), 1, nux::MINOR_POSITION_CENTER, nux::MINOR_SIZE_MATCHCONTENT);
layout->AddSpace(0,1);
SetLayout(layout);
diff --git a/dash/previews/ActionButton.h b/dash/previews/ActionButton.h
index 0abce4e67..c40cf72f4 100644
--- a/dash/previews/ActionButton.h
+++ b/dash/previews/ActionButton.h
@@ -49,6 +49,7 @@ public:
sigc::signal<void, ActionButton*, std::string const&> click;
void SetFont(std::string const& font_hint);
+ void SetExtraHint(std::string const& extra_hint, std::string const& font_hint);
void Activate();
void Deactivate();
@@ -64,7 +65,7 @@ protected:
void RedrawTheme(nux::Geometry const& geom, cairo_t* cr, nux::ButtonVisualState faked_state);
void RedrawFocusOverlay(nux::Geometry const& geom, cairo_t* cr);
- void BuildLayout(std::string const& label, std::string const& icon_hint);
+ void BuildLayout(std::string const& label, std::string const& icon_hint, std::string const& extra_hint);
// From debug::Introspectable
std::string GetName() const;
@@ -83,9 +84,12 @@ private:
std::string action_hint_;
std::string icon_hint_;
std::string font_hint_;
+ std::string extra_hint_;
+ std::string extra_font_hint_;
nux::ObjectPtr<IconTexture> image_;
nux::ObjectPtr<nux::StaticCairoText> static_text_;
+ nux::ObjectPtr<nux::StaticCairoText> extra_text_;
};
} // namespace dash
diff --git a/dash/previews/Preview.cpp b/dash/previews/Preview.cpp
index 1185accf3..83104551a 100644
--- a/dash/previews/Preview.cpp
+++ b/dash/previews/Preview.cpp
@@ -136,6 +136,8 @@ nux::Layout* Preview::BuildGridActionsLayout(dash::Preview::ActionPtrList action
dash::Preview::ActionPtr action = actions[action_iter];
ActionButton* button = new ActionButton(action->id, action->display_name, action->icon_hint, NUX_TRACKER_LOCATION);
+ button->SetFont(style.action_font());
+ button->SetExtraHint(action->extra_text, style.action_extra_font());
AddChild(button);
button->click.connect(sigc::mem_fun(this, &Preview::OnActionActivated));
buttons.push_back(button);
@@ -168,6 +170,8 @@ nux::Layout* Preview::BuildVerticalActionsLayout(dash::Preview::ActionPtrList ac
dash::Preview::ActionPtr action = actions[action_iter];
ActionButton* button = new ActionButton(action->id, action->display_name, action->icon_hint, NUX_TRACKER_LOCATION);
+ button->SetFont(style.action_font());
+ button->SetExtraHint(action->extra_text, style.action_extra_font());
AddChild(button);
button->click.connect(sigc::mem_fun(this, &Preview::OnActionActivated));
buttons.push_back(button);
diff --git a/dash/previews/StandaloneApplicationPreview.cpp b/dash/previews/StandaloneApplicationPreview.cpp
index f9873f0fa..324d35666 100644
--- a/dash/previews/StandaloneApplicationPreview.cpp
+++ b/dash/previews/StandaloneApplicationPreview.cpp
@@ -164,6 +164,9 @@ The service allows users to communicate with peers by voice, video, and instant
glib::Object<GIcon> iconHint2(g_icon_new_for_string("/usr/share/unity/5/lens-nav-home.svg", NULL));
glib::Object<GIcon> iconHint3(g_icon_new_for_string("/usr/share/unity/5/lens-nav-people.svg", NULL));
+ GHashTable* action_hints1(g_hash_table_new(g_direct_hash, g_direct_equal));
+ g_hash_table_insert (action_hints1, g_strdup ("extra-text"), g_variant_new_string("£30.99"));
+
glib::Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new()));
unity_protocol_application_preview_set_app_icon(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), g_icon_new_for_string("/home/nick/SkypeIcon.png", NULL));
@@ -173,13 +176,12 @@ The service allows users to communicate with peers by voice, video, and instant
unity_protocol_application_preview_set_rating(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), 0.5);
unity_protocol_application_preview_set_num_ratings(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), 17);
-
unity_protocol_preview_set_image_source_uri(proto_obj, "file:///home/nick/Skype.png");
unity_protocol_preview_set_title(proto_obj, app_name.str().c_str());
unity_protocol_preview_set_subtitle(proto_obj, subtitle);
unity_protocol_preview_set_description(proto_obj, description);
unity_protocol_preview_add_action(proto_obj, "uninstall", "Uninstall", iconHint1, 0);
- unity_protocol_preview_add_action(proto_obj, "launch", "Launch", iconHint2, 0);
+ unity_protocol_preview_add_action_with_hints(proto_obj, "launch", "Download", iconHint2, 0, action_hints1);
unity_protocol_preview_add_info_hint(proto_obj, "time", "Total time", iconHint1, g_variant_new("s", "16 h 34miin 45sec"));
unity_protocol_preview_add_info_hint(proto_obj, "energy", "Energy", iconHint2, g_variant_new("s", "58.07 mWh"));
unity_protocol_preview_add_info_hint(proto_obj, "load", "CPU Load", iconHint3, g_variant_new("i", 12));
@@ -190,6 +192,7 @@ The service allows users to communicate with peers by voice, video, and instant
dash::Preview::Ptr preview_model(dash::Preview::PreviewForVariant(v));
container_->Preview(preview_model, previews::Navigation::RIGHT);
+ g_hash_table_unref(action_hints1);
}
void TestRunner::NavRight()
@@ -206,9 +209,10 @@ The service allows users to communicate with peers by voice, video, and instant
glib::Object<GIcon> iconHint2(g_icon_new_for_string("/usr/share/unity/5/lens-nav-home.svg", NULL));
glib::Object<GIcon> iconHint3(g_icon_new_for_string("/usr/share/unity/5/lens-nav-people.svg", NULL));
- glib::Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new()));
+ GHashTable* action_hints1(g_hash_table_new(g_direct_hash, g_direct_equal));
+ g_hash_table_insert (action_hints1, g_strdup ("extra-text"), g_variant_new_string("£30.99"));
-
+ glib::Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new()));
unity_protocol_application_preview_set_app_icon(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), g_icon_new_for_string("/home/nick/SkypeIcon.png", NULL));
unity_protocol_application_preview_set_license(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), "Proprietary");
@@ -222,7 +226,7 @@ The service allows users to communicate with peers by voice, video, and instant
unity_protocol_preview_set_subtitle(proto_obj, subtitle);
unity_protocol_preview_set_description(proto_obj, description);
unity_protocol_preview_add_action(proto_obj, "uninstall", "Uninstall", iconHint1, 0);
- unity_protocol_preview_add_action(proto_obj, "launch", "Launch", iconHint2, 0);
+ unity_protocol_preview_add_action_with_hints(proto_obj, "launch", "Download", iconHint2, 0, action_hints1);
unity_protocol_preview_add_info_hint(proto_obj, "time", "Total time", iconHint1, g_variant_new("s", "16 h 34miin 45sec"));
unity_protocol_preview_add_info_hint(proto_obj, "energy", "Energy", iconHint2, g_variant_new("s", "58.07 mWh"));
unity_protocol_preview_add_info_hint(proto_obj, "load", "CPU Load", iconHint3, g_variant_new("d", 12.1));
@@ -232,6 +236,8 @@ The service allows users to communicate with peers by voice, video, and instant
dash::Preview::Ptr preview_model(dash::Preview::PreviewForVariant(v));
container_->Preview(preview_model, previews::Navigation::RIGHT);
+
+ g_hash_table_unref(action_hints1);
}
void TestRunner::NavLeft()
@@ -251,7 +257,10 @@ void TestRunner::NavLeft()
glib::Object<GIcon> iconHint2(g_icon_new_for_string("/usr/share/unity/5/lens-nav-home.svg", NULL));
glib::Object<GIcon> iconHint3(g_icon_new_for_string("/usr/share/unity/5/lens-nav-people.svg", NULL));
- glib::Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new()));
+ GHashTable* action_hints1(g_hash_table_new(g_direct_hash, g_direct_equal));
+ g_hash_table_insert (action_hints1, g_strdup ("extra-text"), g_variant_new_string("£30.99"));
+
+ glib::Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new()));
unity_protocol_application_preview_set_app_icon(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), g_icon_new_for_string("/home/nick/SkypeIcon.png", NULL));
@@ -266,7 +275,7 @@ void TestRunner::NavLeft()
unity_protocol_preview_set_subtitle(proto_obj, subtitle);
unity_protocol_preview_set_description(proto_obj, description);
unity_protocol_preview_add_action(proto_obj, "uninstall", "Uninstall", iconHint1, 0);
- unity_protocol_preview_add_action(proto_obj, "launch", "Launch", iconHint2, 0);
+ unity_protocol_preview_add_action_with_hints(proto_obj, "launch", "Download", iconHint2, 0, action_hints1);
unity_protocol_preview_add_info_hint(proto_obj, "time", "Total time", iconHint1, g_variant_new("s", "16 h 34miin 45sec"));
unity_protocol_preview_add_info_hint(proto_obj, "energy", "Energy", iconHint2, g_variant_new("s", "58.07 mWh"));
unity_protocol_preview_add_info_hint(proto_obj, "load", "CPU Load", iconHint3, g_variant_new("i", 22));
@@ -277,6 +286,8 @@ void TestRunner::NavLeft()
dash::Preview::Ptr preview_model(dash::Preview::PreviewForVariant(v));
container_->Preview(preview_model, previews::Navigation::LEFT);
+ g_hash_table_unref(action_hints1);
+
return false;
}));
}
diff --git a/unity-shared/PreviewStyle.cpp b/unity-shared/PreviewStyle.cpp
index d78568157..d4a9315f0 100644
--- a/unity-shared/PreviewStyle.cpp
+++ b/unity-shared/PreviewStyle.cpp
@@ -305,6 +305,15 @@ std::string Style::subtitle_size_font() const
std::string Style::description_font() const
{
return "Ubuntu Light 10";
+
+}
+std::string Style::action_font() const
+{
+ return "Ubuntu 11";
+}
+std::string Style::action_extra_font() const
+{
+ return "Ubuntu Bold 11";
}
std::string Style::app_license_font() const
diff --git a/unity-shared/PreviewStyle.h b/unity-shared/PreviewStyle.h
index ac197f29d..8580baa3a 100644
--- a/unity-shared/PreviewStyle.h
+++ b/unity-shared/PreviewStyle.h
@@ -90,6 +90,9 @@ public:
std::string subtitle_size_font() const;
std::string description_font() const;
+ std::string action_font() const;
+ std::string action_extra_font() const;
+
nux::AbstractPaintLayer* GetBackgroundLayer() const;
////////////////////////////////