iOS LibreOfficeLight, document actions
added action menu in Document viewer Change-Id: Ia7c796f7806e363769a5932ce774f33bb4ae8bd2 Reviewed-on: https://gerrit.libreoffice.org/35666 Reviewed-by: jan iversen <jani@libreoffice.org> Tested-by: jan iversen <jani@libreoffice.org>
This commit is contained in:
@@ -9,8 +9,87 @@ import UIKit
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DocumentController: UIViewController
|
class DocumentController: UIViewController, DocumentActionsControlDelegate
|
||||||
{
|
{
|
||||||
|
@IBAction func returned(segue: UIStoryboardSegue)
|
||||||
|
{
|
||||||
|
print("I returned")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Last stop before displaying popover
|
||||||
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
|
||||||
|
{
|
||||||
|
if segue.identifier == "showActions" {
|
||||||
|
let vc = segue.destination as! DocumentActions
|
||||||
|
vc.delegate = self
|
||||||
|
|
||||||
|
// JIX, TO BE CHANGED
|
||||||
|
vc.isDocActive = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionNew(_ name : String)
|
||||||
|
{
|
||||||
|
// JIX Close active documents if any
|
||||||
|
// Start new (with default name
|
||||||
|
|
||||||
|
// Only interact with DocumentBrowser
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionOpen()
|
||||||
|
{
|
||||||
|
// JIX Close active documents if any
|
||||||
|
// Present FileManager
|
||||||
|
performSegue(withIdentifier: "showFileManager", sender: self)
|
||||||
|
|
||||||
|
// start DocumentBrowser with new document
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionDelete()
|
||||||
|
{
|
||||||
|
// JIX Close active documents if any
|
||||||
|
// Delete document
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionSave()
|
||||||
|
{
|
||||||
|
// call save in DocumentBrowser
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionSaveAs(_ name : String)
|
||||||
|
{
|
||||||
|
// call saveas in DocumentBrowser
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionPDF()
|
||||||
|
{
|
||||||
|
// call savePDF in documentBrowser
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionPrint()
|
||||||
|
{
|
||||||
|
// call print in DocumentBrowser
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
override func viewDidLoad()
|
override func viewDidLoad()
|
||||||
@@ -20,49 +99,105 @@ class DocumentController: UIViewController
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@IBAction func returned(segue: UIStoryboardSegue) {
|
|
||||||
print("I returned")
|
|
||||||
}
|
|
||||||
|
|
||||||
override func didReceiveMemoryWarning()
|
override func didReceiveMemoryWarning()
|
||||||
{
|
{
|
||||||
super.didReceiveMemoryWarning()
|
super.didReceiveMemoryWarning()
|
||||||
// Dispose of any resources that can be recreated.
|
// Dispose of any resources that can be recreated.
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Protocol for action popover callback
|
||||||
|
protocol DocumentActionsControlDelegate
|
||||||
|
{
|
||||||
|
func actionNew(_ name : String)
|
||||||
|
func actionOpen()
|
||||||
|
func actionDelete()
|
||||||
|
func actionSave()
|
||||||
|
func actionSaveAs(_ name : String)
|
||||||
|
func actionPDF()
|
||||||
|
func actionPrint()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DocumentActions: UITableViewController
|
class DocumentActions: UITableViewController
|
||||||
{
|
{
|
||||||
|
// Pointer to callback class
|
||||||
|
var delegate : DocumentActionsControlDelegate?
|
||||||
|
var isDocActive : Bool = false
|
||||||
|
|
||||||
@IBAction func doOpen(_ sender: UIButton) {
|
// Calling class might enable/disable each button
|
||||||
|
@IBOutlet weak var buttonNew: UIButton!
|
||||||
|
@IBOutlet weak var buttonOpen: UIButton!
|
||||||
|
@IBOutlet weak var buttonDelete: UIButton!
|
||||||
|
@IBOutlet weak var buttonSave: UIButton!
|
||||||
|
@IBOutlet weak var buttonSaveAs: UIButton!
|
||||||
|
@IBOutlet weak var buttonPDF: UIButton!
|
||||||
|
@IBOutlet weak var buttonPrint: UIButton!
|
||||||
|
|
||||||
|
|
||||||
|
// Actions
|
||||||
|
@IBAction func doOpen(_ sender: UIButton)
|
||||||
|
{
|
||||||
|
delegate?.actionOpen()
|
||||||
|
dismiss(animated: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func doNew(_ sender: UIButton) {
|
|
||||||
|
|
||||||
|
@IBAction func doDelete(_ sender: UIButton)
|
||||||
|
{
|
||||||
|
delegate?.actionDelete()
|
||||||
|
dismiss(animated: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func doSave(_ sender: UIButton) {
|
|
||||||
|
|
||||||
|
@IBAction func doSave(_ sender: UIButton)
|
||||||
|
{
|
||||||
|
delegate?.actionSave()
|
||||||
|
dismiss(animated: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func doPDF(_ sender: UIButton) {
|
|
||||||
|
|
||||||
|
@IBAction func doPDF(_ sender: UIButton)
|
||||||
|
{
|
||||||
|
delegate?.actionPDF()
|
||||||
|
dismiss(animated: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@IBAction func doPrint(_ sender: UIButton)
|
||||||
|
{
|
||||||
|
delegate?.actionPrint()
|
||||||
|
dismiss(animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
override func viewDidLoad()
|
override func viewDidLoad()
|
||||||
{
|
{
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
// Do any additional setup after loading the view.
|
buttonDelete.isEnabled = isDocActive
|
||||||
|
buttonSave.isEnabled = isDocActive
|
||||||
|
buttonSaveAs.isEnabled = isDocActive
|
||||||
|
buttonPDF.isEnabled = isDocActive
|
||||||
|
buttonPrint.isEnabled = isDocActive
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
override func didReceiveMemoryWarning()
|
// Last stop before displaying popover
|
||||||
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
|
||||||
{
|
{
|
||||||
super.didReceiveMemoryWarning()
|
let vc = segue.destination as! setNameAction
|
||||||
// Dispose of any resources that can be recreated.
|
vc.delegateDoc = self.delegate
|
||||||
|
vc.protocolActionToPerform = (segue.identifier == "showNew") ? 2 : 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,477 +1,479 @@
|
|||||||
//
|
//
|
||||||
//ThisfileispartoftheLibreOfficeproject.
|
// This file is part of the LibreOffice project.
|
||||||
//
|
//
|
||||||
//ThisSourceCodeFormissubjecttothetermsoftheMozillaPublic
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
//License,v.2.0.IfacopyoftheMPLwasnotdistributedwiththis
|
// License, v.2.0. If a copy of the MPL was not distributed with this
|
||||||
//file,Youcanobtainoneathttp://mozilla.org/MPL/2.0/.
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
//
|
//
|
||||||
importUIKit
|
import UIKit
|
||||||
|
|
||||||
|
|
||||||
privateclassFileStorage
|
private class FileStorage
|
||||||
{
|
{
|
||||||
//housekeepingvariables
|
// house keeping variables
|
||||||
privateletfilemgr:FileManager=FileManager.default
|
private let filemgr : FileManager = FileManager.default
|
||||||
privatevarstorageIsLocal:Bool=true
|
private var storageIsLocal : Bool = true
|
||||||
|
|
||||||
//Startpathforthe2storagelocations
|
// Start path for the 2 storage locations
|
||||||
privateletbaseLocalDocPath:URL
|
private let baseLocalDocPath : URL
|
||||||
privateletbaseCloudDocPath:URL?
|
private let baseCloudDocPath : URL?
|
||||||
privatevarcurrentDocPath:URL?{
|
private var currentDocPath : URL? {
|
||||||
get{
|
get {
|
||||||
returnstorageIsLocal?baseLocalDocPath:baseCloudDocPath
|
return storageIsLocal ? baseLocalDocPath : baseCloudDocPath
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//makeaccesstocurrentdirindependentofstorageselection
|
// make access to current dir independent of storage selection
|
||||||
privatevarlocalDir:URL
|
private var localDir : URL
|
||||||
privatevarcloudDir:URL?
|
private var cloudDir : URL?
|
||||||
privatevarcurrentDir:URL{
|
private var currentDir : URL {
|
||||||
get{
|
get {
|
||||||
returnstorageIsLocal?localDir:cloudDir!
|
return storageIsLocal ? localDir : cloudDir!
|
||||||
}
|
}
|
||||||
set(newDir){
|
set(newDir) {
|
||||||
ifstorageIsLocal{
|
if storageIsLocal {
|
||||||
localDir=newDir
|
localDir = newDir
|
||||||
}else{
|
} else {
|
||||||
cloudDir=newDir
|
cloudDir = newDir
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// content of current directory
|
||||||
|
var currentFileList : [String] = []
|
||||||
|
var currentDirList : [String] = []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Support functions
|
||||||
|
func iCloudEnabled() -> Bool
|
||||||
|
{
|
||||||
|
return filemgr.ubiquityIdentityToken != nil
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func isSubDirectory() -> Bool
|
||||||
|
{
|
||||||
|
return currentDir != currentDocPath
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func selectStorage(_ doSwitch : Bool) -> Bool
|
||||||
|
{
|
||||||
|
if doSwitch {
|
||||||
|
storageIsLocal = !storageIsLocal
|
||||||
|
buildFileList()
|
||||||
|
}
|
||||||
|
return storageIsLocal
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func enterDirectory(_ name: String)
|
||||||
|
{
|
||||||
|
// simple add directory
|
||||||
|
currentDir = currentDir.appendingPathComponent(name)
|
||||||
|
filemgr.changeCurrentDirectoryPath(name)
|
||||||
|
buildFileList()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func leaveDirectory()
|
||||||
|
{
|
||||||
|
// step up for active storage, and only if not in root
|
||||||
|
if isSubDirectory() {
|
||||||
|
currentDir = currentDir.deletingLastPathComponent()
|
||||||
|
buildFileList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func createDirectory(_ name: String)
|
||||||
|
{
|
||||||
|
let newDir = currentDir.appendingPathComponent(name)
|
||||||
|
try! filemgr.createDirectory(at: newDir, withIntermediateDirectories: true, attributes: nil)
|
||||||
|
currentDir = currentDir.appendingPathComponent(name)
|
||||||
|
buildFileList()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func deleteFileDirectory(_ name: String)
|
||||||
|
{
|
||||||
|
let delDir = currentDir.appendingPathComponent(name)
|
||||||
|
try! filemgr.removeItem(at: delDir)
|
||||||
|
buildFileList()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func getFileURL(_ name: String) -> URL
|
||||||
|
{
|
||||||
|
return currentDir.appendingPathComponent(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func copyFile(_ name: String)
|
||||||
|
{
|
||||||
|
try! filemgr.copyItem(at: currentDir.appendingPathComponent(name),
|
||||||
|
to: (storageIsLocal ? cloudDir! : localDir).appendingPathComponent(name))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func moveFile(_ name: String)
|
||||||
|
{
|
||||||
|
try! filemgr.moveItem(at: currentDir.appendingPathComponent(name),
|
||||||
|
to: (storageIsLocal ? localDir : cloudDir!).appendingPathComponent(name))
|
||||||
|
buildFileList()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func renameFile(_ oldName: String, _ newName: String)
|
||||||
|
{
|
||||||
|
try! filemgr.moveItem(at: currentDir.appendingPathComponent(oldName),
|
||||||
|
to: currentDir.appendingPathComponent(newName))
|
||||||
|
buildFileList()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private func buildFileList()
|
||||||
|
{
|
||||||
|
currentDirList = []
|
||||||
|
currentFileList = []
|
||||||
|
let rawFileList = try! filemgr.contentsOfDirectory(at: currentDir,
|
||||||
|
includingPropertiesForKeys: [URLResourceKey.isDirectoryKey])
|
||||||
|
for rawFile in rawFileList {
|
||||||
|
var isDir: ObjCBool = false
|
||||||
|
filemgr.fileExists(atPath: rawFile.path, isDirectory: &isDir)
|
||||||
|
if isDir.boolValue {
|
||||||
|
currentDirList.append(rawFile.lastPathComponent)
|
||||||
|
} else {
|
||||||
|
currentFileList.append(rawFile.lastPathComponent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
init()
|
||||||
|
{
|
||||||
|
baseLocalDocPath = filemgr.urls(for: .documentDirectory, in: .userDomainMask)[0]
|
||||||
|
localDir = baseLocalDocPath
|
||||||
|
|
||||||
|
let cloudUrl = filemgr.url(forUbiquityContainerIdentifier: nil)
|
||||||
|
baseCloudDocPath = (cloudUrl == nil) ? nil : cloudUrl?.appendingPathComponent("Documents")
|
||||||
|
cloudDir = baseCloudDocPath
|
||||||
|
buildFileList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//contentofcurrentdirectory
|
class FileManagerController : UITableViewController, FileActionsControlDelegate
|
||||||
varcurrentFileList:[String]=[]
|
|
||||||
varcurrentDirList:[String]=[]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Supportfunctions
|
|
||||||
funciCloudEnabled()->Bool
|
|
||||||
{
|
|
||||||
returnfilemgr.ubiquityIdentityToken!=nil
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
funcisSubDirectory()->Bool
|
|
||||||
{
|
|
||||||
returncurrentDir!=currentDocPath
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcselectStorage(_doSwitch:Bool)->Bool
|
|
||||||
{
|
|
||||||
ifdoSwitch{
|
|
||||||
storageIsLocal=!storageIsLocal
|
|
||||||
buildFileList()
|
|
||||||
}
|
|
||||||
returnstorageIsLocal
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcenterDirectory(_name:String)
|
|
||||||
{
|
|
||||||
//simpleadddirectory
|
|
||||||
currentDir=currentDir.appendingPathComponent(name)
|
|
||||||
filemgr.changeCurrentDirectoryPath(name)
|
|
||||||
buildFileList()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
funcleaveDirectory()
|
|
||||||
{
|
|
||||||
//stepupforactivestorage,andonlyifnotinroot
|
|
||||||
ifisSubDirectory(){
|
|
||||||
currentDir=currentDir.deletingLastPathComponent()
|
|
||||||
buildFileList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funccreateDirectory(_name:String)
|
|
||||||
{
|
|
||||||
letnewDir=currentDir.appendingPathComponent(name)
|
|
||||||
try!filemgr.createDirectory(at:newDir,withIntermediateDirectories:true,attributes:nil)
|
|
||||||
currentDir=currentDir.appendingPathComponent(name)
|
|
||||||
buildFileList()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcdeleteFileDirectory(_name:String)
|
|
||||||
{
|
|
||||||
letdelDir=currentDir.appendingPathComponent(name)
|
|
||||||
try!filemgr.removeItem(at:delDir)
|
|
||||||
buildFileList()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcgetFileURL(_name:String)->URL
|
|
||||||
{
|
|
||||||
returncurrentDir.appendingPathComponent(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funccopyFile(_name:String)
|
|
||||||
{
|
|
||||||
try!filemgr.copyItem(at:currentDir.appendingPathComponent(name),
|
|
||||||
to:(storageIsLocal?cloudDir!:localDir).appendingPathComponent(name))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcmoveFile(_name:String)
|
|
||||||
{
|
|
||||||
try!filemgr.moveItem(at:currentDir.appendingPathComponent(name),
|
|
||||||
to:(storageIsLocal?localDir:cloudDir!).appendingPathComponent(name))
|
|
||||||
buildFileList()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcrenameFile(_oldName:String,_newName:String)
|
|
||||||
{
|
|
||||||
try!filemgr.moveItem(at:currentDir.appendingPathComponent(oldName),
|
|
||||||
to:currentDir.appendingPathComponent(newName))
|
|
||||||
buildFileList()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
privatefuncbuildFileList()
|
|
||||||
{
|
|
||||||
currentDirList=[]
|
|
||||||
currentFileList=[]
|
|
||||||
letrawFileList=try!filemgr.contentsOfDirectory(at:currentDir,
|
|
||||||
includingPropertiesForKeys:[URLResourceKey.isDirectoryKey])
|
|
||||||
forrawFileinrawFileList{
|
|
||||||
varisDir:ObjCBool=false
|
|
||||||
filemgr.fileExists(atPath:rawFile.path,isDirectory:&isDir)
|
|
||||||
ifisDir.boolValue{
|
|
||||||
currentDirList.append(rawFile.lastPathComponent)
|
|
||||||
}else{
|
|
||||||
currentFileList.append(rawFile.lastPathComponent)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
init()
|
|
||||||
{
|
|
||||||
baseLocalDocPath=filemgr.urls(for:.documentDirectory,in:.userDomainMask)[0]
|
|
||||||
localDir=baseLocalDocPath
|
|
||||||
|
|
||||||
letcloudUrl=filemgr.url(forUbiquityContainerIdentifier:nil)
|
|
||||||
baseCloudDocPath=(cloudUrl==nil)?nil:cloudUrl?.appendingPathComponent("Documents")
|
|
||||||
cloudDir=baseCloudDocPath
|
|
||||||
buildFileList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
classFileManagerController:UITableViewController,actionsControlDelegate
|
|
||||||
|
|
||||||
{
|
{
|
||||||
//Housekeepingvariables
|
// Housekeeping variables
|
||||||
privatevarfileData=FileStorage()
|
private var fileData = FileStorage()
|
||||||
privatevarselectedRow:IndexPath?
|
private var selectedRow : IndexPath?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//selectStorageisonlyenabledwheniCloudisactive
|
// selectStorage is only enabled when iCloud is active
|
||||||
@IBOutletweakvarbuttonSelectStorage:UIBarButtonItem!
|
@IBOutlet weak var buttonSelectStorage: UIBarButtonItem!
|
||||||
overridefuncviewDidLoad()
|
override func viewDidLoad()
|
||||||
|
{
|
||||||
|
super.viewDidLoad()
|
||||||
|
buttonSelectStorage.isEnabled = fileData.iCloudEnabled()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Toogle between local and cloud storage
|
||||||
|
@IBAction func doSelectStorage(_ sender: UIBarButtonItem)
|
||||||
|
{
|
||||||
|
sender.image = fileData.selectStorage(true) ? #imageLiteral(resourceName: "iCloudDrive") : #imageLiteral(resourceName: "iPhone")
|
||||||
|
reloadData()
|
||||||
|
self.presentedViewController?.dismiss(animated: true, completion: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Last stop before displaying popover
|
||||||
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
|
||||||
|
{
|
||||||
|
if segue.identifier == "showActions" {
|
||||||
|
let vc = segue.destination as! FileManagerActions
|
||||||
|
vc.delegate = self
|
||||||
|
vc.inFileSelect = (selectedRow != nil)
|
||||||
|
vc.inSubDirectory = fileData.isSubDirectory()
|
||||||
|
vc.useCloud = fileData.iCloudEnabled()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionOpen()
|
||||||
|
{
|
||||||
|
if selectedRow != nil {
|
||||||
|
let currentCell = tableView.cellForRow(at: selectedRow!) as! FileManagerCell
|
||||||
|
if currentCell.isDirectory {
|
||||||
|
fileData.enterDirectory(currentCell.fileName)
|
||||||
|
reloadData()
|
||||||
|
} else {
|
||||||
|
// JIX delegate to Document
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionDelete()
|
||||||
|
{
|
||||||
|
if selectedRow != nil {
|
||||||
|
let currentCell = self.tableView.cellForRow(at: selectedRow!) as! FileManagerCell
|
||||||
|
fileData.deleteFileDirectory(currentCell.fileName)
|
||||||
|
reloadData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionRename(_ name : String)
|
||||||
|
{
|
||||||
|
if selectedRow != nil {
|
||||||
|
let currentCell = tableView.cellForRow(at: selectedRow!) as! FileManagerCell
|
||||||
|
fileData.renameFile(currentCell.fileName, name)
|
||||||
|
reloadData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionUploadDownload()
|
||||||
|
{
|
||||||
|
if selectedRow != nil {
|
||||||
|
let currentCell = self.tableView.cellForRow(at: selectedRow!) as! FileManagerCell
|
||||||
|
fileData.copyFile(currentCell.fileName)
|
||||||
|
reloadData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionLevelUp()
|
||||||
|
{
|
||||||
|
fileData.leaveDirectory()
|
||||||
|
reloadData()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func actionCreateDirectory(_ name : String)
|
||||||
|
{
|
||||||
|
fileData.createDirectory(name)
|
||||||
|
reloadData()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Table handling functions
|
||||||
|
override func numberOfSections(in tableView: UITableView) -> Int
|
||||||
|
{
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
|
||||||
|
{
|
||||||
|
return fileData.currentDirList.count + fileData.currentFileList.count
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
|
||||||
|
{
|
||||||
|
let cell = self.tableView.dequeueReusableCell(withIdentifier: "fileEntry", for: indexPath) as! FileManagerCell
|
||||||
|
let row = indexPath.row
|
||||||
|
|
||||||
|
if row < fileData.currentDirList.count {
|
||||||
|
cell.fileName = fileData.currentDirList[row]
|
||||||
|
cell.fileLabel.text = cell.fileName + "/"
|
||||||
|
cell.isDirectory = true
|
||||||
|
} else {
|
||||||
|
let inx = row - fileData.currentDirList.count
|
||||||
|
cell.fileName = fileData.currentFileList[inx]
|
||||||
|
cell.fileLabel.text = cell.fileName
|
||||||
|
cell.isDirectory = false
|
||||||
|
}
|
||||||
|
return cell
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Select a row (file) and show actions
|
||||||
|
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
|
||||||
|
{
|
||||||
|
selectedRow = indexPath
|
||||||
|
performSegue(withIdentifier: "showActions", sender: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Support function
|
||||||
|
func reloadData()
|
||||||
|
{
|
||||||
|
selectedRow = nil
|
||||||
|
tableView.reloadData()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Space holder for extra information needed to do the right thing for each action
|
||||||
|
class FileManagerCell: UITableViewCell {
|
||||||
|
|
||||||
|
@IBOutlet weak var fileLabel: UILabel!
|
||||||
|
var isDirectory : Bool = false
|
||||||
|
var fileName : String = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Protocol for action popover callback
|
||||||
|
protocol FileActionsControlDelegate
|
||||||
{
|
{
|
||||||
super.viewDidLoad()
|
func actionOpen()
|
||||||
buttonSelectStorage.isEnabled=fileData.iCloudEnabled()
|
func actionDelete()
|
||||||
|
func actionRename(_ name : String)
|
||||||
|
func actionUploadDownload()
|
||||||
|
func actionLevelUp()
|
||||||
|
func actionCreateDirectory(_ name : String)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Tooglebetweenlocalandcloudstorage
|
// Action popover dialog
|
||||||
@IBActionfuncdoSelectStorage(_sender:UIBarButtonItem)
|
class FileManagerActions : UITableViewController
|
||||||
{
|
|
||||||
sender.image=fileData.selectStorage(true)?#imageLiteral(resourceName:"iCloudDrive"):#imageLiteral(resourceName:"iPhone")
|
|
||||||
reloadData()
|
|
||||||
self.presentedViewController?.dismiss(animated:true,completion:nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Laststopbeforedisplayingpopover
|
|
||||||
overridefuncprepare(forsegue:UIStoryboardSegue,sender:Any?)
|
|
||||||
{
|
|
||||||
ifsegue.identifier=="showActions"{
|
|
||||||
letvc=segue.destinationas!FileManagerActions
|
|
||||||
vc.delegate=self
|
|
||||||
vc.inFileSelect=(selectedRow!=nil)
|
|
||||||
vc.inSubDirectory=fileData.isSubDirectory()
|
|
||||||
vc.useCloud=fileData.iCloudEnabled()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcactionOpen()
|
|
||||||
{
|
|
||||||
ifselectedRow!=nil{
|
|
||||||
letcurrentCell=tableView.cellForRow(at:selectedRow!)as!FileManagerCell
|
|
||||||
ifcurrentCell.isDirectory{
|
|
||||||
fileData.enterDirectory(currentCell.fileName)
|
|
||||||
reloadData()
|
|
||||||
}else{
|
|
||||||
//JIXdelegatetoDocument
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcactionDelete()
|
|
||||||
{
|
|
||||||
ifselectedRow!=nil{
|
|
||||||
letcurrentCell=self.tableView.cellForRow(at:selectedRow!)as!FileManagerCell
|
|
||||||
fileData.deleteFileDirectory(currentCell.fileName)
|
|
||||||
reloadData()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcactionRename(_name:String)
|
|
||||||
{
|
|
||||||
ifselectedRow!=nil{
|
|
||||||
letcurrentCell=tableView.cellForRow(at:selectedRow!)as!FileManagerCell
|
|
||||||
fileData.renameFile(currentCell.fileName,name)
|
|
||||||
reloadData()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcactionUploadDownload()
|
|
||||||
{
|
|
||||||
ifselectedRow!=nil{
|
|
||||||
letcurrentCell=self.tableView.cellForRow(at:selectedRow!)as!FileManagerCell
|
|
||||||
fileData.copyFile(currentCell.fileName)
|
|
||||||
reloadData()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcactionLevelUp()
|
|
||||||
{
|
|
||||||
fileData.leaveDirectory()
|
|
||||||
reloadData()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funcactionCreateDirectory(_name:String)
|
|
||||||
{
|
|
||||||
fileData.createDirectory(name)
|
|
||||||
reloadData()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Tablehandlingfunctions
|
|
||||||
overridefuncnumberOfSections(intableView:UITableView)->Int
|
|
||||||
{
|
|
||||||
return1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
overridefunctableView(_tableView:UITableView,numberOfRowsInSectionsection:Int)->Int
|
|
||||||
{
|
|
||||||
returnfileData.currentDirList.count+fileData.currentFileList.count
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
overridefunctableView(_tableView:UITableView,cellForRowAtindexPath:IndexPath)->UITableViewCell
|
|
||||||
{
|
|
||||||
letcell=self.tableView.dequeueReusableCell(withIdentifier:"fileEntry",for:indexPath)as!FileManagerCell
|
|
||||||
letrow=indexPath.row
|
|
||||||
|
|
||||||
ifrow<fileData.currentDirList.count{
|
|
||||||
cell.fileName=fileData.currentDirList[row]
|
|
||||||
cell.fileLabel.text=cell.fileName+"/"
|
|
||||||
cell.isDirectory=true
|
|
||||||
}else{
|
|
||||||
letinx=row-fileData.currentDirList.count
|
|
||||||
cell.fileName=fileData.currentFileList[inx]
|
|
||||||
cell.fileLabel.text=cell.fileName
|
|
||||||
cell.isDirectory=false
|
|
||||||
}
|
|
||||||
returncell
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Selectarow(file)andshowactions
|
|
||||||
overridefunctableView(_tableView:UITableView,didSelectRowAtindexPath:IndexPath)
|
|
||||||
{
|
|
||||||
selectedRow=indexPath
|
|
||||||
performSegue(withIdentifier:"showActions",sender:self)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Supportfunction
|
|
||||||
funcreloadData()
|
|
||||||
{
|
|
||||||
selectedRow=nil
|
|
||||||
tableView.reloadData()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Spaceholderforextrainformationneededtodotherightthingforeachaction
|
|
||||||
classFileManagerCell:UITableViewCell{
|
|
||||||
|
|
||||||
@IBOutletweakvarfileLabel:UILabel!
|
|
||||||
varisDirectory:Bool=false
|
|
||||||
varfileName:String=""
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Protocolforactionpopovercallback
|
|
||||||
protocolactionsControlDelegate
|
|
||||||
{
|
|
||||||
funcactionOpen()
|
|
||||||
funcactionDelete()
|
|
||||||
funcactionRename(_name:String)
|
|
||||||
funcactionUploadDownload()
|
|
||||||
funcactionLevelUp()
|
|
||||||
funcactionCreateDirectory(_name:String)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Actionpopoverdialog
|
|
||||||
classFileManagerActions:UITableViewController
|
|
||||||
|
|
||||||
{
|
{
|
||||||
//Pointertocallbackclass
|
// Pointer to callback class
|
||||||
vardelegate:actionsControlDelegate?
|
var delegate : FileActionsControlDelegate?
|
||||||
varinSubDirectory:Bool=false
|
var inSubDirectory : Bool = false
|
||||||
varinFileSelect:Bool=false
|
var inFileSelect : Bool = false
|
||||||
varuseCloud:Bool=false
|
var useCloud : Bool = false
|
||||||
|
|
||||||
//Callingclassmightenable/disableeachbutton
|
// Calling class might enable/disable each button
|
||||||
@IBOutletweakvarbuttonUploadDownload:UIButton!
|
@IBOutlet weak var buttonUploadDownload: UIButton!
|
||||||
@IBOutletweakvarbuttonDelete:UIButton!
|
@IBOutlet weak var buttonDelete: UIButton!
|
||||||
@IBOutletweakvarbuttonOpen:UIButton!
|
@IBOutlet weak var buttonOpen: UIButton!
|
||||||
@IBOutletweakvarbuttonRename:UIButton!
|
@IBOutlet weak var buttonRename: UIButton!
|
||||||
@IBOutletweakvarbuttonLevelUp:UIButton!
|
@IBOutlet weak var buttonLevelUp: UIButton!
|
||||||
|
|
||||||
|
|
||||||
//Actions
|
// Actions
|
||||||
@IBActionfuncdoOpen(_sender:UIButton)
|
@IBAction func doOpen(_ sender: UIButton)
|
||||||
{
|
{
|
||||||
delegate?.actionOpen()
|
delegate?.actionOpen()
|
||||||
dismiss(animated:false)
|
dismiss(animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@IBAction func doDelete(_ sender: UIButton)
|
||||||
|
{
|
||||||
|
delegate?.actionDelete()
|
||||||
|
dismiss(animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@IBAction func doUploadDownload(_ sender: UIButton)
|
||||||
|
{
|
||||||
|
delegate?.actionUploadDownload()
|
||||||
|
dismiss(animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@IBAction func doLevelUp(_ sender: UIButton)
|
||||||
|
{
|
||||||
|
delegate?.actionLevelUp()
|
||||||
|
dismiss(animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
override func viewDidLoad()
|
||||||
|
{
|
||||||
|
super.viewDidLoad()
|
||||||
|
buttonLevelUp.isEnabled = inSubDirectory
|
||||||
|
buttonDelete.isEnabled = inFileSelect
|
||||||
|
buttonOpen.isEnabled = inFileSelect
|
||||||
|
buttonRename.isEnabled = inFileSelect
|
||||||
|
buttonUploadDownload.isEnabled = (inFileSelect && useCloud)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Last stop before displaying popover
|
||||||
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
|
||||||
|
{
|
||||||
|
let vc = segue.destination as! setNameAction
|
||||||
|
vc.delegateFile = self.delegate
|
||||||
|
vc.protocolActionToPerform = (segue.identifier == "showRename") ? 0 : 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@IBActionfuncdoDelete(_sender:UIButton)
|
// Action popover dialog
|
||||||
{
|
class setNameAction : UIViewController
|
||||||
delegate?.actionDelete()
|
|
||||||
dismiss(animated:false)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@IBActionfuncdoUploadDownload(_sender:UIButton)
|
|
||||||
{
|
|
||||||
delegate?.actionUploadDownload()
|
|
||||||
dismiss(animated:false)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@IBActionfuncdoLevelUp(_sender:UIButton)
|
|
||||||
{
|
|
||||||
delegate?.actionLevelUp()
|
|
||||||
dismiss(animated:false)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
overridefuncviewDidLoad()
|
|
||||||
{
|
|
||||||
super.viewDidLoad()
|
|
||||||
buttonLevelUp.isEnabled=inSubDirectory
|
|
||||||
buttonDelete.isEnabled=inFileSelect
|
|
||||||
buttonOpen.isEnabled=inFileSelect
|
|
||||||
buttonRename.isEnabled=inFileSelect
|
|
||||||
buttonUploadDownload.isEnabled=(inFileSelect&&useCloud)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Laststopbeforedisplayingpopover
|
|
||||||
overridefuncprepare(forsegue:UIStoryboardSegue,sender:Any?)
|
|
||||||
{
|
|
||||||
letvc=segue.destinationas!setNameAction
|
|
||||||
vc.delegate=self.delegate
|
|
||||||
vc.protocolActionToPerform=(segue.identifier=="showRename")?0:1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Actionpopoverdialog
|
|
||||||
classsetNameAction:UIViewController
|
|
||||||
|
|
||||||
{
|
{
|
||||||
//Pointertocallbackclass
|
// Pointer to callback class
|
||||||
vardelegate:actionsControlDelegate?
|
var delegateFile : FileActionsControlDelegate?
|
||||||
varprotocolActionToPerform:Int=-1
|
var delegateDoc : DocumentActionsControlDelegate?
|
||||||
|
var protocolActionToPerform : Int = -1
|
||||||
|
|
||||||
|
|
||||||
//Callingclassmightenable/disableeachbutton
|
// Calling class might enable/disable each button
|
||||||
@IBOutletweakvareditText:UITextField!
|
@IBOutlet weak var editText: UITextField!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@IBActionfuncdoOK(_sender:UIButton)
|
@IBAction func doOK(_ sender: UIButton)
|
||||||
{
|
{
|
||||||
print("checking\(protocolActionToPerform)")
|
switch protocolActionToPerform
|
||||||
switchprotocolActionToPerform
|
{
|
||||||
{
|
case 0: // renameDir
|
||||||
case0:
|
delegateFile?.actionRename(editText.text!)
|
||||||
print("runrenameDir")
|
case 1: // createDir
|
||||||
delegate?.actionRename(editText.text!)
|
delegateFile?.actionCreateDirectory(editText.text!)
|
||||||
case1:
|
case 2: // New
|
||||||
print("runcreateDir")
|
delegateDoc?.actionNew(editText.text!)
|
||||||
delegate?.actionCreateDirectory(editText.text!)
|
case 3: // SaveAs
|
||||||
default:
|
delegateDoc?.actionSaveAs(editText.text!)
|
||||||
break
|
default:
|
||||||
}
|
break
|
||||||
dismiss(animated:false)
|
}
|
||||||
}
|
dismiss(animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
overridefuncviewDidLoad()
|
|
||||||
{
|
override func viewDidLoad()
|
||||||
super.viewDidLoad()
|
{
|
||||||
}
|
super.viewDidLoad()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -26,27 +26,19 @@
|
|||||||
</view>
|
</view>
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationItem key="navigationItem" title="Document" id="5c6-32-T4J">
|
<navigationItem key="navigationItem" title="Document" id="5c6-32-T4J">
|
||||||
<barButtonItem key="leftBarButtonItem" image="menu" id="fdq-Uw-536">
|
<barButtonItem key="leftBarButtonItem" image="menu" id="fdq-Uw-536"/>
|
||||||
|
<barButtonItem key="rightBarButtonItem" systemItem="action" id="BNq-ol-ZVK">
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="doMenu:" destination="vXZ-lx-hvc" id="sJP-Fp-Kn2"/>
|
<segue destination="IER-X5-Ax8" kind="popoverPresentation" identifier="showActions" popoverAnchorBarButtonItem="BNq-ol-ZVK" id="xmZ-1A-ZrW">
|
||||||
|
<popoverArrowDirection key="popoverArrowDirection" up="YES" down="YES" left="YES" right="YES"/>
|
||||||
|
</segue>
|
||||||
</connections>
|
</connections>
|
||||||
</barButtonItem>
|
</barButtonItem>
|
||||||
<rightBarButtonItems>
|
|
||||||
<barButtonItem systemItem="action" id="BNq-ol-ZVK">
|
|
||||||
<connections>
|
|
||||||
<segue destination="IER-X5-Ax8" kind="popoverPresentation" identifier="doShowActions" popoverAnchorBarButtonItem="BNq-ol-ZVK" id="xmZ-1A-ZrW">
|
|
||||||
<popoverArrowDirection key="popoverArrowDirection" up="YES" down="YES" left="YES" right="YES"/>
|
|
||||||
</segue>
|
|
||||||
</connections>
|
|
||||||
</barButtonItem>
|
|
||||||
<barButtonItem title="Item" id="0Cf-rp-1Gn">
|
|
||||||
<connections>
|
|
||||||
<segue destination="cip-1Z-62J" kind="show" id="0sd-5x-euH"/>
|
|
||||||
</connections>
|
|
||||||
</barButtonItem>
|
|
||||||
</rightBarButtonItems>
|
|
||||||
</navigationItem>
|
</navigationItem>
|
||||||
<simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
|
<simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
|
||||||
|
<connections>
|
||||||
|
<segue destination="cip-1Z-62J" kind="show" identifier="showFileManager" id="0PG-d7-Fy1"/>
|
||||||
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
@@ -65,7 +57,7 @@
|
|||||||
<rect key="frame" x="0.0" y="28" width="768" height="44"/>
|
<rect key="frame" x="0.0" y="28" width="768" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="kKu-xM-S1e" id="80i-6K-kty">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="kKu-xM-S1e" id="80i-6K-kty">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="768" height="43.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="768" height="43"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="fileEntry" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vlx-gc-YQQ">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="fileEntry" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vlx-gc-YQQ">
|
||||||
@@ -142,7 +134,7 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="VuG-w2-cW6" id="8SA-cA-5eZ">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="VuG-w2-cW6" id="8SA-cA-5eZ">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZSm-By-dJs">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZSm-By-dJs">
|
||||||
@@ -160,7 +152,7 @@
|
|||||||
<rect key="frame" x="0.0" y="30" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="30" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="L5l-rq-TxW" id="dmK-Lh-hje">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="L5l-rq-TxW" id="dmK-Lh-hje">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="IQ3-hK-KmM">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="IQ3-hK-KmM">
|
||||||
@@ -178,7 +170,7 @@
|
|||||||
<rect key="frame" x="0.0" y="60" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="60" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="gCu-Su-BAB" id="P2T-Nb-OqI">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="gCu-Su-BAB" id="P2T-Nb-OqI">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BSN-dd-e84">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BSN-dd-e84">
|
||||||
@@ -196,7 +188,7 @@
|
|||||||
<rect key="frame" x="0.0" y="90" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="90" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="b9s-rz-SjN" id="NVs-9k-H8m">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="b9s-rz-SjN" id="NVs-9k-H8m">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5Rk-LW-Ub9">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5Rk-LW-Ub9">
|
||||||
@@ -216,7 +208,7 @@
|
|||||||
<rect key="frame" x="0.0" y="120" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="120" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="bzW-XI-AgR" id="z9x-qQ-lou">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="bzW-XI-AgR" id="z9x-qQ-lou">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fNi-5u-PqA">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fNi-5u-PqA">
|
||||||
@@ -234,7 +226,7 @@
|
|||||||
<rect key="frame" x="0.0" y="150" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="150" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="1ne-Jo-yKA" id="qmx-Us-SWx">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="1ne-Jo-yKA" id="qmx-Us-SWx">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pir-sf-icw">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pir-sf-icw">
|
||||||
@@ -570,7 +562,7 @@
|
|||||||
<!--Document Actions-->
|
<!--Document Actions-->
|
||||||
<scene sceneID="U7J-9A-X5o">
|
<scene sceneID="U7J-9A-X5o">
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController autoresizesArchivedViewToFullSize="NO" title="Document Actions" modalTransitionStyle="crossDissolve" modalPresentationStyle="overCurrentContext" clearsSelectionOnViewWillAppear="NO" id="IER-X5-Ax8" customClass="DocumentActions" customModule="LibreOfficeLight" customModuleProvider="target" sceneMemberID="viewController">
|
<tableViewController autoresizesArchivedViewToFullSize="NO" title="Document Actions" automaticallyAdjustsScrollViewInsets="NO" modalTransitionStyle="crossDissolve" modalPresentationStyle="overCurrentContext" clearsSelectionOnViewWillAppear="NO" id="IER-X5-Ax8" customClass="DocumentActions" customModule="LibreOfficeLight" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="30" sectionHeaderHeight="28" sectionFooterHeight="28" id="RqF-IL-YJc">
|
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="30" sectionHeaderHeight="28" sectionFooterHeight="28" id="RqF-IL-YJc">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="210"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="210"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||||
@@ -582,7 +574,7 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KLS-lN-QYa" id="dA0-Ji-bxj">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KLS-lN-QYa" id="dA0-Ji-bxj">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mCx-kB-iUI">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mCx-kB-iUI">
|
||||||
@@ -590,7 +582,9 @@
|
|||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<state key="normal" title="New"/>
|
<state key="normal" title="New"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="doNew:" destination="IER-X5-Ax8" eventType="touchUpInside" id="nAN-4l-w68"/>
|
<segue destination="99b-cf-b84" kind="popoverPresentation" identifier="showNew" popoverAnchorView="mCx-kB-iUI" id="NIs-pA-xdK">
|
||||||
|
<popoverArrowDirection key="popoverArrowDirection" up="YES" down="YES" left="YES" right="YES"/>
|
||||||
|
</segue>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -600,7 +594,7 @@
|
|||||||
<rect key="frame" x="0.0" y="30" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="30" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="VNE-JL-Lw0" id="EB2-HA-y79">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="VNE-JL-Lw0" id="EB2-HA-y79">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="myk-zs-md7">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="myk-zs-md7">
|
||||||
@@ -608,7 +602,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<state key="normal" title="Open..."/>
|
<state key="normal" title="Open..."/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="doOpen:" destination="IER-X5-Ax8" eventType="touchUpInside" id="2AU-aR-NF4"/>
|
<action selector="doOpen:" destination="IER-X5-Ax8" eventType="touchUpInside" id="Nk2-o7-3r9"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -618,7 +612,7 @@
|
|||||||
<rect key="frame" x="0.0" y="60" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="60" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="mPa-wa-TDO" id="jhW-pd-Qkl">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="mPa-wa-TDO" id="jhW-pd-Qkl">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Iva-rO-9V3">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Iva-rO-9V3">
|
||||||
@@ -626,7 +620,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<state key="normal" title="Delete..."/>
|
<state key="normal" title="Delete..."/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="doDelete:" destination="IER-X5-Ax8" eventType="touchUpInside" id="mFt-G6-sGA"/>
|
<action selector="doDelete:" destination="IER-X5-Ax8" eventType="touchUpInside" id="WhW-7L-FOo"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -636,7 +630,7 @@
|
|||||||
<rect key="frame" x="0.0" y="90" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="90" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="XW7-H5-0ob" id="lJN-OL-mO8">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="XW7-H5-0ob" id="lJN-OL-mO8">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="b90-ja-Wm0">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="b90-ja-Wm0">
|
||||||
@@ -644,8 +638,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<state key="normal" title="Save"/>
|
<state key="normal" title="Save"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="doOpen:" destination="IER-X5-Ax8" eventType="touchUpInside" id="3N4-Kv-vVS"/>
|
<action selector="doSave:" destination="IER-X5-Ax8" eventType="touchUpInside" id="7Uc-hy-ogX"/>
|
||||||
<action selector="doSave:" destination="IER-X5-Ax8" eventType="touchUpInside" id="rsu-KH-DDF"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -655,7 +648,7 @@
|
|||||||
<rect key="frame" x="0.0" y="120" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="120" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="fqs-uC-KiW" id="nT7-Ly-JW5">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="fqs-uC-KiW" id="nT7-Ly-JW5">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ioJ-xc-RrS">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ioJ-xc-RrS">
|
||||||
@@ -663,7 +656,9 @@
|
|||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<state key="normal" title="Save as..."/>
|
<state key="normal" title="Save as..."/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="doOpen:" destination="IER-X5-Ax8" eventType="touchUpInside" id="IhZ-cb-cgC"/>
|
<segue destination="99b-cf-b84" kind="popoverPresentation" identifier="showSaveAs" popoverAnchorView="ioJ-xc-RrS" id="etF-bX-EXf">
|
||||||
|
<popoverArrowDirection key="popoverArrowDirection" up="YES" down="YES" left="YES" right="YES"/>
|
||||||
|
</segue>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -673,7 +668,7 @@
|
|||||||
<rect key="frame" x="0.0" y="150" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="150" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="GmK-gj-GYu" id="3OK-Zz-mqN">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="GmK-gj-GYu" id="3OK-Zz-mqN">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="apE-3B-lUt">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="apE-3B-lUt">
|
||||||
@@ -681,8 +676,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<state key="normal" title="PDF"/>
|
<state key="normal" title="PDF"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="doOpen:" destination="IER-X5-Ax8" eventType="touchUpInside" id="utd-hj-l3F"/>
|
<action selector="doPDF:" destination="IER-X5-Ax8" eventType="touchUpInside" id="ATe-5t-jab"/>
|
||||||
<action selector="doPDF:" destination="IER-X5-Ax8" eventType="touchUpInside" id="fm0-3u-e0T"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -692,15 +686,15 @@
|
|||||||
<rect key="frame" x="0.0" y="180" width="134" height="30"/>
|
<rect key="frame" x="0.0" y="180" width="134" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="1ly-sz-g0x" id="wVi-tX-eKD">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="1ly-sz-g0x" id="wVi-tX-eKD">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="134" height="29.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="134" height="29"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="516-b0-K4N">
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="516-b0-K4N" userLabel="Button Print">
|
||||||
<rect key="frame" x="8" y="-1" width="118" height="30"/>
|
<rect key="frame" x="8" y="-1" width="118" height="30"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<state key="normal" title="Print..."/>
|
<state key="normal" title="Print..."/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="doOpen:" destination="IER-X5-Ax8" eventType="touchUpInside" id="tqe-2K-EJc"/>
|
<action selector="doPrint:" destination="IER-X5-Ax8" eventType="touchUpInside" id="07n-Ba-Tp9"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -714,12 +708,22 @@
|
|||||||
<outlet property="delegate" destination="IER-X5-Ax8" id="sji-7W-aF0"/>
|
<outlet property="delegate" destination="IER-X5-Ax8" id="sji-7W-aF0"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableView>
|
</tableView>
|
||||||
|
<extendedEdge key="edgesForExtendedLayout"/>
|
||||||
<value key="contentSizeForViewInPopover" type="size" width="200" height="230"/>
|
<value key="contentSizeForViewInPopover" type="size" width="200" height="230"/>
|
||||||
<nil key="simulatedStatusBarMetrics"/>
|
<nil key="simulatedStatusBarMetrics"/>
|
||||||
<nil key="simulatedTopBarMetrics"/>
|
<nil key="simulatedTopBarMetrics"/>
|
||||||
<nil key="simulatedBottomBarMetrics"/>
|
<nil key="simulatedBottomBarMetrics"/>
|
||||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||||
<size key="freeformSize" width="134" height="210"/>
|
<size key="freeformSize" width="134" height="210"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="buttonDelete" destination="Iva-rO-9V3" id="i8x-8H-YoE"/>
|
||||||
|
<outlet property="buttonNew" destination="mCx-kB-iUI" id="70b-Qo-y3M"/>
|
||||||
|
<outlet property="buttonOpen" destination="myk-zs-md7" id="XLW-EG-UgD"/>
|
||||||
|
<outlet property="buttonPDF" destination="apE-3B-lUt" id="j3U-Dx-UxJ"/>
|
||||||
|
<outlet property="buttonPrint" destination="516-b0-K4N" id="WL3-KB-jS1"/>
|
||||||
|
<outlet property="buttonSave" destination="b90-ja-Wm0" id="GPH-29-EFu"/>
|
||||||
|
<outlet property="buttonSaveAs" destination="ioJ-xc-RrS" id="Ndn-1D-CcB"/>
|
||||||
|
</connections>
|
||||||
</tableViewController>
|
</tableViewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="D6j-Ov-CSK" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="D6j-Ov-CSK" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
@@ -738,7 +742,7 @@
|
|||||||
<image name="saveas" width="20" height="20"/>
|
<image name="saveas" width="20" height="20"/>
|
||||||
</resources>
|
</resources>
|
||||||
<inferredMetricsTieBreakers>
|
<inferredMetricsTieBreakers>
|
||||||
<segue reference="0sd-5x-euH"/>
|
<segue reference="0PG-d7-Fy1"/>
|
||||||
<segue reference="nga-Gl-Vki"/>
|
<segue reference="etF-bX-EXf"/>
|
||||||
</inferredMetricsTieBreakers>
|
</inferredMetricsTieBreakers>
|
||||||
</document>
|
</document>
|
||||||
|
Reference in New Issue
Block a user