• R/O
  • SSH
  • HTTPS

akdf: Commit


Commit MetaInfo

Revision537 (tree)
Time2021-03-30 01:55:38
Authorderekwildstar

Log Message

Revisão intermediária e incompleta. Não a use!
Estou comitando apenas porque vou remover a propriedade NotifierIndex de TKRKOTANotifier e preciso ter um ponto de retorno seguro

Change Summary

Incremental Difference

--- trunk/dtp/Experts/src/D14+/KX.EditorSubViews.pas (revision 536)
+++ trunk/dtp/Experts/src/D14+/KX.EditorSubViews.pas (revision 537)
@@ -126,11 +126,6 @@
126126 // ser inconveniente
127127 Module.Show;
128128
129- /// aparentemente o evento display é chamado quando se alternam as abas do
130- // editor principal, por exemplo, quando vc tem dois fontes abertos e
131- // alterna entre eles, este evento aqui é chamado, o que pode fazer com que
132- // o componente carregue texto antigo salvo em um rtf anteriormente
133-
134129 // codigo original que não faz uso de tdocument
135130 // if FileExists(FileName) then
136131 // (AViewObject as TFRAMDocumentation).Load(FileName)
--- trunk/dtp/Experts/src/D14+/KX.Notifiers.pas (revision 536)
+++ trunk/dtp/Experts/src/D14+/KX.Notifiers.pas (revision 537)
@@ -11,7 +11,8 @@
1111 , KRK.ToolsApi.Components.Notifier
1212 , KRK.ToolsApi.Components.EditServicesNotifier
1313 , KRK.ToolsApi.Components.IDENotifier
14- , KRK.ToolsApi.Components.ProjectMenuItemCreatorNotifier;
14+ , KRK.ToolsApi.Components.ProjectMenuItemCreatorNotifier
15+ , KRK.ToolsApi.Components.ModuleNotifier;
1516
1617 type
1718 TDAMONotifiers = class(TDataModule)
@@ -30,6 +31,7 @@
3031 MNUISubItem1: TMenuItem;
3132 MNUISubItem2: TMenuItem;
3233 N1: TMenuItem;
34+ KMON: TKRKOTAModuleNotifier;
3335 procedure KESNEditorViewActivated(const AEditWindow: INTAEditWindow; const AEditView: IOTAEditView);
3436 procedure KESNWindowNotification(const AEditWindow: INTAEditWindow; AOperation: TOperation);
3537 procedure KIDNFileNotification(ANotifyCode: TOTAFileNotification; const AFileName: string; var ACancel: Boolean);
@@ -41,6 +43,7 @@
4143 procedure MNUISubItem1Click(Sender: TObject);
4244 procedure MNUISubItem2Click(Sender: TObject);
4345 procedure PUMEPopup(Sender: TObject);
46+ procedure KMONAllowSave(out AAllowSave: Boolean);
4447 private
4548 { Private declarations }
4649 procedure CreateLanguagePanel(AStatusBar: TStatusBar);
@@ -261,7 +264,7 @@
261264 // desenganchamento do menu PopUp porque achei a solução adotada pelo Delphi
262265 // 2006 melhor: desviar o evento OnClose do Form da janela de edição.
263266 if AShow then
264- HookModulesTabSetPopUpMenu(AEditWindow,PUME)
267+ HookModulesTabSetPopUpMenu(AEditWindow,PUME);
265268 end;
266269
267270 procedure TDAMONotifiers.KIDNFileNotification(ANotifyCode: TOTAFileNotification; const AFileName: string; var ACancel: Boolean);
@@ -268,8 +271,43 @@
268271 begin
269272 if Assigned(GetINTAEditorServices.TopEditWindow) and (GetINTAEditorServices.TopEditWindow.StatusBar.ComponentCount = 1) then
270273 UpdateLanguageInfo(GetINTAEditorServices.TopEditWindow.StatusBar,'');
274+
275+ // o certo é criar uma nova instância de KMON para cada arquivo aberto e
276+ // manter uma lista que associa o modulo a seu notificador. Considerando que
277+ // mais de um modulo pode ser aberto, alguém deve manter a referencia para
278+ // permitir a remoção do notificador
279+
280+// KMON.Module.AddNotifier
281+
282+// acredito que tenha que ser feito aqui mesmo.
283+// faça com que a classe atual gerencie a lista de notificadores
284+// e remova NotifierIndex do notificador de modulo
285+// tem como saber o tipo de modulo, iotamoduletype ou algo assim e só atue para
286+// modulos especificos. quando se abre o modulo adiciona o notificador.
287+// talvez seja interessante criar uma função propria chamada AddModuleNotifier
288+// e seu par para criar automaticamente uma instância do notificador de modulo
289+//
290+// isso sera estranho, pois ter o componente não visual é muito conveniente. Como
291+// aproveitar o componente visual? criar a função de adicionar nele mesmo?? hu...
292+// talvez sim
293+
294+// if ANotifyCode = ofnFileOpened then
295+// begin
296+// KMON.Module := GetIOTAModuleFromFileName(AFileName);
297+// KMON.RegisterNotifier;
298+// end
299+// else if ANotifyCode = ofnFileClosing then
300+// begin
301+// KMON.UnRegisterNotifier;
302+// end;
271303 end;
272304
305+procedure TDAMONotifiers.KMONAllowSave(out AAllowSave: Boolean);
306+begin
307+// AAllowSave := False;
308+// ShowMessage('Salvando um módulo, aqui verifica-se os arquivos que este módulo gerencia e faz alguma coisa');
309+end;
310+
273311 procedure TDAMONotifiers.KPMNAddMenu(const AProject: IOTAProject; const AIdentList: TStrings; const AProjectManagerMenuList: IInterfaceList; const AIsMultiSelect: Boolean);
274312 var
275313 AvailableLanguage: TAvailableLanguage;
--- trunk/rtp/src/ToolsAPI/Components/KRK.ToolsApi.Components.ModuleNotifier.pas (revision 536)
+++ trunk/rtp/src/ToolsAPI/Components/KRK.ToolsApi.Components.ModuleNotifier.pas (revision 537)
@@ -19,21 +19,31 @@
1919 TOnBeforeRename = TOnAfterRename;
2020
2121 // A interface IOTAModuleNotifier80 possui duas propriedades, as quais estão
22- // associadas a dois métodos. Por um tempo eu não sabia como lidar com isso,
23- // mas acredio que seja como está implementado abaixo. As interfaces de
24- // notificação normalmente nos notificam algo, portanto, dados "saem" destas
25- // interfaces. Este é o funcionamento normal. Algumas interfaces, como
26- // IOTAModuleNotifier80 possuem propriedades somente leitura associadas a
22+ // associadas a dois métodos. As interfaces de notificação normalmente nos
23+ // notificam algo, portanto, dados "saem" destas interfaces. Este é o
24+ // funcionamento normal. Algumas interfaces, como IOTAModuleNotifier80 e
25+ // INTACustomEditorSubView possuem propriedades somente leitura associadas a
2726 // métodos. Isso significa que a IDE lê estas propriedades e é por isso que
2827 // precisamos implementar seus métodos associados (métodos get). Estes métodos
29- // get não serão chamados pela IDE, nós é que precisamos, nestes métodos,
30- // retornar algo para a IDE, fazendo o caminho oposto de uma interface de
31- // notificação comum. Na classe abaixo FOverwriteFileNames é uma lista que
32- // pode ser modificada em tempo de projeto no componente. Ao preencher esta
33- // lista, os métodos GetOverwriteFileName e GetOverwriteFileNameCount
34- // retornarão para a IDE as informações que ela precisa quando a IDE acessar
35- // as propriedades OverwriteFileNameCount e OverwriteFileNames
28+ // get não serão chamados pela IDE, eles existem na interface para nos obrigar
29+ // a implementá-los, pois a IDE fará uso apenas das propriedades somente
30+ // leitura, as quais obtém seus dados a partir dos métodos "get". Nós é quem
31+ // precisamos, nestes métodos, retornar algo para a IDE, fazendo o caminho
32+ // oposto de uma interface de notificação tradicional. Na classe abaixo
33+ // FOverwriteFileNames é uma lista que pode ser modificada em tempo de projeto
34+ // no componente. Ao preencher esta lista, os métodos GetOverwriteFileName e
35+ // GetOverwriteFileNameCount retornarão para a IDE as informações que ela
36+ // precisa quando a IDE acessar as propriedades OverwriteFileNameCount e
37+ // OverwriteFileNames.
3638
39+ // ATENÇÃO: Me parece estranho, nesta interface de notificação precisarmos
40+ // informar nomes de arquivo e sua quantidade, sendo que isso o módulo em
41+ // si já parece conhecer. Talvez isso seja algo para configurar corretamente o
42+ // notificador. Se isso for verdade, a OverwriteFileNames não deve existir,
43+ // pois seus dados devem ser pegos diretamente do modulo que registra esse
44+ // notificador. Verifique isso depois, pois acho que há como saber os arquivos
45+ // e quantidade de arquivos que um módulo manipula!
46+
3747 //: Classe do componente que implementa a interface IOTAModuleNotifier
3848 TKRKCustomOTAModuleNotifier = class(TKRKOTANotifier
3949 ,IOTAModuleNotifier
--- trunk/rtp/src/ToolsAPI/Components/KRK.ToolsApi.Components.Notifier.pas (revision 536)
+++ trunk/rtp/src/ToolsAPI/Components/KRK.ToolsApi.Components.Notifier.pas (revision 537)
@@ -35,7 +35,10 @@
3535 // deve usar o método de registro/desregistro a partir da interface correta.
3636 procedure RegisterNotifier; virtual;
3737 procedure UnRegisterNotifier; virtual;
38-
38+ // ATENÇÃO: NOTIFICADORES NÃO DEVEM TER ESSA PROPRIEDADE, PORQUE AQUELES QUE
39+ // OS REGISTRAM É QUE PRECISAM MANTER ESSE NUMERO! ESSA ALTERAÇÃO VAI SER DRÁSTICA
40+ // PROCURE TODOS OS NOTIFICADORES NO EXPERT E VEJA COMO ELES TÃO SENDO CRIADOS.
41+ // EM SEGUIDA DESVINCULE-OS, FAZENDO COM QUE LISTAS DE INDICES SEJAM MANTIDAS NOS OBJETOS QUE OS REGISTRAM
3942 property NotifierIndex: Integer read FNotifierIndex write FNotifierIndex;
4043 public
4144 constructor Create(AOwner: TComponent); override;
--- trunk/rtp/src/ToolsAPI/KRK.ToolsAPI.pas (revision 536)
+++ trunk/rtp/src/ToolsAPI/KRK.ToolsAPI.pas (revision 537)
@@ -52,15 +52,17 @@
5252 function GetINTAIDEInsightService: INTAIDEInsightService;
5353 function GetIOTAIDEInsightService: IOTAIDEInsightService;
5454 function GetINTAEditorServices: INTAEditorServices;
55+
5556 procedure RegisterNTAIDEInsightItem(ANTAIDEInsightItem: INTAIDEInsightItem; const ACategory: String = '');
5657 procedure UnRegisterNTAIDEInsightItem(const ANTAIDEInsightItem: INTAIDEInsightItem);
5758 function RegisterNTACustomEditorSubView(AINTACustomEditorSubView: INTACustomEditorSubView): Pointer;
5859 procedure UnRegisterNTACustomEditorSubView(ANTACustomEditorSubView: Pointer);
60+
5961 function AddOTAProjectMenuItemCreatorNotifier(AOTAProjectMenuItemCreatorNotifier: IOTAProjectMenuItemCreatorNotifier): Integer;
6062 procedure RemoveOTAProjectMenuItemCreatorNotifier(ANotifierIndex: Integer);
6163 {$ELSE} { Delphi 2009 e inferiores}
64+function AddNTAProjectMenuCreatorNotifier(ANTAProjectMenuCreatorNotifier: INTAProjectMenuCreatorNotifier): Integer;
6265 procedure RemoveNTAProjectMenuCreatorNotifier(ANotifierIndex: Integer);
63-function AddNTAProjectMenuCreatorNotifier(ANTAProjectMenuCreatorNotifier: INTAProjectMenuCreatorNotifier): Integer;
6466 {$IFEND}
6567
6668 // A regra para registro de notificadores é: ao necessitar de um notificador da
Show on old repository browser