ide: OnlineSearch improvements

git-svn-id: svn://ultimatepp.org/upp/trunk@15401 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2020-11-13 17:26:20 +00:00
parent f232316ed8
commit 98670011d1
11 changed files with 341 additions and 115 deletions

View file

@ -1,135 +1,135 @@
LAYOUT(EditStringLayout, 396, 68)
ITEM(Label, lbl, SetLabel(t_("Test")).LeftPosZ(4, 128).TopPosZ(8, 19))
ITEM(EditString, text, HSizePosZ(136, 8).TopPosZ(8, 19))
ITEM(Button, ok, SetLabel(t_("OK")).HCenterPosZ(64, 90).BottomPosZ(8, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(8, 24))
ITEM(Upp::Label, lbl, SetLabel(t_("Test")).LeftPosZ(4, 128).TopPosZ(8, 19))
ITEM(Upp::EditString, text, HSizePosZ(136, 8).TopPosZ(8, 19))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).HCenterPosZ(64, 90).BottomPosZ(8, 24))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(8, 24))
END_LAYOUT
LAYOUT(EditIntLayout, 236, 62)
ITEM(Label, lbl, SetLabel(t_("Test")).LeftPosZ(4, 96).TopPosZ(4, 19))
ITEM(EditInt, number, HSizePosZ(104, 4).TopPosZ(4, 19))
ITEM(Button, ok, SetLabel(t_("OK")).HCenterPosZ(64, 14).BottomPosZ(6, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 64).BottomPosZ(6, 24))
ITEM(Upp::Label, lbl, SetLabel(t_("Test")).LeftPosZ(4, 96).TopPosZ(4, 19))
ITEM(Upp::EditInt, number, HSizePosZ(104, 4).TopPosZ(4, 19))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).HCenterPosZ(64, 14).BottomPosZ(6, 24))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 64).BottomPosZ(6, 24))
END_LAYOUT
LAYOUT(EditDoubleLayout, 236, 62)
ITEM(Label, lbl, SetLabel(t_("Test")).LeftPosZ(4, 116).TopPosZ(4, 19))
ITEM(EditDouble, number, HSizePosZ(124, 4).TopPosZ(4, 19))
ITEM(Button, ok, SetLabel(t_("OK")).HCenterPosZ(64, 14).BottomPosZ(6, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 64).BottomPosZ(6, 24))
ITEM(Upp::Label, lbl, SetLabel(t_("Test")).LeftPosZ(4, 116).TopPosZ(4, 19))
ITEM(Upp::EditDouble, number, HSizePosZ(124, 4).TopPosZ(4, 19))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).HCenterPosZ(64, 14).BottomPosZ(6, 24))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 64).BottomPosZ(6, 24))
END_LAYOUT
LAYOUT(EditDateLayout, 236, 62)
ITEM(Label, lbl, SetLabel(t_("Test")).LeftPosZ(4, 120).TopPosZ(4, 19))
ITEM(DropDate, date, HSizePosZ(128, 8).TopPosZ(4, 19))
ITEM(Button, ok, SetLabel(t_("OK")).HCenterPosZ(64, 10).BottomPosZ(6, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(6, 24))
ITEM(Upp::Label, lbl, SetLabel(t_("Test")).LeftPosZ(4, 120).TopPosZ(4, 19))
ITEM(Upp::DropDate, date, HSizePosZ(128, 8).TopPosZ(4, 19))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).HCenterPosZ(64, 10).BottomPosZ(6, 24))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(6, 24))
END_LAYOUT
LAYOUT(ProgressLayout, 320, 72)
ITEM(Button, stop, SetLabel(t_("Cancel")).HCenterPosZ(68, 0).BottomPosZ(4, 24))
ITEM(Upp::Button, stop, SetLabel(t_("Cancel")).HCenterPosZ(68, 0).BottomPosZ(4, 24))
UNTYPED(pi, HSizePosZ(4, 4).TopPosZ(28, 12))
ITEM(Label, info, HSizePosZ(4, 4).TopPosZ(4, 20))
ITEM(Upp::Label, info, HSizePosZ(4, 4).TopPosZ(4, 20))
END_LAYOUT
LAYOUT(CommentLayout, 400, 204)
ITEM(DocEdit, text, HSizePosZ(8, 8).VSizePosZ(8, 40))
ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(80, 64).BottomPosZ(8, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(8, 24))
ITEM(Upp::DocEdit, text, HSizePosZ(8, 8).VSizePosZ(8, 40))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).RightPosZ(80, 64).BottomPosZ(8, 24))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(8, 24))
END_LAYOUT
LAYOUT(SimpleSelectLayout, 172, 184)
ITEM(ArrayCtrl, list, HSizePosZ(4, 4).VSizePosZ(4, 34))
ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(74, 64).BottomPosZ(4, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 64).BottomPosZ(4, 24))
ITEM(Upp::ArrayCtrl, list, HSizePosZ(4, 4).VSizePosZ(4, 34))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).RightPosZ(74, 64).BottomPosZ(4, 24))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 64).BottomPosZ(4, 24))
END_LAYOUT
LAYOUT(FileSelectorLayout, 652, 408)
ITEM(Label, dv___0, SetLabel(t_("&Directory")).LeftPosZ(8, 72).TopPosZ(6, 15))
ITEM(DropList, dir, HSizePosZ(84, 8).TopPosZ(4, 19))
ITEM(Upp::Label, dv___0, SetLabel(t_("&Directory")).LeftPosZ(8, 72).TopPosZ(6, 15))
ITEM(Upp::DropList, dir, HSizePosZ(84, 8).TopPosZ(4, 19))
ITEM(Splitter, splitter, HSizePosZ(8, 8).VSizePosZ(28, 116))
ITEM(Label, filename, HSizePosZ(8, 208).BottomPosZ(92, 20))
ITEM(Label, filesize, RightPosZ(148, 56).BottomPosZ(92, 20))
ITEM(Label, filetime, RightPosZ(8, 136).BottomPosZ(92, 20))
ITEM(Label, file_lbl, SetLabel(t_("&File")).LeftPosZ(8, 76).BottomPosZ(69, 19))
ITEM(EditString, file, HSizePosZ(84, 8).BottomPosZ(69, 19))
ITEM(Label, type_lbl, SetLabel(t_("&Type")).LeftPosZ(8, 76).BottomPosZ(45, 19))
ITEM(DropList, type, HSizePosZ(84, 152).BottomPosZ(45, 19))
ITEM(EditString, search, RightPosZ(8, 140).BottomPosZ(45, 19))
ITEM(Label, sort_lbl, SetLabel(t_("&Sort by")).LeftPosZ(8, 76).BottomPosZ(21, 19))
ITEM(DropList, sortby, LeftPosZ(84, 252).BottomPosZ(21, 19))
ITEM(Option, hidden, SetLabel(t_("Show hidden items")).LeftPosZ(348, 152).BottomPosZ(22, 18))
ITEM(Option, readonly, SetLabel(t_("Read only")).LeftPosZ(84, 84).BottomPosZ(4, 16))
ITEM(Option, hiddenfiles, SetLabel(t_("Show hidden files")).LeftPosZ(348, 152).BottomPosZ(4, 16))
ITEM(Button, ok, SetLabel(t_("Open")).RightPosZ(80, 68).BottomPosZ(8, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 68).BottomPosZ(8, 24))
ITEM(Upp::Label, filename, HSizePosZ(8, 208).BottomPosZ(92, 20))
ITEM(Upp::Label, filesize, RightPosZ(148, 56).BottomPosZ(92, 20))
ITEM(Upp::Label, filetime, RightPosZ(8, 136).BottomPosZ(92, 20))
ITEM(Upp::Label, file_lbl, SetLabel(t_("&File")).LeftPosZ(8, 76).BottomPosZ(69, 19))
ITEM(Upp::EditString, file, HSizePosZ(84, 8).BottomPosZ(69, 19))
ITEM(Upp::Label, type_lbl, SetLabel(t_("&Type")).LeftPosZ(8, 76).BottomPosZ(45, 19))
ITEM(Upp::DropList, type, HSizePosZ(84, 152).BottomPosZ(45, 19))
ITEM(Upp::EditString, search, RightPosZ(8, 140).BottomPosZ(45, 19))
ITEM(Upp::Label, sort_lbl, SetLabel(t_("&Sort by")).LeftPosZ(8, 76).BottomPosZ(21, 19))
ITEM(Upp::DropList, sortby, LeftPosZ(84, 252).BottomPosZ(21, 19))
ITEM(Upp::Option, hidden, SetLabel(t_("Show hidden items")).LeftPosZ(348, 152).BottomPosZ(22, 18))
ITEM(Upp::Option, readonly, SetLabel(t_("Read only")).LeftPosZ(84, 84).BottomPosZ(4, 16))
ITEM(Upp::Option, hiddenfiles, SetLabel(t_("Show hidden files")).LeftPosZ(348, 152).BottomPosZ(4, 16))
ITEM(Upp::Button, ok, SetLabel(t_("Open")).RightPosZ(80, 68).BottomPosZ(8, 24))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 68).BottomPosZ(8, 24))
END_LAYOUT
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))
ITEM(Upp::TabCtrl, palette_tab, HSizePosZ(4, 4).VSizePosZ(4, 82))
ITEM(Upp::Label, dv___1, SetLabel(t_("Color:")).LeftPosZ(4, 36).BottomPosZ(52, 24))
ITEM(Upp::DataPusher, color, HSizePosZ(68, 32).BottomPosZ(54, 22))
ITEM(Upp::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, 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, 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))
ITEM(Upp::Label, dv___5, SetLabel(t_("R:")).LeftPosZ(4, 12).BottomPosZ(29, 19))
ITEM(Upp::EditIntSpin, r, LeftPosZ(16, 44).BottomPosZ(29, 19))
ITEM(Upp::Label, dv___7, SetLabel(t_("G:")).LeftPosZ(72, 12).BottomPosZ(29, 19))
ITEM(Upp::EditIntSpin, g, LeftPosZ(84, 44).BottomPosZ(29, 19))
ITEM(Upp::Label, dv___9, SetLabel(t_("B:")).LeftPosZ(136, 12).BottomPosZ(29, 19))
ITEM(Upp::EditIntSpin, b, LeftPosZ(150, 42).BottomPosZ(29, 19))
ITEM(Upp::Label, dv___11, SetLabel(t_("H:")).LeftPosZ(4, 12).BottomPosZ(5, 19))
ITEM(Upp::EditIntSpin, h, LeftPosZ(16, 44).BottomPosZ(5, 19))
ITEM(Upp::Label, dv___13, SetLabel(t_("S:")).LeftPosZ(72, 12).BottomPosZ(5, 19))
ITEM(Upp::EditIntSpin, s, LeftPosZ(84, 44).BottomPosZ(5, 19))
ITEM(Upp::Label, dv___15, SetLabel(t_("V:")).LeftPosZ(136, 12).BottomPosZ(5, 19))
ITEM(Upp::EditIntSpin, v, LeftPosZ(148, 44).BottomPosZ(5, 19))
END_LAYOUT
LAYOUT(PaletteSelectorLayout, 248, 320)
ITEM(Ctrl, palette, HSizePosZ(4, 4).VSizePosZ(4, 32))
ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(88, 80).BottomPosZ(4, 22))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 80).BottomPosZ(4, 22))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).RightPosZ(88, 80).BottomPosZ(4, 22))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 80).BottomPosZ(4, 22))
END_LAYOUT
LAYOUT(PalCtrlSizeLayout, 206, 60)
ITEM(Label, dv___0, SetLabel(t_("&Rows:")).LeftPosZ(4, 44).TopPosZ(4, 19))
ITEM(EditIntSpin, rows, LeftPosZ(48, 50).TopPosZ(4, 19))
ITEM(Label, dv___2, SetLabel(t_("&Columns:")).LeftPosZ(108, 44).TopPosZ(4, 19))
ITEM(EditIntSpin, columns, LeftPosZ(152, 50).TopPosZ(4, 19))
ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(88, 80).BottomPosZ(4, 22))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 80).BottomPosZ(4, 22))
ITEM(Upp::Label, dv___0, SetLabel(t_("&Rows:")).LeftPosZ(4, 44).TopPosZ(4, 19))
ITEM(Upp::EditIntSpin, rows, LeftPosZ(48, 50).TopPosZ(4, 19))
ITEM(Upp::Label, dv___2, SetLabel(t_("&Columns:")).LeftPosZ(108, 44).TopPosZ(4, 19))
ITEM(Upp::EditIntSpin, columns, LeftPosZ(152, 50).TopPosZ(4, 19))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).RightPosZ(88, 80).BottomPosZ(4, 22))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 80).BottomPosZ(4, 22))
END_LAYOUT
LAYOUT(KeysLayout, 604, 500)
ITEM(ArrayCtrl, group, LeftPosZ(8, 116).TopPosZ(8, 452))
ITEM(ArrayCtrl, keys, LeftPosZ(132, 464).TopPosZ(8, 452))
ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(464, 64).TopPosZ(468, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(532, 64).TopPosZ(468, 24))
ITEM(Button, defaults, SetLabel(t_("Defaults")).LeftPosZ(8, 64).TopPosZ(468, 24))
ITEM(Upp::ArrayCtrl, group, LeftPosZ(8, 116).TopPosZ(8, 452))
ITEM(Upp::ArrayCtrl, keys, LeftPosZ(132, 464).TopPosZ(8, 452))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).LeftPosZ(464, 64).TopPosZ(468, 24))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(532, 64).TopPosZ(468, 24))
ITEM(Upp::Button, defaults, SetLabel(t_("Defaults")).LeftPosZ(8, 64).TopPosZ(468, 24))
END_LAYOUT
LAYOUT(PrinterLayout, 380, 276)
ITEM(LabelBox, dv___0, SetLabel(t_("Printer")).HSizePosZ(8, 8).TopPosZ(8, 76))
ITEM(Label, dv___1, SetLabel(t_("Printer")).LeftPosZ(16, 88).TopPosZ(28, 20))
ITEM(DropList, printer, HSizePosZ(104, 16).TopPosZ(28, 19))
ITEM(Label, dv___3, SetLabel(t_("Paper size")).LeftPosZ(16, 88).TopPosZ(52, 20))
ITEM(DropList, paper, LeftPosZ(104, 92).TopPosZ(52, 19))
ITEM(Label, dv___5, SetLabel(t_("Input slot")).LeftPosZ(204, 68).TopPosZ(52, 20))
ITEM(DropList, slot, LeftPosZ(272, 92).TopPosZ(52, 19))
ITEM(LabelBox, dv___7, SetLabel(t_("Print range")).LeftPosZ(8, 224).TopPosZ(92, 80))
ITEM(Switch, range, SetLabel(t_("All pages\nCurrent page\nPages from")).LeftPosZ(16, 196).TopPosZ(112, 56))
ITEM(EditIntSpin, from, LeftPosZ(112, 44).TopPosZ(136, 19))
ITEM(Label, dv___10, SetLabel(t_("to")).LeftPosZ(160, 16).TopPosZ(140, 13))
ITEM(EditIntSpin, to, LeftPosZ(176, 44).TopPosZ(136, 19))
ITEM(LabelBox, dv___12, SetLabel(t_("Copies")).HSizePosZ(240, 8).TopPosZ(92, 80))
ITEM(Label, dv___13, SetLabel(t_("Copies")).LeftPosZ(252, 56).TopPosZ(112, 20))
ITEM(EditIntSpin, copies, RightPosZ(16, 56).TopPosZ(112, 19))
ITEM(Option, collate, SetLabel(t_("Collate")).RightPosZ(16, 112).TopPosZ(140, 19))
ITEM(LabelBox, dv___16, SetLabel(t_("Placement")).HSizePosZ(8, 8).TopPosZ(180, 52))
ITEM(Switch, landscape, SetLabel(t_("Portrait\nLandscape")).LeftPosZ(16, 176).TopPosZ(200, 15))
ITEM(Label, dv___18, SetLabel(t_("Pages per sheet")).LeftPosZ(196, 108).TopPosZ(200, 20))
ITEM(DropList, npage, LeftPosZ(308, 56).TopPosZ(200, 19))
ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(76, 64).BottomPosZ(8, 24))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(8, 24))
ITEM(Upp::LabelBox, dv___0, SetLabel(t_("Printer")).HSizePosZ(8, 8).TopPosZ(8, 76))
ITEM(Upp::Label, dv___1, SetLabel(t_("Printer")).LeftPosZ(16, 88).TopPosZ(28, 20))
ITEM(Upp::DropList, printer, HSizePosZ(104, 16).TopPosZ(28, 19))
ITEM(Upp::Label, dv___3, SetLabel(t_("Paper size")).LeftPosZ(16, 88).TopPosZ(52, 20))
ITEM(Upp::DropList, paper, LeftPosZ(104, 92).TopPosZ(52, 19))
ITEM(Upp::Label, dv___5, SetLabel(t_("Input slot")).LeftPosZ(204, 68).TopPosZ(52, 20))
ITEM(Upp::DropList, slot, LeftPosZ(272, 92).TopPosZ(52, 19))
ITEM(Upp::LabelBox, dv___7, SetLabel(t_("Print range")).LeftPosZ(8, 224).TopPosZ(92, 80))
ITEM(Upp::Switch, range, SetLabel(t_("All pages\nCurrent page\nPages from")).LeftPosZ(16, 196).TopPosZ(112, 56))
ITEM(Upp::EditIntSpin, from, LeftPosZ(112, 44).TopPosZ(136, 19))
ITEM(Upp::Label, dv___10, SetLabel(t_("to")).LeftPosZ(160, 16).TopPosZ(140, 13))
ITEM(Upp::EditIntSpin, to, LeftPosZ(176, 44).TopPosZ(136, 19))
ITEM(Upp::LabelBox, dv___12, SetLabel(t_("Copies")).HSizePosZ(240, 8).TopPosZ(92, 80))
ITEM(Upp::Label, dv___13, SetLabel(t_("Copies")).LeftPosZ(252, 56).TopPosZ(112, 20))
ITEM(Upp::EditIntSpin, copies, RightPosZ(16, 56).TopPosZ(112, 19))
ITEM(Upp::Option, collate, SetLabel(t_("Collate")).RightPosZ(16, 112).TopPosZ(140, 19))
ITEM(Upp::LabelBox, dv___16, SetLabel(t_("Placement")).HSizePosZ(8, 8).TopPosZ(180, 52))
ITEM(Upp::Switch, landscape, SetLabel(t_("Portrait\nLandscape")).LeftPosZ(16, 176).TopPosZ(200, 15))
ITEM(Upp::Label, dv___18, SetLabel(t_("Pages per sheet")).LeftPosZ(196, 108).TopPosZ(200, 20))
ITEM(Upp::DropList, npage, LeftPosZ(308, 56).TopPosZ(200, 19))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).RightPosZ(76, 64).BottomPosZ(8, 24))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(8, 24))
END_LAYOUT

