OSDN Git Service

no message
authorwagashi <wagashi@users.sourceforge.jp>
Thu, 25 Nov 2010 11:41:06 +0000 (20:41 +0900)
committerwagashi <wagashi@users.sourceforge.jp>
Thu, 25 Nov 2010 11:41:06 +0000 (20:41 +0900)
passer/HotKeyProcess.cs
passer/MainForm.cs
passer/MainFormEvent.cs
passer/Program.cs
passer/ProgramEngine.cs

index fd52757..856e5d2 100644 (file)
@@ -162,15 +162,21 @@ namespace Lugens.Passer
         /// </summary>
         public static void OpenMainForm()
         {
-            if (!Program.MainForm.Visible)
+            switch(Program.MainForm.Status)
             {
-                Program.MainForm.BeforeHWnd = Win32.GetForegroundWindow();
-                //Program.ForceForegroundWindow(this.beforeHWnd);
-                Program.MainForm.DoVisibleChange(true);
+                case MainForm.MainFormStatus.Active:
+                    Program.MainForm.ShowEngineList();
+                    return;
+
+                case MainForm.MainFormStatus.Hide:
+                    Program.MainForm.BeforeHWnd = Win32.GetForegroundWindow();
+                    Program.MainForm.DoVisibleChange(true);
+                    break;
             }
+
+            Program.MainForm.Status = MainForm.MainFormStatus.Active;
             Program.ForceForegroundWindow(Program.MainForm.Handle);
             Program.MainForm.Invalidate();
-            //Program.MainForm.TextBox_cmd.Focus();
             Program.MainForm.SearchTextBox.Focus();
             Program.MainForm.Timer.Start();
         }
index 0c5d446..edc2b93 100644 (file)
@@ -29,6 +29,14 @@ namespace Lugens.Passer
     /// </summary>
     public partial class MainForm : Form
     {
+        public enum MainFormStatus
+        {
+            Hide,
+            Active,
+            NoActive
+        }
+
+
         private static IntPtr hWndClipboardNext = IntPtr.Zero;
         
         private bool windowMoveFlag = false;
@@ -47,6 +55,13 @@ namespace Lugens.Passer
 
         private bool showDropdownSupport = true;
 
+        private MainFormStatus status = MainFormStatus.Hide;
+        public MainFormStatus Status
+        {
+            get { return status; }
+            set { status = value; }
+        }
+
         private AutoCompleteTextBox textBox_cmd;
         public AutoCompleteTextBox TextBox_cmd
         {
@@ -669,6 +684,7 @@ namespace Lugens.Passer
                 if (!Program.Main_MemorizeEngine)
                     this.SetSearchEngine(Program.GetEngineInfo(0));
                 this.timer1.Start();
+                this.Status = MainFormStatus.Active;
             }
             else
             {
@@ -681,6 +697,7 @@ namespace Lugens.Passer
                 this.searchTextBox.TextBox.ShowableDropdownList = false;
                 this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
                 this.timer1.Stop();
+                this.Status = MainFormStatus.Hide;
             }
         }
 
@@ -714,6 +731,7 @@ namespace Lugens.Passer
                     switch (Program.Status)
                     {
                         case ProgramStatus.MainFormOpen:
+                        case ProgramStatus.SelectingSearchEngine:
                             p = new Point((short)m.WParam, (short)m.LParam);
                             r = Program.MainForm.Bounds;
                             if (r.Left > p.X || r.Right < p.X || r.Top > p.Y || r.Bottom < p.Y)
@@ -726,18 +744,21 @@ namespace Lugens.Passer
                                         //Program.MainForm.DoVisibleChange(false);
                                         Program.MainForm.Opacity = 0.4;
                                         Program.MainForm.DropdownForm.DoVisibleChange(false);
+                                        Program.MainForm.Status = MainFormStatus.NoActive;
                                     }
                                 }
                                 else
                                 {
                                     //Program.MainForm.DoVisibleChange(false);
                                     Program.MainForm.Opacity = 0.4;
+                                    Program.MainForm.Status = MainFormStatus.NoActive;
                                 }
                             }
                             else if(Program.MainForm.Opacity != Program.FormOpacity)
                             {
                                 Program.MainForm.Opacity = Program.FormOpacity;
                             }
+                            Program.Status = ProgramStatus.MainFormOpen;
                             break;
 
                         case ProgramStatus.SentenceFormOpen:
index 1d8426a..6def71e 100644 (file)
@@ -38,7 +38,10 @@ namespace Lugens.Passer
             size.Height = this.searchTextBox.Size.Height;
             this.searchTextBox.Size = size;
             if (this.searchTextBox.TextBox.DropdownForm.Visible)
