Changeset 41
- Timestamp:
- 05/29/08 20:41:06 (4 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
-
avalon.sql (modified) (2 diffs)
-
message_tree.cpp (modified) (16 diffs)
-
message_tree.h (modified) (3 diffs)
-
model/message.h (modified) (1 diff)
-
storage/istorage.h (modified) (2 diffs)
-
storage/mysql_storage.cpp (modified) (8 diffs)
-
storage/mysql_storage.h (modified) (1 diff)
-
sysheaders.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/avalon.sql
r36 r41 78 78 `has_child` tinyint(1) NOT NULL COMMENT 'флаг наличия дочерних сообщений', 79 79 PRIMARY KEY (`id`), 80 KEY `ix_ parent`(`id_parent`),81 KEY `ix_ topic`(`id_topic`),82 KEY `ix_ forum`(`id_forum`)80 KEY `ix_id_parent` USING BTREE (`id_parent`), 81 KEY `ix_id_topic` USING BTREE (`id_topic`), 82 KEY `ix_id_forum` USING BTREE (`id_forum`) 83 83 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='сообщения'; 84 85 -- 86 -- Table structure for table `message_topic` 87 -- 88 89 DROP TABLE IF EXISTS `message_topic`; 90 CREATE TABLE `message_topic` ( 91 `id_message` int(11) NOT NULL COMMENT 'id сообщения', 92 `id_topic` int(11) NOT NULL COMMENT 'id темы', 93 `id_parent` int(11) NOT NULL COMMENT 'id родительского сообщения', 94 `id_user` int(11) NOT NULL COMMENT 'id автора', 95 `id_forum` int(11) NOT NULL COMMENT 'id форума', 96 `subject` varchar(100) NOT NULL COMMENT 'тема сообщения', 97 `message_name` varchar(100) NOT NULL COMMENT 'имя сообщения', 98 `user_nick` varchar(100) NOT NULL COMMENT 'имя автора сообщения', 99 `id_article` int(11) NOT NULL COMMENT 'id статьи, если сообщение является статьей или 0', 100 `message_date` datetime NOT NULL COMMENT 'дата создания сообщения', 101 `update_date` datetime NOT NULL COMMENT 'дата обновления сообщения или 0', 102 `user_role` varchar(50) NOT NULL COMMENT 'статус автора сообщения', 103 `user_title` varchar(100) NOT NULL COMMENT 'повязка пользователя', 104 `user_title_color` int(11) NOT NULL COMMENT 'цвет повязки пользователя', 105 `last_moderated` datetime NOT NULL COMMENT 'дата последнего переноса сообщения', 106 `has_child` tinyint(1) NOT NULL COMMENT 'флаг наличия дочерних сообщений', 107 PRIMARY KEY (`id_message`), 108 KEY `ix_id_forum` (`id_forum`), 109 CONSTRAINT `fk_message_topic_message` FOREIGN KEY (`id_message`) REFERENCES `message` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 110 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='список топиков'; 84 111 85 112 -- … … 179 206 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 180 207 181 -- Dump completed on 2008-05-2 7 12:31:33208 -- Dump completed on 2008-05-29 16:40:23 -
trunk/message_tree.cpp
r31 r41 10 10 #include "storage/storage_factory.h" 11 11 //---------------------------------------------------------------------------------------------- 12 typedef struct AMessageInfoGUI 13 { 14 // дескриптор сообщения 15 AMessageInfoEx MessageInfo; 16 17 // флаг наличия загрузки информации 18 bool IsInfoLoaded; 19 20 // флаг того, что загружены дочерние сообщения 21 bool IsChildLoaded; 22 }; 23 //---------------------------------------------------------------------------------------------- 12 24 // элемент для дерева группы форумов с информацией о группе 13 25 //---------------------------------------------------------------------------------------------- 14 typedef ATreeWidgetItem<AMessageInfo Ex> MessageTreeWidgetItem;26 typedef ATreeWidgetItem<AMessageInfoGUI> MessageTreeWidgetItem; 15 27 //---------------------------------------------------------------------------------------------- 16 28 … … 20 32 m_forum_tree = 0; 21 33 m_message_view = 0; 34 m_id_forum = 0; 22 35 23 36 setFrameShadow(QFrame::Plain); … … 41 54 connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(selection_changed())); 42 55 43 connect(&m_timer, SIGNAL(timeout()), this, SLOT(timer_on_timer())); 56 connect(&m_timer, SIGNAL(timeout()), this, SLOT(timer_on_timer())); 57 connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(vertical_scroll(int))); 44 58 } 45 59 //---------------------------------------------------------------------------------------------- … … 82 96 //---------------------------------------------------------------------------------------------- 83 97 84 void AMessageTree::ChangeForum (const AForumInfo* info) 85 { 98 void AMessageTree::ChangeForum (const AForumInfo* forum_info) 99 { 100 if (forum_info == NULL) 101 m_id_forum = 0; 102 86 103 clear(); 87 104 88 105 // если выделена группа, то просто очистка 89 if ( info == NULL)106 if (forum_info == NULL) 90 107 { 91 108 headerItem()->setText(0, QString::fromUtf8("тема")); … … 98 115 } 99 116 117 // сохраняем для скролла 118 m_id_forum = forum_info->ID; 119 100 120 // вывод наименования форума в хедер 101 headerItem()->setText(0, info->Name); 102 103 // флаг того, что есть непрочитаные 104 bool has_unread = false; 121 headerItem()->setText(0, forum_info->Name); 105 122 106 123 // получение хранилища … … 114 131 115 132 // получение топиков 116 AMessageInfoExListtopic_list;117 118 if (storage->GetForumTopicList( info->ID, topic_list, NULL) == false)133 QList<int> topic_list; 134 135 if (storage->GetForumTopicList(forum_info->ID, topic_list, NULL) == false) 119 136 { 120 137 storage->ShowError(m_parent); … … 123 140 124 141 // установка топиков 142 QList<QTreeWidgetItem*> items; 143 125 144 for (int i = 0; i < topic_list.count(); i++) 126 145 { 127 AMessageInfoEx info = topic_list[i]; 128 129 info.IsMessageLoaded = false; 130 info.IsChildLoaded = false; 131 info.UnreadChildCount = 0; 132 133 MessageTreeWidgetItem* item = new MessageTreeWidgetItem(this); 134 135 item->SetTag(info); 136 137 item->setText(0, info.Subject); 138 139 if (info.IDUser != 0) 140 item->setText(1, info.UserNick); 141 else 142 item->setText(1, QString::fromUtf8("Аноним ") + info.UserTitle); 143 144 item->setText(2, info.MessageDate.toString("dd.MM.yyyy hh:mm:ss")); 145 146 if (info.IsRead == false) 147 { 148 has_unread = true; 149 item->setIcon(0, m_message_unread); 150 info.UnreadChildCount = 1; 151 } 152 else if (info.HasUnreadChild == true) 153 { 154 has_unread = true; 155 item->setIcon(0, m_child_unread); 156 } 157 else 158 item->setIcon(0, m_message_read); 159 160 if (info.HasChild == true) 161 item->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator); 162 } 163 164 // подсветка хедера, если есть непрочитанные сообщения 165 if (has_unread == true) 166 { 167 QFont font = headerItem()->font(0); 168 font.setBold(true); 169 headerItem()->setFont(0, font); 170 } 171 else 172 { 173 QFont font = headerItem()->font(0); 174 font.setBold(false); 175 headerItem()->setFont(0, font); 176 } 146 MessageTreeWidgetItem* item = new MessageTreeWidgetItem(); 147 148 AMessageInfoGUI* info = item->PTag(); 149 150 info->MessageInfo.ID = topic_list[i]; 151 info->IsInfoLoaded = false; 152 info->IsChildLoaded = false; 153 154 items.append(item); 155 } 156 157 // отображение 158 addTopLevelItems(items); 159 160 // загрузка видимых топиков 161 ScrollTopics(); 162 } 163 //---------------------------------------------------------------------------------------------- 164 165 void AMessageTree::vertical_scroll (int /*value*/) 166 { 167 ScrollTopics(); 168 } 169 //---------------------------------------------------------------------------------------------- 170 171 void AMessageTree::ScrollTopics () 172 { 173 if (m_id_forum == 0) 174 return; 175 176 // поиск верхнего видимого элемента 177 int from_index = 0; 178 179 int size = topLevelItemCount(); 180 181 for (int i = 0; i < size; i++) 182 { 183 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(topLevelItem(i)); 184 185 QRect rect = visualItemRect(item); 186 187 if (rect.top() < 0) 188 { 189 from_index = i; 190 continue; 191 } 192 193 break; 194 } 195 196 // поиск нижнего видимого элемента 197 int tree_height = height(); 198 199 AMessageInfoExList list; 200 QList<MessageTreeWidgetItem*> items; 201 202 while (from_index < size) 203 { 204 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(topLevelItem(from_index)); 205 206 QRect rect = visualItemRect(item); 207 208 if (rect.top() > tree_height) 209 break; 210 211 if (item->PTag()->IsInfoLoaded == false) 212 { 213 AMessageInfoEx info; 214 215 info.ID = item->PTag()->MessageInfo.ID; 216 217 list.append(info); 218 items.append(item); 219 } 220 221 from_index++; 222 } 223 /* 224 // загрузка топиков, которые не загружены 225 if (list.count() > 0) 226 { 227 // получение хранилища 228 std::auto_ptr<IStorage> storage(AStorageFactory::GetStorage()); 229 230 if (storage.get() == NULL) 231 { 232 QMessageBox::critical(m_parent, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 233 return; 234 } 235 236 if (storage->GetTopicInfo(list, 0) == false) 237 { 238 storage->ShowError(m_parent); 239 return; 240 } 241 242 // заполнение вновь загруженных топиков 243 for (int i = 0; i < list.count(); i++) 244 { 245 AMessageInfoEx info = list.at(i); 246 247 for (int j = 0; j < items.count(); j++) 248 { 249 MessageTreeWidgetItem* item = items[j]; 250 251 if (item->PTag()->MessageInfo.ID == info.ID) 252 { 253 item->PTag()->MessageInfo = info; 254 255 item->setText(0, info.Subject); 256 257 if (info.IDUser == 0) 258 item->setText(1, QString::fromUtf8("Аноним")); 259 else 260 item->setText(1, info.UserNick); 261 262 item->setText(2, info.MessageDate.toString("dd.MM.yyyy hh:mm:ss")); 263 264 if (info.IsRead == true) 265 item->setIcon(0, m_message_read); 266 else 267 item->setIcon(0, m_message_unread); 268 269 break; 270 } 271 } 272 } 273 } 274 */ 177 275 } 178 276 //---------------------------------------------------------------------------------------------- … … 180 278 void AMessageTree::expand_item (QTreeWidgetItem* item_expanded) 181 279 { 280 /* 182 281 if (item_expanded == NULL) 183 282 return; … … 215 314 ExpandUnreadChild(item); 216 315 } 316 */ 217 317 } 218 318 //---------------------------------------------------------------------------------------------- … … 220 320 void AMessageTree::ExpandUnreadChild (QTreeWidgetItem* widget_item) 221 321 { 322 /* 222 323 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(widget_item); 223 324 … … 230 331 expandItem(item); 231 332 } 232 } 233 //---------------------------------------------------------------------------------------------- 234 333 */ 334 } 335 //---------------------------------------------------------------------------------------------- 336 /* 235 337 void AMessageTree::BuildTree (QTreeWidgetItem* parent, AMessageInfoExList* list) 236 338 { … … 304 406 for (int i = 0; i < size; i++) 305 407 BuildTree(to_build.at(i), list); 306 } 408 }*/ 307 409 //---------------------------------------------------------------------------------------------- 308 410 … … 329 431 void AMessageTree::selection_changed () 330 432 { 433 /* 331 434 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(GetSelectedItem()); 332 435 … … 368 471 else 369 472 m_timer.stop(); 473 */ 370 474 } 371 475 //---------------------------------------------------------------------------------------------- … … 373 477 void AMessageTree::MakeItemAsRead (QTreeWidgetItem* widget_item) 374 478 { 479 /* 375 480 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(widget_item); 376 481 … … 419 524 // уменьшение количества непрочитанных в дереве форума 420 525 m_forum_tree->ChangeUnreadCount(-1); 421 } 422 //---------------------------------------------------------------------------------------------- 526 */ 527 } 528 //---------------------------------------------------------------------------------------------- -
trunk/message_tree.h
r30 r41 43 43 QTimer m_timer; 44 44 45 // id текущего форума 46 int m_id_forum; 47 45 48 // возвращает текущий выделенный элемент 46 49 QTreeWidgetItem* GetSelectedItem (); 50 51 // загружает незагруженные топики при скроллинге 52 void ScrollTopics (); 47 53 48 54 // разворачивает ветку до непрочитанных сообщений … … 50 56 51 57 // построение ветки 52 void BuildTree (QTreeWidgetItem* parent, AMessageInfoExList* list);58 //void BuildTree (QTreeWidgetItem* parent, AMessageInfoExList* list); 53 59 54 60 // пометка сообщения как прочитанного … … 59 65 60 66 // смена форума, NULL - очистить список (указатель на группе) 61 void ChangeForum (const AForumInfo* info);67 void ChangeForum (const AForumInfo* forum_info); 62 68 63 69 private slots: 64 70 71 void vertical_scroll (int value); 65 72 void expand_item (QTreeWidgetItem* item); 66 73 void selection_changed (); -
trunk/model/message.h
r29 r41 60 60 typedef struct AMessageInfoEx : AMessageInfo 61 61 { 62 bool IsRead; // прочитано ли сообщение 63 bool HasChild; // есть ли дочерние сообщения 64 bool HasUnreadChild; // есть ли дочерние непрочитанные сообщения 65 66 bool IsMessageLoaded; // загружена ли дополнительная информация сообщения (для внутреннего использования) 67 bool IsChildLoaded; // загружены ли дочерние элементы (для внутреннего использования) 68 int UnreadChildCount; // количество непрочитаных дочерних элементов (для внутреннего использования) 62 bool IsRead; // прочитано ли сообщение 63 bool HasChild; // есть ли дочерние сообщения 69 64 }; 70 65 //---------------------------------------------------------------------------------------------- -
trunk/storage/istorage.h
r37 r41 60 60 virtual bool GetUnreadCount (AUnreadForumCountInfoList& list, IProgress* progress = NULL) = 0; 61 61 62 // возвращает список топиков (родительских веток) для форума63 virtual bool GetForumTopicList (int id_forum, AMessageInfoExList& list, IProgress* progress = NULL) = 0;62 // возвращает список id топиков (родительских веток) для форума 63 virtual bool GetForumTopicList (int id_forum, QList<int>& list, IProgress* progress = NULL) = 0; 64 64 65 /* 65 66 // возвращает список сообщений в топике (родительской ветке) 67 // должны быть заполнены все поля 66 68 virtual bool GetTopicMessageList (int id_topic, AMessageInfoExList& list, IProgress* progress = NULL) = 0; 67 68 // возвращает тело сообщения69 virtual bool Get MessageInfo (int id_message, QString& body, IProgress* progress = NULL) = 0;69 */ 70 // заполняет полную информацию о топиках 71 virtual bool GetTopicInfo (AMessageInfoExList& list, IProgress* progress = NULL) = 0; 70 72 71 73 // пометить группу сущностей как прочитанное/непрочитанное … … 80 82 virtual bool Unsubscribe (const QList<int>& list, AIDSet type, bool clean, IProgress* progress = NULL) = 0; 81 83 84 // deprecated: 85 82 86 // возвращает существующие id сообщений в заданном интервале 83 87 virtual bool GetMessageIds (int from_id, int to_id, QList<int>& list, IProgress* progress = NULL) = 0; -
trunk/storage/mysql_storage.cpp
r39 r41 1451 1451 //---------------------------------------------------------------------------------------------- 1452 1452 1453 bool AMySQLStorage::GetForumTopicList (int id_forum, AMessageInfoExList& list, IProgress* progress)1453 bool AMySQLStorage::GetForumTopicList (int id_forum, QList<int>& list, IProgress* progress) 1454 1454 { 1455 1455 if (progress != NULL) … … 1463 1463 1464 1464 sql += "SELECT\n"; 1465 sql += " `id`,\n"; 1466 sql += " `id_topic`,\n"; 1467 sql += " `id_parent`,\n"; 1468 sql += " `id_user`,\n"; 1469 sql += " `id_forum`,\n"; 1470 sql += " `subject`,\n"; 1471 sql += " `message_name`,\n"; 1472 sql += " `user_nick`,\n"; 1473 sql += " `id_article`,\n"; 1474 sql += " `message_date`,\n"; 1475 sql += " `update_date`,\n"; 1476 sql += " `user_role`,\n"; 1477 sql += " `user_title`,\n"; 1478 sql += " `user_title_color`,\n"; 1479 sql += " `last_moderated`,\n"; 1480 sql += " `has_child`\n"; 1465 sql += " `id_message`\n"; 1481 1466 sql += "FROM\n"; 1482 sql += " `message `\n";1467 sql += " `message_topic`\n"; 1483 1468 sql += "WHERE\n"; 1484 sql += " `id_forum` = " + QString::number(id_forum) + " AND\n"; 1485 sql += " `id_parent` = 0\n"; 1469 sql += " `id_forum` = " + QString::number(id_forum) + "\n"; 1486 1470 sql += "ORDER BY\n"; 1487 1471 sql += " `message_date` DESC"; … … 1496 1480 1497 1481 while (query_select->next()) 1498 { 1499 AMessageInfoEx info; 1500 1501 info.IsRead = true; 1502 info.HasUnreadChild = false; 1503 1504 info.ID = query_select->value(0).toInt(); 1505 info.IDTopic = query_select->value(1).toInt(); 1506 info.IDParent = query_select->value(2).toInt(); 1507 info.IDUser = query_select->value(3).toInt(); 1508 info.IDForum = query_select->value(4).toInt(); 1509 info.Subject = query_select->value(5).toString(); 1510 info.MessageName = query_select->value(6).toString(); 1511 info.UserNick = query_select->value(7).toString(); 1512 info.IDArticle = query_select->value(8).toInt(); 1513 info.MessageDate = query_select->value(9).toDateTime(); 1514 info.UpdateDate = query_select->value(10).toDateTime(); 1515 info.UserRole = query_select->value(11).toString(); 1516 info.UserTitle = query_select->value(12).toString(); 1517 info.UserTitleColor = query_select->value(13).toInt(); 1518 info.LastModerated = query_select->value(14).toDateTime(); 1519 info.HasChild = query_select->value(15).toInt(); 1520 1521 list.append(info); 1522 } 1482 list.append(query_select->value(0).toInt()); 1523 1483 1524 1484 // … … 1552 1512 1553 1513 for (int i = 0; i < list.count(); i++) 1554 if (list[i] .ID== id)1514 if (list[i] == id) 1555 1515 { 1556 list[i].HasUnreadChild = true;1557 1516 list.move(i, 0); 1558 1517 break; … … 1588 1547 1589 1548 for (int i = 0; i < list.count(); i++) 1590 if (list[i] .ID== id)1549 if (list[i] == id) 1591 1550 { 1592 list[i].IsRead = false;1593 1551 list.move(i, 0); 1594 1552 break; … … 1599 1557 } 1600 1558 //---------------------------------------------------------------------------------------------- 1601 1559 /* 1602 1560 bool AMySQLStorage::GetTopicMessageList (int id_topic, AMessageInfoExList& list, IProgress* progress) 1603 1561 { … … 1708 1666 } 1709 1667 //---------------------------------------------------------------------------------------------- 1710 1711 bool AMySQLStorage::GetMessageInfo (int id_message, QString& body, IProgress* progress) 1668 */ 1669 1670 bool AMySQLStorage::GetTopicInfo (AMessageInfoExList& list, IProgress* progress) 1712 1671 { 1713 1672 if (progress != NULL) 1714 1673 progress->OnProgress(0); 1715 1674 1675 // заполнение id-шников сообщений, которые требуется получить 1676 QString ids; 1677 1678 for (int i = 0; i < list.count(); i++) 1679 { 1680 ids += QString::number(list[i].ID); 1681 1682 if (i < list.count() - 1) 1683 ids += ", "; 1684 } 1685 1716 1686 QString sql; 1717 1687 1718 1688 // 1719 // получение тела сообщения 1720 // 1721 1722 body = ""; 1689 // получение инфы топика 1690 // 1723 1691 1724 1692 sql += "SELECT\n"; 1725 sql += " `message`\n"; 1693 sql += " `id_message`,\n"; 1694 sql += " `id_topic`,\n"; 1695 sql += " `id_parent`,\n"; 1696 sql += " `id_user`,\n"; 1697 sql += " `id_forum`,\n"; 1698 sql += " `subject`,\n"; 1699 sql += " `message_name`,\n"; 1700 sql += " `user_nick`,\n"; 1701 sql += " `id_article`,\n"; 1702 sql += " `message_date`,\n"; 1703 sql += " `update_date`,\n"; 1704 sql += " `user_role`,\n"; 1705 sql += " `user_title`,\n"; 1706 sql += " `user_title_color`,\n"; 1707 sql += " `last_moderated`,\n"; 1708 sql += " `has_child`\n"; 1726 1709 sql += "FROM\n"; 1727 sql += " `message `\n";1710 sql += " `message_topic`\n"; 1728 1711 sql += "WHERE\n"; 1729 sql += " `id ` = " + QString::number(id_message);1712 sql += " `id_message` IN (" + ids + ")"; 1730 1713 1731 1714 std::auto_ptr<AQuery> query_select(CreateQuery(sql, false)); … … 1738 1721 1739 1722 while (query_select->next()) 1740 body = query_select->value(0).toString(); 1723 { 1724 int id = query_select->value(0).toInt(); 1725 1726 for (int i = 0; i < list.count(); i++) 1727 if (id == list[i].ID) 1728 { 1729 list[i].IDTopic = query_select->value(1).toInt(); 1730 list[i].IDParent = query_select->value(2).toInt(); 1731 list[i].IDUser = query_select->value(3).toInt(); 1732 list[i].IDForum = query_select->value(4).toInt(); 1733 list[i].Subject = query_select->value(5).toString(); 1734 list[i].MessageName = query_select->value(6).toString(); 1735 list[i].UserNick = query_select->value(7).toString(); 1736 list[i].IDArticle = query_select->value(8).toInt(); 1737 list[i].MessageDate = query_select->value(9).toDateTime(); 1738 list[i].UpdateDate = query_select->value(10).toDateTime(); 1739 list[i].UserRole = query_select->value(11).toString(); 1740 list[i].UserTitle = query_select->value(12).toString(); 1741 list[i].UserTitleColor = query_select->value(13).toInt(); 1742 list[i].LastModerated = query_select->value(14).toDateTime(); 1743 list[i].HasChild = query_select->value(15).toInt(); 1744 1745 list[i].IsRead = true; 1746 1747 break; 1748 } 1749 } 1750 1751 // 1752 // получение списка непрочитаных 1753 // 1754 1755 sql = ""; 1756 sql += "SELECT\n"; 1757 sql += " `id_message`\n"; 1758 sql += "FROM\n"; 1759 sql += " `unread`\n"; 1760 sql += "WHERE\n"; 1761 sql += " `id_message` IN (" + ids + ")"; 1762 1763 std::auto_ptr<AQuery> query_select_unread(CreateQuery(sql, false)); 1764 1765 if (query_select_unread.get() == NULL) 1766 return ReturnError(AMySQLDatabase::LastError()); 1767 1768 if (query_select_unread->exec() == false) 1769 return ReturnError(query_select_unread->LastError()); 1770 1771 while (query_select_unread->next()) 1772 { 1773 int id = query_select_unread->value(0).toInt(); 1774 1775 for (int i = 0; i < list.count(); i++) 1776 if (id == list[i].ID) 1777 { 1778 list[i].IsRead = false; 1779 break; 1780 } 1781 } 1741 1782 1742 1783 return ReturnSuccess(); -
trunk/storage/mysql_storage.h
r37 r41 61 61 62 62 // возвращает список топиков (родительских веток) для форума 63 bool GetForumTopicList (int id_forum, AMessageInfoExList& list, IProgress* progress = NULL);64 63 bool GetForumTopicList (int id_forum, QList<int>& list, IProgress* progress = NULL); 64 /* 65 65 // возвращает список сообщений в топике (родительской ветке) 66 66 bool GetTopicMessageList (int id_topic, AMessageInfoExList& list, IProgress* progress = NULL); 67 68 // возвращает тело сообщения69 bool Get MessageInfo (int id_message, QString& body, IProgress* progress = NULL);67 */ 68 // заполняет полную информацию о топиках 69 bool GetTopicInfo (AMessageInfoExList& list, IProgress* progress = NULL); 70 70 71 71 // пометить группу сущностей как прочитанное/непрочитанное -
trunk/sysheaders.h
r31 r41 26 26 #include <QTimeEdit> 27 27 #include <QGroupBox> 28 #include <QScrollBar> 28 29 #include <QStatusBar> 29 30 #include <QTreeWidget> … … 42 43 #include <QCalendarWidget> 43 44 //---------------------------------------------------------------------------------------------- 45 #define DEBUG_MSG(x) QMessageBox::critical(0, QString::fromUtf8("Ошибка!"), x) 46 //---------------------------------------------------------------------------------------------- 47 #include <sys/time.h> 48 //---------------------------------------------------------------------------------------------- 49 class Profiler 50 { 51 public: 52 53 Profiler () 54 { 55 Start(); 56 } 57 58 void Start () 59 { 60 gettimeofday(&m_start, 0); 61 } 62 63 void Stop () 64 { 65 gettimeofday(&m_stop, 0); 66 67 long long int delta = (m_stop.tv_sec - m_start.tv_sec) * 1000 + (m_stop.tv_usec - m_start.tv_usec) / 1000; 68 69 QString msg = QString::number(delta) + "ms"; 70 71 QMessageBox::information(0, QString::fromUtf8("Таймер!"), msg); 72 } 73 74 private: 75 76 timeval m_start; 77 timeval m_stop; 78 }; 79 //---------------------------------------------------------------------------------------------- 44 80 #endif
Note: See TracChangeset
for help on using the changeset viewer.
