void CGUIDialogAddonInfo::OnChangeLog() { CGUIDialogTextViewer* pDlgInfo = (CGUIDialogTextViewer*)g_windowManager.GetWindow(WINDOW_DIALOG_TEXT_VIEWER); std::string name; if (m_addon) name = m_addon->Name(); else if (m_localAddon) name = m_localAddon->Name(); pDlgInfo->SetHeading(g_localizeStrings.Get(24054)+" - "+name); if (m_item->GetProperty("Addon.Changelog").empty()) { pDlgInfo->SetText(g_localizeStrings.Get(13413)); CFileItemList items; if (m_localAddon && !m_item->GetProperty("Addon.UpdateAvail").asBoolean()) { items.Add(CFileItemPtr(new CFileItem(m_localAddon->ChangeLog(),false))); } else items.Add(CFileItemPtr(new CFileItem(m_addon->ChangeLog(),false))); items[0]->Select(true); m_jobid = CJobManager::GetInstance().AddJob( new CFileOperationJob(CFileOperationJob::ActionCopy,items, "special://temp/"),this); } else pDlgInfo->SetText(m_item->GetProperty("Addon.Changelog").asString()); m_changelog = true; pDlgInfo->Open(); m_changelog = false; }
void Dialog::textviewer(const String& heading, const String& text) { DelayedCallGuard dcguard(languageHook); const int window = WINDOW_DIALOG_TEXT_VIEWER; CGUIDialogTextViewer* pDialog = (CGUIDialogTextViewer*)g_windowManager.GetWindow(window); if (pDialog == NULL) throw WindowException("Error: Window is NULL, this is not possible :-)"); if (!heading.empty()) pDialog->SetHeading(heading); if (!text.empty()) pDialog->SetText(text); pDialog->Open(); }
void Interface_GUIDialogTextViewer::open(void* kodiBase, const char *heading, const char *text) { CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); if (!addon) { CLog::Log(LOGERROR, "Interface_GUIDialogTextViewer::%s - invalid data", __FUNCTION__); return; } CGUIDialogTextViewer* dialog = g_windowManager.GetWindow<CGUIDialogTextViewer>(WINDOW_DIALOG_TEXT_VIEWER); if (!heading || !text || !dialog) { CLog::Log(LOGERROR, "Interface_GUIDialogTextViewer::%s - invalid handler data (heading='%p', text='%p', dialog='%p') on addon '%s'", __FUNCTION__, heading, text, dialog, addon->ID().c_str()); return; } dialog->SetHeading(heading); dialog->SetText(text); dialog->Open(); }
bool CGUIDialogAudioDSPManager::OnContextButton(int itemNumber, CONTEXT_BUTTON button, int listType) { CFileItemPtr pItem; int listSize = 0; if (listType == LIST_ACTIVE) { pItem = m_activeItems[m_iCurrentType]->Get(itemNumber); listSize = m_activeItems[m_iCurrentType]->Size(); } else if (listType == LIST_AVAILABLE) { pItem = m_availableItems[m_iCurrentType]->Get(itemNumber); listSize = m_availableItems[m_iCurrentType]->Size(); } /* Check file item is in list range and get his pointer */ if (!pItem || itemNumber < 0 || itemNumber >= listSize) { return false; } if (button == CONTEXT_BUTTON_HELP) { /*! * Open audio dsp addon mode help text dialog */ AE_DSP_ADDON addon; if (CServiceBroker::GetADSP().GetAudioDSPAddon((int)pItem->GetProperty("AddonId").asInteger(), addon)) { CGUIDialogTextViewer* pDlgInfo = (CGUIDialogTextViewer*)g_windowManager.GetWindow(WINDOW_DIALOG_TEXT_VIEWER); pDlgInfo->SetHeading(g_localizeStrings.Get(15062) + " - " + pItem->GetProperty("Name").asString()); pDlgInfo->SetText(g_localizeStrings.GetAddonString(addon->ID(), (uint32_t)pItem->GetProperty("Help").asInteger())); pDlgInfo->Open(); } } else if (button == CONTEXT_BUTTON_ACTIVATE) { /*! * Deactivate selected processing mode */ if (pItem->GetProperty("ActiveMode").asBoolean()) { // remove mode from active mode list and add it to available mode list CFileItemPtr newItem(dynamic_cast<CFileItem*>(pItem->Clone())); newItem->SetProperty("ActiveMode", false); newItem->SetProperty("Changed", true); m_activeItems[m_iCurrentType]->Remove(itemNumber); m_availableItems[m_iCurrentType]->Add(newItem); } else { /*! * Activate selected processing mode */ if ((m_iCurrentType == AE_DSP_MODE_TYPE_INPUT_RESAMPLE || m_iCurrentType == AE_DSP_MODE_TYPE_OUTPUT_RESAMPLE) && m_activeItems[m_iCurrentType]->Size() > 0) { // if there is already an active resampler, now we remove it CFileItemPtr activeResampler = m_activeItems[m_iCurrentType]->Get(0); if (activeResampler) { CFileItemPtr newItem(dynamic_cast<CFileItem*>(activeResampler->Clone())); newItem->SetProperty("ActiveMode", false); newItem->SetProperty("Changed", true); m_availableItems[m_iCurrentType]->Add(newItem); // clear active list, because only one active resampling mode is supported by ActiveAEDSP m_activeItems[m_iCurrentType]->Clear(); } } // remove mode from available mode list and add it to active mode list CFileItemPtr newItem(dynamic_cast<CFileItem*>(pItem->Clone())); newItem->SetProperty("Number", (int)m_activeItems[m_iCurrentType]->Size() +1); newItem->SetProperty("Changed", true); newItem->SetProperty("ActiveMode", true); m_availableItems[m_iCurrentType]->Remove(itemNumber); m_activeItems[m_iCurrentType]->Add(newItem); } m_bContainsChanges = true; if (m_bContinousSaving) { SaveList(); } // reorder available mode list, so that the mode order is always consistent m_availableItems[m_iCurrentType]->ClearSortState(); m_availableItems[m_iCurrentType]->Sort(SortByLabel, SortOrderAscending); // update active and available mode list Renumber(); m_availableViewControl.SetItems(*m_availableItems[m_iCurrentType]); m_activeViewControl.SetItems(*m_activeItems[m_iCurrentType]); } else if (button == CONTEXT_BUTTON_MOVE) { m_bMovingMode = true; pItem->Select(true); CGUIListContainer *modeList = dynamic_cast<CGUIListContainer*>(GetControl(CONTROL_LIST_MODE_SELECTION)); CGUIButtonControl *applyButton = dynamic_cast<CGUIButtonControl*>(GetControl(CONTROL_BUTTON_APPLY_CHANGES)); CGUIButtonControl *clearActiveModesButton = dynamic_cast<CGUIButtonControl*>(GetControl(CONTROL_BUTTON_CLEAR_ACTIVE_MODES)); if (!modeList || !applyButton || !clearActiveModesButton) { helper_LogError(__FUNCTION__); return false; } // if we are in MovingMode all buttons and mode selection list will be disabled! modeList->SetEnabled(false); clearActiveModesButton->SetEnabled(false); if (!m_bContinousSaving) { applyButton->SetEnabled(false); } } else if (button == CONTEXT_BUTTON_SETTINGS) { int hookId = (int)pItem->GetProperty("SettingsDialog").asInteger(); if (hookId > 0) { AE_DSP_ADDON addon; if (CServiceBroker::GetADSP().GetAudioDSPAddon((int)pItem->GetProperty("AddonId").asInteger(), addon)) { AE_DSP_MENUHOOK hook; AE_DSP_MENUHOOK_DATA hookData; hook.category = AE_DSP_MENUHOOK_ALL; hook.iHookId = hookId; hook.iRelevantModeId = (unsigned int)pItem->GetProperty("AddonModeNumber").asInteger(); hookData.category = AE_DSP_MENUHOOK_ALL; hookData.data.iStreamId = -1; /*! * @note the addon dialog becomes always opened on the back of Kodi ones for this reason a * "<animation effect="fade" start="100" end="0" time="400" condition="Window.IsVisible(Addon)">Conditional</animation>" * on skin is needed to hide dialog. */ addon->CallMenuHook(hook, hookData); } } else { CGUIDialogOK::ShowAndGetInput(19033, 0, 15040, 0); } } return true; }