RichText: Fixed problem with GetWidth and paragraphs not aligned left

This commit is contained in:
Mirek Fidler 2025-01-22 14:20:50 +01:00
parent 8fc23a3bf3
commit 93d4e8571d
5 changed files with 37 additions and 50 deletions

View file

@ -41,34 +41,34 @@ AddressBook::AddressBook()
tab.Add(search, "Search");
ActiveFocus(search.name);
search.oname = true;
search.oname <<= search.osurname <<= search.oaddress
<<= search.oemail <<= THISBACK(SetupSearch);
search.oname ^= search.osurname ^= search.oaddress
^= search.oemail ^= THISFN(SetupSearch);
array.AddColumn("Name");
array.AddColumn("Surname");
array.AddColumn("Address");
array.AddColumn("Email");
modify.add <<= THISBACK(Add);
modify.change <<= THISBACK(Change);
search.search <<= THISBACK(Search);
modify.add << THISFN(Add);
modify.change << THISFN(Change);
search.search << THISFN(Search);
SetupSearch();
fs.AllFilesType();
menu.Set(THISBACK(MainMenu));
menu.Set(THISFN(MainMenu));
}
void AddressBook::FileMenu(Bar& bar)
{
bar.Add("Open..", CtrlImg::open(), THISBACK(Open));
bar.Add("Save", CtrlImg::save(), THISBACK(Save));
bar.Add("Save as..", CtrlImg::save_as(), THISBACK(SaveAs));
bar.Add("Open..", CtrlImg::open(), THISFN(Open));
bar.Add("Save", CtrlImg::save(), THISFN(Save));
bar.Add("Save as..", CtrlImg::save_as(), THISFN(SaveAs));
bar.Separator();
bar.Add("Print", CtrlImg::print(), THISBACK(Print));
bar.Add("Print", CtrlImg::print(), THISFN(Print));
bar.Separator();
bar.Add("Quit", THISBACK(Quit));
bar.Add("Quit", THISFN(Quit));
}
void AddressBook::MainMenu(Bar& bar)
{
bar.Add("File", THISBACK(FileMenu));
bar.Sub("File", THISFN(FileMenu));
}
void AddressBook::SetupSearch()

View file

@ -48,34 +48,34 @@ AddressBook::AddressBook()
tab.Add(search, "Search");
ActiveFocus(search.name);
search.oname = true;
search.oname <<= search.osurname <<= search.oaddress
<<= search.oemail <<= THISBACK(SetupSearch);
search.oname ^= search.osurname ^= search.oaddress
^= search.oemail ^= THISFN(SetupSearch);
array.AddColumn(TAG_NAME, "Name");
array.AddColumn(TAG_SURNAME, "Surname");
array.AddColumn(TAG_ADDRESS, "Address");
array.AddColumn(TAG_EMAIL, "Email");
modify.add <<= THISBACK(Add);
modify.change <<= THISBACK(Change);
search.search <<= THISBACK(Search);
modify.add << THISFN(Add);
modify.change << THISFN(Change);
search.search << THISFN(Search);
SetupSearch();
fs.AllFilesType();
menu.Set(THISBACK(MainMenu));
menu.Set(THISFN(MainMenu));
}
void AddressBook::FileMenu(Bar& bar)
{
bar.Add("Open..", CtrlImg::open(), THISBACK(Open));
bar.Add("Save", CtrlImg::save(), THISBACK(Save));
bar.Add("Save as..", CtrlImg::save_as(), THISBACK(SaveAs));
bar.Add("Open..", CtrlImg::open(), THISFN(Open));
bar.Add("Save", CtrlImg::save(), THISFN(Save));
bar.Add("Save as..", CtrlImg::save_as(), THISFN(SaveAs));
bar.Separator();
bar.Add("Print", CtrlImg::print(), THISBACK(Print));
bar.Add("Print", CtrlImg::print(), THISFN(Print));
bar.Separator();
bar.Add("Quit", THISBACK(Quit));
bar.Add("Quit", THISFN(Quit));
}
void AddressBook::MainMenu(Bar& bar)
{
bar.Add("File", THISBACK(FileMenu));
bar.Sub("File", THISFN(FileMenu));
}
void AddressBook::SetupSearch()

View file

@ -6,43 +6,30 @@ class HelloWorld : public TopWindow {
MenuBar menu;
StatusBar status;
void FileMenu(Bar& bar);
void MainMenu(Bar& bar);
void About();
public:
typedef HelloWorld CLASSNAME;
HelloWorld();
};
void HelloWorld::About()
{
PromptOK("{{1@5 [@9= This is the]::@2 [A5@0 Ultimate`+`+ Hello world sample}}");
}
void HelloWorld::FileMenu(Bar& bar)
{
bar.Add("About..", THISBACK(About));
bar.Separator();
bar.Add("Exit", THISBACK(Close));
}
void HelloWorld::MainMenu(Bar& bar)
{
menu.Add("File", THISBACK(FileMenu));
}
HelloWorld::HelloWorld()
{
Title("Hello world!");
AddFrame(menu);
AddFrame(status);
menu.Set(THISBACK(MainMenu));
menu.Set([=](Bar& bar) {
menu.Sub("File", [=](Bar& bar) {
bar.Add("About..", [=] {
PromptOK("{{1@5 [@9= This is the]::@2 [A5@0 Ultimate`+`+ Hello world sample}}");
});
bar.Separator();
bar.Add("Exit", [=] { Close(); });
});
});
status = "Welcome to the Ultimate++ !";
}
GUI_APP_MAIN
{
SetLanguage(LNG_ENGLISH);
HelloWorld().Run();
}

View file

@ -27,7 +27,7 @@ void RichPara::Smh(Lines& lines, HeightInfo *th, int cx) const
l.xpos = format.lm;
cx -= format.lm + format.rm;
l.xpos += lines.GetCount() == 1 ? lines.first_indent : lines.next_indent;
if(!l.withtabs)
if(!l.withtabs && cx != INT_MAX)
switch(format.align) {
case ALIGN_RIGHT:
l.xpos += cx - l.cx;

View file

@ -207,12 +207,12 @@ int RichTable::GetWidth(const RichStyles& st) const
int sum = 0;
for(int i = 0; i < sz.cx; i++)
sum += format.column[i];
sum += format.column[i]; // sum of column ratios
int maxcx = 0;
for(int i = 0; i < sz.cx; i++)
maxcx = max(maxcx, (col[i] * sum + format.column[i] - 1) / format.column[i]);
//^^^^ round it up
return maxcx + (sz.cx + 1) * format.grid + format.lm + format.rm;
}