blob: b7e9425155eef02939ca6d6cdb88885dd60760a5 [file] [log] [blame]
/* Copyright (C) 2015 The Android Open Source Project
**
** This software is licensed under the terms of the GNU General Public
** License version 2, as published by the Free Software Foundation, and
** may be copied, distributed, and modified under those terms.
**
** 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.
*/
#include <QPushButton>
#include "ui_battery.h"
#include "ui_tool-window.h"
#include "android/skin/qt/emulator-window.h"
#include "android/skin/qt/tool-window.h"
ToolWindow::ToolWindow(EmulatorWindow *window) :
QFrame(window),
emulator_window(window)
{
Q_INIT_RESOURCE(resources);
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
top_layout = new QBoxLayout(QBoxLayout::TopToBottom);
top_layout->setContentsMargins(0, 0, 0, 0);
setLayout(top_layout);
setStyleSheet(QString("* { background: #2c3239 }"));
title_bar = new TitleBarWidget(this);
top_layout->addWidget(title_bar);
QGridLayout *layout = new QGridLayout();
layout->setContentsMargins(10, 0, 10, 10);
layout->setAlignment(Qt::AlignHCenter);
int col = 0;
int row = 0;
addButton(layout, row++, col, ":/images/ic_power_settings_new_48px.svg", &EmulatorWindow::slot_power);
addButton(layout, row++, col, ":/images/ic_volume_up_48px.svg", &EmulatorWindow::slot_volumeUp);
addButton(layout, row++, col, ":/images/ic_volume_down_48px.svg", &EmulatorWindow::slot_volumeDown);
addButton(layout, row++, col, ":/images/ic_stay_current_portrait_48px.svg", &EmulatorWindow::slot_rotate);
addButton(layout, row++, col, ":/images/ic_zoom_in_24px.svg", &EmulatorWindow::slot_zoom);
addButton(layout, row++, col, ":/images/ic_fullscreen_48px.svg", &EmulatorWindow::slot_fullscreen);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_camera_enhance_48px.svg", &EmulatorWindow::slot_screenshot);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_hangout_video_48px.svg", &EmulatorWindow::slot_screenrecord);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_arrow_back_48px.svg", &EmulatorWindow::slot_back);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_panorama_fish_eye_48px.svg", &EmulatorWindow::slot_home);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_crop_square_48px.svg", &EmulatorWindow::slot_recents);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_menu_48px.svg", &EmulatorWindow::slot_menu);
col++;
row = 0;
expanded_buttons << addButton(layout, row++, col, ":/images/ic_mic_48px.svg", &EmulatorWindow::slot_voice);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_sd_card_48px.svg", &EmulatorWindow::slot_sdcard);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_location_on_48px.svg", &EmulatorWindow::slot_gps);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_signal_cellular_4_bar_48px.svg", &EmulatorWindow::slot_cellular);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_battery_std_48px.svg", &EmulatorWindow::slot_battery);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_photo_camera_48px.svg", &EmulatorWindow::slot_camera);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_call_48px.svg", &EmulatorWindow::slot_phone);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_filter_tilt_shift_48px.svg", &EmulatorWindow::slot_sensors);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_keyboard_arrow_left_48px.svg", &EmulatorWindow::slot_left);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_keyboard_arrow_down_48px.svg", &EmulatorWindow::slot_down);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_keyboard_arrow_up_48px.svg", &EmulatorWindow::slot_up);
expanded_buttons << addButton(layout, row++, col, ":/images/ic_keyboard_arrow_right_48px.svg", &EmulatorWindow::slot_right);
button_area = new QWidget();
button_area->setLayout(layout);
top_layout->addWidget(button_area);
setExpandedState(false);
}
QToolButton *ToolWindow::addButton(QGridLayout *layout, int row, int col, const char *iconPath, EmulatorWindowSlot slot)
{
QToolButton *button = new QToolButton();
button->setAutoRaise(true);
button->setIcon(QIcon(iconPath));
QObject::connect(button, &QPushButton::clicked, emulator_window, slot);
layout->addWidget(button, row, col);
layout->setAlignment(button, Qt::AlignHCenter);
return button;
}
void ToolWindow::setExpandedState(bool exp)
{
for (int i = 0; i < expanded_buttons.size(); i++) {
if (exp) {
expanded_buttons.at(i)->show();
} else {
expanded_buttons.at(i)->hide();
}
}
title_bar->setExpandedState(exp);
expanded = exp;
}
void ToolWindow::show()
{
move(emulator_window->geometry().right() + 10, emulator_window->geometry().top() + 10);
QFrame::show();
setFixedSize(size());
title_bar->setFixedSize(title_bar->size());
}
void ToolWindow::slot_toggleExpand()
{
setUpdatesEnabled(false);
top_layout->setEnabled(false);
setExpandedState(!expanded);
setUpdatesEnabled(true);
top_layout->setEnabled(true);
button_area->updateGeometry();
top_layout->activate();
setFixedSize(minimumSize());
}
TitleBarWidget::TitleBarWidget(ToolWindow *window) :
QWidget(window), collapsed_icon(":/images/ic_unfold_more_48px.svg"), expanded_icon(":/images/ic_unfold_less_48px.svg"), tool_window(window)
{
QBoxLayout *layout = new QBoxLayout(QBoxLayout::LeftToRight);
layout->setContentsMargins(4, 4, 20, 4);
layout->setAlignment(Qt::AlignLeft);
setLayout(layout);
addButton(layout, ":/images/ic_close_48px.svg", (ToolWindowSlot)&ToolWindow::close);
layout->addSpacing(3);
expand_button = addButton(layout, NULL, (ToolWindowSlot)&ToolWindow::slot_toggleExpand);
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
}
QToolButton *TitleBarWidget::addButton(QBoxLayout *layout, const char *iconPath, ToolWindowSlot slot)
{
QToolButton *button = new QToolButton();
button->setAutoRaise(true);
if (iconPath) button->setIcon(QIcon(iconPath));
button->setMaximumSize(QSize(15, 15));
button->setMinimumSize(button->maximumSize());
button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
QObject::connect(button, &QPushButton::clicked, tool_window, slot);
layout->addWidget(button);
layout->setAlignment(button, Qt::AlignLeft);
return button;
}
void TitleBarWidget::mouseMoveEvent(QMouseEvent *event)
{
tool_window->move(event->globalPos() - drag_offset);
}
void TitleBarWidget::mousePressEvent(QMouseEvent *event)
{
drag_offset = event->globalPos() - tool_window->pos();
}
void TitleBarWidget::setExpandedState(bool state)
{
expand_button->setIcon(state ? expanded_icon : collapsed_icon);
}