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(); }
void StatusWidget::createMenu() { menu = new QMenu( this ); signalMapper = new QSignalMapper( this ); replyAction = new QAction( this ); replyAction->setShortcut( QKeySequence( Qt::CTRL + Qt::SHIFT + Qt::Key_R ) ); menu->addAction( replyAction ); connect( replyAction, SIGNAL(triggered()), this, SLOT(slotReply()) ); connect( this, SIGNAL(reply(QString,quint64)), StatusModel::instance(), SIGNAL(reply(QString,quint64)) ); retweetAction = new QAction( tr( "Retweet" ), this ); retweetAction->setShortcut( QKeySequence( Qt::CTRL + Qt::Key_T ) ); menu->addAction( retweetAction ); connect( retweetAction, SIGNAL(triggered()), this, SLOT(slotRetweet()) ); connect( this, SIGNAL(retweet(QString)), StatusModel::instance(), SIGNAL(retweet(QString)) ); dmAction = new QAction( this ); dmAction->setShortcut( QKeySequence( Qt::CTRL + Qt::SHIFT + Qt::Key_D ) ); menu->addAction( dmAction ); connect( dmAction, SIGNAL(triggered()), this, SLOT(slotDM()) ); menu->addSeparator(); favoriteAction = new QAction( tr( "Add to Favorites" ), this ); favoriteAction->setShortcut( QKeySequence( Qt::CTRL + Qt::SHIFT + Qt::Key_F ) ); menu->addAction( favoriteAction ); connect( favoriteAction, SIGNAL(triggered()), this, SLOT(slotFavorite()) ); copylinkAction = new QAction( tr( "Copy link to this status" ), this ); copylinkAction->setShortcut( QKeySequence( Qt::CTRL + Qt::SHIFT + Qt::Key_C ) ); menu->addAction( copylinkAction ); connect( copylinkAction, SIGNAL(triggered()), this, SLOT(slotCopyLink()) ); deleteAction = new QAction( this ); deleteAction->setShortcut( QKeySequence( Qt::CTRL + Qt::SHIFT + Qt::Key_Backspace ) ); menu->addAction( deleteAction ); connect( deleteAction, SIGNAL(triggered()), this, SLOT(slotDelete()) ); markallasreadAction = new QAction( tr( "Mark list as read" ), this ); markallasreadAction->setShortcut( QKeySequence( Qt::CTRL + Qt::SHIFT + Qt::Key_A ) ); menu->addAction( markallasreadAction ); connect( markallasreadAction, SIGNAL(triggered()), StatusModel::instance(), SLOT(markAllAsRead()) ); markeverythingasreadAction = new QAction( tr( "Mark everything as read" ), this ); markeverythingasreadAction->setShortcut( QKeySequence( Qt::CTRL + Qt::ALT + Qt::Key_A ) ); menu->addAction( markeverythingasreadAction ); connect( markeverythingasreadAction, SIGNAL(triggered()), StatusModel::instance(), SIGNAL(markEverythingAsRead()) ); menu->addSeparator(); gototwitterpageAction = new QAction( this ); gototwitterpageAction->setShortcut( QKeySequence( Qt::CTRL + Qt::SHIFT + Qt::Key_T ) ); menu->addAction( gototwitterpageAction ); connect( gototwitterpageAction, SIGNAL(triggered()), signalMapper, SLOT(map()) ); connect( signalMapper, SIGNAL(mapped(QString)), StatusModel::instance(), SLOT(emitOpenBrowser(QString)) ); gotohomepageAction = new QAction( tr( "Go to User's homepage" ), this); gotohomepageAction->setShortcut( QKeySequence( Qt::CTRL + Qt::SHIFT + Qt::Key_H ) ); menu->addAction( gotohomepageAction ); connect( gotohomepageAction, SIGNAL(triggered()), signalMapper, SLOT(map()) ); }