Changeset 30
- Timestamp:
- 05/26/08 04:57:31 (4 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
-
avalon.sql (modified) (2 diffs)
-
forum_tree.cpp (modified) (3 diffs)
-
forum_tree.h (modified) (2 diffs)
-
iforum_tree.h (modified) (1 diff)
-
message_tree.cpp (modified) (3 diffs)
-
message_tree.h (modified) (1 diff)
-
storage/istorage.h (modified) (1 diff)
-
storage/mysql_storage.cpp (modified) (1 diff)
-
storage/mysql_storage.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/avalon.sql
r28 r30 86 86 `has_child` tinyint(1) NOT NULL COMMENT 'флаг наличия дочерних сообщений', 87 87 PRIMARY KEY (`id`), 88 KEY `ix_parent` (`id_parent`) 88 KEY `ix_parent` (`id_parent`), 89 KEY `ix_topic` (`id_topic`) 89 90 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='сообщения'; 90 91 SET character_set_client = @saved_cs_client; … … 204 205 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 205 206 206 -- Dump completed on 2008-05-25 0:38:57207 -- Dump completed on 2008-05-25 23:11:51 -
trunk/forum_tree.cpp
r28 r30 29 29 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 30 30 31 setContextMenuPolicy(Qt::CustomContextMenu); 32 31 33 setColumnCount(2); 32 34 … … 38 40 39 41 connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(selection_changed())); 42 connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(context_menu_request(const QPoint&))); 40 43 41 44 Reload(); … … 226 229 //---------------------------------------------------------------------------------------------- 227 230 231 QTreeWidgetItem* AForumTree::GetSelectedForumItem () 232 { 233 QList<QTreeWidgetItem*> list_selected = selectedItems(); 234 235 if (list_selected.count() == 0) 236 return NULL; 237 238 QTreeWidgetItem* item_selected = list_selected[0]; 239 240 bool is_group = item_selected->childCount(); 241 242 if (is_group == true) 243 return NULL; 244 245 return item_selected; 246 } 247 //---------------------------------------------------------------------------------------------- 248 228 249 void AForumTree::selection_changed () 229 250 { 230 QList<QTreeWidgetItem*> list_selected = selectedItems(); 231 232 if (list_selected.count() == 0) 233 { 251 ForumTreeWidgetItem* forum_item = static_cast<ForumTreeWidgetItem*>(GetSelectedForumItem()); 252 253 if (forum_item != NULL) 254 m_message_tree->ChangeForum(forum_item->PTag()); 255 else 234 256 m_message_tree->ChangeForum(NULL); 235 return; 236 } 237 238 QTreeWidgetItem* item_selected = list_selected[0]; 239 240 bool is_group = item_selected->childCount(); 241 242 if (is_group == true) 243 { 244 m_message_tree->ChangeForum(NULL); 245 return; 246 } 247 248 ForumTreeWidgetItem* forum_item = static_cast<ForumTreeWidgetItem*>(item_selected); 249 250 m_message_tree->ChangeForum(forum_item->PTag()); 251 } 252 //---------------------------------------------------------------------------------------------- 257 } 258 //---------------------------------------------------------------------------------------------- 259 260 void AForumTree::ChangeUnreadCount (int count) 261 { 262 ForumTreeWidgetItem* forum_item = static_cast<ForumTreeWidgetItem*>(GetSelectedForumItem()); 263 264 if (forum_item == NULL) 265 return; 266 267 QString text = forum_item->text(1); 268 269 int old_count = 0; 270 271 if (text != "-") 272 old_count = text.toInt(); 273 274 old_count += count; 275 276 if (old_count != 0) 277 { 278 forum_item->setText(1, QString::number(old_count)); 279 280 QFont font = forum_item->font(1); 281 font.setBold(true); 282 forum_item->setFont(1, font); 283 } 284 else 285 { 286 forum_item->setText(1, "-"); 287 288 QFont font = forum_item->font(1); 289 font.setBold(false); 290 forum_item->setFont(1, font); 291 } 292 } 293 //---------------------------------------------------------------------------------------------- 294 295 void AForumTree::context_menu_request (const QPoint& pos) 296 { 297 QMessageBox::critical(m_parent, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 298 (new QMenu("abcd"))->exec(pos); 299 } 300 //---------------------------------------------------------------------------------------------- -
trunk/forum_tree.h
r28 r30 38 38 IMessageView* m_message_view; 39 39 40 // возвращает текущий выделенный элемент форума или NULL, если группа 41 QTreeWidgetItem* GetSelectedForumItem (); 42 40 43 // IForumTree 41 44 public: … … 47 50 void ReloadUnread (); 48 51 52 // изменение количества непрочитанных сообщений 53 void ChangeUnreadCount (int count); 54 49 55 private slots: 50 56 51 57 void selection_changed (); 58 59 void context_menu_request (const QPoint& pos); 52 60 }; 53 61 //---------------------------------------------------------------------------------------------- -
trunk/iforum_tree.h
r26 r30 20 20 // перезагрузка количества непрочитаных 21 21 virtual void ReloadUnread () = 0; 22 23 // изменение количества непрочитанных сообщений 24 virtual void ChangeUnreadCount (int count) = 0; 22 25 }; 23 26 //---------------------------------------------------------------------------------------------- -
trunk/message_tree.cpp
r29 r30 307 307 //---------------------------------------------------------------------------------------------- 308 308 309 QTreeWidgetItem* AMessageTree::GetSelectedItem () 310 { 311 QList<QTreeWidgetItem*> list_selected = selectedItems(); 312 313 if (list_selected.size() == 0) 314 return NULL; 315 316 return list_selected.at(0); 317 } 318 //---------------------------------------------------------------------------------------------- 319 309 320 void AMessageTree::timer_on_timer () 310 321 { 311 m_timer.stop(); 322 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(GetSelectedItem()); 323 324 if (item != NULL) 325 MakeItemAsRead(item); 312 326 } 313 327 //---------------------------------------------------------------------------------------------- … … 315 329 void AMessageTree::selection_changed () 316 330 { 317 QList<QTreeWidgetItem*> list_selected = selectedItems(); 318 319 if (list_selected.size() == 0) 320 return; 321 322 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(list_selected.at(0)); 331 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(GetSelectedItem()); 332 333 if (item == NULL) 334 return; 323 335 324 336 if (item->PTag()->IsMessageLoaded == false) … … 358 370 } 359 371 //---------------------------------------------------------------------------------------------- 372 373 void AMessageTree::MakeItemAsRead (QTreeWidgetItem* widget_item) 374 { 375 MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(widget_item); 376 377 AMessageInfoEx* info = item->PTag(); 378 379 // пометить как прочитаное в хранилище 380 std::auto_ptr<IStorage> storage(AStorageFactory::GetStorage()); 381 382 if (storage.get() == NULL) 383 { 384 QMessageBox::critical(m_parent, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 385 return; 386 } 387 388 if (storage->SetMessageAsRead(info->ID, true, NULL) == false) 389 { 390 storage->ShowError(m_parent); 391 return; 392 } 393 394 // пометка как прочитанного в дереве сообщений 395 if (info->IsRead == true) 396 return; 397 398 info->IsRead = true; 399 400 if (info->UnreadChildCount != 0) 401 item->setIcon(0, m_child_unread); 402 else 403 item->setIcon(0, m_message_read); 404 405 MessageTreeWidgetItem* parent_item = static_cast<MessageTreeWidgetItem*>(item->parent()); 406 407 while (parent_item != NULL) 408 { 409 AMessageInfoEx* parent_info = parent_item->PTag(); 410 411 parent_info->UnreadChildCount--; 412 413 if (parent_info->IsRead == true && parent_info->UnreadChildCount == 0) 414 parent_item->setIcon(0, m_message_read); 415 416 parent_item = static_cast<MessageTreeWidgetItem*>(parent_item->parent()); 417 } 418 419 // уменьшение количества непрочитанных в дереве форума 420 m_forum_tree->ChangeUnreadCount(-1); 421 } 422 //---------------------------------------------------------------------------------------------- -
trunk/message_tree.h
r29 r30 43 43 QTimer m_timer; 44 44 45 // возвращает текущий выделенный элемент 46 QTreeWidgetItem* GetSelectedItem (); 47 48 // разворачивает ветку до непрочитанных сообщений 45 49 void ExpandUnreadChild (QTreeWidgetItem* item); 50 51 // построение ветки 46 52 void BuildTree (QTreeWidgetItem* parent, AMessageInfoExList* list); 53 54 // пометка сообщения как прочитанного 55 void MakeItemAsRead (QTreeWidgetItem* item); 47 56 48 57 // IMessageTree -
trunk/storage/istorage.h
r29 r30 57 57 // возвращает тело сообщения 58 58 virtual bool GetMessageInfo (int id_message, QString& body, IProgress* progress = NULL) = 0; 59 60 // пометить сообщение как прочитанное/непрочитанное 61 virtual bool SetMessageAsRead (int id_message, bool read, IProgress* progress = NULL) = 0; 59 62 }; 60 63 //---------------------------------------------------------------------------------------------- -
trunk/storage/mysql_storage.cpp
r29 r30 1712 1712 } 1713 1713 //---------------------------------------------------------------------------------------------- 1714 1715 bool AMySQLStorage::SetMessageAsRead (int id_message, bool read, IProgress* progress) 1716 { 1717 if (progress != NULL) 1718 progress->OnProgress(0); 1719 1720 QString sql; 1721 1722 // 1723 // получение тела сообщения 1724 // 1725 1726 if (read == true) 1727 { 1728 sql += "DELETE FROM\n"; 1729 sql += " `unread`\n"; 1730 sql += "WHERE\n"; 1731 sql += " `id_message` = " + QString::number(id_message); 1732 } 1733 else 1734 { 1735 sql += "REPLACE INTO `unread`\n"; 1736 sql += "(\n"; 1737 sql += " `id_message`,\n"; 1738 sql += " `id_forum`,\n"; 1739 sql += " `id_topic`,\n"; 1740 sql += " `message_date`\n"; 1741 sql += ")\n"; 1742 sql += "SELECT\n"; 1743 sql += " `id`,\n"; 1744 sql += " `id_forum`,\n"; 1745 sql += " `id_topic`,\n"; 1746 sql += " `message_date`\n"; 1747 sql += "FROM\n"; 1748 sql += " `message`\n"; 1749 sql += "WHERE\n"; 1750 sql += " `id_message` = " + QString::number(id_message); 1751 } 1752 1753 std::auto_ptr<AQuery> query(CreateQuery(sql, false)); 1754 1755 if (query.get() == NULL) 1756 return ReturnError(AMySQLDatabase::LastError()); 1757 1758 if (query->exec() == false) 1759 return ReturnError(query->LastError()); 1760 1761 return ReturnSuccess(); 1762 } 1763 //---------------------------------------------------------------------------------------------- -
trunk/storage/mysql_storage.h
r29 r30 68 68 // возвращает тело сообщения 69 69 bool GetMessageInfo (int id_message, QString& body, IProgress* progress = NULL); 70 71 // пометить сообщение как прочитанное/непрочитанное 72 bool SetMessageAsRead (int id_message, bool read, IProgress* progress = NULL); 70 73 }; 71 74 //----------------------------------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.