View file

@ -317,8 +317,9 @@ void Ide::Serialize(Stream& s)
s.Magic();
if(version >= 17)
s % hlstyle_is_default;
if(version >= 19)
if(version >= 19) {
s % gui_font % gui_font_override;
}
}
Time Ide::ConfigTime()

View file

@ -1,17 +1,180 @@
#include "ide.h"
static String GetSearchPhrase(AssistEditor& editor)
String SearchEnginesFile()
{
return UrlEncode(Nvl(editor.GetSelection(), editor.GetWord()));
return ConfigFile("search_engines.json");
}
void Ide::OnlineSearch()
Value LoadSearchEngines()
{
LaunchWebBrowser("https://www.google.com/search?q=" + GetSearchPhrase(editor));
return ParseJSON(LoadFile(SearchEnginesFile()));
}
void Ide::OnlineSearchOnTheOfficialSite()
struct IconDisplay : Display {
virtual Size GetStdSize(const Value&) { return DPI(16, 16); }
virtual void Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const
{
w.DrawRect(r, paper);
Image m = StreamRaster::LoadStringAny(q);
Point p = r.CenterPos(m.GetSize());
w.DrawImage(p.x, p.y, m);
}
};
WebSearchTab::WebSearchTab()
{
LaunchWebBrowser("https://www.google.com/search?q=" + GetSearchPhrase(editor) +
"&domains=www.ultimatepp.org&sitesearch=www.ultimatepp.org");
list.AddColumn("Name", 5);
list.AddColumn("URI", 5);
list.AddColumn("Icon").SetDisplay(Single<IconDisplay>());
list.Moving().RowName("search engine").Removing();
list.WhenLeftDouble = [=] { Edit(); };
list.SetLineCy(max(GetStdFontSize().cy, DPI(18)));
list.WhenBar = [&](Bar& bar) {
bool b = list.IsCursor();
bar.Add("Add search engine", IdeImg::add(), [&] { Add(); }).Key(K_INSERT);
bar.Add(b, "Edit search engine", IdeImg::pencil(), [&] { Edit(); }).Key(K_ENTER);
bar.Add(b, "Set as default engine", IdeImg::star(), [&] { Default(); });
list.StdBar(bar);
};
list.EvenRowColor();
list.ColumnWidths("104 382 30");
}
bool WebSearchTab::EditDlg(String& name, String& uri, String& ico)
{
WithWebSearchEngineLayout<TopWindow> dlg;
CtrlLayoutOKCancel(dlg, "Web search engine setup");
CtrlRetriever r;
r(dlg.name, name)(dlg.uri, uri);
if(dlg.Execute() == IDOK) {
r.Retrieve();
ico = Null;
int q = uri.Find('/', max(0, uri.FindAfter("//")));
if(q < 0)
q = uri.GetCount();
Image r;
Size wanted = DPI(16, 16);
String data = HttpRequest(uri.Mid(0, q) + "/favicon.ico").RequestTimeout(3000).Execute();
for(const Image& m : ReadIcon(data)) {
Size isz = m.GetSize();
if(isz == wanted) {
r = m;
break;
}
if(isz.cx > r.GetSize().cx)
r = m;
}
if(IsNull(r))
r = StreamRaster::LoadStringAny(data);
DDUMP(r.GetSize());
ico = IsNull(r) ? String() :
PNGEncoder().SaveString(2 * r.GetSize() == wanted ? Upscale2x(r)
: r.GetSize() == 2 * wanted ? Downscale2x(r)
: Rescale(r, wanted));
return true;
}
return false;
}
void WebSearchTab::Add()
{
String name, uri, zico;
if(EditDlg(name, uri, zico))
list.Add(name, uri, zico);
}
void WebSearchTab::Edit()
{
if(!list.IsCursor())
return;
String name = list.Get(0);
String uri = list.Get(1);
String zico = list.Get(2);
if(EditDlg(name, uri, zico)) {
list.Set(0, name);
list.Set(1, uri);
list.Set(2, zico);
}
}
void WebSearchTab::Default()
{
int i = list.GetCursor();
if(i < 0) return;
Vector<Value> v = list.GetLine(i);
list.Remove(i);
list.Insert(0, v);
list.SetCursor(0);
}
void WebSearchTab::Load()
{
for(Value se : LoadSearchEngines())
list.Add(se["Name"], se["URI"], Decode64(se["Icon"]));
}
void WebSearchTab::Save()
{
JsonArray ja;
for(int i = 0; i < list.GetCount(); i++)
ja << Upp::Json("Name", list.Get(i, 0))("URI", list.Get(i, 1))("Icon", Encode64(list.Get(i, 2)));
SaveChangedFile(SearchEnginesFile(), ja);
}
void Ide::OnlineSearchMenu(Bar& menu)
{
static Time se_tm = Null;
static Value se;
Time h = FileGetTime(SearchEnginesFile());
if(h != se_tm) {
se = LoadSearchEngines();
se_tm = h;
}
bool b = editor.IsSelection() || IsAlNum(editor.GetChar()) || editor.GetChar() == '_';
auto OnlineSearch = [=](const String& url) {
String h = url;
h.Replace("%s", UrlEncode(Nvl(editor.GetSelection(), editor.GetWord())));
LaunchWebBrowser(h);
};
auto Icon = [&](int i) {
return StreamRaster::LoadStringAny(Decode64(se[i]["Icon"]));
};
String name, uri;
Image m;
if(se.GetCount()) {
name = se[0]["Name"];
uri = se[0]["URI"];
m = Icon(0);
}
else {
name = "Google";
uri = "https://www.google.com/search?q=%s";
}
using namespace IdeKeys;
menu.Add(b, "Search on " + name, Nvl(m, CtrlImg::Network()), [=] { OnlineSearch(uri); }).Key(AK_GOOGLE);
menu.Add(b, AK_GOOGLEUPP, IdeImg::GoogleUpp(), [=] {
OnlineSearch("https://www.google.com/search?q=%s"
"&domains=www.ultimatepp.org&sitesearch=www.ultimatepp.org");
});
if(!menu.IsMenuBar() || se.GetCount() < 2)
return;
menu.Sub(b, "Search on...", [=](Bar& menu) {
for(int i = 1; i < se.GetCount(); i++) {
const String& name = se[i]["Name"];
const String& uri = se[i]["URI"];
menu.Add(b, name, Nvl(Icon(i), CtrlImg::Network()), [=] { OnlineSearch(uri); });
}
});
}

