private void newToolStripMenuItem_Click(object sender, EventArgs e) { // Otvara novi tab sa novim txt file-om bez imena TabPage tp = new TabPage("(No name)"); tabControl2.TabPages.Add(tp); tabSizeToolStripMenuItem.Enabled = true; RichTextBox tb = new RichTextBox(); tb.KeyDown += Tb_KeyDown; tb.KeyPress += Tb_KeyPress; tb.MouseClick += Tb_MouseClick; tb.KeyUp += Tb_KeyUp; tb.AcceptsTab = true; tb.TabStop = false; tb.Dock = DockStyle.Fill; tb.Multiline = true; AutoComplete a = new AutoComplete(); a.DoubleClick += Tb_DoubleClick; tp.Controls.Add(a); tp.Controls.Add(tb); tabControl2.SelectTab(tp); ProvjeraTabova(); UpdateCurrentLine(); }
private void openToolStripMenuItem_Click(object sender, EventArgs e) { // Otvara dijalog za otvaranje teksta i otvara taj tekst u novom tabu OpenFileDialog open = new OpenFileDialog(); if (open.ShowDialog() == DialogResult.OK) { // Cita tekst iz otvorenog file-a, stavlja ga u RichTextBox i stavlja taj // RichTextBox u novootvoreni tab string filename = open.FileName; string[] filelines = File.ReadAllLines(filename); TabPage tp = new TabPage(filename.Split('\\').Last()); tabControl2.TabPages.Add(tp); RichTextBox tb = new RichTextBox(); tb.KeyDown += Tb_KeyDown; tb.KeyPress += Tb_KeyPress; tb.MouseClick += Tb_MouseClick; tb.KeyUp += Tb_KeyUp; tb.AcceptsTab = true; tb.TabStop = false; tb.Dock = DockStyle.Fill; tb.Multiline = true; foreach (string s in filelines) { tb.Text += s + "\n"; } AutoComplete a = new AutoComplete(); a.DoubleClick += Tb_DoubleClick; tp.Controls.Add(a); tp.Controls.Add(tb); tabControl2.SelectTab(tp); } ProvjeraTabova(); UpdateCurrentLine(); }
private void Tb_DoubleClick(object sender, EventArgs e) { // Double click misom na neki tekst u ListBox-u odabire taj tekst // i stavlja ga u RichTextBox, resetira ostale podatke i sakriva listu RichTextBox tb = tabControl2.SelectedTab.Controls[1] as RichTextBox; AutoComplete lista = sender as AutoComplete; string autoText = lista.SelectedItem.ToString(); int beginPlace = tb.SelectionStart - lista.count; tb.Select(beginPlace, lista.count); tb.SelectedText = ""; int pozicija = tb.SelectionStart; string prijeKursora = tb.Text.Substring(0, pozicija); string poslijeKursora = tb.Text.Substring(pozicija, tb.Text.Length - pozicija); tb.Text = prijeKursora + autoText + poslijeKursora; tb.Focus(); lista.listShow = false; lista.Hide(); tb.SelectionStart = autoText.Length + beginPlace; lista.count = 0; lista.keyword = ""; }
private void Tb_KeyDown(object sender, KeyEventArgs e) { RichTextBox tb = sender as RichTextBox; AutoComplete lista = (AutoComplete)tabControl2.SelectedTab.Controls[0]; UpdateCurrentLine(); // Korekcija velicine taba if (e.KeyCode == Keys.Tab && lista.listShow == false) { e.SuppressKeyPress = true; int pozicija = tb.SelectionStart; string razmak = ""; string prijeKursora = tb.Text.Substring(0, pozicija); string poslijeKursora = tb.Text.Substring(pozicija, tb.Text.Length - pozicija); for (int i = 0; i < velicinaTaba; ++i) { razmak += " "; } tb.Text = prijeKursora + razmak + poslijeKursora; tb.SelectionStart = pozicija + velicinaTaba; } // Ako nije ukljucen C# editor onda ne radi nista if (!cEditorToolStripMenuItem.Checked) { return; } //brace completion if (e.KeyCode == Keys.B && e.Alt) { int pozicija = tb.SelectionStart; tb.Text = tb.Text.Insert(pozicija, "}"); tb.SelectionStart = pozicija; } if (e.KeyCode == Keys.F && e.Alt) { int pozicija = tb.SelectionStart; tb.Text = tb.Text.Insert(pozicija, "]"); tb.SelectionStart = pozicija; } if (e.KeyCode == Keys.D8 && e.Shift) { int pozicija = tb.SelectionStart; tb.Text = tb.Text.Insert(pozicija, ")"); tb.SelectionStart = pozicija; } // Neke od kljucnih tipki ignoriraj if (e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.Menu || e.KeyCode == Keys.ControlKey || e.KeyCode == Keys.RMenu) { return; } // Ako je upisano nesto osim slova, _ i - onda spremi trenutnu rijec i sakrij listu // Pazimo jos da ovdje iskljucimo tipke Up, Down i Tab jer one sluze za baratanje listom if (lista.listShow && !(char.IsLetterOrDigit(Convert.ToChar(e.KeyCode)) || e.KeyCode == Keys.OemMinus || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Tab || e.KeyCode == Keys.Back) || // Ovo provjerava ako je neki specijalni znak za koji treba kombinacije dvije tipke (npr. '&') (char.IsLetterOrDigit(Convert.ToChar(e.KeyCode)) && (e.Alt || e.Control || e.Shift))) { lista.DodajRijecIResetiraj(); lista.Hide(); } // Ako je lista pokazana if (lista.listShow == true) { // Tipka gore pomice oznaceni element na listi gore if (e.KeyCode == Keys.Up) { e.SuppressKeyPress = true; lista.Focus(); if (lista.SelectedIndex != 0) { lista.SelectedIndex -= 1; } else { lista.SelectedIndex = 0; } tb.Focus(); }// Tipka dolje pomice oznaceni element na listi dolje else if (e.KeyCode == Keys.Down) { e.SuppressKeyPress = true; lista.Focus(); try { lista.SelectedIndex += 1; } catch { } tb.Focus(); } // Ako korisnik pritisne tab onda odabranu rijec stavi u tekst ili postavi tab i spremi rijec if (e.KeyCode == Keys.Tab) { int pozicija; string prijeKursora; string poslijeKursora; e.SuppressKeyPress = true; // Ako je tab pritisnut nakon nove rijeci onda tu rijec dodaj u listu svih rijeci // i nakon nje dodaj tabulator if (lista.SelectedItem == null) { lista.DodajRijecIResetiraj(); // Dodaj tab nakon trenutne rijeci pozicija = tb.SelectionStart; string razmak = ""; prijeKursora = tb.Text.Substring(0, pozicija); poslijeKursora = tb.Text.Substring(pozicija, tb.Text.Length - pozicija); for (int i = 0; i < velicinaTaba; ++i) { razmak += " "; } tb.Text = prijeKursora + razmak + poslijeKursora; tb.SelectionStart = pozicija + velicinaTaba; return; } // Odabranu rijec stavi u tekst i resetiraj podatke string autoText = lista.SelectedItem.ToString(); int beginPlace = tb.SelectionStart - lista.count; tb.Select(beginPlace, lista.count); tb.SelectedText = ""; pozicija = tb.SelectionStart; prijeKursora = tb.Text.Substring(0, pozicija); poslijeKursora = tb.Text.Substring(pozicija, tb.Text.Length - pozicija); tb.Text = prijeKursora + autoText + poslijeKursora; tb.Focus(); lista.listShow = false; lista.Hide(); tb.SelectionStart = autoText.Length + beginPlace; lista.count = 0; lista.keyword = ""; } } }
private void Tb_KeyPress(object sender, KeyPressEventArgs e) { RichTextBox tb = sender as RichTextBox; UpdateCurrentLine(); // Ako nije ukljucen C# editor onda ne radi nista if (!cEditorToolStripMenuItem.Checked) { return; } AutoComplete lista = (AutoComplete)tabControl2.SelectedTab.Controls[0]; // Ako je lista već otvorena if (lista.listShow == true) { if (e.KeyChar == 8) // 8 predstavlja BACKSPACE { // Ako se pritisne BACKSPACE smanji keyword i ponovno mijenjaj ponudjenu rijec lista.keyword = lista.keyword.Remove(lista.keyword.Length - 1); lista.MijenjajListu(); lista.count--; if (lista.count == 0) // Ako je prazna rijec sve resetiraj i odmakni listu { lista.count = 0; lista.keyword = ""; lista.listShow = false; lista.Hide(); } else { tb.Focus(); } } else { lista.keyword += e.KeyChar; lista.MijenjajListu(); lista.count++; tb.Focus(); } } else { // Ako lista nije otvorena otvori je i pokazi preporucene rijeci // Rijeci koje preporucujemo se sastoje od brojeva, slova, obicne crte i donje crte if (char.IsLetterOrDigit(e.KeyChar) || e.KeyChar == '_' || e.KeyChar == '-') { lista.keyword += e.KeyChar; lista.MijenjajListu(); lista.listShow = true; Point point = tb.GetPositionFromCharIndex(tb.SelectionStart); point.Y += (int)Math.Ceiling(tb.Font.GetHeight()) + tb.Location.Y; point.X += tb.Location.Y; lista.Location = point; lista.count++; tb.Focus(); } } }