+            {
+                Program.Status = ProgramStatus.MainFormOpen;
                 this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
+            }
 
         }
 
@@ -68,7 +71,10 @@ namespace Lugens.Passer
                 Settings.Set(Settings.PASSER_FORM_MAIN_Y, this.seenPoint.Y);
 
                 if (this.searchTextBox.TextBox.DropdownForm.Visible)
+                {
+                    Program.Status = ProgramStatus.MainFormOpen; 
                     this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
+                }
             }
             else if (e.X >= (this.Size.Width - 4))
             {
@@ -129,6 +135,7 @@ namespace Lugens.Passer
                 case 2: //WebSearch
                     if (String.IsNullOrEmpty(this.searchTextBox.TextBox.Text))
                     {
+                        Program.Status = ProgramStatus.MainFormOpen; 
                         this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
                         this.suggestString = "";
                     }
@@ -190,6 +197,7 @@ namespace Lugens.Passer
             this.searchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Clear();
             if (filter && command.Equals(""))
             {
+                Program.Status = ProgramStatus.MainFormOpen;
                 this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
                 return;
             }
@@ -374,6 +382,7 @@ namespace Lugens.Passer
             }
             if (this.searchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Count == 0)
             {
+                Program.Status = ProgramStatus.MainFormOpen;
                 this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
                 return;
             }
@@ -404,6 +413,48 @@ namespace Lugens.Passer
 
         }
 
+
+        /// <summary>
+        /// DropdownFormにエンジンリスト一覧を表示する
+        /// </summary>
+        public void ShowEngineList()
+        {
+            if (!this.SearchTextBox.TextBox.DropdownForm.Visible)
+            {
+                //検索エンジンリストの表示
+                this.searchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Clear();
+                foreach (string key in Program.DefaultEngineList)
+                {
+                    EngineInfo info = Program.DefaultEngineDic[key];
+                    IconListBoxItem item = new IconListBoxItem();
+                    item.Name = info.Name;
+                    item.Text = info.Name;
+                    item.IconImage = info.IconImage;
+                    item.Type = IconListBoxType.SearchEngine;
+                    item.Data = info;
+                    item.Regex = Program.Ime.GetRomaji(item.Name);
+                    this.searchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Add(item);
+                }
+                foreach (string key in Program.EngineList)
+                {
+                    EngineInfo info = Program.EngineDic[key];
+                    IconListBoxItem item = new IconListBoxItem();
+                    item.Name = info.Name;
+                    item.Text = info.Display;
+                    item.IconImage = info.IconImage;
+                    item.Type = IconListBoxType.SearchEngine;
+                    item.Data = info;
+                    item.Regex = Program.Ime.GetRomaji(item.Name);
+                    this.searchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Add(item);
+                }
+                this.searchTextBox.TextBox.SetDropdownFormLocation();
+                this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(true);
+                this.searchTextBox.TextBox.DropdownForm.DropdownListBox.SelectedIndex = 0;
+                Program.Status = ProgramStatus.SelectingSearchEngine;
+            }
+        }
+
+
         private void SuggestReadCallBack(IAsyncResult ar)
         {
             try
@@ -455,11 +506,13 @@ namespace Lugens.Passer
                             case IconListBoxType.SearchEngineText:
                                 this.searchTextBox.TextBox.Text = item.Text;
                                 this.searchTextBox.TextBox.SelectionStart = this.searchTextBox.TextBox.Text.Length;
+                                Program.Status = ProgramStatus.MainFormOpen; 
                                 this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
                                 break;
                             case IconListBoxType.SearchEngine:
                                 EngineInfo info = (EngineInfo)item.Data;
                                 this.SetSearchEngine(info);
+                                Program.Status = ProgramStatus.MainFormOpen; 
                                 this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
                                 return;
                         }
@@ -505,6 +558,7 @@ namespace Lugens.Passer
                             {
                                 EngineInfo info = (EngineInfo)item.Data;
                                 this.SetSearchEngine(info);
+                                Program.Status = ProgramStatus.MainFormOpen;
                                 this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
                                 break;
                             }
@@ -512,6 +566,7 @@ namespace Lugens.Passer
                             {
                                 this.searchTextBox.TextBox.Text = this.searchTextBox.TextBox.DropdownForm.DropdownListBox.Text;
                                 this.searchTextBox.TextBox.SelectionStart = this.Text.Length;
+                                Program.Status = ProgramStatus.MainFormOpen;
                                 this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
                             }
                         }
@@ -539,6 +594,7 @@ namespace Lugens.Passer
                 case Keys.Escape:
                     if (this.SearchTextBox.TextBox.DropdownForm.Visible)
                     {
+                        Program.Status = ProgramStatus.MainFormOpen;
                         this.SearchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
                         Program.HideToolTip();
                         e.Handled = true;
@@ -558,6 +614,32 @@ namespace Lugens.Passer
                     }
                     e.Handled = true;
                     return;
+
+                default:
+                    if (Program.Status == ProgramStatus.SelectingSearchEngine)
+                    {
+                        //検索エンジンリストが開いてる場合
+                        string key = e.KeyChar + "";
+                        IconListBoxItem item;
+                        int index = this.SearchTextBox.TextBox.DropdownForm.DropdownListBox.SelectedIndex + 1;
+                        if (index >= this.SearchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Count)
+                            index = 0;
+                        for (int i = 0; i < this.SearchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Count; i++)
+                        {
+                            item = (IconListBoxItem)this.SearchTextBox.TextBox.DropdownForm.DropdownListBox.Items[index];
+                            EngineInfo info = (EngineInfo)item.Data;
+                            if (Program.Ime.StartsWith(item.Regex, key))
+                            {
+                                this.SearchTextBox.TextBox.DropdownForm.DropdownListBox.SelectedIndex = index;
+                                break;
+                            }
+                            if (++index >= this.SearchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Count)
+                                index = 0;
+                        }
+
+                        e.Handled = true;
+                    }
+                    break;
             }
         }
 
@@ -600,35 +682,7 @@ namespace Lugens.Passer
                 case Keys.Down:
                     if ((Keys.Alt & Control.ModifierKeys) == Keys.Alt)
                     {
-                        if (!this.SearchTextBox.TextBox.DropdownForm.Visible)
-                        {
-                            //検索エンジンリストの表示
-                            this.searchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Clear();
-                            foreach (string key in Program.DefaultEngineList)
-                            {
-                                EngineInfo info = Program.DefaultEngineDic[key];
-                                IconListBoxItem item = new IconListBoxItem();
-                                item.Name = info.Name;
-                                item.Text = info.Name;
-                                item.IconImage = info.IconImage;
-                                item.Type = IconListBoxType.SearchEngine;
-                                item.Data = info;
-                                this.searchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Add(item);
-                            }
-                            foreach (string key in Program.EngineList)
-                            {
-                                EngineInfo info = Program.EngineDic[key];
-                                IconListBoxItem item = new IconListBoxItem();
-                                item.Name = info.Name;
-                                item.Text = info.Display;
-                                item.IconImage = info.IconImage;
-                                item.Type = IconListBoxType.SearchEngine;
-                                item.Data = info;
-                                this.searchTextBox.TextBox.DropdownForm.DropdownListBox.Items.Add(item);
-                            }
-                            this.searchTextBox.TextBox.SetDropdownFormLocation();
-                            this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(true);
-                        }
+                        this.ShowEngineList();
                     }
                     else if ((Keys.Control & Control.ModifierKeys) == Keys.Control)
                     {
@@ -712,6 +766,7 @@ namespace Lugens.Passer
 
             if (type == 0 && String.IsNullOrEmpty(text))
             {
+                Program.Status = ProgramStatus.MainFormOpen;
                 this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
                 this.suggestString = "";
             }
@@ -828,6 +883,7 @@ namespace Lugens.Passer
         {
             this.searchTextBox.TextBox.Text = this.searchTextBox.TextBox.DropdownForm.DropdownListBox.Text;
             this.searchTextBox.TextBox.Select(this.searchTextBox.TextBox.Text.Length, 0);
+            Program.Status = ProgramStatus.MainFormOpen;
             this.searchTextBox.TextBox.DropdownForm.DoVisibleChange(false);
         }
 
index 337e1b5..c17e8c6 100644 (file)
@@ -1517,6 +1517,11 @@ namespace Lugens.Passer
         MainFormOpen,
 
         /// <summary>
+        /// 検索エンジン選択状態
+        /// </summary>
+        SelectingSearchEngine,
+
+        /// <summary>
         /// 設定フォーム表示状態
         /// </summary>
         SettingFormOpen,
index b7b5aaf..8367eb6 100644 (file)
@@ -423,7 +423,7 @@ namespace Lugens.Passer
             Program.HotKeyEngineList.Clear();
             EngineInfo info = new EngineInfo();
             info.Id = "0001";
-            info.Name = "Passer";
+            info.Name = "コマンドラインランチャー";
             info.Type = 0;
             info.Shortcut = 4176; //RControl + P
             info.IconImage = Properties.Resources.EngineCommand.ToBitmap();