void findarg(cons_t *root, cons_t *arg_name) { int arg_number = 0; cons_t *search_name = NULL; switch (root->type) { case L_K: if (root->car != NULL) { findarg(root->car, arg_name); } if (root->cdr != NULL) { findarg(root->cdr, arg_name); } break; case STR: search_name = arg_name; while (search_name != NULL) { if (strcmp(root->cvalue, search_name->cvalue) == 0) { root->type = ARG; root->ivalue = arg_number; break; } search_name = search_name->cdr; arg_number++; } if (root->cdr != NULL) { findarg(root->cdr, arg_name); } break; default: if (root->cdr != NULL) { findarg(root->cdr, arg_name); } } }
bool MenuMouseHook(Ctrl *ctrl, bool inframe, int event, Point p, int zdelta, dword keyflags) { if(findarg(event & Ctrl::ACTION, Ctrl::MOUSEWHEEL, Ctrl::DOWN, Ctrl::UP) >= 0) s_doaltkey = false; return false; }
void Navigator::ListLineEnabled(int i, bool& b) { if(i >= 0 && i < litem.GetCount()) { int kind = litem[i]->kind; if(findarg(kind, KIND_FILE, KIND_NEST) >= 0) b = false; } }
/* Find the first non-option argument after specified option. */ int nonoptafter(char *option, int argc, char **oldargv, char **newargv, int optind) { int x; int targetind; int testind; int startat = 1; targetind = findarg(option, 1, argc, oldargv); for (x = optind; x < argc; x++) { testind = findarg(newargv[x], startat, argc, oldargv); if (testind > targetind) return x; else startat = testind; } return x; }
NAMESPACE_UPP #define LTIMING(x) // RTIMING(x) #define LLOG(x) // DLOG(x) bool IsCPPFile(const String& path) { return findarg(ToLower(GetFileExt(path)) , ".c", ".cpp", ".cc" , ".cxx", ".icpp") >= 0; }
void LogSyntax::Highlight(const wchar *s, const wchar *end, HighlightOutput& hls, CodeEditor *editor, int line, int pos) { const HlStyle& ink = hl_style[INK_NORMAL]; HlStyle err = hl_style[INK_ERROR]; err.bold = true; bool hl_line = false; bool sep_line = false; while(s < end) { int c = *s; const wchar *s0 = s; if(s + 3 <= end && (Is3(s, '-') || Is3(s, '*') || Is3(s, '=') || Is3(s, '+') || Is3(s, '#') || Is3(s, ':') || Is3(s, '%') || Is3(s, '$'))) sep_line = true; if(IsDigit(c)) s = HighlightNumber(hls, s, thousands_separator, false, false); else if(c == '\'' || c == '\"') { s++; for(;;) { if(s >= end) { hls.Put(1, ink); s = s0 + 1; break; } if(*s == c) { s++; hls.Put((int)(s - s0), hl_style[INK_CONST_STRING]); break; } s += 1 + (s[0] == '\\' && s[1] == c); } } else if(IsAlpha(c) || c == '_') { static Index<String> rws; ONCELOCK { rws << "error" << "errors" << "warning" << "warnings" << "failed" << "exit" << "fatal" << "failure" << "rejected"; } String w; while(s < end && IsAlNum(*s) || *s == '_') w.Cat(ToLower(*s++)); bool hl = rws.Find(w) >= 0; hls.Put(w.GetCount(), hl ? err : ink); hl_line = hl_line || hl; } else { bool hl = findarg(c, '[', ']', '(', ')', ':', '-', '=', '{', '}', '/', '<', '>', '*', '#', '@', '\\', '.') >= 0; hls.Put(1, hl ? hl_style[INK_OPERATOR] : ink); s++; } }
void Navigator::NavigatorDisplay::PaintBackground(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const { int ii = q; if(ii < 0 || ii >= item.GetCount()) return; const NavItem& m = *item[ii]; bool focuscursor = (style & (FOCUS|CURSOR)) == (FOCUS|CURSOR) || (style & SELECT); if(findarg(m.kind, KIND_FILE, KIND_NEST) >= 0) w.DrawRect(r, focuscursor ? paper : m.kind == KIND_NEST ? Blend(SColorMark, SColorPaper, 220) : SColorFace); else w.DrawRect(r, paper); }
int Navigator::NavigatorDisplay::DoPaint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const { int ii = q; if(ii < 0 || ii >= item.GetCount()) return 0; const NavItem& m = *item[ii]; bool focuscursor = (style & (FOCUS|CURSOR)) == (FOCUS|CURSOR) || (style & SELECT); int x = r.left; int ry = r.top + r.GetHeight() / 2; int y = ry - Draw::GetStdFontCy() / 2; if(findarg(m.kind, KIND_FILE, KIND_NEST) >= 0) { w.DrawRect(r, focuscursor ? paper : m.kind == KIND_NEST ? Blend(SColorMark, SColorPaper, 220) : SColorFace); if(m.kind == KIND_FILE) return PaintFileName(w, r, m.type, ink); String h = FormatNest(m.type); w.DrawText(x, y, h, StdFont().Bold(), ink); return GetTextSize(h, StdFont().Bold()).cx; } w.DrawRect(r, paper); if(m.kind == KIND_LINE) { w.DrawText(x, y, m.type, StdFont().Bold(), ink); return GetTextSize(m.type, StdFont().Bold()).cx; } PaintCppItemImage(w, x, ry, m.access, m.kind, focuscursor); x += Zx(15); Vector<ItemTextPart> n = ParseItemNatural(m.name, m.natural, m.ptype, m.pname, m.type, m.tname, m.ctname, ~m.natural + m.at); int starti = 0; for(int i = 0; i < n.GetCount(); i++) if(n[i].type == ITEM_NAME) { starti = i; break; } PaintText(w, x, y, m.natural, n, starti, n.GetCount(), focuscursor, ink, false); if(starti) { const char *h = " : "; w.DrawText(x, y, h, BrowserFont(), SColorText); x += GetTextSize(h, BrowserFont()).cx; } PaintText(w, x, y, m.natural, n, 0, starti, focuscursor, ink, false); return x; }
void Ide::MakeTitle() { String title; if(!main.IsEmpty()) title << main; if(!mainconfigname.IsEmpty() && mainconfigname == mainconfigparam) title << " - " << mainconfigname; else if(!mainconfigname.IsEmpty()) { title << " - " << mainconfigname; title << " ( " << mainconfigparam << " )"; } if(!title.IsEmpty()) title << " - "; title << "TheIDE"; if(designer) { title << " - [" << designer->GetFileName(); int cs = designer->GetCharset(); if(cs >= 0) title << " " << CharsetName(cs); title << "]"; } else if(!editfile.IsEmpty()) { title << " - [" << editfile; int chrset = editor.GetCharset(); title << " " << IdeCharsetName(chrset) << " " << (findarg(Nvl(editfile_line_endings, line_endings), LF, DETECT_LF) >= 0 ? "LF" : "CRLF"); if(editor.IsTruncated()) title << " (Truncated)"; if(editor.IsReadOnly()) title << " (Read Only)"; if(editor.IsDirty()) title << " *"; title << "]"; } if(!IsNull(editfile)) for(int i = 0; i < 10; i++) if(NormalizePath(editfile) == NormalizePath(bookmark[i].file)) title << Format(" <%d>", i); title << " { " << GetVarsName() << " }"; if(isscanning) title << " (scanning files)"; Title(title.ToWString()); }
void LoadPPConfig() { for(int i = 0; i < sAllMacros.GetCount(); i++) if(sAllMacros[i].segment_id == 0 && !sAllMacros.IsUnlinked(i)) sAllMacros.Unlink(i); s_namespace_macro.Clear(); s_namespace_end_macro.Clear(); StringStream ss(sDefs); int linei = 0; while(!ss.IsEof()) { String l = ss.GetLine(); try { CParser p(l); if(p.Char('#')) { if(p.Id("define")) { CppMacro def; String id = def.Define(p.GetPtr()); if(id.GetCount()) { PPMacro m; m.segment_id = 0; m.line = linei; m.macro = def; sAllMacros.Put(id, m); if(findarg(TrimBoth(def.body), "}", "};") >= 0) s_namespace_end_macro.Add(id); try { CParser p(def.body); if(p.Id("namespace") && p.IsId()) { String n = p.ReadId(); if(p.Char('{') && p.IsEof()) s_namespace_macro.Add(id, n); } } catch(CParser::Error) {} } } } } catch(CParser::Error) {} linei++; } }
bool Ctrl::ProcessEvent0(bool *quit, bool fetch) { ASSERT(IsMainThread()); bool r = false; if(IsWaitingEvent0(fetch)) { while(Events.GetCount() > 1) { // Event compression (coalesce autorepeat, mouse moves/wheel, configure) Event& a = Events[0]; Event& b = Events[1]; if(b.type == a.type && a.windowid == b.windowid && a.state == b.state) { if(a.type == GDK_KEY_PRESS && a.value == b.value) b.count += a.count; else if(a.type == GDK_SCROLL) b.value = (int)b.value + (int)a.value; else if(findarg(a.type, GDK_MOTION_NOTIFY, GDK_CONFIGURE) < 0) break; Events.DropHead(); } else break; FocusSync(); } Event& e = Events.Head(); CurrentTime = e.time; CurrentMousePos = e.mousepos; CurrentState = e.state; CurrentEvent = e; Value val = e.value; Events.DropHead(); Ctrl *w = GetTopCtrlFromId(e.windowid); FocusSync(); CaptureSync(); if(w) w->Proc(); r = true; } if(quit) *quit = IsEndSession(); FocusSync(); SyncCaret(); return r; }
int def(cons_t *next) { int count; cons_t *now = NULL; now = next->cdr; count = getfunc(now->cvalue); if (g_fa[count].key == NULL) { g_fa[count].key = (char*)malloc(strlen(now->cvalue) + 1); strcpy(g_fa[count].key, now->cvalue); } next = now; now = now->cdr; g_fa[count].exp = now->cdr; findfunc(now->cdr, next->cvalue, count); next = now->car; findarg(now->cdr, next); now->cdr = NULL; printf("define %s\n",g_fa[count].key); return 0; }
dword fbKEYtoK(dword chr) { if(findarg(chr, 9, 0xd) < 0) chr = chr + K_DELTA; if(chr == K_ALT_KEY || chr == K_CTRL_KEY || chr == K_SHIFT_KEY) return chr; if(GetCtrl()) chr |= K_CTRL; if(GetAlt()) chr |= K_ALT; if(GetShift()) chr |= K_SHIFT; return chr; /* if(chr == SDLK_TAB) chr = K_TAB; else if(chr == SDLK_SPACE) chr = K_SPACE; else if(chr == SDLK_RETURN) chr = K_RETURN; else chr = chr + K_DELTA; */ }
bool IsHFile(const String& path) { return findarg(ToLower(GetFileExt(path)) , ".h", ".hpp", ".hxx" , ".hh") >= 0; }
gboolean Ctrl::GtkEvent(GtkWidget *widget, GdkEvent *event, gpointer user_data) { GuiLock __; GdkEventKey *key; bool pressed = false; bool retval = true; Value value; Ctrl *p = GetTopCtrlFromId(user_data); #ifdef LOG_EVENTS String ev = "?"; Tuple2<int, const char *> *f = FindTuple(xEvent, __countof(xEvent), event->type); if(f) ev = f->b; LOG(rmsecs() << " FETCH EVENT " << ev << " ctrl: " << Name(p)); #endif switch(event->type) { case GDK_EXPOSE: case GDK_DAMAGE: if(p) { #ifdef LOG_EVENTS TimeStop tm; #endif p->fullrefresh = false; GdkEventExpose *e = (GdkEventExpose *)event; SystemDraw w(gdk_cairo_create(p->gdk()), p->gdk()); painting = true; Rect r = RectC(e->area.x, e->area.y, e->area.width, e->area.height); w.SetInvalid(e->region); w.Clip(r); p->UpdateArea(w, r); w.End(); cairo_destroy(w); if(p->top->dr) DrawDragRect(*p, *p->top->dr); painting = false; #ifdef LOG_EVENTS LOG("* " << ev << " elapsed " << tm); #endif } return true; case GDK_DELETE: break; case GDK_FOCUS_CHANGE: if(p) { if(((GdkEventFocus *)event)->in) gtk_im_context_focus_in(p->top->im_context); else gtk_im_context_focus_out(p->top->im_context); AddEvent(user_data, EVENT_NONE, value, event); } return false; case GDK_LEAVE_NOTIFY: case GDK_MOTION_NOTIFY: break; case GDK_BUTTON_PRESS: value = DoButtonEvent(event, true); if(IsNull(value)) return false; break; case GDK_2BUTTON_PRESS: value = DoButtonEvent(event, true); if(IsNull(value)) return false; break; case GDK_BUTTON_RELEASE: value = DoButtonEvent(event, false); if(IsNull(value)) return false; break; case GDK_SCROLL: { GdkEventScroll *e = (GdkEventScroll *)event; value = findarg(e->direction, GDK_SCROLL_UP, GDK_SCROLL_LEFT) < 0 ? -120 : 120; break; } case GDK_KEY_PRESS: pressed = true; case GDK_KEY_RELEASE: key = (GdkEventKey *)event; value = (int) key->keyval; if(pressed) { p = GetTopCtrlFromId(user_data); if(p && gtk_im_context_filter_keypress(p->top->im_context, key)) return true; } break; case GDK_CONFIGURE: { retval = false; GdkEventConfigure *e = (GdkEventConfigure *)event; value = RectC(e->x, e->y, e->width, e->height); LLOG("GDK_CONFIGURE " << value); break; } default: return false; } AddEvent(user_data, event->type, value, event); return retval; }
bool Pdb::RunToException() { DR_LOG("RunToException"); LLOG("RUN TO EXCEPTION"); TimeStop ts; bool disasfocus = disas.HasFocus(); bool locked = false; bool frestored = false; invalidpage.Clear(); mempage.Clear(); int opn = 0; for(;;) { if(terminated) { if(locked) Unlock(); return false; } opn++; DR_LOG("WaitForDebugEvent"); if(WaitForDebugEvent(&event, 0)) { DR_LOG("WaitForDebugEvent ended"); debug_threadid = event.dwThreadId; opn = 0; running = false; switch(event.dwDebugEventCode) { case EXCEPTION_DEBUG_EVENT: { DR_LOG("EXCEPTION_DEBUG_EVENT"); LLOG("Exception: " << FormatIntHex(event.u.Exception.ExceptionRecord.ExceptionCode) << " at: " << FormatIntHex(event.u.Exception.ExceptionRecord.ExceptionAddress) << " first: " << event.u.Exception.dwFirstChance); SaveForeground(); const EXCEPTION_RECORD& x = event.u.Exception.ExceptionRecord; if(findarg(x.ExceptionCode, EXCEPTION_BREAKPOINT, EXCEPTION_SINGLE_STEP, STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP) < 0) { LLOG("Non-debug EXCEPTION"); if(event.u.Exception.dwFirstChance) { LLOG("First chance " << FormatIntHex(x.ExceptionCode)); break; } String desc = Format("Exception: [* %lX] at [* %16llX]&", (int64)x.ExceptionCode, (int64)x.ExceptionAddress); for(int i = 0; i < __countof(ex_desc); i++) if(ex_desc[i].code == x.ExceptionCode) desc << "[* " << DeQtf(ex_desc[i].text) << "]&"; if(x.ExceptionCode == EXCEPTION_ACCESS_VIOLATION) { desc << (x.ExceptionInformation[0] ? "[*@3 writing]" : "[*@4 reading]"); desc << Format(" at [* %08llX]", (int64)x.ExceptionInformation[1]); } ToForeground(); PromptOK(desc); } #ifdef CPU_64 if(!win64 && x.ExceptionCode == EXCEPTION_BREAKPOINT && !break_running) // Ignore x64 breakpoint in wow64 break; #endif if(break_running) debug_threadid = mainThreadId; break_running = false; ToForeground(); if(disasfocus) disas.SetFocus(); if(locked) Unlock(); if(refreshmodules) LoadModuleInfo(); LLOG("event.dwThreadId = " << event.dwThreadId); bool isbreakpoint = findarg(x.ExceptionCode, EXCEPTION_BREAKPOINT, STATUS_WX86_BREAKPOINT) >= 0; for(int i = 0; i < threads.GetCount(); i++) { Thread& t = threads[i]; (Context&)t = ReadContext(threads[i].hThread); if(event.dwThreadId == threads.GetKey(i)) { LLOG("Setting current context"); if(isbreakpoint #ifdef CPU_64 && bp_set.Find((win64 ? t.context64.Rip : t.context32.Eip) - 1) >= 0 #else && bp_set.Find(t.context32.Eip - 1) >= 0 #endif ) // We have stopped at breakpoint, need to move address back #ifdef CPU_64 if(win64) t.context64.Rip--; else #endif t.context32.Eip--; context = t; } } RemoveBp(); return true; } case CREATE_THREAD_DEBUG_EVENT: DR_LOG("CREATE_THREAD_DEBUG_EVENT"); LLOG("Create thread: " << event.dwThreadId); AddThread(event.dwThreadId, event.u.CreateThread.hThread); break; case EXIT_THREAD_DEBUG_EVENT: DR_LOG("EXIT_THREAD_DEBUG_EVENT"); LLOG("Exit thread: " << event.dwThreadId); RemoveThread(event.dwThreadId); break; case CREATE_PROCESS_DEBUG_EVENT: DR_LOG("CREATE_PROCESS_DEBUG_EVENT"); LLOG("Create process: " << event.dwProcessId); processid = event.dwProcessId; AddThread(event.dwThreadId, event.u.CreateProcessInfo.hThread); CloseHandle(event.u.CreateProcessInfo.hFile); CloseHandle(event.u.CreateProcessInfo.hProcess); break; case EXIT_PROCESS_DEBUG_EVENT: DR_LOG("EXIT_PROCESS_DEBUG_EVENT"); LLOG("Exit process: " << event.dwProcessId); if(locked) Unlock(); terminated = true; return false; case LOAD_DLL_DEBUG_EVENT: { DR_LOG("LOAD_DLL_DEBUG_EVENT"); LLOG("Load dll: " << event.u.LoadDll.lpBaseOfDll); CloseHandle(event.u.LoadDll.hFile); refreshmodules = true; break; } case UNLOAD_DLL_DEBUG_EVENT: DR_LOG("UNLOAD_DLL_DEBUG_EVENT"); LLOG("UnLoad dll: " << event.u.UnloadDll.lpBaseOfDll); refreshmodules = true; break; case RIP_EVENT: DR_LOG("RIP_EVENT"); LLOG("RIP!"); Exclamation("Process being debugged died unexpectedly!"); terminated = true; if(locked) Unlock(); return false; } DR_LOG("ContinueDebugEvent"); ContinueDebugEvent(event.dwProcessId, event.dwThreadId, DBG_EXCEPTION_NOT_HANDLED); running = true; } if(ts.Elapsed() > 200) { DR_LOG("ts.Elpsed() > 200"); if(!lock) { Lock(); locked = true; } if(!frestored) { RestoreForeground(); frestored = true; } } if(lock) { DR_LOG("GuiSleep"); GuiSleep(opn < 1000 ? 0 : 100); Ctrl::ProcessEvents(); } else { DR_LOG("Sleep"); Sleep(opn < 1000 ? 0 : 100); } } }
SrcFile PreProcess(Stream& in, Parser& parser) // This is not really C preprocess, only removes (or processes) comment and directives { SrcFile res; bool include = true; int lineno = 0; while(!in.IsEof()) { String ln = in.GetLine(); lineno++; SLPos(res); while(*ln.Last() == '\\') { ln.Trim(ln.GetLength() - 1); ln.Cat(in.GetLine()); SLPos(res); } const char *rm = ln; if(IsAlNum(*rm)) { const char *s = ln; bool islbl = false; bool wassemi = false; while(*s && iscid(*s) || findarg(*s, '\t', ' ', ':') >= 0) { // check for label, labeled lines are not grounded if(*s == ':' && !wassemi) { islbl = true; wassemi = true; // second ':' cancels label } else if(*s != '\t' && *s != ' ') islbl = false; // something was after the label, e.g. void Foo::Bar() s++; } if(!islbl) res.text << '\2'; } else if(*rm == '\x1f') // line started with macro res.text << '\2'; while(*rm == ' ' || *rm == '\t') rm++; if(*rm == '\0') res.blankLinesRemoved++; else if(*rm == '#') { const char *s = rm + 1; while(*s == ' ' || *s == '\t') s++; if(s[0] == 'd' && s[1] == 'e' && s[2] == 'f' && s[3] == 'i' && s[4] == 'n' && s[5] == 'e' && !iscid(s[6])) { s += 6; while(*s == ' ' || *s == '\t') s++; String macro; while(iscid(*s)) macro.Cat(*s++); if(*s == '(') { while(*s != ')' && *s) macro.Cat(*s++); macro << ')'; } if(include) parser.AddMacro(lineno, macro); } res.preprocessorLinesRemoved++; } else { bool lineContainsComment = false; bool lineContainsNonComment = false; String cmd; while(*rm) { if(*rm == '\"') { lineContainsNonComment = true; res.text << '\"'; rm++; while((byte)*rm && *rm != '\r' && *rm != '\n') { if(*rm == '\"') { res.text << '\"'; rm++; break; } if(*rm == '\\' && rm[1]) { if(include) res.text.Cat(*rm); rm++; } if(include) res.text.Cat(*rm); rm++; } } else if(*rm == '\\' && rm[1]) { lineContainsNonComment = true; if(include) { res.text.Cat(*rm++); res.text.Cat(*rm++); } else rm += 2; } else if(rm[0] == '/' && rm[1] == '/') { cmd = rm + 2; if(!lineContainsNonComment) res.commentLinesRemoved++; break; } else if(rm[0] == '/' && rm[1] == '*') { lineContainsComment = true; rm += 2; for(;;) { if(*rm == '\0') { if(!lineContainsNonComment) res.commentLinesRemoved++; if(in.IsEof()) break; SLPos(res); ln = in.GetLine(); rm = ~ln; lineContainsNonComment = false; } if(rm[0] == '*' && rm[1] == '/') { rm += 2; break; } rm++; } if(include) res.text.Cat(' '); } else { lineContainsNonComment = true; if(include) res.text.Cat(*rm); rm++; } } if(include) res.text << ' '; if(cmd[0] == '$') { if(cmd[1] == '-') include = false; if(cmd[1] == '+') include = true; if(cmd[1]) { res.text.Cat(~cmd + 2); res.text.Cat(' '); } } if(lineContainsComment && !lineContainsNonComment) res.commentLinesRemoved++; } } return pick(res); }
void SqlMassInsert::Flush() { const uint64 DONE = (uint64)-1; if(cache.GetCount() == 0) return; if(use_transaction) sql.GetSession().Begin(); SqlBool remove; bool doremove = false; for(int ii = 0; ii < cache.GetCount(); ii++) { SqlBool rm = cache[ii].remove; if(!rm.IsEmpty()) { doremove = true; remove = remove || rm; } } if(doremove) sql * Delete(table).Where(remove); String insert; int dialect = sql.GetDialect(); if(findarg(dialect, MY_SQL, PGSQL, MSSQL) >= 0) { insert << "insert into " + ~table + '('; for(int i = 0; i < column.GetCount(); i++) { if(i) insert << ", "; insert << column[i]; } insert << ") values "; for(int i = 0; i < cache.GetCount(); i++) { Row& r = cache[i]; if(r.value.GetCount()) { if(i) insert << ", "; insert << "("; for(int i = 0; i < r.value.GetCount(); i++) { if(i) insert << ", "; insert << SqlCompile(dialect, SqlFormat(r.value[i])); } insert << ")"; } } } else for(int ii = 0; ii < cache.GetCount(); ii++) { uint64 nulls = cache[ii].nulls; if(nulls != DONE) { insert << "insert into " + ~table + '('; bool nextcol = false; for(int i = 0; i < column.GetCount(); i++) { if(!(nulls & ((uint64)1 << i))) { if(nextcol) insert << ", "; nextcol = true; insert << column[i]; } } insert << ')'; bool nextsel = false; for(int i = ii; i < cache.GetCount(); i++) { Row& r = cache[i]; if(r.nulls == nulls && r.value.GetCount()) { r.nulls = DONE; if(nextsel) insert << " union all"; nextsel = true; insert << " select "; bool nextval = false; for(int i = 0; i < r.value.GetCount(); i++) if(!(nulls & ((uint64)1 << i))) { if(nextval) insert << ", "; nextval = true; insert << SqlCompile(dialect, SqlFormat(r.value[i])); } if(dialect == ORACLE) insert << " from dual"; } } } } sql.Execute(insert); if(sql.WasError()) { error = true; if(use_transaction) sql.GetSession().Rollback(); } else if(use_transaction) sql.GetSession().Commit(); cache.Clear(); column.Clear(); pos = 0; }
void AssistEditor::SyncParamInfo() { String qtf; Ctrl *p = GetTopCtrl(); int mpar = INT_MAX; int pos = 0; if(p && p->HasFocusDeep()) { for(int q = 0; q < PARAMN; q++) { ParamInfo& m = param[q]; int i = GetCursorLine(); if(m.line >= 0 && m.line < GetLineCount() && i >= m.line && i < m.line + 10 && m.editfile == theide->editfile && GetWLine(m.line).StartsWith(m.test)) { int c = GetCursor(); i = GetPos(m.line) + m.test.GetCount(); if(c >= i) { int par = 0; int pari = 0; int str = 0; bool esc = false; for(;;) { int ch = Ch(i++); if(i > c) { if(par < mpar) { qtf = "[A1 " + DecoratedItem(m.item.name, m.item, m.item.natural, pari); mpar = par; pos = m.pos; } break; } if(findarg(ch, ')', ']', '}') >= 0) { if(par <= 0) break; par--; } else if(findarg(ch, '(', '[', '{') >= 0) par++; else if(findarg(ch, '\"', '\'') >= 0 && !esc) str = str ? 0 : ch; else if(ch == ',' && par == 0 && str == 0) pari++; esc = ch == '\\'; } } } } } if(param_qtf != qtf) param_info.SetQTF(qtf); Rect r = GetLineScreenRect(GetCursorLine()); int cx = max(GetSize().cx - 30, 300); int h = param_info.GetHeight(cx); h = min(h, 550); int y = r.top - h - 6; if(y < GetWorkArea().top) y = r.bottom; r = RectC(r.left, y, min(param_info.GetWidth(), cx) + 8, h + 6); r.OffsetHorz(GetColumnLine(pos).x * GetFontSize().cx); r.OffsetHorz(min(GetWorkArea().right - r.right, 0)); if(param_qtf != qtf || r != param_info.GetRect()) { param_qtf = qtf; if(IsNull(qtf)) { if(param_info.IsOpen()) param_info.Close(); } else { param_info.SetRect(r); if(!param_info.IsOpen() && !IsSelection()) param_info.Ctrl::PopUp(this, false, false, false); } } }
bool Ctrl::ProcessEvent(const String& event) { LLOG("Processing event " << event); CParser p(event); try { if(p.Id("I")) SystemDraw::ResetI(); else if(p.Id("R")) { DesktopSize = ReadPoint(p); Desktop().SetRect(0, 0, DesktopSize.cx, DesktopSize.cy); } if(p.Id("M")) { Point pt = ReadPoint(p); int64 tm = p.ReadInt64(); DoMouseFB(MOUSEMOVE, pt, 0, p); } else if(p.Id("W")) { double w = p.ReadDouble(); Point pt = ReadPoint(p); int64 tm = p.ReadInt64(); DoMouseFB(MOUSEWHEEL, pt, w < 0 ? 120 : -120, p); } else if(p.Id("O")) { mouseLeft = mouseMiddle = mouseRight = false; mouseDownTime = 0; } else if(p.Id("D")) { DoMouseButton(DOWN, p); } else if(p.Id("U")) { DoMouseButton(UP, p); } else if(p.Id("K")) { int code = p.ReadInt(); int which = p.ReadInt(); int count = 1; for(;;) { if(event_queue.GetCount() && event_queue[0] == event) { // Chrome autorepeat event_queue.DropHead(); count++; } else if(event_queue.GetCount() >= 2 && *event_queue[0] == 'C' && event_queue[1] == event) { // Firefox autorepeat String h = event_queue[0]; event_queue.DropHead(); event_queue.DropHead(); event_queue.AddHead(h); count++; } else break; } ReadKeyMods(p); DoKeyFB(fbKEYtoK(which), count); } else if(p.Id("k")) { int code = p.ReadInt(); int which = p.ReadInt(); ReadKeyMods(p); DoKeyFB(K_KEYUP|fbKEYtoK(which), 1); } else if(p.Id("C")) { int code = p.ReadInt(); int which = p.ReadInt(); ReadKeyMods(p); int count = 1; while(event_queue.GetCount() && event_queue[0] == event) { // 'K's are not there anymore event_queue.DropHead(); count++; } if(which && !keyAlt && !keyCtrl && findarg(which, 9, 0xd) < 0) DoKeyFB(which, 1); } } catch(CParser::Error) {} return true; }
void VisGenDlg::Refresh() { String s; int q = ~type; bool b = q >= 3 && q <= 4; pars.Enable(b); brackets.Enable(b); label1.Enable(b); toupper1.Enable(b); tolower1.Enable(b); initcaps1.Enable(b); name1.Enable(b); dname1.Enable(b); quotes1.Enable(b && !label1); b = q == 4; label2.Enable(b); toupper2.Enable(b); tolower2.Enable(b); initcaps2.Enable(b); name2.Enable(b); dname2.Enable(b); quotes2.Enable(b && !label2); String oce = "\tCtrlLayout"; bool ok = false; if(HasItem("ok")) { ok = true; oce << "OK"; } if(HasItem("cancel")) oce << "Cancel"; if(HasItem("exit")) oce << "Exit"; String n = ~name; if(IsNull(n)) n = GetName(); String b1, b2, b3; if(buttons) { for(int i = 0; i < layout.item.GetCount(); i++) { String bn = layout.item[i].variable; if(layout.item[i].type == "Button" && findarg(bn, "cancel", "ok", "exit") < 0) { String mn = IdInitCaps(bn); mn.Replace("_", ""); if(b1.GetCount() == 0) b1 = b2 = "\n"; b1 << '\t' << "void " << mn << "();\n"; b2 << '\t' << bn << " << [=] { " << mn << "};\n"; b3 << '\n' << "void " << n << "::" << mn << "()\n{\n}\n"; } } } if(q == 0) { s << "class " << n << " : public With" << layout.name << "<TopWindow> {\n" << "\ttypedef " << n << " CLASSNAME;\n" << b1 << "\n" << "public:\n" << "\t" << n << "();\n" << "};\n" << "\n" << n << "::" << n << "()\n" << "{\n" << oce << "(*this, \"\");\n" << b2 << "}\n" << b3; } else if(q == 1) { s << "struct " << n << " : With" << layout.name << "<TopWindow> {\n" << "\ttypedef " << n << " CLASSNAME;\n" << b1 << "\t" << n << "();\n" << "};\n" << "\n" << n << "::" << n << "()\n" << "{\n" << oce << "(*this, \"\");\n" << b2 << "}\n" << b3; } else if(q == 2) { String n = ~name; if(IsNull(n)) n = "dlg"; s << "\tWith" << layout.name << "<TopWindow> " << n << ";\n" << oce << '(' << n << ", \"\");\n"; if(ok) s << "\tif(" << n << ".Execute() != IDOK)\n\t\treturn;\n"; else s << '\t' << n << ".Execute();\n"; } else for(int i = 0; i < sel.GetCount(); i++) { String id1 = layout.item[sel[i]].variable; String id2 = id1; int w = layout.item[sel[i]].FindProperty("SetLabel"); String lbl; if(w >= 0 && IsString(~layout.item[sel[i]].property[w])) lbl = AsCString(ToUtf8((WString)~layout.item[sel[i]].property[w])); if(q <= 4) { if(label1) id1 = lbl; if(label2) id2 = lbl; } if(IsNull(id1) && (q != 4 || IsNull(id2))) continue; if(q == 5) s << "\t" << id1 << " << [=] { };\n"; else if(q == 6) s << "\t" << IdInitCaps(id1) << "();\n"; else if(q == 7) s << "\t" << id1 << " << [=] { " << IdInitCaps(id1) << "(); };\n"; else { if((pars || brackets) && !(name1 || name2 || dname1 || dname2)) s << ~name; if(pars) s << '('; String ss; if(name1 && !IsNull(~name)) s << ~name << '.'; if(toupper1) ss << ToUpper(id1); else if(tolower1) ss << ToLower(id1); else if(initcaps1) ss << IdInitCaps(id1); else ss << id1; if(quotes1 && !label1) ss = AsCString(ss); if(dname1 && !IsNull(~name)) ss << '.' << ~name; if(brackets) s << '['; s << ss; if(brackets) s << ']'; if(q == 4) { s << ", "; String ss; if(name2 && !IsNull(~name)) ss << ~name << '.'; if(toupper2) ss << ToUpper(id2); if(tolower2) ss << ToLower(id2); else if(initcaps2) ss << IdInitCaps(id2); else ss << id2; if(quotes2 && !label2) ss = AsCString(ss); if(dname2 && !IsNull(~name)) ss << '.' << ~name; if(brackets) s << '['; s << ss; if(brackets) s << ']'; } if(pars) s << ')'; s << '\n'; } } view <<= s; }
void IdeFileIcon0(bool dir, const String& filename, Image& img) { if(dir) return; String ext = ToLower(GetFileExt(filename)); for(int i = 0; i < GetIdeModuleCount(); i++) { Image m = GetIdeModule(i).FileIcon(filename); if(!IsNull(m)) { img = m; break; } } if(ext == ".html") img = IdeCommonImg::html(); else if(ext == ".css") img = IdeCommonImg::css(); else if(ext == ".witz") img = IdeCommonImg::witz(); else if(ext == ".js") img = IdeCommonImg::js(); else if(ext == ".json") img = IdeCommonImg::json(); else if(ext == ".java" || ext == ".class") img = IdeCommonImg::java(); else if(ext == ".xml" || ext == ".xsd") img = IdeCommonImg::xml(); else if(ext == ".diff" || ext == ".patch") img = IdeCommonImg::diff(); else if(ext == ".py" || ext == ".pyc" || ext == ".pyd" || ext == ".pyo") img = IdeCommonImg::Python(); else if(ext == ".usc") img = IdeCommonImg::Script(); else if(ext == ".lng" || ext == ".lngj" || ext == ".t" || ext == ".jt") img = IdeCommonImg::Language(); else if(ext == ".icpp") img = IdeCommonImg::ISource(); else if(findarg(ext, ".cpp", ".cc", ".cxx", ".mm") >= 0) img = IdeCommonImg::Cpp(); else if(findarg(ext, ".c", ".m") >= 0) img = IdeCommonImg::Source(); else if(ext == ".h" || ext == ".hpp" || ext == ".hh" || ext == ".hxx") img = IdeCommonImg::Header(); else if(ext == ".sch") img = IdeCommonImg::Sch(); else if(ext == ".ddl") img = IdeCommonImg::Ddl(); else if(ext == ".sql") img = IdeCommonImg::Sql(); else if(filename == "Copying") img = IdeCommonImg::License(); else if(filename == "main.conf") img = IdeCommonImg::MainConf(); else if(ext == ".key") img = IdeCommonImg::keyboard(); else if(ext == ".defs") img = IdeCommonImg::Defs(); }