diff --git a/uppsrc/CtrlLib/Ctrl.lay b/uppsrc/CtrlLib/Ctrl.lay index 723b77ecc..bdaf9aa98 100644 --- a/uppsrc/CtrlLib/Ctrl.lay +++ b/uppsrc/CtrlLib/Ctrl.lay @@ -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 diff --git a/uppsrc/ide/Config.cpp b/uppsrc/ide/Config.cpp index 8effec50f..1ef69e323 100644 --- a/uppsrc/ide/Config.cpp +++ b/uppsrc/ide/Config.cpp @@ -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() diff --git a/uppsrc/ide/OnlineSearch.cpp b/uppsrc/ide/OnlineSearch.cpp index eb78a45c9..61eba4720 100644 --- a/uppsrc/ide/OnlineSearch.cpp +++ b/uppsrc/ide/OnlineSearch.cpp @@ -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()); + 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 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 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); }); + } + }); } diff --git a/uppsrc/ide/Setup.cpp b/uppsrc/ide/Setup.cpp index 21a1eab6d..387789dac 100644 --- a/uppsrc/ide/Setup.cpp +++ b/uppsrc/ide/Setup.cpp @@ -390,6 +390,7 @@ void Ide::SetupFormat() { WithSetupEditorLayout edt; WithSetupIdeLayout ide; WithSetupAssistLayout 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) diff --git a/uppsrc/ide/SlideShow.cpp b/uppsrc/ide/SlideShow.cpp index 4cc5e3260..59168f072 100644 --- a/uppsrc/ide/SlideShow.cpp +++ b/uppsrc/ide/SlideShow.cpp @@ -293,4 +293,3 @@ void TopicCtrl::SShow() tl.topic = l[ss.page]; GoTo(TopicLinkString(tl)); } - \ No newline at end of file diff --git a/uppsrc/ide/ide.h b/uppsrc/ide/ide.h index 15627741a..62e9e43c0 100644 --- a/uppsrc/ide/ide.h +++ b/uppsrc/ide/ide.h @@ -323,6 +323,17 @@ struct FindInFilesDlg : WithFindInFilesLayout { FindInFilesDlg(); }; +struct WebSearchTab : WithWebSearchTabLayout { + 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); } diff --git a/uppsrc/ide/ide.iml b/uppsrc/ide/ide.iml index fa2ccc66b..863e9f05d 100644 --- a/uppsrc/ide/ide.iml +++ b/uppsrc/ide/ide.iml @@ -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) diff --git a/uppsrc/ide/ide.lay b/uppsrc/ide/ide.lay index 46d7424de..476bcad77 100644 --- a/uppsrc/ide/ide.lay +++ b/uppsrc/ide/ide.lay @@ -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 + diff --git a/uppsrc/ide/ide.upp b/uppsrc/ide/ide.upp index 183d3b199..e02584379 100644 --- a/uppsrc/ide/ide.upp +++ b/uppsrc/ide/ide.upp @@ -20,7 +20,8 @@ uses ide/Java, ide/MacroManager, urepo, - Report; + Report, + Core/SSL; file IDE readonly separator, diff --git a/uppsrc/ide/idebar.cpp b/uppsrc/ide/idebar.cpp index 12153c984..92eb3e5f2 100644 --- a/uppsrc/ide/idebar.cpp +++ b/uppsrc/ide/idebar.cpp @@ -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; diff --git a/uppsrc/plugin/bmp/Icon.cpp b/uppsrc/plugin/bmp/Icon.cpp index db5277542..39f88e8d6 100644 --- a/uppsrc/plugin/bmp/Icon.cpp +++ b/uppsrc/plugin/bmp/Icon.cpp @@ -10,15 +10,24 @@ Vector ReadIcon(String data, bool just_best) Vector 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 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;