BOOL CSAPrefsDialog::OnInitDialog() { CDialog::OnInitDialog(); long l = GetWindowLong(m_pageTree.m_hWnd, GWL_STYLE); #if (_MSC_VER > 1100) l = l | TVS_TRACKSELECT ; #else //#define TVS_TRACKSELECT 0x0200 l = l | 0x0200; #endif SetWindowLong(m_pageTree.m_hWnd, GWL_STYLE, l); // where will the dlgs live? m_boundingFrame.GetWindowRect(m_frameRect); ScreenToClient(m_frameRect); m_frameRect.DeflateRect(2,2); SetWindowText(m_csTitle); // set some styles for the pretty page indicator bar m_captionBar.m_textClr = ::GetSysColor(COLOR_3DFACE); m_captionBar.m_fontWeight = FW_BOLD; m_captionBar.m_fontSize = 14; m_captionBar.m_csFontName = "Verdana"; m_captionBar.SetConstantText(m_csConstantText); // fill the tree. we'll create the pages as we need them for (int i=0;i<m_pages.GetSize();i++) { pageStruct *pPS = (pageStruct *)m_pages.GetAt(i); ASSERT(pPS); ASSERT(pPS->pDlg); if (pPS) { TV_INSERTSTRUCT tvi; // find this node's parent... tvi.hParent = FindHTREEItemForDlg(pPS->pDlgParent); tvi.hInsertAfter = TVI_LAST; tvi.item.cchTextMax = 0; tvi.item.pszText = LPSTR_TEXTCALLBACK; tvi.item.lParam = (LPARAM) pPS; tvi.item.mask = TVIF_PARAM | TVIF_TEXT; HTREEITEM hTree = m_pageTree.InsertItem(&tvi); // keep track of the dlg's we've added (for parent selection) if (hTree) { UINT_PTR uipTree = (UINT_PTR) hTree; m_dlgMap.SetAt(pPS->pDlg, uipTree); } } } // start with page 0 if (m_pStartPage==NULL) { if (ShowPage(0)) { m_iCurPage = 0; } } else { // find start page for (int i=0;i<m_pages.GetSize();i++) { pageStruct *pPS = (pageStruct *)m_pages.GetAt(i); ASSERT(pPS); if (pPS) { ASSERT(pPS->pDlg); if (pPS->pDlg == m_pStartPage) { ShowPage(i); m_iCurPage = i; break; } } } } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
void EbookController::HandleMobiLayoutMsg(EbookFormattingData *ld) { if (formattingThreadNo != ld->threadNo) { // this is a message from cancelled thread, we can disregard //lf("EbookController::MobiLayout() thread msg discarded, curr thread: %d, sending thread: %d", layoutThreadNo, ld->threadNo); return; } //lf("EbookController::HandleMobiLayoutMsg() %d pages, ld=0x%x", ld->pageCount, (int)ld); HtmlPage *pageToShow = NULL; if (!ld->fromBeginning) { // if this is the first page sent, we're currently showing a page // formatted for old window size. Replace that page with new page if (0 == formattingTemp.pagesFromPage.Count()) { CrashIf(0 == ld->pageCount); pageToShow = ld->pages[0]; } formattingTemp.pagesFromPage.Append(ld->pages, ld->pageCount); if (pageToShow) { CrashIf(pageToShow->reparseIdx != pageShown->reparseIdx); ShowPage(pageToShow, false); } //lf("Got %d pages from page, total %d", ld->pageCount, formattingTemp.pagesFromPage.Count()); //UpdateStatus(); return; } // we're showing pages from the beginning if (-1 != startReparseIdx) { // we're formatting a book for which we need to restore // page from previous session CrashIf(formattingTemp.reparseIdx != 0); for (size_t i = 0; i < ld->pageCount; i++) { HtmlPage *pd = ld->pages[i]; if (pd->reparseIdx == startReparseIdx) { pageToShow = pd; } else if (pd->reparseIdx >= startReparseIdx) { // this is the first page whose reparseIdx is greater than // the one we're looking for, so previous page has the data if (i > 0) { pageToShow = ld->pages[i]; //lf("showing page %d", i); } else { if (0 == formattingTemp.pagesFromBeginning.Count()) { pageToShow = ld->pages[0]; } else { size_t pageNo = formattingTemp.pagesFromBeginning.Count() - 1; //lf("showing page %d from formattingTemp.pagesFromBeginning", (int)pageNo); pageToShow = formattingTemp.pagesFromBeginning.At(pageNo); } } } if (pageToShow) { startReparseIdx = -1; break; } } } else { if (0 == formattingTemp.pagesFromBeginning.Count()) { CrashIf(0 == ld->pageCount); pageToShow = ld->pages[0]; //lf("showing ld->pages[0], pageCount = %d", ld->pageCount); } } formattingTemp.pagesFromBeginning.Append(ld->pages, ld->pageCount); //lf("Got %d pages from beginning, total %d", ld->pageCount, formattingTemp.pagesFromBeginning.Count()); if (0 == formattingTemp.reparseIdx) { // if we're starting from the beginning, show the first page as // quickly as we can if (pageToShow) ShowPage(pageToShow, false); } if (ld->finished) { CrashIf(pagesFromBeginning || pagesFromPage); pagesFromBeginning = new Vec<HtmlPage*>(); HtmlPage **pages = formattingTemp.pagesFromBeginning.LendData(); size_t pageCount = formattingTemp.pagesFromBeginning.Count(); pagesFromBeginning->Append(pages, pageCount); formattingTemp.pagesFromBeginning.Reset(); pageCount = formattingTemp.pagesFromPage.Count(); if (pageCount > 0) { pages = formattingTemp.pagesFromPage.LendData(); pagesFromPage = new Vec<HtmlPage*>(); pagesFromPage->Append(pages, pageCount); formattingTemp.pagesFromPage.Reset(); } StopFormattingThread(false); } UpdateStatus(); }