146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifndef ATHENA_ACTIVITY_PUBLIC_ACTIVITY_VIEW_MODEL_H_
646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define ATHENA_ACTIVITY_PUBLIC_ACTIVITY_VIEW_MODEL_H_
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "athena/athena_export.h"
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/string16.h"
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)typedef unsigned int SkColor;
1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace gfx {
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ImageSkia;
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace views {
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class View;
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass Widget;
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace athena {
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// The view model for the representation of the activity.
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class ATHENA_EXPORT ActivityViewModel {
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public:
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ~ActivityViewModel() {}
2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Called after the view model is attached to the widget/window tree and
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // before it gets registered to the ActivityManager and the ResourceManager.
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // At this time the Activity can also be moved to a different place in the
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Activity history.
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void Init() = 0;
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Returns a color most representative of this activity.
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual SkColor GetRepresentativeColor() const = 0;
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Returns a title for the activity.
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual base::string16 GetTitle() const = 0;
4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Returns an icon for the activity.
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual gfx::ImageSkia GetIcon() const = 0;
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // True if the activity wants to use Widget's frame, or false if the activity
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // draws its own frame.
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool UsesFrame() const = 0;
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns the contents view which might be NULL if the activity is not
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // loaded. Note that the caller should not hold on to the view since it can
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // be deleted by the resource manager.
5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual views::View* GetContentsView() = 0;
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Creates a custom widget for the activity. Returns NULL to use default
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // implementation.
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual views::Widget* CreateWidget() = 0;
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns an image which can be used to represent the activity in e.g. the
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // overview mode. The returned image can have no size if either a view exists
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // or the activity has not yet been loaded or ever been presented. In that
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // case GetRepresentativeColor() should be used to clear the preview area.
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Note that since the image gets created upon request, and the
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // ActivityViewModel will hold no reference to the returned image data. As
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // such it is advisable to hold on to the image as long as needed instead of
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // calling this function frequently since it will cause time to generate.
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual gfx::ImageSkia GetOverviewModeImage() = 0;
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Prepares the contents view for overview.
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void PrepareContentsForOverview() = 0;
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Undoes any changes done by PrepareContentsForOverview().
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ResetContentsView() = 0;
7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace athena
7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif  // ATHENA_ACTIVITY_PUBLIC_ACTIVITY_VIEW_MODEL_H_
77