View file

@ -390,6 +390,7 @@ void Ide::SetupFormat() {
WithSetupEditorLayout<ParentCtrl> edt;
WithSetupIdeLayout<ParentCtrl> ide;
WithSetupAssistLayout<ParentCtrl> assist;
WebSearchTab osm;
AStyleSetupDialog ast(this);
#ifdef PLATFORM_WIN32
ide.console_txt.Hide();
@ -430,6 +431,7 @@ void Ide::SetupFormat() {
dlg.Add(assist, "Assist");
dlg.Add(ide, "IDE");
dlg.Add(ast, "Code formatting");
dlg.Add(osm, "Web search");
dlg.WhenClose = dlg.Acceptor(IDEXIT);
FontSelectManager ed, vf, con, f1, f2, tf, gui;
@ -460,6 +462,8 @@ void Ide::SetupFormat() {
DlSpellerLangs(edt.spellcheck_comments);
osm.Load();
rtvr
(hlt.hilite_scope, hs)
(hlt.hilite_bracket, hilite_bracket)
@ -611,6 +615,9 @@ void Ide::SetupFormat() {
editor.SetHlStyle(i, hlt.hlstyle.Get(i, 1), hlt.hlstyle.Get(i, 2),
hlt.hlstyle.Get(i, 3), hlt.hlstyle.Get(i, 4));
UpdateFormat();
osm.Save();
if(c == IDEXIT)
break;
if(c == 222)

View file

@ -293,4 +293,3 @@ void TopicCtrl::SShow()
tl.topic = l[ss.page];
GoTo(TopicLinkString(tl));
}

View file

@ -323,6 +323,17 @@ struct FindInFilesDlg : WithFindInFilesLayout<TopWindow> {
FindInFilesDlg();
};
struct WebSearchTab : WithWebSearchTabLayout<ParentCtrl> {
void Load();
void Save();
bool EditDlg(String& name, String& uri, String& zico);
void Add();
void Edit();
void Default();
WebSearchTab();
};
struct Ide : public TopWindow, public WorkspaceWork, public IdeContext, public MakeBuild {
public:
virtual void Paint(Draw& w);
@ -677,7 +688,7 @@ public:
String current_builder;
bool hlstyle_is_default = true; // default style reacts to dark / light theme settings
// ------------------------------------
Time config_time;
@ -836,9 +847,9 @@ public:
void GotoPosition();
void OnlineSearchMenu(Bar& menu);
void OnlineSearch();
void OnlineSearchOnTheOfficialSite();
void OnlineSearch(String uri);
bool IsSearchProvidersMenuVisible() const;
void SearchMenu(Bar& bar);
void EditFind() { editor.FindReplace(find_pick_sel, find_pick_text, false); }
void EditReplace() { editor.FindReplace(find_pick_sel, find_pick_text, true); }

View file

@ -132,6 +132,7 @@ IMAGE_ID(arrow_up)
IMAGE_ID(arrow_down)
IMAGE_ID(ShowPointer1)
IMAGE_ID(ShowPointer2)
IMAGE_ID(star)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,152,139,109,235,48,12,69,141,78,208,17,50,106,182,232,58,65,23,227,123,78,42,135,150,200,75,234,199,32)
@ -1377,3 +1378,26 @@ IMAGE_DATA(103,5,244,227,177,255,211,29,221,115,159,116,168,230,163,255,142,238,
IMAGE_DATA(122,222,227,35,77,131,250,95,208,253,147,177,14,30,240,97,201,251,160,191,235,225,181,30,57,91,212,127,71,247,123,13)
IMAGE_DATA(247,121,64,126,86,173,198,127,228,245,30,133,89,117,155,111,186,223,217,12,50,242,63,62,230,244,122,0,0,0,0,0)
IMAGE_END_DATA(2016, 1)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,157,147,93,72,147,97,20,199,215,180,176,92,102,78,89,161,43,157,95,41,203,212,149,162,152,88,154,58,153,56)
IMAGE_DATA(162,154,99,165,137,87,65,121,147,68,137,23,134,151,118,33,216,197,146,8,98,193,2,211,62,52,63,102,206,165,230,71)
IMAGE_DATA(115,155,77,29,217,84,178,178,205,109,239,222,246,186,45,234,162,127,239,28,69,132,3,235,192,195,115,224,156,31,231,127)
IMAGE_DATA(254,15,15,35,156,17,206,216,74,164,29,98,9,202,10,216,167,183,212,188,73,76,62,18,152,223,169,178,201,255,97,43)
IMAGE_DATA(10,35,37,132,190,20,132,174,20,245,53,49,77,255,202,191,237,207,114,82,166,115,88,55,73,241,126,240,232,247,237,193)
IMAGE_DATA(219,118,108,149,173,175,229,54,17,122,33,220,11,23,54,120,219,171,66,220,190,17,171,220,172,55,116,39,147,85,41,226)
IMAGE_DATA(212,200,155,147,149,163,202,12,211,242,80,182,199,207,202,64,205,150,224,139,54,23,46,195,89,88,135,243,177,208,201,247)
IMAGE_DATA(106,228,73,102,249,53,110,87,181,112,111,221,126,118,48,119,228,97,230,28,57,95,14,106,177,18,158,229,42,250,92,132)
IMAGE_DATA(119,177,26,235,115,165,32,167,14,195,57,150,2,98,236,24,157,139,233,92,4,187,250,20,44,125,199,241,225,137,0,83)
IMAGE_DATA(119,120,118,159,134,169,142,204,37,167,81,4,239,74,45,220,166,19,160,12,153,244,220,52,144,227,169,32,94,38,193,254)
IMAGE_DATA(130,7,91,223,65,172,245,196,194,161,46,193,167,103,89,208,181,199,145,123,66,153,17,62,222,231,205,116,71,250,71,66)
IMAGE_DATA(95,6,143,185,10,46,93,58,200,73,62,156,163,201,116,127,2,108,253,177,52,27,3,135,70,72,179,217,120,115,151,231)
IMAGE_DATA(102,135,5,113,254,244,97,87,8,147,53,211,113,100,141,154,151,130,154,41,246,235,214,36,194,62,200,195,90,47,151,230)
IMAGE_DATA(227,96,31,42,198,236,189,184,175,251,34,130,184,155,121,121,69,202,105,180,141,23,129,50,74,64,140,208,179,135,226,253)
IMAGE_DATA(186,187,163,97,27,200,194,231,238,92,180,93,142,234,10,244,110,173,87,15,40,28,147,66,184,166,133,32,70,51,104,13)
IMAGE_DATA(39,233,187,24,182,94,62,172,79,147,96,233,201,67,103,67,148,33,16,255,184,37,126,194,249,186,28,46,253,25,122,127)
IMAGE_DATA(49,172,170,2,172,62,207,217,208,109,87,21,193,218,157,15,245,77,182,37,16,63,214,158,184,66,106,197,88,237,203,129)
IMAGE_DATA(73,145,240,173,229,18,71,209,32,139,104,213,183,69,123,150,20,169,88,237,202,193,68,115,184,55,16,63,247,32,217,109)
IMAGE_DATA(188,159,232,190,46,139,188,245,119,77,154,23,82,55,220,24,230,208,54,133,254,8,196,87,228,237,62,31,168,246,43,138)
IMAGE_DATA(82,152,146,96,38,227,247,95,248,9,230,140,89,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(640, 1)

View file

@ -880,3 +880,17 @@ LAYOUT(InsertAsLayout, 276, 168)
ITEM(Upp::Label, dv___3, SetLabel(t_("Data length will be put into the clipboard")).LeftPosZ(8, 260).TopPosZ(108, 19))
END_LAYOUT
LAYOUT(WebSearchEngineLayout, 564, 84)
ITEM(Upp::Label, dv___0, SetLabel(t_("Name")).LeftPosZ(8, 72).TopPosZ(8, 19))
ITEM(Upp::Label, dv___1, SetLabel(t_("URI")).LeftPosZ(8, 72).TopPosZ(32, 19))
ITEM(Upp::EditString, name, NotNull(true).HSizePosZ(80, 4).TopPosZ(8, 19))
ITEM(Upp::EditString, uri, NotNull(true).HSizePosZ(80, 4).VSizePosZ(32, 33))
ITEM(Upp::Button, ok, SetLabel(t_("OK")).RightPosZ(72, 64).BottomPosZ(4, 24))
ITEM(Upp::Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 64).BottomPosZ(4, 24))
ITEM(Upp::Label, dv___6, SetLabel(t_("\001[g Use [* %s] as a placeholder for the search phrase")).LeftPosZ(8, 260).TopPosZ(60, 19))
END_LAYOUT
LAYOUT(WebSearchTabLayout, 400, 200)
ITEM(Upp::ArrayCtrl, list, HSizePosZ(4, 4).VSizePosZ(4, 4))
END_LAYOUT

View file

@ -20,7 +20,8 @@ uses
ide/Java,
ide/MacroManager,
urepo,
Report;
Report,
Core/SSL;
file
IDE readonly separator,

View file

@ -111,14 +111,6 @@ void Ide::File(Bar& menu)
menu.Add(AK_EXIT, THISBACK(Exit));
}
void Ide::OnlineSearchMenu(Bar& menu)
{
bool b = editor.IsSelection() || IsAlNum(editor.GetChar()) || editor.GetChar() == '_';
menu.Add(b, AK_GOOGLE, IdeImg::Google(),
THISBACK(OnlineSearch));
menu.Add(b, AK_GOOGLEUPP, IdeImg::GoogleUpp(), THISBACK(OnlineSearchOnTheOfficialSite));
}
void Ide::AssistEdit(Bar& menu)
{
bool b = !editor.IsReadOnly() && !designer;

View file

@ -10,15 +10,24 @@ Vector<Image> ReadIcon(String data, bool just_best)
Vector<Image> out;
const byte *in = data;
int count = Peek16le(in + OFFSETOF(BMP_ICONDIR, idCount));
if(count < 0 || count > 100)
return out;
const byte *end = (const byte *)data.end();
for(int i = 0; i < count; i++) {
const byte *hdr = in + sizeof(BMP_ICONDIR) + i * sizeof(BMP_ICONDIRENTRY);
if(hdr > end)
return out;
dword offset = Peek32le(hdr + OFFSETOF(BMP_ICONDIRENTRY, dwImageOffset));
hdr = in + offset;
int hdrsize = Peek32le(hdr + OFFSETOF(BMP_INFOHEADER, biSize));
if(hdr + hdrsize > end)
return out;
Size bmpsz(
Peek32le(hdr + OFFSETOF(BMP_INFOHEADER, biWidth)),
Peek32le(hdr + OFFSETOF(BMP_INFOHEADER, biHeight)));
Size size(bmpsz.cx, bmpsz.cy >> 1);
if(size.cx < 0 || size.cx > 10000 || size.cy < 0 || size.cy > 10000)
return out;
int compression = Peek32le(hdr + OFFSETOF(BMP_INFOHEADER, biCompression));
int bitcount = Peek16le(hdr + OFFSETOF(BMP_INFOHEADER, biBitCount));
int clrused = Peek32le(hdr + OFFSETOF(BMP_INFOHEADER, biClrUsed));
@ -68,9 +77,14 @@ Vector<Image> ReadIcon(String data, bool just_best)
}
ImageBuffer buffer(size);
for(int y = 0; y < size.cy; y++, hdr += rowbytes)
for(int y = 0; y < size.cy; y++, hdr += rowbytes) {
if(hdr + rowbytes > end)
return out;
fmt.Read(buffer[size.cy - y - 1], hdr, size.cx, palette.Begin());
}
for(int y = 0; y < size.cy; y++, hdr += maskbytes) {
if(hdr + maskbytes > end)
return out;
const byte *in = hdr;
RGBA *out = buffer[size.cy - y - 1];
int cx = size.cx;