Отчет по производственной практике в Компании “Эпам системз”

Автор работы: Пользователь скрыл имя, 14 Декабря 2014 в 13:35, отчет по практике

Описание работы

Эпам системз — крупнейший поставщик услуг в области разработки программного обеспечения и решений на территории России, стран СНГ, Центральной и Восточной Европы

Файлы: 1 файл

note.docx

— 823.11 Кб (Скачать файл)

 

  1. The vertical scroll bar is disabled unless the list of search results is longer than the pane.

 

  1. Pressing the search result highlights this result with yellow and navigates there (the same as in real application)

 

3.1.2.4.3. If the search field contains a search phrase, which has no matches in the document:

 

1) The following text is displayed: "You can search for text in your document by typing in the search box above. Click the X button to cancel your search."

 

2)  The label with the amount of search results shows "No matches".

 

3.1.2.5. Search Results Navigation Buttons (E)

The buttons are disabled unless the search results are displayed.

Tooltips for previous/next navigation buttons are: "Previous Search Result" and "Next Search Result" appropriately.

 

3.2. Find and Replace dialog

 

3.2.1. Triggers

3.2.1.1. Ribbon -> Home tab -> Editing group -> Find button's menu -> Advanced Find (the dialog opens with the Find tab active)

3.2.1.2. Ribbon -> Home tab -> Editing group -> Replace (the dialog opens with the Replace tab active)

 

3.2.2. Major Components

The dialog works the same as described in Word 2007 Misc - find and replace, p. 1.

 

3.2.3. Common Behavior

3.2.3.1. If the dialog is invoked while the search box of the navigation pane contains any text, the text shall be present in the dialog's search box either both on Find and on Replace tabs.

 

3.2.3.2. "Find Next" button performs the navigation within the search results, the Navigation Pane's search results remain as is (the same as in real application).

 

3.2.3.3. "Cancel" button closes the dialog. The Navigation Pane's behaviour is the following:

1) the search phrase remains in the Navigation Pane's search box, but the search results are cleared.

2) the following text is displayed: "You can search for text in your document by typing in the search box above. Click the X button to cancel your search."

3) The label shows "Click the arrows to continue your search".

4) Pressing any navigation arrow activates the search.

 

Comments

 

1. The Navigation pane shall always be switched off by default.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    1. Реализация технического задания

 

Реализовывать требуемый функционал можно было используя 2 подхода: добавить код создания и логики работы панели на главную форму Word, либо написать отдельный контрол, и затем добавить его на форму. Второй подход является наиболее предпочтительным, т.к. во-первых, написанный единажды компонент можно переиспользовать, если это потребуется в дальнейшем, и во-вторых, с отдельным компонентом проще работать. Также вынесение кода контрола в отдельный компонент способствует более “чистому” коду класса формы, где содержится только логика взаимодействия компонентов без их реализации. В процессе разработки использовались базовые компоненты DevExpress. На их основе были написаны 2 модуля: NavigationPanel и SearchResultControl. Исходный код этих компонент приводится соответственно в приложениях 1 и 2.

 

Рис. 2: симуляция MS Word 2010

 

Написанный компонент позволил добавить новую функциональность в симуляцию MS Office 2010 связанную с поиском слов и фраз. Выше приводится пример работы симулируемого приложения.

 

 

 

ЗАКЛЮЧЕНИЕ

 

Разработанный модуль полностью соответствует предъявленным требованиям. Тестирование модуля выявила ошибки, которые были успешно устранены. При разработке были применены современные технологии и язык программирования.

В ходе прохождения учебной практики был закреплён материал, предлагавшийся к изучению в университете, и успешно применён на практике при реализации выше упомянутого модуля.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ 1

[Исходный код пользовательского компонента SearchResultControl]

 

namespace Vista.Applications.Office2007.Word.Controls

