| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- #pragma once
- #include <QString>
- #include <QVector>
- #include <QTreeWidgetItem>
- #define CMP_CODE_NOEQUAL
- enum RC_DIRECTION
- {
- RC_LEFT = 0,
- RC_RIGHT,
- };
- enum RC_CMP_RESULT
- {
- RC_RESULT_EQUAL=0,
- RC_RESULT_NOEQUAL,
- };
- enum RC_FILE_TYPE
- {
- RC_FILE = 1000,
- RC_DIR,
- RC_PAD_FILE
- };
- enum RC_ITEM_STATUS
- {
- RC_COLLAPSED = 0,
- RC_EXPANDED,
- };
- enum BLOCKSTATUS {
- UNKNOWN_BLOCK = 0,
- EQUAL_BLOCK = 1,
- UNEQUAL_BLOCK,
- PAD_BLOCK,
- //EMPTY_BLOCK,
- LAST_PAD_EMPTY_BLOCK, // 最后一个用于对齐的空行
- TEMP_INSERT_BLOCK
- };
- /* 是放置在block中的userState,-1是保留行,因为-1是默认没有时的值,标识新插入行 */
- enum RC_LINE_FORM
- {
- PAD_LINE = -2,//对齐行
- //-1没有使用QTextBlock::userState()的默认值
- UNKNOWN_LINE =0, //未知就是没有换行符号。当做没有
- UNIX_LINE,
- DOS_LINE,
- MAC_LINE,
- };
- typedef struct equalLineInfo_ {
- int index;//相等行序号,左右值
- int leftLineNums;
- int rightLineNums;
- }EqualLineInfo;
- typedef struct noequalblock_ {
- int startBlockNums; //开始的块号。左右两边都是一样的
- int blockLens;//左右长度。理论上二者是相等的,故只需要一个
- bool isDeleted; //是否已经被同步。即被删除过了,下次跳过这个
- int type; //
- noequalblock_()
- {
- type = UNKNOWN_BLOCK;
- }
- noequalblock_(int start, int lens)
- {
- startBlockNums = start;
- blockLens = lens;
- isDeleted = false;
- type = UNKNOWN_BLOCK;
- }
- bool operator==(const noequalblock_& other)
- {
- return (startBlockNums == other.startBlockNums);
- }
- }NoEqualBlock;
- enum CODE_ID {
- UNKOWN = -2,//其实应该是ANSI中的非GBK编码。暂时不考虑其它国家语言编码,则直接按照ASCII进行字节处理
- ANSI = -1,
- UTF8_NOBOM,//如果是这种,其实需要确定到底椒UTF8 还是ANSI
- UTF8_BOM, //UTF8_WITH BOM
- UNICODE_LE,
- UNICODE_BE,
- GBK,
- //增加国际化的几种语言
- EUC_JP,//日本鬼子
- Shift_JIS,//日文另外一种
- EUC_KR,//韩国
- KOI8_R,//俄罗斯
- TSCII,//泰国
- TIS_620,//泰文
- CODE_END //最后一个标志,在UI上是显示一个UNKNOWN,这是一个特殊
- };
- /*作用:这个类主要统计左右不同的块,给界面上的“上一部分”和“下一部分”来使用。
- */
- typedef struct BlocksInfo_ {
- public:
- BlocksInfo_()
- {
- startLine = 0;
- endLine = 0;
- }
- BlocksInfo_(bool equal_, int startLine_, int endLine_, int actualNums_)
- {
- equal = equal_;
- actualNums = actualNums_;
- startLine = startLine_;
- endLine = endLine_;
- }
- public:
- bool equal;//相同true,不同false
- int actualNums;//实际数据行数
- int startLine; //起点块的行号码
- int endLine;//终点块,不包含此块
- }BlocksInfo;
- //每一小段的字符,主要是将相等和不等的字符段分开
- typedef struct SectionNode_ {
- bool equal; //是否相等
- QString text;
- //QByteArray text;
- }SectionNode;
- //每一小段的二进制字节,主要是将相等和不等的二进制字符段分开
- typedef struct BinSectionNode_ {
- bool equal; //是否相等
- QVector<uchar> bytes;
- }BinSectionNode;
- typedef struct BinUnequalPos_ {
- int start;
- int end;
- }BinUnequalPos;
- //每一行的数据结构。每一行包含许多相等或不相等的小段
- typedef struct LineNode_ {
- int lineNums;//行的号码
- bool totalEqual;//是否完全相等
- QVector<SectionNode> lineText;
- LineNode_()
- {
- totalEqual = false;
- }
- void clear()
- {
- totalEqual = false;
- lineText.clear();
- }
- }LineNode;
- extern RC_LINE_FORM getLineEndType(QString line);
- extern RC_LINE_FORM getLineEndType(const LineNode& lines);
- #ifdef Q_OS_UNIX
- extern QString loadFontFromFile(QString path,int code=0);
- #endif
- typedef struct ModifyRecords_ {
- int position;//当前修改位置
- int modificationType;//1:增加 2 删除
- int length;//修改的长度
- int linesAdded;//增加多少行。正为增加,负数为减少
- bool isInPaste;//是否在拷贝中,在的话前面一个删除不能做处理,要等到后续添加消息
- ModifyRecords_(int position_, int type_, int length_, int linesAdded_) :position(position_), modificationType(type_), length(length_), linesAdded(linesAdded_)
- {
- isInPaste = false;
- }
- }ModifyRecords;
- typedef struct fileAttriNode_ {
- QString relativePath;//不带/而且不带最外层目录路径
- int type; //file or dirs,pad
- //int index; //用于表示先后顺序,用于向前向后的排序查找
- QTreeWidgetItem* parent; //父节点
- QTreeWidgetItem* selfItem; //如果是目录,则标记自己的节点
- fileAttriNode_()
- {
- parent = nullptr;
- }
- fileAttriNode_(QString relativePath_)
- {
- relativePath = relativePath_;
- }
- bool operator==(const fileAttriNode_& other) const
- {
- return (relativePath.compare(other.relativePath) == 0);
- }
- }fileAttriNode;
- struct WalkFileInfo {
- int direction;
- QTreeWidgetItem* root;
- QString path;
- WalkFileInfo(int dire_, QTreeWidgetItem* root_, QString path_) :direction(dire_), root(root_), path(path_)
- {
- }
- };
- const int MARGIN_NONE = 0;
- const int MARGIN_SYNC_BT = 1;
- const int MARGIN_SYNC_BT_BIT_MASK = 0x2;
- const int MARGIN_VER_LINE = 2;
- const int MARGIN_VER_LINE_BIT_MASK = 0x4;
- const int MARGIN_LINE_NUM = 3;
- enum WORK_STATUS
- {
- FREE_STATUS = 0,
- CMP_WORKING
- };
- #define OPEN_UNDO_REDO 1
- #ifdef OPEN_UNDO_REDO
- class BlockUserData;
- struct OperatorInfo {
- int startLineNums; //开始行号
- int lineLens;//左右长度。理论上二者是相等的,故只需要一个
- int type;
- QList<int> lineLength; //每一行的长度
- QList<char*> lineContents;// 每一行的内容
- QList<BlockUserData*> lineExternInfo; //每一行的额外信息
- NoEqualBlock noEqualBlockInfo;
- int noEqualindex;
- };
- enum OperRecordStatus {
- RC_OPER_SYNC = 1,//同步导致
- RC_OPER_EDIT,//编辑导致
- };
- const int Item_RelativePath = Qt::ToolTipRole;
- const int Item_Index = Qt::UserRole + 1;
- const int DIR_ITEM_MAXSIZE_FILE = Qt::UserRole + 2;
- #endif
|