main.h

Go to the documentation of this file.
00001 #ifndef __MAIN_H__
00002 #define __MAIN_H__
00003 
00004 #include <stdio.h>
00005 
00006 #include <QApplication>
00007 #include <QClipboard>
00008 #include <QObject>
00009 #include <QWidget>
00010 #include <QDialog>
00011 #include <QtGlobal>
00012 
00013 #include <QDomNode>
00014 #include <QTreeView>
00015 #include <QTextEdit>
00016 #include <QPushButton>
00017 #include <QVBoxLayout>
00018 #include <QSizePolicy>
00019 
00020 #include "mainwindow.h"
00021 
00022 // 1 - Первая версия с приблизительной формой
00023 
00024 // 14 - Основана на версиях 1-13
00025 //    - В классе xmltree реализован обход DOM дерева на предмет поиска
00026 //      элементов node и record
00027 
00028 // 17 - Основана на версиях 14-16
00029 //    - Класс treeitem стал промежуточным абстрактным классом
00030 //    - Введен класс treenode который хранит дерево папок, в котором должны будут
00031 //      отсутствовать элементы - конечные записи
00032 
00033 // 39 - Основана на версиях 17-38
00034 //    - Сделано добавление записи с сохранением изменений
00035 
00036 // 101 - Основана на версиях 39-100
00037 //     - Сделан основной функционал
00038 //       Добавление ветки
00039 //       Добавление подветки
00040 //       Редактирование названия ветки
00041 //       Удаление ветки
00042 //       Полное раскрытие ветки
00043 //       Полное схлопывание ветки
00044 //       Перемещение ветки вверх и вниз в пределах уровня вложенности
00045 //       Добавление записи
00046 //       Редактирование записи в поле просмотра/редактора
00047 //       Редактирование заголовка записи
00048 //       Удаление записи
00049 //       Вырезка записей
00050 //       Копирование записей
00051 //       Вставка записей
00052 //       Перемещение записей вверх и вниз
00053 
00054 // 104 - Основана на версиях 101-103
00055 //     - Добавлен запрет редактирования записи если в таблице нет 
00056 //       ни одной записи, этот режим в данный момент уже невидим
00057 //     - Если в ветке нет ни одной записи, показывается пустой список и пустые
00058 //       поля редактирования
00059 //     - При клике на ветку меняется курсор, так как эта операция может 
00060 //       быть длительной
00061 
00062 // 114 - Основана на версиях 104-113
00063 //     - Добавлен прототип виджета поиска по базе, настроены кнопки 
00064 //       его появления и сокрытия. Сделаны основные кнопки поиска
00065 
00066 
00067 #define GAME_RELEASE_VERSION            0
00068 #define GAME_RELEASE                  114
00069 
00070 // В каком режиме компилировать
00071 // 0 - отладочный режим
00072 // 1 - режим релиза
00073 #define COMPILE_MODE                    0
00074 
00075 #if (COMPILE_MODE==0)
00076  // Для отладочного режима
00077 
00078  // Если определено, печатаются все выводы DPF в консоль
00079  #define DEBUG_PRINT // for DPF
00080 #else
00081  // Для режима релиза
00082 
00083 #endif
00084 
00085 
00086 #define CURRENT_FORMAT_VERSION    1
00087 #define CURRENT_FORMAT_SUBVERSION 1
00088 
00089 
00090 #ifdef  DEBUG_PRINT
00091 #define DPF(X) logprint X
00092 #else
00093 #define DPF(X)
00094 #endif
00095 
00096 // Прототипы функций, которые могут использоваться в других файлах
00097 void logprint(char *lpszText, ...);
00098 void critical_error(QString message);
00099 void info_window(QString i);
00100 QString xmlnode_to_string(QDomNode xmldata);
00101 QString convert_to_lastnumformat(int n);
00102 void remove_dir(QString namedirfrom);
00103 void print_object_tree(void);
00104 bool compare_QStringList_len(const QStringList &list1, const QStringList &list2);
00105 int imax(int x1, int x2);
00106 int imin(int x1, int x2);
00107 
00108 
00109 // template <class X> inline X *find_object(QString n);
00110 
00111 // Поиск объекта от корня по имени
00112 template <class X> inline X *find_object(QString n)
00113 {
00114  QObject *findobj;
00115 
00116  extern QObject *mainwindowpointer;
00117 
00118  // Если запрошен сам корень
00119  if(n=="mainwindow")
00120   {
00121    QObject *mvp=qobject_cast<X *>(mainwindowpointer);
00122 
00123    if(mvp->metaObject()->className()!=mainwindowpointer->metaObject()->className())
00124     {
00125      // Если запрошенный класс объекта не является классом главного окна
00126      printf("find_object(): Can't find mainwindow object. Check <type> in function call\n");
00127      exit(1);
00128      return NULL;
00129     }
00130    else
00131     return qobject_cast<X *>(mainwindowpointer);
00132   }
00133 
00134  // Запрошен обычный объект, надо его найти
00135  findobj=qFindChild<X *>(mainwindowpointer,n);
00136 
00137  if(findobj==NULL)
00138   {
00139    // Если объекта с указанным именем не найдено
00140    printf("find_object(): Can't find object with name %s\n",qPrintable(n));
00141    exit(1);
00142    return NULL;
00143   }
00144  else
00145   {
00146    // ОБъект был найден, и нужно преобразовать указатель на него
00147    // к указателю c заданным в шаблоне типом
00148    X *obj=qobject_cast<X *>(findobj);
00149 
00150    if(obj==0)
00151     {
00152      // Если найденный объект не может быть преобразован к заданному в шаблоне типу
00153      printf("find_object(): Object %s find, but can't convert type. Check <type> in function call\n",qPrintable(n));
00154      exit(1);
00155      return NULL;
00156     }
00157    else
00158     return obj; // Объект найден нормально
00159   }
00160 }
00161 
00162 
00163 #endif // __MAIN_H__

Generated on Mon Feb 2 00:25:34 2009 for mytetra by  doxygen 1.5.1