{

public partial class SearchResultControl : DevExpress.XtraEditors.XtraUserControl

{

private readonly int _page;

private int _textPosition;

private bool _actAsSearchResult;

 

public SearchResultControl()

{

InitializeComponent();

searchResultText.BorderStyle = BorderStyle.None;

}

 

public SearchResultControl(string text, int position, int page) : this()

{

ProcessText(text);

_textPosition = position;

_page = page;

_actAsSearchResult = true;

searchResultText.BorderStyle = BorderStyle.FixedSingle;

}

 

public string ResultText

{

get { return searchResultText.Text; }

set { ProcessText(value); }

}

 

public int TextPosition

{

get { return _textPosition; }

set { _textPosition = value; }

}

 

private void ProcessText(string text)

{

using (Graphics g = CreateGraphics())

{

SizeF size = g.MeasureString(text, searchResultText.Font, 120);

int h = (int)Math.Ceiling(size.Height);

Height = h > 45 ? h : 45;

searchResultText.Text = text;

}

}

 

private void SearchResultControl_MouseHover(object sender, EventArgs e)

{

if (_actAsSearchResult)

{

SelectSearchResult(true);

searchResultToolTipController.ShowHint(string.Format("[Page {0}]", page));

}

}

 

private void SearchResultControl_MouseLeave(object sender, EventArgs e)

{

if (_actAsSearchResult)

{

SelectSearchResult(false);

searchResultToolTipController.HideHint();

}

}

 

public void SelectSearchResult(bool select)

{

if (_actAsSearchResult)

{

Appearance.BackColor = select ? Color.Gold : Color.White;

}

}

 

private void searchResultText_Enter(object sender, EventArgs e)

{

ActiveControl = contentPanelControl;

}

 

private void searchResultText_Click(object sender, EventArgs e)

{

OnClick(e);

}

 

private void searchResultText_KeyDown(object sender, KeyEventArgs e)

{

OnKeyDown(e);

}

 

private void contentPanelControl_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)

{

OnKeyDown(new KeyEventArgs(e.KeyCode));

}

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ 2

[Исходный код пользовательского компонента NavigationPanel]

 

namespace Vista.Applications.Office2007.Word.Controls

{

public partial class NavigationPanel : DevExpress.XtraEditors.XtraUserControl

{

#region private fields

private const int CancelImageIndex = 17;

private const int SearchImageIndex = 2;

private readonly ControlDictionary _localization;

private readonly List<SearchResultControl> _searchResults;

private WordApplication _app;

private FindAndReplaceDialog _searchDialog;

private WordControl _wordControl;

private string _textToFind;

private string _noMatchesText;

private string _noResultsText;

private string _cancelledSearchText;

private string _matchesText;

private string _searchButtonToolTipText;

private string _cancelButtonToolTipText;

private int _currentResultIndex;

#endregion

 

#region public properties

 

public WordApplication App

{

get

{

return _app;

}

 

set

{

if (value != null)

{

_app = value;

_wordControl = _app.MainForm.WordControl;

}

}

}

 

#endregion

 

#region Constructor & Localization

public NavigationPanel()

{

InitializeComponent();

_localization = LocalizationDictionary.Dictionary.GetControlDictionary("Word.dll", GetType().FullName);

Localize();

_searchResults = new List<SearchResultControl>();

searchTextEdit.Focus();

ShowNoResultsText(true);

}

 

private void Localize()

{

navigationLabel.Text = _localization.GetString("navigationLabel.Text");

minimizeButton.ToolTip = _localization.GetString("minimizeButton.ToolTip");

closeButton.ToolTip = _localization.GetString("closeButton.ToolTip");

searchTextEdit.Properties.NullText = _localization.GetString("searchTextEdit.Properties.NullText");

searchTextEdit.Properties.NullValuePrompt = _localization.GetString("searchTextEdit.Properties.NullText");

additionalSearchButton.ToolTip = _localization.GetString("additionalSearchButton.ToolTip");

_noMatchesText = _localization.GetString("_noMatchesText");

_matchesText = _localization.GetString("_matchesText");

_cancelButtonToolTipText = _localization.GetString("_cancelButtonToolTipText");

searchButton.ToolTip = _searchButtonToolTipText = _localization.GetString("_searchButtonToolTipText");

prevSearchResultButton.ToolTip = _localization.GetString("prevSearchResultButton.ToolTip");

nextSearchResultButton.ToolTip = _localization.GetString("nextSearchResultButton.ToolTip");

pagesTab.Tooltip = _localization.GetString("pagesTab.ToolTip");

headingTab.Tooltip = _localization.GetString("headingTab.ToolTip");

searchResultsTab.Tooltip = _localization.GetString("searchResultsTab.ToolTip");

_cancelledSearchText = _localization.GetString("_cancelledSearchText");

_noResultsText = _localization.GetString("_noResultsText");

}

#endregion

 

#region Event handlers

private void searchButton_Click(object sender, EventArgs e)

{

StartSearch();

}

 

private void additionalSearchButton_Click(object sender, EventArgs e)

{

searchPopupMenu.ShowPopup(MousePosition);

}

 

private void closeButton_Click(object sender, EventArgs e)

{

CloseNavigationPane();

}

 

private void CloseNavigationPane()

{

if (_app != null)

{

_app.MainForm.DisplayNavigationPanel(false, false);

}

}

 

private void bbAdvancedFind_ItemClick(object sender, ItemClickEventArgs e)

{

ShowFindReplaceDialog(FindAndReplaceDialog.Tabs.Find);

}

 

private void bbReplace_ItemClick(object sender, ItemClickEventArgs e)

{

ShowFindReplaceDialog(FindAndReplaceDialog.Tabs.Replace);

}

 

private void bbGoTo_ItemClick(object sender, ItemClickEventArgs e)

{

ShowFindReplaceDialog(FindAndReplaceDialog.Tabs.GoTo);

}

 

private void searchTextEdit_EditValueChanged(object sender, EventArgs e)

{

_searchResults.Clear();

ClearSearchResults();

if (string.Empty != searchTextEdit.Text)

{

searchButton.ImageIndex = CancelImageIndex;

searchButton.ToolTip = _searchButtonToolTipText;

_textToFind = searchTextEdit.Text;

Search(-1);

}

}

 

void searchResult_Click(object sender, EventArgs e)

{

if (_wordControl != null)

{

if (sender is SearchResultControl)

{

_wordControl.FindNextEntry(_textToFind, (sender as SearchResultControl).TextPosition);

_currentResultIndex = _searchResults.IndexOf(sender as SearchResultControl);

}

}

}

 

private void navigationTabControl_SelectedPageChanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e)

{

if (navigationTabControl.SelectedTabPage != null)

{

if (navigationTabControl.SelectedTabPage != searchResultsTab)

{

navigationTabControl.SelectedTabPage = searchResultsTab;

}

}

}

 

private void prevSearchResultButton_Click(object sender, EventArgs e)

{

if (_searchResults.Count != 0)

{

DeselectSearchResults();

if (--_currentResultIndex < 0)

{

_currentResultIndex = _searchResults.Count - 1;

}

 

_wordControl.FindNextEntry(_textToFind, _searchResults[_currentResultIndex].TextPosition);

_searchResults[_currentResultIndex].SelectSearchResult(true);

}

}

 

private void nextSearchResultButton_Click(object sender, EventArgs e)

{

if (_searchResults.Count != 0)

{

DeselectSearchResults();

if (++_currentResultIndex > _searchResults.Count - 1)

{

_currentResultIndex = 0;

}

 

_wordControl.FindNextEntry(_textToFind, _searchResults[_currentResultIndex].TextPosition);

_searchResults[_currentResultIndex].SelectSearchResult(true);

}

}

 

private void NavigationPanel_Enter(object sender, EventArgs e)

{

ActiveControl = searchTextEdit;

}

 

private void NavigationPanel_KeyDown(object sender, KeyEventArgs e)

{

switch (e.KeyCode)

{

case Keys.Return:

if (sender is TextEdit)

{

ActiveControl = nextSearchResultButton;

}

break;

case Keys.Escape:

CloseNavigationPane();

break;

}

}

#endregion

 

#region Public methods

 

public void ClearContent()

{

ClearSearchResults();

searchTextEdit.Text = string.Empty;

}

 

#endregion

 

#region Methods

 

private void ClearSearchResults()

{

resultTableLayout.Controls.Clear();

resultTableLayout.RowStyles.Clear();

resultTableLayout.RowStyles.Add(new RowStyle(SizeType.Absolute, 0));

resultTableLayout.RowCount = 1;

resultTableLayout.Size = new Size(resultTableLayout.Width, 0);

matchesLabel.Text = string.Empty;

EnableNavigationButtons(false);

}

 

private void ShowFindReplaceDialog(FindAndReplaceDialog.Tabs activeTab)

{

_searchDialog = new FindAndReplaceDialog(App, activeTab)

                {

                 TextToFind = searchTextEdit.Text

                };

DesktopEngine.ShowDialogNonModal(_searchDialog, App.MainForm);

_searchDialog.ActivateForm();

}

 

private void StartSearch()

{

if (searchButton.ImageIndex == CancelImageIndex)

{

searchButton.ImageIndex = SearchImageIndex;

ClearSearchResults();

_searchResults.Clear();

searchTextEdit.Text = string.Empty;

searchButton.ToolTip = _cancelButtonToolTipText;

ShowNoResultsText(true);

}

else

{

searchButton.ToolTip = _searchButtonToolTipText;

if (string.IsNullOrEmpty(searchTextEdit.Text))

{

searchPopupMenu.ShowPopup(MousePosition);

}

}

}

 

private void Search(int startPosition)

{

_searchResults.Clear();

do

{

startPosition = _wordControl.FindNextEntryNonHilighting(_textToFind, startPosition);

if (startPosition > -1)

{

AddToSearchResults(startPosition);

startPosition += _textToFind.Length;

}

}

while (startPosition != -1);

 

ShowSearchResults();

}

 

private void ShowSearchResults()

{

ClearSearchResults();

 

foreach (var searchResultControl in _searchResults)

{

resultTableLayout.RowStyles.Add(new RowStyle(SizeType.Absolute, searchResultControl.Height));

resultTableLayout.Size = new Size(180, resultTableLayout.Size.Height + searchResultControl.Height);

resultTableLayout.RowCount += 1;

resultTableLayout.Controls.Add(searchResultControl, 1, resultTableLayout.RowCount - 1);

}

 

if (_searchResults.Count > 0)

{

resultTableLayout.ColumnStyles[0] = new ColumnStyle(SizeType.Percent, 0F);

resultTableLayout.ColumnStyles[1] = new ColumnStyle(SizeType.Percent, 100F);

matchesLabel.Text = string.Format("{0} {1} ", _searchResults.Count, _matchesText);

EnableNavigationButtons(true);

}

else

{

ShowNoResultsText(false);

EnableNavigationButtons(false);

matchesLabel.Text = _noMatchesText;

}

}

 

private void AddToSearchResults(int position)

{

SearchResultControl searchResult = new SearchResultControl(_wordControl.GetCursorLine(), position, _wordControl.GetCurPage() + 1);

searchResult.Dock = DockStyle.Fill;

searchResult.Click += new EventHandler(searchResult_Click);

searchResult.KeyDown += new KeyEventHandler(NavigationPanel_KeyDown);

_searchResults.Add(searchResult);

 

var command = new FindNextEntry(PathWay.Form, _textToFind, position, false);

_app.CommandExecuter.Execute(command);

}

 

private void DeselectSearchResults()

{

foreach (SearchResultControl searchResultControl in _searchResults)

{

searchResultControl.SelectSearchResult(false);

}

}

 

private void ShowNoResultsText(bool cancelled)

{

resultTableLayout.ColumnStyles[0] = new ColumnStyle(SizeType.Percent, 5F);

resultTableLayout.ColumnStyles[1] = new ColumnStyle(SizeType.Percent, 95F);

SearchResultControl noResult = new SearchResultControl

                                   {

                                    Dock = DockStyle.Fill

                                   };

noResult.ResultText = cancelled ? _cancelledSearchText : _noResultsText;

resultTableLayout.RowStyles.Add(new RowStyle(SizeType.Absolute, noResult.Height));

resultTableLayout.Size = new Size(180, resultTableLayout.Size.Height + noResult.Height);

resultTableLayout.RowCount += 1;

resultTableLayout.Controls.Add(noResult, 1, resultTableLayout.RowCount - 1);

}

 

private void EnableNavigationButtons(bool enable)

{

if (enable)

{

prevSearchResultButton.ImageIndex = 18;

nextSearchResultButton.ImageIndex = 19;

nextSearchResultButton.Enabled = prevSearchResultButton.Enabled = true;

}

else

{

prevSearchResultButton.ImageIndex = 7;

nextSearchResultButton.ImageIndex = 8;

nextSearchResultButton.Enabled = prevSearchResultButton.Enabled = false;

}

}

 

#endregion

}

}

 

 

 

 

 

 

 

 

 

 


Информация о работе Отчет по производственной практике в Компании “Эпам системз”