Changeset 157
- Timestamp:
- 05/09/06 13:07:25 (2 years ago)
- Files:
-
- trunk/src/FindPter.cxx (modified) (2 diffs)
- trunk/src/FindPter.h (modified) (1 diff)
- trunk/src/JobFind.cxx (modified) (8 diffs)
- trunk/src/JobFind.h (modified) (4 diffs)
- trunk/src/epdfview.h (modified) (2 diffs)
- trunk/tests/FindPterTest.cxx (modified) (7 diffs)
- trunk/tests/FindPterTest.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/FindPter.cxx
r156 r157 65 65 else 66 66 { 67 if ( FIND_DIRECTION_BACKWARDS == m_Job->getDirection () ) 68 { 69 m_Job->setCurrentPage (m_Job->getCurrentPage () + 2); 70 } 71 m_Job->setDirection (FIND_DIRECTION_FORWARDS); 72 IJob::queue (m_Job); 73 } 74 } 75 76 /// 77 /// @brief The Find Previous button has been clicked. 78 /// 79 void 80 FindPter::findPreviousActivated () 81 { 82 m_CurrentMatch = g_list_previous (m_CurrentMatch); 83 if ( NULL != m_CurrentMatch ) 84 { 85 DocumentRectangle *rect = ((DocumentRectangle *)m_CurrentMatch->data); 86 m_Document->goToPage (m_FindPage); 87 m_Document->notifyFindChanged (rect); 88 } 89 else 90 { 91 if ( FIND_DIRECTION_FORWARDS == m_Job->getDirection () ) 92 { 93 m_Job->setCurrentPage (m_Job->getCurrentPage () - 2); 94 } 95 m_Job->setDirection (FIND_DIRECTION_BACKWARDS); 67 96 IJob::queue (m_Job); 68 97 } … … 98 127 FindPter::notifyFindFinished (void) 99 128 { 100 m_Job->cancel (); 101 m_Job = NULL; 102 m_View->setInformationText (_("Not Found!")); 103 m_Document->notifyFindFinished (); 104 } 105 106 void 107 FindPter::notifyFindResults (gint pageNum, GList *results) 129 if ( NULL == m_FindResults ) 130 { 131 m_Job->cancel (); 132 m_Job = NULL; 133 m_View->setInformationText (_("Not Found!")); 134 m_Document->notifyFindFinished (); 135 } 136 else 137 { 138 gchar *infoText = g_strdup_printf (_("Searching in page %d of %d..."), 139 m_Job->getCurrentPage (), 140 m_Document->getNumPages ()); 141 m_View->setInformationText (infoText); 142 g_free (infoText); 143 } 144 } 145 146 void 147 FindPter::notifyFindResults (gint pageNum, GList *results, 148 FindDirection direction) 108 149 { 109 150 m_FindPage = pageNum; 110 151 freeFindResults (); 111 152 m_FindResults = results; 112 m_CurrentMatch = g_list_first (m_FindResults); 153 if ( FIND_DIRECTION_FORWARDS == direction ) 154 { 155 m_CurrentMatch = g_list_first (m_FindResults); 156 } 157 else 158 { 159 m_CurrentMatch = g_list_last (m_FindResults); 160 } 113 161 m_Document->goToPage (m_FindPage); 114 162 DocumentRectangle *rect = (DocumentRectangle *)m_CurrentMatch->data; trunk/src/FindPter.h
r156 r157 38 38 39 39 void findNextActivated (void); 40 void findPreviousActivated (void); 40 41 IFindView &getView (void); 41 42 void notifyFindFinished (void); 42 void notifyFindResults (gint pageNum, GList *results); 43 void notifyFindResults (gint pageNum, GList *results, 44 FindDirection direction); 43 45 void setView (IFindView *view); 44 46 void textToFindChanged (void); trunk/src/JobFind.cxx
r156 r157 30 30 m_Canceled = FALSE; 31 31 m_CurrentPage = 0; 32 m_Direction = FIND_DIRECTION_FORWARDS; 32 33 m_Document = NULL; 33 34 m_FindPter = NULL; … … 57 58 } 58 59 60 FindDirection 61 JobFind::getDirection () 62 { 63 return m_Direction; 64 } 65 59 66 IDocument * 60 JobFind::getDocument ( void)67 JobFind::getDocument () 61 68 { 62 69 return m_Document; … … 64 71 65 72 FindPter * 66 JobFind::getFindPter ( void)73 JobFind::getFindPter () 67 74 { 68 75 return m_FindPter; … … 82 89 83 90 gint 84 JobFind::getStartingPage ( void)91 JobFind::getStartingPage () 85 92 { 86 93 return m_StartingPage; … … 112 119 GList *result = getDocument ()->findTextInPage (currentPage, 113 120 getTextToFind ()); 114 gint nextPage = currentPage + 1;115 if ( nextPage > getDocument ()->getNumPages() )116 { 117 nextPage = 1;121 122 if ( FIND_DIRECTION_FORWARDS == getDirection () ) 123 { 124 setCurrentPage (currentPage + 1); 118 125 } 119 120 setCurrentPage (nextPage); 126 else 127 { 128 setCurrentPage (currentPage - 1); 129 } 121 130 122 131 if ( NULL != result ) … … 127 136 else 128 137 { 129 if ( getStartingPage () == nextPage)138 if ( getStartingPage () == getCurrentPage () ) 130 139 { 131 140 JOB_NOTIFIER (job_find_end, this); … … 143 152 { 144 153 m_CurrentPage = pageNum; 154 155 gint numPages = m_Document->getNumPages (); 156 if ( m_CurrentPage > numPages ) 157 { 158 m_CurrentPage = 1; 159 } 160 else if ( 1 > m_CurrentPage ) 161 { 162 m_CurrentPage = numPages; 163 } 164 } 165 166 void 167 JobFind::setDirection (FindDirection direction) 168 { 169 m_Direction = direction; 145 170 } 146 171 … … 207 232 JobFind *job = (JobFind *)data; 208 233 job->getFindPter ()->notifyFindResults (job->getResultsPage (), 209 job->getResults ()); 234 job->getResults (), 235 job->getDirection ()); 210 236 211 237 JOB_NOTIFIER_END (); trunk/src/JobFind.h
r156 r157 21 21 namespace ePDFView 22 22 { 23 // Forward declarations. 24 class FindPter; 25 26 /// 27 /// @brief The search direction. 28 /// 29 typedef enum 30 { 31 /// Search forwards. 32 FIND_DIRECTION_FORWARDS, 33 /// Search backwards. 34 FIND_DIRECTION_BACKWARDS 35 } FindDirection; 36 23 37 class JobFind: public IJob 24 38 { … … 29 43 void cancel (void); 30 44 gint getCurrentPage (void); 45 FindDirection getDirection (void); 31 46 IDocument *getDocument (void); 32 47 FindPter *getFindPter (void); … … 38 53 gboolean run (void); 39 54 void setCurrentPage (gint pageNum); 55 void setDirection (FindDirection direction); 40 56 void setDocument (IDocument *document); 41 57 void setFindPter (FindPter *pter); … … 47 63 gboolean m_Canceled; 48 64 gint m_CurrentPage; 65 FindDirection m_Direction; 49 66 IDocument *m_Document; 50 67 FindPter *m_FindPter; trunk/src/epdfview.h
r155 r157 32 32 #include <PDFDocument.h> 33 33 34 #include <IJob.h> 35 #include <JobFind.h> 36 #include <JobLoad.h> 37 #include <JobRender.h> 38 34 39 #include <IFindView.h> 35 40 #include <IPageView.h> … … 39 44 #include <MainPter.h> 40 45 41 #include <IJob.h>42 #include <JobFind.h>43 #include <JobLoad.h>44 #include <JobRender.h>45 46 46 #endif //!__E_PDF_VIEW_H__ trunk/tests/FindPterTest.cxx
r156 r157 120 120 FindPterTest::findNext () 121 121 { 122 m_View->setTextToFind ("first"); 123 while ( m_Observer->isStillSearching () ) { } 122 m_View->setTextToFind ("first"); 123 volatile gboolean stillSearching = TRUE; 124 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 124 125 125 126 // The 'first' text appears twice in page 4 and also twice in … … 137 138 m_Observer->notifyFindStarted (); 138 139 m_FindPter->findNextActivated (); 139 while ( m_Observer->isStillSearching () ) { } 140 stillSearching = TRUE; 141 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 140 142 CPPUNIT_ASSERT_EQUAL (4, m_Observer->getCurrentPage ()); 141 143 { … … 147 149 CPPUNIT_ASSERT_DOUBLES_EQUAL (157.1100, rect->getY2 (), 0.0001); 148 150 } 149 150 m_Observer->notifyFindStarted (); 151 m_FindPter->findNextActivated (); 152 while ( m_Observer->isStillSearching () ) { } 151 152 m_Observer->notifyFindStarted (); 153 m_FindPter->findNextActivated (); 154 stillSearching = TRUE; 155 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 153 156 CPPUNIT_ASSERT_EQUAL (5, m_Observer->getCurrentPage ()); 154 157 { … … 163 166 m_Observer->notifyFindStarted (); 164 167 m_FindPter->findNextActivated (); 165 while ( m_Observer->isStillSearching () ) { } 168 stillSearching = TRUE; 169 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 166 170 CPPUNIT_ASSERT_EQUAL (5, m_Observer->getCurrentPage ()); 167 171 { … … 176 180 m_Observer->notifyFindStarted (); 177 181 m_FindPter->findNextActivated (); 178 while ( m_Observer->isStillSearching () ) { } 182 stillSearching = TRUE; 183 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 179 184 CPPUNIT_ASSERT_EQUAL (5, m_Observer->getCurrentPage ()); 180 185 { … … 190 195 m_Observer->notifyFindStarted (); 191 196 m_FindPter->findNextActivated (); 192 while ( m_Observer->isStillSearching () ) { } 197 stillSearching = TRUE; 198 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 193 199 CPPUNIT_ASSERT_EQUAL (4, m_Observer->getCurrentPage ()); 194 200 { … … 201 207 } 202 208 } 209 210 /// 211 /// @brief Tests the Find Previous button. 212 /// 213 /// When a search starts it tried to find the next text in the document. 214 /// If the user presses the Find Previous button, it will try to find the 215 /// previous found text in the document, searching backwards. 216 /// 217 void 218 FindPterTest::findPrevious () 219 { 220 m_View->setTextToFind ("first"); 221 volatile gboolean stillSearching = TRUE; 222 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 223 224 // The 'first' text appears twice in page 4 and also twice in 225 // page 5. So the first time it will set a rect on page 4. 226 CPPUNIT_ASSERT_EQUAL (4, m_Observer->getCurrentPage ()); 227 { 228 DocumentRectangle *rect = m_Observer->getFindMatchRect (); 229 CPPUNIT_ASSERT (NULL != rect); 230 CPPUNIT_ASSERT_DOUBLES_EQUAL (82.0000, rect->getX1 (), 0.0001); 231 CPPUNIT_ASSERT_DOUBLES_EQUAL (137.1100, rect->getY1 (), 0.0001); 232 CPPUNIT_ASSERT_DOUBLES_EQUAL (100.3400, rect->getX2 (), 0.0001); 233 CPPUNIT_ASSERT_DOUBLES_EQUAL (146.1100, rect->getY2 (), 0.0001); 234 } 235 236 m_Observer->notifyFindStarted (); 237 m_FindPter->findPreviousActivated (); 238 stillSearching = TRUE; 239 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 240 CPPUNIT_ASSERT_EQUAL (5, m_Observer->getCurrentPage ()); 241 { 242 DocumentRectangle *rect = m_Observer->getFindMatchRect (); 243 CPPUNIT_ASSERT (NULL != rect); 244 CPPUNIT_ASSERT_DOUBLES_EQUAL (72.0000, rect->getX1 (), 0.0001); 245 CPPUNIT_ASSERT_DOUBLES_EQUAL (143.1745, rect->getY1 (), 0.0001); 246 CPPUNIT_ASSERT_DOUBLES_EQUAL (116.9349, rect->getX2 (), 0.0001); 247 CPPUNIT_ASSERT_DOUBLES_EQUAL (162.3553, rect->getY2 (), 0.0001); 248 } 249 250 m_Observer->notifyFindStarted (); 251 m_FindPter->findPreviousActivated (); 252 stillSearching = TRUE; 253 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 254 CPPUNIT_ASSERT_EQUAL (5, m_Observer->getCurrentPage ()); 255 { 256 DocumentRectangle *rect = m_Observer->getFindMatchRect (); 257 CPPUNIT_ASSERT (NULL != rect); 258 CPPUNIT_ASSERT_DOUBLES_EQUAL (164.1700, rect->getX1 (), 0.0001); 259 CPPUNIT_ASSERT_DOUBLES_EQUAL (121.1020, rect->getY1 (), 0.0001); 260 CPPUNIT_ASSERT_DOUBLES_EQUAL (180.2800, rect->getX2 (), 0.0001); 261 CPPUNIT_ASSERT_DOUBLES_EQUAL (130.1020, rect->getY2 (), 0.0001); 262 } 263 264 m_Observer->notifyFindStarted (); 265 m_FindPter->findPreviousActivated (); 266 stillSearching = TRUE; 267 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 268 CPPUNIT_ASSERT_EQUAL (5, m_Observer->getCurrentPage ()); 269 { 270 DocumentRectangle *rect = m_Observer->getFindMatchRect (); 271 CPPUNIT_ASSERT (NULL != rect); 272 CPPUNIT_ASSERT_DOUBLES_EQUAL (200.5943, rect->getX1 (), 0.0001); 273 CPPUNIT_ASSERT_DOUBLES_EQUAL (84.5980, rect->getY1 (), 0.0001); 274 CPPUNIT_ASSERT_DOUBLES_EQUAL (254.5158, rect->getX2 (), 0.0001); 275 CPPUNIT_ASSERT_DOUBLES_EQUAL (107.6147, rect->getY2 (), 0.0001); 276 } 277 278 m_Observer->notifyFindStarted (); 279 m_FindPter->findPreviousActivated (); 280 stillSearching = TRUE; 281 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 282 CPPUNIT_ASSERT_EQUAL (4, m_Observer->getCurrentPage ()); 283 { 284 DocumentRectangle *rect = m_Observer->getFindMatchRect (); 285 CPPUNIT_ASSERT (NULL != rect); 286 CPPUNIT_ASSERT_DOUBLES_EQUAL (96.0000, rect->getX1 (), 0.0001); 287 CPPUNIT_ASSERT_DOUBLES_EQUAL (148.1100, rect->getY1 (), 0.0001); 288 CPPUNIT_ASSERT_DOUBLES_EQUAL (114.3400, rect->getX2 (), 0.0001); 289 CPPUNIT_ASSERT_DOUBLES_EQUAL (157.1100, rect->getY2 (), 0.0001); 290 } 291 292 m_Observer->notifyFindStarted (); 293 m_FindPter->findNextActivated (); 294 stillSearching = TRUE; 295 while ( stillSearching ) {stillSearching = m_Observer->isStillSearching ();} 296 CPPUNIT_ASSERT_EQUAL (5, m_Observer->getCurrentPage ()); 297 { 298 DocumentRectangle *rect = m_Observer->getFindMatchRect (); 299 CPPUNIT_ASSERT (NULL != rect); 300 CPPUNIT_ASSERT_DOUBLES_EQUAL (200.5943, rect->getX1 (), 0.0001); 301 CPPUNIT_ASSERT_DOUBLES_EQUAL (84.5980, rect->getY1 (), 0.0001); 302 CPPUNIT_ASSERT_DOUBLES_EQUAL (254.5158, rect->getX2 (), 0.0001); 303 CPPUNIT_ASSERT_DOUBLES_EQUAL (107.6147, rect->getY2 (), 0.0001); 304 } 305 } trunk/tests/FindPterTest.h
r156 r157 29 29 CPPUNIT_TEST (textDoesNotExist); 30 30 CPPUNIT_TEST (findNext); 31 CPPUNIT_TEST (findPrevious); 31 32 CPPUNIT_TEST_SUITE_END (); 32 33 … … 38 39 void textDoesNotExist (void); 39 40 void findNext (void); 41 void findPrevious (void); 40 42 41 43 private:
