1{$ifdef nnnn}begin end;{$endif} 2 3procedure DoApplyThemeToCustomDialog(F: TFormDummy); 4var 5 C: TComponent; 6 i: integer; 7begin 8 for i:= 0 to F.ComponentCount-1 do 9 begin 10 C:= F.Components[i]; 11 12 { 13 if C is TATListbox then 14 if (C as TATListbox).ThemedColors then 15 DoApplyThemeToListbox(C as ATListbox.TATListbox); 16 } 17 18 if C is TATSynEdit then 19 if TATSynEdit(C).OptThemed then 20 EditorApplyTheme(TATSynEdit(C)); 21 22 if C is TAppTreeContainer then 23 if TAppTreeContainer(C).Themed then 24 DoApplyThemeToTreeview(TAppTreeContainer(C).Tree, true, false); 25 26 if C is TATFlatToolbar then 27 if TATFlatToolbar(C).Themed then 28 DoApplyThemeToToolbar(TATFlatToolbar(C)); 29 end; 30end; 31 32 33procedure TfmMain.DoApplyThemeToGroups(G: TATGroups); 34begin 35 G.SetTabOption(tabColorText, GetAppColor(apclTabFont)); 36 G.SetTabOption(tabColorTextActive, GetAppColor(apclTabFontActive)); 37 G.SetTabOption(tabColorTextModified, GetAppColor(apclTabFontMod)); 38 G.SetTabOption(tabColorBg, GetAppColor(apclTabBg)); 39 G.SetTabOption(tabColorBgActive, GetAppColor(apclTabActive)); 40 G.SetTabOption(tabColorBgPassive, GetAppColor(apclTabPassive)); 41 G.SetTabOption(tabColorBgPassiveOver, GetAppColor(apclTabOver)); 42 G.SetTabOption(tabColorBorderActive, GetAppColor(apclTabBorderActive)); 43 G.SetTabOption(tabColorBorderPassive, GetAppColor(apclTabBorderPassive)); 44 G.SetTabOption(tabColorSeparator, GetAppColor(apclTabBorderActive)); 45 G.SetTabOption(tabColorArrow, GetAppColor(apclTabArrow)); 46 G.SetTabOption(tabColorArrowOver, GetAppColor(apclTabArrowOver)); 47 G.SetTabOption(tabColorCloseBg, GetAppColor(apclTabCloseBg)); 48 G.SetTabOption(tabColorCloseBgOver, GetAppColor(apclTabCloseBgOver)); 49 G.SetTabOption(tabColorCloseBorderOver, GetAppColor(apclTabCloseBorderOver)); 50 G.SetTabOption(tabColorCloseX, GetAppColor(apclTabCloseX)); 51 G.SetTabOption(tabColorCloseXOver, GetAppColor(apclTabCloseXOver)); 52 G.SetTabOption(tabColorActiveMark, GetAppColor(apclTabActiveMark)); 53 G.SetTabOption(tabColorSpecMarks, GetAppColor(apclTabMarks)); 54 G.Invalidate; 55end; 56 57procedure TfmMain.DoApplyTheme; 58var 59 id: TAppPanelId; 60 NColor: TColor; 61 i: integer; 62begin 63 with ATScrollbarTheme do 64 begin 65 ColorBG:= GetAppColor(apclScrollBack); 66 ColorBorder:= ColorBG; 67 ColorThumbBorder:= GetAppColor(apclScrollRect); 68 ColorThumbFill:= GetAppColor(apclScrollFill); 69 ColorThumbFillOver:= ColorThumbFill; 70 ColorThumbFillPressed:= ColorThumbFill; 71 ColorThumbDecor:= ColorThumbBorder; 72 ColorArrowBorder:= ColorBG; 73 ColorArrowFill:= ColorBG; 74 ColorArrowFillOver:= ColorArrowFill; 75 ColorArrowFillPressed:= ColorArrowFill; 76 ColorArrowSign:= GetAppColor(apclScrollArrow); 77 ColorScrolled:= GetAppColor(apclScrollScrolled); 78 end; 79 80 EditorApplyTheme(fmOutput.Ed); 81 EditorApplyTheme(fmValidate.Ed); 82 83 EditorApplyTheme(CodeTreeFilterInput); 84 if Assigned(fmConsole) then 85 begin 86 EditorApplyTheme(fmConsole.EdInput); 87 EditorApplyTheme(fmConsole.EdMemo); 88 fmConsole.Invalidate; 89 end; 90 91 ToolbarMain.Color:= GetAppColor(apclTabBg); 92 Self.Color:= ToolbarMain.Color; 93 94 PanelCodeTreeTop.Color:= ToolbarMain.Color; 95 ToolbarSideTop.Color:= GetAppColor(apclSideBg); 96 ToolbarSideLow.Color:= ToolbarSideTop.Color; 97 ToolbarSideMid.Color:= ToolbarSideTop.Color; 98 99 //floating side-panel and bottom-panel 100 for id in TAppPanelId do 101 if id<>cPaneNone then 102 with AppPanels[id] do 103 begin 104 PanelTitle.Color:= ToolbarMain.Color; 105 PanelTitle.Font.Color:= GetAppColor(apclTabFont); 106 Splitter.Color:= GetAppColor(apclSplitMain); 107 Splitter.Invalidate; 108 if Assigned(FormFloat) then 109 FormFloat.Invalidate; 110 end; 111 112 NColor:= GetAppColor(apclStatusBg); 113 if NColor=clNone then 114 NColor:= GetAppColor(apclTabBg); 115 Status.Color:= NColor; 116 117 Status.ColorBorderTop:= GetAppColor(apclButtonBorderPassive); 118 Status.ColorBorderR:= GetAppColor(apclButtonBorderPassive); 119 120 ATFlatTheme.ColorFont:= GetAppColor(apclButtonFont); 121 ATFlatTheme.ColorFontDisabled:= GetAppColor(apclButtonFontDisabled); 122 ATFlatTheme.ColorFontOverlay:= GetAppColor(apclSideBadgeFont); 123 ATFlatTheme.ColorBgPassive:= GetAppColor(apclButtonBgPassive); 124 ATFlatTheme.ColorBgOver:= GetAppColor(apclButtonBgOver); 125 ATFlatTheme.ColorBgChecked:= GetAppColor(apclButtonBgChecked); 126 ATFlatTheme.ColorBgDisabled:= GetAppColor(apclButtonBgDisabled); 127 ATFlatTheme.ColorBorderPassive:= GetAppColor(apclButtonBorderPassive); 128 ATFlatTheme.ColorArrows:= GetAppColor(apclTabArrow); 129 ATFlatTheme.ColorArrowsOver:= GetAppColor(apclTabArrowOver); 130 ATFlatTheme.ColorSeparators:= GetAppColor(apclTabBorderActive); 131 ATFlatTheme.ColorBorderOver:= GetAppColor(apclButtonBorderOver); 132 ATFlatTheme.ColorBorderFocused:= GetAppColor(apclButtonBorderFocused); 133 ATFlatTheme.ColorFontListbox:= GetAppColor(apclListFont); 134 ATFlatTheme.ColorFontListboxSel:= GetAppColor(apclListSelFont); 135 ATFlatTheme.ColorFontListboxHeader:= GetAppColor(apclListFont); 136 ATFlatTheme.ColorBgListbox:= GetAppColor(apclListBg); 137 ATFlatTheme.ColorBgListboxSel:= GetAppColor(apclListSelBg); 138 ATFlatTheme.ColorBgListboxHottrack:= ColorBlendHalf(ATFlatTheme.ColorBgListbox, ATFlatTheme.ColorBgListboxSel); 139 ATFlatTheme.ColorBgListboxHeader:= GetAppColor(apclButtonBgDisabled); 140 ATFlatTheme.ColorBgOverlay:= GetAppColor(apclSideBadgeBg); 141 //maybe use border colors from editor, not from buttons? 142 ATFlatTheme.ColorListboxBorderPassive:= GetAppColor(apclEdBorder); 143 ATFlatTheme.ColorListboxBorderFocused:= GetAppColor(apclEdBorderFocused); 144 //ATFlatTheme.ColorListboxBorderPassive:= GetAppColor(apclButtonBorderPassive); 145 //ATFlatTheme.ColorListboxBorderFocused:= GetAppColor(apclButtonBorderFocused); 146 147 UpdateThemeStatusbar; 148 149 AppApiFlatTheme:= ATFlatTheme; 150 AppApiFlatTheme.ColorBgListbox:= GetAppColor(apclTreeBg); 151 AppApiFlatTheme.ColorBgListboxSel:= GetAppColor(apclTreeSelBg); 152 AppApiFlatTheme.ColorFontListbox:= GetAppColor(apclTreeFont); 153 AppApiFlatTheme.ColorFontListboxSel:= GetAppColor(apclTreeSelFont); 154 155 DoApplyThemeToGroups(Groups); 156 if FloatGroups then 157 begin 158 DoApplyThemeToGroups(GroupsF1); 159 DoApplyThemeToGroups(GroupsF2); 160 DoApplyThemeToGroups(GroupsF3); 161 end; 162 163 if Assigned(fmFind) then 164 begin 165 fmFind.Color:= GetAppColor(apclTabBg); 166 EditorApplyTheme(fmFind.edFind); 167 EditorApplyTheme(fmFind.edRep); 168 fmFind.Invalidate; 169 end; 170 171 DoApplyThemeToTreeview(CodeTree.Tree, true, true); 172 CodeTree.Invalidate; 173 174 //proc_sidepanel_add_dialog 175 for i:= 0 to CustomDialogs.Count-1 do 176 DoApplyThemeToCustomDialog(TFormDummy(CustomDialogs[i])); 177 178 //apply AppTheme to all frames 179 DoApplyLexerStylesMapsToFrames(true); 180 181 Groups.SplitterColor:= GetAppColor(apclSplitGroups); 182 183 CompletionOps.ColorFontPrefix:= GetAppColor(apclListCompletePrefix); 184 CompletionOps.ColorFontParams:= GetAppColor(apclListCompleteParams); 185 186 DoApplyTheme_ThemedMainMenu; 187end; 188 189 190procedure TfmMain.DoApplyTheme_ThemedMainMenu; 191{$ifdef windows} 192var 193 NColor: TColor; 194{$endif} 195begin 196 {$ifdef windows} 197 MenuStylerTheme.FontName:= UiOps.ThemedMainMenuFontName; 198 MenuStylerTheme.FontSize:= UiOps.ThemedMainMenuFontSize; 199 200 NColor:= GetAppColor(apclMenuBg); 201 if NColor=clNone then 202 NColor:= GetAppColor(apclTabBg); 203 MenuStylerTheme.ColorBk:= NColor; 204 205 NColor:= GetAppColor(apclMenuSelBg); 206 if NColor=clNone then 207 NColor:= GetAppColor(apclTabOver); 208 MenuStylerTheme.ColorBkSelected:= NColor; 209 210 NColor:= GetAppColor(apclMenuFont); 211 if NColor=clNone then 212 NColor:= GetAppColor(apclTabFont); 213 MenuStylerTheme.ColorFont:= NColor; 214 215 NColor:= GetAppColor(apclMenuFontDisabled); 216 if NColor=clNone then 217 NColor:= GetAppColor(apclTabBorderPassive); 218 MenuStylerTheme.ColorFontDisabled:= NColor; 219 220 NColor:= GetAppColor(apclMenuFontHotkey); 221 if NColor=clNone then 222 NColor:= GetAppColor(apclMenuFont); 223 if NColor=clNone then 224 NColor:= GetAppColor(apclTabFontMod); 225 MenuStylerTheme.ColorFontShortcut:= NColor; 226 227 MenuStylerTheme.CharSubmenu:= '>'; //old Win don't have triangle char in default font 228 UpdateMenuTheming_MainMenu(true); 229 {$endif} 230end; 231 232procedure TfmMain.DoDialogMenuThemes_ThemeUiSelect(const AStr: string); 233begin 234 ThemeUi:= AStr; 235end; 236 237procedure TfmMain.DoDialogMenuThemes_ThemeSyntaxSelect(const AStr: string); 238begin 239 ThemeSyntax:= AStr; 240end; 241 242procedure TfmMain.DoDialogMenuThemes; 243var 244 Form: TfmChooseTheme; 245 OldThemeUi, OldThemeSyntax: string; 246begin 247 Form:= TfmChooseTheme.Create(Self); 248 try 249 OldThemeUi:= UiOps.ThemeUi; 250 OldThemeSyntax:= UiOps.ThemeSyntax; 251 Form.ThemeUiSetter:= @DoDialogMenuThemes_ThemeUiSelect; 252 Form.ThemeSyntaxSetter:= @DoDialogMenuThemes_ThemeSyntaxSelect; 253 254 if Form.ShowModal=mrOK then 255 DoOps_SaveThemes 256 else 257 begin 258 ThemeUi:= OldThemeUi; 259 ThemeSyntax:= OldThemeSyntax; 260 end; 261 finally 262 Form.Free; 263 end; 264end; 265 266procedure TfmMain.SetThemeUi(const AValue: string); 267var 268 SName: string; 269begin 270 UiOps.ThemeUi:= AValue; 271 272 if UiOps.ThemeUi='' then 273 begin 274 SName:= UiOps.ThemeSyntax; 275 AppThemeInit(AppTheme); //resets UI+Syntax 276 if SName<>'' then 277 SetThemeSyntax(SName); 278 end 279 else 280 AppThemeLoadFromFile( 281 AppDir_DataThemes+DirectorySeparator+UiOps.ThemeUi+AppExtensionThemeUi, 282 AppTheme, 283 true 284 ); 285 286 DoClearLexersAskedList; 287 DoApplyTheme; 288 289 DoPyEvent_AppState(APPSTATE_THEME_UI); 290end; 291 292procedure TfmMain.SetThemeSyntax(const AValue: string); 293var 294 SName: string; 295begin 296 UiOps.ThemeSyntax:= AValue; 297 298 if UiOps.ThemeSyntax='' then 299 begin 300 SName:= UiOps.ThemeUi; 301 AppThemeInit(AppTheme); //resets UI+Syntax 302 if SName<>'' then 303 SetThemeUi(SName); 304 end 305 else 306 AppThemeLoadFromFile( 307 AppDir_DataThemes+DirectorySeparator+UiOps.ThemeSyntax+AppExtensionThemeSyntax, 308 AppTheme, 309 false 310 ); 311 312 DoClearLexersAskedList; 313 DoApplyTheme; 314 315 DoPyEvent_AppState(APPSTATE_THEME_SYNTAX); 316end; 317 318 319function TfmMain.IsThemeNameExist(const AName: string; AThemeUI: boolean): boolean; 320var 321 Ext: string; 322begin 323 if AThemeUI then 324 Ext:= AppExtensionThemeUi 325 else 326 Ext:= AppExtensionThemeSyntax; 327 328 Result:= FileExists(AppDir_DataThemes+DirectorySeparator+AName+Ext); 329end; 330 331procedure TfmMain.mnuEditClick(Sender: TObject); 332var 333 Ed: TATSynEdit; 334 bSel: boolean; 335begin 336 Ed:= CurrentEditor; 337 if Ed=nil then exit; 338 339 bSel:= Ed.Carets.IsSelection; 340 341 if Assigned(mnuEditUndo) then 342 mnuEditUndo.Enabled:= not Ed.Strings.UndoEmpty; 343 344 if Assigned(mnuEditRedo) then 345 mnuEditRedo.Enabled:= not Ed.Strings.RedoEmpty; 346 347 if Assigned(mnuEditPaste) then 348 mnuEditPaste.Enabled:= Clipboard.HasFormat(CF_Text); 349 350 if Assigned(mnuEditCopy) then 351 mnuEditCopy.Enabled:= Ed.OptCopyLinesIfNoSel or bSel; 352 353 if Assigned(mnuEditCut) then 354 mnuEditCut.Enabled:= Ed.OptCutLinesIfNoSel or bSel; 355 356 if Assigned(mnuEditDel) then 357 mnuEditDel.Enabled:= bSel; 358 359 if Assigned(mnuEditCopyAppend) then 360 mnuEditCopyAppend.Enabled:= bSel; 361end; 362 363procedure TfmMain.DoDialogTheme(AThemeUI: boolean); 364var 365 Str, StrName, StrExt: string; 366begin 367 if AThemeUI then 368 begin 369 StrName:= UiOps.ThemeUi; 370 StrExt:= AppExtensionThemeUi; 371 end 372 else 373 begin 374 if not UiOps.LexerThemes then 375 MsgBox(msgStatusSyntaxThemesOff, MB_OK or MB_ICONWARNING); 376 377 StrName:= UiOps.ThemeSyntax; 378 StrExt:= AppExtensionThemeSyntax; 379 end; 380 381 if DoDialogConfigTheme(AppTheme, AThemeUI) then 382 begin 383 DoApplyTheme; 384 385 if Msgbox(msgConfirmSaveColorsToFile, MB_OKCANCEL or MB_ICONQUESTION)=ID_OK then 386 begin 387 Str:= Trim(InputBox(msgTitle, msgThemeName, StrName)); 388 if Str='' then exit; 389 Str:= AppDir_DataThemes+DirectorySeparator+Str+StrExt; 390 391 AppThemeSaveToFile(Str, AppTheme, AThemeUI); 392 end; 393 394 if AThemeUI then 395 DoPyEvent_AppState(APPSTATE_THEME_UI) 396 else 397 DoPyEvent_AppState(APPSTATE_THEME_SYNTAX) 398 end; 399end; 400 401function TfmMain.DoDialogConfigTheme(var AData: TAppTheme; AThemeUI: boolean): boolean; 402var 403 Form: TfmColorSetup; 404begin 405 Form:= TfmColorSetup.Create(nil); 406 try 407 Form.PanelUi.Visible:= AThemeUI; 408 Form.PanelSyntax.Visible:= not AThemeUI; 409 410 Form.OnApply:= @FormColorsApply; 411 Form.Data:= AData; 412 Result:= Form.ShowModal=mrOk; 413 414 if Result then 415 begin 416 AData:= Form.Data; 417 DoApplyLexerStylesMapsToFrames(false); 418 end; 419 finally 420 FreeAndNil(Form); 421 end; 422end; 423 424 425