From d3a00dc3946fab6e2bad165daa3a78d0afd586e7 Mon Sep 17 00:00:00 2001 From: Phani Pavan K Date: Wed, 25 Feb 2026 23:58:41 +0530 Subject: [PATCH] added launch buttons --- lib/models/project.dart | 53 +++++++++----- lib/views/managePrj.dart | 3 +- lib/widgets/editorSelector.dart | 21 ++++++ lib/widgets/prjFAB.dart | 2 - lib/widgets/projectCard.dart | 118 ++++++++++++++++++++++---------- 5 files changed, 137 insertions(+), 60 deletions(-) create mode 100644 lib/widgets/editorSelector.dart diff --git a/lib/models/project.dart b/lib/models/project.dart index 773bfee..c8421b5 100644 --- a/lib/models/project.dart +++ b/lib/models/project.dart @@ -6,26 +6,24 @@ class Project { final String name; final String language; final File path; - final List editors; + final Editor? e0; + final Editor? e1; + final Editor? e2; + final Editor? e3; final bool isGit; - final bool enableTerminal; Project( this.name, this.language, this.path, - this.editors, - this.isGit, - this.enableTerminal, - ); + this.isGit, { + this.e0 = null, + this.e1 = null, + this.e2 = null, + this.e3 = null, + }); - factory Project.newValidated( - String name, - String lang, - String path, - List editors, - bool enableTerminal, - ) { + factory Project.newValidated(String name, String lang, String path) { final File fpath = File(path); print(fpath.absolute.path); if (fpath.existsSync()) { @@ -36,28 +34,45 @@ class Project { String gitPath = p.join(path, ".git", "HEAD"); final bool isGit = File(gitPath).existsSync(); - return Project(name, lang, fpath, editors, isGit, enableTerminal); + return Project(name, lang, fpath, isGit); } Map toJson() { - return { + Map fin = { "name": name, "language": language, "path": path.path, - "editors": editors, "isGit": isGit, - "enableTerminal": enableTerminal, }; + if (e0 == null) { + fin["e0"] = e0; + } + if (e1 == null) { + fin["e1"] = e1; + } + if (e2 == null) { + fin["e2"] = e2; + } + if (e3 == null) { + fin["e3"] = e3; + } + return fin; } factory Project.fromJson(Map data) { + final Editor? e0 = data["e0"]; + final Editor? e1 = data["e1"]; + final Editor? e2 = data["e2"]; + final Editor? e3 = data["e3"]; return Project( data["name"] as String, data["language"] as String, File(data["path"] as String), - (data["editors"] as List).map((a) => a.toString()).toList(), data["isGit"] as bool, - data["enableTerminal"] as bool, + e0: e0, + e1: e1, + e2: e2, + e3: e3, ); } diff --git a/lib/views/managePrj.dart b/lib/views/managePrj.dart index 37b7d1c..99f18d8 100644 --- a/lib/views/managePrj.dart +++ b/lib/views/managePrj.dart @@ -77,6 +77,7 @@ class ManageProject extends StatelessWidget { ), ), ), + SliverList.list(children: [Row(children: [])]), SliverList.list( children: [ @@ -109,9 +110,7 @@ class ManageProject extends StatelessWidget { nameController.text, langController.text, File(pathController.text), - prj.editors, prj.isGit, - prj.enableTerminal, ), ); ScaffoldMessenger.of(context).showSnackBar( diff --git a/lib/widgets/editorSelector.dart b/lib/widgets/editorSelector.dart new file mode 100644 index 0000000..df4f4b9 --- /dev/null +++ b/lib/widgets/editorSelector.dart @@ -0,0 +1,21 @@ +import "package:flutter/material.dart"; +import "package:prod/models/editor.dart"; +import "package:yaru/yaru.dart"; + +class Editorselector extends StatelessWidget { + const Editorselector(this.turns, {super.key}); + final int turns; + + @override + Widget build(BuildContext context) { + return Row( + children: [ + RotatedBox( + child: Icon(Icons.rounded_corner_rounded), + quarterTurns: this.turns, + ), + // YaruPopupMenuButton(child: ,), + ], + ); + } +} diff --git a/lib/widgets/prjFAB.dart b/lib/widgets/prjFAB.dart index 987931a..0bcecad 100644 --- a/lib/widgets/prjFAB.dart +++ b/lib/widgets/prjFAB.dart @@ -57,8 +57,6 @@ class ProjFAB extends StatelessWidget { nameController.text, languageController.text, locationController.text, - [], - true, ), ); diff --git a/lib/widgets/projectCard.dart b/lib/widgets/projectCard.dart index d0c7e1f..33b3775 100644 --- a/lib/widgets/projectCard.dart +++ b/lib/widgets/projectCard.dart @@ -14,51 +14,95 @@ class ProjectCard extends StatelessWidget { Widget build(BuildContext context) { GlobalModel gm = Provider.of(context); final Project prj = gm.nthPrj(id); - return YaruBanner( - padding: .only( - left: kYaruPagePadding, - top: kYaruPagePadding * 0.5, - bottom: kYaruPagePadding, - right: kYaruPagePadding, - ), + return InkWell( onHover: (st) => gm.setHoverShow(id, st), - onTap: () { - // var shell = Shell(); - // Editor edt1 = gm.editors[0]; - // String comm = edt1.commandTemplate.replaceAll("\$path", prj.path.path); - // shell.run(comm); - // ScaffoldMessenger.of(context).showSnackBar( - // SnackBar(content: Text("Launched "), duration: Duration(seconds: 3)), - // ); - Navigator.pushNamed(context, "/manageprj", arguments: id); + borderRadius: .circular(kYaruContainerRadius), + onTap: () async { + await Navigator.pushNamed(context, "/manageprj", arguments: id); }, - child: Center( - child: Column( - mainAxisAlignment: .start, - crossAxisAlignment: .start, + child: Card( + // decoration: BoxDecoration( + // border: Border.all(color: Theme.of(context).dividerColor), + // borderRadius: .circular(kYaruContainerRadius), + // ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular( + kYaruContainerRadius, + ).inner(const EdgeInsets.all(4)), + side: BorderSide(color: Theme.of(context).dividerColor, width: 0), + ), + color: Colors.white, + shadowColor: Colors.transparent, + child: Row( + mainAxisAlignment: .spaceBetween, children: [ - Text( - "${prj.name}", - style: TextStyle(fontSize: 30), - overflow: .ellipsis, + Container( + padding: .only( + top: kYaruPagePadding * 0.5, + left: kYaruPagePadding * 0.5, + ), + child: Column( + mainAxisAlignment: .start, + crossAxisAlignment: .start, + children: [ + Text( + "${prj.name}", + style: TextStyle(fontSize: 30), + overflow: .ellipsis, + ), + Row( + spacing: 10, + children: [ + Text("${prj.language}", overflow: .ellipsis), + prj.isGit ? Icon(Icons.commit) : Container(), + ], + ), + gm.getHoverShow(id) + ? Text("${prj.path.path}", overflow: .ellipsis) + : Container(), + // gm.getHoverShow(id) + // ? IconButton( + // icon: Icon(Icons.close), + // onPressed: () => gm.delPrj(id), + // style: IconButton.styleFrom( + // overlayColor: Color(0xffff0000), + // ), + // ) + // : Container(), + ], + ), ), Row( - spacing: 10, children: [ - Text("${prj.language}"), - prj.isGit ? Icon(Icons.commit) : Container(), + Column( + children: [ + Expanded( + flex: 1, + child: TextButton(child: Text("Ze"), onPressed: () {}), + ), + Expanded( + flex: 1, + child: TextButton(child: Text("Ze"), onPressed: () {}), + ), + ], + ), + Column( + children: [ + Expanded( + child: TextButton(child: Text("Ze"), onPressed: () {}), + ), + true + ? Expanded( + child: TextButton( + child: Text("Ze"), + onPressed: () {}, + ), + ) + : Container(), + ], + ), ], ), - gm.getHoverShow(id) ? Text("${prj.path.path}") : Container(), - // gm.getHoverShow(id) - // ? IconButton( - // icon: Icon(Icons.close), - // onPressed: () => gm.delPrj(id), - // style: IconButton.styleFrom( - // overlayColor: Color(0xffff0000), - // ), - // ) - // : Container(), ], ), ),