mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 22:02:49 -06:00
122 lines
2.5 KiB
C++
122 lines
2.5 KiB
C++
#include "ide.h"
|
|
|
|
INITBLOCK {
|
|
RegisterGlobalConfig("QTF-designer");
|
|
RegisterGlobalConfig("QTF-designer-editor");
|
|
}
|
|
|
|
class QtfDlg : public TopWindow {
|
|
void Text();
|
|
void Clear();
|
|
void Copy();
|
|
void Editor();
|
|
void OnHelpLink(const String& link);
|
|
|
|
public:
|
|
Splitter leftSplit, mainSplit;
|
|
WithQtfLayout<ParentCtrl> qtfText;
|
|
RichTextCtrl qtf;
|
|
RichTextView help;
|
|
|
|
void Serialize(Stream& s);
|
|
|
|
QtfDlg();
|
|
};
|
|
|
|
void QtfDlg::Text()
|
|
{
|
|
qtf <<= ~qtfText.text;
|
|
}
|
|
|
|
void QtfDlg::Clear()
|
|
{
|
|
qtfText.text.Clear();
|
|
Text();
|
|
}
|
|
|
|
void QtfDlg::Copy()
|
|
{
|
|
WriteClipboardText(~qtfText.text);
|
|
Break();
|
|
}
|
|
|
|
void QtfDlg::Editor()
|
|
{
|
|
String text = (String)~qtfText.text;
|
|
QTFEdit(text);
|
|
if(PromptYesNo("Use the text?")) {
|
|
qtfText.text <<= text;
|
|
Text();
|
|
}
|
|
}
|
|
|
|
void QtfDlg::OnHelpLink(const String& link)
|
|
{
|
|
int q = link.ReverseFind("#");
|
|
if(q >= 0)
|
|
help.GotoLabel(link.Mid(q + 1));
|
|
}
|
|
|
|
QtfDlg::QtfDlg()
|
|
{
|
|
Title("QTF designer");
|
|
CtrlLayout(qtfText);
|
|
qtfText.text << [=] { Text(); };
|
|
qtf.SetFrame(ViewFrame());
|
|
qtf.Background(SColorPaper);
|
|
Sizeable().Zoomable();
|
|
Rect r = GetWorkArea();
|
|
SetRect(0, 0, r.GetWidth() - 100, r.GetHeight() - 200);
|
|
SetMinSize(Size(min(640, r.GetWidth() - 100), min(480, r.GetHeight() - 200)));
|
|
|
|
help.Margins(Rect(12, 0, 12, 0));
|
|
String path = AppendFileName(AppendFileName(PackageDirectory("RichText"), "srcdoc.tpp"), "QTF_en-us.tpp");
|
|
if(FileExists(path)) {
|
|
help.SetQTF(ReadTopic(LoadFile(path)).text);
|
|
}
|
|
else {
|
|
help <<= "[= &&&QTF documentation not found";
|
|
}
|
|
help.WhenLink = [=] (const String& link) { OnHelpLink(link); };
|
|
|
|
qtfText.clear << [=] { Clear(); };
|
|
qtfText.copy << [=] { Copy(); };
|
|
qtfText.editor << [=] { Editor(); };
|
|
|
|
leftSplit.Vert(qtfText, qtf).SetPos(4000);
|
|
mainSplit.Horz(leftSplit, help).SetPos(3500);
|
|
Add(mainSplit.HSizePosZ(4, 4).VSizePosZ(4, 4));
|
|
}
|
|
|
|
void QtfDlg::Serialize(Stream& s)
|
|
{
|
|
int version = 1;
|
|
s / version;
|
|
s % qtfText.text;
|
|
SerializePlacement(s);
|
|
if(version >= 1) {
|
|
leftSplit.Serialize(s);
|
|
mainSplit.Serialize(s);
|
|
}
|
|
Text();
|
|
}
|
|
|
|
void Ide::Qtf()
|
|
{
|
|
QtfDlg dlg;
|
|
LoadFromGlobal(dlg, "QTF-designer");
|
|
int l, h;
|
|
bool sel = editor.GetSelection(l,h);
|
|
if(qtfsel && sel) {
|
|
dlg.qtfText.text <<= (~editor).ToString().Mid(l, h - l);
|
|
dlg.qtfText.copy.SetLabel("Apply and close");
|
|
dlg.Run();
|
|
editor.Remove(l, h - l);
|
|
editor.Insert(l, (~dlg.qtfText.text).ToString());
|
|
}
|
|
else {
|
|
dlg.qtfText.copy.SetLabel("Copy and close");
|
|
dlg.Run();
|
|
}
|
|
StoreToGlobal(dlg, "QTF-designer");
|
|
}
|