bool CGUIDialogSelect::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { case GUI_MSG_WINDOW_DEINIT: { CGUIDialogBoxBase::OnMessage(message); m_bButtonEnabled = false; m_useDetails = false; m_multiSelection = false; // construct selected items list m_selectedItems.clear(); m_selectedItem = nullptr; for (int i = 0 ; i < m_vecList->Size() ; i++) { CFileItemPtr item = m_vecList->Get(i); if (item->IsSelected()) { m_selectedItems.push_back(i); if (!m_selectedItem) m_selectedItem = item; } } m_vecList->Clear(); return true; } break; case GUI_MSG_WINDOW_INIT: { m_bButtonPressed = false; m_bConfirmed = false; CGUIDialogBoxBase::OnMessage(message); return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (m_viewControl.HasControl(CONTROL_SIMPLE_LIST)) { int iAction = message.GetParam1(); if (ACTION_SELECT_ITEM == iAction || ACTION_MOUSE_LEFT_CLICK == iAction) { int iSelected = m_viewControl.GetSelectedItem(); if (iSelected >= 0 && iSelected < m_vecList->Size()) { CFileItemPtr item(m_vecList->Get(iSelected)); if (m_multiSelection) item->Select(!item->IsSelected()); else { for (int i = 0 ; i < m_vecList->Size() ; i++) m_vecList->Get(i)->Select(false); item->Select(true); OnSelect(iSelected); } } } } if (iControl == CONTROL_EXTRA_BUTTON) { m_selectedItem = nullptr; m_bButtonPressed = true; if (m_multiSelection) m_bConfirmed = true; Close(); } else if (iControl == CONTROL_CANCEL_BUTTON) { m_selectedItem = nullptr; m_vecList->Clear(); m_selectedItems.clear(); m_bConfirmed = false; Close(); } } break; case GUI_MSG_SETFOCUS: { if (m_viewControl.HasControl(message.GetControlId())) { if (m_vecList->IsEmpty()) { if (m_bButtonEnabled) SET_CONTROL_FOCUS(CONTROL_EXTRA_BUTTON, 0); else SET_CONTROL_FOCUS(CONTROL_CANCEL_BUTTON, 0); return true; } if (m_viewControl.GetCurrentControl() != message.GetControlId()) { m_viewControl.SetFocused(); return true; } } } break; } return CGUIDialogBoxBase::OnMessage(message); }
RocketStorageSelectionDialog::RocketStorageSelectionDialog(RocketPlugin *plugin, MeshmoonStorage *storage, const QStringList &suffixFilters, bool allowChangingFolder, MeshmoonStorageItem &startDirectory, QWidget *parent) : QDialog(parent), plugin_(plugin), storage_(storage), suffixFilters_(suffixFilters), allowChangingFolder_(allowChangingFolder), startDirectory_(startDirectory), currentFolder_(0) { // Setup UI ui_.setupUi(this); ui_.scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui_.lineEditFilter->installEventFilter(this); ui_.buttonSelect->setAutoDefault(false); ui_.buttonCancel->setAutoDefault(false); view_ = new RocketStorageListWidget(this, plugin_); view_->SetPreviewFileOnMouse(true); view_->setSelectionMode(QAbstractItemView::SingleSelection); QVBoxLayout *l = new QVBoxLayout(ui_.scrollAreaWidgetContents); l->setSpacing(0); l->setContentsMargins(0,0,0,0); l->addWidget(view_); ui_.scrollAreaWidgetContents->setLayout(l); // Connections connect(view_, SIGNAL(itemClicked(QListWidgetItem*)), SLOT(OnItemClicked(QListWidgetItem*))); connect(view_, SIGNAL(itemDoubleClicked(QListWidgetItem*)), SLOT(OnItemDoubleClicked(QListWidgetItem*))); connect(ui_.buttonSelect, SIGNAL(clicked()), SLOT(OnSelect()), Qt::QueuedConnection); connect(ui_.buttonCancel, SIGNAL(clicked()), SLOT(reject()), Qt::QueuedConnection); connect(this, SIGNAL(rejected()), SLOT(OnCancel())); connect(ui_.lineEditFilter, SIGNAL(textChanged(const QString&)), SLOT(OnFilterChanged(const QString&))); // Dialog setup setAttribute(Qt::WA_DeleteOnClose, true); setWindowModality(parent != 0 ? Qt::WindowModal : Qt::ApplicationModal); setWindowFlags(parent != 0 ? Qt::Tool : Qt::SplashScreen); setWindowTitle(parent != 0 ? "Meshmoon Storage Picker" : ""); setModal(true); // Center to main window or to parent window. if (!parent) { plugin_->Notifications()->DimForeground(); plugin_->Notifications()->CenterToMainWindow(this); } else plugin_->Notifications()->CenterToWindow(parent, this); // Show and activate show(); setFocus(Qt::ActiveWindowFocusReason); activateWindow(); // If this is a splash dialog animate opacity if (!parent) { setWindowOpacity(0.0); QPropertyAnimation *showAnim = new QPropertyAnimation(this, "windowOpacity", this); showAnim->setStartValue(0.0); showAnim->setEndValue(1.0); showAnim->setDuration(300); showAnim->setEasingCurve(QEasingCurve(QEasingCurve::InOutQuad)); showAnim->start(); } if (!plugin_ || !storage_) { view_->addItem(new QListWidgetItem("Failed to list storage content")); return; } if (storage_->RootDirectory().IsNull()) view_->addItem(new QListWidgetItem("Loading...")); MeshmoonStorageAuthenticationMonitor *auth = storage_->Authenticate(); connect(auth, SIGNAL(Completed()), SLOT(OnStorageAuthCompleted()), Qt::QueuedConnection); connect(auth, SIGNAL(Canceled()), SLOT(reject()), Qt::QueuedConnection); connect(auth, SIGNAL(Failed(const QString&)), SLOT(reject()), Qt::QueuedConnection); }
static void OnSelectClicked(WindowControl * Sender) { OnSelect(); }
static void OnTaskListEnter(unsigned ItemIndex) { OnSelect(); }
static void OnPointListEnter(gcc_unused unsigned ItemIndex) { OnSelect(); }
static void OnSelectClicked(gcc_unused WndButton &Sender) { OnSelect(); }