static void display_chunks(ByteStream & out_str, IFFByteStream &iff, const GUTF8String &head, DjVmInfo djvminfo) { size_t size; GUTF8String id, fullid; GUTF8String head2 = head + " "; GPMap<int,DjVmDir::File> djvmmap; int rawoffset; GMap<GUTF8String, int> counters; while ((size = iff.get_chunk(id, &rawoffset))) { if (!counters.contains(id)) counters[id]=0; else counters[id]++; GUTF8String msg; msg.format("%s%s [%d] ", (const char *)head, (const char *)id, size); out_str.format( "%s", (const char *)msg); // Display DJVM is when adequate if (djvminfo.dir) { GP<DjVmDir::File> rec = djvminfo.map[rawoffset]; if (rec) { GUTF8String id = rec->get_load_name(); GUTF8String title = rec->get_title(); out_str.format( "{%s}", (const char*) id); if (rec->is_include()) out_str.format(" [I]"); if (rec->is_thumbnails()) out_str.format(" [T]"); if (rec->is_shared_anno()) out_str.format(" [S]"); if (rec->is_page()) out_str.format(" [P%d]", rec->get_page_num()+1); if (id != title) out_str.format(" (%s)", (const char*)title); } } // Test chunk type iff.full_id(fullid); for (int i=0; disproutines[i].id; i++) if (fullid == disproutines[i].id || id == disproutines[i].id) { int n = msg.length(); while (n++ < 14+(int) head.length()) putchar(out_str, ' '); if (!iff.composite()) out_str.format( " "); (*disproutines[i].subr)(out_str, iff, head2, size, djvminfo, counters[id]); break; } // Default display of composite chunk out_str.format( "\n"); if (iff.composite()) display_chunks(out_str, iff, head2, djvminfo); // Terminate iff.close_chunk(); } }
QDNavGotoPage::QDNavGotoPage(GP<DjVuDocument> &doc, DjVuImage * dimg, QWidget * parent, const char * name) : QeDialog(parent, name, TRUE) { setCaption(tr("DjVu: Goto Page")); QWidget * start=startWidget(); // Create the menu QVBoxLayout * vlay=new QVBoxLayout(start, 10, 10); QHBoxLayout * hlay=new QHBoxLayout(10); vlay->addLayout(hlay); QLabel * label=new QLabel(tr("Goto page"), start, "goto_label"); hlay->addWidget(label); menu=new QComboBox(FALSE, start, "goto_menu"); menu->setInsertionPolicy(QComboBox::NoInsertion); hlay->addWidget(menu); // Create the buttons hlay=new QHBoxLayout(10); vlay->addLayout(hlay); hlay->addStretch(1); QPushButton * ok_butt=new QPushButton(tr("&OK"), start, "ok_butt"); ok_butt->setDefault(TRUE); hlay->addWidget(ok_butt); QPushButton * cancel_butt=new QPushButton(tr("&Cancel"), start, "cancel_butt"); hlay->addWidget(cancel_butt); // Set menu contents int pagenum = 0; int cur_page = doc->url_to_page(dimg->get_djvu_file()->get_url()); GPList<DjVmDir::File> lst = doc->get_djvm_dir()->get_files_list(); for (GPosition p=lst; p; ++p) { char buffer[64]; GP<DjVmDir::File> f = lst[p]; if (!f->is_page()) continue; ++pagenum; GNativeString id = f->get_load_name(); GNativeString title = f->get_title(); if (title != id) { menu->insertItem(QStringFromGString(title)); } else { sprintf(buffer, "%d", pagenum); menu->insertItem(buffer); } } menu->setCurrentItem(cur_page); // Connect signals connect(ok_butt, SIGNAL(clicked(void)), this, SLOT(accept(void))); connect(cancel_butt, SIGNAL(clicked(void)), this, SLOT(reject(void))); }