1 #include "bookmarklistdlg.h"
2 #include "ui_bookmarklistdlg.h"
3 #include "cr3widget.h"
4 #include "addbookmarkdlg.h"
5 #include <QMenu>
6 
7 #define MAX_ITEM_LEN 50
limit(QString s)8 static QString limit( QString s )
9 {
10     if ( s.length()<MAX_ITEM_LEN )
11         return s;
12     s = s.left( MAX_ITEM_LEN );
13     return s + "...";
14 }
15 
16 #if QT_VERSION >= 0x050000
17 #define setResizeModeMethod setSectionResizeMode
18 #else
19 #define setResizeModeMethod setResizeMode
20 #endif
21 
22 
BookmarkListDialog(QWidget * parent,CR3View * docView)23 BookmarkListDialog::BookmarkListDialog(QWidget *parent, CR3View * docView ) :
24     QDialog(parent),
25     m_ui(new Ui::BookmarkListDialog),
26     _docview(docView)
27 {
28     m_ui->setupUi(this);
29     setWindowTitle( tr("Bookmarks") );
30 
31     m_ui->tableWidget->setColumnCount(4);
32     m_ui->tableWidget->setHorizontalHeaderLabels ( QStringList() << tr("Position") << tr("Type", "bookmark type") /*<< tr("Chapter") */ << tr("Text") << tr("Comment") );
33     m_ui->tableWidget->verticalHeader()->hide();
34     int i = 0;
35     m_ui->tableWidget->horizontalHeader()->setResizeModeMethod( i++, QHeaderView::ResizeToContents );
36     m_ui->tableWidget->horizontalHeader()->setResizeModeMethod( i++, QHeaderView::ResizeToContents );
37     //m_ui->tableWidget->horizontalHeader()->setResizeMode( i++, QHeaderView::Stretch );
38     m_ui->tableWidget->horizontalHeader()->setResizeModeMethod( i++, QHeaderView::Stretch );
39     m_ui->tableWidget->horizontalHeader()->setResizeModeMethod( i++, QHeaderView::Stretch );
40     //m_ui->tableWidget->horizontalHeader()->setResizeMode( 1, QHeaderView::Stretch ); //Stretch
41     m_ui->tableWidget->horizontalHeader()->setStretchLastSection( true );
42     m_ui->tableWidget->horizontalHeader()->setDefaultAlignment( Qt::AlignLeft );
43     m_ui->tableWidget->setEditTriggers( QAbstractItemView::NoEditTriggers );
44 
45     m_ui->tableWidget->setWordWrap(true);
46     m_ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
47     m_ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
48     m_ui->tableWidget->setSortingEnabled(false);
49 
50 
51     CRFileHistRecord * rec = _docview->getDocView()->getCurrentFileHistRecord();
52     if ( !rec )
53         return;
54     LVPtrVector<CRBookmark> & list( rec->getBookmarks() );
55     int curpercent = _docview->getDocView()->getPosPercent();
56     int bestdiff = -1;
57     int bestindex = -1;
58     int y = 0;
59     for ( int i=0; i<list.length(); i++ ) {
60         CRBookmark * bm = list[i];
61         if ( bm->getType() == bmkt_lastpos )
62             continue;
63         int diff = bm->getPercent() - curpercent;
64         if ( diff<0 )
65             diff = -diff;
66         if ( bestindex==-1 || diff < bestdiff ) {
67             bestindex = i;
68             bestdiff = diff;
69         }
70         QString t = tr("P", "Bookmark type first letter - Position");
71         if ( bm->getType()==bmkt_comment )
72             t = tr("C", "Bookmark type first letter - Comment");
73         else if ( bm->getType()==bmkt_correction )
74             t = tr("E", "Bookmark type first letter - Correction/Edit");
75         m_ui->tableWidget->setRowCount(y+1);
76 		{
77 			int i=0;
78 			_list.append( bm );
79 			m_ui->tableWidget->setItem( y, i++, new QTableWidgetItem( crpercent( bm->getPercent() )) );
80 			m_ui->tableWidget->setItem( y, i++, new QTableWidgetItem(t) );
81 			//m_ui->tableWidget->setItem( y, i++, new QTableWidgetItem( limit(cr2qt(bm->getTitleText())) ) );
82 			m_ui->tableWidget->setItem( y, i++, new QTableWidgetItem( limit(cr2qt(bm->getPosText())) ) );
83 			m_ui->tableWidget->setItem( y, i++, new QTableWidgetItem( limit(cr2qt(bm->getCommentText())) ) );
84             m_ui->tableWidget->verticalHeader()->setResizeModeMethod( y, QHeaderView::ResizeToContents );
85 		}
86         y++;
87     }
88     if ( bestindex>=0 ) {
89         //m_ui->tableWidget->setCurrentCell( bestindex, 0, QItemSelectionModel::Rows | QItemSelectionModel::SelectCurrent );
90         m_ui->tableWidget->selectRow( bestindex );
91     }
92 
93     m_ui->tableWidget->resizeColumnsToContents();
94     m_ui->tableWidget->resizeRowsToContents();
95 
96     _docview->restoreWindowPos( this, "bookmarklist." );
97 }
98 
closeEvent(QCloseEvent * event)99 void BookmarkListDialog::closeEvent ( QCloseEvent * event )
100 {
101     _docview->saveWindowPos( this, "bookmarklist." );
102 }
103 
~BookmarkListDialog()104 BookmarkListDialog::~BookmarkListDialog()
105 {
106     delete m_ui;
107 }
108 
showDlg(QWidget * parent,CR3View * docView)109 bool BookmarkListDialog::showDlg( QWidget * parent, CR3View * docView )
110 {
111     BookmarkListDialog * dlg = new BookmarkListDialog( parent, docView );
112     dlg->setModal( true );
113     dlg->show();
114     dlg->raise();
115     dlg->activateWindow();
116     //dlg->
117     return true;
118 }
119 
changeEvent(QEvent * e)120 void BookmarkListDialog::changeEvent(QEvent *e)
121 {
122     QDialog::changeEvent(e);
123     switch (e->type()) {
124     case QEvent::LanguageChange:
125         m_ui->retranslateUi(this);
126         break;
127     default:
128         break;
129     }
130 }
131 
on_buttonBox_accepted()132 void BookmarkListDialog::on_buttonBox_accepted()
133 {
134 
135 }
136 
on_buttonBox_rejected()137 void BookmarkListDialog::on_buttonBox_rejected()
138 {
139 
140 }
141 
on_tableWidget_customContextMenuRequested(QPoint pos)142 void BookmarkListDialog::on_tableWidget_customContextMenuRequested(QPoint pos)
143 {
144     QMenu *menu = new QMenu;
145     CRBookmark * bm = selectedBookmark();
146     if ( bm != NULL ) {
147         menu->addAction(m_ui->actionGoToBookmark);
148         menu->addAction(m_ui->actionEdit_Bookmark);
149         menu->addAction(m_ui->actionRemoveBookmark);
150     }
151     if ( _list.length()>0 )
152         menu->addAction(m_ui->actionRemoveALLBookmarks);
153     menu->addAction(m_ui->actionClose);
154     menu->exec(mapToGlobal(pos));
155 }
156 
selectedBookmark()157 CRBookmark * BookmarkListDialog::selectedBookmark()
158 {
159     int index = m_ui->tableWidget->currentRow();
160     if ( index<0 || index>=_list.length() || index>=m_ui->tableWidget->rowCount() )
161         return NULL;
162     return _list[index];
163 }
164 
on_actionGoToBookmark_triggered()165 void BookmarkListDialog::on_actionGoToBookmark_triggered()
166 {
167     CRBookmark * bm = selectedBookmark();
168     if ( bm ) {
169         //_docview->goToXPointer( cr2qt(bm->getStartPos()) );
170         _docview->goToBookmark( bm );
171     }
172     close();
173 }
174 
on_actionRemoveBookmark_triggered()175 void BookmarkListDialog::on_actionRemoveBookmark_triggered()
176 {
177     CRBookmark * bm = selectedBookmark();
178     if ( bm ) {
179         int index = m_ui->tableWidget->currentRow();
180         m_ui->tableWidget->removeRow( index );
181         _list.removeAt( index );
182         _docview->getDocView()->removeBookmark( bm );
183     }
184 }
185 
on_actionRemoveALLBookmarks_triggered()186 void BookmarkListDialog::on_actionRemoveALLBookmarks_triggered()
187 {
188 
189 }
190 
on_actionEdit_Bookmark_triggered()191 void BookmarkListDialog::on_actionEdit_Bookmark_triggered()
192 {
193     CRBookmark * bm = selectedBookmark();
194     if ( bm ) {
195         _docview->goToBookmark( bm );
196         AddBookmarkDialog::editBookmark( parentWidget(), _docview, bm );
197         close();
198     }
199 }
200 
on_actionClose_triggered()201 void BookmarkListDialog::on_actionClose_triggered()
202 {
203     close();
204 }
205 
on_tableWidget_doubleClicked(QModelIndex index)206 void BookmarkListDialog::on_tableWidget_doubleClicked(QModelIndex index)
207 {
208     on_actionGoToBookmark_triggered();
209 }
210