Changeset 7cfad2e713662f0eeea22b5c5d19c6a9596c4413
- Timestamp:
- 10/25/09 14:24:51 (4 years ago)
- Author:
- Benjamin Herr <ben@…>
- git-author:
- Benjamin Herr <ben@0x539.de> / 2009-01-16T21:27:01Z+0100
- Parents:
- ded2b4e54b49492e039d814453f12549e56ad518
- Children:
- 63ca8047cee68d8fa40d41e4a02e1c38aad3726a
- git-committer:
- Benjamin Herr <ben@0x539.de> / 2009-10-25T14:24:51Z+0100
- Message:
-
htmlexport: added "written by" tooltips, fixed (validation) warnings
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
rded2b4e
|
r7cfad2e
|
|
| 226 | 226 | #include <ctime> |
| 227 | 227 | #include <cstring> |
| | 228 | #include <cmath> |
| 228 | 229 | |
| 229 | 230 | #include <gtkmm/textbuffer.h> |
| … |
… |
|
| 242 | 243 | line_counter = 0; |
| 243 | 244 | xmlpp::Element* last_node = content; |
| 244 | | last_node->add_child("div")->set_attribute("class", "line_no"); |
| 245 | | |
| 246 | | //Glib::RefPtr<Gtk::TextBuffer> buffer( |
| 247 | | // Glib::wrap( |
| | 245 | last_node->add_child("span")->set_attribute("class", "line_no"); |
| | 246 | |
| 248 | 247 | GtkTextBuffer* buffer = GTK_TEXT_BUFFER(document.get_text_buffer()); |
| 249 | 248 | InfTextGtkBuffer* inf_buffer |
| … |
… |
|
| 251 | 250 | inf_session_get_buffer(INF_SESSION(document.get_session()))); |
| 252 | 251 | |
| 253 | | guint user_id; |
| 254 | | bool user_active = false; |
| | 252 | InfTextUser* user = 0; |
| 255 | 253 | |
| 256 | 254 | GtkTextIter begin; |
| … |
… |
|
| 260 | 258 | return; |
| 261 | 259 | |
| 262 | | // TODO: I just made this use the Gtk+ API instead of Gtkmm at like 2 am, |
| 263 | | // surely there are a bunch of segfaults/memleaks lurking |
| 264 | 260 | for (;;) { |
| 265 | 261 | GtkTextIter next = begin; |
| … |
… |
|
| 282 | 278 | |
| 283 | 279 | // drop author <span/> for a moment for the line number <span/> |
| 284 | | if (user_active) |
| | 280 | if (user) |
| 285 | 281 | last_node = last_node->get_parent(); |
| 286 | 282 | last_node |
| 287 | | ->add_child("div") |
| | 283 | ->add_child("span") |
| 288 | 284 | ->set_attribute("class", "line_no"); |
| 289 | | if (user_active) { |
| | 285 | if (user) { |
| 290 | 286 | last_node = last_node->add_child("span"); |
| 291 | 287 | last_node->set_attribute( |
| 292 | 288 | "class", |
| 293 | | Glib::ustring::compose("user_%1", user_id)); |
| | 289 | Glib::ustring::compose("user_%1", |
| | 290 | inf_user_get_id(INF_USER(user)))); |
| | 291 | last_node->set_attribute( |
| | 292 | "title", |
| | 293 | Glib::ustring::compose(_("written by: %1"), |
| | 294 | inf_user_get_name(INF_USER(user)))); |
| 294 | 295 | } |
| 295 | 296 | } |
| … |
… |
|
| 307 | 308 | |
| 308 | 309 | // check author, insert new <span/> if necessary |
| 309 | | InfTextUser* user |
| | 310 | InfTextUser* new_user |
| 310 | 311 | = inf_text_gtk_buffer_get_author(inf_buffer, &next); |
| 311 | 312 | |
| 312 | | if (user) { |
| 313 | | guint new_id = inf_user_get_id(INF_USER(user)); |
| 314 | | if (!user_active || new_id != user_id) { |
| 315 | | if (user_active) |
| | 313 | if (new_user) { |
| | 314 | guint new_id = inf_user_get_id(INF_USER(new_user)); |
| | 315 | if (!user || user != new_user) { |
| | 316 | if (user) |
| 316 | 317 | last_node = last_node->get_parent(); |
| 317 | 318 | |
| … |
… |
|
| 320 | 321 | "class", |
| 321 | 322 | Glib::ustring::compose("user_%1", new_id)); |
| | 323 | last_node->set_attribute( |
| | 324 | "title", |
| | 325 | Glib::ustring::compose(_("written by: %1"), |
| | 326 | inf_user_get_name(INF_USER(new_user)))); |
| 322 | 327 | } |
| 323 | 328 | |
| 324 | | user_id = new_id; |
| 325 | | user_active = true; |
| | 329 | user = new_user; |
| 326 | 330 | users.insert(user); |
| 327 | 331 | } else { |
| 328 | | if (user_active) |
| | 332 | if (user) |
| 329 | 333 | last_node = last_node->get_parent(); |
| 330 | | user_active = false; |
| | 334 | user = 0; |
| 331 | 335 | } |
| 332 | 336 | } |
| … |
… |
|
| 381 | 385 | guint id = inf_user_get_id(INF_USER(*i)); |
| 382 | 386 | gdouble hue = inf_text_user_get_hue(*i); |
| 383 | | if (hue == 1) |
| 384 | | hue = 0; |
| | 387 | hue = std::fmod(hue, 1); |
| 385 | 388 | |
| 386 | 389 | Gdk::Color c; |
| 387 | 390 | c.set_hsv(360.0 * hue, 0.35, 1.0); |
| 388 | 391 | gchar const* name = inf_user_get_name(INF_USER(*i)); |
| 389 | | // TODO: figure out if we can get "written by <name>" tooltips easily |
| 390 | 392 | unsigned int rgb = |
| 391 | 393 | ((c.get_red() & 0xff00) << 8) |
| … |
… |
|
| 411 | 413 | void export_html(DocWindow& document, const Glib::ustring& output_path) { |
| 412 | 414 | xmlpp::Document output; |
| | 415 | |
| | 416 | output.set_internal_subset("html", |
| | 417 | "-//W3C//DTD XHTML 1.1//EN", |
| | 418 | "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"); |
| | 419 | |
| 413 | 420 | xmlpp::Element |
| 414 | 421 | * root = output.create_root_node("html", "http://www.w3.org/1999/xhtml"), |
| … |
… |
|
| 478 | 485 | static_cast<unsigned int>(std::log(line_counter)/std::log(10))+1)); |
| 479 | 486 | |
| 480 | | output.write_to_file(output_path); |
| | 487 | output.write_to_file(output_path, "utf-8"); |
| 481 | 488 | } |
| 482 | 489 | |