Changeset 181


Ignore:
Timestamp:
03/23/09 22:01:45 (3 years ago)
Author:
antonbatenev.ya.ru
Message:

Бранч. Доделана загрузка списка топиков + мелкие оптимизации

Location:
branches/message_tree
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • branches/message_tree/form_message.cpp

    r177 r181  
    1010//---------------------------------------------------------------------------------------------- 
    1111 
    12 FormMessage::FormMessage (QWidget* parent, bool is_reply, const ATopicInfo& info, int edit_id) :  FormMessageUI (parent) 
     12FormMessage::FormMessage (QWidget* parent, bool is_reply, const AMessageInfoGUI& info, int edit_id) :  FormMessageUI (parent) 
    1313{ 
    1414        if (edit_id != 0) 
  • branches/message_tree/form_message.h

    r147 r181  
    3232                 * \param edit_id ID редактирования существующего сообщения к отправке 
    3333                 */ 
    34                 FormMessage  (QWidget* parent, bool is_reply, const ATopicInfo& info, int edit_id = 0); 
     34                FormMessage  (QWidget* parent, bool is_reply, const AMessageInfoGUI& info, int edit_id = 0); 
    3535                ~FormMessage (); 
    3636 
     
    5555                 * \brief Текущее редактируемое сообщение. 
    5656                 */ 
    57                 ATopicInfo m_info; 
     57                AMessageInfoGUI m_info; 
    5858 
    5959                /*! 
  • branches/message_tree/forum_tree.cpp

    r152 r181  
    814814                return; 
    815815 
    816         ATopicInfo info; 
     816        AMessageInfoGUI info; 
    817817 
    818818        info.ID             = 0; 
     
    832832        info.UserTitleColor = 0; 
    833833        info.LastModerated  = QDateTime(); 
    834         info.IsRead         = false; 
     834        /*info.IsRead         = false; 
    835835        info.HasChild       = false; 
    836         info.HasUnreadChild = false; 
     836        info.HasUnreadChild = false;*/ // TODO: 
    837837 
    838838        FormMessage* form = new FormMessage(NULL, false, info); 
  • branches/message_tree/global.cpp

    r162 r181  
    2424 
    2525        reload(); 
     26 
     27        AnonymousName = QString::fromUtf8("Аноним"); 
     28        DateFormat    = "dd.MM.yyyy hh:mm:ss"; 
    2629} 
    2730//---------------------------------------------------------------------------------------------- 
  • branches/message_tree/global.h

    r159 r181  
    4242                int      SynchronizeInterval; /*!< \brief Интервал синхронизации (минут)                   */ 
    4343                AColorer Colorer;             /*!< \brief Движок подсветки синтаксиса                      */ 
     44 
     45                // 
     46                // Константы 
     47                // 
     48 
     49                QString AnonymousName; /*!< \brief Отображаемое имя анонима */ 
     50                QString DateFormat;    /*!< \brief Формат даты/времени      */ 
    4451}; 
    4552 
  • branches/message_tree/message_tree.cpp

    r179 r181  
    1313//---------------------------------------------------------------------------------------------- 
    1414/*! 
    15  * \brief Элемент, который хранится в каждой ноде дерева 
    16  */ 
    17 typedef struct AMessageInfoGUI 
    18 { 
    19         ATopicInfo Info; /*!< \brief Дескриптор сообщения */ 
    20 }; 
    21 //---------------------------------------------------------------------------------------------- 
    22 /*! 
    23  * \brief Элемент для дерева группы форумов с информацией о группе 
     15 * \brief Элемент для дерева сообщений 
    2416 */ 
    2517typedef ATreeWidgetItemT<AMessageInfoGUI> MessageTreeWidgetItem; 
     
    3325        m_main_form    = 0; 
    3426 
     27        m_me.ID = 0; 
     28 
    3529        m_current_forum.ID        = 0; 
    3630        m_current_forum.IDGroup   = 0; 
    37         m_current_forum.ShortName = ""; 
    38         m_current_forum.Name      = ""; 
    3931        m_current_forum.Rated     = false; 
    4032        m_current_forum.InTop     = false; 
     
    215207void AMessageTree::vertical_scroll (int /*value*/) 
    216208{ 
     209        scrollTopics(); 
    217210} 
    218211//---------------------------------------------------------------------------------------------- 
     
    352345        m_current_forum.RateLimit = 0; 
    353346 
     347        m_me.ID             = 0; 
     348        m_me.Name           = ""; 
     349        m_me.Nick           = ""; 
     350        m_me.RealName       = ""; 
     351        m_me.Email          = ""; 
     352        m_me.Homepage       = ""; 
     353        m_me.Specialization = ""; 
     354        m_me.WhereFrom      = ""; 
     355        m_me.Origin         = ""; 
     356 
    354357        if (m_main_form != NULL) 
    355358                m_main_form->setEnabledAction(aaViewSource, false); 
     
    401404        } 
    402405 
     406        // получение информации о себе 
     407        QSettings settings; 
     408 
     409        m_me.Name = settings.value("rsdn/login", "").toString(); 
     410 
     411        if (storage->whoAmI(m_me, NULL) == false) 
     412                m_me.Name = ""; 
     413 
    403414        // если группа форумов обыкновенная 
    404415        if (m_current_forum.IDGroup != SPECIAL_ID_GROUP) 
     
    406417                // получение топиков 
    407418                // ориентировочное время выполнения 68 ms (для форума NET, 28199 топиков) 
     419                // основное время занимает запрос данных из хранилища 
    408420                QList<int> topic_list; 
    409421 
     
    413425                        return; 
    414426                } 
    415 AProfiler p; for (int profiler = 0; profiler < 1000; profiler++) { 
     427 
    416428                // установка топиков 
    417429                // ориентировочное время выполнения 50 ms (для форума NET, 28199 топиков) 
     430                // основное время занимает создание объекта MessageTreeWidgetItem 
    418431                QList<QTreeWidgetItem*> items; 
    419                 MessageTreeWidgetItem* items_array = new MessageTreeWidgetItem[topic_list.count()]; 
    420432 
    421433                for (int i = 0; i < topic_list.count(); i++) 
    422434                { 
    423                         MessageTreeWidgetItem* item = &items_array[i]; 
    424  
    425                         //MessageTreeWidgetItem* item = new MessageTreeWidgetItem(); 
     435                        MessageTreeWidgetItem* item = new MessageTreeWidgetItem(); 
    426436 
    427437                        // начальное заполнение дескриптора топика 
    428438                        AMessageInfoGUI* info = item->pag(); 
    429439 
    430                         //info->Info.ID = topic_list[i]; 
     440                        info->ID   = topic_list[i]; 
     441                        info->Item = item; 
    431442 
    432443                        items.append(item); 
     
    435446                // отображение на виджет 
    436447                addTopLevelItems(items); 
    437 clear(); 
    438                 } p.stop(1000); 
     448 
     449                // дозагрузка информации о топиках, находящихся в видимой области отображения 
     450                scrollTopics(); 
    439451        } 
    440452        else   // if (forum_info->IDGroup != SPECIAL_ID_GROUP) 
     
    443455} 
    444456//---------------------------------------------------------------------------------------------- 
     457 
     458void AMessageTree::scrollTopics () 
     459{ 
     460        // пустой форум или спец-группа 
     461        if (m_current_forum.ID == 0 || m_current_forum.IDGroup == SPECIAL_ID_GROUP) 
     462                return; 
     463 
     464        // 
     465        // Определение диапазона возможной подгрузки данных 
     466        // 
     467 
     468        // поиск корня верхнего видимого элемента в отображении 
     469        QTreeWidgetItem* top_item = itemAt(1, 1); 
     470 
     471        if (top_item == NULL) 
     472        { 
     473                DEBUG_MSG("top_item == NULL"); 
     474                return; 
     475        } 
     476 
     477        top_item = ATreeWidgetItem::rootItem(top_item); 
     478 
     479        int from_index = indexOfTopLevelItem(top_item); 
     480 
     481        // поиск корня нижнего видимого элемента в отображении 
     482        QTreeWidgetItem* bottom_item = itemAt(1, height() - 1); 
     483 
     484        int to_index; 
     485 
     486        if (bottom_item == NULL) 
     487                to_index = topLevelItemCount(); 
     488        else 
     489        { 
     490                bottom_item = ATreeWidgetItem::rootItem(bottom_item); 
     491 
     492                to_index = indexOfTopLevelItem(bottom_item) + 1; 
     493        } 
     494 
     495        // 
     496        // Поиск еще не загруженных топиков в диапазоне 
     497        // 
     498 
     499        AMessageInfoGUIPtrList list; 
     500 
     501        while (from_index < to_index) 
     502        { 
     503                MessageTreeWidgetItem* item = static_cast<MessageTreeWidgetItem*>(topLevelItem(from_index)); 
     504 
     505                AMessageInfoGUI* info = item->pag(); 
     506 
     507                if (info->IsInfoLoaded == false) 
     508                        list.append(info); 
     509 
     510                from_index++; 
     511        } 
     512 
     513        // 
     514        // загрузка топиков, которые не загружены 
     515        // 
     516 
     517        if (list.count() == 0) 
     518                return; 
     519 
     520        // получение хранилища 
     521        std::auto_ptr<IAStorage> storage(AStorageFactory::getStorage()); 
     522 
     523        if (storage.get() == NULL) 
     524        { 
     525                QMessageBox::critical(m_parent, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 
     526                return; 
     527        } 
     528 
     529        if (storage->getTopicInfoList(list, m_me.ID, NULL) == false) 
     530        { 
     531                storage->showError(m_parent); 
     532                return; 
     533        } 
     534 
     535        AGlobal* global = AGlobal::getInstance(); 
     536 
     537        // 
     538        // Установка загруженой информации 
     539        // 
     540 
     541        for (int i = 0; i < list.count(); i++) 
     542        { 
     543                AMessageInfoGUI* info = list[i]; 
     544 
     545                info->IsInfoLoaded       = true; 
     546                info->UnreadChildCount   = 0; 
     547                info->UnreadChildCountMy = 0; 
     548 
     549                info->Item->setText(0, info->Subject); 
     550 
     551                if (info->IDUser == 0) 
     552                        info->Item->setText(1, global->AnonymousName); 
     553                else 
     554                        info->Item->setText(1, info->UserNick); 
     555 
     556                info->Item->setText(2, info->MessageDate.toString(global->DateFormat)); 
     557 
     558                if (info->HasChild == true) 
     559                        info->Item->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator); 
     560 
     561                if (info->IsRead == true) 
     562                { 
     563                        if (info->HasUnreadChildMy) 
     564                                info->Item->setIcon(0, m_child_unread_my); 
     565                        else if (info->HasUnreadChild) 
     566                                info->Item->setIcon(0, m_child_unread); 
     567                        else 
     568                                info->Item->setIcon(0, m_message_read); 
     569                } 
     570                else 
     571                { 
     572                        if (info->HasUnreadChildMy) 
     573                                info->Item->setIcon(0, m_message_unread_my); 
     574                        else 
     575                                info->Item->setIcon(0, m_message_unread); 
     576                } 
     577        } 
     578} 
     579//---------------------------------------------------------------------------------------------- 
  • branches/message_tree/message_tree.h

    r179 r181  
    130130                // 
    131131 
    132                 AForumInfo m_current_forum; 
     132                AForumInfo m_current_forum; /*!< \brief Текущий отображаемый форум  */ 
     133                AUserInfo  m_me;            /*!< \brief Текущий пользователь avalon */ 
     134 
     135                /*! 
     136                 * \brief Дозагрузка информации о топиках, находящихся в видимой области отображения 
     137                 */ 
     138                void scrollTopics (); 
    133139 
    134140        // IMessageTree 
  • branches/message_tree/model/message.h

    r118 r181  
    6767 * \brief Расширенная информация о сообщении для отображения в дереве в GUI 
    6868 */ 
    69 typedef struct AMessageInfoEx : AMessageInfo 
     69typedef struct AMessageInfoGUI : AMessageInfo 
    7070{ 
    71         bool IsRead; /*!< \brief Прочитано ли сообщение */ 
     71        bool IsInfoLoaded;       /*!< \brief Загружена ли какая-нибудь информация кроме ID */ 
     72        bool IsRead;             /*!< \brief Прочитано ли сообщение                        */ 
     73        bool HasChild;           /*!< \brief Имеются ли дочерние сообщения                 */ 
     74        bool IsBodyLoaded;       /*!< \brief Загружено ли тело сообщения                   */ 
     75        bool IsChildLoaded;      /*!< \brief Загружены ли дочерние сообщения               */ 
     76        int  HasUnreadChild;     /*!< \brief Наличие непрочитанных дочерних                */ 
     77        int  HasUnreadChildMy;   /*!< \brief Наличие непрочитанных дочерних мне            */ 
     78        int  UnreadChildCount;   /*!< \brief Количество непрочитанных дочерних             */ 
     79        int  UnreadChildCountMy; /*!< \brief Количество непрочитанных дочерних мне         */ 
     80        int  Special;            /*!< \brief Спец-данные                                   */ 
     81 
     82        QTreeWidgetItem* Item;   /*!< \brief Слинкованный элемент дерева                   */ 
     83 
     84        AMessageInfoGUI () 
     85        { 
     86                // AMessageInfo 
     87                ID             = -1; 
     88                IDTopic        = -1; 
     89                IDParent       = -1; 
     90                IDUser         = -1; 
     91                IDForum        = -1; 
     92                IDArticle      = -1; 
     93                UserTitleColor = -1; 
     94 
     95                // AMessageInfoGUI 
     96                IsInfoLoaded       = false; 
     97                IsRead             = true; 
     98                HasChild           = false; 
     99                IsBodyLoaded       = false; 
     100                IsChildLoaded      = false; 
     101                HasUnreadChild     = false; 
     102                HasUnreadChildMy   = false; 
     103                UnreadChildCount   = -1; 
     104                UnreadChildCountMy = -1; 
     105                Special            = -1; 
     106 
     107                Item = NULL; 
     108        } 
     109 
    72110} AMessageInfoEx; 
    73111 
     
    75113 * \brief Список сообщений для отображения в дереве в GUI 
    76114 */ 
    77 typedef QList<AMessageInfoEx> AMessageInfoExList; 
    78  
    79 /*! 
    80  * \brief Информация о топике для отображения дерева в GUI 
    81  */ 
    82 typedef struct ATopicInfo : AMessageInfoEx 
    83 { 
    84         bool HasChild;       /*!< \brief Есть ли дочерние сообщения */ 
    85         int  HasUnreadChild; /*!< \brief Есть ли дочерние непрочитанные сообщения 0 - нет, 1 - да, 2 - есть непрочитанные для текущего пользователя */ 
    86 } ATopicInfo; 
     115typedef QList<AMessageInfoGUI> AMessageInfoGUIList; 
    87116 
    88117/*! 
    89118 * \brief Список сообщений для отображения в дереве в GUI 
    90119 */ 
    91 typedef QList<ATopicInfo> ATopicInfoList; 
     120typedef QList<AMessageInfoGUI*> AMessageInfoGUIPtrList; 
    92121 
    93122/*! 
  • branches/message_tree/storage/istorage.h

    r177 r181  
    136136 
    137137                /*! 
    138                  * \brief Заполняет полную информацию о топиках за исключением тела самого сообщения, 
    139                  * тело сообщения будет запрошено при помощи IAStorage::GetMessageBody, по мере необходимости. 
    140                  * \param list Список топиков. 
     138                 * \brief Заполняет информацию о топиках 
     139                 * Поля списка (кроме ID и Item) предполагаются заполненными значениями полей по умолчанию (см. AMessageInfoGUI::AMessageInfoGUI()) и не меняются без необходимости. 
     140                 * Функция должна заполнить все поля AMessageInfo плюс установить флаги IsRead, HasUnreadChild, HasUnreadChildMy в актуальные значения. 
     141                 * Функция НЕ должна устанавливать флаг IsInfoLoaded (устанавливается вызвающим кодом) 
     142                 * \param list Список топиков (с установленным полем ID, по которому будет производиться дальнейшее заполнение информацией). 
    141143                 * \param id_me ID текущего пользователя 
    142144                 * \param progress Прогресс выполнения операции. 
    143145                 */ 
    144                 virtual bool getTopicInfoList (ATopicInfoList& list, int id_me, IProgress* progress = NULL) = 0; 
     146                virtual bool getTopicInfoList (AMessageInfoGUIPtrList& list, int id_me, IProgress* progress = NULL) = 0; 
    145147 
    146148                /*! 
     
    152154                 * \param progress Прогресс выполнения операции. 
    153155                 */ 
    154                 virtual bool getTopicMessageList (int id_topic, ATopicInfoList& list, int id_me, IProgress* progress = NULL) = 0; 
     156                virtual bool getTopicMessageList (int id_topic, AMessageInfoGUIList& list, int id_me, IProgress* progress = NULL) = 0; 
    155157 
    156158                /*! 
  • branches/message_tree/storage/mysql_storage.cpp

    r179 r181  
    19431943//---------------------------------------------------------------------------------------------- 
    19441944 
    1945 bool AMySQLStorage::getTopicInfoList (ATopicInfoList& list, int id_me, IProgress* progress) 
     1945bool AMySQLStorage::getTopicInfoList (AMessageInfoGUIPtrList& list, int id_me, IProgress* progress) 
    19461946{ 
    19471947        if (progress != NULL) 
     
    19531953        for (int i = 0; i < list.count(); i++) 
    19541954        { 
    1955                 ids += QString::number(list[i].ID); 
     1955                ids += QString::number(list[i]->ID); 
    19561956 
    19571957                if (i < list.count() - 1) 
     
    19921992                return returnError(AMySQLDatabase::getLastError()); 
    19931993 
     1994        query_select->setForwardOnly(true); 
     1995 
    19941996        if (query_select->exec() == false) 
    19951997                return returnError(query_select->getLastError()); 
     
    20002002 
    20012003                for (int i = 0; i < list.count(); i++) 
    2002                         if (id == list[i].ID) 
     2004                { 
     2005                        AMessageInfoGUI* info = list[i]; 
     2006 
     2007                        if (id == info->ID) 
    20032008                        { 
    2004                                 list[i].IDTopic        = query_select->value(1).toInt(); 
    2005                                 list[i].IDParent       = query_select->value(2).toInt(); 
    2006                                 list[i].IDUser         = query_select->value(3).toInt(); 
    2007                                 list[i].IDForum        = query_select->value(4).toInt(); 
    2008                                 list[i].Subject        = query_select->value(5).toString(); 
    2009                                 list[i].MessageName    = query_select->value(6).toString(); 
    2010                                 list[i].UserNick       = query_select->value(7).toString(); 
    2011                                 list[i].IDArticle      = query_select->value(8).toInt(); 
    2012                                 list[i].MessageDate    = query_select->value(9).toDateTime(); 
    2013                                 list[i].UpdateDate     = query_select->value(10).toDateTime(); 
    2014                                 list[i].UserRole       = query_select->value(11).toString(); 
    2015                                 list[i].UserTitle      = query_select->value(12).toString(); 
    2016                                 list[i].UserTitleColor = query_select->value(13).toInt(); 
    2017                                 list[i].LastModerated  = query_select->value(14).toDateTime(); 
    2018                                 list[i].HasChild       = query_select->value(15).toInt(); 
    2019  
    2020                                 list[i].IsRead         = true; 
    2021                                 list[i].HasUnreadChild = 0; 
     2009                                // AMessageInfo 
     2010                                info->IDTopic        = query_select->value(1).toInt(); 
     2011                                info->IDParent       = query_select->value(2).toInt(); 
     2012                                info->IDUser         = query_select->value(3).toInt(); 
     2013                                info->IDForum        = query_select->value(4).toInt(); 
     2014                                info->Subject        = query_select->value(5).toString(); 
     2015                                info->MessageName    = query_select->value(6).toString(); 
     2016                                info->UserNick       = query_select->value(7).toString(); 
     2017                                info->IDArticle      = query_select->value(8).toInt(); 
     2018                                info->MessageDate    = query_select->value(9).toDateTime(); 
     2019                                info->UpdateDate     = query_select->value(10).toDateTime(); 
     2020                                info->UserRole       = query_select->value(11).toString(); 
     2021                                info->UserTitle      = query_select->value(12).toString(); 
     2022                                info->UserTitleColor = query_select->value(13).toInt(); 
     2023                                info->LastModerated  = query_select->value(14).toDateTime(); 
     2024                                info->HasChild       = query_select->value(15).toInt(); 
     2025 
     2026                                // AMessageInfoGUI (в остальные данные не вмешиваемся) 
     2027                                info->IsInfoLoaded = true; 
    20222028 
    20232029                                break; 
    20242030                        } 
    2025         } 
    2026  
    2027         // 
    2028         // получение списка непрочитаных 
     2031                } 
     2032        } 
     2033 
     2034        // 
     2035        // получение списка непрочитаных топиков 
    20292036        // 
    20302037 
     
    20422049                return returnError(AMySQLDatabase::getLastError()); 
    20432050 
     2051        query_select_unread->setForwardOnly(true); 
     2052 
    20442053        if (query_select_unread->exec() == false) 
    20452054                return returnError(query_select_unread->getLastError()); 
     
    20502059 
    20512060                for (int i = 0; i < list.count(); i++) 
    2052                         if (id == list[i].ID) 
     2061                { 
     2062                        AMessageInfoGUI* info = list[i]; 
     2063 
     2064                        if (id == info->ID) 
    20532065                        { 
    2054                                 list[i].IsRead = false; 
     2066                                info->IsRead = false; 
    20552067                                break; 
    20562068                        } 
     2069                } 
    20572070        } 
    20582071 
     
    20772090                return returnError(AMySQLDatabase::getLastError()); 
    20782091 
     2092        query_select_unread_child->setForwardOnly(true); 
     2093 
    20792094        if (query_select_unread_child->exec() == false) 
    20802095                return returnError(query_select_unread_child->getLastError()); 
     
    20862101 
    20872102                for (int i = 0; i < list.count(); i++) 
    2088                         if (id == list[i].ID) 
     2103                { 
     2104                        AMessageInfoGUI* info = list[i]; 
     2105 
     2106                        if (id == info->ID) 
    20892107                        { 
    20902108                                if (id_parent_user > 1) 
    2091                                         list[i].HasUnreadChild = 2; 
     2109                                        info->HasUnreadChildMy = true; 
    20922110                                else 
    2093                                         list[i].HasUnreadChild = 1; 
     2111                                        info->HasUnreadChild = true; 
    20942112 
    20952113                                break; 
    20962114                        } 
     2115                } 
    20972116        } 
    20982117 
     
    21012120//---------------------------------------------------------------------------------------------- 
    21022121 
    2103 bool AMySQLStorage::getTopicMessageList (int id_topic, ATopicInfoList& list, int id_me, IProgress* progress) 
     2122bool AMySQLStorage::getTopicMessageList (int id_topic, AMessageInfoGUIList& list, int id_me, IProgress* progress) 
    21042123{ 
     2124/* 
    21052125        if (progress != NULL) 
    21062126                progress->onProgress(0); 
     
    22122232 
    22132233        return returnSuccess(); 
     2234*/ 
     2235        returnError(QString::fromUtf8("AMySQLStorage::getTopicMessageList")); 
    22142236} 
    22152237//---------------------------------------------------------------------------------------------- 
  • branches/message_tree/storage/mysql_storage.h

    r177 r181  
    5757                bool getUnreadCount         (AUnreadForumCountInfoList& list, IProgress* progress = NULL); 
    5858                bool getForumTopicList      (int id_forum, int count, QList<int>& list, IProgress* progress = NULL); 
    59                 bool getTopicInfoList       (ATopicInfoList& list, int id_me, IProgress* progress = NULL); 
    60                 bool getTopicMessageList    (int id_topic, ATopicInfoList& list, int id_me, IProgress* progress = NULL); 
     59                bool getTopicInfoList       (AMessageInfoGUIPtrList& list, int id_me, IProgress* progress = NULL); 
     60                bool getTopicMessageList    (int id_topic, AMessageInfoGUIList& list, int id_me, IProgress* progress = NULL); 
    6161                bool getMessageBody         (int id_message, QString& body, IProgress* progress = NULL); 
    6262                bool setIDsAsRead           (const QList<int>& list, AIDSet type, bool read, QDateTime date, IProgress* progress = NULL); 
  • branches/message_tree/sysheaders.h

    r179 r181  
    8282#define DEBUG_MSG(x) QMessageBox::critical(0, QString::fromUtf8("Ошибка!"), x) 
    8383 
     84/*! 
     85 * \brief Макрос для отладки и легкого вывода алерта (числа), в релизе использоваться не должен. 
     86 * \param x число для вывода. 
     87 */ 
     88#define DEBUG_INT(x) DEBUG_MSG(QString::number(x)) 
     89 
    8490#ifndef Q_WS_WIN 
    8591 
  • branches/message_tree/version.h

    r179 r181  
    2020 * \brief Дата билда (заменяется автоматически при каждом билде в version.h, что и приводит к смене номера ревизии) 
    2121 */ 
    22 #define AVALON_DATE "Пнд Мар 23 11:39:19 MSK 2009" 
     22#define AVALON_DATE "Пнд Мар 23 20:37:20 MSK 2009" 
    2323 
    2424#endif 
Note: See TracChangeset for help on using the changeset viewer.