00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <iostream>
00018
00019 #include <qptrlist.h>
00020 #include <qstring.h>
00021 #include <qfile.h>
00022 #include <qdom.h>
00023 #include <qlayout.h>
00024 #include <qcursor.h>
00025 #include <qlabel.h>
00026 #include <qvgroupbox.h>
00027 #include <qtimer.h>
00028
00029 #include <mythtv/mythcontext.h>
00030 #include <mythtv/mythdbcon.h>
00031
00032 #include "bookmarkmanager.h"
00033
00034 using namespace std;
00035
00036
00037
00038 class BookmarkItem
00039 {
00040 public:
00041 typedef QPtrList<BookmarkItem> List;
00042
00043 QString group;
00044 QString desc;
00045 QString url;
00046 };
00047
00048
00049
00050 class BookmarkGroup
00051 {
00052 public:
00053
00054 typedef QPtrList<BookmarkGroup> List;
00055
00056 QString name;
00057 BookmarkItem::List siteList;
00058
00059 BookmarkGroup() {
00060 siteList.setAutoDelete(true);
00061 }
00062
00063 ~BookmarkGroup() {
00064 siteList.clear();
00065 }
00066
00067 void clear() {
00068 siteList.clear();
00069 };
00070 };
00071
00072
00073
00074 class BookmarkViewItem : public QListViewItem
00075 {
00076 public:
00077
00078 BookmarkViewItem(QListViewItem* parent, BookmarkItem* siteItem)
00079 : QListViewItem(parent, siteItem->desc, siteItem->url)
00080 {
00081 myBookmarkSite = siteItem;
00082 }
00083
00084 ~BookmarkViewItem()
00085 {}
00086
00087 BookmarkItem* myBookmarkSite;
00088 };
00089
00090
00091
00092 PopupBox::PopupBox(QWidget *parent)
00093 : QDialog(parent, 0, true, WType_Popup)
00094 {
00095 setPalette(parent->palette());
00096 setFont(parent->font());
00097
00098 QVBoxLayout *lay = new QVBoxLayout(this, 5);
00099
00100 QVGroupBox *vbox = new QVGroupBox(tr("Add New Website"),this);
00101 lay->addWidget(vbox);
00102
00103 QLabel *groupLabel = new QLabel(tr("Group:"), vbox);
00104 groupLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00105 group = new QLineEdit(vbox);
00106
00107 QLabel *descLabel = new QLabel(tr("Description:"), vbox);
00108 descLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00109 desc = new QLineEdit(vbox);
00110
00111 QLabel *urlLabel =new QLabel(tr("URL:"), vbox);
00112 urlLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00113 url = new QLineEdit(vbox);
00114
00115 QHBoxLayout *hbox = new QHBoxLayout(lay);
00116
00117 hbox->addItem(new QSpacerItem(100, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
00118
00119 MythPushButton *okButton = new MythPushButton(tr("&Ok"), this);
00120 okButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
00121 hbox->addWidget(okButton);
00122
00123 hbox->addItem(new QSpacerItem(100, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
00124
00125 connect(okButton, SIGNAL(clicked()), this, SLOT(slotOkClicked()));
00126
00127 gContext->ThemeWidget(this);
00128 }
00129
00130 PopupBox::~PopupBox()
00131 {
00132 }
00133
00134 void PopupBox::slotOkClicked()
00135 {
00136 emit finished(group->text(),desc->text(),url->text());
00137 close();
00138 }
00139
00140
00141
00142 class BookmarkConfigPriv
00143 {
00144 public:
00145
00146 BookmarkGroup::List groupList;
00147 QStringList selectedSitesList;
00148
00149 BookmarkConfigPriv() {
00150 groupList.setAutoDelete(true);
00151 }
00152
00153 ~BookmarkConfigPriv() {
00154 groupList.clear();
00155 }
00156 };
00157
00158
00159
00160 BookmarksConfig::BookmarksConfig(MythMainWindow *parent,
00161 const char *name)
00162 : MythDialog(parent, name)
00163 {
00164 setPalette(parent->palette());
00165
00166
00167
00168
00169 QString queryString( "CREATE TABLE IF NOT EXISTS websites "
00170 "( grp VARCHAR(255) NOT NULL, dsc VARCHAR(255),"
00171 " url VARCHAR(255) NOT NULL PRIMARY KEY,"
00172 " updated INT UNSIGNED );");
00173 MSqlQuery query(MSqlQuery::InitCon());
00174 if (!query.exec(queryString)) {
00175 cerr << "MythBookmarksConfig: Error in creating sql table" << endl;
00176 }
00177
00178
00179 myBookmarksView = new MythListView(this);
00180 myBookmarksView->header()->hide();
00181 myBookmarksView->addColumn("Sites");
00182 myBookmarksView->setRootIsDecorated(true);
00183 myBookmarksView->addColumn("URL",-1);
00184
00185 populateListView();
00186 setupView();
00187
00188 setCursor(QCursor(Qt::ArrowCursor));
00189 }
00190
00191
00192 BookmarksConfig::~BookmarksConfig()
00193 {
00194
00195 gContext->SaveSetting("WebBrowserZoomLevel", zoom->value());
00196 gContext->SaveSetting("WebBrowserCommand", browser->text());
00197 gContext->SaveSetting("WebBrowserScrollMode",
00198 scrollmode->isChecked()?1:0);
00199 gContext->SaveSetting("WebBrowserScrollSpeed", scrollspeed->value());
00200 gContext->SaveSetting("WebBrowserHideScrollbars",
00201 hidescrollbars->isChecked()?1:0);
00202 }
00203
00204
00205 void BookmarksConfig::populateListView()
00206 {
00207 BookmarkConfigPriv* myTree = new BookmarkConfigPriv;
00208
00209 myTree->groupList.clear();
00210
00211 MSqlQuery query(MSqlQuery::InitCon());
00212 query.exec("SELECT grp, dsc, url FROM websites ORDER BY grp");
00213
00214 if (!query.isActive()) {
00215 cerr << "MythBrowserConfig: Error in loading from DB" << endl;
00216 } else {
00217 BookmarkGroup *group = new BookmarkGroup();
00218 group->name="Empty";
00219 while( query.next() ) {
00220 if( QString::compare(group->name,query.value(0).toString())!=0 ) {
00221 group = new BookmarkGroup();
00222 group->name = query.value(0).toString();
00223 myTree->groupList.append(group);
00224 }
00225 BookmarkItem *site = new BookmarkItem();
00226 site->group = query.value(0).toString();
00227 site->desc = query.value(1).toString();
00228 site->url = query.value(2).toString();
00229 group->siteList.append(site);
00230 }
00231 }
00232
00233
00234 myBookmarksView->clear();
00235 for (BookmarkGroup* cat = myTree->groupList.first(); cat; cat = myTree->groupList.next() ) {
00236 QListViewItem *catItem = new QListViewItem(myBookmarksView, cat->name,"");
00237 catItem->setOpen(true);
00238 for(BookmarkItem* site = cat->siteList.first(); site; site = cat->siteList.next() ) {
00239 new BookmarkViewItem(catItem, site);
00240 }
00241 }
00242 }
00243
00244
00245 void BookmarksConfig::setupView()
00246 {
00247 QVBoxLayout *vbox = new QVBoxLayout(this, (int)(hmult*10));
00248
00249
00250 QLabel *topLabel = new QLabel(this);
00251 topLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00252 topLabel->setText(tr("MythBrowser Bookmarks Settings"));
00253
00254 vbox->addWidget(topLabel);
00255
00256 QLabel *helpLabel = new QLabel(this);
00257 helpLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00258 helpLabel->setFrameStyle(QFrame::Box + QFrame::Sunken);
00259 helpLabel->setMargin(int(hmult*4));
00260 helpLabel->setText(tr("Press the 'New Bookmark' button to "
00261 "add a new site/group.\n"
00262 "Pressing SPACE/Enter on a selected entry "
00263 "removes it from the listview."));
00264 vbox->addWidget(helpLabel);
00265
00266
00267 vbox->addWidget(myBookmarksView);
00268
00269 connect(myBookmarksView, SIGNAL(doubleClicked(QListViewItem*)),
00270 this, SLOT(slotBookmarksViewExecuted(QListViewItem*)));
00271 connect(myBookmarksView, SIGNAL(spacePressed(QListViewItem*)),
00272 this, SLOT(slotBookmarksViewExecuted(QListViewItem*)));
00273
00274 QFrame *hbar2 = new QFrame( this, "<hr>", 0 );
00275 hbar2->setBackgroundOrigin(QWidget::WindowOrigin);
00276 hbar2->setFrameStyle( QFrame::Sunken + QFrame::HLine );
00277 hbar2->setFixedHeight( 12 );
00278 vbox->addWidget(hbar2);
00279
00280
00281 QHBoxLayout *hbox2 = new QHBoxLayout(vbox);
00282
00283 QLabel *zoomLabel = new QLabel(this);
00284 zoomLabel->setText(tr("Zoom [%]:"));
00285 zoomLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00286 zoomLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00287 hbox2->addWidget(zoomLabel);
00288
00289 zoom = new MythSpinBox(this);
00290 zoom->setMinValue(20);
00291 zoom->setMaxValue(300);
00292 zoom->setLineStep(5);
00293 hbox2->addWidget(zoom);
00294 zoom->setValue(gContext->GetNumSetting("WebBrowserZoomLevel", 20));
00295
00296 QLabel *browserLabel = new QLabel(this);
00297 browserLabel->setText(tr("Browser:"));
00298 browserLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00299 browserLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00300 hbox2->addWidget(browserLabel);
00301 browser = new MythLineEdit(this);
00302 browser->setRW(true);
00303 browser->setHelpText("this is the help line");
00304 hbox2->addWidget(browser);
00305 browser->setText(gContext->GetSetting("WebBrowserCommand", PREFIX "/bin/mythbrowser"));
00306
00307
00308 QHBoxLayout *hbox3 = new QHBoxLayout(vbox);
00309
00310 hidescrollbars = new MythCheckBox(this);
00311 hidescrollbars->setText(tr("Hide Scrollbars"));
00312 hidescrollbars->setChecked(gContext->GetNumSetting(
00313 "WebBrowserHideScrollbars", 0)
00314 == 1);
00315 hbox3->addWidget(hidescrollbars);
00316
00317 scrollmode = new MythCheckBox(this);
00318 scrollmode->setText(tr("Scroll Page"));
00319 scrollmode->setChecked(gContext->GetNumSetting("WebBrowserScrollMode", 1)
00320 == 1);
00321 hbox3->addWidget(scrollmode);
00322
00323 QLabel *label = new QLabel(this);
00324 label->setText(tr("Scroll Speed:"));
00325 label->setBackgroundOrigin(QWidget::WindowOrigin);
00326 label->setBackgroundOrigin(QWidget::WindowOrigin);
00327 hbox3->addWidget(label);
00328
00329 scrollspeed = new MythSpinBox(this);
00330 scrollspeed->setMinValue(1);
00331 scrollspeed->setMaxValue(16);
00332 scrollspeed->setLineStep(1);
00333 hbox3->addWidget(scrollspeed);
00334 scrollspeed->setValue(gContext->GetNumSetting("WebBrowserScrollSpeed", 4));
00335
00336
00337 QHBoxLayout *hbox = new QHBoxLayout(vbox);
00338
00339 MythPushButton *newBookmark = new MythPushButton(tr("&New Bookmark"), this);
00340 hbox->addWidget(newBookmark);
00341
00342 connect(newBookmark, SIGNAL(clicked()), this, SLOT(slotAddBookmark()));
00343
00344 QLabel *customSiteLabel = new QLabel(this);
00345 customSiteLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00346 customSiteLabel->setText(tr("Add a new Website"));
00347 hbox->addWidget(customSiteLabel);
00348
00349
00350 hbox->addItem(new QSpacerItem(100, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
00351
00352 MythPushButton *finish = new MythPushButton(tr("&Finish"), this);
00353 hbox->addWidget(finish);
00354
00355 connect(finish, SIGNAL(clicked()), this, SLOT(slotFinish()));
00356 }
00357
00358
00359 void BookmarksConfig::slotFinish()
00360 {
00361 close();
00362 }
00363
00364
00365 void BookmarksConfig::slotBookmarksViewExecuted(QListViewItem *item)
00366 {
00367 if(!item)
00368 return;
00369
00370 BookmarkViewItem* viewItem = dynamic_cast<BookmarkViewItem*>(item);
00371 if (!viewItem) {
00372
00373 } else {
00374
00375 MSqlQuery query(MSqlQuery::InitCon());
00376 query.prepare("DELETE FROM websites WHERE url=:URL");
00377 query.bindValue(":URL",viewItem->myBookmarkSite->url);
00378
00379 if (!query.exec()) {
00380 cerr << "MythBookmarksConfig: Error in deleting in DB" << endl;
00381 return;
00382 }
00383 populateListView();
00384 }
00385 }
00386
00387 void BookmarksConfig::slotAddBookmark()
00388 {
00389 PopupBox *popupBox = new PopupBox(this);
00390 connect(popupBox, SIGNAL(finished(const char*,const char*,const char*)),
00391 this, SLOT(slotWebSiteAdded(const char*,const char*,const char*)));
00392 popupBox->show();
00393 }
00394
00395 void BookmarksConfig::slotWebSiteAdded(const char* group, const char* desc, const char* url)
00396 {
00397 QString *groupStr = new QString(group);
00398 QString *descStr = new QString(desc);
00399 QString *urlStr = new QString(url);
00400 urlStr->stripWhiteSpace();
00401 if ( !urlStr->startsWith("http://") && !urlStr->startsWith("https://") &&
00402 !urlStr->startsWith("file:/") )
00403 urlStr->prepend("http://");
00404
00405 if (groupStr->isEmpty() || urlStr->isEmpty())
00406 return;
00407
00408 urlStr->replace("&","&");
00409
00410 MSqlQuery query(MSqlQuery::InitCon());
00411 query.prepare("INSERT INTO websites (grp, dsc, url) VALUES(:GROUP, :DESC, :URL);");
00412 query.bindValue(":GROUP",groupStr->utf8());
00413 query.bindValue(":DESC",descStr->utf8());
00414 query.bindValue(":URL",urlStr->utf8());
00415 if (!query.exec()) {
00416 cerr << "MythBookmarksConfig: Error in inserting in DB" << endl;
00417 }
00418 populateListView();
00419 }
00420
00421
00422
00423 Bookmarks::Bookmarks(MythMainWindow *parent, const char *name)
00424 : MythDialog(parent, name)
00425 {
00426 setPalette(parent->palette());
00427
00428
00429
00430
00431 QString queryString( "CREATE TABLE IF NOT EXISTS websites "
00432 "( grp VARCHAR(255) NOT NULL, dsc VARCHAR(255),"
00433 " url VARCHAR(255) NOT NULL PRIMARY KEY,"
00434 " updated INT UNSIGNED );");
00435 MSqlQuery query(MSqlQuery::InitCon());
00436 if (!query.exec(queryString)) {
00437 cerr << "MythBookmarksConfig: Error in creating sql table" << endl;
00438 }
00439
00440
00441 myBookmarksView = new MythListView(this);
00442 myBookmarksView->header()->hide();
00443 myBookmarksView->addColumn("Sites");
00444 myBookmarksView->setRootIsDecorated(true);
00445 myBookmarksView->addColumn("URL",-1);
00446
00447 populateListView();
00448 setupView();
00449
00450 setCursor(QCursor(Qt::ArrowCursor));
00451 }
00452
00453
00454 Bookmarks::~Bookmarks()
00455 {
00456
00457 }
00458
00459
00460 void Bookmarks::populateListView()
00461 {
00462 BookmarkConfigPriv* myTree = new BookmarkConfigPriv;
00463
00464 myTree->groupList.clear();
00465
00466 MSqlQuery query(MSqlQuery::InitCon());
00467 query.exec("SELECT grp, dsc, url FROM websites ORDER BY grp");
00468
00469 if (!query.isActive()) {
00470 cerr << "MythBrowserConfig: Error in loading from DB" << endl;
00471 } else {
00472 BookmarkGroup *group = new BookmarkGroup();
00473 group->name="Empty";
00474 while( query.next() ) {
00475 if( QString::compare(group->name,query.value(0).toString())!=0 ) {
00476 group = new BookmarkGroup();
00477 group->name = query.value(0).toString();
00478 myTree->groupList.append(group);
00479 }
00480 BookmarkItem *site = new BookmarkItem();
00481 site->group = query.value(0).toString();
00482 site->desc = query.value(1).toString();
00483 site->url = query.value(2).toString();
00484 group->siteList.append(site);
00485 }
00486 }
00487
00488
00489 myBookmarksView->clear();
00490 for (BookmarkGroup* cat = myTree->groupList.first(); cat; cat = myTree->groupList.next() ) {
00491 QListViewItem *catItem = new QListViewItem(myBookmarksView, cat->name,"");
00492 catItem->setOpen(false);
00493 for(BookmarkItem* site = cat->siteList.first(); site; site = cat->siteList.next() ) {
00494 new BookmarkViewItem(catItem, site);
00495 }
00496 }
00497
00498 myBookmarksView->setFocus();
00499 myBookmarksView->setCurrentItem(myBookmarksView->firstChild());
00500 myBookmarksView->setSelected(myBookmarksView->firstChild(),true);
00501 }
00502
00503
00504 void Bookmarks::setupView()
00505 {
00506 QVBoxLayout *vbox = new QVBoxLayout(this, (int)(hmult*10));
00507
00508
00509 QLabel *topLabel = new QLabel(this);
00510 topLabel->setBackgroundOrigin(QWidget::WindowOrigin);
00511 topLabel->setText(tr("MythBrowser: Select group or single site to view"));
00512
00513 QFrame *hbar1 = new QFrame( this, "<hr>", 0 );
00514 hbar1->setBackgroundOrigin(QWidget::WindowOrigin);
00515 hbar1->setFrameStyle( QFrame::Sunken + QFrame::HLine );
00516 hbar1->setFixedHeight( 12 );
00517
00518 vbox->addWidget(topLabel);
00519 vbox->addWidget(hbar1);
00520
00521
00522 vbox->addWidget(myBookmarksView);
00523
00524 connect(myBookmarksView, SIGNAL(doubleClicked(QListViewItem*)),
00525 this, SLOT(slotBookmarksViewExecuted(QListViewItem*)));
00526 connect(myBookmarksView, SIGNAL(spacePressed(QListViewItem*)),
00527 this, SLOT(slotBookmarksViewExecuted(QListViewItem*)));
00528 }
00529
00530
00531 void Bookmarks::slotBookmarksViewExecuted(QListViewItem *item)
00532 {
00533 QString cmd = gContext->GetSetting("WebBrowserCommand", PREFIX "/bin/mythbrowser");
00534 QString zoom = QString(" -z %1 ").arg(gContext->GetNumSetting("WebBrowserZoomLevel",200));
00535
00536 QString geometry = QString(" -x %1 -y %2 -w %3 -h %4 ")
00537 .arg(gContext->GetMainWindow()->x())
00538 .arg(gContext->GetMainWindow()->y())
00539 .arg(gContext->GetMainWindow()->width())
00540 .arg(gContext->GetMainWindow()->height());
00541
00542 if (!gContext->GetMainWindow()->testWFlags(Qt::WStyle_NoBorder))
00543 geometry += " -g ";
00544
00545 if(!item)
00546 return;
00547
00548 BookmarkViewItem* viewItem = dynamic_cast<BookmarkViewItem*>(item);
00549 if (!viewItem) {
00550 QListViewItemIterator it(item);
00551 ++it;
00552 while ( it.current() ) {
00553 BookmarkViewItem* leafItem = dynamic_cast<BookmarkViewItem*>(it.current());
00554 if(leafItem)
00555 cmd += geometry + zoom + leafItem->myBookmarkSite->url;
00556 else
00557 break;
00558 ++it;
00559 }
00560 gContext->GetMainWindow()->AllowInput(false);
00561 cmd.replace("&","\\&");
00562 cmd.replace(";","\\;");
00563 myth_system(cmd, MYTH_SYSTEM_DONT_BLOCK_PARENT);
00564 gContext->GetMainWindow()->AllowInput(true);
00565 } else {
00566 cmd += geometry + zoom + viewItem->myBookmarkSite->url;
00567 gContext->GetMainWindow()->AllowInput(false);
00568 cmd.replace("&","\\&");
00569 cmd.replace(";","\\;");
00570 myth_system(cmd, MYTH_SYSTEM_DONT_BLOCK_PARENT);
00571 gContext->GetMainWindow()->AllowInput(true);
00572 }
00573 }