diff --git a/uppsrc/Core/Core.t b/uppsrc/Core/Core.t index 245cb8008..cf4374a52 100644 --- a/uppsrc/Core/Core.t +++ b/uppsrc/Core/Core.t @@ -17,6 +17,7 @@ ruRU("Прервано пользователем") srSP("Prekinuto od strane korisnika.") trTR("Kullanıcı tarafından iptal edildi.") zhCN("用户放弃") +zhTW("使用者取消") // TimeDate.cpp @@ -35,6 +36,7 @@ ruRU("Суббота") srSP("Nedelja") trTR("Pazar") zhCN("星期日") +zhTW("星期日") T_("date\vMonday") csCZ("Pondělí") @@ -50,6 +52,7 @@ ruRU("Понедельник") srSP("Ponedeljak") trTR("Pazartesi") zhCN("星期一") +zhTW("星期一") T_("date\vTuesday") csCZ("Úterý") @@ -65,6 +68,7 @@ ruRU("Вторник") srSP("Utorak") trTR("Salı") zhCN("星期二") +zhTW("星期二") T_("date\vWednesday") csCZ("Středa") @@ -80,6 +84,7 @@ ruRU("Среда") srSP("Sreda") trTR("Çarşamba") zhCN("星期三") +zhTW("星期三") T_("date\vThursday") csCZ("Čtvrtek") @@ -95,6 +100,7 @@ ruRU("Четверг") srSP("Četvrtak") trTR("Perşembe") zhCN("星期四") +zhTW("星期四") T_("date\vFriday") csCZ("Pátek") @@ -110,6 +116,7 @@ ruRU("Пятница") srSP("Petak") trTR("Cuma") zhCN("星期五") +zhTW("星期五") T_("date\vSaturday") csCZ("Sobota") @@ -125,6 +132,7 @@ ruRU("Воскресенье") srSP("Subota") trTR("Cumartesi") zhCN("星期六") +zhTW("星期六") T_("date\vSu") csCZ("Ne") @@ -140,6 +148,7 @@ ruRU("Вс") srSP("Ne") trTR("Pz") zhCN("Fri") +zhTW("Fri") T_("date\vMo") csCZ("Po") @@ -155,6 +164,7 @@ ruRU("Пн") srSP("Po") trTR("Pts") zhCN("Mon") +zhTW("Mon") T_("date\vTu") csCZ("Út") @@ -170,6 +180,7 @@ ruRU("Вт") srSP("Ut") trTR("Sl") zhCN("Tue") +zhTW("Tue") T_("date\vWe") csCZ("St") @@ -185,6 +196,7 @@ ruRU("Ср") srSP("Sr") trTR("Çrş") zhCN("Wed") +zhTW("Wed") T_("date\vTh") csCZ("Čt") @@ -200,6 +212,7 @@ ruRU("Чт") srSP("Če") trTR("Prş") zhCN("Thu") +zhTW("Thu") T_("date\vFr") csCZ("Pa") @@ -215,6 +228,7 @@ ruRU("Пт") srSP("Pe") trTR("Cu") zhCN("") +zhTW("") T_("date\vSa") csCZ("So") @@ -230,6 +244,7 @@ ruRU("Сб") srSP("Su") trTR("Cts") zhCN("Sun") +zhTW("Sun") T_("date\vJanuary") csCZ("Leden") @@ -245,6 +260,7 @@ ruRU("Январь") srSP("Januar") trTR("Ocak") zhCN("一月") +zhTW("一月") T_("date\vFebruary") csCZ("Únor") @@ -260,6 +276,7 @@ ruRU("Февраль") srSP("Februar") trTR("Şubat") zhCN("二月") +zhTW("二月") T_("date\vMarch") csCZ("Březen") @@ -275,6 +292,7 @@ ruRU("Март") srSP("Mart") trTR("Mart") zhCN("三月") +zhTW("三月") T_("date\vApril") csCZ("Duben") @@ -290,6 +308,7 @@ ruRU("Апрель") srSP("April") trTR("Nisan") zhCN("四月") +zhTW("四月") T_("date\vMay") csCZ("Květen") @@ -305,6 +324,7 @@ ruRU("Май") srSP("Maj") trTR("Mayıs") zhCN("五月") +zhTW("五月") T_("date\vJune") csCZ("Červen") @@ -320,6 +340,7 @@ ruRU("Июнь") srSP("Jun") trTR("Haziran") zhCN("六月") +zhTW("六月") T_("date\vJuly") csCZ("Červenec") @@ -335,6 +356,7 @@ ruRU("Июль") srSP("Jul") trTR("Temmuz") zhCN("七月") +zhTW("七月") T_("date\vAugust") csCZ("Srpen") @@ -350,6 +372,7 @@ ruRU("Август") srSP("Avgust") trTR("Ağustos") zhCN("八月") +zhTW("八月") T_("date\vSeptember") csCZ("Září") @@ -365,6 +388,7 @@ ruRU("Сентябрь") srSP("Septembar") trTR("Eylül") zhCN("九月") +zhTW("九月") T_("date\vOctober") csCZ("Říjen") @@ -380,6 +404,7 @@ ruRU("Октябрь") srSP("Oktobar") trTR("Ekim") zhCN("十月") +zhTW("十月") T_("date\vNovember") csCZ("Listopad") @@ -395,6 +420,7 @@ ruRU("Ноябрь") srSP("Novembar") trTR("Kasım") zhCN("十一月") +zhTW("十一月") T_("date\vDecember") csCZ("Prosinec") @@ -410,6 +436,7 @@ ruRU("Декабрь") srSP("Decembar") trTR("Aralık") zhCN("十二月") +zhTW("十二月") T_("sdate\vJan") csCZ("Led") @@ -425,6 +452,7 @@ ruRU("Янв") srSP("Jan") trTR("Ock") zhCN("Jan") +zhTW("Jan") T_("sdate\vFeb") csCZ("Úno") @@ -440,6 +468,7 @@ ruRU("Фев") srSP("Feb") trTR("Şub") zhCN("Feb") +zhTW("Feb") T_("sdate\vMar") csCZ("Bře") @@ -455,6 +484,7 @@ ruRU("Мрт") srSP("Mar") trTR("Mar") zhCN("Mar") +zhTW("Mar") T_("sdate\vApr") csCZ("Dub") @@ -470,6 +500,7 @@ ruRU("Апр") srSP("Apr") trTR("Nis") zhCN("Apr") +zhTW("Apr") T_("sdate\vMay") csCZ("Kvě") @@ -485,6 +516,7 @@ ruRU("Май") srSP("Maj") trTR("May") zhCN("May") +zhTW("May") T_("sdate\vJun") csCZ("Čer") @@ -500,6 +532,7 @@ ruRU("Инь") srSP("Jun") trTR("Haz") zhCN("Jun") +zhTW("Jun") T_("sdate\vJul") csCZ("Čec") @@ -515,6 +548,7 @@ ruRU("Иль") srSP("Jul") trTR("Tem") zhCN("Jul") +zhTW("Jul") T_("sdate\vAug") csCZ("Srp") @@ -530,6 +564,7 @@ ruRU("Авг") srSP("Avg") trTR("Ağu") zhCN("Aug") +zhTW("Aug") T_("sdate\vSep") csCZ("Zář") @@ -545,6 +580,7 @@ ruRU("Сен") srSP("Sep") trTR("Eyl") zhCN("Sep") +zhTW("Sep") T_("sdate\vOct") csCZ("Říj") @@ -560,6 +596,7 @@ ruRU("Окт") srSP("Okt") trTR("Ekm") zhCN("Oct") +zhTW("Oct") T_("sdate\vNov") csCZ("Lis") @@ -575,6 +612,7 @@ ruRU("Ноя") srSP("Nov") trTR("Kas") zhCN("Nov") +zhTW("Nov") T_("sdate\vDec") csCZ("Pro") @@ -590,6 +628,7 @@ ruRU("Дек") srSP("Dec") trTR("Arl") zhCN("Dec") +zhTW("Dec") // Convert.cpp @@ -608,6 +647,7 @@ ruRU("Неправильное число!") srSP("Pogrešan broj!") trTR("Geçersiz sayı !") zhCN("无效数字!") +zhTW("無效數字!") T_("Invalid date !") csCZ("Chybný zápis data !") @@ -623,6 +663,7 @@ ruRU("Неправильная дата!") srSP("Pogrešan datum!") trTR("Geçersiz tarih !") zhCN("无效日期") +zhTW("無效日期") T_("Invalid time !") csCZ("Chybný čas") @@ -638,6 +679,7 @@ ruRU("Неправильное время !") srSP("") trTR("Geçersiz Zaman !") zhCN("") +zhTW("無效時間") T_("Null value not allowed.") csCZ("Hodnota nesmí být prázdná.") @@ -653,6 +695,7 @@ ruRU("Нулевое значение не разрешено.") srSP("Bez vrednosti nisu dopuštene.") trTR("Bu alan boş bırakılamaz.") zhCN("不允许空值.") +zhTW("不允許空值.") T_("Number must be between %d and %d.") csCZ("Číslo musí být v rozsahu %d až %d.") @@ -669,6 +712,7 @@ ruRU("Число должно быть в пределах между %d и " srSP("Broj mora biti između %d i %d.") trTR("Girilen sayı %d ile %d aralığında olmaldır.") zhCN("数字必须在%d和%d之间.") +zhTW("數字必須在%d和%d之間.") T_("Number must be between %g and %g.") csCZ("Číslo musí být v rozsahu %g až %g.") @@ -685,6 +729,7 @@ ruRU("Число должно быть в пределах между %g и " srSP("Broj mora biti između %g i %g.") trTR("Girilen sayı %g ile %g aralığında olmaldır.") zhCN("数字必须在%g和%g之间.") +zhTW("數字必須在%g和%g之間.") T_("Date must be between ") csCZ("Datum musí být v rozsahu ") @@ -700,6 +745,7 @@ ruRU("Дата должна быть в пределах ") srSP("Datum mora biti između ") trTR("Girilen tarih") zhCN("日期必须介入") +zhTW("日期必須介於") T_("range\v and ") csCZ(" až ") @@ -715,6 +761,7 @@ ruRU(" и ") srSP(" i ") trTR(" and ") zhCN(" 和 ") +zhTW(" 和 ") T_("Time must be between ") csCZ("Čas musí být od") @@ -730,6 +777,7 @@ ruRU("Время должно быть в интервале") srSP("") trTR("Time must be between ") zhCN("") +zhTW("時間必須介於 ") T_("Please enter no more than %d characters.") csCZ("Text nesmí být delší než %d znaků.") @@ -745,6 +793,7 @@ ruRU("Пожайлуста, введите не более чем %d симво srSP("Molim vas unesite najviše %d slova.") trTR("Lütfen en fazla %d karakter girin.") zhCN("输入请不要超过%d字符") +zhTW("輸入請不要超過%d字元") // t.cpp @@ -763,6 +812,7 @@ ruRU("%3:02d.%2:02d.%1:04d") srSP("%3:02d.%2:02d.%1:04d") trTR("%3:02d.%2:02d.%1:04d") zhCN("%2:02d/%3:02d/%1:4d") +zhTW("%2:02d/%3:02d/%1:4d") T_("date-scan\amdy") csCZ("dmy") @@ -778,6 +828,7 @@ ruRU("dmy") srSP("dmy") trTR("dmy") zhCN("mdy") +zhTW("mdy") T_("date-filter\aA/\a .-") csCZ(".\a /,") @@ -793,6 +844,7 @@ ruRU(".\a /,") srSP(".\a /,") trTR(".\a /,") zhCN("A/\a .-") +zhTW("A/\a .-") // Lang.cpp @@ -811,6 +863,7 @@ ruRU("Неправильная спецификация языка.") srSP("Nevalidna specifikacija jezika.") trTR("Geçersiz dil.") zhCN("无效语言指示") +zhTW("無效語言指示") // Obsolete @@ -829,6 +882,7 @@ ruRU("неправильное число дня месяца.") srSP("nevalidan dan.") trTR("geçersiz gün.") zhCN("无效天数") +zhTW("無效天數") T_("invalid month number.") csCZ("neplatné číslo měsíce.") @@ -844,6 +898,7 @@ ruRU("неправильное число месяца.") srSP("nevalidan mesec.") trTR("geçersiz ay.") zhCN("无效月数") +zhTW("無效月數") T_("invalid year number.") csCZ("neplatné číslo roku.") @@ -859,6 +914,7 @@ ruRU("неправильное число года.") srSP("nevalidana godina.") trTR("geçersiz yıl.") zhCN("无效年数") +zhTW("無效年數") T_("invalid hour number.") csCZ("chybné číslo hodiny.") @@ -874,6 +930,7 @@ ruRU("неправильное число часа.") srSP("nevalidan sat.") trTR("geçersiz saat.") zhCN("无效小时") +zhTW("無效小時") T_("invalid minute number.") csCZ("chybné číslo minuty.") @@ -889,6 +946,7 @@ ruRU("неправильное число минуты.") srSP("nevalidna minuta.") trTR("geçersiz dakika.") zhCN("无效分") +zhTW("無效分") T_("invalid second number.") csCZ("chybné číslo sekundy.") @@ -904,6 +962,7 @@ ruRU("неправильное число секунды.") srSP("nevalidna sekunda.") trTR("geçersiz saniye.") zhCN("无效秒") +zhTW("無效秒") T_("invalid character '%c' following date/time.") csCZ("neplatný znak '%c' za koncem data.") @@ -919,6 +978,7 @@ ruRU("неправильный символ '%c' идущий за датой/в srSP("nevalidni karakter '%c' posle datuma/vremena.") trTR("girilen tarih/zaman bilgisi içindeki '%c' geçersiz bir karakterdir.") zhCN("日期/时间后跟字符 '%c' 无效") +zhTW("日期/時間後跟字元 '%c' 無效") T_("invalid day number %d - February in year %d has only %d days.") csCZ("neplatné číslo dne %d - únor v roce %d má pouze %d dní.") @@ -936,6 +996,7 @@ srSP("nevalidan dan %d - Februar u godini %d ima %d dana.") trTR("%d geçersiz bir gün sayısıdır - %d yılında Şubat ayı %d gün " "çeker.") zhCN("无效天数 %d - %d年二月只有%d天.") +zhTW("無效天數 %d - %d年二月只有%d天.") T_("invalid day number %d - %month has only %d days.") csCZ("neplatné číslo dne %d - %month má pouze %d dní.") @@ -952,6 +1013,7 @@ ruRU("неправильное число месяца %d - В %month тольк srSP("nevalidan dan %d - %month ima %d dana.") trTR("%d geçersiz bir gün sayısıdır - %month ayı %d gün çeker.") zhCN("无效天数 %d - %month月只有 %d 天.") +zhTW("無效天數 %d - %month月只有 %d 天.") T_("exceeded valid range (lower bound: %`).") csCZ("překročení povoleného rozsahu (dolní mez: %`).") @@ -968,6 +1030,7 @@ ruRU("превышен допустимый предел (нижний пред srSP("prekoračena validna granica (donja granica: %`).") trTR("Geçerli aralık aşıldı (alt sınır: %`).") zhCN("超出有效范围(下限:%`).") +zhTW("超出有效範圍(下限:%`).") T_("exceeded valid range (upper bound: %`).") csCZ("překročení povoleného rozsahu (horní mez: %`).") @@ -984,6 +1047,7 @@ ruRU("превышен допустимый предел (верхний пре srSP("prekoračena validna granica (gornja granica: %`).") trTR("Geçerli aralık aşıldı (üst sınır: %`).") zhCN("超出有效范围(上限:%`).") +zhTW("超出有效範圍(上限:%`).") T_("Invalid date/time: digit expected, found character") csCZ("Chybné datum/čas: očekávána číslice, nalezen znak") @@ -1000,6 +1064,7 @@ ruRU("Неправильные дата/время: ожидается цифр srSP("Nevalidan datum/vreme: očekuje se cifra, pronađen karakter") trTR("Geçersiz tarih/zaman: sayı olması gereken yerde harf var") zhCN("无效日期/时间:只能是数字,不能为字符") +zhTW("無效日期/時間:只能是數位,不能為字元") T_("Invalid date/time:") csCZ("Chybné datum/čas:") @@ -1015,3 +1080,4 @@ ruRU("Неправильные дата/время:") srSP("Nevalidan datum/vreme:") trTR("Geçersiz tarih/zaman:") zhCN("无效日期/时间:") +zhTW("無效日期/時間:") diff --git a/uppsrc/Core/Lang.cpp b/uppsrc/Core/Lang.cpp index 61c00db19..a416c65ad 100644 --- a/uppsrc/Core/Lang.cpp +++ b/uppsrc/Core/Lang.cpp @@ -321,6 +321,7 @@ const int *GetAllLanguages() { LNG_('L', 'T', 'L', 'T'), LNG_('U', 'K', 'U', 'A'), LNG_('Z', 'H', 'C', 'N'), + LNG_('Z', 'H', 'T', 'W'), LNG_('K', 'O', 'K', 'R'), LNG_('J', 'A', 'J', 'P'), 0 diff --git a/uppsrc/Core/Log.cpp b/uppsrc/Core/Log.cpp index b6ec1bc4d..5bca610b9 100644 --- a/uppsrc/Core/Log.cpp +++ b/uppsrc/Core/Log.cpp @@ -113,7 +113,7 @@ void LogStream::Create(const char *path, bool append) if(append) filesize = (int)SetFilePointer(hfile, 0, NULL, FILE_END); #else - hfile = open(filename, append ? O_CREAT|O_RDWR : O_CREAT|O_RDWR|O_TRUNC, 0644); + hfile = open(filename, append ? O_CREAT|O_RDWR|O_APPEND : O_CREAT|O_RDWR|O_TRUNC, 0644); if(append) filesize = (int)lseek(hfile, 0, SEEK_END); #endif diff --git a/uppsrc/Core/Path.cpp b/uppsrc/Core/Path.cpp index 8b167f06a..b915e0ece 100644 --- a/uppsrc/Core/Path.cpp +++ b/uppsrc/Core/Path.cpp @@ -960,10 +960,17 @@ Array FileSystemInfo::Find(String mask, int max_count) f.filename = drive; char name[256], system[256]; DWORD d; - if(c != 'A' && c != 'B' && n != DRIVE_REMOTE && n != DRIVE_UNKNOWN && - GetVolumeInformation(drive, name, 256, &d, &d, &d, system, 256)) { - if(*name) f.root_desc << " " << FromSystemCharset(name); - if(*system) f.root_desc << " [ " << FromSystemCharset(system) << " ]"; + if(c != 'A' && c != 'B' && n != DRIVE_REMOTE && n != DRIVE_UNKNOWN) { + bool b = GetVolumeInformation(drive, name, 256, &d, &d, &d, system, 256); + if(b) { + if(*name) f.root_desc << " " << FromSystemCharset(name); + if(*system) f.root_desc << " [ " << FromSystemCharset(system) << " ]"; + } + else + if(n == DRIVE_REMOVABLE) { + fi.Drop(); + continue; + } } switch(n) { diff --git a/uppsrc/Core/Path.h b/uppsrc/Core/Path.h index dc3ad9a21..625c694ff 100644 --- a/uppsrc/Core/Path.h +++ b/uppsrc/Core/Path.h @@ -199,8 +199,7 @@ String GetTempFileName(const char *prefix = NULL); template class Array; -class FileSystemInfo -{ +class FileSystemInfo { public: enum { diff --git a/uppsrc/Core/StrUtil.cpp b/uppsrc/Core/StrUtil.cpp index a80f91857..e1db77291 100644 --- a/uppsrc/Core/StrUtil.cpp +++ b/uppsrc/Core/StrUtil.cpp @@ -78,6 +78,11 @@ int CharFilterDefaultToUpperAscii(int c) return ToUpper(ToAscii(c, CHARSET_DEFAULT)); } +int CharFilterCrLf(int c) +{ + return c == '\r' || c == '\n' ? c : 0; +} + String Filter(const char *s, int (*filter)(int)) { String result; diff --git a/uppsrc/Core/String.h b/uppsrc/Core/String.h index 13dca6570..3632d21bd 100644 --- a/uppsrc/Core/String.h +++ b/uppsrc/Core/String.h @@ -775,6 +775,7 @@ int CharFilterAlphaToLower(int c); int CharFilterInt(int c); int CharFilterDouble(int c); int CharFilterDefaultToUpperAscii(int c); +int CharFilterCrLf(int c); String Filter(const char *s, int (*filter)(int)); String FilterWhile(const char *s, int (*filter)(int)); diff --git a/uppsrc/Core/Util.cpp b/uppsrc/Core/Util.cpp index 47935b8fa..9e0e0eff9 100644 --- a/uppsrc/Core/Util.cpp +++ b/uppsrc/Core/Util.cpp @@ -35,6 +35,12 @@ void PanicMessageBox(const char *title, const char *text) void Panic(const char *msg) { +#ifdef PLATFORM_POSIX + signal(SIGILL, SIG_DFL); + signal(SIGSEGV, SIG_DFL); + signal(SIGBUS, SIG_DFL); + signal(SIGFPE, SIG_DFL); +#endif if(PanicMode) return; PanicMode = true; diff --git a/uppsrc/Core/XML.h b/uppsrc/Core/XML.h index 81581b663..c5543aa98 100644 --- a/uppsrc/Core/XML.h +++ b/uppsrc/Core/XML.h @@ -65,6 +65,7 @@ public: void SkipWhites(); bool IsEof(); + const char *GetPtr() const { return term; } bool IsTag(); String ReadTag(); diff --git a/uppsrc/Core/t.h b/uppsrc/Core/t.h index 667fa0f63..bd3316464 100644 --- a/uppsrc/Core/t.h +++ b/uppsrc/Core/t.h @@ -80,6 +80,7 @@ #define ltLT(text) { LNGC_('L','T','L','T', CHARSET_UTF8), text }, #define ukUA(text) { LNGC_('U','K','U','A', CHARSET_UTF8), text }, #define zhCN(text) { LNGC_('Z','H','C','N', CHARSET_UTF8), text }, +#define zhTW(text) { LNGC_('Z','H','T','W', CHARSET_UTF8), text }, #define koKR(text) { LNGC_('K','O','K','R', CHARSET_UTF8), text }, #define jaJP(text) { LNGC_('J','A','J','P', CHARSET_UTF8), text }, @@ -289,6 +290,10 @@ INITBLOCK_(COMBINE3(LNG_MODULE, LNG_VERB, LNG_VERA)) #undef lvLV #undef ltLT #undef ukUA +#undef zhCN +#undef zhTW +#undef koKR +#undef jaJP #undef T_ diff --git a/uppsrc/CtrlCore/CtrlCore.h b/uppsrc/CtrlCore/CtrlCore.h index 803745e0d..b8c6ef67d 100644 --- a/uppsrc/CtrlCore/CtrlCore.h +++ b/uppsrc/CtrlCore/CtrlCore.h @@ -182,6 +182,8 @@ enum { DND_MOVE = 2, DND_ALL = 3, + + DND_EXACTIMAGE = 0x80000000, }; struct UDropTarget; diff --git a/uppsrc/CtrlCore/CtrlCore.t b/uppsrc/CtrlCore/CtrlCore.t index 7f5dc8236..649b86c7c 100644 --- a/uppsrc/CtrlCore/CtrlCore.t +++ b/uppsrc/CtrlCore/CtrlCore.t @@ -11,6 +11,7 @@ huHU("Ctrl+") roRO("tastă\vCtrl+") ruRU("") trTR("Ctrl+") +zhTW("") T_("key\vAlt+") deDE("Alt+") @@ -20,6 +21,7 @@ huHU("Alt+") roRO("tastă\vAlt+") ruRU("") trTR("Alt+") +zhTW("") T_("key\vShift+") deDE("Umschalt+") @@ -29,6 +31,7 @@ huHU("Shift+") roRO("tastă\vShift+") ruRU("") trTR("Shift+") +zhTW("") T_("key\vTab") deDE("Tab") @@ -38,6 +41,7 @@ huHU("Tab") roRO("tastă\vTab") ruRU("") trTR("Tab") +zhTW("") T_("key\vSpace") deDE("Leertaste") @@ -47,6 +51,7 @@ huHU("Space") roRO("tastă\vSpațiu") ruRU("") trTR("Space") +zhTW("") T_("key\vEnter") deDE("Eingabetaste") @@ -56,6 +61,7 @@ huHU("Enter") roRO("tastă\vEnter") ruRU("") trTR("Enter") +zhTW("") T_("key\vBackspace") deDE("Rückschritt") @@ -65,6 +71,7 @@ huHU("Backspace") roRO("tastă\vBackspace") ruRU("") trTR("Backspace") +zhTW("") T_("key\vCaps Lock") deDE("Umschaltverriegelung") @@ -74,6 +81,7 @@ huHU("Caps Lock") roRO("tastă\vCaps Lock") ruRU("") trTR("Caps Lock") +zhTW("") T_("key\vEsc") deDE("Esc") @@ -83,6 +91,7 @@ huHU("Esc") roRO("tastă\vEsc") ruRU("") trTR("Esc") +zhTW("") T_("key\vPage Up") deDE("Bild hoch") @@ -92,6 +101,7 @@ huHU("Page Up") roRO("tastă\vPage Up") ruRU("") trTR("Page Up") +zhTW("") T_("key\vPage Down") deDE("Bild runter") @@ -101,6 +111,7 @@ huHU("Page Down") roRO("tastă\vPage Down") ruRU("") trTR("Page Down") +zhTW("") T_("key\vEnd") deDE("Ende") @@ -110,6 +121,7 @@ huHU("End") roRO("tastă\vEnd") ruRU("") trTR("End") +zhTW("") T_("key\vHome") deDE("Pos1") @@ -119,6 +131,7 @@ huHU("Home") roRO("tastă\vHome") ruRU("") trTR("Home") +zhTW("") T_("key\vLeft") deDE("Links") @@ -128,6 +141,7 @@ huHU("Bal") roRO("tastă\vStânga") ruRU("") trTR("Left") +zhTW("") T_("key\vUp") deDE("Hoch") @@ -137,6 +151,7 @@ huHU("Up") roRO("tastă\vSus") ruRU("") trTR("Up") +zhTW("") T_("key\vRight") deDE("Rechts") @@ -146,6 +161,7 @@ huHU("Jobb") roRO("tastă\vDreapta") ruRU("") trTR("Right") +zhTW("") T_("key\vDown") deDE("Runter") @@ -155,6 +171,7 @@ huHU("Down") roRO("tastă\vJos") ruRU("") trTR("Down") +zhTW("") T_("key\vInsert") deDE("Einfg") @@ -164,6 +181,7 @@ huHU("Insert") roRO("tastă\vInsert") ruRU("") trTR("Insert") +zhTW("") T_("key\vDelete") deDE("Entf") @@ -173,6 +191,7 @@ huHU("Delete") roRO("tastă\vDelete") ruRU("") trTR("Delete") +zhTW("") T_("key\vBreak") deDE("UntBr") @@ -182,6 +201,7 @@ huHU("Break") roRO("tastă\vBreak") ruRU("") trTR("Break") +zhTW("") T_("key\vNum[*]") deDE("Num[*]") @@ -191,6 +211,7 @@ huHU("Num[*]") roRO("tastă\vNum[*]") ruRU("") trTR("Num[*]") +zhTW("") T_("key\vNum[+]") deDE("Num[+]") @@ -200,6 +221,7 @@ huHU("Num[+]") roRO("tastă\vNum[+]") ruRU("") trTR("Num[+]") +zhTW("") T_("key\vNum[-]") deDE("Num[-]") @@ -209,6 +231,7 @@ huHU("Num[-]") roRO("tastă\vNum[-]") ruRU("") trTR("Num[-]") +zhTW("") T_("key\vNum[/]") deDE("Num[/]") @@ -218,6 +241,7 @@ huHU("Num[/]") roRO("tastă\vNum[/]") ruRU("") trTR("Num[/]") +zhTW("") T_("key\vAlt") deDE("Alt") @@ -227,6 +251,7 @@ huHU("Alt") roRO("tastă\vAlt") ruRU("") trTR("Alt") +zhTW("") T_("key\vShift") deDE("Umschalt") @@ -236,6 +261,7 @@ huHU("Shift") roRO("tastă\vShift") ruRU("") trTR("Shift") +zhTW("") T_("key\vCtrl") deDE("Strg") @@ -245,3 +271,4 @@ huHU("Ctrl") roRO("tastă\vCtrl") ruRU("") trTR("Ctrl") +zhTW("") diff --git a/uppsrc/CtrlCore/Win32DnD.cpp b/uppsrc/CtrlCore/Win32DnD.cpp index 1e33b94ea..cb16397a2 100644 --- a/uppsrc/CtrlCore/Win32DnD.cpp +++ b/uppsrc/CtrlCore/Win32DnD.cpp @@ -485,9 +485,9 @@ int Ctrl::DoDragAndDrop(const char *fmts, const Image& sample, dword actions, DWORD result = 0; Image m = Ctrl::OverrideCursor(CtrlCoreImg::DndMove()); if(actions & DND_COPY) - dsrc->copy = MakeDragImage(CtrlCoreImg::DndCopy(), CtrlCoreImg::DndCopy98(), sample); + dsrc->copy = actions & DND_EXACTIMAGE ? sample : MakeDragImage(CtrlCoreImg::DndCopy(), CtrlCoreImg::DndCopy98(), sample); if(actions & DND_MOVE) - dsrc->move = MakeDragImage(CtrlCoreImg::DndMove(), CtrlCoreImg::DndMove98(), sample); + dsrc->move = actions & DND_EXACTIMAGE ? sample : MakeDragImage(CtrlCoreImg::DndMove(), CtrlCoreImg::DndMove98(), sample); sDnDSource = this; HRESULT r = DoDragDrop(obj, dsrc, (actions & DND_COPY ? DROPEFFECT_COPY : 0) | diff --git a/uppsrc/CtrlCore/Win32Keys.i b/uppsrc/CtrlCore/Win32Keys.i index 000cea433..15e8ff858 100644 --- a/uppsrc/CtrlCore/Win32Keys.i +++ b/uppsrc/CtrlCore/Win32Keys.i @@ -1,109 +1,109 @@ -K_BACK = VK_BACK + K_DELTA, -K_BACKSPACE = VK_BACK + K_DELTA, - -K_TAB = 9, - -K_SPACE = 32, - -K_RETURN = 13, -K_ENTER = K_RETURN, - -K_SHIFT_KEY = VK_SHIFT + K_DELTA, -K_CTRL_KEY = VK_CONTROL + K_DELTA, -K_ALT_KEY = VK_MENU + K_DELTA, -K_CAPSLOCK = VK_CAPITAL + K_DELTA, -K_ESCAPE = VK_ESCAPE + K_DELTA, -K_PRIOR = VK_PRIOR + K_DELTA, -K_PAGEUP = VK_PRIOR + K_DELTA, -K_NEXT = VK_NEXT + K_DELTA, -K_PAGEDOWN = VK_NEXT + K_DELTA, -K_END = VK_END + K_DELTA, -K_HOME = VK_HOME + K_DELTA, -K_LEFT = VK_LEFT + K_DELTA, -K_UP = VK_UP + K_DELTA, -K_RIGHT = VK_RIGHT + K_DELTA, -K_DOWN = VK_DOWN + K_DELTA, -K_INSERT = VK_INSERT + K_DELTA, -K_DELETE = VK_DELETE + K_DELTA, - -K_NUMPAD0 = VK_NUMPAD0 + K_DELTA, -K_NUMPAD1 = VK_NUMPAD1 + K_DELTA, -K_NUMPAD2 = VK_NUMPAD2 + K_DELTA, -K_NUMPAD3 = VK_NUMPAD3 + K_DELTA, -K_NUMPAD4 = VK_NUMPAD4 + K_DELTA, -K_NUMPAD5 = VK_NUMPAD5 + K_DELTA, -K_NUMPAD6 = VK_NUMPAD6 + K_DELTA, -K_NUMPAD7 = VK_NUMPAD7 + K_DELTA, -K_NUMPAD8 = VK_NUMPAD8 + K_DELTA, -K_NUMPAD9 = VK_NUMPAD9 + K_DELTA, -K_MULTIPLY = VK_MULTIPLY + K_DELTA, -K_ADD = VK_ADD + K_DELTA, -K_SEPARATOR = VK_SEPARATOR + K_DELTA, -K_SUBTRACT = VK_SUBTRACT + K_DELTA, -K_DECIMAL = VK_DECIMAL + K_DELTA, -K_DIVIDE = VK_DIVIDE + K_DELTA, -K_SCROLL = VK_SCROLL + K_DELTA, - -K_F1 = VK_F1 + K_DELTA, -K_F2 = VK_F2 + K_DELTA, -K_F3 = VK_F3 + K_DELTA, -K_F4 = VK_F4 + K_DELTA, -K_F5 = VK_F5 + K_DELTA, -K_F6 = VK_F6 + K_DELTA, -K_F7 = VK_F7 + K_DELTA, -K_F8 = VK_F8 + K_DELTA, -K_F9 = VK_F9 + K_DELTA, -K_F10 = VK_F10 + K_DELTA, -K_F11 = VK_F11 + K_DELTA, -K_F12 = VK_F12 + K_DELTA, - -K_A = 'A' + K_DELTA, -K_B = 'B' + K_DELTA, -K_C = 'C' + K_DELTA, -K_D = 'D' + K_DELTA, -K_E = 'E' + K_DELTA, -K_F = 'F' + K_DELTA, -K_G = 'G' + K_DELTA, -K_H = 'H' + K_DELTA, -K_I = 'I' + K_DELTA, -K_J = 'J' + K_DELTA, -K_K = 'K' + K_DELTA, -K_L = 'L' + K_DELTA, -K_M = 'M' + K_DELTA, -K_N = 'N' + K_DELTA, -K_O = 'O' + K_DELTA, -K_P = 'P' + K_DELTA, -K_Q = 'Q' + K_DELTA, -K_R = 'R' + K_DELTA, -K_S = 'S' + K_DELTA, -K_T = 'T' + K_DELTA, -K_U = 'U' + K_DELTA, -K_V = 'V' + K_DELTA, -K_W = 'W' + K_DELTA, -K_X = 'X' + K_DELTA, -K_Y = 'Y' + K_DELTA, -K_Z = 'Z' + K_DELTA, -K_0 = '0' + K_DELTA, -K_1 = '1' + K_DELTA, -K_2 = '2' + K_DELTA, -K_3 = '3' + K_DELTA, -K_4 = '4' + K_DELTA, -K_5 = '5' + K_DELTA, -K_6 = '6' + K_DELTA, -K_7 = '7' + K_DELTA, -K_8 = '8' + K_DELTA, -K_9 = '9' + K_DELTA, - -K_CTRL_LBRACKET = K_CTRL|219|K_DELTA, -K_CTRL_RBRACKET = K_CTRL|221|K_DELTA, -K_CTRL_MINUS = K_CTRL|0xbd|K_DELTA, -K_CTRL_GRAVE = K_CTRL|0xc0|K_DELTA, -K_CTRL_SLASH = K_CTRL|0xbf|K_DELTA, -K_CTRL_BACKSLASH = K_CTRL|0xdc|K_DELTA, -K_CTRL_COMMA = K_CTRL|0xbc|K_DELTA, -K_CTRL_PERIOD = K_CTRL|0xbe|K_DELTA, -K_CTRL_SEMICOLON = K_CTRL|0xbe|K_DELTA, -K_CTRL_EQUAL = K_CTRL|0xbb|K_DELTA, -K_CTRL_APOSTROPHE= K_CTRL|0xde|K_DELTA, - -K_BREAK = VK_CANCEL + K_DELTA, +K_BACK = VK_BACK + K_DELTA, +K_BACKSPACE = VK_BACK + K_DELTA, + +K_TAB = 9, + +K_SPACE = 32, + +K_RETURN = 13, +K_ENTER = K_RETURN, + +K_SHIFT_KEY = VK_SHIFT + K_DELTA, +K_CTRL_KEY = VK_CONTROL + K_DELTA, +K_ALT_KEY = VK_MENU + K_DELTA, +K_CAPSLOCK = VK_CAPITAL + K_DELTA, +K_ESCAPE = VK_ESCAPE + K_DELTA, +K_PRIOR = VK_PRIOR + K_DELTA, +K_PAGEUP = VK_PRIOR + K_DELTA, +K_NEXT = VK_NEXT + K_DELTA, +K_PAGEDOWN = VK_NEXT + K_DELTA, +K_END = VK_END + K_DELTA, +K_HOME = VK_HOME + K_DELTA, +K_LEFT = VK_LEFT + K_DELTA, +K_UP = VK_UP + K_DELTA, +K_RIGHT = VK_RIGHT + K_DELTA, +K_DOWN = VK_DOWN + K_DELTA, +K_INSERT = VK_INSERT + K_DELTA, +K_DELETE = VK_DELETE + K_DELTA, + +K_NUMPAD0 = VK_NUMPAD0 + K_DELTA, +K_NUMPAD1 = VK_NUMPAD1 + K_DELTA, +K_NUMPAD2 = VK_NUMPAD2 + K_DELTA, +K_NUMPAD3 = VK_NUMPAD3 + K_DELTA, +K_NUMPAD4 = VK_NUMPAD4 + K_DELTA, +K_NUMPAD5 = VK_NUMPAD5 + K_DELTA, +K_NUMPAD6 = VK_NUMPAD6 + K_DELTA, +K_NUMPAD7 = VK_NUMPAD7 + K_DELTA, +K_NUMPAD8 = VK_NUMPAD8 + K_DELTA, +K_NUMPAD9 = VK_NUMPAD9 + K_DELTA, +K_MULTIPLY = VK_MULTIPLY + K_DELTA, +K_ADD = VK_ADD + K_DELTA, +K_SEPARATOR = VK_SEPARATOR + K_DELTA, +K_SUBTRACT = VK_SUBTRACT + K_DELTA, +K_DECIMAL = VK_DECIMAL + K_DELTA, +K_DIVIDE = VK_DIVIDE + K_DELTA, +K_SCROLL = VK_SCROLL + K_DELTA, + +K_F1 = VK_F1 + K_DELTA, +K_F2 = VK_F2 + K_DELTA, +K_F3 = VK_F3 + K_DELTA, +K_F4 = VK_F4 + K_DELTA, +K_F5 = VK_F5 + K_DELTA, +K_F6 = VK_F6 + K_DELTA, +K_F7 = VK_F7 + K_DELTA, +K_F8 = VK_F8 + K_DELTA, +K_F9 = VK_F9 + K_DELTA, +K_F10 = VK_F10 + K_DELTA, +K_F11 = VK_F11 + K_DELTA, +K_F12 = VK_F12 + K_DELTA, + +K_A = 'A' + K_DELTA, +K_B = 'B' + K_DELTA, +K_C = 'C' + K_DELTA, +K_D = 'D' + K_DELTA, +K_E = 'E' + K_DELTA, +K_F = 'F' + K_DELTA, +K_G = 'G' + K_DELTA, +K_H = 'H' + K_DELTA, +K_I = 'I' + K_DELTA, +K_J = 'J' + K_DELTA, +K_K = 'K' + K_DELTA, +K_L = 'L' + K_DELTA, +K_M = 'M' + K_DELTA, +K_N = 'N' + K_DELTA, +K_O = 'O' + K_DELTA, +K_P = 'P' + K_DELTA, +K_Q = 'Q' + K_DELTA, +K_R = 'R' + K_DELTA, +K_S = 'S' + K_DELTA, +K_T = 'T' + K_DELTA, +K_U = 'U' + K_DELTA, +K_V = 'V' + K_DELTA, +K_W = 'W' + K_DELTA, +K_X = 'X' + K_DELTA, +K_Y = 'Y' + K_DELTA, +K_Z = 'Z' + K_DELTA, +K_0 = '0' + K_DELTA, +K_1 = '1' + K_DELTA, +K_2 = '2' + K_DELTA, +K_3 = '3' + K_DELTA, +K_4 = '4' + K_DELTA, +K_5 = '5' + K_DELTA, +K_6 = '6' + K_DELTA, +K_7 = '7' + K_DELTA, +K_8 = '8' + K_DELTA, +K_9 = '9' + K_DELTA, + +K_CTRL_LBRACKET = K_CTRL|219|K_DELTA, +K_CTRL_RBRACKET = K_CTRL|221|K_DELTA, +K_CTRL_MINUS = K_CTRL|0xbd|K_DELTA, +K_CTRL_GRAVE = K_CTRL|0xc0|K_DELTA, +K_CTRL_SLASH = K_CTRL|0xbf|K_DELTA, +K_CTRL_BACKSLASH = K_CTRL|0xdc|K_DELTA, +K_CTRL_COMMA = K_CTRL|0xbc|K_DELTA, +K_CTRL_PERIOD = K_CTRL|0xbe|K_DELTA, +K_CTRL_SEMICOLON = K_CTRL|0xbe|K_DELTA, +K_CTRL_EQUAL = K_CTRL|0xbb|K_DELTA, +K_CTRL_APOSTROPHE= K_CTRL|0xde|K_DELTA, + +K_BREAK = VK_CANCEL + K_DELTA, diff --git a/uppsrc/CtrlCore/X11Clip.cpp b/uppsrc/CtrlCore/X11Clip.cpp index 55ee0c77e..612148bd0 100644 --- a/uppsrc/CtrlCore/X11Clip.cpp +++ b/uppsrc/CtrlCore/X11Clip.cpp @@ -2,7 +2,7 @@ NAMESPACE_UPP -#define LLOG(x) // LOG(x) +#define LLOG(x) LOG(x) #ifdef PLATFORM_X11 diff --git a/uppsrc/CtrlCore/X11DnD.cpp b/uppsrc/CtrlCore/X11DnD.cpp index e19a58c7a..fe4a42a6a 100644 --- a/uppsrc/CtrlCore/X11DnD.cpp +++ b/uppsrc/CtrlCore/X11DnD.cpp @@ -1,407 +1,409 @@ -#include "CtrlCore.h" - -#define LLOG(x) // LOG(x) - -#ifdef PLATFORM_X11 - -NAMESPACE_UPP - -bool Xdnd_waiting_status; -bool Xdnd_waiting_finished; -int Xdnd_status; -int Xdnd_version; - -static Atom XdndEnter; -static Atom XdndPosition; -static Atom XdndLeave; -static Atom XdndDrop; -static Atom XdndStatus; -static Atom XdndFinished; -static Atom XdndActionCopy; -static Atom XdndActionMove; - -void InitDndAtoms() -{ - if(XdndEnter) return; - XdndEnter = XAtom("XdndEnter"); - XdndPosition = XAtom("XdndPosition"); - XdndLeave = XAtom("XdndLeave"); - XdndDrop = XAtom("XdndDrop"); - XdndStatus = XAtom("XdndStatus"); - XdndFinished = XAtom("XdndFinished"); - XdndActionCopy = XAtom("XdndActionCopy"); - XdndActionMove = XAtom("XdndActionMove"); -} - -XEvent ClientMsg(Window src, Atom type, int format = 32) -{ - XEvent e; - Zero(e); - e.xclient.type = ClientMessage; - e.xclient.display = Xdisplay; - e.xclient.window = src; - e.xclient.message_type = type; - e.xclient.format = format; - return e; -} - -struct DnDLoop : LocalLoop { - Image move, copy, reject; - Vector fmt; - const VectorMap *data; - Ptr source; - void SetFmts(Window w, Atom property); - Window src, target; - int action; - - void Request(XSelectionRequestEvent *se); - void Sync(); - String GetData(const String& f); - void Leave(); - virtual void LeftUp(Point, dword); - virtual bool Key(dword, int); - virtual void MouseMove(Point p, dword); - virtual Image CursorImage(Point, dword); -}; - -Ptr dndloop; - -void DnDLoop::Leave() -{ - if(target) { - LLOG("Sending XdndLeave to " << target); - XEvent e = ClientMsg(target, XdndLeave); - e.xclient.data.l[0] = src; - XSendEvent(Xdisplay, target, XFalse, 0, &e); - } -} - -void DnDLoop::Sync() -{ - if(Xdnd_waiting_status) - return; - bool tx = Ctrl::TrapX11Errors(); - Window root; - unsigned int d1; - int x, y, d2; - Window tgt = Xroot; - int version; - for(;;) { - if(XQueryPointer(Xdisplay, tgt, &root, &tgt, &x, &y, &d2, &d2, &d1)) { - if(!tgt) - break; - Vector x = GetPropertyInts(tgt, XAtom("XdndAware")); - LLOG("XdndAware " << tgt << ": " << x.GetCount()); - if(x.GetCount()) { - Xdnd_version = x[0]; - break; - } - } - else { - tgt = None; - break; - } - } - if(Xdnd_version < 3) - tgt = None; - if(tgt != target) { - Leave(); - target = tgt; - if(target) { - LLOG("Sending XdndEnter to " << target << ", src = " << src); - XEvent e = ClientMsg(target, XdndEnter); - e.xclient.data.l[0] = src; - e.xclient.data.l[1] = (fmt.GetCount() > 3) | (version << 24); - for(int i = 0; i < min(3, fmt.GetCount()); i++) - e.xclient.data.l[i + 2] = fmt[i]; - XSendEvent(Xdisplay, target, XFalse, 0, &e); - } - } - - if(target) { - LLOG("Sending XdndPosition to " << target << " " << x << ", " << y); - XEvent e = ClientMsg(target, XdndPosition); - e.xclient.data.l[0] = src; - e.xclient.data.l[1] = 0; - e.xclient.data.l[2] = MAKELONG(y, x); - e.xclient.data.l[3] = Xeventtime; - int action = XdndActionCopy; - if(source && source->GetTopCtrl()->GetWindow() == target) - action = XdndActionMove; - if(GetShift()) - action = XdndActionMove; - if(GetCtrl()) - action = XdndActionCopy; - e.xclient.data.l[4] = action; - XSendEvent(Xdisplay, target, XFalse, 0, &e); - XFlush(Xdisplay); - Xdnd_waiting_status = true; - dword timeout = GetTickCount(); - LLOG("Waiting for XdndStatus"); - while(Xdnd_waiting_status && GetTickCount() - timeout < 200) { - GuiSleep(0); - ProcessEvents(); - } - LLOG("Waiting status " << GetTickCount() - timeout << "ms"); - if(Xdnd_waiting_status) { - LLOG("XdndStatus timeout"); - Xdnd_status = DND_NONE; - Xdnd_waiting_status = false; - } - else - LLOG("XdndStatus recieved " << Xdnd_status); - } - Ctrl::UntrapX11Errors(tx); -} - -void Ctrl::DropStatusEvent(XEvent *event) -{ - InitDndAtoms(); - if(event->type != ClientMessage) - return; - LLOG("DropStatus Client Message " << XAtomName(event->xclient.message_type)); - if(event->type == ClientMessage && dndloop && event->xclient.data.l[0] == (int)dndloop->target) { - if(event->xclient.message_type == XdndStatus && Xdnd_waiting_status) { - LLOG("XdndStatus, xdnd action: " << XAtomName(event->xclient.data.l[4])); - Xdnd_status = (event->xclient.data.l[1] & 1) ? - event->xclient.data.l[4] == (int)XdndActionMove ? DND_MOVE : DND_COPY - : DND_NONE; - Xdnd_waiting_status = false; - } - if(event->xclient.message_type == XdndFinished && Xdnd_waiting_finished) { - LLOG("XdndFinished, xdnd action: " << XAtomName(event->xclient.data.l[2])); - if(Xdnd_version == 5) - Xdnd_status = (event->xclient.data.l[1] & 1) ? - event->xclient.data.l[2] == (int)XdndActionMove ? DND_MOVE : DND_COPY - : DND_NONE; - Xdnd_waiting_finished = false; - } - } -} - -void DnDLoop::LeftUp(Point, dword) -{ - LLOG("DnDLoop::LeftUp"); - bool tx = TrapX11Errors(); - if(target) { - LLOG("Sending XdndDrop to " << target); - XEvent e = ClientMsg(target, XdndDrop); - e.xclient.data.l[0] = src; - e.xclient.data.l[1] = 0; - e.xclient.data.l[2] = Xeventtime; - XSendEvent(Xdisplay, target, XFalse, 0, &e); - XFlush(Xdisplay); - Xdnd_waiting_finished = true; - int timeout = GetTickCount(); - LLOG("Waiting for XdndFinished"); - while(Xdnd_waiting_finished && GetTickCount() - timeout < 200) { - GuiSleep(0); - ProcessEvents(); - } - LLOG("Waiting finished " << GetTickCount() - timeout << "ms"); - if(Xdnd_waiting_status) { - LLOG("XdndFinished timeout"); - Xdnd_status = DND_NONE; - Xdnd_waiting_finished = false; - } - else - LLOG("XdndFinished recieved"); - } - EndLoop(); - UntrapX11Errors(tx); -} - -void DnDLoop::MouseMove(Point p, dword) -{ - LLOG("DnDLoop::MouseMove"); - Sync(); -} - -bool DnDLoop::Key(dword, int) -{ - LLOG("DnDLoop::Key"); - Sync(); - return false; -} - -Image DnDLoop::CursorImage(Point, dword) -{ - return Xdnd_status == DND_MOVE ? move : Xdnd_status == DND_COPY ? copy : reject; -} - -void DnDLoop::SetFmts(Window w, Atom property) -{ - Buffer x(fmt.GetCount()); - for(int i = 0; i < fmt.GetCount(); i++) { - x[i] = fmt[i]; - LLOG('\t' << XAtomName(x[i])); - } - XChangeProperty(Xdisplay, w, property, XAtom("ATOM"), - 32, 0, (unsigned char*)~x, - fmt.GetCount()); -} - -String DnDLoop::GetData(const String& f) -{ - int i = data->Find(f); - String d; - if(i >= 0) - d = (*data)[i].Render(); - else - if(source) - d = source->GetDropData(f); - return d; -} - -String DnDGetData(const String& f) -{ - String d; - if(dndloop) - d = dndloop->GetData(f); - return d; -} - -void DnDLoop::Request(XSelectionRequestEvent *se) -{ - LLOG("DnDRequest " << XAtomName(se->target)); - XEvent e; - e.xselection.type = SelectionNotify; - e.xselection.display = Xdisplay; - e.xselection.requestor = se->requestor; - e.xselection.selection = XAtom("XdndSelection"); - e.xselection.target = se->target; - e.xselection.time = se->time; - e.xselection.property = se->property; - if(se->target == XAtom("TARGETS")) { - LLOG("DnDRequest targets:"); - SetFmts(se->requestor, se->property); - } - else { - String d = GetData(XAtomName(se->target)); - if(d.GetCount()) - XChangeProperty(Xdisplay, se->requestor, se->property, se->target, 8, PropModeReplace, - d, d.GetCount()); - else - e.xselection.property = None; - } - XSendEvent(Xdisplay, se->requestor, XFalse, 0, &e); -} - -void DnDRequest(XSelectionRequestEvent *se) -{ - if(dndloop) dndloop->Request(se); -} - -void DnDClear() {} - -Image MakeDragImage(const Image& arrow, Image sample); - -Ptr sDnDSource; - -int Ctrl::DoDragAndDrop(const char *fmts, const Image& sample, dword actions, - const VectorMap& data) -{ - InitDndAtoms(); - DnDLoop d; - d.reject = MakeDragImage(CtrlCoreImg::DndNone(), sample); - if(actions & DND_COPY) d.copy = MakeDragImage(CtrlCoreImg::DndCopy(), sample); - if(actions & DND_MOVE) d.move = MakeDragImage(CtrlCoreImg::DndMove(), sample); - d.SetMaster(*this); - d.data = &data; - d.source = this; - dndloop = &d; - Vector f = Split(fmts, ';'); - for(int i = 0; i < f.GetCount(); i++) - d.fmt.Add(XAtom(f[i])); - for(int i = 0; i < data.GetCount(); i++) - d.fmt.Add(XAtom(data.GetKey(i))); - d.SetFmts(xclipboard().win, XAtom("XdndTypeList")); - XSetSelectionOwner(Xdisplay, XAtom("XdndSelection"), xclipboard().win, CurrentTime); - d.src = xclipboard().win; - d.target = None; - sDnDSource = this; - d.Run(); - sDnDSource = NULL; - SyncCaret(); - LLOG("DoDragAndDrop finished"); - return Xdnd_status; -} - -Ctrl *Ctrl::GetDragAndDropSource() -{ - return sDnDSource; -} - -Index Ctrl::drop_formats; - -int XdndAction; -Point XdndPos; - -PasteClip sMakeDropClip(bool paste) -{ - PasteClip d; - d.type = 1; - d.paste = paste; - d.accepted = false; - d.allowed = DND_MOVE|DND_COPY; - d.action = XdndAction; - return d; -} - -void Ctrl::DnD(Window src, bool paste) -{ - PasteClip d = sMakeDropClip(paste); - LLOG("Source action " << XdndAction); - DnD(XdndPos, d); - XdndAction = d.GetAction(); - LLOG("Target action " << XdndAction); - XEvent e = ClientMsg(src, paste ? XdndFinished : XdndStatus); - e.xclient.data.l[0] = GetWindow(); - (paste ? e.xclient.data.l[2] : e.xclient.data.l[4]) - = XdndAction == DND_MOVE ? XdndActionMove : XdndActionCopy; - if(d.IsAccepted()) - e.xclient.data.l[1] = 1; - LLOG("Sending status/finished to " << src << " accepted: " << d.IsAccepted()); - XSendEvent(Xdisplay, src, XFalse, 0, &e); -} - -void Ctrl::DropEvent(XWindow& w, XEvent *event) -{ - InitDndAtoms(); - if(event->type != ClientMessage) - return; - Window src = event->xclient.data.l[0]; - LLOG("Client Message " << GetWindow() << " " << XAtomName(event->xclient.message_type) - << ", src: " << src); - if(event->xclient.message_type == XdndEnter) { - LLOG("DnDEnter"); - drop_formats.Clear(); - if(event->xclient.data.l[1] & 1) { - Vector v = GetPropertyInts(src, XAtom("XdndTypeList"), XA_ATOM); - for(int i = 0; i < v.GetCount(); i++) - drop_formats.Add(XAtomName(v[i])); - } - else - for(int i = 2; i <= 4; i++) - drop_formats.Add(XAtomName(event->xclient.data.l[i])); - } - static Point xdndpos; - if(event->xclient.message_type == XdndPosition) { - dword x = event->xclient.data.l[2]; - XdndPos = Point(HIWORD(x), LOWORD(x)); - LLOG("XdndPosition " << XdndPos << ", action " << XAtomName(event->xclient.data.l[4])); - XdndAction = event->xclient.data.l[4] == (int)XdndActionMove ? DND_MOVE : DND_COPY; - DnD(src, false); - } - if(event->xclient.message_type == XdndLeave) - DnDLeave(); - if(event->xclient.message_type == XdndDrop && dndctrl) { - LLOG("XdndDrop to " << UPP::Name(dndctrl)); - DnD(src, true); - DnDLeave(); - } -} - -END_UPP_NAMESPACE - -#endif +#include "CtrlCore.h" + +#define LLOG(x) // LOG(x) + +#ifdef PLATFORM_X11 + +NAMESPACE_UPP + +bool Xdnd_waiting_status; +bool Xdnd_waiting_finished; +int Xdnd_status; +int Xdnd_version; + +static Atom XdndEnter; +static Atom XdndPosition; +static Atom XdndLeave; +static Atom XdndDrop; +static Atom XdndStatus; +static Atom XdndFinished; +static Atom XdndActionCopy; +static Atom XdndActionMove; + +void InitDndAtoms() +{ + if(XdndEnter) return; + XdndEnter = XAtom("XdndEnter"); + XdndPosition = XAtom("XdndPosition"); + XdndLeave = XAtom("XdndLeave"); + XdndDrop = XAtom("XdndDrop"); + XdndStatus = XAtom("XdndStatus"); + XdndFinished = XAtom("XdndFinished"); + XdndActionCopy = XAtom("XdndActionCopy"); + XdndActionMove = XAtom("XdndActionMove"); +} + +XEvent ClientMsg(Window src, Atom type, int format = 32) +{ + XEvent e; + Zero(e); + e.xclient.type = ClientMessage; + e.xclient.display = Xdisplay; + e.xclient.window = src; + e.xclient.message_type = type; + e.xclient.format = format; + return e; +} + +struct DnDLoop : LocalLoop { + Image move, copy, reject; + Vector fmt; + const VectorMap *data; + Ptr source; + void SetFmts(Window w, Atom property); + Window src, target; + int action; + + void Request(XSelectionRequestEvent *se); + void Sync(); + String GetData(const String& f); + void Leave(); + virtual void LeftUp(Point, dword); + virtual bool Key(dword, int); + virtual void MouseMove(Point p, dword); + virtual Image CursorImage(Point, dword); +}; + +Ptr dndloop; + +void DnDLoop::Leave() +{ + if(target) { + LLOG("Sending XdndLeave to " << target); + XEvent e = ClientMsg(target, XdndLeave); + e.xclient.data.l[0] = src; + XSendEvent(Xdisplay, target, XFalse, 0, &e); + } +} + +void DnDLoop::Sync() +{ + if(Xdnd_waiting_status) + return; + bool tx = Ctrl::TrapX11Errors(); + Window root; + unsigned int d1; + int x, y, d2; + Window tgt = Xroot; + int version; + for(;;) { + if(XQueryPointer(Xdisplay, tgt, &root, &tgt, &x, &y, &d2, &d2, &d1)) { + if(!tgt) + break; + Vector x = GetPropertyInts(tgt, XAtom("XdndAware")); + LLOG("XdndAware " << tgt << ": " << x.GetCount()); + if(x.GetCount()) { + Xdnd_version = x[0]; + break; + } + } + else { + tgt = None; + break; + } + } + if(Xdnd_version < 3) + tgt = None; + if(tgt != target) { + Leave(); + target = tgt; + if(target) { + LLOG("Sending XdndEnter to " << target << ", src = " << src); + XEvent e = ClientMsg(target, XdndEnter); + e.xclient.data.l[0] = src; + e.xclient.data.l[1] = (fmt.GetCount() > 3) | (version << 24); + for(int i = 0; i < min(3, fmt.GetCount()); i++) + e.xclient.data.l[i + 2] = fmt[i]; + XSendEvent(Xdisplay, target, XFalse, 0, &e); + } + } + + if(target) { + LLOG("Sending XdndPosition to " << target << " " << x << ", " << y); + XEvent e = ClientMsg(target, XdndPosition); + e.xclient.data.l[0] = src; + e.xclient.data.l[1] = 0; + e.xclient.data.l[2] = MAKELONG(y, x); + e.xclient.data.l[3] = Xeventtime; + int action = XdndActionCopy; + if(source && source->GetTopCtrl()->GetWindow() == target) + action = XdndActionMove; + if(GetShift()) + action = XdndActionMove; + if(GetCtrl()) + action = XdndActionCopy; + e.xclient.data.l[4] = action; + XSendEvent(Xdisplay, target, XFalse, 0, &e); + XFlush(Xdisplay); + Xdnd_waiting_status = true; + dword timeout = GetTickCount(); + LLOG("Waiting for XdndStatus"); + while(Xdnd_waiting_status && GetTickCount() - timeout < 200) { + GuiSleep(0); + ProcessEvents(); + } + LLOG("Waiting status " << GetTickCount() - timeout << "ms"); + if(Xdnd_waiting_status) { + LLOG("XdndStatus timeout"); + Xdnd_status = DND_NONE; + Xdnd_waiting_status = false; + } + else + LLOG("XdndStatus recieved " << Xdnd_status); + } + Ctrl::UntrapX11Errors(tx); +} + +void Ctrl::DropStatusEvent(XEvent *event) +{ + InitDndAtoms(); + if(event->type != ClientMessage) + return; + LLOG("DropStatus Client Message " << XAtomName(event->xclient.message_type)); + if(event->type == ClientMessage && dndloop && event->xclient.data.l[0] == (int)dndloop->target) { + if(event->xclient.message_type == XdndStatus && Xdnd_waiting_status) { + LLOG("XdndStatus, xdnd action: " << XAtomName(event->xclient.data.l[4])); + Xdnd_status = (event->xclient.data.l[1] & 1) ? + event->xclient.data.l[4] == (int)XdndActionMove ? DND_MOVE : DND_COPY + : DND_NONE; + Xdnd_waiting_status = false; + } + if(event->xclient.message_type == XdndFinished && Xdnd_waiting_finished) { + LLOG("XdndFinished, xdnd action: " << XAtomName(event->xclient.data.l[2])); + if(Xdnd_version == 5) + Xdnd_status = (event->xclient.data.l[1] & 1) ? + event->xclient.data.l[2] == (int)XdndActionMove ? DND_MOVE : DND_COPY + : DND_NONE; + Xdnd_waiting_finished = false; + } + } +} + +void DnDLoop::LeftUp(Point, dword) +{ + LLOG("DnDLoop::LeftUp"); + bool tx = TrapX11Errors(); + if(target) { + LLOG("Sending XdndDrop to " << target); + XEvent e = ClientMsg(target, XdndDrop); + e.xclient.data.l[0] = src; + e.xclient.data.l[1] = 0; + e.xclient.data.l[2] = Xeventtime; + XSendEvent(Xdisplay, target, XFalse, 0, &e); + XFlush(Xdisplay); + Xdnd_waiting_finished = true; + int timeout = GetTickCount(); + LLOG("Waiting for XdndFinished"); + while(Xdnd_waiting_finished && GetTickCount() - timeout < 200) { + GuiSleep(0); + ProcessEvents(); + } + LLOG("Waiting finished " << GetTickCount() - timeout << "ms"); + if(Xdnd_waiting_status) { + LLOG("XdndFinished timeout"); + Xdnd_status = DND_NONE; + Xdnd_waiting_finished = false; + } + else + LLOG("XdndFinished recieved"); + } + EndLoop(); + UntrapX11Errors(tx); +} + +void DnDLoop::MouseMove(Point p, dword) +{ + LLOG("DnDLoop::MouseMove"); + Sync(); +} + +bool DnDLoop::Key(dword, int) +{ + LLOG("DnDLoop::Key"); + Sync(); + return false; +} + +Image DnDLoop::CursorImage(Point, dword) +{ + return Xdnd_status == DND_MOVE ? move : Xdnd_status == DND_COPY ? copy : reject; +} + +void DnDLoop::SetFmts(Window w, Atom property) +{ + Buffer x(fmt.GetCount()); + for(int i = 0; i < fmt.GetCount(); i++) { + x[i] = fmt[i]; + LLOG('\t' << XAtomName(x[i])); + } + XChangeProperty(Xdisplay, w, property, XAtom("ATOM"), + 32, 0, (unsigned char*)~x, + fmt.GetCount()); +} + +String DnDLoop::GetData(const String& f) +{ + int i = data->Find(f); + String d; + if(i >= 0) + d = (*data)[i].Render(); + else + if(source) + d = source->GetDropData(f); + return d; +} + +String DnDGetData(const String& f) +{ + String d; + if(dndloop) + d = dndloop->GetData(f); + return d; +} + +void DnDLoop::Request(XSelectionRequestEvent *se) +{ + LLOG("DnDRequest " << XAtomName(se->target)); + XEvent e; + e.xselection.type = SelectionNotify; + e.xselection.display = Xdisplay; + e.xselection.requestor = se->requestor; + e.xselection.selection = XAtom("XdndSelection"); + e.xselection.target = se->target; + e.xselection.time = se->time; + e.xselection.property = se->property; + if(se->target == XAtom("TARGETS")) { + LLOG("DnDRequest targets:"); + SetFmts(se->requestor, se->property); + } + else { + String d = GetData(XAtomName(se->target)); + if(d.GetCount()) + XChangeProperty(Xdisplay, se->requestor, se->property, se->target, 8, PropModeReplace, + d, d.GetCount()); + else + e.xselection.property = None; + } + XSendEvent(Xdisplay, se->requestor, XFalse, 0, &e); +} + +void DnDRequest(XSelectionRequestEvent *se) +{ + if(dndloop) dndloop->Request(se); +} + +void DnDClear() {} + +Image MakeDragImage(const Image& arrow, Image sample); + +Ptr sDnDSource; + +int Ctrl::DoDragAndDrop(const char *fmts, const Image& sample, dword actions, + const VectorMap& data) +{ + InitDndAtoms(); + DnDLoop d; + d.reject = actions & DND_EXACTIMAGE ? CtrlCoreImg::DndNone() : MakeDragImage(CtrlCoreImg::DndNone(), sample); + if(actions & DND_COPY) + d.copy = actions & DND_EXACTIMAGE ? sample : MakeDragImage(CtrlCoreImg::DndCopy(), sample); + if(actions & DND_MOVE) + d.move = actions & DND_EXACTIMAGE ? sample : MakeDragImage(CtrlCoreImg::DndMove(), sample); + d.SetMaster(*this); + d.data = &data; + d.source = this; + dndloop = &d; + Vector f = Split(fmts, ';'); + for(int i = 0; i < f.GetCount(); i++) + d.fmt.Add(XAtom(f[i])); + for(int i = 0; i < data.GetCount(); i++) + d.fmt.Add(XAtom(data.GetKey(i))); + d.SetFmts(xclipboard().win, XAtom("XdndTypeList")); + XSetSelectionOwner(Xdisplay, XAtom("XdndSelection"), xclipboard().win, CurrentTime); + d.src = xclipboard().win; + d.target = None; + sDnDSource = this; + d.Run(); + sDnDSource = NULL; + SyncCaret(); + LLOG("DoDragAndDrop finished"); + return Xdnd_status; +} + +Ctrl *Ctrl::GetDragAndDropSource() +{ + return sDnDSource; +} + +Index Ctrl::drop_formats; + +int XdndAction; +Point XdndPos; + +PasteClip sMakeDropClip(bool paste) +{ + PasteClip d; + d.type = 1; + d.paste = paste; + d.accepted = false; + d.allowed = DND_MOVE|DND_COPY; + d.action = XdndAction; + return d; +} + +void Ctrl::DnD(Window src, bool paste) +{ + PasteClip d = sMakeDropClip(paste); + LLOG("Source action " << XdndAction); + DnD(XdndPos, d); + XdndAction = d.GetAction(); + LLOG("Target action " << XdndAction); + XEvent e = ClientMsg(src, paste ? XdndFinished : XdndStatus); + e.xclient.data.l[0] = GetWindow(); + (paste ? e.xclient.data.l[2] : e.xclient.data.l[4]) + = XdndAction == DND_MOVE ? XdndActionMove : XdndActionCopy; + if(d.IsAccepted()) + e.xclient.data.l[1] = 1; + LLOG("Sending status/finished to " << src << " accepted: " << d.IsAccepted()); + XSendEvent(Xdisplay, src, XFalse, 0, &e); +} + +void Ctrl::DropEvent(XWindow& w, XEvent *event) +{ + InitDndAtoms(); + if(event->type != ClientMessage) + return; + Window src = event->xclient.data.l[0]; + LLOG("Client Message " << GetWindow() << " " << XAtomName(event->xclient.message_type) + << ", src: " << src); + if(event->xclient.message_type == XdndEnter) { + LLOG("DnDEnter"); + drop_formats.Clear(); + if(event->xclient.data.l[1] & 1) { + Vector v = GetPropertyInts(src, XAtom("XdndTypeList"), XA_ATOM); + for(int i = 0; i < v.GetCount(); i++) + drop_formats.Add(XAtomName(v[i])); + } + else + for(int i = 2; i <= 4; i++) + drop_formats.Add(XAtomName(event->xclient.data.l[i])); + } + static Point xdndpos; + if(event->xclient.message_type == XdndPosition) { + dword x = event->xclient.data.l[2]; + XdndPos = Point(HIWORD(x), LOWORD(x)); + LLOG("XdndPosition " << XdndPos << ", action " << XAtomName(event->xclient.data.l[4])); + XdndAction = event->xclient.data.l[4] == (int)XdndActionMove ? DND_MOVE : DND_COPY; + DnD(src, false); + } + if(event->xclient.message_type == XdndLeave) + DnDLeave(); + if(event->xclient.message_type == XdndDrop && dndctrl) { + LLOG("XdndDrop to " << UPP::Name(dndctrl)); + DnD(src, true); + DnDLeave(); + } +} + +END_UPP_NAMESPACE + +#endif diff --git a/uppsrc/CtrlCore/X11ImgClip.cpp b/uppsrc/CtrlCore/X11ImgClip.cpp index 99ad6f758..13a396eb2 100644 --- a/uppsrc/CtrlCore/X11ImgClip.cpp +++ b/uppsrc/CtrlCore/X11ImgClip.cpp @@ -11,7 +11,7 @@ const char *ClipFmtsImage() { static const char *q; ONCELOCK { - static String s(ClipFmt() + ";image/bmp;image/png"); + static String s(ClipFmt() + ";image/png"); q = s; } return q; @@ -19,7 +19,7 @@ const char *ClipFmtsImage() bool AcceptImage(PasteClip& clip) { - return clip.Accept(ClipFmt()) || clip.Accept("image/bmp") || clip.Accept("image/png"); + return clip.Accept(ClipFmt()) || clip.Accept("image/png"); } Image GetImage(PasteClip& clip) @@ -30,7 +30,7 @@ Image GetImage(PasteClip& clip) if(!m.IsEmpty()) return m; } - if(clip.Accept("image/bmp;image/png")) + if(clip.Accept("image/png")) return StreamRaster::LoadStringAny(~clip); return Null; } diff --git a/uppsrc/CtrlCore/X11Keys.i b/uppsrc/CtrlCore/X11Keys.i index d89d26821..f9c89fbe0 100644 --- a/uppsrc/CtrlCore/X11Keys.i +++ b/uppsrc/CtrlCore/X11Keys.i @@ -1,111 +1,111 @@ -K_BACK = 8, -K_BACKSPACE = 8, - -K_TAB = 9, - -K_RETURN = 13, -K_ENTER = 13, -K_ESCAPE = 27, - -K_SPACE = 32, - -K_DELETE = XK_Delete + K_DELTA, - -K_SHIFT_KEY = XK_Shift_L + K_DELTA, -K_CTRL_KEY = XK_Control_L + K_DELTA, -K_ALT_KEY = XK_Meta_L + K_DELTA, -K_CAPSLOCK = XK_Caps_Lock + K_DELTA, -K_PRIOR = XK_Page_Up + K_DELTA, -K_PAGEUP = XK_Page_Up + K_DELTA, -K_NEXT = XK_Page_Down + K_DELTA, -K_PAGEDOWN = XK_Page_Down + K_DELTA, -K_END = XK_End + K_DELTA, -K_HOME = XK_Home + K_DELTA, -K_LEFT = XK_Left + K_DELTA, -K_UP = XK_Up + K_DELTA, -K_RIGHT = XK_Right + K_DELTA, -K_DOWN = XK_Down + K_DELTA, -K_INSERT = XK_Insert + K_DELTA, - -K_NUMPAD0 = XK_KP_0 + K_DELTA, -K_NUMPAD1 = XK_KP_1 + K_DELTA, -K_NUMPAD2 = XK_KP_2 + K_DELTA, -K_NUMPAD3 = XK_KP_3 + K_DELTA, -K_NUMPAD4 = XK_KP_4 + K_DELTA, -K_NUMPAD5 = XK_KP_5 + K_DELTA, -K_NUMPAD6 = XK_KP_6 + K_DELTA, -K_NUMPAD7 = XK_KP_7 + K_DELTA, -K_NUMPAD8 = XK_KP_8 + K_DELTA, -K_NUMPAD9 = XK_KP_9 + K_DELTA, -K_MULTIPLY = XK_KP_Multiply + K_DELTA, -K_ADD = XK_KP_Add + K_DELTA, -K_SEPARATOR = XK_KP_Separator + K_DELTA, -K_SUBTRACT = XK_KP_Subtract + K_DELTA, -K_DECIMAL = XK_KP_Decimal + K_DELTA, -K_DIVIDE = XK_KP_Divide + K_DELTA, - -K_SCROLL = XK_Scroll_Lock + K_DELTA, - -K_F1 = XK_F1 + K_DELTA, -K_F2 = XK_F2 + K_DELTA, -K_F3 = XK_F3 + K_DELTA, -K_F4 = XK_F4 + K_DELTA, -K_F5 = XK_F5 + K_DELTA, -K_F6 = XK_F6 + K_DELTA, -K_F7 = XK_F7 + K_DELTA, -K_F8 = XK_F8 + K_DELTA, -K_F9 = XK_F9 + K_DELTA, -K_F10 = XK_F10 + K_DELTA, -K_F11 = XK_F11 + K_DELTA, -K_F12 = XK_F12 + K_DELTA, - -K_A = 'A' + K_DELTA, -K_B = 'B' + K_DELTA, -K_C = 'C' + K_DELTA, -K_D = 'D' + K_DELTA, -K_E = 'E' + K_DELTA, -K_F = 'F' + K_DELTA, -K_G = 'G' + K_DELTA, -K_H = 'H' + K_DELTA, -K_I = 'I' + K_DELTA, -K_J = 'J' + K_DELTA, -K_K = 'K' + K_DELTA, -K_L = 'L' + K_DELTA, -K_M = 'M' + K_DELTA, -K_N = 'N' + K_DELTA, -K_O = 'O' + K_DELTA, -K_P = 'P' + K_DELTA, -K_Q = 'Q' + K_DELTA, -K_R = 'R' + K_DELTA, -K_S = 'S' + K_DELTA, -K_T = 'T' + K_DELTA, -K_U = 'U' + K_DELTA, -K_V = 'V' + K_DELTA, -K_W = 'W' + K_DELTA, -K_X = 'X' + K_DELTA, -K_Y = 'Y' + K_DELTA, -K_Z = 'Z' + K_DELTA, -K_0 = '0' + 128 + K_DELTA, -K_1 = '1' + 128 + K_DELTA, -K_2 = '2' + 128 + K_DELTA, -K_3 = '3' + 128 + K_DELTA, -K_4 = '4' + 128 + K_DELTA, -K_5 = '5' + 128 + K_DELTA, -K_6 = '6' + 128 + K_DELTA, -K_7 = '7' + 128 + K_DELTA, -K_8 = '8' + 128 + K_DELTA, -K_9 = '9' + 128 + K_DELTA, - -K_CTRL_LBRACKET = K_CTRL|XK_bracketleft|K_DELTA, -K_CTRL_RBRACKET = K_CTRL|XK_bracketright|K_DELTA, -K_CTRL_MINUS = K_CTRL|0x2d|K_DELTA, -K_CTRL_GRAVE = K_CTRL|XK_grave|K_DELTA, -K_CTRL_SLASH = K_CTRL|0x5f|K_DELTA, -K_CTRL_BACKSLASH = K_CTRL|0x5c|K_DELTA, -K_CTRL_COMMA = K_CTRL|0x2c|K_DELTA, -K_CTRL_PERIOD = K_CTRL|XK_period|K_DELTA, -K_CTRL_SEMICOLON = K_CTRL|XK_semicolon|K_DELTA, -K_CTRL_EQUAL = K_CTRL|0x3d|K_DELTA, -K_CTRL_APOSTROPHE= K_CTRL|0x27|K_DELTA, - -K_BREAK = XK_Pause|K_DELTA, +K_BACK = 8, +K_BACKSPACE = 8, + +K_TAB = 9, + +K_RETURN = 13, +K_ENTER = 13, +K_ESCAPE = 27, + +K_SPACE = 32, + +K_DELETE = XK_Delete + K_DELTA, + +K_SHIFT_KEY = XK_Shift_L + K_DELTA, +K_CTRL_KEY = XK_Control_L + K_DELTA, +K_ALT_KEY = XK_Meta_L + K_DELTA, +K_CAPSLOCK = XK_Caps_Lock + K_DELTA, +K_PRIOR = XK_Page_Up + K_DELTA, +K_PAGEUP = XK_Page_Up + K_DELTA, +K_NEXT = XK_Page_Down + K_DELTA, +K_PAGEDOWN = XK_Page_Down + K_DELTA, +K_END = XK_End + K_DELTA, +K_HOME = XK_Home + K_DELTA, +K_LEFT = XK_Left + K_DELTA, +K_UP = XK_Up + K_DELTA, +K_RIGHT = XK_Right + K_DELTA, +K_DOWN = XK_Down + K_DELTA, +K_INSERT = XK_Insert + K_DELTA, + +K_NUMPAD0 = XK_KP_0 + K_DELTA, +K_NUMPAD1 = XK_KP_1 + K_DELTA, +K_NUMPAD2 = XK_KP_2 + K_DELTA, +K_NUMPAD3 = XK_KP_3 + K_DELTA, +K_NUMPAD4 = XK_KP_4 + K_DELTA, +K_NUMPAD5 = XK_KP_5 + K_DELTA, +K_NUMPAD6 = XK_KP_6 + K_DELTA, +K_NUMPAD7 = XK_KP_7 + K_DELTA, +K_NUMPAD8 = XK_KP_8 + K_DELTA, +K_NUMPAD9 = XK_KP_9 + K_DELTA, +K_MULTIPLY = XK_KP_Multiply + K_DELTA, +K_ADD = XK_KP_Add + K_DELTA, +K_SEPARATOR = XK_KP_Separator + K_DELTA, +K_SUBTRACT = XK_KP_Subtract + K_DELTA, +K_DECIMAL = XK_KP_Decimal + K_DELTA, +K_DIVIDE = XK_KP_Divide + K_DELTA, + +K_SCROLL = XK_Scroll_Lock + K_DELTA, + +K_F1 = XK_F1 + K_DELTA, +K_F2 = XK_F2 + K_DELTA, +K_F3 = XK_F3 + K_DELTA, +K_F4 = XK_F4 + K_DELTA, +K_F5 = XK_F5 + K_DELTA, +K_F6 = XK_F6 + K_DELTA, +K_F7 = XK_F7 + K_DELTA, +K_F8 = XK_F8 + K_DELTA, +K_F9 = XK_F9 + K_DELTA, +K_F10 = XK_F10 + K_DELTA, +K_F11 = XK_F11 + K_DELTA, +K_F12 = XK_F12 + K_DELTA, + +K_A = 'A' + K_DELTA, +K_B = 'B' + K_DELTA, +K_C = 'C' + K_DELTA, +K_D = 'D' + K_DELTA, +K_E = 'E' + K_DELTA, +K_F = 'F' + K_DELTA, +K_G = 'G' + K_DELTA, +K_H = 'H' + K_DELTA, +K_I = 'I' + K_DELTA, +K_J = 'J' + K_DELTA, +K_K = 'K' + K_DELTA, +K_L = 'L' + K_DELTA, +K_M = 'M' + K_DELTA, +K_N = 'N' + K_DELTA, +K_O = 'O' + K_DELTA, +K_P = 'P' + K_DELTA, +K_Q = 'Q' + K_DELTA, +K_R = 'R' + K_DELTA, +K_S = 'S' + K_DELTA, +K_T = 'T' + K_DELTA, +K_U = 'U' + K_DELTA, +K_V = 'V' + K_DELTA, +K_W = 'W' + K_DELTA, +K_X = 'X' + K_DELTA, +K_Y = 'Y' + K_DELTA, +K_Z = 'Z' + K_DELTA, +K_0 = '0' + 128 + K_DELTA, +K_1 = '1' + 128 + K_DELTA, +K_2 = '2' + 128 + K_DELTA, +K_3 = '3' + 128 + K_DELTA, +K_4 = '4' + 128 + K_DELTA, +K_5 = '5' + 128 + K_DELTA, +K_6 = '6' + 128 + K_DELTA, +K_7 = '7' + 128 + K_DELTA, +K_8 = '8' + 128 + K_DELTA, +K_9 = '9' + 128 + K_DELTA, + +K_CTRL_LBRACKET = K_CTRL|XK_bracketleft|K_DELTA, +K_CTRL_RBRACKET = K_CTRL|XK_bracketright|K_DELTA, +K_CTRL_MINUS = K_CTRL|0x2d|K_DELTA, +K_CTRL_GRAVE = K_CTRL|XK_grave|K_DELTA, +K_CTRL_SLASH = K_CTRL|0x5f|K_DELTA, +K_CTRL_BACKSLASH = K_CTRL|0x5c|K_DELTA, +K_CTRL_COMMA = K_CTRL|0x2c|K_DELTA, +K_CTRL_PERIOD = K_CTRL|XK_period|K_DELTA, +K_CTRL_SEMICOLON = K_CTRL|XK_semicolon|K_DELTA, +K_CTRL_EQUAL = K_CTRL|0x3d|K_DELTA, +K_CTRL_APOSTROPHE= K_CTRL|0x27|K_DELTA, + +K_BREAK = XK_Pause|K_DELTA, diff --git a/uppsrc/CtrlLib/Ctrl.lay b/uppsrc/CtrlLib/Ctrl.lay index 6d959fbce..b0cea9d24 100644 --- a/uppsrc/CtrlLib/Ctrl.lay +++ b/uppsrc/CtrlLib/Ctrl.lay @@ -43,24 +43,24 @@ LAYOUT(FileSelectorLayout, 516, 400) ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 68).BottomPosZ(8, 24)) END_LAYOUT -LAYOUT(PaletteLayout, 212, 332) +LAYOUT(PaletteLayout, 216, 332) ITEM(TabCtrl, palette_tab, HSizePosZ(4, 4).VSizePosZ(4, 82)) ITEM(Label, dv___1, SetLabel(t_("Color:")).LeftPosZ(4, 36).BottomPosZ(52, 24)) ITEM(DataPusher, color, HSizePosZ(68, 32).BottomPosZ(54, 22)) ITEM(Button, set_transparent, RightPosZ(4, 18).BottomPosZ(56, 18)) UNTYPED(fetch_color, RightPosZ(4, 18).BottomPosZ(30, 18)) ITEM(Label, dv___5, SetLabel(t_("R:")).LeftPosZ(4, 12).BottomPosZ(29, 19)) - ITEM(EditIntSpin, r, LeftPosZ(16, 40).BottomPosZ(29, 19)) - ITEM(Label, dv___7, SetLabel(t_("G:")).LeftPosZ(68, 12).BottomPosZ(29, 19)) - ITEM(EditIntSpin, g, LeftPosZ(80, 40).BottomPosZ(29, 19)) - ITEM(Label, dv___9, SetLabel(t_("B:")).LeftPosZ(130, 12).BottomPosZ(29, 19)) - ITEM(EditIntSpin, b, LeftPosZ(142, 40).BottomPosZ(29, 19)) + ITEM(EditIntSpin, r, LeftPosZ(16, 44).BottomPosZ(29, 19)) + ITEM(Label, dv___7, SetLabel(t_("G:")).LeftPosZ(72, 12).BottomPosZ(29, 19)) + ITEM(EditIntSpin, g, LeftPosZ(84, 44).BottomPosZ(29, 19)) + ITEM(Label, dv___9, SetLabel(t_("B:")).LeftPosZ(136, 12).BottomPosZ(29, 19)) + ITEM(EditIntSpin, b, LeftPosZ(150, 42).BottomPosZ(29, 19)) ITEM(Label, dv___11, SetLabel(t_("H:")).LeftPosZ(4, 12).BottomPosZ(5, 19)) - ITEM(EditIntSpin, h, LeftPosZ(16, 40).BottomPosZ(5, 19)) - ITEM(Label, dv___13, SetLabel(t_("S:")).LeftPosZ(68, 12).BottomPosZ(5, 19)) - ITEM(EditIntSpin, s, LeftPosZ(80, 40).BottomPosZ(5, 19)) - ITEM(Label, dv___15, SetLabel(t_("V:")).LeftPosZ(130, 12).BottomPosZ(5, 19)) - ITEM(EditIntSpin, v, LeftPosZ(142, 40).BottomPosZ(5, 19)) + ITEM(EditIntSpin, h, LeftPosZ(16, 44).BottomPosZ(5, 19)) + ITEM(Label, dv___13, SetLabel(t_("S:")).LeftPosZ(72, 12).BottomPosZ(5, 19)) + ITEM(EditIntSpin, s, LeftPosZ(84, 44).BottomPosZ(5, 19)) + ITEM(Label, dv___15, SetLabel(t_("V:")).LeftPosZ(136, 12).BottomPosZ(5, 19)) + ITEM(EditIntSpin, v, LeftPosZ(148, 44).BottomPosZ(5, 19)) END_LAYOUT LAYOUT(PaletteSelectorLayout, 248, 320) diff --git a/uppsrc/CtrlLib/CtrlLib.t b/uppsrc/CtrlLib/CtrlLib.t index 9f906547d..87475b274 100644 --- a/uppsrc/CtrlLib/CtrlLib.t +++ b/uppsrc/CtrlLib/CtrlLib.t @@ -17,6 +17,7 @@ ruRU("") srSP("") trTR("(varsayılan") zhCN("(缺省)") +zhTW("(預設)") // EditField.cpp @@ -35,6 +36,7 @@ ruRU("Отменить") srSP("Undo") trTR("Geri Al") zhCN("撤销") +zhTW("復原") T_("Cut") csCZ("Vyjmout") @@ -50,6 +52,7 @@ ruRU("Вырезать") srSP("Iseci") trTR("Kes") zhCN("剪切") +zhTW("剪下") T_("Copy") csCZ("Kopírovat") @@ -65,6 +68,7 @@ ruRU("Копировать") srSP("Kopiraj") trTR("Kopyala") zhCN("复制") +zhTW("複製") T_("Paste") csCZ("Vložit") @@ -80,6 +84,7 @@ ruRU("Вставить") srSP("Zalepi") trTR("Yapıştır") zhCN("粘贴") +zhTW("貼上") T_("Erase") csCZ("Vymazat") @@ -95,6 +100,7 @@ ruRU("Стереть") srSP("Obriši") trTR("Sil") zhCN("清除") +zhTW("清除") T_("Select all") csCZ("Vybrat vše") @@ -110,6 +116,7 @@ ruRU("Выделить всё") srSP("Izaberi sve") trTR("Tümünü Seç") zhCN("全选") +zhTW("全選") // Text.cpp @@ -128,6 +135,7 @@ ruRU("Повторить") srSP("Redo") trTR("Yinele") zhCN("重做") +zhTW("重做") // ArrayCtrl.cpp @@ -147,6 +155,7 @@ ruRU("Вы действительно хотите удалить выделен srSP("Da li stvarno želite da obrišete izabran %s?") trTR("%s öğesini silmeyi gerçekten istiyor musunuz ?") zhCN("真的要删除选择的 %s 吗? ") +zhTW("真的要刪除選擇的 %s 嗎? ") T_("Insert %s") csCZ("Vložit %s") @@ -162,6 +171,7 @@ ruRU("Вставить %s") srSP("Ubaci %s") trTR("%s öğesini araya ekle") zhCN("插入 %s") +zhTW("插入 %s") T_("Insert a new %s into the table.") csCZ("Vložit do tabulky nový %s.") @@ -177,6 +187,7 @@ ruRU("Вставить новый %s в таблицу.") srSP("Ubaci u tabelu novi %s.") trTR("Tabloya yeni bir %s ekle.") zhCN("插入新的 %s 到表格") +zhTW("插入新的 %s 到表格") T_("Insert %s before") csCZ("Vložit %s před") @@ -192,6 +203,7 @@ ruRU("Вставить %s перед") srSP("Ubaci %s pre") trTR("%s öğesini öne ekle") zhCN("前插 %s") +zhTW("前插 %s") T_("Insert a new %s into the table before current") csCZ("Vložit nový %s před aktuální") @@ -207,6 +219,7 @@ ruRU("Вставить новый %s в таблицу перед существ srSP("Ubaci novi %s u tabeli pre trenutne") trTR("Seçili olanın önüne yeni bir %s öğesi ekle") zhCN("在表格中当前项前插入新的 %s") +zhTW("在表格中目前項前插入新的 %s") T_("Insert %s after") csCZ("Vložit %s za") @@ -222,6 +235,7 @@ ruRU("Вставить %s после") srSP("Ubaci %s posle") trTR("%s öğesini sona ekle") zhCN("后插 %s") +zhTW("後插 %s") T_("Insert a new %s into the table after current") csCZ("Vložit %s za aktuální") @@ -237,6 +251,7 @@ ruRU("Вставить новый %s в таблицу после существ srSP("Ubaci novi %s u tabeli posle trenutne") trTR("Seçili olanın ardına yeni bir %s öğesi ekle") zhCN("在表格中当前项后插入新的 %s") +zhTW("在表格中目前項後插入新的 %s") T_("Append %s") csCZ("Přidat %s") @@ -252,6 +267,7 @@ ruRU("Добавить %s") srSP("Dodaj %s") trTR("%s öğesini iliştir") zhCN("添加 %s") +zhTW("添加 %s") T_("Append a new %s at the end of the table.") csCZ("Přidat nový %s na konec") @@ -267,6 +283,7 @@ ruRU("Добавить новый %s в конце таблицы.") srSP("Dodaj novi %s na kraju tabele.") trTR("Tablonun sonuna yeni bir %s öğesi iliştir.") zhCN("在表格末尾插入新的 %s") +zhTW("在表格末尾插入新的 %s") T_("Duplicate %s") csCZ("Duplikovat %s") @@ -282,6 +299,7 @@ ruRU("Дублировать %s") srSP("Dupliraj %s") trTR("%s öğesini kopyala") zhCN("复制 %s") +zhTW("複製 %s") T_("Duplicate current table %s.") csCZ("Vložit do tabulky duplikát aktuálního %s.") @@ -297,6 +315,7 @@ ruRU("Дублировать текущий %s таблицы.") srSP("Dupliraj trenutni %s tabele.") trTR("Seçili %s tablosunu kopyala") zhCN("复制当前表格 %s.") +zhTW("複製目前表格 %s.") T_("Edit %s") csCZ("Opravit aktuální %s") @@ -312,6 +331,7 @@ ruRU("Редактировать %s") srSP("Promeni %s") trTR("%s öğesini düzenle") zhCN("编辑 %s") +zhTW("編輯 %s") T_("Edit active %s.") csCZ("Opravit aktuální %s.") @@ -327,6 +347,7 @@ ruRU("Редактировать активный %s.") srSP("Promeni aktivni %s.") trTR("Seçili %s öğesini düzenle") zhCN("编辑活动 %s") +zhTW("編輯活動 %s") T_("Delete %s\tDelete") csCZ("Odstranit %s\tDelete") @@ -342,6 +363,7 @@ ruRU("Удалить %s\tУдалить") srSP("Obriši %s\tObriši") trTR("%s öğesini sil") zhCN("删除%s\t删除") +zhTW("刪除%s\t刪除") T_("Delete active %s.") csCZ("Odstranit aktuální %s.") @@ -357,6 +379,7 @@ ruRU("Удалить активный %s.") srSP("Obriši aktivni %s.") trTR("Etkin %s öğesini sil") zhCN("删除活动 %s") +zhTW("刪除活動 %s") T_("Move %s up") csCZ("Posunout %s nahoru") @@ -372,6 +395,7 @@ ruRU("Двигать %s вверх") srSP("Pomeri %s na gore") trTR("%s öğesini yukarı taşı") zhCN("上移%s") +zhTW("上移%s") T_("Swap %s with previous thus moving it up.") csCZ("Vyměnit aktuální %s s předchozím a tak ho posunout nahoru.") @@ -388,6 +412,7 @@ ruRU("Поменять местами %s с предыдущим, подвину srSP("Zameni %s sa prethodnim, pomeri ga na gore.") trTR(" %s öğesini yukarıya taşıyarak bir öncekiyle yerini değiştir.") zhCN("将%s与前面换位上移之") +zhTW("將%s與前面換位上移之") T_("Move %s down") csCZ("Posunout %s dolů") @@ -403,6 +428,7 @@ ruRU("Двигать %s вниз") srSP("Pomeri %s dole") trTR("%s öğesini aşağı taşı") zhCN("下移%s") +zhTW("下移%s") T_("Swap %s with next thus moving it down.") csCZ("Vyměnit aktuální %s s dalším a tak ho posunout dolů.") @@ -419,6 +445,7 @@ ruRU("Поменять местами %s со следующим, подвину srSP("Zameni %s sa sledećim, pomeri ga na dole.") trTR("%s öğesini aşağıya taşıyarak bir sonrakiyle yerini değiştir") zhCN("将%s与后面换位下移之") +zhTW("將%s與後面換位下移之") T_("Select all table rows") csCZ("Vybrat všechny řádky v tabulce") @@ -434,6 +461,7 @@ ruRU("Выделить все ряды таблицы") srSP("Izaberi sve redove tabele") trTR("Tüm satırları seç") zhCN("全选表格行") +zhTW("全選表格列") T_("row") csCZ("řádek") @@ -449,6 +477,7 @@ ruRU("ряды") srSP("red") trTR("satır") zhCN("行") +zhTW("列") // Progress.cpp @@ -467,6 +496,7 @@ ruRU("Обработка...") srSP("Radim...") trTR("işlem yapılıyor...") zhCN("工作中...") +zhTW("工作中...") // AKeys.cpp @@ -485,6 +515,7 @@ ruRU("Настроить горячие клавиши") srSP("Podesi tastere") trTR("Tuş Ayarları") zhCN("设置键值") +zhTW("設定鍵值") T_("Group") csCZ("Skupina") @@ -500,6 +531,7 @@ ruRU("Группа") srSP("Grupa") trTR("Grup") zhCN("组") +zhTW("群組") T_("Action") csCZ("Akce") @@ -515,6 +547,7 @@ ruRU("Действие") srSP("Akcija") trTR("Eylem") zhCN("动作") +zhTW("動作") T_("Primary") csCZ("Primární") @@ -530,6 +563,7 @@ ruRU("Первично") srSP("Taster 1") trTR("1. Tuş") zhCN("键1") +zhTW("鍵1") T_("Secondary") csCZ("Sekundární") @@ -545,6 +579,7 @@ ruRU("Вторично") srSP("Taster 2") trTR("2. Tuş") zhCN("键2") +zhTW("鍵2") // Prompt.cpp @@ -563,6 +598,7 @@ ruRU("OK") srSP("OK") trTR("Tamam") zhCN("确定") +zhTW("確定") T_("Cancel") csCZ("Storno") @@ -578,6 +614,7 @@ ruRU("Отмена") srSP("Otkaži") trTR("İptal") zhCN("取消") +zhTW("取消") T_("&Yes") csCZ("&Ano") @@ -593,6 +630,7 @@ ruRU("&Да") srSP("&Da") trTR("&Evet") zhCN("是(&Y)") +zhTW("是(&Y)") T_("&No") csCZ("&Ne") @@ -608,6 +646,7 @@ ruRU("&Нет") srSP("&Ne") trTR("&Hayır") zhCN("否(&N)") +zhTW("否(&N)") T_("&Abort") csCZ("&Přerušit") @@ -623,6 +662,7 @@ ruRU("&Прервать") srSP("&Prekini") trTR("&İptal") zhCN("放弃(&A)") +zhTW("放棄(&A)") T_("&Retry") csCZ("&Opakovat") @@ -638,6 +678,7 @@ ruRU("П&овторить") srSP("&Ponovi") trTR("&Tekrar Dene") zhCN("重试(&R)") +zhTW("重試(&R)") T_("&Ignore") csCZ("&Ignorovat") @@ -653,6 +694,7 @@ ruRU("Пропустить") srSP("") trTR("&Ignore") zhCN("") +zhTW("忽略(&I)") // Help.cpp @@ -671,6 +713,7 @@ ruRU("Назад") srSP("Nazad") trTR(" Geri Git") zhCN("回退") +zhTW("退回") T_("Go Forward") csCZ("Další téma") @@ -686,6 +729,7 @@ ruRU("Вперёд") srSP("Napred") trTR("İleri Git") zhCN("向前") +zhTW("向前") T_("Font size") csCZ("Velikost") @@ -701,6 +745,7 @@ ruRU("Размер шрифта") srSP("Veličina fonta") trTR("Yazı tipi boyutu") zhCN("字体大小") +zhTW("字體大小") T_("Print") csCZ("Tisk") @@ -716,6 +761,7 @@ ruRU("Печать") srSP("Štampa") trTR("Yazdır") zhCN("打印") +zhTW("列印") T_("Help") csCZ("Nápověda") @@ -731,6 +777,7 @@ ruRU("Помощь") srSP("Pomoć") trTR("Yardım") zhCN("帮助") +zhTW("說明") // DateTimeCtrl.cpp @@ -749,6 +796,7 @@ ruRU("Пред. месяц") srSP("") trTR("Önceki ay") zhCN("") +zhTW("前一個月") T_("Next month") csCZ("Další měsíc") @@ -764,6 +812,7 @@ ruRU("След. месяц") srSP("") trTR("Sonraki ay") zhCN("") +zhTW("下一個月") T_("Previous year") csCZ("Minulý rok") @@ -779,6 +828,7 @@ ruRU("Пред. год") srSP("") trTR("Önceki yıl") zhCN("") +zhTW("去年") T_("Next year") csCZ("Další rok") @@ -794,6 +844,7 @@ ruRU("След. год") srSP("") trTR("Sonraki yıl") zhCN("") +zhTW("明年") T_("Today") csCZ("Dnes") @@ -809,6 +860,7 @@ ruRU("Сегодня") srSP("") trTR("Bugün") zhCN("") +zhTW("今天") T_("Wk") csCZ("Tý") @@ -824,6 +876,7 @@ ruRU("") srSP("") trTR("Hft.") zhCN("") +zhTW("") T_("Previous hour") csCZ("Předchozí hodina") @@ -839,6 +892,7 @@ ruRU("Час назад") srSP("") trTR("") zhCN("") +zhTW("前一小時") T_("Next hour") csCZ("Další hodina") @@ -854,6 +908,7 @@ ruRU("Через час") srSP("") trTR("") zhCN("") +zhTW("下一小時") T_("Previous minute") csCZ("Předchozí minuta") @@ -869,6 +924,7 @@ ruRU("Минуту назад") srSP("") trTR("") zhCN("") +zhTW("前一分鐘") T_("Next minute") csCZ("Další minuta") @@ -884,6 +940,7 @@ ruRU("Через минуту") srSP("") trTR("") zhCN("") +zhTW("下一分鐘") // StatusBar.cpp @@ -902,6 +959,7 @@ ruRU("Готов") srSP("Spreman") trTR("Hazır") zhCN("待命") +zhTW("待命") // TabCtrl.cpp @@ -920,6 +978,7 @@ ruRU("Применить") srSP("Primeni") trTR("Uygula") zhCN("应用") +zhTW("應用") T_("Close") csCZ("Zavřít") @@ -935,6 +994,7 @@ ruRU("Закрыть") srSP("Zatvori") trTR("Kapat") zhCN("关闭") +zhTW("關閉") // DlgColor.cpp @@ -953,6 +1013,7 @@ ruRU("нет цвета") srSP("(bez boje)") trTR("(renk yok)") zhCN("(无颜色)") +zhTW("(無顏色)") T_("Set color") csCZ("Nastavit barvu") @@ -968,6 +1029,7 @@ ruRU("Установить цвет") srSP("Postavi boju") trTR("Rengi ayarla") zhCN("设置颜色") +zhTW("設定顏色") T_("Write current color to selected palette slot") csCZ("Nastavit barvu pole v paletě na aktuální kreslicí barvu") @@ -984,6 +1046,7 @@ ruRU("Записать текущий цвет в выделенный слот srSP("Zapiši trenutnu boju u izabranu paletu boja") trTR("Seçilen palet slotunu geçerli renkle değiştir") zhCN("写当前颜色到选择的调色板槽") +zhTW("寫目前顏色到選擇的調色盤槽") T_("Default palette") csCZ("Standardní paleta") @@ -999,6 +1062,7 @@ ruRU("Палитра по умолчанию") srSP("Podrazumevana paleta") trTR("Varsayılan renk paleti") zhCN("缺省调色板") +zhTW("預設調色盤") T_("Restore default system palette") csCZ("Nastavit standardní systémovou paletu") @@ -1014,6 +1078,7 @@ ruRU("Восстановить системную палитру по умолч srSP("Vrati standardnu paletu sistema") trTR("Varsayılan sistem renk paletini geri yükle") zhCN("恢复到缺省系统调色板") +zhTW("恢復到預設系統調色盤") T_("Save as..") csCZ("Uložit jako...") @@ -1029,6 +1094,7 @@ ruRU("Сохранить как...") srSP("Sačuvaj kao..") trTR("Farklı kaydet...") zhCN("保存为") +zhTW("儲存為") T_("Store palette information into a disk file") csCZ("Uložit paletu do souboru") @@ -1045,6 +1111,7 @@ ruRU("Сохранить информацию о палитре в файл " srSP("Sačuvaj paletu u fajl na disku") trTR("Renk paleti bilgisini dosyada sakla") zhCN("保存调色板信息到磁盘文件") +zhTW("儲存調色盤資訊到磁片檔案") T_("Load") csCZ("Načíst...") @@ -1060,6 +1127,7 @@ ruRU("Загрузить") srSP("Učitaj") trTR("Yükle") zhCN("装载") +zhTW("載入") T_("Load previously saved palette") csCZ("Načíst paletu z dříve uloženého souboru") @@ -1075,6 +1143,7 @@ ruRU("Загрузить сохранённую палитру") srSP("Učitaj prethodno sačuvanu paletu") trTR("Daha önce kaydedilmiş olan renk paletini yükle") zhCN("载入以前保存的调色板") +zhTW("載入以前儲存的調色盤") T_("Small") csCZ("Malá") @@ -1090,6 +1159,7 @@ ruRU("Маленький") srSP("Mali") trTR("Küçük") zhCN("小") +zhTW("小") T_("Set up palette size 4 times 4 colors") csCZ("Nastavit rozměry palety 4 x 4 polí") @@ -1105,6 +1175,7 @@ ruRU("Установить размер палитры 16 цветов") srSP("Podesi veličinu palete na 4x4 boje") trTR("16 renkli palet oluştur") zhCN("设置调色板大小为4倍4颜色") +zhTW("設定調色盤大小為4倍4顏色") T_("Medium") csCZ("Střední") @@ -1120,6 +1191,7 @@ ruRU("Средний") srSP("Srednji") trTR("Orta") zhCN("中") +zhTW("中") T_("Set up palette size 8 times 8 colors") csCZ("Nastavit rozměry palety 8 x 8 polí") @@ -1135,6 +1207,7 @@ ruRU("Установить размер палитры 64 цветов") srSP("Podesi veličinu palete na 8x8 boja") trTR("64 renkli palet oluştur") zhCN("设置调色板大小为8倍8颜色") +zhTW("設定調色盤大小為8倍8顏色") T_("Large") csCZ("Velká") @@ -1150,6 +1223,7 @@ ruRU("Большой") srSP("Velika") trTR("Büyük") zhCN("大") +zhTW("大") T_("Set up palette size 16 times 16 colors (maximum size)") csCZ("Nastavit rozměry palety 16 x 16 polí (max. velikost)") @@ -1166,6 +1240,7 @@ ruRU("Установить размер палитры 256 цветов (мак srSP("Podesi veličinu palete na 16x16 boja (maksimalna veličina)") trTR("256 renkli palet oluştur") zhCN("设置调色板大小为16倍16颜色(最大)") +zhTW("設定調色盤大小為16倍16顏色(最大)") T_("Custom...") csCZ("Vlastní...") @@ -1181,6 +1256,7 @@ ruRU("Пользовательская...") srSP("Proizvoljno...") trTR("Özel...") zhCN("定制...") +zhTW("自訂...") T_("Select custom palette size") csCZ("Zvolit vlastní počet polí v paletě") @@ -1196,6 +1272,7 @@ ruRU("Выберите размер пользовательской палит srSP("Izaberi proizvoljnu veličinu palete") trTR("Özel palet boyutunu seç") zhCN("选择定制调色板大小") +zhTW("選擇自訂調色盤大小") T_("Palette (*.pal)") csCZ("Paleta (*.pal)") @@ -1211,6 +1288,7 @@ ruRU("Палитра (*.pal)") srSP("Paleta (*.pal)") trTR("Palet (*.pal)") zhCN("调色板(*.pal)") +zhTW("調色盤(*.pal)") T_("*.pal") csCZ("*.pal") @@ -1226,6 +1304,7 @@ ruRU("") srSP("*.pal") trTR("*.pal") zhCN("*.pal") +zhTW("*.pal") T_("pal") csCZ("pal") @@ -1241,6 +1320,7 @@ ruRU("") srSP("pal") trTR("pal") zhCN("pal") +zhTW("pal") T_("Save palette as..") csCZ("Uložit paletu jako...") @@ -1256,6 +1336,7 @@ ruRU("Сохранить палитру как...") srSP("Sačuvajte paletu kao...") trTR("Paleti farklı kaydet...") zhCN("保存调色板为..") +zhTW("儲存調色盤為..") T_("Error writing file [* \001%s\001].") csCZ("Chyba při zápisu do souboru [* \001%s\001].") @@ -1271,6 +1352,7 @@ ruRU("Ошибка записи файла [* \001%s\001].") srSP("Greška prilikom pisanja fajla [* \001%s\001].") trTR("Dosya yazma hatası: veriler [* \001%s\001] dosyasına yazılamıyor.") zhCN("写文件错误[* \001%s\001].") +zhTW("寫入檔案錯誤[* \001%s\001].") T_("Load palette..") csCZ("Načíst paletu...") @@ -1286,6 +1368,7 @@ ruRU("Загрузить палитру...") srSP("Učitaj paletu..") trTR("Renk paleti yükle...") zhCN("装载调色板..") +zhTW("載入調色盤..") T_("Error opening file [* \001%s\001].") csCZ("Nelze otevřít soubor [* \001%s\001].") @@ -1301,6 +1384,7 @@ ruRU("Ошибка открытия файла [* \001%s\001].") srSP("Greška prilikom otvaranja fajla [* \001%s\001].") trTR("Dosya yazma hatası: [* \001%s\001] dosyası açılamıyor.") zhCN("打开文件错误[* \001%s\001].") +zhTW("開啟檔案錯誤[* \001%s\001].") T_("Error reading palette from file [* \001%s\001].") csCZ("Chyba při načítání palety ze souboru [* \001%s\001].") @@ -1316,6 +1400,7 @@ ruRU("Ошибка чтения палитры из файла [* \001%s\001].") srSP("Greška prilikom čitanja fajla [* \001%s\001].") trTR("Dosya okuma hatası: palet [* \001%s\001] dosyasından okunamıyor.") zhCN("从文件[* \001%s\001]. 读调色板错") +zhTW("從檔案[* \001%s\001]. 讀取調色盤錯誤") T_("Palette dimensions") csCZ("Rozměry palety") @@ -1331,6 +1416,7 @@ ruRU("Размер палитры") srSP("Dimenzije palete") trTR("Palet boyutları") zhCN("调色板维度") +zhTW("調色盤維度") T_("(transparent)") csCZ("(průhledná)") @@ -1346,6 +1432,7 @@ ruRU("(прозрачный)") srSP("(transparenta)") trTR("(saydam)") zhCN("(透明)") +zhTW("(透明)") T_("Palette") csCZ("Paleta") @@ -1361,6 +1448,7 @@ ruRU("Палитра") srSP("Paleta") trTR("Palet") zhCN("调色板") +zhTW("調色盤") T_("Wheel") csCZ("Kolo") @@ -1376,6 +1464,7 @@ ruRU("Колесо") srSP("Točak") trTR("Teker") zhCN("滚轮") +zhTW("滾輪") T_("Hue") csCZ("Odstín") @@ -1391,6 +1480,7 @@ ruRU("Оттенок") srSP("Obojenost") trTR("Renk (Hue)") zhCN("色调") +zhTW("色調") T_("RGB") csCZ("RGB") @@ -1406,6 +1496,7 @@ ruRU("") srSP("RGB") trTR("RGB") zhCN("RGB") +zhTW("RGB") T_("HSV") csCZ("HSV") @@ -1421,6 +1512,7 @@ ruRU("") srSP("HSV") trTR("HSV") zhCN("HSV") +zhTW("HSV") T_("Select color") csCZ("Výběr barvy") @@ -1436,6 +1528,7 @@ ruRU("Выбирите цвет") srSP("Izaberi boju") trTR("Renk Seçin") zhCN("选择颜色") +zhTW("選擇顏色") // FileSel.cpp @@ -1454,6 +1547,7 @@ ruRU("[A3* Не могу прочитать папку!]&&") srSP("[A3* Ne mogu da pročitam folder!]&&") trTR("[A3* Klasör okunamıyor !]&&") zhCN("[A3* 不能读取目录 !]&&") +zhTW("[A3* 不能讀取目錄 !]&&") T_(" is directory.") csCZ(" je adresář.") @@ -1469,6 +1563,7 @@ ruRU(" папка.") srSP(" je folder.") trTR(" bir klasördür") zhCN(" 为目录.") +zhTW(" 為目錄.") T_(" already exists.&Do you want to continue ?") csCZ(" již existuje.&Přejete si pokračovat ?") @@ -1484,6 +1579,7 @@ ruRU(" уже существует. &Вы хотите продолжить?") srSP(" već postoji. &Da li želite da nastavite?") trTR(" zaten var.&Yine de devam etmek istiyor musunuz?") zhCN(" 已经存在.继续(&D)?") +zhTW(" 已經存在.繼續(&D)?") T_(" does not exist.") csCZ(" neexistuje.") @@ -1499,6 +1595,7 @@ ruRU(" не существует.") srSP(" ne postoji.") trTR(" yok.") zhCN("不存在") +zhTW("不存在") T_("&do not exist.") csCZ("&neexistují.") @@ -1514,6 +1611,7 @@ ruRU("&не существует.") srSP("&ne postoji.") trTR("& yok.") zhCN("不存在(&d)") +zhTW("不存在(&d)") T_("&Do you want to continue ?") csCZ("&Přejete si pokračovat ?") @@ -1529,6 +1627,7 @@ ruRU("&Вы хотите продолжить?") srSP("&Da li želite da nastavite?") trTR("&Devam etmek istiyor musunuz?") zhCN("继续(&D)?") +zhTW("繼續(&D)?") T_("Custom file type (") csCZ("Jiný typ souboru (") @@ -1544,6 +1643,7 @@ ruRU("Свой тип файла (") srSP("Proizvoljni tip fajla (") trTR("Özel dosya türü(") zhCN("定制文件类型 (") +zhTW("自訂檔案類型 (") T_("New directory") csCZ("Nový adresář") @@ -1559,6 +1659,7 @@ ruRU("Новая папка") srSP("Novi folder") trTR("Yeni klasör") zhCN("新建文件夹") +zhTW("建立資料夾") T_("Name") csCZ("Jméno") @@ -1574,6 +1675,7 @@ ruRU("Имя") srSP("Ime") trTR("İsim") zhCN("名称") +zhTW("名稱") T_("[A3* Creating directory failed !&&]") csCZ("[A3* Chyba při vytváření adresáře !&&]") @@ -1589,6 +1691,7 @@ ruRU("[A3* Не удалось создать папку!&&]") srSP("[A3* Pravljenje foldera nije uspelo!&&]") trTR("[A3* Klasör oluşturulamadı !]&&") zhCN("[A3* 创建文件夹失败 !&&]") +zhTW("[A3* 建立資料夾失敗 !&&]") T_("Mask") csCZ("Maska") @@ -1604,6 +1707,7 @@ ruRU("Маска") srSP("Maska") trTR("Maske") zhCN("掩码") +zhTW("遮罩") T_("Add to selection") csCZ("Přidat k výběru") @@ -1619,6 +1723,7 @@ ruRU("Добавить к выделению") srSP("Dodaj u izbor") trTR("Seçilenlere ekle") zhCN("选上") +zhTW("選上") T_("Remove from selection") csCZ("Odebrat od výběru") @@ -1634,6 +1739,7 @@ ruRU("Убрать из выделения") srSP("Ukloni iz selekcije") trTR("Seçilenlerden çıkar") zhCN("去选") +zhTW("去選") T_(" Drive") csCZ(" Disková jednotka") @@ -1649,6 +1755,7 @@ ruRU(" Диск") srSP(" Disk") trTR(" Sürücü") zhCN(" 驱动") +zhTW(" 驅動") T_("Directory ") csCZ("Adresář ") @@ -1664,6 +1771,7 @@ ruRU("Папка ") srSP("Folder ") trTR(" Klasör ") zhCN("文件夹 ") +zhTW("資料夾 ") T_(" drive(s)") csCZ(" disk(y)") @@ -1679,6 +1787,7 @@ ruRU("диск(и)") srSP("") trTR("") zhCN("") +zhTW("") T_(" folder(s)") csCZ(" adresář(e)") @@ -1694,6 +1803,7 @@ ruRU("папка(и)") srSP("") trTR("") zhCN("") +zhTW("") T_(" file(s)") csCZ(" soubor(y)") @@ -1709,6 +1819,7 @@ ruRU("файл(ы)") srSP("") trTR("") zhCN("") +zhTW("") T_("Open") csCZ("Otevřít") @@ -1724,6 +1835,7 @@ ruRU("Открыть") srSP("Otvori") trTR("Aç") zhCN("打开") +zhTW("開啟") T_("Save") csCZ("Uložit") @@ -1739,6 +1851,7 @@ ruRU("Сохранить") srSP("Sačuvaj") trTR("Kaydet") zhCN("保存") +zhTW("儲存") T_("[A3* Renaming of file failed !&&]") csCZ("[A3* Chyba při přejmenovávání souboru !&&]") @@ -1754,6 +1867,7 @@ ruRU("[A3* Не удалось переименовать файл!&&]") srSP("[A3* Promena imena fajla nije uspela!&&]") trTR("[A3* Dosya yeniden adlandırılamadı !]&&") zhCN("[A3* 文件重命名失败 !&&]") +zhTW("[A3* 檔案重新命名失敗 !&&]") T_("All files") csCZ("Všechny soubory") @@ -1769,6 +1883,7 @@ ruRU("Все файлы") srSP("Svi fajlovi") trTR("Tüm dosyalar") zhCN("所有文件") +zhTW("所有檔案") T_("&Select") csCZ("&Vybrat") @@ -1784,6 +1899,7 @@ ruRU("&Выбрать") srSP("&Izaberi") trTR("&Seç") zhCN("选择(&S)") +zhTW("選擇(&S)") T_("Save as") csCZ("Uložit jako") @@ -1799,6 +1915,7 @@ ruRU("Сохранить как") srSP("Sačuvaj kao") trTR("Farklı kaydet") zhCN("另存为") +zhTW("另存為") T_("Select directory") csCZ("Vybrat adresář") @@ -1814,6 +1931,7 @@ ruRU("Выберите папку") srSP("Izaberi folder") trTR("Klasör seç") zhCN("选择文件夹") +zhTW("選擇資料夾") T_("Dir up") csCZ("Nadřazený adresář") @@ -1829,6 +1947,7 @@ ruRU("Папка вверх") srSP("Folder iznad") trTR("Üst klasöre çık") zhCN("向上") +zhTW("向上") T_("Create directory") csCZ("Vytvořit adresář") @@ -1844,6 +1963,7 @@ ruRU("Создать папку") srSP("Napravi folder") trTR("Klasör oluştur") zhCN("创建文件夹") +zhTW("建立資料夾") T_("Select files") csCZ("Označit soubory") @@ -1859,6 +1979,7 @@ ruRU("Выделить файлы") srSP("Izaberite fajlove") trTR("Dosyaları seç") zhCN("选择文件") +zhTW("選擇檔案") T_("Unselect files") csCZ("Odznačit soubory") @@ -1874,6 +1995,7 @@ ruRU("Убрать выделение файлов") srSP("Deselektujte fajlove") trTR("Seçili dosyaları iptal et") zhCN("取消选择文件") +zhTW("取消選擇檔案") T_("Toggle files") csCZ("Inverze označení") @@ -1889,6 +2011,7 @@ ruRU("Поменять выделение файлов") srSP("Invertuj izabrane") trTR("Seçili dosyaları değiştir") zhCN("Toggle files") +zhTW("Toggle files") // Windows.cpp @@ -1907,6 +2030,7 @@ ruRU("Активное окно") srSP("Aktviraj prozor") trTR("Pencereyi etkinleştir") zhCN("激活窗口") +zhTW("啟動視窗") T_("Activate this window") csCZ("Aktivovat toto okno") @@ -1922,6 +2046,7 @@ ruRU("Сделать активным это окно") srSP("Aktiviraj ovaj prozor") trTR("Bu pencereyi etkinleştir") zhCN("激活当前窗口") +zhTW("啟動目前視窗") T_("More windows..") csCZ("Další okna..") @@ -1937,6 +2062,7 @@ ruRU("Ещё окна...") srSP("Još prozora..") trTR("Daha fazla pencere...") zhCN("更多窗口") +zhTW("更多視窗") // Win32.cpp @@ -1955,6 +2081,7 @@ ruRU("Открыть...") srSP("Otvori..") trTR("Aç...") zhCN("打开..") +zhTW("開啟..") // CtrlUtil.cpp @@ -1973,6 +2100,7 @@ ruRU("Неверные данные.") srSP("Nevalidni podaci.") trTR("Geçersiz veri.") zhCN("无效数据") +zhTW("無效數據") // Update.cpp @@ -1991,6 +2119,7 @@ ruRU("Обновление ") srSP("Ažuriram ") trTR("Güncelliyor") zhCN("更新中 ") +zhTW("更新中 ") T_("Error creating file [* \001%s\001].") csCZ("Nelze vytvořit soubor [* \001%s\001].") @@ -2006,6 +2135,7 @@ ruRU("Ошибка создания файла [* \001%s\001].") srSP("Greška pri pravljenju fajla [* \001%s\001].") trTR("Dosya oluşturma hatası: [* \001%s\001] dosyası oluşturulamadı.") zhCN("创建文件错误 [* \001%s\001].") +zhTW("建立檔案錯誤 [* \001%s\001].") T_("Aborting update is likely to cause trouble when running the application " "for the next time.\nContinue?") @@ -2035,6 +2165,7 @@ srSP("Prekid ažuriranja će verovatno prouzrokovati nevolje kada startujete " trTR("Güncellemenin iptal edilmesi durumunda, uygulama düzgün çalışmayabilir.Bu " "tehlikeye rağmen devam etmek istiyor musunuz?\nEvet") zhCN("放弃可能导致下次运行本程序出现问题.\n继续?") +zhTW("放棄可能導致下次運行本程式出現問題.\n繼續?") T_("Overwriting %s") csCZ("Přepisuji %s") @@ -2050,6 +2181,7 @@ ruRU("Переписать %s") srSP("") trTR("Overwriting %s") zhCN("%s dosyasının üzerine yazılıyor") +zhTW("%s dosyasının üzerine yazılıyor") // Ctrl.lay @@ -2068,6 +2200,7 @@ ruRU("Тест") srSP("Test") trTR("Deneme") zhCN("测试") +zhTW("測試") T_("&Directory") csCZ("&Adresář") @@ -2083,6 +2216,7 @@ ruRU("&Папка") srSP("&Folder") trTR("&Klasör") zhCN("文件夹(&D)") +zhTW("資料夾(&D)") T_("&File") csCZ("&Soubor") @@ -2098,6 +2232,7 @@ ruRU("&Файл") srSP("&Fajl") trTR("&Dosya") zhCN("文件(&F)") +zhTW("檔案(&F)") T_("&Type") csCZ("&Typ") @@ -2113,6 +2248,7 @@ ruRU("&Тип") srSP("&Tip") trTR("&Tür") zhCN("类型(&T)") +zhTW("類型(&T)") T_("&Sort by") csCZ("&Třídit dle") @@ -2128,6 +2264,7 @@ ruRU("&Cортировать по") srSP("&Sortiraj po") trTR("&Şuna göre sırala:") zhCN("排序(&S)于") +zhTW("排序(&S)於") T_("Name\nExtension") csCZ("Jména\nPřípony") @@ -2143,6 +2280,7 @@ ruRU("Имя\nРасширение") srSP("Ime\nEkstenzija") trTR("İsim") zhCN("名称\n扩展") +zhTW("名稱\n擴展") T_("Read only") csCZ("Jen číst") @@ -2158,6 +2296,7 @@ ruRU("Только для чтения") srSP("Samo za čitanje") trTR("Salt okunur") zhCN("只读") +zhTW("唯讀") T_("Show hidden") csCZ("Zobrazit skryté") @@ -2173,6 +2312,7 @@ ruRU("Показать скрытые") srSP("") trTR("") zhCN("") +zhTW("顯示隱藏檔") T_("Color:") csCZ("B&arva:") @@ -2188,6 +2328,7 @@ ruRU("Цвет:") srSP("Boja:") trTR("Renk:") zhCN("颜色") +zhTW("顏色") T_("R:") csCZ("&R:") @@ -2203,6 +2344,7 @@ ruRU("") srSP("R:") trTR("R:") zhCN("R:") +zhTW("R:") T_("G:") csCZ("&G:") @@ -2218,6 +2360,7 @@ ruRU("") srSP("G:") trTR("G:") zhCN("G:") +zhTW("G:") T_("B:") csCZ("&B:") @@ -2233,6 +2376,7 @@ ruRU("") srSP("B:") trTR("B:") zhCN("B:") +zhTW("B:") T_("H:") csCZ("&H:") @@ -2248,6 +2392,7 @@ ruRU("") srSP("H:") trTR("H:") zhCN("H:") +zhTW("H:") T_("S:") csCZ("&S:") @@ -2263,6 +2408,7 @@ ruRU("") srSP("S:") trTR("S:") zhCN("S:") +zhTW("S:") T_("V:") csCZ("&V:") @@ -2278,6 +2424,7 @@ ruRU("") srSP("V:") trTR("V:") zhCN("V:") +zhTW("V:") T_("&Rows:") csCZ("Řa&dy:") @@ -2293,6 +2440,7 @@ ruRU("&Ряды:") srSP("&Redovi:") trTR("&Satırlar:") zhCN("行(&R)") +zhTW("列(&R)") T_("&Columns:") csCZ("&Sloupce:") @@ -2308,6 +2456,7 @@ ruRU("&Колонки:") srSP("&Kolone:") trTR("S&ütunlar:") zhCN("列(&C)") +zhTW("行(&C)") T_("Default") csCZ("Základní") @@ -2323,6 +2472,7 @@ ruRU("По умолчанию") srSP("Podrazumevano") trTR("Varsayılan") zhCN("缺省") +zhTW("預設") T_("Printer") csCZ("Tiskárna") @@ -2338,6 +2488,7 @@ ruRU("Принтер") srSP("") trTR("Yazıcı") zhCN("打印机") +zhTW("印表機") T_("Paper size") csCZ("Velikost papíru") @@ -2353,6 +2504,7 @@ ruRU("Размер бумаги") srSP("") trTR("Kağıt Boyutu") zhCN("纸张大小") +zhTW("紙張大小") T_("Input slot") csCZ("Vstup") @@ -2368,6 +2520,7 @@ ruRU("Лоток") srSP("") trTR("Yazıcı Girişi") zhCN("输入槽") +zhTW("輸入槽") T_("Pages per sheet") csCZ("Stránek na list") @@ -2383,6 +2536,7 @@ ruRU("Страниц на лист") srSP("") trTR("Kağıt başına düşen sayfa sayısı") zhCN("每sheet页数") +zhTW("每sheet頁數") T_("Print range") csCZ("Rozsah tisku") @@ -2398,6 +2552,7 @@ ruRU("") srSP("") trTR("Yazdırma aralığı") zhCN("打印范围") +zhTW("列印範圍") T_("All pages\nCurrent page\nPages from") csCZ("Vše\nAktulí stránku\nRozsah") @@ -2413,6 +2568,7 @@ ruRU("") srSP("") trTR("Tüm sayfalar\nGeçerli sayfa\nSayfa aralığı") zhCN("所有页\n当前页\n始于页") +zhTW("所有頁\n目前頁\n始於頁") T_("to") csCZ("až") @@ -2428,6 +2584,7 @@ ruRU("в") srSP("") trTR("to") zhCN("到") +zhTW("到") T_("Copies") csCZ("Kopie") @@ -2443,6 +2600,7 @@ ruRU("Копий") srSP("") trTR("Kopya sayısı") zhCN("份数") +zhTW("份數") T_("Collate") csCZ("Seřadit") @@ -2458,6 +2616,7 @@ ruRU("Подобрать") srSP("") trTR("Harmanla") zhCN("比较") +zhTW("比較") T_("Portrait\nLandscape") csCZ("Na výšku\nNa šířku") @@ -2473,6 +2632,7 @@ ruRU("Портрет\nАльбом") srSP("") trTR("Dikey\nYatay") zhCN("纵向\n横向") +zhTW("縱向\n橫向") T_("Placement") csCZ("Umístění") @@ -2488,6 +2648,7 @@ ruRU("Размещение") srSP("") trTR("Sayfa yerleşimi") zhCN("布局") +zhTW("佈局") // Obsolete @@ -2506,6 +2667,7 @@ ruRU("&Отменить") srSP("&Otkaži") trTR("&İptal") zhCN("取消(&C)") +zhTW("取消(&C)") T_("Week") csCZ("Týden") @@ -2521,6 +2683,7 @@ ruRU("Неделя") srSP("") trTR("Hafta") zhCN("") +zhTW("") T_("1 / 1") csCZ("1 / 1") @@ -2536,6 +2699,7 @@ ruRU("1 / 1") srSP("1 / 1") trTR("1 / 1") zhCN("1 / 1") +zhTW("1 / 1") T_("Sideways") csCZ("Na šířku") @@ -2551,6 +2715,7 @@ ruRU("По бокам") srSP("Sa strane") trTR("Yanlama") zhCN("侧边") +zhTW("側邊") T_("&1 page\n&2 pages\n&4 pages\n&8 pages") csCZ("&1 strana\n&2 strany\n&4 strany\n&8 stran") @@ -2566,6 +2731,7 @@ ruRU("&1 страница\n&2 страницы\n&4 страницы\n&8 стра srSP("&1 strana\n&2 strane\n&4 strane\n&8 strana") trTR("&1 sayfa\n&2 sayfa\n&4 sayfa\n&8 sayfa") zhCN("&1 页\n&2 页\n&4 页\n&8 页") +zhTW("&1 頁\n&2 頁\n&4 頁\n&8 頁") T_("Page &numbers") csCZ("Čísla &stránek") @@ -2581,6 +2747,7 @@ ruRU("&Номера страниц") srSP("&Broj strana") trTR("Sayfa &numaraları") zhCN("页码(&n)") +zhTW("頁碼(&n)") T_("PDF export..") csCZ("PDF export..") @@ -2596,6 +2763,7 @@ ruRU("Экспорт в PDF") srSP("PDF eksport..") trTR("PDF dosyasını içe aktar...") zhCN("输出PDF..") +zhTW("輸出PDF..") T_("Report") csCZ("Výstupní sestava") @@ -2611,6 +2779,7 @@ ruRU("Отчёт") srSP("Izveštaj") trTR("Bildir") zhCN("报告") +zhTW("報告") T_("&Print") csCZ("&Tisk") @@ -2626,3 +2795,4 @@ ruRU("&Печать") srSP("&Štampa") trTR("&Yazdır") zhCN("打印(&P)") +zhTW("列印(&P)") diff --git a/uppsrc/CtrlLib/MenuBar.cpp b/uppsrc/CtrlLib/MenuBar.cpp index f8662d999..523039ed6 100644 --- a/uppsrc/CtrlLib/MenuBar.cpp +++ b/uppsrc/CtrlLib/MenuBar.cpp @@ -6,7 +6,7 @@ NAMESPACE_UPP -#define LLOG(x) LOG(x) +#define LLOG(x) // LOG(x) #define LTIMING(x) // RTIMING(x) static ColorF xpmenuborder[] = { diff --git a/uppsrc/CtrlLib/MenuImp.h b/uppsrc/CtrlLib/MenuImp.h index 50d855407..3acab9705 100644 --- a/uppsrc/CtrlLib/MenuImp.h +++ b/uppsrc/CtrlLib/MenuImp.h @@ -1,183 +1,183 @@ -#include "CtrlLib.h" - -#ifndef CtrlCore_MenuImp_h -#define CtrlCore_MenuImp_h - -NAMESPACE_UPP - -class MenuItemBase : public Ctrl, public Bar::Item -{ -public: - virtual Bar::Item& Text(const char *text); - virtual Bar::Item& Key(dword key); - virtual Bar::Item& Image(const UPP::Image& img); - virtual Bar::Item& Enable(bool _enable); - virtual Bar::Item& Tip(const char *tip); - virtual Bar::Item& Help(const char *help); - virtual Bar::Item& Topic(const char *help); - virtual Bar::Item& Description(const char *desc); - virtual Bar::Item& Check(bool check); - virtual Bar::Item& Radio(bool check); - - virtual String GetDesc() const; - virtual dword GetAccessKeys() const; - virtual void AssignAccessKeys(dword used); - -protected: - enum { - NOTHING, CHECK0, CHECK1, RADIO0, RADIO1 - }; - - enum { - NORMAL, HIGHLIGHT, PUSH - }; - - String text; - dword accel; - int state; - int leftgap, textgap; - Font font; - bool isenabled; - byte type; - byte accesskey; - Size maxiconsize; - const MenuBar::Style *style; - -public: - virtual void SyncState() = 0; - - void DrawMenuText(Draw& w, int x, int y, const String& s, Font f, bool enabled, bool hl, - Color color, Color hlcolor); - void PaintTopItem(Draw& w, int state); - - bool IsItemEnabled() const { return isenabled; } - String GetText() const { return text; } - MenuItemBase& LeftGap(int cx) { leftgap = cx; return *this; } - MenuItemBase& TextGap(int cx) { textgap = cx; return *this; } - MenuItemBase& SetFont(Font f) { font = f; return *this; } - MenuItemBase& Style(const MenuBar::Style *s) { style = s; return *this; } - Font GetFont() const { return font; } - MenuItemBase& MaxIconSize(Size sz) { maxiconsize = sz; return *this; } - - MenuItemBase(); -}; - -void DrawMenuText(Draw& w, int x, int y, const String& s, Font f, bool enabled, - bool highlight, int mn, Color color, Color hltext); - -class MenuItem : public MenuItemBase { -public: - virtual void Paint(Draw& w); - virtual void MouseEnter(Point, dword); - virtual void MouseLeave(); - virtual Size GetMinSize() const; - virtual void LeftUp(Point, dword); - virtual void RightUp(Point, dword); - virtual void GotFocus(); - virtual void LostFocus(); - virtual bool Key(dword key, int count); - virtual bool HotKey(dword key); - virtual void SyncState(); - - virtual Bar::Item& Image(const UPP::Image& img); - -private: - UPP::Image licon, ricon; - - void SendHelpLine(); - void ClearHelpLine(); - -protected: - virtual int GetVisualState(); - -public: - MenuItem& RightImage(const UPP::Image& img); -}; - -class SubMenuBase { -protected: - MenuBar menu; - Callback1 proc; - MenuBar *parentmenu; - - void Pull(Ctrl *item, Point p, Size sz); - -public: - virtual void Pull() = 0; - - void SetParent(MenuBar *m) { parentmenu = m; menu.MaxIconSize(m->GetMaxIconSize()); } - void Set(Callback1 _submenu) { proc = _submenu; } - Callback1 Get() { return proc; } - - SubMenuBase() { parentmenu = NULL; } - virtual ~SubMenuBase() {} -}; - -class SubMenuItem : public MenuItem, public SubMenuBase { -public: - virtual void MouseEnter(Point, dword); - virtual void MouseLeave(); - virtual void GotFocus(); - virtual bool HotKey(dword key); - virtual bool Key(dword key, int count); - virtual int GetVisualState(); - virtual void Pull(); - -protected: - enum { - TIMEID_PULL = BarCtrl::TIMEID_COUNT, - TIMEID_COUNT - }; - -public: - typedef SubMenuItem CLASSNAME; - - SubMenuItem(); -}; - -class TopSubMenuItem : public MenuItemBase, public SubMenuBase { -public: - virtual void Paint(Draw& w); - virtual void MouseEnter(Point, dword); - virtual void MouseLeave(); - virtual void GotFocus(); - virtual void LostFocus(); - virtual void LeftDown(Point, dword); - virtual void SyncState(); - virtual Size GetMinSize() const; - virtual bool Key(dword key, int); - virtual bool HotKey(dword key); - virtual void Pull(); - -private: - int GetState(); - -public: - TopSubMenuItem() { NoInitFocus(); } -}; - -class TopMenuItem : public MenuItemBase { -public: - virtual void Paint(Draw& w); - virtual void MouseEnter(Point, dword); - virtual void MouseLeave(); - virtual void LeftUp(Point, dword); - virtual void LeftDown(Point, dword); - virtual void GotFocus(); - virtual void LostFocus(); - virtual bool Key(dword key, int count); - virtual Size GetMinSize() const; - virtual void SyncState(); - - static int GetStdHeight(Font font = StdFont()); - -private: - int GetState(); - -public: - TopMenuItem() { NoInitFocus(); } -}; - -END_UPP_NAMESPACE - -#endif +#include "CtrlLib.h" + +#ifndef CtrlCore_MenuImp_h +#define CtrlCore_MenuImp_h + +NAMESPACE_UPP + +class MenuItemBase : public Ctrl, public Bar::Item +{ +public: + virtual Bar::Item& Text(const char *text); + virtual Bar::Item& Key(dword key); + virtual Bar::Item& Image(const UPP::Image& img); + virtual Bar::Item& Enable(bool _enable); + virtual Bar::Item& Tip(const char *tip); + virtual Bar::Item& Help(const char *help); + virtual Bar::Item& Topic(const char *help); + virtual Bar::Item& Description(const char *desc); + virtual Bar::Item& Check(bool check); + virtual Bar::Item& Radio(bool check); + + virtual String GetDesc() const; + virtual dword GetAccessKeys() const; + virtual void AssignAccessKeys(dword used); + +protected: + enum { + NOTHING, CHECK0, CHECK1, RADIO0, RADIO1 + }; + + enum { + NORMAL, HIGHLIGHT, PUSH + }; + + String text; + dword accel; + int state; + int leftgap, textgap; + Font font; + bool isenabled; + byte type; + byte accesskey; + Size maxiconsize; + const MenuBar::Style *style; + +public: + virtual void SyncState() = 0; + + void DrawMenuText(Draw& w, int x, int y, const String& s, Font f, bool enabled, bool hl, + Color color, Color hlcolor); + void PaintTopItem(Draw& w, int state); + + bool IsItemEnabled() const { return isenabled; } + String GetText() const { return text; } + MenuItemBase& LeftGap(int cx) { leftgap = cx; return *this; } + MenuItemBase& TextGap(int cx) { textgap = cx; return *this; } + MenuItemBase& SetFont(Font f) { font = f; return *this; } + MenuItemBase& Style(const MenuBar::Style *s) { style = s; return *this; } + Font GetFont() const { return font; } + MenuItemBase& MaxIconSize(Size sz) { maxiconsize = sz; return *this; } + + MenuItemBase(); +}; + +void DrawMenuText(Draw& w, int x, int y, const String& s, Font f, bool enabled, + bool highlight, int mn, Color color, Color hltext); + +class MenuItem : public MenuItemBase { +public: + virtual void Paint(Draw& w); + virtual void MouseEnter(Point, dword); + virtual void MouseLeave(); + virtual Size GetMinSize() const; + virtual void LeftUp(Point, dword); + virtual void RightUp(Point, dword); + virtual void GotFocus(); + virtual void LostFocus(); + virtual bool Key(dword key, int count); + virtual bool HotKey(dword key); + virtual void SyncState(); + + virtual Bar::Item& Image(const UPP::Image& img); + +private: + UPP::Image licon, ricon; + + void SendHelpLine(); + void ClearHelpLine(); + +protected: + virtual int GetVisualState(); + +public: + MenuItem& RightImage(const UPP::Image& img); +}; + +class SubMenuBase { +protected: + MenuBar menu; + Callback1 proc; + MenuBar *parentmenu; + + void Pull(Ctrl *item, Point p, Size sz); + +public: + virtual void Pull() = 0; + + void SetParent(MenuBar *m) { parentmenu = m; menu.MaxIconSize(m->GetMaxIconSize()); } + void Set(Callback1 _submenu) { proc = _submenu; } + Callback1 Get() { return proc; } + + SubMenuBase() { parentmenu = NULL; } + virtual ~SubMenuBase() {} +}; + +class SubMenuItem : public MenuItem, public SubMenuBase { +public: + virtual void MouseEnter(Point, dword); + virtual void MouseLeave(); + virtual void GotFocus(); + virtual bool HotKey(dword key); + virtual bool Key(dword key, int count); + virtual int GetVisualState(); + virtual void Pull(); + +protected: + enum { + TIMEID_PULL = BarCtrl::TIMEID_COUNT, + TIMEID_COUNT + }; + +public: + typedef SubMenuItem CLASSNAME; + + SubMenuItem(); +}; + +class TopSubMenuItem : public MenuItemBase, public SubMenuBase { +public: + virtual void Paint(Draw& w); + virtual void MouseEnter(Point, dword); + virtual void MouseLeave(); + virtual void GotFocus(); + virtual void LostFocus(); + virtual void LeftDown(Point, dword); + virtual void SyncState(); + virtual Size GetMinSize() const; + virtual bool Key(dword key, int); + virtual bool HotKey(dword key); + virtual void Pull(); + +private: + int GetState(); + +public: + TopSubMenuItem() { NoInitFocus(); } +}; + +class TopMenuItem : public MenuItemBase { +public: + virtual void Paint(Draw& w); + virtual void MouseEnter(Point, dword); + virtual void MouseLeave(); + virtual void LeftUp(Point, dword); + virtual void LeftDown(Point, dword); + virtual void GotFocus(); + virtual void LostFocus(); + virtual bool Key(dword key, int count); + virtual Size GetMinSize() const; + virtual void SyncState(); + + static int GetStdHeight(Font font = StdFont()); + +private: + int GetState(); + +public: + TopMenuItem() { NoInitFocus(); } +}; + +END_UPP_NAMESPACE + +#endif diff --git a/uppsrc/CtrlLib/MenuItem.cpp b/uppsrc/CtrlLib/MenuItem.cpp index a01155816..1921394ad 100644 --- a/uppsrc/CtrlLib/MenuItem.cpp +++ b/uppsrc/CtrlLib/MenuItem.cpp @@ -1,611 +1,611 @@ -#include "MenuImp.h" - -#ifdef PLATFORM_WIN32 -#include -#endif - -NAMESPACE_UPP - -#define LLOG(x) // LOG(x) -#define LTIMING(x) // RTIMING(x) - -MenuItemBase::MenuItemBase() -{ - accel = 0; - state = 0; - isenabled = true; - type = 0; - font = StdFont(); - leftgap = 16; - textgap = 6; - accesskey = 0; - NoWantFocus(); - style = &MenuBar::StyleDefault(); - Transparent(); - maxiconsize = Size(INT_MAX, INT_MAX); -} - -Bar::Item& MenuItemBase::Text(const char *s) -{ - accesskey = ExtractAccessKey(s, text); - Refresh(); - return *this; -} - -Bar::Item& MenuItemBase::Key(dword key) -{ - if(key) { - accel = key; - Refresh(); - } - return *this; -} - -Bar::Item& MenuItemBase::Image(const UPP::Image& img) -{ - return *this; -} - -Bar::Item& MenuItemBase::Check(bool check) -{ - type = CHECK0 + check; - return *this; -} - -Bar::Item& MenuItemBase::Radio(bool check) -{ - type = RADIO0 + check; - return *this; -} - -Bar::Item& MenuItemBase::Tip(const char *s) -{ - return *this; -} - -Bar::Item& MenuItemBase::Help(const char *s) -{ - HelpLine(s); - return *this; -} - -Bar::Item& MenuItemBase::Description(const char *s) -{ - Ctrl::Description(s); - return *this; -} - -Bar::Item& MenuItemBase::Topic(const char *s) -{ - HelpTopic(s); - return *this; -} - -Bar::Item& MenuItemBase::Enable(bool en) -{ - isenabled = en; - Refresh(); - return *this; -} - -String MenuItemBase::GetDesc() const -{ - return text; -} - -dword MenuItemBase::GetAccessKeys() const -{ - return AccessKeyBit(accesskey); -} - -void MenuItemBase::AssignAccessKeys(dword used) -{ - if(!accesskey) { - accesskey = ChooseAccessKey(text, used); - used |= AccessKeyBit(accesskey); - } - Ctrl::AssignAccessKeys(used); -} - -void DrawMnemonicText(Draw& w, int x, int y, const String& s, Font font, Color color, - int mnemonic) -{ - int q = s.Find(ToUpper(mnemonic)); - int e = s.Find(ToLower(mnemonic)); - if(q < 0 || e >= 0 && e < q) q = e; - w.DrawText(x, y, s, font, color); - if(q < 0) return; - FontInfo f = font.Info(); - w.DrawRect(x + GetTextSize(~s, font, q).cx, y + f.GetAscent() + 1, f[s[q]], 1, - SColorMark()); -} - -void DrawMenuText(Draw& w, int x, int y, const String& s, Font f, bool enabled, - bool hl, int mnemonic, Color color, Color hlcolor) -{ - if(enabled) - DrawMnemonicText(w, x, y, s, f, hl ? hlcolor : color, mnemonic); - else { - if(GUI_GlobalStyle() >= GUISTYLE_XP) - DrawMnemonicText(w, x, y, s, f, SColorDisabled, 0); - else { - DrawMnemonicText(w, x + 1, y + 1, s, f, SColorPaper, 0); - DrawMnemonicText(w, x, y, s, f, SColorDisabled, 0); - } - } -} - -void MenuItemBase::DrawMenuText(Draw& w, int x, int y, const String& s, Font f, bool enabled, - bool hl, Color color, Color hlcolor) -{ - UPP::DrawMenuText(w, x, y, s, f, enabled, hl, VisibleAccessKeys() ? accesskey : 0, - color, hlcolor); -} - -void MenuItemBase::PaintTopItem(Draw& w, int state) { - Size sz = GetSize(); - if(GUI_GlobalStyle() >= GUISTYLE_XP) { - ChPaint(w, 0, 0, sz.cx, sz.cy, style->topitem[state]); - String text = GetText(); - Size isz = GetTextSize(text, StdFont()); - DrawMenuText(w, 6, (sz.cy - isz.cy) / 2, text, GetFont(), IsItemEnabled(), state, - style->topitemtext[0], style->topitemtext[state]); - } - else { - w.DrawRect(sz, SColorFace); - static const ColorF b0[] = { (ColorF)1, SColorLight, SColorLight, SColorShadow, SColorShadow, }; - static const ColorF b1[] = { (ColorF)1, SColorShadow, SColorShadow, SColorLight, SColorLight, }; - String text = GetText(); - Size isz = GetTextSize(text, StdFont()); - DrawMenuText(w, 6, (sz.cy - isz.cy) / 2, text, GetFont(), IsItemEnabled(), false, - SColorMenuText, SColorHighlightText); - if(state) - DrawBorder(w, 0, 0, sz.cx, sz.cy, state == 2 ? b1 : b0); - } -} - -// ------------------------------------- - -Bar::Item& MenuItem::Image(const UPP::Image& img) -{ - licon = img; - Refresh(); - return *this; -} - -MenuItem& MenuItem::RightImage(const UPP::Image& img) -{ - ricon = img; - Refresh(); - return *this; -} - -void MenuItem::SendHelpLine() -{ - BarCtrl::SendHelpLine(this); -} - -void MenuItem::ClearHelpLine() -{ - BarCtrl::ClearHelpLine(this); -} - -void MenuItem::MouseEnter(Point, dword) -{ - SetFocus(); - Refresh(); - SendHelpLine(); -} - -void MenuItem::MouseLeave() -{ - ClearHelpLine(); -} - -void MenuItem::GotFocus() -{ - Refresh(); - SendHelpLine(); -} - -void MenuItem::LostFocus() -{ - Refresh(); - ClearHelpLine(); -} - -int MenuItem::GetVisualState() -{ - return HasFocus() ? - (HasMouse() && GetMouseLeft() || GetMouseRight()) ? PUSH : HIGHLIGHT : NORMAL; -} - -void MenuItem::SyncState() -{ - int s = GetVisualState(); - if(s != state) { - state = s; - Refresh(); - } -} - -void MenuItem::Paint(Draw& w) -{ - int q = text.Find('\t'); - String txt, keydesc; - if(accel) - keydesc = GetKeyDesc(accel); - if(q >= 0) { - keydesc = text.Mid(q + 1); - txt = text.Mid(0, q); - } - else - txt = text; - state = GetVisualState(); - bool hl = state != NORMAL; - Size sz = GetSize(); - - if(hl) - if(GUI_GlobalStyle() >= GUISTYLE_XP) - ChPaint(w, 0, 0, sz.cx, sz.cy, style->item); - else - w.DrawRect(sz, SColorHighlight); - UPP::Image li = licon; - if(li.IsEmpty()) { - switch(type) { - case CHECK0: li = CtrlImg::MenuCheck0(); break; - case CHECK1: li = CtrlImg::MenuCheck1(); break; - case RADIO0: li = CtrlImg::MenuRadio0(); break; - case RADIO1: li = CtrlImg::MenuRadio1(); break; - } - } - Size imsz = li.GetSize(); - Size isz = min(maxiconsize, imsz); - if(isz != imsz) - li = CachedRescale(li, isz); - int iy = (sz.cy - isz.cy) / 2; - bool chk = false; - int x = (max(isz.cx, leftgap - 2) - isz.cx) / 2; - if(!licon.IsEmpty() && type) { - chk = type == CHECK1 || type == RADIO1; - x = 2; - if(GUI_GlobalStyle() >= GUISTYLE_XP) { - if(chk && !hl) { - DrawXPButton(w, RectC(0, iy - 2, isz.cx + 4, isz.cy + 4), BUTTON_EDGE|BUTTON_CHECKED); - } - } - else { - w.DrawRect(1, iy - 1, isz.cx + 2, isz.cy + 2, chk ? Blend(SColorFace, SColorLight) - : SColorFace); - DrawBorder(w, 0, iy - 2, isz.cx + 4, isz.cy + 4, chk ? ThinInsetBorder : ThinOutsetBorder); - } - } - if(isenabled) - DrawHighlightImage(w, x, iy, li, hl || chk, true); - else - w.DrawImage(x, iy, DisabledImage(li)); - x = max(isz.cx, leftgap) + textgap; - isz = GetTextSize(text, StdFont()); - DrawMenuText(w, x, (sz.cy - isz.cy) / 2, txt, font, isenabled, hl, SColorMenuText, - style->itemtext); - isz = ricon.GetSize(); - if(isenabled) - DrawHighlightImage(w, sz.cx - isz.cx, (sz.cy - isz.cy) / 2, ricon, hl, true); - else - w.DrawImage(sz.cx - isz.cx, (sz.cy - isz.cy) / 2, DisabledImage(ricon)); - x = sz.cx - max(isz.cx, 16) - 1; - if(!IsEmpty(keydesc)) { - isz = GetTextSize(keydesc, StdFont()); - UPP::DrawMenuText(w, x - isz.cx - 2, (sz.cy - isz.cy) / 2, keydesc, font, isenabled, hl, - 0, SColorMark(), style->itemtext); - } -} - -Size MenuItem::GetMinSize() const -{ - Size sz1 = GetTextSize(text, font); - Size sz2(0, 0); - if(accel) { - sz2 = GetTextSize(GetKeyDesc(accel), font); - sz2.cx += 12; - } - Size lsz = min(maxiconsize, licon.GetSize()); - Size rsz = ricon.GetSize(); - return AddFrameSize(Size(max(lsz.cx, leftgap) + sz1.cx + max(sz2.cx, (rsz.cx ? 16 : 0)) - + max(rsz.cx, 16) + textgap + 10, - max(max(lsz.cy, rsz.cy) + 4, sz1.cy + 6))); -} - -void MenuItem::LeftUp(Point, dword) -{ - if(!isenabled) return; -#ifdef PLATFORM_WIN32 -#ifdef PLATFORM_WINCE - PlaySound(L"MenuCommand", NULL, SND_ASYNC|SND_NODEFAULT); //TODO? -#else - PlaySound("MenuCommand", NULL, SND_ASYNC|SND_NODEFAULT); -#endif -#endif - LLOG("Menu Item pre Action"); - WhenAction(); - LLOG("Menu Item post Action"); -} - -void MenuItem::RightUp(Point p, dword w) -{ - LeftUp(p, w); -} - -bool MenuItem::HotKey(dword key) -{ - if(isenabled && (key == accel || CompareAccessKey(accesskey, key) - || key < 256 && IsAlNum((char)key) && CompareAccessKey(accesskey, ToUpper((char)key) + K_DELTA + K_ALT))) { - LLOG("MenuItem::HotKey(" << key << ") -> SetFocus"); - SetFocus(); - Sync(); - Sleep(50); - WhenAction(); - return true; - } - return false; -} - -bool MenuItem::Key(dword key, int count) -{ - if(key == K_ENTER && isenabled) { - WhenAction(); - return true; - } - return false; -} - -// ---------------------------------------------------- - -void SubMenuBase::Pull(Ctrl *item, Point p, Size sz) -{ - if(!item->IsOpen() || menu.IsOpen()) return; - menu.Clear(); - if(parentmenu) - menu.SetStyle(*parentmenu->style); - proc(menu); - if(parentmenu) { - parentmenu->SetActiveSubmenu(&menu, item); - menu.SetParentMenu(parentmenu); - } - menu.PopUp(parentmenu, p, sz); - if(parentmenu) - parentmenu->doeffect = false; -} - -// ---------------------------------------------------- - -SubMenuItem::SubMenuItem() -{ - RightImage(CtrlImg::right_arrow()); -} - -void SubMenuItem::GotFocus() -{ - Refresh(); -} - -void SubMenuItem::Pull() -{ - Rect r = GetScreenRect(); - Point p = r.TopRight(); - p.x -= 3; - p.y -= 2; - SubMenuBase::Pull(this, p, Size(-r.Width(), 0)); - if(parentmenu) - parentmenu->SyncState(); -} - -void SubMenuItem::MouseEnter(Point, dword) -{ - SetFocus(); - Refresh(); - if(!menu.IsOpen() && isenabled) - SetTimeCallback(400, THISBACK(Pull), TIMEID_PULL); -} - -void SubMenuItem::MouseLeave() -{ - if(HasFocus() && GetParent()) - GetParent()->SetFocus(); - KillTimeCallback(TIMEID_PULL); -} - -int SubMenuItem::GetVisualState() -{ - if(menu.IsOpen() && !GetParent()->HasFocusDeep()) - return PUSH; - return MenuItem::GetVisualState(); -} - -bool SubMenuItem::Key(dword key, int count) -{ - if(key == K_RIGHT || key == K_ENTER) { - Pull(); - return true; - } - return MenuItem::Key(key, count); -} - -bool SubMenuItem::HotKey(dword key) -{ - if(isenabled && (key == accel || CompareAccessKey(accesskey, key))) { - Pull(); - return true; - } - return false; -} - - -// ---------------------------------------------------- - -Size TopSubMenuItem::GetMinSize() const -{ - return AddFrameSize(GetTextSize(text, font) + Size(12, 7)); -} - -int TopSubMenuItem::GetState() -{ - if(parentmenu && parentmenu->GetActiveSubmenu() == &menu) return PUSH; - if(HasMouse() && GetParent() && !GetParent()->HasFocusDeep() && - (!parentmenu || !parentmenu->GetActiveSubmenu() || parentmenu->GetActiveSubmenu() == &menu) - || HasFocus()) - return HIGHLIGHT; - return NORMAL; -} - -void TopSubMenuItem::Paint(Draw& w) -{ - PaintTopItem(w, state = GetState()); -} - -void TopSubMenuItem::Pull() -{ - Rect r = GetScreenRect(); - if(parentmenu && parentmenu->IsChild() && !parentmenu->submenu) - parentmenu->SetupRestoreFocus(); - Point p = r.BottomLeft(); - if(GUI_GlobalStyle() >= GUISTYLE_XP) - p += style->pullshift; - SubMenuBase::Pull(this, p, Size(r.Width(), -r.Height())); - if(parentmenu) - parentmenu->SyncState(); -} - -void TopSubMenuItem::MouseEnter(Point p, dword) -{ - Refresh(); - if(isenabled && parentmenu->GetActiveSubmenu()) - Pull(); -} - -bool TopSubMenuItem::Key(dword key, int) { - if(isenabled && (key == K_ENTER || key == K_DOWN)) { - Pull(); - return true; - } - return false; -} - -void TopSubMenuItem::GotFocus() -{ - Refresh(); -} - -void TopSubMenuItem::LostFocus() -{ - Refresh(); -} - -bool TopSubMenuItem::HotKey(dword key) -{ - if(BarCtrl::Scan(proc, key)) - return true; - if(isenabled && (key == accel || CompareAccessKey(accesskey, key))) { - Pull(); - return true; - } - return false; -} - -void TopSubMenuItem::MouseLeave() -{ - Refresh(); -} - -void TopSubMenuItem::LeftDown(Point, dword) -{ - if(isenabled && !menu.IsOpen()) { - Pull(); - Refresh(); - } -} - -void TopSubMenuItem::SyncState() -{ - int q = GetState(); - if(q != state) { - state = q; - Refresh(); - } -} - -// ---------------------------------------------------- - -int TopMenuItem::GetState() -{ - if(!IsEnabled()) return NORMAL; - if(HasMouse() && GetMouseLeft() || GetMouseRight()) return PUSH; - if(HasFocus() || HasMouse()) return HIGHLIGHT; - return NORMAL; -} - -void TopMenuItem::Paint(Draw& w) -{ - PaintTopItem(w, state = GetState()); -} - -void TopMenuItem::MouseEnter(Point, dword) -{ - Refresh(); -} - -void TopMenuItem::MouseLeave() -{ - Refresh(); -} - -void TopMenuItem::LeftUp(Point, dword) -{ - if(!isenabled) return; - WhenAction(); - Refresh(); -} - -void TopMenuItem::LeftDown(Point, dword) -{ - Refresh(); -} - -void TopMenuItem::GotFocus() -{ - Refresh(); -} - -void TopMenuItem::LostFocus() -{ - Refresh(); -} - -bool TopMenuItem::Key(dword key, int count) -{ - if(isenabled && key == K_ENTER) { - WhenAction(); - return true; - } - return false; -} - -Size TopMenuItem::GetMinSize() const -{ - return AddFrameSize(GetTextSize(text, StdFont()) + Size(12, 7)); -} - -int TopMenuItem::GetStdHeight(Font font) -{ - return font.Info().GetHeight() + 7; -} - -void TopMenuItem::SyncState() -{ - if(state != GetState()) { - state = GetState(); - Refresh(); - } -} - -END_UPP_NAMESPACE +#include "MenuImp.h" + +#ifdef PLATFORM_WIN32 +#include +#endif + +NAMESPACE_UPP + +#define LLOG(x) // LOG(x) +#define LTIMING(x) // RTIMING(x) + +MenuItemBase::MenuItemBase() +{ + accel = 0; + state = 0; + isenabled = true; + type = 0; + font = StdFont(); + leftgap = 16; + textgap = 6; + accesskey = 0; + NoWantFocus(); + style = &MenuBar::StyleDefault(); + Transparent(); + maxiconsize = Size(INT_MAX, INT_MAX); +} + +Bar::Item& MenuItemBase::Text(const char *s) +{ + accesskey = ExtractAccessKey(s, text); + Refresh(); + return *this; +} + +Bar::Item& MenuItemBase::Key(dword key) +{ + if(key) { + accel = key; + Refresh(); + } + return *this; +} + +Bar::Item& MenuItemBase::Image(const UPP::Image& img) +{ + return *this; +} + +Bar::Item& MenuItemBase::Check(bool check) +{ + type = CHECK0 + check; + return *this; +} + +Bar::Item& MenuItemBase::Radio(bool check) +{ + type = RADIO0 + check; + return *this; +} + +Bar::Item& MenuItemBase::Tip(const char *s) +{ + return *this; +} + +Bar::Item& MenuItemBase::Help(const char *s) +{ + HelpLine(s); + return *this; +} + +Bar::Item& MenuItemBase::Description(const char *s) +{ + Ctrl::Description(s); + return *this; +} + +Bar::Item& MenuItemBase::Topic(const char *s) +{ + HelpTopic(s); + return *this; +} + +Bar::Item& MenuItemBase::Enable(bool en) +{ + isenabled = en; + Refresh(); + return *this; +} + +String MenuItemBase::GetDesc() const +{ + return text; +} + +dword MenuItemBase::GetAccessKeys() const +{ + return AccessKeyBit(accesskey); +} + +void MenuItemBase::AssignAccessKeys(dword used) +{ + if(!accesskey) { + accesskey = ChooseAccessKey(text, used); + used |= AccessKeyBit(accesskey); + } + Ctrl::AssignAccessKeys(used); +} + +void DrawMnemonicText(Draw& w, int x, int y, const String& s, Font font, Color color, + int mnemonic) +{ + int q = s.Find(ToUpper(mnemonic)); + int e = s.Find(ToLower(mnemonic)); + if(q < 0 || e >= 0 && e < q) q = e; + w.DrawText(x, y, s, font, color); + if(q < 0) return; + FontInfo f = font.Info(); + w.DrawRect(x + GetTextSize(~s, font, q).cx, y + f.GetAscent() + 1, f[s[q]], 1, + SColorMark()); +} + +void DrawMenuText(Draw& w, int x, int y, const String& s, Font f, bool enabled, + bool hl, int mnemonic, Color color, Color hlcolor) +{ + if(enabled) + DrawMnemonicText(w, x, y, s, f, hl ? hlcolor : color, mnemonic); + else { + if(GUI_GlobalStyle() >= GUISTYLE_XP) + DrawMnemonicText(w, x, y, s, f, SColorDisabled, 0); + else { + DrawMnemonicText(w, x + 1, y + 1, s, f, SColorPaper, 0); + DrawMnemonicText(w, x, y, s, f, SColorDisabled, 0); + } + } +} + +void MenuItemBase::DrawMenuText(Draw& w, int x, int y, const String& s, Font f, bool enabled, + bool hl, Color color, Color hlcolor) +{ + UPP::DrawMenuText(w, x, y, s, f, enabled, hl, VisibleAccessKeys() ? accesskey : 0, + color, hlcolor); +} + +void MenuItemBase::PaintTopItem(Draw& w, int state) { + Size sz = GetSize(); + if(GUI_GlobalStyle() >= GUISTYLE_XP) { + ChPaint(w, 0, 0, sz.cx, sz.cy, style->topitem[state]); + String text = GetText(); + Size isz = GetTextSize(text, StdFont()); + DrawMenuText(w, 6, (sz.cy - isz.cy) / 2, text, GetFont(), IsItemEnabled(), state, + style->topitemtext[0], style->topitemtext[state]); + } + else { + w.DrawRect(sz, SColorFace); + static const ColorF b0[] = { (ColorF)1, SColorLight, SColorLight, SColorShadow, SColorShadow, }; + static const ColorF b1[] = { (ColorF)1, SColorShadow, SColorShadow, SColorLight, SColorLight, }; + String text = GetText(); + Size isz = GetTextSize(text, StdFont()); + DrawMenuText(w, 6, (sz.cy - isz.cy) / 2, text, GetFont(), IsItemEnabled(), false, + SColorMenuText, SColorHighlightText); + if(state) + DrawBorder(w, 0, 0, sz.cx, sz.cy, state == 2 ? b1 : b0); + } +} + +// ------------------------------------- + +Bar::Item& MenuItem::Image(const UPP::Image& img) +{ + licon = img; + Refresh(); + return *this; +} + +MenuItem& MenuItem::RightImage(const UPP::Image& img) +{ + ricon = img; + Refresh(); + return *this; +} + +void MenuItem::SendHelpLine() +{ + BarCtrl::SendHelpLine(this); +} + +void MenuItem::ClearHelpLine() +{ + BarCtrl::ClearHelpLine(this); +} + +void MenuItem::MouseEnter(Point, dword) +{ + SetFocus(); + Refresh(); + SendHelpLine(); +} + +void MenuItem::MouseLeave() +{ + ClearHelpLine(); +} + +void MenuItem::GotFocus() +{ + Refresh(); + SendHelpLine(); +} + +void MenuItem::LostFocus() +{ + Refresh(); + ClearHelpLine(); +} + +int MenuItem::GetVisualState() +{ + return HasFocus() ? + (HasMouse() && GetMouseLeft() || GetMouseRight()) ? PUSH : HIGHLIGHT : NORMAL; +} + +void MenuItem::SyncState() +{ + int s = GetVisualState(); + if(s != state) { + state = s; + Refresh(); + } +} + +void MenuItem::Paint(Draw& w) +{ + int q = text.Find('\t'); + String txt, keydesc; + if(accel) + keydesc = GetKeyDesc(accel); + if(q >= 0) { + keydesc = text.Mid(q + 1); + txt = text.Mid(0, q); + } + else + txt = text; + state = GetVisualState(); + bool hl = state != NORMAL; + Size sz = GetSize(); + + if(hl) + if(GUI_GlobalStyle() >= GUISTYLE_XP) + ChPaint(w, 0, 0, sz.cx, sz.cy, style->item); + else + w.DrawRect(sz, SColorHighlight); + UPP::Image li = licon; + if(li.IsEmpty()) { + switch(type) { + case CHECK0: li = CtrlImg::MenuCheck0(); break; + case CHECK1: li = CtrlImg::MenuCheck1(); break; + case RADIO0: li = CtrlImg::MenuRadio0(); break; + case RADIO1: li = CtrlImg::MenuRadio1(); break; + } + } + Size imsz = li.GetSize(); + Size isz = min(maxiconsize, imsz); + if(isz != imsz) + li = CachedRescale(li, isz); + int iy = (sz.cy - isz.cy) / 2; + bool chk = false; + int x = (max(isz.cx, leftgap - 2) - isz.cx) / 2; + if(!licon.IsEmpty() && type) { + chk = type == CHECK1 || type == RADIO1; + x = 2; + if(GUI_GlobalStyle() >= GUISTYLE_XP) { + if(chk && !hl) { + DrawXPButton(w, RectC(0, iy - 2, isz.cx + 4, isz.cy + 4), BUTTON_EDGE|BUTTON_CHECKED); + } + } + else { + w.DrawRect(1, iy - 1, isz.cx + 2, isz.cy + 2, chk ? Blend(SColorFace, SColorLight) + : SColorFace); + DrawBorder(w, 0, iy - 2, isz.cx + 4, isz.cy + 4, chk ? ThinInsetBorder : ThinOutsetBorder); + } + } + if(isenabled) + DrawHighlightImage(w, x, iy, li, hl || chk, true); + else + w.DrawImage(x, iy, DisabledImage(li)); + x = max(isz.cx, leftgap) + textgap; + isz = GetTextSize(text, StdFont()); + DrawMenuText(w, x, (sz.cy - isz.cy) / 2, txt, font, isenabled, hl, SColorMenuText, + style->itemtext); + isz = ricon.GetSize(); + if(isenabled) + DrawHighlightImage(w, sz.cx - isz.cx, (sz.cy - isz.cy) / 2, ricon, hl, true); + else + w.DrawImage(sz.cx - isz.cx, (sz.cy - isz.cy) / 2, DisabledImage(ricon)); + x = sz.cx - max(isz.cx, 16) - 1; + if(!IsEmpty(keydesc)) { + isz = GetTextSize(keydesc, StdFont()); + UPP::DrawMenuText(w, x - isz.cx - 2, (sz.cy - isz.cy) / 2, keydesc, font, isenabled, hl, + 0, SColorMark(), style->itemtext); + } +} + +Size MenuItem::GetMinSize() const +{ + Size sz1 = GetTextSize(text, font); + Size sz2(0, 0); + if(accel) { + sz2 = GetTextSize(GetKeyDesc(accel), font); + sz2.cx += 12; + } + Size lsz = min(maxiconsize, licon.GetSize()); + Size rsz = ricon.GetSize(); + return AddFrameSize(Size(max(lsz.cx, leftgap) + sz1.cx + max(sz2.cx, (rsz.cx ? 16 : 0)) + + max(rsz.cx, 16) + textgap + 10, + max(max(lsz.cy, rsz.cy) + 4, sz1.cy + 6))); +} + +void MenuItem::LeftUp(Point, dword) +{ + if(!isenabled) return; +#ifdef PLATFORM_WIN32 +#ifdef PLATFORM_WINCE + PlaySound(L"MenuCommand", NULL, SND_ASYNC|SND_NODEFAULT); //TODO? +#else + PlaySound("MenuCommand", NULL, SND_ASYNC|SND_NODEFAULT); +#endif +#endif + LLOG("Menu Item pre Action"); + WhenAction(); + LLOG("Menu Item post Action"); +} + +void MenuItem::RightUp(Point p, dword w) +{ + LeftUp(p, w); +} + +bool MenuItem::HotKey(dword key) +{ + if(isenabled && (key == accel || CompareAccessKey(accesskey, key) + || key < 256 && IsAlNum((char)key) && CompareAccessKey(accesskey, ToUpper((char)key) + K_DELTA + K_ALT))) { + LLOG("MenuItem::HotKey(" << key << ") -> SetFocus"); + SetFocus(); + Sync(); + Sleep(50); + WhenAction(); + return true; + } + return false; +} + +bool MenuItem::Key(dword key, int count) +{ + if(key == K_ENTER && isenabled) { + WhenAction(); + return true; + } + return false; +} + +// ---------------------------------------------------- + +void SubMenuBase::Pull(Ctrl *item, Point p, Size sz) +{ + if(!item->IsOpen() || menu.IsOpen()) return; + menu.Clear(); + if(parentmenu) + menu.SetStyle(*parentmenu->style); + proc(menu); + if(parentmenu) { + parentmenu->SetActiveSubmenu(&menu, item); + menu.SetParentMenu(parentmenu); + } + menu.PopUp(parentmenu, p, sz); + if(parentmenu) + parentmenu->doeffect = false; +} + +// ---------------------------------------------------- + +SubMenuItem::SubMenuItem() +{ + RightImage(CtrlImg::right_arrow()); +} + +void SubMenuItem::GotFocus() +{ + Refresh(); +} + +void SubMenuItem::Pull() +{ + Rect r = GetScreenRect(); + Point p = r.TopRight(); + p.x -= 3; + p.y -= 2; + SubMenuBase::Pull(this, p, Size(-r.Width(), 0)); + if(parentmenu) + parentmenu->SyncState(); +} + +void SubMenuItem::MouseEnter(Point, dword) +{ + SetFocus(); + Refresh(); + if(!menu.IsOpen() && isenabled) + SetTimeCallback(400, THISBACK(Pull), TIMEID_PULL); +} + +void SubMenuItem::MouseLeave() +{ + if(HasFocus() && GetParent()) + GetParent()->SetFocus(); + KillTimeCallback(TIMEID_PULL); +} + +int SubMenuItem::GetVisualState() +{ + if(menu.IsOpen() && !GetParent()->HasFocusDeep()) + return PUSH; + return MenuItem::GetVisualState(); +} + +bool SubMenuItem::Key(dword key, int count) +{ + if(key == K_RIGHT || key == K_ENTER) { + Pull(); + return true; + } + return MenuItem::Key(key, count); +} + +bool SubMenuItem::HotKey(dword key) +{ + if(isenabled && (key == accel || CompareAccessKey(accesskey, key))) { + Pull(); + return true; + } + return false; +} + + +// ---------------------------------------------------- + +Size TopSubMenuItem::GetMinSize() const +{ + return AddFrameSize(GetTextSize(text, font) + Size(12, 7)); +} + +int TopSubMenuItem::GetState() +{ + if(parentmenu && parentmenu->GetActiveSubmenu() == &menu) return PUSH; + if(HasMouse() && GetParent() && !GetParent()->HasFocusDeep() && + (!parentmenu || !parentmenu->GetActiveSubmenu() || parentmenu->GetActiveSubmenu() == &menu) + || HasFocus()) + return HIGHLIGHT; + return NORMAL; +} + +void TopSubMenuItem::Paint(Draw& w) +{ + PaintTopItem(w, state = GetState()); +} + +void TopSubMenuItem::Pull() +{ + Rect r = GetScreenRect(); + if(parentmenu && parentmenu->IsChild() && !parentmenu->submenu) + parentmenu->SetupRestoreFocus(); + Point p = r.BottomLeft(); + if(GUI_GlobalStyle() >= GUISTYLE_XP) + p += style->pullshift; + SubMenuBase::Pull(this, p, Size(r.Width(), -r.Height())); + if(parentmenu) + parentmenu->SyncState(); +} + +void TopSubMenuItem::MouseEnter(Point p, dword) +{ + Refresh(); + if(isenabled && parentmenu->GetActiveSubmenu()) + Pull(); +} + +bool TopSubMenuItem::Key(dword key, int) { + if(isenabled && (key == K_ENTER || key == K_DOWN)) { + Pull(); + return true; + } + return false; +} + +void TopSubMenuItem::GotFocus() +{ + Refresh(); +} + +void TopSubMenuItem::LostFocus() +{ + Refresh(); +} + +bool TopSubMenuItem::HotKey(dword key) +{ + if(BarCtrl::Scan(proc, key)) + return true; + if(isenabled && (key == accel || CompareAccessKey(accesskey, key))) { + Pull(); + return true; + } + return false; +} + +void TopSubMenuItem::MouseLeave() +{ + Refresh(); +} + +void TopSubMenuItem::LeftDown(Point, dword) +{ + if(isenabled && !menu.IsOpen()) { + Pull(); + Refresh(); + } +} + +void TopSubMenuItem::SyncState() +{ + int q = GetState(); + if(q != state) { + state = q; + Refresh(); + } +} + +// ---------------------------------------------------- + +int TopMenuItem::GetState() +{ + if(!IsEnabled()) return NORMAL; + if(HasMouse() && GetMouseLeft() || GetMouseRight()) return PUSH; + if(HasFocus() || HasMouse()) return HIGHLIGHT; + return NORMAL; +} + +void TopMenuItem::Paint(Draw& w) +{ + PaintTopItem(w, state = GetState()); +} + +void TopMenuItem::MouseEnter(Point, dword) +{ + Refresh(); +} + +void TopMenuItem::MouseLeave() +{ + Refresh(); +} + +void TopMenuItem::LeftUp(Point, dword) +{ + if(!isenabled) return; + WhenAction(); + Refresh(); +} + +void TopMenuItem::LeftDown(Point, dword) +{ + Refresh(); +} + +void TopMenuItem::GotFocus() +{ + Refresh(); +} + +void TopMenuItem::LostFocus() +{ + Refresh(); +} + +bool TopMenuItem::Key(dword key, int count) +{ + if(isenabled && key == K_ENTER) { + WhenAction(); + return true; + } + return false; +} + +Size TopMenuItem::GetMinSize() const +{ + return AddFrameSize(GetTextSize(text, StdFont()) + Size(12, 7)); +} + +int TopMenuItem::GetStdHeight(Font font) +{ + return font.Info().GetHeight() + 7; +} + +void TopMenuItem::SyncState() +{ + if(state != GetState()) { + state = GetState(); + Refresh(); + } +} + +END_UPP_NAMESPACE diff --git a/uppsrc/CtrlLib/TreeCtrl.cpp b/uppsrc/CtrlLib/TreeCtrl.cpp index 9dac3e596..32dcea93e 100644 --- a/uppsrc/CtrlLib/TreeCtrl.cpp +++ b/uppsrc/CtrlLib/TreeCtrl.cpp @@ -112,7 +112,9 @@ Size TreeCtrl::Item::GetValueSize() const Size TreeCtrl::Item::GetCtrlSize() const { - return IsNull(size) ? (ctrl ? ctrl->GetStdSize() : Size(0, 0)) : size; + if(!ctrl) return Size(0, 0); + Size csz = ctrl->GetStdSize(); + return Size(Nvl(size.cx, csz.cx), Nvl(size.cy, csz.cy)); } Size TreeCtrl::Item::GetSize() const diff --git a/uppsrc/Draw/Drawing.cpp b/uppsrc/Draw/Drawing.cpp index 54fc7e837..7d20506b0 100644 --- a/uppsrc/Draw/Drawing.cpp +++ b/uppsrc/Draw/Drawing.cpp @@ -617,7 +617,7 @@ void Draw::DrawDrawingOp(const Rect& target, const Drawing& w) { pos.trgini = GetOffset(); VectorMap& map = sDrawerMap(); StringStream s(w.data); - LOGBEGIN(); +// LOGBEGIN(); while(!s.IsEof()) { int code; s / code; @@ -626,7 +626,7 @@ void Draw::DrawDrawingOp(const Rect& target, const Drawing& w) { break; (*map[i])(*this, s, pos); } - LOGEND(); +// LOGEND(); End(); #ifdef _DEBUG ASSERT(GetCloffLevel() == cl); diff --git a/uppsrc/Draw/src.tpp/FontInfo$en-us.tpp b/uppsrc/Draw/src.tpp/FontInfo$en-us.tpp index 6f3a42e42..52bef02f7 100644 --- a/uppsrc/Draw/src.tpp/FontInfo$en-us.tpp +++ b/uppsrc/Draw/src.tpp/FontInfo$en-us.tpp @@ -6,4 +6,3 @@ COMPRESSED 229,207,192,109,9,243,116,126,133,220,130,95,153,1,141,102,13,245,223,207,248,223,34,80,147,253,170,224,28,100,151,156,155,65,215,24,115,104,41,32,175,205,190,168,39,53,148,255,194,110,247,87,190,4,217,37,87,216,173,136,161,90,236,164,252,92,115,80,111,15,229,215,105,62,168,33,108,33,191,250,170,14,93,149,42,32,203,130,25,211,157,220,12,1,171,156,75,165,15,13,58,106,64,191,79,3,232,233,34,65,211,68,232,235,173,1,89,204,16,105,62,236,15,7,123,153,102,21,232,37,205,115,201,98,136,97,185,112,69,163,98,131,58,9,248,153,135,234,82,215,217,125,67,97,1,244,146,124,79,77,31,28,241,34,32,160,254,155,137,79,135,65,4,219,35,211,40,42,49,97,134,2,61,195,233,247,186,183,32,232,26,12,101,76,143,136,129,25,57,31,9,160,22,58,231,99,128,135,129,200,52,28,24,83,153,9,68,232,201,75,145,98,222,144,247,118,60,66,89,42,197,122,89,80,60,231,122,172,101,213,254,102,134,25,173,109,146,42,211,212,138,121,56,186,203,38, 53,220,120,161,75,240,179,248,113,137,244,162,129,43,98,17,177,92,79,48,171,177,99,56,27,215,154,150,200,131,241,26,127,214,48,199,39,232,64,48,177,23,182,56,218,207,32,115,172,221,172,65,170,239,142,80,77,57,250,180,242,248,189,208,17,230,196,16,26,185,169,121,15,230,198,210,180,171,81,78,6,149,91,58,208,153,177,181,123,156,201,143,226,150,7,95,133,242,55,247,190,81,154,70,143,219,118,21,166,102,247,251,150,67,50,137,176,32,7,57,20,167,73,58,60,54,121,180,117,8,60,147,151,62,139,204,247,234,94,74,47,80,118,212,89,143,182,48,183,202,18,166,70,56,235,219,77,58,47,190,61,175,10,93,244,229,198,152,126,184,160,214,192,161,197,138,218,4,121,155,142,20,84,81,120,14,156,74,125,107,114,121,134,129,117,9,179,3,15,227,138,249,216,29,230,105,92,147,28,66,53,232,137,136,159,67,87,222,234,174,75,165,207,23,230,14,43,110,54,19,158,3,215,164,251,15,33,40,131,246,8,89,31,67,163,225,190,8,133,223,170,88,33,99,48,65, 1,215,16,144,139,113,234,126,205,216,230,206,202,125,195,236,95,121,116,48,108,46,207,167,214,156,8,53,150,100,150,135,87,134,197,131,147,167,117,226,195,131,213,154,25,46,158,55,75,35,252,166,15,134,12,96,62,245,97,28,67,13,115,106,84,127,14,124,183,141,85,229,212,231,106,179,138,43,99,225,187,93,76,240,148,189,214,154,227,189,148,98,156,196,250,27,186,212,164,174,69,170,158,222,230,214,21,7,204,109,47,17,143,51,117,247,160,80,12,254,7,99,121,167,180, - diff --git a/uppsrc/GLCtrl/X11GLCtrl.cpp b/uppsrc/GLCtrl/X11GLCtrl.cpp index 22cc35145..fc61e1390 100644 --- a/uppsrc/GLCtrl/X11GLCtrl.cpp +++ b/uppsrc/GLCtrl/X11GLCtrl.cpp @@ -1,244 +1,244 @@ -#include "GLCtrl.h" - -NAMESPACE_UPP - -#ifdef PLATFORM_X11 - -///////////////////////////////////////////////////////////////////////////////////////// -// Static members initialization -int GLCtrl::Instances = 0; -int GLCtrl::ContextActivated = 0; - -///////////////////////////////////////////////////////////////////////////////////////// -// Constructor -GLCtrl::GLCtrl( int depthsize, int stencilsize, bool doublebuffer, - bool multisamplebuffering, int numberofsamples ) -{ - // Sets the current instance number and updates total instances - InstanceNum = ++Instances; - - WindowContext = NULL; - - DepthSize = depthsize; - StencilSize = stencilsize; - DoubleBuffering = doublebuffer; - NumberOfSamples = numberofsamples; - -} // END Constructor class GLCtrl - -///////////////////////////////////////////////////////////////////////////////////////// -// Destructor -GLCtrl::~GLCtrl() -{ - // If glx context is still there, destroy it - // That can happen on unclean exit - if(WindowContext) - { - glXDestroyContext( (Display *)Xdisplay, WindowContext ); - WindowContext = NULL; - } - -} // END Destructor class GLCtrl - -///////////////////////////////////////////////////////////////////////////////////////// -// Ovverridden method to choose the correct visual -XVisualInfo *GLCtrl::CreateVisual(void) -{ - Vector visual; - visual << GLX_RGBA << GLX_DEPTH_SIZE << DepthSize; - - if( StencilSize > 0 ) - visual << GLX_STENCIL_SIZE << StencilSize; - - if( DoubleBuffering ) - visual << GLX_DOUBLEBUFFER; - - if( MultiSampleBuffering && NumberOfSamples > 1 ) - { - visual << GLX_SAMPLE_BUFFERS_ARB << 1 << GLX_SAMPLES_ARB << NumberOfSamples; - } - - visual << None; - - // Try to find a visual - XVisualInfo *visualInfo = NULL; - visualInfo = glXChooseVisual( (Display*)Xdisplay, DefaultScreen(Xdisplay), visual ); - - if( visualInfo == NULL ) - { - SetError(true); - SetErrorMessage("GLCtrl : Impossible to find a suitable visual."); - } - - return visualInfo; - -} // END GLCtrl::CreateVisual() - - -///////////////////////////////////////////////////////////////////////////////////////// -// Overridden method for attribute setting -void GLCtrl::SetAttributes(unsigned long &ValueMask, XSetWindowAttributes &winAttributes) -{ - ValueMask |= - CWBorderPixel - | CWEventMask - | CWSaveUnder - ; - winAttributes.border_pixel = 0; - winAttributes.event_mask = ExposureMask; - winAttributes.save_under = XFalse; - -} // END GLCtrl::SetAttributes() - - -///////////////////////////////////////////////////////////////////////////////////////// -// Activates current OpenGL context -void GLCtrl::ActivateContext() -{ - if( Instances > 0 && ContextActivated != InstanceNum ) - { - glXMakeCurrent( (Display*)Xdisplay, GetWindow(), WindowContext ); - ContextActivated = InstanceNum; - } -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Overridden method to create OpenGL context -void GLCtrl::AfterInit(bool Error) -{ - // Gets the activw XVisualInfo - XVisualInfo visualInfo = GetVisualInfo(); - - // Create an OpenGL rendering context - WindowContext = glXCreateContext - ( - (Display *)Xdisplay, - &visualInfo, - NULL, // No sharing of display lists - GL_TRUE // Direct rendering if possible - ); - - if( WindowContext == NULL ) - { - SetErrorMessage("GLCtrl : Error creating GLX context."); - SetError(true); - } - - // Activate the created glxwindow - glXMakeCurrent( (Display*)Xdisplay, GetWindow(), WindowContext ); - - // Call user init function - GLInit(); - - // Calls resize and paint functions - GLResize( GetSize().cx, GetSize().cy ); - GLPaint(); - -} // END GLCtrl::AfterInit() - - -///////////////////////////////////////////////////////////////////////////////////////// -// Overridden method to destroy OpenGL context -void GLCtrl::BeforeTerminate(void) -{ - // Calls user terminate function - GLDone(); - - // Resets context and destroys it - glXMakeCurrent( (Display*)Xdisplay, None, NULL ); - glXDestroyContext( (Display *)Xdisplay, WindowContext ); - WindowContext = NULL; - -} // END GLCtrl::BeforeTerminate() - - -///////////////////////////////////////////////////////////////////////////////////////// -// Overridden method to resize GL windows -void GLCtrl::Resize(int x, int y) -{ - // Activates the current context - ActivateContext(); - - // Calls user resize hook - GLResize(x, y); - -} // END GLCtrl::Resize() - - -///////////////////////////////////////////////////////////////////////////////////////// -// Internal OpenGL Paint method -void GLCtrl::doPaint(void) -{ - // Activates the current context - ActivateContext(); - - // Calls user paint hook - GLPaint(); - - // Swap buffers or flush as needed - if( DoubleBuffering ) - glXSwapBuffers( (Display*)Xdisplay, GetWindow() ); // Buffer swap does implicit glFlush - else - glFlush(); - -} // END GLCtrl::doPaint() - - -///////////////////////////////////////////////////////////////////////////////////////// -// Paint method - with graphic context -void GLCtrl::Paint(Draw &draw) -{ - // Calls internal OpenGL Paint method - doPaint(); - -} // END GLCtrl::Paint() - - -///////////////////////////////////////////////////////////////////////////////////////// -// Forces control resize -void GLCtrl::PostResizeGL() -{ - // Gets sizes from Control - int w = GetSize().cx, - h = GetSize().cy; - - // Calls Resize method - Resize(w, h); - -} - - -///////////////////////////////////////////////////////////////////////////////////////// -// Forces control repaint -void GLCtrl::PostPaintGL() -{ - // Calls internal OpenGL Paint method - doPaint(); - -} // END GLCtrl::PostPaintGL() - - -///////////////////////////////////////////////////////////////////////////////////////// -// Initializes OpenGL context to a standard view -void GLCtrl::StdView() -{ - glShadeModel(GL_SMOOTH); - glClearColor(0.0f, 0.0f, 0.0f, 0.5f); - glClearDepth(1.0f); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - - Size sz = GetSize(); - glViewport(0, 0, (GLsizei)sz.cx, (GLsizei)sz.cy); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45.0f, (GLfloat)(sz.cx)/(GLfloat)(sz.cy), 1.0f, 100.0f); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - -} // END GLCtrl::StdView() - -#endif - -END_UPP_NAMESPACE +#include "GLCtrl.h" + +NAMESPACE_UPP + +#ifdef PLATFORM_X11 + +///////////////////////////////////////////////////////////////////////////////////////// +// Static members initialization +int GLCtrl::Instances = 0; +int GLCtrl::ContextActivated = 0; + +///////////////////////////////////////////////////////////////////////////////////////// +// Constructor +GLCtrl::GLCtrl( int depthsize, int stencilsize, bool doublebuffer, + bool multisamplebuffering, int numberofsamples ) +{ + // Sets the current instance number and updates total instances + InstanceNum = ++Instances; + + WindowContext = NULL; + + DepthSize = depthsize; + StencilSize = stencilsize; + DoubleBuffering = doublebuffer; + NumberOfSamples = numberofsamples; + +} // END Constructor class GLCtrl + +///////////////////////////////////////////////////////////////////////////////////////// +// Destructor +GLCtrl::~GLCtrl() +{ + // If glx context is still there, destroy it + // That can happen on unclean exit + if(WindowContext) + { + glXDestroyContext( (Display *)Xdisplay, WindowContext ); + WindowContext = NULL; + } + +} // END Destructor class GLCtrl + +///////////////////////////////////////////////////////////////////////////////////////// +// Ovverridden method to choose the correct visual +XVisualInfo *GLCtrl::CreateVisual(void) +{ + Vector visual; + visual << GLX_RGBA << GLX_DEPTH_SIZE << DepthSize; + + if( StencilSize > 0 ) + visual << GLX_STENCIL_SIZE << StencilSize; + + if( DoubleBuffering ) + visual << GLX_DOUBLEBUFFER; + + if( MultiSampleBuffering && NumberOfSamples > 1 ) + { + visual << GLX_SAMPLE_BUFFERS_ARB << 1 << GLX_SAMPLES_ARB << NumberOfSamples; + } + + visual << None; + + // Try to find a visual + XVisualInfo *visualInfo = NULL; + visualInfo = glXChooseVisual( (Display*)Xdisplay, DefaultScreen(Xdisplay), visual ); + + if( visualInfo == NULL ) + { + SetError(true); + SetErrorMessage("GLCtrl : Impossible to find a suitable visual."); + } + + return visualInfo; + +} // END GLCtrl::CreateVisual() + + +///////////////////////////////////////////////////////////////////////////////////////// +// Overridden method for attribute setting +void GLCtrl::SetAttributes(unsigned long &ValueMask, XSetWindowAttributes &winAttributes) +{ + ValueMask |= + CWBorderPixel + | CWEventMask + | CWSaveUnder + ; + winAttributes.border_pixel = 0; + winAttributes.event_mask = ExposureMask; + winAttributes.save_under = XFalse; + +} // END GLCtrl::SetAttributes() + + +///////////////////////////////////////////////////////////////////////////////////////// +// Activates current OpenGL context +void GLCtrl::ActivateContext() +{ + if( Instances > 0 && ContextActivated != InstanceNum ) + { + glXMakeCurrent( (Display*)Xdisplay, GetWindow(), WindowContext ); + ContextActivated = InstanceNum; + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +// Overridden method to create OpenGL context +void GLCtrl::AfterInit(bool Error) +{ + // Gets the activw XVisualInfo + XVisualInfo visualInfo = GetVisualInfo(); + + // Create an OpenGL rendering context + WindowContext = glXCreateContext + ( + (Display *)Xdisplay, + &visualInfo, + NULL, // No sharing of display lists + GL_TRUE // Direct rendering if possible + ); + + if( WindowContext == NULL ) + { + SetErrorMessage("GLCtrl : Error creating GLX context."); + SetError(true); + } + + // Activate the created glxwindow + glXMakeCurrent( (Display*)Xdisplay, GetWindow(), WindowContext ); + + // Call user init function + GLInit(); + + // Calls resize and paint functions + GLResize( GetSize().cx, GetSize().cy ); + GLPaint(); + +} // END GLCtrl::AfterInit() + + +///////////////////////////////////////////////////////////////////////////////////////// +// Overridden method to destroy OpenGL context +void GLCtrl::BeforeTerminate(void) +{ + // Calls user terminate function + GLDone(); + + // Resets context and destroys it + glXMakeCurrent( (Display*)Xdisplay, None, NULL ); + glXDestroyContext( (Display *)Xdisplay, WindowContext ); + WindowContext = NULL; + +} // END GLCtrl::BeforeTerminate() + + +///////////////////////////////////////////////////////////////////////////////////////// +// Overridden method to resize GL windows +void GLCtrl::Resize(int x, int y) +{ + // Activates the current context + ActivateContext(); + + // Calls user resize hook + GLResize(x, y); + +} // END GLCtrl::Resize() + + +///////////////////////////////////////////////////////////////////////////////////////// +// Internal OpenGL Paint method +void GLCtrl::doPaint(void) +{ + // Activates the current context + ActivateContext(); + + // Calls user paint hook + GLPaint(); + + // Swap buffers or flush as needed + if( DoubleBuffering ) + glXSwapBuffers( (Display*)Xdisplay, GetWindow() ); // Buffer swap does implicit glFlush + else + glFlush(); + +} // END GLCtrl::doPaint() + + +///////////////////////////////////////////////////////////////////////////////////////// +// Paint method - with graphic context +void GLCtrl::Paint(Draw &draw) +{ + // Calls internal OpenGL Paint method + doPaint(); + +} // END GLCtrl::Paint() + + +///////////////////////////////////////////////////////////////////////////////////////// +// Forces control resize +void GLCtrl::PostResizeGL() +{ + // Gets sizes from Control + int w = GetSize().cx, + h = GetSize().cy; + + // Calls Resize method + Resize(w, h); + +} + + +///////////////////////////////////////////////////////////////////////////////////////// +// Forces control repaint +void GLCtrl::PostPaintGL() +{ + // Calls internal OpenGL Paint method + doPaint(); + +} // END GLCtrl::PostPaintGL() + + +///////////////////////////////////////////////////////////////////////////////////////// +// Initializes OpenGL context to a standard view +void GLCtrl::StdView() +{ + glShadeModel(GL_SMOOTH); + glClearColor(0.0f, 0.0f, 0.0f, 0.5f); + glClearDepth(1.0f); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LEQUAL); + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + + Size sz = GetSize(); + glViewport(0, 0, (GLsizei)sz.cx, (GLsizei)sz.cy); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45.0f, (GLfloat)(sz.cx)/(GLfloat)(sz.cy), 1.0f, 100.0f); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + +} // END GLCtrl::StdView() + +#endif + +END_UPP_NAMESPACE diff --git a/uppsrc/Geom/Coords/GeomCoords.h b/uppsrc/Geom/Coords/GeomCoords.h index d7696b29a..4e76eac5f 100644 --- a/uppsrc/Geom/Coords/GeomCoords.h +++ b/uppsrc/Geom/Coords/GeomCoords.h @@ -203,6 +203,60 @@ private: // One tree; }; +class GisCoords; +class GisTransform; + +class Gis2DPolynome { +public: + Gis2DPolynome() {} + + void Calculate(const GisTransform& transform, const Rectf& src_extent); + + Pointf Transform(double x, double y) const; + Pointf Transform(const Pointf& pt) const { return Transform(pt.x, pt.y); } + + enum COEF { + COEF_1, + COEF_X, + COEF_Y, + COEF_X2, + COEF_XY, + COEF_Y2, + COEF_X3, + COEF_X2Y, + COEF_XY2, + COEF_Y3, + COEF_COUNT + }; + Sizef coef[COEF_COUNT]; +}; + +inline Pointf operator * (const Pointf& xy, const Gis2DPolynome& poly) { return poly.Transform(xy); } + +class Gis2DGrid : public Pte { +public: + Gis2DGrid(const Sizef& block_size = Sizef(1, 1), const Rect& block_limit = Rect(-180, -90, +180, +90)); + + void Grow(const GisTransform& transform, const Rectf& extent); + + Point GetBlockIndex(const Pointf& point) const; + Rect GetBlockSpan(const Rectf& rc) const; + Pointf Transform(const Pointf& pt) const; + + const Gis2DPolynome *GetBlock(int x, int y) const; + const Gis2DPolynome *GetBlock(Point pt) const { return GetBlock(pt.x, pt.y); } + + int SizeOf() const; + +public: + BiVector< BiArray > block_rows; + Sizef block_size; + Rect block_span; + Rect block_limit; +}; + +inline Pointf operator * (const Pointf& pt, const Gis2DGrid& poly) { return poly.Transform(pt); } + String GisInterpolatorDelta(double xmin, double xmax, const GisFunction& fn, int buckets, int sections, int samples, int check); String GisInterpolatorTiming(double xmin, double xmax, const GisFunction& fn, int buckets, int sections, int samples, int check); @@ -482,6 +536,7 @@ public: public: GisCoords source; GisCoords target; + Ptr grid; }; public: @@ -514,6 +569,7 @@ public: GisCoords Source() const { return data->source; } GisCoords Target() const { return data->target; } GisTransform Reverse() const { return GisTransform(Target(), Source()); } + Gis2DGrid *Grid() const { return data->grid; } Data *operator ~ () const { return ~data; } diff --git a/uppsrc/Geom/Coords/util.cpp b/uppsrc/Geom/Coords/util.cpp index a9e4c0bd6..05b52b384 100644 --- a/uppsrc/Geom/Coords/util.cpp +++ b/uppsrc/Geom/Coords/util.cpp @@ -1110,6 +1110,164 @@ Pointf WorldTransform::Global3(const Pointf& pt) const } */ +void Gis2DPolynome::Calculate(const GisTransform& transform, const Rectf& src) +{ + int xinter = 10, yinter = 10; + LinearSolver xsolv(COEF_COUNT), ysolv(COEF_COUNT); + double bases[COEF_COUNT]; + for(int ix = 0; ix <= xinter; ix++) + for(int iy = 0; iy <= yinter; iy++) { + double x = ix / (double)xinter, y = iy / (double)yinter; + double x2 = x * x, y2 = y * y; + Pointf dest = transform.Target(src.TopLeft() + src.Size() * Sizef(x, y)); + bases[COEF_1] = 1; + bases[COEF_X] = x; + bases[COEF_Y] = y; + bases[COEF_X2] = x2; + bases[COEF_XY] = x * y; + bases[COEF_Y2] = y2; + bases[COEF_X3] = x2 * x; + bases[COEF_X2Y] = x2 * y; + bases[COEF_XY2] = x * y2; + bases[COEF_Y3] = y2 * y; + xsolv.AddLSI(bases, dest.x); + ysolv.AddLSI(bases, dest.y); + } + Vector xcoef = xsolv.Solve(); + Vector ycoef = ysolv.Solve(); + for(int i = 0; i < COEF_COUNT; i++) + coef[i] = Sizef(xcoef[i], ycoef[i]); +} + +Pointf Gis2DPolynome::Transform(double x, double y) const +{ + double x2 = x * x, y2 = y * y; + return coef[COEF_1] + + coef[COEF_X] * x + + coef[COEF_Y] * y + + coef[COEF_XY] * (x * y) + + coef[COEF_X2] * x2 + + coef[COEF_Y2] * y2 + + coef[COEF_X3] * (x2 * x) + + coef[COEF_X2Y] * (x2 * y) + + coef[COEF_XY2] * (x * y2) + + coef[COEF_Y3] * (y2 * y) + ; +} + +Gis2DGrid::Gis2DGrid(const Sizef& block_size_, const Rect& block_limit_) +: block_size(block_size_) +, block_limit(block_limit_) +{ + block_span = Rectf(0, 0, 0, 0); +} + +Point Gis2DGrid::GetBlockIndex(const Pointf& point) const +{ + return Point(ffloor(point.x / block_size.cx), ffloor(point.y / block_size.cy)); +} + +Rect Gis2DGrid::GetBlockSpan(const Rectf& rc) const +{ + return Rect(ffloor(rc.left / block_size.cx), ffloor(rc.top / block_size.cy), + ffloor(rc.right / block_size.cx) + 1, ffloor(rc.bottom / block_size.cy) + 1); +} + +Pointf Gis2DGrid::Transform(const Pointf& pt) const +{ + Point block = GetBlockIndex(pt); + if(const Gis2DPolynome *poly = GetBlock(block)) + return poly->Transform(pt.x / block_size.cx - block.x, pt.y / block_size.cy - block.y); + return Null; +} + +const Gis2DPolynome *Gis2DGrid::GetBlock(int x, int y) const +{ + return (x >= block_span.left && x < block_span.right && y >= block_span.top && y < block_span.bottom + ? &block_rows[y - block_span.top][x - block_span.left] + : NULL); +} + +int Gis2DGrid::SizeOf() const +{ + return block_span.Width() * block_span.Height() * (sizeof(Gis2DPolynome) + 32) + sizeof(*this); +} + +void Gis2DGrid::Grow(const GisTransform& transform, const Rectf& extent) +{ + Rect target_span = GetBlockSpan(extent) & block_limit; + if(block_span.Contains(target_span)) + return; + if(block_span.IsEmpty()) + block_span = Rect(target_span.left, target_span.top, target_span.left, target_span.top); + target_span |= block_span; + int add_left = block_span.left - target_span.left; + int add_right = target_span.right - block_span.right; + ASSERT(add_left >= 0 && add_right >= 0); + Rectf blk_extent(block_size.cx * block_span.left, block_size.cy * block_span.top, + block_size.cx * block_span.right, block_size.cy * block_span.bottom); + if(add_left || add_right) { + Rectf row_extent = blk_extent; + row_extent.bottom = row_extent.top + block_size.cy; + for(int i = 0; i < block_rows.GetCount(); i++) { + BiArray& row = block_rows[i]; + if(add_left) { + Rectf cell = row_extent; + for(int n = 0; n < add_left; n++) { + cell.right = cell.left; + cell.left -= block_size.cx; + row.AddHead().Calculate(transform, cell); + } + } + if(add_right) { + Rectf cell = row_extent; + for(int n = 0; n < add_right; n++) { + cell.left = cell.right; + cell.right += block_size.cx; + row.AddTail().Calculate(transform, cell); + } + } + row_extent.OffsetVert(block_size.cy); + } + block_span.Inflate(add_left, 0, add_right, 0); + blk_extent.Inflate(-block_size.cx * add_left, 0, block_size.cx * add_right, 0); + } + int add_top = block_span.top - target_span.top; + if(add_top) { + Rectf cell = blk_extent; + for(int i = 0; i < add_top; i++) { + cell.bottom = cell.top; + cell.top -= block_size.cy; + BiArray& top = block_rows.AddHead(); + cell.right = blk_extent.left; + for(int j = block_span.left; j < block_span.right; j++) { + cell.left = cell.right; + cell.right += block_size.cx; + top.AddTail().Calculate(transform, cell); + } + } + block_span.top -= add_top; + blk_extent.top -= add_top * block_size.cy; + } + int add_bottom = target_span.bottom - block_span.bottom; + if(add_bottom) { + Rectf cell = blk_extent; + for(int i = 0; i < add_bottom; i++) { + cell.top = cell.bottom; + cell.bottom += block_size.cy; + BiArray& bottom = block_rows.AddTail(); + cell.right = blk_extent.left; + for(int j = block_span.left; j < block_span.right; j++) { + cell.left = cell.right; + cell.right += block_size.cx; + bottom.AddTail().Calculate(transform, cell); + } + } + block_span.bottom += add_bottom; + blk_extent.bottom += add_bottom * block_size.cy; + } +} + static One CreateLinearSplit(Point s1, Point s2, Point t1, Point t2, const SegmentTreeInfo& info, int depth) { double m = info.src_trg.SourceDeviation(Pointf(s1) * info.img_src, Pointf(s2) * info.img_src); diff --git a/uppsrc/Geom/Ctrl/pathCtrl.cpp b/uppsrc/Geom/Ctrl/pathCtrl.cpp index dd1c58e5b..e5ad6a691 100644 --- a/uppsrc/Geom/Ctrl/pathCtrl.cpp +++ b/uppsrc/Geom/Ctrl/pathCtrl.cpp @@ -2219,7 +2219,7 @@ public: typedef DlgPathStyleMap CLASSNAME; DlgPathStyleMap(); - String Run(PathStyleMap& map, String dflt = Null, bool editor = false, bool read_only = false); + bool Run(PathStyleMap& map, String& style, bool editor = false, bool read_only = false); private: // void UpdateMaps(); @@ -2232,8 +2232,8 @@ private: // Vector map_index; }; -String RunDlgPathStyleMap(PathStyleMap& map, const String& dflt, bool editor, bool read_only) -{ return DlgPathStyleMap().Run(map, dflt, editor, read_only); } +bool RunDlgPathStyleMap(PathStyleMap& map, String& style, bool editor, bool read_only) +{ return DlgPathStyleMap().Run(map, style, editor, read_only); } RegisterHelpTopicObjectTitle(DlgPathStyleMap, "Mapa styl") @@ -2249,49 +2249,11 @@ DlgPathStyleMap::DlgPathStyleMap() // dialog.tab <<= THISBACK(OnTab); } -/* -MEMBER_HELP(DlgPathStyleMap, "Styly ar", -"ra, mapa styl\n" -"mapa styl ar\n" -"styly ar, mapa\n" -) - -void DlgPathStyleMap::PutHelp() +bool DlgPathStyleMap::Run(PathStyleMap& m, String& style, bool editor, bool read_only) { - HelpBody() << - "Dialog slou k vbru stylu ry nebo editaci styl ar. " - "V dialogu se zobrazuj vechny styly ar, kter jsou prv " - "v systmu k dispozici. Kad styl ry je oznaen textovm " - "nzvem, kter se pouv jako odkaz na styl ry. Krom " - "nzvu se pi vykreslovn ry zadv jet ka ry " - "a implicitn barva (nkter segmenty ar mohou bt vykresleny " - "touto implicitn barvou, jin pevn zadanou barvou)."; - - DlgPathStyleMap d; - d.dialog.browser.Set(d.map = &PathStyleMap::App()); - HelpCenterImage(d.dialog) << - "Tabulka v horn sti dialogu slou k vbru stylu ry. " - "V obdlnkovm poli jsou uspodny nhledy vech dostupnch " - "styl ar. Dvojitm kliknutm na nhled ry vyberete styl " - "ry pro dal pouit v mst, odkud byl dialog vyvoln " - "(odpovd funkci tlatka " << HelpButton("OK", 600) << "). " - "Pravm tlatkem mete zobrazit lokln nabdku funkc pro prci " - "se styly ar:\n\n"; - - MenuBar menu; - d.dialog.browser.ToolLocal(menu); - -// HelpBody() -// << HelpImage(menu); -} -*/ - -String DlgPathStyleMap::Run(PathStyleMap& m, String dflt, bool editor, bool read_only) -{ - if(editor) - { + if(editor) { dialog.ok.Hide(); - dialog.cancel.SetLabel("Zavt"); + dialog.cancel.SetLabel(t_("Close")); } map = &m; @@ -2299,16 +2261,20 @@ String DlgPathStyleMap::Run(PathStyleMap& m, String dflt, bool editor, bool read // UpdateMaps(); dialog.browser.Set(map); - while(dialog.Run() == IDOK) - { + dialog.browser.SetCursor(Nvl(style, ".solid")); + while(dialog.Run() == IDOK) { int c = dialog.browser.GetCursor(); - if(c >= 0) - return map->GetSortName(c); + if(c >= 0) { + style = map->GetSortName(c); + if(style == ".solid") style = Null; + return true; + } BeepExclamation(); } - return Null; + return false; } + /* void DlgPathStyleMap::UpdateMaps() { @@ -2345,8 +2311,8 @@ PathStyleCtrl::PathStyleCtrl() void PathStyleCtrl::DoAction() { - String s = RunDlgPathStyleMap(*path_map, GetData(), false, false); - if(!IsNull(s)) + String s = GetData(); + if(RunDlgPathStyleMap(*path_map, s, false, false)) SetDataAction(s); } diff --git a/uppsrc/Geom/Ctrl/pathCtrl.h b/uppsrc/Geom/Ctrl/pathCtrl.h index 47aeda3cb..975c2a122 100644 --- a/uppsrc/Geom/Ctrl/pathCtrl.h +++ b/uppsrc/Geom/Ctrl/pathCtrl.h @@ -267,7 +267,7 @@ private: ////////////////////////////////////////////////////////////////////// bool RunDlgPathEditor(PathStyle& style, const String& title = Null); -String RunDlgPathStyleMap(PathStyleMap& map, const String& dflt = Null, bool editor = false, bool read_only = false); +bool RunDlgPathStyleMap(PathStyleMap& map, String& style, bool editor = false, bool read_only = false); ////////////////////////////////////////////////////////////////////// diff --git a/uppsrc/Geom/Draw/plotter.cpp b/uppsrc/Geom/Draw/plotter.cpp index 2e78be25b..522da52dc 100644 --- a/uppsrc/Geom/Draw/plotter.cpp +++ b/uppsrc/Geom/Draw/plotter.cpp @@ -2109,6 +2109,51 @@ One MarkTool::Star(int size, Color color, Color outline, int o return new StarMarker(size, color, outline, outline_width); } +class ThickCrossMarker : public AreaMarker +{ +public: + ThickCrossMarker(int size, Color color, Color outline, int outline_width); + + virtual void Paint(Draw& draw, const Vector& pt); + +private: + int s2, s6; +}; + +ThickCrossMarker::ThickCrossMarker(int size, Color color, Color outline, int outline_width) +: AreaMarker(size, color, outline, outline_width) +{ + s2 = size >> 1; + s6 = size / 6; +} + +void ThickCrossMarker::Paint(Draw& draw, const Vector& pt) +{ + Vector out; + out.SetCount(pt.GetCount() * 12); + Point *op = out.Begin(); + for(const Point *ip = pt.Begin(), *ie = pt.End(); ip < ie; ip++, op += 12) { + int x = ip->x, y = ip->y; + op[0].x = op[11].x = x + s2; + op[1].x = op[2].x = op[9].x = op[10].x = x + s6; + op[3].x = op[4].x = op[7].x = op[8].x = x - s6; + op[5].x = op[6].x = x - s2; + + op[2].y = op[3].y = y + s2; + op[0].y = op[1].y = op[4].y = op[5].y = y + s6; + op[6].y = op[7].y = op[10].y = op[11].y = y - s6; + op[8].y = op[9].y = y - s2; + } + Vector seg; + seg.SetCount(pt.GetCount(), 12); + DrawPolygons(draw, out, seg, color, outline_width, outline); +} + +One MarkTool::ThickCross(int size, Color color, Color outline, int outline_width) +{ + return new ThickCrossMarker(size, color, outline, outline_width); +} + class LetterMarker : public MarkTool::Marker { public: diff --git a/uppsrc/Geom/Draw/plotter.h b/uppsrc/Geom/Draw/plotter.h index 5f460a8c4..2d0642a20 100644 --- a/uppsrc/Geom/Draw/plotter.h +++ b/uppsrc/Geom/Draw/plotter.h @@ -390,11 +390,12 @@ public: static One Star(int size = 10, Color color = LtRed, Color outline = Black, int outline_width = 0); static One Square45(int size = 10, Color color = LtRed, Color outline = Black, int outline_width = 0); static One Nabla(int size = 10, Color color = LtRed, Color outline = Black, int outline_width = 0); + static One ThickCross(int size = 10, Color color = LtRed, Color outline = Black, int outline_width = 0); static One Letter(char ascii, int angle = 0, Font font = StdFont(), Color color = LtRed, Color outline = Black); static One Picture(Image pic, int size = 0, Color color = LtRed, bool antialias = false, bool ignore_hotspot = false); // angle in degrees, 360 = full circle - enum { CIRCLE, SQUARE, TRIANGLE, CROSS, DIAMOND, HEXAGON, STAR, SQUARE45, NABLA, STD_MARK_COUNT }; // standard markers + enum { CIRCLE, SQUARE, TRIANGLE, CROSS, DIAMOND, HEXAGON, STAR, SQUARE45, NABLA, THICK_CROSS, STD_MARK_COUNT }; // standard markers static One StandardMarker(int type, int size = 10, Color color = LtRed, Color outline = Black, int outline_width = 0); MarkTool(); diff --git a/uppsrc/GridCtrl/GridCtrl.t b/uppsrc/GridCtrl/GridCtrl.t index cff1a504f..408f17802 100644 --- a/uppsrc/GridCtrl/GridCtrl.t +++ b/uppsrc/GridCtrl/GridCtrl.t @@ -10,6 +10,7 @@ fiFI("Sulje") huHU("Bezár") plPL("Zamknij") ruRU("Закрыть") +zhTW("關閉") T_("Search") deDE("Suchen") @@ -18,6 +19,7 @@ fiFI("") huHU("Keresés") plPL("") ruRU("Поиск") +zhTW("") T_("Append") deDE("Anfügen") @@ -26,6 +28,7 @@ fiFI("Lisää loppuun") huHU("Hozzáfűzés") plPL("Dodaj") ruRU("Добавить") +zhTW("") T_("Insert ") deDE("Einfügen") @@ -34,6 +37,7 @@ fiFI("Lisää väliin ") huHU("Beszúrás") plPL("Wstaw") ruRU("Вставить") +zhTW("") T_("Duplicate") deDE("Duplizieren") @@ -42,6 +46,7 @@ fiFI("Kahdenna") huHU("Duplikálás") plPL("Zduplikuj") ruRU("Дублировать") +zhTW("") T_("Delete ") deDE("Löschen") @@ -50,6 +55,7 @@ fiFI("Poista") huHU("Törlés") plPL("Usuń") ruRU("Удалить") +zhTW("") T_("Edit") deDE("Bearbeiten") @@ -58,6 +64,7 @@ fiFI("Muokkaa") huHU("Szerkesztés") plPL("Edytuj") ruRU("Редактировать") +zhTW("") T_("Accept") deDE("Bestätigen") @@ -66,6 +73,7 @@ fiFI("Hyväksy") huHU("Elfogadás") plPL("Zatwierdź") ruRU("Подтвердить") +zhTW("") T_("Cancel") deDE("Abruch") @@ -74,6 +82,7 @@ fiFI("Peruuta") huHU("Mégsem") plPL("Anuluj") ruRU("Отмена") +zhTW("取消") T_("Move up") deDE("Nach oben") @@ -82,6 +91,7 @@ fiFI("Siirrä ylös") huHU("Mozgatás fel") plPL("Przesuń do góry") ruRU("Вверх") +zhTW("") T_("Move down") deDE("Nach unten") @@ -90,6 +100,7 @@ fiFI("Siirrä alas") huHU("Mozgatás le") plPL("Przesuń w dół") ruRU("Вниз") +zhTW("") T_("First %s") deDE("Erster %s") @@ -98,6 +109,7 @@ fiFI("Ensimmäinen %s") huHU("Első %s") plPL("Pierwszy %s") ruRU("Первые %s") +zhTW("") T_("Previous %s") deDE("Vorheriger %s") @@ -106,6 +118,7 @@ fiFI("Edellinen %s") huHU("Előző %s") plPL("Poprzedni %s") ruRU("Предыдущие $s") +zhTW("") T_("Next %s") deDE("Nächster %s") @@ -114,6 +127,7 @@ fiFI("Seuraava %s") huHU("Következő %s") plPL("Następny %s") ruRU("Следующие %s") +zhTW("") T_("Last %s") deDE("Letzter %s") @@ -122,6 +136,7 @@ fiFI("Viimeinen %s") huHU("Utolsó %s") plPL("Ostatni %s") ruRU("Последние %s") +zhTW("") T_("Immediate search") deDE("Sofort suchen") @@ -130,6 +145,7 @@ fiFI("Välitön haku") huHU("Azonnali keresés") plPL("Wyszukiwanie natychmiastowe") ruRU("Непосредственный поиск") +zhTW("") T_("Hide rows") deDE("Reihen ausblenden") @@ -138,6 +154,7 @@ fiFI("Piilota rivit") huHU("Sorok rejtése") plPL("Ukrywaj niepasujące wiersze") ruRU("Спрятать строки") +zhTW("") T_("Highlight found cells") deDE("Markiere gefundene Zellen") @@ -146,6 +163,7 @@ fiFI("Korosta löydetyt solut") huHU("Talált cellák kiemelése") plPL("Podświetlaj znalezione komórki") ruRU("Подсветить найденные ячейки") +zhTW("") T_("Case sensitive") deDE("Gross-/Kleinschreibung beachten") @@ -154,6 +172,7 @@ fiFI("Huomioi isot/pienet kirjaimet") huHU("Kis-/nagybetű érzékeny") plPL("Rozróżniaj małe i duże litery") ruRU("Учитывать регистр") +zhTW("") T_("row") deDE("Reihe") @@ -162,6 +181,7 @@ fiFI("rivi") huHU("sor") plPL("wiersz") ruRU("ряды") +zhTW("列") T_("Insert a new %s into the table.") deDE("Neuen %s in die Tabelle einfügen") @@ -170,6 +190,7 @@ fiFI("Lisää uusi %s taulukkoon.") huHU("Új %s beszúrása a táblázatba") plPL("Wstawia nowy %s do tabeli.") ruRU("Вставить новый %s в таблицу.") +zhTW("插入新的 %s 到表格") T_("Insert before") deDE("Davor einfügen") @@ -178,6 +199,7 @@ fiFI("Lisää ennen") huHU("Beszúrás elé") plPL("Wstaw przed") ruRU("Вставить до") +zhTW("") T_("Insert a new %s into the table before current") deDE("Neuen %s in die Tabelle vor aktuellen einfügen") @@ -186,6 +208,7 @@ fiFI("Lisää uusi %s taulukkoon ennen nykyistä") huHU("Új %s beszúrása a táblázatba az aktuális elé") plPL("Wstawia nowy %s do tabeli przed aktualnym") ruRU("Вставить новый %s в таблицу перед существующим") +zhTW("在表格中目前項前插入新的 %s") T_("Insert after") deDE("Danach einfügen") @@ -194,6 +217,7 @@ fiFI("Lisää jälkeen") huHU("Beszúrás utána") plPL("Wstaw za") ruRU("Вставить после") +zhTW("") T_("Insert a new %s into the table after current") deDE("Neuen %s in die Tabelle nach aktuellen einfügen") @@ -202,6 +226,7 @@ fiFI("Lisää uusi %s taulukkoon nykyisen jälkeen") huHU("Új %s beszúrása a táblázatba az aktuális mögé") plPL("Wstawia nowy %s do tabeli po aktualnym") ruRU("Вставить новый %s в таблицу после существующего") +zhTW("在表格中目前項後插入新的 %s") T_("Append a new %s at the end of the table.") deDE("Neue %s am Ende der Tabelle hinzufügen") @@ -210,6 +235,7 @@ fiFI("Lisää uusi %s taulukon loppuun.") huHU("Új %s hozzáfűzése a táblázat végéhez") plPL("Dodaje nowy %s na końcu tabeli.") ruRU("Добавить новый %s в конце таблицы.") +zhTW("在表格末尾插入新的 %s") T_("Duplicate current table %s.") deDE("Neuen %s in die Tabelle am Ende einfügen") @@ -218,6 +244,7 @@ fiFI("Kahdenna tämänhetkinen taulukko %s.") huHU("Az aktuális táblázat megkettőzése") plPL("Utwórz duplikat aktualnej tabeli %s.") ruRU("Дублировать текущий %s таблицы.") +zhTW("複製目前表格 %s.") T_("Edit active %s.") deDE("Aktuellen %s bearbeiten") @@ -226,6 +253,7 @@ fiFI("Muokkaa aktiivista %s.") huHU("Az aktuális %s szerkesztése") plPL("Edytuje aktualny %s.") ruRU("Редактировать активный %s.") +zhTW("編輯活動 %s") T_("Delete active %s.") deDE("Aktuellen %s löschen") @@ -234,6 +262,7 @@ fiFI("Poista aktiivinen %s.") huHU("Az aktív %s törlése") plPL("Usuń aktualny %s.") ruRU("Удалить активный %s.") +zhTW("刪除活動 %s") T_("Select all") deDE("Alle auswählen") @@ -242,6 +271,7 @@ fiFI("Valitse kaikki") huHU("Minden kiválasztása") plPL("Zaznacz wszystkie") ruRU("Выделить всё") +zhTW("全選") T_("Select all table rows") deDE("Alle Reihen auswählen") @@ -250,6 +280,7 @@ fiFI("Valitse kaikki taulukon rivit") huHU("Az összes sor kijelölése") plPL("Zaznacz wszystkie wiersze tabeli") ruRU("Выделить все ряды таблицы") +zhTW("全選表格列") T_("Columns") deDE("Spalten") @@ -258,6 +289,7 @@ fiFI("Sarakkeet") huHU("Oszlopok") plPL("Kolumny") ruRU("Колонки") +zhTW("") T_("Copy") deDE("Kopieren") @@ -266,6 +298,7 @@ fiFI("Kopioi") huHU("Másolás") plPL("Kopiuj") ruRU("Копировать") +zhTW("複製") T_("Cut") deDE("Ausschneiden") @@ -274,6 +307,7 @@ fiFI("Leikkaa") huHU("Kivágás") plPL("Wytnij") ruRU("Вырезать") +zhTW("剪下") T_("Paste") deDE("Einfügen") @@ -282,6 +316,7 @@ fiFI("Liitä") huHU("Beillesztés") plPL("Wklej") ruRU("Вставить") +zhTW("貼上") T_("Paste as") deDE("Einfügen als") @@ -290,6 +325,7 @@ fiFI("Liitä nimellä") huHU("Beillesztés másként") plPL("Wklej jako") ruRU("Вставить как") +zhTW("") T_("appended") deDE("anhängen") @@ -298,6 +334,7 @@ fiFI("lisätty loppuun") huHU("hozzáfűzve") plPL("dodane") ruRU("добавлено") +zhTW("") T_("inserted") deDE("einfügen") @@ -306,6 +343,7 @@ fiFI("lisätty väliin") huHU("beszúrva") plPL("wstawione") ruRU("вставлено") +zhTW("") T_("Moving selection (%d %s) before row %d") deDE("Verschieben der Auswahl (%d %s) vor Reihe %d") @@ -315,6 +353,7 @@ huHU("Kijelölés mozgatása (%d %s) a %d. sor elé") plPL("Przenoszenie selekcji (%d %s) przed %d wiersz") ruRU("Переместить отмеченное (%d %s) до строки " "%d") +zhTW("") T_("rows") deDE("Reihen") @@ -323,6 +362,7 @@ fiFI("rivit") huHU("sorok") plPL("wierszy") ruRU("строк") +zhTW("") T_("Moving row %d before row %d") deDE("Verschieben der Reihe %d vor Reihe %d") @@ -331,6 +371,7 @@ fiFI("Siirtää riviä %d ennen riviä %d") huHU("%d. sor mozgatása %d. sor elé") plPL("Przenoszenie wiersza %d przed wiersz %d") ruRU("Переместить строку %d до строки %d") +zhTW("") T_("Moving %d %s before row %d") deDE("Verschieben %d %s vor Reihe %d") @@ -339,6 +380,7 @@ fiFI("Siirtää %d %s ennen riviä %d") huHU("%d %s mozgatása a %d. sor elé") plPL("Przenoszenie %d %s przed wiersz %d") ruRU("Переместить %d %s до строки %d") +zhTW("") T_("cell") deDE("Zelle") @@ -347,6 +389,7 @@ fiFI("solu") huHU("cella") plPL("komórki") ruRU("ячейка") +zhTW("") T_("cells") deDE("Zellen") @@ -355,9 +398,7 @@ fiFI("solut") huHU("cellák") plPL("komórek") ruRU("ячейки") - - -// Obsolete +zhTW("") T_("Do you really want to delete selected %s ?") deDE("Möchten sie wirklich die ausgewählte %s löschen?") @@ -367,6 +408,10 @@ huHU("Biztosan töröljük a kijelölt %s ?") plPL("Czy na pewno chcesz usunąć zaznaczone %s ?") ruRU("Вы действительно хотите удалить выделенный " "%s?") +zhTW("") + + +// Obsolete T_("Swap %s with previous thus moving it up.") deDE("Vertauschen der %s mit dem Vorgänger zum Aufwärtsbewegen.") @@ -376,6 +421,7 @@ huHU("%s felcserélése az előzővel - felfelé mozgatás") plPL("Zamień %s z poprzednim przesuwając go do góry.") ruRU("Поменять местами %s с предыдущим, подвинув " "вверх.") +zhTW("將%s與前面換位上移之") T_("Swap %s with next thus moving it down.") deDE("Vertauschen der %s mit dem Nachfolger zum Abwärtsbewegen") @@ -385,6 +431,7 @@ huHU("%s felcserélése a következővel - lefelé mozgatás") plPL("Zamień %s z następnym przesuwając go w dół.") ruRU("Поменять местами %s со следующим, подвинув " "вниз.") +zhTW("將%s與後面換位下移之") T_("Find") deDE("Suchen") @@ -393,6 +440,7 @@ fiFI("Etsi") huHU("Keresés") plPL("Znajdź") ruRU("Найти") +zhTW("") T_("Find options") deDE("Suche Optionen") @@ -401,3 +449,4 @@ fiFI("Haku optiot") huHU("Keresés beállításai") plPL("Opcje szukania") ruRU("Опции поиска") +zhTW("") diff --git a/uppsrc/GridCtrl/GridCtrl.upp b/uppsrc/GridCtrl/GridCtrl.upp index f9035b78b..883d5888b 100644 --- a/uppsrc/GridCtrl/GridCtrl.upp +++ b/uppsrc/GridCtrl/GridCtrl.upp @@ -34,3 +34,4 @@ file mainconfig "" = "GUI"; + diff --git a/uppsrc/Ole/Ctrl/Ctrl.upp b/uppsrc/Ole/Ctrl/Ctrl.upp index 274e46b38..18961e8e9 100644 --- a/uppsrc/Ole/Ctrl/Ctrl.upp +++ b/uppsrc/Ole/Ctrl/Ctrl.upp @@ -15,3 +15,4 @@ custom() "idl", "midl /newtlb $(!/I) /h \"$(DIR)/$(TITLE)_idl.h\" /iid \"$(DIR)/$(TITLE" ")_idl.cpp\" /tlb \"$(DIR)/$(TITLE).tlb\" \"$(PATH)\"\r\n", "$(DIR)/$(TITLE)_idl.h\r\n$(DIR)/$(TITLE).tlb\r\n"; + diff --git a/uppsrc/Oracle/Oracle.t b/uppsrc/Oracle/Oracle.t index cb79710d4..0a3243572 100644 --- a/uppsrc/Oracle/Oracle.t +++ b/uppsrc/Oracle/Oracle.t @@ -13,6 +13,7 @@ roRO("Eroare la încărcare bibliotecii client bază de date OCI7") ruRU("") trTR("Hata: OCI7 Oracle veritabanı istemci kütüphanesi (Oracle database client " "library) yüklenemedi.") +zhTW("") T_("Connecting to server") csCZ("Navazuji spojení") @@ -23,6 +24,7 @@ huHU("Kapcsolódás a szerverhez") roRO("Se onectează la server") ruRU("Подключение к серверу") trTR("Sunucuya bağlanıyor") +zhTW("") T_("Connecting to database server") csCZ("Spojuji s databází") @@ -33,6 +35,7 @@ huHU("Kapcsolódás az adatbázis-szerverhez") roRO("Se conectează la server bază de date") ruRU("Подключение к SQL серверу") trTR("Veritabanı sunucusuna bağlanıyor") +zhTW("") // Oci8.cpp @@ -47,6 +50,7 @@ roRO("Eroare la rularea bibliotecii dinamice de conectare la OCI8") ruRU("") trTR("Hata: OCI8 Oracle connection dynamic library'sinin calıştırılması " "sırasında bir hata meydana geldi.") +zhTW("") T_("Unknown error.") csCZ("Neznámá chyba.") @@ -57,6 +61,7 @@ huHU("Ismeretlen hiba.") roRO("Eroare necunoscută.") ruRU("Неизвестная ошибка") trTR("Bilinmeyen hata.") +zhTW("") T_("(unknown error)") csCZ("(neznámá chyba)") @@ -67,6 +72,7 @@ huHU("(ismeretlen hiba)") roRO("(eroare necunoscută)") ruRU("(неизвестная ошибка)") trTR("(bilinmeyen hata)") +zhTW("") T_("") csCZ("") @@ -77,6 +83,7 @@ huHU("") roRO("") ruRU("<не поддерживается>") trTR("") +zhTW("") T_("Error initializing connection") csCZ("Chyba při navazování spojení") @@ -87,6 +94,7 @@ huHU("Hiba a kapcsolat inicializálása közben") roRO("Eroare la inițializarea conexiunii") ruRU("Ошибка запуска соединения") trTR("Bağlantı hatası") +zhTW("") T_("OCI8 connection") csCZ("Spojení OCI8") @@ -97,6 +105,7 @@ huHU("OCI8 kapcsolat") roRO("Conexiune OCI8") ruRU("") trTR("OCI8 bağlantısı") +zhTW("") T_("Closing reference cursor") csCZ("Zavírám referenční kurzor") @@ -107,6 +116,7 @@ huHU("Referencia-kurzor lezárása") roRO("Se închide cursorul de referință") ruRU("Закрыть курсор связи") trTR("Closing reference cursor") +zhTW("") T_("Error initializing OCI8 library (%s)") csCZ("Chyba při inicializaci OCI8") @@ -117,6 +127,7 @@ huHU("Hiba az OCI8 library inicializálása közben (%s)") roRO("Eroare la inițializarea bibliotecii OCI8 (%s)") ruRU("") trTR("") +zhTW("") T_("Connecting to Oracle database.") csCZ("Připojování k databázi Oracle") @@ -127,6 +138,7 @@ huHU("Kapcsolódás Oracle adatbázishoz.") roRO("Conectare la baza de date Oracle") ruRU("Подключение к базе данных Oracle") trTR("Oracle veritabanına bağlanılıyor...") +zhTW("") T_("Error loading OCI8 Oracle connection dynamic library.") csCZ("Nelze nalézt dynamickou knihovnu OCI8 pro spojení s Oracle") @@ -137,6 +149,7 @@ huHU("Hiba az OCI8 Oracle connection dynamic library betöltésekor.") roRO("Eroare la încărcare bibliotecii client bază de date OCI8") ruRU("") trTR("") +zhTW("") T_("Connecting to server '%s'") csCZ("Připojování k serveru '%s'") @@ -147,6 +160,7 @@ huHU("Kapcsolódás a következő szerverhez: '%s'") roRO("Conectare la server '%s'") ruRU("Подключение к серверу %s") trTR("%s sunucusuna bağlanılıyor.") +zhTW("") // Obsolete @@ -160,3 +174,4 @@ huHU("Hiba az OCI8 library inicializálásakor.") roRO("Eroare la inițializarea bibliotecii OCI8") ruRU("") trTR("OCI8 kütüphanesinin başlatılması sırasında bir hata meytdana geldi.") +zhTW("") diff --git a/uppsrc/PdfDraw/PdfDraw.cpp b/uppsrc/PdfDraw/PdfDraw.cpp index bf6933c13..4c0a90c97 100644 --- a/uppsrc/PdfDraw/PdfDraw.cpp +++ b/uppsrc/PdfDraw/PdfDraw.cpp @@ -3,6 +3,7 @@ NAMESPACE_UPP #define LDUMP(x) // DUMP(x) +#define LLOG(x) // LOG(x) #define PDF_COMPRESS #define USE_TTF @@ -288,8 +289,6 @@ PdfDraw::OutlineInfo PdfDraw::GetOutlineInfo(Font fnt) String data = LoadFile(fn); TTFReader ttf; if(ttf.Open(data, false, true)) { - LOG("TTF!"); - DUMP(ttf.post.italicAngle); of.ttf = true; of.sitalic = ttf.post.italicAngle == 0 && fnt.IsItalic(); } @@ -745,7 +744,7 @@ String PdfDraw::Finish() int size = GetFontData(sd.GetHandle(), 0, 0, NULL, 0); if(size == GDI_ERROR) { - RLOG("PdfDraw::Finish: GDI_ERROR on font " << pdffont.GetKey(i)); + LLOG("PdfDraw::Finish: GDI_ERROR on font " << pdffont.GetKey(i)); return Null; } StringBuffer fontbuffer(size); diff --git a/uppsrc/RichEdit/RichEdit.t b/uppsrc/RichEdit/RichEdit.t index f162f41fa..cda11cd8d 100644 --- a/uppsrc/RichEdit/RichEdit.t +++ b/uppsrc/RichEdit/RichEdit.t @@ -17,6 +17,7 @@ ruRU("Единицы") srSP("Jedinice") trTR("Birimler") zhCN("单位") +zhTW("") T_("%d%% of width") csCZ("%d%% šířky") @@ -32,6 +33,7 @@ ruRU("%d%% длинны") srSP("%d%% širine") trTR("%d%%") zhCN("宽的%d%%") +zhTW("") T_("None") csCZ("Není") @@ -47,6 +49,7 @@ ruRU("Нет") srSP("NIšta") trTR("Hiçbiri") zhCN("无") +zhTW("") T_("Hyperlink") csCZ("Propojení") @@ -62,6 +65,7 @@ ruRU("Ссылка") srSP("Hiperveza") trTR("Hiperlink") zhCN("超级链接") +zhTW("") T_("Paragraph label") csCZ("Návěští odstavce") @@ -77,6 +81,7 @@ ruRU("Метка параграфа") srSP("Labela paragrafa") trTR("Paragraf etiketi") zhCN("段标") +zhTW("") T_("Label") csCZ("Návěští") @@ -92,6 +97,7 @@ ruRU("Метка") srSP("Labela") trTR("Etiket") zhCN("标签") +zhTW("") T_("Store as style") csCZ("Uložit jako styl") @@ -107,6 +113,7 @@ ruRU("Сохранить как стиль") srSP("Sačuvaj kao stil") trTR("Stil olarak sakla") zhCN("存为类型") +zhTW("") T_("Style manager") csCZ("Styly") @@ -122,6 +129,7 @@ ruRU("Менеджер стилей") srSP("Menadžer stilova") trTR("Stil yöneticisi") zhCN("类型管理器") +zhTW("") T_("Style") csCZ("Styl") @@ -137,6 +145,7 @@ ruRU("Стиль") srSP("Stil") trTR("Stil") zhCN("类型") +zhTW("") T_("Font face") csCZ("Písmo") @@ -152,6 +161,7 @@ ruRU("Шрифт") srSP("Izgled fonta") trTR("Yazı tipi") zhCN("Font face") +zhTW("") T_("Language") csCZ("Jazyk") @@ -167,6 +177,7 @@ ruRU("Язык") srSP("Jezik") trTR("Dil") zhCN("语言") +zhTW("") T_("Font height") csCZ("Výška písma") @@ -182,6 +193,7 @@ ruRU("Высота шрифта") srSP("Visina fonta") trTR("Yazı tipi boyutu") zhCN("字体高度") +zhTW("") T_("Index entry") csCZ("Resjtříkový odkaz") @@ -197,6 +209,7 @@ ruRU("Точка входа") srSP("Indeks ulaza") trTR("Dizin girdisi") zhCN("索引项") +zhTW("") T_("Go to label") csCZ("Přejít na návěští") @@ -212,6 +225,7 @@ ruRU("Перейти к метке") srSP("Idi na labelu") trTR("Etikete git") zhCN("转到标签") +zhTW("") T_("Go to index entry") csCZ("Přejít na rejstříkový odkaz") @@ -227,6 +241,7 @@ ruRU("Перейти к точке входа") srSP("Idi na indeks ulaza") trTR("Dizin girdisine git") zhCN("转到索引项") +zhTW("") T_("Text color") csCZ("Barva textu") @@ -242,6 +257,7 @@ ruRU("Цвет текста") srSP("Boja teksta") trTR("Yazı rengi") zhCN("文本颜色") +zhTW("") T_("Background color") csCZ("Barva pozadí") @@ -257,6 +273,7 @@ ruRU("Цвет фона") srSP("Pozadinska boja") trTR("Arkaplan rengi") zhCN("背景颜色") +zhTW("") T_("Find / Replace") csCZ("Vyhledat / Nahradit") @@ -272,6 +289,7 @@ ruRU("Найти / Заменить") srSP("Pronađi / Zameni") trTR("Bul / Değiştir") zhCN("查找/替换") +zhTW("") // Mouse.cpp @@ -290,6 +308,7 @@ ruRU("Позиция объекта...") srSP("Pozicija objekta..") trTR("Nesne konumu...") zhCN("对象位置..") +zhTW("") T_("3 pt up") csCZ("3 body nahoru") @@ -305,6 +324,7 @@ ruRU("на 3 pt больше") srSP("3 pt na gore") trTR("3 punto yukarı") zhCN("3 pt up") +zhTW("") T_("2 pt up") csCZ("2 body nahoru") @@ -320,6 +340,7 @@ ruRU("на 2 pt больше") srSP("2 pt na gore") trTR("2 punto yukarı") zhCN("2 pt up") +zhTW("") T_("1 pt up") csCZ("1 bod nahoru") @@ -335,6 +356,7 @@ ruRU("на 1 pt больше") srSP("1 pt na gore") trTR("1 punto yukarı") zhCN("1 pt up") +zhTW("") T_("Baseline") csCZ("Základní pozice") @@ -350,6 +372,7 @@ ruRU("Базовая линия") srSP("Osnovna linija") trTR("Taban çizgisi") zhCN("基线") +zhTW("") T_("1 pt down") csCZ("1 bod dolů") @@ -365,6 +388,7 @@ ruRU("на 1 pt меньше") srSP("1 pt na dole") trTR("1 punto aşağı") zhCN("1 pt down") +zhTW("") T_("2 pt down") csCZ("2 body dolů") @@ -380,6 +404,7 @@ ruRU("на 2 pt меньше") srSP("2 pt na dole") trTR("2 punto aşağı") zhCN("2 pt down") +zhTW("") T_("3 pt down") csCZ("3 body dolů") @@ -395,6 +420,7 @@ ruRU("на 3 pt меньше") srSP("3 pt na dole") trTR("3 punto aşağı") zhCN("3 pt down") +zhTW("") T_("Add to user dictionary") csCZ("Přidat do uživatelského slovníku") @@ -410,6 +436,7 @@ ruRU("Добавить в словарь пользователя") srSP("Dodaj u korisnički rečnik") trTR("Kullanıcı sözlüğüne ekle") zhCN("添加到用户词典") +zhTW("") // Formating.cpp @@ -428,6 +455,7 @@ ruRU("Точка входа") srSP("Indeks ulaza") trTR("Dizin girdisi") zhCN("索引项") +zhTW("") T_("Left") csCZ("Vlevo") @@ -443,6 +471,7 @@ ruRU("Влево") srSP("Levo") trTR("Sol") zhCN("左") +zhTW("") T_("Right") csCZ("Vpravo") @@ -458,6 +487,7 @@ ruRU("Вправо") srSP("Desno") trTR("Sağ") zhCN("右") +zhTW("") T_("Center") csCZ("Na střed") @@ -473,6 +503,7 @@ ruRU("По центру") srSP("Na sredini") trTR("Orta") zhCN("中") +zhTW("") T_("No fill") csCZ("Bez výplně") @@ -488,6 +519,7 @@ ruRU("Без заливки") srSP("Bez ispune") trTR("Doldurma") zhCN("无填充") +zhTW("") T_("Fill with ....") csCZ("Vyplnit ....") @@ -503,6 +535,7 @@ ruRU("Залить ....") srSP("Ispuni sa ....") trTR(".... ile doldur") zhCN("填充为 ....") +zhTW("") T_("Fill with ----") csCZ("Vyplnit ----") @@ -518,6 +551,7 @@ ruRU("Залить ----") srSP("Ispuni sa ----") trTR("---- ile doldur") zhCN("填充为 ----") +zhTW("") T_("Fill with __") csCZ("Vyplnit __") @@ -533,6 +567,7 @@ ruRU("Залить __") srSP("Ispuni sa __") trTR("__ ile doldur") zhCN("填充为 __") +zhTW("") T_("Remove") csCZ("Odstranit") @@ -548,6 +583,7 @@ ruRU("Удалить") srSP("Uklonu") trTR("Kaldır") zhCN("删除") +zhTW("") T_("Object position") csCZ("Pozice objektu") @@ -563,6 +599,7 @@ ruRU("Позиция объекта") srSP("Pozicija objekta") trTR("Nesne konumu") zhCN("对象位置") +zhTW("") // ParaFormat.cpp @@ -581,6 +618,7 @@ ruRU("Центрованный") srSP("Centrirano") trTR("Ortalanmış") zhCN("居中") +zhTW("") T_("....") csCZ("....") @@ -596,6 +634,7 @@ ruRU("") srSP("....") trTR("....") zhCN("....") +zhTW("") T_("----") csCZ("----") @@ -611,6 +650,7 @@ ruRU("") srSP("----") trTR("----") zhCN("----") +zhTW("") T_("__") csCZ("__") @@ -626,6 +666,7 @@ ruRU("") srSP("__") trTR("__") zhCN("__") +zhTW("") T_("Tab position") csCZ("Pozice tabelace") @@ -641,6 +682,7 @@ ruRU("Позиция табуляции") srSP("Pozicija tabulatora") trTR("Sekme konumu") zhCN("Tab位置") +zhTW("") T_("Type") csCZ("Typ") @@ -656,6 +698,7 @@ ruRU("Тип") srSP("Tip") trTR("Tip") zhCN("类型") +zhTW("") T_("Fill") csCZ("Výplň") @@ -671,6 +714,7 @@ ruRU("Заливка") srSP("Ispuni") trTR("Doldur") zhCN("填充") +zhTW("") T_("Paragraph format") csCZ("Formát odstavce") @@ -686,6 +730,7 @@ ruRU("Формат параграфа") srSP("Fromat paragrafa") trTR("Paragraf düzeni") zhCN("段格式") +zhTW("") T_("Set style") csCZ("Nastavit styl") @@ -701,6 +746,7 @@ ruRU("Установить стиль") srSP("Postavi stil") trTR("Stili seç") zhCN("设置类型") +zhTW("") T_("New style no. %d") csCZ("Nový styl č. %d") @@ -716,6 +762,7 @@ ruRU("Новый стиль номер %d") srSP("Novi stil br. %d") trTR("Yeni stil no. %d") zhCN("新类型号%d") +zhTW("") T_("Create new style..") csCZ("Vytvořit nový styl..") @@ -731,6 +778,7 @@ ruRU("Создать новый стиль..") srSP("Napravi novi stil..") trTR("Yeni stil oluştur...") zhCN("创建新类型") +zhTW("") T_("Remove style") csCZ("Odstranit styl") @@ -746,6 +794,7 @@ ruRU("Удалить стиль") srSP("Ukloni stil") trTR("Stili sil") zhCN("删除类型") +zhTW("") T_("Rename..") csCZ("Přejmenovat..") @@ -761,6 +810,7 @@ ruRU("Переименовать..") srSP("Preimenuj..") trTR("Yeniden adlandır...") zhCN("重命名") +zhTW("") T_("Styles") csCZ("Styly") @@ -776,6 +826,7 @@ ruRU("Стили") srSP("Stilovi") trTR("Stiller") zhCN("类型") +zhTW("") // Table.cpp @@ -794,6 +845,7 @@ ruRU("Вставить таблицу") srSP("Ubaci tabelu") trTR("Araya tablo ekle") zhCN("插入表格") +zhTW("") T_("Table properties") csCZ("Vlastnosti tabulky") @@ -809,6 +861,7 @@ ruRU("Свойства таблицы") srSP("Svojstva tabele") trTR("Tablo özellikleri") zhCN("表格属性") +zhTW("") T_("Split cell") csCZ("Rozdělit buňku") @@ -824,6 +877,7 @@ ruRU("Разбить ячейки") srSP("Podeli ćeliju") trTR("Hücreyi böl") zhCN("拆分单元格") +zhTW("") T_("Cell properties") csCZ("Vlastnosti buňky") @@ -839,6 +893,7 @@ ruRU("Свойства ячейки") srSP("Svojstva ćelije") trTR("Hücre özellikleri") zhCN("单元格属性") +zhTW("") // Find.cpp @@ -857,6 +912,7 @@ ruRU("Заменить") srSP("Zameni") trTR("Değiştir") zhCN("替换") +zhTW("") T_("Replace in selection") csCZ("Nahradit ve výběru") @@ -872,6 +928,7 @@ ruRU("Заменить в выделении") srSP("Zameni u izboru") trTR("Seçili olan içinde değiştir") zhCN("替换选择") +zhTW("") T_("Find") csCZ("Vyhledat") @@ -887,6 +944,7 @@ ruRU("Найти") srSP("Pronađi") trTR("Bul") zhCN("查找") +zhTW("") // Tool.cpp @@ -905,6 +963,7 @@ ruRU("Полужирный") srSP("Masno") trTR("Kalın") zhCN("粗体") +zhTW("") T_("Italic") csCZ("Kurzíva") @@ -920,6 +979,7 @@ ruRU("Наклонный") srSP("Kurziv") trTR("İtalik") zhCN("斜体") +zhTW("") T_("Underline") csCZ("Podtržené") @@ -935,6 +995,7 @@ ruRU("Подчёркнутый") srSP("Podcrtano") trTR("Altı çizili") zhCN("下划线") +zhTW("") T_("Strikeout") csCZ("Přeškrtnuté") @@ -950,6 +1011,7 @@ ruRU("Зачёркнутый") srSP("Precrtano") trTR("Üstü çizili") zhCN("Strikeout") +zhTW("") T_("Capitals") csCZ("Kapitálky") @@ -965,6 +1027,7 @@ ruRU("Прописными") srSP("Velika slova") trTR("Büyük harfler") zhCN("大写") +zhTW("") T_("Superscript") csCZ("Horní index") @@ -980,6 +1043,7 @@ ruRU("Надстрочный") srSP("Gornji indeks") trTR("Üstyazı") zhCN("上标") +zhTW("") T_("Subscript") csCZ("Dolní index") @@ -995,6 +1059,7 @@ ruRU("Подстрочный") srSP("Donji indeks") trTR("Altyazı") zhCN("下标") +zhTW("") T_("Show spelling errors") csCZ("Ukazovat pravopisné chyby") @@ -1010,6 +1075,7 @@ ruRU("Показать ошибки орфографии") srSP("Prikaži jezičke greške") trTR("İmla hatalarını göster") zhCN("显示拼写错误") +zhTW("") T_("Justify") csCZ("Zarovnat do bloku") @@ -1025,6 +1091,7 @@ ruRU("По ширине") srSP("Poravnaj") trTR("Yasla") zhCN("调整") +zhTW("") T_("Round bullet") csCZ("Kulatá zarážka") @@ -1040,6 +1107,7 @@ ruRU("Круглые списочные маркеры") srSP("Okruglo označavanje") trTR("Yuvarlak işaret imi") zhCN("Round bullet") +zhTW("") T_("White round bullet") csCZ("Bíla kruhová odrážka") @@ -1055,6 +1123,7 @@ ruRU("Белые круглые списочные маркеры") srSP("Belo okruglo označavanje") trTR("Beyaz yuvarlak işaret imi") zhCN("White round bullet") +zhTW("") T_("Box bullet") csCZ("Čtvercová odrážka") @@ -1070,6 +1139,7 @@ ruRU("Квадратные списочные маркеры") srSP("Kvadratno označvanje") trTR("Kutu işaret imi") zhCN("Box bullet") +zhTW("") T_("White box bullet") csCZ("Bílá čtvercová odrážka") @@ -1085,6 +1155,7 @@ ruRU("Белые квадратные списочные маркеры") srSP("Belo kvadratno označvanje") trTR("Beyaz kutu işaret imi") zhCN("White box bullet") +zhTW("") T_("Text bullet") csCZ("Textová odrážka") @@ -1100,6 +1171,7 @@ ruRU("Текстовые списочные маркеры") srSP("Tekst označavanje") trTR("Metin işaret imi") zhCN("Text bullet") +zhTW("") T_("Paragraph format..") csCZ("Formát odstavce") @@ -1115,6 +1187,7 @@ ruRU("Формат параграфа") srSP("Format paragrafa..") trTR("Paragraf formatı...") zhCN("段格式") +zhTW("") T_("To single paragraph") csCZ("Do jednoho odstavce") @@ -1130,6 +1203,7 @@ ruRU("В один параграф") srSP("Ka jednom paragrafu") trTR("Tek paragraf haline getir") zhCN("转为单段") +zhTW("") T_("Undo") csCZ("Zpět") @@ -1145,6 +1219,7 @@ ruRU("Отменить") srSP("Undo") trTR("Geri Al") zhCN("撤销") +zhTW("復原") T_("Redo") csCZ("Znovu") @@ -1160,6 +1235,7 @@ ruRU("Повторить") srSP("Redo") trTR("Yinele") zhCN("重做") +zhTW("重做") T_("Cut") csCZ("Vyjmout") @@ -1175,6 +1251,7 @@ ruRU("Вырезать") srSP("Iseci") trTR("Kes") zhCN("剪切") +zhTW("剪下") T_("Copy") csCZ("Kopírovat") @@ -1190,6 +1267,7 @@ ruRU("Копировать") srSP("Kopiraj") trTR("Kopyala") zhCN("复制") +zhTW("複製") T_("Paste") csCZ("Vložit") @@ -1205,6 +1283,7 @@ ruRU("Вставить") srSP("Zalepi") trTR("Yapıştır") zhCN("粘贴") +zhTW("貼上") T_("Print") csCZ("Tisk") @@ -1220,6 +1299,7 @@ ruRU("Печать") srSP("Štampa") trTR("Yazdır") zhCN("打印") +zhTW("列印") T_("Find/Replace") csCZ("Vyhledat/Nahradit") @@ -1235,6 +1315,7 @@ ruRU("Найти/Заменить") srSP("Pronađi/Zameni") trTR("Bul/Değiştir") zhCN("查找/替换") +zhTW("") T_("Insert table..") csCZ("Vložit tabulku..") @@ -1250,6 +1331,7 @@ ruRU("Вставить таблицу") srSP("Ubaci tabelu..") trTR("Araya tablo ekle...") zhCN("插入表格..") +zhTW("") T_("Table properties..") csCZ("Vlastnosti tabulky..") @@ -1265,6 +1347,7 @@ ruRU("Свойства таблицы") srSP("Svojstva tabele..") trTR("Tablo özellikleri...") zhCN("表格属性..") +zhTW("") T_("Insert row") csCZ("Vložit řádek") @@ -1280,6 +1363,7 @@ ruRU("Вставить ряд") srSP("Ubaci red") trTR("Araya satır ekle") zhCN("插入行") +zhTW("") T_("Remove row") csCZ("Odstranit řádek") @@ -1295,6 +1379,7 @@ ruRU("Удалить ряд") srSP("Ukloni red") trTR("Satır sil") zhCN("删除行") +zhTW("") T_("Insert column") csCZ("Vložit sloupec") @@ -1310,6 +1395,7 @@ ruRU("Вставить колонку") srSP("Ubaci kolonu") trTR("Araya sütun ekle") zhCN("插入列") +zhTW("") T_("Remove column") csCZ("Odstranit sloupec") @@ -1325,6 +1411,7 @@ ruRU("Удалить колонку") srSP("Ukloni kolonu") trTR("Sütun sil") zhCN("删除列") +zhTW("") T_("Join cells") csCZ("Spojit buňky") @@ -1340,6 +1427,7 @@ ruRU("Объединить ячейки") srSP("Spoji ćelije") trTR("Hücreleri birleştir") zhCN("合并单元格") +zhTW("") T_("Split cell..") csCZ("Rozdělit buňku") @@ -1355,6 +1443,7 @@ ruRU("Разбить ячейки...") srSP("Podeli ćeliju..") trTR("Hücreyi böl...") zhCN("拆分单元格") +zhTW("") T_("Cell properties..") csCZ("Vlastnosti buňky..") @@ -1370,6 +1459,7 @@ ruRU("Свойства ячейки...") srSP("Svojstva ćelije..") trTR("Hücre özellikleri...") zhCN("单元格属性") +zhTW("") // RichEdit.lay @@ -1388,6 +1478,7 @@ ruRU("Выравнивание") srSP("Poravnanje:") trTR("Hizalama:") zhCN("对齐") +zhTW("") T_("Left\nCenter\nRight\nJustify") csCZ("Vlevo\nStřed\nVpravo\nDo bloku") @@ -1403,6 +1494,7 @@ ruRU("Влево\nПо центру\nВправо\nПо ширине") srSP("Levo\nPo sredini\nDesno\nporavnato") trTR("Sola yasla\nOrtala\nSağa yasla\nİki yana yasla") zhCN("左对齐\n居中\n右对齐\n两端对齐") +zhTW("") T_("Spacing") csCZ("Mezery") @@ -1418,6 +1510,7 @@ ruRU("Межсимвольное расстояние") srSP("") trTR("Aralık") zhCN("间隔") +zhTW("") T_("Before") csCZ("Před") @@ -1433,6 +1526,7 @@ ruRU("Перед") srSP("Pre") trTR("Önce") zhCN("前") +zhTW("") T_("After") csCZ("Po") @@ -1448,6 +1542,7 @@ ruRU("После") srSP("Posle") trTR("Sonra") zhCN("后") +zhTW("") T_("Line spacing") csCZ("Řádkování") @@ -1463,6 +1558,7 @@ ruRU("Расстояние между строками") srSP("") trTR("Satır aralığı") zhCN("行间隔") +zhTW("") T_("Text flow") csCZ("Tok textu") @@ -1478,6 +1574,7 @@ ruRU("Расположение текста") srSP("Tok teksta") trTR("Metin akışı") zhCN("文本流") +zhTW("") T_("Break page before") csCZ("&Zalomit stránku před") @@ -1493,6 +1590,7 @@ ruRU("Оборвать страницу после") srSP("Prelomi stranu pre") trTR("Önce sayfa sonu") zhCN("断开页前于") +zhTW("") T_("Keep together") csCZ("&Svázat řádky") @@ -1508,6 +1606,7 @@ ruRU("Держать вместе") srSP("Drži zajedno") trTR("Satırları birlikte tut") zhCN("保持在一起") +zhTW("") T_("Keep with next") csCZ("Svázat s &následujícím") @@ -1523,6 +1622,7 @@ ruRU("Придерживаться следующего") srSP("Drži sa sledećim") trTR("Sonraki ile birlikte") zhCN("与下一个保持") +zhTW("") T_("Allow orphans") csCZ("Povolit osa&mocené řádky") @@ -1538,6 +1638,7 @@ ruRU("Разрешить висячие строки") srSP("Dozvoli siročiće") trTR("Artık satırlara izin ver") zhCN("Allow orphans") +zhTW("") T_("Indentation") csCZ("Zarovnání") @@ -1553,6 +1654,7 @@ ruRU("Выравнивание") srSP("") trTR("Girinti") zhCN("缺口") +zhTW("") T_("Left margin") csCZ("Levý okraj") @@ -1568,6 +1670,7 @@ ruRU("Поле слева") srSP("Leva margina") trTR("Sol boşluk") zhCN("左边空白") +zhTW("") T_("ParaLayout_rm_1_SetLabel\aRight margin") csCZ("Pravý okraj") @@ -1583,6 +1686,7 @@ ruRU("") srSP("") trTR("Sağ boşluk") zhCN("Right margin") +zhTW("") T_("First line") csCZ("První řádka") @@ -1598,6 +1702,7 @@ ruRU("Красная строка") srSP("") trTR("İlk satır") zhCN("首行") +zhTW("") T_("Bullet") csCZ("Odrážka") @@ -1613,6 +1718,7 @@ ruRU("Списочный маркер") srSP("Označavanje") trTR("Madde imi") zhCN("Bullet") +zhTW("") T_("Tabs") csCZ("Tabelace") @@ -1628,6 +1734,7 @@ ruRU("Табуляторы") srSP("Tabulatori") trTR("Sekmeler") zhCN("Tabs") +zhTW("") T_("Default tab size") csCZ("Výchozí tabelace") @@ -1643,6 +1750,7 @@ ruRU("Размер табуляции по умолчанию") srSP("Podrazumevana veličina tabulatora") trTR("Varsayılan sekme boyutu") zhCN("缺省tab大小") +zhTW("") T_("Numbering") csCZ("Číslování") @@ -1658,6 +1766,7 @@ ruRU("Нумерование") srSP("Nabrajanje") trTR("Sayfa numaralandırma") zhCN("编号") +zhTW("") T_("Before number") csCZ("Před číslem") @@ -1673,6 +1782,7 @@ ruRU("Перед числом") srSP("Pre broja") trTR("Başlangıç") zhCN("号码前") +zhTW("") T_("After number") csCZ("Po čísle") @@ -1688,6 +1798,7 @@ ruRU("После числа") srSP("Posle broja") trTR("Son") zhCN("号码后") +zhTW("") T_("Reset") csCZ("Nulovat") @@ -1703,6 +1814,7 @@ ruRU("Сбросить") srSP("Vrati") trTR("Sıfırla") zhCN("重置") +zhTW("") T_("dot\npoint\ninch\nmm\ncm") csCZ("dot\nbod\npalec\nmm\ncm") @@ -1718,6 +1830,7 @@ ruRU("точки\nпоинты\nдюймы\nмм\nсм") srSP("tačka\npoint\ninč\nmm\ncm") trTR("piksel\nnokta\ninç\nmm\ncm") zhCN("dot\npoint\ninch\nmm\ncm") +zhTW("") T_("Reveal codes") csCZ("Pomocné znaky") @@ -1733,6 +1846,7 @@ ruRU("Показать коды") srSP("Pokaži kod") trTR("Kodları göster") zhCN("显示码") +zhTW("") T_("Zoom") csCZ("Zmenšit") @@ -1748,6 +1862,7 @@ ruRU("Увеличить") srSP("Uveličaj") trTR("Yakınlaştır") zhCN("扩大") +zhTW("") T_("OK") csCZ("OK") @@ -1763,6 +1878,7 @@ ruRU("OK") srSP("OK") trTR("Tamam") zhCN("确定") +zhTW("確定") T_("Cancel") csCZ("Storno") @@ -1778,6 +1894,7 @@ ruRU("Отмена") srSP("Otkaži") trTR("İptal") zhCN("取消") +zhTW("取消") T_("New") csCZ("Nový") @@ -1793,6 +1910,7 @@ ruRU("Новый") srSP("Novi") trTR("Yeni") zhCN("新建") +zhTW("") T_("Wi&dth:") csCZ("&Šířka") @@ -1808,6 +1926,7 @@ ruRU("&Ширина:") srSP("&Širina") trTR("Genişl&ik") zhCN("宽度(&d):") +zhTW("") T_("H&eight:") csCZ("&Výška") @@ -1823,6 +1942,7 @@ ruRU("&Высота:") srSP("&Visina") trTR("&Yükseklik:") zhCN("高度(&e)") +zhTW("") T_("&Width (%):") csCZ("Šíř&ka (%):") @@ -1838,6 +1958,7 @@ ruRU("&Ширина (%):") srSP("&Širina (%):") trTR("&Genişlik (%):") zhCN("宽度&W(%):") +zhTW("") T_("Height (%):") csCZ("Výška (%):") @@ -1853,6 +1974,7 @@ ruRU("Высота (%):") srSP("&Visina (%):") trTR("Yükseklik (%):") zhCN("高度(%):") +zhTW("") T_("&Descent:") csCZ("&Zanoření") @@ -1868,6 +1990,7 @@ ruRU("&Наклон:") srSP("&Nagib:") trTR("&Harf Kuyruğu:") zhCN("降序(&D):") +zhTW("") T_("Keep aspect ratio") csCZ("Zachovat poměr") @@ -1883,6 +2006,7 @@ ruRU("Сохранять пропорции") srSP("Zadrži razmeru") trTR("En/Boy oranını koru") zhCN("保持样式比例") +zhTW("") T_("Font") csCZ("Písmo") @@ -1898,6 +2022,7 @@ ruRU("Шрифт") srSP("Font") trTR("Yazı tipi") zhCN("字体") +zhTW("") T_("Height") csCZ("Výška") @@ -1913,6 +2038,7 @@ ruRU("Высота") srSP("Visina") trTR("Yükseklik") zhCN("高度") +zhTW("") T_("Ink") csCZ("Text") @@ -1928,6 +2054,7 @@ ruRU("Чернила") srSP("Tinta") trTR("Yazı rengi") zhCN("墨水") +zhTW("") T_("Paper") csCZ("Papír") @@ -1943,6 +2070,7 @@ ruRU("Бумага") srSP("Papir") trTR("Kağıt") zhCN("页") +zhTW("") T_("Style of next paragraph") csCZ("Styl následujícího odstavce") @@ -1958,6 +2086,7 @@ ruRU("Стиль следующего параграфа") srSP("Stil sledećeg paragrafa") trTR("Sonraki paragrafın stili") zhCN("下段格式") +zhTW("") T_("Character") csCZ("Znaky") @@ -1973,6 +2102,7 @@ ruRU("Символ") srSP("Karakter") trTR("Karakter") zhCN("字符") +zhTW("") T_("&Find:") csCZ("&Vyhledat") @@ -1988,6 +2118,7 @@ ruRU("&Найти:") srSP("&Pronađi:") trTR("&Bul:") zhCN("查找(&F):") +zhTW("") T_("&Replace:") csCZ("&Nahradit") @@ -2003,6 +2134,7 @@ ruRU("&Заменить:") srSP("&Zameni:") trTR("&Değiştir:") zhCN("替换(&R):") +zhTW("") T_("&Whole word") csCZ("&Celé slovo") @@ -2018,6 +2150,7 @@ ruRU("&Слово целиком") srSP("&Cela reč") trTR("&Sözün tümü") zhCN("全字(&W)") +zhTW("") T_("&Ignore case") csCZ("&Ignorovat velikost písma") @@ -2033,6 +2166,7 @@ ruRU("&Игнорировать регистр") srSP("&Ignoriši mala/velika slova") trTR("Büyük/Küçük harf &ayırma") zhCN("忽略大小写(&I)") +zhTW("") T_("&Replace") csCZ("N&ahradit") @@ -2048,6 +2182,7 @@ ruRU("&Заменить") srSP("&Zameni") trTR("&Değiştir") zhCN("替换(&R)") +zhTW("") T_("Header") csCZ("Záhlaví") @@ -2063,6 +2198,7 @@ ruRU("Заголовок") srSP("Zaglavlje") trTR("Üstbilgi") zhCN("头") +zhTW("") T_("Number of columns") csCZ("Počet sloupců") @@ -2078,6 +2214,7 @@ ruRU("Число столбцов") srSP("BRoj kolona") trTR("Sütun sayısı") zhCN("列数") +zhTW("") T_("Right margin") csCZ("Pravý okraj") @@ -2093,6 +2230,7 @@ ruRU("Поле справа") srSP("Desna margina") trTR("Sağdan boşluk") zhCN("右空白") +zhTW("") T_("Frame") csCZ("Rámeček") @@ -2108,6 +2246,7 @@ ruRU("Рамка") srSP("Okvir") trTR("Çerçeve") zhCN("边框") +zhTW("") T_("color") csCZ("barva") @@ -2123,6 +2262,7 @@ ruRU("цвет") srSP("boja") trTR("renk") zhCN("颜色") +zhTW("") T_("Grid") csCZ("Mřížka") @@ -2138,6 +2278,7 @@ ruRU("Сетка") srSP("Mreža") trTR("Kılavuz") zhCN("格") +zhTW("") T_("Equalize") csCZ("Vyrovnat") @@ -2153,6 +2294,7 @@ ruRU("") srSP("Izjednači") trTR("Eşitle") zhCN("相等") +zhTW("") T_("Remove table") csCZ("Odstranit tabulku") @@ -2168,6 +2310,7 @@ ruRU("Удалить таблицу") srSP("Ukloni tabelu") trTR("Tabloyu kaldır") zhCN("删除表格") +zhTW("") T_("Horizontal") csCZ("Vodorovně") @@ -2183,6 +2326,7 @@ ruRU("Горизонтально") srSP("Horizontalno") trTR("Yatay") zhCN("水平") +zhTW("") T_("Vertical") csCZ("Svisle") @@ -2198,6 +2342,7 @@ ruRU("Вертикально") srSP("Vertikalno") trTR("Dikey") zhCN("垂直") +zhTW("") T_("Borders") csCZ("Ohraničení") @@ -2213,6 +2358,7 @@ ruRU("Рамки") srSP("Granice") trTR("Kenarlıklar") zhCN("边框") +zhTW("") T_("Top") csCZ("Nahoře") @@ -2228,6 +2374,7 @@ ruRU("Верх") srSP("Vrh") trTR("Üst") zhCN("上部") +zhTW("") T_("Bottom") csCZ("Dole") @@ -2243,6 +2390,7 @@ ruRU("Низ") srSP("Dno") trTR("Alt") zhCN("底部") +zhTW("") T_("Margins") csCZ("Okraje") @@ -2258,6 +2406,7 @@ ruRU("Поля") srSP("Margine") trTR("Kenar boşlukları") zhCN("空白") +zhTW("") T_("Align") csCZ("Zarovnání") @@ -2273,6 +2422,7 @@ ruRU("Выровнять") srSP("Poravnanje") trTR("Yasla") zhCN("对齐") +zhTW("") T_("Top\nCenter\nBottom") csCZ("Horní okraj\nStřed\nDolní okraj") @@ -2288,6 +2438,7 @@ ruRU("Верх\nЦентр\nНиз") srSP("Vrh\nSredina\nDno") trTR("Üst\nOrta\nAlt") zhCN("上\n中\n下") +zhTW("") T_("Border") csCZ("Ohraničení") @@ -2303,6 +2454,7 @@ ruRU("Рамка") srSP("Granica") trTR("Kenarlık") zhCN("边框") +zhTW("") T_("Background") csCZ("Pozadí") @@ -2318,6 +2470,7 @@ ruRU("Цвет фона") srSP("Pozadina") trTR("Arkaplan") zhCN("背景") +zhTW("") T_("Minimal height") csCZ("Minimální výška") @@ -2333,6 +2486,7 @@ ruRU("") srSP("") trTR("Asgari boyut") zhCN("最小高的") +zhTW("") T_("Keep with next line") csCZ("Svázat s následujícím řádkem") @@ -2348,6 +2502,7 @@ ruRU("Придерживаться следующей линии") srSP("Drži sa sledećom linijom") trTR("Sonraki ile birlikte") zhCN("与下一行保持一致") +zhTW("") // Obsolete @@ -2366,6 +2521,7 @@ ruRU("Отступ") srSP("") trTR("Girinti") zhCN("缩进") +zhTW("") T_("Layout") csCZ("Rozvržení") @@ -2381,3 +2537,4 @@ ruRU("Раскладка") srSP("Raspored") trTR("Düzen") zhCN("布局") +zhTW("") diff --git a/uppsrc/TCtrlLib/Calc/Calc.upp b/uppsrc/TCtrlLib/Calc/Calc.upp index 281e3b0a4..5b8e88100 100644 --- a/uppsrc/TCtrlLib/Calc/Calc.upp +++ b/uppsrc/TCtrlLib/Calc/Calc.upp @@ -10,3 +10,4 @@ file DlgCalc.cpp, DlgCalc.lay, CalcHelp.cpp; + diff --git a/uppsrc/Web/SSL/SSL.upp b/uppsrc/Web/SSL/SSL.upp index 7f2abc58e..06a248923 100644 --- a/uppsrc/Web/SSL/SSL.upp +++ b/uppsrc/Web/SSL/SSL.upp @@ -1,37 +1,37 @@ -uses - Web; - -acceptflags - NOSSL; - -library(WIN32 !NOSSL !SHARED) "out32\\ssleay32 out32\\libeay32"; - -library(WIN32) "gdi32"; - -library(LINUX !NOSSL) "crypto ssl"; - -library(WIN32 !NOSSL SHARED) "out32dll\\ssleay32.lib out32dll\\libeay32.lib "; - -link(WIN32 DEBUG MSC SO) "/nodefaultlib:libc"; - -link(WIN32 MT MSC SO) "/nodefaultlib:libc"; - -link(WIN32 DEBUG MSC71 SO) "/nodefaultlib:libc"; - -link(WIN32 MT MSC71 SO) "/nodefaultib:libc"; - -link(WIN32 DEBUG MSC) "/nodefaultlib:libc"; - -link(WIN32 MT MSC) "/nodefaultlib:libc"; - -link(WIN32 DEBUG MSC71) "/nodefaultlib:libc"; - -link(WIN32 MT MSC71) "/nodefaultlib:libc"; - -file - WebSSL.h, - util.cpp, - Info readonly separator, - Copying, - Copying-plain, - Authors; +uses + Web; + +acceptflags + NOSSL; + +library(WIN32 !NOSSL !SHARED) "out32\\ssleay32 out32\\libeay32"; + +library(WIN32) "gdi32"; + +library(LINUX !NOSSL) "crypto ssl"; + +library(WIN32 !NOSSL SHARED) "out32dll\\ssleay32.lib out32dll\\libeay32.lib "; + +link(WIN32 DEBUG MSC SO) "/nodefaultlib:libc"; + +link(WIN32 MT MSC SO) "/nodefaultlib:libc"; + +link(WIN32 DEBUG MSC71 SO) "/nodefaultlib:libc"; + +link(WIN32 MT MSC71 SO) "/nodefaultib:libc"; + +link(WIN32 DEBUG MSC) "/nodefaultlib:libc"; + +link(WIN32 MT MSC) "/nodefaultlib:libc"; + +link(WIN32 DEBUG MSC71) "/nodefaultlib:libc"; + +link(WIN32 MT MSC71) "/nodefaultlib:libc"; + +file + WebSSL.h, + util.cpp, + Info readonly separator, + Copying, + Copying-plain, + Authors; diff --git a/uppsrc/Web/Web.t b/uppsrc/Web/Web.t index 079b29bba..8dbf4738d 100644 --- a/uppsrc/Web/Web.t +++ b/uppsrc/Web/Web.t @@ -19,6 +19,7 @@ srSP("") trTR("Eğer otomatik olarak yönlendirlmediyseniz lütfen %s bağlantısını " "kullanın.") zhCN("如果没有自动重定向,请使用%s.") +zhTW("") T_("this link") csCZ("tento odkaz") @@ -34,6 +35,7 @@ ruRU("эту ссылку") srSP("") trTR("bu bağlantı") zhCN("本链接") +zhTW("") T_("Redirection to another web address") csCZ("Přesměrování na jinou adresu") @@ -49,6 +51,7 @@ ruRU("Перенаправление на другой веб адрес") srSP("") trTR("başka bir ağ adresine yönlendiriliyor") zhCN("重定向到其他web地址") +zhTW("") T_("... (total length: %d bytes)") csCZ("... (celková délka: %d bytů)") @@ -64,6 +67,7 @@ ruRU("... (полный размер: %d байт)") srSP("") trTR("... (toplam boyut: %d byte)") zhCN("... (总长: %d 字节)") +zhTW("") T_("The web server is unable to satisfy your request:\n

\n") csCZ("Internetový server nebyl schopen vyřídit požadavek:\n

\n") @@ -81,6 +85,7 @@ ruRU("Этот веб сервер не может удовлетворить " srSP("") trTR("Ağ sunucusu isteğinizi yerine getiremiyor:\n

\n") zhCN("web服务器不支持您的请求:\n

\n") +zhTW("") T_("Reason:") csCZ("Důvod chyby: ") @@ -96,6 +101,7 @@ ruRU("Причина:") srSP("") trTR("Sebep:") zhCN("原因:") +zhTW("") T_("Detailed query data:") csCZ("Detailní informace o dotazu:") @@ -111,6 +117,7 @@ ruRU("Детали запроса:") srSP("") trTR("Detaylı sorgulama verileri:") zhCN("详细查询数据") +zhTW("") T_("Web server error") csCZ("Chyba internetového serveru") @@ -126,6 +133,7 @@ ruRU("Ошибка веб сервера") srSP("") trTR("Sunucu hatası") zhCN("Web服务器错误") +zhTW("") // httpcli.cpp @@ -145,6 +153,7 @@ ruRU("%s:%d превишен интервал ожидания при получ srSP("") trTR("%s:%d: Üstbilgi alışverişi zaman aşımına uğradı.") zhCN("%s:%d 接收头超时") +zhTW("") T_("%s:%d: connecting to host timed out") csCZ("%s:%d: vypršel časový limit pro připojení k hostiteli") @@ -161,6 +170,7 @@ ruRU("%s:%d превишен интервал ожидания при подкл srSP("") trTR("%s:%d: Sunucu bağlantısı zaman aşımına uğradı") zhCN("%s:%d: 连接到主机超时") +zhTW("") T_("%s:%d: timed out sending request to server") csCZ("%s:%d: vypršel časový limit při odesílání požadavku") @@ -176,6 +186,7 @@ ruRU("%s:%d: таймаут отправки запроса на сервер") srSP("") trTR("%s:%d: İstek zaman aşımına uğradı") zhCN("%s:%d: 发送请求到服务器超时") +zhTW("") T_("%s:%d: invalid server response: %s") csCZ("%s:%d: neplatná odezva ze serveru: %s") @@ -191,6 +202,7 @@ ruRU("%s:%d: неправильный ответ сервера: %s") srSP("") trTR("%s:%d: Sunucudan gelen yanıt geçersiz") zhCN("%s:%d: 无效服务器反应: %s") +zhTW("") T_("%s:%d: maximum data length exceeded (%d B)") csCZ("%s:%d: byla překročena maximální délka dat (%d B)") @@ -207,6 +219,7 @@ ruRU("%s:%d: превышен максимальный размер данных srSP("") trTR("%s:%d: maksimum veri boyutu aşıldı (%d B)") zhCN("%s:%d: 超出了最大数据长度(%d B)") +zhTW("") T_("%s:%d: maximum header length exceeded (%d B)") csCZ("%s:%d: byla překročena maximální délka hlaviček (%d B)") @@ -223,6 +236,7 @@ ruRU("%s:%d: превышен максимальный размер заголо srSP("") trTR("%s:%d:Maksimum üstbilgi boyutu aşıldı (%d B)") zhCN("%s:%d: 超出了最大头长度(%d B)") +zhTW("") T_("%s:%d: timed out when receiving server response") csCZ("%s:%d: vypršel časový limit při načítání odpovědi") @@ -238,6 +252,7 @@ ruRU("%s:%d: таймаут при приёме ответа от сервера srSP("") trTR("%s:%d: Sunucudan yanıt beklenirken zaman aşımı meydana geldi") zhCN("%s:%d: 接收服务器反应时超时") +zhTW("") T_("Maximum content size exceeded: %d") csCZ("Překročena maximální povolená délka datového obsahu: %d") @@ -254,6 +269,7 @@ ruRU("Превышен максимальный размер содержимо srSP("") trTR("Maksimum içerik boyutu aşıldı: %d") zhCN("最大内容长度超出:%d") +zhTW("") T_("Partial input: %d out of %d") csCZ("Přijata neúplná data: %d z %d") @@ -269,6 +285,7 @@ ruRU("Частичный ввод: %d из %d") srSP("") trTR("Kısmi girdi: %d/%d") zhCN("部分输入: %d out of %d") +zhTW("") // smtp.cpp @@ -287,6 +304,7 @@ ruRU("Ошибка связи. Таймаут.") srSP("") trTR("Bağlantı başarısız: Zaman aşımı.") zhCN("") +zhTW("") T_("Error writing data to socket: communication port closed.") csCZ("Chyba při zápisu dat do socketu: komunikační kanál byl uzavřen.") @@ -303,6 +321,7 @@ ruRU("Ошибка посылки данных в сокет: порт связ srSP("") trTR("Sokete yazma hatası: bağlantı kesildi.") zhCN("") +zhTW("") T_("Error writing data to socket, error code: ") csCZ("Chyba při zápisu dat do socketu, kód chyby: ") @@ -318,6 +337,7 @@ ruRU("Ошибка посылки данных в сокет: код оибки: srSP("") trTR("Sokete yazma hatası meydana geldi. Hata kodu: ") zhCN("") +zhTW("") T_("Error reading data from socket: commuication port closed.") csCZ("Chyba při čtení dat ze socketu: komunikační kanál byl uzavřen.") @@ -334,6 +354,7 @@ ruRU("Ошибка чтения данных из сокета: порт свя srSP("") trTR("Soket okuma hatası: bağlantı kesildi.") zhCN("") +zhTW("") T_("Host not set.") csCZ("Hostitel není zadán.") @@ -349,6 +370,7 @@ ruRU("Сервер не определен") srSP("") trTR("Host hazır değil.") zhCN("") +zhTW("") T_("Recipient not set.") csCZ("Není zadán příjemce.") @@ -364,6 +386,7 @@ ruRU("Получатель не определен") srSP("") trTR("Alıcı hazır değil.") zhCN("") +zhTW("") // sproc.cpp @@ -382,6 +405,7 @@ ruRU("ошибка pipe(); код ошибки = %d") srSP("") trTR("pipe() hatası; hata kodu = %d") zhCN("pipe() error; error code = %d") +zhTW("") T_("fork() error; error code = %d") csCZ("chyba fork(); kód chyby = %d") @@ -397,6 +421,7 @@ ruRU("ошибка fork(); код ошибки = %d") srSP("") trTR("fork() hatası; hata kodu = %d") zhCN("fork() error; error code = %d") +zhTW("") T_("Opening host '%s' / port %d failed, error = %s") csCZ("Připojování k hostiteli '%s' / port %d selhalo, chyba = %s") @@ -414,6 +439,7 @@ srSP("") trTR("'%s' hostuna '%d' portundan bağlanma girişi başarısız oldu. Hata " "= %s") zhCN("Opening host '%s' / port %d failed, error = %s") +zhTW("") T_("Error running process: %s\nCommand: %s") csCZ("Chyba při spouštění procesu: %s\nPříkaz: %s") @@ -431,6 +457,7 @@ srSP("") trTR("'%s' işleminin çalıştırılması sırasında hata oluştu\nKomut: " "%s") zhCN("运行进城错误:%s\n命令: %s") +zhTW("") T_("Communication error; process = %s") csCZ("Chyba spojení; proces = %s") @@ -446,6 +473,7 @@ ruRU("Ошибка коммуникации; процесс = %s") srSP("") trTR("İletişim hatası; işlem = %s") zhCN("通信错误; 进城 = %s") +zhTW("") T_("Missing command line (host = %s).") csCZ("Chybí příkazová řádka (hostitel = %s).") @@ -461,6 +489,7 @@ ruRU("Не указана командная строка (хост = %s)") srSP("") trTR("Eksik komut satırı (Host = %s).") zhCN("缺少命令行(主机 = %s).") +zhTW("") // Obsolete @@ -479,3 +508,4 @@ ruRU("Не могу открыть сокет %s:%d: %s") srSP("") trTR("Hata: Soket açılamadı. %s:%d: %s") zhCN("") +zhTW("") diff --git a/uppsrc/Web/html.cpp b/uppsrc/Web/html.cpp index cd12eb6d0..93d1bb22f 100644 --- a/uppsrc/Web/html.cpp +++ b/uppsrc/Web/html.cpp @@ -292,7 +292,7 @@ HtmlTag HtmlSelect(String name) { return HtmlTag("SELECT").Name(name); } -Htmls HtmlOption(const Value& val, const char *text, bool selected) +Htmls HtmlOption(Value val, const char *text, bool selected) { HtmlTag option("OPTION"); option.Data(val); diff --git a/uppsrc/Web/smtp.cpp b/uppsrc/Web/smtp.cpp index c6068d854..55c28468c 100644 --- a/uppsrc/Web/smtp.cpp +++ b/uppsrc/Web/smtp.cpp @@ -111,11 +111,9 @@ static String SendRecv(Socket& socket, const String& s, String *transcript = 0, } } else if(amount == 0) - throw Exc(t_("Error reading data from socket: commuication port closed.")); - else if((err = Socket::GetErrorCode()) != SOCKERR(EWOULDBLOCK)) { - String str; - throw Exc(str << "Chyba pi ten dat ze socketu, kd chyby: " << err); - } + throw Exc(t_("Error reading data from socket: communication port closed.")); + else if((err = Socket::GetErrorCode()) != SOCKERR(EWOULDBLOCK)) + throw Exc(NFormat(t_("Error reading socket, error code: %s"), err)); else Sleep(100); } @@ -205,6 +203,21 @@ bool SmtpMail::Send() org << ipaddr; SendRecvOK(socket, "HELO " + org + "\r\n", trans_ptr); + if(!IsNull(auth_user)) { + String ans = SendRecv(socket, "AUTH LOGIN\r\n", trans_ptr); + while(ans[0] != '2') + if(ans[0] == '3' && ans[1] == '3' && ans[2] == '4' && ans[3] == ' ') { + String param = Base64Decode(ans.GetIter(4), ans.End()); + if(param == "Username:") + ans = SendRecv(socket, Base64Encode(auth_user) + "\r\n", trans_ptr); + else if(param == "Password:") + ans = SendRecv(socket, Base64Encode(auth_pwd) + "\r\n", trans_ptr); + else + throw Exc(ans); + } + else + throw Exc(ans); + } SendRecvOK(socket, "MAIL FROM:<" + from + ">\r\n", trans_ptr); for(int i = 0; i < to.GetCount(); i++) SendRecv(socket, "RCPT TO:<" + to[i] + ">\r\n", trans_ptr); diff --git a/uppsrc/Web/smtp.h b/uppsrc/Web/smtp.h index b8414207d..3b09aae7f 100644 --- a/uppsrc/Web/smtp.h +++ b/uppsrc/Web/smtp.h @@ -18,6 +18,7 @@ public: SmtpMail& Transcript(bool t = true) { transcript = t; return *this; } SmtpMail& AttachFile(const char *filename, const char *mime = 0); SmtpMail& Attach(const char *name, String data, const char *mime = 0); + SmtpMail& Auth(String user, String pwd) { auth_user = user; auth_pwd = pwd; return *this; } bool Send(); @@ -35,6 +36,8 @@ private: String host; int port; // default = 25 + String auth_user; + String auth_pwd; String from; Vector to; Vector as; diff --git a/uppsrc/art/BlueBar/BlueBar.upp b/uppsrc/art/BlueBar/BlueBar.upp index e793192f3..c67816d31 100644 --- a/uppsrc/art/BlueBar/BlueBar.upp +++ b/uppsrc/art/BlueBar/BlueBar.upp @@ -1,6 +1,7 @@ -description "Visual style for ToolBar and MenuBar"; - -file - BlueBar.h, - BlueSkin.iml, - BlueSkin.cpp; +description "Visual style for ToolBar and MenuBar"; + +file + BlueBar.h, + BlueSkin.iml, + BlueSkin.cpp; + diff --git a/uppsrc/ide/Export.cpp b/uppsrc/ide/Export.cpp index 952bd667d..f733fcf31 100644 --- a/uppsrc/ide/Export.cpp +++ b/uppsrc/ide/Export.cpp @@ -1,92 +1,92 @@ -#include "ide.h" - -void CopyFolder(const char *_dst, const char *_src, Index& used, bool all) -{ - String dst = NativePath(_dst); - String src = NativePath(_src); - DUMP(_dst); - DUMP(dst); - DUMP(src); - DUMP(_src); - if(dst == src) - return; - FindFile ff(AppendFileName(src, "*")); - bool realize = true; - while(ff) { - String s = AppendFileName(src, ff.GetName()); - String d = AppendFileName(dst, ff.GetName()); - DUMP(s); - DUMP(d); - if(ff.IsFolder()) - CopyFolder(d, s, used, all); - else - if(ff.IsFile() && (all || used.Find(s) >= 0)) { - if(realize) { - RealizeDirectory(dst); - realize = false; - } - DUMP(d); - SaveFile(d, LoadFile(s)); - SetFileTime(d, ff.GetLastWriteTime()); - } - ff.Next(); - } -} - -void Ide::ExportProject() { - WithExportLayout dlg; - CtrlLayoutOKCancel(dlg, "Export project"); - FrameRight