/* Copyright (c) 2007 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Diagnostics; using System.Text; using System.Windows.Forms; using Google.GData.Client; using Google.GData.Documents; namespace DocListUploader { public partial class OptionsForm : Form { //The parent form to this one. private HiddenForm mainForm; /// /// Constructor for the OptionsForm. /// /// The parent form that created this one. public OptionsForm(HiddenForm mainForm) { InitializeComponent(); this.mainForm = mainForm; } private void OptionsForm_FormClosing(object sender, FormClosingEventArgs e) { //Don't destroy this form, just hide it. if(e.CloseReason == CloseReason.UserClosing) { this.Hide(); mainForm.HandleMinimize(); e.Cancel = true; } } private void LoginButton_Click(object sender, EventArgs e) { if (Username.Text == "") { MessageBox.Show("Please specify a username", "No user name", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (Password.Text == "") { MessageBox.Show("Please specify a password", "No password", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } try { LoginButton.Text = "Logging In"; UploaderStatus.Text = "Connecting to server..."; LoginButton.Enabled = false; LogoutButton.Enabled = true; RefreshButton.Enabled = true; Username.Enabled = false; Password.Enabled = false; mainForm.Login(Username.Text, Password.Text); LoginButton.Text = "Logged In"; UploaderStatus.Text = "Login complete"; UpdateDocList(); } catch (Exception ex) { LoginButton.Enabled = true; LogoutButton.Enabled = false; Username.Enabled = true; Password.Enabled = true; RefreshButton.Enabled = false; LoginButton.Text = "Login"; UploaderStatus.Text = "Error authenticating"; MessageBox.Show("Error logging into Google Docs: " + ex.Message, "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void Username_KeyPress(object sender, KeyPressEventArgs e) { //If the user hits enter, skip to the next field. if (e.KeyChar == (char) 13) { Password.Focus(); } } private void Password_KeyPress(object sender, KeyPressEventArgs e) { //If the user hits enter, try to log in. if (e.KeyChar == (char) 13) { LoginButton_Click(null, null); } } private void OptionsForm_DragDrop(object sender, DragEventArgs e) { if (!mainForm.loggedIn) { MessageBox.Show("Please log in before uploading documents", "Upload Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } string[] fileList = (string[]) e.Data.GetData(DataFormats.FileDrop); foreach (string file in fileList) { try { UploaderStatus.Text = "Uploading " + file; this.Refresh(); mainForm.UploadFile(file); UploaderStatus.Text = "Successfully uploaded " + file; UpdateDocList(); } catch (ArgumentException) { DialogResult result = MessageBox.Show("Error, unable to upload the file: '" + file + "'. It is not one of the valid types.", "Upload Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error); UploaderStatus.Text = "Problems uploading"; if (result == DialogResult.Cancel) { return; } } catch (Exception ex) { DialogResult result = MessageBox.Show("Error, unable to upload the file: '" + file + "'. " + ex.Message, "Upload Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error); UploaderStatus.Text = "Problems uploading"; if (result == DialogResult.Cancel) { return; } } } } private void OptionsForm_DragEnter(object sender, DragEventArgs e) { //If they are dragging a file, let the cursor reflect //the operation is permitted. if (e.Data.GetDataPresent(DataFormats.FileDrop, false)) { e.Effect = DragDropEffects.Copy; } } private void LogoutButton_Click(object sender, EventArgs e) { mainForm.Logout(); LoginButton.Enabled = true; LogoutButton.Enabled = false; Username.Enabled = true; Password.Enabled = true; RefreshButton.Enabled = false; LoginButton.Text = "Login"; UploaderStatus.Text = "Logged out."; } /// /// Gets a new list of documents from the server and renders /// them in the ListView called DocList on the form. /// public void UpdateDocList() { if (!mainForm.loggedIn) { MessageBox.Show("Log in before retrieving documents.", "Log in", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } DocList.Items.Clear(); try { DocumentsFeed feed = mainForm.GetDocs(); foreach (DocumentEntry entry in feed.Entries) { string imageKey = ""; if (entry.IsDocument) { imageKey = "Document.gif"; } else if (entry.IsSpreadsheet) { imageKey = "Spreadsheet.gif"; } else { imageKey = "Presentation.gif"; } ListViewItem item = new ListViewItem(entry.Title.Text, imageKey); item.SubItems.Add(entry.Updated.ToString()); item.Tag = entry; DocList.Items.Add(item); } foreach (ColumnHeader column in DocList.Columns) { column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); } } catch (Exception e) { MessageBox.Show("Error retrieving documents: " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// /// Opens the currently selected document in the form's ListView /// in the default browser. /// private void OpenSelectedDocument() { if (DocList.SelectedItems.Count > 0) { DocumentEntry entry = (DocumentEntry) DocList.SelectedItems[0].Tag; try { Process.Start(entry.AlternateUri.ToString()); } catch (Win32Exception) { //nothing is registered to handle URLs, so let's use IE! Process.Start("IExplore.exe", entry.AlternateUri.ToString()); } } } private void contextCheckBox_CheckedChanged(object sender, EventArgs e) { if (contextCheckBox.Checked) { mainForm.Register(); } else { mainForm.UnRegister(); } } private void OptionsForm_Resize(object sender, EventArgs e) { //When minimizing, hide this form from the taskbar. if (this.WindowState == FormWindowState.Minimized) { this.Hide(); mainForm.HandleMinimize(); } } private void DocList_DoubleClick(object sender, EventArgs e) { OpenSelectedDocument(); } private void RefreshButton_Click(object sender, EventArgs e) { UpdateDocList(); } private void OpenMenuItem_Click(object sender, EventArgs e) { OpenSelectedDocument(); } private void DeleteMenuItem_Click(object sender, EventArgs e) { if (DocList.SelectedItems.Count > 0) { DocumentEntry entry = (DocumentEntry) DocList.SelectedItems[0].Tag; DialogResult result = MessageBox.Show("Are you sure you want to delete " + entry.Title.Text + "?", "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (result == DialogResult.Yes) { try { entry.Delete(); UpdateDocList(); } catch (Exception ex) { MessageBox.Show("Error when deleting: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } } }