MythTV  master
exportnative.cpp
Go to the documentation of this file.
1 // C++
2 #include <cstdlib>
3 #include <iostream>
4 #include <unistd.h>
5 
6 // qt
7 #include <QFile>
8 #include <QKeyEvent>
9 #include <QTextStream>
10 #include <QDomDocument>
11 
12 // myth
13 #include <libmyth/mythcontext.h>
14 #include <libmythbase/exitcodes.h>
15 #include <libmythbase/mythdb.h>
18 #include <libmythbase/remoteutil.h>
19 #include <libmythbase/stringutil.h>
22 #include <libmythui/mythuibutton.h>
26 #include <libmythui/mythuitext.h>
27 
28 // mytharchive
29 #include "archiveutil.h"
30 #include "exportnative.h"
31 #include "fileselector.h"
32 #include "logviewer.h"
33 #include "recordingselector.h"
34 #include "videoselector.h"
35 
37 {
39 
40  while (!m_archiveList.isEmpty())
41  delete m_archiveList.takeFirst();
42  m_archiveList.clear();
43 }
44 
46 {
47  // Load the theme for this screen
48  bool foundtheme = LoadWindowFromXML("mythnative-ui.xml", "exportnative", this);
49  if (!foundtheme)
50  return false;
51 
52  bool err = false;
53  UIUtilE::Assign(this, m_nextButton, "next_button", &err);
54  UIUtilE::Assign(this, m_prevButton, "prev_button", &err);
55  UIUtilE::Assign(this, m_cancelButton, "cancel_button", &err);
56 
57  UIUtilE::Assign(this, m_titleText, "progtitle", &err);
58  UIUtilE::Assign(this, m_datetimeText, "progdatetime", &err);
59  UIUtilE::Assign(this, m_descriptionText, "progdescription", &err);
60  UIUtilE::Assign(this, m_filesizeText, "filesize", &err);
61  UIUtilE::Assign(this, m_nofilesText, "nofiles", &err);
62  UIUtilE::Assign(this, m_sizeBar, "size_bar", &err);
63  UIUtilE::Assign(this, m_archiveButtonList, "archivelist", &err);
64  UIUtilE::Assign(this, m_addrecordingButton, "addrecording_button", &err);
65  UIUtilE::Assign(this, m_addvideoButton, "addvideo_button", &err);
66 
67  UIUtilW::Assign(this, m_maxsizeText, "maxsize");
68  UIUtilW::Assign(this, m_minsizeText, "minsize");
69  UIUtilW::Assign(this, m_currsizeText, "currentsize");
70  UIUtilW::Assign(this, m_currsizeErrText, "currentsize_error");
71 
72  if (err)
73  {
74  LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'exportnative'");
75  return false;
76  }
77 
81 
82 
86 
89 
91 
93 
95 
96  return true;
97 }
98 
99 bool ExportNative::keyPressEvent(QKeyEvent *event)
100 {
101  if (GetFocusWidget()->keyPressEvent(event))
102  return true;
103 
104  QStringList actions;
105  bool handled = GetMythMainWindow()->TranslateKeyPress("Archive", event, actions);
106 
107  for (int i = 0; i < actions.size() && !handled; i++)
108  {
109  QString action = actions[i];
110  handled = true;
111 
112  if (action == "MENU")
113  {
114  ShowMenu();
115  }
116  else if (action == "DELETE")
117  {
118  removeItem();
119  }
120 
121  else
122  handled = false;
123  }
124 
125  if (!handled && MythScreenType::keyPressEvent(event))
126  handled = true;
127 
128  return handled;
129 }
130 
132 {
133  int64_t size = 0;
134 
135  for (const auto *a : qAsConst(m_archiveList))
136  size += a->size;
137 
138  m_usedSpace = size / 1024 / 1024;
139  uint freeSpace = m_archiveDestination.freeSpace / 1024;
140 
141  m_sizeBar->SetTotal(freeSpace);
143 
144  QString tmpSize = QString("%1 Mb").arg(freeSpace);
145 
146  if (m_maxsizeText)
147  m_maxsizeText->SetText(tmpSize);
148 
149  if (m_minsizeText)
150  m_minsizeText->SetText("0 Mb");
151 
152  tmpSize = QString("%1 Mb").arg(m_usedSpace);
153 
154  if (m_usedSpace > freeSpace)
155  {
156  if (m_currsizeText)
157  m_currsizeText->Hide();
158 
159  if (m_currsizeErrText)
160  {
162  m_currsizeErrText->SetText(tmpSize);
163  }
164  }
165  else
166  {
167  if (m_currsizeErrText)
169 
170  if (m_currsizeText)
171  {
172  m_currsizeText->Show();
173  m_currsizeText->SetText(tmpSize);
174  }
175  }
176 }
177 
179 {
180  auto *a = item->GetData().value<ArchiveItem *>();
181  if (!a)
182  return;
183 
184  m_titleText->SetText(a->title);
185 
186  m_datetimeText->SetText(a->startDate + " " + a->startTime);
187 
189  (a->subtitle != "" ? a->subtitle + "\n" : "") + a->description);
190 
191  m_filesizeText->SetText(StringUtil::formatKBytes(a->size / 1024, 2));
192 }
193 
195 {
196  if (m_archiveList.empty())
197  {
198  ShowOkPopup(tr("You need to add at least one item to archive!"));
199  return;
200  }
201 
202  runScript();
203 
205  Close();
206 }
207 
209 {
210  Close();
211 }
212 
214 {
216  Close();
217 }
218 
220 {
222 
223  if (m_archiveList.empty())
224  {
225  m_titleText->Reset();
229  m_nofilesText->Show();
230  }
231  else
232  {
233  for (auto *a : qAsConst(m_archiveList))
234  {
235  auto* item = new MythUIButtonListItem(m_archiveButtonList, a->title);
236  item->SetData(QVariant::fromValue(a));
237  }
238 
241  m_nofilesText->Hide();
242  }
243 
244  updateSizeBar();
245 }
246 
248 {
249  while (!m_archiveList.isEmpty())
250  delete m_archiveList.takeFirst();
251  m_archiveList.clear();
252 
253  MSqlQuery query(MSqlQuery::InitCon());
254  query.prepare("SELECT intid, type, title, subtitle, description, size, "
255  "startdate, starttime, filename, hascutlist "
256  "FROM archiveitems WHERE type = 'Recording' OR type = 'Video' "
257  "ORDER BY title, subtitle");
258 
259  if (query.exec())
260  {
261  while (query.next())
262  {
263  auto *item = new ArchiveItem;
264 
265  item->id = query.value(0).toInt();
266  item->type = query.value(1).toString();
267  item->title = query.value(2).toString();
268  item->subtitle = query.value(3).toString();
269  item->description = query.value(4).toString();
270  item->size = query.value(5).toLongLong();
271  item->startDate = query.value(6).toString();
272  item->startTime = query.value(7).toString();
273  item->filename = query.value(8).toString();
274  item->hasCutlist = (query.value(9).toInt() > 0);
275  item->useCutlist = false;
276  item->editedDetails = false;
277 
278  m_archiveList.append(item);
279  }
280  }
281 }
282 
284 {
287 }
288 
290 {
291  m_bCreateISO = (gCoreContext->GetSetting("MythNativeCreateISO", "0") == "1");
292  m_bDoBurn = (gCoreContext->GetSetting("MythNativeBurnDVDr", "1") == "1");
293  m_bEraseDvdRw = (gCoreContext->GetSetting("MythNativeEraseDvdRw", "0") == "1");
294  m_saveFilename = gCoreContext->GetSetting("MythNativeSaveFilename", "");
295 }
296 
298 {
299  // remove all old archive items from DB
300  MSqlQuery query(MSqlQuery::InitCon());
301  query.prepare("DELETE FROM archiveitems;");
302  if (!query.exec())
303  MythDB::DBError("ExportNative::saveConfiguration - "
304  "deleting archiveitems", query);
305 
306  // save new list of archive items to DB
307  query.prepare("INSERT INTO archiveitems (type, title, subtitle, "
308  "description, startdate, starttime, size, filename, hascutlist, "
309  "duration, cutduration, videowidth, videoheight, filecodec,"
310  "videocodec, encoderprofile) "
311  "VALUES(:TYPE, :TITLE, :SUBTITLE, :DESCRIPTION, :STARTDATE, "
312  ":STARTTIME, :SIZE, :FILENAME, :HASCUTLIST, :DURATION, "
313  ":CUTDURATION, :VIDEOWIDTH, :VIDEOHEIGHT, :FILECODEC, "
314  ":VIDEOCODEC, :ENCODERPROFILE);");
315  for (const auto * a : qAsConst(m_archiveList))
316  {
317  query.bindValue(":TYPE", a->type);
318  query.bindValue(":TITLE", a->title);
319  query.bindValue(":SUBTITLE", a->subtitle);
320  query.bindValue(":DESCRIPTION", a->description);
321  query.bindValue(":STARTDATE", a->startDate);
322  query.bindValue(":STARTTIME", a->startTime);
323  query.bindValue(":SIZE", 0);
324  query.bindValue(":FILENAME", a->filename);
325  query.bindValue(":HASCUTLIST", a->hasCutlist);
326  query.bindValue(":DURATION", 0);
327  query.bindValue(":CUTDURATION", 0);
328  query.bindValue(":VIDEOWIDTH", 0);
329  query.bindValue(":VIDEOHEIGHT", 0);
330  query.bindValue(":FILECODEC", "");
331  query.bindValue(":VIDEOCODEC", "");
332  query.bindValue(":ENCODERPROFILE", "");
333 
334  if (!query.exec())
335  MythDB::DBError("archive item insert", query);
336  }
337 }
338 
340 {
341  MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
342 
343  auto *menuPopup = new MythDialogBox(tr("Menu"), popupStack, "actionmenu");
344 
345  if (menuPopup->Create())
346  popupStack->AddScreen(menuPopup);
347 
348  menuPopup->SetReturnEvent(this, "action");
349 
350  menuPopup->AddButton(tr("Remove Item"), &ExportNative::removeItem);
351 }
352 
354 {
356  auto *curItem = item->GetData().value<ArchiveItem *>();
357 
358  if (!curItem)
359  return;
360 
361  MSqlQuery query(MSqlQuery::InitCon());
362  query.prepare("DELETE FROM archiveitems WHERE filename = :FILENAME;");
363  query.bindValue(":FILENAME", curItem->filename);
364  if (query.exec() && query.numRowsAffected())
365  {
366  getArchiveList();
367  }
368 }
369 
371 {
372  QDomDocument doc("NATIVEARCHIVEJOB");
373 
374  QDomElement root = doc.createElement("nativearchivejob");
375  doc.appendChild(root);
376 
377  QDomElement job = doc.createElement("job");
378  root.appendChild(job);
379 
380  QDomElement media = doc.createElement("media");
381  job.appendChild(media);
382 
383  // now loop though selected archive items and add them to the xml file
384  for (const auto * a : qAsConst(m_archiveList))
385  {
386  QDomElement file = doc.createElement("file");
387  file.setAttribute("type", a->type.toLower() );
388  file.setAttribute("title", a->title);
389  file.setAttribute("filename", a->filename);
390  file.setAttribute("delete", "0");
391  media.appendChild(file);
392  }
393 
394  // add the options to the xml file
395  QDomElement options = doc.createElement("options");
396  options.setAttribute("createiso", static_cast<int>(m_bCreateISO));
397  options.setAttribute("doburn", static_cast<int>(m_bDoBurn));
398  options.setAttribute("mediatype", m_archiveDestination.type);
399  options.setAttribute("dvdrsize", (qint64)m_archiveDestination.freeSpace);
400  options.setAttribute("erasedvdrw", static_cast<int>(m_bEraseDvdRw));
401  options.setAttribute("savedirectory", m_saveFilename);
402  job.appendChild(options);
403 
404  // finally save the xml to the file
405  QFile f(filename);
406  if (!f.open(QIODevice::WriteOnly))
407  {
408  LOG(VB_GENERAL, LOG_ERR,
409  QString("ExportNative::createConfigFile: "
410  "Failed to open file for writing - %1") .arg(filename));
411  return;
412  }
413 
414  QTextStream t(&f);
415  t << doc.toString(4);
416  f.close();
417 }
418 
420 {
421  QString tempDir = getTempDirectory();
422  QString logDir = tempDir + "logs";
423  QString configDir = tempDir + "config";
424  QString commandline;
425 
426  // remove any existing logs
427  myth_system("rm -f " + logDir + "/*.log");
428 
429  // remove cancel flag file if present
430  if (QFile::exists(logDir + "/mythburncancel.lck"))
431  QFile::remove(logDir + "/mythburncancel.lck");
432 
433  createConfigFile(configDir + "/mydata.xml");
434  commandline = "mytharchivehelper --logpath " + logDir + " --nativearchive "
435  "--outfile " + configDir + "/mydata.xml"; // job file
436 
439  uint retval = myth_system(commandline, flags);
440  if (retval != GENERIC_EXIT_RUNNING && retval != GENERIC_EXIT_OK)
441  {
442  ShowOkPopup(tr("It was not possible to create the DVD. "
443  "An error occured when running the scripts") );
444  return;
445  }
446 
447  showLogViewer();
448 }
449 
451 {
453 
454  auto *selector = new RecordingSelector(mainStack, &m_archiveList);
455 
456  connect(selector, &RecordingSelector::haveResult,
458 
459  if (selector->Create())
460  mainStack->AddScreen(selector);
461 }
462 
464 {
465  if (ok)
467 }
468 
470 {
471  MSqlQuery query(MSqlQuery::InitCon());
472  query.prepare("SELECT title FROM videometadata");
473  if (query.exec() && query.size())
474  {
475  }
476  else
477  {
478  ShowOkPopup(tr("You don't have any videos!"));
479  return;
480  }
481 
483 
484  auto *selector = new VideoSelector(mainStack, &m_archiveList);
485 
486  connect(selector, &VideoSelector::haveResult,
488 
489  if (selector->Create())
490  mainStack->AddScreen(selector);
491 }
MythUIButton::Clicked
void Clicked()
MSqlQuery::next
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
Definition: mythdbcon.cpp:807
MSqlQuery
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Definition: mythdbcon.h:128
RecordingSelector::haveResult
void haveResult(bool ok)
MythMainWindow::GetMainStack
MythScreenStack * GetMainStack()
Definition: mythmainwindow.cpp:315
MSqlQuery::size
int size(void) const
Definition: mythdbcon.h:215
MythUIButtonList::GetItemCurrent
MythUIButtonListItem * GetItemCurrent() const
Definition: mythuibuttonlist.cpp:1587
exportnative.h
ExportNative::handlePrevPage
void handlePrevPage(void)
Definition: exportnative.cpp:208
mythuitext.h
mythuiprogressbar.h
fileselector.h
MythUIText::Reset
void Reset(void) override
Reset the widget to it's original state, should not reset changes made by the theme.
Definition: mythuitext.cpp:82
kMSDontBlockInputDevs
@ kMSDontBlockInputDevs
avoid blocking LIRC & Joystick Menu
Definition: mythsystem.h:36
ExportNative::m_titleText
MythUIText * m_titleText
Definition: exportnative.h:88
mythdb.h
VideoSelector::haveResult
void haveResult(bool ok)
MythScreenType::Close
virtual void Close()
Definition: mythscreentype.cpp:386
ExportNative::getArchiveList
void getArchiveList(void)
Definition: exportnative.cpp:283
ArchiveDestination::freeSpace
int64_t freeSpace
Definition: archiveutil.h:31
MythUIButtonList::itemSelected
void itemSelected(MythUIButtonListItem *item)
VideoSelector
Definition: videoselector.h:38
MythUIProgressBar::SetUsed
void SetUsed(int value)
Definition: mythuiprogressbar.cpp:69
ExportNative::m_archiveDestination
ArchiveDestination m_archiveDestination
Definition: exportnative.h:71
mythdialogbox.h
MSqlQuery::value
QVariant value(int i) const
Definition: mythdbcon.h:205
MythScreenStack
Definition: mythscreenstack.h:16
ExportNative::m_maxsizeText
MythUIText * m_maxsizeText
Definition: exportnative.h:93
MSqlQuery::exec
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
Definition: mythdbcon.cpp:608
logviewer.h
ExportNative::saveConfiguration
void saveConfiguration(void)
Definition: exportnative.cpp:297
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
ExportNative::m_nextButton
MythUIButton * m_nextButton
Definition: exportnative.h:82
build_compdb.file
file
Definition: build_compdb.py:55
ExportNative::updateSizeBar
void updateSizeBar(void)
Definition: exportnative.cpp:131
myth_system
uint myth_system(const QString &command, uint flags, std::chrono::seconds timeout)
Definition: mythsystemlegacy.cpp:506
ExportNative::m_bEraseDvdRw
bool m_bEraseDvdRw
Definition: exportnative.h:78
GENERIC_EXIT_OK
@ GENERIC_EXIT_OK
Exited with no error.
Definition: exitcodes.h:11
getTempDirectory
QString getTempDirectory(bool showError)
Definition: archiveutil.cpp:46
ExportNative::m_descriptionText
MythUIText * m_descriptionText
Definition: exportnative.h:90
remoteutil.h
mythuibuttonlist.h
ExportNative::m_addrecordingButton
MythUIButton * m_addrecordingButton
Definition: exportnative.h:85
ExportNative::m_nofilesText
MythUIText * m_nofilesText
Definition: exportnative.h:92
MythScreenType::GetFocusWidget
MythUIType * GetFocusWidget(void) const
Definition: mythscreentype.cpp:113
ExportNative::m_sizeBar
MythUIProgressBar * m_sizeBar
Definition: exportnative.h:97
mythsystemlegacy.h
ExportNative::titleChanged
void titleChanged(MythUIButtonListItem *item)
Definition: exportnative.cpp:178
ExportNative::m_datetimeText
MythUIText * m_datetimeText
Definition: exportnative.h:89
MythUIButtonListItem
Definition: mythuibuttonlist.h:41
recordingselector.h
ExportNative::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: exportnative.cpp:99
ExportNative::updateArchiveList
void updateArchiveList(void)
Definition: exportnative.cpp:219
MythUIProgressBar::SetTotal
void SetTotal(int value)
Definition: mythuiprogressbar.cpp:81
RecordingSelector
Definition: recordingselector.h:29
programinfo.h
ExportNative::m_usedSpace
uint m_usedSpace
Definition: exportnative.h:72
MythUIType::Show
void Show(void)
Definition: mythuitype.cpp:1147
ExportNative::handleCancel
void handleCancel(void)
Definition: exportnative.cpp:213
MythMainWindow::TranslateKeyPress
bool TranslateKeyPress(const QString &Context, QKeyEvent *Event, QStringList &Actions, bool AllowJumps=true)
Get a list of actions for a keypress in the given context.
Definition: mythmainwindow.cpp:1104
ExportNative::~ExportNative
~ExportNative(void) override
Definition: exportnative.cpp:36
ExportNative::handleAddRecording
void handleAddRecording(void)
Definition: exportnative.cpp:450
ExportNative::handleAddVideo
void handleAddVideo(void)
Definition: exportnative.cpp:469
archiveutil.h
ExportNative::createConfigFile
void createConfigFile(const QString &filename)
Definition: exportnative.cpp:370
MythScreenType::SetFocusWidget
bool SetFocusWidget(MythUIType *widget=nullptr)
Definition: mythscreentype.cpp:118
hardwareprofile.i18n.t
t
Definition: i18n.py:36
MythDialogBox
Basic menu dialog, message and a list of options.
Definition: mythdialogbox.h:166
ArchiveDestination::type
ARCHIVEDESTINATION type
Definition: archiveutil.h:28
MSqlQuery::InitCon
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
Definition: mythdbcon.cpp:540
MythDB::DBError
static void DBError(const QString &where, const MSqlQuery &query)
Definition: mythdb.cpp:227
MythScreenType::BuildFocusList
void BuildFocusList(void)
Definition: mythscreentype.cpp:206
videoselector.h
stringutil.h
showLogViewer
void showLogViewer(void)
Definition: logviewer.cpp:25
ExportNative::m_cancelButton
MythUIButton * m_cancelButton
Definition: exportnative.h:84
ExportNative::m_saveFilename
QString m_saveFilename
Definition: exportnative.h:79
ExportNative::m_bCreateISO
bool m_bCreateISO
Definition: exportnative.h:76
ExportNative::m_prevButton
MythUIButton * m_prevButton
Definition: exportnative.h:83
ExportNative::m_currsizeText
MythUIText * m_currsizeText
Definition: exportnative.h:95
ExportNative::handleNextPage
void handleNextPage(void)
Definition: exportnative.cpp:194
ExportNative::m_minsizeText
MythUIText * m_minsizeText
Definition: exportnative.h:94
ExportNative::m_bDoBurn
bool m_bDoBurn
Definition: exportnative.h:77
MythUIButtonListItem::GetData
QVariant GetData()
Definition: mythuibuttonlist.cpp:3665
uint
unsigned int uint
Definition: compat.h:79
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:54
ExportNative::Create
bool Create(void) override
Definition: exportnative.cpp:45
ExportNative::ShowMenu
void ShowMenu(void) override
Definition: exportnative.cpp:339
ExportNative::m_filesizeText
MythUIText * m_filesizeText
Definition: exportnative.h:91
ExportNative::m_archiveList
QList< ArchiveItem * > m_archiveList
Definition: exportnative.h:74
UIUtilDisp::Assign
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
Definition: mythuiutils.h:27
MythUIType::Hide
void Hide(void)
Definition: mythuitype.cpp:1142
StringUtil::formatKBytes
MBASE_PUBLIC QString formatKBytes(int64_t sizeKB, int prec=1)
Definition: stringutil.cpp:357
ExportNative::m_addvideoButton
MythUIButton * m_addvideoButton
Definition: exportnative.h:86
kMSRunBackground
@ kMSRunBackground
run child in the background
Definition: mythsystem.h:38
ArchiveItem::id
int id
Definition: archiveutil.h:52
ExportNative::m_previousScreen
MythScreenType * m_previousScreen
Definition: exportnative.h:69
MythScreenType::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: mythscreentype.cpp:404
XMLParseBase::LoadWindowFromXML
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
Definition: xmlparsebase.cpp:695
MSqlQuery::bindValue
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
Definition: mythdbcon.cpp:883
ExportNative::runScript
void runScript()
Definition: exportnative.cpp:419
MythUIText::SetText
virtual void SetText(const QString &text)
Definition: mythuitext.cpp:132
mythcontext.h
MythUIButtonList::Reset
void Reset() override
Reset the widget to it's original state, should not reset changes made by the theme.
Definition: mythuibuttonlist.cpp:116
GetMythMainWindow
MythMainWindow * GetMythMainWindow(void)
Definition: mythmainwindow.cpp:102
MythUIButtonList::SetItemCurrent
void SetItemCurrent(MythUIButtonListItem *item)
Definition: mythuibuttonlist.cpp:1554
build_compdb.action
action
Definition: build_compdb.py:9
mythuibutton.h
MythMainWindow::GetStack
MythScreenStack * GetStack(const QString &Stackname)
Definition: mythmainwindow.cpp:320
MSqlQuery::numRowsAffected
int numRowsAffected() const
Definition: mythdbcon.h:218
ExportNative::getArchiveListFromDB
void getArchiveListFromDB(void)
Definition: exportnative.cpp:247
ExportNative::m_currsizeErrText
MythUIText * m_currsizeErrText
Definition: exportnative.h:96
ArchiveItem
Definition: archiveutil.h:50
ExportNative::loadConfiguration
void loadConfiguration(void)
Definition: exportnative.cpp:289
kMSDontDisableDrawing
@ kMSDontDisableDrawing
avoid disabling UI drawing
Definition: mythsystem.h:37
mythuicheckbox.h
exitcodes.h
MythUIButtonList::GetItemFirst
MythUIButtonListItem * GetItemFirst() const
Definition: mythuibuttonlist.cpp:1633
build_compdb.filename
filename
Definition: build_compdb.py:21
mythmainwindow.h
GENERIC_EXIT_RUNNING
@ GENERIC_EXIT_RUNNING
Process is running.
Definition: exitcodes.h:26
MythScreenStack::AddScreen
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
Definition: mythscreenstack.cpp:50
ExportNative::m_archiveButtonList
MythUIButtonList * m_archiveButtonList
Definition: exportnative.h:81
ShowOkPopup
MythConfirmationDialog * ShowOkPopup(const QString &message, bool showCancel)
Non-blocking version of MythPopupBox::showOkPopup()
Definition: mythdialogbox.cpp:563
build_compdb.options
options
Definition: build_compdb.py:11
ExportNative::selectorClosed
void selectorClosed(bool ok)
Definition: exportnative.cpp:463
ExportNative::removeItem
void removeItem(void)
Definition: exportnative.cpp:353
MythCoreContext::GetSetting
QString GetSetting(const QString &key, const QString &defaultval="")
Definition: mythcorecontext.cpp:896
MSqlQuery::prepare
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
Definition: mythdbcon.cpp:832