// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
/*
* Copyright (C) 2010 Canonical Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* Authored by: Neil Jagdish Patel
*/
#ifndef PANEL_VIEW_H
#define PANEL_VIEW_H
#include
#include
#include
#include
#include
#include
#include
#include
#include "launcher/EdgeBarrierController.h"
#include "unity-shared/BackgroundEffectHelper.h"
#include "unity-shared/Introspectable.h"
#include "unity-shared/MenuManager.h"
#include "unity-shared/MockableBaseWindow.h"
#include "PanelMenuView.h"
#include "PanelTray.h"
#include "PanelIndicatorsView.h"
#include "unity-shared/UBusWrapper.h"
namespace unity
{
namespace panel
{
class PanelView : public unity::debug::Introspectable,
public ui::EdgeBarrierSubscriber,
public nux::View
{
NUX_DECLARE_OBJECT_TYPE(PanelView, nux::View);
public:
PanelView(MockableBaseWindow* parent, menu::Manager::Ptr const&, NUX_FILE_LINE_PROTO);
~PanelView();
MockableBaseWindow* GetParent() const
{
return parent_;
};
void SetMonitor(int monitor);
int GetMonitor() const;
bool IsActive() const;
bool InOverlayMode() const;
void SetOpacity(float opacity);
void SetOpacityMaximizedToggle(bool enabled);
Window GetTrayXid() const;
int GetStoredDashWidth() const;
bool IsMouseInsideIndicator(nux::Point const& mouse_position) const;
ui::EdgeBarrierSubscriber::Result HandleBarrierEvent(ui::PointerBarrierWrapper::Ptr const& owner, ui::BarrierEvent::Ptr event) override;
protected:
void Draw(nux::GraphicsEngine& GfxContext, bool force_draw);
void DrawContent(nux::GraphicsEngine& GfxContext, bool force_draw);
void PreLayoutManagement();
// Introspectable methods
std::string GetName() const;
void AddProperties(debug::IntrospectionData&);
void OnObjectAdded(indicator::Indicator::Ptr const& proxy);
void OnObjectRemoved(indicator::Indicator::Ptr const& proxy);
void OnIndicatorViewUpdated();
void OnMenuPointerMoved(int x, int y);
void OnEntryActivated(std::string const& panel, std::string const& entry_id, nux::Rect const& geo);
void OnEntryShowMenu(std::string const& entry_id, unsigned xid, int x, int y, unsigned button);
private:
std::string GetPanelName() const;
void OnBackgroundUpdate(nux::Color const&);
void OnOverlayShown(GVariant *data);
void OnOverlayHidden(GVariant *data);
void OnSpreadInitiate();
void OnSpreadTerminate();
void EnableOverlayMode(bool);
bool ActivateFirstSensitive();
bool ActivateEntry(std::string const& entry_id);
void Resize();
bool IsTransparent();
void UpdateBackground();
void ForceUpdateBackground();
bool TrackMenuPointer();
void SyncGeometries();
void AddPanelView(PanelIndicatorsView* child, unsigned int stretchFactor);
MockableBaseWindow* parent_;
indicator::Indicators::Ptr remote_;
// No ownership is taken for these views, that is done by the AddChild method.
PanelMenuView* menu_view_;
PanelTray* tray_;
PanelIndicatorsView* indicators_;
nux::HLayout* layout_;
typedef std::unique_ptr PaintLayerPtr;
typedef nux::ObjectPtr BaseTexturePtr;
PaintLayerPtr bg_layer_;
PaintLayerPtr bg_darken_layer_;
BaseTexturePtr panel_sheen_;
BaseTexturePtr bg_refine_tex_;
std::unique_ptr bg_refine_layer_;
BaseTexturePtr bg_refine_single_column_tex_;
std::unique_ptr bg_refine_single_column_layer_;
std::string active_overlay_;
nux::Point tracked_pointer_pos_;
bool is_dirty_;
bool opacity_maximized_toggle_;
bool needs_geo_sync_;
bool overlay_is_open_;
float opacity_;
int monitor_;
int stored_dash_width_;
connection::Manager on_indicator_updated_connections_;
connection::Manager maximized_opacity_toggle_connections_;
BackgroundEffectHelper bg_effect_helper_;
nux::ObjectPtr bg_blur_texture_;
UBusManager ubus_manager_;
glib::Source::UniquePtr track_menu_pointer_timeout_;
};
} // namespace panel
} // namespace unity
#endif // PANEL_VIEW_H