allSystemsGo Posted February 8, 2013 Share Posted February 8, 2013 I am working on a log-viewer application. I would like my GUI to be tabbed, and the titles of the tab to be the file name. For example: GUICtrlCreateTab(21, 5, 50, 30) GUICtrlCreateTabItem("FileName");; Get name of opened file What function would I use to do that? Thanks! Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 8, 2013 Moderators Share Posted February 8, 2013 zsutton92,From the Help file for GUICtrlSetData: "TabItem, TreeViewItem: Replaces the text". So you just need to store the ControlID of the TabItem when you create it and then use it in that function when you want to change the title. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
allSystemsGo Posted February 8, 2013 Author Share Posted February 8, 2013 (edited) zsutton92,From the Help file for GUICtrlSetData: "TabItem, TreeViewItem: Replaces the text". So you just need to store the ControlID of the TabItem when you create it and then use it in that function when you want to change the title. M23Thanks for your help, but I am not seeing this is in the help file...What I am doing is opening a file, and I want the file name to be inserted where into the GuiCtrlCreateTabItem field.edit:bad grammar Edited February 8, 2013 by zsutton92 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 8, 2013 Moderators Share Posted February 8, 2013 zsutton92, Sorry, I misunderstood what you wanted. You must already have the filename in your script (how else do you open it?) so why do you not use that name in the Create function when you create the tab item as you show in your first snippet? ; You have the file name $sFileName = "Fred.txt" ; So use it here GUICtrlCreateTabItem($sFileName) Or have I missed the point again? M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
allSystemsGo Posted February 8, 2013 Author Share Posted February 8, 2013 (edited) zsutton92, Sorry, I misunderstood what you wanted. You must already have the filename in your script (how else do you open it?) so why do you not use that name in the Create function when you create the tab item as you show in your first snippet? ; You have the file name $sFileName = "Fred.txt" ; So use it here GUICtrlCreateTabItem($sFileName) Or have I missed the point again? M23 Now we are getting somewhere. I don't declare the file name in the code...maybe this will help ;Select file to open Local $message = "Choose a File." Local $var = FileOpenDialog($message, @WindowsDir & "\", "Log Files (*.txt;*.log)", 1) If @error Then MsgBox(4096, "", "No File(s) chosen") Else $var = StringReplace($var, "|", @CRLF) MsgBox(4096, "", "You Chose " & $var) EndIf Local $file = FileOpen($var) ; Check if file opened for reading OK If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf $text= FileRead($file) FileClose($file) ;Create the main GUI GUICreate("Log Viewer", 800, 700) $Fing = GUICtrlCreateButton("Fing", 20, 670, 100, 20) $Find = GUICtrlCreateButton("Find", 200, 670, 100, 20) $hEdit = GUICtrlCreateEdit('', 20, 20, 760, 640, _ BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_MULTILINE, $WS_HSCROLL, $ES_NOHIDESEL)) $new = GUICtrlCreateButton("Open", 600, 670, 100, 20) GUICtrlSetData($hEdit,$text) GUISetState(@SW_SHOW) GUISetBkColor(0x00E0FFFF) GUISetFont(9, 300) GUICtrlCreateTab(21, 5, 100, 50) GUICtrlCreateTabItem($file) I do have a $file variable, but it doesn't do what I want, which I suppose is expected since I have not declared a file name. So I guess I need to declare something sort of like $sfileName= (whatever file I opened). I suppose thats a better question. edit. Nevermind! I have found the solution. I use the $var declaration thats already there...duh.. Edited February 8, 2013 by zsutton92 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 8, 2013 Moderators Share Posted February 8, 2013 zsutton92,I use the $var declaration thats already thereExactly! And do not worry - we all get those moments from time to time. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
allSystemsGo Posted February 8, 2013 Author Share Posted February 8, 2013 Here is one that I actually cannot figure out. How do I/is it possible to open a new file in a new tab in the same GUI? Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 8, 2013 Moderators Share Posted February 8, 2013 zsutton92, Of course. I suggest you use arrays to hold the various variables associated with each tab - along these lines: expandcollapse popup#include <GUIConstantsEx.au3> Global $aTabData[1][3] = [[0]] ; 0=tab 1=file 2=edit GUICreate("Log Viewer", 800, 700) $cNew = GUICtrlCreateButton("Open", 600, 670, 100, 20) $cTab = GUICtrlCreateTab(10, 10, 780, 640) _Open_File() GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $cNew _Open_File() EndSwitch WEnd Func _Open_File() ;Select file to open Local $sMessage = "Choose a File." Local $sFile = FileOpenDialog($sMessage, @WindowsDir & "\", "Log Files (*.txt;*.log)", 1) If @error Then MsgBox(4096, "", "No File(s) chosen") Else $var = StringReplace($sFile, "|", @CRLF) MsgBox(4096, "", "You Chose " & $sFile) EndIf ; Read file Local $hFile = FileOpen($sFile) ; Check if file opened for reading OK If $hFile = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf $sText= FileRead($hFile) FileClose($hFile) ; Create the tab and edit $aTabData[0][0] += 1 ReDim $aTabData[$aTabData[0][0] + 1][3] $aTabData[$aTabData[0][0]][0] = GUICtrlCreateTabItem($sFile) $aTabData[$aTabData[0][0]][1] = $sFile $aTabData[$aTabData[0][0]][2] = GUICtrlCreateEdit($sText, 20, 40, 760, 600) GUICtrlCreateTabItem("") EndFunc Any questions? M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
allSystemsGo Posted February 8, 2013 Author Share Posted February 8, 2013 (edited) zsutton92, Of course. I suggest you use arrays to hold the various variables associated with each tab - along these lines: expandcollapse popup#include <GUIConstantsEx.au3> Global $aTabData[1][3] = [[0]] ; 0=tab 1=file 2=edit GUICreate("Log Viewer", 800, 700) $cNew = GUICtrlCreateButton("Open", 600, 670, 100, 20) $cTab = GUICtrlCreateTab(10, 10, 780, 640) _Open_File() GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $cNew _Open_File() EndSwitch WEnd Func _Open_File() ;Select file to open Local $sMessage = "Choose a File." Local $sFile = FileOpenDialog($sMessage, @WindowsDir & "\", "Log Files (*.txt;*.log)", 1) If @error Then MsgBox(4096, "", "No File(s) chosen") Else $var = StringReplace($sFile, "|", @CRLF) MsgBox(4096, "", "You Chose " & $sFile) EndIf ; Read file Local $hFile = FileOpen($sFile) ; Check if file opened for reading OK If $hFile = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf $sText= FileRead($hFile) FileClose($hFile) ; Create the tab and edit $aTabData[0][0] += 1 ReDim $aTabData[$aTabData[0][0] + 1][3] $aTabData[$aTabData[0][0]][0] = GUICtrlCreateTabItem($sFile) $aTabData[$aTabData[0][0]][1] = $sFile $aTabData[$aTabData[0][0]][2] = GUICtrlCreateEdit($sText, 20, 40, 760, 600) GUICtrlCreateTabItem("") EndFunc Any questions? M23 Uhhh....Doesn't look right. The tabs switch...it opens with two tabs already. Care to take a look? expandcollapse popup;tabexample.au3 #include <GUIConstantsEx.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GuiEdit.au3> mainGUI() Func mainGUI() ;Select file to open Local $message = "Choose a File." Local $var = FileOpenDialog($message, @WindowsDir & "\", "Log Files (*.txt;*.log)", 1) If @error Then MsgBox(4096, "", "No File(s) chosen") Else $var = StringReplace($var, "|", @CRLF) MsgBox(4096, "", "You Chose " & $var) EndIf Local $file = FileOpen($var) ; Check if file opened for reading OK If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf $text = FileRead($file) FileClose($file) ;Create the main GUI Global $aTabData[1][3] = [[0]] ; 0=tab 1=file 2=edit GUICreate("Log Viewer", 800, 700) $cNew = GUICtrlCreateButton("Open", 600, 670, 100, 20) $cTab = GUICtrlCreateTab(10, 10, 780, 640) $Fing = GUICtrlCreateButton("Fing", 20, 670, 100, 20) $Find = GUICtrlCreateButton("Find", 200, 670, 100, 20) $hEdit = GUICtrlCreateEdit('', 20, 20, 760, 640, _ BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_MULTILINE, $WS_HSCROLL, $ES_NOHIDESEL)) $new = GUICtrlCreateButton("Open", 600, 670, 100, 20) $aTabData[0][0] += 1 ReDim $aTabData[$aTabData[0][0] + 1][3] $aTabData[$aTabData[0][0]][0] = GUICtrlCreateTabItem($File) $aTabData[$aTabData[0][0]][1] = $File $aTabData[$aTabData[0][0]][2] = GUICtrlCreateEdit($Text, 20, 40, 760, 600) GUICtrlSetData($hEdit, $text) GUISetState(@SW_SHOW) GUISetBkColor(0x00E0FFFF) GUISetFont(9, 300) GUICtrlCreateTab(21, 1, 165, 60) GUICtrlCreateTabItem($var) GUISetState() While 1 $nMsg = GUIGetMsg() Select Case $nMsg = $GUI_EVENT_CLOSE ExitLoop Case $nMsg = $Fing Run(@ComSpec & " /c " & "C:\fing.lnk") Case $nMsg = $Find _GUICtrlEdit_Find($hEdit) Case $nMsg = $new openNew() EndSelect WEnd EndFunc Sleep(1000) Func openNew() Local $var = FileOpenDialog("", @WindowsDir & "\", "Log Files (*.txt;*.log)", 1) Local $file = FileOpen($var) ; Check if file opened for reading OK If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf $textx = FileRead($file) FileClose($file) If @error Then MsgBox(4096, "", "No File(s) chosen") Else $var = StringReplace($var, "|", @CRLF) MsgBox(4096, "", "You Chose " & $var) EndIf $Fing = GUICtrlCreateButton("Fing", 20, 670, 100, 20, $BS_ICON) $Find = GUICtrlCreateButton("Find", 200, 670, 100, 20) $hEditx = GUICtrlCreateEdit('', 20, 20, 760, 640, _ BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_MULTILINE, $WS_HSCROLL, $ES_NOHIDESEL)) $new = GUICtrlCreateButton("Open", 600, 670, 100, 20) GUICtrlSetData($hEditx, $textx) GUISetState(@SW_SHOW) GUICtrlCreateTab(30, 1, 165, 60) GUICtrlCreateTabItem($var) ; Create the tab and edit $aTabData[0][0] += 1 ReDim $aTabData[$aTabData[0][0] + 1][3] $aTabData[$aTabData[0][0]][0] = GUICtrlCreateTabItem($File) $aTabData[$aTabData[0][0]][1] = $File $aTabData[$aTabData[0][0]][2] = GUICtrlCreateEdit($Text, 20, 40, 760, 600) While 1 $nMsg = GUIGetMsg() Select Case $nMsg = $GUI_EVENT_CLOSE ExitLoop Case $nMsg = $Fing Run(@ComSpec & " /c " & "C:\fing.lnk") Case $nMsg = $Find _GUICtrlEdit_Find($hEditx) Case $nMsg = $new openNew() EndSelect WEnd Sleep(1000) EndFunc ;==>openNew edit.. also the open button doesnt work anymore Edited February 8, 2013 by zsutton92 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 9, 2013 Moderators Share Posted February 9, 2013 zsutton92,As you have 2 GUICtrlCreateEdit lines in both your openNew function and in the completely unnecessary code you have stuck into the script when you create the GUI initially, why are you surprised that you have 2 edit controls created? And you keep recreating the the 3 buttons - so it is little suprise that you have problems. You also have 2 GUIGetMsg idle loops. Quite frankly the script is a complete mess. Here is a tidied-up version which does work: expandcollapse popup#include <GUIConstantsEx.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GuiEdit.au3> ; Global variables should be declared OUTSIDE functions Global $aTabData[1][3] = [[0]] ; 0=tab 1=file 2=edit mainGUI() Func mainGUI() ; Create the GUI GUICreate("Log Viewer", 800, 700) GUISetBkColor(0x00E0FFFF) GUISetFont(9, 300) $cTab = GUICtrlCreateTab(10, 10, 780, 640) $Fing = GUICtrlCreateButton("Fing", 20, 670, 100, 20) $Find = GUICtrlCreateButton("Find", 200, 670, 100, 20) $new = GUICtrlCreateButton("Open", 600, 670, 100, 20) ; Read a file before showing the GUI so that the tab and edit are create before we show the GUI openNew() ; Now show the GUI GUISetState(@SW_SHOW) ; Note there is only the one GUIGetMsg loop in the script While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $Fing Run(@ComSpec & " /c " & "C:\fing.lnk") Case $Find ; Which tab is displayed $iIndex = GUICtrlRead($cTab) + 1 ; So now we know which edit is displayed _GUICtrlEdit_Find($aTabData[$iIndex][2]) Case $new openNew() ; Every time we want a new tab we call the function again EndSwitch WEnd EndFunc ;==>mainGUI Func openNew() ; Choose a file Local $var = FileOpenDialog("", @WindowsDir & "\", "Log Files (*.txt;*.log)", 1) ; Open it Local $file = FileOpen($var) If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf ; Read it $textx = FileRead($file) If @error Then ; If you check for error it must be IMEDIATELY AFTER the function you check MsgBox(4096, "", "No File(s) chosen") Else $var = StringReplace($var, "|", @CRLF) MsgBox(4096, "", "You Chose " & $var) ; Create the tab and edit for this file ONLY if it was read $aTabData[0][0] += 1 ReDim $aTabData[$aTabData[0][0] + 1][3] $aTabData[$aTabData[0][0]][0] = GUICtrlCreateTabItem($var) $aTabData[$aTabData[0][0]][1] = $var ; Sorry, you do need the NOHIDESEL style to see the found text $aTabData[$aTabData[0][0]][2] = GUICtrlCreateEdit($textx, 20, 40, 760, 600, BitOR($GUI_SS_DEFAULT_EDIT, $ES_NOHIDESEL)) ConsoleWrite("Edit: " & $aTabData[$aTabData[0][0]][2] & @CRLF) GUICtrlCreateTabItem("") EndIf ; Close file FileClose($file) EndFunc ;==>openNewLook through it and see if you can understand why this works and yours did not. If you have questions then do please ask - we want you to learn. M23 allSystemsGo 1 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
allSystemsGo Posted February 11, 2013 Author Share Posted February 11, 2013 zsutton92, As you have 2 GUICtrlCreateEdit lines in both your openNew function and in the completely unnecessary code you have stuck into the script when you create the GUI initially, why are you surprised that you have 2 edit controls created? And you keep recreating the the 3 buttons - so it is little suprise that you have problems. You also have 2 GUIGetMsg idle loops. Quite frankly the script is a complete mess. Here is a tidied-up version which does work: expandcollapse popup#include <GUIConstantsEx.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GuiEdit.au3> ; Global variables should be declared OUTSIDE functions Global $aTabData[1][3] = [[0]] ; 0=tab 1=file 2=edit mainGUI() Func mainGUI() ; Create the GUI GUICreate("Log Viewer", 800, 700) GUISetBkColor(0x00E0FFFF) GUISetFont(9, 300) $cTab = GUICtrlCreateTab(10, 10, 780, 640) $Fing = GUICtrlCreateButton("Fing", 20, 670, 100, 20) $Find = GUICtrlCreateButton("Find", 200, 670, 100, 20) $new = GUICtrlCreateButton("Open", 600, 670, 100, 20) ; Read a file before showing the GUI so that the tab and edit are create before we show the GUI openNew() ; Now show the GUI GUISetState(@SW_SHOW) ; Note there is only the one GUIGetMsg loop in the script While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $Fing Run(@ComSpec & " /c " & "C:\fing.lnk") Case $Find ; Which tab is displayed $iIndex = GUICtrlRead($cTab) + 1 ; So now we know which edit is displayed _GUICtrlEdit_Find($aTabData[$iIndex][2]) Case $new openNew() ; Every time we want a new tab we call the function again EndSwitch WEnd EndFunc ;==>mainGUI Func openNew() ; Choose a file Local $var = FileOpenDialog("", @WindowsDir & "\", "Log Files (*.txt;*.log)", 1) ; Open it Local $file = FileOpen($var) If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf ; Read it $textx = FileRead($file) If @error Then ; If you check for error it must be IMEDIATELY AFTER the function you check MsgBox(4096, "", "No File(s) chosen") Else $var = StringReplace($var, "|", @CRLF) MsgBox(4096, "", "You Chose " & $var) ; Create the tab and edit for this file ONLY if it was read $aTabData[0][0] += 1 ReDim $aTabData[$aTabData[0][0] + 1][3] $aTabData[$aTabData[0][0]][0] = GUICtrlCreateTabItem($var) $aTabData[$aTabData[0][0]][1] = $var ; Sorry, you do need the NOHIDESEL style to see the found text $aTabData[$aTabData[0][0]][2] = GUICtrlCreateEdit($textx, 20, 40, 760, 600, BitOR($GUI_SS_DEFAULT_EDIT, $ES_NOHIDESEL)) ConsoleWrite("Edit: " & $aTabData[$aTabData[0][0]][2] & @CRLF) GUICtrlCreateTabItem("") EndIf ; Close file FileClose($file) EndFunc ;==>openNew Look through it and see if you can understand why this works and yours did not. If you have questions then do please ask - we want you to learn. M23 Works like a charm! I need to work on the way I organize things I suppose. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now