Save geometry, tabbar and playlist on exit only, fix loading tabs in
correct order
This commit is contained in:
@@ -255,22 +255,22 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||||||
StyleHelper::setBaseColor(palette().color(QPalette::Highlight).darker());
|
StyleHelper::setBaseColor(palette().color(QPalette::Highlight).darker());
|
||||||
|
|
||||||
// Add tabs to the fancy tab widget
|
// Add tabs to the fancy tab widget
|
||||||
ui_->tabs->addTab(context_view_, IconLoader::Load("strawberry"), tr("Context"));
|
ui_->tabs->AddTab(context_view_, "context", IconLoader::Load("strawberry"), tr("Context"));
|
||||||
ui_->tabs->addTab(collection_view_, IconLoader::Load("vinyl"), tr("Collection"));
|
ui_->tabs->AddTab(collection_view_, "collection", IconLoader::Load("vinyl"), tr("Collection"));
|
||||||
ui_->tabs->addTab(file_view_, IconLoader::Load("document-open"), tr("Files"));
|
ui_->tabs->AddTab(file_view_, "files", IconLoader::Load("document-open"), tr("Files"));
|
||||||
ui_->tabs->addTab(playlist_list_, IconLoader::Load("view-media-playlist"), tr("Playlists"));
|
ui_->tabs->AddTab(playlist_list_, "playlists", IconLoader::Load("view-media-playlist"), tr("Playlists"));
|
||||||
ui_->tabs->addTab(queue_view_, IconLoader::Load("footsteps"), tr("Queue"));
|
ui_->tabs->AddTab(queue_view_, "queue", IconLoader::Load("footsteps"), tr("Queue"));
|
||||||
#ifndef Q_OS_WIN
|
#ifndef Q_OS_WIN
|
||||||
ui_->tabs->addTab(device_view_, IconLoader::Load("device"), tr("Devices"));
|
ui_->tabs->AddTab(device_view_, "devices", IconLoader::Load("device"), tr("Devices"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_TIDAL
|
#ifdef HAVE_TIDAL
|
||||||
ui_->tabs->addTab(tidal_search_view_, IconLoader::Load("tidal"), tr("Tidal"));
|
ui_->tabs->AddTab(tidal_search_view_, "tidal", IconLoader::Load("tidal"), tr("Tidal"));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Add the playing widget to the fancy tab widget
|
// Add the playing widget to the fancy tab widget
|
||||||
ui_->tabs->addBottomWidget(ui_->widget_playing);
|
ui_->tabs->addBottomWidget(ui_->widget_playing);
|
||||||
//ui_->tabs->SetBackgroundPixmap(QPixmap(":/pictures/strawberry-background.png"));
|
//ui_->tabs->SetBackgroundPixmap(QPixmap(":/pictures/strawberry-background.png"));
|
||||||
ui_->tabs->loadSettings(kSettingsGroup);
|
ui_->tabs->Load(kSettingsGroup);
|
||||||
|
|
||||||
track_position_timer_->setInterval(kTrackPositionUpdateTimeMs);
|
track_position_timer_->setInterval(kTrackPositionUpdateTimeMs);
|
||||||
connect(track_position_timer_, SIGNAL(timeout()), SLOT(UpdateTrackPosition()));
|
connect(track_position_timer_, SIGNAL(timeout()), SLOT(UpdateTrackPosition()));
|
||||||
@@ -656,9 +656,7 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Fancy tabs
|
// Fancy tabs
|
||||||
connect(ui_->tabs, SIGNAL(ModeChanged(FancyTabWidget::Mode)), SLOT(SaveTabMode()));
|
|
||||||
connect(ui_->tabs, SIGNAL(CurrentChanged(int)), SLOT(TabSwitched()));
|
connect(ui_->tabs, SIGNAL(CurrentChanged(int)), SLOT(TabSwitched()));
|
||||||
connect(ui_->tabs, SIGNAL(CurrentChanged(int)), SLOT(SaveGeometry()));
|
|
||||||
|
|
||||||
// Context
|
// Context
|
||||||
connect(app_->playlist_manager(), SIGNAL(CurrentSongChanged(Song)), context_view_, SLOT(SongChanged(Song)));
|
connect(app_->playlist_manager(), SIGNAL(CurrentSongChanged(Song)), context_view_, SLOT(SongChanged(Song)));
|
||||||
@@ -744,6 +742,7 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||||||
FancyTabWidget::Mode tab_mode = FancyTabWidget::Mode(tab_mode_int);
|
FancyTabWidget::Mode tab_mode = FancyTabWidget::Mode(tab_mode_int);
|
||||||
if (tab_mode == FancyTabWidget::Mode_None) tab_mode = default_mode;
|
if (tab_mode == FancyTabWidget::Mode_None) tab_mode = default_mode;
|
||||||
ui_->tabs->SetMode(tab_mode);
|
ui_->tabs->SetMode(tab_mode);
|
||||||
|
|
||||||
file_view_->SetPath(settings_.value("file_path", QDir::homePath()).toString());
|
file_view_->SetPath(settings_.value("file_path", QDir::homePath()).toString());
|
||||||
|
|
||||||
TabSwitched();
|
TabSwitched();
|
||||||
@@ -808,7 +807,6 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow() {
|
MainWindow::~MainWindow() {
|
||||||
SaveGeometry();
|
|
||||||
delete ui_;
|
delete ui_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -857,9 +855,9 @@ void MainWindow::ReloadSettings() {
|
|||||||
bool enable_tidal = settings.value("enabled", false).toBool();
|
bool enable_tidal = settings.value("enabled", false).toBool();
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
if (enable_tidal)
|
if (enable_tidal)
|
||||||
ui_->tabs->addTab(tidal_search_view_, IconLoader::Load("tidal"), tr("Tidal"));
|
ui_->tabs->EnableTab(tidal_search_view_);
|
||||||
else
|
else
|
||||||
ui_->tabs->delTab("Tidal");
|
ui_->tabs->DisableTab(tidal_search_view_);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1004,16 +1002,6 @@ void MainWindow::TrackSkipped(PlaylistItemPtr item) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::changeEvent(QEvent *event) {
|
|
||||||
if (!initialised_) return;
|
|
||||||
SaveGeometry();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::resizeEvent(QResizeEvent *event) {
|
|
||||||
if (!initialised_) return;
|
|
||||||
SaveGeometry();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::TabSwitched() {
|
void MainWindow::TabSwitched() {
|
||||||
|
|
||||||
if (playing_widget_ && ui_->tabs->tabBar()->tabData(ui_->tabs->currentIndex()).toString().toLower() != "context") {
|
if (playing_widget_ && ui_->tabs->tabBar()->tabData(ui_->tabs->currentIndex()).toString().toLower() != "context") {
|
||||||
@@ -1023,11 +1011,6 @@ void MainWindow::TabSwitched() {
|
|||||||
ui_->widget_playing->SetDisabled();
|
ui_->widget_playing->SetDisabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!initialised_) return;
|
|
||||||
|
|
||||||
settings_.setValue("current_tab", ui_->tabs->currentIndex());
|
|
||||||
ui_->tabs->saveSettings(kSettingsGroup);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::SaveGeometry() {
|
void MainWindow::SaveGeometry() {
|
||||||
@@ -1039,16 +1022,9 @@ void MainWindow::SaveGeometry() {
|
|||||||
if (was_maximized_) settings_.remove("geometry");
|
if (was_maximized_) settings_.remove("geometry");
|
||||||
else settings_.setValue("geometry", saveGeometry());
|
else settings_.setValue("geometry", saveGeometry());
|
||||||
settings_.setValue("splitter_state", ui_->splitter->saveState());
|
settings_.setValue("splitter_state", ui_->splitter->saveState());
|
||||||
ui_->tabs->saveSettings(kSettingsGroup);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::SaveTabMode() {
|
|
||||||
if (!initialised_) return;
|
|
||||||
settings_.setValue("tab_mode", ui_->tabs->mode());
|
|
||||||
ui_->tabs->saveSettings(kSettingsGroup);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::SavePlaybackStatus() {
|
void MainWindow::SavePlaybackStatus() {
|
||||||
|
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
@@ -2223,6 +2199,9 @@ void MainWindow::Exit() {
|
|||||||
|
|
||||||
SaveGeometry();
|
SaveGeometry();
|
||||||
SavePlaybackStatus();
|
SavePlaybackStatus();
|
||||||
|
ui_->tabs->SaveSettings(kSettingsGroup);
|
||||||
|
ui_->playlist->view()->SaveSettings();
|
||||||
|
ui_->playlist->view()->SaveGeometry();
|
||||||
app_->scrobbler()->WriteCache();
|
app_->scrobbler()->WriteCache();
|
||||||
|
|
||||||
if (app_->player()->engine()->is_fadeout_enabled()) {
|
if (app_->player()->engine()->is_fadeout_enabled()) {
|
||||||
@@ -2311,10 +2290,6 @@ void MainWindow::HandleNotificationPreview(OSD::Behaviour type, QString line1, Q
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::FocusCollectionTab() {
|
|
||||||
ui_->tabs->setCurrentWidget(collection_view_);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::ShowConsole() {
|
void MainWindow::ShowConsole() {
|
||||||
Console *console = new Console(app_, this);
|
Console *console = new Console(app_, this);
|
||||||
console->show();
|
console->show();
|
||||||
|
|||||||
@@ -115,8 +115,6 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void keyPressEvent(QKeyEvent *event);
|
void keyPressEvent(QKeyEvent *event);
|
||||||
void changeEvent(QEvent *event);
|
|
||||||
void resizeEvent(QResizeEvent *event);
|
|
||||||
void closeEvent(QCloseEvent *event);
|
void closeEvent(QCloseEvent *event);
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
@@ -232,7 +230,6 @@ signals:
|
|||||||
|
|
||||||
void TabSwitched();
|
void TabSwitched();
|
||||||
void SaveGeometry();
|
void SaveGeometry();
|
||||||
void SaveTabMode();
|
|
||||||
void SavePlaybackStatus();
|
void SavePlaybackStatus();
|
||||||
void LoadPlaybackStatus();
|
void LoadPlaybackStatus();
|
||||||
void ResumePlayback();
|
void ResumePlayback();
|
||||||
@@ -242,7 +239,6 @@ signals:
|
|||||||
void Exit();
|
void Exit();
|
||||||
|
|
||||||
void HandleNotificationPreview(OSD::Behaviour type, QString line1, QString line2);
|
void HandleNotificationPreview(OSD::Behaviour type, QString line1, QString line2);
|
||||||
void FocusCollectionTab();
|
|
||||||
|
|
||||||
void ShowConsole();
|
void ShowConsole();
|
||||||
|
|
||||||
|
|||||||
@@ -143,7 +143,6 @@ PlaylistView::PlaylistView(QWidget *parent)
|
|||||||
background_initialized_(false),
|
background_initialized_(false),
|
||||||
setting_initial_header_layout_(false),
|
setting_initial_header_layout_(false),
|
||||||
read_only_settings_(true),
|
read_only_settings_(true),
|
||||||
header_loaded_(false),
|
|
||||||
previous_background_image_opacity_(0.0),
|
previous_background_image_opacity_(0.0),
|
||||||
fade_animation_(new QTimeLine(1000, this)),
|
fade_animation_(new QTimeLine(1000, this)),
|
||||||
force_background_redraw_(false),
|
force_background_redraw_(false),
|
||||||
@@ -171,11 +170,6 @@ PlaylistView::PlaylistView(QWidget *parent)
|
|||||||
setStyle(style_);
|
setStyle(style_);
|
||||||
setMouseTracking(true);
|
setMouseTracking(true);
|
||||||
|
|
||||||
connect(header_, SIGNAL(sectionResized(int,int,int)), SLOT(SaveGeometry()));
|
|
||||||
connect(header_, SIGNAL(sectionMoved(int,int,int)), SLOT(SaveGeometry()));
|
|
||||||
connect(header_, SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)), SLOT(SaveGeometry()));
|
|
||||||
connect(header_, SIGNAL(SectionVisibilityChanged(int,bool)), SLOT(SaveGeometry()));
|
|
||||||
|
|
||||||
connect(header_, SIGNAL(sectionResized(int,int,int)), SLOT(InvalidateCachedCurrentPixmap()));
|
connect(header_, SIGNAL(sectionResized(int,int,int)), SLOT(InvalidateCachedCurrentPixmap()));
|
||||||
connect(header_, SIGNAL(sectionMoved(int,int,int)), SLOT(InvalidateCachedCurrentPixmap()));
|
connect(header_, SIGNAL(sectionMoved(int,int,int)), SLOT(InvalidateCachedCurrentPixmap()));
|
||||||
connect(header_, SIGNAL(SectionVisibilityChanged(int,bool)), SLOT(InvalidateCachedCurrentPixmap()));
|
connect(header_, SIGNAL(SectionVisibilityChanged(int,bool)), SLOT(InvalidateCachedCurrentPixmap()));
|
||||||
@@ -205,7 +199,6 @@ PlaylistView::PlaylistView(QWidget *parent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
PlaylistView::~PlaylistView() {
|
PlaylistView::~PlaylistView() {
|
||||||
SaveGeometry();
|
|
||||||
delete style_;
|
delete style_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,10 +287,11 @@ void PlaylistView::setModel(QAbstractItemModel *m) {
|
|||||||
|
|
||||||
void PlaylistView::LoadGeometry() {
|
void PlaylistView::LoadGeometry() {
|
||||||
|
|
||||||
QSettings settings;
|
QSettings s;
|
||||||
settings.beginGroup(Playlist::kSettingsGroup);
|
s.beginGroup(Playlist::kSettingsGroup);
|
||||||
|
QByteArray state(s.value("state").toByteArray());
|
||||||
|
s.endGroup();
|
||||||
|
|
||||||
QByteArray state(settings.value("state").toByteArray());
|
|
||||||
if (!header_->RestoreState(state)) {
|
if (!header_->RestoreState(state)) {
|
||||||
// Maybe we're upgrading from a version that persisted the state with QHeaderView.
|
// Maybe we're upgrading from a version that persisted the state with QHeaderView.
|
||||||
if (!header_->restoreState(state)) {
|
if (!header_->restoreState(state)) {
|
||||||
@@ -340,8 +334,6 @@ void PlaylistView::LoadGeometry() {
|
|||||||
header_->ShowSection(Playlist::Column_Title);
|
header_->ShowSection(Playlist::Column_Title);
|
||||||
}
|
}
|
||||||
|
|
||||||
header_loaded_ = true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlaylistView::SaveGeometry() {
|
void PlaylistView::SaveGeometry() {
|
||||||
@@ -1117,7 +1109,6 @@ void PlaylistView::StretchChanged(bool stretch) {
|
|||||||
|
|
||||||
if (!initialized_) return;
|
if (!initialized_) return;
|
||||||
setHorizontalScrollBarPolicy(stretch ? Qt::ScrollBarAlwaysOff : Qt::ScrollBarAsNeeded);
|
setHorizontalScrollBarPolicy(stretch ? Qt::ScrollBarAlwaysOff : Qt::ScrollBarAsNeeded);
|
||||||
SaveGeometry();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1298,15 +1289,14 @@ void PlaylistView::ResetColumns() {
|
|||||||
|
|
||||||
read_only_settings_ = true;
|
read_only_settings_ = true;
|
||||||
setting_initial_header_layout_ = true;
|
setting_initial_header_layout_ = true;
|
||||||
QSettings settings;
|
QSettings s;
|
||||||
settings.beginGroup(Playlist::kSettingsGroup);
|
s.beginGroup(Playlist::kSettingsGroup);
|
||||||
settings.remove("state");
|
s.remove("state");
|
||||||
settings.endGroup();
|
s.endGroup();
|
||||||
ReloadSettings();
|
ReloadSettings();
|
||||||
LoadGeometry();
|
LoadGeometry();
|
||||||
ReloadSettings();
|
ReloadSettings();
|
||||||
read_only_settings_ = false;
|
read_only_settings_ = false;
|
||||||
SaveGeometry();
|
|
||||||
SetPlaylist(playlist_);
|
SetPlaylist(playlist_);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,9 +113,11 @@ class PlaylistView : public QTreeView {
|
|||||||
void setModel(QAbstractItemModel *model);
|
void setModel(QAbstractItemModel *model);
|
||||||
|
|
||||||
void ResetColumns();
|
void ResetColumns();
|
||||||
|
void SaveGeometry();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void ReloadSettings();
|
void ReloadSettings();
|
||||||
|
void SaveSettings();
|
||||||
void StopGlowing();
|
void StopGlowing();
|
||||||
void StartGlowing();
|
void StartGlowing();
|
||||||
void JumpToCurrentlyPlayingTrack();
|
void JumpToCurrentlyPlayingTrack();
|
||||||
@@ -164,14 +166,12 @@ class PlaylistView : public QTreeView {
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void LoadGeometry();
|
void LoadGeometry();
|
||||||
void SaveGeometry();
|
|
||||||
void GlowIntensityChanged();
|
void GlowIntensityChanged();
|
||||||
void InhibitAutoscrollTimeout();
|
void InhibitAutoscrollTimeout();
|
||||||
void MaybeAutoscroll();
|
void MaybeAutoscroll();
|
||||||
void InvalidateCachedCurrentPixmap();
|
void InvalidateCachedCurrentPixmap();
|
||||||
void PlaylistDestroyed();
|
void PlaylistDestroyed();
|
||||||
|
|
||||||
void SaveSettings();
|
|
||||||
void StretchChanged(bool stretch);
|
void StretchChanged(bool stretch);
|
||||||
|
|
||||||
void FadePreviousBackgroundImage(qreal value);
|
void FadePreviousBackgroundImage(qreal value);
|
||||||
@@ -217,7 +217,6 @@ class PlaylistView : public QTreeView {
|
|||||||
bool background_initialized_;
|
bool background_initialized_;
|
||||||
bool setting_initial_header_layout_;
|
bool setting_initial_header_layout_;
|
||||||
bool read_only_settings_;
|
bool read_only_settings_;
|
||||||
bool header_loaded_;
|
|
||||||
|
|
||||||
QImage background_image_;
|
QImage background_image_;
|
||||||
QImage current_song_cover_art_;
|
QImage current_song_cover_art_;
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
#include <QTabBar>
|
#include <QTabBar>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
@@ -283,18 +284,62 @@ class FancyTabBar: public QTabBar {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TabData : public QObject {
|
||||||
|
|
||||||
|
public:
|
||||||
|
TabData(QWidget *widget_view, const QString name, const QIcon icon, const QString label, const bool enabled, QWidget *parent) :
|
||||||
|
QObject(parent),
|
||||||
|
widget_view_(widget_view),
|
||||||
|
name_(name), icon_(icon),
|
||||||
|
label_(label),
|
||||||
|
page_(new QWidget()),
|
||||||
|
enabled_(enabled) {
|
||||||
|
// In order to achieve the same effect as the "Bottom Widget" of the old Nokia based FancyTabWidget a VBoxLayout is used on each page
|
||||||
|
QVBoxLayout *layout = new QVBoxLayout(page_);
|
||||||
|
layout->setSpacing(0);
|
||||||
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
layout->addWidget(widget_view_);
|
||||||
|
page_->setLayout(layout);
|
||||||
|
}
|
||||||
|
~TabData() {
|
||||||
|
//delete page_;
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *widget_view() { return widget_view_; }
|
||||||
|
QString name() { return name_; }
|
||||||
|
QIcon icon() { return icon_; }
|
||||||
|
QString label() { return label_; }
|
||||||
|
QWidget *page() { return page_; }
|
||||||
|
bool enabled() { return enabled_; }
|
||||||
|
|
||||||
|
void set_enabled(bool enabled) { enabled_ = enabled; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
QWidget *widget_view_;
|
||||||
|
QString name_;
|
||||||
|
QIcon icon_;
|
||||||
|
QString label_;
|
||||||
|
QWidget *page_;
|
||||||
|
bool enabled_;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
FancyTabWidget::~FancyTabWidget() {}
|
||||||
|
|
||||||
// Spacers are just disabled pages
|
// Spacers are just disabled pages
|
||||||
void FancyTabWidget::addSpacer() {
|
void FancyTabWidget::addSpacer() {
|
||||||
|
|
||||||
QWidget *spacer = new QWidget(this);
|
QWidget *spacer = new QWidget(this);
|
||||||
const int index = addTab(spacer, QIcon(), QString());
|
const int index = insertTab(count(), spacer, QIcon(), QString());
|
||||||
setTabEnabled(index, false);
|
setTabEnabled(index, false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FancyTabWidget::setBackgroundPixmap(const QPixmap& pixmap) {
|
void FancyTabWidget::setBackgroundPixmap(const QPixmap& pixmap) {
|
||||||
|
|
||||||
background_pixmap_ = pixmap;
|
background_pixmap_ = pixmap;
|
||||||
update();
|
update();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FancyTabWidget::setCurrentIndex(int index) {
|
void FancyTabWidget::setCurrentIndex(int index) {
|
||||||
@@ -332,80 +377,85 @@ FancyTabWidget::FancyTabWidget(QWidget* parent) : QTabWidget(parent),
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FancyTabWidget::loadSettings(const char *kSettingsGroup) {
|
void FancyTabWidget::Load(const QString &kSettingsGroup) {
|
||||||
|
|
||||||
QSettings settings;
|
QSettings s;
|
||||||
settings.beginGroup(kSettingsGroup);
|
s.beginGroup(kSettingsGroup);
|
||||||
|
QMap <int, TabData*> tabs;
|
||||||
for (int i = 0 ; i < count() ; i++) {
|
for (TabData *tab : tabs_) {
|
||||||
QString k = "tab_" + tabBar()->tabData(i).toString().toLower();
|
const int idx = s.value("tab_" + tab->name(), tabs_.count()).toInt();
|
||||||
int index = settings.value(k, i).toInt();
|
tabs.insert(idx, tab);
|
||||||
if (index >= 0) {
|
|
||||||
tabBar()->moveTab(i, index);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
s.endGroup();
|
||||||
|
|
||||||
settings.endGroup();
|
QMap <int, TabData*> ::iterator i;
|
||||||
|
for (i = tabs.begin() ; i != tabs.end() ; ++i) {
|
||||||
|
TabData *tab = i.value();
|
||||||
|
const int actualIndex = insertTab(i.key(), tab->page(), tab->icon(), tab->label());
|
||||||
|
tabBar()->setTabData(actualIndex, QVariant(tab->name()));
|
||||||
|
tab->set_enabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FancyTabWidget::saveSettings(const char *kSettingsGroup) {
|
int FancyTabWidget::insertTab(int index, QWidget *page, const QIcon &icon, const QString &label) {
|
||||||
|
return QTabWidget::insertTab(index, page, icon, label);
|
||||||
|
}
|
||||||
|
|
||||||
QSettings settings;
|
void FancyTabWidget::SaveSettings(const QString &kSettingsGroup) {
|
||||||
settings.beginGroup(kSettingsGroup);
|
|
||||||
|
QSettings s;
|
||||||
|
s.beginGroup(kSettingsGroup);
|
||||||
|
|
||||||
|
s.setValue("tab_mode", mode_);
|
||||||
|
s.setValue("current_tab", currentIndex());
|
||||||
|
|
||||||
for (int i = 0 ; i < count() ; i++) {
|
for (int i = 0 ; i < count() ; i++) {
|
||||||
QString k = "tab_" + tabBar()->tabData(i).toString().toLower();
|
QString k = "tab_" + tabBar()->tabData(i).toString().toLower();
|
||||||
settings.setValue(k, i);
|
s.setValue(k, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.endGroup();
|
s.endGroup();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FancyTabWidget::addBottomWidget(QWidget* widget_view) {
|
void FancyTabWidget::addBottomWidget(QWidget *widget_view) {
|
||||||
bottom_widget_ = widget_view;
|
bottom_widget_ = widget_view;
|
||||||
}
|
}
|
||||||
|
|
||||||
int FancyTabWidget::addTab(QWidget *widget_view, const QIcon &icon, const QString &label) {
|
void FancyTabWidget::AddTab(QWidget *widget_view, const QString &name, const QIcon &icon, const QString &label) {
|
||||||
return insertTab(count(), widget_view, icon, label);
|
|
||||||
}
|
|
||||||
|
|
||||||
int FancyTabWidget::insertTab(int index, QWidget *widget_view, const QIcon &icon, const QString &label) {
|
TabData *tab = new TabData(widget_view, name, icon, label, false, this);
|
||||||
|
tabs_.insert(widget_view, tab);
|
||||||
QWidget *page(nullptr);
|
|
||||||
if (tabs_.contains(label)) page = tabs_.value(label);
|
|
||||||
else {
|
|
||||||
page = new QWidget(this);
|
|
||||||
// In order to achieve the same effect as the "Bottom Widget" of the old Nokia based FancyTabWidget a VBoxLayout is used on each page
|
|
||||||
QVBoxLayout *layout = new QVBoxLayout(this);
|
|
||||||
layout->setSpacing(0);
|
|
||||||
layout->setContentsMargins(0, 0, 0, 0);
|
|
||||||
layout->addWidget(widget_view);
|
|
||||||
page->setLayout(layout);
|
|
||||||
tabs_.insert(label, page);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0 ; i < count() ; i++) {
|
|
||||||
QString l = tabBar()->tabData(i).toString();
|
|
||||||
if (l == label) return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int actualIndex = QTabWidget::insertTab(index, page, icon, label);
|
|
||||||
tabBar()->setTabData(actualIndex, QVariant(label));
|
|
||||||
return actualIndex;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FancyTabWidget::delTab(const QString &label) {
|
bool FancyTabWidget::EnableTab(QWidget *widget_view) {
|
||||||
|
|
||||||
|
if (!tabs_.contains(widget_view)) return false;
|
||||||
|
TabData *tab = tabs_.value(widget_view);
|
||||||
|
if (tab->enabled()) return true;
|
||||||
|
const int actualIndex = QTabWidget::insertTab(count(), tab->page(), tab->icon(), tab->label());
|
||||||
|
tabBar()->setTabData(actualIndex, QVariant(tab->name()));
|
||||||
|
tab->set_enabled(true);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FancyTabWidget::DisableTab(QWidget *widget_view) {
|
||||||
|
|
||||||
|
if (!tabs_.contains(widget_view)) return false;
|
||||||
|
TabData *tab = tabs_.value(widget_view);
|
||||||
|
|
||||||
for (int i = 0 ; i < count() ; i++) {
|
for (int i = 0 ; i < count() ; i++) {
|
||||||
QString l = tabBar()->tabData(i).toString();
|
if (tabBar()->tabData(i).toString() == tab->name()) {
|
||||||
if (l == label) {
|
|
||||||
removeTab(i);
|
removeTab(i);
|
||||||
break;
|
tab->set_enabled(false);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,28 +30,35 @@
|
|||||||
#include <QActionGroup>
|
#include <QActionGroup>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QSignalMapper>
|
#include <QSignalMapper>
|
||||||
|
#include <QString>
|
||||||
|
#include <QIcon>
|
||||||
#include <QPixmap>
|
#include <QPixmap>
|
||||||
#include <QSize>
|
#include <QSize>
|
||||||
#include <QtEvents>
|
#include <QtEvents>
|
||||||
|
|
||||||
|
class TabData;
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
class FancyTabWidget : public QTabWidget {
|
class FancyTabWidget : public QTabWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
~FancyTabWidget();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FancyTabWidget(QWidget* parent = 0);
|
FancyTabWidget(QWidget* parent = 0);
|
||||||
int addTab(QWidget *widget_view, const QIcon &icon, const QString &label);
|
void AddTab(QWidget *widget_view, const QString &name, const QIcon &icon, const QString &label);
|
||||||
void delTab(const QString &label);
|
bool EnableTab(QWidget *widget_view);
|
||||||
int insertTab(int index, QWidget *widget_view, const QIcon &icon, const QString &label);
|
bool DisableTab(QWidget *widget_view);
|
||||||
|
int insertTab(int index, QWidget *page, const QIcon &icon, const QString &label);
|
||||||
void addBottomWidget(QWidget* widget_view);
|
void addBottomWidget(QWidget* widget_view);
|
||||||
|
|
||||||
void setBackgroundPixmap(const QPixmap& pixmap);
|
void setBackgroundPixmap(const QPixmap& pixmap);
|
||||||
void addSpacer();
|
void addSpacer();
|
||||||
|
|
||||||
void loadSettings(const char *);
|
void Load(const QString &kSettingsGroup);
|
||||||
void saveSettings(const char *);
|
void SaveSettings(const QString &kSettingsGroup);
|
||||||
|
|
||||||
// Values are persisted - only add to the end
|
// Values are persisted - only add to the end
|
||||||
enum Mode {
|
enum Mode {
|
||||||
@@ -95,7 +102,7 @@ class FancyTabWidget : public QTabWidget {
|
|||||||
Mode mode_;
|
Mode mode_;
|
||||||
QWidget *bottom_widget_;
|
QWidget *bottom_widget_;
|
||||||
|
|
||||||
QHash <QString, QWidget*> tabs_;
|
QMap <QWidget*, TabData*> tabs_;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user