Welcome to mirror list, hosted at ThFree Co, Russian Federation.

country_status_display.hpp « map - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: cfe993325e4812491621f48594b70f4d3502ef5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#pragma once

#include "map/active_maps_layout.hpp"

#include "storage/storage_defines.hpp"

#include "std/unique_ptr.hpp"
#include "std/target_os.hpp"

class Framework;

namespace storage { struct TIndex; }

/// This class is a composite GUI element to display
/// an on-screen GUI for the country, which is not downloaded yet.
class CountryStatusDisplay : public storage::ActiveMapsLayout::ActiveMapsListener
{
public:
  struct Params
  {
    Params(storage::ActiveMapsLayout & activeMaps) : m_activeMaps(activeMaps) {}

    storage::ActiveMapsLayout & m_activeMaps;
  };

  CountryStatusDisplay(Params const & p);
  ~CountryStatusDisplay();

  /// set current country name
  void SetCountryIndex(storage::TIndex const & idx);
  typedef function<void (storage::TIndex const & idx, int)> TDownloadCountryFn;
  void SetDownloadCountryListener(TDownloadCountryFn const & fn) { m_downloadCallback = fn; }

  /// @name Override from graphics::OverlayElement and gui::Element.
  //@{
  virtual void setIsVisible(bool isVisible) const;
  virtual void setIsDirtyLayout(bool isDirty) const;

  void cache();
  void purge();
  void layout();
  //@}

private:
  virtual void CountryGroupChanged(storage::ActiveMapsLayout::TGroup const & oldGroup, int oldPosition,
                                   storage::ActiveMapsLayout::TGroup const & newGroup, int newPosition) {}
  virtual void CountryStatusChanged(storage::ActiveMapsLayout::TGroup const & group, int position,
                                    storage::TStatus const & oldStatus, storage::TStatus const & newStatus);
  virtual void CountryOptionsChanged(storage::ActiveMapsLayout::TGroup const & group, int position,
                                     MapOptions const & oldOpt, MapOptions const & newOpt)
  {
  }
  virtual void DownloadingProgressUpdate(storage::ActiveMapsLayout::TGroup const & group, int position,
                                         storage::LocalAndRemoteSizeT const & progress);

  template <class T1, class T2>
  string FormatStatusMessage(string const & msgID, T1 const * t1 = 0, T2 const * t2 = 0);

  void FormatDisplayName(string const & mapName, string const & groupName);

  void SetVisibilityForState() const;
  void SetContentForState();
  void SetContentForDownloadPropose();
  void SetContentForProgress();
  void SetContentForInQueue();
  void SetContentForError();

  void ComposeElementsForState();

  ///@TODO UVR
  //typedef function<bool (unique_ptr<gui::Button> const &, m2::PointD const &)> TTapActionFn;
  //bool OnTapAction(TTapActionFn const & action, m2::PointD const & pt);
  //void OnButtonClicked(Element const * button);

  bool IsStatusFailed() const;

private:
  storage::ActiveMapsLayout & m_activeMaps;
  int m_activeMapsSlotID = 0;

  string m_displayMapName;
  mutable storage::TStatus m_countryStatus = storage::TStatus::EUnknown;
  storage::TIndex m_countryIdx;
  storage::LocalAndRemoteSizeT m_progressSize;

  TDownloadCountryFn m_downloadCallback;
};