Geen omschrijving
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ViewSwitcher.cs 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  1. using System;
  2. using UnityEditor;
  3. using Codice.Client.Common.Threading;
  4. using Codice.CM.Common;
  5. using GluonGui;
  6. using PlasticGui;
  7. using PlasticGui.Gluon;
  8. using PlasticGui.WorkspaceWindow;
  9. using PlasticGui.WorkspaceWindow.Merge;
  10. using PlasticGui.WorkspaceWindow.QueryViews;
  11. using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
  12. using Unity.PlasticSCM.Editor.AssetUtils.Processor;
  13. using Unity.PlasticSCM.Editor.Tool;
  14. using Unity.PlasticSCM.Editor.UI;
  15. using Unity.PlasticSCM.Editor.UI.StatusBar;
  16. using Unity.PlasticSCM.Editor.Views.Changesets;
  17. using Unity.PlasticSCM.Editor.Views.History;
  18. using Unity.PlasticSCM.Editor.Views.IncomingChanges;
  19. using Unity.PlasticSCM.Editor.Views.PendingChanges;
  20. using Unity.PlasticSCM.Editor.Views.Branches;
  21. using GluonNewIncomingChangesUpdater = PlasticGui.Gluon.WorkspaceWindow.NewIncomingChangesUpdater;
  22. using ObjectInfo = Codice.CM.Common.ObjectInfo;
  23. namespace Unity.PlasticSCM.Editor
  24. {
  25. internal class ViewSwitcher :
  26. IViewSwitcher,
  27. IMergeViewLauncher,
  28. IGluonViewSwitcher,
  29. IHistoryViewLauncher
  30. {
  31. internal IIncomingChangesTab IncomingChangesTabForTesting { get { return mIncomingChangesTab; } }
  32. internal PendingChangesTab PendingChangesTab { get; private set; }
  33. internal ChangesetsTab ChangesetsTab { get; private set; }
  34. internal BranchesTab BranchesTab { get; private set; }
  35. internal HistoryTab HistoryTab { get; private set; }
  36. internal ViewSwitcher(
  37. WorkspaceInfo wkInfo,
  38. ViewHost viewHost,
  39. bool isGluonMode,
  40. IAssetStatusCache assetStatusCache,
  41. LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
  42. LaunchTool.IProcessExecutor processExecutor,
  43. WorkspaceOperationsMonitor workspaceOperationsMonitor,
  44. StatusBar statusBar,
  45. EditorWindow parentWindow)
  46. {
  47. mWkInfo = wkInfo;
  48. mViewHost = viewHost;
  49. mIsGluonMode = isGluonMode;
  50. mAssetStatusCache = assetStatusCache;
  51. mShowDownloadPlasticExeWindow = showDownloadPlasticExeWindow;
  52. mProcessExecutor = processExecutor;
  53. mWorkspaceOperationsMonitor = workspaceOperationsMonitor;
  54. mStatusBar = statusBar;
  55. mParentWindow = parentWindow;
  56. mPendingChangesTabButton = new TabButton();
  57. mIncomingChangesTabButton = new TabButton();
  58. mChangesetsTabButton = new TabButton();
  59. mBranchesTabButton = new TabButton();
  60. mHistoryTabButton = new TabButton();
  61. }
  62. internal void SetNewIncomingChanges(
  63. NewIncomingChangesUpdater developerNewIncomingChangesUpdater,
  64. GluonNewIncomingChangesUpdater gluonNewIncomingChangesUpdater,
  65. IIncomingChangesNotifier incomingChangesNotifier)
  66. {
  67. mDeveloperNewIncomingChangesUpdater = developerNewIncomingChangesUpdater;
  68. mGluonNewIncomingChangesUpdater = gluonNewIncomingChangesUpdater;
  69. mIncomingChangesNotifier = incomingChangesNotifier;
  70. }
  71. internal void SetWorkspaceWindow(WorkspaceWindow workspaceWindow)
  72. {
  73. mWorkspaceWindow = workspaceWindow;
  74. }
  75. internal void ShowInitialView()
  76. {
  77. ShowPendingChangesView();
  78. }
  79. internal void AutoRefreshPendingChangesView()
  80. {
  81. AutoRefresh.PendingChangesView(
  82. PendingChangesTab);
  83. }
  84. internal void AutoRefreshIncomingChangesView()
  85. {
  86. AutoRefresh.IncomingChangesView(
  87. mIncomingChangesTab);
  88. }
  89. internal void RefreshView(ViewType viewType)
  90. {
  91. IRefreshableView view = GetRefreshableView(viewType);
  92. if (view == null)
  93. return;
  94. view.Refresh();
  95. }
  96. internal void RefreshSelectedView()
  97. {
  98. IRefreshableView view = GetRefreshableViewBasedOnSelectedTab(mSelectedTab);
  99. if (view == null)
  100. return;
  101. view.Refresh();
  102. }
  103. internal void RefreshWorkingObjectInfoForSelectedView(
  104. ViewType viewType,
  105. WorkingObjectInfo homeInfo)
  106. {
  107. switch (viewType)
  108. {
  109. case ViewType.BranchesView:
  110. if (BranchesTab != null)
  111. BranchesTab.SetWorkingObjectInfo(homeInfo);
  112. break;
  113. case ViewType.ChangesetsView:
  114. if (ChangesetsTab != null)
  115. ChangesetsTab.SetWorkingObjectInfo(homeInfo);
  116. break;
  117. }
  118. }
  119. internal void OnDisable()
  120. {
  121. mWorkspaceOperationsMonitor.UnRegisterViews();
  122. if (PendingChangesTab != null)
  123. PendingChangesTab.OnDisable();
  124. if (mIncomingChangesTab != null)
  125. mIncomingChangesTab.OnDisable();
  126. if (ChangesetsTab != null)
  127. ChangesetsTab.OnDisable();
  128. if (BranchesTab != null)
  129. BranchesTab.OnDisable();
  130. if (HistoryTab != null)
  131. HistoryTab.OnDisable();
  132. }
  133. internal void Update()
  134. {
  135. if (IsViewSelected(SelectedTab.PendingChanges))
  136. {
  137. PendingChangesTab.Update();
  138. return;
  139. }
  140. if (IsViewSelected(SelectedTab.IncomingChanges))
  141. {
  142. mIncomingChangesTab.Update();
  143. return;
  144. }
  145. if (IsViewSelected(SelectedTab.Changesets))
  146. {
  147. ChangesetsTab.Update();
  148. return;
  149. }
  150. if (IsViewSelected(SelectedTab.Branches))
  151. {
  152. BranchesTab.Update();
  153. return;
  154. }
  155. if (IsViewSelected(SelectedTab.History))
  156. {
  157. HistoryTab.Update();
  158. return;
  159. }
  160. }
  161. internal void TabButtonsGUI()
  162. {
  163. InitializeTabButtonWidth();
  164. PendingChangesTabButtonGUI();
  165. IncomingChangesTabButtonGUI();
  166. ChangesetsTabButtonGUI();
  167. BranchesTabButtonGUI();
  168. HistoryTabButtonGUI();
  169. }
  170. internal void TabViewGUI()
  171. {
  172. if (IsViewSelected(SelectedTab.PendingChanges))
  173. {
  174. PendingChangesTab.OnGUI();
  175. return;
  176. }
  177. if (IsViewSelected(SelectedTab.IncomingChanges))
  178. {
  179. mIncomingChangesTab.OnGUI();
  180. return;
  181. }
  182. if (IsViewSelected(SelectedTab.Changesets))
  183. {
  184. ChangesetsTab.OnGUI();
  185. return;
  186. }
  187. if (IsViewSelected(SelectedTab.Branches))
  188. {
  189. BranchesTab.OnGUI();
  190. return;
  191. }
  192. if (IsViewSelected(SelectedTab.History))
  193. {
  194. HistoryTab.OnGUI();
  195. return;
  196. }
  197. }
  198. internal void ShowBranchesViewIfNeeded()
  199. {
  200. if (!BoolSetting.Load(UnityConstants.SHOW_BRANCHES_VIEW_KEY_NAME, true))
  201. return;
  202. string query = QueryConstants.BranchesBeginningQuery;
  203. ViewQueryResult queryResult = null;
  204. IThreadWaiter waiter = ThreadWaiter.GetWaiter();
  205. waiter.Execute(
  206. /*threadOperationDelegate*/ delegate
  207. {
  208. queryResult = new ViewQueryResult(
  209. PlasticGui.Plastic.API.FindQuery(mWkInfo, query));
  210. },
  211. /*afterOperationDelegate*/ delegate
  212. {
  213. if (waiter.Exception != null)
  214. {
  215. ExceptionsHandler.DisplayException(waiter.Exception);
  216. return;
  217. }
  218. if (queryResult == null)
  219. return;
  220. if (queryResult.Count()>0)
  221. OpenBranchesTab();
  222. });
  223. }
  224. internal void ShowBranchesView()
  225. {
  226. OpenBranchesTab();
  227. bool wasBranchesSelected =
  228. IsViewSelected(SelectedTab.Branches);
  229. if (!wasBranchesSelected)
  230. ((IRefreshableView)BranchesTab).Refresh();
  231. SetSelectedView(SelectedTab.Branches);
  232. }
  233. void IViewSwitcher.ShowPendingChanges()
  234. {
  235. ShowPendingChangesView();
  236. mParentWindow.Repaint();
  237. }
  238. void IViewSwitcher.ShowSyncView(string syncViewToSelect)
  239. {
  240. throw new NotImplementedException();
  241. }
  242. void IViewSwitcher.ShowBranchExplorerView()
  243. {
  244. //TODO: Codice
  245. //launch plastic with branch explorer view option
  246. }
  247. void IViewSwitcher.DisableMergeView()
  248. {
  249. }
  250. bool IViewSwitcher.IsIncomingChangesView()
  251. {
  252. return IsViewSelected(SelectedTab.IncomingChanges);
  253. }
  254. void IViewSwitcher.CloseIncomingChangesView()
  255. {
  256. ((IViewSwitcher)this).DisableMergeView();
  257. }
  258. void IMergeViewLauncher.MergeFrom(ObjectInfo objectInfo, EnumMergeType mergeType)
  259. {
  260. ((IMergeViewLauncher)this).MergeFromInterval(objectInfo, null, mergeType);
  261. }
  262. void IMergeViewLauncher.MergeFrom(ObjectInfo objectInfo, EnumMergeType mergeType, ShowIncomingChangesFrom from)
  263. {
  264. ((IMergeViewLauncher)this).MergeFromInterval(objectInfo, null, mergeType);
  265. }
  266. void IMergeViewLauncher.MergeFromInterval(ObjectInfo objectInfo, ObjectInfo ancestorChangesetInfo, EnumMergeType mergeType)
  267. {
  268. if (mergeType == EnumMergeType.IncomingMerge)
  269. {
  270. ShowIncomingChangesView();
  271. mParentWindow.Repaint();
  272. return;
  273. }
  274. LaunchTool.OpenMerge(
  275. mShowDownloadPlasticExeWindow,
  276. mProcessExecutor,
  277. mWkInfo,
  278. mIsGluonMode);
  279. }
  280. void IGluonViewSwitcher.ShowIncomingChangesView()
  281. {
  282. ShowIncomingChangesView();
  283. mParentWindow.Repaint();
  284. }
  285. void IHistoryViewLauncher.ShowHistoryView(
  286. RepositorySpec repSpec,
  287. long itemId,
  288. string path,
  289. bool isDirectory)
  290. {
  291. ShowHistoryView(
  292. repSpec,
  293. itemId,
  294. path,
  295. isDirectory);
  296. mParentWindow.Repaint();
  297. }
  298. void CloseHistoryTab()
  299. {
  300. ShowView(mPreviousSelectedTab);
  301. mViewHost.RemoveRefreshableView(
  302. ViewType.HistoryView, HistoryTab);
  303. HistoryTab.OnDisable();
  304. HistoryTab = null;
  305. mParentWindow.Repaint();
  306. }
  307. void OpenBranchesTab()
  308. {
  309. if (BranchesTab == null)
  310. {
  311. BranchesTab = new BranchesTab(
  312. mWkInfo,
  313. mWorkspaceWindow,
  314. this,
  315. this,
  316. mWorkspaceWindow,
  317. mDeveloperNewIncomingChangesUpdater,
  318. mParentWindow);
  319. mViewHost.AddRefreshableView(
  320. ViewType.BranchesView, BranchesTab);
  321. }
  322. BoolSetting.Save(true, UnityConstants.SHOW_BRANCHES_VIEW_KEY_NAME);
  323. }
  324. void CloseBranchesTab()
  325. {
  326. BoolSetting.Save(false, UnityConstants.SHOW_BRANCHES_VIEW_KEY_NAME);
  327. ShowView(mPreviousSelectedTab);
  328. mViewHost.RemoveRefreshableView(
  329. ViewType.BranchesView, BranchesTab);
  330. BranchesTab.OnDisable();
  331. BranchesTab = null;
  332. mParentWindow.Repaint();
  333. }
  334. void ShowPendingChangesView()
  335. {
  336. if (PendingChangesTab == null)
  337. {
  338. PendingChangesTab = new PendingChangesTab(
  339. mWkInfo,
  340. mViewHost,
  341. mIsGluonMode,
  342. mWorkspaceWindow,
  343. this,
  344. this,
  345. this,
  346. mShowDownloadPlasticExeWindow,
  347. mDeveloperNewIncomingChangesUpdater,
  348. mGluonNewIncomingChangesUpdater,
  349. mAssetStatusCache,
  350. mStatusBar,
  351. mParentWindow);
  352. mViewHost.AddRefreshableView(
  353. ViewType.CheckinView,
  354. PendingChangesTab);
  355. mWorkspaceOperationsMonitor.RegisterPendingChangesView(
  356. PendingChangesTab);
  357. }
  358. bool wasPendingChangesSelected =
  359. IsViewSelected(SelectedTab.PendingChanges);
  360. if (!wasPendingChangesSelected)
  361. {
  362. PendingChangesTab.AutoRefresh();
  363. }
  364. SetSelectedView(SelectedTab.PendingChanges);
  365. }
  366. void ShowIncomingChangesView()
  367. {
  368. if (mIncomingChangesTab == null)
  369. {
  370. mIncomingChangesTab = mIsGluonMode ?
  371. new Views.IncomingChanges.Gluon.IncomingChangesTab(
  372. mWkInfo,
  373. mViewHost,
  374. mWorkspaceWindow,
  375. mShowDownloadPlasticExeWindow,
  376. mGluonNewIncomingChangesUpdater,
  377. (Gluon.IncomingChangesNotifier)mIncomingChangesNotifier,
  378. mStatusBar,
  379. mParentWindow) as IIncomingChangesTab :
  380. new Views.IncomingChanges.Developer.IncomingChangesTab(
  381. mWkInfo,
  382. mWorkspaceWindow,
  383. this,
  384. mShowDownloadPlasticExeWindow,
  385. mDeveloperNewIncomingChangesUpdater,
  386. mParentWindow);
  387. mViewHost.AddRefreshableView(
  388. ViewType.IncomingChangesView,
  389. (IRefreshableView)mIncomingChangesTab);
  390. mWorkspaceOperationsMonitor.RegisterIncomingChangesView(
  391. mIncomingChangesTab);
  392. }
  393. bool wasIncomingChangesSelected =
  394. IsViewSelected(SelectedTab.IncomingChanges);
  395. if (!wasIncomingChangesSelected)
  396. mIncomingChangesTab.AutoRefresh();
  397. SetSelectedView(SelectedTab.IncomingChanges);
  398. }
  399. internal void ShowChangesetsView()
  400. {
  401. if (ChangesetsTab == null)
  402. {
  403. ChangesetsTab = new ChangesetsTab(
  404. mWkInfo,
  405. mWorkspaceWindow,
  406. this,
  407. this,
  408. this,
  409. mViewHost,
  410. mWorkspaceWindow,
  411. mWorkspaceWindow,
  412. mDeveloperNewIncomingChangesUpdater,
  413. PendingChangesTab,
  414. mShowDownloadPlasticExeWindow,
  415. mProcessExecutor,
  416. mParentWindow,
  417. mIsGluonMode);
  418. mViewHost.AddRefreshableView(
  419. ViewType.ChangesetsView,
  420. ChangesetsTab);
  421. }
  422. bool wasChangesetsSelected =
  423. IsViewSelected(SelectedTab.Changesets);
  424. if (!wasChangesetsSelected)
  425. ((IRefreshableView)ChangesetsTab).Refresh();
  426. SetSelectedView(SelectedTab.Changesets);
  427. }
  428. void ShowHistoryView(
  429. RepositorySpec repSpec,
  430. long itemId,
  431. string path,
  432. bool isDirectory)
  433. {
  434. if (HistoryTab == null)
  435. {
  436. HistoryTab = new HistoryTab(
  437. mWkInfo,
  438. mWorkspaceWindow,
  439. repSpec,
  440. mShowDownloadPlasticExeWindow,
  441. mProcessExecutor,
  442. mDeveloperNewIncomingChangesUpdater,
  443. mViewHost,
  444. mParentWindow,
  445. mIsGluonMode);
  446. mViewHost.AddRefreshableView(
  447. ViewType.HistoryView, HistoryTab);
  448. }
  449. HistoryTab.RefreshForItem(
  450. itemId,
  451. path,
  452. isDirectory);
  453. SetSelectedView(SelectedTab.History);
  454. }
  455. void InitializeTabButtonWidth()
  456. {
  457. if (mTabButtonWidth != -1)
  458. return;
  459. mTabButtonWidth = MeasureMaxWidth.ForTexts(
  460. UnityStyles.PlasticWindow.TabButton,
  461. PlasticLocalization.GetString(PlasticLocalization.Name.PendingChangesViewTitle),
  462. PlasticLocalization.GetString(PlasticLocalization.Name.IncomingChangesViewTitle),
  463. PlasticLocalization.GetString(PlasticLocalization.Name.BranchesViewTitle),
  464. PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetsViewTitle));
  465. }
  466. void ShowView(SelectedTab viewToShow)
  467. {
  468. switch (viewToShow)
  469. {
  470. case SelectedTab.PendingChanges:
  471. ShowPendingChangesView();
  472. break;
  473. case SelectedTab.IncomingChanges:
  474. ShowIncomingChangesView();
  475. break;
  476. case SelectedTab.Changesets:
  477. ShowChangesetsView();
  478. break;
  479. }
  480. }
  481. IRefreshableView GetRefreshableViewBasedOnSelectedTab(SelectedTab selectedTab)
  482. {
  483. switch (selectedTab)
  484. {
  485. case SelectedTab.PendingChanges:
  486. return PendingChangesTab;
  487. case SelectedTab.IncomingChanges:
  488. return (IRefreshableView)mIncomingChangesTab;
  489. case SelectedTab.Changesets:
  490. return ChangesetsTab;
  491. case SelectedTab.Branches:
  492. return BranchesTab;
  493. case SelectedTab.History:
  494. return HistoryTab;
  495. default:
  496. return null;
  497. }
  498. }
  499. IRefreshableView GetRefreshableView(ViewType viewType)
  500. {
  501. switch (viewType)
  502. {
  503. case ViewType.PendingChangesView:
  504. return PendingChangesTab;
  505. case ViewType.IncomingChangesView:
  506. return (IRefreshableView)mIncomingChangesTab;
  507. case ViewType.ChangesetsView:
  508. return ChangesetsTab;
  509. case ViewType.BranchesView:
  510. return BranchesTab;
  511. case ViewType.HistoryView:
  512. return HistoryTab;
  513. default:
  514. return null;
  515. }
  516. }
  517. internal bool IsViewSelected(SelectedTab tab)
  518. {
  519. return mSelectedTab == tab;
  520. }
  521. void SetSelectedView(SelectedTab tab)
  522. {
  523. if (mSelectedTab != tab)
  524. mPreviousSelectedTab = mSelectedTab;
  525. mSelectedTab = tab;
  526. if (mIncomingChangesTab == null)
  527. return;
  528. mIncomingChangesTab.IsVisible =
  529. tab == SelectedTab.IncomingChanges;
  530. }
  531. void PendingChangesTabButtonGUI()
  532. {
  533. bool wasPendingChangesSelected =
  534. IsViewSelected(SelectedTab.PendingChanges);
  535. bool isPendingChangesSelected = mPendingChangesTabButton.
  536. DrawTabButton(
  537. PlasticLocalization.GetString(PlasticLocalization.Name.PendingChangesViewTitle),
  538. wasPendingChangesSelected,
  539. mTabButtonWidth);
  540. if (isPendingChangesSelected)
  541. ShowPendingChangesView();
  542. }
  543. void IncomingChangesTabButtonGUI()
  544. {
  545. bool wasIncomingChangesSelected =
  546. IsViewSelected(SelectedTab.IncomingChanges);
  547. bool isIncomingChangesSelected = mIncomingChangesTabButton.
  548. DrawTabButton(
  549. PlasticLocalization.GetString(PlasticLocalization.Name.IncomingChangesViewTitle),
  550. wasIncomingChangesSelected,
  551. mTabButtonWidth);
  552. if (isIncomingChangesSelected)
  553. ShowIncomingChangesView();
  554. }
  555. void ChangesetsTabButtonGUI()
  556. {
  557. bool wasChangesetsSelected =
  558. IsViewSelected(SelectedTab.Changesets);
  559. bool isChangesetsSelected = mChangesetsTabButton.
  560. DrawTabButton(
  561. PlasticLocalization.GetString(PlasticLocalization.Name.ChangesetsViewTitle),
  562. wasChangesetsSelected,
  563. mTabButtonWidth);
  564. if (isChangesetsSelected)
  565. ShowChangesetsView();
  566. }
  567. void HistoryTabButtonGUI()
  568. {
  569. if (HistoryTab == null)
  570. return;
  571. bool wasHistorySelected =
  572. IsViewSelected(SelectedTab.History);
  573. bool isCloseButtonClicked;
  574. bool isHistorySelected = mHistoryTabButton.
  575. DrawClosableTabButton(
  576. PlasticLocalization.GetString(PlasticLocalization.Name.FileHistory),
  577. wasHistorySelected,
  578. true,
  579. mTabButtonWidth,
  580. mParentWindow.Repaint,
  581. out isCloseButtonClicked);
  582. if (isCloseButtonClicked)
  583. {
  584. CloseHistoryTab();
  585. return;
  586. }
  587. if (isHistorySelected)
  588. SetSelectedView(SelectedTab.History);
  589. }
  590. void BranchesTabButtonGUI()
  591. {
  592. if (BranchesTab == null)
  593. return;
  594. bool wasBranchesSelected =
  595. IsViewSelected(SelectedTab.Branches);
  596. bool isCloseButtonClicked;
  597. bool isBranchesSelected = mBranchesTabButton.
  598. DrawClosableTabButton(PlasticLocalization.GetString(
  599. PlasticLocalization.Name.Branches),
  600. wasBranchesSelected,
  601. true,
  602. mTabButtonWidth,
  603. mParentWindow.Repaint,
  604. out isCloseButtonClicked);
  605. if (isCloseButtonClicked)
  606. {
  607. CloseBranchesTab();
  608. return;
  609. }
  610. if (isBranchesSelected)
  611. SetSelectedView(SelectedTab.Branches);
  612. }
  613. internal enum SelectedTab
  614. {
  615. None = 0,
  616. PendingChanges = 1,
  617. IncomingChanges = 2,
  618. Changesets = 3,
  619. Branches = 4,
  620. History = 5
  621. }
  622. IIncomingChangesTab mIncomingChangesTab;
  623. SelectedTab mSelectedTab;
  624. SelectedTab mPreviousSelectedTab;
  625. float mTabButtonWidth = -1;
  626. TabButton mPendingChangesTabButton;
  627. TabButton mChangesetsTabButton;
  628. TabButton mIncomingChangesTabButton;
  629. TabButton mHistoryTabButton;
  630. TabButton mBranchesTabButton;
  631. IIncomingChangesNotifier mIncomingChangesNotifier;
  632. GluonNewIncomingChangesUpdater mGluonNewIncomingChangesUpdater;
  633. NewIncomingChangesUpdater mDeveloperNewIncomingChangesUpdater;
  634. WorkspaceWindow mWorkspaceWindow;
  635. readonly EditorWindow mParentWindow;
  636. readonly StatusBar mStatusBar;
  637. readonly WorkspaceOperationsMonitor mWorkspaceOperationsMonitor;
  638. readonly LaunchTool.IShowDownloadPlasticExeWindow mShowDownloadPlasticExeWindow;
  639. readonly LaunchTool.IProcessExecutor mProcessExecutor;
  640. readonly IAssetStatusCache mAssetStatusCache;
  641. readonly bool mIsGluonMode;
  642. readonly ViewHost mViewHost;
  643. readonly WorkspaceInfo mWkInfo;
  644. }
  645. }