void RedditBrowser::showEvent(QShowEvent* event) { if (firstShow) { markAsRead(); firstShow = false; } }
ListView::ListView( QObject* parent, QWidget* parentWidget ) : View( parent ), m_model( NULL ), m_selectedIssueId( 0 ), m_isRead( false ), m_isSubscribed( false ), m_isAdmin( false ), m_hasIssues( false ), m_currentViewId( 0 ), m_searchColumn( Column_Name ) { QAction* action; action = new QAction( IconLoader::icon( "file-reload" ), tr( "&Update Folder" ), this ); action->setShortcut( QKeySequence::Refresh ); connect( action, SIGNAL( triggered() ), this, SLOT( updateFolder() ), Qt::QueuedConnection ); setAction( "updateFolder", action ); action = new QAction( IconLoader::icon( "issue-open" ), tr( "&Open Issue" ), this ); action->setShortcut( QKeySequence::Open ); connect( action, SIGNAL( triggered() ), this, SLOT( openIssue() ), Qt::QueuedConnection ); setAction( "openIssue", action ); action = new QAction( IconLoader::icon( "issue-new" ), tr( "&Add Issue..." ), this ); action->setShortcut( QKeySequence::New ); connect( action, SIGNAL( triggered() ), this, SLOT( addIssue() ), Qt::QueuedConnection ); setAction( "addIssue", action ); action = new QAction( IconLoader::icon( "edit-modify" ), tr( "&Edit Attributes..." ), this ); action->setShortcut( tr( "F2" ) ); connect( action, SIGNAL( triggered() ), this, SLOT( editIssue() ), Qt::QueuedConnection ); setAction( "editIssue", action ); action = new QAction( IconLoader::icon( "issue-clone" ), tr( "Clone Issue..." ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( cloneIssue() ), Qt::QueuedConnection ); setAction( "cloneIssue", action ); action = new QAction( IconLoader::icon( "issue-move" ), tr( "&Move Issue..." ), this ); action->setIconText( tr( "Move" ) ); connect( action, SIGNAL( triggered() ), this, SLOT( moveIssue() ), Qt::QueuedConnection ); setAction( "moveIssue", action ); action = new QAction( IconLoader::icon( "edit-delete" ), tr( "&Delete Issue" ), this ); action->setIconText( tr( "Delete" ) ); action->setShortcut( QKeySequence::Delete ); connect( action, SIGNAL( triggered() ), this, SLOT( deleteIssue() ), Qt::QueuedConnection ); setAction( "deleteIssue", action ); action = new QAction( IconLoader::icon( "issue" ), tr( "Mark As Read" ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( markAsRead() ), Qt::QueuedConnection ); setAction( "markAsRead", action ); action = new QAction( IconLoader::icon( "folder-read" ), tr( "Mark All As Read" ), this ); action->setIconText( tr( "Mark All As Read", "icon text" ) ); setAction( "popupMarkAll", action ); action = new QAction( IconLoader::icon( "folder-read" ), tr( "Mark All As Read" ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( markAllAsRead() ), Qt::QueuedConnection ); setAction( "markAllAsRead", action ); action = new QAction( IconLoader::icon( "folder-unread" ), tr( "Mark All As Unread" ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( markAllAsUnread() ), Qt::QueuedConnection ); setAction( "markAllAsUnread", action ); action = new QAction( IconLoader::icon( "issue-subscribe" ), tr( "Subscribe" ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( subscribe() ), Qt::QueuedConnection ); setAction( "subscribe", action ); action = new QAction( IconLoader::icon( "file-print" ), tr( "Print List" ), this ); action->setIconText( tr( "Print" ) ); action->setShortcut( QKeySequence::Print ); connect( action, SIGNAL( triggered() ), this, SLOT( printReport() ), Qt::QueuedConnection ); setAction( "printReport", action ); action = new QAction( IconLoader::icon( "export-pdf" ), tr( "Export List" ), this ); action->setIconText( tr( "Export" ) ); setAction( "popupExport", action ); action = new QAction( IconLoader::icon( "export-csv" ), tr( "Export To CSV" ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( exportCsv() ), Qt::QueuedConnection ); setAction( "exportCsv", action ); action = new QAction( IconLoader::icon( "export-html" ), tr( "Export To HTML" ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( exportHtml() ), Qt::QueuedConnection ); setAction( "exportHtml", action ); action = new QAction( IconLoader::icon( "export-pdf" ), tr( "Export To PDF" ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( exportPdf() ), Qt::QueuedConnection ); setAction( "exportPdf", action ); action = new QAction( IconLoader::icon( "configure-views" ), tr( "&Manage Views..." ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( manageViews() ), Qt::QueuedConnection ); setAction( "manageViews", action ); action = new QAction( IconLoader::icon( "view-new" ), tr( "Add View" ), this ); setAction( "popupAddView", action ); action = new QAction( IconLoader::icon( "view-new" ), tr( "&Add View" ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( addView() ), Qt::QueuedConnection ); setAction( "addView", action ); action = new QAction( IconLoader::icon( "view-clone" ), tr( "&Clone View" ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( cloneView() ), Qt::QueuedConnection ); setAction( "cloneView", action ); action = new QAction( IconLoader::icon( "edit-modify" ), tr( "M&odify View" ), this ); connect( action, SIGNAL( triggered() ), this, SLOT( modifyView() ), Qt::QueuedConnection ); setAction( "modifyView", action ); setTitle( "sectionAdd", tr( "Add" ) ); setTitle( "sectionFolder", tr( "Folder" ) ); setTitle( "sectionIssue", tr( "Issue" ) ); setTitle( "sectionViews", tr( "Views" ) ); setTitle( "sectionReport", tr( "Report" ) ); setPopupMenu( "popupExport", "menuExport", "exportPdf" ); setPopupMenu( "popupMarkAll", "menuMarkAll", "markAllAsRead" ); setPopupMenu( "popupAddView", "menuAddView", "addView" ); setDefaultMenuAction( "menuIssue", "openIssue" ); loadXmlUiFile( ":/resources/folderview.xml" ); QWidget* main = new QWidget( parentWidget ); QVBoxLayout* mainLayout = new QVBoxLayout( main ); mainLayout->setMargin( 0 ); mainLayout->setSpacing( 0 ); QHBoxLayout* viewLayout = new QHBoxLayout(); viewLayout->setMargin( 3 ); viewLayout->setSpacing( 5 ); mainLayout->addLayout( viewLayout ); QLabel* viewLabel = new QLabel( tr( "&View:" ), main ); viewLayout->addWidget( viewLabel ); m_viewCombo = new SeparatorComboBox( main ); m_viewCombo->setMaxVisibleItems( 15 ); m_viewCombo->setMaximumWidth( 200 ); m_viewCombo->setMinimumWidth( 100 ); connect( m_viewCombo, SIGNAL( activated( int ) ), this, SLOT( viewActivated( int ) ) ); viewLayout->addWidget( m_viewCombo, 1 ); viewLabel->setBuddy( m_viewCombo ); viewLayout->addStretch( 0 ); QLabel* searchLabel = new QLabel( tr( "&Search:" ), main ); viewLayout->addWidget( searchLabel ); m_searchBox = new SearchEditBox( main ); m_searchBox->setMaximumWidth( 200 ); m_searchBox->setMinimumWidth( 100 ); connect( m_searchBox, SIGNAL( textChanged( const QString& ) ), this, SLOT( quickSearchChanged( const QString& ) ) ); m_searchMenu = new QMenu( m_searchBox ); m_searchBox->setOptionsMenu( m_searchMenu ); m_searchActionGroup = new QActionGroup( this ); connect( m_searchActionGroup, SIGNAL( triggered( QAction* ) ), this, SLOT( searchActionTriggered( QAction* ) ) ); viewLayout->addWidget( m_searchBox, 1 ); searchLabel->setBuddy( m_searchBox ); m_list = new QTreeView( main ); mainLayout->addWidget( m_list ); TreeViewHelper helper( m_list ); helper.initializeView(); connect( m_list, SIGNAL( customContextMenuRequested( const QPoint& ) ), this, SLOT( listContextMenu( const QPoint& ) ) ); connect( m_list->header(), SIGNAL( customContextMenuRequested( const QPoint& ) ), this, SLOT( headerContextMenu( const QPoint& ) ) ); connect( m_list, SIGNAL( doubleClicked( const QModelIndex& ) ), this, SLOT( doubleClicked( const QModelIndex& ) ) ); connect( m_searchBox, SIGNAL( deactivate() ), m_list, SLOT( setFocus() ) ); main->installEventFilter( this ); m_list->installEventFilter( this ); m_list->viewport()->installEventFilter( this ); setMainWidget( main ); setViewerSizeHint( QSize( 700, 500 ) ); setViewerSizeKey( "FolderView" ); m_list->setFocus(); }
MessageView::MessageView(QWidget *parent, QSettings *settings): QWidget(parent), m_settings(settings) { QPalette pal = palette(); pal.setColor(backgroundRole(), palette().color(QPalette::Active, QPalette::Base)); pal.setColor(foregroundRole(), palette().color(QPalette::Active, QPalette::Text)); setPalette(pal); setAutoFillBackground(true); setFocusPolicy(Qt::StrongFocus); // not by the wheel netAccess = new Imap::Network::MsgPartNetAccessManager(this); connect(netAccess, SIGNAL(requestingExternal(QUrl)), this, SLOT(externalsRequested(QUrl))); factory = new PartWidgetFactory(netAccess, this); emptyView = new EmbeddedWebView(this, new QNetworkAccessManager(this)); emptyView->setFixedSize(450,300); QMetaObject::invokeMethod(emptyView, "handlePageLoadFinished", Qt::QueuedConnection); emptyView->setPage(new UserAgentWebPage(emptyView)); emptyView->installEventFilter(this); emptyView->setAutoFillBackground(false); viewer = emptyView; //BEGIN create header section headerSection = new QWidget(this); // we create a dummy header, pass it through the style and the use it's color roles so we // know what headers in general look like in the system QHeaderView helpingHeader(Qt::Horizontal); helpingHeader.ensurePolished(); pal = headerSection->palette(); pal.setColor(headerSection->backgroundRole(), palette().color(QPalette::Active, helpingHeader.backgroundRole())); pal.setColor(headerSection->foregroundRole(), palette().color(QPalette::Active, helpingHeader.foregroundRole())); headerSection->setPalette(pal); headerSection->setAutoFillBackground(true); // the actual mail header m_envelope = new EnvelopeView(headerSection, this); // the tag bar tags = new TagListWidget(headerSection); tags->setBackgroundRole(helpingHeader.backgroundRole()); tags->setForegroundRole(helpingHeader.foregroundRole()); tags->hide(); connect(tags, SIGNAL(tagAdded(QString)), this, SLOT(newLabelAction(QString))); connect(tags, SIGNAL(tagRemoved(QString)), this, SLOT(deleteLabelAction(QString))); // whether we allow to load external elements externalElements = new ExternalElementsWidget(this); externalElements->hide(); connect(externalElements, SIGNAL(loadingEnabled()), this, SLOT(externalsEnabled())); // layout the header layout = new QVBoxLayout(headerSection); layout->addWidget(m_envelope, 1); layout->addWidget(tags, 3); layout->addWidget(externalElements, 1); //END create header section //BEGIN layout the message layout = new QVBoxLayout(this); layout->setSpacing(0); layout->setContentsMargins(0,0,0,0); layout->addWidget(headerSection, 1); headerSection->hide(); // put the actual messages into an extra horizontal view // this allows us easy usage of the trailing stretch and also to indent the message a bit QHBoxLayout *hLayout = new QHBoxLayout; hLayout->setContentsMargins(6,6,6,0); hLayout->addWidget(viewer); static_cast<QVBoxLayout*>(layout)->addLayout(hLayout, 1); // add a strong stretch to squeeze header and message to the top // possibly passing a large stretch factor to the message could be enough... layout->addStretch(1000); //END layout the message // make the layout used to add messages our new horizontal layout layout = hLayout; markAsReadTimer = new QTimer(this); markAsReadTimer->setSingleShot(true); connect(markAsReadTimer, SIGNAL(timeout()), this, SLOT(markAsRead())); m_loadingSpinner = new Spinner(this); m_loadingSpinner->setText(tr("Fetching\nMessage")); m_loadingSpinner->setType(Spinner::Sun); }
void RssArticle::handleTorrentDownloadSuccess(const QString &url) { if (url == m_torrentUrl || url == m_link) markAsRead(); }