Lazy-load some of MainWindow's dialogs
This commit is contained in:
parent
59e5de1468
commit
ba5fb9f552
@ -99,7 +99,7 @@ void LastFMService::ReloadSettings() {
|
||||
}
|
||||
|
||||
void LastFMService::ShowConfig() {
|
||||
model()->settings_dialog()->OpenAtPage(SettingsDialog::Page_Lastfm);
|
||||
emit OpenSettingsAtPage(SettingsDialog::Page_Lastfm);
|
||||
}
|
||||
|
||||
bool LastFMService::IsAuthenticated() const {
|
||||
|
@ -330,7 +330,7 @@ QUrl MagnatuneService::ModifyUrl(const QUrl& url) const {
|
||||
}
|
||||
|
||||
void MagnatuneService::ShowConfig() {
|
||||
model()->settings_dialog()->OpenAtPage(SettingsDialog::Page_Magnatune);
|
||||
emit OpenSettingsAtPage(SettingsDialog::Page_Magnatune);
|
||||
}
|
||||
|
||||
void MagnatuneService::Download() {
|
||||
|
@ -36,8 +36,7 @@ RadioModel::RadioModel(BackgroundThread<Database>* db_thread,
|
||||
db_thread_(db_thread),
|
||||
merged_model_(new MergedProxyModel(this)),
|
||||
network_(network),
|
||||
task_manager_(task_manager),
|
||||
settings_dialog_(NULL)
|
||||
task_manager_(task_manager)
|
||||
{
|
||||
Q_ASSERT(sServices.isEmpty());
|
||||
|
||||
@ -64,6 +63,7 @@ void RadioModel::AddService(RadioService *service) {
|
||||
connect(service, SIGNAL(AsyncLoadFinished(PlaylistItem::SpecialLoadResult)), SIGNAL(AsyncLoadFinished(PlaylistItem::SpecialLoadResult)));
|
||||
connect(service, SIGNAL(StreamError(QString)), SIGNAL(StreamError(QString)));
|
||||
connect(service, SIGNAL(StreamMetadataFound(QUrl,Song)), SIGNAL(StreamMetadataFound(QUrl,Song)));
|
||||
connect(service, SIGNAL(OpenSettingsAtPage(SettingsDialog::Page)), SIGNAL(OpenSettingsAtPage(SettingsDialog::Page)));
|
||||
connect(service, SIGNAL(AddItemToPlaylist(RadioItem*)), SIGNAL(AddItemToPlaylist(RadioItem*)));
|
||||
connect(service, SIGNAL(AddItemsToPlaylist(PlaylistItemList)), SIGNAL(AddItemsToPlaylist(PlaylistItemList)));
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "core/simpletreemodel.h"
|
||||
#include "core/song.h"
|
||||
#include "playlist/playlistitem.h"
|
||||
#include "ui/settingsdialog.h"
|
||||
#include "widgets/multiloadingindicator.h"
|
||||
|
||||
class Database;
|
||||
@ -46,9 +47,6 @@ class RadioModel : public SimpleTreeModel<RadioItem> {
|
||||
Role_Key,
|
||||
};
|
||||
|
||||
// Initialisation
|
||||
void SetSettingsDialog(SettingsDialog* settings_dialog) { settings_dialog_ = settings_dialog; }
|
||||
|
||||
// Needs to be static for RadioPlaylistItem::restore
|
||||
static RadioService* ServiceByName(const QString& name);
|
||||
|
||||
@ -77,12 +75,12 @@ class RadioModel : public SimpleTreeModel<RadioItem> {
|
||||
MergedProxyModel* merged_model() const { return merged_model_; }
|
||||
NetworkAccessManager* network() const { return network_; }
|
||||
TaskManager* task_manager() const { return task_manager_; }
|
||||
SettingsDialog* settings_dialog() const { return settings_dialog_; }
|
||||
|
||||
signals:
|
||||
void AsyncLoadFinished(const PlaylistItem::SpecialLoadResult& result);
|
||||
void StreamError(const QString& message);
|
||||
void StreamMetadataFound(const QUrl& original_url, const Song& song);
|
||||
void OpenSettingsAtPage(SettingsDialog::Page);
|
||||
|
||||
void AddItemToPlaylist(RadioItem* item);
|
||||
void AddItemsToPlaylist(const PlaylistItemList& items);
|
||||
@ -100,7 +98,6 @@ class RadioModel : public SimpleTreeModel<RadioItem> {
|
||||
MergedProxyModel* merged_model_;
|
||||
NetworkAccessManager* network_;
|
||||
TaskManager* task_manager_;
|
||||
SettingsDialog* settings_dialog_;
|
||||
};
|
||||
|
||||
#endif // RADIOMODEL_H
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "radioitem.h"
|
||||
#include "core/song.h"
|
||||
#include "playlist/playlistitem.h"
|
||||
#include "ui/settingsdialog.h"
|
||||
#include "widgets/multiloadingindicator.h"
|
||||
|
||||
class RadioModel;
|
||||
@ -65,6 +66,7 @@ class RadioService : public QObject {
|
||||
void AsyncLoadFinished(const PlaylistItem::SpecialLoadResult& result);
|
||||
void StreamError(const QString& message);
|
||||
void StreamMetadataFound(const QUrl& original_url, const Song& song);
|
||||
void OpenSettingsAtPage(SettingsDialog::Page page);
|
||||
|
||||
void AddItemToPlaylist(RadioItem* item);
|
||||
void AddItemsToPlaylist(const PlaylistItemList& items);
|
||||
|
@ -115,11 +115,10 @@ const char* MainWindow::kAllFilesFilterSpec =
|
||||
MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidget *parent)
|
||||
: QMainWindow(parent),
|
||||
ui_(new Ui_MainWindow),
|
||||
network_(network),
|
||||
tray_icon_(SystemTrayIcon::CreateSystemTrayIcon(this)),
|
||||
osd_(new OSD(tray_icon_, network, this)),
|
||||
edit_tag_dialog_(new EditTagDialog),
|
||||
task_manager_(new TaskManager(this)),
|
||||
about_dialog_(new About),
|
||||
database_(new BackgroundThreadImplementation<Database, Database>(this)),
|
||||
radio_model_(NULL),
|
||||
playlist_backend_(NULL),
|
||||
@ -130,12 +129,8 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
global_shortcuts_(new GlobalShortcuts(this)),
|
||||
devices_(NULL),
|
||||
settings_dialog_(NULL),
|
||||
add_stream_dialog_(new AddStreamDialog),
|
||||
cover_manager_(NULL),
|
||||
equalizer_(new Equalizer),
|
||||
#ifdef HAVE_GSTREAMER
|
||||
transcode_dialog_(new TranscodeDialog),
|
||||
#endif
|
||||
error_dialog_(new ErrorDialog),
|
||||
organise_dialog_(new OrganiseDialog(task_manager_)),
|
||||
queue_manager_(new QueueManager),
|
||||
@ -170,12 +165,6 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
qDebug() << t.restart() << "dbdeps: player";
|
||||
library_ = new Library(database_, task_manager_, this);
|
||||
qDebug() << t.restart() << "dbdeps: library";
|
||||
cover_manager_.reset(new AlbumCoverManager(network, library_->backend()));
|
||||
qDebug() << t.restart() << "dbdeps: covermanager";
|
||||
settings_dialog_.reset(new SettingsDialog); // Needs RadioModel
|
||||
qDebug() << t.restart() << "dbdeps: settings dialog";
|
||||
radio_model_->SetSettingsDialog(settings_dialog_.get());
|
||||
qDebug() << t.restart() << "dbdeps: radiomodel";
|
||||
devices_ = new DeviceManager(database_, task_manager_, this),
|
||||
qDebug() << t.restart() << "dbdeps: devices";
|
||||
|
||||
@ -201,7 +190,6 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
|
||||
#ifdef HAVE_GSTREAMER
|
||||
if (GstEngine* engine = qobject_cast<GstEngine*>(player_->GetEngine())) {
|
||||
settings_dialog_->SetGstEngine(engine);
|
||||
# ifdef ENABLE_VISUALISATIONS
|
||||
visualisation_->SetEngine(engine);
|
||||
# endif
|
||||
@ -225,7 +213,6 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
ui_->library_view->SetLibrary(library_->model());
|
||||
ui_->library_view->SetTaskManager(task_manager_);
|
||||
ui_->library_view->SetDeviceManager(devices_);
|
||||
settings_dialog_->SetLibraryDirectoryModel(library_->model()->directory_model());
|
||||
|
||||
ui_->radio_view->SetModel(radio_model_);
|
||||
|
||||
@ -234,8 +221,6 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
|
||||
organise_dialog_->SetDestinationModel(library_->model()->directory_model());
|
||||
|
||||
cover_manager_->Init();
|
||||
|
||||
qDebug() << t.restart() << "models";
|
||||
|
||||
// Icons
|
||||
@ -277,11 +262,6 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
connect(ui_->file_view, SIGNAL(MoveToLibrary(QList<QUrl>)), SLOT(MoveFilesToLibrary(QList<QUrl>)));
|
||||
ui_->file_view->SetTaskManager(task_manager_);
|
||||
|
||||
// Cover manager connections
|
||||
connect(cover_manager_.get(), SIGNAL(AddSongsToPlaylist(SongList)), SLOT(AddLibrarySongsToPlaylist(SongList)));
|
||||
connect(cover_manager_.get(), SIGNAL(LoadSongsToPlaylist(SongList)), SLOT(LoadLibrarySongsToPlaylist(SongList)));
|
||||
connect(cover_manager_.get(), SIGNAL(SongsDoubleClicked(SongList)), SLOT(LibrarySongsDoubleClicked(SongList)));
|
||||
|
||||
// Action connections
|
||||
connect(ui_->action_next_track, SIGNAL(triggered()), player_, SLOT(Next()));
|
||||
connect(ui_->action_previous_track, SIGNAL(triggered()), player_, SLOT(Previous()));
|
||||
@ -297,16 +277,16 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
connect(ui_->action_renumber_tracks, SIGNAL(triggered()), SLOT(RenumberTracks()));
|
||||
connect(ui_->action_selection_set_value, SIGNAL(triggered()), SLOT(SelectionSetValue()));
|
||||
connect(ui_->action_edit_value, SIGNAL(triggered()), SLOT(EditValue()));
|
||||
connect(ui_->action_configure, SIGNAL(triggered()), settings_dialog_.get(), SLOT(show()));
|
||||
connect(ui_->action_about, SIGNAL(triggered()), about_dialog_.get(), SLOT(show()));
|
||||
connect(ui_->action_configure, SIGNAL(triggered()), SLOT(OpenSettingsDialog()));
|
||||
connect(ui_->action_about, SIGNAL(triggered()), SLOT(ShowAboutDialog()));
|
||||
connect(ui_->action_shuffle, SIGNAL(triggered()), playlists_, SLOT(ShuffleCurrent()));
|
||||
connect(ui_->action_open_media, SIGNAL(triggered()), SLOT(AddFile()));
|
||||
connect(ui_->action_add_file, SIGNAL(triggered()), SLOT(AddFile()));
|
||||
connect(ui_->action_add_folder, SIGNAL(triggered()), SLOT(AddFolder()));
|
||||
connect(ui_->action_add_stream, SIGNAL(triggered()), SLOT(AddStream()));
|
||||
connect(ui_->action_cover_manager, SIGNAL(triggered()), cover_manager_.get(), SLOT(show()));
|
||||
connect(ui_->action_cover_manager, SIGNAL(triggered()), SLOT(ShowCoverManager()));
|
||||
connect(ui_->action_equalizer, SIGNAL(triggered()), equalizer_.get(), SLOT(show()));
|
||||
connect(ui_->action_transcode, SIGNAL(triggered()), transcode_dialog_.get(), SLOT(show()));
|
||||
connect(ui_->action_transcode, SIGNAL(triggered()), SLOT(ShowTranscodeDialog()));
|
||||
connect(ui_->action_jump, SIGNAL(triggered()), ui_->playlist->view(), SLOT(JumpToCurrentlyPlayingTrack()));
|
||||
connect(ui_->action_update_library, SIGNAL(triggered()), library_, SLOT(IncrementalScan()));
|
||||
connect(ui_->action_rain, SIGNAL(toggled(bool)), player_, SLOT(MakeItRain(bool)));
|
||||
@ -454,6 +434,7 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
connect(radio_model_, SIGNAL(StreamError(QString)), error_dialog_.get(), SLOT(ShowMessage(QString)));
|
||||
connect(radio_model_, SIGNAL(AsyncLoadFinished(PlaylistItem::SpecialLoadResult)), player_, SLOT(HandleSpecialLoad(PlaylistItem::SpecialLoadResult)));
|
||||
connect(radio_model_, SIGNAL(StreamMetadataFound(QUrl,Song)), playlists_, SLOT(SetActiveStreamMetadata(QUrl,Song)));
|
||||
connect(radio_model_, SIGNAL(OpenSettingsAtPage(SettingsDialog::Page)), SLOT(OpenSettingsDialogAtPage(SettingsDialog::Page)));
|
||||
connect(radio_model_, SIGNAL(AddItemToPlaylist(RadioItem*)), SLOT(InsertRadioItem(RadioItem*)));
|
||||
connect(radio_model_, SIGNAL(AddItemsToPlaylist(PlaylistItemList)), SLOT(InsertRadioItems(PlaylistItemList)));
|
||||
connect(radio_model_->GetLastFMService(), SIGNAL(ScrobblingEnabledChanged(bool)), SLOT(ScrobblingEnabledChanged(bool)));
|
||||
@ -464,11 +445,7 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
LastFMButtonVisibilityChanged(radio_model_->GetLastFMService()->AreButtonsVisible());
|
||||
|
||||
// Connections to the saved streams service
|
||||
SavedRadio* saved_radio = RadioModel::Service<SavedRadio>();
|
||||
add_stream_dialog_->set_add_on_accept(saved_radio);
|
||||
|
||||
connect(saved_radio, SIGNAL(ShowAddStreamDialog()),
|
||||
add_stream_dialog_.get(), SLOT(show()));
|
||||
connect(RadioModel::Service<SavedRadio>(), SIGNAL(ShowAddStreamDialog()), SLOT(AddStream()));
|
||||
|
||||
qDebug() << t.restart() << "more connections";
|
||||
|
||||
@ -521,22 +498,6 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
||||
connect(global_shortcuts_, SIGNAL(SeekBackward()), player_, SLOT(SeekBackward()));
|
||||
connect(global_shortcuts_, SIGNAL(ShowHide()), SLOT(ToggleShowHide()));
|
||||
connect(global_shortcuts_, SIGNAL(ShowOSD()), player_, SLOT(ShowOSD()));
|
||||
settings_dialog_->SetGlobalShortcutManager(global_shortcuts_);
|
||||
|
||||
// Settings
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), library_, SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), player_, SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), osd_, SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), ui_->library_view, SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), player_->GetEngine(), SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), ui_->playlist->view(), SLOT(ReloadSettings()));
|
||||
#ifdef ENABLE_WIIMOTEDEV
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), wiimotedev_shortcuts_, SLOT(ReloadSettings()));
|
||||
#endif
|
||||
|
||||
// Add stream dialog
|
||||
connect(add_stream_dialog_.get(), SIGNAL(accepted()), SLOT(AddStreamAccepted()));
|
||||
|
||||
// Analyzer
|
||||
ui_->analyzer->SetEngine(player_->GetEngine());
|
||||
@ -1140,6 +1101,7 @@ void MainWindow::EditTracks() {
|
||||
}
|
||||
}
|
||||
|
||||
EnsureEditTagDialogCreated();
|
||||
edit_tag_dialog_->SetSongs(songs);
|
||||
edit_tag_dialog_->SetTagCompleter(library_->model()->backend());
|
||||
|
||||
@ -1257,6 +1219,13 @@ void MainWindow::AddFolder() {
|
||||
}
|
||||
|
||||
void MainWindow::AddStream() {
|
||||
if (!add_stream_dialog_) {
|
||||
add_stream_dialog_.reset(new AddStreamDialog);
|
||||
connect(add_stream_dialog_.get(), SIGNAL(accepted()), SLOT(AddStreamAccepted()));
|
||||
|
||||
add_stream_dialog_->set_add_on_accept(RadioModel::Service<SavedRadio>());
|
||||
}
|
||||
|
||||
add_stream_dialog_->show();
|
||||
}
|
||||
|
||||
@ -1269,8 +1238,6 @@ void MainWindow::PlaylistRemoveCurrent() {
|
||||
ui_->playlist->view()->RemoveSelected();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void MainWindow::PlaylistEditFinished(const QModelIndex& index) {
|
||||
if (index == playlist_menu_index_)
|
||||
SelectionSetValue();
|
||||
@ -1377,6 +1344,7 @@ void MainWindow::PlaylistUndoRedoChanged(QAction *undo, QAction *redo) {
|
||||
}
|
||||
|
||||
void MainWindow::ShowLibraryConfig() {
|
||||
EnsureSettingsDialogCreated();
|
||||
settings_dialog_->OpenAtPage(SettingsDialog::Page_Library);
|
||||
}
|
||||
|
||||
@ -1466,3 +1434,79 @@ void MainWindow::PlaylistCopyToDevice() {
|
||||
organise_dialog_->SetCopy(true);
|
||||
organise_dialog_->show();
|
||||
}
|
||||
|
||||
void MainWindow::ShowCoverManager() {
|
||||
if (!cover_manager_) {
|
||||
cover_manager_.reset(new AlbumCoverManager(network_, library_->backend()));
|
||||
cover_manager_->Init();
|
||||
|
||||
// Cover manager connections
|
||||
connect(cover_manager_.get(), SIGNAL(AddSongsToPlaylist(SongList)), SLOT(AddLibrarySongsToPlaylist(SongList)));
|
||||
connect(cover_manager_.get(), SIGNAL(LoadSongsToPlaylist(SongList)), SLOT(LoadLibrarySongsToPlaylist(SongList)));
|
||||
connect(cover_manager_.get(), SIGNAL(SongsDoubleClicked(SongList)), SLOT(LibrarySongsDoubleClicked(SongList)));
|
||||
}
|
||||
|
||||
cover_manager_->show();
|
||||
}
|
||||
|
||||
void MainWindow::EnsureSettingsDialogCreated() {
|
||||
if (settings_dialog_)
|
||||
return;
|
||||
|
||||
settings_dialog_.reset(new SettingsDialog);
|
||||
settings_dialog_->SetLibraryDirectoryModel(library_->model()->directory_model());
|
||||
|
||||
#ifdef HAVE_GSTREAMER
|
||||
if (GstEngine* engine = qobject_cast<GstEngine*>(player_->GetEngine())) {
|
||||
settings_dialog_->SetGstEngine(engine);
|
||||
}
|
||||
#endif
|
||||
|
||||
settings_dialog_->SetGlobalShortcutManager(global_shortcuts_);
|
||||
|
||||
// Settings
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), library_, SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), player_, SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), osd_, SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), ui_->library_view, SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), player_->GetEngine(), SLOT(ReloadSettings()));
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), ui_->playlist->view(), SLOT(ReloadSettings()));
|
||||
#ifdef ENABLE_WIIMOTEDEV
|
||||
connect(settings_dialog_.get(), SIGNAL(accepted()), wiimotedev_shortcuts_, SLOT(ReloadSettings()));
|
||||
#endif
|
||||
}
|
||||
|
||||
void MainWindow::OpenSettingsDialog() {
|
||||
EnsureSettingsDialogCreated();
|
||||
settings_dialog_->show();
|
||||
}
|
||||
|
||||
void MainWindow::OpenSettingsDialogAtPage(SettingsDialog::Page page) {
|
||||
EnsureSettingsDialogCreated();
|
||||
settings_dialog_->OpenAtPage(page);
|
||||
}
|
||||
|
||||
void MainWindow::EnsureEditTagDialogCreated() {
|
||||
if (edit_tag_dialog_)
|
||||
return;
|
||||
|
||||
edit_tag_dialog_.reset(new EditTagDialog);
|
||||
}
|
||||
|
||||
void MainWindow::ShowAboutDialog() {
|
||||
if (!about_dialog_) {
|
||||
about_dialog_.reset(new About);
|
||||
}
|
||||
|
||||
about_dialog_->show();
|
||||
}
|
||||
|
||||
void MainWindow::ShowTranscodeDialog() {
|
||||
#ifdef HAVE_GSTREAMER
|
||||
if (!transcode_dialog_) {
|
||||
transcode_dialog_.reset(new TranscodeDialog);
|
||||
}
|
||||
transcode_dialog_->show();
|
||||
#endif
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "engines/engine_fwd.h"
|
||||
#include "library/librarymodel.h"
|
||||
#include "playlist/playlistitem.h"
|
||||
#include "ui/settingsdialog.h"
|
||||
|
||||
class About;
|
||||
class AddStreamDialog;
|
||||
@ -52,7 +53,6 @@ class PlaylistParser;
|
||||
class QueueManager;
|
||||
class RadioItem;
|
||||
class RadioModel;
|
||||
class SettingsDialog;
|
||||
class Song;
|
||||
class SystemTrayIcon;
|
||||
class TaskManager;
|
||||
@ -171,6 +171,14 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
||||
|
||||
void SongSaveComplete();
|
||||
|
||||
void ShowCoverManager();
|
||||
void ShowAboutDialog();
|
||||
void ShowTranscodeDialog();
|
||||
void EnsureSettingsDialogCreated();
|
||||
void EnsureEditTagDialogCreated();
|
||||
void OpenSettingsDialog();
|
||||
void OpenSettingsDialogAtPage(SettingsDialog::Page page);
|
||||
|
||||
private:
|
||||
void SaveGeometry();
|
||||
void AddFilesToPlaylist(bool clear_first, const QList<QUrl>& urls);
|
||||
@ -181,6 +189,8 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
||||
|
||||
private:
|
||||
Ui_MainWindow* ui_;
|
||||
NetworkAccessManager* network_;
|
||||
|
||||
SystemTrayIcon* tray_icon_;
|
||||
OSD* osd_;
|
||||
boost::scoped_ptr<EditTagDialog> edit_tag_dialog_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user