fix #1917
WPFObjects - устранение мелких ошибок поворота и центрирования текста
This commit is contained in:
parent
d35fcda955
commit
795b4e79f8
|
|
@ -396,6 +396,7 @@ namespace VisualPascalABCPlugins
|
|||
void WriteToOutputBox(string message, bool is_exc);
|
||||
void ClearOutputTextBoxForTabPage(ICodeFileDocument tabPage);
|
||||
void AddTabWithUrl(string title, string url);
|
||||
void AddTextToCompilerMessagesSync(string text);
|
||||
}
|
||||
|
||||
public interface IWorkbenchOptionService
|
||||
|
|
|
|||
|
|
@ -302,7 +302,11 @@ namespace VisualPascalABC
|
|||
File.AppendAllText("logRun.txt", e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
|
||||
#endif
|
||||
RemoveFromTables(fileName);
|
||||
throw;
|
||||
// перехватываю!
|
||||
//PRunner.ProcessExited -= new EventHandler(PRunner_ProcessExited);
|
||||
//if (Exited != null)
|
||||
// Exited(fileName);
|
||||
throw; // Это не перехватывается и приводит к вылету оболочки - SSM 22/04/19
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -188,7 +188,10 @@ namespace VisualPascalABC
|
|||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
throw;
|
||||
// SSM 22/04/19 - исправляю вылет оболочки при отсутствии exe файла
|
||||
this.RunnerManager_Exited(OutputFileName);
|
||||
WorkbenchServiceFactory.OperationsService.AddTextToOutputWindowSync(OutputFileName,"Произошла непредвиденная ошибка. Вероятно, на диске отсутствует .exe-файл. Повторите запуск");
|
||||
//throw;
|
||||
}
|
||||
if (!ProjectFactory.Instance.ProjectLoaded)
|
||||
DocumentService.ActiveCodeFileDocument = tabPage;
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ namespace VisualPascalABC
|
|||
|
||||
void RunnerManager_Started(string fileName)
|
||||
{
|
||||
Workbench.BeginInvoke(new SetTextDelegate(RunnerManager_Started_Sync), fileName);
|
||||
RunnerManager_Started_Sync(fileName);
|
||||
//Workbench.BeginInvoke(new SetTextDelegate(RunnerManager_Started_Sync), fileName);
|
||||
}
|
||||
|
||||
void ButtonsEnableDisable_RunStart()
|
||||
|
|
@ -59,11 +60,6 @@ namespace VisualPascalABC
|
|||
}
|
||||
}
|
||||
|
||||
void RunnerManager_Started_Sync_Thread(object fileName)
|
||||
{
|
||||
RunnerManager_Started_Sync(fileName as string);
|
||||
}
|
||||
|
||||
void RunnerManager_OutputStringReceived(string fileName, RunManager.StreamType streamType, string text)
|
||||
{
|
||||
WorkbenchServiceFactory.OperationsService.AddTextToOutputWindowSync(fileName, text);
|
||||
|
|
@ -74,11 +70,22 @@ namespace VisualPascalABC
|
|||
fileName = Tools.FileNameToLower(fileName);
|
||||
if (!RunTabs.ContainsKey(fileName))
|
||||
{
|
||||
string s = fileName + " ";
|
||||
string s = "Closing: "+fileName + " \nRunTabs: ";
|
||||
foreach (string ss in RunTabs.Keys)
|
||||
s += ss + " ";
|
||||
throw new Exception(s);
|
||||
}
|
||||
RunTabs[fileName].Run = false;
|
||||
WorkbenchServiceFactory.DocumentService.SetTabPageText(RunTabs[fileName]);
|
||||
if (ReadRequests.ContainsKey(RunTabs[fileName]))
|
||||
ReadRequests.Remove(RunTabs[fileName]);
|
||||
UpdateReadRequest(false);
|
||||
WorkbenchServiceFactory.EditorService.SetFocusToEditor();
|
||||
//if (TerminateAllPrograms)
|
||||
WaitCallback_DeleteEXEAndPDB(fileName); // сделал всё синхронно - теперь WaitCallback_DeleteEXEAndPDB не должен работать медленно!
|
||||
//else
|
||||
// System.Threading.ThreadPool.QueueUserWorkItem(WaitCallback_DeleteEXEAndPDB, fileName); // в потоке - не синхронизировано! Надо запретить запускать что-то до окончания!
|
||||
|
||||
if (!ProjectFactory.Instance.ProjectLoaded)
|
||||
{
|
||||
if (Tools.FileNameToLower(WorkbenchServiceFactory.Workbench.CurrentEXEFileName) == fileName)
|
||||
|
|
@ -89,17 +96,7 @@ namespace VisualPascalABC
|
|||
else
|
||||
{
|
||||
ButtonsEnableDisable_RunStop();
|
||||
}
|
||||
RunTabs[fileName].Run = false;
|
||||
WorkbenchServiceFactory.DocumentService.SetTabPageText(RunTabs[fileName]);
|
||||
if (ReadRequests.ContainsKey(RunTabs[fileName]))
|
||||
ReadRequests.Remove(RunTabs[fileName]);
|
||||
UpdateReadRequest(false);
|
||||
WorkbenchServiceFactory.EditorService.SetFocusToEditor();
|
||||
if (TerminateAllPrograms)
|
||||
WaitCallback_DeleteEXEAndPDB(fileName);
|
||||
else
|
||||
System.Threading.ThreadPool.QueueUserWorkItem(WaitCallback_DeleteEXEAndPDB, fileName);
|
||||
} // SSM 22/04/19 - этот код перенесен в конец WaitCallback_DeleteEXEAndPDB - нет, там исключение
|
||||
}
|
||||
|
||||
void RunnerManager_RunnerManagerUnhanledRuntimeException(string id, string ExceptionType, string ExceptionMessage, string StackTraceData, List<RunManager.StackTraceItem> StackTrace)
|
||||
|
|
@ -152,21 +149,35 @@ namespace VisualPascalABC
|
|||
|
||||
void WaitCallback_DeleteEXEAndPDB(object state)
|
||||
{
|
||||
int i = 0;
|
||||
//int i = 0;
|
||||
string fileName = (string)state;
|
||||
while (i < 20)
|
||||
//while (i < 20) // 20 раз пытаться удалять! Это сильно!
|
||||
//{
|
||||
try
|
||||
{
|
||||
try
|
||||
if (Workbench.UserOptions.DeleteEXEAfterExecute && File.Exists(fileName))
|
||||
File.Delete(fileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
WorkbenchServiceFactory.OperationsService.AddTextToCompilerMessagesSync("Не удалось удалить EXE-файл");
|
||||
}
|
||||
try
|
||||
{
|
||||
if (Workbench.UserOptions.DeletePDBAfterExecute)
|
||||
{
|
||||
if (Workbench.UserOptions.DeleteEXEAfterExecute && File.Exists(fileName))
|
||||
File.Delete(fileName);
|
||||
if (Workbench.UserOptions.DeletePDBAfterExecute)
|
||||
{
|
||||
string pdbFileName = Path.ChangeExtension(fileName, ".pdb");
|
||||
if (File.Exists(pdbFileName) && File.Exists(pdbFileName))
|
||||
File.Delete(pdbFileName);
|
||||
}
|
||||
if (RunnerManager.TempBatFiles.ContainsKey(fileName))
|
||||
string pdbFileName = Path.ChangeExtension(fileName, ".pdb");
|
||||
if (File.Exists(pdbFileName))
|
||||
File.Delete(pdbFileName);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
WorkbenchServiceFactory.OperationsService.AddTextToCompilerMessagesSync("Не удалось удалить PDB-файл");
|
||||
}
|
||||
try
|
||||
{
|
||||
if (RunnerManager.TempBatFiles.ContainsKey(fileName))
|
||||
{
|
||||
string batname = RunnerManager.TempBatFiles[fileName];
|
||||
if (File.Exists(batname))
|
||||
|
|
@ -175,14 +186,27 @@ namespace VisualPascalABC
|
|||
RunnerManager.TempBatFiles.Remove(fileName);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
System.Threading.Thread.Sleep(20);
|
||||
i++;
|
||||
}
|
||||
catch
|
||||
{
|
||||
WorkbenchServiceFactory.OperationsService.AddTextToCompilerMessagesSync("Не удалось удалить bat-файл из словаря RunnerManager.TempBatFiles");
|
||||
}
|
||||
// SSM 22/04/19 - этот код перенесён сюда из RunnerManager_Exited_Sync - нет, тут исключение!
|
||||
/*if (!ProjectFactory.Instance.ProjectLoaded)
|
||||
{
|
||||
if (Tools.FileNameToLower(WorkbenchServiceFactory.Workbench.CurrentEXEFileName) == fileName)
|
||||
{
|
||||
ButtonsEnableDisable_RunStop();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ButtonsEnableDisable_RunStop();
|
||||
}*/
|
||||
//return;
|
||||
//System.Threading.Thread.Sleep(20);
|
||||
//i++;
|
||||
//}
|
||||
}
|
||||
|
||||
void ReadStringRequest(string ForId)
|
||||
|
|
|
|||
|
|
@ -242,7 +242,7 @@ type
|
|||
/// Правый нижний угол графического объекта
|
||||
property RightBottom: Point read Pnt(Left + Height,Top + Height);
|
||||
/// Угол поворота графического объекта (по часовой стрелке)
|
||||
property RotateAngle: real read InvokeReal(()->rot.Angle) write Invoke(procedure->rot.Angle := value);
|
||||
property RotateAngle: real read InvokeReal(()->rot.Angle) write Invoke(procedure->begin rot.CenterX := Width/2; rot.CenterY := Height/2; rot.Angle := value end);
|
||||
/// Множитель масштабирования объекта
|
||||
property ScaleFactor: real read InvokeReal(()->sca.ScaleX) write Invoke(()->begin (sca.ScaleX, sca.ScaleY) := (value,value); end);
|
||||
// Центр поворота графического объекта - запретил, т.к. это будет сбивать координаты объекта
|
||||
|
|
@ -439,13 +439,24 @@ type
|
|||
CircleWPF = class(BoundedObjectWPF)
|
||||
private
|
||||
procedure InitOb2(x,y,r: real; c: GColor) := InitOb1(x-r,y-r,2*r,2*r,c,new System.Windows.Shapes.Ellipse());
|
||||
procedure WT(value: real) := (ob.Width,ob.Height) := (value,value);
|
||||
procedure HT(value: real) := (ob.Width,ob.Height) := (value,value);
|
||||
procedure WT(value: real) := begin (ob.Width,ob.Height) := (value,value); (gr.Width,gr.Height) := (value,value); end;
|
||||
procedure HT(value: real) := begin (ob.Width,ob.Height) := (value,value); (gr.Width,gr.Height) := (value,value); end;
|
||||
|
||||
{procedure Rad(value: real);
|
||||
begin
|
||||
var delta := value - gr.Width/2;
|
||||
Left -= delta;
|
||||
Top -= delta;
|
||||
(gr.Width,gr.Height) := (value*2,value*2);
|
||||
Element.Points := ChangePointCollection(value,n);
|
||||
end;}
|
||||
|
||||
procedure Rad(value: real);
|
||||
begin
|
||||
//(ob as Ellipse).RenderedGeometry
|
||||
Left -= value - ob.Width/2;
|
||||
Top -= value - ob.Width/2;
|
||||
Left -= value - gr.Width/2;
|
||||
Top -= value - gr.Width/2;
|
||||
(gr.Width,gr.Height) := (value*2,value*2);
|
||||
(ob.Width,ob.Height) := (value*2,value*2);
|
||||
end;
|
||||
function GetInternalGeometry: Geometry; override := (ob as Shape).RenderedGeometry;
|
||||
|
|
@ -662,7 +673,7 @@ type
|
|||
write Invoke(()->begin Self.Element.bc := value; Self.Element.RecreateFormText; ob.InvalidateVisual end);
|
||||
/// Текст графического объекта
|
||||
property Text: string read InvokeString(()->Element.Text)
|
||||
write Invoke(procedure->begin Self.Element.Text := value; Self.Element.RecreateFormText; ; Width := Self.Element.Width; Height := Self.Element.Height; ob.InvalidateVisual end); override;
|
||||
write Invoke(procedure->begin Self.Element.Text := value; Self.Element.RecreateFormText; Width := Self.Element.Width; Height := Self.Element.Height; ob.InvalidateVisual end); override;
|
||||
/// Декоратор поворота объекта
|
||||
function WithRotate(da: real): TextWPF := inherited WithRotate(da) as TextWPF;
|
||||
end;
|
||||
|
|
|
|||
Loading…
Reference in a new issue