void DialogProgressBG::create(const String& heading, const String& message) throw (WindowException) { DelayedCallGuard dcguard(languageHook); CGUIDialogExtendedProgressBar* pDialog = (CGUIDialogExtendedProgressBar*)g_windowManager.GetWindow(WINDOW_DIALOG_EXT_PROGRESS); if (pDialog == NULL) throw WindowException("Error: Window is NULL, this is not possible :-)"); CGUIDialogProgressBarHandle* pHandle = pDialog->GetHandle(heading); dlg = pDialog; handle = pHandle; pHandle->SetTitle(heading); if (!message.empty()) pHandle->SetText(message); }
bool Dialog::ok(const String& heading, const String& line1, const String& line2, const String& line3) { DelayedCallGuard dcguard(languageHook); CGUIDialogOK* pDialog = (CGUIDialogOK*)g_windowManager.GetWindow(WINDOW_DIALOG_OK); if (pDialog == NULL) throw WindowException("Error: Window is NULL, this is not possible :-)"); if (!heading.empty()) pDialog->SetHeading(CVariant{heading}); if (!line1.empty()) pDialog->SetLine(0, CVariant{line1}); if (!line2.empty()) pDialog->SetLine(1, CVariant{line2}); if (!line3.empty()) pDialog->SetLine(2, CVariant{line3}); pDialog->Open(); return pDialog->IsConfirmed(); }
void DialogProgress::create(const String& heading, const String& line1, const String& line2, const String& line3) throw (WindowException) { DelayedCallGuard dcguard(languageHook); CGUIDialogProgress* pDialog= (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); if (pDialog == NULL) throw WindowException("Error: Window is NULL, this is not possible :-)"); dlg = pDialog; pDialog->SetHeading(heading); if (!line1.empty()) pDialog->SetLine(0, line1); if (!line2.empty()) pDialog->SetLine(1, line2); if (!line3.empty()) pDialog->SetLine(2, line3); pDialog->StartModal(); }
bool Dialog::yesno(const String& heading, const String& line1, const String& line2, const String& line3, const String& nolabel, const String& yeslabel, int autoclose) throw (WindowException) { DelayedCallGuard dcguard(languageHook); const int window = WINDOW_DIALOG_YES_NO; CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(window); if (pDialog == NULL) throw WindowException("Error: Window is NULL, this is not possible :-)"); // get lines, last 4 lines are optional. if (!heading.empty()) pDialog->SetHeading(heading); if (!line1.empty()) pDialog->SetLine(0, line1); if (!line2.empty()) pDialog->SetLine(1, line2); if (!line3.empty()) pDialog->SetLine(2, line3); if (!nolabel.empty()) pDialog->SetChoice(0,nolabel); if (!yeslabel.empty()) pDialog->SetChoice(1,yeslabel); if (autoclose > 0) pDialog->SetAutoClose(autoclose); //send message and wait for user input XBMCWaitForThreadMessage(TMSG_DIALOG_DOMODAL, window, ACTIVE_WINDOW); return pDialog->IsConfirmed(); }
String Dialog::browseSingle(int type, const String& heading, const String& s_shares, const String& maskparam, bool useThumbs, bool useFileDirectories, const String& defaultt ) throw (WindowException) { DelayedCallGuard dcguard(languageHook); CStdString value; std::string mask = maskparam; VECSOURCES *shares = CMediaSourceSettings::Get().GetSources(s_shares); if (!shares) throw WindowException("Error: GetSourcesFromType given %s is NULL.",s_shares.c_str()); if (useFileDirectories && (!maskparam.empty() && !maskparam.size() == 0)) mask += "|.rar|.zip"; value = defaultt; if (type == 1) CGUIDialogFileBrowser::ShowAndGetFile(*shares, mask, heading, value, useThumbs, useFileDirectories); else if (type == 2) CGUIDialogFileBrowser::ShowAndGetImage(*shares, heading, value); else CGUIDialogFileBrowser::ShowAndGetDirectory(*shares, heading, value, type != 0); return value; }
int Dialog::select(const String& heading, const std::vector<String>& list, int autoclose) { DelayedCallGuard dcguard(languageHook); CGUIDialogSelect* pDialog= (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT); if (pDialog == NULL) throw WindowException("Error: Window is NULL, this is not possible :-)"); pDialog->Reset(); if (!heading.empty()) pDialog->SetHeading(CVariant{heading}); String listLine; for(unsigned int i = 0; i < list.size(); i++) { listLine = list[i]; pDialog->Add(listLine); } if (autoclose > 0) pDialog->SetAutoClose(autoclose); pDialog->Open(); return pDialog->GetSelectedLabel(); }
void DialogProgress::create(const String& heading, const String& line1, const String& line2, const String& line3) { DelayedCallGuard dcguard(languageHook); CGUIDialogProgress* pDialog= (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); if (pDialog == NULL) throw WindowException("Error: Window is NULL, this is not possible :-)"); dlg = pDialog; open = true; pDialog->SetHeading(CVariant{heading}); if (!line1.empty()) pDialog->SetLine(0, CVariant{line1}); if (!line2.empty()) pDialog->SetLine(1, CVariant{line2}); if (!line3.empty()) pDialog->SetLine(2, CVariant{line3}); pDialog->Open(); }
CGUIControl* Control::Create() { throw WindowException("Object is a Control, but can't be added to a window"); }
/* Searches for a control in Window->vecControls * If we can't find any but the window has the controlId (in case of a not python window) * we create a new control with basic functionality */ Control* Window::GetControlById(int iControlId) throw (WindowException) { TRACE; // find in window vector first!!! // this saves us from creating a complete new control std::vector<AddonClass::Ref<Control> >::iterator it = vecControls.begin(); while (it != vecControls.end()) { AddonClass::Ref<Control> control = (*it); if (control->iControlId == iControlId) { return control.get(); } else ++it; } // lock xbmc GUI before accessing data from it CSingleLock lock(g_graphicsContext); // check if control exists CGUIControl* pGUIControl = (CGUIControl*)ref(window)->GetControl(iControlId); if (!pGUIControl) { // control does not exist. throw WindowException("Non-Existent Control %d",iControlId); } // allocate a new control with a new reference CLabelInfo li; Control* pControl = NULL; // TODO: Yuck! Should probably be done with a Factory pattern switch(pGUIControl->GetControlType()) { case CGUIControl::GUICONTROL_BUTTON: pControl = new ControlButton(); li = ((CGUIButtonControl *)pGUIControl)->GetLabelInfo(); // note: conversion from infocolors -> plain colors here ((ControlButton*)pControl)->disabledColor = li.disabledColor; ((ControlButton*)pControl)->focusedColor = li.focusedColor; ((ControlButton*)pControl)->textColor = li.textColor; ((ControlButton*)pControl)->shadowColor = li.shadowColor; if (li.font) ((ControlButton*)pControl)->strFont = li.font->GetFontName(); ((ControlButton*)pControl)->align = li.align; break; case CGUIControl::GUICONTROL_CHECKMARK: pControl = new ControlCheckMark(); li = ((CGUICheckMarkControl *)pGUIControl)->GetLabelInfo(); // note: conversion to plain colors from infocolors. ((ControlCheckMark*)pControl)->disabledColor = li.disabledColor; //((ControlCheckMark*)pControl)->shadowColor = li.shadowColor; ((ControlCheckMark*)pControl)->textColor = li.textColor; if (li.font) ((ControlCheckMark*)pControl)->strFont = li.font->GetFontName(); ((ControlCheckMark*)pControl)->align = li.align; break; case CGUIControl::GUICONTROL_LABEL: pControl = new ControlLabel(); break; case CGUIControl::GUICONTROL_SPIN: pControl = new ControlSpin(); break; case CGUIControl::GUICONTROL_FADELABEL: pControl = new ControlFadeLabel(); break; case CGUIControl::GUICONTROL_TEXTBOX: pControl = new ControlTextBox(); break; case CGUIControl::GUICONTROL_IMAGE: pControl = new ControlImage(); break; case CGUIControl::GUICONTROL_PROGRESS: pControl = new ControlProgress(); break; case CGUIControl::GUICONTROL_SLIDER: pControl = new ControlSlider(); break; case CGUIControl::GUICONTAINER_LIST: case CGUIControl::GUICONTAINER_WRAPLIST: case CGUIControl::GUICONTAINER_FIXEDLIST: case CGUIControl::GUICONTAINER_PANEL: pControl = new ControlList(); // create a python spin control ((ControlList*)pControl)->pControlSpin = new ControlSpin(); break; case CGUIControl::GUICONTROL_GROUP: pControl = new ControlGroup(); break; case CGUIControl::GUICONTROL_RADIO: pControl = new ControlRadioButton(); li = ((CGUIRadioButtonControl *)pGUIControl)->GetLabelInfo(); // note: conversion from infocolors -> plain colors here ((ControlRadioButton*)pControl)->disabledColor = li.disabledColor; ((ControlRadioButton*)pControl)->focusedColor = li.focusedColor; ((ControlRadioButton*)pControl)->textColor = li.textColor; ((ControlRadioButton*)pControl)->shadowColor = li.shadowColor; if (li.font) ((ControlRadioButton*)pControl)->strFont = li.font->GetFontName(); ((ControlRadioButton*)pControl)->align = li.align; break; case CGUIControl::GUICONTROL_EDIT: pControl = new ControlEdit(); li = ((CGUIEditControl *)pGUIControl)->GetLabelInfo(); // note: conversion from infocolors -> plain colors here ((ControlEdit*)pControl)->disabledColor = li.disabledColor; ((ControlEdit*)pControl)->textColor = li.textColor; if (li.font) ((ControlEdit*)pControl)->strFont = li.font->GetFontName(); ((ControlButton*)pControl)->align = li.align; break; default: break; } if (!pControl) // throw an exeption throw WindowException("Unknown control type for python"); // we have a valid control here, fill in all the 'Control' data pControl->pGUIControl = pGUIControl; pControl->iControlId = pGUIControl->GetID(); pControl->iParentId = iWindowId; pControl->dwHeight = (int)pGUIControl->GetHeight(); pControl->dwWidth = (int)pGUIControl->GetWidth(); pControl->dwPosX = (int)pGUIControl->GetXPosition(); pControl->dwPosY = (int)pGUIControl->GetYPosition(); pControl->iControlUp = pGUIControl->GetControlIdUp(); pControl->iControlDown = pGUIControl->GetControlIdDown(); pControl->iControlLeft = pGUIControl->GetControlIdLeft(); pControl->iControlRight = pGUIControl->GetControlIdRight(); // It got this far so means the control isn't actually in the vector of controls // so lets add it to save doing all that next time vecControls.push_back(AddonClass::Ref<Control>(pControl)); // return the control with increased reference (+1) return pControl; }
bool DialogProgressBG::isFinished() { if (handle == NULL) throw WindowException("Dialog not created."); return handle->IsFinished(); }
bool DialogProgress::iscanceled() { if (dlg == NULL) throw WindowException("Dialog not created."); return dlg->IsCanceled(); }