Changeset 186
- Timestamp:
- 03/26/09 06:32:26 (3 years ago)
- Location:
- branches/message_tree
- Files:
-
- 2 edited
-
message_tree.cpp (modified) (3 diffs)
-
version.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/message_tree/message_tree.cpp
r185 r186 773 773 void AMessageTree::gotoNextUnreadArticle () 774 774 { 775 if (checkCurrentItem() == false) 776 return; 777 NO_COMPILE_THIS!!! 775 AMessageInfoGUI* info = NULL; 776 778 777 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(currentItem()); 779 778 779 // если не было выделения, то ищем первый непрочитанный топик или топик с непрочитанными сообщениями 780 if (item == NULL) 781 { 782 for (int i = 0; i < topLevelItemCount(); i++) 783 { 784 item = static_cast<MessageTreeWidgetItem*>(topLevelItem(i)); 785 786 info = item->pag(); 787 788 if (info->IsInfoLoaded == false) 789 return; 790 else if (info->IsRead == false) 791 { 792 setCurrentItem(item); 793 return; 794 } 795 else if (info->HasUnreadChild == true) 796 break; 797 } 798 } 799 else 800 info = item->pag(); 801 802 // флаг петли 803 bool loopback = false; 804 805 // есть выделение или найден топик с непрочитанными сообщениями 780 806 while (true) 781 807 { 782 AMessageInfoGUI* info = item->pag(); 783 784 if (info->HasUnreadChild != 0) 808 if (info->HasUnreadChild == true && info->IsChildLoaded == false) 785 809 item->setExpanded(true); 786 810 787 MessageTreeWidgetItem* next_item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::nextItem(item));788 789 if (next_item == NULL)790 item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::first Sibling(ATreeWidgetItem::rootItem(item)));811 // выбор следующего элемента 812 if (info->HasUnreadChild == true) 813 // если есть дочерние непрочитанные, то выбираем первый дочерний 814 item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::firstChild(item)); 791 815 else 792 item = next_item; 816 { 817 // если нет дочерних непрочитанных, то ... 818 819 // смотрим, есть ли у элемента родитель и есть ли у родителя непрочитанные дочерние 820 MessageTreeWidgetItem* parent_item = static_cast<MessageTreeWidgetItem*>(item->parent()); 821 822 // если есть родитель и у него нет непрочитанных дочерних, то поднимаемся на уровень родителя 823 if (parent_item != NULL && parent_item->pag()->HasUnreadChild == false) 824 item = parent_item; 825 else 826 { 827 // у родителя есть непрочитанные дочерние или нет родителя - переходим к следующему брату 828 // несмотря на то, что непрочитанный брат может быть и выше 829 MessageTreeWidgetItem* sibling_item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::nextSibling(item)); 830 831 // если следующего брата нет 832 if (sibling_item == NULL && parent_item != NULL) 833 { 834 // движение вверх по дереву, пока не найдется следующий брат у родителя 835 while (parent_item != NULL) 836 { 837 MessageTreeWidgetItem* last_child_item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::lastChild(parent_item)); 838 839 if (last_child_item != item) 840 break; 841 842 item = parent_item; 843 844 parent_item = static_cast<MessageTreeWidgetItem*>(item->parent()); 845 } 846 847 // сдвиг на следующего брата в соседней подветке 848 item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::nextSibling(item)); 849 } 850 else 851 item = sibling_item; 852 } 853 } 854 855 // если достигнут конец дерева, то переходим в корень 856 if (item == NULL) 857 item = static_cast<MessageTreeWidgetItem*>(topLevelItem(0)); 793 858 794 859 info = item->pag(); 795 860 861 // если найденый топик с незагруженной информацией 796 862 if (info->IsInfoLoaded == false) 797 item = static_cast<MessageTreeWidgetItem*>(ATreeWidgetItem::firstSibling(ATreeWidgetItem::rootItem(item))); 863 { 864 if (loopback == true) 865 return; 866 867 item = static_cast<MessageTreeWidgetItem*>(topLevelItem(0)); 868 info = item->pag(); 869 870 loopback = true; 871 } 798 872 799 873 if (info->IsRead == false) … … 802 876 803 877 setCurrentItem(item); 878 879 scrollToItem(item, QAbstractItemView::PositionAtCenter); 804 880 } 805 881 //---------------------------------------------------------------------------------------------- … … 1236 1312 // достройка дочерних веток для текущей 1237 1313 if (info->HasChild) 1314 { 1238 1315 buildTree(info, list); 1316 list_index = 0; 1317 } 1239 1318 } 1240 1319 else // if (info->ID == id_parent) -
branches/message_tree/version.h
r185 r186 20 20 * \brief Дата билда (заменяется автоматически при каждом билде в version.h, что и приводит к смене номера ревизии) 21 21 */ 22 #define AVALON_DATE " Срд Мар 25 20:32:14MSK 2009"22 #define AVALON_DATE "Чтв Мар 26 05:29:58 MSK 2009" 23 23 24 24 #endif
Note: See TracChangeset
for help on using the changeset viewer.
