Changeset 185
- Timestamp:
- 03/25/09 21:45:00 (3 years ago)
- Location:
- branches/message_tree
- Files:
-
- 3 edited
-
message_tree.cpp (modified) (3 diffs)
-
message_tree.h (modified) (1 diff)
-
version.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/message_tree/message_tree.cpp
r184 r185 8 8 //---------------------------------------------------------------------------------------------- 9 9 #include "global.h" 10 #include "form_source.h" 10 11 #include "icon_effect.h" 12 #include "form_message.h" 13 #include "form_moderate.h" 11 14 #include "tree_widget_item.h" 12 15 #include "storage/storage_factory.h" … … 233 236 void AMessageTree::context_menu_request (const QPoint& pos) 234 237 { 238 if (currentItem() != NULL) 239 { 240 if (m_current_forum.IDGroup != SPECIAL_ID_GROUP) 241 m_menu->exec(viewport()->mapToGlobal(pos)); 242 else 243 { 244 if (m_current_forum.ID == SPECIAL_ID_FORUM_MESSAGE2SEND || 245 m_current_forum.ID == SPECIAL_ID_FORUM_MODERATE2SEND) 246 { 247 m_menu_special_edit->setVisible(true); 248 249 bool rate_visible = false; 250 251 m_menu_special_plus_1->setVisible(rate_visible); 252 m_menu_special_1->setVisible(rate_visible); 253 m_menu_special_2->setVisible(rate_visible); 254 m_menu_special_3->setVisible(rate_visible); 255 m_menu_special_smile->setVisible(rate_visible); 256 m_menu_special_plus->setVisible(rate_visible); 257 m_menu_special_minus->setVisible(rate_visible); 258 } 259 else 260 { 261 m_menu_special_edit->setVisible(false); 262 263 bool rate_visible = true; 264 265 m_menu_special_plus_1->setVisible(rate_visible); 266 m_menu_special_1->setVisible(rate_visible); 267 m_menu_special_2->setVisible(rate_visible); 268 m_menu_special_3->setVisible(rate_visible); 269 m_menu_special_smile->setVisible(rate_visible); 270 m_menu_special_plus->setVisible(rate_visible); 271 m_menu_special_minus->setVisible(rate_visible); 272 } 273 274 m_menu_special->exec(viewport()->mapToGlobal(pos)); 275 } 276 } 235 277 } 236 278 //---------------------------------------------------------------------------------------------- … … 242 284 //---------------------------------------------------------------------------------------------- 243 285 286 void AMessageTree::showSource () 287 { 288 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(currentItem()); 289 290 if (item == NULL) 291 return; 292 293 std::auto_ptr<FormSource> form(new FormSource(m_parent, item->pag()->Message)); 294 295 form->exec(); 296 } 297 //---------------------------------------------------------------------------------------------- 298 299 void AMessageTree::selection_changed () 300 { 301 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(currentItem()); 302 303 if (item == NULL) 304 return; 305 306 AMessageInfoGUI* info = item->pag(); 307 308 if (m_main_form != NULL) 309 m_main_form->setEnabledAction(aaViewSource, true); 310 311 // загрузка тела сообщения, если тело еще не загружено 312 if (info->IsBodyLoaded == false) 313 { 314 // получение хранилища 315 std::auto_ptr<IAStorage> storage(AStorageFactory::getStorage()); 316 317 if (storage.get() == NULL) 318 { 319 QMessageBox::critical(m_parent, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 320 return; 321 } 322 323 // получение доп-информации о сообщении 324 QString body; 325 326 if (storage->getMessageBody(info->ID, body, NULL) == false) 327 { 328 storage->showError(m_parent); 329 return; 330 } 331 332 info->IsBodyLoaded = true; 333 info->Message = body; 334 } 335 336 // отображение сообщения 337 m_message_view->setMessage(*info, m_current_forum.ID == SPECIAL_ID_FORUM_MESSAGE2SEND, m_current_forum.Rated); 338 339 // взвод таймера для пометки как прочитанного 340 if (info->IsRead == false) 341 { 342 int interval = AGlobal::getInstance()->MarkAsReadTimer; 343 344 if (interval > 0) 345 m_timer.start(interval); 346 else 347 m_timer.stop(); 348 } 349 else 350 m_timer.stop(); 351 352 } 353 //---------------------------------------------------------------------------------------------- 354 355 void AMessageTree::processUrl (const QString& url) 356 { 357 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(currentItem()); 358 359 if (item == NULL) 360 return; 361 362 int rate; 363 QString title; 364 QString message; 365 366 // оценки, модерилки 367 if (url == "avalon:rate_plus_1") 368 { 369 rate = -3; 370 title = QString::fromUtf8("Оценка +1"); 371 message = QString::fromUtf8("Поставить оценку +1?"); 372 } 373 else if (url == "avalon:rate_1") 374 { 375 rate = 1; 376 title = QString::fromUtf8("Оценка 1"); 377 message = QString::fromUtf8("Оценить сообщение как интересное?"); 378 } 379 else if (url == "avalon:rate_2") 380 { 381 rate = 2; 382 title = QString::fromUtf8("Оценка 2"); 383 message = QString::fromUtf8("Сказать спасибо за сообщение?"); 384 } 385 else if (url == "avalon:rate_3") 386 { 387 rate = 3; 388 title = QString::fromUtf8("Оценка 3"); 389 message = QString::fromUtf8("Оценить сообщение как супер?"); 390 } 391 else if (url == "avalon:rate_cross") 392 { 393 rate = -1; 394 title = QString::fromUtf8("Удаление оценки"); 395 message = QString::fromUtf8("Вы действительно хотите удалить оценку?"); 396 } 397 else if (url == "avalon:rate_smile") 398 { 399 rate = -2; 400 title = QString::fromUtf8("Оценка :)"); 401 message = QString::fromUtf8("Оценить сообщение как смешное?"); 402 } 403 else if (url == "avalon:rate_plus") 404 { 405 rate = -4; 406 title = QString::fromUtf8("Оценка +"); 407 message = QString::fromUtf8("Согласиться с сообщением?"); 408 } 409 else if (url == "avalon:rate_minus") 410 { 411 rate = 0; 412 title = QString::fromUtf8("Оценка -"); 413 message = QString::fromUtf8("Не согласиться с сообщением?"); 414 } 415 else if (url == "avalon:moderate") 416 { 417 FormModerate* form = new FormModerate(m_parent, item->pag()->ID); 418 419 form->setForumTree(m_forum_tree); 420 421 form->exec(); 422 423 return; 424 } 425 else 426 return; 427 428 if (QMessageBox::question(m_parent, title, message, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) 429 return; 430 431 // получение хранилища 432 std::auto_ptr<IAStorage> storage(AStorageFactory::getStorage()); 433 434 if (storage.get() == NULL) 435 { 436 QMessageBox::critical(m_parent, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 437 return; 438 } 439 440 // подготовка данных 441 ARating2Send info; 442 443 info.IDMessage = item->pag()->ID; 444 info.Rate = rate; 445 info.Date = QDateTime::currentDateTime(); 446 info.ID = info.Date.toTime_t(); // это локальный ID 447 448 // добавление рейтинга 449 if (storage->addRating2Send(info, NULL) == false) 450 { 451 storage->showError(m_parent); 452 return; 453 } 454 455 // обновление в дереве форумов количества непрочитаных сообщений 456 if (m_forum_tree != NULL) 457 m_forum_tree->reloadUnread(false); 458 } 459 //---------------------------------------------------------------------------------------------- 460 461 void AMessageTree::menu_reply_triggered () 462 { 463 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(currentItem()); 464 465 if (item == NULL) 466 return; 467 468 FormMessage* form = new FormMessage(NULL, true, *(item->pag())); 469 470 form->setForumTree(m_forum_tree); 471 form->setMainForm(m_main_form); 472 473 form->show(); 474 } 475 //---------------------------------------------------------------------------------------------- 476 477 void AMessageTree::item_double_clicked (QTreeWidgetItem* item, int /*column*/) 478 { 479 if (item == NULL) 480 return; 481 482 setCurrentItem(item); 483 484 if (!(m_current_forum.ID == SPECIAL_ID_FORUM_MESSAGE2SEND || 485 m_current_forum.ID == SPECIAL_ID_FORUM_RATING2SEND || 486 m_current_forum.ID == SPECIAL_ID_FORUM_MODERATE2SEND 487 )) 488 return; 489 490 menu_special_edit_triggered(); 491 } 492 //---------------------------------------------------------------------------------------------- 493 494 void AMessageTree::menu_special_edit_triggered () 495 { 496 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(currentItem()); 497 498 if (item == NULL) 499 return; 500 501 if (!(m_current_forum.ID == SPECIAL_ID_FORUM_MESSAGE2SEND || 502 m_current_forum.ID == SPECIAL_ID_FORUM_RATING2SEND || 503 m_current_forum.ID == SPECIAL_ID_FORUM_MODERATE2SEND 504 )) 505 return; 506 507 if (m_current_forum.ID == SPECIAL_ID_FORUM_MESSAGE2SEND) 508 { 509 FormMessage* form = new FormMessage(NULL, false, *(item->pag()), item->pag()->Special); 510 511 form->setForumTree(m_forum_tree); 512 form->setMainForm(m_main_form); 513 514 form->show(); 515 } 516 else if (m_current_forum.ID == SPECIAL_ID_FORUM_MODERATE2SEND) 517 { 518 FormModerate* form = new FormModerate(m_parent, item->pag()->ID, item->pag()->Special); 519 520 form->setForumTree(m_forum_tree); 521 522 form->exec(); 523 524 return; 525 } 526 } 527 //---------------------------------------------------------------------------------------------- 528 529 void AMessageTree::menu_special_delete_triggered () 530 { 531 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(currentItem()); 532 533 if (item == NULL) 534 return; 535 536 if (!(m_current_forum.ID == SPECIAL_ID_FORUM_MESSAGE2SEND || 537 m_current_forum.ID == SPECIAL_ID_FORUM_RATING2SEND || 538 m_current_forum.ID == SPECIAL_ID_FORUM_MODERATE2SEND 539 )) 540 return; 541 542 std::auto_ptr<IAStorage> storage(AStorageFactory::getStorage()); 543 544 if (storage.get() == NULL) 545 { 546 QMessageBox::critical(m_parent, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 547 return; 548 } 549 550 if (storage->deleteSpecial(QList<int>() << item->pag()->Special, m_current_forum.ID, NULL) == false) 551 { 552 storage->showError(m_parent); 553 return; 554 } 555 556 // обновление в дереве форумов количества непрочитаных сообщений 557 if (m_forum_tree != NULL) 558 m_forum_tree->reloadUnread(true); 559 } 560 //---------------------------------------------------------------------------------------------- 561 562 void AMessageTree::changeRating (int new_rate) 563 { 564 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(currentItem()); 565 566 if (item == NULL) 567 return; 568 569 if (m_current_forum.ID != SPECIAL_ID_FORUM_RATING2SEND) 570 return; 571 572 std::auto_ptr<IAStorage> storage(AStorageFactory::getStorage()); 573 574 if (storage.get() == NULL) 575 { 576 QMessageBox::critical(m_parent, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 577 return; 578 } 579 580 if (storage->changeRating(item->pag()->Special, new_rate, NULL) == false) 581 { 582 storage->showError(m_parent); 583 return; 584 } 585 586 if (new_rate == -4) 587 item->setIcon(0, m_rating_plus); 588 else if (new_rate == -3) 589 item->setIcon(0, m_rating_plus_1); 590 else if (new_rate == -2) 591 item->setIcon(0, m_rating_smile); 592 else if (new_rate == -1) 593 item->setIcon(0, m_rating_cross); 594 else if (new_rate == 0) 595 item->setIcon(0, m_rating_minus); 596 else if (new_rate == 1) 597 item->setIcon(0, m_rating_1); 598 else if (new_rate == 2) 599 item->setIcon(0, m_rating_2); 600 else if (new_rate == 3) 601 item->setIcon(0, m_rating_3); 602 } 603 //---------------------------------------------------------------------------------------------- 604 605 void AMessageTree::menu_special_plus_1_triggered () 606 { 607 changeRating(-3); 608 } 609 //---------------------------------------------------------------------------------------------- 610 611 void AMessageTree::menu_special_1_triggered () 612 { 613 changeRating(1); 614 } 615 //---------------------------------------------------------------------------------------------- 616 617 void AMessageTree::menu_special_2_triggered () 618 { 619 changeRating(2); 620 } 621 //---------------------------------------------------------------------------------------------- 622 623 void AMessageTree::menu_special_3_triggered () 624 { 625 changeRating(3); 626 } 627 //---------------------------------------------------------------------------------------------- 628 629 void AMessageTree::menu_special_smile_triggered () 630 { 631 changeRating(-2); 632 } 633 //---------------------------------------------------------------------------------------------- 634 635 void AMessageTree::menu_special_plus_triggered () 636 { 637 changeRating(-4); 638 } 639 //---------------------------------------------------------------------------------------------- 640 641 void AMessageTree::menu_special_minus_triggered () 642 { 643 changeRating(0); 644 } 645 //---------------------------------------------------------------------------------------------- 646 647 void AMessageTree::getSelectedPath (QList<int>& path) 648 { 649 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(currentItem()); 650 651 if (item == NULL) 652 return; 653 654 path.insert(0, item->pag()->ID); 655 656 while (true) 657 { 658 item = static_cast<MessageTreeWidgetItem*>(item->parent()); 659 660 if (item != NULL) 661 path.insert(0, item->pag()->ID); 662 else 663 break; 664 } 665 } 666 //---------------------------------------------------------------------------------------------- 667 668 bool AMessageTree::selectByPath (const QList<int>* path) 669 { 670 if (path == NULL || path->count() == 0) 671 return false; 672 673 int root_id = path->at(0); 674 675 MessageTreeWidgetItem* root_item = NULL; 676 677 // поиск в корне 678 for (int i = 0; i < topLevelItemCount(); i++) 679 { 680 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(topLevelItem(i)); 681 682 AMessageInfoGUI* info = item->pag(); 683 684 if (item->pag()->ID == root_id) 685 { 686 root_item = item; 687 688 // переход на корень (и его загрузка, при необходимости) 689 if (info->IsInfoLoaded == false) 690 setCurrentItem(root_item); 691 692 // ... и разворот, если ищется некорневое сообщение 693 if (path->count() > 1 && root_item->isExpanded() == false) 694 root_item->setExpanded(true); 695 696 break; 697 } 698 } 699 700 if (root_item == NULL) 701 return false; 702 703 // поиск в дочерних 704 for (int i = 1; i < path->count(); i++) 705 { 706 bool found = false; 707 708 int next_id = path->at(i); 709 710 for (int j = 0; j < root_item->childCount(); j++) 711 { 712 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(root_item->child(j)); 713 714 if (item->pag()->ID == next_id) 715 { 716 found = true; 717 root_item = item; 718 719 if (i + 1 != path->count() && root_item->isExpanded() == false) 720 root_item->setExpanded(true); 721 722 break; 723 } 724 } 725 726 if (found == false) 727 { 728 setCurrentItem(root_item); 729 730 return false; 731 } 732 } 733 734 setCurrentItem(root_item); 735 736 return true; 737 } 738 //---------------------------------------------------------------------------------------------- 739 740 bool AMessageTree::checkCurrentItem (bool select_first) 741 { 742 if (currentItem() != NULL) 743 return true; 744 745 if (topLevelItemCount() == 0) 746 return false; 747 748 if (select_first == true) 749 setCurrentItem(topLevelItem(0)); 750 else 751 { 752 // последний топик в списке 753 MessageTreeWidgetItem* topic_item = static_cast<MessageTreeWidgetItem*>(topLevelItem(topLevelItemCount() - 1)); 754 755 // если элемент еще не загружен, то загружаем 756 if (topic_item->pag()->IsInfoLoaded == false) 757 setCurrentItem(topic_item); 758 759 // если дочерние элементы еще не загружены, то загружаем 760 if (topic_item->pag()->IsChildLoaded == false) 761 topic_item->setExpanded(true); 762 763 // выделяем последний лист в топике 764 MessageTreeWidgetItem* last_item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::lastLeaf(topic_item)); 765 766 setCurrentItem(last_item); 767 } 768 769 return true; 770 } 771 //---------------------------------------------------------------------------------------------- 772 773 void AMessageTree::gotoNextUnreadArticle () 774 { 775 if (checkCurrentItem() == false) 776 return; 777 NO_COMPILE_THIS!!! 778 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(currentItem()); 779 780 while (true) 781 { 782 AMessageInfoGUI* info = item->pag(); 783 784 if (info->HasUnreadChild != 0) 785 item->setExpanded(true); 786 787 MessageTreeWidgetItem* next_item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::nextItem(item)); 788 789 if (next_item == NULL) 790 item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::firstSibling(ATreeWidgetItem::rootItem(item))); 791 else 792 item = next_item; 793 794 info = item->pag(); 795 796 if (info->IsInfoLoaded == false) 797 item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::firstSibling(ATreeWidgetItem::rootItem(item))); 798 799 if (info->IsRead == false) 800 break; 801 } 802 803 setCurrentItem(item); 804 } 805 //---------------------------------------------------------------------------------------------- 806 807 void AMessageTree::gotoNextUnreadThread () 808 { 809 } 810 //---------------------------------------------------------------------------------------------- 811 812 void AMessageTree::menu_mark_message_as_read_triggered () 813 { 814 } 815 //---------------------------------------------------------------------------------------------- 816 817 void AMessageTree::menu_mark_message_as_unread_triggered () 818 { 819 } 820 //---------------------------------------------------------------------------------------------- 821 822 void AMessageTree::menu_mark_thread_as_read_triggered () 823 { 824 } 825 //---------------------------------------------------------------------------------------------- 826 827 void AMessageTree::menu_mark_thread_as_unread_triggered () 828 { 829 } 830 //---------------------------------------------------------------------------------------------- 831 244 832 void AMessageTree::timer_on_timer () 245 {246 }247 //----------------------------------------------------------------------------------------------248 249 void AMessageTree::showSource ()250 {251 }252 //----------------------------------------------------------------------------------------------253 254 void AMessageTree::selection_changed ()255 {256 }257 //----------------------------------------------------------------------------------------------258 259 void AMessageTree::menu_mark_message_as_read_triggered ()260 {261 }262 //----------------------------------------------------------------------------------------------263 264 void AMessageTree::menu_mark_message_as_unread_triggered ()265 {266 }267 //----------------------------------------------------------------------------------------------268 269 void AMessageTree::menu_mark_thread_as_read_triggered ()270 {271 }272 //----------------------------------------------------------------------------------------------273 274 void AMessageTree::menu_mark_thread_as_unread_triggered ()275 {276 }277 //----------------------------------------------------------------------------------------------278 279 void AMessageTree::menu_reply_triggered ()280 {281 }282 //----------------------------------------------------------------------------------------------283 284 void AMessageTree::processUrl (const QString& url)285 {286 }287 //----------------------------------------------------------------------------------------------288 289 void AMessageTree::gotoNextUnreadArticle ()290 {291 }292 //----------------------------------------------------------------------------------------------293 294 void AMessageTree::gotoNextUnreadThread ()295 {296 }297 //----------------------------------------------------------------------------------------------298 299 void AMessageTree::menu_special_delete_triggered ()300 {301 }302 //----------------------------------------------------------------------------------------------303 304 void AMessageTree::item_double_clicked (QTreeWidgetItem* item, int /*column*/)305 {306 }307 //----------------------------------------------------------------------------------------------308 309 void AMessageTree::menu_special_edit_triggered ()310 {311 }312 //----------------------------------------------------------------------------------------------313 314 void AMessageTree::menu_special_plus_1_triggered ()315 {316 }317 //----------------------------------------------------------------------------------------------318 319 void AMessageTree::menu_special_1_triggered ()320 {321 }322 //----------------------------------------------------------------------------------------------323 324 void AMessageTree::menu_special_2_triggered ()325 {326 }327 //----------------------------------------------------------------------------------------------328 329 void AMessageTree::menu_special_3_triggered ()330 {331 }332 //----------------------------------------------------------------------------------------------333 334 void AMessageTree::menu_special_smile_triggered ()335 {336 }337 //----------------------------------------------------------------------------------------------338 339 void AMessageTree::menu_special_plus_triggered ()340 {341 }342 //----------------------------------------------------------------------------------------------343 344 void AMessageTree::menu_special_minus_triggered ()345 {346 }347 //----------------------------------------------------------------------------------------------348 349 void AMessageTree::getSelectedPath (QList<int>& path)350 {351 }352 //----------------------------------------------------------------------------------------------353 354 bool AMessageTree::selectByPath (const QList<int>* path)355 833 { 356 834 } -
branches/message_tree/message_tree.h
r183 r185 158 158 void expandUnreadChild (QTreeWidgetItem* widget_item); 159 159 160 /*! 161 * \brief Функция проверки установки выделения, в случае отсутствия выделения, выделяет элемент, согласно параметру select_first 162 * \param select_first Флаг выделения, если имеет значение true, то выделяется первый элемент, иначе, последний (из корневых) 163 * \return true, если есть выделение, false при отсутствии элементов 164 */ 165 bool checkCurrentItem (bool select_first = true); 166 167 /*! 168 * \brief Редактирование оценки к отправке 169 * \param new_rate Новая оценка 170 */ 171 void changeRating (int new_rate); 172 160 173 // IMessageTree 161 174 public: -
branches/message_tree/version.h
r184 r185 20 20 * \brief Дата билда (заменяется автоматически при каждом билде в version.h, что и приводит к смене номера ревизии) 21 21 */ 22 #define AVALON_DATE "Срд Мар 25 17:57:47MSK 2009"22 #define AVALON_DATE "Срд Мар 25 20:32:14 MSK 2009" 23 23 24 24 #endif
Note: See TracChangeset
for help on using the changeset viewer.
